diff --git a/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml b/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml
index f8f9b8f0afbe..edebc1bbf0a4 100644
--- a/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml
+++ b/.github/ISSUE_TEMPLATE/01_battle_engine_bugs.yaml
@@ -23,20 +23,18 @@ body:
label: Version
description: What version of pokeemerald-expansion are you using as a base?
options:
- - 1.8.5 (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
- 1.8.3
- 1.8.2
- 1.8.1
- 1.8.0
- - 1.7.4
- - 1.7.3
- - 1.7.2
- - 1.7.1
- - 1.7.0
- - pre-1.7.0
+ - pre-1.8.0
validations:
required: true
- type: input
diff --git a/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml b/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml
index c29ace1224f8..dd3024230be5 100644
--- a/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml
+++ b/.github/ISSUE_TEMPLATE/02_battle_ai_issues.yaml
@@ -23,20 +23,18 @@ body:
label: Version
description: What version of pokeemerald-expansion are you using as a base?
options:
- - 1.8.5 (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
- 1.8.3
- 1.8.2
- 1.8.1
- 1.8.0
- - 1.7.4
- - 1.7.3
- - 1.7.2
- - 1.7.1
- - 1.7.0
- - pre-1.7.0
+ - pre-1.8.0
validations:
required: true
- type: input
diff --git a/.github/ISSUE_TEMPLATE/04_other_errors.yaml b/.github/ISSUE_TEMPLATE/04_other_errors.yaml
index c3320e67de32..29960c267b88 100644
--- a/.github/ISSUE_TEMPLATE/04_other_errors.yaml
+++ b/.github/ISSUE_TEMPLATE/04_other_errors.yaml
@@ -23,20 +23,18 @@ body:
label: Version
description: What version of pokeemerald-expansion are you using as a base?
options:
- - 1.8.5 (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
- 1.8.3
- 1.8.2
- 1.8.1
- 1.8.0
- - 1.7.4
- - 1.7.3
- - 1.7.2
- - 1.7.1
- - 1.7.0
- - pre-1.7.0
+ - pre-1.8.0
validations:
required: true
- type: input
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 84331cb4e39b..fb2f38af1d7c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,11 @@
# 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
+- **[Version 1.8.6](docs/changelogs/1.8.x/1.8.6.md) - 🧹 Bugfix Release**
- **[Version 1.8.5](docs/changelogs/1.8.x/1.8.5.md) - 🧹 Bugfix Release**
- **[Version 1.8.4](docs/changelogs/1.8.x/1.8.4.md) - 🧹 Bugfix Release**
- **[Version 1.8.3](docs/changelogs/1.8.x/1.8.3.md) - 🧹 Bugfix Release**
diff --git a/INSTALL.md b/INSTALL.md
index cc6eba97efb5..5744adcb04a9 100644
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -33,27 +33,23 @@ WSL1 is the preferred terminal to build **pokeemerald Expansion**. The following
- Otherwise, **open WSL** and go to [Choosing where to store pokeemerald Expansion (WSL1)](#Choosing-where-to-store-pokeemerald-expansion-WSL1).
### Installing WSL1
-1. Open [Windows Powershell **as Administrator**](https://i.imgur.com/QKmVbP9.png), and run the following command (Right Click or Shift+Insert is paste in the Powershell).
+1. Open [Windows Powershell **as Administrator**](https://i.imgur.com/QKmVbP9.png), and run the following commands (Right Click or Shift+Insert is paste in the Powershell).
```powershell
- dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
+ wsl --install -d Ubuntu --enable-wsl1
```
2. Once the process finishes, restart your machine.
-3. The next step is to choose and install a Linux distribution from the Microsoft Store. The following instructions will assume Ubuntu as the Linux distribution of choice.
-
- Note for advanced users...
-
- > You can pick a preferred Linux distribution, but setup instructions may differ. Debian should work with the given instructions, but has not been tested.
-
+3. Open Windows Powershell **as Administrator** again (after restarting), and run the following command to configure Ubuntu to use WSL1.
-4. Open the [Microsoft Store Linux Selection](https://aka.ms/wslstore), click Ubuntu, then click Get, which will install the Ubuntu distribution.
+ ```powershell
+ wsl --set-version Ubuntu 1
+ ```
- Notes...
+ Note...
- > Note 1: If a dialog pops up asking for you to sign into a Microsoft Account, then just close the dialog.
- > Note 2: If the link does not work, then open the Microsoft Store manually, and search for the Ubuntu app (choose the one with no version number).
+ > WSL may open automatically after restarting, but you can ignore it for now.
### Setting up WSL1
@@ -331,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)
@@ -545,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
diff --git a/Makefile b/Makefile
index ee7de8540b1c..6dacf8b1d348 100644
--- a/Makefile
+++ b/Makefile
@@ -169,12 +169,12 @@ JSONPROC := tools/jsonproc/jsonproc$(EXE)
PATCHELF := tools/patchelf/patchelf$(EXE)
ROMTEST ?= $(shell { command -v mgba-rom-test || command -v tools/mgba/mgba-rom-test$(EXE); } 2>/dev/null)
ROMTESTHYDRA := tools/mgba-rom-test-hydra/mgba-rom-test-hydra$(EXE)
-SCRIPT := tools/poryscript/poryscript$(EXE)
+TRAINERPROC := tools/trainerproc/trainerproc$(EXE)
PERL := perl
# Inclusive list. If you don't want a tool to be built, don't add it here.
-TOOLDIRS := tools/aif2pcm tools/bin2c tools/gbafix tools/gbagfx tools/jsonproc tools/mapjson tools/mid2agb tools/preproc tools/ramscrgen tools/rsfont tools/scaninc
+TOOLDIRS := tools/aif2pcm tools/bin2c tools/gbafix tools/gbagfx tools/jsonproc tools/mapjson tools/mid2agb tools/preproc tools/ramscrgen tools/rsfont tools/scaninc tools/trainerproc
CHECKTOOLDIRS = tools/patchelf tools/mgba-rom-test-hydra
TOOLBASE = $(TOOLDIRS:tools/%=%)
TOOLS = $(foreach tool,$(TOOLBASE),tools/$(tool)/$(tool)$(EXE))
@@ -296,11 +296,10 @@ mostlyclean: tidynonmodern tidymodern tidycheck
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 {} +
rm -f $(DATA_ASM_SUBDIR)/layouts/layouts.inc $(DATA_ASM_SUBDIR)/layouts/layouts_table.inc
- rm -f $(DATA_ASM_SUBDIR)/maps/connections.inc $(DATA_ASM_SUBDIR)/maps/events.inc $(DATA_ASM_SUBDIR)/maps/groups.inc $(DATA_ASM_SUBDIR)/maps/headers.inc
+ rm -f $(DATA_ASM_SUBDIR)/maps/connections.inc $(DATA_ASM_SUBDIR)/maps/events.inc $(DATA_ASM_SUBDIR)/maps/groups.inc $(DATA_ASM_SUBDIR)/maps/headers.inc $(DATA_SRC_SUBDIR)/map_group_count.h
find $(DATA_ASM_SUBDIR)/maps \( -iname 'connections.inc' -o -iname 'events.inc' -o -iname 'header.inc' \) -exec rm {} +
rm -f $(AUTO_GEN_TARGETS)
@$(MAKE) clean -C libagbsyscall
- rm -f $(patsubst %.pory,%.inc,$(shell find data/ -type f -name '*.pory'))
tidy: tidynonmodern tidymodern tidycheck
@@ -332,7 +331,6 @@ include songs.mk
%.png: ;
%.pal: ;
%.aif: ;
-%.pory: ;
%.1bpp: %.png ; $(GFX) $< $@
%.4bpp: %.png ; $(GFX) $< $@
@@ -345,8 +343,11 @@ include songs.mk
$(CRY_SUBDIR)/uncomp_%.bin: $(CRY_SUBDIR)/uncomp_%.aif ; $(AIF) $< $@
$(CRY_SUBDIR)/%.bin: $(CRY_SUBDIR)/%.aif ; $(AIF) $< $@ --compress
sound/%.bin: sound/%.aif ; $(AIF) $< $@
-data/%.inc: data/%.pory; $(SCRIPT) -i $< -o $@ -fc tools/poryscript/font_config.json
+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 - < $< | $(TRAINERPROC) -o $@ -i $< -
+endif
ifeq ($(MODERN),0)
$(C_BUILDDIR)/libc.o: CC1 := tools/agbcc/bin/old_agbcc$(EXE)
@@ -366,6 +367,8 @@ $(C_BUILDDIR)/librfu_intr.o: CFLAGS := -O2 -mthumb-interwork -quiet
else
$(C_BUILDDIR)/librfu_intr.o: CFLAGS := -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -fno-toplevel-reorder -Wno-pointer-to-int-cast
$(C_BUILDDIR)/pokedex_plus_hgss.o: CFLAGS := -mthumb -mthumb-interwork -O2 -mabi=apcs-gnu -mtune=arm7tdmi -march=armv4t -Wno-pointer-to-int-cast -std=gnu17 -Werror -Wall -Wno-strict-aliasing -Wno-attribute-alias -Woverride-init
+# 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)
@@ -381,7 +384,7 @@ ifeq ($(NODEP),1)
$(C_BUILDDIR)/%.o: $(C_SUBDIR)/%.c
ifeq (,$(KEEP_TEMPS))
@echo "$(CC1) -o $@ $<"
- @$(CPP) $(CPPFLAGS) $< | $(PREPROC) $< charmap.txt -i | $(CC1) $(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $(AS) $(ASFLAGS) -o $@ -
+ @$(CPP) $(CPPFLAGS) $< | $(PREPROC) -i $< charmap.txt | $(CC1) $(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $(AS) $(ASFLAGS) -o $@ -
else
@$(CPP) $(CPPFLAGS) $< -o $(C_BUILDDIR)/$*.i
@$(PREPROC) $(C_BUILDDIR)/$*.i charmap.txt | $(CC1) $(CFLAGS) -o $(C_BUILDDIR)/$*.s
@@ -393,7 +396,7 @@ define C_DEP
$1: $2 $$(shell $(SCANINC) -I include -I tools/agbcc/include -I gflib $2)
ifeq (,$$(KEEP_TEMPS))
@echo "$$(CC1) -o $$@ $$<"
- @$$(CPP) $$(CPPFLAGS) $$< | $$(PREPROC) $$< charmap.txt -i | $$(CC1) $$(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $$(AS) $$(ASFLAGS) -o $$@ -
+ @$$(CPP) $$(CPPFLAGS) $$< | $$(PREPROC) -i $$< charmap.txt | $$(CC1) $$(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $$(AS) $$(ASFLAGS) -o $$@ -
else
@$$(CPP) $$(CPPFLAGS) $$< -o $$(C_BUILDDIR)/$3.i
@$$(PREPROC) $$(C_BUILDDIR)/$3.i charmap.txt | $$(CC1) $$(CFLAGS) -o $$(C_BUILDDIR)/$3.s
@@ -408,7 +411,7 @@ ifeq ($(NODEP),1)
$(GFLIB_BUILDDIR)/%.o: $(GFLIB_SUBDIR)/%.c $$(c_dep)
ifeq (,$(KEEP_TEMPS))
@echo "$(CC1) -o $@ $<"
- @$(CPP) $(CPPFLAGS) $< | $(PREPROC) $< charmap.txt -i | $(CC1) $(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $(AS) $(ASFLAGS) -o $@ -
+ @$(CPP) $(CPPFLAGS) $< | $(PREPROC) -i $< charmap.txt | $(CC1) $(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $(AS) $(ASFLAGS) -o $@ -
else
@$(CPP) $(CPPFLAGS) $< -o $(GFLIB_BUILDDIR)/$*.i
@$(PREPROC) $(GFLIB_BUILDDIR)/$*.i charmap.txt | $(CC1) $(CFLAGS) -o $(GFLIB_BUILDDIR)/$*.s
@@ -420,7 +423,7 @@ define GFLIB_DEP
$1: $2 $$(shell $(SCANINC) -I include -I tools/agbcc/include -I gflib $2)
ifeq (,$$(KEEP_TEMPS))
@echo "$$(CC1) -o $$@ $$<"
- @$$(CPP) $$(CPPFLAGS) $$< | $$(PREPROC) $$< charmap.txt -i | $$(CC1) $$(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $$(AS) $$(ASFLAGS) -o $$@ -
+ @$$(CPP) $$(CPPFLAGS) $$< | $$(PREPROC) -i $$< charmap.txt | $$(CC1) $$(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $$(AS) $$(ASFLAGS) -o $$@ -
else
@$$(CPP) $$(CPPFLAGS) $$< -o $$(GFLIB_BUILDDIR)/$3.i
@$$(PREPROC) $$(GFLIB_BUILDDIR)/$3.i charmap.txt | $$(CC1) $$(CFLAGS) -o $$(GFLIB_BUILDDIR)/$3.s
@@ -433,11 +436,11 @@ endif
ifeq ($(NODEP),1)
$(C_BUILDDIR)/%.o: $(C_SUBDIR)/%.s
- $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(AS) $(ASFLAGS) -o $@
+ $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(PREPROC) -i $$< charmap.txt | $(AS) $(ASFLAGS) -o $@
else
define SRC_ASM_DATA_DEP
$1: $2 $$(shell $(SCANINC) -I include -I "" $2)
- $$(PREPROC) $$< charmap.txt | $$(CPP) -I include - | $$(AS) $$(ASFLAGS) -o $$@
+ $$(PREPROC) $$< charmap.txt | $$(CPP) -I include - | $$(PREPROC) -ie $$< charmap.txt | $$(AS) $$(ASFLAGS) -o $$@
endef
$(foreach src, $(C_ASM_SRCS), $(eval $(call SRC_ASM_DATA_DEP,$(patsubst $(C_SUBDIR)/%.s,$(C_BUILDDIR)/%.o, $(src)),$(src))))
endif
@@ -455,7 +458,7 @@ endif
ifeq ($(NODEP),1)
$(DATA_ASM_BUILDDIR)/%.o: $(DATA_ASM_SUBDIR)/%.s
- $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(AS) $(ASFLAGS) -o $@
+ $(PREPROC) $< charmap.txt | $(CPP) -I include - | $(PREPROC) -ie $$< charmap.txt | $(AS) $(ASFLAGS) -o $@
else
$(foreach src, $(REGULAR_DATA_ASM_SRCS), $(eval $(call SRC_ASM_DATA_DEP,$(patsubst $(DATA_ASM_SUBDIR)/%.s,$(DATA_ASM_BUILDDIR)/%.o, $(src)),$(src))))
endif
@@ -481,7 +484,7 @@ $(DATA_SRC_SUBDIR)/pokemon/teachable_learnsets.h: $(DATA_ASM_BUILDDIR)/event_scr
define TEST_DEP
$1: $2 $$(shell $(SCANINC) -I include -I tools/agbcc/include -I gflib $2)
@echo "$$(CC1) -o $$@ $$<"
- @$$(CPP) $$(CPPFLAGS) $$< | $$(PREPROC) $$< charmap.txt -i | $$(CC1) $$(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $$(AS) $$(ASFLAGS) -o $$@ -
+ @$$(CPP) $$(CPPFLAGS) $$< | $$(PREPROC) -i $$< charmap.txt | $$(CC1) $$(CFLAGS) -o - - | cat - <(echo -e ".text\n\t.align\t2, 0") | $$(AS) $$(ASFLAGS) -o $$@ -
endef
$(foreach src, $(TEST_SRCS), $(eval $(call TEST_DEP,$(patsubst $(TEST_SUBDIR)/%.c,$(TEST_BUILDDIR)/%.o,$(src)),$(src),$(patsubst $(TEST_SUBDIR)/%.c,%,$(src)))))
@@ -506,7 +509,12 @@ $(ROM): $(ELF)
$(OBJCOPY) -O binary $< $@
$(FIX) $@ -p --silent
-agbcc: all
+# Uncomment the next line, and then comment the 4 lines after it to reenable agbcc.
+#agbcc: all
+agbcc:
+ @echo "'make agbcc' is deprecated as of pokeemerald-expansion 1.9 and will be removed in 1.10."
+ @echo "Search for 'agbcc: all' in Makefile to reenable agbcc."
+ @exit 1
modern: all
diff --git a/README.md b/README.md
index db0c00bcfebd..f09f5a7d9099 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,206 @@
-A gameplay focussed branch of pokeemerald-expansion. Updated features integrated into the game, with post-game changes and additional features. Working on this description currently. Currently based on 1.8.5.
+# pokeemerald-expansion
+### Important: DO NOT use GitHub's "Download Zip" option. Using this option will not download the commit history required to update your expansion version or merge other feature branches. Instead, please read [this guide](https://github.com/Pawkkie/Team-Aquas-Asset-Repo/wiki/The-Basics-of-GitHub) to learn how to fork the repository and clone locally from there.
-Features:
+## What is pokeemerald-expansion?
-> New areas
+pokeemerald-expansion is a decomp hack base project based off pret's [pokeemerald](https://github.com/pret/pokeemerald) decompilation project. It's recommended that any new projects that plan on using it, to clone this repository instead of pret's vanilla repository, as we regurlarly incorporate pret's documentation changes. This is ***NOT*** a standalone romhack, and as such, most features will be unavailable and/or unbalanced if played as is.
+
+If you use pokeemerald-expansion in your hack, please add RHH (Rom Hacking Hideout) to your credits list. Optionally, you can list the version used, so it can help players know what features to expect.
+You can phrase it as the following:
+```
+Based off RHH's pokeemerald-expansion 1.9.1 https://github.com/rh-hideout/pokeemerald-expansion/
+```
+
+## What features are included?
+- ***IMPORTANT*❗❗ Read through these to learn what features you can toggle**:
+ - [Battle configurations](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/config/battle.h)
+ - [Pokémon configurations](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/config/pokemon.h)
+ - [Item configurations](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/config/item.h)
+ - [Overworld configurations](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/config/overworld.h)
+ - [Debug configurations](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/config/debug.h)
+- ***Upgraded battle engine.***
+ - Gen5+ damage calculation.
+ - 2v2 Wild battles support.
+ - 1v2/2v1 battles support.
+ - Fairy Type (configurable).
+ - Physical/Special/Status Category (configurable).
+ - New moves and abilities up to Scarlet and Violet.
+ - Custom Contest data up to SwSh, newer moves are WIP. ([source](https://pokemonurpg.com/info/contests/rse-move-list/))
+ - Battle gimmick support:
+ - Mega Evolution
+ - Primal Reversion
+ - Ultra Burst
+ - Z-Moves
+ - Gen 8+ damaging moves are given power extrapolated from Gen 7.
+ - Gen 8+ status moves have no additional effects, like Healing Wish.
+ - Dynamax and Gigantamax
+ - Initial battle parameters
+ - Queueing stat boosts (aka, Totem Boosts)
+ - Setting Terrains.
+ - Mid-turn speed recalculation.
+ - Quick Poké Ball selection in Wild Battles
+ - Hold `R` to change selection with the D-Pad.
+ - Press `R` to use last selected Poké Ball.
+ - Run option shortcut
+ - Faster battle intro - Message and animation/cry happens at the same time.
+ - Faster HP drain.
+ - Battle Debug menu.
+ - Accessed by pressing `Select` on the "Fight/Bag/Pokémon/Run" menu.
+ - Option to use AI flags in wild Pokémon battles.
+ - FRLG/Gen4+ whiteout money calculation.
+ - Configurable experience settings
+ - Experience on catch.
+ - Splitting experience.
+ - Trainer experience.
+ - Scaled experience.
+ - Unevolved experience boost.
+ - Frostbite.
+ - Doesn't replace freezing unless a config is enabled, so you can mix and match.
+ - Critical capture.
+ - Removed badge boosts (configurable).
+ - Recalculating stats at the end of every battle.
+ - Level 100 Pokémon can earn EVs.
+ - Inverse battle support.
+ - TONS of other features listed [here](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/config/battle.h).
+- ***Full Trainer customization***
+ - Nickname, EVs, IVs, moves, ability, ball, friendship, nature, gender, shininess.
+ - Custom tag battle support (teaming up an NPC in a double battle).
+ - Sliding trainer messages.
+ - Upgraded Trainer AI
+ - Considers newer move effects.
+ - New flag options to let you customize the intelligence of your trainers.
+ - Faster calculations.
+ - Specify Poké Balls by Trainer class.
+- ***Pokémon Species from Generations 1-9.***
+ - Simplified process to add new Pokémon.
+ - Option to disable unwanted families.
+ - Updated sprites to DS style.
+ - Updated stats, types, abilities and egg groups (configurable).
+ - Updated Hoenn's Regional Dex to match ORAS' (configurable).
+ - Updated National Dex incorporating the new species.
+ - Sprite and animation visualizer.
+ - Accesible by pressing `Select` on a Pokémon's Summary screen.
+ - Gen4+ evolution methods, with some changes:
+ - Mossy Rock, Icy Rock and Magnetic Field locations match ORAS'.
+ - Leaf, Ice and Thunder Stones may also be used.
+ - Inkay just needs level 30 to evolve.
+ - You can't physically have both the RTC and gyroscope, so we skip this requirement.
+ - Sylveon uses Gen8+'s evolution method (friendship + Fairy Move).
+ - Option to use hold evolution items directly like stones.
+ - Hidden Abilities.
+ - Available via Ability Patch.
+ - Compatible with Ghoul's DexNav branch.
+ - All gender differences.
+ - Custom female icons for female Hippopotas Hippowdon, Pikachu and Wobbufett
+ - 3 Perfect IVs on Legendaries, Mythicals and Ultra Beasts.
+- ***Customizable form change tables. Full list of methods [here](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/form_change_types.h).***
+ - Item holding (eg. Giratina/Arceus)
+ - Item using (eg. Oricorio)
+ - Time of day option for Shaymin
+ - Fainting
+ - Battle begin and end (eg. Xerneas)
+ - Move change option for Zacian/Zamazenta
+ - Battle end in terrains (eg. Burmy)
+ - Switched in battle (eg. Palafin)
+ - HP Threshold (eg. Darmanitan)
+ - Weather (eg. Castform)
+ - End of turn (eg. Morpeko)
+ - Time of day (eg. Shaymin)
+ - Fusions (eg. Kyurem)
+- ***Breeding Improvements***
+ - Incense Baby Pokémon now happen automatically (configurable).
+ - Level 1 eggs (configurable).
+ - Poké Ball inheriting (configurable).
+ - Egg Move Transfer, including Mirror Herb (configurable).
+ - Nature inheriting 100% of the time with Everstone (configurable)
+ - Gen6+ Ability inheriting (configurable).
+- ***Items from newer Generations. Full list [here](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/items.h).***
+ - ***Gen 6+ Exp. Share*** (configurable)
+ - Berserk Gene
+ - Most battle items from Gen 4+
+ - Existing item data but missing effects:
+ - Gimmighoul Coin
+ - Booster Energy
+ - Tera Shards
+ - Tera Orb
+- ***Feature branches incorporated (with permission):***
+ - [RHH intro credits](https://github.com/Xhyzi/pokeemerald/tree/rhh-intro-credits) by @Xhyzi.
+ - A small signature from all of us to show the collective effort in the project :)
+ - [Overworld debug](https://github.com/TheXaman/pokeemerald/tree/tx_debug_system) by @TheXaman
+ - May be disabled.
+ - Accesible by pressing `R + Start` in the overworld by default.
+ - **Additional features**:
+ - *Clear Boxes*: cleans every Pokémon from the Boxes.
+ - *Hatch an Egg*: lets you choose an Egg in your party and immediately hatch it.
+ - [HGSS Pokédex](https://github.com/TheXaman/pokeemerald/tree/tx_pokedexPlus_hgss) by @TheXaman
+ - May be disabled.
+ - **Additional features**:
+ - *Support for new evolution methods*.
+ - *Dark Mode*.
+ - [Nature Colors](https://github.com/DizzyEggg/pokeemerald/tree/nature_color) in summary screen by @DizzyEggg
+ - [Dynamic Multichoice](https://github.com/SBird1337/pokeemerald/tree/feature/dynmulti) by @SBird1337
+ - [Saveblock Cleansing](https://github.com/ghoulslash/pokeemerald/tree/saveblock) by @ghoulslash
+ - [Followers & Expanded IDs](https://github.com/aarant/pokeemerald/tree/followers-expanded-id) by @aarant
+ - May be disabled.
+ - Includes Pokémon followers like in HGSS, including interactions.
+ - ***Expands the amount of possible object event IDs beyond 255.***
+ - ***Includes an implementation of dynamic overworld palettes (DOWP).***
+ - **Additional features**:
+ - *Pokémon overworld sprites up to Generation 8.*
+ - *Integration with our Pokémon Sprite Visualizer, allowing users to browse through the follower sprites alongside battle sprites.*
+- ***Other features***
+ - Pressing B while holding a Pokémon drops them like in modern games (configurable).
+ - Running indoors (configurable).
+ - Configurable overworld poison damage.
+ - Configurable flags for disabling Wild encounters and Trainer battles.
+ - Configurable flags for forcing or disabling Shinies.
+ - Reusable TM (configurable).
+ - B2W2+ Repel system that also supports LGPE's Lures
+ - Gen6+'s EV cap.
+ - All bugfixes from pret included.
+ - Fixed overworld snow effect.
+
+There are some mechanics, moves and abilities that are missing and being developed. Check [the project's milestones](https://github.com/rh-hideout/pokeemerald-expansion/milestones) to see which ones.
+
+
+### [Documentation on features can be found here](https://github.com/rh-hideout/pokeemerald-expansion/wiki)
+
+## If I already have a project based on regular pokeemerald, can I use pokeemerald-expansion?
+Yes! Keep in mind that we keep up with pret's documentation of pokeemerald, which means that if your project a bit old, you might get merge conflicts that you need to solve manually.
+- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`.
+- Once you have your remote set up, run the command `git pull RHH master`.
+
+With this, you'll get the latest version of pokeemerald-expansion, plus a couple of bugfixes that haven't been released into the next patch version :)
+
+## **How do I update my version of pokeemerald-expansion?**
+- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`.
+- Check your current version.
+ - You can check in the debug menu's `Utilities -> Expansion Version` option.
+ - If the option is not available, you possibly have version 1.6.2 or older. In that case, please check the [changelogs](CHANGELOG.md) to determine your version based on the features available on your repository.
+- Once you have your remote set up, run the command `git pull RHH expansion/X.Y.Z`, replacing X, Y and Z with the digits of the respective version you want to update to (eg, to update to 1.8.4, use `git pull RHH expansion/1.8.4`).
+ - ***Important:*** If you are several versions behind, we recommend updating one minor version at a time, skipping directly to the latest patch version (eg, 1.5.3 -> 1.6.2 -> 1.7.4 and so on)
+- Alternatively, you can update to unreleased versions of the expansion.
+ - ***master (stable):*** It contains unreleased **bugfixes** that will come in the next patch version. To merge, use `git pull RHH master`.
+ - ***upcoming (unstable, with potential bugs):*** It contains unreleased **features** that will come in the next minor version. To merge, use `git pull RHH upcoming`.
+
+### Please consider crediting the entire [list of contributors](https://github.com/rh-hideout/pokeemerald-expansion/wiki/Credits) in your project, as they have all worked hard to develop this project :)
+
+## There's a bug in the project. How do I let you guys know?
+Please submit any issues with the project [here](https://github.com/rh-hideout/pokeemerald-expansion/issues). Make sure that the issue wasn't reported by someone else by searching using the filters.
+
+## Can I contribute even if I'm not a member of ROM Hacking Hideout?
+
+Yes! Contributions are welcome via Pull Requests and they will be reviewed by maintainers. Don't feel discouraged if we take a bit to review your PR, we'll get to it.
+
+## Who maintains the project?
+
+The project was originally started by DizzyEgg alongside other contributors.
+
+The project has now gotten larger and DizzyEgg is now maintaining the project as part of the ROM Hacking Hideout community. Some members of this community are taking on larger roles to help maintain the project.
+
+## What is the ROM Hacking Hideout?
+
+A Discord-based ROM hacking community that has many members who hack using the disassembly and decompilation projects for Pokémon. Quite a few contributors to the original feature branches by DizzyEgg were members of ROM Hacking Hideout. You can call it RHH for short!
+
+[Click here to join the RHH Discord Server!](https://discord.gg/6CzjAG6GZk)
diff --git a/asm/macros/battle_anim_script.inc b/asm/macros/battle_anim_script.inc
index 742cdb2f26d4..1b35991809e2 100644
--- a/asm/macros/battle_anim_script.inc
+++ b/asm/macros/battle_anim_script.inc
@@ -315,6 +315,25 @@
.Lsprite_\@_2:
.endm
+ .macro jumpifmovetypeequal type:req, jumpInstr:req
+ .byte 0x33
+ .byte \type
+ .4byte \jumpInstr
+ .endm
+
+ .macro createdragondartsprite anim_battler:req, subpriority_offset:req, argv:vararg
+ .byte 0x34
+ .if \anim_battler == ANIM_TARGET
+ .byte ANIMSPRITE_IS_TARGET | (\subpriority_offset & 0x7F)
+ .else
+ .byte (\subpriority_offset & 0x7F)
+ .endif
+ .byte (.Lsprite_\@_2 - .Lsprite_\@_1) / 2
+.Lsprite_\@_1:
+ .2byte \argv
+.Lsprite_\@_2:
+ .endm
+
@ useful macros
.macro jumpreteq value:req, ptr:req
jumpargeq ARG_RET_ID, \value, \ptr
diff --git a/asm/macros/battle_script.inc b/asm/macros/battle_script.inc
index b805b4b3fe57..9d61889b4092 100644
--- a/asm/macros/battle_script.inc
+++ b/asm/macros/battle_script.inc
@@ -710,8 +710,9 @@
.byte 0x7c
.endm
- .macro setrain
+ .macro setfieldweather weather:req
.byte 0x7d
+ .byte \weather
.endm
.macro setreflect
@@ -833,11 +834,11 @@
.byte 0x94
.endm
- .macro setsandstorm
+ .macro unused_95
.byte 0x95
.endm
- .macro weatherdamage
+ .macro unused_96
.byte 0x96
.endm
@@ -1006,7 +1007,7 @@
.4byte \jumpInstr
.endm
- .macro setsunny
+ .macro unused_bb
.byte 0xbb
.endm
@@ -1081,7 +1082,7 @@
.byte 0xc7
.endm
- .macro sethail
+ .macro unused_c8
.byte 0xc8
.endm
@@ -1351,6 +1352,22 @@
.endm
@ callnative macros
+ .macro savetarget
+ callnative BS_SaveTarget
+ .endm
+
+ .macro restoretarget
+ callnative BS_RestoreTarget
+ .endm
+
+ .macro saveattacker
+ callnative BS_SaveAttacker
+ .endm
+
+ .macro restoreattacker
+ callnative BS_RestoreAttacker
+ .endm
+
.macro metalburstdamagecalculator failInstr:req
callnative BS_CalcMetalBurstDmg
.4byte \failInstr
@@ -1411,10 +1428,6 @@
callnative BS_TryRevertWeatherForm
.endm
- .macro setsnow
- callnative BS_SetSnow
- .endm
-
.macro applysaltcure battler:req
callnative BS_ApplySaltCure
.byte \battler
@@ -1547,10 +1560,6 @@
.4byte \failInstr
.endm
- .macro damagenontypes
- callnative BS_DamageNonTypes
- .endm
-
.macro trysetstatus1, ptr:req
callnative BS_TrySetStatus1
.4byte \ptr
@@ -1620,6 +1629,10 @@
callnative BS_TryUpdateRecoilTracker
.endm
+ .macro tryupdateleaderscresttracker
+ callnative BS_TryUpdateLeadersCrestTracker
+ .endm
+
.macro trytidyup clear:req, jumpInstr:req
callnative BS_TryTidyUp
.byte \clear
@@ -1639,6 +1652,28 @@
.4byte \failInstr
.endm
+ .macro copyfoesstatincrease battler:req, failInstr:req
+ callnative BS_CopyFoesStatIncrease
+ .byte \battler
+ .4byte \failInstr
+ .endm
+
+ .macro removeweather
+ callnative BS_RemoveWeather
+ .endm
+
+ .macro applyterastallization
+ callnative BS_ApplyTerastallization
+ .endm
+
+ .macro damagetoquartertargethp
+ callnative BS_DamageToQuarterTargetHP
+ .endm
+
+ .macro ficklebeamdamagecalculation
+ callnative BS_FickleBeamDamageCalculation
+ .endm
+
@ various command changed to more readable macros
.macro cancelmultiturnmoves battler:req
various \battler, VARIOUS_CANCEL_MULTI_TURN_MOVES
@@ -1761,14 +1796,6 @@
various \battler, VARIOUS_SWITCHIN_ABILITIES
.endm
- .macro savetarget
- various BS_TARGET, VARIOUS_SAVE_TARGET
- .endm
-
- .macro restoretarget
- various BS_TARGET, VARIOUS_RESTORE_TARGET
- .endm
-
.macro instanthpdrop battler:req
various \battler, VARIOUS_INSTANT_HP_DROP
.endm
diff --git a/asm/macros/event.inc b/asm/macros/event.inc
index 4817dd95a1a8..83338673cf17 100644
--- a/asm/macros/event.inc
+++ b/asm/macros/event.inc
@@ -776,6 +776,16 @@
trainerbattle TRAINER_BATTLE_SINGLE_NO_INTRO_TEXT, \trainer, 0, \lose_text
.endm
+ @ Starts a double battle with the player against two trainers
+ @ Takes two trainers and defeat text for each
+ .macro trainerbattle_two_trainers trainer_a:req, lose_text_a:req, trainer_b:req, lose_text_b:req
+ .byte 0x5c
+ .byte TRAINER_BATTLE_TWO_TRAINERS_NO_INTRO
+ .2byte \trainer_a
+ .4byte \lose_text_a
+ .2byte \trainer_b
+ .4byte \lose_text_b
+ .endm
@ Starts a trainer battle using the battle information stored in RAM (usually by the scripts in trainer_battle.inc, which
@ are run by trainerbattle), and blocks script execution until the battle finishes.
@@ -987,7 +997,69 @@
@ Gives the player a Pokémon of the specified species and level, and allows to customize extra parameters.
@ VAR_RESULT will be set to MON_GIVEN_TO_PARTY, MON_GIVEN_TO_PC, or MON_CANT_GIVE depending on the outcome.
.macro givemon species:req, level:req, item, ball, nature, abilityNum, gender, hpEv, atkEv, defEv, speedEv, spAtkEv, spDefEv, hpIv, atkIv, defIv, speedIv, spAtkIv, spDefIv, move1, move2, move3, move4, isShiny, ggMaxFactor, teraType
- callnative ScrCmd_givemon
+ callnative ScrCmd_createmon
+ .byte 0
+ .byte 6 @ PARTY_SIZE - assign to first empty slot
+ .set givemon_flags, 0
+ .2byte \species
+ .2byte \level
+ .ifnb \item; .set givemon_flags, givemon_flags | (1 << 0); .endif
+ .ifnb \ball; .set givemon_flags, givemon_flags | (1 << 1); .endif
+ .ifnb \nature; .set givemon_flags, givemon_flags | (1 << 2); .endif
+ .ifnb \abilityNum; .set givemon_flags, givemon_flags | (1 << 3); .endif
+ .ifnb \gender; .set givemon_flags, givemon_flags | (1 << 4); .endif
+ .ifnb \hpEv; .set givemon_flags, givemon_flags | (1 << 5); .endif
+ .ifnb \atkEv; .set givemon_flags, givemon_flags | (1 << 6); .endif
+ .ifnb \defEv; .set givemon_flags, givemon_flags | (1 << 7); .endif
+ .ifnb \speedEv; .set givemon_flags, givemon_flags | (1 << 8); .endif
+ .ifnb \spAtkEv; .set givemon_flags, givemon_flags | (1 << 9); .endif
+ .ifnb \spDefEv; .set givemon_flags, givemon_flags | (1 << 10); .endif
+ .ifnb \hpIv; .set givemon_flags, givemon_flags | (1 << 11); .endif
+ .ifnb \atkIv; .set givemon_flags, givemon_flags | (1 << 12); .endif
+ .ifnb \defIv; .set givemon_flags, givemon_flags | (1 << 13); .endif
+ .ifnb \speedIv; .set givemon_flags, givemon_flags | (1 << 14); .endif
+ .ifnb \spAtkIv; .set givemon_flags, givemon_flags | (1 << 15); .endif
+ .ifnb \spDefIv; .set givemon_flags, givemon_flags | (1 << 16); .endif
+ .ifnb \move1; .set givemon_flags, givemon_flags | (1 << 17); .endif
+ .ifnb \move2; .set givemon_flags, givemon_flags | (1 << 18); .endif
+ .ifnb \move3; .set givemon_flags, givemon_flags | (1 << 19); .endif
+ .ifnb \move4; .set givemon_flags, givemon_flags | (1 << 20); .endif
+ .ifnb \isShiny; .set givemon_flags, givemon_flags | (1 << 21); .endif
+ .ifnb \ggMaxFactor; .set givemon_flags, givemon_flags | (1 << 22); .endif
+ .ifnb \teraType; .set givemon_flags, givemon_flags | (1 << 23); .endif
+ .4byte givemon_flags
+ .ifnb \item; .2byte \item; .endif
+ .ifnb \ball; .2byte \ball; .endif
+ .ifnb \nature; .2byte \nature; .endif
+ .ifnb \abilityNum; .2byte \abilityNum; .endif
+ .ifnb \gender; .2byte \gender; .endif
+ .ifnb \hpEv; .2byte \hpEv; .endif
+ .ifnb \atkEv; .2byte \atkEv; .endif
+ .ifnb \defEv; .2byte \defEv; .endif
+ .ifnb \speedEv; .2byte \speedEv; .endif
+ .ifnb \spAtkEv; .2byte \spAtkEv; .endif
+ .ifnb \spDefEv; .2byte \spDefEv; .endif
+ .ifnb \hpIv; .2byte \hpIv; .endif
+ .ifnb \atkIv; .2byte \atkIv; .endif
+ .ifnb \defIv; .2byte \defIv; .endif
+ .ifnb \speedIv; .2byte \speedIv; .endif
+ .ifnb \spAtkIv; .2byte \spAtkIv; .endif
+ .ifnb \spDefIv; .2byte \spDefIv; .endif
+ .ifnb \move1; .2byte \move1; .endif
+ .ifnb \move2; .2byte \move2; .endif
+ .ifnb \move3; .2byte \move3; .endif
+ .ifnb \move4; .2byte \move4; .endif
+ .ifnb \isShiny; .2byte \isShiny; .endif
+ .ifnb \ggMaxFactor; .2byte \ggMaxFactor; .endif
+ .ifnb \teraType; .2byte \teraType; .endif
+ .endm
+
+ @ creates a mon for a given party and slot
+ @ otherwise
+ .macro createmon side:req, slot:req, species:req, level:req, item, ball, nature, abilityNum, gender, hpEv, atkEv, defEv, speedEv, spAtkEv, spDefEv, hpIv, atkIv, defIv, speedIv, spAtkIv, spDefIv, move1, move2, move3, move4, isShiny, ggMaxFactor, teraType
+ callnative ScrCmd_createmon
+ .byte \side @ 0 - player, 1 - opponent
+ .byte \slot @ 0-5
.set givemon_flags, 0
.2byte \species
.2byte \level
@@ -1393,7 +1465,7 @@
@ The specified id can be used to refer to the sprite again later with turnvobject.
.macro createvobject graphicsId:req, id:req, x:req, y:req, elevation=3, direction=DIR_SOUTH
.byte 0xaa
- .byte \graphicsId
+ .2byte \graphicsId
.byte \id
.2byte \x
.2byte \y
@@ -1813,7 +1885,6 @@
_dynmultichoice \left, \top, \ignoreBPress, \maxBeforeScroll, \shouldSort, \initialSelected, \callbacks, NULL
.endm
-
@ Supplementary
.macro goto_if_unset flag:req, dest:req
@@ -2024,6 +2095,11 @@
special CreateEnemyEventMon
.endm
+ .macro setdynamicaifunc func:req
+ callnative ScriptSetDynamicAiFunc
+ .4byte \func
+ .endm
+
@ Set up a totem boost for the next battle.
@ 'battler' is the position of the mon you want to gain a boost. see B_POSITION_xx in include/constants/battle.h.
@ The rest of the arguments are the stat change values to each stat.
@@ -2096,7 +2172,7 @@
setvar VAR_0x8002, \tryMultiple
special TrySpecialOverworldEvo
.endm
-
+
.macro ai_vs_ai_battle trainer1:req, trainer2:req
setflag B_FLAG_AI_VS_AI_BATTLE
setvar VAR_0x8004, \trainer1
@@ -2172,3 +2248,76 @@
.2byte \status1
.2byte \slot
.endm
+
+ @ Sets VAR_RESULT to the Pokémon in \slot's Tera Type
+ .macro checkteratype slot:req
+ callnative CheckTeraType
+ .2byte \slot
+ .endm
+
+ @ Sets the Pokémon in \slot's Tera Type
+ .macro setteratype type:req, slot:req
+ callnative SetTeraType
+ .byte \type
+ .2byte \slot
+ .endm
+
+ @ Saves species and forms of Daycare Pokémon to specific vars. Saves the amount of Daycare mon to VAR_RESULT.
+ .macro getdaycaregfx varSpecies1:req varSpecies2:req varForm1:req varForm2:req
+ callnative GetDaycareGraphics
+ .2byte \varSpecies1
+ .2byte \varSpecies2
+ .2byte \varForm1
+ .2byte \varForm2
+ .endm
+
+ @ Plays the cry of the first alive party member.
+ .macro playfirstmoncry
+ callnative PlayFirstMonCry
+ .endm
+
+ @ Buffers the nickname of the first alive party member.
+ .macro bufferlivemonnickname out:req
+ callnative BufferFirstLiveMonNickname
+ .byte \out
+ .endm
+
+ @ Executes Follower actions
+ .macro getfolloweraction
+ callnative GetFollowerAction
+ .endm
+
+ @ Checks if Field move is being used by the current follower.
+ .macro isfollowerfieldmoveuser var:req
+ callnative IsFollowerFieldMoveUser
+ .2byte \var
+ .endm
+
+ @ Saves the direction from where source object event would need to turn to to face the target into the specified var.
+ .macro getdirectiontoface var:req, sourceId:req, targetId:req
+ callnative GetDirectionToFaceScript
+ .2byte \var
+ .byte \sourceId
+ .byte \targetId
+ .endm
+
+ @ set the wild double battle flag
+ @ can be used in conjunection with createmon to set up a wild battle with 2 player mons vs. 1 enemy mon
+ .macro setwilddoubleflag
+ callnative ScriptSetDoubleBattleFlag
+ .endm
+
+ @ When OW_USE_FAKE_RTC and OW_FLAG_PAUSE_TIME is assigned, this macro will stop the flow of time.
+ .macro pausefakertc
+ callnative Script_PauseFakeRtc
+ .endm
+
+ @ When OW_USE_FAKE_RTC and OW_FLAG_PAUSE_TIME is assigned, this macro will resume the flow of time.
+ .macro resumefakertc
+ callnative Script_ResumeFakeRtc
+ .endm
+
+ @ When OW_USE_FAKE_RTC and OW_FLAG_PAUSE_TIME is assigned, this macro will resume the flow of time if paused, and stop the flow of time otherwise.
+ .macro togglefakertc
+ callnative Script_ToggleFakeRtc
+ .endm
diff --git a/asm/macros/map.inc b/asm/macros/map.inc
index eb9d205f4b03..74d2b5ff4214 100644
--- a/asm/macros/map.inc
+++ b/asm/macros/map.inc
@@ -22,9 +22,8 @@
@ Defines an object event template for map data, to be used by a normal object. Mirrors the struct layout of ObjectEventTemplate in include/global.fieldmap.h
.macro object_event index:req, gfx:req, x:req, y:req, elevation:req, movement_type:req, x_radius:req, y_radius:req, trainer_type:req, sight_radius_tree_etc:req, script:req, event_flag:req
.byte \index
- .byte \gfx
+ .2byte \gfx
.byte OBJ_KIND_NORMAL
- .space 1 @ Padding
.2byte \x, \y
.byte \elevation
.byte \movement_type
diff --git a/asm/macros/movement.inc b/asm/macros/movement.inc
index b0bb1f35ee9f..7fb51ce22504 100644
--- a/asm/macros/movement.inc
+++ b/asm/macros/movement.inc
@@ -165,4 +165,6 @@
create_movement_action emote_double_exclamation_mark, MOVEMENT_ACTION_EMOTE_DOUBLE_EXCL_MARK
create_movement_action emote_x, MOVEMENT_ACTION_EMOTE_X
+ create_movement_action exit_pokeball, MOVEMENT_ACTION_EXIT_POKEBALL
+ create_movement_action enter_pokeball, MOVEMENT_ACTION_ENTER_POKEBALL
create_movement_action step_end, MOVEMENT_ACTION_STEP_END
diff --git a/charmap.txt b/charmap.txt
index c26c07e78b9a..4c9f2e0497fa 100644
--- a/charmap.txt
+++ b/charmap.txt
@@ -453,6 +453,9 @@ FONT_NORMAL = FC 06 01
FONT_SHORT = FC 06 02
FONT_NARROW = FC 06 07
FONT_SMALL_NARROW = FC 06 08
+FONT_NARROWER = FC 06 0A
+FONT_SMALL_NARROWER = FC 06 0B
+FONT_SHORT_NARROW = FC 06 0C
@ colors
diff --git a/data/battle_anim_scripts.s b/data/battle_anim_scripts.s
index e4cd774af6ca..2f1a3cb73cd2 100644
--- a/data/battle_anim_scripts.s
+++ b/data/battle_anim_scripts.s
@@ -1,4 +1,4 @@
-#include "config.h"
+#include "config/general.h"
#include "config/battle.h"
#include "constants/battle.h"
#include "constants/battle_anim.h"
@@ -18,957 +18,6 @@
gMovesWithQuietBGM::
.2byte MOVE_SING, MOVE_PERISH_SONG, MOVE_GRASS_WHISTLE, 0xFFFF
- .align 2
-gBattleAnims_Moves::
- .4byte Move_NONE
- .4byte Move_POUND
- .4byte Move_KARATE_CHOP
- .4byte Move_DOUBLE_SLAP
- .4byte Move_COMET_PUNCH
- .4byte Move_MEGA_PUNCH
- .4byte Move_PAY_DAY
- .4byte Move_FIRE_PUNCH
- .4byte Move_ICE_PUNCH
- .4byte Move_THUNDER_PUNCH
- .4byte Move_SCRATCH
- .4byte Move_VICE_GRIP
- .4byte Move_GUILLOTINE
- .4byte Move_RAZOR_WIND
- .4byte Move_SWORDS_DANCE
- .4byte Move_CUT
- .4byte Move_GUST
- .4byte Move_WING_ATTACK
- .4byte Move_WHIRLWIND
- .4byte Move_FLY
- .4byte Move_BIND
- .4byte Move_SLAM
- .4byte Move_VINE_WHIP
- .4byte Move_STOMP
- .4byte Move_DOUBLE_KICK
- .4byte Move_MEGA_KICK
- .4byte Move_JUMP_KICK
- .4byte Move_ROLLING_KICK
- .4byte Move_SAND_ATTACK
- .4byte Move_HEADBUTT
- .4byte Move_HORN_ATTACK
- .4byte Move_FURY_ATTACK
- .4byte Move_HORN_DRILL
- .4byte Move_TACKLE
- .4byte Move_BODY_SLAM
- .4byte Move_WRAP
- .4byte Move_TAKE_DOWN
- .4byte Move_THRASH
- .4byte Move_DOUBLE_EDGE
- .4byte Move_TAIL_WHIP
- .4byte Move_POISON_STING
- .4byte Move_TWINEEDLE
- .4byte Move_PIN_MISSILE
- .4byte Move_LEER
- .4byte Move_BITE
- .4byte Move_GROWL
- .4byte Move_ROAR
- .4byte Move_SING
- .4byte Move_SUPERSONIC
- .4byte Move_SONIC_BOOM
- .4byte Move_DISABLE
- .4byte Move_ACID
- .4byte Move_EMBER
- .4byte Move_FLAMETHROWER
- .4byte Move_MIST
- .4byte Move_WATER_GUN
- .4byte Move_HYDRO_PUMP
- .4byte Move_SURF
- .4byte Move_ICE_BEAM
- .4byte Move_BLIZZARD
- .4byte Move_PSYBEAM
- .4byte Move_BUBBLE_BEAM
- .4byte Move_AURORA_BEAM
- .4byte Move_HYPER_BEAM
- .4byte Move_PECK
- .4byte Move_DRILL_PECK
- .4byte Move_SUBMISSION
- .4byte Move_LOW_KICK
- .4byte Move_COUNTER
- .4byte Move_SEISMIC_TOSS
- .4byte Move_STRENGTH
- .4byte Move_ABSORB
- .4byte Move_MEGA_DRAIN
- .4byte Move_LEECH_SEED
- .4byte Move_GROWTH
- .4byte Move_RAZOR_LEAF
- .4byte Move_SOLAR_BEAM
- .4byte Move_POISON_POWDER
- .4byte Move_STUN_SPORE
- .4byte Move_SLEEP_POWDER
- .4byte Move_PETAL_DANCE
- .4byte Move_STRING_SHOT
- .4byte Move_DRAGON_RAGE
- .4byte Move_FIRE_SPIN
- .4byte Move_THUNDER_SHOCK
- .4byte Move_THUNDERBOLT
- .4byte Move_THUNDER_WAVE
- .4byte Move_THUNDER
- .4byte Move_ROCK_THROW
- .4byte Move_EARTHQUAKE
- .4byte Move_FISSURE
- .4byte Move_DIG
- .4byte Move_TOXIC
- .4byte Move_CONFUSION
- .4byte Move_PSYCHIC
- .4byte Move_HYPNOSIS
- .4byte Move_MEDITATE
- .4byte Move_AGILITY
- .4byte Move_QUICK_ATTACK
- .4byte Move_RAGE
- .4byte Move_TELEPORT
- .4byte Move_NIGHT_SHADE
- .4byte Move_MIMIC
- .4byte Move_SCREECH
- .4byte Move_DOUBLE_TEAM
- .4byte Move_RECOVER
- .4byte Move_HARDEN
- .4byte Move_MINIMIZE
- .4byte Move_SMOKESCREEN
- .4byte Move_CONFUSE_RAY
- .4byte Move_WITHDRAW
- .4byte Move_DEFENSE_CURL
- .4byte Move_BARRIER
- .4byte Move_LIGHT_SCREEN
- .4byte Move_HAZE
- .4byte Move_REFLECT
- .4byte Move_FOCUS_ENERGY
- .4byte Move_BIDE
- .4byte Move_METRONOME
- .4byte Move_MIRROR_MOVE @ doesnt have an actual animation
- .4byte Move_SELF_DESTRUCT
- .4byte Move_EGG_BOMB
- .4byte Move_LICK
- .4byte Move_SMOG
- .4byte Move_SLUDGE
- .4byte Move_BONE_CLUB
- .4byte Move_FIRE_BLAST
- .4byte Move_WATERFALL
- .4byte Move_CLAMP
- .4byte Move_SWIFT
- .4byte Move_SKULL_BASH
- .4byte Move_SPIKE_CANNON
- .4byte Move_CONSTRICT
- .4byte Move_AMNESIA
- .4byte Move_KINESIS
- .4byte Move_SOFT_BOILED
- .4byte Move_HIGH_JUMP_KICK
- .4byte Move_GLARE
- .4byte Move_DREAM_EATER
- .4byte Move_POISON_GAS
- .4byte Move_BARRAGE
- .4byte Move_LEECH_LIFE
- .4byte Move_LOVELY_KISS
- .4byte Move_SKY_ATTACK
- .4byte Move_TRANSFORM
- .4byte Move_BUBBLE
- .4byte Move_DIZZY_PUNCH
- .4byte Move_SPORE
- .4byte Move_FLASH
- .4byte Move_PSYWAVE
- .4byte Move_SPLASH
- .4byte Move_ACID_ARMOR
- .4byte Move_CRABHAMMER
- .4byte Move_EXPLOSION
- .4byte Move_FURY_SWIPES
- .4byte Move_BONEMERANG
- .4byte Move_REST
- .4byte Move_ROCK_SLIDE
- .4byte Move_HYPER_FANG
- .4byte Move_SHARPEN
- .4byte Move_CONVERSION
- .4byte Move_TRI_ATTACK
- .4byte Move_SUPER_FANG
- .4byte Move_SLASH
- .4byte Move_SUBSTITUTE
- .4byte Move_STRUGGLE
- .4byte Move_SKETCH
- .4byte Move_TRIPLE_KICK
- .4byte Move_THIEF
- .4byte Move_SPIDER_WEB
- .4byte Move_MIND_READER
- .4byte Move_NIGHTMARE
- .4byte Move_FLAME_WHEEL
- .4byte Move_SNORE
- .4byte Move_CURSE
- .4byte Move_FLAIL
- .4byte Move_CONVERSION_2
- .4byte Move_AEROBLAST
- .4byte Move_COTTON_SPORE
- .4byte Move_REVERSAL
- .4byte Move_SPITE
- .4byte Move_POWDER_SNOW
- .4byte Move_PROTECT
- .4byte Move_MACH_PUNCH
- .4byte Move_SCARY_FACE
- .4byte Move_FAINT_ATTACK
- .4byte Move_SWEET_KISS
- .4byte Move_BELLY_DRUM
- .4byte Move_SLUDGE_BOMB
- .4byte Move_MUD_SLAP
- .4byte Move_OCTAZOOKA
- .4byte Move_SPIKES
- .4byte Move_ZAP_CANNON
- .4byte Move_FORESIGHT
- .4byte Move_DESTINY_BOND
- .4byte Move_PERISH_SONG
- .4byte Move_ICY_WIND
- .4byte Move_DETECT
- .4byte Move_BONE_RUSH
- .4byte Move_LOCK_ON
- .4byte Move_OUTRAGE
- .4byte Move_SANDSTORM
- .4byte Move_GIGA_DRAIN
- .4byte Move_ENDURE
- .4byte Move_CHARM
- .4byte Move_ROLLOUT
- .4byte Move_FALSE_SWIPE
- .4byte Move_SWAGGER
- .4byte Move_MILK_DRINK
- .4byte Move_SPARK
- .4byte Move_FURY_CUTTER
- .4byte Move_STEEL_WING
- .4byte Move_MEAN_LOOK
- .4byte Move_ATTRACT
- .4byte Move_SLEEP_TALK
- .4byte Move_HEAL_BELL
- .4byte Move_RETURN
- .4byte Move_PRESENT
- .4byte Move_FRUSTRATION
- .4byte Move_SAFEGUARD
- .4byte Move_PAIN_SPLIT
- .4byte Move_SACRED_FIRE
- .4byte Move_MAGNITUDE
- .4byte Move_DYNAMIC_PUNCH
- .4byte Move_MEGAHORN
- .4byte Move_DRAGON_BREATH
- .4byte Move_BATON_PASS
- .4byte Move_ENCORE
- .4byte Move_PURSUIT
- .4byte Move_RAPID_SPIN
- .4byte Move_SWEET_SCENT
- .4byte Move_IRON_TAIL
- .4byte Move_METAL_CLAW
- .4byte Move_VITAL_THROW
- .4byte Move_MORNING_SUN
- .4byte Move_SYNTHESIS
- .4byte Move_MOONLIGHT
- .4byte Move_HIDDEN_POWER
- .4byte Move_CROSS_CHOP
- .4byte Move_TWISTER
- .4byte Move_RAIN_DANCE
- .4byte Move_SUNNY_DAY
- .4byte Move_CRUNCH
- .4byte Move_MIRROR_COAT
- .4byte Move_PSYCH_UP
- .4byte Move_EXTREME_SPEED
- .4byte Move_ANCIENT_POWER
- .4byte Move_SHADOW_BALL
- .4byte Move_FUTURE_SIGHT
- .4byte Move_ROCK_SMASH
- .4byte Move_WHIRLPOOL
- .4byte Move_BEAT_UP
- .4byte Move_FAKE_OUT
- .4byte Move_UPROAR
- .4byte Move_STOCKPILE
- .4byte Move_SPIT_UP
- .4byte Move_SWALLOW
- .4byte Move_HEAT_WAVE
- .4byte Move_HAIL
- .4byte Move_TORMENT
- .4byte Move_FLATTER
- .4byte Move_WILL_O_WISP
- .4byte Move_MEMENTO
- .4byte Move_FACADE
- .4byte Move_FOCUS_PUNCH
- .4byte Move_SMELLING_SALTS
- .4byte Move_FOLLOW_ME
- .4byte Move_NATURE_POWER
- .4byte Move_CHARGE
- .4byte Move_TAUNT
- .4byte Move_HELPING_HAND
- .4byte Move_TRICK
- .4byte Move_ROLE_PLAY
- .4byte Move_WISH
- .4byte Move_ASSIST
- .4byte Move_INGRAIN
- .4byte Move_SUPERPOWER
- .4byte Move_MAGIC_COAT
- .4byte Move_RECYCLE
- .4byte Move_REVENGE
- .4byte Move_BRICK_BREAK
- .4byte Move_YAWN
- .4byte Move_KNOCK_OFF
- .4byte Move_ENDEAVOR
- .4byte Move_ERUPTION
- .4byte Move_SKILL_SWAP
- .4byte Move_IMPRISON
- .4byte Move_REFRESH
- .4byte Move_GRUDGE
- .4byte Move_SNATCH
- .4byte Move_SECRET_POWER
- .4byte Move_DIVE
- .4byte Move_ARM_THRUST
- .4byte Move_CAMOUFLAGE
- .4byte Move_TAIL_GLOW
- .4byte Move_LUSTER_PURGE
- .4byte Move_MIST_BALL
- .4byte Move_FEATHER_DANCE
- .4byte Move_TEETER_DANCE
- .4byte Move_BLAZE_KICK
- .4byte Move_MUD_SPORT
- .4byte Move_ICE_BALL
- .4byte Move_NEEDLE_ARM
- .4byte Move_SLACK_OFF
- .4byte Move_HYPER_VOICE
- .4byte Move_POISON_FANG
- .4byte Move_CRUSH_CLAW
- .4byte Move_BLAST_BURN
- .4byte Move_HYDRO_CANNON
- .4byte Move_METEOR_MASH
- .4byte Move_ASTONISH
- .4byte Move_WEATHER_BALL
- .4byte Move_AROMATHERAPY
- .4byte Move_FAKE_TEARS
- .4byte Move_AIR_CUTTER
- .4byte Move_OVERHEAT
- .4byte Move_ODOR_SLEUTH
- .4byte Move_ROCK_TOMB
- .4byte Move_SILVER_WIND
- .4byte Move_METAL_SOUND
- .4byte Move_GRASS_WHISTLE
- .4byte Move_TICKLE
- .4byte Move_COSMIC_POWER
- .4byte Move_WATER_SPOUT
- .4byte Move_SIGNAL_BEAM
- .4byte Move_SHADOW_PUNCH
- .4byte Move_EXTRASENSORY
- .4byte Move_SKY_UPPERCUT
- .4byte Move_SAND_TOMB
- .4byte Move_SHEER_COLD
- .4byte Move_MUDDY_WATER
- .4byte Move_BULLET_SEED
- .4byte Move_AERIAL_ACE
- .4byte Move_ICICLE_SPEAR
- .4byte Move_IRON_DEFENSE
- .4byte Move_BLOCK
- .4byte Move_HOWL
- .4byte Move_DRAGON_CLAW
- .4byte Move_FRENZY_PLANT
- .4byte Move_BULK_UP
- .4byte Move_BOUNCE
- .4byte Move_MUD_SHOT
- .4byte Move_POISON_TAIL
- .4byte Move_COVET
- .4byte Move_VOLT_TACKLE
- .4byte Move_MAGICAL_LEAF
- .4byte Move_WATER_SPORT
- .4byte Move_CALM_MIND
- .4byte Move_LEAF_BLADE
- .4byte Move_DRAGON_DANCE
- .4byte Move_ROCK_BLAST
- .4byte Move_SHOCK_WAVE
- .4byte Move_WATER_PULSE
- .4byte Move_DOOM_DESIRE
- .4byte Move_PSYCHO_BOOST
-@@@@@@@@@@@@ GEN 4 @@@@@@@@@@@@
- .4byte Move_ROOST
- .4byte Move_GRAVITY
- .4byte Move_MIRACLE_EYE
- .4byte Move_WAKE_UP_SLAP
- .4byte Move_HAMMER_ARM
- .4byte Move_GYRO_BALL
- .4byte Move_HEALING_WISH
- .4byte Move_BRINE
- .4byte Move_NATURAL_GIFT
- .4byte Move_FEINT
- .4byte Move_PLUCK
- .4byte Move_TAILWIND
- .4byte Move_ACUPRESSURE
- .4byte Move_METAL_BURST
- .4byte Move_U_TURN
- .4byte Move_CLOSE_COMBAT
- .4byte Move_PAYBACK
- .4byte Move_ASSURANCE
- .4byte Move_EMBARGO
- .4byte Move_FLING
- .4byte Move_PSYCHO_SHIFT
- .4byte Move_TRUMP_CARD
- .4byte Move_HEAL_BLOCK
- .4byte Move_WRING_OUT
- .4byte Move_POWER_TRICK
- .4byte Move_GASTRO_ACID
- .4byte Move_LUCKY_CHANT
- .4byte Move_ME_FIRST
- .4byte Move_COPYCAT
- .4byte Move_POWER_SWAP
- .4byte Move_GUARD_SWAP
- .4byte Move_PUNISHMENT
- .4byte Move_LAST_RESORT
- .4byte Move_WORRY_SEED
- .4byte Move_SUCKER_PUNCH
- .4byte Move_TOXIC_SPIKES
- .4byte Move_HEART_SWAP
- .4byte Move_AQUA_RING
- .4byte Move_MAGNET_RISE
- .4byte Move_FLARE_BLITZ
- .4byte Move_FORCE_PALM
- .4byte Move_AURA_SPHERE
- .4byte Move_ROCK_POLISH
- .4byte Move_POISON_JAB
- .4byte Move_DARK_PULSE
- .4byte Move_NIGHT_SLASH
- .4byte Move_AQUA_TAIL
- .4byte Move_SEED_BOMB
- .4byte Move_AIR_SLASH
- .4byte Move_XSCISSOR
- .4byte Move_BUG_BUZZ
- .4byte Move_DRAGON_PULSE
- .4byte Move_DRAGON_RUSH
- .4byte Move_POWER_GEM
- .4byte Move_DRAIN_PUNCH
- .4byte Move_VACUUM_WAVE
- .4byte Move_FOCUS_BLAST
- .4byte Move_ENERGY_BALL
- .4byte Move_BRAVE_BIRD
- .4byte Move_EARTH_POWER
- .4byte Move_SWITCHEROO
- .4byte Move_GIGA_IMPACT
- .4byte Move_NASTY_PLOT
- .4byte Move_BULLET_PUNCH
- .4byte Move_AVALANCHE
- .4byte Move_ICE_SHARD
- .4byte Move_SHADOW_CLAW
- .4byte Move_THUNDER_FANG
- .4byte Move_ICE_FANG
- .4byte Move_FIRE_FANG
- .4byte Move_SHADOW_SNEAK
- .4byte Move_MUD_BOMB
- .4byte Move_PSYCHO_CUT
- .4byte Move_ZEN_HEADBUTT
- .4byte Move_MIRROR_SHOT
- .4byte Move_FLASH_CANNON
- .4byte Move_ROCK_CLIMB
- .4byte Move_DEFOG
- .4byte Move_TRICK_ROOM
- .4byte Move_DRACO_METEOR
- .4byte Move_DISCHARGE
- .4byte Move_LAVA_PLUME
- .4byte Move_LEAF_STORM
- .4byte Move_POWER_WHIP
- .4byte Move_ROCK_WRECKER
- .4byte Move_CROSS_POISON
- .4byte Move_GUNK_SHOT
- .4byte Move_IRON_HEAD
- .4byte Move_MAGNET_BOMB
- .4byte Move_STONE_EDGE
- .4byte Move_CAPTIVATE
- .4byte Move_STEALTH_ROCK
- .4byte Move_GRASS_KNOT
- .4byte Move_CHATTER
- .4byte Move_JUDGMENT
- .4byte Move_BUG_BITE
- .4byte Move_CHARGE_BEAM
- .4byte Move_WOOD_HAMMER
- .4byte Move_AQUA_JET
- .4byte Move_ATTACK_ORDER
- .4byte Move_DEFEND_ORDER
- .4byte Move_HEAL_ORDER
- .4byte Move_HEAD_SMASH
- .4byte Move_DOUBLE_HIT
- .4byte Move_ROAR_OF_TIME
- .4byte Move_SPACIAL_REND
- .4byte Move_LUNAR_DANCE
- .4byte Move_CRUSH_GRIP
- .4byte Move_MAGMA_STORM
- .4byte Move_DARK_VOID
- .4byte Move_SEED_FLARE
- .4byte Move_OMINOUS_WIND
- .4byte Move_SHADOW_FORCE
-@@@@@@@@@@@@ GEN 5 @@@@@@@@@@@@
- .4byte Move_HONE_CLAWS
- .4byte Move_WIDE_GUARD
- .4byte Move_GUARD_SPLIT
- .4byte Move_POWER_SPLIT
- .4byte Move_WONDER_ROOM
- .4byte Move_PSYSHOCK
- .4byte Move_VENOSHOCK
- .4byte Move_AUTOTOMIZE
- .4byte Move_RAGE_POWDER
- .4byte Move_TELEKINESIS
- .4byte Move_MAGIC_ROOM
- .4byte Move_SMACK_DOWN
- .4byte Move_STORM_THROW
- .4byte Move_FLAME_BURST
- .4byte Move_SLUDGE_WAVE
- .4byte Move_QUIVER_DANCE
- .4byte Move_HEAVY_SLAM
- .4byte Move_SYCHRONOISE
- .4byte Move_ELECTRO_BALL
- .4byte Move_SOAK
- .4byte Move_FLAME_CHARGE
- .4byte Move_COIL
- .4byte Move_LOW_SWEEP
- .4byte Move_ACID_SPRAY
- .4byte Move_FOUL_PLAY
- .4byte Move_SIMPLE_BEAM
- .4byte Move_ENTRAINMENT
- .4byte Move_AFTER_YOU
- .4byte Move_ROUND
- .4byte Move_ECHOED_VOICE
- .4byte Move_CHIP_AWAY
- .4byte Move_CLEAR_SMOG
- .4byte Move_STORED_POWER
- .4byte Move_QUICK_GUARD
- .4byte Move_ALLY_SWITCH
- .4byte Move_SCALD
- .4byte Move_SHELL_SMASH
- .4byte Move_HEAL_PULSE
- .4byte Move_HEX
- .4byte Move_SKY_DROP
- .4byte Move_SHIFT_GEAR
- .4byte Move_CIRCLE_THROW
- .4byte Move_INCINERATE
- .4byte Move_QUASH
- .4byte Move_ACROBATICS
- .4byte Move_REFLECT_TYPE
- .4byte Move_RETALIATE
- .4byte Move_FINAL_GAMBIT
- .4byte Move_BESTOW
- .4byte Move_INFERNO
- .4byte Move_WATER_PLEDGE
- .4byte Move_FIRE_PLEDGE
- .4byte Move_GRASS_PLEDGE
- .4byte Move_VOLT_SWITCH
- .4byte Move_STRUGGLE_BUG
- .4byte Move_BULLDOZE
- .4byte Move_FROST_BREATH
- .4byte Move_DRAGON_TAIL
- .4byte Move_WORK_UP
- .4byte Move_ELECTROWEB
- .4byte Move_WILD_CHARGE
- .4byte Move_DRILL_RUN
- .4byte Move_DUAL_CHOP
- .4byte Move_HEART_STAMP
- .4byte Move_HORN_LEECH
- .4byte Move_SACRED_SWORD
- .4byte Move_RAZOR_SHELL
- .4byte Move_HEAT_CRASH
- .4byte Move_LEAF_TORNADO
- .4byte Move_STEAMROLLER
- .4byte Move_COTTON_GUARD
- .4byte Move_NIGHT_DAZE
- .4byte Move_PSYSTRIKE
- .4byte Move_TAIL_SLAP
- .4byte Move_HURRICANE
- .4byte Move_HEAD_CHARGE
- .4byte Move_GEAR_GRIND
- .4byte Move_SEARING_SHOT
- .4byte Move_TECHNO_BLAST
- .4byte Move_RELIC_SONG
- .4byte Move_SECRET_SWORD
- .4byte Move_GLACIATE
- .4byte Move_BOLT_STRIKE
- .4byte Move_BLUE_FLARE
- .4byte Move_FIERY_DANCE
- .4byte Move_FREEZE_SHOCK
- .4byte Move_ICE_BURN
- .4byte Move_SNARL
- .4byte Move_ICICLE_CRASH
- .4byte Move_V_CREATE
- .4byte Move_FUSION_FLARE
- .4byte Move_FUSION_BOLT
-@@@@@@@@@@@@ GEN 6 @@@@@@@@@@@@
- .4byte Move_FLYING_PRESS
- .4byte Move_MAT_BLOCK
- .4byte Move_BELCH
- .4byte Move_ROTOTILLER
- .4byte Move_STICKY_WEB
- .4byte Move_FELL_STINGER
- .4byte Move_PHANTOM_FORCE
- .4byte Move_TRICK_OR_TREAT
- .4byte Move_NOBLE_ROAR
- .4byte Move_ION_DELUGE
- .4byte Move_PARABOLIC_CHARGE
- .4byte Move_FORESTS_CURSE
- .4byte Move_PETAL_BLIZZARD
- .4byte Move_FREEZE_DRY
- .4byte Move_DISARMING_VOICE
- .4byte Move_PARTING_SHOT
- .4byte Move_TOPSY_TURVY
- .4byte Move_DRAINING_KISS
- .4byte Move_CRAFTY_SHIELD
- .4byte Move_FLOWER_SHIELD
- .4byte Move_GRASSY_TERRAIN
- .4byte Move_MISTY_TERRAIN
- .4byte Move_ELECTRIFY
- .4byte Move_PLAY_ROUGH
- .4byte Move_FAIRY_WIND
- .4byte Move_MOONBLAST
- .4byte Move_BOOMBURST
- .4byte Move_FAIRY_LOCK
- .4byte Move_KINGS_SHIELD
- .4byte Move_PLAY_NICE
- .4byte Move_CONFIDE
- .4byte Move_DIAMOND_STORM
- .4byte Move_STEAM_ERUPTION
- .4byte Move_HYPERSPACE_HOLE
- .4byte Move_WATER_SHURIKEN
- .4byte Move_MYSTICAL_FIRE
- .4byte Move_SPIKY_SHIELD
- .4byte Move_AROMATIC_MIST
- .4byte Move_EERIE_IMPULSE
- .4byte Move_VENOM_DRENCH
- .4byte Move_POWDER
- .4byte Move_GEOMANCY
- .4byte Move_MAGNETIC_FLUX
- .4byte Move_HAPPY_HOUR
- .4byte Move_ELECTRIC_TERRAIN
- .4byte Move_DAZZLING_GLEAM
- .4byte Move_CELEBRATE
- .4byte Move_HOLD_HANDS
- .4byte Move_BABY_DOLL_EYES
- .4byte Move_NUZZLE
- .4byte Move_HOLD_BACK
- .4byte Move_INFESTATION
- .4byte Move_POWER_UP_PUNCH
- .4byte Move_OBLIVION_WING
- .4byte Move_THOUSAND_ARROWS
- .4byte Move_THOUSAND_WAVES
- .4byte Move_LANDS_WRATH
- .4byte Move_LIGHT_OF_RUIN
- .4byte Move_ORIGIN_PULSE
- .4byte Move_PRECIPICE_BLADES
- .4byte Move_DRAGON_ASCENT
- .4byte Move_HYPERSPACE_FURY
-@@@@@@@@@@@@ GEN 7 @@@@@@@@@@@@
- .4byte Move_SHORE_UP
- .4byte Move_FIRST_IMPRESSION
- .4byte Move_BANEFUL_BUNKER
- .4byte Move_SPIRIT_SHACKLE
- .4byte Move_DARKEST_LARIAT
- .4byte Move_SPARKLING_ARIA
- .4byte Move_ICE_HAMMER
- .4byte Move_FLORAL_HEALING
- .4byte Move_HIGH_HORSEPOWER
- .4byte Move_STRENGTH_SAP
- .4byte Move_SOLAR_BLADE
- .4byte Move_LEAFAGE
- .4byte Move_SPOTLIGHT
- .4byte Move_TOXIC_THREAD
- .4byte Move_LASER_FOCUS
- .4byte Move_GEAR_UP
- .4byte Move_THROAT_CHOP
- .4byte Move_POLLEN_PUFF
- .4byte Move_ANCHOR_SHOT
- .4byte Move_PSYCHIC_TERRAIN
- .4byte Move_LUNGE
- .4byte Move_FIRE_LASH
- .4byte Move_POWER_TRIP
- .4byte Move_BURN_UP
- .4byte Move_SPEED_SWAP
- .4byte Move_SMART_STRIKE
- .4byte Move_PURIFY
- .4byte Move_REVELATION_DANCE
- .4byte Move_CORE_ENFORCER
- .4byte Move_TROP_KICK
- .4byte Move_INSTRUCT
- .4byte Move_BEAK_BLAST
- .4byte Move_CLANGING_SCALES
- .4byte Move_DRAGON_HAMMER
- .4byte Move_BRUTAL_SWING
- .4byte Move_AURORA_VEIL
- .4byte Move_SHELL_TRAP
- .4byte Move_FLEUR_CANNON
- .4byte Move_PSYCHIC_FANGS
- .4byte Move_STOMPING_TANTRUM
- .4byte Move_SHADOW_BONE
- .4byte Move_ACCELEROCK
- .4byte Move_LIQUIDATION
- .4byte Move_PRISMATIC_LASER
- .4byte Move_SPECTRAL_THIEF
- .4byte Move_SUNSTEEL_STRIKE
- .4byte Move_MOONGEIST_BEAM
- .4byte Move_TEARFUL_LOOK
- .4byte Move_ZING_ZAP
- .4byte Move_NATURES_MADNESS
- .4byte Move_MULTI_ATTACK
- .4byte Move_MIND_BLOWN
- .4byte Move_PLASMA_FISTS
- .4byte Move_PHOTON_GEYSER
- .4byte Move_ZIPPY_ZAP
- .4byte Move_SPLISHY_SPLASH
- .4byte Move_FLOATY_FALL
- .4byte Move_PIKA_PAPOW
- .4byte Move_BOUNCY_BUBBLE
- .4byte Move_BUZZY_BUZZ
- .4byte Move_SIZZLY_SLIDE
- .4byte Move_GLITZY_GLOW
- .4byte Move_BADDY_BAD
- .4byte Move_SAPPY_SEED
- .4byte Move_FREEZY_FROST
- .4byte Move_SPARKLY_SWIRL
- .4byte Move_VEEVEE_VOLLEY
- .4byte Move_DOUBLE_IRON_BASH
-@@@@@@@@@@@@ GEN 8 @@@@@@@@@@@@
- .4byte Move_DYNAMAX_CANNON
- .4byte Move_SNIPE_SHOT
- .4byte Move_JAW_LOCK
- .4byte Move_STUFF_CHEEKS
- .4byte Move_NO_RETREAT
- .4byte Move_TAR_SHOT
- .4byte Move_MAGIC_POWDER
- .4byte Move_DRAGON_DARTS
- .4byte Move_TEATIME
- .4byte Move_OCTOLOCK
- .4byte Move_BOLT_BEAK
- .4byte Move_FISHIOUS_REND
- .4byte Move_COURT_CHANGE
- .4byte Move_CLANGOROUS_SOUL
- .4byte Move_BODY_PRESS
- .4byte Move_DECORATE
- .4byte Move_DRUM_BEATING
- .4byte Move_SNAP_TRAP
- .4byte Move_PYRO_BALL
- .4byte Move_BEHEMOTH_BLADE
- .4byte Move_BEHEMOTH_BASH
- .4byte Move_AURA_WHEEL
- .4byte Move_BREAKING_SWIPE
- .4byte Move_BRANCH_POKE
- .4byte Move_OVERDRIVE
- .4byte Move_APPLE_ACID
- .4byte Move_GRAV_APPLE
- .4byte Move_SPIRIT_BREAK
- .4byte Move_STRANGE_STEAM
- .4byte Move_LIFE_DEW
- .4byte Move_OBSTRUCT
- .4byte Move_FALSE_SURRENDER
- .4byte Move_METEOR_ASSAULT
- .4byte Move_ETERNA_BEAM
- .4byte Move_STEEL_BEAM
- .4byte Move_EXPANDING_FORCE
- .4byte Move_STEEL_ROLLER
- .4byte Move_SCALE_SHOT
- .4byte Move_METEOR_BEAM
- .4byte Move_SHELL_SIDE_ARM
- .4byte Move_MISTY_EXPLOSION
- .4byte Move_GRASSY_GLIDE
- .4byte Move_RISING_VOLTAGE
- .4byte Move_TERRAIN_PULSE
- .4byte Move_SKITTER_SMACK
- .4byte Move_BURNING_JEALOUSY
- .4byte Move_LASH_OUT
- .4byte Move_POLTERGEIST
- .4byte Move_CORROSIVE_GAS
- .4byte Move_COACHING
- .4byte Move_FLIP_TURN
- .4byte Move_TRIPLE_AXEL
- .4byte Move_DUAL_WINGBEAT
- .4byte Move_SCORCHING_SANDS
- .4byte Move_JUNGLE_HEALING
- .4byte Move_WICKED_BLOW
- .4byte Move_SURGING_STRIKES
- .4byte Move_THUNDER_CAGE
- .4byte Move_DRAGON_ENERGY
- .4byte Move_FREEZING_GLARE
- .4byte Move_FIERY_WRATH
- .4byte Move_THUNDEROUS_KICK
- .4byte Move_GLACIAL_LANCE
- .4byte Move_ASTRAL_BARRAGE
- .4byte Move_EERIE_SPELL
-@@@@ LA MOVES
- .4byte Move_DIRE_CLAW
- .4byte Move_PSYSHIELD_BASH
- .4byte Move_POWER_SHIFT
- .4byte Move_STONE_AXE
- .4byte Move_SPRINGTIDE_STORM
- .4byte Move_MYSTICAL_POWER
- .4byte Move_RAGING_FURY
- .4byte Move_WAVE_CRASH
- .4byte Move_CHLOROBLAST
- .4byte Move_MOUNTAIN_GALE
- .4byte Move_VICTORY_DANCE
- .4byte Move_HEADLONG_RUSH
- .4byte Move_BARB_BARRAGE
- .4byte Move_ESPER_WING
- .4byte Move_BITTER_MALICE
- .4byte Move_SHELTER
- .4byte Move_TRIPLE_ARROWS
- .4byte Move_INFERNAL_PARADE
- .4byte Move_CEASELESS_EDGE
- .4byte Move_BLEAKWIND_STORM
- .4byte Move_WILDBOLT_STORM
- .4byte Move_SANDSEAR_STORM
- .4byte Move_LUNAR_BLESSING
- .4byte Move_TAKE_HEART
-@@@@@@@@@@@@ GEN 9 @@@@@@@@@@@@
- .4byte Move_TERA_BLAST
- .4byte Move_SILK_TRAP
- .4byte Move_AXE_KICK
- .4byte Move_LAST_RESPECTS
- .4byte Move_LUMINA_CRASH
- .4byte Move_ORDER_UP
- .4byte Move_JET_PUNCH
- .4byte Move_SPICY_EXTRACT
- .4byte Move_SPIN_OUT
- .4byte Move_POPULATION_BOMB
- .4byte Move_ICE_SPINNER
- .4byte Move_GLAIVE_RUSH
- .4byte Move_REVIVAL_BLESSING
- .4byte Move_SALT_CURE
- .4byte Move_TRIPLE_DIVE
- .4byte Move_MORTAL_SPIN
- .4byte Move_DOODLE
- .4byte Move_FILLET_AWAY
- .4byte Move_KOWTOW_CLEAVE
- .4byte Move_FLOWER_TRICK
- .4byte Move_TORCH_SONG
- .4byte Move_AQUA_STEP
- .4byte Move_RAGING_BULL
- .4byte Move_MAKE_IT_RAIN
- .4byte Move_RUINATION
- .4byte Move_COLLISION_COURSE
- .4byte Move_ELECTRO_DRIFT
- .4byte Move_SHED_TAIL
- .4byte Move_CHILLY_RECEPTION
- .4byte Move_TIDY_UP
- .4byte Move_SNOWSCAPE
- .4byte Move_POUNCE
- .4byte Move_TRAILBLAZE
- .4byte Move_CHILLING_WATER
- .4byte Move_HYPER_DRILL
- .4byte Move_TWIN_BEAM
- .4byte Move_RAGE_FIST
- .4byte Move_ARMOR_CANNON
- .4byte Move_BITTER_BLADE
- .4byte Move_DOUBLE_SHOCK
- .4byte Move_GIGATON_HAMMER
- .4byte Move_COMEUPPANCE
- .4byte Move_AQUA_CUTTER
- .4byte Move_BLAZING_TORQUE
- .4byte Move_WICKED_TORQUE
- .4byte Move_NOXIOUS_TORQUE
- .4byte Move_COMBAT_TORQUE
- .4byte Move_MAGICAL_TORQUE
- .4byte Move_PSYBLADE
- .4byte Move_HYDRO_STEAM
- .4byte Move_BLOOD_MOON
- .4byte Move_MATCHA_GOTCHA
- .4byte Move_SYRUP_BOMB
- .4byte Move_IVY_CUDGEL
- .4byte Move_ELECTRO_SHOT
- .4byte Move_TERA_STARSTORM
- .4byte Move_FICKLE_BEAM
- .4byte Move_BURNING_BULWARK
- .4byte Move_THUNDERCLAP
- .4byte Move_MIGHTY_CLEAVE
- .4byte Move_TACHYON_CUTTER
- .4byte Move_HARD_PRESS
- .4byte Move_DRAGON_CHEER
- .4byte Move_ALLURING_VOICE
- .4byte Move_TEMPER_FLARE
- .4byte Move_SUPERCELL_SLAM
- .4byte Move_PSYCHIC_NOISE
- .4byte Move_UPPER_HAND
- .4byte Move_MALIGNANT_CHAIN
- .4byte Move_SYLPH_SONG
-@@@@ Z MOVES
- .4byte Move_BREAKNECK_BLITZ
- .4byte Move_ALL_OUT_PUMMELING
- .4byte Move_SUPERSONIC_SKYSTRIKE
- .4byte Move_ACID_DOWNPOUR
- .4byte Move_TECTONIC_RAGE
- .4byte Move_CONTINENTAL_CRUSH
- .4byte Move_SAVAGE_SPIN_OUT
- .4byte Move_NEVER_ENDING_NIGHTMARE
- .4byte Move_CORKSCREW_CRASH
- .4byte Move_INFERNO_OVERDRIVE
- .4byte Move_HYDRO_VORTEX
- .4byte Move_BLOOM_DOOM
- .4byte Move_GIGAVOLT_HAVOC
- .4byte Move_SHATTERED_PSYCHE
- .4byte Move_SUBZERO_SLAMMER
- .4byte Move_DEVASTATING_DRAKE
- .4byte Move_BLACK_HOLE_ECLIPSE
- .4byte Move_TWINKLE_TACKLE
- .4byte Move_CATASTROPIKA
- .4byte Move_10000000_VOLT_THUNDERBOLT
- .4byte Move_STOKED_SPARKSURFER
- .4byte Move_EXTREME_EVOBOOST
- .4byte Move_PULVERIZING_PANCAKE
- .4byte Move_GENESIS_SUPERNOVA
- .4byte Move_SINISTER_ARROW_RAID
- .4byte Move_MALICIOUS_MOONSAULT
- .4byte Move_OCEANIC_OPERETTA
- .4byte Move_SPLINTERED_STORMSHARDS
- .4byte Move_LETS_SNUGGLE_FOREVER
- .4byte Move_CLANGOROUS_SOULBLAZE
- .4byte Move_GUARDIAN_OF_ALOLA
- .4byte Move_SEARING_SUNRAZE_SMASH
- .4byte Move_MENACING_MOONRAZE_MAELSTROM
- .4byte Move_LIGHT_THAT_BURNS_THE_SKY
- .4byte Move_SOUL_STEALING_7_STAR_STRIKE
-@@@@ MAX MOVES
- .4byte Move_MAX_GUARD
- .4byte Move_MAX_STRIKE
- .4byte Move_MAX_KNUCKLE
- .4byte Move_MAX_AIRSTREAM
- .4byte Move_MAX_OOZE
- .4byte Move_MAX_QUAKE
- .4byte Move_MAX_ROCKFALL
- .4byte Move_MAX_FLUTTERBY
- .4byte Move_MAX_PHANTASM
- .4byte Move_MAX_STEELSPIKE
- .4byte Move_MAX_FLARE
- .4byte Move_MAX_GEYSER
- .4byte Move_MAX_OVERGROWTH
- .4byte Move_MAX_LIGHTNING
- .4byte Move_MAX_MINDSTORM
- .4byte Move_MAX_HAILSTORM
- .4byte Move_MAX_WYRMWIND
- .4byte Move_MAX_DARKNESS
- .4byte Move_MAX_STARFALL
-@@@@ G-MAX MOVES
- .4byte Move_G_MAX_VINE_LASH
- .4byte Move_G_MAX_WILDFIRE
- .4byte Move_G_MAX_CANNONADE
- .4byte Move_G_MAX_BEFUDDLE
- .4byte Move_G_MAX_VOLT_CRASH
- .4byte Move_G_MAX_GOLD_RUSH
- .4byte Move_G_MAX_CHI_STRIKE
- .4byte Move_G_MAX_TERROR
- .4byte Move_G_MAX_FOAM_BURST
- .4byte Move_G_MAX_RESONANCE
- .4byte Move_G_MAX_CUDDLE
- .4byte Move_G_MAX_REPLENISH
- .4byte Move_G_MAX_MALODOR
- .4byte Move_G_MAX_MELTDOWN
- .4byte Move_G_MAX_DRUM_SOLO
- .4byte Move_G_MAX_FIREBALL
- .4byte Move_G_MAX_HYDROSNIPE
- .4byte Move_G_MAX_WIND_RAGE
- .4byte Move_G_MAX_GRAVITAS
- .4byte Move_G_MAX_STONESURGE
- .4byte Move_G_MAX_VOLCALITH
- .4byte Move_G_MAX_TARTNESS
- .4byte Move_G_MAX_SWEETNESS
- .4byte Move_G_MAX_SANDBLAST
- .4byte Move_G_MAX_STUN_SHOCK
- .4byte Move_G_MAX_CENTIFERNO
- .4byte Move_G_MAX_SMITE
- .4byte Move_G_MAX_SNOOZE
- .4byte Move_G_MAX_FINALE
- .4byte Move_G_MAX_STEELSURGE
- .4byte Move_G_MAX_DEPLETION
- .4byte Move_G_MAX_ONE_BLOW
- .4byte Move_G_MAX_RAPID_FLOW
-@@@ Last Move - cannot be reached
- .4byte Move_COUNT
-
.align 2
gBattleAnims_StatusConditions::
.4byte Status_Poison @ B_ANIM_STATUS_PSN
@@ -1033,6 +82,10 @@ gBattleAnims_General::
.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::
@@ -1046,7 +99,7 @@ gBattleAnims_Special::
.4byte Special_CriticalCaptureBallThrow @ B_ANIM_CRITICAL_CAPTURE_THROW
@@@@@@@@@@@@@@@@@@@@@@@ GEN 4 @@@@@@@@@@@@@@@@@@@@@@@
-Move_ROOST:
+Move_ROOST::
loadspritegfx ANIM_TAG_WHITE_FEATHER
loadspritegfx ANIM_TAG_BLUE_STAR
monbg ANIM_ATTACKER
@@ -1071,7 +124,7 @@ Move_ROOST:
waitforvisualfinish
end
-Move_GRAVITY:
+Move_GRAVITY::
fadetobg BG_COSMIC
waitbgfadein
createvisualtask AnimTask_SetAnimTargetToAttackerOpposite, 1
@@ -1092,7 +145,7 @@ Move_GRAVITY:
waitforvisualfinish
end
-Move_MIRACLE_EYE:
+Move_MIRACLE_EYE::
loadspritegfx ANIM_TAG_TEAL_ALERT
loadspritegfx ANIM_TAG_OPENING_EYE
loadspritegfx ANIM_TAG_ROUND_WHITE_HALO
@@ -1110,7 +163,7 @@ Move_MIRACLE_EYE:
clearmonbg ANIM_DEF_PARTNER
end
-Move_WAKE_UP_SLAP:
+Move_WAKE_UP_SLAP::
loadspritegfx ANIM_TAG_HANDS_AND_FEET
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_SMELLINGSALT_EFFECT
@@ -1130,7 +183,7 @@ Move_WAKE_UP_SLAP:
blendoff
end
-Move_HAMMER_ARM:
+Move_HAMMER_ARM::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_ROCKS
loadspritegfx ANIM_TAG_SLAM_HIT
@@ -1154,7 +207,7 @@ Move_HAMMER_ARM:
blendoff
end
-Move_GYRO_BALL:
+Move_GYRO_BALL::
loadspritegfx ANIM_TAG_IMPACT
loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2
createvisualtask AnimTask_MetallicShine, 5, 0, 0, RGB_BLACK
@@ -1184,7 +237,7 @@ Move_GYRO_BALL:
waitforvisualfinish
end
-Move_HEALING_WISH:
+Move_HEALING_WISH::
loadspritegfx ANIM_TAG_GREEN_SPARKLE
setalpha 0, 16
createvisualtask AnimTask_AlphaFadeIn, 3, 0, 16, 16, 0, 1
@@ -1204,7 +257,7 @@ Move_HEALING_WISH:
waitforvisualfinish
end
-Move_BRINE:
+Move_BRINE::
loadspritegfx ANIM_TAG_GLOWY_BLUE_ORB
loadspritegfx ANIM_TAG_WATER_IMPACT
monbg ANIM_DEF_PARTNER
@@ -1218,7 +271,7 @@ Move_BRINE:
blendoff
end
-Move_NATURAL_GIFT:
+Move_NATURAL_GIFT::
loadspritegfx ANIM_TAG_SPARKLE_2
loadspritegfx ANIM_TAG_HOLLOW_ORB
monbg ANIM_ATTACKER
@@ -1247,7 +300,7 @@ Move_NATURAL_GIFT:
delay 1
end
-Move_FEINT:
+Move_FEINT::
loadspritegfx ANIM_TAG_FEINT
createsprite gFeintSwipeSpriteTemplate, ANIM_ATTACKER, 10, -32, 0, 15
playsewithpan SE_M_RAZOR_WIND2, SOUND_PAN_ATTACKER
@@ -1261,7 +314,7 @@ Move_FEINT:
waitforvisualfinish
end
-Move_PLUCK:
+Move_PLUCK::
loadspritegfx ANIM_TAG_SEED_BROWN
loadspritegfx ANIM_TAG_IMPACT
playsewithpan SE_M_POISON_POWDER, SOUND_PAN_ATTACKER
@@ -1287,7 +340,7 @@ Move_PLUCK:
waitforvisualfinish
end
-Move_TAILWIND:
+Move_TAILWIND::
loadspritegfx ANIM_TAG_FLYING_DIRT
playsewithpan SE_M_GUST, SOUND_PAN_ATTACKER
call SetHighSpeedBg
@@ -1350,7 +403,7 @@ General_Tailwind:
delay 1
end
-Move_ACUPRESSURE:
+Move_ACUPRESSURE::
loadspritegfx ANIM_TAG_ACUPRESSURE
loadspritegfx ANIM_TAG_SPARK_2
createsprite gAcupressureSpriteTemplate, ANIM_ATTACKER, 40, 0, -40, 40
@@ -1358,7 +411,7 @@ Move_ACUPRESSURE:
call ElectricityEffect
end
-Move_METAL_BURST:
+Move_METAL_BURST::
loadspritegfx ANIM_TAG_ECLIPSING_ORB
loadspritegfx ANIM_TAG_RED_ORB
loopsewithpan SE_M_TRI_ATTACK, -64, 18, 3
@@ -1381,7 +434,7 @@ Move_METAL_BURST:
waitforvisualfinish
end
-Move_U_TURN:
+Move_U_TURN::
loadspritegfx ANIM_TAG_ROUND_SHADOW
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_DEF_PARTNER
@@ -1410,7 +463,7 @@ UTurnVisible:
createsprite gFlyBallAttackSpriteTemplate, ANIM_ATTACKER, 2, 20, FALSE
goto UTurnContinue
-Move_CLOSE_COMBAT:
+Move_CLOSE_COMBAT::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_HANDS_AND_FEET
call SetHighSpeedBg
@@ -1446,7 +499,7 @@ Move_CLOSE_COMBAT:
delay 1
end
-Move_PAYBACK:
+Move_PAYBACK::
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_TARGET
fadetobg BG_DARK
@@ -1478,7 +531,7 @@ Move_PAYBACK:
waitbgfadein
end
-Move_ASSURANCE:
+Move_ASSURANCE::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_PURPLE_HAND_OUTLINE
monbg ANIM_TARGET
@@ -1497,7 +550,7 @@ Move_ASSURANCE:
waitbgfadein
end
-Move_EMBARGO:
+Move_EMBARGO::
loadspritegfx ANIM_TAG_RED_ORB
monbg ANIM_DEF_PARTNER
splitbgprio ANIM_TARGET
@@ -1519,7 +572,7 @@ EmbargoOrbs1:
delay 12
return
-Move_FLING:
+Move_FLING::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_BLACK_BALL
monbg ANIM_DEF_PARTNER
@@ -1535,7 +588,7 @@ Move_FLING:
blendoff
end
-Move_PSYCHO_SHIFT:
+Move_PSYCHO_SHIFT::
loadspritegfx ANIM_TAG_ELECTRIC_ORBS
loadspritegfx ANIM_TAG_HOLLOW_ORB
loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
@@ -1561,7 +614,7 @@ Move_PSYCHO_SHIFT:
blendoff
end
-Move_TRUMP_CARD:
+Move_TRUMP_CARD::
loadspritegfx ANIM_TAG_TRUMP_CARD
loadspritegfx ANIM_TAG_CUT
loadspritegfx ANIM_TAG_TRUMP_CARD_PARTICLES
@@ -1605,7 +658,7 @@ Move_TRUMP_CARD:
waitforvisualfinish
end
-Move_HEAL_BLOCK:
+Move_HEAL_BLOCK::
loadspritegfx ANIM_TAG_BLUE_STAR
monbg ANIM_TARGET
createsoundtask SoundTask_PlaySeChangingVolume, SE_M_ABSORB_2, SOUND_PAN_TARGET, 256, -16, 0, 2
@@ -1629,7 +682,7 @@ Move_HEAL_BLOCK:
clearmonbg ANIM_TARGET
end
-Move_WRING_OUT:
+Move_WRING_OUT::
loadspritegfx ANIM_TAG_WRING_OUT
monbg ANIM_TARGET
setalpha 12, 8
@@ -1650,7 +703,7 @@ Move_WRING_OUT:
waitforvisualfinish
end
-Move_POWER_TRICK:
+Move_POWER_TRICK::
loadspritegfx ANIM_TAG_POWER_TRICK
loopsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET 0xa 0x3
createvisualtask AnimTask_UproarDistortion 0x2, 0x0
@@ -1662,7 +715,7 @@ Move_POWER_TRICK:
waitforvisualfinish
end
-Move_GASTRO_ACID:
+Move_GASTRO_ACID::
loadspritegfx ANIM_TAG_GREEN_POISON_BUBBLE
monbg ANIM_DEF_PARTNER
createsprite gGreenPoisonBubble, ANIM_TARGET, 2, 20, 0, 40, 1, 0, 0, FALSE
@@ -1694,7 +747,7 @@ Move_GASTRO_ACID:
clearmonbg ANIM_DEF_PARTNER
end
-Move_LUCKY_CHANT:
+Move_LUCKY_CHANT::
loadspritegfx ANIM_TAG_GOLD_STARS
monbg ANIM_DEF_PARTNER
setalpha 12, 8
@@ -1721,10 +774,10 @@ Move_LUCKY_CHANT:
unloadspritegfx ANIM_TAG_GOLD_STARS
end
-Move_ME_FIRST:
+Move_ME_FIRST::
end
-Move_COPYCAT:
+Move_COPYCAT::
loadspritegfx ANIM_TAG_GRAY_ORB
loadspritegfx ANIM_TAG_THIN_RING
playsewithpan SE_M_MEGA_KICK, SOUND_PAN_ATTACKER
@@ -1746,7 +799,7 @@ Move_COPYCAT:
waitforvisualfinish
end
-Move_POWER_SWAP:
+Move_POWER_SWAP::
loadspritegfx ANIM_TAG_COLORED_ORBS
playsewithpan SE_M_DOUBLE_TEAM, 0
createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 0, 0, 42, -32
@@ -1788,7 +841,7 @@ Move_POWER_SWAP:
waitforvisualfinish
end
-Move_GUARD_SWAP:
+Move_GUARD_SWAP::
loadspritegfx ANIM_TAG_COLORED_ORBS
playsewithpan SE_M_DOUBLE_TEAM, 0
createsprite gPowerSwapGuardSwapSpriteTemplate, ANIM_TARGET, 3, 0, 0, 2, 0, 42, -32
@@ -1830,7 +883,7 @@ Move_GUARD_SWAP:
waitforvisualfinish
end
-Move_PUNISHMENT:
+Move_PUNISHMENT::
loadspritegfx ANIM_TAG_SCRATCH
loadspritegfx ANIM_TAG_POISON_BUBBLE
monbg ANIM_TARGET
@@ -1853,7 +906,7 @@ Move_PUNISHMENT:
blendoff
end
-Move_LAST_RESORT:
+Move_LAST_RESORT::
fadetobg BG_COSMIC
waitbgfadeout
createvisualtask AnimTask_StartSlidingBg, 2, 4, 0, 128, 0, -1
@@ -1891,7 +944,7 @@ Move_LAST_RESORT:
call UnsetHighSpeedBg
end
-Move_WORRY_SEED:
+Move_WORRY_SEED::
loadspritegfx ANIM_TAG_WORRY_SEED
loadspritegfx ANIM_TAG_SMALL_CLOUD
playsewithpan SE_M_POISON_POWDER, SOUND_PAN_ATTACKER
@@ -1905,7 +958,7 @@ Move_WORRY_SEED:
waitforvisualfinish
end
-Move_SUCKER_PUNCH:
+Move_SUCKER_PUNCH::
loadspritegfx ANIM_TAG_POISON_JAB
loadspritegfx ANIM_TAG_IMPACT
createsprite gSlideMonToOffsetSpriteTemplate, 2, 5, 0, 20, 0, 0, 4
@@ -1918,7 +971,7 @@ Move_SUCKER_PUNCH:
createsprite gSlideMonToOriginalPosSpriteTemplate, 2, 3, 0, 1, 4
end
-Move_TOXIC_SPIKES:
+Move_TOXIC_SPIKES::
loadspritegfx ANIM_TAG_TOXIC_SPIKES
loadspritegfx ANIM_TAG_POISON_BUBBLE
monbg ANIM_DEF_PARTNER
@@ -1938,10 +991,10 @@ Move_TOXIC_SPIKES:
clearmonbg ANIM_DEF_PARTNER
end
-Move_HEART_SWAP:
+Move_HEART_SWAP::
end
-Move_AQUA_RING:
+Move_AQUA_RING::
General_AquaRingHeal:
loadspritegfx ANIM_TAG_BLUE_STAR
loadspritegfx ANIM_TAG_SMALL_BUBBLES
@@ -1990,7 +1043,7 @@ General_AquaRingHeal:
blendoff
end
-Move_MAGNET_RISE:
+Move_MAGNET_RISE::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_SPARK_2
delay 0
@@ -2027,7 +1080,7 @@ Move_MAGNET_RISE:
waitforvisualfinish
end
-Move_FLARE_BLITZ:
+Move_FLARE_BLITZ::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_HANDS_AND_FEET
loadspritegfx ANIM_TAG_SMALL_EMBER
@@ -2104,7 +1157,7 @@ Move_FLARE_BLITZ:
waitbgfadein
end
-Move_FORCE_PALM:
+Move_FORCE_PALM::
loadspritegfx ANIM_TAG_SHADOW_BALL
loadspritegfx ANIM_TAG_HANDS_AND_FEET
loadspritegfx ANIM_TAG_IMPACT
@@ -2122,7 +1175,7 @@ Move_FORCE_PALM:
blendoff
end
-Move_AURA_SPHERE:
+Move_AURA_SPHERE::
loadspritegfx ANIM_TAG_METEOR
loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
monbg ANIM_ATK_PARTNER
@@ -2147,7 +1200,7 @@ SetAuraSphereBG:
fadetobg BG_AURA_SPHERE
goto SetHighSpeedBgFade
-Move_ROCK_POLISH:
+Move_ROCK_POLISH::
loadspritegfx ANIM_TAG_WHITE_STREAK
loadspritegfx ANIM_TAG_SPARKLE_3
setalpha 12, 8
@@ -2214,7 +1267,7 @@ Move_ROCK_POLISH:
blendoff
end
-Move_POISON_JAB:
+Move_POISON_JAB::
loadspritegfx ANIM_TAG_PURPLE_JAB
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_POISON_BUBBLE
@@ -2268,7 +1321,7 @@ Move_POISON_JAB:
blendoff
end
-Move_DARK_PULSE:
+Move_DARK_PULSE::
loadspritegfx ANIM_TAG_THIN_RING
monbg ANIM_TARGET
fadetobg BG_DARK
@@ -2296,7 +1349,7 @@ Move_DARK_PULSE:
waitbgfadein
end
-Move_NIGHT_SLASH:
+Move_NIGHT_SLASH::
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
@@ -2316,7 +1369,7 @@ Move_NIGHT_SLASH:
waitforvisualfinish
end
-Move_AQUA_TAIL:
+Move_AQUA_TAIL::
loadspritegfx ANIM_TAG_WATER_IMPACT
loadspritegfx ANIM_TAG_SMALL_BUBBLES
loadspritegfx ANIM_TAG_ICE_CRYSTALS
@@ -2370,7 +1423,7 @@ Move_AQUA_TAIL:
blendoff
end
-Move_SEED_BOMB:
+Move_SEED_BOMB::
loadspritegfx ANIM_TAG_SEED
loadspritegfx ANIM_TAG_EXPLOSION
createsprite gBulletSeedSpriteTemplate, ANIM_TARGET, 2, 20, 0
@@ -2419,7 +1472,7 @@ Move_SEED_BOMB:
waitforvisualfinish
end
-Move_AIR_SLASH:
+Move_AIR_SLASH::
loadspritegfx ANIM_TAG_SLASH
call SetSkyBg
createsprite gSlashSliceSpriteTemplate, ANIM_TARGET, 2, 1, -8, 0
@@ -2432,7 +1485,7 @@ Move_AIR_SLASH:
call UnsetSkyBg
end
-Move_XSCISSOR:
+Move_X_SCISSOR::
loadspritegfx ANIM_TAG_CUT
monbg ANIM_TARGET
setalpha 12, 8
@@ -2450,7 +1503,7 @@ Move_XSCISSOR:
blendoff
end
-Move_BUG_BUZZ:
+Move_BUG_BUZZ::
loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE
loadspritegfx ANIM_TAG_THIN_RING
monbg ANIM_DEF_PARTNER
@@ -2477,7 +1530,7 @@ Move_BUG_BUZZ:
call UnsetBugBg
end
-Move_DRAGON_PULSE:
+Move_DRAGON_PULSE::
loadspritegfx ANIM_TAG_DRAGON_PULSE
monbg ANIM_TARGET
setalpha 12, 8
@@ -2510,7 +1563,7 @@ DragonPulseParticle:
delay 4
return
-Move_DRAGON_RUSH:
+Move_DRAGON_RUSH::
loadspritegfx ANIM_TAG_SLAM_HIT_2
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_ROCKS
@@ -2539,7 +1592,7 @@ Move_DRAGON_RUSH:
blendoff
end
-Move_POWER_GEM: @ Copy of Hidden Power with background blackened
+Move_POWER_GEM:: @ Copy of Hidden Power with background blackened
loadspritegfx ANIM_TAG_POWER_GEM
createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, 1, 1, 0, 7, RGB_BLACK
waitforvisualfinish
@@ -2573,7 +1626,7 @@ Move_POWER_GEM: @ Copy of Hidden Power with background blackened
waitforvisualfinish
end
-Move_DRAIN_PUNCH:
+Move_DRAIN_PUNCH::
loadspritegfx ANIM_TAG_HANDS_AND_FEET
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_BLUE_STAR
@@ -2594,7 +1647,7 @@ Move_DRAIN_PUNCH:
blendoff
end
-Move_VACUUM_WAVE:
+Move_VACUUM_WAVE::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_HANDS_AND_FEET
loadspritegfx ANIM_TAG_THIN_RING
@@ -2610,7 +1663,7 @@ Move_VACUUM_WAVE:
blendoff
end
-Move_FOCUS_BLAST:
+Move_FOCUS_BLAST::
loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
loadspritegfx ANIM_TAG_METEOR
loadspritegfx ANIM_TAG_FLAT_ROCK
@@ -2634,7 +1687,7 @@ SetFocusBlastBG:
fadetobg BG_FOCUS_BLAST
goto SetHighSpeedBgFade
-Move_ENERGY_BALL:
+Move_ENERGY_BALL::
loadspritegfx ANIM_TAG_ENERGY_BALL
monbg ANIM_TARGET
setalpha 12, 8
@@ -2652,7 +1705,7 @@ Move_ENERGY_BALL:
blendoff
end
-Move_BRAVE_BIRD:
+Move_BRAVE_BIRD::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_BIRD
call SetSkyBg
@@ -2675,7 +1728,7 @@ Move_BRAVE_BIRD:
call UnsetSkyBg
end
-Move_EARTH_POWER:
+Move_EARTH_POWER::
loadspritegfx ANIM_TAG_SMALL_EMBER
loadspritegfx ANIM_TAG_FIRE_PLUME
createvisualtask AnimTask_HorizontalShake, 3, ANIM_DEF_PARTNER, 10, 50
@@ -2704,7 +1757,7 @@ Move_EARTH_POWER:
waitforvisualfinish
end
-Move_SWITCHEROO:
+Move_SWITCHEROO::
fadetobg BG_DARK
waitbgfadein
loadspritegfx ANIM_TAG_ITEM_BAG
@@ -2736,7 +1789,7 @@ Move_SWITCHEROO:
waitbgfadein
end
-Move_GIGA_IMPACT:
+Move_GIGA_IMPACT::
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_DEF_PARTNER
setalpha 12, 8
@@ -2780,7 +1833,7 @@ GigaImpactContinuity:
waitforvisualfinish
end
-Move_NASTY_PLOT:
+Move_NASTY_PLOT::
loadspritegfx ANIM_TAG_AMNESIA
fadetobg BG_DARK
waitbgfadeout
@@ -2795,7 +1848,7 @@ Move_NASTY_PLOT:
call UnsetPsychicBg
end
-Move_BULLET_PUNCH:
+Move_BULLET_PUNCH::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_HANDS_AND_FEET
monbg ANIM_TARGET
@@ -2849,7 +1902,7 @@ Move_BULLET_PUNCH:
blendoff
end
-Move_AVALANCHE:
+Move_AVALANCHE::
loadspritegfx ANIM_TAG_ROCKS
loadspritegfx ANIM_TAG_ICE_CHUNK
monbg ANIM_DEF_PARTNER
@@ -2900,7 +1953,7 @@ SnowSlide1:
delay 2
return
-Move_ICE_SHARD:
+Move_ICE_SHARD::
monbg ANIM_TARGET
splitbgprio ANIM_TARGET
setalpha 12, 8
@@ -2936,7 +1989,7 @@ Move_ICE_SHARD:
blendoff
end
-Move_SHADOW_CLAW:
+Move_SHADOW_CLAW::
loadspritegfx ANIM_TAG_BLUE_LIGHT_WALL
loadspritegfx ANIM_TAG_CLAW_SLASH
loadspritegfx ANIM_TAG_TORN_METAL
@@ -2962,7 +2015,7 @@ Move_SHADOW_CLAW:
clearmonbg ANIM_TARGET
end
-Move_THUNDER_FANG:
+Move_THUNDER_FANG::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_LIGHTNING
loadspritegfx ANIM_TAG_SHARP_TEETH
@@ -2996,7 +2049,7 @@ Move_THUNDER_FANG:
delay 1
end
-Move_ICE_FANG:
+Move_ICE_FANG::
monbg ANIM_TARGET
setalpha 12, 8
loadspritegfx ANIM_TAG_ICE_CRYSTALS
@@ -3033,7 +2086,7 @@ Move_ICE_FANG:
delay 1
end
-Move_FIRE_FANG:
+Move_FIRE_FANG::
loadspritegfx ANIM_TAG_SMALL_EMBER
loadspritegfx ANIM_TAG_SHARP_TEETH
loadspritegfx ANIM_TAG_IMPACT
@@ -3062,7 +2115,7 @@ Move_FIRE_FANG:
delay 1
end
-Move_SHADOW_SNEAK:
+Move_SHADOW_SNEAK::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_WHITE_SHADOW @Destiny Bond
loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @Black Colour
@@ -3100,7 +2153,7 @@ ShadowSneakMovement:
delay 0x4
return
-Move_MUD_BOMB:
+Move_MUD_BOMB::
loadspritegfx ANIM_TAG_MUD_SAND
playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER
createsprite gMudBombToss, ANIM_TARGET, 2, 20, 0, 0, 0, 35, -25
@@ -3151,7 +2204,7 @@ Move_MUD_BOMB:
waitforvisualfinish
end
-Move_PSYCHO_CUT:
+Move_PSYCHO_CUT::
loadspritegfx ANIM_TAG_SPIRAL
loadspritegfx ANIM_TAG_PSYCHO_CUT
loadspritegfx ANIM_TAG_CROSS_IMPACT
@@ -3179,7 +2232,7 @@ Move_PSYCHO_CUT:
waitforvisualfinish
end
-Move_ZEN_HEADBUTT:
+Move_ZEN_HEADBUTT::
loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
loadspritegfx ANIM_TAG_WATER_IMPACT
monbg ANIM_ATTACKER
@@ -3211,7 +2264,7 @@ Move_ZEN_HEADBUTT:
delay 1
end
-Move_MIRROR_SHOT:
+Move_MIRROR_SHOT::
loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2
createvisualtask AnimTask_MetallicShine, 5, 1, 0, RGB_BLACK
waitforvisualfinish
@@ -3245,7 +2298,7 @@ Move_MIRROR_SHOT:
blendoff
end
-Move_FLASH_CANNON:
+Move_FLASH_CANNON::
loadspritegfx ANIM_TAG_HANDS_AND_FEET
loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
loadspritegfx ANIM_TAG_ELECTRIC_ORBS
@@ -3282,7 +2335,7 @@ Move_FLASH_CANNON:
clearmonbg ANIM_TARGET
end
-Move_ROCK_CLIMB:
+Move_ROCK_CLIMB::
delay 8
loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 38, 3
waitforvisualfinish
@@ -3317,7 +2370,7 @@ Move_ROCK_CLIMB:
blendoff
end
-Move_DEFOG:
+Move_DEFOG::
loadspritegfx ANIM_TAG_WHITE_CIRCLE_OF_LIGHT
monbg ANIM_ATTACKER
setalpha 12, 8
@@ -3352,7 +2405,7 @@ InitRoomAnimation:
return
@ Credits to Skeli
-Move_DRACO_METEOR:
+Move_DRACO_METEOR::
loadspritegfx ANIM_TAG_ROCKS @Rocks
loadspritegfx ANIM_TAG_FAIRY_LOCK_CHAINS @Gray Colour
loadspritegfx ANIM_TAG_WATER_GUN @Sparkles Trail
@@ -3437,7 +2490,7 @@ DracoMeteor4:
createsprite gDracoMeteorTailSpriteTemplate 0x83, 5, 0xffb0, 0xffc0, 0xFFF8, 0x20, 0x19
return
-Move_DISCHARGE:
+Move_DISCHARGE::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_SPARK_2
delay 0
@@ -3542,7 +2595,7 @@ DischargeElectrify:
createsprite gElectricitySpriteTemplate, ANIM_TARGET, 2, -20, 15, 5, 1, ANIM_ATK_PARTNER
return
-Move_LAVA_PLUME:
+Move_LAVA_PLUME::
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
@@ -3562,7 +2615,7 @@ Move_LAVA_PLUME:
waitforvisualfinish
end
-Move_LEAF_STORM:
+Move_LEAF_STORM::
loadspritegfx ANIM_TAG_RAZOR_LEAF
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_LEAF
@@ -3674,7 +2727,7 @@ Move_LEAF_STORM:
clearmonbg ANIM_DEF_PARTNER
end
-Move_POWER_WHIP:
+Move_POWER_WHIP::
loadspritegfx ANIM_TAG_WHIP_HIT
playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER
createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 10
@@ -3688,7 +2741,7 @@ Move_POWER_WHIP:
waitbgfadein
end
-Move_ROCK_WRECKER:
+Move_ROCK_WRECKER::
jumpargeq 7, 1, RockWrecker_1
fadetobg BG_ROCK_WRECKER
waitbgfadeout
@@ -3734,7 +2787,7 @@ RockWrecker_2:
call UnsetPsychicBg
end
-Move_CROSS_POISON:
+Move_CROSS_POISON::
loadspritegfx ANIM_TAG_POISON_BUBBLE
loadspritegfx ANIM_TAG_CROSS_IMPACT
monbg ANIM_TARGET
@@ -3750,7 +2803,7 @@ Move_CROSS_POISON:
blendoff
end
-Move_GUNK_SHOT:
+Move_GUNK_SHOT::
loadspritegfx ANIM_TAG_WATER_ORB
loadspritegfx ANIM_TAG_POISON_BUBBLE
loadspritegfx ANIM_TAG_WATER_IMPACT
@@ -3807,7 +2860,7 @@ SetGunkShotBG:
goto SetHighSpeedBgFade
-Move_IRON_HEAD:
+Move_IRON_HEAD::
loadspritegfx ANIM_TAG_GUST
loadspritegfx ANIM_TAG_IMPACT
loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2
@@ -3829,7 +2882,7 @@ Move_IRON_HEAD:
waitforvisualfinish
end
-Move_MAGNET_BOMB:
+Move_MAGNET_BOMB::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_SPARK_2
delay 0
@@ -3894,7 +2947,7 @@ Move_MAGNET_BOMB:
waitforvisualfinish
end
-Move_STONE_EDGE:
+Move_STONE_EDGE::
loadspritegfx ANIM_TAG_STONE_EDGE
loadspritegfx ANIM_TAG_IMPACT
playsewithpan SE_M_ROCK_THROW SOUND_PAN_TARGET
@@ -3953,7 +3006,7 @@ Move_STONE_EDGE:
blendoff
end
-Move_CAPTIVATE:
+Move_CAPTIVATE::
loadspritegfx ANIM_TAG_MAGENTA_HEART
loadspritegfx ANIM_TAG_SPARKLE_2
createvisualtask AnimTask_RockMonBackAndForth, 5, ANIM_DEF_PARTNER, 0, 2, 0
@@ -3969,7 +3022,7 @@ Move_CAPTIVATE:
waitforvisualfinish
end
-Move_STEALTH_ROCK:
+Move_STEALTH_ROCK::
loadspritegfx ANIM_TAG_STEALTH_ROCK
monbg ANIM_DEF_PARTNER
playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER
@@ -3986,7 +3039,7 @@ Move_STEALTH_ROCK:
clearmonbg ANIM_DEF_PARTNER
end
-Move_GRASS_KNOT:
+Move_GRASS_KNOT::
loadspritegfx ANIM_TAG_RAZOR_LEAF
loadspritegfx ANIM_TAG_IMPACT
createsprite gSlideMonToOffsetSpriteTemplate, 2, 5, 0, 20, 0, 0, 4
@@ -3999,7 +3052,7 @@ Move_GRASS_KNOT:
createsprite gSlideMonToOriginalPosSpriteTemplate, 2, 3, 0, 1, 4
end
-Move_CHATTER:
+Move_CHATTER::
loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE
loadspritegfx ANIM_TAG_THIN_RING
loadspritegfx ANIM_TAG_MUSIC_NOTES
@@ -4039,7 +3092,7 @@ Move_CHATTER:
clearmonbg ANIM_DEF_PARTNER
end
-Move_JUDGMENT:
+Move_JUDGMENT::
loadspritegfx ANIM_TAG_HANDS_AND_FEET
loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
loadspritegfx ANIM_TAG_GREEN_SPIKE
@@ -4135,7 +3188,7 @@ JudgmentInwardSpikes2:
createsprite gJudgmentGrayInwardOrbsTemplate, ANIM_TARGET, 2, 1, 0, 0xFFDA, 0xFF94, 16 @between up and upper left
return
-Move_BUG_BITE:
+Move_BUG_BITE::
loadspritegfx ANIM_TAG_ROCKS
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_HANDS_AND_FEET
@@ -4176,7 +3229,7 @@ Move_BUG_BITE:
blendoff
end
-Move_CHARGE_BEAM:
+Move_CHARGE_BEAM::
loadspritegfx ANIM_TAG_ELECTRIC_ORBS
loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
loadspritegfx ANIM_TAG_ELECTRICITY
@@ -4228,7 +3281,7 @@ SparkBeam:
delay 1
return
-Move_WOOD_HAMMER:
+Move_WOOD_HAMMER::
loadspritegfx ANIM_TAG_WOOD_HAMMER
loadspritegfx ANIM_TAG_WOOD_HAMMER_HAMMER
loadspritegfx ANIM_TAG_IMPACT
@@ -4257,7 +3310,7 @@ WoodHammerImpact:
createsprite gWoodHammerSmallSpriteTemplate, ANIM_TARGET, 2, -5, 0, -20, -24, 20, 2
return
-Move_AQUA_JET:
+Move_AQUA_JET::
loadspritegfx ANIM_TAG_SPARKLE_6
loadspritegfx ANIM_TAG_ROUND_SHADOW
loadspritegfx ANIM_TAG_SPLASH
@@ -4290,7 +3343,7 @@ Move_AQUA_JET:
blendoff
end
-Move_ATTACK_ORDER:
+Move_ATTACK_ORDER::
loadspritegfx ANIM_TAG_ATTACK_ORDER
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_ROCKS
@@ -4336,7 +3389,7 @@ Move_ATTACK_ORDER:
blendoff
end
-Move_DEFEND_ORDER:
+Move_DEFEND_ORDER::
loadspritegfx ANIM_TAG_ATTACK_ORDER
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_ROCKS
@@ -4373,7 +3426,7 @@ Move_DEFEND_ORDER:
waitforvisualfinish
end
-Move_HEAL_ORDER:
+Move_HEAL_ORDER::
loadspritegfx ANIM_TAG_ATTACK_ORDER
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_ROCKS
@@ -4410,7 +3463,7 @@ Move_HEAL_ORDER:
waitforvisualfinish
end
-Move_HEAD_SMASH:
+Move_HEAD_SMASH::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_ROCKS
createvisualtask AnimTask_SkullBashPosition, 2, 0
@@ -4432,7 +3485,7 @@ Move_HEAD_SMASH:
waitbgfadein
end
-Move_DOUBLE_HIT:
+Move_DOUBLE_HIT::
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_TARGET
setalpha 12, 8
@@ -4454,7 +3507,7 @@ Move_DOUBLE_HIT:
blendoff
end
-Move_ROAR_OF_TIME:
+Move_ROAR_OF_TIME::
loadspritegfx ANIM_TAG_ORBS
loadspritegfx ANIM_TAG_EXPLOSION
loadspritegfx ANIM_TAG_WATER_GUN
@@ -4495,7 +3548,7 @@ Move_ROAR_OF_TIME:
waitforvisualfinish
end
-Move_SPACIAL_REND:
+Move_SPACIAL_REND::
loadspritegfx ANIM_TAG_PUNISHMENT_BLADES
loadspritegfx ANIM_TAG_PINK_HEART_2 @ANIM_TAG_BERRY_EATEN
monbg ANIM_ATK_PARTNER
@@ -4529,7 +3582,7 @@ Move_SPACIAL_REND:
blendoff
end
-Move_LUNAR_DANCE:
+Move_LUNAR_DANCE::
loadspritegfx ANIM_TAG_MOON
loadspritegfx ANIM_TAG_GREEN_SPARKLE
loadspritegfx ANIM_TAG_HOLLOW_ORB
@@ -4570,7 +3623,7 @@ Move_LUNAR_DANCE:
delay 1
end
-Move_CRUSH_GRIP:
+Move_CRUSH_GRIP::
loadspritegfx ANIM_TAG_EXPLOSION
loadspritegfx ANIM_TAG_ACUPRESSURE
loadspritegfx ANIM_TAG_PURPLE_HAND_OUTLINE
@@ -4595,7 +3648,7 @@ Move_CRUSH_GRIP:
blendoff
end
-Move_MAGMA_STORM:
+Move_MAGMA_STORM::
loadspritegfx ANIM_TAG_SMALL_EMBER
fadetobg BG_MAGMA_STORM @Add new bg
waitbgfadeout
@@ -4620,7 +3673,7 @@ Move_MAGMA_STORM:
blendoff
end
-Move_DARK_VOID:
+Move_DARK_VOID::
loadspritegfx ANIM_TAG_WHITE_SHADOW @Destiny Bond
loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @Black Colour
loadspritegfx ANIM_TAG_SPARKLE_2 @Healing Stars
@@ -4647,7 +3700,7 @@ Move_DARK_VOID:
visible ANIM_DEF_PARTNER
end
-Move_SEED_FLARE:
+Move_SEED_FLARE::
loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge animation
loadspritegfx ANIM_TAG_LEAF @green color
loadspritegfx ANIM_TAG_RAZOR_LEAF @green color 2
@@ -4732,7 +3785,7 @@ Move_SEED_FLARE:
blendoff
end
-Move_OMINOUS_WIND:
+Move_OMINOUS_WIND::
loadspritegfx ANIM_TAG_SPARKLE_6
panse SE_M_GUST, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET 2, 0
playsewithpan 228, 0
@@ -4791,7 +3844,7 @@ OminousWindHit:
waitbgfadein
end
-Move_SHADOW_FORCE:
+Move_SHADOW_FORCE::
loadspritegfx ANIM_TAG_ROUND_SHADOW
loadspritegfx ANIM_TAG_IMPACT
choosetwoturnanim ShadowForcePrep ShadowForceAttack
@@ -4845,7 +3898,7 @@ ShadowForceBg:
return
@@@@@@@@@@@@@@@@@@@@@@@ GEN 5 @@@@@@@@@@@@@@@@@@@@@@@
-Move_HONE_CLAWS:
+Move_HONE_CLAWS::
loadspritegfx ANIM_TAG_SWIPE
call HoneClawsAnim
createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_SWIPE, 0, 6, 6, RGB_BLACK
@@ -4866,7 +3919,7 @@ HoneClawsAnim:
delay 10
return
-Move_WIDE_GUARD:
+Move_WIDE_GUARD::
loadspritegfx ANIM_TAG_ICE_SPIKES @motion from icy wind
loadspritegfx ANIM_TAG_PINK_PETAL @pink color
loadspritegfx ANIM_TAG_SMALL_EMBER @yellow color
@@ -4977,7 +4030,7 @@ General_WonderRoom:
blendoff
end
-Move_PSYSHOCK:
+Move_PSYSHOCK::
loadspritegfx ANIM_TAG_RED_ORB_2
loadspritegfx ANIM_TAG_POISON_JAB
loadspritegfx ANIM_TAG_GRAY_SMOKE
@@ -5054,7 +4107,7 @@ PsyshockConverge:
delay 2
return
-Move_VENOSHOCK:
+Move_VENOSHOCK::
loadspritegfx ANIM_TAG_POISON_BUBBLE
loadspritegfx ANIM_TAG_TOXIC_BUBBLE
createsprite gToxicBubbleSpriteTemplate, ANIM_TARGET, 2, -24, 16, 1, 1
@@ -5082,7 +4135,7 @@ Move_VENOSHOCK:
delay 15
end
-Move_AUTOTOMIZE:
+Move_AUTOTOMIZE::
loadspritegfx ANIM_TAG_METAL_BITS @Metal Bits
setalpha 12, 8
monbg ANIM_ATK_PARTNER
@@ -5172,7 +4225,7 @@ Move_SMACK_DOWN::
createvisualtask AnimTask_SeismicTossBgAccelerateDownAtEnd, 3
goto SeismicTossWeak
-Move_STORM_THROW:
+Move_STORM_THROW::
call StormThorwAnim
call StormThorwAnim
call StormThorwAnim
@@ -5195,7 +4248,7 @@ StormThorwAnim:
delay 8
return
-Move_FLAME_BURST:
+Move_FLAME_BURST::
loadspritegfx ANIM_TAG_SMALL_EMBER
loadspritegfx ANIM_TAG_EXPLOSION
playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_ATTACKER
@@ -5228,13 +4281,13 @@ FlameBurstSpread:
return
-Move_SLUDGE_WAVE:
+Move_SLUDGE_WAVE::
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:
+Move_QUIVER_DANCE::
loadspritegfx ANIM_TAG_HOLLOW_ORB
monbg ANIM_ATTACKER
call SetBugBg
@@ -5257,7 +4310,7 @@ Move_QUIVER_DANCE:
call UnsetBugBg
end
-Move_HEAVY_SLAM:
+Move_HEAVY_SLAM::
loadspritegfx ANIM_TAG_CLAW_SLASH
loadspritegfx ANIM_TAG_IMPACT
loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2
@@ -5287,7 +4340,7 @@ Move_HEAVY_SLAM:
blendoff
end
-Move_SYCHRONOISE:
+Move_SYNCHRONOISE::
loadspritegfx ANIM_TAG_THIN_RING @hypervoice ring
loadspritegfx ANIM_TAG_SPARK_2 @yellow color
loadspritegfx ANIM_TAG_WATER_ORB @blue color
@@ -5326,7 +4379,7 @@ Move_SYCHRONOISE:
clearmonbg ANIM_DEF_PARTNER
end
-Move_ELECTRO_BALL:
+Move_ELECTRO_BALL::
loadspritegfx ANIM_TAG_SPARK_2 @yelow
loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @charge
loadspritegfx ANIM_TAG_FLASH_CANNON_BALL @ball
@@ -5353,7 +4406,7 @@ Move_ELECTRO_BALL:
blendoff
end
-Move_SOAK:
+Move_SOAK::
loadspritegfx ANIM_TAG_SMALL_BUBBLES
loadspritegfx ANIM_TAG_WATER_IMPACT
monbg ANIM_TARGET
@@ -5388,7 +4441,7 @@ Move_SOAK:
blendoff
end
-Move_FLAME_CHARGE:
+Move_FLAME_CHARGE::
loadspritegfx ANIM_TAG_SMALL_EMBER
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_TARGET
@@ -5421,7 +4474,7 @@ FlameChargeSwirl:
createsprite gFlameChargeEmberTemplate, ANIM_ATTACKER, 2, 0x0, 0xffe8, 0x8, 0x8c
return
-Move_COIL:
+Move_COIL::
loadspritegfx ANIM_TAG_TENDRILS
loopsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET, 0x6, 0x4
createsprite gConstrictBindingSpriteTemplate, ANIM_TARGET, 4, 0x0, 0x10, 0x0, 0x2
@@ -5440,7 +4493,7 @@ Move_COIL:
waitforvisualfinish
end
-Move_LOW_SWEEP:
+Move_LOW_SWEEP::
loadspritegfx ANIM_TAG_HANDS_AND_FEET
loadspritegfx ANIM_TAG_IMPACT
createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4
@@ -5452,7 +4505,7 @@ Move_LOW_SWEEP:
createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 1, 4
end
-Move_ACID_SPRAY:
+Move_ACID_SPRAY::
loadspritegfx ANIM_TAG_POISON_BUBBLE
monbg ANIM_TARGET
createsprite gAcidPoisonBubbleSpriteTemplate, ANIM_TARGET, 2, 20, 0, 40, 1, 0, -20, FALSE
@@ -5478,7 +4531,7 @@ Move_ACID_SPRAY:
clearmonbg ANIM_TARGET
end
-Move_FOUL_PLAY:
+Move_FOUL_PLAY::
loadspritegfx ANIM_TAG_POISON_BUBBLE
loadspritegfx ANIM_TAG_THIN_RING
loadspritegfx ANIM_TAG_IMPACT
@@ -5501,7 +4554,7 @@ Move_FOUL_PLAY:
blendoff
end
-Move_SIMPLE_BEAM:
+Move_SIMPLE_BEAM::
loadspritegfx ANIM_TAG_GOLD_RING @psybeam
loadspritegfx ANIM_TAG_ROCKS @brown color
loadspritegfx ANIM_TAG_PINK_PETAL @pink color
@@ -5547,7 +4600,7 @@ SimpleBeamWithRings:
delay 0x2
return
-Move_ENTRAINMENT:
+Move_ENTRAINMENT::
createvisualtask AnimTask_TeeterDanceMovement, 5
playsewithpan SE_M_TEETER_DANCE, SOUND_PAN_ATTACKER
delay 0x18
@@ -5562,7 +4615,7 @@ Move_ENTRAINMENT:
waitforvisualfinish
end
-Move_AFTER_YOU:
+Move_AFTER_YOU::
loadspritegfx ANIM_TAG_ANGER @rage
loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT @green color
createvisualtask AnimTask_SwayMon, 5, 1, 15, 1536, 2, ANIM_ATTACKER
@@ -5577,7 +4630,7 @@ Move_AFTER_YOU:
waitforvisualfinish
end
-Move_ROUND:
+Move_ROUND::
loadspritegfx ANIM_TAG_MUSIC_NOTES
createvisualtask AnimTask_MusicNotesRainbowBlend, 2
waitforvisualfinish
@@ -5599,7 +4652,7 @@ Move_ROUND:
waitforvisualfinish
end
-Move_ECHOED_VOICE:
+Move_ECHOED_VOICE::
loadspritegfx ANIM_TAG_METAL_SOUND_WAVES
monbg ANIM_DEF_PARTNER
splitbgprio_foes ANIM_TARGET
@@ -5619,7 +4672,7 @@ MetalSoundPlayNote:
delay 0x2
return
-Move_CHIP_AWAY:
+Move_CHIP_AWAY::
loadspritegfx ANIM_TAG_IMPACT
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_ATTACKER, 0x2, 0x0, 0x9, 0x7FFF
waitforvisualfinish
@@ -5637,7 +4690,7 @@ Move_CHIP_AWAY:
blendoff
end
-Move_CLEAR_SMOG:
+Move_CLEAR_SMOG::
loadspritegfx ANIM_TAG_MIST_CLOUD
monbg ANIM_TARGET
splitbgprio_all
@@ -5665,7 +4718,7 @@ ClearSmogCloud:
delay 7
return
-Move_STORED_POWER:
+Move_STORED_POWER::
loadspritegfx ANIM_TAG_RED_ORB_2
loadspritegfx ANIM_TAG_IMPACT
call SetPsychicBackground
@@ -5695,7 +4748,7 @@ Move_STORED_POWER:
waitforvisualfinish
end
-Move_QUICK_GUARD:
+Move_QUICK_GUARD::
loadspritegfx ANIM_TAG_QUICK_GUARD_HAND @hand
loadspritegfx ANIM_TAG_SPARKLE_4 @sparkles
setalpha 12, 8
@@ -5725,7 +4778,7 @@ Move_QUICK_GUARD:
clearmonbg ANIM_ATTACKER
end
-Move_ALLY_SWITCH:
+Move_ALLY_SWITCH::
call SetPsychicBackground
createvisualtask AnimTask_AllySwitchAttacker, 2
createvisualtask AnimTask_AllySwitchPartner, 2
@@ -5733,7 +4786,7 @@ Move_ALLY_SWITCH:
call UnsetPsychicBg
end
-Move_SCALD:
+Move_SCALD::
loadspritegfx ANIM_TAG_WATER_ORB
loadspritegfx ANIM_TAG_WATER_IMPACT
monbg ANIM_DEF_PARTNER
@@ -5779,7 +4832,7 @@ ScaldHitSplats:
createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, ANIM_TARGET, 1
return
-Move_SHELL_SMASH:
+Move_SHELL_SMASH::
loadspritegfx ANIM_TAG_SHELL_RIGHT
loadspritegfx ANIM_TAG_SHELL_LEFT
loadspritegfx ANIM_TAG_IMPACT
@@ -5807,7 +4860,7 @@ Move_SHELL_SMASH:
waitforvisualfinish
end
-Move_HEAL_PULSE:
+Move_HEAL_PULSE::
loadspritegfx ANIM_TAG_GREEN_SPARKLE
loadspritegfx ANIM_TAG_BLUE_STAR
loadspritegfx ANIM_TAG_THIN_RING
@@ -5838,7 +4891,7 @@ Move_HEAL_PULSE:
call HealingEffect2
end
-Move_HEX:
+Move_HEX::
loadspritegfx ANIM_TAG_PURPLE_FLAME
loadspritegfx ANIM_TAG_GHOSTLY_SPIRIT
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x0, 0x0, 0x10, 0x4C4A @;Deep purple
@@ -5859,7 +4912,7 @@ Move_HEX:
waitforvisualfinish
end
-Move_SKY_DROP:
+Move_SKY_DROP::
loadspritegfx ANIM_TAG_ROUND_SHADOW
loadspritegfx ANIM_TAG_IMPACT
choosetwoturnanim SkyDropSetup SkyDropUnleash
@@ -5892,7 +4945,7 @@ SkyDropUnleash:
blendoff
end
-Move_SHIFT_GEAR:
+Move_SHIFT_GEAR::
loadspritegfx ANIM_TAG_GEAR @Gear
monbg ANIM_ATTACKER
playsewithpan SE_ESCALATOR, SOUND_PAN_ATTACKER
@@ -5902,7 +4955,7 @@ Move_SHIFT_GEAR:
clearmonbg ANIM_ATTACKER
end
-Move_CIRCLE_THROW:
+Move_CIRCLE_THROW::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_THIN_RING
loadspritegfx ANIM_TAG_ICE_CHUNK
@@ -5929,7 +4982,7 @@ Move_CIRCLE_THROW:
blendoff
end
-Move_INCINERATE:
+Move_INCINERATE::
loadspritegfx ANIM_TAG_SMALL_EMBER
monbg ANIM_TARGET
splitbgprio ANIM_TARGET
@@ -5969,7 +5022,7 @@ Move_INCINERATE:
blendoff
end
-Move_QUASH:
+Move_QUASH::
loadspritegfx ANIM_TAG_ASSURANCE_HAND @hand
fadetobg BG_DARK
waitbgfadein
@@ -5986,7 +5039,7 @@ Move_QUASH:
waitbgfadein
end
-Move_ACROBATICS:
+Move_ACROBATICS::
loadspritegfx ANIM_TAG_ROUND_SHADOW
loadspritegfx ANIM_TAG_WHITE_STREAK
loadspritegfx ANIM_TAG_IMPACT
@@ -6061,7 +5114,7 @@ AcrobaticsSlashes:
delay 2
return
-Move_REFLECT_TYPE:
+Move_REFLECT_TYPE::
loadspritegfx ANIM_TAG_GUARD_RING @ring around user
loadspritegfx ANIM_TAG_ICE_CHUNK @blue green color
loadspritegfx ANIM_TAG_PURPLE_FLAME @violet color
@@ -6099,7 +5152,7 @@ Move_REFLECT_TYPE:
blendoff
end
-Move_RETALIATE:
+Move_RETALIATE::
loadspritegfx ANIM_TAG_CUT @Cut
monbg ANIM_DEF_PARTNER
setalpha 9, 8
@@ -6120,7 +5173,7 @@ Move_RETALIATE:
blendoff
end
-Move_FINAL_GAMBIT:
+Move_FINAL_GAMBIT::
loadspritegfx ANIM_TAG_PINK_CLOUD @yawn animation
loadspritegfx ANIM_TAG_WATER_IMPACT @blue colour
loadspritegfx ANIM_TAG_EXPLOSION @explosion animation
@@ -6147,7 +5200,7 @@ Move_FINAL_GAMBIT:
waitforvisualfinish
end
-Move_BESTOW:
+Move_BESTOW::
monbg ANIM_TARGET
splitbgprio ANIM_TARGET
panse SE_M_METRONOME, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, 0x2, 0x0
@@ -6157,7 +5210,7 @@ Move_BESTOW:
clearmonbg ANIM_TARGET
end
-Move_INFERNO:
+Move_INFERNO::
loadspritegfx ANIM_TAG_SMALL_EMBER
call SetImpactBackground
loopsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET, 40, 4
@@ -6201,7 +5254,7 @@ InfernoAnim:
delay 1
return
-Move_WATER_PLEDGE:
+Move_WATER_PLEDGE::
loadspritegfx ANIM_TAG_WATER_ORB
loadspritegfx ANIM_TAG_WATER_IMPACT
monbg ANIM_DEF_PARTNER
@@ -6321,7 +5374,7 @@ Move_WATER_PLEDGE:
blendoff
end
-Move_FIRE_PLEDGE:
+Move_FIRE_PLEDGE::
loadspritegfx ANIM_TAG_SMALL_EMBER
monbg ANIM_DEF_PARTNER
splitbgprio ANIM_TARGET
@@ -6420,7 +5473,7 @@ Move_FIRE_PLEDGE:
blendoff
end
-Move_GRASS_PLEDGE:
+Move_GRASS_PLEDGE::
loadspritegfx ANIM_TAG_LEAF
loadspritegfx ANIM_TAG_WHIP_HIT
monbg ANIM_DEF_PARTNER
@@ -6527,7 +5580,7 @@ GrassPledgeMiddleFountain:
delay 4
return
-Move_VOLT_SWITCH:
+Move_VOLT_SWITCH::
loadspritegfx ANIM_TAG_SPARK
loadspritegfx ANIM_TAG_SPARK_2
loadspritegfx ANIM_TAG_THIN_RING
@@ -6566,7 +5619,7 @@ VoltSwitchAgainstPartner:
createvisualtask AnimTask_SlideOffScreen, 5, ANIM_ATTACKER, 2
goto VoltSwitchContinue
-Move_STRUGGLE_BUG:
+Move_STRUGGLE_BUG::
loadspritegfx ANIM_TAG_MOVEMENT_WAVES
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_TARGET
@@ -6592,12 +5645,12 @@ Move_STRUGGLE_BUG:
blendoff
end
-Move_BULLDOZE:
+Move_BULLDOZE::
createvisualtask AnimTask_Splash, 2, ANIM_ATTACKER, 3
delay 0x8
goto Move_EARTHQUAKE
-Move_FROST_BREATH:
+Move_FROST_BREATH::
loadspritegfx ANIM_TAG_ICE_CHUNK
loadspritegfx ANIM_TAG_SMALL_EMBER
loadspritegfx ANIM_TAG_FIRE_PLUME
@@ -6635,7 +5688,7 @@ Move_FROST_BREATH:
call UnsetPsychicBg
end
-Move_DRAGON_TAIL:
+Move_DRAGON_TAIL::
loadspritegfx ANIM_TAG_ROCKS
loadspritegfx ANIM_TAG_SLAM_HIT
loadspritegfx ANIM_TAG_IMPACT
@@ -6671,7 +5724,7 @@ TailWhackDown:
createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, 12, 25, 4, 4
return
-Move_WORK_UP:
+Move_WORK_UP::
loadspritegfx ANIM_TAG_FOCUS_ENERGY
playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER
createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, -28, 26, 2
@@ -6705,7 +5758,7 @@ Move_WORK_UP:
waitforvisualfinish
end
-Move_ELECTROWEB:
+Move_ELECTROWEB::
loadspritegfx ANIM_TAG_SPIDER_WEB
loadspritegfx ANIM_TAG_WEB_THREAD
loadspritegfx ANIM_TAG_SPARK_2
@@ -6723,11 +5776,11 @@ Move_ELECTROWEB:
delay 1
createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, 1, 2, 9, 0, RGB_BLACK
call ElectricityEffect_OnTargets
-Move_ELECTROWEB_Wait:
+Move_ELECTROWEB_Wait::
waitforvisualfinish
end
-Move_WILD_CHARGE:
+Move_WILD_CHARGE::
loadspritegfx ANIM_TAG_SPARK_2
loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
loadspritegfx ANIM_TAG_IMPACT
@@ -6762,7 +5815,7 @@ ScreenFlash:
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0xC, 0x0, 0x07FE
return
-Move_DRILL_RUN:
+Move_DRILL_RUN::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_HORN_HIT
setalpha 12, 8
@@ -6817,7 +5870,7 @@ Move_DRILL_RUN:
call UnsetPsychicBg
end
-Move_DUAL_CHOP:
+Move_DUAL_CHOP::
loadspritegfx ANIM_TAG_HANDS_AND_FEET @hand
loadspritegfx ANIM_TAG_IMPACT @hit
loadspritegfx ANIM_TAG_POISON_BUBBLE @purple
@@ -6839,7 +5892,7 @@ Move_DUAL_CHOP:
blendoff
end
-Move_HEART_STAMP:
+Move_HEART_STAMP::
loadspritegfx ANIM_TAG_HEART_STAMP
monbg ANIM_TARGET
loopsewithpan SE_M_CHARM, SOUND_PAN_ATTACKER, 0xc, 0x3
@@ -6852,7 +5905,7 @@ Move_HEART_STAMP:
waitforvisualfinish
end
-Move_HORN_LEECH:
+Move_HORN_LEECH::
loadspritegfx ANIM_TAG_HORN_LEECH @Horn
loadspritegfx ANIM_TAG_IMPACT @hit
loadspritegfx ANIM_TAG_ORBS
@@ -6869,7 +5922,7 @@ Move_HORN_LEECH:
waitforvisualfinish
end
-Move_SACRED_SWORD:
+Move_SACRED_SWORD::
loadspritegfx ANIM_TAG_CUT @Cut
loadspritegfx ANIM_TAG_SWORD @Sword
loadspritegfx ANIM_TAG_HYDRO_PUMP @Blue Colour
@@ -6895,7 +5948,7 @@ Move_SACRED_SWORD:
waitforvisualfinish
end
-Move_RAZOR_SHELL:
+Move_RAZOR_SHELL::
loadspritegfx ANIM_TAG_RAZOR_SHELL
loadspritegfx ANIM_TAG_CUT
monbg ANIM_TARGET
@@ -6909,7 +5962,7 @@ Move_RAZOR_SHELL:
waitforvisualfinish
end
-Move_HEAT_CRASH:
+Move_HEAT_CRASH::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_WARM_ROCK
loadspritegfx ANIM_TAG_ROCKS
@@ -6933,7 +5986,7 @@ Move_HEAT_CRASH:
blendoff
end
-Move_LEAF_TORNADO:
+Move_LEAF_TORNADO::
loadspritegfx ANIM_TAG_GUST @Gust
loadspritegfx ANIM_TAG_LEAF @Leaves
monbg ANIM_DEF_PARTNER
@@ -6964,7 +6017,7 @@ LeafTornadoVortex:
delay 0x2
return
-Move_STEAMROLLER:
+Move_STEAMROLLER::
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_TARGET
setalpha 12, 8
@@ -6990,7 +6043,7 @@ Move_STEAMROLLER:
blendoff
end
-Move_COTTON_GUARD:
+Move_COTTON_GUARD::
loadspritegfx ANIM_TAG_SPORE
monbg ANIM_ATK_PARTNER
setalpha 12, 8
@@ -7020,7 +6073,7 @@ CottonSporesSpiralInward:
delay 0x3
return
-Move_NIGHT_DAZE:
+Move_NIGHT_DAZE::
loadspritegfx ANIM_TAG_THIN_RING @uproar
loadspritegfx ANIM_TAG_PURPLE_FLAME @dark violet color
loadspritegfx ANIM_TAG_RED_ORB @circles
@@ -7058,7 +6111,7 @@ Move_NIGHT_DAZE:
waitforvisualfinish
end
-Move_PSYSTRIKE:
+Move_PSYSTRIKE::
monbg ANIM_TARGET
setalpha 8, 8
createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 1, 0, 10, 1
@@ -7075,7 +6128,7 @@ Move_PSYSTRIKE:
blendoff
end
-Move_TAIL_SLAP:
+Move_TAIL_SLAP::
loadspritegfx ANIM_TAG_IMPACT @Hit
loadspritegfx ANIM_TAG_AIR_WAVE_2 @Aeroblast
loadspritegfx ANIM_TAG_PUNISHMENT_BLADES @Punishment Blades
@@ -7096,7 +6149,7 @@ TailSlapLeft:
createsprite gTailSlapTemplate, ANIM_ATTACKER, 2, 0x8, 0x0, 0x1, 0x0
goto TailSlapContinue
-Move_HURRICANE:
+Move_HURRICANE::
loadspritegfx ANIM_TAG_GUST
monbg ANIM_DEF_PARTNER
splitbgprio ANIM_TARGET
@@ -7133,7 +6186,7 @@ HurricaneGustCentered:
createvisualtask AnimTask_AnimateGustTornadoPalette, 5, 1, 70
return
-Move_HEAD_CHARGE:
+Move_HEAD_CHARGE::
loadspritegfx ANIM_TAG_IMPACT
fadetobgfromset BG_GIGA_IMPACT_OPPONENT, BG_GIGA_IMPACT_PLAYER, BG_GIGA_IMPACT_OPPONENT
waitbgfadein
@@ -7153,7 +6206,7 @@ Move_HEAD_CHARGE:
waitbgfadeout
end
-Move_GEAR_GRIND:
+Move_GEAR_GRIND::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_GEAR @Gear
monbg ANIM_TARGET
@@ -7176,7 +6229,7 @@ Move_GEAR_GRIND:
blendoff
end
-Move_SEARING_SHOT:
+Move_SEARING_SHOT::
loadspritegfx ANIM_TAG_SPARK_2 @yellow color
loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE @red color
loadspritegfx ANIM_TAG_ELECTRIC_ORBS @charge
@@ -7262,7 +6315,7 @@ Move_SEARING_SHOT:
blendoff
end
-Move_TECHNO_BLAST:
+Move_TECHNO_BLAST::
createvisualtask AnimTask_TechnoBlast, 0x5
jumpargeq 0x0, TYPE_FIRE, TechnoBlastFire
jumpargeq 0x0, TYPE_WATER, TechnoBlastWater
@@ -7725,7 +6778,7 @@ TechnoBlastIceChargeParticles:
delay 0x4
return
-Move_RELIC_SONG:
+Move_RELIC_SONG::
loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE
loadspritegfx ANIM_TAG_THIN_RING
loadspritegfx ANIM_TAG_MUSIC_NOTES
@@ -7806,7 +6859,7 @@ Move_RELIC_SONG:
waitforvisualfinish
end
-Move_SECRET_SWORD:
+Move_SECRET_SWORD::
loadspritegfx ANIM_TAG_CUT @Cut
loadspritegfx ANIM_TAG_SWORD @Sword
loadspritegfx ANIM_TAG_HYDRO_PUMP @Blue Colour
@@ -7835,7 +6888,7 @@ Move_SECRET_SWORD:
waitforvisualfinish
end
-Move_GLACIATE:
+Move_GLACIATE::
loadspritegfx ANIM_TAG_ICE_CRYSTALS @ice
loadspritegfx ANIM_TAG_BLACK_SMOKE @smoke
loadspritegfx ANIM_TAG_ICE_CHUNK @White Colour
@@ -8499,7 +7552,7 @@ Move_ROTOTILLER::
waitforvisualfinish
end
-Move_STICKY_WEB:
+Move_STICKY_WEB::
loadspritegfx ANIM_TAG_SPIDER_WEB
loadspritegfx ANIM_TAG_WEB_THREAD
monbg ANIM_DEF_PARTNER
@@ -8537,7 +7590,7 @@ Move_STICKY_WEB:
createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 5, 1, 2, 9, 0, RGB_BLACK
end
-Move_FELL_STINGER:
+Move_FELL_STINGER::
loadspritegfx ANIM_TAG_NEEDLE
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_TARGET
@@ -8558,7 +7611,7 @@ Move_FELL_STINGER:
clearmonbg ANIM_TARGET
end
-Move_PHANTOM_FORCE:
+Move_PHANTOM_FORCE::
loadspritegfx ANIM_TAG_ROUND_SHADOW
loadspritegfx ANIM_TAG_IMPACT
choosetwoturnanim PhantomForcePrep PhantomForceAttack
@@ -8630,7 +7683,7 @@ PhantomForceBg:
waitbgfadein
return
-Move_TRICK_OR_TREAT:
+Move_TRICK_OR_TREAT::
loadspritegfx ANIM_TAG_EYE_SPARKLE
loadspritegfx ANIM_TAG_GHOSTLY_SPIRIT
fadetobg BG_NIGHTMARE
@@ -8654,7 +7707,7 @@ Move_TRICK_OR_TREAT:
waitbgfadein
end
-Move_NOBLE_ROAR:
+Move_NOBLE_ROAR::
loadspritegfx ANIM_TAG_NOISE_LINE
monbg ANIM_ATTACKER
splitbgprio ANIM_ATTACKER
@@ -8675,10 +7728,10 @@ Move_NOBLE_ROAR:
delay 20
end
-Move_ION_DELUGE:
+Move_ION_DELUGE::
end
-Move_PARABOLIC_CHARGE:
+Move_PARABOLIC_CHARGE::
loadspritegfx ANIM_TAG_ELECTRIC_ORBS
loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
loadspritegfx ANIM_TAG_SPARK
@@ -8733,7 +7786,7 @@ ParabolicChargeDouble:
createvisualtask AnimTask_BlendBattleAnimPal, 5, 4 | 8 | 0x10, 0, 0, 0, RGB_BLACK
goto ParabolicChargeHeal;
-Move_FORESTS_CURSE:
+Move_FORESTS_CURSE::
loadspritegfx ANIM_TAG_ROOTS @frenzy plant
loadspritegfx ANIM_TAG_GHOSTLY_SPIRIT @curse
monbg ANIM_ATTACKER
@@ -8870,7 +7923,7 @@ Move_DISARMING_VOICE::
waitforvisualfinish
end
-Move_PARTING_SHOT:
+Move_PARTING_SHOT::
loadspritegfx ANIM_TAG_NOISE_LINE
fadetobg BG_DARK
waitbgfadein
@@ -8888,7 +7941,7 @@ Move_PARTING_SHOT:
waitbgfadein
end
-Move_TOPSY_TURVY:
+Move_TOPSY_TURVY::
loadspritegfx ANIM_TAG_SWEAT_DROP
setalpha 12, 8
createsprite gSimplePaletteBlendSpriteTemplate ANIM_TARGET, 2, 1, 2, 0, 4, RGB_BLACK
@@ -8905,7 +7958,7 @@ Move_TOPSY_TURVY:
blendoff
end
-Move_DRAINING_KISS:
+Move_DRAINING_KISS::
loadspritegfx ANIM_TAG_ORBS
loadspritegfx ANIM_TAG_BLUE_STAR
loadspritegfx ANIM_TAG_IMPACT
@@ -9241,7 +8294,7 @@ Move_FAIRY_WIND::
blendoff
end
-Move_MOONBLAST:
+Move_MOONBLAST::
loadspritegfx ANIM_TAG_SMALL_BUBBLES
loadspritegfx ANIM_TAG_MOON
loadspritegfx ANIM_TAG_GREEN_SPARKLE
@@ -9264,7 +8317,7 @@ Move_MOONBLAST:
blendoff
end
-Move_BOOMBURST:
+Move_BOOMBURST::
loadspritegfx ANIM_TAG_EXPLOSION
loadspritegfx ANIM_TAG_THIN_RING
createvisualtask AnimTask_InvertScreenColor, 2, 0x1 | 0x4 | 0x8 | 0x10
@@ -9316,13 +8369,12 @@ Boomburst_Doubles:
goto Boomburst_Last
Move_FAIRY_LOCK::
- loadspritegfx ANIM_TAG_CHAIN_LINK @Chain Colour
- loadspritegfx ANIM_TAG_FAIRY_LOCK_CHAINS @AnimTask is missing for Fairy Lock Chain
+ loadspritegfx ANIM_TAG_FAIRY_LOCK_CHAINS
setalpha 8, 8
monbg ANIM_ATK_PARTNER
createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x8, 0x6B1F
waitforvisualfinish
- loopsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET, 0x6, 0x4
+ loopsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET, 0x6, 0x9
createvisualtask AnimTask_VoltTackleBolt, 0x5, 0x7
createvisualtask AnimTask_VoltTackleBolt, 0x5, 0x33
createvisualtask AnimTask_VoltTackleBolt, 0x5, 0x2
@@ -10149,7 +9201,7 @@ InfestationVortex:
delay 0x1
return
-Move_POWER_UP_PUNCH:
+Move_POWER_UP_PUNCH::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_HANDS_AND_FEET
loadspritegfx ANIM_TAG_BREATH
@@ -13863,10 +12915,12 @@ Move_MAGIC_POWDER::
end
Move_DRAGON_DARTS::
+ loadspritegfx ANIM_TAG_DREEPY_SHINY
loadspritegfx ANIM_TAG_DREEPY
+ loadspritegfx ANIM_TAG_AIR_WAVE
loadspritegfx ANIM_TAG_EXPLOSION
playsewithpan SE_FALL, SOUND_PAN_ATTACKER
- createsprite gDreepyMissileTemplate, ANIM_TARGET, 2, 0x0, 0x0, 0x19
+ createdragondartsprite ANIM_TARGET, 2, 0x0, 0x0, 0x19
delay 0x19
playsewithpan SE_M_SELF_DESTRUCT, SOUND_PAN_TARGET
createvisualtask AnimTask_ShakeMon, 2, ANIM_TARGET, 3, 0, 16, 1
@@ -14558,7 +13612,7 @@ BasicExplosion:
createsprite gExplosionSpriteTemplate, ANIM_TARGET, 3, 0x10, 0x10, 0x1, 0x1
return
-Move_ETERNA_BEAM::
+Move_ETERNABEAM::
goto Move_HYPER_BEAM
Move_STEEL_BEAM::
@@ -14836,7 +13890,7 @@ Move_SHELL_SIDE_ARM::
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
+Move_SHELL_SIDE_ARM_PHYSICAL:: @ Modified Body Slam, placeholder
loadspritegfx ANIM_TAG_IMPACT
createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_IMPACT, 0, 6, 6, RGB_MAGENTA
monbg ANIM_DEF_PARTNER
@@ -14862,7 +13916,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
+Move_SHELL_SIDE_ARM_SPECIAL:: @ 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
@@ -16854,7 +15908,7 @@ Move_SYRUP_BOMB::
jumpargeq 0x0, TRUE, Move_SYRUP_BOMB_YELLOW
@ Credits to Dat.H A
-Move_SYRUP_BOMB_RED:
+Move_SYRUP_BOMB_RED::
loadspritegfx ANIM_TAG_SYRUP_BLOB_RED
loadspritegfx ANIM_TAG_SYRUP_SPLAT_RED
loadspritegfx ANIM_TAG_SYRUP_SHELL_RED
@@ -16892,7 +15946,7 @@ SyrupBombProjectileRed:
delay 3
return
-Move_SYRUP_BOMB_YELLOW:
+Move_SYRUP_BOMB_YELLOW::
loadspritegfx ANIM_TAG_SYRUP_BLOB_YELLOW
loadspritegfx ANIM_TAG_SYRUP_SPLAT_YELLOW
loadspritegfx ANIM_TAG_SYRUP_SHELL_YELLOW
@@ -17165,6 +16219,12 @@ Move_RAGING_BULL::
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
@@ -17196,6 +16256,49 @@ 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
@@ -17225,7 +16328,7 @@ Move_UPPER_HAND::
blendoff
end
-Move_JET_PUNCH:
+Move_JET_PUNCH::
loadspritegfx ANIM_TAG_ICE_CRYSTALS
loadspritegfx ANIM_TAG_HANDS_AND_FEET
loadspritegfx ANIM_TAG_IMPACT
@@ -17425,7 +16528,7 @@ Move_LAST_RESPECTS::
restorebg
waitbgfadein
end
-
+
Move_TIDY_UP::
loadspritegfx ANIM_TAG_PINK_CLOUD
monbg ANIM_ATTACKER
@@ -17446,7 +16549,7 @@ Move_TIDY_UP::
clearmonbg ANIM_ATTACKER
blendoff
end
-
+
Move_KOWTOW_CLEAVE::
loadspritegfx ANIM_TAG_SLASH
loadspritegfx ANIM_TAG_CROSS_IMPACT
@@ -17740,7 +16843,7 @@ Move_HYDRO_STEAM::
createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 3, 9, 0, RGB_RED
waitforvisualfinish
end
-
+
Move_POUNCE::
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_TARGET
@@ -17846,53 +16949,716 @@ ElectroShotUnleash:
blendoff
end
-Move_TERA_BLAST::
-Move_AXE_KICK::
-Move_ORDER_UP::
+Move_IVY_CUDGEL::
+ loadspritegfx ANIM_TAG_IVY_CUDGEL_GRASS
+ loadspritegfx ANIM_TAG_WOOD_HAMMER
+ loadspritegfx ANIM_TAG_WOOD_HAMMER_HAMMER
+ loadspritegfx ANIM_TAG_IMPACT
+ playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER
+ createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 12, 4, 2, 4
+ jumpifmovetypeequal TYPE_FIRE, IvyCudgelFire
+ jumpifmovetypeequal TYPE_ROCK, IvyCudgelRock
+ jumpifmovetypeequal TYPE_WATER, IvyCudgelWater
+ createsprite gIvyCudgelSpriteTemplate, ANIM_TARGET, 2
+ delay 60
+ createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 3, 0, 12, 4
+ delay 18
+ createvisualtask AnimTask_SquishTarget, 0x2
+ delay 6
+ call WoodHammerImpact
+ waitforvisualfinish
+ end
+IvyCudgelFire:
+ loadspritegfx ANIM_TAG_IVY_CUDGEL_FIRE
+ createsprite gIvyCudgelFireSpriteTemplate, ANIM_TARGET, 2
+ delay 60
+ createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 3, 0, 12, 4
+ delay 18
+ createvisualtask AnimTask_SquishTarget, 0x2
+ delay 6
+ call WoodHammerImpact
+ waitforvisualfinish
+ end
+IvyCudgelRock:
+ loadspritegfx ANIM_TAG_IVY_CUDGEL_ROCK
+ createsprite gIvyCudgelRockSpriteTemplate, ANIM_TARGET, 2
+ delay 60
+ createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 3, 0, 12, 4
+ delay 18
+ createvisualtask AnimTask_SquishTarget, 0x2
+ delay 6
+ call WoodHammerImpact
+ waitforvisualfinish
+ end
+IvyCudgelWater:
+ loadspritegfx ANIM_TAG_IVY_CUDGEL_WATER
+ createsprite gIvyCudgelWaterSpriteTemplate, ANIM_TARGET, 2
+ delay 60
+ createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 3, 0, 12, 4
+ delay 18
+ createvisualtask AnimTask_SquishTarget, 0x2
+ delay 6
+ call WoodHammerImpact
+ waitforvisualfinish
+ end
+
Move_SPICY_EXTRACT::
+ loadspritegfx ANIM_TAG_SMALL_EMBER
+ loadspritegfx ANIM_TAG_POISON_BUBBLE
+ loadspritegfx ANIM_TAG_SMALL_BUBBLES
+ createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_POISON_BUBBLE, 0, 12, 12, 0x061D @Orange
+ call SludgeBombProjectile
+ call SludgeBombProjectile
+ call SludgeBombProjectile
+ call SludgeBombProjectile
+ call SludgeBombProjectile
+ call SludgeBombProjectile
+ call SludgeBombProjectile
+ call SludgeBombProjectile
+ call SludgeBombProjectile
+ call SludgeBombProjectile
+ createvisualtask AnimTask_ShakeMon2, 5, ANIM_TARGET, 3, 0, 15, 1
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 3, 0, 9, RGB_RED
+ createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, 42, 27, 20
+ createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, -27, 44, 20
+ createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, 39, -28, 20
+ createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, -42, -42, 20
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_TARGET
+ delay 5
+ createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, 0, 40, 20
+ createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, -8, -44, 20
+ createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, -46, -28, 20
+ createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, 46, 9, 20
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_TARGET
+ delay 5
+ createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, 42, 0, 20
+ createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, -43, -12, 20
+ createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, 16, -46, 20
+ createsprite gSludgeBombHitParticleSpriteTemplate, ANIM_TARGET, 2, -16, 44, 20
+ playsewithpan SE_M_FLAME_WHEEL, SOUND_PAN_TARGET
+ call LetsSnuggleForeverTears
+ delay 0x8
+ call LetsSnuggleForeverTears
+ delay 0x8
+ call LetsSnuggleForeverTears
+ waitsound
+ waitforvisualfinish
+ createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 3, 9, 0, RGB_RED
+ waitforvisualfinish
+ end
+
+Move_AXE_KICK::
+ loadspritegfx ANIM_TAG_HANDS_AND_FEET
+ loadspritegfx ANIM_TAG_IMPACT
+ playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER
+ createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4
+ delay 7
+ createsprite gAxeKickSpriteTemplate, ANIM_TARGET, 3
+ delay 2
+ playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
+ createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 1, 0, 0, ANIM_TARGET, 1
+ createvisualtask AnimTask_SquishTargetShort, 2
+ waitforvisualfinish
+ createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 1, 4
+ end
+
Move_SPIN_OUT::
+ 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
+
+Move_MORTAL_SPIN::
+ 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
+
+Move_FILLET_AWAY::
+ 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
+
+Move_FLOWER_TRICK::
+ 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
+
+Move_MAKE_IT_RAIN::
+ 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
+
+Move_SHED_TAIL::
+ 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
+
+Move_HYPER_DRILL::
+ 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
+
+Move_TWIN_BEAM::
+ 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
+
+Move_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
+
+Move_BLOOD_MOON::
+ 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
+
+Move_FICKLE_BEAM::
+ 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
+
+Move_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
+
+Move_HARD_PRESS::
+ 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
+
+Move_DRAGON_CHEER::
+ 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
+
+Move_MALIGNANT_CHAIN::
+ 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
+
+Move_TERA_BLAST::
+Move_ORDER_UP::
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_IVY_CUDGEL::
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::
end @to do
@@@@@@@@@@@@@@@@@@@@@@@ GEN 1-3 @@@@@@@@@@@@@@@@@@@@@@@
-Move_NONE:
-Move_MIRROR_MOVE:
-Move_POUND:
+Move_NONE::
+Move_MIRROR_MOVE::
+Move_POUND::
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_TARGET
setalpha 12, 8
@@ -17904,7 +17670,7 @@ Move_POUND:
blendoff
end
-Move_DOUBLE_SLAP:
+Move_DOUBLE_SLAP::
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_TARGET
setalpha 12, 8
@@ -17923,7 +17689,7 @@ DoubleSlapRight:
createsprite gBasicHitSplatSpriteTemplate, ANIM_ATTACKER, 2, 8, 0, ANIM_TARGET, 2
goto DoubleSlapContinue
-Move_POISON_POWDER:
+Move_POISON_POWDER::
loadspritegfx ANIM_TAG_POISON_POWDER
loadspritegfx ANIM_TAG_POISON_BUBBLE
loopsewithpan SE_M_POISON_POWDER, SOUND_PAN_TARGET, 10, 6
@@ -17948,7 +17714,7 @@ Move_POISON_POWDER:
waitforvisualfinish
end
-Move_STUN_SPORE:
+Move_STUN_SPORE::
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
@@ -17972,7 +17738,7 @@ Move_STUN_SPORE:
waitforvisualfinish
end
-Move_SLEEP_POWDER:
+Move_SLEEP_POWDER::
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
@@ -17996,7 +17762,7 @@ Move_SLEEP_POWDER:
waitforvisualfinish
end
-Move_SWIFT:
+Move_SWIFT::
loadspritegfx ANIM_TAG_YELLOW_STAR
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_DEF_PARTNER
@@ -18023,7 +17789,7 @@ Move_SWIFT:
blendoff
end
-Move_STRENGTH:
+Move_STRENGTH::
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_DEF_PARTNER
setalpha 12, 8
@@ -18049,7 +17815,7 @@ Move_STRENGTH:
blendoff
end
-Move_TACKLE:
+Move_TACKLE::
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_TARGET
setalpha 12, 8
@@ -18063,7 +17829,7 @@ Move_TACKLE:
blendoff
end
-Move_BODY_SLAM:
+Move_BODY_SLAM::
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_DEF_PARTNER
setalpha 12, 8
@@ -18089,7 +17855,7 @@ Move_BODY_SLAM:
blendoff
end
-Move_SUPERSONIC:
+Move_SUPERSONIC::
loadspritegfx ANIM_TAG_GOLD_RING
monbg ANIM_ATK_PARTNER
splitbgprio_foes ANIM_ATTACKER
@@ -18111,7 +17877,7 @@ SupersonicRing:
delay 2
return
-Move_SCREECH:
+Move_SCREECH::
loadspritegfx ANIM_TAG_PURPLE_RING
createvisualtask AnimTask_ShakeMon2, 2, ANIM_ATTACKER, 3, 0, 2, 1
call ScreechRing
@@ -18126,7 +17892,7 @@ ScreechRing:
delay 2
return
-Move_FLAME_WHEEL:
+Move_FLAME_WHEEL::
loadspritegfx ANIM_TAG_SMALL_EMBER
monbg ANIM_DEF_PARTNER
splitbgprio_foes ANIM_TARGET
@@ -18168,7 +17934,7 @@ FlameWheel1: @ Unused
delay 4
return
-Move_PIN_MISSILE:
+Move_PIN_MISSILE::
loadspritegfx ANIM_TAG_NEEDLE
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_TARGET
@@ -18197,7 +17963,7 @@ Move_PIN_MISSILE:
blendoff
end
-Move_ICICLE_SPEAR:
+Move_ICICLE_SPEAR::
loadspritegfx ANIM_TAG_ICICLE_SPEAR
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_TARGET
@@ -18226,7 +17992,7 @@ Move_ICICLE_SPEAR:
blendoff
end
-Move_TAKE_DOWN:
+Move_TAKE_DOWN::
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_DEF_PARTNER
setalpha 12, 8
@@ -18249,7 +18015,7 @@ Move_TAKE_DOWN:
blendoff
end
-Move_DOUBLE_EDGE:
+Move_DOUBLE_EDGE::
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
@@ -18282,7 +18048,7 @@ Move_DOUBLE_EDGE:
waitforvisualfinish
end
-Move_POISON_STING:
+Move_POISON_STING::
loadspritegfx ANIM_TAG_NEEDLE
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_POISON_BUBBLE
@@ -18302,7 +18068,7 @@ Move_POISON_STING:
blendoff
end
-Move_TWINEEDLE:
+Move_TWINEEDLE::
loadspritegfx ANIM_TAG_NEEDLE
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_TARGET
@@ -18322,7 +18088,7 @@ Move_TWINEEDLE:
blendoff
end
-Move_FIRE_BLAST:
+Move_FIRE_BLAST::
loadspritegfx ANIM_TAG_SMALL_EMBER
createsoundtask SoundTask_FireBlast, SE_M_FLAME_WHEEL, SE_M_FLAME_WHEEL2
call FireBlastRing
@@ -18370,7 +18136,7 @@ FireBlastCross:
createsprite gFireBlastCrossSpriteTemplate, ANIM_TARGET, 2, 0, 0, 15, 2, 2
return
-Move_LEECH_SEED:
+Move_LEECH_SEED::
loadspritegfx ANIM_TAG_SEED
playsewithpan SE_M_POISON_POWDER, SOUND_PAN_ATTACKER
createsprite gLeechSeedSpriteTemplate, ANIM_TARGET, 2, 15, 0, 0, 24, 35, -32
@@ -18385,7 +18151,7 @@ Move_LEECH_SEED:
waitforvisualfinish
end
-Move_EMBER:
+Move_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
@@ -18424,7 +18190,7 @@ SetImpactContestsBG:
changebg BG_IMPACT_CONTESTS
goto SetImpactBackgroundRet
-Move_MEGA_PUNCH:
+Move_MEGA_PUNCH::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_HANDS_AND_FEET
monbg ANIM_TARGET
@@ -18449,7 +18215,7 @@ Move_MEGA_PUNCH:
waitbgfadein
end
-Move_MEGA_KICK:
+Move_MEGA_KICK::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_HANDS_AND_FEET
monbg ANIM_TARGET
@@ -18474,7 +18240,7 @@ Move_MEGA_KICK:
waitbgfadein
end
-Move_COMET_PUNCH:
+Move_COMET_PUNCH::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_HANDS_AND_FEET
monbg ANIM_TARGET
@@ -18496,7 +18262,7 @@ CometPunchRight:
createsprite gFistFootSpriteTemplate, ANIM_ATTACKER, 3, 8, 0, 8, 1, 0
goto CometPunchContinue
-Move_SONIC_BOOM:
+Move_SONIC_BOOM::
loadspritegfx ANIM_TAG_AIR_WAVE
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_DEF_PARTNER
@@ -18521,7 +18287,7 @@ SonicBoomHit:
delay 4
return
-Move_THUNDER_SHOCK:
+Move_THUNDER_SHOCK::
loadspritegfx ANIM_TAG_SPARK
loadspritegfx ANIM_TAG_SPARK_2
createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 0, 0, 6, RGB_BLACK
@@ -18542,7 +18308,7 @@ Move_THUNDER_SHOCK:
waitforvisualfinish
end
-Move_THUNDERBOLT:
+Move_THUNDERBOLT::
loadspritegfx ANIM_TAG_SPARK
loadspritegfx ANIM_TAG_SHOCK_3
loadspritegfx ANIM_TAG_SPARK_2
@@ -18591,7 +18357,7 @@ Move_THUNDERBOLT:
waitforvisualfinish
end
-Move_THUNDER_WAVE:
+Move_THUNDER_WAVE::
loadspritegfx ANIM_TAG_SPARK
loadspritegfx ANIM_TAG_SPARK_2
loadspritegfx ANIM_TAG_SPARK_H
@@ -18612,7 +18378,7 @@ Move_THUNDER_WAVE:
waitforvisualfinish
end
-Move_BEAT_UP:
+Move_BEAT_UP::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_HANDS_AND_FEET
monbg ANIM_TARGET
@@ -18646,7 +18412,7 @@ BeatUpRight:
playsewithpan SE_M_VITAL_THROW2, SOUND_PAN_TARGET
goto BeatUpContinue
-Move_STOMP:
+Move_STOMP::
loadspritegfx ANIM_TAG_HANDS_AND_FEET
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_TARGET
@@ -18662,13 +18428,13 @@ Move_STOMP:
blendoff
end
-Move_TAIL_WHIP:
+Move_TAIL_WHIP::
loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 24, 3
createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 12, 4, 2, 3
waitforvisualfinish
end
-Move_CUT:
+Move_CUT::
loadspritegfx ANIM_TAG_CUT
monbg ANIM_TARGET
setalpha 12, 8
@@ -18682,7 +18448,7 @@ Move_CUT:
waitforvisualfinish
end
-Move_HIDDEN_POWER:
+Move_HIDDEN_POWER::
loadspritegfx ANIM_TAG_RED_ORB
playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER
createvisualtask AnimTask_ScaleMonAndRestore, 5, -7, -7, 11, ANIM_ATTACKER, 0
@@ -18712,7 +18478,7 @@ Move_HIDDEN_POWER:
createsprite gHiddenPowerOrbScatterSpriteTemplate, ANIM_TARGET, 2, 224
end
-Move_REVERSAL:
+Move_REVERSAL::
loadspritegfx ANIM_TAG_BLUE_ORB
loadspritegfx ANIM_TAG_HANDS_AND_FEET
loadspritegfx ANIM_TAG_IMPACT
@@ -18740,7 +18506,7 @@ Move_REVERSAL:
createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 5, FALSE, 1, 8, 1, 0
end
-Move_PURSUIT:
+Move_PURSUIT::
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_TARGET
fadetobg BG_DARK
@@ -18767,7 +18533,7 @@ PursuitOnSwitchout:
createvisualtask AnimTask_ShakeTargetBasedOnMovePowerOrDmg, 5, FALSE, 1, 6, 1, 0
goto PursuitContinue
-Move_SPIKE_CANNON:
+Move_SPIKE_CANNON::
loadspritegfx ANIM_TAG_NEEDLE
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_TARGET
@@ -18791,7 +18557,7 @@ Move_SPIKE_CANNON:
blendoff
end
-Move_SWORDS_DANCE:
+Move_SWORDS_DANCE::
loadspritegfx ANIM_TAG_SWORD
monbg ANIM_ATTACKER
setalpha 12, 8
@@ -18806,7 +18572,7 @@ Move_SWORDS_DANCE:
delay 1
end
-Move_PSYCH_UP:
+Move_PSYCH_UP::
loadspritegfx ANIM_TAG_SPIRAL
monbg ANIM_ATK_PARTNER
createvisualtask AnimTask_BlendColorCycleExclude, 2, 1, 2, 6, 1, 11, RGB_BLACK
@@ -18825,7 +18591,7 @@ Move_PSYCH_UP:
waitforvisualfinish
end
-Move_DIZZY_PUNCH:
+Move_DIZZY_PUNCH::
loadspritegfx ANIM_TAG_DUCK
loadspritegfx ANIM_TAG_HANDS_AND_FEET
loadspritegfx ANIM_TAG_IMPACT
@@ -18862,7 +18628,7 @@ DizzyPunchLunge:
createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 3, 0, 7, 1
return
-Move_FIRE_SPIN:
+Move_FIRE_SPIN::
loadspritegfx ANIM_TAG_SMALL_EMBER
playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_TARGET
createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 0, 2, 47, 1
@@ -18887,7 +18653,7 @@ FireSpinEffect:
delay 2
return
-Move_FURY_CUTTER:
+Move_FURY_CUTTER::
loadspritegfx ANIM_TAG_CUT
monbg ANIM_TARGET
setalpha 12, 8
@@ -18925,7 +18691,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:
+Move_SELF_DESTRUCT::
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
@@ -18956,7 +18722,7 @@ SelfDestructExplode:
delay 6
return
-Move_SLAM:
+Move_SLAM::
loadspritegfx ANIM_TAG_SLAM_HIT
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_TARGET
@@ -18980,7 +18746,7 @@ Move_SLAM:
blendoff
end
-Move_VINE_WHIP:
+Move_VINE_WHIP::
loadspritegfx ANIM_TAG_WHIP_HIT
playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER
createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 6
@@ -18991,7 +18757,7 @@ Move_VINE_WHIP:
createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 6, 1
end
-Move_DRILL_PECK:
+Move_DRILL_PECK::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_WHIRLWIND_LINES
createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0
@@ -19010,7 +18776,7 @@ Move_DRILL_PECK:
waitforvisualfinish
end
-Move_WATERFALL:
+Move_WATERFALL::
loadspritegfx ANIM_TAG_WATER_IMPACT
loadspritegfx ANIM_TAG_SMALL_BUBBLES
loadspritegfx ANIM_TAG_ICE_CRYSTALS
@@ -19095,7 +18861,7 @@ RisingWaterHitEffect:
createsprite gSmallDriftingBubblesSpriteTemplate, ANIM_ATTACKER, 4, 0, -20
return
-Move_EXPLOSION:
+Move_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
@@ -19128,7 +18894,7 @@ Explosion1:
delay 6
return
-Move_DEFENSE_CURL:
+Move_DEFENSE_CURL::
loadspritegfx ANIM_TAG_ECLIPSING_ORB
loopsewithpan SE_M_TRI_ATTACK, SOUND_PAN_ATTACKER, 18, 3
createvisualtask AnimTask_SetGrayscaleOrOriginalPal, 5, ANIM_ATTACKER, FALSE
@@ -19140,7 +18906,7 @@ Move_DEFENSE_CURL:
waitforvisualfinish
end
-Move_PROTECT:
+Move_PROTECT::
loadspritegfx ANIM_TAG_PROTECT
monbg ANIM_ATK_PARTNER
splitbgprio ANIM_ATTACKER
@@ -19150,7 +18916,7 @@ Move_PROTECT:
clearmonbg ANIM_ATK_PARTNER
end
-Move_DETECT:
+Move_DETECT::
loadspritegfx ANIM_TAG_SPARKLE_4
createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 9, RGB_BLACK
waitforvisualfinish
@@ -19165,7 +18931,7 @@ Move_DETECT:
waitforvisualfinish
end
-Move_FRUSTRATION:
+Move_FRUSTRATION::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_ANGER
monbg ANIM_DEF_PARTNER
@@ -19270,7 +19036,7 @@ Frustration_Weak:
createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 1, 0, 6, 1
goto Frustration_Continue
-Move_SAFEGUARD:
+Move_SAFEGUARD::
loadspritegfx ANIM_TAG_GUARD_RING
monbg ANIM_ATK_PARTNER
setalpha 8, 8
@@ -19288,7 +19054,7 @@ Move_SAFEGUARD:
blendoff
end
-Move_PAIN_SPLIT:
+Move_PAIN_SPLIT::
loadspritegfx ANIM_TAG_PAIN_SPLIT
createsprite gPainSplitProjectileSpriteTemplate, ANIM_ATTACKER, 2, -8, -42, ANIM_ATTACKER
createsprite gPainSplitProjectileSpriteTemplate, ANIM_TARGET, 2, -8, -42, ANIM_TARGET
@@ -19312,7 +19078,7 @@ Move_PAIN_SPLIT:
createvisualtask AnimTask_PainSplitMovement, 2, ANIM_TARGET, 2
end
-Move_VICE_GRIP:
+Move_VISE_GRIP::
loadspritegfx ANIM_TAG_CUT
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_DEF_PARTNER
@@ -19328,7 +19094,7 @@ Move_VICE_GRIP:
blendoff
end
-Move_GUILLOTINE:
+Move_GUILLOTINE::
loadspritegfx ANIM_TAG_CUT
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_DEF_PARTNER
@@ -19353,7 +19119,7 @@ Move_GUILLOTINE:
waitbgfadein
end
-Move_PAY_DAY:
+Move_PAY_DAY::
loadspritegfx ANIM_TAG_COIN
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_TARGET
@@ -19371,7 +19137,7 @@ Move_PAY_DAY:
blendoff
end
-Move_OUTRAGE:
+Move_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)
@@ -19416,7 +19182,7 @@ OutrageFlames:
createsprite gOutrageFlameSpriteTemplate, ANIM_TARGET, 2, 0, 0, 30, -1280, -768, 3
return
-Move_SPARK:
+Move_SPARK::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_SPARK_2
delay 0
@@ -19462,7 +19228,7 @@ Move_SPARK:
waitforvisualfinish
end
-Move_ATTRACT:
+Move_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
@@ -19491,7 +19257,7 @@ Move_ATTRACT:
createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_TARGET, 4, 4, 0, 10, RGB(31, 25, 27)
end
-Move_GROWTH:
+Move_GROWTH::
call GrowthEffect
waitforvisualfinish
call GrowthEffect
@@ -19503,7 +19269,7 @@ GrowthEffect:
createvisualtask AnimTask_ScaleMonAndRestore, 5, -3, -3, 16, ANIM_ATTACKER, 0
return
-Move_WHIRLWIND:
+Move_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
@@ -19522,7 +19288,7 @@ Move_WHIRLWIND:
waitforvisualfinish
end
-Move_CONFUSE_RAY:
+Move_CONFUSE_RAY::
loadspritegfx ANIM_TAG_YELLOW_BALL
monbg ANIM_DEF_PARTNER
fadetobg BG_GHOST
@@ -19542,7 +19308,7 @@ Move_CONFUSE_RAY:
waitbgfadein
end
-Move_LOCK_ON:
+Move_LOCK_ON::
loadspritegfx ANIM_TAG_LOCK_ON
createsprite gLockOnTargetSpriteTemplate, ANIM_ATTACKER, 40
createsprite gLockOnMoveTargetSpriteTemplate, ANIM_ATTACKER, 40, 1
@@ -19554,7 +19320,7 @@ Move_LOCK_ON:
waitforvisualfinish
end
-Move_MEAN_LOOK:
+Move_MEAN_LOOK::
loadspritegfx ANIM_TAG_EYE
monbg ANIM_DEF_PARTNER
playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER
@@ -19569,7 +19335,7 @@ Move_MEAN_LOOK:
waitforvisualfinish
end
-Move_ROCK_THROW:
+Move_ROCK_THROW::
loadspritegfx ANIM_TAG_ROCKS
createsprite gShakeMonOrTerrainSpriteTemplate, ANIM_TARGET, 2, 6, 1, 15, 1
createsprite gFallingRockSpriteTemplate, ANIM_TARGET, 2, 0, 1, 0, 0
@@ -19590,7 +19356,7 @@ Move_ROCK_THROW:
waitforvisualfinish
end
-Move_ROCK_SLIDE:
+Move_ROCK_SLIDE::
loadspritegfx ANIM_TAG_ROCKS
monbg ANIM_DEF_PARTNER
createsprite gShakeMonOrTerrainSpriteTemplate, ANIM_ATTACKER, 2, 7, 1, 11, 1
@@ -19641,7 +19407,7 @@ RockSlideRocks:
delay 2
return
-Move_THIEF:
+Move_THIEF::
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_TARGET
delay 1
@@ -19661,7 +19427,7 @@ Move_THIEF:
waitbgfadein
end
-Move_BUBBLE_BEAM:
+Move_BUBBLE_BEAM::
loadspritegfx ANIM_TAG_BUBBLE
loadspritegfx ANIM_TAG_SMALL_BUBBLES
monbg ANIM_TARGET
@@ -19699,7 +19465,7 @@ BulbblebeamCreateBubbles:
delay 3
return
-Move_ICY_WIND:
+Move_ICY_WIND::
loadspritegfx ANIM_TAG_ICE_CRYSTALS
loadspritegfx ANIM_TAG_ICE_SPIKES
monbg ANIM_DEF_PARTNER
@@ -19735,7 +19501,7 @@ IcyWindSwirlingSnowballs:
createsprite gSwirlingSnowballSpriteTemplate, ANIM_TARGET, 40, 0, -5, 0, -5, 72, 1
return
-Move_SMOKESCREEN:
+Move_SMOKESCREEN::
loadspritegfx ANIM_TAG_BLACK_SMOKE
loadspritegfx ANIM_TAG_BLACK_BALL
playsewithpan SE_M_DOUBLE_TEAM, SOUND_PAN_ATTACKER
@@ -19759,7 +19525,7 @@ Move_SMOKESCREEN:
waitforvisualfinish
end
-Move_CONVERSION:
+Move_CONVERSION::
loadspritegfx ANIM_TAG_CONVERSION
monbg ANIM_ATK_PARTNER
splitbgprio ANIM_ATTACKER
@@ -19811,7 +19577,7 @@ Move_CONVERSION:
blendoff
end
-Move_CONVERSION_2:
+Move_CONVERSION_2::
loadspritegfx ANIM_TAG_CONVERSION
monbg ANIM_DEF_PARTNER
splitbgprio_foes ANIM_TARGET
@@ -19856,7 +19622,7 @@ Move_CONVERSION_2:
blendoff
end
-Move_ROLLING_KICK:
+Move_ROLLING_KICK::
loadspritegfx ANIM_TAG_HANDS_AND_FEET
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_TARGET
@@ -19878,7 +19644,7 @@ Move_ROLLING_KICK:
blendoff
end
-Move_HEADBUTT:
+Move_HEADBUTT::
loadspritegfx ANIM_TAG_IMPACT
createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0
playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER
@@ -19894,7 +19660,7 @@ Move_HEADBUTT:
waitforvisualfinish
end
-Move_HORN_ATTACK:
+Move_HORN_ATTACK::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_HORN_HIT
createsprite gBowMonSpriteTemplate, ANIM_ATTACKER, 2, 0
@@ -19912,7 +19678,7 @@ Move_HORN_ATTACK:
waitforvisualfinish
end
-Move_FURY_ATTACK:
+Move_FURY_ATTACK::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_HORN_HIT
createvisualtask AnimTask_RotateMonSpriteToSide, 2, 4, 256, ANIM_ATTACKER, 2
@@ -19936,7 +19702,7 @@ FuryAttackLeft:
playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET
goto FuryAttackContinue
-Move_HORN_DRILL:
+Move_HORN_DRILL::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_HORN_HIT
jumpifcontest HornDrillInContest
@@ -20003,7 +19769,7 @@ HornDrillInContest:
createvisualtask AnimTask_StartSlidingBg, 5, 2304, 768, 0, -1
goto HornDrillContinue
-Move_THRASH:
+Move_THRASH::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_HANDS_AND_FEET
createvisualtask AnimTask_ThrashMoveMonHorizontal, 2
@@ -20021,7 +19787,7 @@ Move_THRASH:
playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_TARGET
end
-Move_SING:
+Move_SING::
loadspritegfx ANIM_TAG_MUSIC_NOTES
monbg ANIM_DEF_PARTNER
createvisualtask AnimTask_MusicNotesRainbowBlend, 2
@@ -20057,7 +19823,7 @@ Move_SING:
waitforvisualfinish
end
-Move_LOW_KICK:
+Move_LOW_KICK::
loadspritegfx ANIM_TAG_HANDS_AND_FEET
loadspritegfx ANIM_TAG_IMPACT
createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, 20, 0, 0, 4
@@ -20070,7 +19836,7 @@ Move_LOW_KICK:
createsprite gSlideMonToOriginalPosSpriteTemplate, ANIM_ATTACKER, 2, 0, 1, 4
end
-Move_EARTHQUAKE:
+Move_EARTHQUAKE::
createvisualtask AnimTask_HorizontalShake, 5, ANIM_PLAYER_RIGHT, 10, 50
createvisualtask AnimTask_HorizontalShake, 5, ANIM_PLAYER_LEFT, 10, 50
playsewithpan SE_M_EARTHQUAKE, 0
@@ -20080,7 +19846,7 @@ Move_EARTHQUAKE:
createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 1, RGB_BLACK, 14, RGB_WHITE, 14
end
-Move_FISSURE:
+Move_FISSURE::
loadspritegfx ANIM_TAG_MUD_SAND
createvisualtask AnimTask_HorizontalShake, 3, ANIM_PLAYER_RIGHT, 10, 50
createvisualtask AnimTask_HorizontalShake, 3, ANIM_TARGET, 10, 50
@@ -20123,7 +19889,7 @@ FissureDirtPlumeClose:
playsewithpan SE_M_DIG, SOUND_PAN_TARGET
return
-Move_DIG:
+Move_DIG::
choosetwoturnanim DigSetUp, DigUnleash
DigEnd:
end
@@ -20171,7 +19937,7 @@ DigThrowDirt:
delay 32
return
-Move_MEDITATE:
+Move_MEDITATE::
call SetPsychicBackground
createvisualtask AnimTask_MeditateStretchAttacker, 2
playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER
@@ -20181,7 +19947,7 @@ Move_MEDITATE:
call UnsetPsychicBg
end
-Move_AGILITY:
+Move_AGILITY::
monbg ANIM_ATK_PARTNER
setalpha 12, 8
createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 24, 6, 4, 4
@@ -20202,7 +19968,7 @@ Move_AGILITY:
delay 1
end
-Move_QUICK_ATTACK:
+Move_QUICK_ATTACK::
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_ATK_PARTNER
setalpha 12, 8
@@ -20219,7 +19985,7 @@ Move_QUICK_ATTACK:
waitforvisualfinish
end
-Move_RAGE:
+Move_RAGE::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_ANGER
monbg ANIM_TARGET
@@ -20240,7 +20006,7 @@ Move_RAGE:
clearmonbg ANIM_TARGET
end
-Move_TELEPORT:
+Move_TELEPORT::
call SetPsychicBackground
createvisualtask AnimTask_Teleport, 2
playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER
@@ -20275,12 +20041,12 @@ DoubleTeamAnimRet:
delay 1
return
-Move_DOUBLE_TEAM:
+Move_DOUBLE_TEAM::
createvisualtask AnimTask_DoubleTeam, 2
call DoubleTeamAnimRet
end
-Move_MINIMIZE:
+Move_MINIMIZE::
setalpha 10, 8
createvisualtask AnimTask_Minimize, 2
loopsewithpan SE_M_MINIMIZE, SOUND_PAN_ATTACKER, 34, 3
@@ -20288,7 +20054,7 @@ Move_MINIMIZE:
blendoff
end
-Move_METRONOME:
+Move_METRONOME::
loadspritegfx ANIM_TAG_FINGER
loadspritegfx ANIM_TAG_THOUGHT_BUBBLE
createsprite gThoughtBubbleSpriteTemplate, ANIM_ATTACKER, 11, 0, 100
@@ -20300,7 +20066,7 @@ Move_METRONOME:
waitforvisualfinish
end
-Move_SKULL_BASH:
+Move_SKULL_BASH::
choosetwoturnanim SkullBashSetUp, SkullBashAttack
SkullBashEnd:
end
@@ -20333,7 +20099,7 @@ SkullBashAttack:
createvisualtask AnimTask_SkullBashPosition, 2, 1
goto SkullBashEnd
-Move_AMNESIA:
+Move_AMNESIA::
loadspritegfx ANIM_TAG_AMNESIA
call SetPsychicBackground
delay 8
@@ -20345,7 +20111,7 @@ Move_AMNESIA:
call UnsetPsychicBg
end
-Move_KINESIS:
+Move_KINESIS::
loadspritegfx ANIM_TAG_ALERT
loadspritegfx ANIM_TAG_BENT_SPOON
playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER
@@ -20364,7 +20130,7 @@ Move_KINESIS:
call UnsetPsychicBg
end
-Move_GLARE:
+Move_GLARE::
loadspritegfx ANIM_TAG_SMALL_RED_EYE
loadspritegfx ANIM_TAG_EYE_SPARKLE
createvisualtask AnimTask_GlareEyeDots, 5, 0
@@ -20382,7 +20148,7 @@ Move_GLARE:
createvisualtask AnimTask_BlendBattleAnimPal, 5, F_PAL_BG, 0, 16, 0, RGB_BLACK
end
-Move_BARRAGE:
+Move_BARRAGE::
loadspritegfx ANIM_TAG_RED_BALL
createvisualtask AnimTask_BarrageBall, 3
playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER
@@ -20393,7 +20159,7 @@ Move_BARRAGE:
loopsewithpan SE_M_STRENGTH, SOUND_PAN_TARGET, 8, 2
end
-Move_SKY_ATTACK:
+Move_SKY_ATTACK::
choosetwoturnanim SkyAttackSetUp, SkyAttackUnleash
SkyAttackEnd:
end
@@ -20459,20 +20225,20 @@ SkyAttackUnleash:
call UnsetSkyBg
goto SkyAttackEnd
-Move_FLASH:
+Move_FLASH::
playsewithpan SE_M_LEER, SOUND_PAN_ATTACKER
createvisualtask AnimTask_Flash, 2
waitforvisualfinish
end
-Move_SPLASH:
+Move_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:
+Move_ACID_ARMOR::
monbg ANIM_ATTACKER
setalpha 15, 0
createvisualtask AnimTask_AcidArmor, 2, ANIM_ATTACKER
@@ -20483,13 +20249,13 @@ Move_ACID_ARMOR:
delay 1
end
-Move_SHARPEN:
+Move_SHARPEN::
loadspritegfx ANIM_TAG_SPHERE_TO_CUBE
createsprite gSharpenSphereSpriteTemplate, ANIM_ATTACKER, 2
waitforvisualfinish
end
-Move_SUPER_FANG:
+Move_SUPER_FANG::
loadspritegfx ANIM_TAG_FANG_ATTACK
createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_ATTACKER, 1, 0, 20, 1
playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER
@@ -20509,7 +20275,7 @@ Move_SUPER_FANG:
blendoff
end
-Move_SLASH:
+Move_SLASH::
loadspritegfx ANIM_TAG_SLASH
createsprite gSlashSliceSpriteTemplate, ANIM_TARGET, 2, 1, -8, 0
playsewithpan SE_M_RAZOR_WIND, SOUND_PAN_TARGET
@@ -20520,7 +20286,7 @@ Move_SLASH:
waitforvisualfinish
end
-Move_STRUGGLE:
+Move_STRUGGLE::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_MOVEMENT_WAVES
monbg ANIM_TARGET
@@ -20538,7 +20304,7 @@ Move_STRUGGLE:
blendoff
end
-Move_SKETCH:
+Move_SKETCH::
loadspritegfx ANIM_TAG_PENCIL
monbg ANIM_TARGET
createvisualtask AnimTask_SketchDrawMon, 2
@@ -20549,7 +20315,7 @@ Move_SKETCH:
loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 38, 2
end
-Move_NIGHTMARE:
+Move_NIGHTMARE::
fadetobg BG_GHOST
waitbgfadein
jumpifcontest NightmareInContest
@@ -20571,7 +20337,7 @@ NightmareInContest:
waitbgfadein
end
-Move_FLAIL:
+Move_FLAIL::
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_TARGET
setalpha 12, 8
@@ -20586,7 +20352,7 @@ Move_FLAIL:
blendoff
end
-Move_SPITE:
+Move_SPITE::
fadetobg BG_GHOST
playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER
waitbgfadein
@@ -20620,7 +20386,7 @@ UnsetHighSpeedBg:
waitbgfadein
return
-Move_MACH_PUNCH:
+Move_MACH_PUNCH::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_HANDS_AND_FEET
monbg ANIM_ATK_PARTNER
@@ -20640,7 +20406,7 @@ Move_MACH_PUNCH:
call UnsetHighSpeedBg
end
-Move_FORESIGHT:
+Move_FORESIGHT::
loadspritegfx ANIM_TAG_MAGNIFYING_GLASS
monbg ANIM_DEF_PARTNER
splitbgprio ANIM_TARGET
@@ -20659,7 +20425,7 @@ Move_FORESIGHT:
clearmonbg ANIM_DEF_PARTNER
end
-Move_DESTINY_BOND:
+Move_DESTINY_BOND::
loadspritegfx ANIM_TAG_WHITE_SHADOW
fadetobg BG_GHOST
playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER
@@ -20679,7 +20445,7 @@ Move_DESTINY_BOND:
clearmonbg 5
end
-Move_ENDURE:
+Move_ENDURE::
loadspritegfx ANIM_TAG_FOCUS_ENERGY
playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER
call EndureEffect
@@ -20704,7 +20470,7 @@ EndureEffect:
createsprite gEndureEnergySpriteTemplate, ANIM_ATTACKER, 2, 0, -12, 0, 1
return
-Move_CHARM:
+Move_CHARM::
loadspritegfx ANIM_TAG_MAGENTA_HEART
createvisualtask AnimTask_RockMonBackAndForth, 5, ANIM_ATTACKER, 2, 0
createsprite gMagentaHeartSpriteTemplate, ANIM_ATTACKER, 3, 0, 20
@@ -20718,7 +20484,7 @@ Move_CHARM:
waitforvisualfinish
end
-Move_ROLLOUT:
+Move_ROLLOUT::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_MUD_SAND
loadspritegfx ANIM_TAG_ROCKS
@@ -20735,7 +20501,7 @@ Move_ROLLOUT:
blendoff
end
-Move_FALSE_SWIPE:
+Move_FALSE_SWIPE::
loadspritegfx ANIM_TAG_SLASH_2
loadspritegfx ANIM_TAG_IMPACT
createsprite gFalseSwipeSliceSpriteTemplate, ANIM_TARGET, 2
@@ -20762,7 +20528,7 @@ Move_FALSE_SWIPE:
playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
end
-Move_SWAGGER:
+Move_SWAGGER::
loadspritegfx ANIM_TAG_BREATH
loadspritegfx ANIM_TAG_ANGER
createvisualtask AnimTask_GrowAndShrink, 2
@@ -20780,7 +20546,7 @@ Move_SWAGGER:
waitforvisualfinish
end
-Move_MILK_DRINK:
+Move_MILK_DRINK::
loadspritegfx ANIM_TAG_MILK_BOTTLE
loadspritegfx ANIM_TAG_THIN_RING
loadspritegfx ANIM_TAG_BLUE_STAR
@@ -20801,7 +20567,7 @@ Move_MILK_DRINK:
waitforvisualfinish
end
-Move_MAGNITUDE:
+Move_MAGNITUDE::
createvisualtask AnimTask_IsPowerOver99, 2
waitforvisualfinish
jumpreteq FALSE, MagnitudeRegular
@@ -20823,7 +20589,7 @@ MagnitudeIntense:
createsprite gComplexPaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 1, RGB_BLACK, 14, RGB_WHITE, 14
goto MagnitudeEnd
-Move_RAPID_SPIN:
+Move_RAPID_SPIN::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_RAPID_SPIN
monbg ANIM_ATTACKER
@@ -20842,7 +20608,7 @@ Move_RAPID_SPIN:
clearmonbg ANIM_ATTACKER
end
-Move_MOONLIGHT:
+Move_MOONLIGHT::
loadspritegfx ANIM_TAG_MOON
loadspritegfx ANIM_TAG_GREEN_SPARKLE
loadspritegfx ANIM_TAG_BLUE_STAR
@@ -20869,7 +20635,7 @@ Move_MOONLIGHT:
waitforvisualfinish
end
-Move_EXTREME_SPEED:
+Move_EXTREME_SPEED::
loadspritegfx ANIM_TAG_SPEED_DUST
loadspritegfx ANIM_TAG_IMPACT
call SetHighSpeedBg
@@ -20905,7 +20671,7 @@ Move_EXTREME_SPEED:
delay 1
end
-Move_UPROAR:
+Move_UPROAR::
loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE
loadspritegfx ANIM_TAG_THIN_RING
monbg ANIM_DEF_PARTNER
@@ -20930,7 +20696,7 @@ Move_UPROAR:
clearmonbg ANIM_DEF_PARTNER
end
-Move_HEAT_WAVE:
+Move_HEAT_WAVE::
loadspritegfx ANIM_TAG_FLYING_DIRT
createvisualtask AnimTask_BlendParticle, 5, ANIM_TAG_FLYING_DIRT, 0, 6, 6, RGB_RED
createvisualtask AnimTask_LoadSandstormBackground, 5, TRUE
@@ -20955,7 +20721,7 @@ Move_HEAT_WAVE:
end
@ Also used by Hail weather
-Move_HAIL:
+Move_HAIL::
loadspritegfx ANIM_TAG_HAIL
loadspritegfx ANIM_TAG_ICE_CRYSTALS
createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 0, 6, RGB_BLACK
@@ -20966,7 +20732,7 @@ Move_HAIL:
createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BG, 3, 6, 0, RGB_BLACK
end
-Move_TORMENT:
+Move_TORMENT::
loadspritegfx ANIM_TAG_ANGER
loadspritegfx ANIM_TAG_THOUGHT_BUBBLE
createvisualtask AnimTask_TormentAttacker, 2
@@ -20979,7 +20745,7 @@ Move_TORMENT:
playsewithpan SE_M_SWAGGER2, SOUND_PAN_TARGET
end
-Move_MEMENTO:
+Move_MEMENTO::
setalpha 0, 16
delay 1
createvisualtask AnimTask_InitMementoShadow, 2
@@ -21003,14 +20769,14 @@ Move_MEMENTO:
delay 1
end
-Move_FACADE:
+Move_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:
+Move_SMELLING_SALTS::
loadspritegfx ANIM_TAG_TAG_HAND
loadspritegfx ANIM_TAG_SMELLINGSALT_EFFECT
createsprite gSmellingSaltsHandSpriteTemplate, ANIM_TARGET, 2, ANIM_TARGET, 0, 2
@@ -21025,7 +20791,7 @@ Move_SMELLING_SALTS:
loopsewithpan SE_M_SWAGGER2, SOUND_PAN_TARGET, 16, 3
end
-Move_FOLLOW_ME:
+Move_FOLLOW_ME::
loadspritegfx ANIM_TAG_FINGER
createsprite gFollowMeFingerSpriteTemplate, ANIM_ATTACKER, 2, 0
playsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER
@@ -21035,7 +20801,7 @@ Move_FOLLOW_ME:
loopsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER, 22, 3
end
-Move_CHARGE:
+Move_CHARGE::
loadspritegfx ANIM_TAG_ELECTRIC_ORBS
loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
loadspritegfx ANIM_TAG_ELECTRICITY
@@ -21070,7 +20836,7 @@ Move_CHARGE:
blendoff
end
-Move_TAUNT:
+Move_TAUNT::
loadspritegfx ANIM_TAG_FINGER_2
loadspritegfx ANIM_TAG_THOUGHT_BUBBLE
loadspritegfx ANIM_TAG_ANGER
@@ -21090,7 +20856,7 @@ Move_TAUNT:
playsewithpan SE_M_SWAGGER2, SOUND_PAN_TARGET
end
-Move_HELPING_HAND:
+Move_HELPING_HAND::
loadspritegfx ANIM_TAG_TAG_HAND
createvisualtask AnimTask_HelpingHandAttackerMovement, 5
createsprite gHelpingHandClapSpriteTemplate, ANIM_ATTACKER, 40, 0
@@ -21107,7 +20873,7 @@ Move_HELPING_HAND:
createvisualtask AnimTask_BlendMonInAndOut, 2, ANIM_ATK_PARTNER, RGB_YELLOW, 12, 1, 1
end
-Move_ASSIST:
+Move_ASSIST::
loadspritegfx ANIM_TAG_PAW_PRINT
createsprite gAssistPawprintSpriteTemplate, ANIM_ATTACKER, 50, 112, -16, 140, 128, 36
delay 2
@@ -21124,7 +20890,7 @@ Move_ASSIST:
playsewithpan SE_M_SCRATCH, 0
end
-Move_SUPERPOWER:
+Move_SUPERPOWER::
loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
loadspritegfx ANIM_TAG_METEOR
loadspritegfx ANIM_TAG_FLAT_ROCK
@@ -21158,7 +20924,7 @@ Move_SUPERPOWER:
delay 1
end
-Move_RECYCLE:
+Move_RECYCLE::
loadspritegfx ANIM_TAG_RECYCLE
monbg ANIM_ATTACKER
setalpha 0, 16
@@ -21174,7 +20940,7 @@ Move_RECYCLE:
delay 1
end
-Move_BRICK_BREAK:
+Move_BRICK_BREAK::
loadspritegfx ANIM_TAG_BLUE_LIGHT_WALL
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_HANDS_AND_FEET
@@ -21238,7 +21004,7 @@ BrickBreakShatteredWall:
clearmonbg ANIM_TARGET
end
-Move_YAWN:
+Move_YAWN::
loadspritegfx ANIM_TAG_PINK_CLOUD
createvisualtask AnimTask_DeepInhale, 2, ANIM_ATTACKER
playsewithpan SE_M_YAWN, SOUND_PAN_ATTACKER
@@ -21254,7 +21020,7 @@ Move_YAWN:
playsewithpan SE_M_YAWN, SOUND_PAN_TARGET
end
-Move_ENDEAVOR:
+Move_ENDEAVOR::
loadspritegfx ANIM_TAG_SWEAT_DROP
loadspritegfx ANIM_TAG_IMPACT
createvisualtask AnimTask_SquishAndSweatDroplets, 2, ANIM_ATTACKER, 2
@@ -21270,7 +21036,7 @@ Move_ENDEAVOR:
playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
end
-Move_ERUPTION:
+Move_ERUPTION::
loadspritegfx ANIM_TAG_WARM_ROCK
createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG | F_PAL_BATTLERS, 2, 0, 4, RGB_RED
waitforvisualfinish
@@ -21295,7 +21061,7 @@ Move_ERUPTION:
createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 40, F_PAL_BG | F_PAL_BATTLERS, 4, 4, 0, RGB_RED
end
-Move_SKILL_SWAP:
+Move_SKILL_SWAP::
loadspritegfx ANIM_TAG_BLUEGREEN_ORB
call SetPsychicBackground
createvisualtask AnimTask_SkillSwap, 3, ANIM_TARGET
@@ -21308,7 +21074,7 @@ Move_SKILL_SWAP:
call UnsetPsychicBg
end
-Move_IMPRISON:
+Move_IMPRISON::
loadspritegfx ANIM_TAG_HOLLOW_ORB
loadspritegfx ANIM_TAG_X_SIGN
call SetPsychicBackground
@@ -21325,7 +21091,7 @@ Move_IMPRISON:
call UnsetPsychicBg
end
-Move_GRUDGE:
+Move_GRUDGE::
loadspritegfx ANIM_TAG_PURPLE_FLAME
monbg ANIM_ATTACKER
splitbgprio_all
@@ -21343,7 +21109,7 @@ Move_GRUDGE:
clearmonbg ANIM_ATTACKER
end
-Move_CAMOUFLAGE:
+Move_CAMOUFLAGE::
monbg ANIM_ATK_PARTNER
splitbgprio ANIM_ATTACKER
setalpha 16, 0
@@ -21361,7 +21127,7 @@ Move_CAMOUFLAGE:
clearmonbg ANIM_ATK_PARTNER
end
-Move_TAIL_GLOW:
+Move_TAIL_GLOW::
loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
monbg ANIM_ATTACKER
setalpha 12, 8
@@ -21377,7 +21143,7 @@ Move_TAIL_GLOW:
delay 1
end
-Move_LUSTER_PURGE:
+Move_LUSTER_PURGE::
loadspritegfx ANIM_TAG_WHITE_CIRCLE_OF_LIGHT
loadspritegfx ANIM_TAG_IMPACT
fadetobg BG_PSYCHIC
@@ -21420,7 +21186,7 @@ Move_LUSTER_PURGE:
call UnsetPsychicBg
end
-Move_MIST_BALL:
+Move_MIST_BALL::
loadspritegfx ANIM_TAG_SMALL_BUBBLES
loadspritegfx ANIM_TAG_WHITE_FEATHER
delay 0
@@ -21440,7 +21206,7 @@ Move_MIST_BALL:
createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_TARGET, 2, 16, 0, RGB_WHITE
end
-Move_FEATHER_DANCE:
+Move_FEATHER_DANCE::
loadspritegfx ANIM_TAG_WHITE_FEATHER
monbg ANIM_DEF_PARTNER
splitbgprio_all
@@ -21462,7 +21228,7 @@ Move_FEATHER_DANCE:
clearmonbg ANIM_DEF_PARTNER
end
-Move_TEETER_DANCE:
+Move_TEETER_DANCE::
loadspritegfx ANIM_TAG_MUSIC_NOTES
loadspritegfx ANIM_TAG_DUCK
createvisualtask AnimTask_TeeterDanceMovement, 5
@@ -21482,7 +21248,7 @@ Move_TEETER_DANCE:
playsewithpan SE_M_TEETER_DANCE, SOUND_PAN_ATTACKER
end
-Move_MUD_SPORT:
+Move_MUD_SPORT::
loadspritegfx ANIM_TAG_MUD_SAND
createvisualtask AnimTask_Splash, 2, ANIM_ATTACKER, 6
delay 24
@@ -21529,7 +21295,7 @@ Move_MUD_SPORT:
waitplaysewithpan SE_M_BUBBLE2, 0, 10
end
-Move_NEEDLE_ARM:
+Move_NEEDLE_ARM::
loadspritegfx ANIM_TAG_GREEN_SPIKE
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_HANDS_AND_FEET
@@ -21572,7 +21338,7 @@ Move_NEEDLE_ARM:
createsprite gNeedleArmSpikeSpriteTemplate, ANIM_TARGET, 2, 1, 1, -17, -17, 10
end
-Move_SLACK_OFF:
+Move_SLACK_OFF::
loadspritegfx ANIM_TAG_BLUE_STAR
createvisualtask AnimTask_SlackOffSquish, 2, ANIM_ATTACKER
playsewithpan SE_M_YAWN, SOUND_PAN_ATTACKER
@@ -21581,7 +21347,7 @@ Move_SLACK_OFF:
waitforvisualfinish
end
-Move_CRUSH_CLAW:
+Move_CRUSH_CLAW::
loadspritegfx ANIM_TAG_BLUE_LIGHT_WALL
loadspritegfx ANIM_TAG_CLAW_SLASH
loadspritegfx ANIM_TAG_TORN_METAL
@@ -21602,7 +21368,7 @@ Move_CRUSH_CLAW:
clearmonbg ANIM_TARGET
end
-Move_AROMATHERAPY:
+Move_AROMATHERAPY::
playsewithpan SE_M_PETAL_DANCE, 0
loadspritegfx ANIM_TAG_FLOWER
loadspritegfx ANIM_TAG_THIN_RING
@@ -21641,7 +21407,7 @@ Move_AROMATHERAPY:
waitforvisualfinish
end
-Move_FAKE_TEARS:
+Move_FAKE_TEARS::
loadspritegfx ANIM_TAG_SMALL_BUBBLES
loadspritegfx ANIM_TAG_THOUGHT_BUBBLE
loadspritegfx ANIM_TAG_MUSIC_NOTES
@@ -21664,7 +21430,7 @@ Move_FAKE_TEARS:
waitforvisualfinish
end
-Move_AIR_CUTTER:
+Move_AIR_CUTTER::
loadspritegfx ANIM_TAG_AIR_WAVE
loadspritegfx ANIM_TAG_CUT
loadspritegfx ANIM_TAG_IMPACT
@@ -21685,7 +21451,7 @@ Move_AIR_CUTTER:
delay 0
end
-Move_ODOR_SLEUTH:
+Move_ODOR_SLEUTH::
monbg ANIM_TARGET
createvisualtask AnimTask_OdorSleuthMovement, 5
delay 24
@@ -21701,7 +21467,7 @@ Move_ODOR_SLEUTH:
playsewithpan SE_M_LEER, SOUND_PAN_ATTACKER
end
-Move_GRASS_WHISTLE:
+Move_GRASS_WHISTLE::
loadspritegfx ANIM_TAG_MUSIC_NOTES
createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 0, 4, RGB(18, 31, 12)
waitforvisualfinish
@@ -21738,7 +21504,7 @@ Move_GRASS_WHISTLE:
waitforvisualfinish
end
-Move_TICKLE:
+Move_TICKLE::
loadspritegfx ANIM_TAG_EYE_SPARKLE
createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_ATTACKER, 0, 0, 16, RGB_BLACK
waitforvisualfinish
@@ -21756,7 +21522,7 @@ Move_TICKLE:
waitforvisualfinish
end
-Move_WATER_SPOUT:
+Move_WATER_SPOUT::
loadspritegfx ANIM_TAG_GLOWY_BLUE_ORB
loadspritegfx ANIM_TAG_WATER_IMPACT
monbg ANIM_DEF_PARTNER
@@ -21773,7 +21539,7 @@ Move_WATER_SPOUT:
blendoff
end
-Move_SHADOW_PUNCH:
+Move_SHADOW_PUNCH::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_HANDS_AND_FEET
fadetobg BG_GHOST
@@ -21794,7 +21560,7 @@ Move_SHADOW_PUNCH:
waitbgfadein
end
-Move_EXTRASENSORY:
+Move_EXTRASENSORY::
call SetPsychicBackground
monbg ANIM_DEF_PARTNER
setalpha 12, 8
@@ -21815,7 +21581,7 @@ Move_EXTRASENSORY:
call UnsetPsychicBg
end
-Move_AERIAL_ACE:
+Move_AERIAL_ACE::
loadspritegfx ANIM_TAG_CUT
monbg ANIM_TARGET
setalpha 12, 8
@@ -21832,20 +21598,20 @@ Move_AERIAL_ACE:
blendoff
end
-Move_IRON_DEFENSE:
+Move_IRON_DEFENSE::
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:
+Move_BLOCK::
loadspritegfx ANIM_TAG_X_SIGN
createsprite gBlockXSpriteTemplate, ANIM_TARGET, 66
playsewithpan SE_M_SWAGGER, SOUND_PAN_TARGET
end
-Move_HOWL:
+Move_HOWL::
loadspritegfx ANIM_TAG_NOISE_LINE
createvisualtask AnimTask_DeepInhale, 2, ANIM_ATTACKER
delay 12
@@ -21855,7 +21621,7 @@ Move_HOWL:
delay 30
end
-Move_BULK_UP:
+Move_BULK_UP::
loadspritegfx ANIM_TAG_BREATH
createvisualtask AnimTask_GrowAndShrink, 2
playsewithpan SE_M_SWAGGER, SOUND_PAN_ATTACKER
@@ -21865,7 +21631,7 @@ Move_BULK_UP:
waitforvisualfinish
end
-Move_COVET:
+Move_COVET::
loadspritegfx ANIM_TAG_MAGENTA_HEART
loadspritegfx ANIM_TAG_ITEM_BAG
createvisualtask AnimTask_RockMonBackAndForth, 5, ANIM_ATTACKER, 2, 0
@@ -21882,7 +21648,7 @@ Move_COVET:
loopsewithpan SE_M_DIZZY_PUNCH, SOUND_PAN_TARGET, 4, 3
end
-Move_VOLT_TACKLE:
+Move_VOLT_TACKLE::
loadspritegfx ANIM_TAG_SPARK
loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
loadspritegfx ANIM_TAG_ELECTRICITY
@@ -21929,7 +21695,7 @@ Move_VOLT_TACKLE:
waitforvisualfinish
end
-Move_WATER_SPORT:
+Move_WATER_SPORT::
loadspritegfx ANIM_TAG_GLOWY_BLUE_ORB
createvisualtask AnimTask_WaterSport, 5
delay 8
@@ -21942,7 +21708,7 @@ Move_WATER_SPORT:
panse SE_M_SURF, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
end
-Move_CALM_MIND:
+Move_CALM_MIND::
loadspritegfx ANIM_TAG_THIN_RING
monbg ANIM_ATK_PARTNER
createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, ANIM_ATTACKER, 0, 0, 16, RGB_BLACK
@@ -21965,7 +21731,7 @@ Move_CALM_MIND:
clearmonbg ANIM_ATK_PARTNER
end
-Move_LEAF_BLADE:
+Move_LEAF_BLADE::
loadspritegfx ANIM_TAG_LEAF
loadspritegfx ANIM_TAG_CROSS_IMPACT
createvisualtask AnimTask_LeafBlade, 5
@@ -21990,7 +21756,7 @@ Move_LEAF_BLADE:
blendoff
end
-Move_DRAGON_DANCE:
+Move_DRAGON_DANCE::
loadspritegfx ANIM_TAG_HOLLOW_ORB
monbg ANIM_ATTACKER
splitbgprio ANIM_ATTACKER
@@ -22014,7 +21780,7 @@ Move_DRAGON_DANCE:
delay 1
end
-Move_SHOCK_WAVE:
+Move_SHOCK_WAVE::
loadspritegfx ANIM_TAG_ELECTRIC_ORBS
loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
loadspritegfx ANIM_TAG_SPARK
@@ -22044,13 +21810,13 @@ Move_SHOCK_WAVE:
blendoff
end
-Move_HARDEN:
+Move_HARDEN::
loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2
createvisualtask AnimTask_MetallicShine, 5, 0, 0, RGB_BLACK
waitforvisualfinish
end
-Move_BELLY_DRUM:
+Move_BELLY_DRUM::
loadspritegfx ANIM_TAG_MUSIC_NOTES
loadspritegfx ANIM_TAG_PURPLE_HAND_OUTLINE
createvisualtask AnimTask_MusicNotesRainbowBlend, 2
@@ -22093,7 +21859,7 @@ BellyDrumRight:
createvisualtask AnimTask_ShakeMon, 2, ANIM_ATTACKER, 0, 8, 2, 1
return
-Move_MIND_READER:
+Move_MIND_READER::
loadspritegfx ANIM_TAG_TEAL_ALERT
loadspritegfx ANIM_TAG_OPENING_EYE
loadspritegfx ANIM_TAG_ROUND_WHITE_HALO
@@ -22133,7 +21899,7 @@ MindReaderEyeSpikeEffect:
delay 2
return
-Move_ICE_PUNCH:
+Move_ICE_PUNCH::
monbg ANIM_DEF_PARTNER
setalpha 12, 8
loadspritegfx ANIM_TAG_ICE_CRYSTALS
@@ -22170,7 +21936,7 @@ Move_ICE_PUNCH:
blendoff
end
-Move_REST:
+Move_REST::
playsewithpan SE_M_SNORE, SOUND_PAN_ATTACKER
loadspritegfx ANIM_TAG_LETTER_Z
createsprite gSleepLetterZSpriteTemplate, ANIM_ATTACKER, 2, 4, -10, 16, 0, 0
@@ -22181,7 +21947,7 @@ Move_REST:
waitforvisualfinish
end
-Move_CONFUSION:
+Move_CONFUSION::
monbg ANIM_DEF_PARTNER
call SetPsychicBackground
setalpha 8, 8
@@ -22198,7 +21964,7 @@ Move_CONFUSION:
call UnsetPsychicBg
end
-Move_PSYCHIC:
+Move_PSYCHIC::
monbg ANIM_DEF_PARTNER
call SetPsychicBackground
setalpha 8, 8
@@ -22215,7 +21981,7 @@ Move_PSYCHIC:
call UnsetPsychicBg
end
-Move_FUTURE_SIGHT:
+Move_FUTURE_SIGHT::
goto FutureSight
FutureSightContinue:
waitforvisualfinish
@@ -22235,7 +22001,7 @@ FutureSight:
blendoff
goto FutureSightContinue
-Move_THUNDER:
+Move_THUNDER::
loadspritegfx ANIM_TAG_LIGHTNING
fadetobg BG_THUNDER
waitbgfadeout
@@ -22293,7 +22059,7 @@ Move_THUNDER:
waitbgfadein
end
-Move_THUNDER_PUNCH:
+Move_THUNDER_PUNCH::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_HANDS_AND_FEET
loadspritegfx ANIM_TAG_LIGHTNING
@@ -22326,7 +22092,7 @@ Move_THUNDER_PUNCH:
blendoff
end
-Move_SACRED_FIRE:
+Move_SACRED_FIRE::
loadspritegfx ANIM_TAG_FIRE
loadspritegfx ANIM_TAG_FIRE_PLUME
loopsewithpan SE_M_SACRED_FIRE, SOUND_PAN_ATTACKER, 7, 5
@@ -22383,7 +22149,7 @@ Move_SACRED_FIRE:
waitforvisualfinish
end
-Move_SCRATCH:
+Move_SCRATCH::
loadspritegfx ANIM_TAG_SCRATCH
monbg ANIM_TARGET
setalpha 12, 8
@@ -22396,7 +22162,7 @@ Move_SCRATCH:
waitforvisualfinish
end
-Move_DRAGON_BREATH:
+Move_DRAGON_BREATH::
loadspritegfx ANIM_TAG_SMALL_EMBER
monbg ANIM_DEF_PARTNER
splitbgprio ANIM_TARGET
@@ -22430,7 +22196,7 @@ Move_DRAGON_BREATH:
clearmonbg ANIM_DEF_PARTNER
end
-Move_ROAR:
+Move_ROAR::
loadspritegfx ANIM_TAG_NOISE_LINE
monbg ANIM_ATTACKER
splitbgprio ANIM_ATTACKER
@@ -22458,7 +22224,7 @@ RoarEffect:
createsprite gRoarNoiseLineSpriteTemplate, ANIM_ATTACKER, 2, 24, 8, 1
return
-Move_GROWL:
+Move_GROWL::
loadspritegfx ANIM_TAG_NOISE_LINE
createvisualtask SoundTask_PlayDoubleCry, 2, ANIM_ATTACKER, DOUBLE_CRY_GROWL
call RoarEffect
@@ -22470,7 +22236,7 @@ Move_GROWL:
waitforvisualfinish
end
-Move_SNORE:
+Move_SNORE::
loadspritegfx ANIM_TAG_SNORE_Z
monbg ANIM_ATK_PARTNER
setalpha 8, 8
@@ -22491,7 +22257,7 @@ SnoreEffect:
createsprite gSnoreZSpriteTemplate, ANIM_ATTACKER, 2, 0, 0, 42, -38, 24, 0, 0
return
-Move_LIGHT_SCREEN:
+Move_LIGHT_SCREEN::
loadspritegfx ANIM_TAG_SPARKLE_3
loadspritegfx ANIM_TAG_GREEN_LIGHT_WALL
setalpha 0, 16
@@ -22518,7 +22284,7 @@ SpecialScreenSparkle:
createsprite gSpecialScreenSparkleSpriteTemplate, ANIM_ATTACKER, 2, 10, 18, ANIM_ATTACKER, TRUE
return
-Move_MIRROR_COAT:
+Move_MIRROR_COAT::
loadspritegfx ANIM_TAG_SPARKLE_3
loadspritegfx ANIM_TAG_RED_LIGHT_WALL
setalpha 0, 16
@@ -22531,7 +22297,7 @@ Move_MIRROR_COAT:
blendoff
end
-Move_REFLECT:
+Move_REFLECT::
loadspritegfx ANIM_TAG_SPARKLE_4
loadspritegfx ANIM_TAG_BLUE_LIGHT_WALL
setalpha 0, 16
@@ -22548,7 +22314,7 @@ Move_REFLECT:
blendoff
end
-Move_BARRIER:
+Move_BARRIER::
loadspritegfx ANIM_TAG_GRAY_LIGHT_WALL
setalpha 0, 16
waitplaysewithpan SE_M_BARRIER, SOUND_PAN_ATTACKER, 15
@@ -22558,7 +22324,7 @@ Move_BARRIER:
blendoff
end
-Move_BUBBLE:
+Move_BUBBLE::
loadspritegfx ANIM_TAG_BUBBLE
loadspritegfx ANIM_TAG_SMALL_BUBBLES
monbg ANIM_TARGET
@@ -22594,7 +22360,7 @@ Move_BUBBLE:
blendoff
end
-Move_SMOG:
+Move_SMOG::
loadspritegfx ANIM_TAG_PURPLE_GAS_CLOUD
monbg ANIM_DEF_PARTNER
splitbgprio_all
@@ -22621,7 +22387,7 @@ SmogCloud:
delay 7
return
-Move_FAINT_ATTACK:
+Move_FEINT_ATTACK::
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_ATTACKER
fadetobg BG_DARK
@@ -22657,7 +22423,7 @@ Move_FAINT_ATTACK:
waitbgfadein
end
-Move_SAND_ATTACK:
+Move_SAND_ATTACK::
loadspritegfx ANIM_TAG_MUD_SAND
monbg ANIM_ATK_PARTNER
splitbgprio ANIM_ATTACKER
@@ -22685,7 +22451,7 @@ SandAttackDirt:
delay 2
return
-Move_MUD_SLAP:
+Move_MUD_SLAP::
loadspritegfx ANIM_TAG_MUD_SAND
playsewithpan SE_M_SAND_ATTACK, SOUND_PAN_ATTACKER
createsprite gSlideMonToOffsetSpriteTemplate, ANIM_ATTACKER, 2, 0, -10, 0, 0, 3
@@ -22708,7 +22474,7 @@ MudSlapMud:
delay 2
return
-Move_DRAGON_RAGE:
+Move_DRAGON_RAGE::
loadspritegfx ANIM_TAG_SMALL_EMBER
loadspritegfx ANIM_TAG_FIRE_PLUME
playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER
@@ -22740,7 +22506,7 @@ Move_DRAGON_RAGE:
waitforvisualfinish
end
-Move_RAIN_DANCE:
+Move_RAIN_DANCE::
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
@@ -22754,7 +22520,7 @@ Move_RAIN_DANCE:
waitforvisualfinish
end
-Move_BITE:
+Move_BITE::
loadspritegfx ANIM_TAG_SHARP_TEETH
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_TARGET
@@ -22771,7 +22537,7 @@ Move_BITE:
delay 1
end
-Move_CRUNCH:
+Move_CRUNCH::
loadspritegfx ANIM_TAG_SHARP_TEETH
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_TARGET
@@ -22799,7 +22565,7 @@ Move_CRUNCH:
waitbgfadein
end
-Move_CLAMP:
+Move_CLAMP::
loadspritegfx ANIM_TAG_CLAMP
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_TARGET
@@ -22816,7 +22582,7 @@ Move_CLAMP:
waitforvisualfinish
end
-Move_ICE_BEAM:
+Move_ICE_BEAM::
monbg ANIM_TARGET
splitbgprio ANIM_TARGET
setalpha 12, 8
@@ -22860,13 +22626,13 @@ IceBeamCreateCrystals:
delay 1
return
-Move_WITHDRAW:
+Move_WITHDRAW::
playsewithpan SE_M_HEADBUTT, SOUND_PAN_ATTACKER
createvisualtask AnimTask_Withdraw, 5
waitforvisualfinish
end
-Move_AURORA_BEAM:
+Move_AURORA_BEAM::
loadspritegfx ANIM_TAG_RAINBOW_RINGS
fadetobg BG_AURORA
waitbgfadein
@@ -22902,7 +22668,7 @@ AuroraBeamCreateRings:
delay 1
return
-Move_SOLAR_BEAM:
+Move_SOLAR_BEAM::
loadspritegfx ANIM_TAG_ORBS
choosetwoturnanim SolarBeamSetUp, SolarBeamUnleash
SolarBeamEnd:
@@ -22991,7 +22757,7 @@ SolarBeamUnleash1:
delay 4
return
-Move_BLIZZARD:
+Move_BLIZZARD::
loadspritegfx ANIM_TAG_ICE_CRYSTALS
monbg ANIM_DEF_PARTNER
call SetHighSpeedBg
@@ -23031,7 +22797,7 @@ BlizzardIceCrystals:
delay 3
return
-Move_POWDER_SNOW:
+Move_POWDER_SNOW::
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
@@ -23065,7 +22831,7 @@ PowderSnowSnowballs:
delay 3
return
-Move_HYDRO_PUMP:
+Move_HYDRO_PUMP::
loadspritegfx ANIM_TAG_WATER_ORB
loadspritegfx ANIM_TAG_WATER_IMPACT
monbg ANIM_DEF_PARTNER
@@ -23112,7 +22878,7 @@ HydroPumpHitSplats:
createsprite gWaterHitSplatSpriteTemplate, ANIM_ATTACKER, 4, 0, -15, ANIM_TARGET, 1
return
-Move_SIGNAL_BEAM:
+Move_SIGNAL_BEAM::
loadspritegfx ANIM_TAG_GLOWY_RED_ORB
loadspritegfx ANIM_TAG_GLOWY_GREEN_ORB
loadspritegfx ANIM_TAG_DUCK
@@ -23153,7 +22919,7 @@ SignalBeamOrbs:
delay 1
return
-Move_ABSORB:
+Move_ABSORB::
loadspritegfx ANIM_TAG_ORBS
loadspritegfx ANIM_TAG_BLUE_STAR
loadspritegfx ANIM_TAG_IMPACT
@@ -23206,7 +22972,7 @@ AbsorbEffect:
delay 4
return
-Move_MEGA_DRAIN:
+Move_MEGA_DRAIN::
loadspritegfx ANIM_TAG_ORBS
loadspritegfx ANIM_TAG_BLUE_STAR
loadspritegfx ANIM_TAG_IMPACT
@@ -23267,7 +23033,7 @@ MegaDrainAbsorbEffect:
delay 4
return
-Move_GIGA_DRAIN:
+Move_GIGA_DRAIN::
loadspritegfx ANIM_TAG_ORBS
loadspritegfx ANIM_TAG_BLUE_STAR
loadspritegfx ANIM_TAG_IMPACT
@@ -23336,7 +23102,7 @@ GigaDrainAbsorbEffect:
delay 4
return
-Move_LEECH_LIFE:
+Move_LEECH_LIFE::
loadspritegfx ANIM_TAG_NEEDLE
loadspritegfx ANIM_TAG_ORBS
delay 1
@@ -23366,7 +23132,7 @@ Move_LEECH_LIFE:
blendoff
end
-Move_SYNTHESIS:
+Move_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
@@ -23379,7 +23145,7 @@ Move_SYNTHESIS:
waitforvisualfinish
end
-Move_TOXIC:
+Move_TOXIC::
loadspritegfx ANIM_TAG_TOXIC_BUBBLE
loadspritegfx ANIM_TAG_POISON_BUBBLE
call ToxicBubbles
@@ -23404,7 +23170,7 @@ ToxicBubbles:
delay 15
return
-Move_SLUDGE:
+Move_SLUDGE::
loadspritegfx ANIM_TAG_POISON_BUBBLE
playsewithpan SE_M_BUBBLE3, SOUND_PAN_ATTACKER
createsprite gSludgeProjectileSpriteTemplate, ANIM_TARGET, 2, 20, 0, 40, 0
@@ -23415,7 +23181,7 @@ Move_SLUDGE:
waitforvisualfinish
end
-Move_SLUDGE_BOMB:
+Move_SLUDGE_BOMB::
loadspritegfx ANIM_TAG_POISON_BUBBLE
call SludgeBombProjectile
call SludgeBombProjectile
@@ -23458,7 +23224,7 @@ SludgeBombProjectile:
delay 3
return
-Move_ACID:
+Move_ACID::
loadspritegfx ANIM_TAG_POISON_BUBBLE
monbg ANIM_DEF_PARTNER
createsprite gAcidPoisonBubbleSpriteTemplate, ANIM_TARGET, 2, 20, 0, 40, 1, 0, 0, TRUE
@@ -23491,7 +23257,7 @@ Move_ACID:
clearmonbg ANIM_DEF_PARTNER
end
-Move_BONEMERANG:
+Move_BONEMERANG::
loadspritegfx ANIM_TAG_BONE
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_DEF_PARTNER
@@ -23511,7 +23277,7 @@ Move_BONEMERANG:
blendoff
end
-Move_BONE_CLUB:
+Move_BONE_CLUB::
loadspritegfx ANIM_TAG_BONE
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_DEF_PARTNER
@@ -23529,7 +23295,7 @@ Move_BONE_CLUB:
blendoff
end
-Move_BONE_RUSH:
+Move_BONE_RUSH::
loadspritegfx ANIM_TAG_BONE
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_DEF_PARTNER
@@ -23545,7 +23311,7 @@ Move_BONE_RUSH:
blendoff
end
-Move_SPIKES:
+Move_SPIKES::
loadspritegfx ANIM_TAG_SPIKES
monbg ANIM_DEF_PARTNER
playsewithpan SE_M_JUMP_KICK, SOUND_PAN_ATTACKER
@@ -23562,7 +23328,7 @@ Move_SPIKES:
clearmonbg ANIM_DEF_PARTNER
end
-Move_MEGAHORN:
+Move_MEGAHORN::
loadspritegfx ANIM_TAG_HORN_HIT_2
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_DEF_PARTNER
@@ -23605,7 +23371,7 @@ MegahornInContest:
createvisualtask AnimTask_StartSlidingBg, 5, 2304, 768, 0, -1
goto MegahornContinue
-Move_GUST:
+Move_GUST::
loadspritegfx ANIM_TAG_GUST
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_DEF_PARTNER
@@ -23623,7 +23389,7 @@ Move_GUST:
blendoff
end
-Move_WING_ATTACK:
+Move_WING_ATTACK::
loadspritegfx ANIM_TAG_GUST
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_DEF_PARTNER
@@ -23647,7 +23413,7 @@ Move_WING_ATTACK:
blendoff
end
-Move_PECK:
+Move_PECK::
loadspritegfx ANIM_TAG_IMPACT
playsewithpan SE_M_HORN_ATTACK, SOUND_PAN_TARGET
createvisualtask AnimTask_RotateMonToSideAndRestore, 2, 3, -768, ANIM_TARGET, 2
@@ -23655,7 +23421,7 @@ Move_PECK:
waitforvisualfinish
end
-Move_AEROBLAST:
+Move_AEROBLAST::
loadspritegfx ANIM_TAG_AIR_WAVE_2
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_DEF_PARTNER
@@ -23696,7 +23462,7 @@ AeroblastBeam:
delay 3
return
-Move_WATER_GUN:
+Move_WATER_GUN::
loadspritegfx ANIM_TAG_SMALL_BUBBLES
loadspritegfx ANIM_TAG_WATER_IMPACT
monbg ANIM_DEF_PARTNER
@@ -23720,7 +23486,7 @@ Move_WATER_GUN:
blendoff
end
-Move_CRABHAMMER:
+Move_CRABHAMMER::
loadspritegfx ANIM_TAG_ICE_CRYSTALS
loadspritegfx ANIM_TAG_WATER_IMPACT
monbg ANIM_DEF_PARTNER
@@ -23757,14 +23523,14 @@ Move_CRABHAMMER:
blendoff
end
-Move_SURF:
+Move_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:
+Move_FLAMETHROWER::
loadspritegfx ANIM_TAG_SMALL_EMBER
monbg ANIM_DEF_PARTNER
splitbgprio ANIM_TARGET
@@ -23798,7 +23564,7 @@ FlamethrowerCreateFlames:
return
@ Also used by Sandstorm weather
-Move_SANDSTORM:
+Move_SANDSTORM::
loadspritegfx ANIM_TAG_FLYING_DIRT
playsewithpan SE_M_SANDSTORM, 0
createvisualtask AnimTask_LoadSandstormBackground, 5, FALSE
@@ -23818,7 +23584,7 @@ Move_SANDSTORM:
createsprite gFlyingSandCrescentSpriteTemplate, ANIM_ATTACKER, 40, 60, 2560, 96, 0
end
-Move_WHIRLPOOL:
+Move_WHIRLPOOL::
loadspritegfx ANIM_TAG_WATER_ORB
monbg ANIM_DEF_PARTNER
splitbgprio ANIM_TARGET
@@ -23851,7 +23617,7 @@ WhirlpoolEffect:
delay 2
return
-Move_FLY:
+Move_FLY::
loadspritegfx ANIM_TAG_ROUND_SHADOW
loadspritegfx ANIM_TAG_IMPACT
choosetwoturnanim FlySetUp, FlyUnleash
@@ -23878,7 +23644,7 @@ FlyUnleash:
blendoff
goto FlyEnd
-Move_BOUNCE:
+Move_BOUNCE::
loadspritegfx ANIM_TAG_ROUND_SHADOW
loadspritegfx ANIM_TAG_IMPACT
choosetwoturnanim BounceSetUp, BounceUnleash
@@ -23904,7 +23670,7 @@ BounceUnleash:
blendoff
goto BounceEnd
-Move_KARATE_CHOP:
+Move_KARATE_CHOP::
loadspritegfx ANIM_TAG_HANDS_AND_FEET
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_DEF_PARTNER
@@ -23921,7 +23687,7 @@ Move_KARATE_CHOP:
blendoff
end
-Move_CROSS_CHOP:
+Move_CROSS_CHOP::
loadspritegfx ANIM_TAG_HANDS_AND_FEET
loadspritegfx ANIM_TAG_CROSS_IMPACT
monbg ANIM_DEF_PARTNER
@@ -23939,7 +23705,7 @@ Move_CROSS_CHOP:
blendoff
end
-Move_JUMP_KICK:
+Move_JUMP_KICK::
loadspritegfx ANIM_TAG_HANDS_AND_FEET
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_DEF_PARTNER
@@ -23957,7 +23723,7 @@ Move_JUMP_KICK:
blendoff
end
-Move_HIGH_JUMP_KICK:
+Move_HIGH_JUMP_KICK::
loadspritegfx ANIM_TAG_HANDS_AND_FEET
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_DEF_PARTNER
@@ -23983,7 +23749,7 @@ Move_HIGH_JUMP_KICK:
blendoff
end
-Move_DOUBLE_KICK:
+Move_DOUBLE_KICK::
loadspritegfx ANIM_TAG_HANDS_AND_FEET
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_DEF_PARTNER
@@ -23996,7 +23762,7 @@ Move_DOUBLE_KICK:
blendoff
end
-Move_TRIPLE_KICK:
+Move_TRIPLE_KICK::
loadspritegfx ANIM_TAG_HANDS_AND_FEET
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_DEF_PARTNER
@@ -24029,7 +23795,7 @@ TripleKickCenter:
createvisualtask AnimTask_ShakeMon, 5, ANIM_TARGET, 6, 0, 8, 1
goto TripleKickContinue
-Move_DYNAMIC_PUNCH:
+Move_DYNAMIC_PUNCH::
loadspritegfx ANIM_TAG_HANDS_AND_FEET
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_EXPLOSION
@@ -24063,7 +23829,7 @@ Move_DYNAMIC_PUNCH:
blendoff
end
-Move_COUNTER:
+Move_COUNTER::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_HANDS_AND_FEET
monbg ANIM_DEF_PARTNER
@@ -24095,7 +23861,7 @@ Move_COUNTER:
blendoff
end
-Move_VITAL_THROW:
+Move_VITAL_THROW::
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_DEF_PARTNER
setalpha 12, 8
@@ -24118,7 +23884,7 @@ Move_VITAL_THROW:
blendoff
end
-Move_ROCK_SMASH:
+Move_ROCK_SMASH::
loadspritegfx ANIM_TAG_ROCKS
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_HANDS_AND_FEET
@@ -24145,7 +23911,7 @@ Move_ROCK_SMASH:
blendoff
end
-Move_SUBMISSION:
+Move_SUBMISSION::
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_DEF_PARTNER
setalpha 12, 8
@@ -24179,7 +23945,7 @@ SubmissionHit:
return
@ Also used by Sunny weather
-Move_SUNNY_DAY:
+Move_SUNNY_DAY::
loadspritegfx ANIM_TAG_SUNLIGHT
monbg ANIM_ATK_PARTNER
setalpha 13, 3
@@ -24202,7 +23968,7 @@ SunnyDayLightRay:
delay 6
return
-Move_COTTON_SPORE:
+Move_COTTON_SPORE::
loadspritegfx ANIM_TAG_SPORE
monbg ANIM_DEF_PARTNER
splitbgprio ANIM_TARGET
@@ -24223,7 +23989,7 @@ CreateCottonSpores:
delay 12
return
-Move_SPORE:
+Move_SPORE::
loadspritegfx ANIM_TAG_SPORE
monbg ANIM_DEF_PARTNER
setalpha 12, 8
@@ -24247,7 +24013,7 @@ CreateSpore:
delay 12
return
-Move_PETAL_DANCE:
+Move_PETAL_DANCE::
loadspritegfx ANIM_TAG_FLOWER
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_DEF_PARTNER
@@ -24285,7 +24051,7 @@ Move_PETAL_DANCE:
blendoff
end
-Move_RAZOR_LEAF:
+Move_RAZOR_LEAF::
loadspritegfx ANIM_TAG_LEAF
loadspritegfx ANIM_TAG_RAZOR_LEAF
loadspritegfx ANIM_TAG_IMPACT
@@ -24325,10 +24091,10 @@ Move_RAZOR_LEAF:
blendoff
end
-Move_NATURE_POWER:
+Move_NATURE_POWER::
@ No actual animation, uses the animation of a move from sNaturePowerMoves instead
-Move_ANCIENT_POWER:
+Move_ANCIENT_POWER::
loadspritegfx ANIM_TAG_ROCKS
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_DEF_PARTNER
@@ -24361,7 +24127,7 @@ Move_ANCIENT_POWER:
blendoff
end
-Move_OCTAZOOKA:
+Move_OCTAZOOKA::
loadspritegfx ANIM_TAG_GRAY_SMOKE
loadspritegfx ANIM_TAG_BLACK_BALL
playsewithpan SE_M_MEGA_KICK2, SOUND_PAN_ATTACKER
@@ -24378,7 +24144,7 @@ Move_OCTAZOOKA:
waitforvisualfinish
end
-Move_MIST:
+Move_MIST::
loadspritegfx ANIM_TAG_MIST_CLOUD
monbg ANIM_ATK_PARTNER
setalpha 12, 8
@@ -24402,7 +24168,7 @@ MistCloud:
delay 7
return
-Move_HAZE:
+Move_HAZE::
waitforvisualfinish
playsewithpan SE_M_HAZE, 0
createvisualtask AnimTask_HazeScrollingFog, 5
@@ -24412,7 +24178,7 @@ Move_HAZE:
createvisualtask AnimTask_BlendBattleAnimPal, 10, F_PAL_BATTLERS_2, 1, 16, 0, RGB_BLACK
end
-Move_FIRE_PUNCH:
+Move_FIRE_PUNCH::
loadspritegfx ANIM_TAG_HANDS_AND_FEET
loadspritegfx ANIM_TAG_SMALL_EMBER
loadspritegfx ANIM_TAG_IMPACT
@@ -24448,7 +24214,7 @@ FireSpreadEffect:
createsprite gFireSpreadSpriteTemplate, ANIM_TARGET, 1, 0, 10, 112, -128, 40
return
-Move_LEER:
+Move_LEER::
loadspritegfx ANIM_TAG_LEER
monbg ANIM_ATTACKER
splitbgprio ANIM_ATTACKER
@@ -24467,7 +24233,7 @@ Move_LEER:
waitforvisualfinish
end
-Move_DREAM_EATER:
+Move_DREAM_EATER::
loadspritegfx ANIM_TAG_ORBS
loadspritegfx ANIM_TAG_BLUE_STAR
monbg ANIM_DEF_PARTNER
@@ -24534,7 +24300,7 @@ DreamEaterAbsorb:
delay 4
return
-Move_POISON_GAS:
+Move_POISON_GAS::
loadspritegfx ANIM_TAG_PURPLE_GAS_CLOUD
loadspritegfx ANIM_TAG_POISON_BUBBLE
delay 0
@@ -24572,7 +24338,7 @@ Move_POISON_GAS:
delay 0
end
-Move_BIND:
+Move_BIND::
createvisualtask AnimTask_SwayMon, 5, 0, 6, 3328, 4, ANIM_ATTACKER
goto BindWrap
@@ -24587,11 +24353,11 @@ BindWrapSqueezeTarget:
delay 16
return
-Move_WRAP:
+Move_WRAP::
createvisualtask AnimTask_TranslateMonEllipticalRespectSide, 2, ANIM_ATTACKER, 6, 4, 2, 4
goto BindWrap
-Move_PSYBEAM:
+Move_PSYBEAM::
loadspritegfx ANIM_TAG_GOLD_RING
playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER
call SetPsychicBackground
@@ -24618,7 +24384,7 @@ PsybeamRings:
delay 4
return
-Move_HYPNOSIS:
+Move_HYPNOSIS::
loadspritegfx ANIM_TAG_GOLD_RING
call SetPsychicBackground
call HypnosisRings
@@ -24636,7 +24402,7 @@ HypnosisRings:
delay 6
return
-Move_PSYWAVE:
+Move_PSYWAVE::
loadspritegfx ANIM_TAG_BLUE_RING
playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER
call SetPsychicBackground
@@ -24660,7 +24426,7 @@ PsywaveRings:
delay 4
return
-Move_ZAP_CANNON:
+Move_ZAP_CANNON::
loadspritegfx ANIM_TAG_BLACK_BALL_2
loadspritegfx ANIM_TAG_SPARK_2
playsewithpan SE_M_THUNDER_WAVE, SOUND_PAN_ATTACKER
@@ -24681,7 +24447,7 @@ Move_ZAP_CANNON:
waitforvisualfinish
end
-Move_STEEL_WING:
+Move_STEEL_WING::
loadspritegfx ANIM_TAG_GUST
loadspritegfx ANIM_TAG_IMPACT
loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2
@@ -24708,7 +24474,7 @@ Move_STEEL_WING:
blendoff
end
-Move_IRON_TAIL:
+Move_IRON_TAIL::
loadspritegfx ANIM_TAG_IMPACT
loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2
createvisualtask AnimTask_MetallicShine, 5, 1, 0, RGB_BLACK
@@ -24727,7 +24493,7 @@ Move_IRON_TAIL:
waitforvisualfinish
end
-Move_POISON_TAIL:
+Move_POISON_TAIL::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_POISON_BUBBLE
loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2
@@ -24748,7 +24514,7 @@ Move_POISON_TAIL:
waitforvisualfinish
end
-Move_METAL_CLAW:
+Move_METAL_CLAW::
loadspritegfx ANIM_TAG_CLAW_SLASH
loopsewithpan SE_M_HARDEN, SOUND_PAN_ATTACKER, 28, 2
createvisualtask AnimTask_MetallicShine, 5, 0, 0, RGB_BLACK
@@ -24769,7 +24535,7 @@ Move_METAL_CLAW:
waitforvisualfinish
end
-Move_NIGHT_SHADE:
+Move_NIGHT_SHADE::
monbg ANIM_ATTACKER
splitbgprio ANIM_ATTACKER
playsewithpan SE_M_PSYBEAM, SOUND_PAN_ATTACKER
@@ -24788,7 +24554,7 @@ Move_NIGHT_SHADE:
waitbgfadein
end
-Move_EGG_BOMB:
+Move_EGG_BOMB::
loadspritegfx ANIM_TAG_EXPLOSION
loadspritegfx ANIM_TAG_LARGE_FRESH_EGG
playsewithpan SE_M_TAIL_WHIP, SOUND_PAN_ATTACKER
@@ -24813,7 +24579,7 @@ Move_EGG_BOMB:
waitforvisualfinish
end
-Move_SHADOW_BALL:
+Move_SHADOW_BALL::
loadspritegfx ANIM_TAG_SHADOW_BALL
fadetobg BG_GHOST
waitbgfadein
@@ -24828,7 +24594,7 @@ Move_SHADOW_BALL:
waitbgfadein
end
-Move_LICK:
+Move_LICK::
loadspritegfx ANIM_TAG_LICK
delay 15
playsewithpan SE_M_LICK, SOUND_PAN_TARGET
@@ -24837,7 +24603,7 @@ Move_LICK:
waitforvisualfinish
end
-Move_FOCUS_ENERGY:
+Move_FOCUS_ENERGY::
loadspritegfx ANIM_TAG_FOCUS_ENERGY
playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER
call EndureEffect
@@ -24850,7 +24616,7 @@ Move_FOCUS_ENERGY:
waitforvisualfinish
end
-Move_BIDE:
+Move_BIDE::
choosetwoturnanim BideSetUp, BideUnleash
end
BideSetUp:
@@ -24890,7 +24656,7 @@ BideUnleash:
blendoff
end
-Move_STRING_SHOT:
+Move_STRING_SHOT::
loadspritegfx ANIM_TAG_STRING
loadspritegfx ANIM_TAG_WEB_THREAD
monbg ANIM_DEF_PARTNER
@@ -24935,7 +24701,7 @@ StringShotThread:
delay 1
return
-Move_SPIDER_WEB:
+Move_SPIDER_WEB::
loadspritegfx ANIM_TAG_SPIDER_WEB
loadspritegfx ANIM_TAG_WEB_THREAD
monbg ANIM_DEF_PARTNER
@@ -24972,7 +24738,7 @@ SpiderWebThread:
delay 1
return
-Move_RAZOR_WIND:
+Move_RAZOR_WIND::
choosetwoturnanim RazorWindSetUp, RazorWindUnleash
RazorWindEnd:
waitforvisualfinish
@@ -25010,7 +24776,7 @@ RazorWindUnleash:
blendoff
goto RazorWindEnd
-Move_DISABLE:
+Move_DISABLE::
loadspritegfx ANIM_TAG_SPARKLE_4
monbg ANIM_TARGET
splitbgprio ANIM_TARGET
@@ -25026,7 +24792,7 @@ Move_DISABLE:
blendoff
end
-Move_RECOVER:
+Move_RECOVER::
loadspritegfx ANIM_TAG_ORBS
loadspritegfx ANIM_TAG_BLUE_STAR
monbg ANIM_ATK_PARTNER
@@ -25061,7 +24827,7 @@ RecoverAbsorbEffect:
delay 3
return
-Move_MIMIC:
+Move_MIMIC::
loadspritegfx ANIM_TAG_ORBS
setalpha 11, 5
monbg_static ANIM_DEF_PARTNER
@@ -25080,7 +24846,7 @@ Move_MIMIC:
blendoff
end
-Move_CONSTRICT:
+Move_CONSTRICT::
loadspritegfx ANIM_TAG_TENDRILS
loopsewithpan SE_M_SCRATCH, SOUND_PAN_TARGET, 6, 4
createsprite gConstrictBindingSpriteTemplate, ANIM_TARGET, 4, 0, 16, 0, 2
@@ -25097,7 +24863,7 @@ Move_CONSTRICT:
waitforvisualfinish
end
-Move_CURSE:
+Move_CURSE::
choosetwoturnanim CurseGhost, CurseStats
CurseGhost:
loadspritegfx ANIM_TAG_NAIL
@@ -25142,7 +24908,7 @@ CurseStats1:
createvisualtask AnimTask_BlendColorCycle, 5, F_PAL_ATTACKER, 4, 2, 0, 10, RGB_RED
return
-Move_SOFT_BOILED:
+Move_SOFT_BOILED::
loadspritegfx ANIM_TAG_BREAKING_EGG
loadspritegfx ANIM_TAG_THIN_RING
loadspritegfx ANIM_TAG_BLUE_STAR
@@ -25165,7 +24931,7 @@ Move_SOFT_BOILED:
call HealingEffect2
end
-Move_HEAL_BELL:
+Move_HEAL_BELL::
loadspritegfx ANIM_TAG_BELL
loadspritegfx ANIM_TAG_MUSIC_NOTES_2
loadspritegfx ANIM_TAG_THIN_RING
@@ -25217,7 +24983,7 @@ HealBellRing:
playsewithpan SE_M_HEAL_BELL, SOUND_PAN_ATTACKER
return
-Move_FAKE_OUT:
+Move_FAKE_OUT::
playsewithpan SE_M_FLATTER, 0
createvisualtask AnimTask_FakeOut, 5
waitforvisualfinish
@@ -25228,7 +24994,7 @@ Move_FAKE_OUT:
createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 16, 0, RGB_WHITE
end
-Move_SCARY_FACE:
+Move_SCARY_FACE::
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
@@ -25246,7 +25012,7 @@ Move_SCARY_FACE:
waitforvisualfinish
end
-Move_SWEET_KISS:
+Move_SWEET_KISS::
loadspritegfx ANIM_TAG_RED_HEART
loadspritegfx ANIM_TAG_ANGEL
createsprite gAngelSpriteTemplate, ANIM_TARGET, 2, 16, -48
@@ -25265,7 +25031,7 @@ Move_SWEET_KISS:
createsprite gRedHeartBurstSpriteTemplate, ANIM_TARGET, 3, -384, -31
end
-Move_LOVELY_KISS:
+Move_LOVELY_KISS::
loadspritegfx ANIM_TAG_PINK_HEART
loadspritegfx ANIM_TAG_DEVIL
createsprite gDevilSpriteTemplate, ANIM_TARGET, 2, 0, -24
@@ -25278,7 +25044,7 @@ Move_LOVELY_KISS:
createsprite gPinkHeartSpriteTemplate, ANIM_TARGET, 3, -128, -22
end
-Move_FURY_SWIPES:
+Move_FURY_SWIPES::
loadspritegfx ANIM_TAG_SWIPE
createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 5, 5
delay 4
@@ -25293,7 +25059,7 @@ Move_FURY_SWIPES:
createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 4, 0, 7, 1
end
-Move_INGRAIN:
+Move_INGRAIN::
loadspritegfx ANIM_TAG_ROOTS
loadspritegfx ANIM_TAG_ORBS
createsprite gIngrainRootSpriteTemplate, ANIM_ATTACKER, 2, 16, 26, -1, 2, 150
@@ -25323,7 +25089,7 @@ Move_INGRAIN:
waitforvisualfinish
end
-Move_PRESENT:
+Move_PRESENT::
loadspritegfx ANIM_TAG_ITEM_BAG
createvisualtask AnimTask_IsHealingMove, 2
createsprite gPresentSpriteTemplate, ANIM_TARGET, 2, 0, -5, 10, 2, -1
@@ -25383,14 +25149,14 @@ PresentHeal:
call HealingEffect2
end
-Move_BATON_PASS:
+Move_BATON_PASS::
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:
+Move_PERISH_SONG::
loadspritegfx ANIM_TAG_MUSIC_NOTES_2
createsprite gPerishSongMusicNoteSpriteTemplate, ANIM_ATTACKER, 4, 0, 0, 0
createsprite gPerishSongMusicNoteSpriteTemplate, ANIM_ATTACKER, 4, 1, 1, 16
@@ -25426,7 +25192,7 @@ Move_PERISH_SONG:
waitforvisualfinish
end
-Move_SLEEP_TALK:
+Move_SLEEP_TALK::
loadspritegfx ANIM_TAG_LETTER_Z
createvisualtask AnimTask_SwayMon, 5, 0, 4, 4096, 2, ANIM_ATTACKER
delay 20
@@ -25453,7 +25219,7 @@ Move_SLEEP_TALK:
waitforvisualfinish
end
-Move_HYPER_FANG:
+Move_HYPER_FANG::
loadspritegfx ANIM_TAG_FANG_ATTACK
playsewithpan SE_M_BITE, SOUND_PAN_TARGET
delay 1
@@ -25484,7 +25250,7 @@ HyperFangInContest:
fadetobg BG_IMPACT_CONTESTS
goto HyperFangContinue
-Move_TRI_ATTACK:
+Move_TRI_ATTACK::
loadspritegfx ANIM_TAG_TRI_ATTACK_TRIANGLE
createsprite gTriAttackTriangleSpriteTemplate, ANIM_TARGET, 2, 16, 0
playsewithpan SE_M_TRI_ATTACK, SOUND_PAN_ATTACKER
@@ -25533,7 +25299,7 @@ Move_TRI_ATTACK:
waitforvisualfinish
end
-Move_WILL_O_WISP:
+Move_WILL_O_WISP::
loadspritegfx ANIM_TAG_WISP_FIRE
loadspritegfx ANIM_TAG_WISP_ORB
monbg ANIM_DEF_PARTNER
@@ -25564,7 +25330,7 @@ Move_WILL_O_WISP:
clearmonbg ANIM_DEF_PARTNER
end
-Move_ENCORE:
+Move_ENCORE::
loadspritegfx ANIM_TAG_SPOTLIGHT
loadspritegfx ANIM_TAG_TAG_HAND
createvisualtask AnimTask_CreateSpotlight, 2
@@ -25584,7 +25350,7 @@ Move_ENCORE:
createvisualtask AnimTask_RemoveSpotlight, 2
end
-Move_TRICK:
+Move_TRICK::
loadspritegfx ANIM_TAG_ITEM_BAG
loadspritegfx ANIM_TAG_SPEED_DUST
createsprite gTrickBagSpriteTemplate, ANIM_ATTACKER, 2, -40, 80
@@ -25612,7 +25378,7 @@ Move_TRICK:
waitforvisualfinish
end
-Move_WISH:
+Move_WISH::
loadspritegfx ANIM_TAG_GOLD_STARS
loadspritegfx ANIM_TAG_SPARKLE_2
createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 0, 10, RGB_BLACK
@@ -25628,7 +25394,7 @@ Move_WISH:
waitforvisualfinish
end
-Move_STOCKPILE:
+Move_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
@@ -25657,7 +25423,7 @@ StockpileAbsorb:
delay 1
return
-Move_SPIT_UP:
+Move_SPIT_UP::
loadspritegfx ANIM_TAG_RED_ORB_2
loadspritegfx ANIM_TAG_IMPACT
playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER
@@ -25704,7 +25470,7 @@ SpitUpStrongest:
createsprite gSpitUpOrbSpriteTemplate, ANIM_ATTACKER, 2, 240
goto SpitUpContinue
-Move_SWALLOW:
+Move_SWALLOW::
loadspritegfx ANIM_TAG_BLUE_ORB
loadspritegfx ANIM_TAG_BLUE_STAR
playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER
@@ -25740,7 +25506,7 @@ SwallowBest:
call SwallowEffect
goto SwallowContinue
-Move_TRANSFORM:
+Move_TRANSFORM::
monbg ANIM_ATTACKER
playsewithpan SE_M_TELEPORT, SOUND_PAN_ATTACKER
waitplaysewithpan SE_M_MINIMIZE, SOUND_PAN_ATTACKER, 48
@@ -25749,7 +25515,7 @@ Move_TRANSFORM:
clearmonbg ANIM_ATTACKER
end
-Move_MORNING_SUN:
+Move_MORNING_SUN::
loadspritegfx ANIM_TAG_GREEN_STAR
loadspritegfx ANIM_TAG_BLUE_STAR
createvisualtask AnimTask_MorningSunLightBeam, 5
@@ -25781,7 +25547,7 @@ MorningSunStar:
delay 5
return
-Move_SWEET_SCENT:
+Move_SWEET_SCENT::
loadspritegfx ANIM_TAG_PINK_PETAL
playsewithpan SE_M_SWEET_SCENT, SOUND_PAN_ATTACKER
createsprite gSweetScentPetalSpriteTemplate, ANIM_ATTACKER, 2, 100, 0, 100
@@ -25819,7 +25585,7 @@ SweetScentEffect:
delay 2
return
-Move_HYPER_BEAM:
+Move_HYPER_BEAM::
loadspritegfx ANIM_TAG_ORBS
createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 4, 0, 16, RGB_BLACK
waitforvisualfinish
@@ -25869,7 +25635,7 @@ HyperBeamOrbs:
delay 1
return
-Move_FLATTER:
+Move_FLATTER::
loadspritegfx ANIM_TAG_SPOTLIGHT
loadspritegfx ANIM_TAG_CONFETTI
createvisualtask SoundTask_PlaySE2WithPanning, 5, SE_M_ENCORE2, SOUND_PAN_TARGET
@@ -25914,7 +25680,7 @@ CreateFlatterConfetti:
createsprite gFlatterConfettiSpriteTemplate, ANIM_ATTACKER, 40, ANIM_TARGET
return
-Move_ROLE_PLAY:
+Move_ROLE_PLAY::
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
@@ -25929,7 +25695,7 @@ Move_ROLE_PLAY:
createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 2, 10, 0, RGB_BLACK
end
-Move_REFRESH:
+Move_REFRESH::
loadspritegfx ANIM_TAG_THIN_RING
loadspritegfx ANIM_TAG_SPARKLE_2
playsewithpan SE_M_STAT_INCREASE, SOUND_PAN_ATTACKER
@@ -25943,7 +25709,7 @@ Move_REFRESH:
createsprite gThinRingExpandingSpriteTemplate, ANIM_ATTACKER, 3, 0, 0, 0, 0
end
-Move_BLAZE_KICK:
+Move_BLAZE_KICK::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_HANDS_AND_FEET
loadspritegfx ANIM_TAG_SMALL_EMBER
@@ -25964,7 +25730,7 @@ Move_BLAZE_KICK:
blendoff
end
-Move_HYPER_VOICE:
+Move_HYPER_VOICE::
loadspritegfx ANIM_TAG_THIN_RING
createvisualtask SoundTask_PlayCryWithEcho, 5, FALSE
call HyperVoiceEffect
@@ -25985,7 +25751,7 @@ HyperVoiceEffect:
createvisualtask SoundTask_WaitForCry, 5
return
-Move_SAND_TOMB:
+Move_SAND_TOMB::
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
@@ -26013,7 +25779,7 @@ SandTombSwirlingDirt:
delay 2
return
-Move_SHEER_COLD:
+Move_SHEER_COLD::
fadetobg BG_ICE
waitbgfadeout
playsewithpan SE_M_ICY_WIND, 0
@@ -26031,7 +25797,7 @@ Move_SHEER_COLD:
waitbgfadein
end
-Move_ARM_THRUST:
+Move_ARM_THRUST::
loadspritegfx ANIM_TAG_HANDS_AND_FEET
loadspritegfx ANIM_TAG_IMPACT
splitbgprio ANIM_TARGET
@@ -26058,13 +25824,13 @@ ArmThrustLeft:
createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 2, -8, 0, ANIM_TARGET, 2
goto ArmThrustContinue
-Move_MUDDY_WATER:
+Move_MUDDY_WATER::
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:
+Move_BULLET_SEED::
loadspritegfx ANIM_TAG_SEED
createsprite gBulletSeedSpriteTemplate, ANIM_TARGET, 2, 20, 0
delay 5
@@ -26089,7 +25855,7 @@ Move_BULLET_SEED:
waitforvisualfinish
end
-Move_DRAGON_CLAW:
+Move_DRAGON_CLAW::
loadspritegfx ANIM_TAG_SMALL_EMBER
loadspritegfx ANIM_TAG_CLAW_SLASH
playsewithpan SE_M_SACRED_FIRE2, SOUND_PAN_ATTACKER
@@ -26149,7 +25915,7 @@ DragonClawFireSpiral:
return
end
-Move_MUD_SHOT:
+Move_MUD_SHOT::
loadspritegfx ANIM_TAG_BROWN_ORB
monbg ANIM_DEF_PARTNER
splitbgprio ANIM_TARGET
@@ -26181,7 +25947,7 @@ MudShotOrbs:
delay 2
return
-Move_METEOR_MASH:
+Move_METEOR_MASH::
loadspritegfx ANIM_TAG_GOLD_STARS
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_HANDS_AND_FEET
@@ -26206,7 +25972,7 @@ Move_METEOR_MASH:
waitforvisualfinish
end
-Move_REVENGE:
+Move_REVENGE::
loadspritegfx ANIM_TAG_PURPLE_SCRATCH
monbg ANIM_TARGET
setalpha 12, 8
@@ -26235,7 +26001,7 @@ Move_REVENGE:
blendoff
end
-Move_POISON_FANG:
+Move_POISON_FANG::
loadspritegfx ANIM_TAG_FANG_ATTACK
loadspritegfx ANIM_TAG_POISON_BUBBLE
playsewithpan SE_M_BITE, SOUND_PAN_TARGET
@@ -26248,12 +26014,12 @@ Move_POISON_FANG:
waitforvisualfinish
end
-Move_SUBSTITUTE:
+Move_SUBSTITUTE::
playsewithpan SE_M_ATTRACT, SOUND_PAN_ATTACKER
createvisualtask AnimTask_MonToSubstitute, 2
end
-Move_FRENZY_PLANT:
+Move_FRENZY_PLANT::
loadspritegfx ANIM_TAG_ROOTS
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_TARGET
@@ -26313,7 +26079,7 @@ Move_FRENZY_PLANT:
blendoff
end
-Move_METAL_SOUND:
+Move_METAL_SOUND::
loadspritegfx ANIM_TAG_METAL_SOUND_WAVES
monbg ANIM_DEF_PARTNER
splitbgprio_foes ANIM_TARGET
@@ -26333,7 +26099,7 @@ MetalSoundRings:
delay 2
return
-Move_FOCUS_PUNCH:
+Move_FOCUS_PUNCH::
goto FocusPunch
FocusPunchEnd:
waitforvisualfinish
@@ -26381,7 +26147,7 @@ FocusPunchInContest:
fadetobg BG_IMPACT_CONTESTS
goto FocusPunchContinue
-Move_RETURN:
+Move_RETURN::
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_DEF_PARTNER
setalpha 12, 8
@@ -26518,7 +26284,7 @@ ReturnStrongestHit:
waitforvisualfinish
return
-Move_COSMIC_POWER:
+Move_COSMIC_POWER::
loadspritegfx ANIM_TAG_SPARKLE_2
createvisualtask SoundTask_PlaySE2WithPanning, 5, SE_M_COSMIC_POWER, 0
playsewithpan SE_M_COSMIC_POWER, 0
@@ -26543,7 +26309,7 @@ Move_COSMIC_POWER:
waitforvisualfinish
end
-Move_BLAST_BURN:
+Move_BLAST_BURN::
loadspritegfx ANIM_TAG_FIRE_PLUME
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_DEF_PARTNER
@@ -26588,7 +26354,7 @@ Move_BLAST_BURN:
blendoff
end
-Move_ROCK_TOMB:
+Move_ROCK_TOMB::
loadspritegfx ANIM_TAG_X_SIGN
loadspritegfx ANIM_TAG_ROCKS
createvisualtask AnimTask_ShakeBattleTerrain, 2, 2, 0, 10, 1
@@ -26646,7 +26412,7 @@ UnsetBugBg:
waitbgfadein
return
-Move_SILVER_WIND:
+Move_SILVER_WIND::
loadspritegfx ANIM_TAG_SPARKLE_6
panse SE_M_GUST, SOUND_PAN_ATTACKER, SOUND_PAN_TARGET, +2, 0
playsewithpan SE_M_MORNING_SUN, 0
@@ -26685,12 +26451,12 @@ Move_SILVER_WIND:
call UnsetBugBg
end
-Move_SNATCH:
+Move_SNATCH::
playsewithpan SE_M_TAKE_DOWN, SOUND_PAN_ATTACKER
createvisualtask AnimTask_WindUpLunge, 5, ANIM_ATTACKER, -12, 4, 10, 10, 12, 6
end
-Move_DIVE:
+Move_DIVE::
loadspritegfx ANIM_TAG_SPLASH
loadspritegfx ANIM_TAG_SWEAT_BEAD
choosetwoturnanim DiveSetUp, DiveAttack
@@ -26735,7 +26501,7 @@ DiveAttackWaterDroplets:
createsprite gSprayWaterDropletSpriteTemplate, ANIM_TARGET, 5, 1, 1
return
-Move_ROCK_BLAST:
+Move_ROCK_BLAST::
loadspritegfx ANIM_TAG_ROCKS
loadspritegfx ANIM_TAG_IMPACT
createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 6
@@ -26753,7 +26519,7 @@ Move_ROCK_BLAST:
waitforvisualfinish
end
-Move_OVERHEAT:
+Move_OVERHEAT::
loadspritegfx ANIM_TAG_SMALL_EMBER
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_DEF_PARTNER
@@ -26834,7 +26600,7 @@ Move_OVERHEAT:
waitforvisualfinish
end
-Move_HYDRO_CANNON:
+Move_HYDRO_CANNON::
loadspritegfx ANIM_TAG_WATER_ORB
loadspritegfx ANIM_TAG_WATER_IMPACT
monbg ANIM_DEF_PARTNER
@@ -26876,7 +26642,7 @@ HydroCannonBeam:
createsprite gHydroCannonBeamSpriteTemplate, ANIM_TARGET, 2, 10, -10, 0, 0, 15, 257
return
-Move_ASTONISH:
+Move_ASTONISH::
loadspritegfx ANIM_TAG_SWEAT_BEAD
playsewithpan SE_M_ENCORE, SOUND_PAN_ATTACKER
createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 6
@@ -26889,7 +26655,7 @@ Move_ASTONISH:
waitforvisualfinish
end
-Move_SEISMIC_TOSS:
+Move_SEISMIC_TOSS::
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_ROCKS
setarg 7, 0
@@ -26956,7 +26722,7 @@ SeismicTossRockScatter2:
createsprite gRockScatterSpriteTemplate, ANIM_TARGET, 2, 12, 30, 4, 3
return
-Move_MAGIC_COAT:
+Move_MAGIC_COAT::
loadspritegfx ANIM_TAG_ORANGE_LIGHT_WALL
setalpha 0, 16
waitplaysewithpan SE_M_BARRIER, SOUND_PAN_ATTACKER, 15
@@ -26966,7 +26732,7 @@ Move_MAGIC_COAT:
blendoff
end
-Move_WATER_PULSE:
+Move_WATER_PULSE::
loadspritegfx ANIM_TAG_SMALL_BUBBLES
loadspritegfx ANIM_TAG_BLUE_RING_2
monbg ANIM_TARGET
@@ -26997,7 +26763,7 @@ Move_WATER_PULSE:
clearmonbg ANIM_DEF_PARTNER
end
-Move_PSYCHO_BOOST:
+Move_PSYCHO_BOOST::
loadspritegfx ANIM_TAG_CIRCLE_OF_LIGHT
monbg ANIM_ATK_PARTNER
fadetobg BG_PSYCHIC
@@ -27024,7 +26790,7 @@ Move_PSYCHO_BOOST:
call UnsetPsychicBg
end
-Move_KNOCK_OFF:
+Move_KNOCK_OFF::
loadspritegfx ANIM_TAG_SLAM_HIT_2
loadspritegfx ANIM_TAG_IMPACT
createsprite gHorizontalLungeSpriteTemplate, ANIM_ATTACKER, 2, 4, 6
@@ -27045,7 +26811,7 @@ Move_KNOCK_OFF:
waitforvisualfinish
end
-Move_DOOM_DESIRE:
+Move_DOOM_DESIRE::
createvisualtask GetIsDoomDesireHitTurn, 2
delay 1
monbg ANIM_ATK_PARTNER
@@ -27064,7 +26830,7 @@ Move_DOOM_DESIRE:
blendoff
end
-Move_SKY_UPPERCUT:
+Move_SKY_UPPERCUT::
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_DEF_PARTNER
splitbgprio ANIM_TARGET
@@ -27108,7 +26874,7 @@ Move_SKY_UPPERCUT:
waitbgfadein
end
-Move_SECRET_POWER:
+Move_SECRET_POWER::
createvisualtask AnimTask_GetFieldTerrain, 5
jumpargeq 0, STATUS_FIELD_MISTY_TERRAIN, Move_FAIRY_WIND
jumpargeq 0, STATUS_FIELD_GRASSY_TERRAIN, Move_NEEDLE_ARM
@@ -27153,7 +26919,7 @@ Move_SECRET_POWER:
goto Move_SLAM
.endif
-Move_TWISTER:
+Move_TWISTER::
loadspritegfx ANIM_TAG_LEAF
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_ROCKS
@@ -27199,7 +26965,7 @@ Move_TWISTER:
blendoff
end
-Move_MAGICAL_LEAF:
+Move_MAGICAL_LEAF::
loadspritegfx ANIM_TAG_LEAF
loadspritegfx ANIM_TAG_RAZOR_LEAF
loadspritegfx ANIM_TAG_IMPACT
@@ -27243,7 +27009,7 @@ Move_MAGICAL_LEAF:
blendoff
end
-Move_ICE_BALL:
+Move_ICE_BALL::
loadspritegfx ANIM_TAG_ICE_CHUNK
loadspritegfx ANIM_TAG_ICE_CRYSTALS
createvisualtask AnimTask_GetIceBallCounter, 5, 0
@@ -27333,7 +27099,7 @@ IceBallImpactShard:
createsprite gIceBallImpactShardSpriteTemplate, ANIM_TARGET, 4, -12, -16
return
-Move_WEATHER_BALL:
+Move_WEATHER_BALL::
loadspritegfx ANIM_TAG_WEATHER_BALL
createsprite gVerticalDipSpriteTemplate, ANIM_ATTACKER, 2, 8, 1, ANIM_ATTACKER
delay 8
@@ -27352,6 +27118,7 @@ Move_WEATHER_BALL:
jumpreteq ANIM_WEATHER_SANDSTORM, WeatherBallSandstorm
jumpreteq ANIM_WEATHER_HAIL, WeatherBallIce
jumpreteq ANIM_WEATHER_SNOW, WeatherBallIce
+ jumpreteq ANIM_WEATHER_FOG, WeatherBallNormal
WeatherBallNormal:
loadspritegfx ANIM_TAG_IMPACT
createsprite gWeatherBallNormalDownSpriteTemplate, ANIM_TARGET, 2, -30, -100, 25, 1, 0, 0
@@ -27428,75 +27195,7 @@ WeatherBallIce:
waitforvisualfinish
end
-Move_SYLPH_SONG:
- loadspritegfx ANIM_TAG_PINK_CLOUD
- loadspritegfx ANIM_TAG_JAGGED_MUSIC_NOTE
- loadspritegfx ANIM_TAG_THIN_RING
- loadspritegfx ANIM_TAG_MUSIC_NOTES
- loadspritegfx ANIM_TAG_IMPACT
- monbg ANIM_DEF_PARTNER
- setalpha 12, 8
- createvisualtask AnimTask_MusicNotesRainbowBlend, 0x2
- waitforvisualfinish
- createvisualtask SoundTask_PlayCryWithEcho, 2, FALSE
- createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x0, 0x8, 0x6e7d
- createsprite gFairyWindCloudTemplate, ANIM_TARGET, 3, 0x14, 0xfff6, 0x14, 0x0, 0x16, 0x14, 0x1
- createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0xffe3, 0x1
- delay 0x5
- waitforvisualfinish
- playsewithpan SE_M_GUST, SOUND_PAN_TARGET
- createvisualtask AnimTask_ShakeMon2, 2, ANIM_TARGET, 2, 0, 18, 1
- delay 0x5
- createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0xffe3, 0x1
- createsprite gFairyWindCloudTemplate, ANIM_TARGET, 3, 0x14, 0xfff6, 0x14, 0x0, 0x16, 0xffec, 0x1
- createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x8
- delay 0x5
- createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0xffe3, 0x1
- createsprite gFairyWindCloudTemplate, ANIM_TARGET, 3, 0x14, 0xfff6, 0x14, 0x0, 0x16, 0xc, 0x1
- createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x8
- delay 0x5
- playsewithpan SE_M_GUST2, SOUND_PAN_TARGET
- createvisualtask AnimTask_BlendBattleAnimPal, 0xa, F_PAL_BG, 0x1, 0x8, 0x0, 0x6e7d
- waitforvisualfinish
- createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0xffe3, 0x1
- createsprite gFairyWindCloudTemplate, ANIM_TARGET, 3, 0x14, 0xfff6, 0x14, 0x0, 0x16, 0xffec, 0x1
- createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1d, 0xfff4, 0x0
- createsprite gFairyWindCloudTemplate, ANIM_TARGET, 3, 0x14, 0xfff6, 0x14, 0x0, 0x16, 0xffec, 0x1
- createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0xffe3, 0x1
- createsprite gFairyWindCloudTemplate, ANIM_TARGET, 3, 0x14, 0xfff6, 0x14, 0x0, 0x16, 0xffec, 0x1
- createsprite gWavyMusicNotesSpriteTemplate, ANIM_TARGET, 2, 0x7, 0x0, 0xc
- createsprite gFairyWindCloudTemplate, ANIM_TARGET, 3, 0x14, 0xfff6, 0x14, 0x0, 0x16, 0xffec, 0x1
- createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0xffe3, 0x1
- createsprite gUproarRingSpriteTemplate, ANIM_ATTACKER, 3, 0x0, 0x0, 0x0, 0x0, 0x1f, 0x8
- createsprite gFairyWindCloudTemplate, ANIM_TARGET, 3, 0x14, 0xfff6, 0x14, 0x0, 0x16, 0xffec, 0x1
- createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0x1d, 0xfff4, 0x0
- createsprite gFairyWindCloudTemplate, ANIM_TARGET, 3, 0x14, 0xfff6, 0x14, 0x0, 0x16, 0xffec, 0x1
- createsprite gJaggedMusicNoteSpriteTemplate, ANIM_ATTACKER, 2, 0x0, 0xfff4, 0xffe3, 0x1
- delay 0x5
- waitforvisualfinish
- stopsound
- createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0xffe0, 0xfff0, 0x1, 0x3
- playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
- createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_TARGET, 3, 0, 12, 1
- createvisualtask AnimTask_ShakeMonInPlace, 2, ANIM_DEF_PARTNER, 3, 0, 12, 1
- delay 0x5
- createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x1, 0x3
- playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
- delay 0x5
- createsprite gRandomPosHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x1, 0x3
- playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
- delay 0x5
- createsprite gBasicHitSplatSpriteTemplate, ANIM_TARGET, 3, 0x20, 0x14, 0x1, 0x3
- playsewithpan SE_M_COMET_PUNCH, SOUND_PAN_TARGET
- waitforvisualfinish
- clearmonbg ANIM_DEF_PARTNER
- createvisualtask AnimTask_MusicNotesClearRainbowBlend, 0x2
- waitforvisualfinish
- clearmonbg ANIM_DEF_PARTNER
- blendoff
- end
-
-Move_COUNT:
+Move_COUNT::
loadspritegfx ANIM_TAG_IMPACT
monbg ANIM_TARGET
setalpha 12, 8
@@ -28166,6 +27865,9 @@ General_Hail:
General_Snow:
goto Move_SNOWSCAPE
+General_Fog:
+ goto Move_HAZE
+
General_LeechSeedDrain:
createvisualtask AnimTask_GetBattlersFromArg, 5
delay 0
@@ -28314,6 +28016,12 @@ General_WishHeal:
createsprite gSimplePaletteBlendSpriteTemplate, ANIM_ATTACKER, 2, F_PAL_BG, 3, 10, 0, RGB_BLACK
end
+General_SimpleHeal:
+ loadspritegfx ANIM_TAG_BLUE_STAR
+ call HealingEffect
+ waitforvisualfinish
+ end
+
General_IllusionOff:
monbg ANIM_TARGET
createvisualtask AnimTask_TransformMon, 2, 1, 0
@@ -28380,6 +28088,53 @@ MegaEvolutionParticles:
delay 3
return
+General_TeraCharge:
+ loadspritegfx ANIM_TAG_TERA_CRYSTAL
+ loadspritegfx ANIM_TAG_TERA_SHATTER
+ loadspritegfx ANIM_TAG_FOCUS_ENERGY
+ loadspritegfx ANIM_TAG_WHIP_HIT @green color
+ loadspritegfx ANIM_TAG_SWEAT_BEAD @blue color
+ loadspritegfx ANIM_TAG_PAW_PRINT @yellow color
+ monbg ANIM_ATTACKER
+ setalpha 12, 8
+ playsewithpan SE_M_DRAGON_RAGE, SOUND_PAN_ATTACKER
+ createvisualtask AnimTask_BlendColorCycle, 2, F_PAL_ATTACKER, 0, 6, 0, 11, RGB_RED
+ call RainbowEndureEffect
+ call RainbowEndureEffect
+ call RainbowEndureEffect
+ call RainbowEndureEffect
+ call RainbowEndureEffect
+ waitforvisualfinish
+ playsewithpan SE_M_SOLAR_BEAM, SOUND_PAN_ATTACKER
+ createsprite gTeraCrystalSpriteTemplate, ANIM_ATTACKER, 41, 0, 0, 0, 0
+ delay 20
+ createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 0, 16, RGB_WHITEALPHA
+ waitforvisualfinish
+ createvisualtask AnimTask_TransformMon, 2, 1, 0
+ call TeraChargeParticles
+ playsewithpan SE_M_BRICK_BREAK, SOUND_PAN_ATTACKER
+ clearmonbg ANIM_ATK_PARTNER
+ blendoff
+ end
+
+TeraChargeParticles:
+ createsprite gTeraCrystalSpreadSpriteTemplate, ANIM_TARGET, 0, 0, -5, 8
+ createsprite gTeraCrystalSpreadSpriteTemplate, ANIM_TARGET, 0, 1, 5, 9
+ createsprite gTeraCrystalSpreadSpriteTemplate, ANIM_TARGET, 0, 2, 5, -8
+ createsprite gTeraCrystalSpreadSpriteTemplate, ANIM_TARGET, 0, 2, -5, -8
+ createsprite gTeraCrystalSpreadSpriteTemplate, ANIM_TARGET, 0, 1, -10, 0
+ createsprite gTeraCrystalSpreadSpriteTemplate, ANIM_TARGET, 0, 0, 10, 0
+ return
+
+General_TeraActivate:
+ createvisualtask AnimTask_BlendBattleAnimPalExclude, 5, 5, 2, 16, 0, RGB_WHITEALPHA
+ createvisualtask AnimTask_HorizontalShake, 5, ANIM_TARGET, 5, 14
+ waitforvisualfinish
+ createvisualtask SoundTask_PlayNormalCry, 0
+ clearmonbg ANIM_ATK_PARTNER
+ blendoff
+ end
+
General_RestoreBg:
restorebg
waitbgfadein
@@ -28839,7 +28594,7 @@ Move_BREAKNECK_BLITZ::
end
-Move_ALL_OUT_PUMMELING:
+Move_ALL_OUT_PUMMELING::
loadspritegfx ANIM_TAG_HANDS_AND_FEET
loadspritegfx ANIM_TAG_IMPACT
loadspritegfx ANIM_TAG_METEOR
@@ -28929,7 +28684,7 @@ Move_ALL_OUT_PUMMELING:
end
-Move_SUPERSONIC_SKYSTRIKE:
+Move_SUPERSONIC_SKYSTRIKE::
loadspritegfx ANIM_TAG_ROUND_SHADOW @ fly
loadspritegfx ANIM_TAG_MUD_SAND @ dig
loadspritegfx ANIM_TAG_FOCUS_ENERGY @ focus energy
@@ -29002,7 +28757,7 @@ FinishSupersonicSkystrike:
end
-Move_ACID_DOWNPOUR:
+Move_ACID_DOWNPOUR::
loadspritegfx ANIM_TAG_BLUE_ORB @ reversal
loadspritegfx ANIM_TAG_POISON_JAB @ poison jab
loadspritegfx ANIM_TAG_POISON_BUBBLE @ poison bubbles
@@ -29088,7 +28843,7 @@ AcidDownpourFlareOnAttacker:
return
-Move_TECTONIC_RAGE:
+Move_TECTONIC_RAGE::
loadspritegfx ANIM_TAG_DIRT_MOUND @ dig
loadspritegfx ANIM_TAG_MUD_SAND @ rollout small rocks
loadspritegfx ANIM_TAG_ROCKS @ rollout
@@ -34396,163 +34151,163 @@ General_SetWeather::
jumpreteq 4, General_Hail
end
-Move_MAX_GUARD:
+Move_MAX_GUARD::
createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1
waitforvisualfinish
goto Move_PROTECT
end
-Move_MAX_STRIKE:
-Move_G_MAX_REPLENISH:
+Move_MAX_STRIKE::
+Move_G_MAX_REPLENISH::
createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1
waitforvisualfinish
goto Move_GIGA_IMPACT
end
-Move_MAX_AIRSTREAM:
-Move_G_MAX_WIND_RAGE:
+Move_MAX_AIRSTREAM::
+Move_G_MAX_WIND_RAGE::
createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1
waitforvisualfinish
goto Move_AEROBLAST
end
-Move_MAX_OOZE:
-Move_G_MAX_MALODOR:
+Move_MAX_OOZE::
+Move_G_MAX_MALODOR::
createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1
waitforvisualfinish
goto Move_GUNK_SHOT
end
-Move_G_MAX_WILDFIRE:
-Move_G_MAX_FIREBALL:
-Move_G_MAX_CENTIFERNO:
-Move_MAX_FLARE:
+Move_G_MAX_WILDFIRE::
+Move_G_MAX_FIREBALL::
+Move_G_MAX_CENTIFERNO::
+Move_MAX_FLARE::
createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1
waitforvisualfinish
goto Move_BLAST_BURN
end
-Move_G_MAX_CANNONADE:
-Move_G_MAX_HYDROSNIPE:
-Move_G_MAX_FOAM_BURST:
-Move_MAX_GEYSER:
+Move_G_MAX_CANNONADE::
+Move_G_MAX_HYDROSNIPE::
+Move_G_MAX_FOAM_BURST::
+Move_MAX_GEYSER::
createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1
waitforvisualfinish
goto Move_HYDRO_CANNON
end
-Move_G_MAX_VINE_LASH:
-Move_G_MAX_DRUM_SOLO:
-Move_G_MAX_TARTNESS:
-Move_G_MAX_SWEETNESS:
-Move_MAX_OVERGROWTH:
+Move_G_MAX_VINE_LASH::
+Move_G_MAX_DRUM_SOLO::
+Move_G_MAX_TARTNESS::
+Move_G_MAX_SWEETNESS::
+Move_MAX_OVERGROWTH::
createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1
waitforvisualfinish
goto Move_FRENZY_PLANT
end
-Move_MAX_LIGHTNING:
-Move_G_MAX_STUN_SHOCK:
+Move_MAX_LIGHTNING::
+Move_G_MAX_STUN_SHOCK::
createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1
waitforvisualfinish
goto Move_ZAP_CANNON
end
-Move_G_MAX_CHI_STRIKE:
-Move_G_MAX_ONE_BLOW:
-Move_G_MAX_RAPID_FLOW:
-Move_MAX_KNUCKLE:
+Move_G_MAX_CHI_STRIKE::
+Move_G_MAX_ONE_BLOW::
+Move_G_MAX_RAPID_FLOW::
+Move_MAX_KNUCKLE::
createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1
waitforvisualfinish
goto Move_CLOSE_COMBAT
end
-Move_G_MAX_RESONANCE:
-Move_MAX_HAILSTORM:
+Move_G_MAX_RESONANCE::
+Move_MAX_HAILSTORM::
createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1
waitforvisualfinish
goto Move_SHEER_COLD
end
-Move_G_MAX_SANDBLAST:
-Move_MAX_QUAKE:
+Move_G_MAX_SANDBLAST::
+Move_MAX_QUAKE::
createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1
waitforvisualfinish
goto Move_FISSURE
end
-Move_G_MAX_BEFUDDLE:
-Move_MAX_FLUTTERBY:
+Move_G_MAX_BEFUDDLE::
+Move_MAX_FLUTTERBY::
createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1
waitforvisualfinish
goto Move_BUG_BUZZ
end
-Move_G_MAX_STEELSURGE:
-Move_G_MAX_MELTDOWN:
-Move_MAX_STEELSPIKE:
+Move_G_MAX_STEELSURGE::
+Move_G_MAX_MELTDOWN::
+Move_MAX_STEELSPIKE::
createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1
waitforvisualfinish
goto Move_HEAVY_SLAM
end
-Move_G_MAX_TERROR:
-Move_MAX_PHANTASM:
+Move_G_MAX_TERROR::
+Move_MAX_PHANTASM::
createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1
waitforvisualfinish
goto Move_PHANTOM_FORCE
end
-Move_G_MAX_GRAVITAS:
-Move_MAX_MINDSTORM:
+Move_G_MAX_GRAVITAS::
+Move_MAX_MINDSTORM::
createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1
waitforvisualfinish
goto Move_PSYCHO_BOOST
end
-Move_G_MAX_SMITE:
-Move_G_MAX_FINALE:
-Move_MAX_STARFALL:
+Move_G_MAX_SMITE::
+Move_G_MAX_FINALE::
+Move_MAX_STARFALL::
createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1
waitforvisualfinish
goto Move_MOONBLAST
end
-Move_G_MAX_STONESURGE:
-Move_G_MAX_VOLCALITH:
-Move_MAX_ROCKFALL:
+Move_G_MAX_STONESURGE::
+Move_G_MAX_VOLCALITH::
+Move_MAX_ROCKFALL::
createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1
waitforvisualfinish
goto Move_ROCK_WRECKER
end
-Move_G_MAX_DEPLETION:
-Move_MAX_WYRMWIND:
+Move_G_MAX_DEPLETION::
+Move_MAX_WYRMWIND::
createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1
waitforvisualfinish
goto Move_SPACIAL_REND
end
-Move_G_MAX_SNOOZE:
-Move_MAX_DARKNESS:
+Move_G_MAX_SNOOZE::
+Move_MAX_DARKNESS::
createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1
waitforvisualfinish
goto Move_DARK_PULSE
end
-Move_G_MAX_CUDDLE:
+Move_G_MAX_CUDDLE::
createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1
waitforvisualfinish
goto Move_COVET
end
-Move_G_MAX_VOLT_CRASH:
+Move_G_MAX_VOLT_CRASH::
createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1
waitforvisualfinish
goto Move_VOLT_TACKLE
end
-Move_G_MAX_GOLD_RUSH:
+Move_G_MAX_GOLD_RUSH::
createvisualtask AnimTask_DynamaxGrowth, 0x5, 0x1, 0x1
waitforvisualfinish
goto Move_PAY_DAY
diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s
index c4303e71b170..4366ff7d7ba8 100644
--- a/data/battle_scripts_1.s
+++ b/data/battle_scripts_1.s
@@ -1,4 +1,4 @@
-#include "config.h"
+#include "config/general.h"
#include "config/battle.h"
#include "constants/global.h"
#include "constants/battle.h"
@@ -20,6 +20,114 @@
.section script_data, "aw", %progbits
+BattleScript_DamageToQuarterTargetHP::
+ attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ attackstring
+ ppreduce
+ typecalc
+ bichalfword gMoveResultFlags, MOVE_RESULT_SUPER_EFFECTIVE | MOVE_RESULT_NOT_VERY_EFFECTIVE
+ damagetoquartertargethp
+ goto BattleScript_HitFromAtkAnimation
+
+BattleScript_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
+ playanimation BS_ATTACKER, B_ANIM_TERA_CHARGE
+ waitanimation
+ applyterastallization
+ playanimation BS_ATTACKER, B_ANIM_TERA_ACTIVATE
+ waitanimation
+ printstring STRINGID_PKMNTERASTALLIZEDINTO
+ waitmessage B_WAIT_TIME_LONG
+ end3
+
+BattleScript_TeraFormChange::
+ @ TODO: no string prints in S/V, but right now this helps with clarity
+ printstring STRINGID_PKMNSTORINGENERGY
+ handleformchange BS_ATTACKER, 0
+ handleformchange BS_ATTACKER, 1
+ playanimation BS_ATTACKER, B_ANIM_TERA_CHARGE
+ waitanimation
+ applyterastallization
+ playanimation BS_ATTACKER, B_ANIM_TERA_ACTIVATE
+ waitanimation
+ handleformchange BS_ATTACKER, 2
+ printstring STRINGID_PKMNTERASTALLIZEDINTO
+ waitmessage B_WAIT_TIME_LONG
+ switchinabilities BS_ATTACKER
+ end3
+
+BattleScript_LowerAtkSpAtk::
+ jumpifstat BS_EFFECT_BATTLER, CMP_GREATER_THAN, STAT_ATK, MIN_STAT_STAGE, BattleScript_LowerAtkSpAtkDoAnim
+ jumpifstat BS_EFFECT_BATTLER, CMP_EQUAL, STAT_SPATK, MIN_STAT_STAGE, BattleScript_LowerAtkSpAtkEnd
+BattleScript_LowerAtkSpAtkDoAnim::
+ setbyte sSTAT_ANIM_PLAYED, FALSE
+ playstatchangeanimation BS_EFFECT_BATTLER, BIT_ATK | BIT_SPATK, STAT_CHANGE_NEGATIVE
+ setstatchanger STAT_ATK, 1, TRUE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_LowerAtkSpAtkTrySpAtk
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_LowerAtkSpAtkTrySpAtk
+ printfromtable gStatDownStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_LowerAtkSpAtkTrySpAtk::
+ setstatchanger STAT_SPATK, 1, TRUE
+ statbuffchange MOVE_EFFECT_AFFECTS_USER | STAT_CHANGE_ALLOW_PTR, BattleScript_LowerAtkSpAtkEnd
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_LowerAtkSpAtkEnd
+ printfromtable gStatDownStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_LowerAtkSpAtkEnd:
+ return
+
+BattleScript_EffectSpicyExtract::
+ attackcanceler
+ jumpifsubstituteblocks BattleScript_ButItFailed
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
+ jumpifstat BS_TARGET, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE BattleScript_SpicyExtract_CheckShouldSkipAttackAnim
+ jumpifstat BS_TARGET, CMP_GREATER_THAN, STAT_DEF, MIN_STAT_STAGE, BattleScript_SpicyExtract_CheckShouldSkipAttackAnim
+ goto BattleScript_ButItFailed
+BattleScript_SpicyExtract_CheckShouldSkipAttackAnim:
+ jumpifbyte CMP_NOT_EQUAL, gBattleCommunication, 0, BattleScript_SpicyExtract_RaiseAtk
+ attackstring
+ ppreduce
+ bicword gHitMarker, HITMARKER_NO_ATTACKSTRING | HITMARKER_NO_PPDEDUCT
+ goto BattleScript_SpicyExtract_SkipAttackAnim
+BattleScript_SpicyExtract_RaiseAtk:
+ attackstring
+ ppreduce
+ attackanimation
+ waitanimation
+BattleScript_SpicyExtract_SkipAttackAnim:
+ setbyte sSTAT_ANIM_PLAYED, FALSE
+ playstatchangeanimation BS_TARGET, BIT_ATK, STAT_CHANGE_BY_TWO
+ setstatchanger STAT_ATK, 2, FALSE
+ statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_EffectSpicyExtractDefenseDown
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_INCREASE, BattleScript_EffectSpicyExtractDefenseDown
+ printfromtable gStatUpStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_EffectSpicyExtractDefenseDown:
+ setbyte sSTAT_ANIM_PLAYED, FALSE
+ playstatchangeanimation BS_TARGET, BIT_DEF, STAT_CHANGE_NEGATIVE | STAT_CHANGE_BY_TWO
+ setstatchanger STAT_DEF, 2, TRUE
+ statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_EffectSpicyExtract_End
+ jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_EffectSpicyExtract_End
+ printfromtable gStatDownStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_EffectSpicyExtract_End:
+ goto BattleScript_MoveEnd
+
BattleScript_EffectTidyUp::
attackcanceler
attackstring
@@ -160,7 +268,7 @@ BattleScript_EffectChillyReception::
jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_RAIN_PRIMAL, BattleScript_EffectChillyReceptionBlockedByPrimalRain
jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_STRONG_WINDS, BattleScript_EffectChillyReceptionBlockedByStrongWinds
call BattleScript_EffectChillyReceptionPlayAnimation
- setsnow
+ setfieldweather ENUM_WEATHER_SNOW
call BattleScript_MoveWeatherChangeRet
goto BattleScript_MoveSwitch
BattleScript_EffectChillyReceptionPlayAnimation:
@@ -758,13 +866,11 @@ BattleScript_OctolockEndTurn::
playstatchangeanimation BS_ATTACKER, BIT_DEF | BIT_SPDEF, STAT_CHANGE_NEGATIVE
setstatchanger STAT_DEF, 1, TRUE
statbuffchange STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_OctolockTryLowerSpDef
-BattleScript_OctolockTryLowerDef:
printfromtable gStatDownStringIds
waitmessage B_WAIT_TIME_LONG
BattleScript_OctolockTryLowerSpDef:
setstatchanger STAT_SPDEF, 1, TRUE
statbuffchange STAT_CHANGE_ALLOW_PTR | STAT_CHANGE_NOT_PROTECT_AFFECTED, BattleScript_OctlockTurnDmgEnd
-BattleScript_OctolockTurnDmgPrintMsg:
printfromtable gStatDownStringIds
waitmessage B_WAIT_TIME_LONG
BattleScript_OctlockTurnDmgEnd:
@@ -772,6 +878,7 @@ BattleScript_OctlockTurnDmgEnd:
BattleScript_EffectPoltergeist::
attackcanceler
+ accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
attackstring
ppreduce
checkpoltergeist BS_TARGET, BattleScript_ButItFailed
@@ -821,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
@@ -904,7 +1002,6 @@ BattleScript_EffectStuffCheeks::
jumpifnotberry BS_ATTACKER, BattleScript_ButItFailed
attackanimation
waitanimation
-BattleScript_StuffCheeksEatBerry:
setbyte sBERRY_OVERRIDE, 1
orword gHitMarker, HITMARKER_DISABLE_ANIMATION
consumeberry BS_ATTACKER, TRUE
@@ -1116,10 +1213,6 @@ BattleScript_StrengthSapLower:
waitmessage B_WAIT_TIME_LONG
goto BattleScript_StrengthSapHp
@ Drain HP without lowering a stat
-BattleScript_StrengthSapTryHp:
- jumpiffullhp BS_ATTACKER, BattleScript_ButItFailed
- attackanimation
- waitanimation
BattleScript_StrengthSapHp:
jumpifability BS_TARGET, ABILITY_LIQUID_OOZE, BattleScript_StrengthSapManipulateDmg
jumpifstatus3 BS_ATTACKER, STATUS3_HEAL_BLOCK, BattleScript_MoveEnd
@@ -1250,8 +1343,6 @@ BattleScript_EffectPartingShotTrySpAtk:
BattleScript_EffectPartingShotSwitch:
moveendall
goto BattleScript_MoveSwitch
-BattleScript_PartingShotEnd:
- end
BattleScript_EffectPowder::
attackcanceler
@@ -1454,7 +1545,6 @@ BattleScript_RototillerLoop:
jumpifstat BS_TARGET, CMP_EQUAL, STAT_SPATK, MAX_STAT_STAGE, BattleScript_RototillerCantRaiseMultipleStats
BattleScript_RototillerCheckAffected:
jumpifnotrototilleraffected BS_TARGET, BattleScript_RototillerNoEffect
-BattleScript_RototillerAffected:
setbyte sSTAT_ANIM_PLAYED, FALSE
playstatchangeanimation BS_TARGET, BIT_ATK | BIT_SPATK, 0
setstatchanger STAT_ATK, 1, FALSE
@@ -1685,7 +1775,6 @@ BattleScript_EffectAutotomize::
BattleScript_AutotomizeAttackAnim::
attackanimation
waitanimation
-BattleScript_AutotomizeDoAnim::
setgraphicalstatchangevalues
playanimation BS_ATTACKER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
BattleScript_AutotomizePrintString::
@@ -2596,7 +2685,6 @@ BattleScript_TryTailwindAbilitiesLoop_Iter:
BattleScript_TryTailwindAbilitiesLoop_Increment:
addbyte gBattlerTarget, 0x1
jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_TryTailwindAbilitiesLoop_Iter
-BattleScript_TryTailwindAbilitiesLoop_Ret:
restoretarget
return
@@ -2697,7 +2785,6 @@ BattleScript_EffectPlaceholder::
goto BattleScript_MoveEnd
BattleScript_EffectHit::
-BattleScript_HitFromAtkCanceler::
attackcanceler
BattleScript_HitFromAccCheck::
accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
@@ -3097,6 +3184,7 @@ BattleScript_EffectStatDown:
BattleScript_StatDownFromAttackString:
attackstring
ppreduce
+BattleScript_EffectStatDownFromStatBuffChange:
statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_StatDownEnd
jumpifbyte CMP_LESS_THAN, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_StatDownDoAnim
jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_FELL_EMPTY, BattleScript_StatDownEnd
@@ -3107,6 +3195,7 @@ BattleScript_StatDownDoAnim::
waitanimation
setgraphicalstatchangevalues
playanimation BS_TARGET, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
+ bicword gHitMarker, HITMARKER_DISABLE_ANIMATION
BattleScript_StatDownPrintString::
printfromtable gStatDownStringIds
waitmessage B_WAIT_TIME_LONG
@@ -3139,7 +3228,8 @@ BattleScript_MirrorArmorReflectStickyWeb:
call BattleScript_AbilityPopUp
setattackertostickywebuser
jumpifbyteequal gBattlerAttacker, gBattlerTarget, BattleScript_StickyWebOnSwitchInEnd @ Sticky web user not on field -> no stat loss
- goto BattleScript_MirrorArmorReflectStatLoss
+ call BattleScript_MirrorArmorReflectStatLoss
+ goto BattleScript_StickyWebOnSwitchInEnd
BattleScript_StatDown::
playanimation BS_EFFECT_BATTLER, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
@@ -3187,14 +3277,6 @@ BattleScript_RoarBlockedByDynamax:
waitmessage B_WAIT_TIME_LONG
goto BattleScript_MoveEnd
-BattleScript_EffectMultiHit::
- attackcanceler
- accuracycheck BattleScript_PrintMoveMissed, ACC_CURR_MOVE
- attackstring
- ppreduce
- setmultihitcounter 0
- initmultihitstring
- sethword sMULTIHIT_EFFECT, 0
BattleScript_MultiHitLoop::
jumpifhasnohp BS_ATTACKER, BattleScript_MultiHitEnd
jumpifhasnohp BS_TARGET, BattleScript_MultiHitPrintStrings
@@ -3607,7 +3689,6 @@ BattleScript_EffectParalyze::
jumpifshieldsdown BS_TARGET, BattleScript_AbilityProtectsDoesntAffect
jumpifsubstituteblocks BattleScript_ButItFailed
typecalc
-BattleScript_BattleScript_EffectParalyzeNoTypeCalc:
jumpifmovehadnoeffect BattleScript_ButItFailed
jumpifstatus BS_TARGET, STATUS1_PARALYSIS, BattleScript_AlreadyParalyzed
jumpifelectricabilityaffected BS_TARGET, ABILITY_VOLT_ABSORB, BattleScript_VoltAbsorbHeal
@@ -4240,7 +4321,7 @@ BattleScript_EffectSandstorm::
attackstring
ppreduce
call BattleScript_CheckPrimalWeather
- setsandstorm
+ setfieldweather ENUM_WEATHER_SANDSTORM
goto BattleScript_MoveWeatherChange
BattleScript_EffectRollout::
@@ -4406,7 +4487,7 @@ BattleScript_EffectRainDance::
attackstring
ppreduce
call BattleScript_CheckPrimalWeather
- setrain
+ setfieldweather ENUM_WEATHER_RAIN
BattleScript_MoveWeatherChange::
attackanimation
waitanimation
@@ -4424,7 +4505,7 @@ BattleScript_EffectSunnyDay::
attackstring
ppreduce
call BattleScript_CheckPrimalWeather
- setsunny
+ setfieldweather ENUM_WEATHER_SUN
goto BattleScript_MoveWeatherChange
BattleScript_ExtremelyHarshSunlightWasNotLessened:
@@ -4553,7 +4634,6 @@ BattleScript_EffectTeleport::
.else
jumpifbattletype BATTLE_TYPE_TRAINER, BattleScript_FailedFromAtkCanceler
.endif
-BattleScript_EffectTeleportTryToRunAway:
attackcanceler
attackstring
ppreduce
@@ -4782,7 +4862,7 @@ BattleScript_EffectHail::
attackstring
ppreduce
call BattleScript_CheckPrimalWeather
- sethail
+ setfieldweather ENUM_WEATHER_HAIL
goto BattleScript_MoveWeatherChange
BattleScript_EffectTorment::
@@ -5405,6 +5485,7 @@ BattleScript_FaintAttacker::
BattleScript_FaintTarget::
tryillusionoff BS_TARGET
tryactivategulpmissile
+ tryupdateleaderscresttracker
playfaintcry BS_TARGET
pause B_WAIT_TIME_LONG
dofaintanimation BS_TARGET
@@ -5721,7 +5802,7 @@ BattleScript_PrintFullBox::
BattleScript_ActionSwitch::
hpthresholds2 BS_ATTACKER
- copybyte sSAVED_BATTLER, gBattlerAttacker
+ saveattacker
printstring STRINGID_RETURNMON
jumpifbattletype BATTLE_TYPE_DOUBLE, BattleScript_PursuitSwitchDmgSetMultihit
setmultihit 1
@@ -5739,7 +5820,7 @@ BattleScript_DoSwitchOut::
switchoutabilities BS_ATTACKER
updatedynamax
waitstate
- copybyte gBattlerAttacker, sSAVED_BATTLER
+ restoreattacker
returnatktoball
waitstate
drawpartystatussummary BS_ATTACKER
@@ -5841,33 +5922,22 @@ BattleScript_DamagingWeatherContinues::
waitmessage B_WAIT_TIME_LONG
playanimation_var BS_ATTACKER, sB_ANIM_ARG1
setbyte gBattleCommunication, 0
-BattleScript_DamagingWeatherLoop::
- copyarraywithindex gBattlerAttacker, gBattlerByTurnOrder, gBattleCommunication, 1
- weatherdamage
- jumpifword CMP_EQUAL, gBattleMoveDamage, 0, BattleScript_DamagingWeatherLoopIncrement
- jumpifword CMP_COMMON_BITS gBattleMoveDamage, 1 << 31, BattleScript_DamagingWeatherHeal
+ end2
+
+BattleScript_DamagingWeather::
printfromtable gSandStormHailDmgStringIds
waitmessage B_WAIT_TIME_LONG
effectivenesssound
- hitanimation BS_ATTACKER
- goto BattleScript_DamagingWeatherHpChange
-BattleScript_DamagingWeatherHeal:
- call BattleScript_AbilityPopUp
+ hitanimation BS_SCRIPTING
+ goto BattleScript_DoTurnDmg
+
+BattleScript_IceBodyHeal::
+ call BattleScript_AbilityPopUpScripting
+ playanimation BS_SCRIPTING, B_ANIM_SIMPLE_HEAL
+ healthbarupdate BS_SCRIPTING
+ datahpupdate BS_SCRIPTING
printstring STRINGID_ICEBODYHPGAIN
waitmessage B_WAIT_TIME_LONG
-BattleScript_DamagingWeatherHpChange:
- orword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_GRUDGE
- healthbarupdate BS_ATTACKER
- datahpupdate BS_ATTACKER
- tryfaintmon BS_ATTACKER
- checkteamslost BattleScript_DamagingWeatherLoopIncrement
-BattleScript_DamagingWeatherLoopIncrement::
- jumpifbyte CMP_NOT_EQUAL, gBattleOutcome, 0, BattleScript_DamagingWeatherContinuesEnd
- addbyte gBattleCommunication, 1
- jumpifbytenotequal gBattleCommunication, gBattlersCount, BattleScript_DamagingWeatherLoop
-BattleScript_DamagingWeatherContinuesEnd::
- bicword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_GRUDGE
- call BattleScript_ActivateWeatherAbilities
end2
BattleScript_SandStormHailSnowEnds::
@@ -5889,6 +5959,23 @@ BattleScript_SunlightFaded::
call BattleScript_ActivateWeatherAbilities
end2
+BattleScript_FogContinues::
+ printstring STRINGID_FOGISDEEP
+ waitmessage B_WAIT_TIME_LONG
+ playanimation BS_ATTACKER, B_ANIM_FOG_CONTINUES
+ call BattleScript_ActivateWeatherAbilities
+ end2
+
+BattleScript_FogEnded_Ret::
+ printstring STRINGID_FOGLIFTED
+ waitmessage B_WAIT_TIME_LONG
+ call BattleScript_ActivateWeatherAbilities
+ return
+
+BattleScript_FogEnded::
+ call BattleScript_FogEnded_Ret
+ end2
+
BattleScript_OverworldStatusStarts::
printfromtable gStartingStatusStringIds
waitmessage B_WAIT_TIME_LONG
@@ -6273,6 +6360,7 @@ BattleScript_ToxicSpikesPoisoned::
BattleScript_StickyWebOnSwitchIn::
savetarget
+ saveattacker
copybyte gBattlerTarget, sBATTLER
setbyte sSTICKY_WEB_STAT_DROP, 1
printstring STRINGID_STICKYWEBSWITCHIN
@@ -6291,6 +6379,8 @@ BattleScript_StickyWebOnSwitchInPrintStatMsg:
waitmessage B_WAIT_TIME_LONG
BattleScript_StickyWebOnSwitchInEnd:
restoretarget
+ restoreattacker
+ setbyte sSTICKY_WEB_STAT_DROP, 0
return
BattleScript_PerishSongTakesLife::
@@ -6413,7 +6503,6 @@ BattleScript_WindPowerActivates::
setcharge BS_TARGET
printstring STRINGID_BEINGHITCHARGEDPKMNWITHPOWER
waitmessage B_WAIT_TIME_LONG
-BattleScript_WindPowerActivates_Ret:
return
BattleScript_ToxicDebrisActivates::
@@ -6445,6 +6534,9 @@ BattleScript_PerishSongCountGoesDown::
waitmessage B_WAIT_TIME_LONG
end2
+BattleScript_AllStatsUpZMove::
+ printfromtable gZEffectStringIds
+ waitmessage B_WAIT_TIME_LONG
BattleScript_AllStatsUp::
jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_ATK, MAX_STAT_STAGE, BattleScript_AllStatsUpAtk
jumpifstat BS_ATTACKER, CMP_LESS_THAN, STAT_DEF, MAX_STAT_STAGE, BattleScript_AllStatsUpAtk
@@ -6884,17 +6976,6 @@ BattleScript_OneHitKOMsg::
waitmessage B_WAIT_TIME_LONG
return
-BattleScript_SAtkDown2::
- setbyte sSTAT_ANIM_PLAYED, FALSE
- playstatchangeanimation BS_ATTACKER, BIT_SPATK, STAT_CHANGE_CANT_PREVENT | STAT_CHANGE_NEGATIVE | STAT_CHANGE_BY_TWO
- setstatchanger STAT_SPATK, 2, TRUE
- statbuffchange MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_CERTAIN | STAT_CHANGE_ALLOW_PTR, BattleScript_SAtkDown2End
- jumpifbyte CMP_EQUAL, cMULTISTRING_CHOOSER, B_MSG_STAT_WONT_DECREASE, BattleScript_SAtkDown2End
- printfromtable gStatDownStringIds
- waitmessage B_WAIT_TIME_LONG
-BattleScript_SAtkDown2End::
- return
-
BattleScript_MoveEffectClearSmog::
printstring STRINGID_RESETSTARGETSSTATLEVELS
waitmessage B_WAIT_TIME_LONG
@@ -6914,13 +6995,13 @@ BattleScript_MegaEvolution::
BattleScript_MegaEvolutionAfterString:
waitmessage B_WAIT_TIME_LONG
setbyte gIsCriticalHit, 0
- handlemegaevo BS_ATTACKER, 0
- playanimation BS_ATTACKER, B_ANIM_MEGA_EVOLUTION
+ handlemegaevo BS_SCRIPTING, 0
+ playanimation BS_SCRIPTING, B_ANIM_MEGA_EVOLUTION
waitanimation
- handlemegaevo BS_ATTACKER, 1
+ handlemegaevo BS_SCRIPTING, 1
printstring STRINGID_MEGAEVOEVOLVED
waitmessage B_WAIT_TIME_LONG
- switchinabilities BS_ATTACKER
+ switchinabilities BS_SCRIPTING
end3
BattleScript_WishMegaEvolution::
@@ -6957,13 +7038,13 @@ BattleScript_UltraBurst::
printstring STRINGID_ULTRABURSTREACTING
waitmessage B_WAIT_TIME_LONG
setbyte gIsCriticalHit, 0
- handleultraburst BS_ATTACKER, 0
- playanimation BS_ATTACKER, B_ANIM_ULTRA_BURST
+ handleultraburst BS_SCRIPTING, 0
+ playanimation BS_SCRIPTING, B_ANIM_ULTRA_BURST
waitanimation
- handleultraburst BS_ATTACKER, 1
+ handleultraburst BS_SCRIPTING, 1
printstring STRINGID_ULTRABURSTCOMPLETED
waitmessage B_WAIT_TIME_LONG
- switchinabilities BS_ATTACKER
+ switchinabilities BS_SCRIPTING
end3
BattleScript_GulpMissileFormChange::
@@ -6991,6 +7072,29 @@ BattleScript_AttackerFormChangeEnd3NoPopup::
call BattleScript_AttackerFormChangeNoPopup
end3
+BattleScript_AttackerFormChangeWithString::
+ pause 5
+ copybyte gBattlerAbility, gBattlerAttacker
+ call BattleScript_AbilityPopUp
+ flushtextbox
+BattleScript_AttackerFormChangeWithStringNoPopup::
+ handleformchange BS_ATTACKER, 0
+ handleformchange BS_ATTACKER, 1
+ playanimation BS_ATTACKER, B_ANIM_FORM_CHANGE
+ waitanimation
+ handleformchange BS_ATTACKER, 2
+ printstring STRINGID_PKMNTRANSFORMED
+ waitmessage B_WAIT_TIME_LONG
+ return
+
+BattleScript_AttackerFormChangeWithStringEnd3::
+ call BattleScript_AttackerFormChangeWithString
+ end3
+
+BattleScript_AttackerFormChangeWithStringEnd3NoPopup::
+ call BattleScript_AttackerFormChangeWithStringNoPopup
+ end3
+
BattleScript_AttackerFormChangeMoveEffect::
waitmessage 1
handleformchange BS_ATTACKER, 0
@@ -7056,7 +7160,7 @@ BattleScript_TargetFormChangeWithStringNoPopup::
BattleScript_BattlerFormChangeWithStringEnd3::
pause 5
- call BattleScript_AbilityPopUp
+ call BattleScript_AbilityPopUpScripting
flushtextbox
handleformchange BS_SCRIPTING, 0
handleformchange BS_SCRIPTING, 1
@@ -7100,7 +7204,6 @@ BattleScript_CottonDownTargetSpeedCantGoLower:
BattleScript_CottonDownLoopIncrement:
addbyte gBattlerTarget, 1
jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_CottonDownLoop
-BattleScript_CottonDownReturn:
swapattackerwithtarget
copybyte gBattlerAttacker, sSAVED_BATTLER
return
@@ -7661,6 +7764,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
@@ -7719,7 +7831,6 @@ BattleScript_ActivateWeatherAbilities:
BattleScript_ActivateWeatherAbilities_Loop:
copybyte sBATTLER, gBattlerTarget
activateweatherchangeabilities BS_TARGET
-BattleScript_ActivateWeatherAbilities_Increment:
addbyte gBattlerTarget, 1
jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_ActivateWeatherAbilities_Loop
restoretarget
@@ -7743,7 +7854,7 @@ BattleScript_TryIntimidateHoldEffectsRet:
return
BattleScript_IntimidateActivates::
- copybyte sSAVED_BATTLER, gBattlerTarget
+ savetarget
.if B_ABILITY_POP_UP == TRUE
showabilitypopup BS_ATTACKER
pause B_WAIT_TIME_LONG
@@ -7778,10 +7889,9 @@ BattleScript_IntimidateEffect_WaitString:
BattleScript_IntimidateLoopIncrement:
addbyte gBattlerTarget, 1
jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_IntimidateLoop
-BattleScript_IntimidateEnd:
copybyte sBATTLER, gBattlerAttacker
destroyabilitypopup
- copybyte gBattlerTarget, sSAVED_BATTLER
+ restoretarget
pause B_WAIT_TIME_MED
end3
@@ -7814,7 +7924,7 @@ BattleScript_IntimidateInReverse:
goto BattleScript_IntimidateLoopIncrement
BattleScript_SupersweetSyrupActivates::
- copybyte sSAVED_BATTLER, gBattlerTarget
+ savetarget
.if B_ABILITY_POP_UP == TRUE
showabilitypopup BS_ATTACKER
pause B_WAIT_TIME_LONG
@@ -7844,10 +7954,9 @@ BattleScript_SupersweetSyrupEffect_WaitString:
BattleScript_SupersweetSyrupLoopIncrement:
addbyte gBattlerTarget, 1
jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_SupersweetSyrupLoop
-BattleScript_SupersweetSyrupEnd:
copybyte sBATTLER, gBattlerAttacker
destroyabilitypopup
- copybyte gBattlerTarget, sSAVED_BATTLER
+ restoretarget
pause B_WAIT_TIME_MED
end3
@@ -7911,7 +8020,7 @@ BattleScript_DeltaStreamActivates::
end3
BattleScript_ProtosynthesisActivates::
- call BattleScript_AbilityPopUp
+ call BattleScript_AbilityPopUpScripting
printstring STRINGID_SUNLIGHTACTIVATEDABILITY
waitmessage B_WAIT_TIME_MED
printstring STRINGID_STATWASHEIGHTENED
@@ -8003,7 +8112,6 @@ BattleScript_ActivateTerrainSeed:
removeitem BS_TARGET
BattleScript_ActivateTerrainAbility:
activateterrainchangeabilities BS_TARGET
-BattleScript_ActivateTerrainEffects_Increment:
addbyte gBattlerTarget, 0x1
jumpifbytenotequal gBattlerTarget, gBattlersCount, BattleScript_ActivateTerrainSeed
restoretarget
@@ -8259,14 +8367,12 @@ BattleScript_GrassyTerrainLoop:
checkgrassyterrainheal BS_ATTACKER, BattleScript_GrassyTerrainLoopIncrement
printstring STRINGID_GRASSYTERRAINHEALS
waitmessage B_WAIT_TIME_LONG
-BattleScript_GrassyTerrainHpChange:
orword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE
healthbarupdate BS_ATTACKER
datahpupdate BS_ATTACKER
BattleScript_GrassyTerrainLoopIncrement::
addbyte gBattleCommunication, 1
jumpifbytenotequal gBattleCommunication, gBattlersCount, BattleScript_GrassyTerrainLoop
-BattleScript_GrassyTerrainLoopEnd::
bicword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE
jumpifword CMP_COMMON_BITS, gFieldStatuses, STATUS_FIELD_TERRAIN_PERMANENT, BattleScript_GrassyTerrainHealEnd
BattleScript_GrassyTerrainHealEnd:
@@ -8275,7 +8381,6 @@ BattleScript_GrassyTerrainHealEnd:
BattleScript_AbilityNoSpecificStatLoss::
pause B_WAIT_TIME_SHORT
call BattleScript_AbilityPopUp
-BattleScript_AbilityNoSpecificStatLossPrint:
printstring STRINGID_PKMNSXPREVENTSYLOSS
waitmessage B_WAIT_TIME_LONG
setbyte cMULTISTRING_CHOOSER, B_MSG_STAT_FELL_EMPTY
@@ -8302,6 +8407,13 @@ BattleScript_ProteanActivates::
waitmessage B_WAIT_TIME_LONG
return
+BattleScript_TeraShellDistortingTypeMatchups::
+ pause B_WAIT_TIME_SHORTEST
+ call BattleScript_AbilityPopUp
+ printstring STRINGID_PKMNMADESHELLGLEAM
+ waitmessage B_WAIT_TIME_LONG
+ return
+
BattleScript_CursedBodyActivates::
call BattleScript_AbilityPopUp
printstring STRINGID_CUSEDBODYDISABLED
@@ -8486,7 +8598,10 @@ BattleScript_FriskMsg::
return
BattleScript_FriskActivates::
- tryfriskmsg BS_ATTACKER
+ saveattacker
+ copybyte gBattlerAttacker, sBATTLER
+ tryfriskmsg BS_SCRIPTING
+ restoreattacker
end3
BattleScript_ImposterActivates::
@@ -9052,16 +9167,6 @@ BattleScript_ArenaTurnBeginning::
volumeup
end2
-@ Unused
-BattleScript_ArenaNothingDecided::
- playse SE_DING_DONG
- arenadrawreftextbox
- arenajudgmentstring B_MSG_REF_NOTHING_IS_DECIDED
- arenawaitmessage B_MSG_REF_NOTHING_IS_DECIDED
- pause B_WAIT_TIME_LONG
- arenaerasereftextbox
- end2
-
BattleScript_ArenaDoJudgment::
makevisible BS_PLAYER1
waitstate
@@ -9161,7 +9266,6 @@ BattleScript_TotemFlaredToLife::
call BattleScript_ApplyTotemVarBoost
end2
-@ remove the mirror herb, do totem loop
BattleScript_MirrorHerbCopyStatChangeEnd2::
call BattleScript_MirrorHerbCopyStatChange
end2
@@ -9171,16 +9275,24 @@ BattleScript_MirrorHerbCopyStatChange::
printstring STRINGID_MIRRORHERBCOPIED
waitmessage B_WAIT_TIME_LONG
removeitem BS_SCRIPTING
- call BattleScript_TotemVar_Ret
- copybyte gBattlerAttacker, sSAVED_BATTLER @ restore the original attacker just to be safe
+ playanimation BS_SCRIPTING, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
+BattleScript_MirrorHerbStartCopyStats:
+ copyfoesstatincrease BS_SCRIPTING, BattleScript_MirrorHerbStartReturn
+ statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_MirrorHerbStartReturn
+ goto BattleScript_MirrorHerbStartCopyStats
+BattleScript_MirrorHerbStartReturn:
return
BattleScript_OpportunistCopyStatChange::
- call BattleScript_AbilityPopUp
- printstring STRINGID_OPPORTUNISTCOPIED
+ call BattleScript_AbilityPopUpScripting
+ playanimation BS_SCRIPTING, B_ANIM_STATS_CHANGE, sB_ANIM_ARG1
+BattleScript_OpportunistStartCopyStats:
+ copyfoesstatincrease BS_SCRIPTING, BattleScript_OpportunistCopyStatChangeEnd
+ statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_OpportunistCopyStatChangeEnd
+ printfromtable gStatUpStringIds
waitmessage B_WAIT_TIME_LONG
- call BattleScript_TotemVar_Ret
- copybyte gBattlerAttacker, sSAVED_BATTLER @ restore the original attacker just to be safe
+ goto BattleScript_OpportunistStartCopyStats
+BattleScript_OpportunistCopyStatChangeEnd:
end3
BattleScript_TotemVar::
@@ -9207,6 +9319,25 @@ BattleScript_AnnounceAirLockCloudNine::
call BattleScript_ActivateWeatherAbilities
end3
+BattleScript_ActivateTeraformZero::
+ call BattleScript_AbilityPopUp
+ waitmessage B_WAIT_TIME_LONG
+ jumpifhalfword CMP_COMMON_BITS, gBattleWeather, B_WEATHER_ANY, BattleScript_ActivateTeraformZero_RemoveWeather
+ jumpifhalfword CMP_COMMON_BITS, gFieldStatuses, STATUS_FIELD_TERRAIN_ANY, BattleScript_ActivateTeraformZero_RemoveTerrain
+ goto BattleScript_ActivateTeraformZero_End
+BattleScript_ActivateTeraformZero_RemoveWeather:
+ removeweather
+ printfromtable gWeatherEndsStringIds
+ waitmessage B_WAIT_TIME_LONG
+ jumpifhalfword CMP_NO_COMMON_BITS, gFieldStatuses, STATUS_FIELD_TERRAIN_ANY, BattleScript_ActivateTeraformZero_End
+BattleScript_ActivateTeraformZero_RemoveTerrain:
+ removeterrain
+ playanimation BS_ATTACKER, B_ANIM_RESTORE_BG
+ printfromtable gTerrainStringIds
+ waitmessage B_WAIT_TIME_LONG
+BattleScript_ActivateTeraformZero_End:
+ end3
+
BattleScript_QuickClawActivation::
flushtextbox
playanimation BS_ATTACKER, B_ANIM_HELD_ITEM_EFFECT
@@ -9335,7 +9466,6 @@ BattleScript_EffectExtremeEvoboost::
BattleScript_ExtremeEvoboostAnim:
attackanimation
waitanimation
-BattleScript_ExtremeEvoboostAtk::
setbyte sSTAT_ANIM_PLAYED, FALSE
playstatchangeanimation BS_ATTACKER, BIT_ATK | BIT_DEF | BIT_SPEED | BIT_SPATK | BIT_SPDEF, 0x0
setstatchanger STAT_ATK, 2, FALSE
@@ -9460,19 +9590,19 @@ BattleScript_RedCardIngrain:
printstring STRINGID_PKMNANCHOREDITSELF
waitmessage B_WAIT_TIME_LONG
removeitem BS_SCRIPTING
- swapattackerwithtarget
+ restoretarget
return
BattleScript_RedCardSuctionCups:
printstring STRINGID_PKMNANCHORSITSELFWITH
waitmessage B_WAIT_TIME_LONG
removeitem BS_SCRIPTING
- swapattackerwithtarget
+ restoretarget
return
BattleScript_RedCardDynamaxed:
printstring STRINGID_MOVEBLOCKEDBYDYNAMAX
waitmessage B_WAIT_TIME_LONG
removeitem BS_SCRIPTING
- swapattackerwithtarget
+ restoretarget
return
BattleScript_EjectButtonActivates::
@@ -9691,27 +9821,11 @@ BattleScript_DamageNonTypesStarts::
goto BattleScript_MoveEnd
BattleScript_DamageNonTypesContinues::
- setbyte gBattleCommunication, 0
-BattleScript_DamageNonTypesLoop::
- copyarraywithindex gBattlerAttacker, gBattlerByTurnOrder, gBattleCommunication, 1
- damagenontypes
- jumpifword CMP_EQUAL, gBattleMoveDamage, 0, BattleScript_DamageNonTypesLoopIncrement
printfromtable gDamageNonTypesDmgStringIds
waitmessage B_WAIT_TIME_LONG
effectivenesssound
- hitanimation BS_ATTACKER
- orword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_GRUDGE
- healthbarupdate BS_ATTACKER
- datahpupdate BS_ATTACKER
- tryfaintmon BS_ATTACKER
- checkteamslost BattleScript_DamageNonTypesLoopIncrement
-BattleScript_DamageNonTypesLoopIncrement::
- jumpifbyte CMP_NOT_EQUAL, gBattleOutcome, 0, BattleScript_DamageNonTypesContinuesEnd
- addbyte gBattleCommunication, 1
- jumpifbytenotequal gBattleCommunication, gBattlersCount, BattleScript_DamageNonTypesLoop
-BattleScript_DamageNonTypesContinuesEnd::
- bicword gHitMarker, HITMARKER_IGNORE_BIDE | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_PASSIVE_DAMAGE | HITMARKER_GRUDGE
- end2
+ hitanimation BS_SCRIPTING
+ goto BattleScript_DoTurnDmg
BattleScript_EffectTryReducePP::
tryspiteppreduce BattleScript_MoveEnd
@@ -9909,7 +10023,6 @@ BattleScript_CouldntFullyProtect::
return
BattleScript_BerserkGeneRet::
-BattleScript_BerserkGeneRet_Anim:
savetarget
copybyte gBattlerTarget, sBATTLER
statbuffchange STAT_CHANGE_ALLOW_PTR, BattleScript_BerserkGeneRet_TryConfuse
@@ -9937,10 +10050,20 @@ BattleScript_BerserkGeneRet_End:
removeitem BS_SCRIPTING
end3
+BattleScript_BoosterEnergyEnd2::
+ playanimation BS_SCRIPTING, B_ANIM_HELD_ITEM_EFFECT, sB_ANIM_ARG1
+ call BattleScript_AbilityPopUpTarget
+ printstring STRINGID_BOOSTERENERGYACTIVATES
+ waitmessage B_WAIT_TIME_MED
+ printstring STRINGID_STATWASHEIGHTENED
+ waitmessage B_WAIT_TIME_MED
+ removeitem BS_SCRIPTING
+ end2
+
BattleScript_EffectSnow::
attackcanceler
attackstring
ppreduce
call BattleScript_CheckPrimalWeather
- setsnow
+ setfieldweather ENUM_WEATHER_SNOW
goto BattleScript_MoveWeatherChange
diff --git a/data/battle_scripts_2.s b/data/battle_scripts_2.s
index 3cee2d32aeb3..7fe22195c864 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
@@ -159,7 +159,6 @@ BattleScript_SafariBallThrow::
BattleScript_SuccessBallThrow::
setbyte sMON_CAUGHT, TRUE
incrementgamestat GAME_STAT_POKEMON_CAPTURES
-BattleScript_PrintCaughtMonInfo::
printstring STRINGID_GOTCHAPKMNCAUGHTPLAYER
jumpifbyte CMP_NOT_EQUAL, sEXP_CATCH, TRUE, BattleScript_TryPrintCaughtMonInfo
setbyte sGIVEEXP_STATE, 0
diff --git a/data/contest_ai_scripts.s b/data/contest_ai_scripts.s
index affaf31d6dde..f04e022bb54c 100644
--- a/data/contest_ai_scripts.s
+++ b/data/contest_ai_scripts.s
@@ -1,4 +1,4 @@
-#include "config.h"
+#include "config/general.h"
#include "constants/global.h"
#include "constants/contest.h"
.include "asm/macros.inc"
diff --git a/data/event_scripts.s b/data/event_scripts.s
index f0a5c609ea3a..448073c16d46 100644
--- a/data/event_scripts.s
+++ b/data/event_scripts.s
@@ -1,4 +1,4 @@
-#include "config.h"
+#include "config/general.h"
#include "config/battle.h"
#include "config/item.h"
#include "constants/global.h"
@@ -725,6 +725,7 @@ Common_EventScript_OutOfCenterPartyHeal::
playfanfare MUS_HEAL
waitfanfare
special HealPlayerParty
+ callnative UpdateFollowingPokemon
fadescreen FADE_FROM_BLACK
return
@@ -1069,6 +1070,7 @@ EventScript_VsSeekerChargingDone::
.include "data/scripts/move_tutors.inc"
.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/field_effect_scripts.s b/data/field_effect_scripts.s
index 43f42225963a..baa0ddb5037f 100644
--- a/data/field_effect_scripts.s
+++ b/data/field_effect_scripts.s
@@ -76,6 +76,9 @@ gFieldEffectScriptPointers::
.4byte gFldEffScript_UseVsSeeker @ FLDEFF_USE_VS_SEEKER
.4byte gFldEffScript_XIcon @ FLDEFF_X_ICON
.4byte gFldEffScript_DoubleExclMarkIcon @ FLDEFF_DOUBLE_EXCL_MARK_ICON
+ .4byte gFieldEffectScript_TracksSlither @ FLDEFF_TRACKS_SLITHER
+ .4byte gFieldEffectScript_TracksBug @ FLDEFF_TRACKS_BUG
+ .4byte gFieldEffectScript_TracksSpot @ FLDEFF_TRACKS_SPOT
gFieldEffectScript_ExclamationMarkIcon1::
field_eff_callnative FldEff_ExclamationMarkIcon
@@ -359,3 +362,15 @@ gFldEffScript_XIcon::
gFldEffScript_DoubleExclMarkIcon::
field_eff_callnative FldEff_DoubleExclMarkIcon
field_eff_end
+
+gFieldEffectScript_TracksBug::
+ field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_TracksBug
+ field_eff_end
+
+gFieldEffectScript_TracksSpot::
+ field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_TracksSpot
+ field_eff_end
+
+gFieldEffectScript_TracksSlither::
+ field_eff_loadfadedpal_callnative gSpritePalette_GeneralFieldEffect0, FldEff_TracksSlither
+ field_eff_end
diff --git a/data/map_events.s b/data/map_events.s
index cfa5799d37c0..729f9725dfef 100644
--- a/data/map_events.s
+++ b/data/map_events.s
@@ -12,10 +12,10 @@
#include "constants/trainer_hill.h"
#include "constants/trainer_types.h"
#include "constants/berry.h"
+#include "constants/species.h"
.include "asm/macros.inc"
.include "constants/constants.inc"
.section .rodata
.include "data/maps/events.inc"
-
diff --git a/data/maps/BattleFrontier_BattleArenaLobby/scripts.inc b/data/maps/BattleFrontier_BattleArenaLobby/scripts.inc
index f87439d95e76..61dcb79e999c 100644
--- a/data/maps/BattleFrontier_BattleArenaLobby/scripts.inc
+++ b/data/maps/BattleFrontier_BattleArenaLobby/scripts.inc
@@ -1,1154 +1,579 @@
-# 1 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-
-# 2 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.set LOCALID_ATTENDANT, 1
-# 3 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 4 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_MapScripts::
-# 5 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
map_script MAP_SCRIPT_ON_FRAME_TABLE, BattleFrontier_BattleArenaLobby_OnFrame
-# 6 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, BattleFrontier_BattleArenaLobby_OnWarp
-# 7 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.byte 0
-# 8 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 9 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_OnWarp:
-# 10 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
map_script_2 VAR_TEMP_1, 0, BattleFrontier_BattleArenaLobby_EventScript_TurnPlayerNorth
-# 11 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.2byte 0
-# 12 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 13 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_EventScript_TurnPlayerNorth::
-# 14 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
setvar VAR_TEMP_1, 1
-# 15 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
turnobject OBJ_EVENT_ID_PLAYER, DIR_NORTH
-# 16 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
end
-# 17 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 18 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_OnFrame:
-# 19 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
map_script_2 VAR_TEMP_CHALLENGE_STATUS, 0, BattleFrontier_BattleArenaLobby_EventScript_GetChallengeStatus
-# 20 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING, BattleFrontier_BattleArenaLobby_EventScript_QuitWithoutSaving
-# 21 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_PAUSED, BattleFrontier_BattleArenaLobby_EventScript_ResumeChallenge
-# 22 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_WON, BattleFrontier_BattleArenaLobby_EventScript_WonChallenge
-# 23 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_LOST, BattleFrontier_BattleArenaLobby_EventScript_LostChallenge
-# 24 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.2byte 0
-# 25 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 26 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_EventScript_GetChallengeStatus::
-# 27 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
frontier_getstatus
-# 28 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
end
-# 29 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 30 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_EventScript_QuitWithoutSaving::
-# 31 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
lockall
-# 32 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
msgbox BattleFrontier_BattleArenaLobby_Text_DidntSaveBeforeShuttingDown, MSGBOX_DEFAULT
-# 33 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
closemessage
-# 34 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
arena_set ARENA_DATA_WIN_STREAK, 0
-# 35 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
arena_set ARENA_DATA_WIN_STREAK_ACTIVE, FALSE
-# 36 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
frontier_set FRONTIER_DATA_CHALLENGE_STATUS, 0
-# 37 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 255
-# 38 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
releaseall
-# 39 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
end
-# 40 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 41 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_EventScript_WonChallenge::
-# 42 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
lockall
-# 43 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
frontier_isbrain
-# 44 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattleArenaLobby_EventScript_DefeatedTycoon
-# 45 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
msgbox BattleFrontier_BattleArenaLobby_Text_CongratsOnSevenWins, MSGBOX_DEFAULT
-# 46 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
goto BattleFrontier_BattleArenaLobby_EventScript_GiveBattlePoints
-# 47 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 48 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_EventScript_DefeatedTycoon::
-# 49 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
msgbox BattleFrontier_BattleArenaLobby_Text_CongratsOnDefeatingTycoon, MSGBOX_DEFAULT
-# 50 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_EventScript_GiveBattlePoints::
-# 51 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
msgbox BattleFrontier_BattleArenaLobby_Text_PleaseAcceptBattlePoints, MSGBOX_DEFAULT
-# 52 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
frontier_givepoints
-# 53 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
msgbox BattleFrontier_Text_ObtainedXBattlePoints, MSGBOX_GETPOINTS
-# 54 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
message BattleFrontier_BattleArenaLobby_Text_RecordAchievement
-# 55 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
waitmessage
-# 56 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
call BattleFrontier_BattleArenaLobby_EventScript_SaveAfterChallenge
-# 57 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
msgbox BattleFrontier_BattleArenaLobby_Text_AwaitAnotherChallenge2, MSGBOX_DEFAULT
-# 58 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
closemessage
-# 59 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 255
-# 60 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
releaseall
-# 61 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
end
-# 62 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 63 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_EventScript_LostChallenge::
-# 64 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
lockall
-# 65 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
message BattleFrontier_BattleArenaLobby_Text_ThankYouWaitWhileSave
-# 66 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
waitmessage
-# 67 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
arena_set ARENA_DATA_WIN_STREAK_ACTIVE, FALSE
-# 68 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
call BattleFrontier_BattleArenaLobby_EventScript_SaveAfterChallenge
-# 69 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
msgbox BattleFrontier_BattleArenaLobby_Text_AwaitAnotherChallenge2, MSGBOX_DEFAULT
-# 70 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
closemessage
-# 71 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 255
-# 72 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
releaseall
-# 73 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
end
-# 74 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 75 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_EventScript_SaveAfterChallenge::
-# 76 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
frontier_checkairshow
-# 77 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
special LoadPlayerParty
-# 78 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
special HealPlayerParty
-# 79 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
+ callnative UpdateFollowingPokemon
arena_save 0
-# 80 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
playse SE_SAVE
-# 81 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
waitse
-# 82 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
call BattleFrontier_EventScript_GetCantRecordBattle
-# 83 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattleArenaLobby_EventScript_EndSaveAfterChallenge
-# 84 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
message BattleFrontier_BattleArenaLobby_Text_RecordLastMatch
-# 85 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
waitmessage
-# 86 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
multichoicedefault 20, 8, MULTI_YESNO, 1, FALSE
-# 87 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
switch VAR_RESULT
-# 88 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
case 1, BattleFrontier_BattleArenaLobby_EventScript_EndSaveAfterChallenge
-# 89 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
case 0, BattleFrontier_BattleArenaLobby_EventScript_RecordMatch
-# 90 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattleArenaLobby_EventScript_EndSaveAfterChallenge
-# 91 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 92 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_EventScript_RecordMatch::
-# 93 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
call BattleFrontier_EventScript_SaveBattle
-# 94 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_EventScript_EndSaveAfterChallenge::
-# 95 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
return
-# 96 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 97 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_EventScript_ResumeChallenge::
-# 98 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
lockall
-# 99 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
message BattleFrontier_BattleArenaLobby_Text_LookingForwardToArrivalSaveGame
-# 100 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
waitmessage
-# 101 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
arena_save CHALLENGE_STATUS_SAVING
-# 102 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
playse SE_SAVE
-# 103 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
waitse
-# 104 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
frontier_set FRONTIER_DATA_PAUSED, FALSE
-# 105 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 255
-# 106 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
goto BattleFrontier_BattleArenaLobby_EventScript_EnterChallenge
-# 107 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 108 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_EventScript_Attendant::
-# 109 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
lock
-# 110 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
faceplayer
-# 111 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
setvar VAR_FRONTIER_FACILITY, FRONTIER_FACILITY_ARENA
-# 112 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
setvar VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES
-# 113 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
special SavePlayerParty
-# 114 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
msgbox BattleFrontier_BattleArenaLobby_Text_WelcomeToBattleArena, MSGBOX_DEFAULT
-# 115 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_EventScript_AskTakeChallenge::
-# 116 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
message BattleFrontier_BattleArenaLobby_Text_WishToTakeChallenge
-# 117 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
waitmessage
-# 118 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
multichoice 17, 6, MULTI_CHALLENGEINFO, FALSE
-# 119 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
switch VAR_RESULT
-# 120 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
case 0, BattleFrontier_BattleArenaLobby_EventScript_TryEnterChallenge
-# 121 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
case 1, BattleFrontier_BattleArenaLobby_EventScript_ExplainChallenge
-# 122 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
case 2, BattleFrontier_BattleArenaLobby_EventScript_CancelChallenge
-# 123 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattleArenaLobby_EventScript_CancelChallenge
-# 124 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 125 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_EventScript_TryEnterChallenge::
-# 126 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
message BattleFrontier_BattleArenaLobby_Text_WhichLevelMode
-# 127 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
waitmessage
-# 128 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
multichoice 17, 6, MULTI_LEVEL_MODE, FALSE
-# 129 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
switch VAR_RESULT
-# 130 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
case FRONTIER_LVL_TENT, BattleFrontier_BattleArenaLobby_EventScript_CancelChallenge
-# 131 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattleArenaLobby_EventScript_CancelChallenge
-# 132 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
frontier_checkineligible
-# 133 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
goto_if_eq VAR_0x8004, TRUE, BattleFrontier_BattleArenaLobby_EventScript_NotEnoughValidMons
-# 134 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
frontier_set FRONTIER_DATA_LVL_MODE, VAR_RESULT
-# 135 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
msgbox BattleFrontier_BattleArenaLobby_Text_SelectThreeMons, MSGBOX_DEFAULT
-# 136 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
fadescreen FADE_TO_BLACK
-# 137 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
+ callnative RemoveFollowingPokemon
call BattleFrontier_EventScript_GetLvlMode
-# 138 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
copyvar VAR_0x8004, VAR_RESULT
-# 139 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
setvar VAR_0x8005, FRONTIER_PARTY_SIZE
-# 140 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
special ChoosePartyForBattleFrontier
-# 141 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
waitstate
-# 142 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleArenaLobby_EventScript_LoadPartyAndCancelChallenge
-# 143 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
msgbox BattleFrontier_BattleArenaLobby_Text_OkayToSave, MSGBOX_YESNO
-# 144 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
switch VAR_RESULT
-# 145 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
case NO, BattleFrontier_BattleArenaLobby_EventScript_LoadPartyAndCancelChallenge
-# 146 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
case YES, BattleFrontier_BattleArenaLobby_EventScript_SaveBeforeChallenge
-# 147 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattleArenaLobby_EventScript_LoadPartyAndCancelChallenge
-# 148 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 149 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_EventScript_SaveBeforeChallenge::
-# 150 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 0
-# 151 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
frontier_set FRONTIER_DATA_SELECTED_MON_ORDER
-# 152 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
arena_init
-# 153 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
arena_set ARENA_DATA_WIN_STREAK_ACTIVE, TRUE
-# 154 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
frontier_set FRONTIER_DATA_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING
-# 155 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
frontier_set FRONTIER_DATA_PAUSED, FALSE
-# 156 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
special LoadPlayerParty
-# 157 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
closemessage
-# 158 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
delay 2
-# 159 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
call Common_EventScript_SaveGame
-# 160 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 255
-# 161 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleArenaLobby_EventScript_CancelChallengeSaveFailed
-# 162 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_EventScript_EnterChallenge::
-# 163 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
special SavePlayerParty
-# 164 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
frontier_setpartyorder FRONTIER_PARTY_SIZE
-# 165 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
msgbox BattleFrontier_BattleArenaLobby_Text_GuideYouToArena, MSGBOX_DEFAULT
-# 166 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
closemessage
-# 167 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
frontier_get FRONTIER_DATA_LVL_MODE
-# 168 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
call_if_eq VAR_RESULT, FRONTIER_LVL_50, BattleFrontier_BattleArenaLobby_EventScript_WalkToDoorLv50
-# 169 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
call_if_eq VAR_RESULT, FRONTIER_LVL_OPEN, BattleFrontier_BattleArenaLobby_EventScript_WalkToDoorLvOpen
-# 170 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
warp MAP_BATTLE_FRONTIER_BATTLE_ARENA_CORRIDOR, 9, 13
-# 171 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 0
-# 172 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
waitstate
-# 173 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
end
-# 174 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 175 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_EventScript_ExplainChallenge::
-# 176 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
msgbox BattleFrontier_BattleArenaLobby_Text_ExplainChallenge, MSGBOX_DEFAULT
-# 177 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
goto BattleFrontier_BattleArenaLobby_EventScript_AskTakeChallenge
-# 178 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 179 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_EventScript_NotEnoughValidMons::
-# 180 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
switch VAR_RESULT
-# 181 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
case FRONTIER_LVL_50, BattleFrontier_BattleArenaLobby_EventScript_NotEnoughValidMonsLv50
-# 182 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
case FRONTIER_LVL_OPEN, BattleFrontier_BattleArenaLobby_EventScript_NotEnoughValidMonsLvOpen
-# 183 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 184 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_EventScript_NotEnoughValidMonsLv50::
-# 185 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
msgbox BattleFrontier_BattleArenaLobby_Text_NotEnoughValidMonsLv50, MSGBOX_DEFAULT
-# 186 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
goto BattleFrontier_BattleArenaLobby_EventScript_EndCancelChallenge
-# 187 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 188 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_EventScript_NotEnoughValidMonsLvOpen::
-# 189 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
msgbox BattleFrontier_BattleArenaLobby_Text_NotEnoughValidMonsLvOpen, MSGBOX_DEFAULT
-# 190 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
goto BattleFrontier_BattleArenaLobby_EventScript_EndCancelChallenge
-# 191 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 192 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_EventScript_CancelChallengeSaveFailed::
-# 193 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
frontier_set FRONTIER_DATA_CHALLENGE_STATUS, 0
-# 194 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
goto BattleFrontier_BattleArenaLobby_EventScript_CancelChallenge
-# 195 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 196 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_EventScript_LoadPartyAndCancelChallenge::
-# 197 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
special LoadPlayerParty
-# 198 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
+ callnative UpdateFollowingPokemon
BattleFrontier_BattleArenaLobby_EventScript_CancelChallenge::
-# 199 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
msgbox BattleFrontier_BattleArenaLobby_Text_AwaitAnotherChallenge, MSGBOX_DEFAULT
-# 200 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_EventScript_EndCancelChallenge::
-# 201 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
release
-# 202 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
end
-# 203 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 204 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_EventScript_WalkToDoorLv50::
-# 205 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
applymovement LOCALID_ATTENDANT, BattleFrontier_BattleArenaLobby_Movement_AttendantWalkToLeftDoor
-# 206 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, BattleFrontier_BattleArenaLobby_Movement_PlayerWalkToLeftDoor
-# 207 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
waitmovement 0
-# 208 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
opendoor 2, 2
-# 209 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
waitdooranim
-# 210 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
applymovement LOCALID_ATTENDANT, BattleFrontier_BattleArenaLobby_Movement_AttendantEnterDoor
-# 211 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, BattleFrontier_BattleArenaLobby_Movement_PlayerEnterDoor
-# 212 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
waitmovement 0
-# 213 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
closedoor 2, 2
-# 214 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
waitdooranim
-# 215 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
return
-# 216 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 217 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_Movement_AttendantWalkToLeftDoor:
-# 218 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
walk_up
-# 219 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
walk_up
-# 220 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
walk_up
-# 221 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
walk_left
-# 222 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
walk_left
-# 223 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
walk_left
-# 224 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
walk_left
-# 225 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
walk_left
-# 226 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
walk_up
-# 227 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
step_end
-# 228 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 229 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_Movement_AttendantEnterDoor:
-# 230 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
walk_up
-# 231 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
set_invisible
-# 232 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
step_end
-# 233 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 234 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_Movement_PlayerWalkToLeftDoor:
-# 235 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
walk_up
-# 236 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
walk_up
-# 237 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
walk_up
-# 238 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
walk_up
-# 239 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
walk_left
-# 240 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
walk_left
-# 241 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
walk_left
-# 242 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
walk_left
-# 243 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
walk_left
-# 244 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
walk_in_place_faster_up
-# 245 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
step_end
-# 246 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 247 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_Movement_PlayerEnterDoor:
-# 248 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
walk_up
-# 249 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
walk_up
-# 250 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
set_invisible
-# 251 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
step_end
-# 252 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 253 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_EventScript_WalkToDoorLvOpen::
-# 254 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
applymovement LOCALID_ATTENDANT, BattleFrontier_BattleArenaLobby_Movement_AttendantWalkToRightDoor
-# 255 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, BattleFrontier_BattleArenaLobby_Movement_PlayerWalkToRightDoor
-# 256 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
waitmovement 0
-# 257 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
opendoor 11, 2
-# 258 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
waitdooranim
-# 259 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
applymovement LOCALID_ATTENDANT, BattleFrontier_BattleArenaLobby_Movement_AttendantEnterDoor
-# 260 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, BattleFrontier_BattleArenaLobby_Movement_PlayerEnterDoor
-# 261 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
waitmovement 0
-# 262 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
closedoor 11, 2
-# 263 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
waitdooranim
-# 264 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
return
-# 265 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 266 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_Movement_AttendantWalkToRightDoor:
-# 267 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
walk_up
-# 268 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
walk_up
-# 269 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
walk_up
-# 270 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
walk_right
-# 271 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
walk_right
-# 272 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
walk_right
-# 273 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
walk_right
-# 274 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
walk_up
-# 275 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
step_end
-# 276 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 277 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_Movement_PlayerWalkToRightDoor:
-# 278 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
walk_up
-# 279 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
walk_up
-# 280 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
walk_up
-# 281 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
walk_up
-# 282 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
walk_right
-# 283 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
walk_right
-# 284 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
walk_right
-# 285 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
walk_right
-# 286 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
walk_in_place_faster_up
-# 287 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
step_end
-# 288 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 289 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_EventScript_ShowResults::
-# 290 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
lockall
-# 291 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
frontier_results FRONTIER_FACILITY_ARENA
-# 292 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
waitbuttonpress
-# 293 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
special RemoveRecordsWindow
-# 294 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
releaseall
-# 295 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
end
-# 296 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 297 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_EventScript_Youngster::
-# 298 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
msgbox BattleFrontier_BattleArenaLobby_Text_BadIdeaToNotAttack, MSGBOX_NPC
-# 299 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
end
-# 300 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 301 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_EventScript_Man::
-# 302 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
msgbox BattleFrontier_BattleArenaLobby_Text_LandingHitsWorked, MSGBOX_NPC
-# 303 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
end
-# 304 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 305 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_EventScript_Camper::
-# 306 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
msgbox BattleFrontier_BattleArenaLobby_Text_MatchWasDeclaredDraw, MSGBOX_NPC
-# 307 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
end
-# 308 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 309 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_EventScript_Woman::
-# 310 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
msgbox BattleFrontier_BattleArenaLobby_Text_OrderOfMonsImportant, MSGBOX_NPC
-# 311 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
end
-# 312 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 313 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_EventScript_RulesBoard::
-# 314 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
lockall
-# 315 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
msgbox BattleFrontier_BattleArenaLobby_Text_RulesAreListed, MSGBOX_DEFAULT
-# 316 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
goto BattleFrontier_BattleArenaLobby_EventScript_ReadRulesBoard
-# 317 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
end
-# 318 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 319 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_EventScript_ReadRulesBoard::
-# 320 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
message BattleFrontier_BattleArenaLobby_Text_ReadWhichHeading
-# 321 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
waitmessage
-# 322 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
multichoice 17, 2, MULTI_BATTLE_ARENA_RULES, FALSE
-# 323 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
switch VAR_RESULT
-# 324 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
case 0, BattleFrontier_BattleArenaLobby_EventScript_BattleRules
-# 325 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
case 1, BattleFrontier_BattleArenaLobby_EventScript_MindRules
-# 326 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
case 2, BattleFrontier_BattleArenaLobby_EventScript_SkillRules
-# 327 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
case 3, BattleFrontier_BattleArenaLobby_EventScript_BodyRules
-# 328 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
case 4, BattleFrontier_BattleArenaLobby_EventScript_ExitRules
-# 329 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattleArenaLobby_EventScript_ExitRules
-# 330 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
end
-# 331 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 332 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_EventScript_BattleRules::
-# 333 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
msgbox BattleFrontier_BattleArenaLobby_Text_ExplainBattleRules, MSGBOX_DEFAULT
-# 334 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
goto BattleFrontier_BattleArenaLobby_EventScript_ReadRulesBoard
-# 335 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
end
-# 336 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 337 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_EventScript_MindRules::
-# 338 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
msgbox BattleFrontier_BattleArenaLobby_Text_ExplainMindRules, MSGBOX_DEFAULT
-# 339 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
goto BattleFrontier_BattleArenaLobby_EventScript_ReadRulesBoard
-# 340 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
end
-# 341 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 342 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_EventScript_SkillRules::
-# 343 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
msgbox BattleFrontier_BattleArenaLobby_Text_ExplainSkillRules, MSGBOX_DEFAULT
-# 344 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
goto BattleFrontier_BattleArenaLobby_EventScript_ReadRulesBoard
-# 345 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
end
-# 346 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 347 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_EventScript_BodyRules::
-# 348 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
msgbox BattleFrontier_BattleArenaLobby_Text_ExplainBodyRules, MSGBOX_DEFAULT
-# 349 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
goto BattleFrontier_BattleArenaLobby_EventScript_ReadRulesBoard
-# 350 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
end
-# 351 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 352 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_EventScript_ExitRules::
-# 353 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
releaseall
-# 354 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
end
-# 355 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 356 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_Text_WelcomeToBattleArena:
-# 357 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "Where the battling spirit of TRAINERS\n"
-# 358 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "is put to the test!\p"
-# 359 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "I welcome you to the BATTLE ARENA!\p"
-# 360 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "I am your guide to the Set KO Tourney!$"
-# 361 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 362 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_Text_WishToTakeChallenge:
-# 363 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "Now, do you wish to take\n"
-# 364 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "the BATTLE ARENA challenge?$"
-# 365 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 366 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_Text_AwaitAnotherChallenge:
-# 367 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "We await your challenge on\n"
-# 368 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "another occasion!$"
-# 369 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 370 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_Text_ExplainChallenge:
-# 371 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "In the BATTLE ARENA, we undertake\n"
-# 372 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "the Set KO Tourney.\p"
-# 373 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "All participants enter with a team of\n"
-# 374 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "three POKéMON.\p"
-# 375 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "The three POKéMON must be lined up in\n"
-# 376 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "the order in which they are to appear.\p"
-# 377 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "During battle, the POKéMON will appear\n"
-# 378 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "one at a time in the preset order.\p"
-# 379 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "Once a POKéMON enters battle, it must\n"
-# 380 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "remain out until the match is decided.\p"
-# 381 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "If a match remains undecided in\n"
-# 382 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "three turns, it goes to judging.\p"
-# 383 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "If you wish to interrupt your challenge,\n"
-# 384 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "please save the game.\p"
-# 385 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "If you don't save, you will not be able\n"
-# 386 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "to continue with your challenge.\p"
-# 387 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "If you pull off the feat of beating\n"
-# 388 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "seven TRAINERS in succession,\l"
-# 389 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "we will present you with Battle Points.$"
-# 390 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 391 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_Text_OkayToSave:
-# 392 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "Before showing you to the BATTLE\n"
-# 393 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "ARENA, you must save. Is that okay?$"
-# 394 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 395 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_Text_WhichLevelMode:
-# 396 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "The BATTLE ARENA offers two levels\n"
-# 397 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "of challenge, Level 50 and Open Level.\l"
-# 398 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "Which is your choice?$"
-# 399 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 400 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_Text_SelectThreeMons:
-# 401 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "Very well, now select your\n"
-# 402 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "three POKéMON, please.$"
-# 403 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 404 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_Text_NotEnoughValidMonsLvOpen:
-# 405 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "My dear challenger!\p"
-# 406 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "You do not have the three POKéMON\n"
-# 407 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "required for entry.\p"
-# 408 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "To qualify, you must bring three\n"
-# 409 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "different kinds of POKéMON.\p"
-# 410 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "They also must not hold the same\n"
-# 411 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "kinds of items.\p"
-# 412 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "EGGS{STR_VAR_1} ineligible.\p"
-# 413 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "When you have made your preparations,\n"
-# 414 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "please do return.$"
-# 415 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 416 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_Text_NotEnoughValidMonsLv50:
-# 417 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "My dear challenger!\p"
-# 418 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "You do not have the three POKéMON\n"
-# 419 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "required for entry.\p"
-# 420 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "To qualify, you must bring three\n"
-# 421 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "different kinds of POKéMON.\p"
-# 422 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "The three different POKéMON\n"
-# 423 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "must all be Level 50 or lower.\p"
-# 424 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "They also must not hold the same\n"
-# 425 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "kinds of items.\p"
-# 426 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "EGGS{STR_VAR_1} ineligible.\p"
-# 427 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "When you have made your preparations,\n"
-# 428 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "please do return.$"
-# 429 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 430 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_Text_GuideYouToArena:
-# 431 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "I shall now guide you to\n"
-# 432 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "the BATTLE ARENA.$"
-# 433 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 434 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_Text_DidntSaveBeforeShuttingDown:
-# 435 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "My dear challenger!\p"
-# 436 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "You did not save the game before\n"
-# 437 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "shutting down, did you?\p"
-# 438 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "It is unfortunate, but that has\n"
-# 439 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "resulted in your disqualification\l"
-# 440 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "from your challenge.\p"
-# 441 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "You may, of course, start with a fresh\n"
-# 442 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "challenge.$"
-# 443 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 444 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_Text_CongratsOnSevenWins:
-# 445 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "We congratulate you for your splendid\n"
-# 446 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "string of wins over seven TRAINERS!$"
-# 447 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 448 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_Text_RecordAchievement:
-# 449 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "Your achievement will be recorded.\n"
-# 450 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "Please wait while I save the game.$"
-# 451 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 452 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
@ Unused
-# 453 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_Text_PresentYouWithPrize:
-# 454 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "In commemoration of your 7-win streak,\n"
-# 455 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "we present you with this prize.$"
-# 456 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 457 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
@ Unused
-# 458 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_Text_ReceivedPrize:
-# 459 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "{PLAYER} received the prize\n"
-# 460 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "{STR_VAR_1}.$"
-# 461 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 462 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
@ Unused
-# 463 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_Text_BagFullReturnForPrize:
-# 464 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "Oh?\n"
-# 465 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "Your BAG seems to be full.\p"
-# 466 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "I urge you to clear space and\n"
-# 467 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "return for your prize.$"
-# 468 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 469 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_Text_ThankYouWaitWhileSave:
-# 470 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "Thank you so much for participating!\p"
-# 471 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "Please wait while I save the game.$"
-# 472 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 473 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_Text_AwaitAnotherChallenge2:
-# 474 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "We await your challenge on\n"
-# 475 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "another occasion!$"
-# 476 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 477 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_Text_LookingForwardToArrivalSaveGame:
-# 478 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "We have been looking forward to\n"
-# 479 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "your arrival.\p"
-# 480 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "Before I show you to the BATTLE\n"
-# 481 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "ARENA, I must save the game.\l"
-# 482 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "Please wait.$"
-# 483 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 484 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_Text_RecordLastMatch:
-# 485 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "Shall I record your last BATTLE ARENA\n"
-# 486 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "match on your FRONTIER PASS?$"
-# 487 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 488 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_Text_BadIdeaToNotAttack:
-# 489 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "I lost on the REFEREE's decision…\p"
-# 490 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "I don't think it was a good idea to only\n"
-# 491 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "use defensive moves and not attack…$"
-# 492 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 493 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_Text_LandingHitsWorked:
-# 494 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "I won in judging!\p"
-# 495 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "Landing hits consistently on\n"
-# 496 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "the opponent's POKéMON worked!$"
-# 497 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 498 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_Text_MatchWasDeclaredDraw:
-# 499 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "Our match was declared a draw.\p"
-# 500 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "When we ran out of time, both my\n"
-# 501 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "POKéMON and the opponent's had about\l"
-# 502 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "the same amount of HP left.$"
-# 503 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 504 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_Text_OrderOfMonsImportant:
-# 505 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "In the BATTLE ARENA, the order of\n"
-# 506 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "POKéMON is totally important.\p"
-# 507 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "For example, if your first POKéMON\n"
-# 508 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "has certain type disadvantages,\l"
-# 509 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "try making your second POKéMON one\l"
-# 510 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "with moves that are super effective\l"
-# 511 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "against the first one.\p"
-# 512 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "I think that will be a good way of\n"
-# 513 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "making an effective team.$"
-# 514 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 515 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_Text_RulesAreListed:
-# 516 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "The Set KO Tourney's rules are listed.$"
-# 517 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 518 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_Text_ReadWhichHeading:
-# 519 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "Which heading do you want to read?$"
-# 520 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 521 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_Text_ExplainBattleRules:
-# 522 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "The Set KO Tourney has special rules,\n"
-# 523 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "unlike standard battles.\p"
-# 524 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "First, one battle lasts only\n"
-# 525 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "three turns.\p"
-# 526 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "If the outcome is not decided after\n"
-# 527 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "three turns, it goes to judging.\p"
-# 528 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "The REFEREE will choose the winner\n"
-# 529 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "based on how the POKéMON battled.\p"
-# 530 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "Also, a POKéMON cannot be switched out\n"
-# 531 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "until its battle's outcome is decided.$"
-# 532 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 533 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_Text_ExplainMindRules:
-# 534 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "The first judging factor is “Mind.”\n"
-# 535 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "This factor evaluates how aggressive\l"
-# 536 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "the battlers were.\p"
-# 537 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "The judging is based on how often\n"
-# 538 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "the TRAINERS ordered the use of\l"
-# 539 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "offensive moves.$"
-# 540 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 541 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_Text_ExplainSkillRules:
-# 542 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "The second judging factor is “Skill.”\n"
-# 543 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "This factor evaluates how effectively\l"
-# 544 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "POKéMON moves were used.\p"
-# 545 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "If a move worked successfully,\n"
-# 546 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "the Skill rating goes up.\p"
-# 547 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "If a move failed, the Skill rating\n"
-# 548 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "is lowered.\p"
-# 549 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "If it was an offensive move, the Skill\n"
-# 550 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "rating goes up if the move was “super\l"
-# 551 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "effective” and goes down if it was\l"
-# 552 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "“not very effective.”\p"
-# 553 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "The Skill rating will not go up for\n"
-# 554 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "moves such as PROTECT and DETECT.\p"
-# 555 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "If the opponent used PROTECT or\n"
-# 556 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "DETECT, and your POKéMON failed to\l"
-# 557 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "hit with a move, its Skill rating will not\l"
-# 558 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "go down.$"
-# 559 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 560 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_Text_ExplainBodyRules:
-# 561 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "The third judging factor is “Body.”\n"
-# 562 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "This factor is based on how much HP\l"
-# 563 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "remained at the end of a battle.\p"
-# 564 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "The rating takes into account how much\n"
-# 565 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "HP a POKéMON had at the start of\l"
-# 566 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "battle, and what remained at the end.$"
-# 567 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 568 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_Text_CongratsOnDefeatingTycoon:
-# 569 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "A victory snatched from the ARENA\n"
-# 570 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "TYCOON, and a seven-TRAINER sweep!\p"
-# 571 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "We congratulate you on your most\n"
-# 572 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "splendid challenge!$"
-# 573 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
-# 574 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
BattleFrontier_BattleArenaLobby_Text_PleaseAcceptBattlePoints:
-# 575 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "My dear challenger, in recognition of\n"
-# 576 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "your indefatigable spirit, please\l"
-# 577 "data/maps/BattleFrontier_BattleArenaLobby/scripts.pory"
.string "accept these Battle Point(s).$"
diff --git a/data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.inc b/data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.inc
index ac3afad5663c..6279cacf2718 100644
--- a/data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.inc
+++ b/data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.inc
@@ -1,2362 +1,1181 @@
-# 1 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-
-# 2 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.set LOCALID_ANNOUNCER, 1
-# 3 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.set LOCALID_AUDIENCE_TWIN, 2
-# 4 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.set LOCALID_AUDIENCE_WALKING, 6
-# 5 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.set LOCALID_REFEREE, 9
-# 6 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.set LOCALID_PLAYER, 13
-# 7 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.set LOCALID_OPPONENT, 15
-# 8 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 9 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.set NO_DRAW, 0
-# 10 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.set DRAW_TRAINER, 1
-# 11 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.set DRAW_TUCKER, 2
-# 12 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 13 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_MapScripts::
-# 14 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
map_script MAP_SCRIPT_ON_TRANSITION, BattleFrontier_BattleDomeBattleRoom_OnTransition
-# 15 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
map_script MAP_SCRIPT_ON_FRAME_TABLE, BattleFrontier_BattleDomeBattleRoom_OnFrame
-# 16 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, BattleFrontier_BattleDomeBattleRoom_OnWarp
-# 17 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
map_script MAP_SCRIPT_ON_RESUME, BattleFrontier_BattleDomeBattleRoom_OnResume
-# 18 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.byte 0
-# 19 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 20 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_OnTransition:
-# 21 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
+ setflag FLAG_TEMP_HIDE_FOLLOWER
dome_setopponentgfx
-# 22 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
frontier_get FRONTIER_DATA_BATTLE_NUM
-# 23 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
copyvar VAR_TEMP_F, VAR_RESULT
-# 24 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
call_if_eq VAR_RESULT, DOME_ROUND1, BattleFrontier_BattleDomeBattleRoom_EventScript_SetWalkingAudienceMemberPos
-# 25 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
call BattleFrontier_BattleDomeBattleRoom_EventScript_SetPlayerGfx
-# 26 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
end
-# 27 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 28 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_SetPlayerGfx::
-# 29 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
checkplayergender
-# 30 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
goto_if_eq VAR_RESULT, MALE, BattleFrontier_BattleDomeBattleRoom_EventScript_SetPlayerGfxMale
-# 31 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
goto_if_eq VAR_RESULT, FEMALE, BattleFrontier_BattleDomeBattleRoom_EventScript_SetPlayerGfxFemale
-# 32 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
return
-# 33 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 34 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_SetPlayerGfxMale::
-# 35 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
setvar VAR_OBJ_GFX_ID_1, OBJ_EVENT_GFX_RIVAL_BRENDAN_NORMAL
-# 36 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
return
-# 37 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 38 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_SetPlayerGfxFemale::
-# 39 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
setvar VAR_OBJ_GFX_ID_1, OBJ_EVENT_GFX_RIVAL_MAY_NORMAL
-# 40 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
return
-# 41 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 42 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_OnFrame:
-# 43 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
map_script_2 VAR_TEMP_0, 0, BattleFrontier_BattleDomeBattleRoom_EventScript_EnterRoom
-# 44 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.2byte 0
-# 45 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 46 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_EnterRoom::
-# 47 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
lockall
-# 48 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
call BattleFrontier_BattleDomeBattleRoom_EventScript_GetRoundNum
-# 49 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
call_if_eq VAR_RESULT, DOME_ROUND1, BattleFrontier_BattleDomeBattleRoom_EventScript_TryDoAudienceMemberWalkToSeat
-# 50 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
applymovement LOCALID_ANNOUNCER, Common_Movement_WalkInPlaceDown
-# 51 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitmovement 0
-# 52 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
call BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayer
-# 53 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
msgbox BattleFrontier_BattleDomeBattleRoom_Text_PlayerHasEnteredDome, MSGBOX_DEFAULT
-# 54 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
closemessage
-# 55 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
showobjectat LOCALID_PLAYER, MAP_BATTLE_FRONTIER_BATTLE_DOME_BATTLE_ROOM
-# 56 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
goto_if_ne VAR_TEMP_F, DOME_FINAL, BattleFrontier_BattleDomeBattleRoom_EventScript_PlayerEnter
-# 57 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
goto_if_ne VAR_TEMP_E, FRONTIER_BRAIN_NOT_READY, BattleFrontier_BattleDomeBattleRoom_EventScript_PlayerEnterForTucker
-# 58 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_PlayerEnter::
-# 59 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
applymovement LOCALID_PLAYER, BattleFrontier_BattleDomeBattleRoom_Movement_PlayerEnter
-# 60 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
goto BattleFrontier_BattleDomeBattleRoom_EventScript_AudienceReactToPlayer
-# 61 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 62 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_PlayerEnterForTucker::
-# 63 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
applymovement LOCALID_PLAYER, BattleFrontier_BattleDomeBattleRoom_Movement_PlayerEnterForTucker
-# 64 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_AudienceReactToPlayer::
-# 65 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
playse SE_M_ENCORE2
-# 66 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
call BattleFrontier_BattleDomeBattleRoom_EventScript_AudienceLookAround
-# 67 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitmovement 0
-# 68 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
goto_if_ne VAR_TEMP_F, DOME_FINAL, BattleFrontier_BattleDomeBattleRoom_EventScript_BattleOpponent
-# 69 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
goto_if_ne VAR_TEMP_E, FRONTIER_BRAIN_NOT_READY, BattleFrontier_BattleDomeBattleRoom_EventScript_AnnounceTucker
-# 70 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_BattleOpponent::
-# 71 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
dome_getopponentname
-# 72 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
msgbox BattleFrontier_BattleDomeBattleRoom_Text_PlayerVersusTrainer, MSGBOX_DEFAULT
-# 73 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
closemessage
-# 74 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
applymovement LOCALID_PLAYER, BattleFrontier_BattleDomeBattleRoom_Movement_PlayerStepForward
-# 75 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
applymovement LOCALID_OPPONENT, BattleFrontier_BattleDomeBattleRoom_Movement_OpponentStepForward
-# 76 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitmovement 0
-# 77 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
tower_getopponentintro 0
-# 78 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
msgbox gStringVar4, MSGBOX_DEFAULT
-# 79 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
closemessage
-# 80 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
dome_initopponentparty
-# 81 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
call BattleFrontier_BattleDomeBattleRoom_EventScript_DoDomeBattle
-# 82 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
setvar VAR_TEMP_2, NO_DRAW
-# 83 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
switch VAR_RESULT
-# 84 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
case B_OUTCOME_WON, BattleFrontier_BattleDomeBattleRoom_EventScript_DefeatedOpponent
-# 85 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
case B_OUTCOME_LOST, BattleFrontier_BattleDomeBattleRoom_EventScript_LostToOpponent
-# 86 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
case B_OUTCOME_FORFEITED, BattleFrontier_BattleDomeBattleRoom_EventScript_LostToOpponent
-# 87 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
setvar VAR_TEMP_2, DRAW_TRAINER
-# 88 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_Draw::
-# 89 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
msgbox BattleFrontier_BattleDomeBattleRoom_Text_RefereeDecisionPleaseWait, MSGBOX_DEFAULT
-# 90 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
closemessage
-# 91 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
playse SE_M_ENCORE2
-# 92 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
call BattleFrontier_BattleDomeBattleRoom_EventScript_AudienceLookAround
-# 93 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay 60
-# 94 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
applymovement LOCALID_REFEREE, BattleFrontier_BattleDomeBattleRoom_Movement_RefereeEnter
-# 95 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitmovement 0
-# 96 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
applymovement LOCALID_ANNOUNCER, BattleFrontier_BattleDomeBattleRoom_Movement_AnnouncerFaceLeft
-# 97 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitmovement 0
-# 98 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay 180
-# 99 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
applymovement LOCALID_REFEREE, BattleFrontier_BattleDomeBattleRoom_Movement_RefereeExit
-# 100 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitmovement 0
-# 101 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
goto_if_eq VAR_TEMP_2, DRAW_TUCKER, BattleFrontier_BattleDomeBattleRoom_EventScript_LostToOpponent @ Tucker always wins on a draw
-# 102 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
dome_compareseeds
-# 103 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
switch VAR_RESULT
-# 104 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
case 1, BattleFrontier_BattleDomeBattleRoom_EventScript_DefeatedOpponent
-# 105 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_LostToOpponent::
-# 106 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
applymovement LOCALID_ANNOUNCER, Common_Movement_WalkInPlaceDown
-# 107 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitmovement 0
-# 108 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
dome_getopponentname
-# 109 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
call_if_eq VAR_TEMP_2, NO_DRAW, BattleFrontier_BattleDomeBattleRoom_EventScript_OpponentWon
-# 110 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
call_if_eq VAR_TEMP_2, DRAW_TRAINER, BattleFrontier_BattleDomeBattleRoom_EventScript_OpponentWonDraw
-# 111 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
call_if_eq VAR_TEMP_2, DRAW_TUCKER, BattleFrontier_BattleDomeBattleRoom_EventScript_TuckerWonDraw
-# 112 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
playse SE_M_ENCORE2
-# 113 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
call BattleFrontier_BattleDomeBattleRoom_EventScript_AudienceLookAround
-# 114 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay 60
-# 115 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_LostTourney::
-# 116 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
dome_resolvewinners DOME_PLAYER_LOST_MATCH
-# 117 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_WarpToLobbyLost::
-# 118 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
frontier_set FRONTIER_DATA_CHALLENGE_STATUS, CHALLENGE_STATUS_LOST
-# 119 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
goto BattleFrontier_BattleDomeBattleRoom_EventScript_WarpToLobby
-# 120 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 121 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_OpponentWon::
-# 122 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
frontier_gettrainername STR_VAR_2
-# 123 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
message BattleFrontier_BattleDomeBattleRoom_Text_TrainerIsWinner
-# 124 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitmessage
-# 125 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
return
-# 126 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 127 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_OpponentWonDraw::
-# 128 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
frontier_gettrainername STR_VAR_1
-# 129 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
message BattleFrontier_BattleDomeBattleRoom_Text_RefereesDecidedWinnerTrainer
-# 130 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitmessage
-# 131 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
return
-# 132 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 133 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_TuckerWonDraw::
-# 134 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
message BattleFrontier_BattleDomeBattleRoom_Text_RefereesDecidedWinnerTucker
-# 135 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitmessage
-# 136 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
return
-# 137 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 138 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_DefeatedOpponent::
-# 139 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
applymovement LOCALID_ANNOUNCER, Common_Movement_WalkInPlaceDown
-# 140 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitmovement 0
-# 141 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
call_if_eq VAR_TEMP_2, NO_DRAW, BattleFrontier_BattleDomeBattleRoom_EventScript_PlayerWon
-# 142 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
call_if_eq VAR_TEMP_2, DRAW_TRAINER, BattleFrontier_BattleDomeBattleRoom_EventScript_PlayerWonDraw
-# 143 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
playse SE_M_ENCORE2
-# 144 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
call BattleFrontier_BattleDomeBattleRoom_EventScript_AudienceLookAround
-# 145 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay 60
-# 146 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
dome_getroundtext
-# 147 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
dome_resolvewinners DOME_PLAYER_WON_MATCH
-# 148 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
frontier_get FRONTIER_DATA_BATTLE_NUM
-# 149 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
addvar VAR_RESULT, 1
-# 150 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
frontier_set FRONTIER_DATA_BATTLE_NUM, VAR_RESULT
-# 151 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
switch VAR_RESULT
-# 152 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
case DOME_ROUNDS_COUNT, BattleFrontier_BattleDomeBattleRoom_EventScript_WonTourney
-# 153 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
setvar VAR_0x8006, 1
-# 154 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
warp MAP_BATTLE_FRONTIER_BATTLE_DOME_PRE_BATTLE_ROOM, 5, 3
-# 155 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitstate
-# 156 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 157 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_WonTourney::
-# 158 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
applymovement LOCALID_PLAYER, BattleFrontier_BattleDomeBattleRoom_Movement_PlayerApproachAudience
-# 159 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitmovement 0
-# 160 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
frontier_get FRONTIER_DATA_LVL_MODE
-# 161 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
switch VAR_RESULT
-# 162 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
case FRONTIER_LVL_OPEN, BattleFrontier_BattleDomeBattleRoom_EventScript_WonLvOpenTourney
-# 163 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
msgbox BattleFrontier_BattleDomeBattleRoom_Text_PlayerIsLv50Champ, MSGBOX_DEFAULT
-# 164 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
goto BattleFrontier_BattleDomeBattleRoom_EventScript_CelebrateWin
-# 165 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 166 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_WonLvOpenTourney::
-# 167 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
msgbox BattleFrontier_BattleDomeBattleRoom_Text_PlayerIsLvOpenChamp, MSGBOX_DEFAULT
-# 168 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_CelebrateWin::
-# 169 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
special DoDomeConfetti
-# 170 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
playse SE_M_ENCORE2
-# 171 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
call BattleFrontier_BattleDomeBattleRoom_EventScript_AudienceLookAround
-# 172 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay 60
-# 173 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
frontier_set FRONTIER_DATA_CHALLENGE_STATUS, CHALLENGE_STATUS_WON
-# 174 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
goto BattleFrontier_BattleDomeBattleRoom_EventScript_WarpToLobby
-# 175 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 176 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_PlayerWon::
-# 177 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
msgbox BattleFrontier_BattleDomeBattleRoom_Text_PlayerIsWinner, MSGBOX_DEFAULT
-# 178 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
return
-# 179 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 180 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_PlayerWonDraw::
-# 181 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
msgbox BattleFrontier_BattleDomeBattleRoom_Text_RefereesDecidedWinnerPlayer, MSGBOX_DEFAULT
-# 182 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
return
-# 183 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 184 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayer::
-# 185 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
dome_get DOME_DATA_ATTEMPTED_CHALLENGE
-# 186 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
goto_if_eq VAR_RESULT, FALSE, BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerFirstAttempt
-# 187 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
dome_get DOME_DATA_HAS_WON_CHALLENGE
-# 188 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
goto_if_eq VAR_RESULT, FALSE, BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerNeverWon
-# 189 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
dome_get DOME_DATA_WIN_STREAK_ACTIVE
-# 190 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
goto_if_eq VAR_RESULT, FALSE, BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerBrokenStreak
-# 191 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
goto BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerChampion
-# 192 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
return
-# 193 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 194 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerFirstAttempt::
-# 195 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
call BattleFrontier_BattleDomeBattleRoom_EventScript_GetRoundNum
-# 196 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
switch VAR_RESULT
-# 197 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
case DOME_ROUND1, BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerFirstAttemptRound1
-# 198 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
case DOME_ROUND2, BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerFirstAttemptRound2
-# 199 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
case DOME_SEMIFINAL, BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerFirstAttemptSemifinal
-# 200 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
case DOME_FINAL, BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerFirstAttemptFinal
-# 201 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
return
-# 202 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 203 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerFirstAttemptRound1::
-# 204 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
message BattleFrontier_BattleDomeBattleRoom_Text_BrightNewHope
-# 205 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitmessage
-# 206 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
return
-# 207 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 208 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerFirstAttemptRound2::
-# 209 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
message BattleFrontier_BattleDomeBattleRoom_Text_RisingStar
-# 210 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitmessage
-# 211 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
return
-# 212 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 213 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerFirstAttemptSemifinal::
-# 214 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
message BattleFrontier_BattleDomeBattleRoom_Text_WillTheyRaceToChampionship
-# 215 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitmessage
-# 216 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
return
-# 217 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 218 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerFirstAttemptFinal::
-# 219 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
message BattleFrontier_BattleDomeBattleRoom_Text_CanAchieveChampionFirstTry
-# 220 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitmessage
-# 221 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
return
-# 222 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 223 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerNeverWon::
-# 224 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
call BattleFrontier_BattleDomeBattleRoom_EventScript_GetRoundNum
-# 225 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
switch VAR_RESULT
-# 226 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
case DOME_ROUND1, BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerNeverWonRound1
-# 227 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
case DOME_ROUND2, BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerNeverWonRound2
-# 228 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
case DOME_SEMIFINAL, BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerNeverWonSemifinal
-# 229 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
case DOME_FINAL, BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerNeverWonFinal
-# 230 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
return
-# 231 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 232 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerNeverWonRound1::
-# 233 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
message BattleFrontier_BattleDomeBattleRoom_Text_CanLossBeAvenged
-# 234 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitmessage
-# 235 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
return
-# 236 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 237 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerNeverWonRound2::
-# 238 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
message BattleFrontier_BattleDomeBattleRoom_Text_OnFireForChampionship
-# 239 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitmessage
-# 240 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
return
-# 241 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 242 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerNeverWonSemifinal::
-# 243 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
message BattleFrontier_BattleDomeBattleRoom_Text_WinHereAdvancesToFinal
-# 244 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitmessage
-# 245 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
return
-# 246 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 247 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerNeverWonFinal::
-# 248 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
message BattleFrontier_BattleDomeBattleRoom_Text_WillLongHeldDreamComeTrue
-# 249 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitmessage
-# 250 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
return
-# 251 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 252 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerChampion::
-# 253 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
goto_if_ne VAR_TEMP_F, DOME_FINAL, BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerChampionNoTucker
-# 254 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
switch VAR_TEMP_E
-# 255 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
case FRONTIER_BRAIN_SILVER, BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerPreTuckerSilver
-# 256 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
case FRONTIER_BRAIN_GOLD, BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerPreTuckerGold
-# 257 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
case FRONTIER_BRAIN_STREAK, BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerPreTuckerSilver
-# 258 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
case FRONTIER_BRAIN_STREAK_LONG, BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerPreTuckerGold
-# 259 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerChampionNoTucker::
-# 260 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
call BattleFrontier_BattleDomeBattleRoom_EventScript_GetRoundNum
-# 261 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
switch VAR_RESULT
-# 262 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
case DOME_ROUND1, BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerChampionRound1
-# 263 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
case DOME_ROUND2, BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerChampionRound2
-# 264 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
case DOME_SEMIFINAL, BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerChampionSemifinal
-# 265 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
case DOME_FINAL, BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerChampionFinal
-# 266 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
return
-# 267 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 268 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerChampionRound1::
-# 269 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
message BattleFrontier_BattleDomeBattleRoom_Text_TheInvincibleChampion
-# 270 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitmessage
-# 271 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
return
-# 272 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 273 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerChampionRound2::
-# 274 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
message BattleFrontier_BattleDomeBattleRoom_Text_CanAnyoneHopeToBeatTrainer
-# 275 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitmessage
-# 276 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
return
-# 277 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 278 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerChampionSemifinal::
-# 279 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
message BattleFrontier_BattleDomeBattleRoom_Text_DoBattlesExistSolelyForTrainer
-# 280 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitmessage
-# 281 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
return
-# 282 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 283 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerChampionFinal::
-# 284 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
message BattleFrontier_BattleDomeBattleRoom_Text_CurrentChampAimingToRetainTitle
-# 285 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitmessage
-# 286 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
return
-# 287 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 288 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerPreTuckerSilver::
-# 289 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
msgbox BattleFrontier_BattleDomeBattleRoom_Text_FeelGlowOfTrueMaster, MSGBOX_DEFAULT
-# 290 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
return
-# 291 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 292 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerPreTuckerGold::
-# 293 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
msgbox BattleFrontier_BattleDomeBattleRoom_Text_CanWinStreakBeStretched, MSGBOX_DEFAULT
-# 294 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
return
-# 295 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 296 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerBrokenStreak::
-# 297 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
call BattleFrontier_BattleDomeBattleRoom_EventScript_GetRoundNum
-# 298 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
switch VAR_RESULT
-# 299 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
case DOME_ROUND1, BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerBrokenStreakRound1
-# 300 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
case DOME_ROUND2, BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerBrokenStreakRound2
-# 301 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
case DOME_SEMIFINAL, BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerBrokenStreakSemifinal
-# 302 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
case DOME_FINAL, BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerBrokenStreakFinal
-# 303 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
return
-# 304 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 305 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerBrokenStreakRound1::
-# 306 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
message BattleFrontier_BattleDomeBattleRoom_Text_FormerChampHasReturned
-# 307 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitmessage
-# 308 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
return
-# 309 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 310 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerBrokenStreakRound2::
-# 311 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
message BattleFrontier_BattleDomeBattleRoom_Text_FormerToughnessReturned
-# 312 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitmessage
-# 313 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
return
-# 314 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 315 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerBrokenStreakSemifinal::
-# 316 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
message BattleFrontier_BattleDomeBattleRoom_Text_WillDoExpectedAdvanceToFinals
-# 317 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitmessage
-# 318 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
return
-# 319 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 320 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_AnnouncePlayerBrokenStreakFinal::
-# 321 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
message BattleFrontier_BattleDomeBattleRoom_Text_WillFormerChampRegainGlory
-# 322 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitmessage
-# 323 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
return
-# 324 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 325 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_GetRoundNum::
-# 326 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
frontier_get FRONTIER_DATA_BATTLE_NUM
-# 327 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
return
-# 328 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 329 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_AnnounceTucker::
-# 330 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
switch VAR_TEMP_E
-# 331 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
case FRONTIER_BRAIN_SILVER, BattleFrontier_BattleDomeBattleRoom_EventScript_AnnounceTuckerSilver
-# 332 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
case FRONTIER_BRAIN_GOLD, BattleFrontier_BattleDomeBattleRoom_EventScript_AnnounceTuckerGold
-# 333 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
case FRONTIER_BRAIN_STREAK, BattleFrontier_BattleDomeBattleRoom_EventScript_AnnounceTuckerSilver
-# 334 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
case FRONTIER_BRAIN_STREAK_LONG, BattleFrontier_BattleDomeBattleRoom_EventScript_AnnounceTuckerGold
-# 335 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 336 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_AnnounceTuckerSilver::
-# 337 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
msgbox BattleFrontier_BattleDomeBattleRoom_Text_MakeWayForDomeAceTucker, MSGBOX_DEFAULT
-# 338 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
goto BattleFrontier_BattleDomeBattleRoom_EventScript_TuckerEnter
-# 339 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 340 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_AnnounceTuckerGold::
-# 341 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
msgbox BattleFrontier_BattleDomeBattleRoom_Text_LegendHasReturnedDomeAceTucker, MSGBOX_DEFAULT
-# 342 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_TuckerEnter::
-# 343 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
closemessage
-# 344 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
applymovement LOCALID_AUDIENCE_TWIN, BattleFrontier_BattleDomeBattleRoom_Movement_AudienceTwinJump
-# 345 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
applymovement LOCALID_ANNOUNCER, BattleFrontier_BattleDomeBattleRoom_Movement_AnnouncerMoveForTuckerEntrance
-# 346 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
applymovement LOCALID_OPPONENT, BattleFrontier_BattleDomeBattleRoom_Movement_TuckerEnterAndDance
-# 347 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
playse SE_M_ENCORE2
-# 348 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
call BattleFrontier_BattleDomeBattleRoom_EventScript_AudienceLookAround
-# 349 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitse
-# 350 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
playse SE_M_ENCORE2
-# 351 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
call BattleFrontier_BattleDomeBattleRoom_EventScript_AudienceLookAround
-# 352 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitse
-# 353 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
playse SE_M_ENCORE2
-# 354 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
call BattleFrontier_BattleDomeBattleRoom_EventScript_AudienceLookAround
-# 355 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitse
-# 356 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
playse SE_M_ENCORE2
-# 357 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
call BattleFrontier_BattleDomeBattleRoom_EventScript_AudienceLookAround
-# 358 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitse
-# 359 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
playse SE_M_ENCORE2
-# 360 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
call BattleFrontier_BattleDomeBattleRoom_EventScript_AudienceLookAround
-# 361 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitse
-# 362 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitmovement 0
-# 363 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
message BattleFrontier_BattleDomeBattleRoom_Text_SpectatorTuckerChant
-# 364 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitmessage
-# 365 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
playse SE_M_ENCORE2
-# 366 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
call BattleFrontier_BattleDomeBattleRoom_EventScript_AudienceLookAround
-# 367 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitse
-# 368 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
switch VAR_TEMP_E
-# 369 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
case FRONTIER_BRAIN_GOLD, BattleFrontier_BattleDomeBattleRoom_EventScript_TuckerGoldIntro
-# 370 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
case FRONTIER_BRAIN_STREAK, BattleFrontier_BattleDomeBattleRoom_EventScript_BattleTuckerSilver
-# 371 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
case FRONTIER_BRAIN_STREAK_LONG, BattleFrontier_BattleDomeBattleRoom_EventScript_BattleTuckerGold
-# 372 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
frontier_get FRONTIER_DATA_HEARD_BRAIN_SPEECH
-# 373 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
goto_if_ne VAR_RESULT, FALSE, BattleFrontier_BattleDomeBattleRoom_EventScript_BattleTuckerSilver
-# 374 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
msgbox BattleFrontier_BattleDomeBattleRoom_Text_TuckerSilverIntro, MSGBOX_DEFAULT
-# 375 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
frontier_set FRONTIER_DATA_HEARD_BRAIN_SPEECH
-# 376 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_BattleTuckerSilver::
-# 377 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
msgbox BattleFrontier_BattleDomeBattleRoom_Text_LetsSeeYourStrategy, MSGBOX_DEFAULT
-# 378 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
call BattleFrontier_BattleDomeBattleRoom_EventScript_DoTuckerBattle
-# 379 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
switch VAR_RESULT
-# 380 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
case B_OUTCOME_LOST, BattleFrontier_BattleDomeBattleRoom_EventScript_LostToTucker
-# 381 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
case B_OUTCOME_FORFEITED, BattleFrontier_BattleDomeBattleRoom_EventScript_LostToTucker
-# 382 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
case B_OUTCOME_DREW, BattleFrontier_BattleDomeBattleRoom_EventScript_TuckerDraw
-# 383 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
msgbox BattleFrontier_BattleDomeBattleRoom_Text_IncredibleVictorIsPlayer, MSGBOX_DEFAULT
-# 384 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
dome_resolvewinners DOME_PLAYER_WON_MATCH
-# 385 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
frontier_getsymbols
-# 386 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
goto_if_ne VAR_RESULT, 0, BattleFrontier_BattleDomeBattleRoom_EventScript_WonTourney
-# 387 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
closemessage
-# 388 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
applymovement LOCALID_OPPONENT, BattleFrontier_BattleDomeBattleRoom_Movement_TuckerApproachPlayer
-# 389 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitmovement 0
-# 390 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
msgbox BattleFrontier_BattleDomeBattleRoom_Text_SeeYourFrontierPass, MSGBOX_DEFAULT
-# 391 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
playfanfare MUS_OBTAIN_SYMBOL
-# 392 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
message BattleFrontier_BattleDomeBattleRoom_Text_ReceivedTacticsSymbol
-# 393 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitmessage
-# 394 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitfanfare
-# 395 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
frontier_givesymbol
-# 396 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
msgbox BattleFrontier_BattleDomeBattleRoom_Text_WontUnderestimateYouNextTime, MSGBOX_DEFAULT
-# 397 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
goto BattleFrontier_BattleDomeBattleRoom_EventScript_WonTourney
-# 398 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 399 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_TuckerGoldIntro::
-# 400 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
frontier_get FRONTIER_DATA_HEARD_BRAIN_SPEECH
-# 401 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
goto_if_ne VAR_RESULT, FALSE, BattleFrontier_BattleDomeBattleRoom_EventScript_BattleTuckerGold
-# 402 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
msgbox BattleFrontier_BattleDomeBattleRoom_Text_TuckerGoldIntro, MSGBOX_DEFAULT
-# 403 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
frontier_set FRONTIER_DATA_HEARD_BRAIN_SPEECH
-# 404 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_BattleTuckerGold::
-# 405 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
msgbox BattleFrontier_BattleDomeBattleRoom_Text_UnleashAllPowerIPossess, MSGBOX_DEFAULT
-# 406 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
call BattleFrontier_BattleDomeBattleRoom_EventScript_DoTuckerBattle
-# 407 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
switch VAR_RESULT
-# 408 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
case B_OUTCOME_LOST, BattleFrontier_BattleDomeBattleRoom_EventScript_LostToTucker
-# 409 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
case B_OUTCOME_FORFEITED, BattleFrontier_BattleDomeBattleRoom_EventScript_LostToTucker
-# 410 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
case B_OUTCOME_DREW, BattleFrontier_BattleDomeBattleRoom_EventScript_TuckerDraw
-# 411 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
msgbox BattleFrontier_BattleDomeBattleRoom_Text_IncredibleVictorIsPlayer, MSGBOX_DEFAULT
-# 412 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
dome_resolvewinners DOME_PLAYER_WON_MATCH
-# 413 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
frontier_getsymbols
-# 414 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
goto_if_eq VAR_RESULT, 2, BattleFrontier_BattleDomeBattleRoom_EventScript_WonTourney
-# 415 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
closemessage
-# 416 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
applymovement LOCALID_OPPONENT, BattleFrontier_BattleDomeBattleRoom_Movement_TuckerApproachPlayer
-# 417 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitmovement 0
-# 418 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
msgbox BattleFrontier_BattleDomeBattleRoom_Text_NeverLostWhenPowerUnleashed, MSGBOX_DEFAULT
-# 419 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
playfanfare MUS_OBTAIN_SYMBOL
-# 420 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
message BattleFrontier_BattleDomeBattleRoom_Text_TacticsSymbolTookGoldenShine
-# 421 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitmessage
-# 422 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitfanfare
-# 423 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
frontier_givesymbol
-# 424 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
msgbox BattleFrontier_BattleDomeBattleRoom_Text_LookForwardToNextEncounter, MSGBOX_DEFAULT
-# 425 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
goto BattleFrontier_BattleDomeBattleRoom_EventScript_WonTourney
-# 426 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 427 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_DoTuckerBattle::
-# 428 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
msgbox BattleFrontier_BattleDomeBattleRoom_Text_PlayerVersusTucker, MSGBOX_DEFAULT
-# 429 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
closemessage
-# 430 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
applymovement LOCALID_PLAYER, BattleFrontier_BattleDomeBattleRoom_Movement_PlayerStepForward2
-# 431 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
applymovement LOCALID_OPPONENT, BattleFrontier_BattleDomeBattleRoom_Movement_TuckerStepForward
-# 432 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitmovement 0
-# 433 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
call BattleFrontier_BattleDomeBattleRoom_EventScript_DoDomeBattle
-# 434 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
return
-# 435 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 436 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_LostToTucker::
-# 437 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
msgbox BattleFrontier_BattleDomeBattleRoom_Text_WinnerIsTucker, MSGBOX_DEFAULT
-# 438 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
playse SE_M_ENCORE2
-# 439 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
call BattleFrontier_BattleDomeBattleRoom_EventScript_AudienceLookAround
-# 440 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitse
-# 441 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
goto BattleFrontier_BattleDomeBattleRoom_EventScript_LostTourney
-# 442 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 443 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_TuckerDraw::
-# 444 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
setvar VAR_TEMP_2, DRAW_TUCKER
-# 445 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
goto BattleFrontier_BattleDomeBattleRoom_EventScript_Draw
-# 446 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 447 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_DoDomeBattle::
-# 448 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
frontier_set FRONTIER_DATA_RECORD_DISABLED, FALSE
-# 449 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
special HealPlayerParty
-# 450 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
setvar VAR_0x8004, SPECIAL_BATTLE_DOME
-# 451 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
setvar VAR_0x8005, 0
-# 452 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
setvar VAR_TEMP_9, 1
-# 453 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
special DoSpecialTrainerBattle
-# 454 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitstate
-# 455 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
setvar VAR_TEMP_9, 0
-# 456 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
dome_restorehelditems
-# 457 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
special HealPlayerParty
-# 458 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
dome_resetsketch
-# 459 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
return
-# 460 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 461 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_OnWarp:
-# 462 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
map_script_2 VAR_TEMP_1, 0, BattleFrontier_BattleDomeBattleRoom_EventScript_SetUpObjects
-# 463 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.2byte 0
-# 464 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 465 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_SetUpObjects::
-# 466 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
hideobjectat LOCALID_PLAYER, MAP_BATTLE_FRONTIER_BATTLE_DOME_BATTLE_ROOM
-# 467 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
call BattleFrontier_BattleDomeBattleRoom_EventScript_AddAudience
-# 468 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
call BattleFrontier_BattleDomeBattleRoom_EventScript_SetPlayerGfx
-# 469 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
setvar VAR_TEMP_1, 1
-# 470 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, BattleFrontier_BattleDomeBattleRoom_Movement_SetInvisible
-# 471 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
frontier_get FRONTIER_DATA_BATTLE_NUM
-# 472 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
goto_if_ne VAR_RESULT, DOME_FINAL, BattleFrontier_BattleDomeBattleRoom_EventScript_EndSetUpObjects
-# 473 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
frontier_getbrainstatus
-# 474 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
copyvar VAR_TEMP_E, VAR_RESULT
-# 475 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
goto_if_eq VAR_RESULT, FRONTIER_BRAIN_NOT_READY, BattleFrontier_BattleDomeBattleRoom_EventScript_EndSetUpObjects
-# 476 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
call BattleFrontier_EventScript_SetBrainObjectGfx
-# 477 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
setobjectxyperm LOCALID_OPPONENT, 13, 9
-# 478 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
removeobject LOCALID_OPPONENT
-# 479 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
addobject LOCALID_OPPONENT
-# 480 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
applymovement LOCALID_OPPONENT, BattleFrontier_BattleDomeBattleRoom_Movement_SetInvisibleFacingUp
-# 481 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_EndSetUpObjects::
-# 482 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
end
-# 483 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 484 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_OnResume:
-# 485 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
call_if_eq VAR_TEMP_9, 1, BattleFrontier_BattleDomeBattleRoom_EventScript_CallAddAudience
-# 486 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
end
-# 487 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 488 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_CallAddAudience::
-# 489 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
call BattleFrontier_BattleDomeBattleRoom_EventScript_AddAudience
-# 490 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
return
-# 491 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 492 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
@ Add audience members to supplement the permanent object event audience
-# 493 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_AddAudience::
-# 494 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
call_if_eq VAR_TEMP_F, DOME_ROUND1, BattleFrontier_BattleDomeBattleRoom_EventScript_AddRound1Audience
-# 495 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
call_if_eq VAR_TEMP_F, DOME_ROUND2, BattleFrontier_BattleDomeBattleRoom_EventScript_AddRound2Audience
-# 496 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
call_if_eq VAR_TEMP_F, DOME_SEMIFINAL, BattleFrontier_BattleDomeBattleRoom_EventScript_AddSemifinalAudience
-# 497 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
call_if_eq VAR_TEMP_F, DOME_FINAL, BattleFrontier_BattleDomeBattleRoom_EventScript_AddFinalAudience
-# 498 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
return
-# 499 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 500 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_AddRound1Audience::
-# 501 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
return
-# 502 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 503 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_AddRound2Audience::
-# 504 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_SCIENTIST_1, 1, 3, 0
-# 505 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_EXPERT_F, 4, 6, 0
-# 506 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_NINJA_BOY, 6, 8, 0
-# 507 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_LITTLE_GIRL, 9, 11, 0
-# 508 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_SCIENTIST_1, 11, 13, 0
-# 509 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_MAN_5, 13, 15, 0
-# 510 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_BEAUTY, 19, 7, 1
-# 511 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_WOMAN_5, 22, 11, 1
-# 512 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_LITTLE_BOY, 25, 15, 1
-# 513 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_YOUNGSTER, 26, 2, 2
-# 514 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_SCHOOL_KID_M, 29, 5, 1
-# 515 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
return
-# 516 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 517 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_AddSemifinalAudience::
-# 518 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_SCIENTIST_1, 1, 3, 0
-# 519 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_EXPERT_F, 4, 6, 0
-# 520 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_NINJA_BOY, 6, 8, 0
-# 521 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_WOMAN_2, 7, 9, 0
-# 522 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_LITTLE_GIRL, 9, 11, 0
-# 523 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_LASS, 10, 12, 0
-# 524 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_SCIENTIST_1, 11, 13, 0
-# 525 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_MAN_5, 13, 15, 0
-# 526 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_GENTLEMAN, 15, 2, 1
-# 527 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_NINJA_BOY, 16, 3, 1
-# 528 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_WOMAN_2, 17, 4, 1
-# 529 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_BEAUTY, 19, 7, 1
-# 530 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_EXPERT_F, 20, 9, 1
-# 531 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_WOMAN_5, 22, 11, 1
-# 532 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_SCIENTIST_1, 23, 13, 1
-# 533 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_LITTLE_BOY, 25, 15, 1
-# 534 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_YOUNGSTER, 26, 2, 2
-# 535 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_HEX_MANIAC, 28, 5, 2
-# 536 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_SCHOOL_KID_M, 29, 5, 1
-# 537 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_MART_EMPLOYEE, 30, 6, 2
-# 538 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_WOMAN_5, 31, 8, 2
-# 539 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
return
-# 540 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 541 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_AddFinalAudience::
-# 542 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_NINJA_BOY, 0, 2, 0
-# 543 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_SCIENTIST_1, 1, 3, 0
-# 544 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_BEAUTY, 2, 15, 0
-# 545 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_MAN_5, 3, 5, 0
-# 546 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_EXPERT_F, 4, 6, 0
-# 547 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_SCIENTIST_1, 5, 7, 0
-# 548 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_NINJA_BOY, 6, 8, 0
-# 549 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_WOMAN_2, 7, 9, 0
-# 550 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_WOMAN_3, 8, 10, 0
-# 551 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_LITTLE_GIRL, 9, 11, 0
-# 552 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_LASS, 10, 12, 0
-# 553 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_SCIENTIST_1, 11, 13, 0
-# 554 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_BEAUTY, 12, 14, 0
-# 555 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_MAN_5, 13, 15, 2
-# 556 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_HIKER, 14, 12, 2
-# 557 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_GENTLEMAN, 15, 2, 1
-# 558 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_NINJA_BOY, 16, 3, 1
-# 559 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_WOMAN_2, 17, 4, 1
-# 560 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_WOMAN_3, 18, 6, 1
-# 561 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_BEAUTY, 19, 7, 1
-# 562 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_EXPERT_F, 20, 9, 1
-# 563 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_MAN_2, 21, 10, 1
-# 564 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_WOMAN_5, 22, 11, 1
-# 565 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_SCIENTIST_1, 23, 13, 1
-# 566 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_GENTLEMAN, 24, 14, 1
-# 567 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_LITTLE_BOY, 25, 15, 1
-# 568 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_YOUNGSTER, 26, 2, 2
-# 569 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_FAT_MAN, 27, 3, 2
-# 570 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_HEX_MANIAC, 28, 5, 2
-# 571 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_SCHOOL_KID_M, 29, 5, 1
-# 572 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_MART_EMPLOYEE, 30, 6, 2
-# 573 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
createvobject OBJ_EVENT_GFX_WOMAN_5, 31, 8, 2
-# 574 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
return
-# 575 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 576 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Movement_SetInvisible:
-# 577 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
set_invisible
-# 578 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
step_end
-# 579 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 580 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Movement_PlayerEnter:
-# 581 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
set_visible
-# 582 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 583 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_up
-# 584 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_up
-# 585 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_up
-# 586 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_right
-# 587 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Movement_PlayerStepForward:
-# 588 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_right
-# 589 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
step_end
-# 590 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 591 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Movement_PlayerApproachAudience:
-# 592 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_up
-# 593 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
step_end
-# 594 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 595 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
@ Identical to Movement_PlayerEnter
-# 596 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Movement_PlayerEnterForTucker:
-# 597 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
set_visible
-# 598 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 599 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_up
-# 600 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_up
-# 601 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_up
-# 602 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_right
-# 603 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_right
-# 604 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
step_end
-# 605 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 606 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Movement_PlayerStepForward2:
-# 607 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_right
-# 608 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
step_end
-# 609 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 610 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Movement_OpponentStepForward:
-# 611 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_left
-# 612 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
step_end
-# 613 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 614 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Movement_SetInvisibleFacingUp:
-# 615 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
face_up
-# 616 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
set_invisible
-# 617 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
step_end
-# 618 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 619 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Movement_TuckerEnterAndDance:
-# 620 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
set_visible
-# 621 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_up
-# 622 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_up
-# 623 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_up
-# 624 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
face_left
-# 625 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_8
-# 626 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_4
-# 627 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
face_down
-# 628 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_8
-# 629 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_4
-# 630 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
face_right
-# 631 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_8
-# 632 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_4
-# 633 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
face_up
-# 634 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_8
-# 635 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_4
-# 636 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
face_left
-# 637 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 638 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_fast_up
-# 639 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_fast_up
-# 640 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
face_left
-# 641 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_8
-# 642 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_4
-# 643 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
face_down
-# 644 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_8
-# 645 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_4
-# 646 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
face_right
-# 647 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_8
-# 648 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_4
-# 649 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
face_up
-# 650 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_8
-# 651 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_4
-# 652 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
face_left
-# 653 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
jump_2_left
-# 654 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
unlock_facing_direction
-# 655 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
face_up
-# 656 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
lock_facing_direction
-# 657 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
jump_2_left
-# 658 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
jump_2_left
-# 659 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
unlock_facing_direction
-# 660 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
face_right
-# 661 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
lock_facing_direction
-# 662 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
jump_2_left
-# 663 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
unlock_facing_direction
-# 664 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
face_down
-# 665 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_2
-# 666 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
face_left
-# 667 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_8
-# 668 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_4
-# 669 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
face_up
-# 670 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_8
-# 671 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_4
-# 672 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
face_right
-# 673 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_8
-# 674 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_4
-# 675 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
face_down
-# 676 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_8
-# 677 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_4
-# 678 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
face_left
-# 679 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_4
-# 680 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
face_up
-# 681 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_4
-# 682 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
face_right
-# 683 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_4
-# 684 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
face_down
-# 685 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_4
-# 686 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
face_left
-# 687 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_2
-# 688 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
face_up
-# 689 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_2
-# 690 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
face_right
-# 691 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_2
-# 692 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
face_down
-# 693 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_2
-# 694 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
face_left
-# 695 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
lock_facing_direction
-# 696 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_right
-# 697 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_slow_right
-# 698 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_right
-# 699 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_slow_right
-# 700 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
unlock_facing_direction
-# 701 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
face_up
-# 702 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 703 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
jump_in_place_up
-# 704 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
jump_in_place_up
-# 705 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 706 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_right
-# 707 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_right
-# 708 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_right
-# 709 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
jump_in_place_up
-# 710 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 711 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_right
-# 712 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_down
-# 713 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_down
-# 714 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
face_left
-# 715 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_2
-# 716 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
face_up
-# 717 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_2
-# 718 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
face_right
-# 719 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_2
-# 720 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
face_down
-# 721 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_2
-# 722 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
face_left
-# 723 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_4
-# 724 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_left
-# 725 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_left
-# 726 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
step_end
-# 727 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 728 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Movement_AnnouncerMoveForTuckerEntrance:
-# 729 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 730 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 731 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_left
-# 732 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_left
-# 733 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_in_place_faster_right
-# 734 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 735 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 736 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 737 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 738 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 739 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 740 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 741 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 742 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 743 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 744 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 745 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 746 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 747 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 748 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 749 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 750 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 751 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 752 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 753 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 754 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 755 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 756 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 757 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 758 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 759 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 760 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 761 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 762 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 763 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 764 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 765 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 766 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 767 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 768 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 769 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 770 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 771 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 772 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 773 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_right
-# 774 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_right
-# 775 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_in_place_faster_down
-# 776 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
step_end
-# 777 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 778 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Movement_TuckerStepForward:
-# 779 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_left
-# 780 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
step_end
-# 781 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 782 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Movement_TuckerApproachPlayer:
-# 783 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_left
-# 784 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_left
-# 785 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
step_end
-# 786 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 787 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_AudienceLookAround::
-# 788 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 0, DIR_EAST
-# 789 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 2, DIR_EAST
-# 790 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 4, DIR_EAST
-# 791 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 6, DIR_EAST
-# 792 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 8, DIR_EAST
-# 793 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 10, DIR_WEST
-# 794 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 12, DIR_WEST
-# 795 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 14, DIR_WEST
-# 796 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 16, DIR_WEST
-# 797 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 18, DIR_WEST
-# 798 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 20, DIR_EAST
-# 799 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 22, DIR_EAST
-# 800 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 24, DIR_EAST
-# 801 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 26, DIR_EAST
-# 802 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 28, DIR_EAST
-# 803 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 30, DIR_EAST
-# 804 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay 20
-# 805 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 0, DIR_SOUTH
-# 806 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 2, DIR_SOUTH
-# 807 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 4, DIR_SOUTH
-# 808 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 6, DIR_SOUTH
-# 809 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 8, DIR_SOUTH
-# 810 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 10, DIR_SOUTH
-# 811 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 12, DIR_SOUTH
-# 812 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 14, DIR_SOUTH
-# 813 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 16, DIR_SOUTH
-# 814 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 18, DIR_SOUTH
-# 815 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 20, DIR_SOUTH
-# 816 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 22, DIR_SOUTH
-# 817 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 24, DIR_SOUTH
-# 818 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 26, DIR_SOUTH
-# 819 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 28, DIR_SOUTH
-# 820 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 30, DIR_SOUTH
-# 821 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay 20
-# 822 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 1, DIR_EAST
-# 823 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 3, DIR_EAST
-# 824 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 5, DIR_EAST
-# 825 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 7, DIR_EAST
-# 826 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 9, DIR_EAST
-# 827 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 11, DIR_WEST
-# 828 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 13, DIR_WEST
-# 829 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 15, DIR_WEST
-# 830 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 17, DIR_WEST
-# 831 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 19, DIR_WEST
-# 832 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 21, DIR_EAST
-# 833 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 23, DIR_EAST
-# 834 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 25, DIR_EAST
-# 835 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 27, DIR_WEST
-# 836 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 31, DIR_WEST
-# 837 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay 20
-# 838 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 1, DIR_SOUTH
-# 839 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 3, DIR_SOUTH
-# 840 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 5, DIR_SOUTH
-# 841 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 7, DIR_SOUTH
-# 842 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 9, DIR_SOUTH
-# 843 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 11, DIR_SOUTH
-# 844 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 13, DIR_SOUTH
-# 845 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 15, DIR_SOUTH
-# 846 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 17, DIR_SOUTH
-# 847 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 19, DIR_SOUTH
-# 848 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 21, DIR_SOUTH
-# 849 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 23, DIR_SOUTH
-# 850 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 25, DIR_SOUTH
-# 851 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 27, DIR_SOUTH
-# 852 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
turnvobject 31, DIR_SOUTH
-# 853 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay 20
-# 854 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
return
-# 855 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 856 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_WarpToLobby::
-# 857 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
copyvar VAR_RESULT, VAR_FRONTIER_BATTLE_MODE
-# 858 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
goto_if_eq VAR_RESULT, FRONTIER_MODE_DOUBLES, BattleFrontier_BattleDomePreBattleRoom_EventScript_WarpToLobbyDoubles
-# 859 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
warp MAP_BATTLE_FRONTIER_BATTLE_DOME_LOBBY, 5, 11
-# 860 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitstate
-# 861 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
end
-# 862 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 863 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomePreBattleRoom_EventScript_WarpToLobbyDoubles::
-# 864 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
warp MAP_BATTLE_FRONTIER_BATTLE_DOME_LOBBY, 17, 11
-# 865 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
waitstate
-# 866 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
end
-# 867 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 868 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
@ On round 1 there's a 50% chance that a specific audience member will walk to his seat
-# 869 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_SetWalkingAudienceMemberPos::
-# 870 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
random 2
-# 871 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
copyvar VAR_TEMP_D, VAR_RESULT
-# 872 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
goto_if_eq VAR_TEMP_D, 0, Common_EventScript_NopReturn
-# 873 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
setobjectxyperm LOCALID_AUDIENCE_WALKING, 2, 0
-# 874 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
setobjectmovementtype LOCALID_AUDIENCE_WALKING, MOVEMENT_TYPE_FACE_RIGHT
-# 875 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
return
-# 876 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 877 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_EventScript_TryDoAudienceMemberWalkToSeat::
-# 878 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
goto_if_eq VAR_TEMP_D, 0, Common_EventScript_NopReturn
-# 879 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
applymovement LOCALID_AUDIENCE_WALKING, BattleFrontier_BattleDomeBattleRoom_Movement_AudienceMemberWalkToSeat
-# 880 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
return
-# 881 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 882 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Movement_AudienceTwinJump:
-# 883 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 884 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 885 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 886 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 887 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 888 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 889 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 890 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 891 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 892 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 893 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 894 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_16
-# 895 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_8
-# 896 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
disable_jump_landing_ground_effect
-# 897 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
jump_in_place_down
-# 898 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
delay_4
-# 899 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
jump_in_place_down
-# 900 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
enable_jump_landing_ground_effect
-# 901 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
step_end
-# 902 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 903 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Movement_AudienceMemberWalkToSeat:
-# 904 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_down
-# 905 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_down
-# 906 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_right
-# 907 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_right
-# 908 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_in_place_faster_down
-# 909 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
step_end
-# 910 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 911 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Movement_RefereeEnter:
-# 912 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_right
-# 913 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_right
-# 914 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_right
-# 915 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_right
-# 916 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
step_end
-# 917 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 918 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Movement_AnnouncerFaceLeft:
-# 919 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_in_place_faster_left
-# 920 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
step_end
-# 921 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 922 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Movement_RefereeExit:
-# 923 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_left
-# 924 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_left
-# 925 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_left
-# 926 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
walk_left
-# 927 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
step_end
-# 928 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 929 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_PlayerHasEnteredDome:
-# 930 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "{PLAYER} has entered the BATTLE DOME!$"
-# 931 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 932 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_PlayerVersusTrainer:
-# 933 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "{STR_VAR_1}\n"
-# 934 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "match!\p"
-# 935 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "{PLAYER} versus {STR_VAR_2}!\p"
-# 936 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Let the battle begin!$"
-# 937 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 938 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_PlayerIsWinner:
-# 939 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "{PLAYER} is the winner!\n"
-# 940 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Congratulations!$"
-# 941 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 942 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_TrainerIsWinner:
-# 943 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "{STR_VAR_2} is the winner!\n"
-# 944 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Congratulations!$"
-# 945 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 946 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_PlayerIsLv50Champ:
-# 947 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "{PLAYER} is the Level 50\n"
-# 948 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Battle Tournament Champion!\p"
-# 949 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Congratulations!$"
-# 950 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 951 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_PlayerIsLvOpenChamp:
-# 952 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "{PLAYER} is the Open Level\n"
-# 953 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Battle Tournament Champion!\p"
-# 954 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Congratulations!$"
-# 955 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 956 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_RefereeDecisionPleaseWait:
-# 957 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "What an unbelievable finish!\n"
-# 958 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "We have a double knockout!\p"
-# 959 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "In this event, the Battle Tournament\n"
-# 960 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "rules call for a REFEREE'S decision.\p"
-# 961 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Please wait while the judging\n"
-# 962 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "is under way.$"
-# 963 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 964 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_RefereesDecidedWinnerTrainer:
-# 965 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "The REFEREES have reached\n"
-# 966 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "a decision!\p"
-# 967 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "The winner is…\n"
-# 968 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Oh, my goodness!\l"
-# 969 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "The winner is {STR_VAR_1}!\l"
-# 970 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Congratulations!$"
-# 971 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 972 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_RefereesDecidedWinnerPlayer:
-# 973 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "The REFEREES have reached\n"
-# 974 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "a decision!\p"
-# 975 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "The winner is…\n"
-# 976 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Oh, my goodness!\l"
-# 977 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "The winner is {PLAYER}!\l"
-# 978 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Congratulations!$"
-# 979 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 980 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_BrightNewHope:
-# 981 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "The bright new hope!\p"
-# 982 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "$"
-# 983 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 984 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_RisingStar:
-# 985 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "The rising star!\p"
-# 986 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "$"
-# 987 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 988 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_WillTheyRaceToChampionship:
-# 989 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Will this TRAINER race to\n"
-# 990 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "the championship?\p"
-# 991 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "$"
-# 992 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 993 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_CanAchieveChampionFirstTry:
-# 994 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Can the feat of a championship\n"
-# 995 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "on the first try be achieved?\p"
-# 996 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "$"
-# 997 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 998 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_CanLossBeAvenged:
-# 999 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Can the loss of the last match\n"
-# 1000 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "be avenged?\p"
-# 1001 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "$"
-# 1002 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 1003 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_OnFireForChampionship:
-# 1004 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "The TRAINER is on fire for\n"
-# 1005 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "the first championship try!\p"
-# 1006 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "$"
-# 1007 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 1008 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_WinHereAdvancesToFinal:
-# 1009 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "A win here means this TRAINER\n"
-# 1010 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "advances to the final!\p"
-# 1011 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "$"
-# 1012 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 1013 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_WillLongHeldDreamComeTrue:
-# 1014 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Will the long-held dream of\n"
-# 1015 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "a championship finally come true?\p"
-# 1016 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "$"
-# 1017 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 1018 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_TheInvincibleChampion:
-# 1019 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "The invincible champion!\p"
-# 1020 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "$"
-# 1021 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 1022 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_CanAnyoneHopeToBeatTrainer:
-# 1023 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Can anyone hope to beat this\n"
-# 1024 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "TRAINER?\p"
-# 1025 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "$"
-# 1026 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 1027 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_DoBattlesExistSolelyForTrainer:
-# 1028 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Do battles exist solely for\n"
-# 1029 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "this TRAINER?\p"
-# 1030 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "$"
-# 1031 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 1032 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_CurrentChampAimingToRetainTitle:
-# 1033 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "The current champion aiming to\n"
-# 1034 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "retain the title!\p"
-# 1035 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "$"
-# 1036 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 1037 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_FormerChampHasReturned:
-# 1038 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "The former champion has returned!\p"
-# 1039 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "$"
-# 1040 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 1041 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_FormerToughnessReturned:
-# 1042 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "The former toughness has returned!\p"
-# 1043 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "$"
-# 1044 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 1045 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_WillDoExpectedAdvanceToFinals:
-# 1046 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Will this TRAINER do as expected\n"
-# 1047 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "and advance to the finals?\p"
-# 1048 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "$"
-# 1049 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 1050 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_WillFormerChampRegainGlory:
-# 1051 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Will the former champ regain\n"
-# 1052 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "lost glory?\p"
-# 1053 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "$"
-# 1054 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 1055 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_FeelGlowOfTrueMaster:
-# 1056 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Feel the glow of a true master!$"
-# 1057 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 1058 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_MakeWayForDomeAceTucker:
-# 1059 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "And now… The TRAINER standing in\n"
-# 1060 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "{PLAYER}'s record-setting path…\p"
-# 1061 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Yes! The one and only!\n"
-# 1062 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "The BATTLE DOME COMMISSIONER!\l"
-# 1063 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Our very own DOME ACE!\l"
-# 1064 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Make way for TUCKER!$"
-# 1065 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 1066 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_SpectatorTuckerChant:
-# 1067 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Spectators: TUCKER! TUCKER!\n"
-# 1068 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "TUCKER! TUCKER! TUCKER!$"
-# 1069 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 1070 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_TuckerSilverIntro:
-# 1071 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "TUCKER: Ahahah!\p"
-# 1072 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Do you hear it? This crowd!\n"
-# 1073 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "They're all itching to see our match!\p"
-# 1074 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Ahahah!\p"
-# 1075 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "I bet you're twitching all over from\n"
-# 1076 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "the tension of getting to battle me!\p"
-# 1077 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "But don't you worry about a thing!\p"
-# 1078 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "I'm the no. 1 star of the BATTLE DOME!\n"
-# 1079 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "I, TUCKER the DOME ACE, will bathe you\l"
-# 1080 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "in my brilliant glow!$"
-# 1081 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 1082 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_LetsSeeYourStrategy:
-# 1083 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Your strategy!\n"
-# 1084 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Let's see it!$"
-# 1085 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 1086 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_IncredibleVictorIsPlayer:
-# 1087 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Unbelievable! It's incredible!\n"
-# 1088 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "The victor is {PLAYER}!$"
-# 1089 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 1090 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_WinnerIsTucker:
-# 1091 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "The winner is TUCKER!\n"
-# 1092 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "The DOME ACE has prevailed!\p"
-# 1093 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Congratulations, TUCKER!$"
-# 1094 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 1095 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_SeeYourFrontierPass:
-# 1096 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "TUCKER: Rules are rules!\n"
-# 1097 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Let me see your FRONTIER PASS.$"
-# 1098 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 1099 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_ReceivedTacticsSymbol:
-# 1100 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "The Tactics Symbol was embossed on\n"
-# 1101 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "the FRONTIER PASS!$"
-# 1102 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 1103 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_WontUnderestimateYouNextTime:
-# 1104 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "… … … … … …\p"
-# 1105 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "I sorely underestimated you. I won't\n"
-# 1106 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "make the same mistake next time…$"
-# 1107 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 1108 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_CanWinStreakBeStretched:
-# 1109 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Can the win streak be stretched?\n"
-# 1110 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "The confidence is there!$"
-# 1111 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 1112 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_LegendHasReturnedDomeAceTucker:
-# 1113 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Ladies and gentlemen!\n"
-# 1114 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Boys, girls, and POKéMON!\p"
-# 1115 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Finally!\n"
-# 1116 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Finally, the legend has returned!\p"
-# 1117 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Yes, the name of that legend!\n"
-# 1118 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Our very own DOME ACE!\l"
-# 1119 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "It's none other than TUCKER!$"
-# 1120 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 1121 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_TuckerGoldIntro:
-# 1122 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "TUCKER: Ah…\n"
-# 1123 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "The pummeling roar of the crowd…\l"
-# 1124 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Their furnace-like heat of excitement…\l"
-# 1125 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "This is a wonderful place…\p"
-# 1126 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "To the crowd, I am the DOME ACE…\n"
-# 1127 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "I represent their hopes and dreams…\l"
-# 1128 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "I must never fade from their sight…\p"
-# 1129 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "I must burn!\n"
-# 1130 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Brighter and more brilliant!\l"
-# 1131 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "I must light all that gather here!$"
-# 1132 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 1133 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_UnleashAllPowerIPossess:
-# 1134 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "I will unleash all the power that\n"
-# 1135 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "I possess! Right here and now!$"
-# 1136 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 1137 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_NeverLostWhenPowerUnleashed:
-# 1138 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "TUCKER: You're genuinely fantastic!\p"
-# 1139 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Never before! I haven't ever lost in the\n"
-# 1140 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "times I've had to unleash my power.\p"
-# 1141 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Yes, quite fantastic!\n"
-# 1142 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Your FRONTIER PASS, please?$"
-# 1143 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 1144 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_TacticsSymbolTookGoldenShine:
-# 1145 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "The Tactics Symbol took on\n"
-# 1146 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "a golden shine!$"
-# 1147 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 1148 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_LookForwardToNextEncounter:
-# 1149 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "You're strong, but above all,\n"
-# 1150 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "you have a unique charm!\p"
-# 1151 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "In you, I see a definite potential for\n"
-# 1152 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "a superstar like me.\p"
-# 1153 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "I will very much look forward to\n"
-# 1154 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "our next encounter!$"
-# 1155 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 1156 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
@ Unused
-# 1157 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_PlayerIsLv50Champ2:
-# 1158 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "{PLAYER} is the Level 50\n"
-# 1159 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Battle Tournament Champion!\p"
-# 1160 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Congratulations!$"
-# 1161 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 1162 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
@ Unused
-# 1163 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_PlayerIsLvOpenChamp2:
-# 1164 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "{PLAYER} is the Open Level\n"
-# 1165 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Battle Tournament Champion!\p"
-# 1166 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Congratulations!$"
-# 1167 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 1168 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_PlayerVersusTucker:
-# 1169 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "The final match!\p"
-# 1170 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "{PLAYER} versus the DOME ACE, TUCKER!\p"
-# 1171 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Let the battle begin!$"
-# 1172 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
-# 1173 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
BattleFrontier_BattleDomeBattleRoom_Text_RefereesDecidedWinnerTucker:
-# 1174 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "The REFEREES have reached\n"
-# 1175 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "a decision!\p"
-# 1176 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "The winner is…\n"
-# 1177 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Oh, my goodness!\l"
-# 1178 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "The winner is our very own DOME ACE!\l"
-# 1179 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "It's TUCKER!\p"
-# 1180 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Congratulations! And thank you!\n"
-# 1181 "data/maps/BattleFrontier_BattleDomeBattleRoom/scripts.pory"
.string "Let's hear it for the DOME ACE, TUCKER!$"
diff --git a/data/maps/BattleFrontier_BattleDomeLobby/scripts.inc b/data/maps/BattleFrontier_BattleDomeLobby/scripts.inc
index 1ccf9a3d56bd..fb28b7ad756e 100644
--- a/data/maps/BattleFrontier_BattleDomeLobby/scripts.inc
+++ b/data/maps/BattleFrontier_BattleDomeLobby/scripts.inc
@@ -1,1364 +1,685 @@
-# 1 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-
-# 2 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.set LOCALID_ATTENDANT_SINGLES, 1
-# 3 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.set LOCALID_ATTENDANT_DOUBLES, 6
-# 4 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 5 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_MapScripts::
-# 6 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
map_script MAP_SCRIPT_ON_RESUME, BattleFrontier_BattleDomeLobby_OnResume
-# 7 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
map_script MAP_SCRIPT_ON_FRAME_TABLE, BattleFrontier_BattleDomeLobby_OnFrame
-# 8 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, BattleFrontier_BattleDomeLobby_OnWarp
-# 9 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.byte 0
-# 10 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 11 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_OnResume:
-# 12 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
dome_initresultstree
-# 13 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
end
-# 14 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 15 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_OnWarp:
-# 16 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
map_script_2 VAR_TEMP_1, 0, BattleFrontier_BattleDomeLobby_EventScript_TurnPlayerNorth
-# 17 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.2byte 0
-# 18 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 19 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_TurnPlayerNorth::
-# 20 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
setvar VAR_TEMP_1, 1
-# 21 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
turnobject OBJ_EVENT_ID_PLAYER, DIR_NORTH
-# 22 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
end
-# 23 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 24 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_OnFrame:
-# 25 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
map_script_2 VAR_TEMP_CHALLENGE_STATUS, 0, BattleFrontier_BattleDomeLobby_EventScript_GetChallengeStatus
-# 26 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING, BattleFrontier_BattleDomeLobby_EventScript_QuitWithoutSaving
-# 27 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_PAUSED, BattleFrontier_BattleDomeLobby_EventScript_ResumeChallenge
-# 28 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_WON, BattleFrontier_BattleDomeLobby_EventScript_WonChallenge
-# 29 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_LOST, BattleFrontier_BattleDomeLobby_EventScript_LostChallenge
-# 30 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.2byte 0
-# 31 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 32 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_GetChallengeStatus::
-# 33 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
frontier_getstatus
-# 34 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
end
-# 35 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 36 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_QuitWithoutSaving::
-# 37 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
lockall
-# 38 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
msgbox BattleFrontier_BattleDomeLobby_Text_DidntSaveBeforeQuitting, MSGBOX_DEFAULT
-# 39 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
closemessage
-# 40 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
dome_set DOME_DATA_WIN_STREAK, 0
-# 41 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
dome_set DOME_DATA_WIN_STREAK_ACTIVE, FALSE
-# 42 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
dome_set DOME_DATA_ATTEMPTED_CHALLENGE, TRUE
-# 43 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
frontier_set FRONTIER_DATA_CHALLENGE_STATUS, 0
-# 44 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 255
-# 45 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
releaseall
-# 46 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
end
-# 47 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 48 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_WonChallenge::
-# 49 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
call BattleFrontier_EventScript_IncrementWinStreak
-# 50 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
lockall
-# 51 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
frontier_isbrain
-# 52 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattleDomeLobby_EventScript_DefeatedAce
-# 53 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
msgbox BattleFrontier_BattleDomeLobby_Text_CongratsForWinningTourney, MSGBOX_DEFAULT
-# 54 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
goto BattleFrontier_BattleDomeLobby_EventScript_GiveBattlePoints
-# 55 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 56 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_DefeatedAce::
-# 57 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
msgbox BattleFrontier_BattleDomeLobby_Text_CongratsDefeatedTucker, MSGBOX_DEFAULT
-# 58 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_GiveBattlePoints::
-# 59 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
msgbox BattleFrontier_BattleDomeLobby_Text_AwardTheseBattlePoints, MSGBOX_DEFAULT
-# 60 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
frontier_givepoints
-# 61 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
msgbox BattleFrontier_Text_ObtainedXBattlePoints, MSGBOX_GETPOINTS
-# 62 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
message BattleFrontier_BattleDomeLobby_Text_RecordWillBeSaved
-# 63 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
waitmessage
-# 64 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
special LoadPlayerParty
-# 65 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
frontier_setpartyorder FRONTIER_PARTY_SIZE
-# 66 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
frontier_checkairshow
-# 67 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
dome_set DOME_DATA_ATTEMPTED_CHALLENGE, TRUE
-# 68 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
dome_set DOME_DATA_HAS_WON_CHALLENGE, TRUE
-# 69 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
dome_set DOME_DATA_WIN_STREAK_ACTIVE, TRUE
-# 70 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
special LoadPlayerParty
-# 71 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
special HealPlayerParty
-# 72 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
+ callnative UpdateFollowingPokemon
goto BattleFrontier_BattleDomeLobby_EventScript_AskRecordBattle
-# 73 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 74 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_LostChallenge::
-# 75 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
lockall
-# 76 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
msgbox BattleFrontier_BattleDomeLobby_Text_ThankYouForPlaying, MSGBOX_DEFAULT
-# 77 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
message BattleFrontier_BattleDomeLobby_Text_RecordWillBeSaved
-# 78 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
waitmessage
-# 79 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
special LoadPlayerParty
-# 80 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
frontier_setpartyorder FRONTIER_PARTY_SIZE
-# 81 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
frontier_checkairshow
-# 82 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
dome_set DOME_DATA_WIN_STREAK_ACTIVE, FALSE
-# 83 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
dome_set DOME_DATA_ATTEMPTED_CHALLENGE, TRUE
-# 84 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
special LoadPlayerParty
-# 85 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
special HealPlayerParty
-# 86 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
+ callnative UpdateFollowingPokemon
BattleFrontier_BattleDomeLobby_EventScript_AskRecordBattle::
-# 87 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
dome_save 0
-# 88 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
playse SE_SAVE
-# 89 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
waitse
-# 90 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
call BattleFrontier_EventScript_GetCantRecordBattle
-# 91 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattleDomeLobby_EventScript_EndChallenge
-# 92 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
message BattleFrontier_BattleDomeLobby_Text_RecordLastMatch
-# 93 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
waitmessage
-# 94 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
multichoicedefault 20, 8, MULTI_YESNO, 1, FALSE
-# 95 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
switch VAR_RESULT
-# 96 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
case 1, BattleFrontier_BattleDomeLobby_EventScript_EndChallenge
-# 97 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
case 0, BattleFrontier_BattleDomeLobby_EventScript_RecordBattle
-# 98 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattleDomeLobby_EventScript_EndChallenge
-# 99 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 100 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_RecordBattle::
-# 101 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
call BattleFrontier_EventScript_SaveBattle
-# 102 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_EndChallenge::
-# 103 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
msgbox BattleFrontier_BattleDomeLobby_Text_HopeToSeeYouAgain, MSGBOX_DEFAULT
-# 104 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
closemessage
-# 105 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 255
-# 106 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
releaseall
-# 107 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
end
-# 108 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 109 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_ResumeChallenge::
-# 110 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
lockall
-# 111 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
msgbox BattleFrontier_BattleDomeLobby_Text_WeveBeenWaitingForYou, MSGBOX_DEFAULT
-# 112 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
message BattleFrontier_BattleDomeLobby_Text_OkayToSaveBeforeChallenge2
-# 113 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
waitmessage
-# 114 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
dome_save CHALLENGE_STATUS_SAVING
-# 115 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
playse SE_SAVE
-# 116 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
waitse
-# 117 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
frontier_set FRONTIER_DATA_PAUSED, FALSE
-# 118 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 255
-# 119 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
goto BattleFrontier_BattleDomeLobby_EventScript_EnterChallenge
-# 120 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 121 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_SinglesAttendant::
-# 122 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
lock
-# 123 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
faceplayer
-# 124 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
setvar VAR_FRONTIER_FACILITY, FRONTIER_FACILITY_DOME
-# 125 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
setvar VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES
-# 126 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
goto BattleFrontier_BattleDomeLobby_EventScript_AttendantWelcome
-# 127 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
end
-# 128 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 129 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_DoublesAttendant::
-# 130 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
lock
-# 131 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
faceplayer
-# 132 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
setvar VAR_FRONTIER_FACILITY, FRONTIER_FACILITY_DOME
-# 133 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
setvar VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES
-# 134 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
goto BattleFrontier_BattleDomeLobby_EventScript_AttendantWelcome
-# 135 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
end
-# 136 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 137 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_AttendantWelcome::
-# 138 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
special SavePlayerParty
-# 139 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattleDomeLobby_EventScript_WelcomeSingles
-# 140 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattleDomeLobby_EventScript_WelcomeDoubles
-# 141 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_AskTakeChallenge::
-# 142 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattleDomeLobby_EventScript_TakeSinglesChallenge
-# 143 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattleDomeLobby_EventScript_TakeDoublesChallenge
-# 144 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
waitmessage
-# 145 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
multichoice 17, 6, MULTI_CHALLENGEINFO, FALSE
-# 146 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
switch VAR_RESULT
-# 147 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
case 0, BattleFrontier_BattleDomeLobby_EventScript_TryEnterChallenge
-# 148 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
case 1, BattleFrontier_BattleDomeLobby_EventScript_ExplainChallenge
-# 149 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
case 2, BattleFrontier_BattleDomeLobby_EventScript_CancelChallenge
-# 150 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattleDomeLobby_EventScript_CancelChallenge
-# 151 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 152 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_TryEnterChallenge::
-# 153 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
message BattleFrontier_BattleDomeLobby_Text_WhichLevelMode
-# 154 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
waitmessage
-# 155 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
multichoice 17, 6, MULTI_LEVEL_MODE, FALSE
-# 156 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
switch VAR_RESULT
-# 157 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
case FRONTIER_LVL_TENT, BattleFrontier_BattleDomeLobby_EventScript_CancelChallenge
-# 158 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattleDomeLobby_EventScript_CancelChallenge
-# 159 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
frontier_checkineligible
-# 160 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
goto_if_eq VAR_0x8004, TRUE, BattleFrontier_BattleDomeLobby_EventScript_NotEnoughValidMons
-# 161 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
frontier_set FRONTIER_DATA_LVL_MODE, VAR_RESULT
-# 162 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
msgbox BattleFrontier_BattleDomeLobby_Text_SelectThreeMons, MSGBOX_DEFAULT
-# 163 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
fadescreen FADE_TO_BLACK
-# 164 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
+ callnative RemoveFollowingPokemon
call BattleFrontier_EventScript_GetLvlMode
-# 165 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
copyvar VAR_0x8004, VAR_RESULT
-# 166 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
setvar VAR_0x8005, FRONTIER_PARTY_SIZE
-# 167 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
special ChoosePartyForBattleFrontier
-# 168 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
waitstate
-# 169 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleDomeLobby_EventScript_LoadPartyCancelChallenge
-# 170 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
msgbox BattleFrontier_BattleDomeLobby_Text_OkayToSaveBeforeChallenge, MSGBOX_YESNO
-# 171 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
switch VAR_RESULT
-# 172 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
case NO, BattleFrontier_BattleDomeLobby_EventScript_LoadPartyCancelChallenge
-# 173 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
case YES, BattleFrontier_BattleDomeLobby_EventScript_SaveBeforeChallenge
-# 174 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattleDomeLobby_EventScript_LoadPartyCancelChallenge
-# 175 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 176 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_SaveBeforeChallenge::
-# 177 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 0
-# 178 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
frontier_set FRONTIER_DATA_SELECTED_MON_ORDER
-# 179 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
dome_init
-# 180 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
frontier_set FRONTIER_DATA_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING
-# 181 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
frontier_set FRONTIER_DATA_PAUSED, FALSE
-# 182 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
special LoadPlayerParty
-# 183 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
closemessage
-# 184 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
delay 2
-# 185 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
call Common_EventScript_SaveGame
-# 186 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 255
-# 187 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleDomeLobby_EventScript_CancelChallengeSaveFailed
-# 188 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
dome_inittrainers
-# 189 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_EnterChallenge::
-# 190 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
special SavePlayerParty
-# 191 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
frontier_setpartyorder FRONTIER_PARTY_SIZE
-# 192 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
dome_settrainers
-# 193 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
msgbox BattleFrontier_BattleDomeLobby_Text_ShowYouToBattleDome, MSGBOX_DEFAULT
-# 194 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
closemessage
-# 195 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
call BattleFrontier_BattleDomeLobby_EventScript_WalkToDoor
-# 196 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
special HealPlayerParty
-# 197 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
warp MAP_BATTLE_FRONTIER_BATTLE_DOME_CORRIDOR, 23, 6
-# 198 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 0
-# 199 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
waitstate
-# 200 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
end
-# 201 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 202 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_ExplainChallenge::
-# 203 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattleDomeLobby_EventScript_ExplainSinglesChallenge
-# 204 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattleDomeLobby_EventScript_ExplainDoublesChallenge
-# 205 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
goto BattleFrontier_BattleDomeLobby_EventScript_AskTakeChallenge
-# 206 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 207 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_NotEnoughValidMons::
-# 208 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
switch VAR_RESULT
-# 209 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
case FRONTIER_LVL_50, BattleFrontier_BattleDomeLobby_EventScript_NotEnoughValidMonsLv50
-# 210 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
case FRONTIER_LVL_OPEN, BattleFrontier_BattleDomeLobby_EventScript_NotEnoughValidMonsLvOpen
-# 211 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 212 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_NotEnoughValidMonsLv50::
-# 213 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
msgbox BattleFrontier_BattleDomeLobby_Text_NotEnoughValidMonsLv50, MSGBOX_DEFAULT
-# 214 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
goto BattleFrontier_BattleDomeLobby_EventScript_EndCancelChallenge
-# 215 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 216 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_NotEnoughValidMonsLvOpen::
-# 217 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
msgbox BattleFrontier_BattleDomeLobby_Text_NotEnoughValidMonsLvOpen, MSGBOX_DEFAULT
-# 218 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
goto BattleFrontier_BattleDomeLobby_EventScript_EndCancelChallenge
-# 219 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 220 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_CancelChallengeSaveFailed::
-# 221 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
frontier_set FRONTIER_DATA_CHALLENGE_STATUS, 0
-# 222 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
goto BattleFrontier_BattleDomeLobby_EventScript_CancelChallenge
-# 223 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 224 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_LoadPartyCancelChallenge::
-# 225 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
special LoadPlayerParty
-# 226 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
+ callnative UpdateFollowingPokemon
BattleFrontier_BattleDomeLobby_EventScript_CancelChallenge::
-# 227 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
msgbox BattleFrontier_BattleDomeLobby_Text_HopeToSeeYouAgain, MSGBOX_DEFAULT
-# 228 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_EndCancelChallenge::
-# 229 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
release
-# 230 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
end
-# 231 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 232 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_WalkToDoor::
-# 233 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattleDomeLobby_EventScript_SinglesAttendantWalkToDoor
-# 234 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattleDomeLobby_EventScript_DoublesAttendantWalkToDoor
-# 235 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, BattleFrontier_BattleDomeLobby_Movement_WalkToDoor
-# 236 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
waitmovement 0
-# 237 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattleDomeLobby_EventScript_OpenSinglesDoor
-# 238 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattleDomeLobby_EventScript_OpenDoublesDoor
-# 239 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
waitdooranim
-# 240 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattleDomeLobby_EventScript_SinglesAttendantEnterDoor
-# 241 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattleDomeLobby_EventScript_DoublesAttendantEnterDoor
-# 242 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, BattleFrontier_BattleDomeLobby_Movement_PlayerEnterDoor
-# 243 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
waitmovement 0
-# 244 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattleDomeLobby_EventScript_CloseSinglesDoor
-# 245 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattleDomeLobby_EventScript_CloseDoublesDoor
-# 246 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
waitdooranim
-# 247 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
return
-# 248 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 249 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_SinglesAttendantWalkToDoor::
-# 250 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
applymovement LOCALID_ATTENDANT_SINGLES, BattleFrontier_BattleDomeLobby_Movement_WalkToDoor
-# 251 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
return
-# 252 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 253 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_DoublesAttendantWalkToDoor::
-# 254 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
applymovement LOCALID_ATTENDANT_DOUBLES, BattleFrontier_BattleDomeLobby_Movement_WalkToDoor
-# 255 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
return
-# 256 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 257 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_SinglesAttendantEnterDoor::
-# 258 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
applymovement LOCALID_ATTENDANT_SINGLES, BattleFrontier_BattleDomeLobby_Movement_AttendantEnterDoor
-# 259 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
return
-# 260 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 261 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_DoublesAttendantEnterDoor::
-# 262 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
applymovement LOCALID_ATTENDANT_DOUBLES, BattleFrontier_BattleDomeLobby_Movement_AttendantEnterDoor
-# 263 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
return
-# 264 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 265 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_WelcomeSingles::
-# 266 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
msgbox BattleFrontier_BattleDomeLobby_Text_WelcomeSingleBattle, MSGBOX_DEFAULT
-# 267 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
return
-# 268 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 269 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_WelcomeDoubles::
-# 270 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
msgbox BattleFrontier_BattleDomeLobby_Text_WelcomeDoubleBattle, MSGBOX_DEFAULT
-# 271 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
return
-# 272 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 273 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_TakeSinglesChallenge::
-# 274 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
message BattleFrontier_BattleDomeLobby_Text_TakeSinglesChallenge
-# 275 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
return
-# 276 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 277 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_TakeDoublesChallenge::
-# 278 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
message BattleFrontier_BattleDomeLobby_Text_TakeDoublesChallenge
-# 279 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
return
-# 280 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 281 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_ExplainSinglesChallenge::
-# 282 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
msgbox BattleFrontier_BattleDomeLobby_Text_ExplainSinglesChallenge, MSGBOX_DEFAULT
-# 283 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
return
-# 284 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 285 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_ExplainDoublesChallenge::
-# 286 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
msgbox BattleFrontier_BattleDomeLobby_Text_ExplainDoublesChallenge, MSGBOX_DEFAULT
-# 287 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
return
-# 288 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 289 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_OpenSinglesDoor::
-# 290 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
opendoor 5, 4
-# 291 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
return
-# 292 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 293 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_OpenDoublesDoor::
-# 294 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
opendoor 17, 4
-# 295 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
return
-# 296 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 297 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_CloseSinglesDoor::
-# 298 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
closedoor 5, 4
-# 299 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
return
-# 300 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 301 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_CloseDoublesDoor::
-# 302 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
closedoor 17, 4
-# 303 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
return
-# 304 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 305 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_Movement_WalkToDoor:
-# 306 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
walk_up
-# 307 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
walk_up
-# 308 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
walk_up
-# 309 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
walk_up
-# 310 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
walk_up
-# 311 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
step_end
-# 312 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 313 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_Movement_AttendantEnterDoor:
-# 314 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
walk_up
-# 315 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
set_invisible
-# 316 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
step_end
-# 317 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 318 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_Movement_PlayerEnterDoor:
-# 319 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
walk_up
-# 320 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
walk_up
-# 321 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
set_invisible
-# 322 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
step_end
-# 323 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 324 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_ShowSinglesResults::
-# 325 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
lockall
-# 326 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
frontier_results FRONTIER_FACILITY_DOME, FRONTIER_MODE_SINGLES
-# 327 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
waitbuttonpress
-# 328 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
special RemoveRecordsWindow
-# 329 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
releaseall
-# 330 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
end
-# 331 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 332 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_ShowDoublesResults::
-# 333 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
lockall
-# 334 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
frontier_results FRONTIER_FACILITY_DOME, FRONTIER_MODE_DOUBLES
-# 335 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
waitbuttonpress
-# 336 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
special RemoveRecordsWindow
-# 337 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
releaseall
-# 338 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
end
-# 339 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 340 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_ShowPrevTourneyTree::
-# 341 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
dome_get DOME_DATA_PREV_TOURNEY_TYPE
-# 342 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
call_if_eq VAR_RESULT, 0, BattleFrontier_BattleDomeLobby_EventScript_PrevTourneyResultsSinglesLv50
-# 343 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
call_if_eq VAR_RESULT, 1, BattleFrontier_BattleDomeLobby_EventScript_PrevTourneyResultsDoublesLv50
-# 344 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
call_if_eq VAR_RESULT, 2, BattleFrontier_BattleDomeLobby_EventScript_PrevTourneyResultsSinglesLvOpen
-# 345 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
call_if_eq VAR_RESULT, 3, BattleFrontier_BattleDomeLobby_EventScript_PrevTourneyResultsDoublesLvOpen
-# 346 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
fadescreen FADE_TO_BLACK
-# 347 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
dome_showprevtourneytree
-# 348 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
waitstate
-# 349 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
end
-# 350 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 351 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_PrevTourneyResultsSinglesLv50::
-# 352 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
msgbox BattleFrontier_BattleDomeLobby_Text_PrevTourneyResultsSinglesLv50, MSGBOX_SIGN
-# 353 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
return
-# 354 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 355 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_PrevTourneyResultsDoublesLv50::
-# 356 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
msgbox BattleFrontier_BattleDomeLobby_Text_PrevTourneyResultsDoublesLv50, MSGBOX_SIGN
-# 357 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
return
-# 358 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 359 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_PrevTourneyResultsSinglesLvOpen::
-# 360 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
msgbox BattleFrontier_BattleDomeLobby_Text_PrevTourneyResultsSinglesLvOpen, MSGBOX_SIGN
-# 361 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
return
-# 362 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 363 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_PrevTourneyResultsDoublesLvOpen::
-# 364 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
msgbox BattleFrontier_BattleDomeLobby_Text_PrevTourneyResultsDoublesLvOpen, MSGBOX_SIGN
-# 365 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
return
-# 366 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 367 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_Maniac::
-# 368 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
dome_getwinnersname
-# 369 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
msgbox BattleFrontier_BattleDomeLobby_Text_LastWinnerWasTough, MSGBOX_NPC
-# 370 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
end
-# 371 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 372 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_Lass::
-# 373 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
msgbox BattleFrontier_BattleDomeLobby_Text_WinnersGainReputation, MSGBOX_NPC
-# 374 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
end
-# 375 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 376 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_FatMan::
-# 377 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
msgbox BattleFrontier_BattleDomeLobby_Text_TrashedInFirstRound, MSGBOX_NPC
-# 378 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
end
-# 379 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 380 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_Man::
-# 381 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
msgbox BattleFrontier_BattleDomeLobby_Text_NeedToCheckOpponentCarefully, MSGBOX_NPC
-# 382 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
end
-# 383 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 384 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
@ A few OutsideWest event scripts are inserted here instead, two of which are unused
-# 385 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_OutsideWest_EventScript_Man3::
-# 386 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
msgbox BattleFrontier_OutsideWest_Text_LongDreamedAboutBattleFrontier, MSGBOX_NPC
-# 387 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
end
-# 388 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 389 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
@ Unused
-# 390 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_OutsideWest_EventScript_BattleDomeSign2::
-# 391 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
msgbox BattleFrontier_OutsideWest_Text_BattleDomeSign2, MSGBOX_NPC
-# 392 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
end
-# 393 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 394 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
@ Unused
-# 395 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_OutsideWest_EventScript_UnderConstructionSign::
-# 396 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
msgbox BattleFrontier_OutsideWest_Text_QuestionMarkUnderConstruction, MSGBOX_NPC
-# 397 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
end
-# 398 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 399 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_RulesBoard::
-# 400 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
lockall
-# 401 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
msgbox BattleFrontier_BattleDomeLobby_Text_RulesAreListed, MSGBOX_DEFAULT
-# 402 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
goto BattleFrontier_BattleDomeLobby_EventScript_ReadRulesBoard
-# 403 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
end
-# 404 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 405 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_ReadRulesBoard::
-# 406 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
message BattleFrontier_BattleDomeLobby_Text_ReadWhichHeading
-# 407 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
waitmessage
-# 408 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
multichoice 17, 4, MULTI_BATTLE_DOME_RULES, FALSE
-# 409 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
switch VAR_RESULT
-# 410 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
case 0, BattleFrontier_BattleDomeLobby_EventScript_RulesMatchup
-# 411 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
case 1, BattleFrontier_BattleDomeLobby_EventScript_RulesTourneyTree
-# 412 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
case 2, BattleFrontier_BattleDomeLobby_EventScript_RulesDoubleKO
-# 413 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
case 3, BattleFrontier_BattleDomeLobby_EventScript_ExitRules
-# 414 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattleDomeLobby_EventScript_ExitRules
-# 415 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
end
-# 416 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 417 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_RulesMatchup::
-# 418 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
msgbox BattleFrontier_BattleDomeLobby_Text_ExplainMatchupRules, MSGBOX_DEFAULT
-# 419 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
goto BattleFrontier_BattleDomeLobby_EventScript_ReadRulesBoard
-# 420 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
end
-# 421 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 422 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_RulesTourneyTree::
-# 423 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
msgbox BattleFrontier_BattleDomeLobby_Text_ExplainTourneyTree, MSGBOX_DEFAULT
-# 424 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
goto BattleFrontier_BattleDomeLobby_EventScript_ReadRulesBoard
-# 425 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
end
-# 426 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 427 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_RulesDoubleKO::
-# 428 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
msgbox BattleFrontier_BattleDomeLobby_Text_ExplainDoubleKORules, MSGBOX_DEFAULT
-# 429 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
goto BattleFrontier_BattleDomeLobby_EventScript_ReadRulesBoard
-# 430 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
end
-# 431 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 432 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_EventScript_ExitRules::
-# 433 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
releaseall
-# 434 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
end
-# 435 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 436 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_Text_WelcomeSingleBattle:
-# 437 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "Where the strategies of TRAINERS\n"
-# 438 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "are put to the test!\p"
-# 439 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "Welcome to the BATTLE DOME!\p"
-# 440 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "I am your guide to the SINGLE BATTLE\n"
-# 441 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "Tournament.$"
-# 442 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 443 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_Text_TakeSinglesChallenge:
-# 444 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "Would you like to challenge\n"
-# 445 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "the SINGLE BATTLE Tournament?$"
-# 446 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 447 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_Text_HopeToSeeYouAgain:
-# 448 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "We hope to see you again.$"
-# 449 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 450 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_Text_ExplainSinglesChallenge:
-# 451 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "The SINGLE BATTLE Tournament\n"
-# 452 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "is exactly as the name suggests--\l"
-# 453 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "a tournament of SINGLE BATTLES.\p"
-# 454 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "All participating TRAINERS must\n"
-# 455 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "enter three POKéMON each.\p"
-# 456 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "In each battle, one of the three\n"
-# 457 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "POKéMON must be held in reserve.\p"
-# 458 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "The other two POKéMON can battle\n"
-# 459 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "one at a time.\p"
-# 460 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "Choose the two battling POKéMON after\n"
-# 461 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "examining the opponent's trio.\p"
-# 462 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "You win the tournament by defeating\n"
-# 463 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "four TRAINERS.\p"
-# 464 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "Battle Points are awarded to\n"
-# 465 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "the tournament winner.\p"
-# 466 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "If you want to interrupt your\n"
-# 467 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "tournament, please save the game.\p"
-# 468 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "If you don't save before interrupting,\n"
-# 469 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "you will be disqualified.$"
-# 470 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 471 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_Text_OkayToSaveBeforeChallenge:
-# 472 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "Before I show you to the BATTLE DOME,\n"
-# 473 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "I must save the data. Is that okay?$"
-# 474 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 475 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_Text_WhichLevelMode:
-# 476 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "The tournament offers two levels\n"
-# 477 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "of challenge, Level 50 and Open Level.\l"
-# 478 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "Which is your choice?$"
-# 479 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 480 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_Text_SelectThreeMons:
-# 481 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "Now select the three POKéMON that\n"
-# 482 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "you wish to enter, please.$"
-# 483 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 484 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_Text_NotEnoughValidMonsLvOpen:
-# 485 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "Excuse me!\p"
-# 486 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "You don't have three eligible POKéMON.\p"
-# 487 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "Also, the POKéMON must be holding\n"
-# 488 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "different kinds of items.\p"
-# 489 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "EGGS{STR_VAR_1} ineligible.\p"
-# 490 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "Please come see me when you are ready.$"
-# 491 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 492 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_Text_NotEnoughValidMonsLv50:
-# 493 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "Excuse me!\p"
-# 494 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "You don't have three eligible POKéMON.\p"
-# 495 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "You must have three different POKéMON\n"
-# 496 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "of Level 50 or less to enter.\p"
-# 497 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "They also must be holding different\n"
-# 498 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "kinds of items.\p"
-# 499 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "EGGS{STR_VAR_1} ineligible.\p"
-# 500 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "Please come see me when you are ready.$"
-# 501 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 502 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_Text_ShowYouToBattleDome:
-# 503 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "I will now show you to\n"
-# 504 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "the BATTLE DOME.$"
-# 505 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 506 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_Text_DidntSaveBeforeQuitting:
-# 507 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "Excuse me!\p"
-# 508 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "You didn't save before you quit your\n"
-# 509 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "challenge last time.\p"
-# 510 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "Because of that, your challenge so far\n"
-# 511 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "has been disqualified. Sorry!$"
-# 512 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 513 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_Text_CongratsForWinningTourney:
-# 514 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "Congratulations for winning\n"
-# 515 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "your Battle Tournament!$"
-# 516 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 517 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
@ Unused
-# 518 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_Text_HereIsYourPrize:
-# 519 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "Here is your prize for your Battle\n"
-# 520 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "Tournament victory.$"
-# 521 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 522 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
@ Used by Verdanturf Tent
-# 523 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_Text_ReceivedPrize:
-# 524 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "{PLAYER} received the prize\n"
-# 525 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "{STR_VAR_1}.$"
-# 526 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 527 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
@ Unused
-# 528 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_Text_BagFullMakeRoom:
-# 529 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "Oh, your BAG appears to be full.\p"
-# 530 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "Please make room in your BAG, then come\n"
-# 531 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "see me.$"
-# 532 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 533 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_Text_ThankYouForPlaying:
-# 534 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "Thank you for playing!$"
-# 535 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 536 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_Text_RecordWillBeSaved:
-# 537 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "Your record will be saved.\n"
-# 538 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "Please wait.$"
-# 539 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 540 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_Text_WeveBeenWaitingForYou:
-# 541 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "We've been waiting for you!$"
-# 542 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 543 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_Text_OkayToSaveBeforeChallenge2:
-# 544 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "Before I show you to the BATTLE DOME,\n"
-# 545 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "I must save the data. Is that okay?$"
-# 546 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 547 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_Text_WelcomeDoubleBattle:
-# 548 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "Where the strategies of TRAINERS\n"
-# 549 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "are put to the test!\p"
-# 550 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "Welcome to the BATTLE DOME!\p"
-# 551 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "I am your guide to the DOUBLE BATTLE\n"
-# 552 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "Tournament.$"
-# 553 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 554 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_Text_TakeDoublesChallenge:
-# 555 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "Would you like to challenge\n"
-# 556 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "the DOUBLE BATTLE Tournament?$"
-# 557 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 558 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_Text_ExplainDoublesChallenge:
-# 559 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "The DOUBLE BATTLE Tournament\n"
-# 560 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "is exactly as the name suggests--\l"
-# 561 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "a tournament of DOUBLE BATTLES.\p"
-# 562 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "All participating TRAINERS must\n"
-# 563 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "enter three POKéMON each.\p"
-# 564 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "In each battle, one of the three\n"
-# 565 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "POKéMON must be held in reserve.\p"
-# 566 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "The remaining two POKéMON must take\n"
-# 567 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "part in a DOUBLE BATTLE.\p"
-# 568 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "Choose the two battling POKéMON after\n"
-# 569 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "examining the opponent's trio.\p"
-# 570 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "You win the tournament by defeating\n"
-# 571 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "four TRAINERS.\p"
-# 572 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "Battle Points are awarded to\n"
-# 573 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "the tournament winner.\p"
-# 574 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "If you want to interrupt your\n"
-# 575 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "tournament, please save the game.\p"
-# 576 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "If you don't save before interrupting,\n"
-# 577 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "you will be disqualified.$"
-# 578 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 579 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_Text_PrevTourneyResultsSinglesLv50:
-# 580 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "They're the results of the last\n"
-# 581 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "Level 50 SINGLE BATTLE Tournament.$"
-# 582 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 583 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_Text_PrevTourneyResultsDoublesLv50:
-# 584 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "They're the results of the last\n"
-# 585 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "Level 50 DOUBLE BATTLE Tournament.$"
-# 586 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 587 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_Text_PrevTourneyResultsSinglesLvOpen:
-# 588 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "They're the results of the last\n"
-# 589 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "Open Level SINGLE BATTLE Tournament.$"
-# 590 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 591 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_Text_PrevTourneyResultsDoublesLvOpen:
-# 592 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "They're the results of the last\n"
-# 593 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "Open Level DOUBLE BATTLE Tournament.$"
-# 594 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 595 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_Text_LastWinnerWasTough:
-# 596 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "Did you see it?\n"
-# 597 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "The last Battle Tournament?\p"
-# 598 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "The winner, {STR_VAR_1}, was seriously\n"
-# 599 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "tough.\p"
-# 600 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "You should check out the results\n"
-# 601 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "on the monitor beside the PC.$"
-# 602 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 603 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_OutsideWest_Text_LongDreamedAboutBattleFrontier:
-# 604 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "The BATTLE FRONTIER…\n"
-# 605 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "I've long dreamed about a place like it.$"
-# 606 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 607 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
@ Functionally unused
-# 608 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_OutsideWest_Text_BattleDomeSign2:
-# 609 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "The BATTLE DOME\n"
-# 610 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "Become the Unbeatable Superstar!$"
-# 611 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 612 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
@ Functionally unused
-# 613 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_OutsideWest_Text_QuestionMarkUnderConstruction:
-# 614 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "The ??????\n"
-# 615 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "Under Construction!$"
-# 616 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 617 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_Text_WinnersGainReputation:
-# 618 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "When a TRAINER chains tournament\n"
-# 619 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "wins at the BATTLE DOME, he or she\l"
-# 620 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "gains a reputation as a star.\p"
-# 621 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "Tough TRAINERS are drawn by that\n"
-# 622 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "reputation to the BATTLE DOME.\p"
-# 623 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "A true superstar is a TRAINER who\n"
-# 624 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "can keep winning tournaments.$"
-# 625 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 626 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_Text_TrashedInFirstRound:
-# 627 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "I ran into one of the tournament\n"
-# 628 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "favorites in the very first round.\p"
-# 629 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "Of course I got trashed…$"
-# 630 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 631 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_Text_NeedToCheckOpponentCarefully:
-# 632 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "I would've won if I'd kept this POKéMON\n"
-# 633 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "held in reserve.\p"
-# 634 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "You need to check your opponent's\n"
-# 635 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "POKéMON carefully before choosing\l"
-# 636 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "your battling POKéMON.$"
-# 637 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 638 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_Text_CongratsDefeatedTucker:
-# 639 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "Congratulations!\p"
-# 640 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "You defeated the DOME ACE and won\n"
-# 641 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "the Battle Tournament!$"
-# 642 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 643 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_Text_AwardTheseBattlePoints:
-# 644 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "In recognition of your strategy--\n"
-# 645 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "a thing of beauty it was, too--\l"
-# 646 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "we award you these Battle Point(s)!$"
-# 647 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 648 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_Text_RecordLastMatch:
-# 649 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "Would you like to record your\n"
-# 650 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "last BATTLE DOME match on your\l"
-# 651 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "FRONTIER PASS?$"
-# 652 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 653 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_Text_RulesAreListed:
-# 654 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "The Battle Tournament rules\n"
-# 655 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "are listed.$"
-# 656 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 657 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_Text_ReadWhichHeading:
-# 658 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "Which heading do you want to read?$"
-# 659 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 660 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_Text_ExplainMatchupRules:
-# 661 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "The tournament matchups are drawn up\n"
-# 662 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "based on the toughness of POKéMON\l"
-# 663 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "held by TRAINERS.\p"
-# 664 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "The matchups avoid having tough\n"
-# 665 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "TRAINERS face each other right away.$"
-# 666 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 667 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_Text_ExplainTourneyTree:
-# 668 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "The tournament chart, or as we call it,\n"
-# 669 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "the “Tree,” is available for viewing\l"
-# 670 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "in the Waiting Room from any guide.\p"
-# 671 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "The Tournament Tree will provide\n"
-# 672 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "several kinds of data.\p"
-# 673 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "The data on view includes the previous\n"
-# 674 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "tournament's results, the POKéMON held\l"
-# 675 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "by TRAINERS, and the battle styles of\l"
-# 676 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "TRAINERS.$"
-# 677 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
-# 678 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
BattleFrontier_BattleDomeLobby_Text_ExplainDoubleKORules:
-# 679 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "If battling POKéMON faint at the same\n"
-# 680 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "time--a double KO--in a tournament\l"
-# 681 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "match, the REFEREES will review\l"
-# 682 "data/maps/BattleFrontier_BattleDomeLobby/scripts.pory"
.string "the match and declare the winner.$"
diff --git a/data/maps/BattleFrontier_BattleFactoryLobby/scripts.inc b/data/maps/BattleFrontier_BattleFactoryLobby/scripts.inc
index 9e841251a07e..5475fc146f4c 100644
--- a/data/maps/BattleFrontier_BattleFactoryLobby/scripts.inc
+++ b/data/maps/BattleFrontier_BattleFactoryLobby/scripts.inc
@@ -1,1104 +1,554 @@
-# 1 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-
-# 2 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.set LOCALID_ATTENDANT_SINGLES, 1
-# 3 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.set LOCALID_ATTENDANT_DOUBLES, 6
-# 4 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 5 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_MapScripts::
-# 6 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
map_script MAP_SCRIPT_ON_FRAME_TABLE, BattleFrontier_BattleFactoryLobby_OnFrame
-# 7 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, BattleFrontier_BattleFactoryLobby_OnWarp
-# 8 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.byte 0
-# 9 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 10 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_OnWarp:
-# 11 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
map_script_2 VAR_TEMP_1, 0, BattleFrontier_BattleFactoryLobby_EventScript_TurnPlayerNorth
-# 12 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.2byte 0
-# 13 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 14 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_EventScript_TurnPlayerNorth::
-# 15 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
setvar VAR_TEMP_1, 1
-# 16 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
turnobject OBJ_EVENT_ID_PLAYER, DIR_NORTH
-# 17 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
end
-# 18 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 19 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_OnFrame:
-# 20 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
map_script_2 VAR_TEMP_CHALLENGE_STATUS, 0, BattleFrontier_BattleFactoryLobby_EventScript_GetChallengeStatus
-# 21 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING, BattleFrontier_BattleFactoryLobby_EventScript_QuitWithoutSaving
-# 22 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_PAUSED, BattleFrontier_BattleFactoryLobby_EventScript_ResumeChallenge
-# 23 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_WON, BattleFrontier_BattleFactoryLobby_EventScript_WonChallenge
-# 24 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_LOST, BattleFrontier_BattleFactoryLobby_EventScript_LostChallenge
-# 25 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.2byte 0
-# 26 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 27 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_EventScript_GetChallengeStatus::
-# 28 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
frontier_getstatus
-# 29 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
end
-# 30 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 31 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_EventScript_QuitWithoutSaving::
-# 32 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
lockall
-# 33 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
msgbox BattleFrontier_BattleFactoryLobby_Text_DidntSaveBeforeQuitting, MSGBOX_DEFAULT
-# 34 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
closemessage
-# 35 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
factory_setswapped
-# 36 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
factory_set FACTORY_DATA_WIN_STREAK_SWAPS, 0
-# 37 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
factory_set FACTORY_DATA_WIN_STREAK, 0
-# 38 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
factory_set FACTORY_DATA_WIN_STREAK_ACTIVE, FALSE
-# 39 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
frontier_set FRONTIER_DATA_CHALLENGE_STATUS, 0
-# 40 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 255
-# 41 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
releaseall
-# 42 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
end
-# 43 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 44 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_EventScript_WonChallenge::
-# 45 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
lockall
-# 46 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
frontier_isbrain
-# 47 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattleFactoryLobby_EventScript_DefeatedFactoryHead
-# 48 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
msgbox BattleFrontier_BattleFactoryLobby_Text_CongratsSevenWins, MSGBOX_DEFAULT
-# 49 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
waitmessage
-# 50 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
goto BattleFrontier_BattleFactoryLobby_EventScript_GiveBattlePoints
-# 51 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 52 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_EventScript_DefeatedFactoryHead::
-# 53 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
msgbox BattleFrontier_BattleFactoryLobby_Text_CongratsForDefeatingHead, MSGBOX_DEFAULT
-# 54 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
waitmessage
-# 55 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_EventScript_GiveBattlePoints::
-# 56 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
msgbox BattleFrontier_BattleFactoryLobby_Text_AwardBattlePoints, MSGBOX_DEFAULT
-# 57 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
frontier_givepoints
-# 58 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
msgbox BattleFrontier_Text_ObtainedXBattlePoints, MSGBOX_GETPOINTS
-# 59 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
message BattleFrontier_BattleFactoryLobby_Text_ExchangeMonsAndSave
-# 60 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
waitmessage
-# 61 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
frontier_checkairshow
-# 62 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
special LoadPlayerParty
-# 63 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
+ callnative UpdateFollowingPokemon
factory_save 0
-# 64 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
playse SE_SAVE
-# 65 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
waitse
-# 66 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
goto BattleFrontier_BattleFactoryLobby_EventScript_AskRecordBattle
-# 67 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
end
-# 68 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 69 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_EventScript_LostChallenge::
-# 70 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
lockall
-# 71 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
message BattleFrontier_BattleFactoryLobby_Text_ReturnMonsSaveResults
-# 72 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
waitmessage
-# 73 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
frontier_checkairshow
-# 74 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
special LoadPlayerParty
-# 75 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
+ callnative UpdateFollowingPokemon
factory_set FACTORY_DATA_WIN_STREAK_ACTIVE, FALSE
-# 76 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
factory_save 0
-# 77 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
playse SE_SAVE
-# 78 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
waitse
-# 79 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 80 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_EventScript_AskRecordBattle::
-# 81 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
call BattleFrontier_EventScript_GetCantRecordBattle
-# 82 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattleFactoryLobby_EventScript_EndRecordBattle
-# 83 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
message BattleFrontier_BattleFactoryLobby_Text_RecordLastMatch
-# 84 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
waitmessage
-# 85 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
multichoicedefault 20, 8, MULTI_YESNO, 1, FALSE
-# 86 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
switch VAR_RESULT
-# 87 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
case 1, BattleFrontier_BattleFactoryLobby_EventScript_EndRecordBattle
-# 88 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
case 0, BattleFrontier_BattleFactoryLobby_EventScript_RecordBattle
-# 89 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattleFactoryLobby_EventScript_EndRecordBattle
-# 90 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 91 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_EventScript_RecordBattle::
-# 92 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
call BattleFrontier_EventScript_SaveBattle
-# 93 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_EventScript_EndRecordBattle::
-# 94 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
msgbox BattleFrontier_BattleFactoryLobby_Text_LookForwardToNextVisit, MSGBOX_DEFAULT
-# 95 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
closemessage
-# 96 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 255
-# 97 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
releaseall
-# 98 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
end
-# 99 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 100 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_EventScript_ResumeChallenge::
-# 101 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
lockall
-# 102 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
message BattleFrontier_BattleFactoryLobby_Text_WaitingForYouToResume
-# 103 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
waitmessage
-# 104 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
factory_save CHALLENGE_STATUS_SAVING
-# 105 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
playse SE_SAVE
-# 106 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
waitse
-# 107 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
frontier_set FRONTIER_DATA_PAUSED, FALSE
-# 108 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 255
-# 109 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
setvar VAR_0x8006, 2
-# 110 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
goto BattleFrontier_BattleFactoryLobby_EventScript_EnterChallenge
-# 111 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 112 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_EventScript_SinglesAttendant::
-# 113 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
lock
-# 114 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
faceplayer
-# 115 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
setvar VAR_FRONTIER_FACILITY, FRONTIER_FACILITY_FACTORY
-# 116 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
setvar VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES
-# 117 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
goto BattleFrontier_BattleFactoryLobby_EventScript_Attendant
-# 118 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
end
-# 119 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 120 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_EventScript_DoublesAttendant::
-# 121 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
setvar VAR_FRONTIER_FACILITY, FRONTIER_FACILITY_FACTORY
-# 122 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
setvar VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES
-# 123 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
goto BattleFrontier_BattleFactoryLobby_EventScript_Attendant
-# 124 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
end
-# 125 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 126 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_EventScript_Attendant::
-# 127 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
special SavePlayerParty
-# 128 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattleFactoryLobby_EventScript_WelcomeForSingleBattle
-# 129 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattleFactoryLobby_EventScript_WelcomeForDoubleBattle
-# 130 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_EventScript_AskTakeChallenge::
-# 131 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattleFactoryLobby_EventScript_TakeSinglesChallenge
-# 132 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattleFactoryLobby_EventScript_TakeDoublesChallenge
-# 133 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
waitmessage
-# 134 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
multichoice 17, 6, MULTI_CHALLENGEINFO, FALSE
-# 135 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
switch VAR_RESULT
-# 136 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
case 0, BattleFrontier_BattleFactoryLobby_EventScript_TryEnterChallenge
-# 137 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
case 1, BattleFrontier_BattleFactoryLobby_EventScript_ExplainChallenge
-# 138 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
case 2, BattleFrontier_BattleFactoryLobby_EventScript_CancelChallenge
-# 139 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattleFactoryLobby_EventScript_CancelChallenge
-# 140 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 141 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_EventScript_TryEnterChallenge::
-# 142 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
message BattleFrontier_BattleFactoryLobby_Text_WhichLevelMode
-# 143 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
waitmessage
-# 144 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
multichoice 17, 6, MULTI_LEVEL_MODE, FALSE
-# 145 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
switch VAR_RESULT
-# 146 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
case FRONTIER_LVL_TENT, BattleFrontier_BattleFactoryLobby_EventScript_CancelChallenge
-# 147 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattleFactoryLobby_EventScript_CancelChallenge
-# 148 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
frontier_set FRONTIER_DATA_LVL_MODE, VAR_RESULT
-# 149 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
msgbox BattleFrontier_BattleFactoryLobby_Text_OkayToSaveBeforeChallenge, MSGBOX_YESNO
-# 150 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
switch VAR_RESULT
-# 151 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
case NO, BattleFrontier_BattleFactoryLobby_EventScript_LoadPartyAndCancelChallenge
-# 152 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
case YES, BattleFrontier_BattleFactoryLobby_EventScript_SaveBeforeChallenge
-# 153 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattleFactoryLobby_EventScript_LoadPartyAndCancelChallenge
-# 154 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 155 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_EventScript_SaveBeforeChallenge::
-# 156 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 0
-# 157 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
factory_init
-# 158 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
frontier_set FRONTIER_DATA_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING
-# 159 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
factory_set FACTORY_DATA_WIN_STREAK_ACTIVE, TRUE
-# 160 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
frontier_set FRONTIER_DATA_PAUSED, FALSE
-# 161 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
closemessage
-# 162 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
delay 2
-# 163 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
call Common_EventScript_SaveGame
-# 164 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 255
-# 165 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleFactoryLobby_EventScript_CancelChallengeSaveFailed
-# 166 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
setvar VAR_0x8006, 0
-# 167 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_EventScript_EnterChallenge::
-# 168 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
special SavePlayerParty
-# 169 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
msgbox BattleFrontier_BattleFactoryLobby_Text_StepThisWay, MSGBOX_DEFAULT
-# 170 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
closemessage
-# 171 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattleFactoryLobby_EventScript_TalkedToSinglesAttendant
-# 172 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattleFactoryLobby_EventScript_TalkedToDoublesAttendant
-# 173 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
applymovement VAR_LAST_TALKED, BattleFrontier_BattleFactoryLobby_Movement_AttendantEnterDoor
-# 174 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, BattleFrontier_BattleFactoryLobby_Movement_PlayerEnterDoor
-# 175 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
waitmovement 0
-# 176 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
warp MAP_BATTLE_FRONTIER_BATTLE_FACTORY_PRE_BATTLE_ROOM, 8, 13
-# 177 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 0
-# 178 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
waitstate
-# 179 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
end
-# 180 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 181 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_EventScript_TalkedToSinglesAttendant::
-# 182 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
setvar VAR_LAST_TALKED, LOCALID_ATTENDANT_SINGLES
-# 183 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
return
-# 184 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 185 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_EventScript_TalkedToDoublesAttendant::
-# 186 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
setvar VAR_LAST_TALKED, LOCALID_ATTENDANT_DOUBLES
-# 187 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
return
-# 188 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 189 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_EventScript_ExplainChallenge::
-# 190 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattleFactoryLobby_EventScript_ExplainSinglesChallenge
-# 191 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattleFactoryLobby_EventScript_ExplainDoublesChallenge
-# 192 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
goto BattleFrontier_BattleFactoryLobby_EventScript_AskTakeChallenge
-# 193 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 194 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_EventScript_CancelChallengeSaveFailed::
-# 195 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
frontier_set FRONTIER_DATA_CHALLENGE_STATUS, 0
-# 196 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
goto BattleFrontier_BattleFactoryLobby_EventScript_CancelChallenge
-# 197 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 198 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_EventScript_LoadPartyAndCancelChallenge::
-# 199 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
special LoadPlayerParty
-# 200 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
+ callnative UpdateFollowingPokemon
BattleFrontier_BattleFactoryLobby_EventScript_CancelChallenge::
-# 201 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
msgbox BattleFrontier_BattleFactoryLobby_Text_LookForwardToNextVisit, MSGBOX_DEFAULT
-# 202 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
release
-# 203 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
end
-# 204 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 205 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_Movement_AttendantEnterDoor:
-# 206 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
walk_up
-# 207 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
walk_up
-# 208 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
walk_up
-# 209 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
set_invisible
-# 210 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
step_end
-# 211 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 212 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_Movement_PlayerEnterDoor:
-# 213 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
walk_up
-# 214 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
walk_up
-# 215 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
walk_up
-# 216 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
walk_up
-# 217 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
step_end
-# 218 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 219 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_EventScript_WelcomeForSingleBattle::
-# 220 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
msgbox BattleFrontier_BattleFactoryLobby_Text_WelcomeForSingleBattle, MSGBOX_DEFAULT
-# 221 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
return
-# 222 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 223 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_EventScript_WelcomeForDoubleBattle::
-# 224 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
msgbox BattleFrontier_BattleFactoryLobby_Text_WelcomeForDoubleBattle, MSGBOX_DEFAULT
-# 225 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
return
-# 226 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 227 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_EventScript_TakeSinglesChallenge::
-# 228 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
message BattleFrontier_BattleFactoryLobby_Text_TakeSinglesChallenge
-# 229 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
return
-# 230 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 231 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_EventScript_TakeDoublesChallenge::
-# 232 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
message BattleFrontier_BattleFactoryLobby_Text_TakeDoublesChallenge
-# 233 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
return
-# 234 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 235 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_EventScript_ExplainSinglesChallenge::
-# 236 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
msgbox BattleFrontier_BattleFactoryLobby_Text_ExplainSinglesChallenge, MSGBOX_DEFAULT
-# 237 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
return
-# 238 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 239 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_EventScript_ExplainDoublesChallenge::
-# 240 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
msgbox BattleFrontier_BattleFactoryLobby_Text_ExplainDoublesChallenge, MSGBOX_DEFAULT
-# 241 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
return
-# 242 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 243 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_EventScript_ShowSinglesResults::
-# 244 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
lockall
-# 245 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
frontier_results FRONTIER_FACILITY_FACTORY, FRONTIER_MODE_SINGLES
-# 246 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
waitbuttonpress
-# 247 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
special RemoveRecordsWindow
-# 248 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
releaseall
-# 249 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
end
-# 250 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 251 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_EventScript_ShowDoublesResults::
-# 252 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
lockall
-# 253 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
frontier_results FRONTIER_FACILITY_FACTORY, FRONTIER_MODE_DOUBLES
-# 254 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
waitbuttonpress
-# 255 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
special RemoveRecordsWindow
-# 256 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
releaseall
-# 257 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
end
-# 258 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 259 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_EventScript_Woman::
-# 260 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
msgbox BattleFrontier_BattleFactoryLobby_Text_NeedKnowledgeOfMonsMoves, MSGBOX_NPC
-# 261 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
end
-# 262 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 263 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_EventScript_Camper::
-# 264 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
msgbox BattleFrontier_BattleFactoryLobby_Text_SwappedForWeakMon, MSGBOX_NPC
-# 265 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
end
-# 266 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 267 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_EventScript_Picnicker::
-# 268 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
lock
-# 269 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
msgbox BattleFrontier_BattleFactoryLobby_Text_NeedToCheckOpponentsMons, MSGBOX_DEFAULT
-# 270 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
release
-# 271 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
end
-# 272 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 273 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_EventScript_FatMan::
-# 274 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
msgbox BattleFrontier_BattleFactoryLobby_Text_CantFigureOutStaffHints, MSGBOX_NPC
-# 275 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
end
-# 276 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 277 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_EventScript_RulesBoard::
-# 278 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
lockall
-# 279 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
msgbox BattleFrontier_BattleFactoryLobby_Text_RulesAreListed, MSGBOX_DEFAULT
-# 280 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
goto BattleFrontier_BattleFactoryLobby_EventScript_ReadRulesBoard
-# 281 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
end
-# 282 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 283 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_EventScript_ReadRulesBoard::
-# 284 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
message BattleFrontier_BattleFactoryLobby_Text_ReadWhichHeading
-# 285 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
waitmessage
-# 286 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
multichoice 17, 0, MULTI_BATTLE_FACTORY_RULES, FALSE
-# 287 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
switch VAR_RESULT
-# 288 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
case 0, BattleFrontier_BattleFactoryLobby_EventScript_RulesBasics
-# 289 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
case 1, BattleFrontier_BattleFactoryLobby_EventScript_RulesSwapPartner
-# 290 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
case 2, BattleFrontier_BattleFactoryLobby_EventScript_RulesSwapNumber
-# 291 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
case 3, BattleFrontier_BattleFactoryLobby_EventScript_RulesSwapNotes
-# 292 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
case 4, BattleFrontier_BattleFactoryLobby_EventScript_RulesOpenLv
-# 293 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
case 5, BattleFrontier_BattleFactoryLobby_EventScript_ExitRules
-# 294 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattleFactoryLobby_EventScript_ExitRules
-# 295 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
end
-# 296 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 297 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_EventScript_RulesBasics::
-# 298 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
msgbox BattleFrontier_BattleFactoryLobby_Text_ExplainBasicRules, MSGBOX_DEFAULT
-# 299 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
goto BattleFrontier_BattleFactoryLobby_EventScript_ReadRulesBoard
-# 300 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
end
-# 301 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 302 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_EventScript_RulesSwapPartner::
-# 303 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
msgbox BattleFrontier_BattleFactoryLobby_Text_ExplainSwapPartnerRules, MSGBOX_DEFAULT
-# 304 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
goto BattleFrontier_BattleFactoryLobby_EventScript_ReadRulesBoard
-# 305 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
end
-# 306 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 307 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_EventScript_RulesSwapNumber::
-# 308 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
msgbox BattleFrontier_BattleFactoryLobby_Text_ExplainSwapNumberRules, MSGBOX_DEFAULT
-# 309 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
goto BattleFrontier_BattleFactoryLobby_EventScript_ReadRulesBoard
-# 310 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
end
-# 311 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 312 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_EventScript_RulesSwapNotes::
-# 313 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
msgbox BattleFrontier_BattleFactoryLobby_Text_ExplainSwapNotesRules, MSGBOX_DEFAULT
-# 314 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
goto BattleFrontier_BattleFactoryLobby_EventScript_ReadRulesBoard
-# 315 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
end
-# 316 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 317 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_EventScript_RulesOpenLv::
-# 318 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
msgbox BattleFrontier_BattleFactoryLobby_Text_ExplainOpenLvRules, MSGBOX_DEFAULT
-# 319 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
goto BattleFrontier_BattleFactoryLobby_EventScript_ReadRulesBoard
-# 320 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
end
-# 321 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 322 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_EventScript_ExitRules::
-# 323 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
releaseall
-# 324 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
end
-# 325 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 326 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_Text_WelcomeForSingleBattle:
-# 327 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "Where the intelligence of TRAINERS\n"
-# 328 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "is put to the test!\p"
-# 329 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "Welcome to the BATTLE FACTORY!\p"
-# 330 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "I am your guide to the Battle Swap\n"
-# 331 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "Single Tournament.$"
-# 332 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 333 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_Text_TakeSinglesChallenge:
-# 334 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "Would you like to take the Battle\n"
-# 335 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "Swap Single challenge?$"
-# 336 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 337 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_Text_ExplainSinglesChallenge:
-# 338 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "The Battle Swap Single Tournament\n"
-# 339 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "is a SINGLE BATTLE competition using\l"
-# 340 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "only rental POKéMON.\p"
-# 341 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "First, you will be loaned three\n"
-# 342 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "POKéMON specifically for this event.\p"
-# 343 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "Using the supplied rental POKéMON,\n"
-# 344 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "you must conduct a SINGLE BATTLE.\p"
-# 345 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "If you win, you are permitted to trade\n"
-# 346 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "one of your rental POKéMON.\p"
-# 347 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "Repeat this cycle of battling and\n"
-# 348 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "trading--if you win seven times in\l"
-# 349 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "a row, you will earn Battle Points.\p"
-# 350 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "If you want to interrupt your\n"
-# 351 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "challenge, please save the game.\p"
-# 352 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "If you don't save, you will be\n"
-# 353 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "disqualified from your challenge.$"
-# 354 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 355 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_Text_LookForwardToNextVisit:
-# 356 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "We look forward to your next visit.$"
-# 357 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 358 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_Text_WhichLevelMode:
-# 359 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "Which level do you wish to challenge?\n"
-# 360 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "Level 50 or Open Level?$"
-# 361 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 362 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_Text_OkayToSaveBeforeChallenge:
-# 363 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "Before you begin your challenge,\n"
-# 364 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "I need to save the game. Is that okay?$"
-# 365 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 366 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
@ Unused
-# 367 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_Text_WillHoldMonsForSafekeeping:
-# 368 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "Okay, I will hold your POKéMON for\n"
-# 369 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "safekeeping while you compete.$"
-# 370 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 371 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_Text_StepThisWay:
-# 372 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "Please step this way.$"
-# 373 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 374 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_Text_ReturnMonsSaveResults:
-# 375 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "Thank you for participating!\p"
-# 376 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "I will return your POKéMON in exchange\n"
-# 377 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "for our rental POKéMON.\p"
-# 378 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "I must also save the event results.\n"
-# 379 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "Please wait.$"
-# 380 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 381 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
@ Unused
-# 382 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_Text_ReturnMons:
-# 383 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "I will return your POKéMON in exchange\n"
-# 384 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "for our rental POKéMON.$"
-# 385 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 386 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_Text_CongratsSevenWins:
-# 387 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "Congratulations! You've won seven\n"
-# 388 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "straight Battle Swap matches!$"
-# 389 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 390 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
@ Unused
-# 391 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_Text_AwardBattlePointsForStreak:
-# 392 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "In recognition of your 7-win streak,\n"
-# 393 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "we award you these Battle Point(s).$"
-# 394 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 395 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
@ Unused
-# 396 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_Text_MaxBattlePoints:
-# 397 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "Oh, oh, oh!\p"
-# 398 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "Your Battle Points are maxed.\p"
-# 399 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "Please come back after using\n"
-# 400 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "some Battle Points.$"
-# 401 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 402 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_Text_WaitingForYouToResume:
-# 403 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "We've been waiting for you!\p"
-# 404 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "Before we resume your challenge,\n"
-# 405 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "I must save the game.$"
-# 406 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 407 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_Text_DidntSaveBeforeQuitting:
-# 408 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "I'm sorry to say this, but you didn't\n"
-# 409 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "save before you quit playing last time.\p"
-# 410 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "As a result, you have been disqualified\n"
-# 411 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "from your challenge.$"
-# 412 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 413 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
@ Unused
-# 414 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_Text_WellReturnMons:
-# 415 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "We'll return your personal POKéMON.$"
-# 416 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 417 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
@ Unused
-# 418 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_Text_ReceivedPrizeItem:
-# 419 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "{PLAYER} received the prize\n"
-# 420 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "{STR_VAR_1}.$"
-# 421 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 422 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_Text_WelcomeForDoubleBattle:
-# 423 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "Where the intelligence of TRAINERS\n"
-# 424 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "is put to the test!\p"
-# 425 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "Welcome to the BATTLE FACTORY!\p"
-# 426 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "I am your guide to the Battle Swap\n"
-# 427 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "Double Tournament.$"
-# 428 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 429 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_Text_TakeDoublesChallenge:
-# 430 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "Would you like to take the Battle\n"
-# 431 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "Swap Double challenge?$"
-# 432 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 433 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_Text_ExplainDoublesChallenge:
-# 434 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "The Battle Swap Double Tournament\n"
-# 435 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "is a DOUBLE BATTLE competition using\l"
-# 436 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "only rental POKéMON.\p"
-# 437 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "First, you will be loaned three\n"
-# 438 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "POKéMON specifically for this event.\p"
-# 439 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "Using the supplied rental POKéMON,\n"
-# 440 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "you must conduct a DOUBLE BATTLE.\p"
-# 441 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "If you win, you are permitted to trade\n"
-# 442 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "one of your rental POKéMON.\p"
-# 443 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "Repeat this cycle of battling and\n"
-# 444 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "trading--if you win seven times in\l"
-# 445 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "a row, you will earn Battle Points.\p"
-# 446 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "If you want to interrupt your\n"
-# 447 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "challenge, please save the game.\p"
-# 448 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "If you don't save before interrupting,\n"
-# 449 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "you will be disqualified.$"
-# 450 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 451 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_Text_CongratsForDefeatingHead:
-# 452 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "Congratulations for defeating\n"
-# 453 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "the FACTORY HEAD and winning\l"
-# 454 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "seven matches in a row!$"
-# 455 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 456 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_Text_AwardBattlePoints:
-# 457 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "In recognition of your wealth of\n"
-# 458 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "knowledge and keen intelligence,\l"
-# 459 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "we award you these Battle Point(s).$"
-# 460 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 461 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_Text_ExchangeMonsAndSave:
-# 462 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "Let me exchange your POKéMON\n"
-# 463 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "for our rental POKéMON.\p"
-# 464 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "I need to save the battle data,\n"
-# 465 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "so please wait.$"
-# 466 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 467 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_Text_RecordLastMatch:
-# 468 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "Would you like to record your last\n"
-# 469 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "BATTLE FACTORY match on your\l"
-# 470 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "FRONTIER PASS?$"
-# 471 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 472 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_Text_NeedKnowledgeOfMonsMoves:
-# 473 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "Hi!\n"
-# 474 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "You, there!\p"
-# 475 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "Are you thinking that the events here\n"
-# 476 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "are easy since you don't need to have\l"
-# 477 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "a raised team of POKéMON?\p"
-# 478 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "I wouldn't be too sure about winning\n"
-# 479 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "that easily.\p"
-# 480 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "If you don't have thorough knowledge\n"
-# 481 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "about POKéMON and their moves,\l"
-# 482 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "it will be tough to keep winning.$"
-# 483 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 484 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_Text_SwappedForWeakMon:
-# 485 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "I swapped for a weak POKéMON…\n"
-# 486 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "I thought it was a good kind to have…\p"
-# 487 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "They wiped the floor with us…$"
-# 488 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 489 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_Text_NeedToCheckOpponentsMons:
-# 490 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "Things haven't been going my way\n"
-# 491 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "at all.\p"
-# 492 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "You need to check your opponent's\n"
-# 493 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "POKéMON during battle to see if\l"
-# 494 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "they're any good.$"
-# 495 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 496 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_Text_CantFigureOutStaffHints:
-# 497 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "You know how the staff here give you\n"
-# 498 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "a few hints about your next opponent?\p"
-# 499 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "Well, I'm a full-grown man, but I have\n"
-# 500 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "trouble figuring out their hints.$"
-# 501 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 502 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
@ Unused
-# 503 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_Text_RentalMonsAreVaried:
-# 504 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "Like, I'm really tough, but I get bored\n"
-# 505 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "really easily, so I just kept swapping\l"
-# 506 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "and battling over and over.\p"
-# 507 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "So anyway, when I kept entering\n"
-# 508 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "Battle Swap events, I noticed they\l"
-# 509 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "varied the rental POKéMON.$"
-# 510 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 511 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_Text_RulesAreListed:
-# 512 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "The Battle Swap rules are listed.$"
-# 513 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 514 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_Text_ReadWhichHeading:
-# 515 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "Which heading do you want to read?$"
-# 516 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 517 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_Text_ExplainBasicRules:
-# 518 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "In a Battle Swap event, you may use\n"
-# 519 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "only three POKéMON.\p"
-# 520 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "Whether you are renting or swapping,\n"
-# 521 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "your team may not have two or more\l"
-# 522 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "of the same POKéMON.$"
-# 523 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 524 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_Text_ExplainSwapPartnerRules:
-# 525 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "You may swap POKéMON only with\n"
-# 526 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "the TRAINER you have just defeated.\p"
-# 527 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "You may swap for only those POKéMON\n"
-# 528 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "used by the beaten TRAINER.$"
-# 529 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 530 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_Text_ExplainSwapNumberRules:
-# 531 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "After every battle you win, you may\n"
-# 532 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "swap for one of your defeated\l"
-# 533 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "opponent's POKéMON.\p"
-# 534 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "You will not be able to swap POKéMON\n"
-# 535 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "with the seventh TRAINER in the event.$"
-# 536 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 537 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_Text_ExplainSwapNotesRules:
-# 538 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "There are two key points to be aware\n"
-# 539 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "of when swapping POKéMON.\p"
-# 540 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "First, when swapping, you can't check\n"
-# 541 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "the stats of the POKéMON you are\l"
-# 542 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "about to receive.\p"
-# 543 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "Second, the POKéMON on your team\n"
-# 544 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "are lined up in sequence, depending on\l"
-# 545 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "the order in which you rented them.\p"
-# 546 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "This sequence remains unchanged\n"
-# 547 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "even when swaps are made.$"
-# 548 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
-# 549 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
BattleFrontier_BattleFactoryLobby_Text_ExplainOpenLvRules:
-# 550 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "In the Open Level, the rental POKéMON\n"
-# 551 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "and the opposing TRAINERS' POKéMON\l"
-# 552 "data/maps/BattleFrontier_BattleFactoryLobby/scripts.pory"
.string "are all Level 100.$"
diff --git a/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc b/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc
index b291c66d7acf..33d3735884cb 100644
--- a/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc
+++ b/data/maps/BattleFrontier_BattlePalaceLobby/scripts.inc
@@ -1,1300 +1,653 @@
-# 1 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-
-# 2 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.set LOCALID_ATTENDANT_SINGLES, 1
-# 3 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.set LOCALID_ATTENDANT_DOUBLES, 6
-# 4 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 5 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_MapScripts::
-# 6 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
map_script MAP_SCRIPT_ON_FRAME_TABLE, BattleFrontier_BattlePalaceLobby_OnFrame
-# 7 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, BattleFrontier_BattlePalaceLobby_OnWarp
-# 8 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.byte 0
-# 9 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 10 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_OnWarp:
-# 11 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
map_script_2 VAR_TEMP_1, 0, BattleFrontier_BattlePalaceLobby_EventScript_TurnPlayerNorth
-# 12 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.2byte 0
-# 13 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 14 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_TurnPlayerNorth::
-# 15 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
setvar VAR_TEMP_1, 1
-# 16 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
turnobject OBJ_EVENT_ID_PLAYER, DIR_NORTH
-# 17 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
end
-# 18 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 19 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_OnFrame:
-# 20 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
map_script_2 VAR_TEMP_CHALLENGE_STATUS, 0, BattleFrontier_BattlePalaceLobby_EventScript_GetChallengeStatus
-# 21 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING, BattleFrontier_BattlePalaceLobby_EventScript_QuitWithoutSaving
-# 22 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_PAUSED, BattleFrontier_BattlePalaceLobby_EventScript_ResumeChallenge
-# 23 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_WON, BattleFrontier_BattlePalaceLobby_EventScript_WonChallenge
-# 24 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_LOST, BattleFrontier_BattlePalaceLobby_EventScript_LostChallenge
-# 25 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.2byte 0
-# 26 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 27 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_GetChallengeStatus::
-# 28 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
frontier_getstatus
-# 29 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
end
-# 30 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 31 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_QuitWithoutSaving::
-# 32 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
lockall
-# 33 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
msgbox BattleFrontier_BattlePalaceLobby_Text_FailedToSaveBeforeEndingChallenge, MSGBOX_DEFAULT
-# 34 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
closemessage
-# 35 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
palace_set PALACE_DATA_WIN_STREAK, 0
-# 36 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
palace_set PALACE_DATA_WIN_STREAK_ACTIVE, FALSE
-# 37 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
frontier_set FRONTIER_DATA_CHALLENGE_STATUS, 0
-# 38 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 255
-# 39 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
releaseall
-# 40 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
end
-# 41 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 42 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_WonChallenge::
-# 43 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
lockall
-# 44 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
frontier_isbrain
-# 45 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattlePalaceLobby_EventScript_DefeatedMaven
-# 46 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
msgbox BattleFrontier_BattlePalaceLobby_Text_FirmTrueBondsFor7WinStreak, MSGBOX_DEFAULT
-# 47 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
goto BattleFrontier_BattlePalaceLobby_EventScript_GiveBattlePoints
-# 48 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 49 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_DefeatedMaven::
-# 50 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
msgbox BattleFrontier_BattlePalaceLobby_Text_ToDefeatMavenAnd7Trainers, MSGBOX_DEFAULT
-# 51 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_GiveBattlePoints::
-# 52 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
msgbox BattleFrontier_BattlePalaceLobby_Text_PresentYouWithBattlePoints, MSGBOX_DEFAULT
-# 53 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
frontier_givepoints
-# 54 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
msgbox BattleFrontier_Text_ObtainedXBattlePoints, MSGBOX_GETPOINTS
-# 55 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
message BattleFrontier_BattlePalaceLobby_Text_FeatWillBeRecorded
-# 56 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
waitmessage
-# 57 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
call BattleFrontier_BattlePalaceLobby_EventScript_SaveAfterChallenge
-# 58 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
msgbox BattleFrontier_BattlePalaceLobby_Text_ReturnWhenFortified, MSGBOX_DEFAULT
-# 59 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
closemessage
-# 60 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 255
-# 61 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
releaseall
-# 62 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
end
-# 63 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 64 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_LostChallenge::
-# 65 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
lockall
-# 66 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
message BattleFrontier_BattlePalaceLobby_Text_ResultsWillBeRecorded
-# 67 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
waitmessage
-# 68 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
palace_set PALACE_DATA_WIN_STREAK_ACTIVE, FALSE
-# 69 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
call BattleFrontier_BattlePalaceLobby_EventScript_SaveAfterChallenge
-# 70 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
msgbox BattleFrontier_BattlePalaceLobby_Text_ReturnWhenFortified, MSGBOX_DEFAULT
-# 71 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
closemessage
-# 72 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 255
-# 73 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
releaseall
-# 74 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
end
-# 75 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 76 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_SaveAfterChallenge::
-# 77 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
frontier_checkairshow
-# 78 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
special LoadPlayerParty
-# 79 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
special HealPlayerParty
-# 80 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
+ callnative UpdateFollowingPokemon
palace_save 0
-# 81 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
playse SE_SAVE
-# 82 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
waitse
-# 83 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
call BattleFrontier_EventScript_GetCantRecordBattle
-# 84 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattlePalaceLobby_EventScript_EndSaveAfterChallenge
-# 85 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
message BattleFrontier_BattlePalaceLobby_Text_LikeToRecordMatch
-# 86 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
waitmessage
-# 87 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
multichoicedefault 20, 8, MULTI_YESNO, 1, FALSE
-# 88 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
switch VAR_RESULT
-# 89 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
case 1, BattleFrontier_BattlePalaceLobby_EventScript_EndSaveAfterChallenge
-# 90 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
case 0, BattleFrontier_BattlePalaceLobby_EventScript_RecordMatch
-# 91 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattlePalaceLobby_EventScript_EndSaveAfterChallenge
-# 92 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 93 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_RecordMatch::
-# 94 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
call BattleFrontier_EventScript_SaveBattle
-# 95 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_EndSaveAfterChallenge::
-# 96 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
return
-# 97 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 98 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_ResumeChallenge::
-# 99 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
lockall
-# 100 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
msgbox BattleFrontier_BattlePalaceLobby_Text_WeHaveBeenWaiting, MSGBOX_DEFAULT
-# 101 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
message BattleFrontier_BattlePalaceLobby_Text_MustSaveBeforeChallenge
-# 102 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
waitmessage
-# 103 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
palace_save CHALLENGE_STATUS_SAVING
-# 104 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
playse SE_SAVE
-# 105 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
waitse
-# 106 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
frontier_set FRONTIER_DATA_PAUSED, FALSE
-# 107 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 255
-# 108 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
goto BattleFrontier_BattlePalaceLobby_EventScript_EnterChallenge
-# 109 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 110 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_SinglesAttendant::
-# 111 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
lock
-# 112 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
faceplayer
-# 113 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
setvar VAR_FRONTIER_FACILITY, FRONTIER_FACILITY_PALACE
-# 114 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
setvar VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES
-# 115 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
goto BattleFrontier_BattlePalaceLobby_EventScript_Attendant
-# 116 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
end
-# 117 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 118 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_DoublesAttendant::
-# 119 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
lock
-# 120 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
faceplayer
-# 121 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
setvar VAR_FRONTIER_FACILITY, FRONTIER_FACILITY_PALACE
-# 122 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
setvar VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES
-# 123 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
goto BattleFrontier_BattlePalaceLobby_EventScript_Attendant
-# 124 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
end
-# 125 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 126 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_Attendant::
-# 127 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
palace_get PALACE_DATA_PRIZE
-# 128 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
goto_if_ne VAR_RESULT, ITEM_NONE, BattleFrontier_BattlePalaceLobby_EventScript_WonChallenge
-# 129 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
special SavePlayerParty
-# 130 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattlePalaceLobby_EventScript_WelcomeForSingleBattle
-# 131 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattlePalaceLobby_EventScript_WelcomeForDoubleBattle
-# 132 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_AskTakeChallenge::
-# 133 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattlePalaceLobby_EventScript_AskTakeSingleBattleChallenge
-# 134 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattlePalaceLobby_EventScript_AskTakeDoubleBattleChallenge
-# 135 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
waitmessage
-# 136 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
multichoice 17, 6, MULTI_CHALLENGEINFO, FALSE
-# 137 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
switch VAR_RESULT
-# 138 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
case 0, BattleFrontier_BattlePalaceLobby_EventScript_TryEnterChallenge
-# 139 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
case 1, BattleFrontier_BattlePalaceLobby_EventScript_ExplainChallenge
-# 140 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
case 2, BattleFrontier_BattlePalaceLobby_EventScript_CancelChallenge
-# 141 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattlePalaceLobby_EventScript_CancelChallenge
-# 142 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 143 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_TryEnterChallenge::
-# 144 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
message BattleFrontier_BattlePalaceLobby_Text_WhichChallenge
-# 145 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
waitmessage
-# 146 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
multichoice 17, 6, MULTI_LEVEL_MODE, FALSE
-# 147 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
switch VAR_RESULT
-# 148 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
case FRONTIER_LVL_TENT, BattleFrontier_BattlePalaceLobby_EventScript_CancelChallenge
-# 149 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattlePalaceLobby_EventScript_CancelChallenge
-# 150 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
frontier_checkineligible
-# 151 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
goto_if_eq VAR_0x8004, TRUE, BattleFrontier_BattlePalaceLobby_EventScript_NotEnoughValidMons
-# 152 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
frontier_set FRONTIER_DATA_LVL_MODE, VAR_RESULT
-# 153 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
msgbox BattleFrontier_BattlePalaceLobby_Text_NowSelectThreeMons, MSGBOX_DEFAULT
-# 154 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
fadescreen FADE_TO_BLACK
-# 155 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
+ callnative RemoveFollowingPokemon
call BattleFrontier_EventScript_GetLvlMode
-# 156 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
copyvar VAR_0x8004, VAR_RESULT
-# 157 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
setvar VAR_0x8005, FRONTIER_PARTY_SIZE
-# 158 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
special ChoosePartyForBattleFrontier
-# 159 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
waitstate
-# 160 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
goto_if_eq VAR_RESULT, 0, BattleFrontier_BattlePalaceLobby_EventScript_LoadPartyAndCancelChallenge
-# 161 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
msgbox BattleFrontier_BattlePalaceLobby_Text_MustSaveBeforeChallenge2, MSGBOX_YESNO
-# 162 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
switch VAR_RESULT
-# 163 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
case NO, BattleFrontier_BattlePalaceLobby_EventScript_LoadPartyAndCancelChallenge
-# 164 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
case YES, BattleFrontier_BattlePalaceLobby_EventScript_SaveBeforeChallenge
-# 165 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattlePalaceLobby_EventScript_LoadPartyAndCancelChallenge
-# 166 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 167 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_SaveBeforeChallenge::
-# 168 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 0
-# 169 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
frontier_set FRONTIER_DATA_SELECTED_MON_ORDER
-# 170 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
palace_init
-# 171 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
palace_set PALACE_DATA_WIN_STREAK_ACTIVE, TRUE
-# 172 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
frontier_set FRONTIER_DATA_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING
-# 173 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
frontier_set FRONTIER_DATA_PAUSED, FALSE
-# 174 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
special LoadPlayerParty
-# 175 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
closemessage
-# 176 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
delay 2
-# 177 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
call Common_EventScript_SaveGame
-# 178 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 255
-# 179 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
goto_if_eq VAR_RESULT, 0, BattleFrontier_BattlePalaceLobby_EventScript_CancelChallengeSaveFailed
-# 180 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_EnterChallenge::
-# 181 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
special SavePlayerParty
-# 182 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
frontier_setpartyorder FRONTIER_PARTY_SIZE
-# 183 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
msgbox BattleFrontier_BattlePalaceLobby_Text_FollowMe, MSGBOX_DEFAULT
-# 184 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
closemessage
-# 185 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
call BattleFrontier_BattlePalaceLobby_EventScript_WalkToDoor
-# 186 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
warp MAP_BATTLE_FRONTIER_BATTLE_PALACE_CORRIDOR, 8, 13
-# 187 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 0
-# 188 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
waitstate
-# 189 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
end
-# 190 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 191 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_ExplainChallenge::
-# 192 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
goto_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattlePalaceLobby_EventScript_ExplainDoublesChallenge
-# 193 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
msgbox BattleFrontier_BattlePalaceLobby_Text_ExplainSingleBattleChallenge, MSGBOX_DEFAULT
-# 194 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
goto BattleFrontier_BattlePalaceLobby_EventScript_AskTakeChallenge
-# 195 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 196 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_ExplainDoublesChallenge::
-# 197 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
msgbox BattleFrontier_BattlePalaceLobby_Text_ExplainDoubleBattleChallenge, MSGBOX_DEFAULT
-# 198 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
goto BattleFrontier_BattlePalaceLobby_EventScript_AskTakeChallenge
-# 199 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 200 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_NotEnoughValidMons::
-# 201 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
switch VAR_RESULT
-# 202 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
case FRONTIER_LVL_50, BattleFrontier_BattlePalaceLobby_EventScript_NotEnoughValidMonsLv50
-# 203 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
case FRONTIER_LVL_OPEN, BattleFrontier_BattlePalaceLobby_EventScript_NotEnoughValidMonsLvOpen
-# 204 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 205 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_NotEnoughValidMonsLv50::
-# 206 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
msgbox BattleFrontier_BattlePalaceLobby_Text_NotEnoughValidMonsLv50, MSGBOX_DEFAULT
-# 207 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
goto BattleFrontier_BattlePalaceLobby_EventScript_EndCancelChallenge
-# 208 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 209 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_NotEnoughValidMonsLvOpen::
-# 210 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
msgbox BattleFrontier_BattlePalaceLobby_Text_NotEnoughValidMonsLvOpen, MSGBOX_DEFAULT
-# 211 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
goto BattleFrontier_BattlePalaceLobby_EventScript_EndCancelChallenge
-# 212 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 213 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_CancelChallengeSaveFailed::
-# 214 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
frontier_set FRONTIER_DATA_CHALLENGE_STATUS, 0
-# 215 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
goto BattleFrontier_BattlePalaceLobby_EventScript_CancelChallenge
-# 216 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 217 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_LoadPartyAndCancelChallenge::
-# 218 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
special LoadPlayerParty
-# 219 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
+ callnative LoadPlayerParty
BattleFrontier_BattlePalaceLobby_EventScript_CancelChallenge::
-# 220 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
msgbox BattleFrontier_BattlePalaceLobby_Text_ReturnWhenFortified, MSGBOX_DEFAULT
-# 221 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_EndCancelChallenge::
-# 222 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
release
-# 223 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
end
-# 224 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 225 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_WelcomeForSingleBattle::
-# 226 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
msgbox BattleFrontier_BattlePalaceLobby_Text_WelcomeForSingleBattle, MSGBOX_DEFAULT
-# 227 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
return
-# 228 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 229 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_WelcomeForDoubleBattle::
-# 230 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
msgbox BattleFrontier_BattlePalaceLobby_Text_WelcomeForDoubleBattle, MSGBOX_DEFAULT
-# 231 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
return
-# 232 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 233 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_AskTakeSingleBattleChallenge::
-# 234 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
message BattleFrontier_BattlePalaceLobby_Text_TakeSingleBattleChallenge
-# 235 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
return
-# 236 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 237 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_AskTakeDoubleBattleChallenge::
-# 238 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
message BattleFrontier_BattlePalaceLobby_Text_TakeDoubleBattleChallenge
-# 239 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
return
-# 240 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 241 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_WalkToDoor::
-# 242 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattlePalaceLobby_EventScript_TalkedToSinglesAttendant
-# 243 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattlePalaceLobby_EventScript_TalkedToDoublesAttendant
-# 244 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
applymovement VAR_LAST_TALKED, BattleFrontier_BattlePalaceLobby_Movement_WalkToDoor
-# 245 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, BattleFrontier_BattlePalaceLobby_Movement_WalkToDoor
-# 246 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
waitmovement 0
-# 247 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattlePalaceLobby_EventScript_OpenSinglesHallDoor
-# 248 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattlePalaceLobby_EventScript_OpenDoublesHallDoor
-# 249 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
waitdooranim
-# 250 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
applymovement VAR_LAST_TALKED, BattleFrontier_BattlePalaceLobby_Movement_AttendantEnterDoor
-# 251 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, BattleFrontier_BattlePalaceLobby_Movement_PlayerEnterDoor
-# 252 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
waitmovement 0
-# 253 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattlePalaceLobby_EventScript_CloseSinglesHallDoor
-# 254 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattlePalaceLobby_EventScript_CloseDoublesHallDoor
-# 255 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
waitdooranim
-# 256 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
return
-# 257 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 258 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_TalkedToSinglesAttendant::
-# 259 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
setvar VAR_LAST_TALKED, LOCALID_ATTENDANT_SINGLES
-# 260 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
return
-# 261 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 262 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_TalkedToDoublesAttendant::
-# 263 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
setvar VAR_LAST_TALKED, LOCALID_ATTENDANT_DOUBLES
-# 264 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
return
-# 265 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 266 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_OpenSinglesHallDoor::
-# 267 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
opendoor 5, 4
-# 268 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
return
-# 269 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 270 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_OpenDoublesHallDoor::
-# 271 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
opendoor 19, 4
-# 272 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
return
-# 273 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 274 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_CloseSinglesHallDoor::
-# 275 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
closedoor 5, 4
-# 276 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
return
-# 277 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 278 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_CloseDoublesHallDoor::
-# 279 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
closedoor 19, 4
-# 280 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
return
-# 281 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 282 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_Movement_WalkToDoor:
-# 283 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
walk_up
-# 284 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
step_end
-# 285 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 286 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_Movement_AttendantEnterDoor:
-# 287 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
walk_up
-# 288 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
set_invisible
-# 289 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
step_end
-# 290 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 291 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_Movement_PlayerEnterDoor:
-# 292 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
walk_up
-# 293 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
walk_up
-# 294 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
set_invisible
-# 295 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
step_end
-# 296 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 297 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_ShowSinglesResults::
-# 298 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
lockall
-# 299 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
frontier_results FRONTIER_FACILITY_PALACE, FRONTIER_MODE_SINGLES
-# 300 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
waitbuttonpress
-# 301 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
special RemoveRecordsWindow
-# 302 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
releaseall
-# 303 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
end
-# 304 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 305 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_ShowDoublesResults::
-# 306 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
lockall
-# 307 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
frontier_results FRONTIER_FACILITY_PALACE, FRONTIER_MODE_DOUBLES
-# 308 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
waitbuttonpress
-# 309 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
special RemoveRecordsWindow
-# 310 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
releaseall
-# 311 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
end
-# 312 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 313 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_BlackBelt::
-# 314 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
msgbox BattleFrontier_BattlePalaceLobby_Text_LadyCanTellWhatMonsThink, MSGBOX_NPC
-# 315 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
end
-# 316 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 317 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_Man::
-# 318 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
msgbox BattleFrontier_BattlePalaceLobby_Text_NatureAndMovesKeyHere, MSGBOX_NPC
-# 319 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
end
-# 320 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 321 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_Beauty::
-# 322 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
msgbox BattleFrontier_BattlePalaceLobby_Text_MonDocileButTransforms, MSGBOX_NPC
-# 323 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
end
-# 324 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 325 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_Maniac::
-# 326 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
msgbox BattleFrontier_BattlePalaceLobby_Text_WhatNatureFavorsChippingAway, MSGBOX_NPC
-# 327 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
end
-# 328 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 329 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_RulesBoard::
-# 330 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
lockall
-# 331 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
msgbox BattleFrontier_BattlePalaceLobby_Text_RulesAreListed, MSGBOX_DEFAULT
-# 332 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
goto BattleFrontier_BattlePalaceLobby_EventScript_ReadRulesBoard
-# 333 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
end
-# 334 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 335 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_ReadRulesBoard::
-# 336 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
message BattleFrontier_BattlePalaceLobby_Text_ReadWhichHeading
-# 337 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
waitmessage
-# 338 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
multichoice 16, 0, MULTI_BATTLE_PALACE_RULES, FALSE
-# 339 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
switch VAR_RESULT
-# 340 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
case 0, BattleFrontier_BattlePalaceLobby_EventScript_RulesBasics
-# 341 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
case 1, BattleFrontier_BattlePalaceLobby_EventScript_RulesNature
-# 342 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
case 2, BattleFrontier_BattlePalaceLobby_EventScript_RulesMoves
-# 343 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
case 3, BattleFrontier_BattlePalaceLobby_EventScript_RulesUnderpowered
-# 344 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
case 4, BattleFrontier_BattlePalaceLobby_EventScript_RulesWhenInDanger
-# 345 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
case 5, BattleFrontier_BattlePalaceLobby_EventScript_ExitRules
-# 346 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattlePalaceLobby_EventScript_ExitRules
-# 347 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
end
-# 348 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 349 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_RulesBasics::
-# 350 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
msgbox BattleFrontier_BattlePalaceLobby_Text_ExplainRulesBasics, MSGBOX_DEFAULT
-# 351 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
goto BattleFrontier_BattlePalaceLobby_EventScript_ReadRulesBoard
-# 352 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
end
-# 353 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 354 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_RulesNature::
-# 355 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
msgbox BattleFrontier_BattlePalaceLobby_Text_ExplainRulesNature, MSGBOX_DEFAULT
-# 356 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
goto BattleFrontier_BattlePalaceLobby_EventScript_ReadRulesBoard
-# 357 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
end
-# 358 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 359 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_RulesMoves::
-# 360 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
msgbox BattleFrontier_BattlePalaceLobby_Text_ExplainRulesMoves, MSGBOX_DEFAULT
-# 361 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
goto BattleFrontier_BattlePalaceLobby_EventScript_ReadRulesBoard
-# 362 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
end
-# 363 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 364 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_RulesUnderpowered::
-# 365 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
msgbox BattleFrontier_BattlePalaceLobby_Text_ExplainRulesUnderpowered, MSGBOX_DEFAULT
-# 366 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
goto BattleFrontier_BattlePalaceLobby_EventScript_ReadRulesBoard
-# 367 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
end
-# 368 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 369 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_RulesWhenInDanger::
-# 370 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
msgbox BattleFrontier_BattlePalaceLobby_Text_ExplainRulesWhenInDanger, MSGBOX_DEFAULT
-# 371 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
goto BattleFrontier_BattlePalaceLobby_EventScript_ReadRulesBoard
-# 372 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
end
-# 373 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 374 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_EventScript_ExitRules::
-# 375 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
releaseall
-# 376 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
end
-# 377 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 378 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_Text_WelcomeForSingleBattle:
-# 379 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "Where the hearts of TRAINERS\n"
-# 380 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "are put to the test.\p"
-# 381 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "I welcome you to the BATTLE PALACE.\p"
-# 382 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "I accept challenges to the SINGLE\n"
-# 383 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "BATTLE HALLS.$"
-# 384 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 385 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_Text_TakeSingleBattleChallenge:
-# 386 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "Do you wish to take\n"
-# 387 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "the SINGLE BATTLE HALL challenge?$"
-# 388 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 389 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_Text_ExplainSingleBattleChallenge:
-# 390 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "In the BATTLE PALACE, there are\n"
-# 391 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "several auditoriums for SINGLE BATTLES\l"
-# 392 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "that are named SINGLE BATTLE HALLS.\p"
-# 393 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "The SINGLE BATTLES are conducted in\n"
-# 394 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "the usual way, except with one crucial\l"
-# 395 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "rule that must be obeyed.\p"
-# 396 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "TRAINERS are permitted only to switch\n"
-# 397 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "their POKéMON in and out.\p"
-# 398 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "TRAINERS are otherwise forbidden to\n"
-# 399 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "command their POKéMON.\p"
-# 400 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "The POKéMON are to behave according\n"
-# 401 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "to their nature and battle on their own.\p"
-# 402 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "You must put your trust in your\n"
-# 403 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "POKéMON and watch over them.\p"
-# 404 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "If you achieve the honor of beating\n"
-# 405 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "seven TRAINERS in succession,\l"
-# 406 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "we will present you with Battle Points.\p"
-# 407 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "If you want to interrupt your\n"
-# 408 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "challenge, you must save the game.\p"
-# 409 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "If you don't save before interrupting,\n"
-# 410 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "you will be disqualified.$"
-# 411 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 412 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_Text_ReturnWhenFortified:
-# 413 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "When you have fortified your heart\n"
-# 414 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "and POKéMON, you must return.$"
-# 415 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 416 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_Text_WhichChallenge:
-# 417 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "There are two BATTLE HALLS,\n"
-# 418 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "Level 50 and Open Level.\l"
-# 419 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "Which is your choice of a challenge?$"
-# 420 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 421 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_Text_NotEnoughValidMonsLv50:
-# 422 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "Sigh…\p"
-# 423 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "You do not have the three POKéMON\n"
-# 424 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "required for the challenge.\p"
-# 425 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "To enter, you must provide three\n"
-# 426 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "different kinds of POKéMON.\p"
-# 427 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "These POKéMON must all be of\n"
-# 428 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "Level 50 or lower.\p"
-# 429 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "They also must not be holding\n"
-# 430 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "the same kinds of items.\p"
-# 431 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "EGGS{STR_VAR_1} ineligible.\p"
-# 432 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "Come back when you have made\n"
-# 433 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "your preparations.$"
-# 434 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 435 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_Text_NotEnoughValidMonsLvOpen:
-# 436 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "Sigh…\p"
-# 437 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "You do not have the three POKéMON\n"
-# 438 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "required for the challenge.\p"
-# 439 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "To enter, you must provide three\n"
-# 440 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "different kinds of POKéMON.\p"
-# 441 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "They also must not be holding\n"
-# 442 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "the same kinds of items.\p"
-# 443 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "EGGS{STR_VAR_1} ineligible.\p"
-# 444 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "Come back when you have made\n"
-# 445 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "your preparations.$"
-# 446 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 447 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_Text_NowSelectThreeMons:
-# 448 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "Good. Now, you must select your\n"
-# 449 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "three POKéMON.$"
-# 450 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 451 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_Text_MustSaveBeforeChallenge2:
-# 452 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "I must save before I show you to\n"
-# 453 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "the BATTLE HALL. Is that okay?$"
-# 454 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 455 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_Text_FollowMe:
-# 456 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "Good.\n"
-# 457 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "Now, follow me.$"
-# 458 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 459 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_Text_ResultsWillBeRecorded:
-# 460 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "I feel privileged for having seen\n"
-# 461 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "your POKéMON's exploits.\p"
-# 462 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "The results will be recorded.\n"
-# 463 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "I must ask you to briefly wait.$"
-# 464 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 465 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_Text_FirmTrueBondsFor7WinStreak:
-# 466 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "To achieve a 7-win streak…\p"
-# 467 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "The bonds that bind your heart with\n"
-# 468 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "your POKéMON seem firm and true.$"
-# 469 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 470 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_Text_FeatWillBeRecorded:
-# 471 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "Your feat will be recorded.\n"
-# 472 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "I must ask you to briefly wait.$"
-# 473 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 474 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
@ Unused
-# 475 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_Text_BattlePointsFor7WinStreak:
-# 476 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "For the feat of your 7-win streak,\n"
-# 477 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "we present you with Battle Point(s).$"
-# 478 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 479 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_Text_NoSpaceForPrize:
-# 480 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "You seem to have no space for\n"
-# 481 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "our prize.\p"
-# 482 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "You should return when you have\n"
-# 483 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "organized your BAG.$"
-# 484 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 485 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_Text_WeHaveBeenWaiting:
-# 486 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "We have been waiting for you…$"
-# 487 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 488 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_Text_MustSaveBeforeChallenge:
-# 489 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "I must save before I show you to\n"
-# 490 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "the BATTLE HALL. Is that okay?$"
-# 491 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 492 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_Text_FailedToSaveBeforeEndingChallenge:
-# 493 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "Sigh…\p"
-# 494 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "You failed to save before you ended\n"
-# 495 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "your challenge the last time.\p"
-# 496 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "As a result, your challenge has been\n"
-# 497 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "disqualified. It is most unfortunate.$"
-# 498 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 499 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
@ Unused
-# 500 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_Text_ReceivedPrize:
-# 501 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "{PLAYER} received the prize\n"
-# 502 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "{STR_VAR_1}.$"
-# 503 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 504 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_Text_LadyCanTellWhatMonsThink:
-# 505 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "For a hardy fellow like me,\n"
-# 506 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "hardy POKéMON are the best.\p"
-# 507 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "Offense is the best defense!\n"
-# 508 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "A relentless attack is the ultimate!\p"
-# 509 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "But that's not what I wanted to chat\n"
-# 510 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "about.\p"
-# 511 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "Every so often a really cute lady\n"
-# 512 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "swings by here.\p"
-# 513 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "She says that she can tell what\n"
-# 514 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "POKéMON are thinking.\p"
-# 515 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "I don't know about that part,\n"
-# 516 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "but she is really cute.\p"
-# 517 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "Huh?\n"
-# 518 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "Why are you looking at me like that?$"
-# 519 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 520 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_Text_NatureAndMovesKeyHere:
-# 521 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "Hmm…\p"
-# 522 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "It appears that the nature of POKéMON\n"
-# 523 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "and the moves that they have been\l"
-# 524 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "taught are the keys to battle here.\p"
-# 525 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "To be more precise, it's how well\n"
-# 526 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "the moves match the nature of\l"
-# 527 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "the POKéMON.\p"
-# 528 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "If your POKéMON is in trouble and\n"
-# 529 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "unable to live up to its potential,\l"
-# 530 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "you may need to examine how well\l"
-# 531 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "its moves match its nature.$"
-# 532 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 533 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_Text_MonDocileButTransforms:
-# 534 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "My POKéMON is usually very docile.\p"
-# 535 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "But when it's in a BATTLE HALL,\n"
-# 536 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "it sometimes seems to become\l"
-# 537 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "transformed into something wicked!\p"
-# 538 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "It becomes totally intimidating.\n"
-# 539 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "It's shocking, even.$"
-# 540 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 541 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_Text_WhatNatureFavorsChippingAway:
-# 542 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "I wonder what sort of nature a POKéMON\n"
-# 543 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "would have if it favored enfeebling its\l"
-# 544 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "opponents and chipping away slowly.\p"
-# 545 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "I'd be surprised if it was a LAX nature.\p"
-# 546 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "But, nah, that can't be right.$"
-# 547 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 548 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_Text_WelcomeForDoubleBattle:
-# 549 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "Where the hearts of TRAINERS\n"
-# 550 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "are put to the test.\p"
-# 551 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "I welcome you to the BATTLE PALACE.\p"
-# 552 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "I accept challenges to the DOUBLE\n"
-# 553 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "BATTLE HALLS.$"
-# 554 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 555 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_Text_TakeDoubleBattleChallenge:
-# 556 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "Do you wish to take\n"
-# 557 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "the DOUBLE BATTLE HALL challenge?$"
-# 558 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 559 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_Text_ExplainDoubleBattleChallenge:
-# 560 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "In the BATTLE PALACE, there are\n"
-# 561 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "several auditoriums for DOUBLE BATTLES\l"
-# 562 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "that are named DOUBLE BATTLE HALLS.\p"
-# 563 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "The DOUBLE BATTLES are conducted in\n"
-# 564 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "the usual way, except with one crucial\l"
-# 565 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "rule that must be obeyed.\p"
-# 566 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "TRAINERS are permitted only to switch\n"
-# 567 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "their POKéMON in and out.\p"
-# 568 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "TRAINERS are otherwise forbidden to\n"
-# 569 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "command their POKéMON.\p"
-# 570 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "The POKéMON are to behave according\n"
-# 571 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "to their nature and battle on their own.\p"
-# 572 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "You must put your trust in your\n"
-# 573 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "POKéMON and watch over them.\p"
-# 574 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "If you achieve the honor of beating\n"
-# 575 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "seven TRAINERS in succession,\l"
-# 576 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "we will present you with Battle Points.\p"
-# 577 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "If you want to interrupt your\n"
-# 578 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "challenge, please save the game.\p"
-# 579 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "If you don't save before interrupting,\n"
-# 580 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "you will be disqualified.$"
-# 581 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 582 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_Text_ToDefeatMavenAnd7Trainers:
-# 583 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "To defeat the PALACE MAVEN\n"
-# 584 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "and seven TRAINERS in a row…$"
-# 585 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 586 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_Text_PresentYouWithBattlePoints:
-# 587 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "In honor of the bond you share with\n"
-# 588 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "your POKéMON, we present you with\l"
-# 589 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "these Battle Point(s).$"
-# 590 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 591 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_Text_LikeToRecordMatch:
-# 592 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "Would you like to record your latest\n"
-# 593 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "BATTLE PALACE match on your\l"
-# 594 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "FRONTIER PASS?$"
-# 595 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 596 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_Text_RulesAreListed:
-# 597 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "The BATTLE HALL rules are listed.$"
-# 598 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 599 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_Text_ReadWhichHeading:
-# 600 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "Which heading do you want to read?$"
-# 601 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 602 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_Text_ExplainRulesBasics:
-# 603 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "Here, POKéMON are required to think\n"
-# 604 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "and battle by themselves.\p"
-# 605 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "Unlike in the wild, POKéMON that live\n"
-# 606 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "with people behave differently\l"
-# 607 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "depending on their nature.$"
-# 608 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 609 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_Text_ExplainRulesNature:
-# 610 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "Depending on its nature, a POKéMON\n"
-# 611 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "may prefer to attack no matter what.\p"
-# 612 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "Another POKéMON may prefer to protect\n"
-# 613 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "itself from any harm.\p"
-# 614 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "Yet another may enjoy vexing or\n"
-# 615 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "confounding its foes.\p"
-# 616 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "Due to its nature, a POKéMON\n"
-# 617 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "will have favorite moves that it is good\l"
-# 618 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "at using.\p"
-# 619 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "It may also dislike certain moves that\n"
-# 620 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "it has trouble using.$"
-# 621 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 622 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_Text_ExplainRulesMoves:
-# 623 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "There are offensive moves that inflict\n"
-# 624 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "direct damage on the foe.\p"
-# 625 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "There are defensive moves that are\n"
-# 626 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "used to prepare for enemy attacks or\l"
-# 627 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "used to heal HP and so on.\p"
-# 628 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "There are also other somewhat-odd\n"
-# 629 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "moves that may enfeeble the foes with\l"
-# 630 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "stat problems including poison and \l"
-# 631 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "paralysis.\p"
-# 632 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "POKéMON will consider using moves in\n"
-# 633 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "these three categories.$"
-# 634 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 635 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_Text_ExplainRulesUnderpowered:
-# 636 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "When not under command by its TRAINER,\n"
-# 637 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "a POKéMON may be unable to effectively\l"
-# 638 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "use certain moves.\p"
-# 639 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "A POKéMON is not good at using any\n"
-# 640 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "move that it dislikes.\p"
-# 641 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "If a POKéMON only knows moves that\n"
-# 642 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "do not match its nature, it will often\l"
-# 643 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "be unable to live up to its potential.$"
-# 644 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
-# 645 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
BattleFrontier_BattlePalaceLobby_Text_ExplainRulesWhenInDanger:
-# 646 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "Depending on its nature, a POKéMON may\n"
-# 647 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "start using moves that don't match its\l"
-# 648 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "nature when it is in trouble.\p"
-# 649 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "If a POKéMON begins behaving oddly\n"
-# 650 "data/maps/BattleFrontier_BattlePalaceLobby/scripts.pory"
.string "in a pinch, watch it carefully.$"
+
diff --git a/data/maps/BattleFrontier_BattlePikeLobby/scripts.inc b/data/maps/BattleFrontier_BattlePikeLobby/scripts.inc
index 8c37b065860e..b37100bc0ab3 100644
--- a/data/maps/BattleFrontier_BattlePikeLobby/scripts.inc
+++ b/data/maps/BattleFrontier_BattlePikeLobby/scripts.inc
@@ -1,866 +1,437 @@
-# 1 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-
-# 2 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.set LOCALID_ATTENDANT, 1
-# 3 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 4 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_MapScripts::
-# 5 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
map_script MAP_SCRIPT_ON_FRAME_TABLE, BattleFrontier_BattlePikeLobby_OnFrame
-# 6 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, BattleFrontier_BattlePikeLobby_OnWarp
-# 7 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.byte 0
-# 8 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 9 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_OnFrame:
-# 10 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
map_script_2 VAR_TEMP_CHALLENGE_STATUS, 0, BattleFrontier_BattlePikeLobby_EventScript_GetChallengeStatus
-# 11 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING, BattleFrontier_BattlePikeLobby_EventScript_QuitWithoutSaving
-# 12 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_WON, BattleFrontier_BattlePikeLobby_EventScript_WonChallenge
-# 13 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_LOST, BattleFrontier_BattlePikeLobby_EventScript_LostChallenge
-# 14 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.2byte 0
-# 15 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 16 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_OnWarp:
-# 17 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
map_script_2 VAR_TEMP_1, 0, BattleFrontier_BattlePikeLobby_EventScript_TurnPlayerNorth
-# 18 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.2byte 0
-# 19 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 20 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_EventScript_TurnPlayerNorth::
-# 21 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
setvar VAR_TEMP_1, 1
-# 22 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
turnobject OBJ_EVENT_ID_PLAYER, DIR_NORTH
-# 23 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
end
-# 24 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 25 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_EventScript_GetChallengeStatus::
-# 26 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
frontier_getstatus
-# 27 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
end
-# 28 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 29 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_EventScript_QuitWithoutSaving::
-# 30 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
special HealPlayerParty
-# 31 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
pike_resethelditems
-# 32 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
lockall
-# 33 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
msgbox BattleFrontier_BattlePikeLobby_Text_FailedToSaveBeforeQuitting, MSGBOX_DEFAULT
-# 34 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
closemessage
-# 35 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
pike_set PIKE_DATA_WIN_STREAK, 0
-# 36 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
pike_set PIKE_DATA_WIN_STREAK_ACTIVE, FALSE
-# 37 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
frontier_set FRONTIER_DATA_CHALLENGE_STATUS, 0
-# 38 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 255
-# 39 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
releaseall
-# 40 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
end
-# 41 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 42 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_EventScript_WonChallenge::
-# 43 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
lockall
-# 44 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
frontier_isbrain
-# 45 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattlePikeLobby_EventScript_DefeatedQueen
-# 46 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
msgbox BattleFrontier_BattlePikeLobby_Text_PossessLuckInAbundance, MSGBOX_DEFAULT
-# 47 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
waitmessage
-# 48 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
goto BattleFrontier_BattlePikeLobby_EventScript_GiveBattlePoints
-# 49 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 50 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_EventScript_DefeatedQueen::
-# 51 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
msgbox BattleFrontier_BattlePikeLobby_Text_SnatchedVictoryFromQueen, MSGBOX_DEFAULT
-# 52 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
waitmessage
-# 53 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_EventScript_GiveBattlePoints::
-# 54 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
msgbox BattleFrontier_BattlePikeLobby_Text_AwardYouTheseBattlePoints, MSGBOX_DEFAULT
-# 55 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
frontier_givepoints
-# 56 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
msgbox BattleFrontier_Text_ObtainedXBattlePoints, MSGBOX_GETPOINTS
-# 57 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
frontier_checkairshow
-# 58 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
pike_get PIKE_DATA_TOTAL_STREAKS
-# 59 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
addvar VAR_RESULT, 1
-# 60 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
pike_set PIKE_DATA_TOTAL_STREAKS, VAR_RESULT
-# 61 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
special LoadPlayerParty
-# 62 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
special HealPlayerParty
-# 63 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
+ callnative UpdateFollowingPokemon
pike_resethelditems
-# 64 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
message BattleFrontier_BattlePikeLobby_Text_ShallRecordResults
-# 65 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
waitmessage
-# 66 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
pike_save 0
-# 67 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
playse SE_SAVE
-# 68 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
waitse
-# 69 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
msgbox BattleFrontier_BattlePikeLobby_Text_LookForwardToSeeingYou, MSGBOX_DEFAULT
-# 70 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
closemessage
-# 71 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 255
-# 72 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
releaseall
-# 73 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
end
-# 74 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 75 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_EventScript_LostChallenge::
-# 76 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
lockall
-# 77 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
message BattleFrontier_BattlePikeLobby_Text_ChallengeEndedRecordResults
-# 78 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
waitmessage
-# 79 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
frontier_checkairshow
-# 80 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
frontier_set FRONTIER_DATA_BATTLE_NUM, 0
-# 81 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
pike_set PIKE_DATA_WIN_STREAK_ACTIVE, FALSE
-# 82 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
special LoadPlayerParty
-# 83 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
special HealPlayerParty
-# 84 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
+ callnative UpdateFollowingPokemon
pike_resethelditems
-# 85 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
pike_save 0
-# 86 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
playse SE_SAVE
-# 87 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
waitse
-# 88 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
msgbox BattleFrontier_BattlePikeLobby_Text_LookForwardToSeeingYou, MSGBOX_DEFAULT
-# 89 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
closemessage
-# 90 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 255
-# 91 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
releaseall
-# 92 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
end
-# 93 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 94 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_EventScript_Attendant::
-# 95 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
lock
-# 96 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
faceplayer
-# 97 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
setvar VAR_FRONTIER_FACILITY, FRONTIER_FACILITY_PIKE
-# 98 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
setvar VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES
-# 99 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
special SavePlayerParty
-# 100 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
msgbox BattleFrontier_BattlePikeLobby_Text_WelcomeToBattlePike, MSGBOX_DEFAULT
-# 101 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_EventScript_AskTakeChallenge::
-# 102 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
message BattleFrontier_BattlePikeLobby_Text_TakeChallenge
-# 103 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
waitmessage
-# 104 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
multichoice 17, 6, MULTI_CHALLENGEINFO, FALSE
-# 105 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
switch VAR_RESULT
-# 106 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
case 0, BattleFrontier_BattlePikeLobby_EventScript_TryEnterChallenge
-# 107 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
case 1, BattleFrontier_BattlePikeLobby_EventScript_ExplainChallenge
-# 108 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
case 2, BattleFrontier_BattlePikeLobby_EventScript_CancelChallenge
-# 109 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattlePikeLobby_EventScript_CancelChallenge
-# 110 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 111 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_EventScript_TryEnterChallenge::
-# 112 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
message BattleFrontier_BattlePikeLobby_Text_WhichChallengeMode
-# 113 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
waitmessage
-# 114 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
multichoice 17, 6, MULTI_LEVEL_MODE, FALSE
-# 115 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
switch VAR_RESULT
-# 116 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
case FRONTIER_LVL_TENT, BattleFrontier_BattlePikeLobby_EventScript_CancelChallenge
-# 117 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattlePikeLobby_EventScript_CancelChallenge
-# 118 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
frontier_checkineligible
-# 119 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
goto_if_eq VAR_0x8004, TRUE, BattleFrontier_BattlePikeLobby_EventScript_NotEnoughValidMons
-# 120 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
frontier_set FRONTIER_DATA_LVL_MODE, VAR_RESULT
-# 121 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
msgbox BattleFrontier_BattlePikeLobby_Text_PleaseChooseThreeMons, MSGBOX_DEFAULT
-# 122 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
fadescreen FADE_TO_BLACK
-# 123 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
+ callnative RemoveFollowingPokemon
call BattleFrontier_EventScript_GetLvlMode
-# 124 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
copyvar VAR_0x8004, VAR_RESULT
-# 125 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
setvar VAR_0x8005, FRONTIER_PARTY_SIZE
-# 126 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
special ChoosePartyForBattleFrontier
-# 127 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
waitstate
-# 128 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
goto_if_eq VAR_RESULT, 0, BattleFrontier_BattlePikeLobby_EventScript_LoadPartyAndCancelChallenge
-# 129 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
msgbox BattleFrontier_BattlePikeLobby_Text_SaveBeforeChallenge, MSGBOX_YESNO
-# 130 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
switch VAR_RESULT
-# 131 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
case NO, BattleFrontier_BattlePikeLobby_EventScript_LoadPartyAndCancelChallenge
-# 132 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
case YES, BattleFrontier_BattlePikeLobby_EventScript_SaveBeforeChallenge
-# 133 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattlePikeLobby_EventScript_LoadPartyAndCancelChallenge
-# 134 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 135 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_EventScript_SaveBeforeChallenge::
-# 136 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 0
-# 137 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
setvar VAR_TEMP_1, 0
-# 138 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
frontier_set FRONTIER_DATA_SELECTED_MON_ORDER
-# 139 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
pike_init
-# 140 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
frontier_set FRONTIER_DATA_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING
-# 141 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
pike_set PIKE_DATA_WIN_STREAK_ACTIVE, TRUE
-# 142 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
pike_savehelditems
-# 143 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
frontier_set FRONTIER_DATA_PAUSED, FALSE
-# 144 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
special LoadPlayerParty
-# 145 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
closemessage
-# 146 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
delay 2
-# 147 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
call Common_EventScript_SaveGame
-# 148 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 255
-# 149 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
pike_savehelditems
-# 150 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
goto_if_eq VAR_RESULT, 0, BattleFrontier_BattlePikeLobby_EventScript_CancelChallengeSaveFailed
-# 151 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
special SavePlayerParty
-# 152 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
frontier_setpartyorder FRONTIER_PARTY_SIZE
-# 153 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
msgbox BattleFrontier_BattlePikeLobby_Text_StepThisWay, MSGBOX_DEFAULT
-# 154 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
closemessage
-# 155 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
frontier_settrainers
-# 156 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
call BattleFrontier_BattlePikeLobby_EventScript_WalkToCorridor
-# 157 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
special HealPlayerParty
-# 158 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
call BattleFrontier_BattlePike_EventScript_CloseCurtain
-# 159 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
warpsilent MAP_BATTLE_FRONTIER_BATTLE_PIKE_CORRIDOR, 6, 7
-# 160 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 0
-# 161 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
waitstate
-# 162 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
end
-# 163 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 164 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_EventScript_ExplainChallenge::
-# 165 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
msgbox BattleFrontier_BattlePikeLobby_Text_ExplainBattlePike, MSGBOX_DEFAULT
-# 166 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
goto BattleFrontier_BattlePikeLobby_EventScript_AskTakeChallenge
-# 167 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 168 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_EventScript_NotEnoughValidMons::
-# 169 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
switch VAR_RESULT
-# 170 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
case FRONTIER_LVL_50, BattleFrontier_BattlePikeLobby_EventScript_NotEnoughValidMonsLv50
-# 171 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
case FRONTIER_LVL_OPEN, BattleFrontier_BattlePikeLobby_EventScript_NotEnoughValidMonsLvOpen
-# 172 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 173 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_EventScript_NotEnoughValidMonsLv50::
-# 174 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
msgbox BattleFrontier_BattlePikeLobby_Text_NotEnoughValidMonsLv50, MSGBOX_DEFAULT
-# 175 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
goto BattleFrontier_BattlePikeLobby_EventScript_EndCancelChallenge
-# 176 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 177 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_EventScript_NotEnoughValidMonsLvOpen::
-# 178 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
msgbox BattleFrontier_BattlePikeLobby_Text_NotEnoughValidMonsLvOpen, MSGBOX_DEFAULT
-# 179 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
goto BattleFrontier_BattlePikeLobby_EventScript_EndCancelChallenge
-# 180 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 181 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_EventScript_CancelChallengeSaveFailed::
-# 182 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
frontier_set FRONTIER_DATA_CHALLENGE_STATUS, 0
-# 183 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
goto BattleFrontier_BattlePikeLobby_EventScript_CancelChallenge
-# 184 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 185 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_EventScript_LoadPartyAndCancelChallenge::
-# 186 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
special LoadPlayerParty
-# 187 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
+ callnative UpdateFollowingPokemon
BattleFrontier_BattlePikeLobby_EventScript_CancelChallenge::
-# 188 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
msgbox BattleFrontier_BattlePikeLobby_Text_LookForwardToSeeingYou, MSGBOX_DEFAULT
-# 189 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_EventScript_EndCancelChallenge::
-# 190 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
release
-# 191 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
end
-# 192 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 193 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_EventScript_ShowResults::
-# 194 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
lockall
-# 195 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
frontier_results FRONTIER_FACILITY_PIKE
-# 196 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
waitbuttonpress
-# 197 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
special RemoveRecordsWindow
-# 198 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
releaseall
-# 199 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
end
-# 200 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 201 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_EventScript_WalkToCorridor::
-# 202 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
applymovement LOCALID_ATTENDANT, BattleFrontier_BattlePikeLobby_Movement_AttendantWalkToCorridor
-# 203 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, BattleFrontier_BattlePikeLobby_Movement_PlayerWalkToCorridor
-# 204 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
waitmovement 0
-# 205 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
return
-# 206 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 207 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_Movement_PlayerWalkToCorridor:
-# 208 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
walk_up
-# 209 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_Movement_AttendantWalkToCorridor:
-# 210 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
walk_up
-# 211 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
walk_up
-# 212 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
set_invisible
-# 213 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
step_end
-# 214 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 215 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_EventScript_Hiker::
-# 216 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
msgbox BattleFrontier_BattlePikeLobby_Text_OneRoomAwayFromGoal, MSGBOX_NPC
-# 217 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
end
-# 218 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 219 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_EventScript_Twin::
-# 220 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
msgbox BattleFrontier_BattlePikeLobby_Text_NeverHadToBattleTrainer, MSGBOX_NPC
-# 221 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
end
-# 222 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 223 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_EventScript_Beauty::
-# 224 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
msgbox BattleFrontier_BattlePikeLobby_Text_ThinkAbilitiesUsefulHere, MSGBOX_NPC
-# 225 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
end
-# 226 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 227 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_EventScript_RulesBoard::
-# 228 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
lockall
-# 229 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
msgbox BattleFrontier_BattlePikeLobby_Text_RulesAreListed, MSGBOX_DEFAULT
-# 230 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
goto BattleFrontier_BattlePikeLobby_EventScript_ReadRulesBoard
-# 231 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
end
-# 232 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 233 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_EventScript_ReadRulesBoard::
-# 234 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
message BattleFrontier_BattlePikeLobby_Text_ReadWhichHeading
-# 235 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
waitmessage
-# 236 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
multichoice 16, 4, MULTI_BATTLE_PIKE_RULES, FALSE
-# 237 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
switch VAR_RESULT
-# 238 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
case 0, BattleFrontier_BattlePikeLobby_EventScript_RulesPokenavBag
-# 239 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
case 1, BattleFrontier_BattlePikeLobby_EventScript_RulesHeldItems
-# 240 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
case 2, BattleFrontier_BattlePikeLobby_EventScript_RulesMonOrder
-# 241 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
case 3, BattleFrontier_BattlePikeLobby_EventScript_ExitRules
-# 242 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattlePikeLobby_EventScript_ExitRules
-# 243 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
end
-# 244 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 245 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_EventScript_RulesPokenavBag::
-# 246 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
msgbox BattleFrontier_BattlePikeLobby_Text_ExplainPokenavBagRules, MSGBOX_DEFAULT
-# 247 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
goto BattleFrontier_BattlePikeLobby_EventScript_ReadRulesBoard
-# 248 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
end
-# 249 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 250 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_EventScript_RulesHeldItems::
-# 251 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
msgbox BattleFrontier_BattlePikeLobby_Text_ExplainHeldItemRules, MSGBOX_DEFAULT
-# 252 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
goto BattleFrontier_BattlePikeLobby_EventScript_ReadRulesBoard
-# 253 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
end
-# 254 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 255 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_EventScript_RulesMonOrder::
-# 256 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
msgbox BattleFrontier_BattlePikeLobby_Text_ExplainMonOrderRules, MSGBOX_DEFAULT
-# 257 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
goto BattleFrontier_BattlePikeLobby_EventScript_ReadRulesBoard
-# 258 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
end
-# 259 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 260 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_EventScript_ExitRules::
-# 261 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
releaseall
-# 262 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
end
-# 263 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 264 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePike_EventScript_CloseCurtain::
-# 265 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
playse SE_PIKE_CURTAIN_CLOSE
-# 266 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
special CloseBattlePikeCurtain
-# 267 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
waitstate
-# 268 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
waitse
-# 269 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
return
-# 270 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 271 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_Text_WelcomeToBattlePike:
-# 272 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "Where the luck of TRAINERS\n"
-# 273 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "is put to the test…\p"
-# 274 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "Welcome to the BATTLE PIKE…\p"
-# 275 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "I am your guide to the BATTLE PIKE…$"
-# 276 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 277 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_Text_TakeChallenge:
-# 278 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "Would you like to take the Battle\n"
-# 279 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "Choice challenge?$"
-# 280 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 281 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_Text_ExplainBattlePike:
-# 282 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "Here we conduct an event we call\n"
-# 283 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "the Battle Choice.\p"
-# 284 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "The Battle Choice rules are very\n"
-# 285 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "simple…\p"
-# 286 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "Choose one of three paths and make\n"
-# 287 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "your way to the goal room at the end\l"
-# 288 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "of the BATTLE PIKE. It's that simple.\p"
-# 289 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "However, what happens on the chosen\n"
-# 290 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "path depends entirely on the luck\l"
-# 291 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "of the challenger…\p"
-# 292 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "If you reach the goal, you will be\n"
-# 293 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "rewarded with Battle Points.\p"
-# 294 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "If you want to interrupt your\n"
-# 295 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "challenge, please have a word with\l"
-# 296 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "our staff in the big rooms on the way.\p"
-# 297 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "If you don't save before interrupting,\n"
-# 298 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "you will be disqualified.$"
-# 299 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 300 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_Text_LookForwardToSeeingYou:
-# 301 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "We look forward to seeing you\n"
-# 302 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "on another occasion…$"
-# 303 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 304 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_Text_WhichChallengeMode:
-# 305 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "You have the choice of two courses,\n"
-# 306 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "Level 50 and Open Level.\l"
-# 307 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "Which will you challenge?$"
-# 308 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 309 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_Text_NotEnoughValidMonsLv50:
-# 310 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "I beg your pardon, but…\p"
-# 311 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "You do not have three eligible\n"
-# 312 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "POKéMON for the Battle Choice event.\p"
-# 313 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "You must have three different POKéMON\n"
-# 314 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "of Level 50 or less to enter.\p"
-# 315 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "They also must be holding different\n"
-# 316 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "kinds of items.\p"
-# 317 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "EGGS{STR_VAR_1} ineligible.\p"
-# 318 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "Please come see me when\n"
-# 319 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "you are ready…$"
-# 320 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 321 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_Text_NotEnoughValidMonsLvOpen:
-# 322 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "I beg your pardon, but…\p"
-# 323 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "You do not have three eligible\n"
-# 324 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "POKéMON for the Battle Choice event.\p"
-# 325 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "You must have three different\n"
-# 326 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "POKéMON to enter.\p"
-# 327 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "They also must be holding different\n"
-# 328 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "kinds of items.\p"
-# 329 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "EGGS{STR_VAR_1} ineligible.\p"
-# 330 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "Please come see me when\n"
-# 331 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "you are ready…$"
-# 332 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 333 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_Text_PleaseChooseThreeMons:
-# 334 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "Please choose the three POKéMON\n"
-# 335 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "you wish to enter in the challenge…$"
-# 336 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 337 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_Text_SaveBeforeChallenge:
-# 338 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "Before starting your Battle Choice\n"
-# 339 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "challenge, I must save the game.\l"
-# 340 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "Is that acceptable?$"
-# 341 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 342 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_Text_StepThisWay:
-# 343 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "Please step this way…$"
-# 344 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 345 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_Text_ChallengeEndedRecordResults:
-# 346 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "Your challenge has ended…\p"
-# 347 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "I shall record your results.\n"
-# 348 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "Please wait…$"
-# 349 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 350 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_Text_PossessLuckInAbundance:
-# 351 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "You have completed the challenge…\p"
-# 352 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "I must say… You seem to possess luck\n"
-# 353 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "in abundance…$"
-# 354 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 355 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_Text_ShallRecordResults:
-# 356 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "I shall record your results.\n"
-# 357 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "Please wait…$"
-# 358 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 359 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
@ Unused
-# 360 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_Text_AwardYouTheseBattlePoints2:
-# 361 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "To commemorate your completion of\n"
-# 362 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "the Battle Choice challenge, we award\l"
-# 363 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "you these Battle Point(s)…$"
-# 364 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 365 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
@ Unused
-# 366 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_Text_ReachedBattlePointLimit:
-# 367 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "You appear to have reached the limit\n"
-# 368 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "for Battle Points…\p"
-# 369 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "Please exchange some Battle Points\n"
-# 370 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "for prizes, then return…$"
-# 371 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 372 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_Text_FailedToSaveBeforeQuitting:
-# 373 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "I beg your pardon, but…\p"
-# 374 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "You failed to save before you quit\n"
-# 375 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "your challenge the last time.\p"
-# 376 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "Because of that, your challenge so far\n"
-# 377 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "has been disqualified. I am sorry…$"
-# 378 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 379 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_Text_SnatchedVictoryFromQueen:
-# 380 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "Congratulations…\p"
-# 381 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "You have snatched victory from the\n"
-# 382 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "PIKE QUEEN and cleared the event…$"
-# 383 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 384 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_Text_AwardYouTheseBattlePoints:
-# 385 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "In recognition of your amazing luck,\n"
-# 386 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "we award you these Battle Point(s)…$"
-# 387 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 388 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_Text_OneRoomAwayFromGoal:
-# 389 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "Arrgh! I blew my chance!\n"
-# 390 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "I was one room away from the goal!\p"
-# 391 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "In this place, you'd better watch out\n"
-# 392 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "for poison, freezing, and so on.$"
-# 393 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 394 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_Text_NeverHadToBattleTrainer:
-# 395 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "I've completed the challenge 10 times\n"
-# 396 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "now, but I've never had to battle\l"
-# 397 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "a TRAINER once.$"
-# 398 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 399 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_Text_ThinkAbilitiesUsefulHere:
-# 400 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "Listen! Listen!\p"
-# 401 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "Don't you think that the special\n"
-# 402 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "abilities of POKéMON will be useful\l"
-# 403 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "here?$"
-# 404 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 405 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
@ Unused
-# 406 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_Text_TrainersWhicheverPathIChoose:
-# 407 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "What is this weird place?\n"
-# 408 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "I can't figure it out at all!\p"
-# 409 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "I've taken the challenge a bunch\n"
-# 410 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "of times, but all I ever do is run into\l"
-# 411 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "TRAINERS whichever path I choose.$"
-# 412 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 413 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_Text_RulesAreListed:
-# 414 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "The Battle Choice's rules are listed.$"
-# 415 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 416 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_Text_ReadWhichHeading:
-# 417 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "Which heading do you want to read?$"
-# 418 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 419 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_Text_ExplainPokenavBagRules:
-# 420 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "The BAG and POKéNAV may not be used\n"
-# 421 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "during a Battle Choice challenge.$"
-# 422 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 423 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_Text_ExplainHeldItemRules:
-# 424 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "During a Battle Choice challenge,\n"
-# 425 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "any BERRY or HERB held by POKéMON\l"
-# 426 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "will be effective only once.$"
-# 427 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
-# 428 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
BattleFrontier_BattlePikeLobby_Text_ExplainMonOrderRules:
-# 429 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "During a Battle Choice challenge,\n"
-# 430 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "the sequence of POKéMON cannot be\l"
-# 431 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "changed.\p"
-# 432 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "The sequence must be set before\n"
-# 433 "data/maps/BattleFrontier_BattlePikeLobby/scripts.pory"
.string "starting your challenge.$"
+
diff --git a/data/maps/BattleFrontier_BattlePyramidLobby/scripts.inc b/data/maps/BattleFrontier_BattlePyramidLobby/scripts.inc
index f6c10b3e8445..176841161644 100644
--- a/data/maps/BattleFrontier_BattlePyramidLobby/scripts.inc
+++ b/data/maps/BattleFrontier_BattlePyramidLobby/scripts.inc
@@ -1,1806 +1,907 @@
-# 1 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-
-# 2 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.set LOCALID_ATTENDANT, 1
-# 3 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.set LOCALID_HINT_GIVER, 2
-# 4 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 5 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_MapScripts::
-# 6 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
map_script MAP_SCRIPT_ON_FRAME_TABLE, BattleFrontier_BattlePyramidLobby_OnFrame
-# 7 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, BattleFrontier_BattleDomeLobby_OnWarp
-# 8 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.byte 0
-# 9 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 10 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
@ Unused. Pyramid uses Dome's OnWarp (presumably by mistake). Their effects are identical
-# 11 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_OnWarp:
-# 12 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
map_script_2 VAR_TEMP_1, 0, BattleFrontier_BattlePyramidLobby_EventScript_TurnPlayerNorth
-# 13 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.2byte 0
-# 14 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 15 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_TurnPlayerNorth:
-# 16 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
setvar VAR_TEMP_1, 1
-# 17 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
turnobject OBJ_EVENT_ID_PLAYER, DIR_NORTH
-# 18 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
end
-# 19 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 20 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_OnFrame:
-# 21 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
map_script_2 VAR_TEMP_CHALLENGE_STATUS, 0, BattleFrontier_BattlePyramidLobby_EventScript_GetChallengeStatus
-# 22 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING, BattleFrontier_BattlePyramidLobby_EventScript_QuitWithoutSaving
-# 23 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_PAUSED, BattleFrontier_BattlePyramidLobby_EventScript_ResumeChallenge
-# 24 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_WON, BattleFrontier_BattlePyramidLobby_EventScript_WonChallenge
-# 25 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_LOST, BattleFrontier_BattlePyramidLobby_EventScript_LostChallenge
-# 26 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.2byte 0
-# 27 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 28 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_GetChallengeStatus::
-# 29 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
frontier_getstatus
-# 30 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
end
-# 31 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 32 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_QuitWithoutSaving::
-# 33 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
lockall
-# 34 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
message BattleFrontier_BattlePyramidLobby_Text_DidntSaveBeforeQuittingTakeBag
-# 35 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
waitmessage
-# 36 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
playse SE_EXP_MAX
-# 37 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
waitse
-# 38 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
closemessage
-# 39 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
pyramid_set PYRAMID_DATA_WIN_STREAK, 0
-# 40 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
pyramid_set PYRAMID_DATA_WIN_STREAK_ACTIVE, FALSE
-# 41 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
frontier_set FRONTIER_DATA_CHALLENGE_STATUS, 0
-# 42 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 255
-# 43 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
releaseall
-# 44 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
end
-# 45 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 46 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_WonChallenge::
-# 47 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
lockall
-# 48 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
frontier_isbrain
-# 49 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattlePyramidLobby_EventScript_DefeatedKing
-# 50 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_YouveConqueredPyramid, MSGBOX_DEFAULT
-# 51 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
goto BattleFrontier_BattlePyramidLobby_EventScript_GiveBattlePoints
-# 52 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 53 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_DefeatedKing::
-# 54 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_YouveDefeatedPyramidKing, MSGBOX_DEFAULT
-# 55 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_GiveBattlePoints::
-# 56 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
special DoBattlePyramidMonsHaveHeldItem
-# 57 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
call_if_eq VAR_RESULT, TRUE, BattleFrontier_BattlePyramidLobby_EventScript_StoreHeldItemsInPyramidBag
-# 58 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
clearflag FLAG_STORING_ITEMS_IN_PYRAMID_BAG
-# 59 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
frontier_checkairshow
-# 60 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
special LoadPlayerParty
-# 61 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
pyramid_clearhelditems
-# 62 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
special HealPlayerParty
-# 63 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
+ callnative UpdateFollowingPokemon
message BattleFrontier_BattlePyramidLobby_Text_UsedBattleBagWillBeKept
-# 64 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
waitmessage
-# 65 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
playse SE_EXP_MAX
-# 66 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
waitse
-# 67 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_GiveYouTheseBattlePoints, MSGBOX_DEFAULT
-# 68 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
frontier_givepoints
-# 69 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_Text_ObtainedXBattlePoints, MSGBOX_GETPOINTS
-# 70 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
message BattleFrontier_BattlePyramidLobby_Text_RecordResultsWait
-# 71 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
waitmessage
-# 72 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
pyramid_setprize
-# 73 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
pyramid_save 0
-# 74 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
playse SE_SAVE
-# 75 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
waitse
-# 76 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_LookForwardToNextChallenge, MSGBOX_DEFAULT
-# 77 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
closemessage
-# 78 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 255
-# 79 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
releaseall
-# 80 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
end
-# 81 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 82 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_LostChallenge::
-# 83 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
frontier_checkairshow
-# 84 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
special LoadPlayerParty
-# 85 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
pyramid_clearhelditems
-# 86 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
special HealPlayerParty
-# 87 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
+ callnative UpdateFollowingPokemon
lockall
-# 88 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
message BattleFrontier_BattlePyramidLobby_Text_DisappointingHereIsBag
-# 89 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
waitmessage
-# 90 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
playse SE_EXP_MAX
-# 91 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
waitse
-# 92 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
message BattleFrontier_BattlePyramidLobby_Text_RecordResultsWait
-# 93 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
waitmessage
-# 94 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
pyramid_set PYRAMID_DATA_WIN_STREAK_ACTIVE, FALSE
-# 95 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
pyramid_save 0
-# 96 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
playse SE_SAVE
-# 97 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
waitse
-# 98 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_LookForwardToNextChallenge, MSGBOX_DEFAULT
-# 99 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
closemessage
-# 100 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 255
-# 101 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
releaseall
-# 102 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
end
-# 103 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 104 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_ResumeChallenge::
-# 105 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
goto BattleFrontier_BattlePyramidLobby_EventScript_EnterChallenge
-# 106 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 107 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_Attendant::
-# 108 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
lock
-# 109 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
faceplayer
-# 110 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
setvar VAR_FRONTIER_FACILITY, FRONTIER_FACILITY_PYRAMID
-# 111 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
setvar VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES
-# 112 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
special SavePlayerParty
-# 113 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_WelcomeToBattlePyramid, MSGBOX_DEFAULT
-# 114 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_AskTakeChallenge::
-# 115 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
message BattleFrontier_BattlePyramidLobby_Text_EmbarkOnChallenge
-# 116 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
waitmessage
-# 117 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
multichoice 17, 6, MULTI_CHALLENGEINFO, FALSE
-# 118 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
switch VAR_RESULT
-# 119 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case 0, BattleFrontier_BattlePyramidLobby_EventScript_TryEnterChallenge
-# 120 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case 1, BattleFrontier_BattlePyramidLobby_EventScript_ExplainChallenge
-# 121 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case 2, BattleFrontier_BattlePyramidLobby_EventScript_CancelChallenge
-# 122 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattlePyramidLobby_EventScript_CancelChallenge
-# 123 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 124 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_TryEnterChallenge::
-# 125 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
message BattleFrontier_BattlePyramidLobby_Text_WhichLevelMode
-# 126 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
waitmessage
-# 127 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
multichoice 17, 6, MULTI_LEVEL_MODE, FALSE
-# 128 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
switch VAR_RESULT
-# 129 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case FRONTIER_LVL_TENT, BattleFrontier_BattlePyramidLobby_EventScript_CancelChallenge
-# 130 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattlePyramidLobby_EventScript_CancelChallenge
-# 131 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
frontier_checkineligible
-# 132 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
goto_if_eq VAR_0x8004, TRUE, BattleFrontier_BattlePyramidLobby_EventScript_NotEnoughValidMons
-# 133 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
frontier_set FRONTIER_DATA_LVL_MODE, VAR_RESULT
-# 134 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_SelectThreeMons, MSGBOX_DEFAULT
-# 135 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
fadescreen FADE_TO_BLACK
-# 136 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
+ callnative RemoveFollowingPokemon
call BattleFrontier_EventScript_GetLvlMode
-# 137 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
copyvar VAR_0x8004, VAR_RESULT
-# 138 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
setvar VAR_0x8005, FRONTIER_PARTY_SIZE
-# 139 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
special ChoosePartyForBattleFrontier
-# 140 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
waitstate
-# 141 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
goto_if_eq VAR_RESULT, 0, BattleFrontier_BattlePyramidLobby_EventScript_LoadPartyAndCancelChallenge
-# 142 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_OkayToSaveBeforeChallenge, MSGBOX_YESNO
-# 143 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
switch VAR_RESULT
-# 144 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case NO, BattleFrontier_BattlePyramidLobby_EventScript_LoadPartyAndCancelChallenge
-# 145 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case YES, BattleFrontier_BattlePyramidLobby_EventScript_SaveBeforeChallenge
-# 146 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattlePyramidLobby_EventScript_LoadPartyAndCancelChallenge
-# 147 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 148 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_SaveBeforeChallenge::
-# 149 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 0
-# 150 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
frontier_set FRONTIER_DATA_SELECTED_MON_ORDER
-# 151 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
pyramid_init
-# 152 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
pyramid_set PYRAMID_DATA_WIN_STREAK_ACTIVE, TRUE
-# 153 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
frontier_set FRONTIER_DATA_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING
-# 154 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
frontier_set FRONTIER_DATA_PAUSED, FALSE
-# 155 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
pyramid_seedfloor
-# 156 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
pyramid_settrainers
-# 157 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
special LoadPlayerParty
-# 158 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
closemessage
-# 159 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
delay 2
-# 160 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
call Common_EventScript_SaveGame
-# 161 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 255
-# 162 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
goto_if_eq VAR_RESULT, 0, BattleFrontier_BattlePyramidLobby_EventScript_CancelChallengeSaveFailed
-# 163 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_EnterChallenge::
-# 164 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
special SavePlayerParty
-# 165 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
frontier_setpartyorder FRONTIER_PARTY_SIZE
-# 166 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_ShowYouIntoPyramid, MSGBOX_DEFAULT
-# 167 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
closemessage
-# 168 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
call BattleFrontier_BattlePyramidLobby_EventScript_WalkToPanelAndReceiveBag
-# 169 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
frontier_set FRONTIER_DATA_CHALLENGE_STATUS, 0
-# 170 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
setvar VAR_RESULT, 0
-# 171 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
special HealPlayerParty
-# 172 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
warp MAP_BATTLE_FRONTIER_BATTLE_PYRAMID_FLOOR, 1, 1
-# 173 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 0
-# 174 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
waitstate
-# 175 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
end
-# 176 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 177 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_ExplainChallenge::
-# 178 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_ExplainBattlePyramid, MSGBOX_DEFAULT
-# 179 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
goto BattleFrontier_BattlePyramidLobby_EventScript_AskTakeChallenge
-# 180 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 181 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_NotEnoughValidMons::
-# 182 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
switch VAR_RESULT
-# 183 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case FRONTIER_LVL_50, BattleFrontier_BattlePyramidLobby_EventScript_NotEnoughValidMonsLv50
-# 184 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case FRONTIER_LVL_OPEN, BattleFrontier_BattlePyramidLobby_EventScript_NotEnoughValidMonsLvOpen
-# 185 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 186 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_NotEnoughValidMonsLv50::
-# 187 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_NotEnoughValidMonsLv50, MSGBOX_DEFAULT
-# 188 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
goto BattleFrontier_BattlePyramidLobby_EventScript_EndCancelChallenge
-# 189 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 190 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_NotEnoughValidMonsLvOpen::
-# 191 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_NotEnoughValidMonsLvOpen, MSGBOX_DEFAULT
-# 192 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
goto BattleFrontier_BattlePyramidLobby_EventScript_EndCancelChallenge
-# 193 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 194 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_CancelChallengeSaveFailed::
-# 195 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
frontier_set FRONTIER_DATA_CHALLENGE_STATUS, 0
-# 196 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
goto BattleFrontier_BattlePyramidLobby_EventScript_CancelChallenge
-# 197 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 198 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_LoadPartyAndCancelChallenge::
-# 199 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
special LoadPlayerParty
-# 200 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
+ callnative UpdateFollowingPokemon
BattleFrontier_BattlePyramidLobby_EventScript_CancelChallenge::
-# 201 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_AwaitFutureChallenge, MSGBOX_DEFAULT
-# 202 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_EndCancelChallenge::
-# 203 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
release
-# 204 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
end
-# 205 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 206 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_HintGiver::
-# 207 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
lockall
-# 208 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
applymovement LOCALID_HINT_GIVER, Common_Movement_FacePlayer
-# 209 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
waitmovement 0
-# 210 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_TellYouWhatMisfortunesAwait, MSGBOX_DEFAULT
-# 211 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
call BattleFrontier_BattlePyramidLobby_EventScript_GiveHint
-# 212 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_BelieveMyFortunesOrNot, MSGBOX_DEFAULT
-# 213 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
releaseall
-# 214 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
end
-# 215 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 216 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_GiveHint::
-# 217 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
multichoice 17, 6, MULTI_LEVEL_MODE, FALSE
-# 218 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
switch VAR_RESULT
-# 219 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case FRONTIER_LVL_50, BattleFrontier_BattlePyramidLobby_EventScript_GiveHintLv50
-# 220 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case FRONTIER_LVL_OPEN, BattleFrontier_BattlePyramidLobby_EventScript_GiveHintLvOpen
-# 221 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case FRONTIER_LVL_TENT, BattleFrontier_BattlePyramidLobby_EventScript_NoHint
-# 222 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattlePyramidLobby_EventScript_NoHint
-# 223 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
return
-# 224 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 225 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
@ Shouldnt occur
-# 226 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_NoHint::
-# 227 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
return
-# 228 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 229 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_GiveHintLv50::
-# 230 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_Aah, MSGBOX_DEFAULT
-# 231 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
pyramid_get PYRAMID_DATA_WIN_STREAK_ACTIVE_50
-# 232 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
goto_if_ne VAR_RESULT, FALSE, BattleFrontier_BattlePyramidLobby_EventScript_GiveHintGetLv50Streak
-# 233 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
setvar VAR_RESULT, 0
-# 234 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
goto BattleFrontier_BattlePyramidLobby_EventScript_DoHintComment
-# 235 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
return
-# 236 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 237 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_GiveHintGetLv50Streak::
-# 238 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
pyramid_get PYRAMID_DATA_WIN_STREAK_50
-# 239 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
goto BattleFrontier_BattlePyramidLobby_EventScript_DoHintComment
-# 240 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
return
-# 241 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 242 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_GiveHintLvOpen::
-# 243 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_Aah, MSGBOX_DEFAULT
-# 244 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
pyramid_get PYRAMID_DATA_WIN_STREAK_ACTIVE_OPEN
-# 245 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
goto_if_ne VAR_RESULT, FALSE, BattleFrontier_BattlePyramidLobby_EventScript_GiveHintGetLvOpenStreak
-# 246 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
setvar VAR_RESULT, 0
-# 247 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
goto BattleFrontier_BattlePyramidLobby_EventScript_DoHintComment
-# 248 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
return
-# 249 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 250 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_GiveHintGetLvOpenStreak::
-# 251 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
pyramid_get PYRAMID_DATA_WIN_STREAK_OPEN
-# 252 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
goto BattleFrontier_BattlePyramidLobby_EventScript_DoHintComment
-# 253 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
return
-# 254 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 255 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_DoHintComment::
-# 256 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
copyvar VAR_0x8004, VAR_RESULT
-# 257 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
special GetBattlePyramidHint
-# 258 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
switch VAR_RESULT
-# 259 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case 0, BattleFrontier_BattlePyramidLobby_EventScript_HintParalysis
-# 260 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case 1, BattleFrontier_BattlePyramidLobby_EventScript_HintPoison
-# 261 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case 2, BattleFrontier_BattlePyramidLobby_EventScript_HintBurn
-# 262 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case 3, BattleFrontier_BattlePyramidLobby_EventScript_HintPPWaste
-# 263 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case 4, BattleFrontier_BattlePyramidLobby_EventScript_HintLevitate
-# 264 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case 5, BattleFrontier_BattlePyramidLobby_EventScript_HintTrapAbility
-# 265 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case 6, BattleFrontier_BattlePyramidLobby_EventScript_HintIce
-# 266 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case 7, BattleFrontier_BattlePyramidLobby_EventScript_HintExplosion
-# 267 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case 8, BattleFrontier_BattlePyramidLobby_EventScript_HintPsychic
-# 268 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case 9, BattleFrontier_BattlePyramidLobby_EventScript_HintRock
-# 269 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case 10, BattleFrontier_BattlePyramidLobby_EventScript_HintFighting
-# 270 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case 11, BattleFrontier_BattlePyramidLobby_EventScript_HintWeather
-# 271 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case 12, BattleFrontier_BattlePyramidLobby_EventScript_HintBug
-# 272 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case 13, BattleFrontier_BattlePyramidLobby_EventScript_HintDark
-# 273 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case 14, BattleFrontier_BattlePyramidLobby_EventScript_HintWater
-# 274 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case 15, BattleFrontier_BattlePyramidLobby_EventScript_HintGhost
-# 275 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case 16, BattleFrontier_BattlePyramidLobby_EventScript_HintSteel
-# 276 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case 17, BattleFrontier_BattlePyramidLobby_EventScript_HintFlyingDragon
-# 277 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case 18, BattleFrontier_BattlePyramidLobby_EventScript_HintStoneEvolve
-# 278 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case 19, BattleFrontier_BattlePyramidLobby_EventScript_HintNormal
-# 279 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
return
-# 280 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 281 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_HintParalysis::
-# 282 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_HintParalysis, MSGBOX_DEFAULT
-# 283 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
return
-# 284 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 285 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_HintPoison::
-# 286 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_HintPoison, MSGBOX_DEFAULT
-# 287 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
return
-# 288 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 289 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_HintBurn::
-# 290 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_HintBurn, MSGBOX_DEFAULT
-# 291 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
return
-# 292 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 293 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_HintPPWaste::
-# 294 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_HintPPWaste, MSGBOX_DEFAULT
-# 295 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
return
-# 296 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 297 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_HintLevitate::
-# 298 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_HintLevitate, MSGBOX_DEFAULT
-# 299 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
return
-# 300 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 301 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_HintTrapAbility::
-# 302 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_HintTrapAbility, MSGBOX_DEFAULT
-# 303 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
return
-# 304 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 305 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_HintIce::
-# 306 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_HintIce, MSGBOX_DEFAULT
-# 307 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
return
-# 308 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 309 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_HintExplosion::
-# 310 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_HintExplosion, MSGBOX_DEFAULT
-# 311 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
return
-# 312 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 313 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_HintPsychic::
-# 314 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_HintPsychic, MSGBOX_DEFAULT
-# 315 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
return
-# 316 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 317 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_HintRock::
-# 318 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_HintRock, MSGBOX_DEFAULT
-# 319 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
return
-# 320 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 321 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_HintFighting::
-# 322 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_HintFighting, MSGBOX_DEFAULT
-# 323 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
return
-# 324 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 325 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_HintWeather::
-# 326 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_HintWeather, MSGBOX_DEFAULT
-# 327 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
return
-# 328 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 329 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_HintBug::
-# 330 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_HintBug, MSGBOX_DEFAULT
-# 331 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
return
-# 332 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 333 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_HintDark::
-# 334 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_HintDark, MSGBOX_DEFAULT
-# 335 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
return
-# 336 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 337 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_HintWater::
-# 338 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_HintWater, MSGBOX_DEFAULT
-# 339 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
return
-# 340 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 341 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_HintGhost::
-# 342 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_HintGhost, MSGBOX_DEFAULT
-# 343 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
return
-# 344 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 345 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_HintSteel::
-# 346 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_HintSteel, MSGBOX_DEFAULT
-# 347 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
return
-# 348 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 349 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_HintFlyingDragon::
-# 350 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_HintFlyingDragon, MSGBOX_DEFAULT
-# 351 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
return
-# 352 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 353 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_HintStoneEvolve::
-# 354 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_HintStoneEvolve, MSGBOX_DEFAULT
-# 355 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
return
-# 356 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 357 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_HintNormal::
-# 358 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_HintNormal, MSGBOX_DEFAULT
-# 359 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
return
-# 360 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 361 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_ShowResults::
-# 362 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
lockall
-# 363 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
frontier_results FRONTIER_FACILITY_PYRAMID
-# 364 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
waitbuttonpress
-# 365 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
special RemoveRecordsWindow
-# 366 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
releaseall
-# 367 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
end
-# 368 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 369 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_WalkToPanelAndReceiveBag::
-# 370 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
applymovement LOCALID_ATTENDANT, BattleFrontier_BattlePyramidLobby_Movement_AttendantWalkToPanel
-# 371 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, BattleFrontier_BattlePyramidLobby_Movement_PlayerWalkToPanel
-# 372 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
waitmovement 0
-# 373 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_WeWillHoldBagForSafekeeping, MSGBOX_DEFAULT
-# 374 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
pyramid_get PYRAMID_DATA_WIN_STREAK
-# 375 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
goto_if_eq VAR_RESULT, 0, BattleFrontier_BattlePyramidLobby_EventScript_ReceiveNewBattleBag
-# 376 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_PleaseTakePreviousBattleBag, MSGBOX_DEFAULT
-# 377 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
goto BattleFrontier_BattlePyramidLobby_EventScript_ReceiveBattleBag
-# 378 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 379 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_ReceiveNewBattleBag::
-# 380 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_PleaseTakeThisBattleBag, MSGBOX_DEFAULT
-# 381 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_ReceiveBattleBag::
-# 382 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
message BattleFrontier_BattlePyramidLobby_Text_ExchangedBagForBattleBag
-# 383 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
waitmessage
-# 384 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
playse SE_EXP_MAX
-# 385 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
waitse
-# 386 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_StepOnFloorPanel, MSGBOX_DEFAULT
-# 387 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
closemessage
-# 388 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
applymovement LOCALID_ATTENDANT, BattleFrontier_BattlePyramidLobby_Movement_AttendantMoveAside
-# 389 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
waitmovement 0
-# 390 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, BattleFrontier_BattlePyramidLobby_Movement_PlayerStepOnPanel
-# 391 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
waitmovement 0
-# 392 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
return
-# 393 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 394 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Movement_AttendantWalkToPanel:
-# 395 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
walk_up
-# 396 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
walk_up
-# 397 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
walk_up
-# 398 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
walk_up
-# 399 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
walk_up
-# 400 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
walk_up
-# 401 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
walk_up
-# 402 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
face_down
-# 403 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
step_end
-# 404 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 405 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Movement_PlayerWalkToPanel:
-# 406 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
walk_up
-# 407 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
walk_up
-# 408 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
walk_up
-# 409 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
walk_up
-# 410 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
walk_up
-# 411 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
walk_up
-# 412 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
walk_up
-# 413 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
step_end
-# 414 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 415 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Movement_AttendantMoveAside:
-# 416 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
walk_right
-# 417 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
face_left
-# 418 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
step_end
-# 419 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 420 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Movement_PlayerStepOnPanel:
-# 421 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
walk_up
-# 422 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
walk_up
-# 423 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
step_end
-# 424 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 425 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_StoreHeldItemsInPyramidBag::
-# 426 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_MonHoldingItemCannotTake, MSGBOX_DEFAULT
-# 427 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
setflag FLAG_STORING_ITEMS_IN_PYRAMID_BAG
-# 428 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
special TryStoreHeldItemsInPyramidBag
-# 429 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
goto_if_eq VAR_RESULT, 0, BattleFrontier_BattlePyramidLobby_EventScript_HeldItemsStoredInPyramidBag
-# 430 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
message BattleFrontier_BattlePyramidLobby_Text_BagCannotHoldPickItemsToKeep
-# 431 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
waitmessage
-# 432 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
goto BattleFrontier_BattlePyramidLobby_EventScript_PickItemsToKeep
-# 433 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
end
-# 434 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 435 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_HeldItemsStoredInPyramidBag::
-# 436 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_HeldItemsMovedToBag, MSGBOX_DEFAULT
-# 437 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
return
-# 438 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 439 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
@ When exiting Battle Pyramid with a full pyramid bag and held items the player must select to keep/toss party held items and make room for any kept items by tossing from the pyramid bag
-# 440 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_PickItemsToKeep::
-# 441 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
multichoice 17, 6, MULTI_FRONTIER_ITEM_CHOOSE, FALSE
-# 442 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
switch VAR_RESULT
-# 443 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case 0, BattleFrontier_BattlePyramidLobby_EventScript_PickItemsFromBag
-# 444 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case 1, BattleFrontier_BattlePyramidLobby_EventScript_PickItemsFromParty
-# 445 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case 2, BattleFrontier_BattlePyramidLobby_EventScript_ExitPickItems
-# 446 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattlePyramidLobby_EventScript_ExitPickItems
-# 447 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
end
-# 448 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 449 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_PickItemsFromBag::
-# 450 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
special ChooseItemsToTossFromPyramidBag
-# 451 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
waitstate
-# 452 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
message BattleFrontier_BattlePyramidLobby_Text_PickItemsToKeep
-# 453 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
waitmessage
-# 454 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
goto BattleFrontier_BattlePyramidLobby_EventScript_PickItemsToKeep
-# 455 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
end
-# 456 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 457 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_PickItemsFromParty::
-# 458 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
special BattlePyramidChooseMonHeldItems
-# 459 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
waitstate
-# 460 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
message BattleFrontier_BattlePyramidLobby_Text_PickItemsToKeep
-# 461 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
waitmessage
-# 462 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
goto BattleFrontier_BattlePyramidLobby_EventScript_PickItemsToKeep
-# 463 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
end
-# 464 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 465 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_ExitPickItems::
-# 466 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
special DoBattlePyramidMonsHaveHeldItem
-# 467 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattlePyramidLobby_EventScript_PartyStillHasHeldItems
-# 468 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
return
-# 469 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 470 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_PartyStillHasHeldItems::
-# 471 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_LeastOneMonHoldingItem, MSGBOX_DEFAULT
-# 472 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
message BattleFrontier_BattlePyramidLobby_Text_PickItemsToKeep
-# 473 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
waitmessage
-# 474 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
goto BattleFrontier_BattlePyramidLobby_EventScript_PickItemsToKeep
-# 475 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
end
-# 476 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 477 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_Woman::
-# 478 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_TrainersNoticeRunning, MSGBOX_NPC
-# 479 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
end
-# 480 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 481 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_FatMan::
-# 482 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_LostLotOfItems, MSGBOX_NPC
-# 483 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
end
-# 484 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 485 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_RulesBoard::
-# 486 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
lockall
-# 487 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_RulesAreListed, MSGBOX_DEFAULT
-# 488 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
goto BattleFrontier_BattlePyramidLobby_EventScript_ReadRulesBoard
-# 489 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
end
-# 490 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 491 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_ReadRulesBoard::
-# 492 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
message BattleFrontier_BattlePyramidLobby_Text_ReadWhichHeading
-# 493 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
waitmessage
-# 494 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
multichoice 15, 2, MULTI_BATTLE_PYRAMID_RULES, FALSE
-# 495 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
switch VAR_RESULT
-# 496 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case 0, BattleFrontier_BattlePyramidLobby_EventScript_RulesPokemon
-# 497 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case 1, BattleFrontier_BattlePyramidLobby_EventScript_RulesTrainers
-# 498 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case 2, BattleFrontier_BattlePyramidLobby_EventScript_RulesMaze
-# 499 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case 3, BattleFrontier_BattlePyramidLobby_EventScript_RulesBag
-# 500 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case 4, BattleFrontier_BattlePyramidLobby_EventScript_ExitRules
-# 501 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattlePyramidLobby_EventScript_ExitRules
-# 502 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
end
-# 503 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 504 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_RulesPokemon::
-# 505 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_ExplainMonRules, MSGBOX_DEFAULT
-# 506 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
goto BattleFrontier_BattlePyramidLobby_EventScript_ReadRulesBoard
-# 507 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
end
-# 508 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 509 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_RulesTrainers::
-# 510 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_ExplainTrainerRules, MSGBOX_DEFAULT
-# 511 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
goto BattleFrontier_BattlePyramidLobby_EventScript_ReadRulesBoard
-# 512 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
end
-# 513 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 514 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_RulesMaze::
-# 515 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_ExplainMazeRules, MSGBOX_DEFAULT
-# 516 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
goto BattleFrontier_BattlePyramidLobby_EventScript_ReadRulesBoard
-# 517 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
end
-# 518 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 519 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_RulesBag::
-# 520 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
msgbox BattleFrontier_BattlePyramidLobby_Text_ExplainBagRules, MSGBOX_DEFAULT
-# 521 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
goto BattleFrontier_BattlePyramidLobby_EventScript_ReadRulesBoard
-# 522 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
end
-# 523 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 524 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_EventScript_ExitRules::
-# 525 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
releaseall
-# 526 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
end
-# 527 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 528 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_WelcomeToBattlePyramid:
-# 529 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "Where the courage of TRAINERS\n"
-# 530 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "is put to the test!\p"
-# 531 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "Welcome to the BATTLE PYRAMID!\p"
-# 532 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "I am your guide to\n"
-# 533 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "the Battle Quest.$"
-# 534 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 535 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_EmbarkOnChallenge:
-# 536 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "Have you the courage to embark on\n"
-# 537 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "the Battle Quest challenge?$"
-# 538 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 539 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_AwaitFutureChallenge:
-# 540 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "We await your challenge in the future!$"
-# 541 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 542 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_ExplainBattlePyramid:
-# 543 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "The Battle Quest is a battling\n"
-# 544 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "event in which you must explore\l"
-# 545 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "the PYRAMID and try to reach the top.\p"
-# 546 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "In the PYRAMID are seven floors of\n"
-# 547 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "mazes, all of them filled with not only\l"
-# 548 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "skilled TRAINERS but also wild POKéMON.\p"
-# 549 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "You must enter with three POKéMON,\n"
-# 550 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "none of them holding an item.\p"
-# 551 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "On your ascent, you will be provided\n"
-# 552 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "with a BATTLE BAG for items.\p"
-# 553 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "If you fail in your challenge, any item\n"
-# 554 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "placed in the BATTLE BAG disappears.\p"
-# 555 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "If you want to interrupt your\n"
-# 556 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "challenge, you must select “REST”\l"
-# 557 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "and save the game.\p"
-# 558 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "If you don't save before interrupting,\n"
-# 559 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "you will be disqualified.$"
-# 560 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 561 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_WhichLevelMode:
-# 562 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "The PYRAMID offers two courses,\n"
-# 563 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "Level 50 and Open Level.\l"
-# 564 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "Which will you enter?$"
-# 565 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 566 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_SelectThreeMons:
-# 567 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "Very good. Now, please select the three\n"
-# 568 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "POKéMON you wish to accompany you.$"
-# 569 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 570 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_NotEnoughValidMonsLvOpen:
-# 571 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "A slight problem, adventurer!\p"
-# 572 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "You seem to not have the three\n"
-# 573 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "POKéMON qualified for the challenge.\p"
-# 574 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "Please also remember to take all\n"
-# 575 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "items from your POKéMON.\p"
-# 576 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "EGGS{STR_VAR_1} ineligible.\p"
-# 577 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "When you are ready, please have\n"
-# 578 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "a word with me.$"
-# 579 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 580 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_NotEnoughValidMonsLv50:
-# 581 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "A slight problem, adventurer!\p"
-# 582 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "You seem to not have the three\n"
-# 583 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "POKéMON qualified for the challenge.\p"
-# 584 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "The three POKéMON must be different\n"
-# 585 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "and each no higher than Level 50.\p"
-# 586 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "Please also remember to take all\n"
-# 587 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "items from your POKéMON.\p"
-# 588 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "EGGS{STR_VAR_1} ineligible.\p"
-# 589 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "When you are ready, please have\n"
-# 590 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "a word with me.$"
-# 591 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 592 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_OkayToSaveBeforeChallenge:
-# 593 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "Before you enter the BATTLE PYRAMID,\n"
-# 594 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "the game must be saved. Is that okay?$"
-# 595 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 596 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_ShowYouIntoPyramid:
-# 597 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "Very good. I will now show you into\n"
-# 598 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "the BATTLE PYRAMID.$"
-# 599 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 600 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_WeWillHoldBagForSafekeeping:
-# 601 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "We will hold your BAG for safekeeping,\n"
-# 602 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "{PLAYER}, while you are exploring.$"
-# 603 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 604 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_PleaseTakePreviousBattleBag:
-# 605 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "In exchange, please take this BATTLE\n"
-# 606 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "BAG, the one you used previously.$"
-# 607 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 608 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_PleaseTakeThisBattleBag:
-# 609 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "In exchange, please take this\n"
-# 610 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "BATTLE BAG.$"
-# 611 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 612 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_ExchangedBagForBattleBag:
-# 613 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "{PLAYER} exchanged the BAG for\n"
-# 614 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "the BATTLE BAG.$"
-# 615 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 616 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_StepOnFloorPanel:
-# 617 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "When you step on this floor panel,\n"
-# 618 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "you will be transported to a higher\l"
-# 619 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "floor in the PYRAMID.\p"
-# 620 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "I hope for your sake that your\n"
-# 621 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "quest goes safely!$"
-# 622 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 623 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_DidntSaveBeforeQuittingTakeBag:
-# 624 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "A major problem, explorer!\p"
-# 625 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "You did not save before ending\n"
-# 626 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "your challenge the last time.\p"
-# 627 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "Consequently, your challenge has\n"
-# 628 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "been disqualified, I'm sorry to say.\p"
-# 629 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "Here is the BAG we've been holding\n"
-# 630 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "for you.\p"
-# 631 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "{PLAYER} got the BAG back.$"
-# 632 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 633 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_YouveConqueredPyramid:
-# 634 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "Excellent to see you back!\p"
-# 635 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "You've conquered the PYRAMID!\n"
-# 636 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "How splendid!$"
-# 637 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 638 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_MonHoldingItemCannotTake:
-# 639 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "Ah, a slight problem.\p"
-# 640 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "At least one POKéMON is holding\n"
-# 641 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "an item.\p"
-# 642 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "I'm sorry to say, items obtained in\n"
-# 643 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "the PYRAMID cannot be taken away.$"
-# 644 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 645 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_HeldItemsMovedToBag:
-# 646 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "All items held by your POKéMON will be\n"
-# 647 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "moved to your BATTLE BAG, {PLAYER}.$"
-# 648 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 649 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_BagCannotHoldPickItemsToKeep:
-# 650 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "The BATTLE BAG cannot hold all your\n"
-# 651 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "items, I'm sorry to say.\p"
-# 652 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "Please pick the items you'll keep in the\n"
-# 653 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "BATTLE BAG, and with your POKéMON.$"
-# 654 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 655 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_LeastOneMonHoldingItem:
-# 656 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "At least one POKéMON is still\n"
-# 657 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "holding an item.$"
-# 658 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 659 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_PickItemsToKeep:
-# 660 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "Please pick the items you'll keep in the\n"
-# 661 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "BATTLE BAG, and with your POKéMON.$"
-# 662 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 663 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
@ Unused
-# 664 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_ReturnedEverythingMonsHeld:
-# 665 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "{PLAYER} returned everything that\n"
-# 666 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "the POKéMON held.$"
-# 667 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 668 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_UsedBattleBagWillBeKept:
-# 669 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "The BATTLE BAG you used will be kept\n"
-# 670 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "in readiness for your next challenge.\p"
-# 671 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "{PLAYER} turned the BATTLE BAG over\n"
-# 672 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "for the BAG's return.$"
-# 673 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 674 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_RecordResultsWait:
-# 675 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "I must record your results.\n"
-# 676 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "Please wait.$"
-# 677 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 678 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
@ Unused
-# 679 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_ForConqueringPyramidTakeThis:
-# 680 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "As a memento for conquering\n"
-# 681 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "the BATTLE PYRAMID, please take this.$"
-# 682 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 683 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
@ Unused
-# 684 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_ReceivedPrizeItem:
-# 685 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "{PLAYER} received the prize\n"
-# 686 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "{STR_VAR_1}.$"
-# 687 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 688 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
@ Unused
-# 689 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_BagIsFull:
-# 690 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "…Ah…\n"
-# 691 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "Your BAG appears to be filled.\p"
-# 692 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "Please return after you've organized\n"
-# 693 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "your BAG's contents.$"
-# 694 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 695 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_DisappointingHereIsBag:
-# 696 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "How disappointing for you…\p"
-# 697 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "Here is the BAG we've been holding\n"
-# 698 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "for you.\p"
-# 699 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "{PLAYER} got the BAG back.$"
-# 700 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 701 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_LookForwardToNextChallenge:
-# 702 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "We look forward to your\n"
-# 703 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "next challenge!$"
-# 704 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 705 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
@ Unused
-# 706 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_HereIsPrize:
-# 707 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "We have been looking forward to\n"
-# 708 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "your arrival!\p"
-# 709 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "Here is your prize for conquering\n"
-# 710 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "the PYRAMID.$"
-# 711 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 712 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_TellYouWhatMisfortunesAwait:
-# 713 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "Welcome…\p"
-# 714 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "I shall be pleased to tell you what\n"
-# 715 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "misfortunes await in the PYRAMID…$"
-# 716 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 717 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_Aah:
-# 718 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "… … … … … …\n"
-# 719 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "… … … … … …\p"
-# 720 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "… … … … … …\n"
-# 721 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "Aah!$"
-# 722 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 723 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_HintParalysis:
-# 724 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "I see a shower of sparks…\p"
-# 725 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "…And in it, I see your POKéMON\n"
-# 726 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "struggling with paralysis…$"
-# 727 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 728 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_HintPoison:
-# 729 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "I see poison…\p"
-# 730 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "…And, I see your POKéMON suffering\n"
-# 731 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "from the effects of poison…$"
-# 732 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 733 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_HintBurn:
-# 734 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "I see bright red flames…\p"
-# 735 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "…And, I see your POKéMON suffering\n"
-# 736 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "from burns…$"
-# 737 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 738 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_HintPPWaste:
-# 739 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "I sense the tremendous pressure of\n"
-# 740 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "unrequited anger…\p"
-# 741 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "It is a curse…\p"
-# 742 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "…And, I see your POKéMON drained of\n"
-# 743 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "Power Points and having no recourse\l"
-# 744 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "but to use STRUGGLE…$"
-# 745 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 746 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_HintLevitate:
-# 747 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "I see POKéMON loftily airborne…\p"
-# 748 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "…And, I see your POKéMON frustrated\n"
-# 749 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "by powerless GROUND-type moves…$"
-# 750 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 751 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_HintTrapAbility:
-# 752 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "I sense terrific energy rising from\n"
-# 753 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "the ground below…\p"
-# 754 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "…And, I see your POKéMON unable to\n"
-# 755 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "escape the power's clutches…$"
-# 756 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 757 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_HintIce:
-# 758 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "I see ICE-type POKéMON…\p"
-# 759 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "…And, I see your POKéMON fighting\n"
-# 760 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "the freezing effects of ice…$"
-# 761 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 762 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_HintExplosion:
-# 763 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "I see a flurry of moves that imperil\n"
-# 764 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "the user…\p"
-# 765 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "…And, I see your POKéMON falling\n"
-# 766 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "to them…$"
-# 767 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 768 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_HintPsychic:
-# 769 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "I see PSYCHIC-type POKéMON…\p"
-# 770 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "…And, I see your POKéMON in torment\n"
-# 771 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "from PSYCHIC moves…$"
-# 772 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 773 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_HintRock:
-# 774 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "I see ROCK-type POKéMON…\p"
-# 775 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "…And, I see your POKéMON suffering\n"
-# 776 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "from ROCK moves…$"
-# 777 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 778 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_HintFighting:
-# 779 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "I see FIGHTING-type POKéMON…\p"
-# 780 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "…And, I see your POKéMON pummeled\n"
-# 781 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "by FIGHTING moves…$"
-# 782 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 783 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_HintWeather:
-# 784 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "RAIN DANCE… SUNNY DAY…\n"
-# 785 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "SANDSTORM… HAIL…\p"
-# 786 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "I see POKéMON that become stronger\n"
-# 787 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "with the weather…\p"
-# 788 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "…And, I see your POKéMON confounded\n"
-# 789 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "by different types of moves…$"
-# 790 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 791 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_HintBug:
-# 792 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "I see BUG-type POKéMON…\p"
-# 793 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "…And, I see your POKéMON suffering\n"
-# 794 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "from different kinds of attacks…$"
-# 795 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 796 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_HintDark:
-# 797 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "I see DARK-type POKéMON…\p"
-# 798 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "…And, I see your POKéMON suffering\n"
-# 799 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "from DARK-type moves…$"
-# 800 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 801 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_HintWater:
-# 802 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "I see WATER-type POKéMON…\p"
-# 803 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "…And, I see your POKéMON suffering\n"
-# 804 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "from WATER-type moves…$"
-# 805 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 806 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_HintGhost:
-# 807 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "I see GHOST-type POKéMON…\p"
-# 808 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "…And, I see your POKéMON suffering\n"
-# 809 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "from GHOST-type moves…$"
-# 810 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 811 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_HintSteel:
-# 812 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "I see STEEL-type POKéMON…\p"
-# 813 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "…And, I see your POKéMON suffering\n"
-# 814 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "from enormously powerful moves…$"
-# 815 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 816 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_HintFlyingDragon:
-# 817 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "I see flying POKéMON…\p"
-# 818 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "…And, I see your POKéMON suffering\n"
-# 819 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "from enormously powerful moves…$"
-# 820 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 821 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_HintStoneEvolve:
-# 822 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "I see those that have evolved from\n"
-# 823 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "the power of stones…\p"
-# 824 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "I also sense fire, water,\n"
-# 825 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "and electricity…\p"
-# 826 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "…And, I see your POKéMON suffering\n"
-# 827 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "from those three powers…$"
-# 828 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 829 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_HintNormal:
-# 830 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "I see NORMAL-type POKéMON…\p"
-# 831 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "…And, I see your POKéMON suffering\n"
-# 832 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "from enormously powerful moves…$"
-# 833 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 834 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_BelieveMyFortunesOrNot:
-# 835 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "Whether you believe my fortunes\n"
-# 836 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "or not, the choice is yours…\p"
-# 837 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "The future can be changed anytime…\n"
-# 838 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "I wish you safe passage…$"
-# 839 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 840 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_TrainersNoticeRunning:
-# 841 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "Did you know?\p"
-# 842 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "If you run fast, TRAINERS may notice\n"
-# 843 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "and come after you for a battle.\p"
-# 844 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "So, if you want to avoid TRAINERS,\n"
-# 845 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "don't catch their eyes, but sneak\l"
-# 846 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "cautiously and quietly past them.$"
-# 847 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 848 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_LostLotOfItems:
-# 849 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "Awaaaaaaarrrrgh!\p"
-# 850 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "I had a whole lot of items, but I lost\n"
-# 851 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "them all when I lost!\p"
-# 852 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "Awaaaaaaarrrrgh!$"
-# 853 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 854 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_YouveDefeatedPyramidKing:
-# 855 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "Welcome back!\n"
-# 856 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "You've done the unthinkable!\p"
-# 857 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "You've defeated the PYRAMID KING\n"
-# 858 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "and conquered the BATTLE PYRAMID!$"
-# 859 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 860 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_GiveYouTheseBattlePoints:
-# 861 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "Young explorer!\n"
-# 862 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "In commendation of your courage,\l"
-# 863 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "we give you these Battle Point(s)!$"
-# 864 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 865 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_RulesAreListed:
-# 866 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "The Battle Quest rules are listed.$"
-# 867 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 868 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_ReadWhichHeading:
-# 869 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "Which heading do you want to read?$"
-# 870 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 871 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_ExplainMonRules:
-# 872 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "When the PYRAMID is conquered,\n"
-# 873 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "the wild POKéMON that appear in it\l"
-# 874 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "are replaced by different kinds.\p"
-# 875 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "Explore, observe, and learn what kinds\n"
-# 876 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "of wild POKéMON you may encounter.$"
-# 877 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 878 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_ExplainTrainerRules:
-# 879 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "TRAINERS are lying in wait for you\n"
-# 880 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "inside the PYRAMID.\p"
-# 881 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "On each floor, there are up to\n"
-# 882 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "eight TRAINERS.\p"
-# 883 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "When you defeat a TRAINER, you will\n"
-# 884 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "get a helpful hint for your adventure.$"
-# 885 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 886 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_ExplainMazeRules:
-# 887 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "The mazes in the PYRAMID rearrange\n"
-# 888 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "themselves every time you enter it.\p"
-# 889 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "The mazes are poorly lit.\n"
-# 890 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "You must advance with caution.\p"
-# 891 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "The light grows brighter whenever you\n"
-# 892 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "defeat a wild POKéMON or a TRAINER.$"
-# 893 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
-# 894 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
BattleFrontier_BattlePyramidLobby_Text_ExplainBagRules:
-# 895 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "The BATTLE BAG serves as your BAG\n"
-# 896 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "while in the PYRAMID.\p"
-# 897 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "There are two separate BATTLE BAGS--\n"
-# 898 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "one each for the Level 50 and\l"
-# 899 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "Open Level adventures.\p"
-# 900 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "They each can hold up to 99 pieces\n"
-# 901 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "of ten kinds of items.\p"
-# 902 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "The contents of the BATTLE BAG are\n"
-# 903 "data/maps/BattleFrontier_BattlePyramidLobby/scripts.pory"
.string "lost if you fail in your quest.$"
+
diff --git a/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc b/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc
index 9c4835f813a4..d18e2629a145 100644
--- a/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc
+++ b/data/maps/BattleFrontier_BattleTowerLobby/scripts.inc
@@ -1,2800 +1,1406 @@
-# 1 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-
-# 2 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.set LOCALID_ATTENDANT_SINGLES, 1
-# 3 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.set LOCALID_ATTENDANT_DOUBLES, 7
-# 4 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.set LOCALID_ATTENDANT_MULTIS, 8
-# 5 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.set LOCALID_ATTENDANT_LINK_MULTIS, 9
-# 6 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 7 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
@ Note: LOCALID_BATTLE_TOWER_LOBBY_REPORTER is a local id for this map used elsewhere. It's defined in event_objects.h
-# 8 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 9 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_MapScripts::
-# 10 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
map_script MAP_SCRIPT_ON_RESUME, BattleFrontier_BattleTowerLobby_OnResume
-# 11 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
map_script MAP_SCRIPT_ON_TRANSITION, BattleFrontier_BattleTowerLobby_OnTransition
-# 12 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
map_script MAP_SCRIPT_ON_FRAME_TABLE, BattleFrontier_BattleTowerLobby_OnFrame
-# 13 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, BattleFrontier_BattleTowerLobby_OnWarp
-# 14 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.byte 0
-# 15 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 16 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_OnResume:
-# 17 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
special TryHideBattleTowerReporter
-# 18 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 19 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 20 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_OnTransition:
-# 21 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
call BattleFrontier_BattleTowerLobby_EventScript_ShowOrHideReporter
-# 22 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
apprentice_shouldcheckgone
-# 23 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto_if_eq VAR_0x8004, FALSE, BattleFrontier_BattleTowerLobby_EventScript_ShowApprentice @ VAR_0x8004 always TRUE here
-# 24 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto_if_set FLAG_DAILY_APPRENTICE_LEAVES, BattleFrontier_BattleTowerLobby_EventScript_HideApprentice
-# 25 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_ShowApprentice::
-# 26 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
clearflag FLAG_HIDE_APPRENTICE
-# 27 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
apprentice_setgfx
-# 28 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_EndShowOrHideApprentice::
-# 29 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 30 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 31 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_HideApprentice::
-# 32 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setflag FLAG_HIDE_APPRENTICE
-# 33 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto BattleFrontier_BattleTowerLobby_EventScript_EndShowOrHideApprentice
-# 34 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 35 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_OnWarp:
-# 36 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
map_script_2 VAR_TEMP_1, 0, BattleFrontier_BattleTowerLobby_EventScript_PlayerFaceNorth
-# 37 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.2byte 0
-# 38 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 39 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_PlayerFaceNorth::
-# 40 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_TEMP_1, 1
-# 41 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
turnobject OBJ_EVENT_ID_PLAYER, DIR_NORTH
-# 42 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 43 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 44 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_OnFrame:
-# 45 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
map_script_2 VAR_TEMP_CHALLENGE_STATUS, 0, BattleFrontier_BattleTowerLobby_EventScript_GetChallengeStatus
-# 46 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_SAVING, BattleFrontier_BattleTowerLobby_EventScript_QuitWithoutSaving
-# 47 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_PAUSED, BattleFrontier_BattleTowerLobby_EventScript_ResumeChallenge
-# 48 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_WON, BattleFrontier_BattleTowerLobby_EventScript_WonChallenge
-# 49 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
map_script_2 VAR_TEMP_CHALLENGE_STATUS, CHALLENGE_STATUS_LOST, BattleFrontier_BattleTowerLobby_EventScript_LostChallenge
-# 50 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.2byte 0
-# 51 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 52 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_GetChallengeStatus::
-# 53 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
frontier_getstatus
-# 54 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 55 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 56 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_QuitWithoutSaving::
-# 57 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
lock
-# 58 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
faceplayer
-# 59 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_DidntSaveBeforeQuitting, MSGBOX_DEFAULT
-# 60 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
closemessage
-# 61 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
tower_set TOWER_DATA_WIN_STREAK, 0
-# 62 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
tower_set TOWER_DATA_WIN_STREAK_ACTIVE, FALSE
-# 63 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
frontier_set FRONTIER_DATA_CHALLENGE_STATUS, 0
-# 64 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 255
-# 65 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
release
-# 66 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 67 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 68 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_WonChallenge::
-# 69 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
lock
-# 70 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
faceplayer
-# 71 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
frontier_isbrain
-# 72 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattleTowerLobby_EventScript_DefeatedMaiden
-# 73 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
message BattleFrontier_BattleTowerLobby_Text_CongratsBeatenSeven
-# 74 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
waitmessage
-# 75 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto BattleFrontier_BattleTowerLobby_EventScript_GiveRibbons
-# 76 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 77 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_DefeatedMaiden::
-# 78 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_CongratsDefeatedMaiden, MSGBOX_DEFAULT
-# 79 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_GiveRibbons::
-# 80 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
tower_giveribbons
-# 81 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto_if_eq VAR_RESULT, FALSE, BattleFrontier_BattleTowerLobby_EventScript_GiveBattlePoints
-# 82 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
message BattleFrontier_BattleTowerLobby_Text_HereAreSomeRibbons
-# 83 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
waitmessage
-# 84 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
playfanfare MUS_OBTAIN_ITEM
-# 85 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
waitfanfare
-# 86 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_PutRibbonOnMons, MSGBOX_DEFAULT
-# 87 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_GiveBattlePoints::
-# 88 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_AwardYouTheseBattlePoints, MSGBOX_DEFAULT
-# 89 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
frontier_givepoints
-# 90 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_Text_ObtainedXBattlePoints, MSGBOX_GETPOINTS
-# 91 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
call BattleFrontier_BattleTowerLobby_EventScript_AskSaveBattle
-# 92 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
tower_get TOWER_DATA_WIN_STREAK
-# 93 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto_if_ne VAR_RESULT, 49, BattleFrontier_BattleTowerLobby_EventScript_LookForwardToChallenge
-# 94 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_AboutToFace50thTrainer, MSGBOX_DEFAULT
-# 95 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_LookForwardToChallenge::
-# 96 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_LookForwardToAnotherChallenge, MSGBOX_DEFAULT
-# 97 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
closemessage
-# 98 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 255
-# 99 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
+ callnative UpdateFollowingPokemon
release
-# 100 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 101 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 102 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_LostChallenge::
-# 103 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto_if_ne VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_MULTIS, BattleFrontier_BattleTowerLobby_EventScript_CancelWinStreak
-# 104 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto_if_set FLAG_CHOSEN_MULTI_BATTLE_NPC_PARTNER, BattleFrontier_BattleTowerLobby_EventScript_CancelWinStreak
-# 105 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
tower_get TOWER_DATA_WIN_STREAK
-# 106 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto_if_ne VAR_RESULT, 0, BattleFrontier_BattleTowerLobby_EventScript_LostThanksForPlaying
-# 107 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_CancelWinStreak::
-# 108 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
tower_set TOWER_DATA_WIN_STREAK_ACTIVE, FALSE
-# 109 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_LostThanksForPlaying::
-# 110 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
lock
-# 111 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
faceplayer
-# 112 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
message BattleFrontier_BattleTowerLobby_Text_ThankYouForPlaying
-# 113 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
waitmessage
-# 114 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
call BattleFrontier_BattleTowerLobby_EventScript_AskSaveBattle
-# 115 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_LookForwardToAnotherChallenge, MSGBOX_DEFAULT
-# 116 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
closemessage
-# 117 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 255
-# 118 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
+ callnative UpdateFollowingPokemon
release
-# 119 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 120 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 121 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_AskSaveBattle::
-# 122 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
message BattleFrontier_BattleTowerLobby_Text_RecordWillBeSaved
-# 123 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
waitmessage
-# 124 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
frontier_checkairshow
-# 125 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
special LoadPlayerParty
-# 126 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
special HealPlayerParty
-# 127 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
tower_save 0
-# 128 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
playse SE_SAVE
-# 129 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
waitse
-# 130 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
call BattleFrontier_EventScript_GetCantRecordBattle
-# 131 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattleTowerLobby_EventScript_EndSaveBattle
-# 132 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
message BattleFrontier_BattleTowerLobby_Text_RecordLastMatch
-# 133 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
waitmessage
-# 134 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
multichoicedefault 20, 8, MULTI_YESNO, 1, FALSE
-# 135 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
switch VAR_RESULT
-# 136 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case 1, BattleFrontier_BattleTowerLobby_EventScript_EndSaveBattle
-# 137 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case 0, BattleFrontier_EventScript_SaveBattle
-# 138 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_EndSaveBattle
-# 139 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 140 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_EventScript_SaveBattle::
-# 141 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
frontier_savebattle
-# 142 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto_if_eq VAR_RESULT, FALSE, BattleFrontier_EventScript_BattleSaveFailed
-# 143 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
playse SE_SAVE
-# 144 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_BattleRecordedOnPass, MSGBOX_DEFAULT
-# 145 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto BattleFrontier_BattleTowerLobby_EventScript_EndSaveBattle
-# 146 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 147 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_EventScript_BattleSaveFailed::
-# 148 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerBattleRoom_Text_RecordCouldntBeSaved, MSGBOX_DEFAULT
-# 149 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_EndSaveBattle::
-# 150 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
return
-# 151 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 152 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_EventScript_GetCantRecordBattle::
-# 153 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
frontier_get FRONTIER_DATA_RECORD_DISABLED
-# 154 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
return
-# 155 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 156 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_ResumeChallenge::
-# 157 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
lock
-# 158 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
faceplayer
-# 159 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattleTowerLobby_EventScript_SetBravoTrainerOn
-# 160 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
message BattleFrontier_BattleTowerLobby_Text_WeveBeenWaitingForYou
-# 161 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
waitmessage
-# 162 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
message BattleFrontier_BattleTowerLobby_Text_ProgressWillBeSaved
-# 163 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
waitmessage
-# 164 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
tower_save CHALLENGE_STATUS_SAVING
-# 165 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
playse SE_SAVE
-# 166 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
waitse
-# 167 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
frontier_set FRONTIER_DATA_PAUSED, FALSE
-# 168 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto BattleFrontier_BattleTowerLobby_EventScript_EnterElevator
-# 169 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 170 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 171 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_SetBravoTrainerOn::
-# 172 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_BRAVO_TRAINER_BATTLE_TOWER_ON, TRUE
-# 173 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
return
-# 174 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 175 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_SinglesAttendant::
-# 176 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
lock
-# 177 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
faceplayer
-# 178 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_FRONTIER_FACILITY, FRONTIER_FACILITY_TOWER
-# 179 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
special SavePlayerParty
-# 180 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_WelcomSingleBattle, MSGBOX_DEFAULT
-# 181 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_AskEnterSinglesChallenge::
-# 182 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
message BattleFrontier_BattleTowerLobby_Text_TakeSinglesChallenge
-# 183 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
waitmessage
-# 184 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
multichoice 17, 6, MULTI_CHALLENGEINFO, FALSE
-# 185 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
switch VAR_RESULT
-# 186 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case 0, BattleFrontier_BattleTowerLobby_EventScript_TryEnterSinglesChallenge
-# 187 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case 1, BattleFrontier_BattleTowerLobby_EventScript_ExplainSinglesChallenge
-# 188 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case 2, BattleFrontier_BattleTowerLobby_EventScript_CancelChallenge
-# 189 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_CancelChallenge
-# 190 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 191 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_TryEnterSinglesChallenge::
-# 192 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES
-# 193 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
message BattleFrontier_BattleTowerLobby_Text_WhichLevelMode
-# 194 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
waitmessage
-# 195 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
multichoice 17, 6, MULTI_LEVEL_MODE, FALSE
-# 196 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
switch VAR_RESULT
-# 197 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case FRONTIER_LVL_TENT, BattleFrontier_BattleTowerLobby_EventScript_CancelChallenge
-# 198 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_CancelChallenge
-# 199 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
frontier_checkineligible
-# 200 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto_if_eq VAR_0x8004, TRUE, BattleFrontier_BattleTowerLobby_EventScript_NotEnoughValidMons
-# 201 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
frontier_set FRONTIER_DATA_LVL_MODE, VAR_RESULT
-# 202 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_SelectThreeMons, MSGBOX_DEFAULT
-# 203 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
fadescreen FADE_TO_BLACK
-# 204 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
+ callnative RemoveFollowingPokemon
call BattleFrontier_EventScript_GetLvlMode
-# 205 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
copyvar VAR_0x8004, VAR_RESULT
-# 206 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_0x8005, FRONTIER_PARTY_SIZE
-# 207 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
special ChoosePartyForBattleFrontier
-# 208 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
waitstate
-# 209 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleTowerLobby_EventScript_LoadPartyCancelChallenge
-# 210 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_OkayToSaveBeforeEntering, MSGBOX_YESNO
-# 211 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
switch VAR_RESULT
-# 212 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case NO, BattleFrontier_BattleTowerLobby_EventScript_LoadPartyCancelChallenge
-# 213 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case YES, BattleFrontier_BattleTowerLobby_EventScript_SaveBeforeSinglesChallenge
-# 214 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_LoadPartyCancelChallenge
-# 215 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 216 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_SaveBeforeSinglesChallenge::
-# 217 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
frontier_set FRONTIER_DATA_SELECTED_MON_ORDER
-# 218 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 0
-# 219 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
tower_init
-# 220 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
tower_set TOWER_DATA_WIN_STREAK_ACTIVE, TRUE
-# 221 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
frontier_set FRONTIER_DATA_PAUSED, FALSE
-# 222 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
special LoadPlayerParty
-# 223 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
closemessage
-# 224 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
delay 2
-# 225 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
call Common_EventScript_SaveGame
-# 226 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 255
-# 227 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleTowerLobby_EventScript_CancelChallengeSaveFailed
-# 228 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
incrementgamestat GAME_STAT_ENTERED_BATTLE_TOWER
-# 229 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_BRAVO_TRAINER_BATTLE_TOWER_ON, TRUE
-# 230 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto BattleFrontier_BattleTowerLobby_EventScript_EnterElevator
-# 231 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 232 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 233 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_ExplainSinglesChallenge::
-# 234 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_ExplainSinglesChallenge, MSGBOX_DEFAULT
-# 235 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto BattleFrontier_BattleTowerLobby_EventScript_AskEnterSinglesChallenge
-# 236 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 237 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 238 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_DoublesAttendant::
-# 239 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
lock
-# 240 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
faceplayer
-# 241 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_FRONTIER_FACILITY, FRONTIER_FACILITY_TOWER
-# 242 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
special SavePlayerParty
-# 243 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_WelcomeDoubleBattle, MSGBOX_DEFAULT
-# 244 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_AskEnterDoublesChallenge::
-# 245 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
message BattleFrontier_BattleTowerLobby_Text_TakeDoublesChallenge
-# 246 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
waitmessage
-# 247 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
multichoice 17, 6, MULTI_CHALLENGEINFO, FALSE
-# 248 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
switch VAR_RESULT
-# 249 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case 0, BattleFrontier_BattleTowerLobby_EventScript_TryEnterDoublesChallenge
-# 250 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case 1, BattleFrontier_BattleTowerLobby_EventScript_ExplainDoublesChallenge
-# 251 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case 2, BattleFrontier_BattleTowerLobby_EventScript_CancelChallenge
-# 252 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_CancelChallenge
-# 253 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 254 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_TryEnterDoublesChallenge::
-# 255 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES
-# 256 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
message BattleFrontier_BattleTowerLobby_Text_WhichLevelMode
-# 257 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
waitmessage
-# 258 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
multichoice 17, 6, MULTI_LEVEL_MODE, FALSE
-# 259 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
switch VAR_RESULT
-# 260 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case FRONTIER_LVL_TENT, BattleFrontier_BattleTowerLobby_EventScript_CancelChallenge
-# 261 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_CancelChallenge
-# 262 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
frontier_checkineligible
-# 263 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto_if_eq VAR_0x8004, TRUE, BattleFrontier_BattleTowerLobby_EventScript_NotEnoughValidMons
-# 264 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
frontier_set FRONTIER_DATA_LVL_MODE, VAR_RESULT
-# 265 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_PleaseSelectFourMons, MSGBOX_DEFAULT
-# 266 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
fadescreen FADE_TO_BLACK
-# 267 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
+ callnative RemoveFollowingPokemon
call BattleFrontier_EventScript_GetLvlMode
-# 268 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
copyvar VAR_0x8004, VAR_RESULT
-# 269 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_0x8005, FRONTIER_DOUBLES_PARTY_SIZE
-# 270 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
special ChoosePartyForBattleFrontier
-# 271 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
waitstate
-# 272 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleTowerLobby_EventScript_LoadPartyCancelChallenge
-# 273 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_OkayToSaveBeforeEntering, MSGBOX_YESNO
-# 274 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
switch VAR_RESULT
-# 275 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case NO, BattleFrontier_BattleTowerLobby_EventScript_LoadPartyCancelChallenge
-# 276 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case YES, BattleFrontier_BattleTowerLobby_EventScript_SaveBeforeDoublesChallenge
-# 277 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_LoadPartyCancelChallenge
-# 278 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 279 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_SaveBeforeDoublesChallenge::
-# 280 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
frontier_set FRONTIER_DATA_SELECTED_MON_ORDER
-# 281 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 0
-# 282 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
tower_init
-# 283 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
tower_set TOWER_DATA_WIN_STREAK_ACTIVE, TRUE
-# 284 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
frontier_set FRONTIER_DATA_PAUSED, FALSE
-# 285 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
special LoadPlayerParty
-# 286 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
closemessage
-# 287 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
delay 2
-# 288 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
call Common_EventScript_SaveGame
-# 289 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 255
-# 290 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleTowerLobby_EventScript_CancelChallengeSaveFailed
-# 291 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
incrementgamestat GAME_STAT_ENTERED_BATTLE_TOWER
-# 292 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_BRAVO_TRAINER_BATTLE_TOWER_ON, FALSE
-# 293 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto BattleFrontier_BattleTowerLobby_EventScript_EnterElevator
-# 294 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 295 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 296 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_ExplainDoublesChallenge::
-# 297 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_ExplainDoublesChallenge, MSGBOX_DEFAULT
-# 298 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto BattleFrontier_BattleTowerLobby_EventScript_AskEnterDoublesChallenge
-# 299 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 300 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 301 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_MultisAttendant::
-# 302 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
lock
-# 303 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
faceplayer
-# 304 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_FRONTIER_FACILITY, FRONTIER_FACILITY_TOWER
-# 305 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
clearflag FLAG_CHOSEN_MULTI_BATTLE_NPC_PARTNER
-# 306 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
special SavePlayerParty
-# 307 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_WelcomeMultiBattle, MSGBOX_DEFAULT
-# 308 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_AskEnterMultisChallenge::
-# 309 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
message BattleFrontier_BattleTowerLobby_Text_TakeMultisChallenge
-# 310 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
waitmessage
-# 311 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
multichoice 17, 6, MULTI_CHALLENGEINFO, FALSE
-# 312 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
switch VAR_RESULT
-# 313 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case 0, BattleFrontier_BattleTowerLobby_EventScript_TryEnterMultisChallenge
-# 314 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case 1, BattleFrontier_BattleTowerLobby_EventScript_ExplainMultisChallenge
-# 315 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case 2, BattleFrontier_BattleTowerLobby_EventScript_CancelChallenge
-# 316 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_CancelChallenge
-# 317 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 318 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_TryEnterMultisChallenge::
-# 319 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_MULTIS
-# 320 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
message BattleFrontier_BattleTowerLobby_Text_WhichLevelMode
-# 321 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
waitmessage
-# 322 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
multichoice 17, 6, MULTI_LEVEL_MODE, FALSE
-# 323 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
switch VAR_RESULT
-# 324 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case FRONTIER_LVL_TENT, BattleFrontier_BattleTowerLobby_EventScript_CancelChallenge
-# 325 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_CancelChallenge
-# 326 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
frontier_checkineligible
-# 327 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto_if_eq VAR_0x8004, TRUE, BattleFrontier_BattleTowerLobby_EventScript_NotEnoughValidMons
-# 328 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
frontier_set FRONTIER_DATA_LVL_MODE, VAR_RESULT
-# 329 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_PleaseSelectTwoMons, MSGBOX_DEFAULT
-# 330 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
fadescreen FADE_TO_BLACK
-# 331 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
+ callnative RemoveFollowingPokemon
call BattleFrontier_EventScript_GetLvlMode
-# 332 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
copyvar VAR_0x8004, VAR_RESULT
-# 333 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_0x8005, FRONTIER_MULTI_PARTY_SIZE
-# 334 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
special ChoosePartyForBattleFrontier
-# 335 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
waitstate
-# 336 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleTowerLobby_EventScript_LoadPartyCancelChallenge
-# 337 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_OkayToSaveBeforeEntering, MSGBOX_YESNO
-# 338 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
switch VAR_RESULT
-# 339 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case NO, BattleFrontier_BattleTowerLobby_EventScript_LoadPartyCancelChallenge
-# 340 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case YES, BattleFrontier_BattleTowerLobby_EventScript_SaveBeforeMultisChallenge
-# 341 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_LoadPartyCancelChallenge
-# 342 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 343 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_SaveBeforeMultisChallenge::
-# 344 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
frontier_set FRONTIER_DATA_SELECTED_MON_ORDER
-# 345 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 0
-# 346 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
tower_init
-# 347 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
tower_set TOWER_DATA_WIN_STREAK_ACTIVE, TRUE
-# 348 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
frontier_set FRONTIER_DATA_PAUSED, FALSE
-# 349 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
special LoadPlayerParty
-# 350 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
closemessage
-# 351 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
delay 2
-# 352 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
call Common_EventScript_SaveGame
-# 353 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 255
-# 354 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleTowerLobby_EventScript_CancelChallengeSaveFailed
-# 355 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
incrementgamestat GAME_STAT_ENTERED_BATTLE_TOWER
-# 356 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_BRAVO_TRAINER_BATTLE_TOWER_ON, FALSE
-# 357 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto BattleFrontier_BattleTowerLobby_EventScript_EnterElevator
-# 358 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 359 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 360 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_ExplainMultisChallenge::
-# 361 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_ExplainMultisChallenge, MSGBOX_DEFAULT
-# 362 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto BattleFrontier_BattleTowerLobby_EventScript_AskEnterMultisChallenge
-# 363 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 364 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 365 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_LinkMultisAttendant::
-# 366 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
lock
-# 367 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
faceplayer
-# 368 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_FRONTIER_FACILITY, FRONTIER_FACILITY_TOWER
-# 369 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
special SavePlayerParty
-# 370 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_WelcomeLinkMultiBattle, MSGBOX_DEFAULT
-# 371 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_AskEnterLinkMultisChallenge::
-# 372 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
message BattleFrontier_BattleTowerLobby_Text_TakeLinkMultisChallenge
-# 373 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
waitmessage
-# 374 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
multichoice 17, 6, MULTI_CHALLENGEINFO, FALSE
-# 375 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
switch VAR_RESULT
-# 376 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case 0, BattleFrontier_BattleTowerLobby_EventScript_TryEnterLinkMultisChallenge
-# 377 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case 1, BattleFrontier_BattleTowerLobby_EventScript_ExplainLinkMultisChallenge
-# 378 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case 2, BattleFrontier_BattleTowerLobby_EventScript_CancelChallenge
-# 379 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_CancelChallenge
-# 380 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 381 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_TryEnterLinkMultisChallenge::
-# 382 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_LINK_MULTIS
-# 383 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
message BattleFrontier_BattleTowerLobby_Text_WhichLevelMode
-# 384 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
waitmessage
-# 385 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
multichoice 17, 6, MULTI_LEVEL_MODE, FALSE
-# 386 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
switch VAR_RESULT
-# 387 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case FRONTIER_LVL_TENT, BattleFrontier_BattleTowerLobby_EventScript_CancelChallenge
-# 388 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_CancelChallenge
-# 389 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
frontier_checkineligible
-# 390 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto_if_eq VAR_0x8004, TRUE, BattleFrontier_BattleTowerLobby_EventScript_NotEnoughValidMons
-# 391 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
frontier_set FRONTIER_DATA_LVL_MODE, VAR_RESULT
-# 392 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_PleaseSelectTwoMons2, MSGBOX_DEFAULT
-# 393 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
fadescreen FADE_TO_BLACK
-# 394 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
+ callnative RemoveFollowingPokemon
call BattleFrontier_EventScript_GetLvlMode
-# 395 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
copyvar VAR_0x8004, VAR_RESULT
-# 396 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_0x8005, FRONTIER_MULTI_PARTY_SIZE
-# 397 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
special ChoosePartyForBattleFrontier
-# 398 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
waitstate
-# 399 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleTowerLobby_EventScript_LoadPartyCancelChallenge
-# 400 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_OkayToSaveBeforeEntering, MSGBOX_YESNO
-# 401 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
switch VAR_RESULT
-# 402 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case NO, BattleFrontier_BattleTowerLobby_EventScript_LoadPartyCancelChallenge
-# 403 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case YES, BattleFrontier_BattleTowerLobby_EventScript_SaveBeforeLinkMultisChallenge
-# 404 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_LoadPartyCancelChallenge
-# 405 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 406 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_SaveBeforeLinkMultisChallenge::
-# 407 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
frontier_set FRONTIER_DATA_SELECTED_MON_ORDER
-# 408 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 0
-# 409 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
tower_init
-# 410 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
tower_set TOWER_DATA_WIN_STREAK_ACTIVE, TRUE
-# 411 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
frontier_set FRONTIER_DATA_PAUSED, FALSE
-# 412 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
special LoadPlayerParty
-# 413 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
closemessage
-# 414 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
delay 2
-# 415 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
@ The command tower_save ultimately calls TrySavingData(SAVE_LINK), which writes data in SaveBlock1 and SaveBlock2
-# 416 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
@ to the flash, but not data in PokemonStorage. The SaveGame script that follows asks the player to do a full save,
-# 417 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
@ which they can opt out of. As a result the player can save their party and quit without having saved the PC.
-# 418 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
@ This allows players to clone pokemon and their held items by withdrawing them (or erase them by despositing).
-# 419 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
#ifndef BUGFIX
-# 420 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
tower_save 0
-# 421 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
#endif
-# 422 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
call Common_EventScript_SaveGame
-# 423 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 255
-# 424 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleTowerLobby_EventScript_CancelChallengeSaveFailed
-# 425 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
@ GAME_STAT_ENTERED_BATTLE_TOWER should not be incremented here, for two reasons:
-# 426 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
@ 1. It is incremented again in BattleFrontier_BattleTowerLobby_EventScript_CableLinkSuccessful or BattleFrontier_BattleTowerLobby_EventScript_WirelessLinkSuccessful
-# 427 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
@ 2. If the player tries to connect, but fails, the counter will still be incremented even if the player never enters the tower.
-# 428 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
#ifndef BUGFIX
-# 429 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
incrementgamestat GAME_STAT_ENTERED_BATTLE_TOWER
-# 430 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
#endif
-# 431 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
specialvar VAR_RESULT, IsWirelessAdapterConnected
-# 432 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto_if_eq VAR_RESULT, TRUE, BattleFrontier_BattleTowerLobby_EventScript_TryWirelessLink
-# 433 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto BattleFrontier_BattleTowerLobby_EventScript_TryCableLink
-# 434 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 435 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 436 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_FeelingsMan::
-# 437 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
lock
-# 438 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
faceplayer
-# 439 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
message BattleFrontier_BattleTowerLobby_Text_DescribeFeelingsAboutBattleTower
-# 440 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
waitmessage
-# 441 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
multichoice 16, 4, MULTI_BATTLE_TOWER_FEELINGS, FALSE
-# 442 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
switch VAR_RESULT
-# 443 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case 0, BattleFrontier_BattleTowerLobby_EventScript_FeelingsBattleNow
-# 444 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case 1, BattleFrontier_BattleTowerLobby_EventScript_FeelingsIWon
-# 445 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case 2, BattleFrontier_BattleTowerLobby_EventScript_FeelingsILost
-# 446 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case 3, BattleFrontier_BattleTowerLobby_EventScript_FeelingsWontTell
-# 447 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_FeelingsWontTell
-# 448 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
release
-# 449 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 450 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 451 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_FeelingsBattleNow::
-# 452 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_FeelWhatWhenYouBegin, MSGBOX_DEFAULT
-# 453 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_0x8004, EASY_CHAT_TYPE_BATTLE_START
-# 454 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
call Common_ShowEasyChatScreen
-# 455 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
lock
-# 456 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
faceplayer
-# 457 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto BattleFrontier_BattleTowerLobby_EventScript_CheckFeelings
-# 458 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 459 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 460 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_FeelingsIWon::
-# 461 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_FeelWhatWhenYouveWon, MSGBOX_DEFAULT
-# 462 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_0x8004, EASY_CHAT_TYPE_BATTLE_WON
-# 463 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
call Common_ShowEasyChatScreen
-# 464 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
lock
-# 465 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
faceplayer
-# 466 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto BattleFrontier_BattleTowerLobby_EventScript_CheckFeelings
-# 467 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 468 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 469 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_FeelingsILost::
-# 470 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_FeelWhatWhenYouveLost, MSGBOX_DEFAULT
-# 471 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_0x8004, EASY_CHAT_TYPE_BATTLE_LOST
-# 472 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
call Common_ShowEasyChatScreen
-# 473 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
lock
-# 474 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
faceplayer
-# 475 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto BattleFrontier_BattleTowerLobby_EventScript_CheckFeelings
-# 476 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 477 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 478 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_FeelingsWontTell::
-# 479 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_DontThinkMuchAboutIt, MSGBOX_DEFAULT
-# 480 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
release
-# 481 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 482 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 483 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_CheckFeelings::
-# 484 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto_if_eq VAR_RESULT, 0, BattleFrontier_BattleTowerLobby_EventScript_CanceledEasyChat
-# 485 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto_if_eq VAR_RESULT, 1, BattleFrontier_BattleTowerLobby_EventScript_SubmittedFeelings
-# 486 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 487 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 488 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_CanceledEasyChat::
-# 489 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_ChangedYourMind, MSGBOX_DEFAULT
-# 490 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
release
-# 491 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 492 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 493 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_SubmittedFeelings::
-# 494 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_ThatsHowYouFeel, MSGBOX_DEFAULT
-# 495 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
release
-# 496 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 497 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 498 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_Woman::
-# 499 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_WinsInRowRecorded, MSGBOX_NPC
-# 500 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 501 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 502 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_Boy::
-# 503 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_CanLeaveUntilLossOrSevenWins, MSGBOX_NPC
-# 504 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 505 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 506 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_ShowSinglesResults::
-# 507 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
lockall
-# 508 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
frontier_results FRONTIER_FACILITY_TOWER, FRONTIER_MODE_SINGLES
-# 509 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
waitbuttonpress
-# 510 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
special RemoveRecordsWindow
-# 511 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
releaseall
-# 512 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 513 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 514 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_ShowDoublesResults::
-# 515 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
lockall
-# 516 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
frontier_results FRONTIER_FACILITY_TOWER, FRONTIER_MODE_DOUBLES
-# 517 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
waitbuttonpress
-# 518 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
special RemoveRecordsWindow
-# 519 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
releaseall
-# 520 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 521 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 522 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_ShowMultisResults::
-# 523 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
lockall
-# 524 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
frontier_results FRONTIER_FACILITY_TOWER, FRONTIER_MODE_MULTIS
-# 525 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
waitbuttonpress
-# 526 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
special RemoveRecordsWindow
-# 527 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
releaseall
-# 528 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 529 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 530 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_ShowLinkMultisResults::
-# 531 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
lockall
-# 532 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
frontier_results FRONTIER_FACILITY_TOWER, FRONTIER_MODE_LINK_MULTIS
-# 533 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
waitbuttonpress
-# 534 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
special RemoveRecordsWindow
-# 535 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
releaseall
-# 536 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 537 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 538 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_NotEnoughValidMons::
-# 539 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
switch VAR_RESULT
-# 540 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case FRONTIER_LVL_50, BattleFrontier_BattleTowerLobby_EventScript_NotEnoughValidMonsLv50
-# 541 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case FRONTIER_LVL_OPEN, BattleFrontier_BattleTowerLobby_EventScript_NotEnoughValidMonsLvOpen
-# 542 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 543 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_NotEnoughValidMonsLv50::
-# 544 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
switch VAR_FRONTIER_BATTLE_MODE
-# 545 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case FRONTIER_MODE_SINGLES, BattleFrontier_BattleTowerLobby_EventScript_NotEnoughValidMonsLv50Singles
-# 546 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case FRONTIER_MODE_DOUBLES, BattleFrontier_BattleTowerLobby_EventScript_NotEnoughValidMonsLv50Doubles
-# 547 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_NotEnoughValidMonsLv50Multis, MSGBOX_DEFAULT
-# 548 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto BattleFrontier_BattleTowerLobby_EventScript_EndCancelChallenge
-# 549 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 550 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 551 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_NotEnoughValidMonsLv50Singles::
-# 552 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_NotEnoughValidMonsLv50Singles, MSGBOX_DEFAULT
-# 553 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto BattleFrontier_BattleTowerLobby_EventScript_EndCancelChallenge
-# 554 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 555 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 556 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_NotEnoughValidMonsLv50Doubles::
-# 557 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_NotEnoughValidMonsLv50Doubles, MSGBOX_DEFAULT
-# 558 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto BattleFrontier_BattleTowerLobby_EventScript_EndCancelChallenge
-# 559 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 560 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 561 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_NotEnoughValidMonsLvOpen::
-# 562 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
switch VAR_FRONTIER_BATTLE_MODE
-# 563 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case FRONTIER_MODE_SINGLES, BattleFrontier_BattleTowerLobby_EventScript_NotEnoughValidMonsLvOpenSingles
-# 564 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case FRONTIER_MODE_DOUBLES, BattleFrontier_BattleTowerLobby_EventScript_NotEnoughValidMonsLvOpenDoubles
-# 565 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_NotEnoughValidMonsLvOpenMultis, MSGBOX_DEFAULT
-# 566 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto BattleFrontier_BattleTowerLobby_EventScript_EndCancelChallenge
-# 567 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 568 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 569 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_NotEnoughValidMonsLvOpenSingles::
-# 570 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_NotEnoughValidMonsLvOpenSingles, MSGBOX_DEFAULT
-# 571 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto BattleFrontier_BattleTowerLobby_EventScript_EndCancelChallenge
-# 572 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 573 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 574 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_NotEnoughValidMonsLvOpenDoubles::
-# 575 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_NotEnoughValidMonsLvOpenDoubles, MSGBOX_DEFAULT
-# 576 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto BattleFrontier_BattleTowerLobby_EventScript_EndCancelChallenge
-# 577 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 578 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 579 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_CancelChallengeSaveFailed::
-# 580 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
frontier_set FRONTIER_DATA_CHALLENGE_STATUS @ No status provided, so it relies on VAR_0x8006 being 0 already
-# 581 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto BattleFrontier_BattleTowerLobby_EventScript_CancelChallenge
-# 582 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 583 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 584 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_LoadPartyCancelChallenge::
-# 585 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
special LoadPlayerParty
-# 586 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
+ callnative UpdateFollowingPokemon
BattleFrontier_BattleTowerLobby_EventScript_CancelChallenge::
-# 587 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
special CloseLink
-# 588 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_LookForwardToAnotherChallenge, MSGBOX_DEFAULT
-# 589 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_EndCancelChallenge::
-# 590 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
release
-# 591 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 592 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 593 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_EnterElevator::
-# 594 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
special SavePlayerParty
-# 595 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_0x8004, FRONTIER_UTIL_FUNC_SET_PARTY_ORDER
-# 596 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
call BattleFrontier_BattleTowerLobby_EventScript_GetPartySize
-# 597 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
special CallFrontierUtilFunc
-# 598 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_RESULT, 0
-# 599 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_WaitForLinkOpponentLoad::
-# 600 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
tower_loadlinkopponents
-# 601 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
delay 1
-# 602 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto_if_ne VAR_RESULT, 6, BattleFrontier_BattleTowerLobby_EventScript_WaitForLinkOpponentLoad
-# 603 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
call BattleFrontier_BattleTowerLobby_EventScript_ShowYouToBattleRoom
-# 604 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
clearflag FLAG_CANCEL_BATTLE_ROOM_CHALLENGE
-# 605 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
warp MAP_BATTLE_FRONTIER_BATTLE_TOWER_ELEVATOR, 1, 6
-# 606 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_TEMP_CHALLENGE_STATUS, 0
-# 607 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
waitstate
-# 608 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 609 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 610 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_ShowYouToBattleRoom::
-# 611 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
call BattleFrontier_BattleTowerLobby_EventScript_BufferModeText
-# 612 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_LINK_MULTIS, BattleFrontier_BattleTowerLobby_EventScript_ShowYouToLinkMultiBattleRoom
-# 613 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_ShowYouToBattleRoom, MSGBOX_DEFAULT
-# 614 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto BattleFrontier_BattleTowerLobby_EventScript_WalkToElevator
-# 615 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 616 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_ShowYouToLinkMultiBattleRoom::
-# 617 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
messageautoscroll BattleFrontier_BattleTowerLobby_Text_ShowYouToBattleRoom
-# 618 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
waitmessage
-# 619 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
delay 48
-# 620 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_WalkToElevator::
-# 621 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
closemessage
-# 622 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
call BattleFrontier_BattleTowerLobby_EventScript_SetAttendantTalkedTo
-# 623 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
call BattleFrontier_BattleTowerLobby_EventScript_GetDoorXCoord
-# 624 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
applymovement VAR_LAST_TALKED, BattleFrontier_BattleTowerLobby_Movement_WalkToElevator
-# 625 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, BattleFrontier_BattleTowerLobby_Movement_WalkToElevator
-# 626 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
waitmovement 0
-# 627 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
opendoor VAR_0x8004, 1
-# 628 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
waitdooranim
-# 629 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
applymovement VAR_LAST_TALKED, BattleFrontier_BattleTowerLobby_Movement_AttendantEnterElevator
-# 630 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, BattleFrontier_BattleTowerLobby_Movement_PlayerEnterElevator
-# 631 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
waitmovement 0
-# 632 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
closedoor VAR_0x8004, 1
-# 633 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
waitdooranim
-# 634 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
return
-# 635 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 636 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Movement_WalkToElevator:
-# 637 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
walk_up
-# 638 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
walk_up
-# 639 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
walk_up
-# 640 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
step_end
-# 641 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 642 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Movement_AttendantEnterElevator:
-# 643 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
walk_up
-# 644 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
set_invisible
-# 645 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
step_end
-# 646 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 647 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Movement_PlayerEnterElevator:
-# 648 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
walk_up
-# 649 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
walk_up
-# 650 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
set_invisible
-# 651 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
step_end
-# 652 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 653 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
@ Unused
-# 654 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Movement_UnusedEnterElevator:
-# 655 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
walk_fast_up
-# 656 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
walk_fast_up
-# 657 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
walk_fast_up
-# 658 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
walk_fast_up
-# 659 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
walk_fast_up
-# 660 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
set_invisible
-# 661 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
step_end
-# 662 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 663 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_BufferModeText::
-# 664 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattleTowerLobby_EventScript_BufferTextSingle
-# 665 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattleTowerLobby_EventScript_BufferTextDouble
-# 666 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_MULTIS, BattleFrontier_BattleTowerLobby_EventScript_BufferTextMulti
-# 667 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_LINK_MULTIS, BattleFrontier_BattleTowerLobby_EventScript_BufferTextLinkMulti
-# 668 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
return
-# 669 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 670 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_BufferTextSingle::
-# 671 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
bufferstdstring STR_VAR_1, STDSTRING_SINGLE
-# 672 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
return
-# 673 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 674 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_BufferTextDouble::
-# 675 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
bufferstdstring STR_VAR_1, STDSTRING_DOUBLE
-# 676 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
return
-# 677 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 678 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_BufferTextMulti::
-# 679 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
bufferstdstring STR_VAR_1, STDSTRING_MULTI
-# 680 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
return
-# 681 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 682 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_BufferTextLinkMulti::
-# 683 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
bufferstdstring STR_VAR_1, STDSTRING_MULTI_LINK
-# 684 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
return
-# 685 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 686 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_SetAttendantTalkedTo::
-# 687 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattleTowerLobby_EventScript_TalkedToSinglesAttendant
-# 688 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattleTowerLobby_EventScript_TalkedToDoublesAttendant
-# 689 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_MULTIS, BattleFrontier_BattleTowerLobby_EventScript_TalkedToMultisAttendant
-# 690 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_LINK_MULTIS, BattleFrontier_BattleTowerLobby_EventScript_TalkedToLinkMultisAttendant
-# 691 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
return
-# 692 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 693 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_TalkedToSinglesAttendant::
-# 694 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_LAST_TALKED, LOCALID_ATTENDANT_SINGLES
-# 695 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
return
-# 696 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 697 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_TalkedToDoublesAttendant::
-# 698 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_LAST_TALKED, LOCALID_ATTENDANT_DOUBLES
-# 699 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
return
-# 700 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 701 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_TalkedToMultisAttendant::
-# 702 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_LAST_TALKED, LOCALID_ATTENDANT_MULTIS
-# 703 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
return
-# 704 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 705 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_TalkedToLinkMultisAttendant::
-# 706 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_LAST_TALKED, LOCALID_ATTENDANT_LINK_MULTIS
-# 707 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
return
-# 708 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 709 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_GetDoorXCoord::
-# 710 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattleTowerLobby_EventScript_GetDoorXCoordSingles
-# 711 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattleTowerLobby_EventScript_GetDoorXCoordDoubles
-# 712 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_MULTIS, BattleFrontier_BattleTowerLobby_EventScript_GetDoorXCoordMultis
-# 713 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_LINK_MULTIS, BattleFrontier_BattleTowerLobby_EventScript_GetDoorXCoordLinkMultis
-# 714 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
return
-# 715 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 716 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_GetDoorXCoordSingles::
-# 717 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_0x8004, 6
-# 718 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
return
-# 719 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 720 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_GetDoorXCoordDoubles::
-# 721 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_0x8004, 10
-# 722 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
return
-# 723 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 724 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_GetDoorXCoordMultis::
-# 725 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_0x8004, 14
-# 726 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
return
-# 727 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 728 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_GetDoorXCoordLinkMultis::
-# 729 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_0x8004, 18
-# 730 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
return
-# 731 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 732 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_GetPartySize::
-# 733 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_SINGLES, BattleFrontier_BattleTowerLobby_EventScript_GetSinglesPartySize
-# 734 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_DOUBLES, BattleFrontier_BattleTowerLobby_EventScript_GetDoublesPartySize
-# 735 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_MULTIS, BattleFrontier_BattleTowerLobby_EventScript_GetMultisPartySize
-# 736 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
call_if_eq VAR_FRONTIER_BATTLE_MODE, FRONTIER_MODE_LINK_MULTIS, BattleFrontier_BattleTowerLobby_EventScript_GetLinkMultisPartySize
-# 737 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
return
-# 738 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 739 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_GetSinglesPartySize::
-# 740 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_0x8005, FRONTIER_PARTY_SIZE
-# 741 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
return
-# 742 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 743 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_GetDoublesPartySize::
-# 744 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_0x8005, FRONTIER_DOUBLES_PARTY_SIZE
-# 745 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
return
-# 746 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 747 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_GetMultisPartySize::
-# 748 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_0x8005, FRONTIER_MULTI_PARTY_SIZE
-# 749 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
return
-# 750 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 751 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_GetLinkMultisPartySize::
-# 752 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_0x8005, FRONTIER_MULTI_PARTY_SIZE
-# 753 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
return
-# 754 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 755 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_EventScript_GetLvlMode::
-# 756 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
frontier_get FRONTIER_DATA_LVL_MODE
-# 757 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
return
-# 758 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 759 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_TryCableLink::
-# 760 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_0x8004, USING_BATTLE_TOWER
-# 761 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
message gText_PleaseWaitForLink
-# 762 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
waitmessage
-# 763 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_0x8005, 0
-# 764 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
special TryBattleLinkup
-# 765 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
waitstate
-# 766 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto_if_eq VAR_RESULT, LINKUP_SUCCESS, BattleFrontier_BattleTowerLobby_EventScript_CableLinkSuccessful
-# 767 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto_if_eq VAR_RESULT, LINKUP_SOMEONE_NOT_READY, CableClub_EventScript_AbortLinkSomeoneNotReady
-# 768 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto_if_eq VAR_RESULT, LINKUP_DIFF_SELECTIONS, BattleFrontier_BattleTowerLobby_EventScript_AbortLinkDifferentSelections
-# 769 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto_if_eq VAR_RESULT, LINKUP_WRONG_NUM_PLAYERS, BattleFrontier_BattleTowerLobby_EventScript_AbortLinkIncorrectNumberOfPlayers
-# 770 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto_if_eq VAR_RESULT, LINKUP_FAILED, BattleFrontier_BattleTowerLobby_EventScript_CancelChallenge
-# 771 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto_if_eq VAR_RESULT, LINKUP_CONNECTION_ERROR, CableClub_EventScript_AbortLinkConnectionError
-# 772 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto_if_eq VAR_RESULT, LINKUP_FAILED_BATTLE_TOWER, BattleFrontier_BattleTowerLobby_EventScript_AbortLink
-# 773 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 774 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 775 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_AbortLinkDifferentSelections::
-# 776 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
special CloseLink
-# 777 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto_if_eq VAR_0x8005, 3, BattleFrontier_BattleTowerLobby_EventScript_FriendDifferentSelection
-# 778 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox Text_PlayersMadeDifferentSelections, MSGBOX_DEFAULT
-# 779 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
release
-# 780 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 781 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 782 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_FriendDifferentSelection::
-# 783 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_FriendChoseDifferentLvlMode, MSGBOX_DEFAULT
-# 784 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_ChooseDifferentMonsMatchLvlMode, MSGBOX_DEFAULT
-# 785 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
release
-# 786 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 787 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 788 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_AbortLinkIncorrectNumberOfPlayers::
-# 789 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_LinkMultiOnlyForTwoPlayers, MSGBOX_DEFAULT
-# 790 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
special CloseLink
-# 791 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox CableClub_Text_IncorrectNumberOfParticipants, MSGBOX_DEFAULT
-# 792 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
release
-# 793 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 794 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 795 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_AbortLink::
-# 796 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
special CloseLink
-# 797 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
call_if_eq VAR_0x8005, 0, BattleFrontier_BattleTowerLobby_EventScript_FriendChoseDifferentLvlMode
-# 798 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
call_if_eq VAR_0x8005, 1, BattleFrontier_BattleTowerLobby_EventScript_FriendAlsoSelectedMon
-# 799 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
call_if_eq VAR_0x8005, 2, BattleFrontier_BattleTowerLobby_EventScript_FriendAlsoSelectedMons
-# 800 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_ChooseDifferentMonsMatchLvlMode, MSGBOX_DEFAULT
-# 801 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
release
-# 802 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 803 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 804 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_FriendChoseDifferentLvlMode::
-# 805 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_FriendChoseDifferentLvlMode, MSGBOX_DEFAULT
-# 806 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
return
-# 807 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 808 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_FriendAlsoSelectedMon::
-# 809 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_FriendAlsoSelectedMon, MSGBOX_DEFAULT
-# 810 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
return
-# 811 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 812 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_FriendAlsoSelectedMons::
-# 813 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_FriendAlsoSelectedMons, MSGBOX_DEFAULT
-# 814 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
return
-# 815 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 816 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_CableLinkSuccessful::
-# 817 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
incrementgamestat GAME_STAT_ENTERED_BATTLE_TOWER
-# 818 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_BRAVO_TRAINER_BATTLE_TOWER_ON, FALSE
-# 819 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
message BattleFrontier_BattleTowerLobby_Text_SaveGameBeforeShowingIn
-# 820 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
waitmessage
-# 821 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
tower_save CHALLENGE_STATUS_SAVING
-# 822 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
special SaveForBattleTowerLink
-# 823 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
waitstate
-# 824 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
playse SE_SAVE
-# 825 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
waitse
-# 826 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
special TrySetBattleTowerLinkType
-# 827 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto BattleFrontier_BattleTowerLobby_EventScript_EnterElevator
-# 828 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 829 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 830 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_ExplainLinkMultisChallenge::
-# 831 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_ExplainLinkMultisChallenge, MSGBOX_DEFAULT
-# 832 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto BattleFrontier_BattleTowerLobby_EventScript_AskEnterLinkMultisChallenge
-# 833 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 834 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 835 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_TryWirelessLink::
-# 836 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_0x8004, LINK_GROUP_BATTLE_TOWER
-# 837 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto BattleFrontier_BattleTowerLobby_EventScript_ChooseLeader
-# 838 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 839 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 840 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_ChooseLeader::
-# 841 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
message CableClub_Text_ChooseGroupLeaderOfTwo
-# 842 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
waitmessage
-# 843 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
multichoice 16, 6, MULTI_LINK_LEADER, FALSE
-# 844 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
switch VAR_RESULT
-# 845 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case 0, BattleFrontier_BattleTowerLobby_EventScript_TryJoinGroup
-# 846 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case 1, BattleFrontier_BattleTowerLobby_EventScript_TryBecomeLeader
-# 847 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case 2, BattleFrontier_BattleTowerLobby_EventScript_CancelChallenge
-# 848 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_CancelChallenge
-# 849 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 850 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 851 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_TryBecomeLeader::
-# 852 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
call CableClub_EventScript_TryBecomeLinkLeader
-# 853 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto_if_eq VAR_RESULT, LINKUP_SUCCESS, BattleFrontier_BattleTowerLobby_EventScript_WirelessLinkSuccessful
-# 854 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto_if_eq VAR_RESULT, LINKUP_FAILED, BattleFrontier_BattleTowerLobby_EventScript_ChooseLeader
-# 855 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto_if_eq VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN, BattleFrontier_BattleTowerLobby_EventScript_TryBecomeLeader
-# 856 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto_if_eq VAR_RESULT, LINKUP_FAILED_BATTLE_TOWER, BattleFrontier_BattleTowerLobby_EventScript_AbortLink
-# 857 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
release
-# 858 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
return
-# 859 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 860 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_TryJoinGroup::
-# 861 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
call CableClub_EventScript_TryJoinLinkGroup
-# 862 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto_if_eq VAR_RESULT, LINKUP_SUCCESS, BattleFrontier_BattleTowerLobby_EventScript_WirelessLinkSuccessful
-# 863 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto_if_eq VAR_RESULT, LINKUP_FAILED, BattleFrontier_BattleTowerLobby_EventScript_ChooseLeader
-# 864 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto_if_eq VAR_RESULT, LINKUP_RETRY_ROLE_ASSIGN, BattleFrontier_BattleTowerLobby_EventScript_TryJoinGroup
-# 865 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto_if_eq VAR_RESULT, LINKUP_FAILED_BATTLE_TOWER, BattleFrontier_BattleTowerLobby_EventScript_AbortLink
-# 866 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
release
-# 867 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
return
-# 868 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 869 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_WirelessLinkSuccessful::
-# 870 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
incrementgamestat GAME_STAT_ENTERED_BATTLE_TOWER
-# 871 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
setvar VAR_BRAVO_TRAINER_BATTLE_TOWER_ON, FALSE
-# 872 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
message BattleFrontier_BattleTowerLobby_Text_SaveGameBeforeShowingIn
-# 873 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
waitmessage
-# 874 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
tower_save CHALLENGE_STATUS_SAVING
-# 875 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
special SaveForBattleTowerLink
-# 876 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
waitstate
-# 877 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
playse SE_SAVE
-# 878 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
waitse
-# 879 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto BattleFrontier_BattleTowerLobby_EventScript_EnterElevator
-# 880 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 881 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 882 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_RulesBoard::
-# 883 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
lockall
-# 884 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_RulesAreListed, MSGBOX_DEFAULT
-# 885 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto BattleFrontier_BattleTowerLobby_EventScript_ReadRulesBoard
-# 886 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 887 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 888 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_ReadRulesBoard::
-# 889 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
message BattleFrontier_BattleTowerLobby_Text_ReadWhichHeading
-# 890 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
waitmessage
-# 891 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
multichoice 17, 2, MULTI_BATTLE_TOWER_RULES, FALSE
-# 892 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
switch VAR_RESULT
-# 893 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case 0, BattleFrontier_BattleTowerLobby_EventScript_RulesTower
-# 894 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case 1, BattleFrontier_BattleTowerLobby_EventScript_RulesMons
-# 895 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case 2, BattleFrontier_BattleTowerLobby_EventScript_RulesSalon
-# 896 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case 3, BattleFrontier_BattleTowerLobby_EventScript_RulesMultiLink
-# 897 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case 4, BattleFrontier_BattleTowerLobby_EventScript_ExitRules
-# 898 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
case MULTI_B_PRESSED, BattleFrontier_BattleTowerLobby_EventScript_ExitRules
-# 899 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 900 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 901 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_RulesTower::
-# 902 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_ExplainTowerRules, MSGBOX_DEFAULT
-# 903 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto BattleFrontier_BattleTowerLobby_EventScript_ReadRulesBoard
-# 904 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 905 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 906 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_RulesMons::
-# 907 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_ExplainMonRules, MSGBOX_DEFAULT
-# 908 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto BattleFrontier_BattleTowerLobby_EventScript_ReadRulesBoard
-# 909 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 910 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 911 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_RulesSalon::
-# 912 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_ExplainSalonRules, MSGBOX_DEFAULT
-# 913 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto BattleFrontier_BattleTowerLobby_EventScript_ReadRulesBoard
-# 914 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 915 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 916 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_RulesMultiLink::
-# 917 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
msgbox BattleFrontier_BattleTowerLobby_Text_ExplainMultiLinkRules, MSGBOX_DEFAULT
-# 918 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
goto BattleFrontier_BattleTowerLobby_EventScript_ReadRulesBoard
-# 919 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 920 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 921 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_EventScript_ExitRules::
-# 922 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
releaseall
-# 923 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
end
-# 924 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 925 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
@ Unused
-# 926 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_DirectYouToBattleRoom:
-# 927 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "I'll direct you to your BATTLE ROOM now.$"
-# 928 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 929 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_DidntSaveBeforeQuitting:
-# 930 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Excuse me!\p"
-# 931 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "You didn't save before you quit your\n"
-# 932 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "challenge last time.\p"
-# 933 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Because of that, your challenge so far\n"
-# 934 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "has been disqualified. Sorry!$"
-# 935 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 936 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_CongratsBeatenSeven:
-# 937 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Congratulations!\n"
-# 938 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "You've beaten all seven TRAINERS!\p"
-# 939 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "$"
-# 940 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 941 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
@ Unused
-# 942 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_EarnedFabulousPrize:
-# 943 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "For beating seven TRAINERS in a row,\n"
-# 944 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "you have earned this fabulous prize!\p"
-# 945 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "$"
-# 946 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 947 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_ReceivedPrize:
-# 948 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "{PLAYER} received the prize\n"
-# 949 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "{STR_VAR_1}.$"
-# 950 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 951 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
@ Unused
-# 952 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_BagFullMakeRoom:
-# 953 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Oh, your BAG appears to be full.\p"
-# 954 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Please make room in your BAG, then come\n"
-# 955 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "see me.$"
-# 956 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 957 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_ThankYouForPlaying:
-# 958 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Thank you for playing!\p"
-# 959 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "$"
-# 960 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 961 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_RecordWillBeSaved:
-# 962 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Your record will be saved.\n"
-# 963 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Please wait.$"
-# 964 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 965 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_WeveBeenWaitingForYou:
-# 966 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "We've been waiting for you!\p"
-# 967 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "$"
-# 968 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 969 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_ProgressWillBeSaved:
-# 970 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Before entering a BATTLE ROOM, your\n"
-# 971 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "progress will be saved. Please wait.$"
-# 972 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 973 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_AboutToFace50thTrainer:
-# 974 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "You're finally about to face the\n"
-# 975 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "50th TRAINER.\p"
-# 976 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "From here on, every time you beat seven\n"
-# 977 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "TRAINERS in a row, your POKéMON will\l"
-# 978 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "receive a commemorative RIBBON.\p"
-# 979 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Good luck!$"
-# 980 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 981 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_HereAreSomeRibbons:
-# 982 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Here are some RIBBONS for beating\n"
-# 983 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "seven tough TRAINERS in a row.\p"
-# 984 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "{PLAYER} received some RIBBONS!$"
-# 985 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 986 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_PutRibbonOnMons:
-# 987 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "{PLAYER} put the RIBBONS on\n"
-# 988 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "the challenger POKéMON.$"
-# 989 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 990 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_DescribeFeelingsAboutBattleTower:
-# 991 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Excuse me, do you have a moment?\p"
-# 992 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Can you describe your feelings when\n"
-# 993 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "you're about to begin a BATTLE TOWER\l"
-# 994 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "match, or when you've either won or\l"
-# 995 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "lost a match?$"
-# 996 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 997 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_FeelWhatWhenYouBegin:
-# 998 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Okay, what are your feelings when\n"
-# 999 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "you're about to begin a match?$"
-# 1000 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1001 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_FeelWhatWhenYouveWon:
-# 1002 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "What do you feel when you've won\n"
-# 1003 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "a match?$"
-# 1004 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1005 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_FeelWhatWhenYouveLost:
-# 1006 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Can I hear about your feelings when\n"
-# 1007 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "you have lost a match?$"
-# 1008 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1009 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_DontThinkMuchAboutIt:
-# 1010 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Oh, so you don't think much about it?\n"
-# 1011 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "You're one cool customer.$"
-# 1012 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1013 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_ChangedYourMind:
-# 1014 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Hunh? You changed your mind?\n"
-# 1015 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "I guess you're fickle.$"
-# 1016 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1017 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_ThatsHowYouFeel:
-# 1018 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Okay, so that's how you feel?\n"
-# 1019 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "That's quite original.\p"
-# 1020 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Thanks!$"
-# 1021 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1022 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_WinsInRowRecorded:
-# 1023 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "The number of matches you win in a row\n"
-# 1024 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "is recorded.\p"
-# 1025 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "I'd better not get beaten in\n"
-# 1026 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "an embarrassing way!$"
-# 1027 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1028 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_CanLeaveUntilLossOrSevenWins:
-# 1029 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Once you've entered the BATTLE TOWER,\n"
-# 1030 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "you can't leave until you either lose\l"
-# 1031 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "or you beat seven TRAINERS in a row.\p"
-# 1032 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "You'd best be certain that you're up\n"
-# 1033 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "to the challenge.$"
-# 1034 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1035 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
@ Unused
-# 1036 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_DoubleBattleRoomConstruction:
-# 1037 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Welcome to the BATTLE TOWER\n"
-# 1038 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "DOUBLE BATTLE CORNER!\p"
-# 1039 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Unfortunately, the BATTLE ROOMS\n"
-# 1040 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "are still under construction.\p"
-# 1041 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Please come back when the work\n"
-# 1042 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "is completed.$"
-# 1043 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1044 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
@ Unused
-# 1045 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_MultiBattleRoomConstruction:
-# 1046 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Welcome to the BATTLE TOWER\n"
-# 1047 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "MULTI BATTLE CORNER!\p"
-# 1048 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Unfortunately, the BATTLE ROOMS\n"
-# 1049 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "are still under construction.\p"
-# 1050 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Please come back when the work\n"
-# 1051 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "is completed.$"
-# 1052 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1053 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_LookForwardToAnotherChallenge:
-# 1054 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "We look forward to seeing you on\n"
-# 1055 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "another challenge!$"
-# 1056 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1057 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_WhichLevelMode:
-# 1058 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "The BATTLE ROOM offers two levels\n"
-# 1059 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "of challenge, Level 50 and Open Level.\l"
-# 1060 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Which is your choice?$"
-# 1061 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1062 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
@ Unused
-# 1063 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_PleaseSelectMons:
-# 1064 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Please select the POKéMON you wish\n"
-# 1065 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "to enter.$"
-# 1066 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1067 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_OkayToSaveBeforeEntering:
-# 1068 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Before entering a BATTLE ROOM, your\n"
-# 1069 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "progress must be saved. Is that okay?$"
-# 1070 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1071 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_ShowYouToBattleRoom:
-# 1072 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "I will now show you to the\n"
-# 1073 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "{STR_VAR_1} BATTLE ROOM.$"
-# 1074 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1075 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_RecordLastMatch:
-# 1076 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Shall I record your last BATTLE TOWER\n"
-# 1077 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "match on your FRONTIER PASS?$"
-# 1078 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1079 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
@ Unused
-# 1080 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_NotEnoughValidMonsLv50:
-# 1081 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Excuse me!\p"
-# 1082 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "You don't have {STR_VAR_2} eligible POKéMON.\p"
-# 1083 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "You must have {STR_VAR_2} different POKéMON\n"
-# 1084 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "of Level 50 or less to enter.\p"
-# 1085 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "They also must be holding different\n"
-# 1086 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "kinds of items.\p"
-# 1087 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "EGGS{STR_VAR_1} ineligible.\p"
-# 1088 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Please come see me when you are ready.$"
-# 1089 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1090 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
@ Unused
-# 1091 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_NotEnoughValidMonsLvOpen:
-# 1092 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Excuse me!\p"
-# 1093 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "You don't have {STR_VAR_2} eligible POKéMON.\p"
-# 1094 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "You must have {STR_VAR_2} different POKéMON\n"
-# 1095 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "to enter.\p"
-# 1096 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "They also must be holding different\n"
-# 1097 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "kinds of items.\p"
-# 1098 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "EGGS{STR_VAR_1} ineligible.\p"
-# 1099 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Please come see me when you are ready.$"
-# 1100 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1101 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_NotEnoughValidMonsLv50Singles:
-# 1102 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Excuse me!\p"
-# 1103 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "You don't have three eligible POKéMON.\p"
-# 1104 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "You must have three different POKéMON\n"
-# 1105 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "of Level 50 or less to enter.\p"
-# 1106 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "They also must be holding different\n"
-# 1107 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "kinds of items.\p"
-# 1108 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "EGGS{STR_VAR_1} ineligible.\p"
-# 1109 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Please come see me when you are ready.$"
-# 1110 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1111 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_NotEnoughValidMonsLvOpenSingles:
-# 1112 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Excuse me!\p"
-# 1113 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "You don't have three eligible POKéMON.\p"
-# 1114 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "You must have three different POKéMON\n"
-# 1115 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "to enter.\p"
-# 1116 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "They also must be holding different\n"
-# 1117 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "kinds of items.\p"
-# 1118 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "EGGS{STR_VAR_1} ineligible.\p"
-# 1119 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Please come see me when you are ready.$"
-# 1120 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1121 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_NotEnoughValidMonsLv50Doubles:
-# 1122 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Excuse me!\p"
-# 1123 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "You don't have four eligible POKéMON.\p"
-# 1124 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "You must have four different POKéMON\n"
-# 1125 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "of Level 50 or less to enter.\p"
-# 1126 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "They also must be holding different\n"
-# 1127 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "kinds of items.\p"
-# 1128 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "EGGS{STR_VAR_1} ineligible.\p"
-# 1129 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Please come see me when you are ready.$"
-# 1130 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1131 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_NotEnoughValidMonsLvOpenDoubles:
-# 1132 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Excuse me!\p"
-# 1133 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "You don't have four eligible POKéMON.\p"
-# 1134 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "You must have four different POKéMON\n"
-# 1135 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "to enter.\p"
-# 1136 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "They also must be holding different\n"
-# 1137 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "kinds of items.\p"
-# 1138 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "EGGS{STR_VAR_1} ineligible.\p"
-# 1139 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Please come see me when you are ready.$"
-# 1140 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1141 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_NotEnoughValidMonsLv50Multis:
-# 1142 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Excuse me!\p"
-# 1143 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "You don't have two eligible POKéMON.\p"
-# 1144 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "You must have two different POKéMON\n"
-# 1145 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "of Level 50 or less to enter.\p"
-# 1146 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "They also must be holding different\n"
-# 1147 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "kinds of items.\p"
-# 1148 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "EGGS{STR_VAR_1} ineligible.\p"
-# 1149 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Please come see me when you are ready.$"
-# 1150 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1151 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_NotEnoughValidMonsLvOpenMultis:
-# 1152 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Excuse me!\p"
-# 1153 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "You don't have two eligible POKéMON.\p"
-# 1154 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "You must have two different POKéMON\n"
-# 1155 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "to enter.\p"
-# 1156 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "They also must be holding different\n"
-# 1157 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "kinds of items.\p"
-# 1158 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "EGGS{STR_VAR_1} ineligible.\p"
-# 1159 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Please come see me when you are ready.$"
-# 1160 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1161 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_WelcomSingleBattle:
-# 1162 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Where the talents of TRAINERS\n"
-# 1163 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "are put to the test!\p"
-# 1164 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Welcome to the BATTLE TOWER!\p"
-# 1165 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "I am your guide to the SINGLE\n"
-# 1166 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "BATTLE ROOMS.$"
-# 1167 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1168 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_TakeSinglesChallenge:
-# 1169 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Would you like to take the SINGLE\n"
-# 1170 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "BATTLE ROOM challenge?$"
-# 1171 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1172 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_ExplainSinglesChallenge:
-# 1173 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "The BATTLE TOWER's SINGLE BATTLE\n"
-# 1174 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "ROOMS are facilities for conducting\l"
-# 1175 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "SINGLE BATTLES with three POKéMON.\p"
-# 1176 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "There are many SINGLE BATTLE ROOMS\n"
-# 1177 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "in the BATTLE TOWER for team battles.\p"
-# 1178 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "In each of the SINGLE BATTLE ROOMS,\n"
-# 1179 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "seven TRAINERS await your challenge.\p"
-# 1180 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "If you manage to defeat all seven,\n"
-# 1181 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "you will earn Battle Points.\p"
-# 1182 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "If you want to interrupt your\n"
-# 1183 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "challenge, please save the game.\p"
-# 1184 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "If you don't save before interrupting,\n"
-# 1185 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "you will be disqualified.$"
-# 1186 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1187 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_SelectThreeMons:
-# 1188 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Now please select the three POKéMON\n"
-# 1189 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "that are to be entered.$"
-# 1190 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1191 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_WelcomeDoubleBattle:
-# 1192 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Where the talents of TRAINERS\n"
-# 1193 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "are put to the test!\p"
-# 1194 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Welcome to the BATTLE TOWER!\p"
-# 1195 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "I am your guide to the DOUBLE\n"
-# 1196 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "BATTLE ROOMS.$"
-# 1197 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1198 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_TakeDoublesChallenge:
-# 1199 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Would you like to take the DOUBLE\n"
-# 1200 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "BATTLE ROOM challenge?$"
-# 1201 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1202 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_ExplainDoublesChallenge:
-# 1203 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "The BATTLE TOWER's DOUBLE BATTLE\n"
-# 1204 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "ROOMS are facilities for conducting\l"
-# 1205 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "DOUBLE BATTLES with four POKéMON.\p"
-# 1206 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "There are many DOUBLE BATTLE ROOMS\n"
-# 1207 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "in the BATTLE TOWER for team battles.\p"
-# 1208 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "In each of the DOUBLE BATTLE ROOMS,\n"
-# 1209 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "seven TRAINERS await your challenge.\p"
-# 1210 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "If you manage to defeat all seven,\n"
-# 1211 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "you will earn Battle Points.\p"
-# 1212 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "If you want to interrupt your\n"
-# 1213 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "challenge, please save the game.\p"
-# 1214 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "If you don't save before interrupting,\n"
-# 1215 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "you will be disqualified.$"
-# 1216 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1217 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_PleaseSelectFourMons:
-# 1218 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Now please select the four POKéMON\n"
-# 1219 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "that are to be entered.$"
-# 1220 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1221 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_WelcomeMultiBattle:
-# 1222 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Where the talents of TRAINERS\n"
-# 1223 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "are put to the test!\p"
-# 1224 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Welcome to the BATTLE TOWER!\p"
-# 1225 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "I am your guide to the MULTI\n"
-# 1226 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "BATTLE ROOMS.$"
-# 1227 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1228 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_TakeMultisChallenge:
-# 1229 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Would you like to take the MULTI\n"
-# 1230 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "BATTLE ROOM challenge?$"
-# 1231 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1232 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_ExplainMultisChallenge:
-# 1233 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "The BATTLE TOWER's MULTI BATTLE\n"
-# 1234 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "ROOMS are facilities for conducting\l"
-# 1235 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "MULTI BATTLES.\p"
-# 1236 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "For MULTI BATTLES, you must partner\n"
-# 1237 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "with a TRAINER in the TOWER and enter\l"
-# 1238 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "with two POKéMON each.\p"
-# 1239 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Inside the TOWER is a room named\n"
-# 1240 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "the BATTLE SALON where you may meet\l"
-# 1241 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "other TRAINERS.\p"
-# 1242 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "There, you must find a TRAINER to act\n"
-# 1243 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "as your partner in MULTI BATTLES.\p"
-# 1244 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Once you have partnered up, you will\n"
-# 1245 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "be shown to a MULTI BATTLE ROOM.\p"
-# 1246 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "In the MULTI BATTLE ROOM, seven\n"
-# 1247 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "tag teams await your challenge.\p"
-# 1248 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "If you manage to defeat all seven\n"
-# 1249 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "teams, you will earn Battle Points.\p"
-# 1250 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "If you want to interrupt your\n"
-# 1251 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "challenge, please save the game.\p"
-# 1252 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "If you don't save before interrupting,\n"
-# 1253 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "you will be disqualified.$"
-# 1254 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1255 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_PleaseSelectTwoMons:
-# 1256 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Now please select the two POKéMON\n"
-# 1257 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "that are to be entered.$"
-# 1258 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1259 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_WelcomeLinkMultiBattle:
-# 1260 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Where the talents of TRAINERS\n"
-# 1261 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "are put to the test!\p"
-# 1262 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Welcome to the BATTLE TOWER!\p"
-# 1263 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "I am your guide to the LINK MULTI\n"
-# 1264 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "BATTLE ROOMS.$"
-# 1265 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1266 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_TakeLinkMultisChallenge:
-# 1267 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Would you like to take the LINK MULTI\n"
-# 1268 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "BATTLE ROOM challenge?$"
-# 1269 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1270 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_ExplainLinkMultisChallenge:
-# 1271 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "The BATTLE TOWER's MULTI BATTLE\n"
-# 1272 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "ROOMS are facilities for conducting\l"
-# 1273 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "MULTI BATTLES with a friend.\p"
-# 1274 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "You must link with your friend using\n"
-# 1275 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Wireless Adapters or a Game Boy\l"
-# 1276 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Advance Game Link cable.\p"
-# 1277 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "You must partner with your friend and\n"
-# 1278 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "enter two different kinds of POKéMON.\p"
-# 1279 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "There are many MULTI BATTLE ROOMS\n"
-# 1280 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "in the BATTLE TOWER for team battles.\p"
-# 1281 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "In a MULTI BATTLE ROOM, seven\n"
-# 1282 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "tag teams await you and your friend\l"
-# 1283 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "to make a tag-team challenge.\p"
-# 1284 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "If you manage to defeat all seven\n"
-# 1285 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "teams, you will earn Battle Points.\p"
-# 1286 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Please beware that unlike other ROOMS,\n"
-# 1287 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "you may not interrupt your challenge.\p"
-# 1288 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Once you start, you must battle seven\n"
-# 1289 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "MULTI BATTLES in a row nonstop.$"
-# 1290 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1291 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_PleaseSelectTwoMons2:
-# 1292 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Now please select the two POKéMON\n"
-# 1293 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "that are to be entered.$"
-# 1294 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1295 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
@ Unused
-# 1296 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_ChoseSameMonAsFriend:
-# 1297 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "You have chosen the same kind of\n"
-# 1298 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "POKéMON as your friend.\p"
-# 1299 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Please choose two POKéMON different\n"
-# 1300 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "from your friend's, match the level\l"
-# 1301 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "you wish to enter, and register again.$"
-# 1302 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1303 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_LinkMultiOnlyForTwoPlayers:
-# 1304 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "The LINK MULTI BATTLE ROOM challenge\n"
-# 1305 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "is only for two linked players.$"
-# 1306 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1307 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_FriendAlsoSelectedMon:
-# 1308 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Your friend has also selected\n"
-# 1309 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "the POKéMON {STR_VAR_1}.$"
-# 1310 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1311 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_FriendAlsoSelectedMons:
-# 1312 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Your friend has also selected the\n"
-# 1313 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "POKéMON {STR_VAR_1} and {STR_VAR_2}.$"
-# 1314 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1315 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_FriendChoseDifferentLvlMode:
-# 1316 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Your friend has chosen a different\n"
-# 1317 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "battle level.$"
-# 1318 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1319 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
@ Unused
-# 1320 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_FriendChoseDifferentLvlModeSameMon:
-# 1321 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Your friend has chosen a different\n"
-# 1322 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "battle level.\p"
-# 1323 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Your friend has also selected\n"
-# 1324 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "the POKéMON {STR_VAR_1}.$"
-# 1325 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1326 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
@ Unused
-# 1327 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_FriendChoseDifferentLvlModeSameMons:
-# 1328 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Your friend has chosen a different\n"
-# 1329 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "battle level.\p"
-# 1330 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Your friend has also selected the\n"
-# 1331 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "POKéMON {STR_VAR_1} and {STR_VAR_2}.$"
-# 1332 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1333 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_ChooseDifferentMonsMatchLvlMode:
-# 1334 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Please choose two POKéMON different\n"
-# 1335 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "from your friend's, match the level\l"
-# 1336 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "you wish to enter, and register again.$"
-# 1337 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1338 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_SaveGameBeforeShowingIn:
-# 1339 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "I will save the game before\n"
-# 1340 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "showing you in. Please wait.$"
-# 1341 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1342 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_CongratsDefeatedMaiden:
-# 1343 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Congratulations!\n"
-# 1344 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "You have defeated the SALON MAIDEN\l"
-# 1345 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "and swept seven TRAINERS!$"
-# 1346 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1347 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_AwardYouTheseBattlePoints:
-# 1348 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "In recognition of your infinite talent,\n"
-# 1349 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "we award you these Battle Point(s).$"
-# 1350 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1351 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_Text_ObtainedXBattlePoints:
-# 1352 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "{PLAYER} obtained {STR_VAR_1} Battle Point(s).$"
-# 1353 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1354 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_RulesAreListed:
-# 1355 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "The BATTLE TOWER rules are listed.$"
-# 1356 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1357 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_ReadWhichHeading:
-# 1358 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Which heading do you want to read?$"
-# 1359 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1360 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_ExplainTowerRules:
-# 1361 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "The BATTLE TOWER is a facility where\n"
-# 1362 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "four types of battles are waged--\l"
-# 1363 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "SINGLE BATTLE, DOUBLE BATTLE, MULTI\l"
-# 1364 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "BATTLE, and LINK MULTI BATTLE.\p"
-# 1365 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "For each of these types, there are\n"
-# 1366 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "separate BATTLE ROOMS.\p"
-# 1367 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Please speak with a guide offering\n"
-# 1368 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "the type of battle you wish to enter.$"
-# 1369 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1370 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_ExplainMonRules:
-# 1371 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Depending on the BATTLE ROOM you are\n"
-# 1372 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "entering, you will be required to take\l"
-# 1373 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "a certain number of POKéMON.\p"
-# 1374 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "The SINGLE BATTLE mode requires\n"
-# 1375 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "three POKéMON.\p"
-# 1376 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "The DOUBLE BATTLE mode requires four,\n"
-# 1377 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "and the MULTI modes both require two.$"
-# 1378 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1379 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_ExplainSalonRules:
-# 1380 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "The BATTLE SALON is where you must\n"
-# 1381 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "find a partner to form a tag team for\l"
-# 1382 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "the MULTI BATTLE ROOM challenge.\p"
-# 1383 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Choose the best partner for you by\n"
-# 1384 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "examining other TRAINERS'\l"
-# 1385 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "POKéMON and their moves.\p"
-# 1386 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "You may choose a new tag partner\n"
-# 1387 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "after winning seven straight matches.$"
-# 1388 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
-# 1389 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
BattleFrontier_BattleTowerLobby_Text_ExplainMultiLinkRules:
-# 1390 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "The LINK MULTI BATTLE Mode is for two\n"
-# 1391 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "friends to mount a challenge together.\p"
-# 1392 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "You and your friend must be linked with\n"
-# 1393 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "Wireless Adapters or a GBA Game Link\l"
-# 1394 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "cable.\p"
-# 1395 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "You must choose two POKéMON at\n"
-# 1396 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "the registration counter.\p"
-# 1397 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "These POKéMON must be different\n"
-# 1398 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "from those of your friend.\p"
-# 1399 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "You may not interrupt this challenge\n"
-# 1400 "data/maps/BattleFrontier_BattleTowerLobby/scripts.pory"
.string "in the middle, unlike other modes.$"
diff --git a/data/maps/FortreeCity_Gym/scripts.inc b/data/maps/FortreeCity_Gym/scripts.inc
index da97b4294829..1c9a2756d47f 100644
--- a/data/maps/FortreeCity_Gym/scripts.inc
+++ b/data/maps/FortreeCity_Gym/scripts.inc
@@ -1,638 +1,319 @@
-# 1 "data/maps/FortreeCity_Gym/scripts.pory"
-
-# 2 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_MapScripts::
-# 3 "data/maps/FortreeCity_Gym/scripts.pory"
map_script MAP_SCRIPT_ON_TRANSITION, FortreeCity_Gym_OnTransition
-# 4 "data/maps/FortreeCity_Gym/scripts.pory"
map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, FortreeCity_Gym_OnWarp
-# 5 "data/maps/FortreeCity_Gym/scripts.pory"
.byte 0
-# 6 "data/maps/FortreeCity_Gym/scripts.pory"
-# 7 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_OnTransition:
-# 8 "data/maps/FortreeCity_Gym/scripts.pory"
special RotatingGate_InitPuzzle
-# 9 "data/maps/FortreeCity_Gym/scripts.pory"
+ setflag FLAG_TEMP_HIDE_FOLLOWER @ Hide follower bc of rotating gates
end
-# 10 "data/maps/FortreeCity_Gym/scripts.pory"
-# 11 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_OnWarp:
-# 12 "data/maps/FortreeCity_Gym/scripts.pory"
map_script_2 VAR_TEMP_0, VAR_TEMP_0, FortreeCity_Gym_EventScript_InitRotatingGates
-# 13 "data/maps/FortreeCity_Gym/scripts.pory"
.2byte 0
-# 14 "data/maps/FortreeCity_Gym/scripts.pory"
-# 15 "data/maps/FortreeCity_Gym/scripts.pory"
@ NOTE: This rotating gate puzzle makes use of VAR_TEMP_0 - VAR_TEMP_3
-# 16 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_EventScript_InitRotatingGates::
-# 17 "data/maps/FortreeCity_Gym/scripts.pory"
special RotatingGate_InitPuzzleAndGraphics
-# 18 "data/maps/FortreeCity_Gym/scripts.pory"
end
-# 19 "data/maps/FortreeCity_Gym/scripts.pory"
-# 20 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_EventScript_Winona::
-# 21 "data/maps/FortreeCity_Gym/scripts.pory"
trainerbattle_single TRAINER_WINONA_1, FortreeCity_Gym_Text_WinonaIntro, FortreeCity_Gym_Text_WinonaDefeat, FortreeCity_Gym_EventScript_WinonaDefeated, NO_MUSIC
-# 22 "data/maps/FortreeCity_Gym/scripts.pory"
specialvar VAR_RESULT, ShouldTryRematchBattle
-# 23 "data/maps/FortreeCity_Gym/scripts.pory"
goto_if_eq VAR_RESULT, TRUE, FortreeCity_Gym_EventScript_WinonaRematch
-# 24 "data/maps/FortreeCity_Gym/scripts.pory"
goto_if_unset FLAG_RECEIVED_TM_AERIAL_ACE, FortreeCity_Gym_EventScript_GiveAerialAce2
-# 25 "data/maps/FortreeCity_Gym/scripts.pory"
msgbox FortreeCity_Gym_Text_WinonaPostBattle, MSGBOX_DEFAULT
-# 26 "data/maps/FortreeCity_Gym/scripts.pory"
release
-# 27 "data/maps/FortreeCity_Gym/scripts.pory"
end
-# 28 "data/maps/FortreeCity_Gym/scripts.pory"
-# 29 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_EventScript_WinonaDefeated::
-# 30 "data/maps/FortreeCity_Gym/scripts.pory"
message FortreeCity_Gym_Text_ReceivedFeatherBadge
-# 31 "data/maps/FortreeCity_Gym/scripts.pory"
waitmessage
-# 32 "data/maps/FortreeCity_Gym/scripts.pory"
call Common_EventScript_PlayGymBadgeFanfare
-# 33 "data/maps/FortreeCity_Gym/scripts.pory"
msgbox FortreeCity_Gym_Text_ExplainFeatherBadgeTakeThis, MSGBOX_DEFAULT
-# 34 "data/maps/FortreeCity_Gym/scripts.pory"
setflag FLAG_DEFEATED_FORTREE_GYM
-# 35 "data/maps/FortreeCity_Gym/scripts.pory"
setflag FLAG_BADGE06_GET
-# 36 "data/maps/FortreeCity_Gym/scripts.pory"
setvar VAR_0x8008, 6
-# 37 "data/maps/FortreeCity_Gym/scripts.pory"
call Common_EventScript_SetGymTrainers
-# 38 "data/maps/FortreeCity_Gym/scripts.pory"
call FortreeCity_Gym_EventScript_GiveAerialAce
-# 39 "data/maps/FortreeCity_Gym/scripts.pory"
closemessage
-# 40 "data/maps/FortreeCity_Gym/scripts.pory"
delay 30
-# 41 "data/maps/FortreeCity_Gym/scripts.pory"
playfanfare MUS_REGISTER_MATCH_CALL
-# 42 "data/maps/FortreeCity_Gym/scripts.pory"
msgbox FortreeCity_Gym_Text_RegisteredWinona, MSGBOX_DEFAULT
-# 43 "data/maps/FortreeCity_Gym/scripts.pory"
waitfanfare
-# 44 "data/maps/FortreeCity_Gym/scripts.pory"
closemessage
-# 45 "data/maps/FortreeCity_Gym/scripts.pory"
delay 30
-# 46 "data/maps/FortreeCity_Gym/scripts.pory"
setflag FLAG_ENABLE_WINONA_MATCH_CALL
-# 47 "data/maps/FortreeCity_Gym/scripts.pory"
setvar VAR_SCOTT_FORTREE_CALL_STEP_COUNTER, 0
-# 48 "data/maps/FortreeCity_Gym/scripts.pory"
setflag FLAG_SCOTT_CALL_FORTREE_GYM
-# 49 "data/maps/FortreeCity_Gym/scripts.pory"
release
-# 50 "data/maps/FortreeCity_Gym/scripts.pory"
end
-# 51 "data/maps/FortreeCity_Gym/scripts.pory"
-# 52 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_EventScript_GiveAerialAce2::
-# 53 "data/maps/FortreeCity_Gym/scripts.pory"
giveitem ITEM_TM_AERIAL_ACE
-# 54 "data/maps/FortreeCity_Gym/scripts.pory"
goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull
-# 55 "data/maps/FortreeCity_Gym/scripts.pory"
msgbox FortreeCity_Gym_Text_ExplainAerialAce, MSGBOX_DEFAULT
-# 56 "data/maps/FortreeCity_Gym/scripts.pory"
setflag FLAG_RECEIVED_TM_AERIAL_ACE
-# 57 "data/maps/FortreeCity_Gym/scripts.pory"
release
-# 58 "data/maps/FortreeCity_Gym/scripts.pory"
end
-# 59 "data/maps/FortreeCity_Gym/scripts.pory"
-# 60 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_EventScript_GiveAerialAce::
-# 61 "data/maps/FortreeCity_Gym/scripts.pory"
giveitem ITEM_TM_AERIAL_ACE
-# 62 "data/maps/FortreeCity_Gym/scripts.pory"
goto_if_eq VAR_RESULT, FALSE, Common_EventScript_BagIsFull
-# 63 "data/maps/FortreeCity_Gym/scripts.pory"
msgbox FortreeCity_Gym_Text_ExplainAerialAce, MSGBOX_DEFAULT
-# 64 "data/maps/FortreeCity_Gym/scripts.pory"
setflag FLAG_RECEIVED_TM_AERIAL_ACE
-# 65 "data/maps/FortreeCity_Gym/scripts.pory"
return
-# 66 "data/maps/FortreeCity_Gym/scripts.pory"
-# 67 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_EventScript_WinonaRematch::
-# 68 "data/maps/FortreeCity_Gym/scripts.pory"
trainerbattle_rematch_double TRAINER_WINONA_1, FortreeCity_Gym_Text_WinonaPreRematch, FortreeCity_Gym_Text_WinonaRematchDefeat, FortreeCity_Gym_Text_WinonaRematchNeedTwoMons
-# 69 "data/maps/FortreeCity_Gym/scripts.pory"
msgbox FortreeCity_Gym_Text_WinonaPostRematch, MSGBOX_AUTOCLOSE
-# 70 "data/maps/FortreeCity_Gym/scripts.pory"
end
-# 71 "data/maps/FortreeCity_Gym/scripts.pory"
-# 72 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_EventScript_Jared::
-# 73 "data/maps/FortreeCity_Gym/scripts.pory"
trainerbattle_single TRAINER_JARED, FortreeCity_Gym_Text_JaredIntro, FortreeCity_Gym_Text_JaredDefeat
-# 74 "data/maps/FortreeCity_Gym/scripts.pory"
msgbox FortreeCity_Gym_Text_JaredPostBattle, MSGBOX_AUTOCLOSE
-# 75 "data/maps/FortreeCity_Gym/scripts.pory"
end
-# 76 "data/maps/FortreeCity_Gym/scripts.pory"
-# 77 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_EventScript_Edwardo::
-# 78 "data/maps/FortreeCity_Gym/scripts.pory"
trainerbattle_single TRAINER_EDWARDO, FortreeCity_Gym_Text_EdwardoIntro, FortreeCity_Gym_Text_EdwardoDefeat
-# 79 "data/maps/FortreeCity_Gym/scripts.pory"
msgbox FortreeCity_Gym_Text_EdwardoPostBattle, MSGBOX_AUTOCLOSE
-# 80 "data/maps/FortreeCity_Gym/scripts.pory"
end
-# 81 "data/maps/FortreeCity_Gym/scripts.pory"
-# 82 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_EventScript_Flint::
-# 83 "data/maps/FortreeCity_Gym/scripts.pory"
trainerbattle_single TRAINER_FLINT, FortreeCity_Gym_Text_FlintIntro, FortreeCity_Gym_Text_FlintDefeat
-# 84 "data/maps/FortreeCity_Gym/scripts.pory"
msgbox FortreeCity_Gym_Text_FlintPostBattle, MSGBOX_AUTOCLOSE
-# 85 "data/maps/FortreeCity_Gym/scripts.pory"
end
-# 86 "data/maps/FortreeCity_Gym/scripts.pory"
-# 87 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_EventScript_Ashley::
-# 88 "data/maps/FortreeCity_Gym/scripts.pory"
trainerbattle_single TRAINER_ASHLEY, FortreeCity_Gym_Text_AshleyIntro, FortreeCity_Gym_Text_AshleyDefeat
-# 89 "data/maps/FortreeCity_Gym/scripts.pory"
msgbox FortreeCity_Gym_Text_AshleyPostBattle, MSGBOX_AUTOCLOSE
-# 90 "data/maps/FortreeCity_Gym/scripts.pory"
end
-# 91 "data/maps/FortreeCity_Gym/scripts.pory"
-# 92 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_EventScript_Humberto::
-# 93 "data/maps/FortreeCity_Gym/scripts.pory"
trainerbattle_single TRAINER_HUMBERTO, FortreeCity_Gym_Text_HumbertoIntro, FortreeCity_Gym_Text_HumbertoDefeat
-# 94 "data/maps/FortreeCity_Gym/scripts.pory"
msgbox FortreeCity_Gym_Text_HumbertoPostBattle, MSGBOX_AUTOCLOSE
-# 95 "data/maps/FortreeCity_Gym/scripts.pory"
end
-# 96 "data/maps/FortreeCity_Gym/scripts.pory"
-# 97 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_EventScript_Darius::
-# 98 "data/maps/FortreeCity_Gym/scripts.pory"
trainerbattle_single TRAINER_DARIUS, FortreeCity_Gym_Text_DariusIntro, FortreeCity_Gym_Text_DariusDefeat
-# 99 "data/maps/FortreeCity_Gym/scripts.pory"
msgbox FortreeCity_Gym_Text_DariusPostBattle, MSGBOX_AUTOCLOSE
-# 100 "data/maps/FortreeCity_Gym/scripts.pory"
end
-# 101 "data/maps/FortreeCity_Gym/scripts.pory"
-# 102 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_EventScript_GymGuide::
-# 103 "data/maps/FortreeCity_Gym/scripts.pory"
lock
-# 104 "data/maps/FortreeCity_Gym/scripts.pory"
faceplayer
-# 105 "data/maps/FortreeCity_Gym/scripts.pory"
goto_if_set FLAG_DEFEATED_FORTREE_GYM, FortreeCity_Gym_EventScript_GymGuidePostVictory
-# 106 "data/maps/FortreeCity_Gym/scripts.pory"
msgbox FortreeCity_Gym_Text_GymGuideAdvice, MSGBOX_DEFAULT
-# 107 "data/maps/FortreeCity_Gym/scripts.pory"
release
-# 108 "data/maps/FortreeCity_Gym/scripts.pory"
end
-# 109 "data/maps/FortreeCity_Gym/scripts.pory"
-# 110 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_EventScript_GymGuidePostVictory::
-# 111 "data/maps/FortreeCity_Gym/scripts.pory"
msgbox FortreeCity_Gym_Text_GymGuidePostVictory, MSGBOX_DEFAULT
-# 112 "data/maps/FortreeCity_Gym/scripts.pory"
release
-# 113 "data/maps/FortreeCity_Gym/scripts.pory"
end
-# 114 "data/maps/FortreeCity_Gym/scripts.pory"
-# 115 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_EventScript_LeftGymStatue::
-# 116 "data/maps/FortreeCity_Gym/scripts.pory"
lockall
-# 117 "data/maps/FortreeCity_Gym/scripts.pory"
goto_if_set FLAG_BADGE06_GET, FortreeCity_Gym_EventScript_GymStatueCertified
-# 118 "data/maps/FortreeCity_Gym/scripts.pory"
goto FortreeCity_Gym_EventScript_GymStatue
-# 119 "data/maps/FortreeCity_Gym/scripts.pory"
end
-# 120 "data/maps/FortreeCity_Gym/scripts.pory"
-# 121 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_EventScript_RightGymStatue::
-# 122 "data/maps/FortreeCity_Gym/scripts.pory"
lockall
-# 123 "data/maps/FortreeCity_Gym/scripts.pory"
goto_if_set FLAG_BADGE06_GET, FortreeCity_Gym_EventScript_GymStatueCertified
-# 124 "data/maps/FortreeCity_Gym/scripts.pory"
goto FortreeCity_Gym_EventScript_GymStatue
-# 125 "data/maps/FortreeCity_Gym/scripts.pory"
end
-# 126 "data/maps/FortreeCity_Gym/scripts.pory"
-# 127 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_EventScript_GymStatueCertified::
-# 128 "data/maps/FortreeCity_Gym/scripts.pory"
msgbox FortreeCity_Gym_Text_GymStatueCertified, MSGBOX_DEFAULT
-# 129 "data/maps/FortreeCity_Gym/scripts.pory"
releaseall
-# 130 "data/maps/FortreeCity_Gym/scripts.pory"
end
-# 131 "data/maps/FortreeCity_Gym/scripts.pory"
-# 132 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_EventScript_GymStatue::
-# 133 "data/maps/FortreeCity_Gym/scripts.pory"
msgbox FortreeCity_Gym_Text_GymStatue, MSGBOX_DEFAULT
-# 134 "data/maps/FortreeCity_Gym/scripts.pory"
releaseall
-# 135 "data/maps/FortreeCity_Gym/scripts.pory"
end
-# 136 "data/maps/FortreeCity_Gym/scripts.pory"
-# 137 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_Text_GymGuideAdvice:
-# 138 "data/maps/FortreeCity_Gym/scripts.pory"
.string "Yo, how's it going, CHAMPION-\n"
-# 139 "data/maps/FortreeCity_Gym/scripts.pory"
.string "bound {PLAYER}?\p"
-# 140 "data/maps/FortreeCity_Gym/scripts.pory"
.string "FORTREE GYM LEADER WINONA is\n"
-# 141 "data/maps/FortreeCity_Gym/scripts.pory"
.string "a master of FLYING-type POKéMON.\p"
-# 142 "data/maps/FortreeCity_Gym/scripts.pory"
.string "She's waiting at the back of this GYM,\n"
-# 143 "data/maps/FortreeCity_Gym/scripts.pory"
.string "behind the rotating doors.\p"
-# 144 "data/maps/FortreeCity_Gym/scripts.pory"
.string "She's waiting for new challengers\n"
-# 145 "data/maps/FortreeCity_Gym/scripts.pory"
.string "who are trying to take wing!\p"
-# 146 "data/maps/FortreeCity_Gym/scripts.pory"
.string "Okay, go for it!$"
-# 147 "data/maps/FortreeCity_Gym/scripts.pory"
-# 148 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_Text_GymGuidePostVictory:
-# 149 "data/maps/FortreeCity_Gym/scripts.pory"
.string "You did it!\n"
-# 150 "data/maps/FortreeCity_Gym/scripts.pory"
.string "You've achieved liftoff!$"
-# 151 "data/maps/FortreeCity_Gym/scripts.pory"
-# 152 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_Text_JaredIntro:
-# 153 "data/maps/FortreeCity_Gym/scripts.pory"
.string "Behold the elegant battle style of\n"
-# 154 "data/maps/FortreeCity_Gym/scripts.pory"
.string "BIRD POKéMON!$"
-# 155 "data/maps/FortreeCity_Gym/scripts.pory"
-# 156 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_Text_JaredDefeat:
-# 157 "data/maps/FortreeCity_Gym/scripts.pory"
.string "You…\n"
-# 158 "data/maps/FortreeCity_Gym/scripts.pory"
.string "You're strong…$"
-# 159 "data/maps/FortreeCity_Gym/scripts.pory"
-# 160 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_Text_JaredPostBattle:
-# 161 "data/maps/FortreeCity_Gym/scripts.pory"
.string "A TRAINER has to be smart to keep\n"
-# 162 "data/maps/FortreeCity_Gym/scripts.pory"
.string "up with unexpected turns of events.\p"
-# 163 "data/maps/FortreeCity_Gym/scripts.pory"
.string "Do you have the smarts to get to\n"
-# 164 "data/maps/FortreeCity_Gym/scripts.pory"
.string "our LEADER?$"
-# 165 "data/maps/FortreeCity_Gym/scripts.pory"
-# 166 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_Text_EdwardoIntro:
-# 167 "data/maps/FortreeCity_Gym/scripts.pory"
.string "The lovers of BIRD POKéMON aspire\n"
-# 168 "data/maps/FortreeCity_Gym/scripts.pory"
.string "to join this GYM.\p"
-# 169 "data/maps/FortreeCity_Gym/scripts.pory"
.string "As a member of the FORTREE GYM,\n"
-# 170 "data/maps/FortreeCity_Gym/scripts.pory"
.string "I'm not allowed to lose!$"
-# 171 "data/maps/FortreeCity_Gym/scripts.pory"
-# 172 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_Text_EdwardoDefeat:
-# 173 "data/maps/FortreeCity_Gym/scripts.pory"
.string "It was too much of a load for me\n"
-# 174 "data/maps/FortreeCity_Gym/scripts.pory"
.string "to bear…$"
-# 175 "data/maps/FortreeCity_Gym/scripts.pory"
-# 176 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_Text_EdwardoPostBattle:
-# 177 "data/maps/FortreeCity_Gym/scripts.pory"
.string "The world is huge, and there are\n"
-# 178 "data/maps/FortreeCity_Gym/scripts.pory"
.string "countless tough TRAINERS.\p"
-# 179 "data/maps/FortreeCity_Gym/scripts.pory"
.string "I'm going to keep training and make\n"
-# 180 "data/maps/FortreeCity_Gym/scripts.pory"
.string "myself even stronger.$"
-# 181 "data/maps/FortreeCity_Gym/scripts.pory"
-# 182 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_Text_FlintIntro:
-# 183 "data/maps/FortreeCity_Gym/scripts.pory"
.string "There's no need for WINONA, our GYM\n"
-# 184 "data/maps/FortreeCity_Gym/scripts.pory"
.string "LEADER, to deal with you!\p"
-# 185 "data/maps/FortreeCity_Gym/scripts.pory"
.string "I'm plenty good enough for you!$"
-# 186 "data/maps/FortreeCity_Gym/scripts.pory"
-# 187 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_Text_FlintDefeat:
-# 188 "data/maps/FortreeCity_Gym/scripts.pory"
.string "WINONA, I…\n"
-# 189 "data/maps/FortreeCity_Gym/scripts.pory"
.string "I lost!$"
-# 190 "data/maps/FortreeCity_Gym/scripts.pory"
-# 191 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_Text_FlintPostBattle:
-# 192 "data/maps/FortreeCity_Gym/scripts.pory"
.string "WINONA is cute and she's strong.\n"
-# 193 "data/maps/FortreeCity_Gym/scripts.pory"
.string "She's the ultimate LEADER!\p"
-# 194 "data/maps/FortreeCity_Gym/scripts.pory"
.string "Blush…$"
-# 195 "data/maps/FortreeCity_Gym/scripts.pory"
-# 196 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_Text_AshleyIntro:
-# 197 "data/maps/FortreeCity_Gym/scripts.pory"
.string "WINONA taught me personally!\n"
-# 198 "data/maps/FortreeCity_Gym/scripts.pory"
.string "You can't beat me easily!$"
-# 199 "data/maps/FortreeCity_Gym/scripts.pory"
-# 200 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_Text_AshleyDefeat:
-# 201 "data/maps/FortreeCity_Gym/scripts.pory"
.string "I was beaten…$"
-# 202 "data/maps/FortreeCity_Gym/scripts.pory"
-# 203 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_Text_AshleyPostBattle:
-# 204 "data/maps/FortreeCity_Gym/scripts.pory"
.string "Thanks to WINONA, the people of\n"
-# 205 "data/maps/FortreeCity_Gym/scripts.pory"
.string "FORTREE can live without fear.$"
-# 206 "data/maps/FortreeCity_Gym/scripts.pory"
-# 207 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_Text_HumbertoIntro:
-# 208 "data/maps/FortreeCity_Gym/scripts.pory"
.string "When WINONA takes to battle, her face\n"
-# 209 "data/maps/FortreeCity_Gym/scripts.pory"
.string "shines with beautiful determination…\p"
-# 210 "data/maps/FortreeCity_Gym/scripts.pory"
.string "I'm not letting you witness that\n"
-# 211 "data/maps/FortreeCity_Gym/scripts.pory"
.string "lovely sight!$"
-# 212 "data/maps/FortreeCity_Gym/scripts.pory"
-# 213 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_Text_HumbertoDefeat:
-# 214 "data/maps/FortreeCity_Gym/scripts.pory"
.string "Urk!\n"
-# 215 "data/maps/FortreeCity_Gym/scripts.pory"
.string "I couldn't stop you.$"
-# 216 "data/maps/FortreeCity_Gym/scripts.pory"
-# 217 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_Text_HumbertoPostBattle:
-# 218 "data/maps/FortreeCity_Gym/scripts.pory"
.string "You'd better watch it!\n"
-# 219 "data/maps/FortreeCity_Gym/scripts.pory"
.string "Don't get distracted staring at WINONA\l"
-# 220 "data/maps/FortreeCity_Gym/scripts.pory"
.string "or you'll go crashing down in a heap!$"
-# 221 "data/maps/FortreeCity_Gym/scripts.pory"
-# 222 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_Text_DariusIntro:
-# 223 "data/maps/FortreeCity_Gym/scripts.pory"
.string "You'd better know that there are all\n"
-# 224 "data/maps/FortreeCity_Gym/scripts.pory"
.string "sorts of FLYING-type POKéMON.\p"
-# 225 "data/maps/FortreeCity_Gym/scripts.pory"
.string "You do know that, right?$"
-# 226 "data/maps/FortreeCity_Gym/scripts.pory"
-# 227 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_Text_DariusDefeat:
-# 228 "data/maps/FortreeCity_Gym/scripts.pory"
.string "You seem to know your stuff!$"
-# 229 "data/maps/FortreeCity_Gym/scripts.pory"
-# 230 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_Text_DariusPostBattle:
-# 231 "data/maps/FortreeCity_Gym/scripts.pory"
.string "Sure, you beat me all right.\n"
-# 232 "data/maps/FortreeCity_Gym/scripts.pory"
.string "But you'd better watch it! Our LEADER\l"
-# 233 "data/maps/FortreeCity_Gym/scripts.pory"
.string "WINONA's POKéMON are all business.$"
-# 234 "data/maps/FortreeCity_Gym/scripts.pory"
-# 235 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_Text_WinonaIntro:
-# 236 "data/maps/FortreeCity_Gym/scripts.pory"
.string "I am WINONA. I am the LEADER of\n"
-# 237 "data/maps/FortreeCity_Gym/scripts.pory"
.string "the FORTREE POKéMON GYM.\p"
-# 238 "data/maps/FortreeCity_Gym/scripts.pory"
.string "I have become one with BIRD POKéMON\n"
-# 239 "data/maps/FortreeCity_Gym/scripts.pory"
.string "and have soared the skies…\p"
-# 240 "data/maps/FortreeCity_Gym/scripts.pory"
.string "However grueling the battle, we have\n"
-# 241 "data/maps/FortreeCity_Gym/scripts.pory"
.string "triumphed with grace…\p"
-# 242 "data/maps/FortreeCity_Gym/scripts.pory"
.string "Witness the elegant choreography\n"
-# 243 "data/maps/FortreeCity_Gym/scripts.pory"
.string "of BIRD POKéMON and I!$"
-# 244 "data/maps/FortreeCity_Gym/scripts.pory"
-# 245 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_Text_WinonaDefeat:
-# 246 "data/maps/FortreeCity_Gym/scripts.pory"
.string "Never before have I seen a TRAINER\n"
-# 247 "data/maps/FortreeCity_Gym/scripts.pory"
.string "command POKéMON with more grace\l"
-# 248 "data/maps/FortreeCity_Gym/scripts.pory"
.string "than I…\p"
-# 249 "data/maps/FortreeCity_Gym/scripts.pory"
.string "In recognition of your prowess,\n"
-# 250 "data/maps/FortreeCity_Gym/scripts.pory"
.string "I present to you this GYM BADGE.$"
-# 251 "data/maps/FortreeCity_Gym/scripts.pory"
-# 252 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_Text_ReceivedFeatherBadge:
-# 253 "data/maps/FortreeCity_Gym/scripts.pory"
.string "{PLAYER} received the FEATHER BADGE\n"
-# 254 "data/maps/FortreeCity_Gym/scripts.pory"
.string "from WINONA.$"
-# 255 "data/maps/FortreeCity_Gym/scripts.pory"
-# 256 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_Text_ExplainFeatherBadgeTakeThis:
-# 257 "data/maps/FortreeCity_Gym/scripts.pory"
.string "With the FEATHER BADGE, all POKéMON up\n"
-# 258 "data/maps/FortreeCity_Gym/scripts.pory"
.string "to LV 70, even those received through\l"
-# 259 "data/maps/FortreeCity_Gym/scripts.pory"
.string "trades, will obey your every command.\p"
-# 260 "data/maps/FortreeCity_Gym/scripts.pory"
.string "You will also be able to use\n"
-# 261 "data/maps/FortreeCity_Gym/scripts.pory"
.string "the HM move FLY outside of battle.\p"
-# 262 "data/maps/FortreeCity_Gym/scripts.pory"
.string "And this…\n"
-# 263 "data/maps/FortreeCity_Gym/scripts.pory"
.string "This is a gift from me.$"
-# 264 "data/maps/FortreeCity_Gym/scripts.pory"
-# 265 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_Text_ExplainAerialAce:
-# 266 "data/maps/FortreeCity_Gym/scripts.pory"
.string "TM40 contains AERIAL ACE.\p"
-# 267 "data/maps/FortreeCity_Gym/scripts.pory"
.string "Its speed…\n"
-# 268 "data/maps/FortreeCity_Gym/scripts.pory"
.string "No POKéMON should be able to avoid it.\p"
-# 269 "data/maps/FortreeCity_Gym/scripts.pory"
.string "… … … … … …$"
-# 270 "data/maps/FortreeCity_Gym/scripts.pory"
-# 271 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_Text_RegisteredWinona:
-# 272 "data/maps/FortreeCity_Gym/scripts.pory"
.string "Registered GYM LEADER WINONA\n"
-# 273 "data/maps/FortreeCity_Gym/scripts.pory"
.string "in the POKéNAV.$"
-# 274 "data/maps/FortreeCity_Gym/scripts.pory"
-# 275 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_Text_WinonaPostBattle:
-# 276 "data/maps/FortreeCity_Gym/scripts.pory"
.string "Though I fell to you, I will remain\n"
-# 277 "data/maps/FortreeCity_Gym/scripts.pory"
.string "devoted to BIRD POKéMON.$"
-# 278 "data/maps/FortreeCity_Gym/scripts.pory"
-# 279 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_Text_GymStatue:
-# 280 "data/maps/FortreeCity_Gym/scripts.pory"
.string "FORTREE CITY POKéMON GYM$"
-# 281 "data/maps/FortreeCity_Gym/scripts.pory"
-# 282 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_Text_GymStatueCertified:
-# 283 "data/maps/FortreeCity_Gym/scripts.pory"
.string "FORTREE CITY POKéMON GYM\p"
-# 284 "data/maps/FortreeCity_Gym/scripts.pory"
.string "WINONA'S CERTIFIED TRAINERS:\n"
-# 285 "data/maps/FortreeCity_Gym/scripts.pory"
.string "{PLAYER}$"
-# 286 "data/maps/FortreeCity_Gym/scripts.pory"
-# 287 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_Text_WinonaPreRematch:
-# 288 "data/maps/FortreeCity_Gym/scripts.pory"
.string "WINONA: We humans can never escape\n"
-# 289 "data/maps/FortreeCity_Gym/scripts.pory"
.string "gravity's pull on the ground.\p"
-# 290 "data/maps/FortreeCity_Gym/scripts.pory"
.string "But by striving for excellence,\n"
-# 291 "data/maps/FortreeCity_Gym/scripts.pory"
.string "we have the power to soar!\p"
-# 292 "data/maps/FortreeCity_Gym/scripts.pory"
.string "You have scaled the pinnacle as\n"
-# 293 "data/maps/FortreeCity_Gym/scripts.pory"
.string "the reigning CHAMPION.\p"
-# 294 "data/maps/FortreeCity_Gym/scripts.pory"
.string "Please, allow me to see your power\n"
-# 295 "data/maps/FortreeCity_Gym/scripts.pory"
.string "at full flight!$"
-# 296 "data/maps/FortreeCity_Gym/scripts.pory"
-# 297 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_Text_WinonaRematchDefeat:
-# 298 "data/maps/FortreeCity_Gym/scripts.pory"
.string "I failed to reach your height again…$"
-# 299 "data/maps/FortreeCity_Gym/scripts.pory"
-# 300 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_Text_WinonaPostRematch:
-# 301 "data/maps/FortreeCity_Gym/scripts.pory"
.string "WINONA: Even though I have lost,\n"
-# 302 "data/maps/FortreeCity_Gym/scripts.pory"
.string "the wings of my heart remain unbroken.\p"
-# 303 "data/maps/FortreeCity_Gym/scripts.pory"
.string "I can rise and soar again and\n"
-# 304 "data/maps/FortreeCity_Gym/scripts.pory"
.string "yet again.\p"
-# 305 "data/maps/FortreeCity_Gym/scripts.pory"
.string "I am convinced of it!$"
-# 306 "data/maps/FortreeCity_Gym/scripts.pory"
-# 307 "data/maps/FortreeCity_Gym/scripts.pory"
FortreeCity_Gym_Text_WinonaRematchNeedTwoMons:
-# 308 "data/maps/FortreeCity_Gym/scripts.pory"
.string "WINONA: We humans can never escape\n"
-# 309 "data/maps/FortreeCity_Gym/scripts.pory"
.string "gravity's pull on the ground.\p"
-# 310 "data/maps/FortreeCity_Gym/scripts.pory"
.string "But by striving for excellence,\n"
-# 311 "data/maps/FortreeCity_Gym/scripts.pory"
.string "we have the power to soar!\p"
-# 312 "data/maps/FortreeCity_Gym/scripts.pory"
.string "You have scaled the pinnacle as\n"
-# 313 "data/maps/FortreeCity_Gym/scripts.pory"
.string "the reigning CHAMPION.\p"
-# 314 "data/maps/FortreeCity_Gym/scripts.pory"
.string "Please, allow me to see your power\n"
-# 315 "data/maps/FortreeCity_Gym/scripts.pory"
.string "at full flight!\p"
-# 316 "data/maps/FortreeCity_Gym/scripts.pory"
.string "Oh, no… Do you have but one\n"
-# 317 "data/maps/FortreeCity_Gym/scripts.pory"
.string "POKéMON with you?\p"
-# 318 "data/maps/FortreeCity_Gym/scripts.pory"
.string "Please return with two POKéMON\n"
-# 319 "data/maps/FortreeCity_Gym/scripts.pory"
.string "at the very least.$"
diff --git a/data/maps/MossdeepCity_Gym/scripts.inc b/data/maps/MossdeepCity_Gym/scripts.inc
index 7fb75df5aa84..a7b6aaa2bd44 100644
--- a/data/maps/MossdeepCity_Gym/scripts.inc
+++ b/data/maps/MossdeepCity_Gym/scripts.inc
@@ -1,1298 +1,653 @@
-# 1 "data/maps/MossdeepCity_Gym/scripts.pory"
-
-# 2 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_MapScripts::
-# 3 "data/maps/MossdeepCity_Gym/scripts.pory"
+ map_script MAP_SCRIPT_ON_TRANSITION, MossdeepCity_Gym_OnTransition
map_script MAP_SCRIPT_ON_LOAD, MossdeepCity_Gym_OnLoad
-# 4 "data/maps/MossdeepCity_Gym/scripts.pory"
.byte 0
-# 5 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 6 "data/maps/MossdeepCity_Gym/scripts.pory"
@ NOTE: Mossdeep Gym was redesigned between R/S and E. Leftover (and now functionally unused) scripts are commented below
-# 7 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 8 "data/maps/MossdeepCity_Gym/scripts.pory"
+MossdeepCity_Gym_OnTransition:
+ setflag FLAG_TEMP_HIDE_FOLLOWER @ Hide follower since it can collide with moving statues
+ end
+
@ All the below checks are leftover from RS. FLAG_MOSSDEEP_GYM_SWITCH_X is never set
-# 9 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_OnLoad:
-# 10 "data/maps/MossdeepCity_Gym/scripts.pory"
goto_if_set FLAG_MOSSDEEP_GYM_SWITCH_1, MossdeepCity_Gym_EventScript_SetSwitch1Metatiles
-# 11 "data/maps/MossdeepCity_Gym/scripts.pory"
goto MossdeepCity_Gym_EventScript_CheckSwitch2
-# 12 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 13 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 14 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_CheckSwitch2::
-# 15 "data/maps/MossdeepCity_Gym/scripts.pory"
goto_if_set FLAG_MOSSDEEP_GYM_SWITCH_2, MossdeepCity_Gym_EventScript_SetSwitch2Metatiles
-# 16 "data/maps/MossdeepCity_Gym/scripts.pory"
goto MossdeepCity_Gym_EventScript_CheckSwitch3
-# 17 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 18 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 19 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_CheckSwitch3::
-# 20 "data/maps/MossdeepCity_Gym/scripts.pory"
goto_if_set FLAG_MOSSDEEP_GYM_SWITCH_3, MossdeepCity_Gym_EventScript_SetSwitch3Metatiles
-# 21 "data/maps/MossdeepCity_Gym/scripts.pory"
goto MossdeepCity_Gym_EventScript_CheckSwitch4
-# 22 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 23 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 24 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_CheckSwitch4::
-# 25 "data/maps/MossdeepCity_Gym/scripts.pory"
goto_if_set FLAG_MOSSDEEP_GYM_SWITCH_4, MossdeepCity_Gym_EventScript_SetSwitch4Metatiles
-# 26 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 27 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 28 "data/maps/MossdeepCity_Gym/scripts.pory"
@ All the below set metatile scripts are leftover from RS and are functionally unused
-# 29 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_SetSwitch1Metatiles::
-# 30 "data/maps/MossdeepCity_Gym/scripts.pory"
setmetatile 5, 5, METATILE_RSMossdeepGym_RedArrow_Right, FALSE
-# 31 "data/maps/MossdeepCity_Gym/scripts.pory"
setmetatile 2, 7, METATILE_RSMossdeepGym_Switch_Down, TRUE
-# 32 "data/maps/MossdeepCity_Gym/scripts.pory"
goto MossdeepCity_Gym_EventScript_CheckSwitch2
-# 33 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 34 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 35 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_SetSwitch2Metatiles::
-# 36 "data/maps/MossdeepCity_Gym/scripts.pory"
setmetatile 8, 14, METATILE_RSMossdeepGym_RedArrow_Right, FALSE
-# 37 "data/maps/MossdeepCity_Gym/scripts.pory"
setmetatile 8, 10, METATILE_RSMossdeepGym_Switch_Down, TRUE
-# 38 "data/maps/MossdeepCity_Gym/scripts.pory"
goto MossdeepCity_Gym_EventScript_CheckSwitch3
-# 39 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 40 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 41 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_SetSwitch3Metatiles::
-# 42 "data/maps/MossdeepCity_Gym/scripts.pory"
setmetatile 15, 17, METATILE_RSMossdeepGym_RedArrow_Left, FALSE
-# 43 "data/maps/MossdeepCity_Gym/scripts.pory"
setmetatile 17, 15, METATILE_RSMossdeepGym_Switch_Down, TRUE
-# 44 "data/maps/MossdeepCity_Gym/scripts.pory"
goto MossdeepCity_Gym_EventScript_CheckSwitch4
-# 45 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 46 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 47 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_SetSwitch4Metatiles::
-# 48 "data/maps/MossdeepCity_Gym/scripts.pory"
setmetatile 1, 23, METATILE_RSMossdeepGym_RedArrow_Up, FALSE
-# 49 "data/maps/MossdeepCity_Gym/scripts.pory"
setmetatile 5, 24, METATILE_RSMossdeepGym_Switch_Down, TRUE
-# 50 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 51 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 52 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_TateAndLiza::
-# 53 "data/maps/MossdeepCity_Gym/scripts.pory"
trainerbattle_double TRAINER_TATE_AND_LIZA_1, MossdeepCity_Gym_Text_TateAndLizaIntro, MossdeepCity_Gym_Text_TateAndLizaDefeat, MossdeepCity_Gym_Text_TateAndLizaNeedTwoMons, MossdeepCity_Gym_EventScript_TateAndLizaDefeated, NO_MUSIC
-# 54 "data/maps/MossdeepCity_Gym/scripts.pory"
specialvar VAR_RESULT, ShouldTryRematchBattle
-# 55 "data/maps/MossdeepCity_Gym/scripts.pory"
goto_if_eq VAR_RESULT, TRUE, MossdeepCity_Gym_EventScript_TateAndLizaRematch
-# 56 "data/maps/MossdeepCity_Gym/scripts.pory"
goto_if_unset FLAG_RECEIVED_TM_CALM_MIND, MossdeepCity_Gym_EventScript_GiveCalmMind2
-# 57 "data/maps/MossdeepCity_Gym/scripts.pory"
msgbox MossdeepCity_Gym_Text_TateAndLizaPostBattle, MSGBOX_DEFAULT
-# 58 "data/maps/MossdeepCity_Gym/scripts.pory"
release
-# 59 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 60 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 61 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_TateAndLizaDefeated::
-# 62 "data/maps/MossdeepCity_Gym/scripts.pory"
message MossdeepCity_Gym_Text_ReceivedMindBadge
-# 63 "data/maps/MossdeepCity_Gym/scripts.pory"
waitmessage
-# 64 "data/maps/MossdeepCity_Gym/scripts.pory"
call Common_EventScript_PlayGymBadgeFanfare
-# 65 "data/maps/MossdeepCity_Gym/scripts.pory"
msgbox MossdeepCity_Gym_Text_ExplainMindBadgeTakeThis, MSGBOX_DEFAULT
-# 66 "data/maps/MossdeepCity_Gym/scripts.pory"
setflag FLAG_DEFEATED_MOSSDEEP_GYM
-# 67 "data/maps/MossdeepCity_Gym/scripts.pory"
setflag FLAG_BADGE07_GET
-# 68 "data/maps/MossdeepCity_Gym/scripts.pory"
setflag FLAG_HIDE_AQUA_HIDEOUT_GRUNTS
-# 69 "data/maps/MossdeepCity_Gym/scripts.pory"
clearflag FLAG_HIDE_SLATEPORT_CITY_STERNS_SHIPYARD_MR_BRINEY
-# 70 "data/maps/MossdeepCity_Gym/scripts.pory"
clearflag FLAG_UNKNOWN_0x393
-# 71 "data/maps/MossdeepCity_Gym/scripts.pory"
setvar VAR_0x8008, 7
-# 72 "data/maps/MossdeepCity_Gym/scripts.pory"
call Common_EventScript_SetGymTrainers
-# 73 "data/maps/MossdeepCity_Gym/scripts.pory"
clearflag FLAG_HIDE_SLATEPORT_CITY_HARBOR_PATRONS
-# 74 "data/maps/MossdeepCity_Gym/scripts.pory"
clearflag FLAG_HIDE_MOSSDEEP_CITY_TEAM_MAGMA
-# 75 "data/maps/MossdeepCity_Gym/scripts.pory"
clearflag FLAG_HIDE_MOSSDEEP_CITY_SPACE_CENTER_1F_TEAM_MAGMA
-# 76 "data/maps/MossdeepCity_Gym/scripts.pory"
clearflag FLAG_HIDE_MOSSDEEP_CITY_SPACE_CENTER_2F_TEAM_MAGMA
-# 77 "data/maps/MossdeepCity_Gym/scripts.pory"
clearflag FLAG_HIDE_MOSSDEEP_CITY_SPACE_CENTER_2F_STEVEN
-# 78 "data/maps/MossdeepCity_Gym/scripts.pory"
setvar VAR_MOSSDEEP_CITY_STATE, 1
-# 79 "data/maps/MossdeepCity_Gym/scripts.pory"
setflag FLAG_HIDE_MOSSDEEP_CITY_SPACE_CENTER_1F_STEVEN
-# 80 "data/maps/MossdeepCity_Gym/scripts.pory"
setvar VAR_MOSSDEEP_SPACE_CENTER_STATE, 1
-# 81 "data/maps/MossdeepCity_Gym/scripts.pory"
call MossdeepCity_Gym_EventScript_GiveCalmMind
-# 82 "data/maps/MossdeepCity_Gym/scripts.pory"
closemessage
-# 83 "data/maps/MossdeepCity_Gym/scripts.pory"
delay 30
-# 84 "data/maps/MossdeepCity_Gym/scripts.pory"
playfanfare MUS_REGISTER_MATCH_CALL
-# 85 "data/maps/MossdeepCity_Gym/scripts.pory"
msgbox MossdeepCity_Gym_Text_RegisteredTateAndLiza, MSGBOX_DEFAULT
-# 86 "data/maps/MossdeepCity_Gym/scripts.pory"
waitfanfare
-# 87 "data/maps/MossdeepCity_Gym/scripts.pory"
closemessage
-# 88 "data/maps/MossdeepCity_Gym/scripts.pory"
delay 30
-# 89 "data/maps/MossdeepCity_Gym/scripts.pory"
setflag FLAG_ENABLE_TATE_AND_LIZA_MATCH_CALL
-# 90 "data/maps/MossdeepCity_Gym/scripts.pory"
release
-# 91 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 92 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 93 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_GiveCalmMind2::
-# 94 "data/maps/MossdeepCity_Gym/scripts.pory"
giveitem ITEM_TM_CALM_MIND
-# 95 "data/maps/MossdeepCity_Gym/scripts.pory"
goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull
-# 96 "data/maps/MossdeepCity_Gym/scripts.pory"
msgbox MossdeepCity_Gym_Text_ExplainCalmMind, MSGBOX_DEFAULT
-# 97 "data/maps/MossdeepCity_Gym/scripts.pory"
setflag FLAG_RECEIVED_TM_CALM_MIND
-# 98 "data/maps/MossdeepCity_Gym/scripts.pory"
release
-# 99 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 100 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 101 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_GiveCalmMind::
-# 102 "data/maps/MossdeepCity_Gym/scripts.pory"
giveitem ITEM_TM_CALM_MIND
-# 103 "data/maps/MossdeepCity_Gym/scripts.pory"
goto_if_eq VAR_RESULT, FALSE, Common_EventScript_BagIsFull
-# 104 "data/maps/MossdeepCity_Gym/scripts.pory"
msgbox MossdeepCity_Gym_Text_ExplainCalmMind, MSGBOX_DEFAULT
-# 105 "data/maps/MossdeepCity_Gym/scripts.pory"
setflag FLAG_RECEIVED_TM_CALM_MIND
-# 106 "data/maps/MossdeepCity_Gym/scripts.pory"
return
-# 107 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 108 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_TateAndLizaRematch::
-# 109 "data/maps/MossdeepCity_Gym/scripts.pory"
trainerbattle_rematch_double TRAINER_TATE_AND_LIZA_1, MossdeepCity_Gym_Text_TateAndLizaPreRematch, MossdeepCity_Gym_Text_TateAndLizaRematchDefeat, MossdeepCity_Gym_Text_TateAndLizaRematchNeedTwoMons
-# 110 "data/maps/MossdeepCity_Gym/scripts.pory"
msgbox MossdeepCity_Gym_Text_TateAndLizaPostRematch, MSGBOX_AUTOCLOSE
-# 111 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 112 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 113 "data/maps/MossdeepCity_Gym/scripts.pory"
@ All the below switch scripts are leftover from RS and are functionally unused
-# 114 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_Switch1::
-# 115 "data/maps/MossdeepCity_Gym/scripts.pory"
lockall
-# 116 "data/maps/MossdeepCity_Gym/scripts.pory"
goto_if_set FLAG_MOSSDEEP_GYM_SWITCH_1, MossdeepCity_Gym_EventScript_ClearSwitch1
-# 117 "data/maps/MossdeepCity_Gym/scripts.pory"
setflag FLAG_MOSSDEEP_GYM_SWITCH_1
-# 118 "data/maps/MossdeepCity_Gym/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse
-# 119 "data/maps/MossdeepCity_Gym/scripts.pory"
waitmovement 0
-# 120 "data/maps/MossdeepCity_Gym/scripts.pory"
setmetatile 5, 5, METATILE_RSMossdeepGym_RedArrow_Right, FALSE
-# 121 "data/maps/MossdeepCity_Gym/scripts.pory"
setmetatile 2, 7, METATILE_RSMossdeepGym_Switch_Down, TRUE
-# 122 "data/maps/MossdeepCity_Gym/scripts.pory"
goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed
-# 123 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 124 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 125 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed::
-# 126 "data/maps/MossdeepCity_Gym/scripts.pory"
special DrawWholeMapView
-# 127 "data/maps/MossdeepCity_Gym/scripts.pory"
playse SE_CLICK
-# 128 "data/maps/MossdeepCity_Gym/scripts.pory"
releaseall
-# 129 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 130 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 131 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_ClearSwitch1::
-# 132 "data/maps/MossdeepCity_Gym/scripts.pory"
clearflag FLAG_MOSSDEEP_GYM_SWITCH_1
-# 133 "data/maps/MossdeepCity_Gym/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse
-# 134 "data/maps/MossdeepCity_Gym/scripts.pory"
waitmovement 0
-# 135 "data/maps/MossdeepCity_Gym/scripts.pory"
setmetatile 5, 5, METATILE_RSMossdeepGym_RedArrow_Left, FALSE
-# 136 "data/maps/MossdeepCity_Gym/scripts.pory"
setmetatile 2, 7, METATILE_RSMossdeepGym_Switch_Up, TRUE
-# 137 "data/maps/MossdeepCity_Gym/scripts.pory"
goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed
-# 138 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 139 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 140 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_Switch2::
-# 141 "data/maps/MossdeepCity_Gym/scripts.pory"
lockall
-# 142 "data/maps/MossdeepCity_Gym/scripts.pory"
goto_if_set FLAG_MOSSDEEP_GYM_SWITCH_2, MossdeepCity_Gym_EventScript_ClearSwitch2
-# 143 "data/maps/MossdeepCity_Gym/scripts.pory"
setflag FLAG_MOSSDEEP_GYM_SWITCH_2
-# 144 "data/maps/MossdeepCity_Gym/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse
-# 145 "data/maps/MossdeepCity_Gym/scripts.pory"
waitmovement 0
-# 146 "data/maps/MossdeepCity_Gym/scripts.pory"
setmetatile 8, 14, METATILE_RSMossdeepGym_RedArrow_Right, FALSE
-# 147 "data/maps/MossdeepCity_Gym/scripts.pory"
setmetatile 8, 10, METATILE_RSMossdeepGym_Switch_Down, TRUE
-# 148 "data/maps/MossdeepCity_Gym/scripts.pory"
goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed
-# 149 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 150 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 151 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_ClearSwitch2::
-# 152 "data/maps/MossdeepCity_Gym/scripts.pory"
clearflag FLAG_MOSSDEEP_GYM_SWITCH_2
-# 153 "data/maps/MossdeepCity_Gym/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse
-# 154 "data/maps/MossdeepCity_Gym/scripts.pory"
waitmovement 0
-# 155 "data/maps/MossdeepCity_Gym/scripts.pory"
setmetatile 8, 14, METATILE_RSMossdeepGym_RedArrow_Down, FALSE
-# 156 "data/maps/MossdeepCity_Gym/scripts.pory"
setmetatile 8, 10, METATILE_RSMossdeepGym_Switch_Up, TRUE
-# 157 "data/maps/MossdeepCity_Gym/scripts.pory"
goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed
-# 158 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 159 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 160 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_Switch3::
-# 161 "data/maps/MossdeepCity_Gym/scripts.pory"
lockall
-# 162 "data/maps/MossdeepCity_Gym/scripts.pory"
goto_if_set FLAG_MOSSDEEP_GYM_SWITCH_3, MossdeepCity_Gym_EventScript_ClearSwitch3
-# 163 "data/maps/MossdeepCity_Gym/scripts.pory"
setflag FLAG_MOSSDEEP_GYM_SWITCH_3
-# 164 "data/maps/MossdeepCity_Gym/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse
-# 165 "data/maps/MossdeepCity_Gym/scripts.pory"
waitmovement 0
-# 166 "data/maps/MossdeepCity_Gym/scripts.pory"
setmetatile 15, 17, METATILE_RSMossdeepGym_RedArrow_Left, FALSE
-# 167 "data/maps/MossdeepCity_Gym/scripts.pory"
setmetatile 17, 15, METATILE_RSMossdeepGym_Switch_Down, TRUE
-# 168 "data/maps/MossdeepCity_Gym/scripts.pory"
goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed
-# 169 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 170 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 171 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_ClearSwitch3::
-# 172 "data/maps/MossdeepCity_Gym/scripts.pory"
clearflag FLAG_MOSSDEEP_GYM_SWITCH_3
-# 173 "data/maps/MossdeepCity_Gym/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse
-# 174 "data/maps/MossdeepCity_Gym/scripts.pory"
waitmovement 0
-# 175 "data/maps/MossdeepCity_Gym/scripts.pory"
setmetatile 15, 17, METATILE_RSMossdeepGym_RedArrow_Right, FALSE
-# 176 "data/maps/MossdeepCity_Gym/scripts.pory"
setmetatile 17, 15, METATILE_RSMossdeepGym_Switch_Up, TRUE
-# 177 "data/maps/MossdeepCity_Gym/scripts.pory"
goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed
-# 178 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 179 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 180 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_Switch4::
-# 181 "data/maps/MossdeepCity_Gym/scripts.pory"
lockall
-# 182 "data/maps/MossdeepCity_Gym/scripts.pory"
goto_if_set FLAG_MOSSDEEP_GYM_SWITCH_4, MossdeepCity_Gym_EventScript_ClearSwitch4
-# 183 "data/maps/MossdeepCity_Gym/scripts.pory"
setflag FLAG_MOSSDEEP_GYM_SWITCH_4
-# 184 "data/maps/MossdeepCity_Gym/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse
-# 185 "data/maps/MossdeepCity_Gym/scripts.pory"
waitmovement 0
-# 186 "data/maps/MossdeepCity_Gym/scripts.pory"
setmetatile 1, 23, METATILE_RSMossdeepGym_RedArrow_Up, FALSE
-# 187 "data/maps/MossdeepCity_Gym/scripts.pory"
setmetatile 5, 24, METATILE_RSMossdeepGym_Switch_Down, TRUE
-# 188 "data/maps/MossdeepCity_Gym/scripts.pory"
goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed
-# 189 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 190 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 191 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_ClearSwitch4::
-# 192 "data/maps/MossdeepCity_Gym/scripts.pory"
clearflag FLAG_MOSSDEEP_GYM_SWITCH_4
-# 193 "data/maps/MossdeepCity_Gym/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, MossdeepCity_Gym_Movement_WaitAfterSwitchUse
-# 194 "data/maps/MossdeepCity_Gym/scripts.pory"
waitmovement 0
-# 195 "data/maps/MossdeepCity_Gym/scripts.pory"
setmetatile 1, 23, METATILE_RSMossdeepGym_RedArrow_Right, FALSE
-# 196 "data/maps/MossdeepCity_Gym/scripts.pory"
setmetatile 5, 24, METATILE_RSMossdeepGym_Switch_Up, TRUE
-# 197 "data/maps/MossdeepCity_Gym/scripts.pory"
goto MossdeepCity_Gym_EventScript_DrawMapAfterSwitchUsed
-# 198 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 199 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 200 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_WarpToEntrance::
-# 201 "data/maps/MossdeepCity_Gym/scripts.pory"
lockall
-# 202 "data/maps/MossdeepCity_Gym/scripts.pory"
warpmossdeepgym MAP_MOSSDEEP_CITY_GYM, 7, 30
-# 203 "data/maps/MossdeepCity_Gym/scripts.pory"
waitstate
-# 204 "data/maps/MossdeepCity_Gym/scripts.pory"
releaseall
-# 205 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 206 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 207 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_Preston::
-# 208 "data/maps/MossdeepCity_Gym/scripts.pory"
trainerbattle_single TRAINER_PRESTON, MossdeepCity_Gym_Text_PrestonIntro, MossdeepCity_Gym_Text_PrestonDefeat
-# 209 "data/maps/MossdeepCity_Gym/scripts.pory"
msgbox MossdeepCity_Gym_Text_PrestonPostBattle, MSGBOX_AUTOCLOSE
-# 210 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 211 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 212 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_Virgil::
-# 213 "data/maps/MossdeepCity_Gym/scripts.pory"
trainerbattle_single TRAINER_VIRGIL, MossdeepCity_Gym_Text_VirgilIntro, MossdeepCity_Gym_Text_VirgilDefeat
-# 214 "data/maps/MossdeepCity_Gym/scripts.pory"
msgbox MossdeepCity_Gym_Text_VirgilPostBattle, MSGBOX_AUTOCLOSE
-# 215 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 216 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 217 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_Blake::
-# 218 "data/maps/MossdeepCity_Gym/scripts.pory"
trainerbattle_single TRAINER_BLAKE, MossdeepCity_Gym_Text_BlakeIntro, MossdeepCity_Gym_Text_BlakeDefeat
-# 219 "data/maps/MossdeepCity_Gym/scripts.pory"
msgbox MossdeepCity_Gym_Text_BlakePostBattle, MSGBOX_AUTOCLOSE
-# 220 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 221 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 222 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_Hannah::
-# 223 "data/maps/MossdeepCity_Gym/scripts.pory"
trainerbattle_single TRAINER_HANNAH, MossdeepCity_Gym_Text_HannahIntro, MossdeepCity_Gym_Text_HannahDefeat
-# 224 "data/maps/MossdeepCity_Gym/scripts.pory"
msgbox MossdeepCity_Gym_Text_HannahPostBattle, MSGBOX_AUTOCLOSE
-# 225 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 226 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 227 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_Samantha::
-# 228 "data/maps/MossdeepCity_Gym/scripts.pory"
trainerbattle_single TRAINER_SAMANTHA, MossdeepCity_Gym_Text_SamanthaIntro, MossdeepCity_Gym_Text_SamanthaDefeat
-# 229 "data/maps/MossdeepCity_Gym/scripts.pory"
msgbox MossdeepCity_Gym_Text_SamanthaPostBattle, MSGBOX_AUTOCLOSE
-# 230 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 231 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 232 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_Maura::
-# 233 "data/maps/MossdeepCity_Gym/scripts.pory"
trainerbattle_single TRAINER_MAURA, MossdeepCity_Gym_Text_MauraIntro, MossdeepCity_Gym_Text_MauraDefeat
-# 234 "data/maps/MossdeepCity_Gym/scripts.pory"
msgbox MossdeepCity_Gym_Text_MauraPostBattle, MSGBOX_AUTOCLOSE
-# 235 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 236 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 237 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_Sylvia::
-# 238 "data/maps/MossdeepCity_Gym/scripts.pory"
trainerbattle_single TRAINER_SYLVIA, MossdeepCity_Gym_Text_SylviaIntro, MossdeepCity_Gym_Text_SylviaDefeat
-# 239 "data/maps/MossdeepCity_Gym/scripts.pory"
msgbox MossdeepCity_Gym_Text_SylviaPostBattle, MSGBOX_AUTOCLOSE
-# 240 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 241 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 242 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_Nate::
-# 243 "data/maps/MossdeepCity_Gym/scripts.pory"
trainerbattle_single TRAINER_NATE, MossdeepCity_Gym_Text_NateIntro, MossdeepCity_Gym_Text_NateDefeat
-# 244 "data/maps/MossdeepCity_Gym/scripts.pory"
msgbox MossdeepCity_Gym_Text_NatePostBattle, MSGBOX_AUTOCLOSE
-# 245 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 246 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 247 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_Macey::
-# 248 "data/maps/MossdeepCity_Gym/scripts.pory"
trainerbattle_single TRAINER_MACEY, MossdeepCity_Gym_Text_MaceyIntro, MossdeepCity_Gym_Text_MaceyDefeat
-# 249 "data/maps/MossdeepCity_Gym/scripts.pory"
msgbox MossdeepCity_Gym_Text_MaceyPostBattle, MSGBOX_AUTOCLOSE
-# 250 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 251 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 252 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_Clifford::
-# 253 "data/maps/MossdeepCity_Gym/scripts.pory"
trainerbattle_single TRAINER_CLIFFORD, MossdeepCity_Gym_Text_CliffordIntro, MossdeepCity_Gym_Text_CliffordDefeat
-# 254 "data/maps/MossdeepCity_Gym/scripts.pory"
msgbox MossdeepCity_Gym_Text_CliffordPostBattle, MSGBOX_AUTOCLOSE
-# 255 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 256 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 257 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_Nicholas::
-# 258 "data/maps/MossdeepCity_Gym/scripts.pory"
trainerbattle_single TRAINER_NICHOLAS, MossdeepCity_Gym_Text_NicholasIntro, MossdeepCity_Gym_Text_NicholasDefeat
-# 259 "data/maps/MossdeepCity_Gym/scripts.pory"
msgbox MossdeepCity_Gym_Text_NicholasPostBattle, MSGBOX_AUTOCLOSE
-# 260 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 261 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 262 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_Kathleen::
-# 263 "data/maps/MossdeepCity_Gym/scripts.pory"
trainerbattle_single TRAINER_KATHLEEN, MossdeepCity_Gym_Text_KathleenIntro, MossdeepCity_Gym_Text_KathleenDefeat
-# 264 "data/maps/MossdeepCity_Gym/scripts.pory"
msgbox MossdeepCity_Gym_Text_KathleenPostBattle, MSGBOX_AUTOCLOSE
-# 265 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 266 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 267 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_GymGuide::
-# 268 "data/maps/MossdeepCity_Gym/scripts.pory"
lock
-# 269 "data/maps/MossdeepCity_Gym/scripts.pory"
faceplayer
-# 270 "data/maps/MossdeepCity_Gym/scripts.pory"
goto_if_set FLAG_DEFEATED_MOSSDEEP_GYM, MossdeepCity_Gym_EventScript_GymGuidePostVictory
-# 271 "data/maps/MossdeepCity_Gym/scripts.pory"
msgbox MossdeepCity_Gym_Text_GymGuideAdvice, MSGBOX_DEFAULT
-# 272 "data/maps/MossdeepCity_Gym/scripts.pory"
release
-# 273 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 274 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 275 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_GymGuidePostVictory::
-# 276 "data/maps/MossdeepCity_Gym/scripts.pory"
msgbox MossdeepCity_Gym_Text_GymGuidePostVictory, MSGBOX_DEFAULT
-# 277 "data/maps/MossdeepCity_Gym/scripts.pory"
release
-# 278 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 279 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 280 "data/maps/MossdeepCity_Gym/scripts.pory"
@ Leftover from RS, functionally unused
-# 281 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Movement_WaitAfterSwitchUse:
-# 282 "data/maps/MossdeepCity_Gym/scripts.pory"
delay_16
-# 283 "data/maps/MossdeepCity_Gym/scripts.pory"
delay_16
-# 284 "data/maps/MossdeepCity_Gym/scripts.pory"
step_end
-# 285 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 286 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_LeftGymStatue::
-# 287 "data/maps/MossdeepCity_Gym/scripts.pory"
lockall
-# 288 "data/maps/MossdeepCity_Gym/scripts.pory"
goto_if_set FLAG_BADGE07_GET, MossdeepCity_Gym_EventScript_GymStatueCertified
-# 289 "data/maps/MossdeepCity_Gym/scripts.pory"
goto MossdeepCity_Gym_EventScript_GymStatue
-# 290 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 291 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 292 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_RightGymStatue::
-# 293 "data/maps/MossdeepCity_Gym/scripts.pory"
lockall
-# 294 "data/maps/MossdeepCity_Gym/scripts.pory"
goto_if_set FLAG_BADGE07_GET, MossdeepCity_Gym_EventScript_GymStatueCertified
-# 295 "data/maps/MossdeepCity_Gym/scripts.pory"
goto MossdeepCity_Gym_EventScript_GymStatue
-# 296 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 297 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 298 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_GymStatueCertified::
-# 299 "data/maps/MossdeepCity_Gym/scripts.pory"
msgbox MossdeepCity_Gym_Text_GymStatueCertified, MSGBOX_DEFAULT
-# 300 "data/maps/MossdeepCity_Gym/scripts.pory"
releaseall
-# 301 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 302 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 303 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_GymStatue::
-# 304 "data/maps/MossdeepCity_Gym/scripts.pory"
msgbox MossdeepCity_Gym_Text_GymStatue, MSGBOX_DEFAULT
-# 305 "data/maps/MossdeepCity_Gym/scripts.pory"
releaseall
-# 306 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 307 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 308 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_YellowFloorSwitch::
-# 309 "data/maps/MossdeepCity_Gym/scripts.pory"
playse SE_SWITCH
-# 310 "data/maps/MossdeepCity_Gym/scripts.pory"
waitse
-# 311 "data/maps/MossdeepCity_Gym/scripts.pory"
playse SE_REPEL
-# 312 "data/maps/MossdeepCity_Gym/scripts.pory"
initrotatingtilepuzzle FALSE
-# 313 "data/maps/MossdeepCity_Gym/scripts.pory"
moverotatingtileobjects 0
-# 314 "data/maps/MossdeepCity_Gym/scripts.pory"
waitmovement 0
-# 315 "data/maps/MossdeepCity_Gym/scripts.pory"
turnrotatingtileobjects
-# 316 "data/maps/MossdeepCity_Gym/scripts.pory"
waitmovement 0
-# 317 "data/maps/MossdeepCity_Gym/scripts.pory"
freerotatingtilepuzzle
-# 318 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 319 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 320 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_BlueFloorSwitch::
-# 321 "data/maps/MossdeepCity_Gym/scripts.pory"
playse SE_SWITCH
-# 322 "data/maps/MossdeepCity_Gym/scripts.pory"
waitse
-# 323 "data/maps/MossdeepCity_Gym/scripts.pory"
playse SE_REPEL
-# 324 "data/maps/MossdeepCity_Gym/scripts.pory"
initrotatingtilepuzzle FALSE
-# 325 "data/maps/MossdeepCity_Gym/scripts.pory"
moverotatingtileobjects 1
-# 326 "data/maps/MossdeepCity_Gym/scripts.pory"
waitmovement 0
-# 327 "data/maps/MossdeepCity_Gym/scripts.pory"
turnrotatingtileobjects
-# 328 "data/maps/MossdeepCity_Gym/scripts.pory"
waitmovement 0
-# 329 "data/maps/MossdeepCity_Gym/scripts.pory"
freerotatingtilepuzzle
-# 330 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 331 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 332 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_GreenFloorSwitch::
-# 333 "data/maps/MossdeepCity_Gym/scripts.pory"
playse SE_SWITCH
-# 334 "data/maps/MossdeepCity_Gym/scripts.pory"
waitse
-# 335 "data/maps/MossdeepCity_Gym/scripts.pory"
playse SE_REPEL
-# 336 "data/maps/MossdeepCity_Gym/scripts.pory"
initrotatingtilepuzzle FALSE
-# 337 "data/maps/MossdeepCity_Gym/scripts.pory"
moverotatingtileobjects 2
-# 338 "data/maps/MossdeepCity_Gym/scripts.pory"
waitmovement 0
-# 339 "data/maps/MossdeepCity_Gym/scripts.pory"
turnrotatingtileobjects
-# 340 "data/maps/MossdeepCity_Gym/scripts.pory"
waitmovement 0
-# 341 "data/maps/MossdeepCity_Gym/scripts.pory"
freerotatingtilepuzzle
-# 342 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 343 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 344 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_PurpleFloorSwitch::
-# 345 "data/maps/MossdeepCity_Gym/scripts.pory"
playse SE_SWITCH
-# 346 "data/maps/MossdeepCity_Gym/scripts.pory"
waitse
-# 347 "data/maps/MossdeepCity_Gym/scripts.pory"
playse SE_REPEL
-# 348 "data/maps/MossdeepCity_Gym/scripts.pory"
initrotatingtilepuzzle FALSE
-# 349 "data/maps/MossdeepCity_Gym/scripts.pory"
moverotatingtileobjects 3
-# 350 "data/maps/MossdeepCity_Gym/scripts.pory"
waitmovement 0
-# 351 "data/maps/MossdeepCity_Gym/scripts.pory"
turnrotatingtileobjects
-# 352 "data/maps/MossdeepCity_Gym/scripts.pory"
waitmovement 0
-# 353 "data/maps/MossdeepCity_Gym/scripts.pory"
freerotatingtilepuzzle
-# 354 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 355 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 356 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_EventScript_RedFloorSwitch::
-# 357 "data/maps/MossdeepCity_Gym/scripts.pory"
playse SE_SWITCH
-# 358 "data/maps/MossdeepCity_Gym/scripts.pory"
waitse
-# 359 "data/maps/MossdeepCity_Gym/scripts.pory"
playse SE_REPEL
-# 360 "data/maps/MossdeepCity_Gym/scripts.pory"
initrotatingtilepuzzle FALSE
-# 361 "data/maps/MossdeepCity_Gym/scripts.pory"
moverotatingtileobjects 4
-# 362 "data/maps/MossdeepCity_Gym/scripts.pory"
waitmovement 0
-# 363 "data/maps/MossdeepCity_Gym/scripts.pory"
turnrotatingtileobjects
-# 364 "data/maps/MossdeepCity_Gym/scripts.pory"
waitmovement 0
-# 365 "data/maps/MossdeepCity_Gym/scripts.pory"
freerotatingtilepuzzle
-# 366 "data/maps/MossdeepCity_Gym/scripts.pory"
end
-# 367 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 368 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_GymGuideAdvice:
-# 369 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "Yo, how's it going, CHAMPION-bound\n"
-# 370 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "{PLAYER}?\p"
-# 371 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "The GYM LEADERS here use\n"
-# 372 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "PSYCHIC-type POKéMON.\p"
-# 373 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "If you go up against them with\n"
-# 374 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "FIGHTING- or POISON-type POKéMON,\l"
-# 375 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "they'll inflict horrible damage!\p"
-# 376 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "Plus, they'll come at you with\n"
-# 377 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "outstanding combination attacks.\p"
-# 378 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "If you want to win, you'll need to show\n"
-# 379 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "them how tight you are with your\l"
-# 380 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "POKéMON. Go for it!$"
-# 381 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 382 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_GymGuidePostVictory:
-# 383 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "Wow, you're astounding!\n"
-# 384 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "You're one great TRAINER!$"
-# 385 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 386 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_PrestonIntro:
-# 387 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "Battles hinge on the strength of your\n"
-# 388 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "spirit! The weak-spirited will never win!$"
-# 389 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 390 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_PrestonDefeat:
-# 391 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "I lost!\n"
-# 392 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "I must temper my spirit again!$"
-# 393 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 394 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_PrestonPostBattle:
-# 395 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "The indecisive lose.\n"
-# 396 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "That's my warning to you.$"
-# 397 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 398 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_VirgilIntro:
-# 399 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "Let me see your talent!$"
-# 400 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 401 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_VirgilDefeat:
-# 402 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "You possess spectacular talent!$"
-# 403 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 404 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_VirgilPostBattle:
-# 405 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "If there are prodigies in the world,\n"
-# 406 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "then our GYM LEADERS are them!\p"
-# 407 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "However, you may be even more talented\n"
-# 408 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "than them…$"
-# 409 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 410 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_BlakeIntro:
-# 411 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "Fufufufu… Watch me levitate a POKé\n"
-# 412 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "BALL telekinetically!\p"
-# 413 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "Wrooooooooaaaar!\n"
-# 414 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "… … … … … … …\p"
-# 415 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "Sometimes, I'm out of sync…$"
-# 416 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 417 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_BlakeDefeat:
-# 418 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "My POKéMON battling skills are out\n"
-# 419 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "of sync, too!$"
-# 420 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 421 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_BlakePostBattle:
-# 422 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "A POKé BALL was too heavy to lift\n"
-# 423 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "psychically. But this dust bunny…\p"
-# 424 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "Whoooooooooooooooh!\n"
-# 425 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "… … … … … …\p"
-# 426 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "No, I'm not cheating!\n"
-# 427 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "I didn't blow on it! Honestly!$"
-# 428 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 429 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_HannahIntro:
-# 430 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "When you lose to me, don't be too hard\n"
-# 431 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "on yourself.\p"
-# 432 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "It's not that you're weak--I'm just\n"
-# 433 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "too strong!$"
-# 434 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 435 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_HannahDefeat:
-# 436 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "You're just too strong!$"
-# 437 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 438 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_HannahPostBattle:
-# 439 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "I'm not going to get down on myself for\n"
-# 440 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "losing. I just need to train harder.\p"
-# 441 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "Positive thinking--that's my strong\n"
-# 442 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "point!$"
-# 443 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 444 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_SamanthaIntro:
-# 445 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "I see it…\n"
-# 446 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "I see your future…\p"
-# 447 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "If you can beat me, I will tell you\n"
-# 448 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "your future!$"
-# 449 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 450 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_SamanthaDefeat:
-# 451 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "I surrender!$"
-# 452 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 453 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_SamanthaPostBattle:
-# 454 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "You will wage a terrifically intense\n"
-# 455 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "battle with our GYM LEADERS…\p"
-# 456 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "The result…\n"
-# 457 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "You won't hear it from me!$"
-# 458 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 459 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_MauraIntro:
-# 460 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "The roads you have traveled…\n"
-# 461 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "What you have experienced…\p"
-# 462 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "Come at me with everything you've\n"
-# 463 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "learned!$"
-# 464 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 465 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_MauraDefeat:
-# 466 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "You've traveled a path of greatness!$"
-# 467 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 468 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_MauraPostBattle:
-# 469 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "A bright future awaits those who have\n"
-# 470 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "worked diligently.\p"
-# 471 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "For those who lazed idly, there is\n"
-# 472 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "only despair at the end.\p"
-# 473 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "What goes around comes around…$"
-# 474 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 475 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_SylviaIntro:
-# 476 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "Even at the risk of life, I will win\n"
-# 477 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "this battle!$"
-# 478 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 479 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_SylviaDefeat:
-# 480 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "What you do…\n"
-# 481 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "It horrifies me…$"
-# 482 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 483 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_SylviaPostBattle:
-# 484 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "How dare you beat me…\p"
-# 485 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "It won't be my fault if something\n"
-# 486 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "horrible befalls you…$"
-# 487 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 488 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_NateIntro:
-# 489 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "Hohoho.\p"
-# 490 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "You need me to show you how tenacious\n"
-# 491 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "the PSYCHIC type can be.$"
-# 492 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 493 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_NateDefeat:
-# 494 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "Oh! My, my!\n"
-# 495 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "Your battle style is fantastic!$"
-# 496 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 497 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_NatePostBattle:
-# 498 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "I… I don't let defeat rattle m-me,\n"
-# 499 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "however b-badly.$"
-# 500 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 501 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_KathleenIntro:
-# 502 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "Let me show you a perfectly awful,\n"
-# 503 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "horrifying time!$"
-# 504 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 505 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_KathleenDefeat:
-# 506 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "N-nooooo!$"
-# 507 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 508 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_KathleenPostBattle:
-# 509 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "Your vitality is contagious!\n"
-# 510 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "Get away from me quickly!$"
-# 511 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 512 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_CliffordIntro:
-# 513 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "I may be past my prime, but I suggest\n"
-# 514 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "you not patronize me.$"
-# 515 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 516 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_CliffordDefeat:
-# 517 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "Ah, you overflow with the power\n"
-# 518 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "of youth!$"
-# 519 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 520 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_CliffordPostBattle:
-# 521 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "It seems that I could not overcome\n"
-# 522 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "your youthful energy.$"
-# 523 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 524 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_MaceyIntro:
-# 525 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "You're not getting through to the end!\n"
-# 526 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "Not if I can help it!$"
-# 527 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 528 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_MaceyDefeat:
-# 529 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "How could you be so ludicrously\n"
-# 530 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "strong?$"
-# 531 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 532 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_MaceyPostBattle:
-# 533 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "Humph! You may be strong, but you're\n"
-# 534 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "not suitable for the PSYCHIC type!\p"
-# 535 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "The way you battle is somehow brutal!$"
-# 536 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 537 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_NicholasIntro:
-# 538 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "Wroooar! Have a taste of my super\n"
-# 539 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "POKéMON hard-battling power!$"
-# 540 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 541 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_NicholasDefeat:
-# 542 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "Oh!\n"
-# 543 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "Done in!$"
-# 544 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 545 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_NicholasPostBattle:
-# 546 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "All right! I think I'll develop a special\n"
-# 547 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "invincible POKéMON power next.$"
-# 548 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 549 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_TateAndLizaIntro:
-# 550 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "TATE: Hehehe… Were you surprised?\p"
-# 551 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "LIZA: Fufufu… Were you surprised?\p"
-# 552 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "TATE: That there are two GYM LEADERS?\n"
-# 553 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "LIZA: That there are two GYM LEADERS?\p"
-# 554 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "TATE: We're twins!\n"
-# 555 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "LIZA: We're twins!\p"
-# 556 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "TATE: We don't need to talk because…\n"
-# 557 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "LIZA: We can each determine what…\p"
-# 558 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "TATE: The other is thinking…\n"
-# 559 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "LIZA: All in our minds!\p"
-# 560 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "TATE: This combination of ours…\n"
-# 561 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "LIZA: Can you beat it?$"
-# 562 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 563 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_TateAndLizaDefeat:
-# 564 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "TATE: What?! Our combination…\n"
-# 565 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "LIZA: Was shattered!\p"
-# 566 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "TATE: It can't be helped. You've won…\n"
-# 567 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "LIZA: So, in recognition, take this.$"
-# 568 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 569 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_ReceivedMindBadge:
-# 570 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "{PLAYER} received the MIND BADGE\n"
-# 571 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "from TATE and LIZA.$"
-# 572 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 573 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_ExplainMindBadgeTakeThis:
-# 574 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "TATE: The MIND BADGE enhances the\n"
-# 575 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "SP. ATK and SP. DEF of POKéMON.\p"
-# 576 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "LIZA: It also lets you use the HM move\n"
-# 577 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "DIVE outside of battle.\p"
-# 578 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "TATE: You should also take this, too.$"
-# 579 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 580 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_ExplainCalmMind:
-# 581 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "TATE: That TM04 contains…\n"
-# 582 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "LIZA: CALM MIND!\p"
-# 583 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "TATE: It raises SP. ATK and…\n"
-# 584 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "LIZA: It raises SP. DEF!\p"
-# 585 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "TATE: It's a move that's perfect…\n"
-# 586 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "LIZA: For PSYCHIC POKéMON!\p"
-# 587 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "… … … … … …$"
-# 588 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 589 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_RegisteredTateAndLiza:
-# 590 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "Registered GYM LEADERS TATE & LIZA\n"
-# 591 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "in the POKéNAV.$"
-# 592 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 593 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_TateAndLizaPostBattle:
-# 594 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "TATE: Looks like the bond between you\n"
-# 595 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "and your POKéMON is far stronger than\l"
-# 596 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "the bond that we share as twins.\p"
-# 597 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "LIZA: You will become even stronger!\n"
-# 598 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "We've battled you, so we know.$"
-# 599 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 600 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_TateAndLizaNeedTwoMons:
-# 601 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "TATE: Hehehe… Were you surprised?\p"
-# 602 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "LIZA: That there are two GYM LEADERS?\p"
-# 603 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "TATE: Oops, you have only one…\n"
-# 604 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "LIZA: POKéMON that can battle.\p"
-# 605 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "TATE: We can't battle that way!\p"
-# 606 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "LIZA: If you want to challenge us,\n"
-# 607 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "bring some more POKéMON.$"
-# 608 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 609 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_GymStatue:
-# 610 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "MOSSDEEP CITY POKéMON GYM$"
-# 611 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 612 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_GymStatueCertified:
-# 613 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "MOSSDEEP CITY POKéMON GYM\p"
-# 614 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "LIZA AND TATE'S CERTIFIED TRAINERS:\n"
-# 615 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "{PLAYER}$"
-# 616 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 617 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_TateAndLizaPreRematch:
-# 618 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "TATE: POKéMON…\n"
-# 619 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "LIZA: POKéMON…\p"
-# 620 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "TATE: By changing the party's mix…\n"
-# 621 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "LIZA: The battle style changes.\p"
-# 622 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "TATE: But me…\n"
-# 623 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "LIZA: But me…\p"
-# 624 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "TATE: I'll always be with LIZA!\n"
-# 625 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "LIZA: I'll always be with TATE!\p"
-# 626 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "TATE: Our combination…\n"
-# 627 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "LIZA: We'll show you again and again!$"
-# 628 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 629 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_TateAndLizaRematchDefeat:
-# 630 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "TATE: You and your POKéMON…\n"
-# 631 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "LIZA: It's as if you were siblings!$"
-# 632 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 633 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_TateAndLizaPostRematch:
-# 634 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "TATE: You can knock us down,\n"
-# 635 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "but we'll never stay down!\p"
-# 636 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "LIZA: Because the two of us,\n"
-# 637 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "we always support each other!$"
-# 638 "data/maps/MossdeepCity_Gym/scripts.pory"
-# 639 "data/maps/MossdeepCity_Gym/scripts.pory"
MossdeepCity_Gym_Text_TateAndLizaRematchNeedTwoMons:
-# 640 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "TATE: You're back again…\n"
-# 641 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "LIZA: You're back again…\p"
-# 642 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "TATE: To give us a rematch.\n"
-# 643 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "LIZA: To give us a rematch.\p"
-# 644 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "TATE: But…\n"
-# 645 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "LIZA: For our match…\p"
-# 646 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "TATE: You brought just one POKéMON!\n"
-# 647 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "LIZA: You brought just one POKéMON!\p"
-# 648 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "TATE: We need you to bring at least…\n"
-# 649 "data/maps/MossdeepCity_Gym/scripts.pory"
.string "LIZA: Two POKéMON when you come back.$"
diff --git a/data/maps/Route117/map.json b/data/maps/Route117/map.json
index e1fbf88cf6fb..348e878e80a1 100644
--- a/data/maps/Route117/map.json
+++ b/data/maps/Route117/map.json
@@ -105,8 +105,8 @@
},
{
"graphics_id": "OBJ_EVENT_GFX_PIKACHU",
- "x": 49,
- "y": 2,
+ "x": 51,
+ "y": 1,
"elevation": 3,
"movement_type": "MOVEMENT_TYPE_LOOK_AROUND",
"movement_range_x": 0,
@@ -336,6 +336,32 @@
"trainer_sight_or_berry_tree_id": "4",
"script": "Route117_EventScript_Melina",
"flag": "0"
+ },
+ {
+ "graphics_id": "OBJ_EVENT_GFX_VAR_0",
+ "x": 47,
+ "y": 2,
+ "elevation": 3,
+ "movement_type": "MOVEMENT_TYPE_LOOK_AROUND",
+ "movement_range_x": 0,
+ "movement_range_y": 0,
+ "trainer_type": "TRAINER_TYPE_NONE",
+ "trainer_sight_or_berry_tree_id": "VAR_TEMP_0",
+ "script": "NULL",
+ "flag": "FLAG_TEMP_1"
+ },
+ {
+ "graphics_id": "OBJ_EVENT_GFX_VAR_1",
+ "x": 49,
+ "y": 2,
+ "elevation": 3,
+ "movement_type": "MOVEMENT_TYPE_LOOK_AROUND",
+ "movement_range_x": 0,
+ "movement_range_y": 0,
+ "trainer_type": "TRAINER_TYPE_NONE",
+ "trainer_sight_or_berry_tree_id": "VAR_TEMP_1",
+ "script": "NULL",
+ "flag": "FLAG_TEMP_2"
}
],
"warp_events": [
diff --git a/data/maps/Route117/scripts.inc b/data/maps/Route117/scripts.inc
index ed5513d8ffd2..1a3920f13a8c 100644
--- a/data/maps/Route117/scripts.inc
+++ b/data/maps/Route117/scripts.inc
@@ -1,416 +1,243 @@
-# 1 "data/maps/Route117/scripts.pory"
-
-# 2 "data/maps/Route117/scripts.pory"
.set LOCALID_DAYCARE_MAN, 3
-# 3 "data/maps/Route117/scripts.pory"
+.set LOCALID_DAYCARE_MON_0, 25
+.set LOCALID_DAYCARE_MON_1, 26
-# 4 "data/maps/Route117/scripts.pory"
Route117_MapScripts::
-# 5 "data/maps/Route117/scripts.pory"
map_script MAP_SCRIPT_ON_TRANSITION, Route117_OnTransition
-# 6 "data/maps/Route117/scripts.pory"
.byte 0
-# 7 "data/maps/Route117/scripts.pory"
-# 8 "data/maps/Route117/scripts.pory"
Route117_OnTransition:
-# 9 "data/maps/Route117/scripts.pory"
call Route117_EventScript_TryMoveDayCareMan
-# 10 "data/maps/Route117/scripts.pory"
- end
-# 11 "data/maps/Route117/scripts.pory"
+ @ set flags for OW daycare mons
+ setflag FLAG_TEMP_1
+ setflag FLAG_TEMP_2
+ getdaycaregfx VAR_OBJ_GFX_ID_0, VAR_OBJ_GFX_ID_1, VAR_TEMP_0, VAR_TEMP_1
+ switch VAR_RESULT
+ case 2, Route117_EventScript_ShowDaycareMon1
+ case 1, Route117_EventScript_ShowDaycareMon0
+ end
+
+Route117_EventScript_ShowDaycareMon1:
+ @ set pokemon movement type based on compatibility
+ special SetDaycareCompatibilityString
+ call_if_eq VAR_RESULT, PARENTS_INCOMPATIBLE, Route117_EventScript_DaycareMonIncompatible
+ @ Don't do anything if PARENTS_LOW_COMPATIBILITY
+ call_if_eq VAR_RESULT, PARENTS_MED_COMPATIBILITY, Route117_EventScript_DaycareMonMedCompatibility
+ call_if_eq VAR_RESULT, PARENTS_MAX_COMPATIBILITY, Route117_EventScript_DaycareMonMaxCompatibility
+ clearflag FLAG_TEMP_2
+Route117_EventScript_ShowDaycareMon0:
+ clearflag FLAG_TEMP_1
+ end
+
+Route117_EventScript_DaycareMonIncompatible: @ mons never face each other
+ setobjectmovementtype LOCALID_DAYCARE_MON_0, MOVEMENT_TYPE_FACE_DOWN_UP_AND_LEFT
+ setobjectmovementtype LOCALID_DAYCARE_MON_1, MOVEMENT_TYPE_FACE_DOWN_UP_AND_RIGHT
+ return
+
+Route117_EventScript_DaycareMonMedCompatibility: @ down and towards each other
+ setobjectmovementtype LOCALID_DAYCARE_MON_0, MOVEMENT_TYPE_FACE_DOWN_AND_RIGHT
+ setobjectmovementtype LOCALID_DAYCARE_MON_1, MOVEMENT_TYPE_FACE_DOWN_AND_LEFT
+ return
+
+Route117_EventScript_DaycareMonMaxCompatibility: @ facing; walk in place
+ setobjectmovementtype LOCALID_DAYCARE_MON_0, MOVEMENT_TYPE_WALK_IN_PLACE_RIGHT
+ setobjectmovementtype LOCALID_DAYCARE_MON_1, MOVEMENT_TYPE_WALK_IN_PLACE_LEFT
+ return
-# 12 "data/maps/Route117/scripts.pory"
Route117_EventScript_TryMoveDayCareMan::
-# 13 "data/maps/Route117/scripts.pory"
goto_if_unset FLAG_PENDING_DAYCARE_EGG, Route117_EventScript_StopMoveDayCareMan
-# 14 "data/maps/Route117/scripts.pory"
setobjectxyperm LOCALID_DAYCARE_MAN, 47, 6
-# 15 "data/maps/Route117/scripts.pory"
Route117_EventScript_StopMoveDayCareMan::
-# 16 "data/maps/Route117/scripts.pory"
return
-# 17 "data/maps/Route117/scripts.pory"
-# 18 "data/maps/Route117/scripts.pory"
Route117_EventScript_Woman::
-# 19 "data/maps/Route117/scripts.pory"
msgbox Route117_Text_ArentTheseFlowersPretty, MSGBOX_NPC
-# 20 "data/maps/Route117/scripts.pory"
end
-# 21 "data/maps/Route117/scripts.pory"
-# 22 "data/maps/Route117/scripts.pory"
Route117_EventScript_LittleBoy::
-# 23 "data/maps/Route117/scripts.pory"
msgbox Route117_Text_AirIsTastyHere, MSGBOX_NPC
-# 24 "data/maps/Route117/scripts.pory"
end
-# 25 "data/maps/Route117/scripts.pory"
-# 26 "data/maps/Route117/scripts.pory"
Route117_EventScript_Girl::
-# 27 "data/maps/Route117/scripts.pory"
msgbox Route117_Text_DayCarePokemonHadNewMove, MSGBOX_NPC
-# 28 "data/maps/Route117/scripts.pory"
end
-# 29 "data/maps/Route117/scripts.pory"
-# 30 "data/maps/Route117/scripts.pory"
Route117_EventScript_RouteSignVerdanturf::
-# 31 "data/maps/Route117/scripts.pory"
msgbox Route117_Text_RouteSignVerdanturf, MSGBOX_SIGN
-# 32 "data/maps/Route117/scripts.pory"
end
-# 33 "data/maps/Route117/scripts.pory"
-# 34 "data/maps/Route117/scripts.pory"
Route117_EventScript_RouteSignMauville::
-# 35 "data/maps/Route117/scripts.pory"
msgbox Route117_Text_RouteSignMauville, MSGBOX_SIGN
-# 36 "data/maps/Route117/scripts.pory"
end
-# 37 "data/maps/Route117/scripts.pory"
-# 38 "data/maps/Route117/scripts.pory"
Route117_EventScript_DayCareSign::
-# 39 "data/maps/Route117/scripts.pory"
msgbox Route117_Text_DayCareSign, MSGBOX_SIGN
-# 40 "data/maps/Route117/scripts.pory"
end
-# 41 "data/maps/Route117/scripts.pory"
-# 42 "data/maps/Route117/scripts.pory"
Route117_EventScript_Isaac::
-# 43 "data/maps/Route117/scripts.pory"
trainerbattle_single TRAINER_ISAAC_1, Route117_Text_IsaacIntro, Route117_Text_IsaacDefeat, Route117_EventScript_RegisterIsaac
-# 44 "data/maps/Route117/scripts.pory"
specialvar VAR_RESULT, ShouldTryRematchBattle
-# 45 "data/maps/Route117/scripts.pory"
goto_if_eq VAR_RESULT, TRUE, Route117_EventScript_RematchIsaac
-# 46 "data/maps/Route117/scripts.pory"
msgbox Route117_Text_IsaacPostBattle, MSGBOX_DEFAULT
-# 47 "data/maps/Route117/scripts.pory"
release
-# 48 "data/maps/Route117/scripts.pory"
end
-# 49 "data/maps/Route117/scripts.pory"
-# 50 "data/maps/Route117/scripts.pory"
Route117_EventScript_RegisterIsaac::
-# 51 "data/maps/Route117/scripts.pory"
special PlayerFaceTrainerAfterBattle
-# 52 "data/maps/Route117/scripts.pory"
waitmovement 0
-# 53 "data/maps/Route117/scripts.pory"
msgbox Route117_Text_IsaacRegister, MSGBOX_DEFAULT
-# 54 "data/maps/Route117/scripts.pory"
register_matchcall TRAINER_ISAAC_1
-# 55 "data/maps/Route117/scripts.pory"
release
-# 56 "data/maps/Route117/scripts.pory"
end
-# 57 "data/maps/Route117/scripts.pory"
-# 58 "data/maps/Route117/scripts.pory"
Route117_EventScript_RematchIsaac::
-# 59 "data/maps/Route117/scripts.pory"
trainerbattle_rematch TRAINER_ISAAC_1, Route117_Text_IsaacRematchIntro, Route117_Text_IsaacRematchDefeat
-# 60 "data/maps/Route117/scripts.pory"
msgbox Route117_Text_IsaacPostRematch, MSGBOX_AUTOCLOSE
-# 61 "data/maps/Route117/scripts.pory"
end
-# 62 "data/maps/Route117/scripts.pory"
-# 63 "data/maps/Route117/scripts.pory"
Route117_EventScript_Lydia::
-# 64 "data/maps/Route117/scripts.pory"
trainerbattle_single TRAINER_LYDIA_1, Route117_Text_LydiaIntro, Route117_Text_LydiaDefeat, Route117_EventScript_RegisterLydia
-# 65 "data/maps/Route117/scripts.pory"
specialvar VAR_RESULT, ShouldTryRematchBattle
-# 66 "data/maps/Route117/scripts.pory"
goto_if_eq VAR_RESULT, TRUE, Route117_EventScript_RematchLydia
-# 67 "data/maps/Route117/scripts.pory"
msgbox Route117_Text_LydiaPostBattle, MSGBOX_DEFAULT
-# 68 "data/maps/Route117/scripts.pory"
release
-# 69 "data/maps/Route117/scripts.pory"
end
-# 70 "data/maps/Route117/scripts.pory"
-# 71 "data/maps/Route117/scripts.pory"
Route117_EventScript_RegisterLydia::
-# 72 "data/maps/Route117/scripts.pory"
special PlayerFaceTrainerAfterBattle
-# 73 "data/maps/Route117/scripts.pory"
waitmovement 0
-# 74 "data/maps/Route117/scripts.pory"
msgbox Route117_Text_LydiaRegister, MSGBOX_DEFAULT
-# 75 "data/maps/Route117/scripts.pory"
register_matchcall TRAINER_LYDIA_1
-# 76 "data/maps/Route117/scripts.pory"
release
-# 77 "data/maps/Route117/scripts.pory"
end
-# 78 "data/maps/Route117/scripts.pory"
-# 79 "data/maps/Route117/scripts.pory"
Route117_EventScript_RematchLydia::
-# 80 "data/maps/Route117/scripts.pory"
trainerbattle_rematch TRAINER_LYDIA_1, Route117_Text_LydiaRematchIntro, Route117_Text_LydiaRematchDefeat
-# 81 "data/maps/Route117/scripts.pory"
msgbox Route117_Text_LydiaPostRematch, MSGBOX_AUTOCLOSE
-# 82 "data/maps/Route117/scripts.pory"
end
-# 83 "data/maps/Route117/scripts.pory"
-# 84 "data/maps/Route117/scripts.pory"
Route117_EventScript_Dylan::
-# 85 "data/maps/Route117/scripts.pory"
trainerbattle_single TRAINER_DYLAN_1, Route117_Text_DylanIntro, Route117_Text_DylanDefeat, Route117_EventScript_RegisterDylan
-# 86 "data/maps/Route117/scripts.pory"
specialvar VAR_RESULT, ShouldTryRematchBattle
-# 87 "data/maps/Route117/scripts.pory"
goto_if_eq VAR_RESULT, TRUE, Route117_EventScript_RematchDylan
-# 88 "data/maps/Route117/scripts.pory"
msgbox Route117_Text_DylanPostBattle, MSGBOX_DEFAULT
-# 89 "data/maps/Route117/scripts.pory"
release
-# 90 "data/maps/Route117/scripts.pory"
end
-# 91 "data/maps/Route117/scripts.pory"
-# 92 "data/maps/Route117/scripts.pory"
Route117_EventScript_RegisterDylan::
-# 93 "data/maps/Route117/scripts.pory"
special PlayerFaceTrainerAfterBattle
-# 94 "data/maps/Route117/scripts.pory"
waitmovement 0
-# 95 "data/maps/Route117/scripts.pory"
msgbox Route117_Text_DylanRegister, MSGBOX_DEFAULT
-# 96 "data/maps/Route117/scripts.pory"
register_matchcall TRAINER_DYLAN_1
-# 97 "data/maps/Route117/scripts.pory"
release
-# 98 "data/maps/Route117/scripts.pory"
end
-# 99 "data/maps/Route117/scripts.pory"
-# 100 "data/maps/Route117/scripts.pory"
Route117_EventScript_RematchDylan::
-# 101 "data/maps/Route117/scripts.pory"
trainerbattle_rematch TRAINER_DYLAN_1, Route117_Text_DylanRematchIntro, Route117_Text_DylanRematchDefeat
-# 102 "data/maps/Route117/scripts.pory"
msgbox Route117_Text_DylanPostRematch, MSGBOX_AUTOCLOSE
-# 103 "data/maps/Route117/scripts.pory"
end
-# 104 "data/maps/Route117/scripts.pory"
-# 105 "data/maps/Route117/scripts.pory"
Route117_EventScript_Maria::
-# 106 "data/maps/Route117/scripts.pory"
trainerbattle_single TRAINER_MARIA_1, Route117_Text_MariaIntro, Route117_Text_MariaDefeat, Route117_EventScript_RegisterMaria
-# 107 "data/maps/Route117/scripts.pory"
specialvar VAR_RESULT, ShouldTryRematchBattle
-# 108 "data/maps/Route117/scripts.pory"
goto_if_eq VAR_RESULT, TRUE, Route117_EventScript_RematchMaria
-# 109 "data/maps/Route117/scripts.pory"
msgbox Route117_Text_MariaPostBattle, MSGBOX_DEFAULT
-# 110 "data/maps/Route117/scripts.pory"
release
-# 111 "data/maps/Route117/scripts.pory"
end
-# 112 "data/maps/Route117/scripts.pory"
-# 113 "data/maps/Route117/scripts.pory"
Route117_EventScript_RegisterMaria::
-# 114 "data/maps/Route117/scripts.pory"
special PlayerFaceTrainerAfterBattle
-# 115 "data/maps/Route117/scripts.pory"
waitmovement 0
-# 116 "data/maps/Route117/scripts.pory"
msgbox Route117_Text_MariaRegister, MSGBOX_DEFAULT
-# 117 "data/maps/Route117/scripts.pory"
register_matchcall TRAINER_MARIA_1
-# 118 "data/maps/Route117/scripts.pory"
release
-# 119 "data/maps/Route117/scripts.pory"
end
-# 120 "data/maps/Route117/scripts.pory"
-# 121 "data/maps/Route117/scripts.pory"
Route117_EventScript_RematchMaria::
-# 122 "data/maps/Route117/scripts.pory"
trainerbattle_rematch TRAINER_MARIA_1, Route117_Text_MariaRematchIntro, Route117_Text_MariaRematchDefeat
-# 123 "data/maps/Route117/scripts.pory"
msgbox Route117_Text_MariaPostRematch, MSGBOX_AUTOCLOSE
-# 124 "data/maps/Route117/scripts.pory"
end
-# 125 "data/maps/Route117/scripts.pory"
-# 126 "data/maps/Route117/scripts.pory"
Route117_EventScript_Derek::
-# 127 "data/maps/Route117/scripts.pory"
trainerbattle_single TRAINER_DEREK, Route117_Text_DerekIntro, Route117_Text_DerekDefeat
-# 128 "data/maps/Route117/scripts.pory"
msgbox Route117_Text_DerekPostBattle, MSGBOX_AUTOCLOSE
-# 129 "data/maps/Route117/scripts.pory"
end
-# 130 "data/maps/Route117/scripts.pory"
-# 131 "data/maps/Route117/scripts.pory"
Route117_EventScript_Anna::
-# 132 "data/maps/Route117/scripts.pory"
trainerbattle_double TRAINER_ANNA_AND_MEG_1, Route117_Text_AnnaIntro, Route117_Text_AnnaDefeat, Route117_Text_AnnaNotEnoughMons, Route117_EventScript_RegisterAnna
-# 133 "data/maps/Route117/scripts.pory"
specialvar VAR_RESULT, ShouldTryRematchBattle
-# 134 "data/maps/Route117/scripts.pory"
goto_if_eq VAR_RESULT, TRUE, Route117_EventScript_RematchAnna
-# 135 "data/maps/Route117/scripts.pory"
msgbox Route117_Text_AnnaPostBattle, MSGBOX_DEFAULT
-# 136 "data/maps/Route117/scripts.pory"
release
-# 137 "data/maps/Route117/scripts.pory"
end
-# 138 "data/maps/Route117/scripts.pory"
-# 139 "data/maps/Route117/scripts.pory"
Route117_EventScript_RegisterAnna::
-# 140 "data/maps/Route117/scripts.pory"
msgbox Route117_Text_AnnaAndMegRegister, MSGBOX_DEFAULT
-# 141 "data/maps/Route117/scripts.pory"
register_matchcall TRAINER_ANNA_AND_MEG_1
-# 142 "data/maps/Route117/scripts.pory"
release
-# 143 "data/maps/Route117/scripts.pory"
end
-# 144 "data/maps/Route117/scripts.pory"
-# 145 "data/maps/Route117/scripts.pory"
Route117_EventScript_RematchAnna::
-# 146 "data/maps/Route117/scripts.pory"
trainerbattle_rematch_double TRAINER_ANNA_AND_MEG_1, Route117_Text_AnnaRematchIntro, Route117_Text_AnnaRematchDefeat, Route117_Text_AnnaRematchNotEnoughMons
-# 147 "data/maps/Route117/scripts.pory"
msgbox Route117_Text_AnnaPostRematch, MSGBOX_AUTOCLOSE
-# 148 "data/maps/Route117/scripts.pory"
end
-# 149 "data/maps/Route117/scripts.pory"
-# 150 "data/maps/Route117/scripts.pory"
Route117_EventScript_Meg::
-# 151 "data/maps/Route117/scripts.pory"
trainerbattle_double TRAINER_ANNA_AND_MEG_1, Route117_Text_MegIntro, Route117_Text_MegDefeat, Route117_Text_MegNotEnoughMons, Route117_EventScript_RegisterMeg
-# 152 "data/maps/Route117/scripts.pory"
specialvar VAR_RESULT, ShouldTryRematchBattle
-# 153 "data/maps/Route117/scripts.pory"
goto_if_eq VAR_RESULT, TRUE, Route117_EventScript_RematchMeg
-# 154 "data/maps/Route117/scripts.pory"
msgbox Route117_Text_MegPostBattle, MSGBOX_DEFAULT
-# 155 "data/maps/Route117/scripts.pory"
release
-# 156 "data/maps/Route117/scripts.pory"
end
-# 157 "data/maps/Route117/scripts.pory"
-# 158 "data/maps/Route117/scripts.pory"
Route117_EventScript_RegisterMeg::
-# 159 "data/maps/Route117/scripts.pory"
msgbox Route117_Text_AnnaAndMegRegister, MSGBOX_DEFAULT
-# 160 "data/maps/Route117/scripts.pory"
register_matchcall TRAINER_ANNA_AND_MEG_1
-# 161 "data/maps/Route117/scripts.pory"
release
-# 162 "data/maps/Route117/scripts.pory"
end
-# 163 "data/maps/Route117/scripts.pory"
-# 164 "data/maps/Route117/scripts.pory"
Route117_EventScript_RematchMeg::
-# 165 "data/maps/Route117/scripts.pory"
trainerbattle_rematch_double TRAINER_ANNA_AND_MEG_1, Route117_Text_MegRematchIntro, Route117_Text_MegRematchDefeat, Route117_Text_MegRematchNotEnoughMons
-# 166 "data/maps/Route117/scripts.pory"
msgbox Route117_Text_MegPostRematch, MSGBOX_AUTOCLOSE
-# 167 "data/maps/Route117/scripts.pory"
end
-# 168 "data/maps/Route117/scripts.pory"
-# 169 "data/maps/Route117/scripts.pory"
Route117_EventScript_Melina::
-# 170 "data/maps/Route117/scripts.pory"
trainerbattle_single TRAINER_MELINA, Route117_Text_MelinaIntro, Route117_Text_MelinaDefeat
-# 171 "data/maps/Route117/scripts.pory"
msgbox Route117_Text_MelinaPostBattle, MSGBOX_AUTOCLOSE
-# 172 "data/maps/Route117/scripts.pory"
end
-# 173 "data/maps/Route117/scripts.pory"
-# 174 "data/maps/Route117/scripts.pory"
Route117_EventScript_Brandi::
-# 175 "data/maps/Route117/scripts.pory"
trainerbattle_single TRAINER_BRANDI, Route117_Text_BrandiIntro, Route117_Text_BrandiDefeat
-# 176 "data/maps/Route117/scripts.pory"
msgbox Route117_Text_BrandiPostBattle, MSGBOX_AUTOCLOSE
-# 177 "data/maps/Route117/scripts.pory"
end
-# 178 "data/maps/Route117/scripts.pory"
-# 179 "data/maps/Route117/scripts.pory"
Route117_EventScript_Aisha::
-# 180 "data/maps/Route117/scripts.pory"
trainerbattle_single TRAINER_AISHA, Route117_Text_AishaIntro, Route117_Text_AishaDefeat
-# 181 "data/maps/Route117/scripts.pory"
msgbox Route117_Text_AishaPostBattle, MSGBOX_AUTOCLOSE
-# 182 "data/maps/Route117/scripts.pory"
end
-# 183 "data/maps/Route117/scripts.pory"
-# 184 "data/maps/Route117/scripts.pory"
Route117_Text_DayCarePokemonHadNewMove:
-# 185 "data/maps/Route117/scripts.pory"
.string "I left my POKéMON at the DAY CARE.\p"
-# 186 "data/maps/Route117/scripts.pory"
.string "When I got it back, it had a new move\n"
-# 187 "data/maps/Route117/scripts.pory"
.string "that I didn't teach it.\l"
-# 188 "data/maps/Route117/scripts.pory"
.string "I was really, really surprised.$"
-# 189 "data/maps/Route117/scripts.pory"
-# 190 "data/maps/Route117/scripts.pory"
Route117_Text_ArentTheseFlowersPretty:
-# 191 "data/maps/Route117/scripts.pory"
.string "What do you think?\n"
-# 192 "data/maps/Route117/scripts.pory"
.string "Aren't these flowers pretty?\p"
-# 193 "data/maps/Route117/scripts.pory"
.string "I planted them all!$"
-# 194 "data/maps/Route117/scripts.pory"
-# 195 "data/maps/Route117/scripts.pory"
Route117_Text_AirIsTastyHere:
-# 196 "data/maps/Route117/scripts.pory"
.string "The air is tasty here!$"
-# 197 "data/maps/Route117/scripts.pory"
-# 198 "data/maps/Route117/scripts.pory"
Route117_Text_RouteSignVerdanturf:
-# 199 "data/maps/Route117/scripts.pory"
.string "ROUTE 117\n"
-# 200 "data/maps/Route117/scripts.pory"
.string "{LEFT_ARROW} VERDANTURF TOWN$"
-# 201 "data/maps/Route117/scripts.pory"
-# 202 "data/maps/Route117/scripts.pory"
Route117_Text_RouteSignMauville:
-# 203 "data/maps/Route117/scripts.pory"
.string "ROUTE 117\n"
-# 204 "data/maps/Route117/scripts.pory"
.string "{RIGHT_ARROW} MAUVILLE CITY$"
-# 205 "data/maps/Route117/scripts.pory"
-# 206 "data/maps/Route117/scripts.pory"
Route117_Text_DayCareSign:
-# 207 "data/maps/Route117/scripts.pory"
.string "POKéMON DAY CARE\n"
-# 208 "data/maps/Route117/scripts.pory"
.string "“Let us raise your POKéMON.”$"
diff --git a/data/maps/RusturfTunnel/scripts.inc b/data/maps/RusturfTunnel/scripts.inc
index a0f97b2e1cae..47f7dd9b4dad 100644
--- a/data/maps/RusturfTunnel/scripts.inc
+++ b/data/maps/RusturfTunnel/scripts.inc
@@ -1,1064 +1,533 @@
-# 1 "data/maps/RusturfTunnel/scripts.pory"
-
-# 2 "data/maps/RusturfTunnel/scripts.pory"
.equ LOCALID_WANDAS_BF, 1
-# 3 "data/maps/RusturfTunnel/scripts.pory"
.set LOCALID_BRINEY, 5
-# 4 "data/maps/RusturfTunnel/scripts.pory"
.set LOCALID_GRUNT, 6
-# 5 "data/maps/RusturfTunnel/scripts.pory"
.set LOCALID_PEEKO, 7
-# 6 "data/maps/RusturfTunnel/scripts.pory"
.equ LOCALID_WANDA, 10
-# 7 "data/maps/RusturfTunnel/scripts.pory"
-# 8 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_MapScripts::
-# 9 "data/maps/RusturfTunnel/scripts.pory"
map_script MAP_SCRIPT_ON_TRANSITION, RusturfTunnel_OnTransition
-# 10 "data/maps/RusturfTunnel/scripts.pory"
map_script MAP_SCRIPT_ON_FRAME_TABLE, RusturfTunnel_OnFrame
-# 11 "data/maps/RusturfTunnel/scripts.pory"
.byte 0
-# 12 "data/maps/RusturfTunnel/scripts.pory"
-# 13 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_OnFrame:
-# 14 "data/maps/RusturfTunnel/scripts.pory"
map_script_2 VAR_RUSTURF_TUNNEL_STATE, 4, RusturfTunnel_EventScript_ClearTunnelScene
-# 15 "data/maps/RusturfTunnel/scripts.pory"
map_script_2 VAR_RUSTURF_TUNNEL_STATE, 5, RusturfTunnel_EventScript_ClearTunnelScene
-# 16 "data/maps/RusturfTunnel/scripts.pory"
.2byte 0
-# 17 "data/maps/RusturfTunnel/scripts.pory"
-# 18 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_OnTransition:
-# 19 "data/maps/RusturfTunnel/scripts.pory"
call_if_eq VAR_RUSTURF_TUNNEL_STATE, 2, RusturfTunnel_EventScript_SetAquaGruntAndPeekoPos
-# 20 "data/maps/RusturfTunnel/scripts.pory"
end
-# 21 "data/maps/RusturfTunnel/scripts.pory"
-# 22 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_EventScript_SetAquaGruntAndPeekoPos::
-# 23 "data/maps/RusturfTunnel/scripts.pory"
setobjectxyperm LOCALID_PEEKO, 13, 4
-# 24 "data/maps/RusturfTunnel/scripts.pory"
setobjectxyperm LOCALID_GRUNT, 13, 5
-# 25 "data/maps/RusturfTunnel/scripts.pory"
return
-# 26 "data/maps/RusturfTunnel/scripts.pory"
-# 27 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_EventScript_Wanda::
-# 28 "data/maps/RusturfTunnel/scripts.pory"
lock
-# 29 "data/maps/RusturfTunnel/scripts.pory"
faceplayer
-# 30 "data/maps/RusturfTunnel/scripts.pory"
msgbox RusturfTunnel_Text_BoyfriendOnOtherSideOfRock, MSGBOX_DEFAULT
-# 31 "data/maps/RusturfTunnel/scripts.pory"
closemessage
-# 32 "data/maps/RusturfTunnel/scripts.pory"
applymovement VAR_LAST_TALKED, Common_Movement_FaceOriginalDirection
-# 33 "data/maps/RusturfTunnel/scripts.pory"
waitmovement 0
-# 34 "data/maps/RusturfTunnel/scripts.pory"
release
-# 35 "data/maps/RusturfTunnel/scripts.pory"
end
-# 36 "data/maps/RusturfTunnel/scripts.pory"
-# 37 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_EventScript_WandasBoyfriend::
-# 38 "data/maps/RusturfTunnel/scripts.pory"
lock
-# 39 "data/maps/RusturfTunnel/scripts.pory"
faceplayer
-# 40 "data/maps/RusturfTunnel/scripts.pory"
goto_if_set FLAG_TEMP_1, RusturfTunnel_EventScript_AlreadySpokenTo
-# 41 "data/maps/RusturfTunnel/scripts.pory"
setflag FLAG_TEMP_1
-# 42 "data/maps/RusturfTunnel/scripts.pory"
msgbox RusturfTunnel_Text_WhyCantTheyKeepDigging, MSGBOX_DEFAULT
-# 43 "data/maps/RusturfTunnel/scripts.pory"
closemessage
-# 44 "data/maps/RusturfTunnel/scripts.pory"
applymovement VAR_LAST_TALKED, Common_Movement_FaceOriginalDirection
-# 45 "data/maps/RusturfTunnel/scripts.pory"
waitmovement 0
-# 46 "data/maps/RusturfTunnel/scripts.pory"
release
-# 47 "data/maps/RusturfTunnel/scripts.pory"
end
-# 48 "data/maps/RusturfTunnel/scripts.pory"
-# 49 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_EventScript_AlreadySpokenTo::
-# 50 "data/maps/RusturfTunnel/scripts.pory"
msgbox RusturfTunnel_Text_ToGetToVerdanturf, MSGBOX_DEFAULT
-# 51 "data/maps/RusturfTunnel/scripts.pory"
closemessage
-# 52 "data/maps/RusturfTunnel/scripts.pory"
applymovement VAR_LAST_TALKED, Common_Movement_FaceOriginalDirection
-# 53 "data/maps/RusturfTunnel/scripts.pory"
waitmovement 0
-# 54 "data/maps/RusturfTunnel/scripts.pory"
release
-# 55 "data/maps/RusturfTunnel/scripts.pory"
end
-# 56 "data/maps/RusturfTunnel/scripts.pory"
-# 57 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_EventScript_ClearTunnelScene::
-# 58 "data/maps/RusturfTunnel/scripts.pory"
lockall
-# 59 "data/maps/RusturfTunnel/scripts.pory"
call_if_eq VAR_TEMP_1, 1, RusturfTunnel_EventScript_FaceWandasBoyfriend1
-# 60 "data/maps/RusturfTunnel/scripts.pory"
call_if_eq VAR_TEMP_1, 2, RusturfTunnel_EventScript_FaceWandasBoyfriend2
-# 61 "data/maps/RusturfTunnel/scripts.pory"
call_if_eq VAR_TEMP_1, 3, RusturfTunnel_EventScript_FaceWandasBoyfriend3
-# 62 "data/maps/RusturfTunnel/scripts.pory"
call RusturfTunnel_EventScript_WandasBoyfriendNotice
-# 63 "data/maps/RusturfTunnel/scripts.pory"
msgbox RusturfTunnel_Text_YouShatteredBoulderTakeHM, MSGBOX_DEFAULT
-# 64 "data/maps/RusturfTunnel/scripts.pory"
call_if_eq VAR_TEMP_1, 2, RusturfTunnel_EventScript_WandasBoyfriendApproachPlayer
-# 65 "data/maps/RusturfTunnel/scripts.pory"
call_if_eq VAR_TEMP_1, 3, RusturfTunnel_EventScript_WandasBoyfriendApproachPlayer
-# 66 "data/maps/RusturfTunnel/scripts.pory"
giveitem ITEM_HM_STRENGTH
-# 67 "data/maps/RusturfTunnel/scripts.pory"
setflag FLAG_RECEIVED_HM_STRENGTH
-# 68 "data/maps/RusturfTunnel/scripts.pory"
msgbox RusturfTunnel_Text_ExplainStrength, MSGBOX_DEFAULT
-# 69 "data/maps/RusturfTunnel/scripts.pory"
closemessage
-# 70 "data/maps/RusturfTunnel/scripts.pory"
call_if_eq VAR_TEMP_1, 1, RusturfTunnel_EventScript_BoyfriendApproachWanda1
-# 71 "data/maps/RusturfTunnel/scripts.pory"
call_if_eq VAR_TEMP_1, 2, RusturfTunnel_EventScript_BoyfriendApproachWanda2
-# 72 "data/maps/RusturfTunnel/scripts.pory"
call_if_eq VAR_TEMP_1, 3, RusturfTunnel_EventScript_BoyfriendApproachWanda3
-# 73 "data/maps/RusturfTunnel/scripts.pory"
msgbox RusturfTunnel_Text_WandaReunion, MSGBOX_DEFAULT
-# 74 "data/maps/RusturfTunnel/scripts.pory"
closemessage
-# 75 "data/maps/RusturfTunnel/scripts.pory"
call_if_eq VAR_TEMP_1, 1, RusturfTunnel_EventScript_WandaAndBoyfriendExit1
-# 76 "data/maps/RusturfTunnel/scripts.pory"
call_if_eq VAR_TEMP_1, 2, RusturfTunnel_EventScript_WandaAndBoyfriendExit
-# 77 "data/maps/RusturfTunnel/scripts.pory"
call_if_eq VAR_TEMP_1, 3, RusturfTunnel_EventScript_WandaAndBoyfriendExit
-# 78 "data/maps/RusturfTunnel/scripts.pory"
call RusturfTunnel_EventScript_SetRusturfTunnelOpen
-# 79 "data/maps/RusturfTunnel/scripts.pory"
releaseall
-# 80 "data/maps/RusturfTunnel/scripts.pory"
end
-# 81 "data/maps/RusturfTunnel/scripts.pory"
-# 82 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_EventScript_BoyfriendApproachWanda1::
-# 83 "data/maps/RusturfTunnel/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, RusturfTunnel_Movement_PlayerWatchBoyfriend1
-# 84 "data/maps/RusturfTunnel/scripts.pory"
applymovement LOCALID_WANDAS_BF, RusturfTunnel_Movement_BoyfriendApproachWanda1
-# 85 "data/maps/RusturfTunnel/scripts.pory"
waitmovement 0
-# 86 "data/maps/RusturfTunnel/scripts.pory"
return
-# 87 "data/maps/RusturfTunnel/scripts.pory"
-# 88 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_EventScript_BoyfriendApproachWanda2::
-# 89 "data/maps/RusturfTunnel/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, RusturfTunnel_Movement_PlayerWatchBoyfriend
-# 90 "data/maps/RusturfTunnel/scripts.pory"
applymovement LOCALID_WANDAS_BF, RusturfTunnel_Movement_BoyfriendApproachWanda
-# 91 "data/maps/RusturfTunnel/scripts.pory"
waitmovement 0
-# 92 "data/maps/RusturfTunnel/scripts.pory"
applymovement LOCALID_WANDA, Common_Movement_WalkInPlaceFasterDown
-# 93 "data/maps/RusturfTunnel/scripts.pory"
waitmovement 0
-# 94 "data/maps/RusturfTunnel/scripts.pory"
return
-# 95 "data/maps/RusturfTunnel/scripts.pory"
-# 96 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_EventScript_BoyfriendApproachWanda3::
-# 97 "data/maps/RusturfTunnel/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, RusturfTunnel_Movement_PlayerWatchBoyfriend
-# 98 "data/maps/RusturfTunnel/scripts.pory"
applymovement LOCALID_WANDAS_BF, RusturfTunnel_Movement_BoyfriendApproachWanda
-# 99 "data/maps/RusturfTunnel/scripts.pory"
waitmovement 0
-# 100 "data/maps/RusturfTunnel/scripts.pory"
applymovement LOCALID_WANDA, Common_Movement_WalkInPlaceFasterDown
-# 101 "data/maps/RusturfTunnel/scripts.pory"
waitmovement 0
-# 102 "data/maps/RusturfTunnel/scripts.pory"
return
-# 103 "data/maps/RusturfTunnel/scripts.pory"
-# 104 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_EventScript_FaceWandasBoyfriend1::
-# 105 "data/maps/RusturfTunnel/scripts.pory"
applymovement LOCALID_WANDAS_BF, Common_Movement_WalkInPlaceFasterUp
-# 106 "data/maps/RusturfTunnel/scripts.pory"
waitmovement 0
-# 107 "data/maps/RusturfTunnel/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterDown
-# 108 "data/maps/RusturfTunnel/scripts.pory"
waitmovement 0
-# 109 "data/maps/RusturfTunnel/scripts.pory"
return
-# 110 "data/maps/RusturfTunnel/scripts.pory"
-# 111 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_EventScript_FaceWandasBoyfriend2::
-# 112 "data/maps/RusturfTunnel/scripts.pory"
applymovement LOCALID_WANDAS_BF, RusturfTunnel_Movement_BoyfriendFaceRight
-# 113 "data/maps/RusturfTunnel/scripts.pory"
waitmovement 0
-# 114 "data/maps/RusturfTunnel/scripts.pory"
return
-# 115 "data/maps/RusturfTunnel/scripts.pory"
-# 116 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_EventScript_FaceWandasBoyfriend3::
-# 117 "data/maps/RusturfTunnel/scripts.pory"
return
-# 118 "data/maps/RusturfTunnel/scripts.pory"
-# 119 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_EventScript_WandasBoyfriendApproachPlayer::
-# 120 "data/maps/RusturfTunnel/scripts.pory"
closemessage
-# 121 "data/maps/RusturfTunnel/scripts.pory"
applymovement LOCALID_WANDAS_BF, RusturfTunnel_Movement_WandasBoyfriendApproachPlayer
-# 122 "data/maps/RusturfTunnel/scripts.pory"
waitmovement 0
-# 123 "data/maps/RusturfTunnel/scripts.pory"
return
-# 124 "data/maps/RusturfTunnel/scripts.pory"
-# 125 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_EventScript_WandaAndBoyfriendExit1::
-# 126 "data/maps/RusturfTunnel/scripts.pory"
applymovement LOCALID_WANDA, RusturfTunnel_Movement_WandaExit1
-# 127 "data/maps/RusturfTunnel/scripts.pory"
applymovement LOCALID_WANDAS_BF, RusturfTunnel_Movement_WandasBoyfriendExit1
-# 128 "data/maps/RusturfTunnel/scripts.pory"
waitmovement 0
-# 129 "data/maps/RusturfTunnel/scripts.pory"
return
-# 130 "data/maps/RusturfTunnel/scripts.pory"
-# 131 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_EventScript_WandaAndBoyfriendExit::
-# 132 "data/maps/RusturfTunnel/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, RusturfTunnel_Movement_PlayerWatchWandaExit
-# 133 "data/maps/RusturfTunnel/scripts.pory"
applymovement LOCALID_WANDA, RusturfTunnel_Movement_WandaExit
-# 134 "data/maps/RusturfTunnel/scripts.pory"
applymovement LOCALID_WANDAS_BF, RusturfTunnel_Movement_WandasBoyfriendExit
-# 135 "data/maps/RusturfTunnel/scripts.pory"
waitmovement 0
-# 136 "data/maps/RusturfTunnel/scripts.pory"
return
-# 137 "data/maps/RusturfTunnel/scripts.pory"
-# 138 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_EventScript_WandasBoyfriendNotice::
-# 139 "data/maps/RusturfTunnel/scripts.pory"
playse SE_PIN
-# 140 "data/maps/RusturfTunnel/scripts.pory"
applymovement LOCALID_WANDAS_BF, Common_Movement_ExclamationMark
-# 141 "data/maps/RusturfTunnel/scripts.pory"
waitmovement 0
-# 142 "data/maps/RusturfTunnel/scripts.pory"
applymovement LOCALID_WANDAS_BF, Common_Movement_Delay48
-# 143 "data/maps/RusturfTunnel/scripts.pory"
waitmovement 0
-# 144 "data/maps/RusturfTunnel/scripts.pory"
return
-# 145 "data/maps/RusturfTunnel/scripts.pory"
-# 146 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_Movement_WandaExit1:
-# 147 "data/maps/RusturfTunnel/scripts.pory"
walk_right
-# 148 "data/maps/RusturfTunnel/scripts.pory"
walk_right
-# 149 "data/maps/RusturfTunnel/scripts.pory"
walk_right
-# 150 "data/maps/RusturfTunnel/scripts.pory"
walk_right
-# 151 "data/maps/RusturfTunnel/scripts.pory"
walk_down
-# 152 "data/maps/RusturfTunnel/scripts.pory"
walk_down
-# 153 "data/maps/RusturfTunnel/scripts.pory"
walk_down
-# 154 "data/maps/RusturfTunnel/scripts.pory"
walk_down
-# 155 "data/maps/RusturfTunnel/scripts.pory"
walk_down
-# 156 "data/maps/RusturfTunnel/scripts.pory"
walk_down
-# 157 "data/maps/RusturfTunnel/scripts.pory"
walk_down
-# 158 "data/maps/RusturfTunnel/scripts.pory"
step_end
-# 159 "data/maps/RusturfTunnel/scripts.pory"
-# 160 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_Movement_WandaExit:
-# 161 "data/maps/RusturfTunnel/scripts.pory"
walk_right
-# 162 "data/maps/RusturfTunnel/scripts.pory"
walk_right
-# 163 "data/maps/RusturfTunnel/scripts.pory"
walk_right
-# 164 "data/maps/RusturfTunnel/scripts.pory"
walk_right
-# 165 "data/maps/RusturfTunnel/scripts.pory"
walk_down
-# 166 "data/maps/RusturfTunnel/scripts.pory"
walk_down
-# 167 "data/maps/RusturfTunnel/scripts.pory"
walk_down
-# 168 "data/maps/RusturfTunnel/scripts.pory"
walk_down
-# 169 "data/maps/RusturfTunnel/scripts.pory"
walk_down
-# 170 "data/maps/RusturfTunnel/scripts.pory"
walk_down
-# 171 "data/maps/RusturfTunnel/scripts.pory"
walk_down
-# 172 "data/maps/RusturfTunnel/scripts.pory"
step_end
-# 173 "data/maps/RusturfTunnel/scripts.pory"
-# 174 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_Movement_PlayerWatchWandaExit:
-# 175 "data/maps/RusturfTunnel/scripts.pory"
delay_8
-# 176 "data/maps/RusturfTunnel/scripts.pory"
walk_in_place_faster_up
-# 177 "data/maps/RusturfTunnel/scripts.pory"
delay_16
-# 178 "data/maps/RusturfTunnel/scripts.pory"
delay_16
-# 179 "data/maps/RusturfTunnel/scripts.pory"
walk_in_place_faster_right
-# 180 "data/maps/RusturfTunnel/scripts.pory"
step_end
-# 181 "data/maps/RusturfTunnel/scripts.pory"
-# 182 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_Movement_Unused1:
-# 183 "data/maps/RusturfTunnel/scripts.pory"
walk_left
-# 184 "data/maps/RusturfTunnel/scripts.pory"
walk_in_place_faster_right
-# 185 "data/maps/RusturfTunnel/scripts.pory"
step_end
-# 186 "data/maps/RusturfTunnel/scripts.pory"
-# 187 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_Movement_Unused2:
-# 188 "data/maps/RusturfTunnel/scripts.pory"
walk_down
-# 189 "data/maps/RusturfTunnel/scripts.pory"
walk_in_place_faster_up
-# 190 "data/maps/RusturfTunnel/scripts.pory"
delay_8
-# 191 "data/maps/RusturfTunnel/scripts.pory"
walk_in_place_faster_right
-# 192 "data/maps/RusturfTunnel/scripts.pory"
step_end
-# 193 "data/maps/RusturfTunnel/scripts.pory"
-# 194 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_Movement_Unused3:
-# 195 "data/maps/RusturfTunnel/scripts.pory"
walk_up
-# 196 "data/maps/RusturfTunnel/scripts.pory"
walk_in_place_faster_down
-# 197 "data/maps/RusturfTunnel/scripts.pory"
delay_8
-# 198 "data/maps/RusturfTunnel/scripts.pory"
walk_in_place_faster_right
-# 199 "data/maps/RusturfTunnel/scripts.pory"
step_end
-# 200 "data/maps/RusturfTunnel/scripts.pory"
-# 201 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_Movement_PlayerWatchBoyfriend1:
-# 202 "data/maps/RusturfTunnel/scripts.pory"
walk_left
-# 203 "data/maps/RusturfTunnel/scripts.pory"
walk_in_place_faster_right
-# 204 "data/maps/RusturfTunnel/scripts.pory"
step_end
-# 205 "data/maps/RusturfTunnel/scripts.pory"
-# 206 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_Movement_PlayerWatchBoyfriend:
-# 207 "data/maps/RusturfTunnel/scripts.pory"
walk_right
-# 208 "data/maps/RusturfTunnel/scripts.pory"
walk_in_place_faster_left
-# 209 "data/maps/RusturfTunnel/scripts.pory"
step_end
-# 210 "data/maps/RusturfTunnel/scripts.pory"
-# 211 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_Movement_BoyfriendFaceRight:
-# 212 "data/maps/RusturfTunnel/scripts.pory"
walk_up
-# 213 "data/maps/RusturfTunnel/scripts.pory"
walk_in_place_faster_right
-# 214 "data/maps/RusturfTunnel/scripts.pory"
step_end
-# 215 "data/maps/RusturfTunnel/scripts.pory"
-# 216 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_Movement_WandasBoyfriendExit1:
-# 217 "data/maps/RusturfTunnel/scripts.pory"
walk_right
-# 218 "data/maps/RusturfTunnel/scripts.pory"
walk_right
-# 219 "data/maps/RusturfTunnel/scripts.pory"
walk_right
-# 220 "data/maps/RusturfTunnel/scripts.pory"
walk_right
-# 221 "data/maps/RusturfTunnel/scripts.pory"
walk_right
-# 222 "data/maps/RusturfTunnel/scripts.pory"
walk_down
-# 223 "data/maps/RusturfTunnel/scripts.pory"
walk_down
-# 224 "data/maps/RusturfTunnel/scripts.pory"
walk_down
-# 225 "data/maps/RusturfTunnel/scripts.pory"
walk_down
-# 226 "data/maps/RusturfTunnel/scripts.pory"
walk_down
-# 227 "data/maps/RusturfTunnel/scripts.pory"
walk_down
-# 228 "data/maps/RusturfTunnel/scripts.pory"
walk_down
-# 229 "data/maps/RusturfTunnel/scripts.pory"
step_end
-# 230 "data/maps/RusturfTunnel/scripts.pory"
-# 231 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_Movement_WandasBoyfriendExit:
-# 232 "data/maps/RusturfTunnel/scripts.pory"
walk_up
-# 233 "data/maps/RusturfTunnel/scripts.pory"
walk_right
-# 234 "data/maps/RusturfTunnel/scripts.pory"
walk_right
-# 235 "data/maps/RusturfTunnel/scripts.pory"
walk_right
-# 236 "data/maps/RusturfTunnel/scripts.pory"
walk_right
-# 237 "data/maps/RusturfTunnel/scripts.pory"
walk_down
-# 238 "data/maps/RusturfTunnel/scripts.pory"
walk_down
-# 239 "data/maps/RusturfTunnel/scripts.pory"
walk_down
-# 240 "data/maps/RusturfTunnel/scripts.pory"
walk_down
-# 241 "data/maps/RusturfTunnel/scripts.pory"
walk_down
-# 242 "data/maps/RusturfTunnel/scripts.pory"
walk_down
-# 243 "data/maps/RusturfTunnel/scripts.pory"
walk_down
-# 244 "data/maps/RusturfTunnel/scripts.pory"
step_end
-# 245 "data/maps/RusturfTunnel/scripts.pory"
-# 246 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_Movement_WandasBoyfriendApproachPlayer:
-# 247 "data/maps/RusturfTunnel/scripts.pory"
walk_right
-# 248 "data/maps/RusturfTunnel/scripts.pory"
step_end
-# 249 "data/maps/RusturfTunnel/scripts.pory"
-# 250 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_Movement_BoyfriendApproachWanda1:
-# 251 "data/maps/RusturfTunnel/scripts.pory"
walk_in_place_fast_up
-# 252 "data/maps/RusturfTunnel/scripts.pory"
walk_in_place_fast_up
-# 253 "data/maps/RusturfTunnel/scripts.pory"
walk_fast_up
-# 254 "data/maps/RusturfTunnel/scripts.pory"
walk_fast_right
-# 255 "data/maps/RusturfTunnel/scripts.pory"
step_end
-# 256 "data/maps/RusturfTunnel/scripts.pory"
-# 257 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_Movement_BoyfriendApproachWanda:
-# 258 "data/maps/RusturfTunnel/scripts.pory"
walk_in_place_fast_right
-# 259 "data/maps/RusturfTunnel/scripts.pory"
walk_in_place_fast_right
-# 260 "data/maps/RusturfTunnel/scripts.pory"
walk_fast_right
-# 261 "data/maps/RusturfTunnel/scripts.pory"
walk_in_place_faster_up
-# 262 "data/maps/RusturfTunnel/scripts.pory"
step_end
-# 263 "data/maps/RusturfTunnel/scripts.pory"
-# 264 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_EventScript_TunnelBlockagePos1::
-# 265 "data/maps/RusturfTunnel/scripts.pory"
setvar VAR_TEMP_1, 1
-# 266 "data/maps/RusturfTunnel/scripts.pory"
end
-# 267 "data/maps/RusturfTunnel/scripts.pory"
-# 268 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_EventScript_TunnelBlockagePos2::
-# 269 "data/maps/RusturfTunnel/scripts.pory"
setvar VAR_TEMP_1, 2
-# 270 "data/maps/RusturfTunnel/scripts.pory"
end
-# 271 "data/maps/RusturfTunnel/scripts.pory"
-# 272 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_EventScript_TunnelBlockagePos3::
-# 273 "data/maps/RusturfTunnel/scripts.pory"
setvar VAR_TEMP_1, 3
-# 274 "data/maps/RusturfTunnel/scripts.pory"
end
-# 275 "data/maps/RusturfTunnel/scripts.pory"
-# 276 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_EventScript_AquaGruntBackUp::
-# 277 "data/maps/RusturfTunnel/scripts.pory"
lockall
-# 278 "data/maps/RusturfTunnel/scripts.pory"
+ setflag FLAG_SAFE_FOLLOWER_MOVEMENT
msgbox RusturfTunnel_Text_ComeAndGetSome, MSGBOX_DEFAULT
-# 279 "data/maps/RusturfTunnel/scripts.pory"
closemessage
-# 280 "data/maps/RusturfTunnel/scripts.pory"
applymovement LOCALID_GRUNT, RusturfTunnel_Movement_GruntAndPeekoBackUp
-# 281 "data/maps/RusturfTunnel/scripts.pory"
applymovement LOCALID_PEEKO, RusturfTunnel_Movement_GruntAndPeekoBackUp
-# 282 "data/maps/RusturfTunnel/scripts.pory"
waitmovement 0
-# 283 "data/maps/RusturfTunnel/scripts.pory"
copyobjectxytoperm LOCALID_GRUNT
-# 284 "data/maps/RusturfTunnel/scripts.pory"
copyobjectxytoperm LOCALID_PEEKO
-# 285 "data/maps/RusturfTunnel/scripts.pory"
setvar VAR_RUSTURF_TUNNEL_STATE, 3
-# 286 "data/maps/RusturfTunnel/scripts.pory"
releaseall
-# 287 "data/maps/RusturfTunnel/scripts.pory"
end
-# 288 "data/maps/RusturfTunnel/scripts.pory"
-# 289 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_Movement_GruntAndPeekoBackUp:
-# 290 "data/maps/RusturfTunnel/scripts.pory"
lock_facing_direction
-# 291 "data/maps/RusturfTunnel/scripts.pory"
walk_right
-# 292 "data/maps/RusturfTunnel/scripts.pory"
unlock_facing_direction
-# 293 "data/maps/RusturfTunnel/scripts.pory"
step_end
-# 294 "data/maps/RusturfTunnel/scripts.pory"
-# 295 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_EventScript_Peeko::
-# 296 "data/maps/RusturfTunnel/scripts.pory"
lock
-# 297 "data/maps/RusturfTunnel/scripts.pory"
faceplayer
-# 298 "data/maps/RusturfTunnel/scripts.pory"
waitse
-# 299 "data/maps/RusturfTunnel/scripts.pory"
playmoncry SPECIES_WINGULL, CRY_MODE_NORMAL
-# 300 "data/maps/RusturfTunnel/scripts.pory"
msgbox RusturfTunnel_Text_Peeko, MSGBOX_DEFAULT
-# 301 "data/maps/RusturfTunnel/scripts.pory"
waitmoncry
-# 302 "data/maps/RusturfTunnel/scripts.pory"
release
-# 303 "data/maps/RusturfTunnel/scripts.pory"
end
-# 304 "data/maps/RusturfTunnel/scripts.pory"
-# 305 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_EventScript_Grunt::
-# 306 "data/maps/RusturfTunnel/scripts.pory"
lock
-# 307 "data/maps/RusturfTunnel/scripts.pory"
faceplayer
-# 308 "data/maps/RusturfTunnel/scripts.pory"
playbgm MUS_ENCOUNTER_AQUA, FALSE
-# 309 "data/maps/RusturfTunnel/scripts.pory"
msgbox RusturfTunnel_Text_GruntIntro, MSGBOX_DEFAULT
-# 310 "data/maps/RusturfTunnel/scripts.pory"
trainerbattle_no_intro TRAINER_GRUNT_RUSTURF_TUNNEL, RusturfTunnel_Text_GruntDefeat
-# 311 "data/maps/RusturfTunnel/scripts.pory"
msgbox RusturfTunnel_Text_GruntTakePackage, MSGBOX_DEFAULT
-# 312 "data/maps/RusturfTunnel/scripts.pory"
giveitem ITEM_DEVON_PARTS
-# 313 "data/maps/RusturfTunnel/scripts.pory"
closemessage
-# 314 "data/maps/RusturfTunnel/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, RusturfTunnel_Movement_PushPlayerAsideForGrunt
-# 315 "data/maps/RusturfTunnel/scripts.pory"
applymovement LOCALID_GRUNT, RusturfTunnel_Movement_GruntEscape
-# 316 "data/maps/RusturfTunnel/scripts.pory"
waitmovement 0
-# 317 "data/maps/RusturfTunnel/scripts.pory"
removeobject LOCALID_GRUNT
-# 318 "data/maps/RusturfTunnel/scripts.pory"
delay 50
-# 319 "data/maps/RusturfTunnel/scripts.pory"
addobject LOCALID_BRINEY
-# 320 "data/maps/RusturfTunnel/scripts.pory"
applymovement LOCALID_BRINEY, RusturfTunnel_Movement_BrineyApproachPeeko1
-# 321 "data/maps/RusturfTunnel/scripts.pory"
waitmovement 0
-# 322 "data/maps/RusturfTunnel/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, RusturfTunnel_Movement_PlayerMoveAsideForBriney
-# 323 "data/maps/RusturfTunnel/scripts.pory"
applymovement LOCALID_BRINEY, RusturfTunnel_Movement_BrineyApproachPeeko2
-# 324 "data/maps/RusturfTunnel/scripts.pory"
waitmovement 0
-# 325 "data/maps/RusturfTunnel/scripts.pory"
msgbox RusturfTunnel_Text_PeekoGladToSeeYouSafe, MSGBOX_DEFAULT
-# 326 "data/maps/RusturfTunnel/scripts.pory"
applymovement LOCALID_BRINEY, Common_Movement_FacePlayer
-# 327 "data/maps/RusturfTunnel/scripts.pory"
waitmovement 0
-# 328 "data/maps/RusturfTunnel/scripts.pory"
message RusturfTunnel_Text_ThankYouLetsGoHomePeeko
-# 329 "data/maps/RusturfTunnel/scripts.pory"
waitmessage
-# 330 "data/maps/RusturfTunnel/scripts.pory"
waitse
-# 331 "data/maps/RusturfTunnel/scripts.pory"
playmoncry SPECIES_WINGULL, CRY_MODE_NORMAL
-# 332 "data/maps/RusturfTunnel/scripts.pory"
waitbuttonpress
-# 333 "data/maps/RusturfTunnel/scripts.pory"
waitmoncry
-# 334 "data/maps/RusturfTunnel/scripts.pory"
closemessage
-# 335 "data/maps/RusturfTunnel/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, RusturfTunnel_Movement_PlayerWatchBrineyExit
-# 336 "data/maps/RusturfTunnel/scripts.pory"
applymovement LOCALID_BRINEY, RusturfTunnel_Movement_BrineyExit
-# 337 "data/maps/RusturfTunnel/scripts.pory"
applymovement LOCALID_PEEKO, RusturfTunnel_Movement_PeekoExit
-# 338 "data/maps/RusturfTunnel/scripts.pory"
waitmovement 0
-# 339 "data/maps/RusturfTunnel/scripts.pory"
removeobject LOCALID_BRINEY
-# 340 "data/maps/RusturfTunnel/scripts.pory"
removeobject LOCALID_PEEKO
-# 341 "data/maps/RusturfTunnel/scripts.pory"
clearflag FLAG_DEVON_GOODS_STOLEN
-# 342 "data/maps/RusturfTunnel/scripts.pory"
setflag FLAG_RECOVERED_DEVON_GOODS
-# 343 "data/maps/RusturfTunnel/scripts.pory"
setvar VAR_RUSTBORO_CITY_STATE, 4
-# 344 "data/maps/RusturfTunnel/scripts.pory"
setvar VAR_BRINEY_HOUSE_STATE, 1
-# 345 "data/maps/RusturfTunnel/scripts.pory"
setflag FLAG_HIDE_ROUTE_116_MR_BRINEY
-# 346 "data/maps/RusturfTunnel/scripts.pory"
release
-# 347 "data/maps/RusturfTunnel/scripts.pory"
end
-# 348 "data/maps/RusturfTunnel/scripts.pory"
-# 349 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_Movement_PushPlayerAsideForGrunt:
-# 350 "data/maps/RusturfTunnel/scripts.pory"
face_down
-# 351 "data/maps/RusturfTunnel/scripts.pory"
lock_facing_direction
-# 352 "data/maps/RusturfTunnel/scripts.pory"
walk_up
-# 353 "data/maps/RusturfTunnel/scripts.pory"
unlock_facing_direction
-# 354 "data/maps/RusturfTunnel/scripts.pory"
walk_in_place_faster_left
-# 355 "data/maps/RusturfTunnel/scripts.pory"
step_end
-# 356 "data/maps/RusturfTunnel/scripts.pory"
-# 357 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_Movement_PlayerMoveAsideForBriney:
-# 358 "data/maps/RusturfTunnel/scripts.pory"
walk_down
-# 359 "data/maps/RusturfTunnel/scripts.pory"
walk_in_place_faster_up
-# 360 "data/maps/RusturfTunnel/scripts.pory"
step_end
-# 361 "data/maps/RusturfTunnel/scripts.pory"
-# 362 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_Movement_GruntEscape:
-# 363 "data/maps/RusturfTunnel/scripts.pory"
walk_fast_left
-# 364 "data/maps/RusturfTunnel/scripts.pory"
walk_fast_left
-# 365 "data/maps/RusturfTunnel/scripts.pory"
walk_fast_left
-# 366 "data/maps/RusturfTunnel/scripts.pory"
walk_fast_left
-# 367 "data/maps/RusturfTunnel/scripts.pory"
walk_fast_left
-# 368 "data/maps/RusturfTunnel/scripts.pory"
walk_fast_left
-# 369 "data/maps/RusturfTunnel/scripts.pory"
walk_fast_left
-# 370 "data/maps/RusturfTunnel/scripts.pory"
walk_fast_left
-# 371 "data/maps/RusturfTunnel/scripts.pory"
walk_fast_left
-# 372 "data/maps/RusturfTunnel/scripts.pory"
step_end
-# 373 "data/maps/RusturfTunnel/scripts.pory"
-# 374 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_Movement_BrineyApproachPeeko1:
-# 375 "data/maps/RusturfTunnel/scripts.pory"
walk_right
-# 376 "data/maps/RusturfTunnel/scripts.pory"
walk_right
-# 377 "data/maps/RusturfTunnel/scripts.pory"
walk_right
-# 378 "data/maps/RusturfTunnel/scripts.pory"
walk_right
-# 379 "data/maps/RusturfTunnel/scripts.pory"
walk_right
-# 380 "data/maps/RusturfTunnel/scripts.pory"
walk_right
-# 381 "data/maps/RusturfTunnel/scripts.pory"
walk_right
-# 382 "data/maps/RusturfTunnel/scripts.pory"
step_end
-# 383 "data/maps/RusturfTunnel/scripts.pory"
-# 384 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_Movement_BrineyExit:
-# 385 "data/maps/RusturfTunnel/scripts.pory"
walk_left
-# 386 "data/maps/RusturfTunnel/scripts.pory"
walk_left
-# 387 "data/maps/RusturfTunnel/scripts.pory"
walk_left
-# 388 "data/maps/RusturfTunnel/scripts.pory"
walk_left
-# 389 "data/maps/RusturfTunnel/scripts.pory"
walk_left
-# 390 "data/maps/RusturfTunnel/scripts.pory"
walk_left
-# 391 "data/maps/RusturfTunnel/scripts.pory"
walk_left
-# 392 "data/maps/RusturfTunnel/scripts.pory"
walk_left
-# 393 "data/maps/RusturfTunnel/scripts.pory"
walk_left
-# 394 "data/maps/RusturfTunnel/scripts.pory"
walk_left
-# 395 "data/maps/RusturfTunnel/scripts.pory"
walk_left
-# 396 "data/maps/RusturfTunnel/scripts.pory"
step_end
-# 397 "data/maps/RusturfTunnel/scripts.pory"
-# 398 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_Movement_PlayerWatchBrineyExit:
-# 399 "data/maps/RusturfTunnel/scripts.pory"
delay_16
-# 400 "data/maps/RusturfTunnel/scripts.pory"
delay_8
-# 401 "data/maps/RusturfTunnel/scripts.pory"
delay_4
-# 402 "data/maps/RusturfTunnel/scripts.pory"
walk_in_place_faster_left
-# 403 "data/maps/RusturfTunnel/scripts.pory"
step_end
-# 404 "data/maps/RusturfTunnel/scripts.pory"
-# 405 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_Movement_BrineyApproachPeeko2:
-# 406 "data/maps/RusturfTunnel/scripts.pory"
delay_16
-# 407 "data/maps/RusturfTunnel/scripts.pory"
walk_right
-# 408 "data/maps/RusturfTunnel/scripts.pory"
step_end
-# 409 "data/maps/RusturfTunnel/scripts.pory"
-# 410 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_Movement_PeekoExit:
-# 411 "data/maps/RusturfTunnel/scripts.pory"
walk_left
-# 412 "data/maps/RusturfTunnel/scripts.pory"
walk_left
-# 413 "data/maps/RusturfTunnel/scripts.pory"
walk_left
-# 414 "data/maps/RusturfTunnel/scripts.pory"
walk_left
-# 415 "data/maps/RusturfTunnel/scripts.pory"
walk_left
-# 416 "data/maps/RusturfTunnel/scripts.pory"
walk_left
-# 417 "data/maps/RusturfTunnel/scripts.pory"
walk_left
-# 418 "data/maps/RusturfTunnel/scripts.pory"
walk_left
-# 419 "data/maps/RusturfTunnel/scripts.pory"
walk_left
-# 420 "data/maps/RusturfTunnel/scripts.pory"
step_end
-# 421 "data/maps/RusturfTunnel/scripts.pory"
-# 422 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_EventScript_Mike::
-# 423 "data/maps/RusturfTunnel/scripts.pory"
trainerbattle_single TRAINER_MIKE_2, RusturfTunnel_Text_MikeIntro, RusturfTunnel_Text_MikeDefeat
-# 424 "data/maps/RusturfTunnel/scripts.pory"
msgbox RusturfTunnel_Text_MikePostBattle, MSGBOX_AUTOCLOSE
-# 425 "data/maps/RusturfTunnel/scripts.pory"
end
-# 426 "data/maps/RusturfTunnel/scripts.pory"
-# 427 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_Text_ComeAndGetSome:
-# 428 "data/maps/RusturfTunnel/scripts.pory"
.string "What, are you coming?\n"
-# 429 "data/maps/RusturfTunnel/scripts.pory"
.string "Come and get some, then!$"
-# 430 "data/maps/RusturfTunnel/scripts.pory"
-# 431 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_Text_Peeko:
-# 432 "data/maps/RusturfTunnel/scripts.pory"
.string "PEEKO: Pii pihyoh!$"
-# 433 "data/maps/RusturfTunnel/scripts.pory"
-# 434 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_Text_GruntIntro:
-# 435 "data/maps/RusturfTunnel/scripts.pory"
.string "Grah, keelhaul it all!\p"
-# 436 "data/maps/RusturfTunnel/scripts.pory"
.string "That hostage POKéMON turned out to\n"
-# 437 "data/maps/RusturfTunnel/scripts.pory"
.string "be worthless!\p"
-# 438 "data/maps/RusturfTunnel/scripts.pory"
.string "And to think I made a getaway…\n"
-# 439 "data/maps/RusturfTunnel/scripts.pory"
.string "In this tunnel to nowhere!\p"
-# 440 "data/maps/RusturfTunnel/scripts.pory"
.string "Hey! You!\n"
-# 441 "data/maps/RusturfTunnel/scripts.pory"
.string "So you want to battle me?$"
-# 442 "data/maps/RusturfTunnel/scripts.pory"
-# 443 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_Text_GruntDefeat:
-# 444 "data/maps/RusturfTunnel/scripts.pory"
.string "Urrrggh! My career in crime comes to\n"
-# 445 "data/maps/RusturfTunnel/scripts.pory"
.string "a dead end!$"
-# 446 "data/maps/RusturfTunnel/scripts.pory"
-# 447 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_Text_GruntTakePackage:
-# 448 "data/maps/RusturfTunnel/scripts.pory"
.string "This is plain not right…\p"
-# 449 "data/maps/RusturfTunnel/scripts.pory"
.string "The BOSS told me this would be a\n"
-# 450 "data/maps/RusturfTunnel/scripts.pory"
.string "slick-and-easy job to pull.\p"
-# 451 "data/maps/RusturfTunnel/scripts.pory"
.string "All I had to do was steal some package\n"
-# 452 "data/maps/RusturfTunnel/scripts.pory"
.string "from DEVON.\p"
-# 453 "data/maps/RusturfTunnel/scripts.pory"
.string "Tch!\n"
-# 454 "data/maps/RusturfTunnel/scripts.pory"
.string "You want it back that badly, take it!$"
-# 455 "data/maps/RusturfTunnel/scripts.pory"
-# 456 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_Text_PeekoGladToSeeYouSafe:
-# 457 "data/maps/RusturfTunnel/scripts.pory"
.string "PEEKO!\n"
-# 458 "data/maps/RusturfTunnel/scripts.pory"
.string "Am I glad to see you're safe!$"
-# 459 "data/maps/RusturfTunnel/scripts.pory"
-# 460 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_Text_ThankYouLetsGoHomePeeko:
-# 461 "data/maps/RusturfTunnel/scripts.pory"
.string "PEEKO owes her life to you!\p"
-# 462 "data/maps/RusturfTunnel/scripts.pory"
.string "They call me MR. BRINEY.\n"
-# 463 "data/maps/RusturfTunnel/scripts.pory"
.string "And, you are?\p"
-# 464 "data/maps/RusturfTunnel/scripts.pory"
.string "… … … … … … … …\n"
-# 465 "data/maps/RusturfTunnel/scripts.pory"
.string "… … … … … … … …\p"
-# 466 "data/maps/RusturfTunnel/scripts.pory"
.string "Ah, so you are {PLAYER}{KUN}!\n"
-# 467 "data/maps/RusturfTunnel/scripts.pory"
.string "I sincerely thank you!\p"
-# 468 "data/maps/RusturfTunnel/scripts.pory"
.string "Now, if there's anything that troubles\n"
-# 469 "data/maps/RusturfTunnel/scripts.pory"
.string "you, don't hesitate to tell me!\p"
-# 470 "data/maps/RusturfTunnel/scripts.pory"
.string "You can usually find me in my cottage\n"
-# 471 "data/maps/RusturfTunnel/scripts.pory"
.string "by the sea near PETALBURG WOODS.\p"
-# 472 "data/maps/RusturfTunnel/scripts.pory"
.string "Come, PEEKO, we should make our way\n"
-# 473 "data/maps/RusturfTunnel/scripts.pory"
.string "home.\p"
-# 474 "data/maps/RusturfTunnel/scripts.pory"
.string "PEEKO: Pihyoh!$"
-# 475 "data/maps/RusturfTunnel/scripts.pory"
-# 476 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_Text_WhyCantTheyKeepDigging:
-# 477 "data/maps/RusturfTunnel/scripts.pory"
.string "… …\p"
-# 478 "data/maps/RusturfTunnel/scripts.pory"
.string "Why can't they keep digging?\n"
-# 479 "data/maps/RusturfTunnel/scripts.pory"
.string "Is the bedrock too hard?\p"
-# 480 "data/maps/RusturfTunnel/scripts.pory"
.string "My beloved awaits me in VERDANTURF\n"
-# 481 "data/maps/RusturfTunnel/scripts.pory"
.string "TOWN just beyond here…\p"
-# 482 "data/maps/RusturfTunnel/scripts.pory"
.string "If RUSTBORO and VERDANTURF were\n"
-# 483 "data/maps/RusturfTunnel/scripts.pory"
.string "joined by this tunnel, I could visit\l"
-# 484 "data/maps/RusturfTunnel/scripts.pory"
.string "her every day…\p"
-# 485 "data/maps/RusturfTunnel/scripts.pory"
.string "But this…\n"
-# 486 "data/maps/RusturfTunnel/scripts.pory"
.string "What am I to do?$"
-# 487 "data/maps/RusturfTunnel/scripts.pory"
-# 488 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_Text_ToGetToVerdanturf:
-# 489 "data/maps/RusturfTunnel/scripts.pory"
.string "To get from RUSTBORO to VERDANTURF,\n"
-# 490 "data/maps/RusturfTunnel/scripts.pory"
.string "you need to go to DEWFORD, then pass\l"
-# 491 "data/maps/RusturfTunnel/scripts.pory"
.string "through SLATEPORT and MAUVILLE…$"
-# 492 "data/maps/RusturfTunnel/scripts.pory"
-# 493 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_Text_YouShatteredBoulderTakeHM:
-# 494 "data/maps/RusturfTunnel/scripts.pory"
.string "Wow! You shattered that boulder\n"
-# 495 "data/maps/RusturfTunnel/scripts.pory"
.string "blocking the way.\p"
-# 496 "data/maps/RusturfTunnel/scripts.pory"
.string "To show you how much I appreciate it,\n"
-# 497 "data/maps/RusturfTunnel/scripts.pory"
.string "I'd like you to have this HM.$"
-# 498 "data/maps/RusturfTunnel/scripts.pory"
-# 499 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_Text_ExplainStrength:
-# 500 "data/maps/RusturfTunnel/scripts.pory"
.string "That HM contains STRENGTH.\p"
-# 501 "data/maps/RusturfTunnel/scripts.pory"
.string "If a muscular POKéMON were to learn\n"
-# 502 "data/maps/RusturfTunnel/scripts.pory"
.string "that, it would be able to move even\l"
-# 503 "data/maps/RusturfTunnel/scripts.pory"
.string "large boulders.$"
-# 504 "data/maps/RusturfTunnel/scripts.pory"
-# 505 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_Text_WandaReunion:
-# 506 "data/maps/RusturfTunnel/scripts.pory"
.string "WANDA!\n"
-# 507 "data/maps/RusturfTunnel/scripts.pory"
.string "Now I can see you anytime!\p"
-# 508 "data/maps/RusturfTunnel/scripts.pory"
.string "WANDA: That's…wonderful.\p"
-# 509 "data/maps/RusturfTunnel/scripts.pory"
.string "Please, take some rest at my home.$"
-# 510 "data/maps/RusturfTunnel/scripts.pory"
-# 511 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_Text_BoyfriendOnOtherSideOfRock:
-# 512 "data/maps/RusturfTunnel/scripts.pory"
.string "On the other side of this rock…\n"
-# 513 "data/maps/RusturfTunnel/scripts.pory"
.string "My boyfriend is there.\p"
-# 514 "data/maps/RusturfTunnel/scripts.pory"
.string "He… He's not just digging the tunnel\n"
-# 515 "data/maps/RusturfTunnel/scripts.pory"
.string "to come see me.\p"
-# 516 "data/maps/RusturfTunnel/scripts.pory"
.string "He works his hands raw and rough\n"
-# 517 "data/maps/RusturfTunnel/scripts.pory"
.string "for the benefit of everyone.$"
-# 518 "data/maps/RusturfTunnel/scripts.pory"
-# 519 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_Text_MikeIntro:
-# 520 "data/maps/RusturfTunnel/scripts.pory"
.string "What do you call a wild man up in the\n"
-# 521 "data/maps/RusturfTunnel/scripts.pory"
.string "mountains? A mountain man, right?\p"
-# 522 "data/maps/RusturfTunnel/scripts.pory"
.string "So why don't they call a POKéMON in\n"
-# 523 "data/maps/RusturfTunnel/scripts.pory"
.string "the mountains a mountain POKéMON?$"
-# 524 "data/maps/RusturfTunnel/scripts.pory"
-# 525 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_Text_MikeDefeat:
-# 526 "data/maps/RusturfTunnel/scripts.pory"
.string "My POKéMON…\n"
-# 527 "data/maps/RusturfTunnel/scripts.pory"
.string "Ran out of power…$"
-# 528 "data/maps/RusturfTunnel/scripts.pory"
-# 529 "data/maps/RusturfTunnel/scripts.pory"
RusturfTunnel_Text_MikePostBattle:
-# 530 "data/maps/RusturfTunnel/scripts.pory"
.string "They halted development here to\n"
-# 531 "data/maps/RusturfTunnel/scripts.pory"
.string "protect POKéMON, right?\l"
-# 532 "data/maps/RusturfTunnel/scripts.pory"
.string "There's a feel-good story!$"
+
diff --git a/data/maps/SlateportCity_OceanicMuseum_2F/scripts.inc b/data/maps/SlateportCity_OceanicMuseum_2F/scripts.inc
index 8ad77c189ca1..3565b958099d 100644
--- a/data/maps/SlateportCity_OceanicMuseum_2F/scripts.inc
+++ b/data/maps/SlateportCity_OceanicMuseum_2F/scripts.inc
@@ -1,880 +1,441 @@
-# 1 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-
-# 2 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.set LOCALID_CAPT_STERN, 1
-# 3 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.set LOCALID_ARCHIE, 2
-# 4 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.set LOCALID_GRUNT_1, 3
-# 5 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.set LOCALID_GRUNT_2, 4
-# 6 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 7 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_MapScripts::
-# 8 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.byte 0
-# 9 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 10 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_EventScript_CaptStern::
-# 11 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
lock
-# 12 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
faceplayer
-# 13 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
msgbox SlateportCity_OceanicMuseum_2F_Text_ThankYouForTheParts, MSGBOX_DEFAULT
-# 14 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
closemessage
-# 15 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
playbgm MUS_ENCOUNTER_AQUA, TRUE
-# 16 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
addobject LOCALID_GRUNT_1
-# 17 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
applymovement LOCALID_GRUNT_1, SlateportCity_OceanicMuseum_2F_Movement_FirstGruntEnter
-# 18 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
waitmovement 0
-# 19 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
addobject LOCALID_GRUNT_2
-# 20 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
applymovement LOCALID_GRUNT_2, SlateportCity_OceanicMuseum_2F_Movement_SecondGruntEnter
-# 21 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
waitmovement 0
-# 22 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
applymovement LOCALID_GRUNT_1, SlateportCity_OceanicMuseum_2F_Movement_FirstGruntApproach
-# 23 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
applymovement LOCALID_GRUNT_2, SlateportCity_OceanicMuseum_2F_Movement_SecondGruntApproach
-# 24 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
waitmovement 0
-# 25 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
call_if_eq VAR_FACING, DIR_SOUTH, SlateportCity_OceanicMuseum_2F_EventScript_PlayerFaceGrunts
-# 26 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
call_if_eq VAR_FACING, DIR_EAST, SlateportCity_OceanicMuseum_2F_EventScript_PlayerFaceGrunts
-# 27 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
msgbox SlateportCity_OceanicMuseum_2F_Text_WellTakeThoseParts, MSGBOX_DEFAULT
-# 28 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
call_if_ne VAR_FACING, DIR_EAST, SlateportCity_OceanicMuseum_2F_EventScript_SternFaceGrunts
-# 29 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
msgbox SlateportCity_OceanicMuseum_2F_Text_SternWhoAreYou, MSGBOX_DEFAULT
-# 30 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
msgbox SlateportCity_OceanicMuseum_2F_Text_WereTeamAqua, MSGBOX_DEFAULT
-# 31 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
closemessage
-# 32 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
applymovement LOCALID_GRUNT_2, SlateportCity_OceanicMuseum_2F_Movement_GruntApproachToBattle
-# 33 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
waitmovement 0
-# 34 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
call_if_eq VAR_FACING, DIR_SOUTH, SlateportCity_OceanicMuseum_2F_EventScript_PlayerApproachGruntSouth
-# 35 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
call_if_eq VAR_FACING, DIR_WEST, SlateportCity_OceanicMuseum_2F_EventScript_PlayerApproachGruntWest
-# 36 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
trainerbattle_no_intro TRAINER_GRUNT_MUSEUM_1, SlateportCity_OceanicMuseum_2F_Text_Grunt1Defeat
-# 37 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
msgbox SlateportCity_OceanicMuseum_2F_Text_BossGoingToBeFurious, MSGBOX_DEFAULT
-# 38 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
closemessage
-# 39 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
applymovement LOCALID_GRUNT_2, SlateportCity_OceanicMuseum_2F_Movement_GruntDefeated
-# 40 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
waitmovement 0
-# 41 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
applymovement LOCALID_GRUNT_1, SlateportCity_OceanicMuseum_2F_Movement_GruntApproachToBattle
-# 42 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
waitmovement 0
-# 43 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
msgbox SlateportCity_OceanicMuseum_2F_Text_LetMeTakeCareOfThis, MSGBOX_DEFAULT
-# 44 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
trainerbattle_no_intro TRAINER_GRUNT_MUSEUM_2, SlateportCity_OceanicMuseum_2F_Text_Grunt2Defeat
-# 45 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
applymovement LOCALID_GRUNT_1, SlateportCity_OceanicMuseum_2F_Movement_GruntDefeated
-# 46 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
waitmovement 0
-# 47 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
applymovement LOCALID_GRUNT_1, Common_Movement_WalkInPlaceFasterDown
-# 48 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
applymovement LOCALID_GRUNT_2, Common_Movement_WalkInPlaceFasterUp
-# 49 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
waitmovement 0
-# 50 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
msgbox SlateportCity_OceanicMuseum_2F_Text_MeddlingKid, MSGBOX_DEFAULT
-# 51 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
closemessage
-# 52 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
delay 35
-# 53 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
addobject LOCALID_ARCHIE
-# 54 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
applymovement LOCALID_ARCHIE, SlateportCity_OceanicMuseum_2F_Movement_ArchieEnter
-# 55 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
applymovement LOCALID_GRUNT_2, SlateportCity_OceanicMuseum_2F_Movement_GruntMoveForArchie
-# 56 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
waitmovement 0
-# 57 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
msgbox SlateportCity_OceanicMuseum_2F_Text_CameToSeeWhatsTakingSoLong, MSGBOX_DEFAULT
-# 58 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
closemessage
-# 59 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
applymovement LOCALID_ARCHIE, SlateportCity_OceanicMuseum_2F_Movement_ArchieApproachPlayer
-# 60 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
waitmovement 0
-# 61 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
msgbox SlateportCity_OceanicMuseum_2F_Text_ArchieWarning, MSGBOX_DEFAULT
-# 62 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
closemessage
-# 63 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
savebgm MUS_DUMMY
-# 64 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
fadedefaultbgm
-# 65 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
fadescreen FADE_TO_BLACK
-# 66 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
removeobject LOCALID_ARCHIE
-# 67 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
removeobject LOCALID_GRUNT_1
-# 68 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
removeobject LOCALID_GRUNT_2
-# 69 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
fadescreen FADE_FROM_BLACK
-# 70 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
delay 30
-# 71 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
setflag FLAG_HIDE_SLATEPORT_CITY_OCEANIC_MUSEUM_AQUA_GRUNTS
-# 72 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterRight
-# 73 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
waitmovement 0
-# 74 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
msgbox SlateportCity_OceanicMuseum_2F_Text_SternThankYouForSavingUs, MSGBOX_DEFAULT
-# 75 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
setvar VAR_0x8004, ITEM_DEVON_PARTS
-# 76 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
call Common_EventScript_PlayerHandedOverTheItem
-# 77 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
msgbox SlateportCity_OceanicMuseum_2F_Text_SternIveGotToGo, MSGBOX_DEFAULT
-# 78 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
closemessage
-# 79 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
fadescreen FADE_TO_BLACK
-# 80 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
playfanfare MUS_HEAL
-# 81 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
waitfanfare
-# 82 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
special HealPlayerParty
-# 83 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
+ callnative UpdateFollowingPokemon
removeobject LOCALID_CAPT_STERN
-# 84 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
setflag FLAG_HIDE_ROUTE_110_TEAM_AQUA
-# 85 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
call_if_eq VAR_REGISTER_BIRCH_STATE, 0, SlateportCity_OceanicMuseum_2F_EventScript_ReadyRegisterBirch
-# 86 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
setflag FLAG_DELIVERED_DEVON_GOODS
-# 87 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
clearflag FLAG_HIDE_ROUTE_116_DEVON_EMPLOYEE
-# 88 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
setflag FLAG_HIDE_RUSTBORO_CITY_DEVON_CORP_3F_EMPLOYEE
-# 89 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
setvar VAR_SLATEPORT_OUTSIDE_MUSEUM_STATE, 1
-# 90 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
fadescreen FADE_FROM_BLACK
-# 91 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
release
-# 92 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
end
-# 93 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 94 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_EventScript_ReadyRegisterBirch::
-# 95 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
setvar VAR_REGISTER_BIRCH_STATE, 1
-# 96 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
return
-# 97 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 98 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_EventScript_PlayerFaceGrunts::
-# 99 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_WalkInPlaceFasterLeft
-# 100 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
waitmovement 0
-# 101 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
return
-# 102 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 103 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_EventScript_SternFaceGrunts::
-# 104 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
applymovement LOCALID_CAPT_STERN, Common_Movement_WalkInPlaceFasterLeft
-# 105 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
waitmovement 0
-# 106 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
return
-# 107 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 108 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_EventScript_PlayerApproachGruntSouth::
-# 109 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, SlateportCity_OceanicMuseum_2F_Movement_PlayerApproachGruntSouth
-# 110 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
waitmovement 0
-# 111 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
return
-# 112 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 113 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_EventScript_PlayerApproachGruntWest::
-# 114 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, SlateportCity_OceanicMuseum_2F_Movement_PlayerApproachGruntWest
-# 115 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
waitmovement 0
-# 116 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
return
-# 117 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 118 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_Movement_PlayerApproachGruntSouth:
-# 119 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_left
-# 120 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_down
-# 121 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_in_place_faster_left
-# 122 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
step_end
-# 123 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 124 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_Movement_PlayerApproachGruntWest:
-# 125 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_up
-# 126 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_left
-# 127 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_left
-# 128 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_down
-# 129 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_in_place_faster_left
-# 130 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
step_end
-# 131 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 132 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_Movement_Unused:
-# 133 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_up
-# 134 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_left
-# 135 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_left
-# 136 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_left
-# 137 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_left
-# 138 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_left
-# 139 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_up
-# 140 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_up
-# 141 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_left
-# 142 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_left
-# 143 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_up
-# 144 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_up
-# 145 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
delay_8
-# 146 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
step_end
-# 147 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 148 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_Movement_ArchieApproachPlayer:
-# 149 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_right
-# 150 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
step_end
-# 151 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 152 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_Movement_ArchieEnter:
-# 153 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_down
-# 154 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_down
-# 155 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_down
-# 156 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_down
-# 157 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_down
-# 158 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_right
-# 159 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_right
-# 160 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_right
-# 161 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_right
-# 162 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
step_end
-# 163 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 164 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_Movement_GruntApproachToBattle:
-# 165 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_right
-# 166 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
step_end
-# 167 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 168 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_Movement_FirstGruntEnter:
-# 169 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_down
-# 170 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_right
-# 171 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_in_place_faster_down
-# 172 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
step_end
-# 173 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 174 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_Movement_FirstGruntApproach:
-# 175 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_down
-# 176 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_down
-# 177 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_down
-# 178 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_right
-# 179 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_right
-# 180 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_right
-# 181 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
step_end
-# 182 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 183 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_Movement_GruntDefeated:
-# 184 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
lock_facing_direction
-# 185 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_left
-# 186 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
unlock_facing_direction
-# 187 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
step_end
-# 188 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 189 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_Movement_SecondGruntEnter:
-# 190 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_down
-# 191 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
step_end
-# 192 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 193 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_Movement_SecondGruntApproach:
-# 194 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_down
-# 195 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_down
-# 196 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_down
-# 197 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_down
-# 198 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_right
-# 199 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_right
-# 200 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_right
-# 201 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_right
-# 202 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
step_end
-# 203 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 204 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_Movement_GruntMoveForArchie:
-# 205 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
delay_16
-# 206 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
delay_16
-# 207 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
delay_16
-# 208 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
delay_16
-# 209 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
delay_16
-# 210 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
delay_16
-# 211 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
delay_16
-# 212 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
delay_16
-# 213 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
delay_8
-# 214 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_fast_down
-# 215 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
walk_in_place_faster_up
-# 216 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
step_end
-# 217 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 218 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_EventScript_WaterQualitySample1::
-# 219 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
msgbox SlateportCity_OceanicMuseum_2F_Text_WaterQualitySample1, MSGBOX_SIGN
-# 220 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
end
-# 221 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 222 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_EventScript_WaterQualitySample2::
-# 223 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
msgbox SlateportCity_OceanicMuseum_2F_Text_WaterQualitySample2, MSGBOX_SIGN
-# 224 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
end
-# 225 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 226 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_EventScript_PressureExperiment::
-# 227 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
msgbox SlateportCity_OceanicMuseum_2F_Text_PressureExperiment, MSGBOX_SIGN
-# 228 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
end
-# 229 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 230 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_EventScript_HoennModel::
-# 231 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
msgbox SlateportCity_OceanicMuseum_2F_Text_HoennModel, MSGBOX_SIGN
-# 232 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
end
-# 233 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 234 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_EventScript_DeepSeawaterDisplay::
-# 235 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
msgbox SlateportCity_OceanicMuseum_2F_Text_DeepSeawaterDisplay, MSGBOX_SIGN
-# 236 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
end
-# 237 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 238 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_EventScript_SurfaceSeawaterDisplay::
-# 239 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
msgbox SlateportCity_OceanicMuseum_2F_Text_SurfaceSeawaterDisplay, MSGBOX_SIGN
-# 240 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
end
-# 241 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 242 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_EventScript_SSTidalReplica::
-# 243 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
msgbox SlateportCity_OceanicMuseum_2F_Text_SSTidalReplica, MSGBOX_SIGN
-# 244 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
end
-# 245 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 246 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_EventScript_SubmarineReplica::
-# 247 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
msgbox SlateportCity_OceanicMuseum_2F_Text_SubmarineReplica, MSGBOX_SIGN
-# 248 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
end
-# 249 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 250 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_EventScript_SubmersibleReplica::
-# 251 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
msgbox SlateportCity_OceanicMuseum_2F_Text_SumbersibleReplica, MSGBOX_SIGN
-# 252 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
end
-# 253 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 254 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_EventScript_SSAnneReplica::
-# 255 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
msgbox SlateportCity_OceanicMuseum_2F_Text_SSAnneReplica, MSGBOX_SIGN
-# 256 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
end
-# 257 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 258 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_EventScript_MuseumPatron1::
-# 259 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
msgbox SlateportCity_OceanicMuseum_2F_Text_RemindsMeOfAbandonedShip, MSGBOX_NPC
-# 260 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
end
-# 261 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 262 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_EventScript_MuseumPatron2::
-# 263 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
msgbox SlateportCity_OceanicMuseum_2F_Text_DontRunInMuseum, MSGBOX_NPC
-# 264 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
end
-# 265 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 266 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_EventScript_MuseumPatron3::
-# 267 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
lock
-# 268 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
faceplayer
-# 269 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
msgbox SlateportCity_OceanicMuseum_2F_Text_WantToRideSubmarine, MSGBOX_DEFAULT
-# 270 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
closemessage
-# 271 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
applymovement VAR_LAST_TALKED, Common_Movement_FaceOriginalDirection
-# 272 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
waitmovement 0
-# 273 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
release
-# 274 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
end
-# 275 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 276 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_Text_ThankYouForTheParts:
-# 277 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "Yes? If you're looking for STERN,\n"
-# 278 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "that would be me.\p"
-# 279 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "Ah! Those must be the parts I ordered\n"
-# 280 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "from MR. STONE of DEVON.\p"
-# 281 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "Thank you! That's great!\n"
-# 282 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "We can prepare for our expedition now.$"
-# 283 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 284 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_Text_WellTakeThoseParts:
-# 285 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "Hehehe, hold it!\n"
-# 286 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "We'll take those parts!$"
-# 287 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 288 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_Text_SternWhoAreYou:
-# 289 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "CAPT. STERN: Wh-what?\n"
-# 290 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "Who are you people?$"
-# 291 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 292 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_Text_WereTeamAqua:
-# 293 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "We're TEAM AQUA!\p"
-# 294 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "Our BOSS wants those parts!\n"
-# 295 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "Shut your yap and fork them over!$"
-# 296 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 297 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_Text_Grunt1Defeat:
-# 298 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "Awaaaah!\n"
-# 299 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "A kid beat me!$"
-# 300 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 301 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_Text_BossGoingToBeFurious:
-# 302 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "Oh, man, what a disaster…\n"
-# 303 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "The BOSS is going to be furious…$"
-# 304 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 305 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_Text_LetMeTakeCareOfThis:
-# 306 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "Humph, sniveling wimp!\n"
-# 307 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "Let me take care of this!$"
-# 308 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 309 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_Text_Grunt2Defeat:
-# 310 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "What?!\n"
-# 311 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "I lost, too!$"
-# 312 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 313 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_Text_MeddlingKid:
-# 314 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "Now what? If we don't get the parts,\n"
-# 315 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "we're in for it!\p"
-# 316 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "Arrgh, I didn't count on being meddled\n"
-# 317 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "with by some meddling kid!$"
-# 318 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 319 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_Text_CameToSeeWhatsTakingSoLong:
-# 320 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "I came to see what was taking so\n"
-# 321 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "long to snatch some parts, and you\l"
-# 322 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "simps are held up by a mere child?$"
-# 323 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 324 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_Text_ArchieWarning:
-# 325 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "We are TEAM AQUA,\n"
-# 326 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "and we love the sea!\p"
-# 327 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "And I am TEAM AQUA's leader,\n"
-# 328 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "ARCHIE!\p"
-# 329 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "What makes you interfere with us?\p"
-# 330 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "…No! You can't be!\n"
-# 331 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "You're not one of TEAM MAGMA?\p"
-# 332 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "Wait, that can't be right.\n"
-# 333 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "You're not dressed for the part.\p"
-# 334 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "… … … … … …\n"
-# 335 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "… … … … … …\p"
-# 336 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "POKéMON, people… All life depends on\n"
-# 337 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "the sea.\p"
-# 338 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "So, TEAM AQUA is dedicated to\n"
-# 339 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "the expansion of the sea.\p"
-# 340 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "Don't you agree? What we are doing\n"
-# 341 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "is a magnificent undertaking.\p"
-# 342 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "Ah, fine…\n"
-# 343 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "You're still too young to understand\l"
-# 344 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "our noble objective.\p"
-# 345 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "But, I warn you, don't even consider\n"
-# 346 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "interfering with our plans again.\p"
-# 347 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "The consequences will cost you\n"
-# 348 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "dearly!\p"
-# 349 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "And don't you forget it!$"
-# 350 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 351 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_Text_SternThankYouForSavingUs:
-# 352 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "CAPT. STERN: You're…\n"
-# 353 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "Ah, okay, you're {PLAYER}{KUN}…\p"
-# 354 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "Anyway, that was a tense situation!\n"
-# 355 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "Thank you for saving us!\p"
-# 356 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "Oh, yes, I almost forgot that you\n"
-# 357 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "even brought the parts from DEVON!$"
-# 358 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 359 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_Text_SternIveGotToGo:
-# 360 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "CAPT. STERN: Whoops!\n"
-# 361 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "There's no time to lose!\p"
-# 362 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "We have to set out on our ocean-floor\n"
-# 363 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "expedition really soon.\p"
-# 364 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "Thanks again, but now I've got\n"
-# 365 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "to go!\p"
-# 366 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "Feel free to wander around and check\n"
-# 367 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "out our facilities, though.$"
-# 368 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 369 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_Text_RemindsMeOfAbandonedShip:
-# 370 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "I saw a model of a ship here.\p"
-# 371 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "It reminded me of the ABANDONED SHIP\n"
-# 372 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "near DEWFORD TOWN…$"
-# 373 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 374 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_Text_DontRunInMuseum:
-# 375 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "Don't you dare run around inside\n"
-# 376 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "the MUSEUM!$"
-# 377 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 378 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_Text_WantToRideSubmarine:
-# 379 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "Wow, the submarine's awesome!\n"
-# 380 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "I want to go for a ride!$"
-# 381 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 382 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_Text_WaterQualitySample1:
-# 383 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "“WATER QUALITY SAMPLE 1,” the\n"
-# 384 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "label says.\p"
-# 385 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "The sea is all connected, but the\n"
-# 386 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "water seems to differ by region.$"
-# 387 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 388 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_Text_WaterQualitySample2:
-# 389 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "“WATER QUALITY SAMPLE 2,” the\n"
-# 390 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "label says.\p"
-# 391 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "Does the saltiness of seawater differ\n"
-# 392 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "by region, too?$"
-# 393 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 394 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_Text_PressureExperiment:
-# 395 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "A rubber ball is expanding and\n"
-# 396 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "shrinking.\p"
-# 397 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "“In the sea, the weight of water itself\n"
-# 398 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "exerts pressure.\p"
-# 399 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "“In shallow water, the pressure is not\n"
-# 400 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "very heavy.\p"
-# 401 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "“However, in extremely deep water,\n"
-# 402 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "the pressure can reach even tens of\l"
-# 403 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "thousands of tons on a small area.”$"
-# 404 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 405 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_Text_HoennModel:
-# 406 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "“MODEL OF HOENN REGION”\p"
-# 407 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "It's a miniature diorama of the\n"
-# 408 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "HOENN region.\p"
-# 409 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "Where is LITTLEROOT TOWN on this?$"
-# 410 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 411 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_Text_DeepSeawaterDisplay:
-# 412 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "It's a display on the flow of seawater.\p"
-# 413 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "“Near the bottom of the sea, water\n"
-# 414 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "flows due to differences in such\l"
-# 415 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "factors as temperature and salinity.”$"
-# 416 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 417 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_Text_SurfaceSeawaterDisplay:
-# 418 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "It's a display on the flow of seawater.\p"
-# 419 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "“Toward the surface, seawater flows\n"
-# 420 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "as currents driven by the winds.”$"
-# 421 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 422 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_Text_SSTidalReplica:
-# 423 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "“THE FERRY S.S. TIDAL\p"
-# 424 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "“A scale replica of the ship under\n"
-# 425 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "construction at STERN'S SHIPYARD.”$"
-# 426 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 427 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_Text_SubmarineReplica:
-# 428 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "“SUBMARINE EXPLORER 1\p"
-# 429 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "“A replica of the high-performance\n"
-# 430 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "ocean floor exploration submarine.”$"
-# 431 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 432 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_Text_SumbersibleReplica:
-# 433 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "“SUBMERSIBLE POD\p"
-# 434 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "“A replica of a compact, unmanned\n"
-# 435 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "pod for seafloor exploration.”$"
-# 436 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
-# 437 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
SlateportCity_OceanicMuseum_2F_Text_SSAnneReplica:
-# 438 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "“S.S. ANNE\p"
-# 439 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "“A replica of the luxury liner that\n"
-# 440 "data/maps/SlateportCity_OceanicMuseum_2F/scripts.pory"
.string "circles the globe.”$"
+
diff --git a/data/maps/SootopolisCity/scripts.inc b/data/maps/SootopolisCity/scripts.inc
index dd02e061bb0f..938fd96c6905 100644
--- a/data/maps/SootopolisCity/scripts.inc
+++ b/data/maps/SootopolisCity/scripts.inc
@@ -1,3454 +1,1727 @@
-# 1 "data/maps/SootopolisCity/scripts.pory"
-
-# 2 "data/maps/SootopolisCity/scripts.pory"
.set LOCALID_EXPERT, 1
-# 3 "data/maps/SootopolisCity/scripts.pory"
.set LOCALID_WOMAN_2, 2
-# 4 "data/maps/SootopolisCity/scripts.pory"
.set LOCALID_KIRI, 3
-# 5 "data/maps/SootopolisCity/scripts.pory"
.set LOCALID_NINJA_BOY, 4
-# 6 "data/maps/SootopolisCity/scripts.pory"
.set LOCALID_BOY_1, 5
-# 7 "data/maps/SootopolisCity/scripts.pory"
.set LOCALID_STEVEN, 7
-# 8 "data/maps/SootopolisCity/scripts.pory"
.set LOCALID_WOMAN_1, 8
-# 9 "data/maps/SootopolisCity/scripts.pory"
.set LOCALID_GROUDON, 9
-# 10 "data/maps/SootopolisCity/scripts.pory"
.set LOCALID_KYOGRE, 10
-# 11 "data/maps/SootopolisCity/scripts.pory"
.set LOCALID_RAYQUAZA, 11
-# 12 "data/maps/SootopolisCity/scripts.pory"
.set LOCALID_MANIAC, 12
-# 13 "data/maps/SootopolisCity/scripts.pory"
.set LOCALID_GIRL, 13
-# 14 "data/maps/SootopolisCity/scripts.pory"
.set LOCALID_BLACK_BELT, 14
-# 15 "data/maps/SootopolisCity/scripts.pory"
.set LOCALID_BOY_2, 15
-# 16 "data/maps/SootopolisCity/scripts.pory"
.set LOCALID_MAXIE, 16
-# 17 "data/maps/SootopolisCity/scripts.pory"
.set LOCALID_ARCHIE, 17
-# 18 "data/maps/SootopolisCity/scripts.pory"
.set LOCALID_WALLACE, 18
-# 19 "data/maps/SootopolisCity/scripts.pory"
-# 20 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_MapScripts::
-# 21 "data/maps/SootopolisCity/scripts.pory"
map_script MAP_SCRIPT_ON_LOAD, SootopolisCity_OnLoad
-# 22 "data/maps/SootopolisCity/scripts.pory"
map_script MAP_SCRIPT_ON_TRANSITION, SootopolisCity_OnTransition
-# 23 "data/maps/SootopolisCity/scripts.pory"
map_script MAP_SCRIPT_ON_RESUME, SootopolisCity_OnResume
-# 24 "data/maps/SootopolisCity/scripts.pory"
map_script MAP_SCRIPT_ON_FRAME_TABLE, SootopolisCity_OnFrame
-# 25 "data/maps/SootopolisCity/scripts.pory"
map_script MAP_SCRIPT_ON_WARP_INTO_MAP_TABLE, SootopolisCity_OnWarp
-# 26 "data/maps/SootopolisCity/scripts.pory"
.byte 0
-# 27 "data/maps/SootopolisCity/scripts.pory"
-# 28 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_OnLoad:
-# 29 "data/maps/SootopolisCity/scripts.pory"
call_if_unset FLAG_SOOTOPOLIS_ARCHIE_MAXIE_LEAVE, SootopolisCity_EventScript_LockGymDoor
-# 30 "data/maps/SootopolisCity/scripts.pory"
goto_if_unset FLAG_KYOGRE_ESCAPED_SEAFLOOR_CAVERN, SootopolisCity_EventScript_LegendariesNotArrived
-# 31 "data/maps/SootopolisCity/scripts.pory"
call_if_unset FLAG_SOOTOPOLIS_ARCHIE_MAXIE_LEAVE, SootopolisCity_EventScript_LockHouseDoors
-# 32 "data/maps/SootopolisCity/scripts.pory"
end
-# 33 "data/maps/SootopolisCity/scripts.pory"
-# 34 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_LegendariesNotArrived::
-# 35 "data/maps/SootopolisCity/scripts.pory"
end
-# 36 "data/maps/SootopolisCity/scripts.pory"
-# 37 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_LockHouseDoors::
-# 38 "data/maps/SootopolisCity/scripts.pory"
setmetatile 9, 6, METATILE_Sootopolis_Door_Closed, TRUE
-# 39 "data/maps/SootopolisCity/scripts.pory"
setmetatile 9, 17, METATILE_Sootopolis_Door_Closed, TRUE
-# 40 "data/maps/SootopolisCity/scripts.pory"
setmetatile 9, 26, METATILE_Sootopolis_Door_Closed, TRUE
-# 41 "data/maps/SootopolisCity/scripts.pory"
setmetatile 44, 17, METATILE_Sootopolis_Door_Closed, TRUE
-# 42 "data/maps/SootopolisCity/scripts.pory"
setmetatile 8, 35, METATILE_Sootopolis_Door_Closed, TRUE
-# 43 "data/maps/SootopolisCity/scripts.pory"
setmetatile 53, 28, METATILE_Sootopolis_Door_Closed, TRUE
-# 44 "data/maps/SootopolisCity/scripts.pory"
setmetatile 45, 6, METATILE_Sootopolis_Door_Closed, TRUE
-# 45 "data/maps/SootopolisCity/scripts.pory"
setmetatile 48, 25, METATILE_Sootopolis_Door_Closed, TRUE
-# 46 "data/maps/SootopolisCity/scripts.pory"
setmetatile 51, 36, METATILE_Sootopolis_Door_Closed, TRUE
-# 47 "data/maps/SootopolisCity/scripts.pory"
return
-# 48 "data/maps/SootopolisCity/scripts.pory"
-# 49 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_LockGymDoor::
-# 50 "data/maps/SootopolisCity/scripts.pory"
setmetatile 31, 32, METATILE_Sootopolis_GymDoor_Closed, TRUE
-# 51 "data/maps/SootopolisCity/scripts.pory"
return
-# 52 "data/maps/SootopolisCity/scripts.pory"
-# 53 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_OnTransition:
-# 54 "data/maps/SootopolisCity/scripts.pory"
setflag FLAG_VISITED_SOOTOPOLIS_CITY
-# 55 "data/maps/SootopolisCity/scripts.pory"
call_if_eq VAR_SOOTOPOLIS_CITY_STATE, 1, SootopolisCity_EventScript_HideMapNamePopup
-# 56 "data/maps/SootopolisCity/scripts.pory"
call_if_eq VAR_SKY_PILLAR_STATE, 1, SootopolisCity_EventScript_HideMapNamePopup
-# 57 "data/maps/SootopolisCity/scripts.pory"
call SootopolisCity_EventScript_SetWeather
-# 58 "data/maps/SootopolisCity/scripts.pory"
call SootopolisCity_EventScript_SetLayout
-# 59 "data/maps/SootopolisCity/scripts.pory"
call_if_eq VAR_SOOTOPOLIS_CITY_STATE, 1, SootopolisCity_EventScript_SetBattleSpectators
-# 60 "data/maps/SootopolisCity/scripts.pory"
call_if_eq VAR_SOOTOPOLIS_CITY_STATE, 2, SootopolisCity_EventScript_SetBattleSpectators
-# 61 "data/maps/SootopolisCity/scripts.pory"
call_if_eq VAR_SOOTOPOLIS_CITY_STATE, 3, SootopolisCity_EventScript_SetBattleSpectators
-# 62 "data/maps/SootopolisCity/scripts.pory"
call_if_eq VAR_SOOTOPOLIS_CITY_STATE, 4, SootopolisCity_EventScript_SetBattleSpectators
-# 63 "data/maps/SootopolisCity/scripts.pory"
call_if_eq VAR_SOOTOPOLIS_CITY_STATE, 5, SootopolisCity_EventScript_SetBattleSpectators
-# 64 "data/maps/SootopolisCity/scripts.pory"
call_if_eq VAR_SOOTOPOLIS_CITY_STATE, 2, SootopolisCity_EventScript_CheckSetEnterCaveOfOriginObjPos
-# 65 "data/maps/SootopolisCity/scripts.pory"
call_if_eq VAR_SOOTOPOLIS_CITY_STATE, 3, SootopolisCity_EventScript_CheckSetEnterCaveOfOriginObjPos
-# 66 "data/maps/SootopolisCity/scripts.pory"
call_if_eq VAR_SOOTOPOLIS_CITY_STATE, 4, SootopolisCity_EventScript_SetExitCaveOfOriginObjPos
-# 67 "data/maps/SootopolisCity/scripts.pory"
call_if_eq VAR_SOOTOPOLIS_CITY_STATE, 5, SootopolisCity_EventScript_SetOutsideGymObjPos
-# 68 "data/maps/SootopolisCity/scripts.pory"
call_if_eq VAR_SOOTOPOLIS_CITY_STATE, 6, SootopolisCity_EventScript_SetExpertBlockCaveEntrance
-# 69 "data/maps/SootopolisCity/scripts.pory"
end
-# 70 "data/maps/SootopolisCity/scripts.pory"
-# 71 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_HideMapNamePopup::
-# 72 "data/maps/SootopolisCity/scripts.pory"
setflag FLAG_HIDE_MAP_NAME_POPUP
-# 73 "data/maps/SootopolisCity/scripts.pory"
return
-# 74 "data/maps/SootopolisCity/scripts.pory"
-# 75 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_SetBattleSpectators::
-# 76 "data/maps/SootopolisCity/scripts.pory"
setobjectxyperm LOCALID_KIRI, 13, 48
-# 77 "data/maps/SootopolisCity/scripts.pory"
setobjectxyperm LOCALID_BOY_1, 46, 32
-# 78 "data/maps/SootopolisCity/scripts.pory"
setobjectxyperm LOCALID_NINJA_BOY, 48, 41
-# 79 "data/maps/SootopolisCity/scripts.pory"
setobjectxyperm LOCALID_WOMAN_1, 45, 43
-# 80 "data/maps/SootopolisCity/scripts.pory"
setobjectmovementtype LOCALID_KIRI, MOVEMENT_TYPE_FACE_UP
-# 81 "data/maps/SootopolisCity/scripts.pory"
setobjectmovementtype LOCALID_BOY_1, MOVEMENT_TYPE_FACE_LEFT
-# 82 "data/maps/SootopolisCity/scripts.pory"
setobjectmovementtype LOCALID_NINJA_BOY, MOVEMENT_TYPE_FACE_LEFT
-# 83 "data/maps/SootopolisCity/scripts.pory"
setobjectmovementtype LOCALID_WOMAN_1, MOVEMENT_TYPE_FACE_LEFT
-# 84 "data/maps/SootopolisCity/scripts.pory"
return
-# 85 "data/maps/SootopolisCity/scripts.pory"
-# 86 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_SetLayout::
-# 87 "data/maps/SootopolisCity/scripts.pory"
goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 0, SootopolisCity_EventScript_SetNormalLayout
-# 88 "data/maps/SootopolisCity/scripts.pory"
goto_if_ge VAR_SOOTOPOLIS_CITY_STATE, 6, SootopolisCity_EventScript_SetNormalLayout
-# 89 "data/maps/SootopolisCity/scripts.pory"
goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 1, SootopolisCity_EventScript_SetLegendariesLayout
-# 90 "data/maps/SootopolisCity/scripts.pory"
goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 2, SootopolisCity_EventScript_SetLegendariesLayout
-# 91 "data/maps/SootopolisCity/scripts.pory"
goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 3, SootopolisCity_EventScript_SetLegendariesLayout
-# 92 "data/maps/SootopolisCity/scripts.pory"
goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 4, SootopolisCity_EventScript_SetLegendariesLayout
-# 93 "data/maps/SootopolisCity/scripts.pory"
goto_if_le VAR_SKY_PILLAR_STATE, 1, SootopolisCity_EventScript_SetLegendariesLayout
-# 94 "data/maps/SootopolisCity/scripts.pory"
return
-# 95 "data/maps/SootopolisCity/scripts.pory"
-# 96 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_SetNormalLayout::
-# 97 "data/maps/SootopolisCity/scripts.pory"
return
-# 98 "data/maps/SootopolisCity/scripts.pory"
-# 99 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_SetLegendariesLayout::
-# 100 "data/maps/SootopolisCity/scripts.pory"
setmaplayoutindex LAYOUT_SOOTOPOLIS_CITY_LEGENDS_BATTLE
-# 101 "data/maps/SootopolisCity/scripts.pory"
return
-# 102 "data/maps/SootopolisCity/scripts.pory"
-# 103 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_SetWeather::
-# 104 "data/maps/SootopolisCity/scripts.pory"
goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 0, SootopolisCity_EventScript_SetNormalWeather
-# 105 "data/maps/SootopolisCity/scripts.pory"
goto_if_ge VAR_SOOTOPOLIS_CITY_STATE, 6, SootopolisCity_EventScript_SetNormalWeather
-# 106 "data/maps/SootopolisCity/scripts.pory"
goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 1, SootopolisCity_EventScript_SetDownpour
-# 107 "data/maps/SootopolisCity/scripts.pory"
goto_if_eq VAR_SKY_PILLAR_STATE, 1, SootopolisCity_EventScript_SetDownpour
-# 108 "data/maps/SootopolisCity/scripts.pory"
goto_if_le VAR_SKY_PILLAR_STATE, 1, Common_EventScript_SetAbnormalWeather
-# 109 "data/maps/SootopolisCity/scripts.pory"
return
-# 110 "data/maps/SootopolisCity/scripts.pory"
-# 111 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_SetNormalWeather::
-# 112 "data/maps/SootopolisCity/scripts.pory"
return
-# 113 "data/maps/SootopolisCity/scripts.pory"
-# 114 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_SetDownpour::
-# 115 "data/maps/SootopolisCity/scripts.pory"
setweather WEATHER_DOWNPOUR
-# 116 "data/maps/SootopolisCity/scripts.pory"
return
-# 117 "data/maps/SootopolisCity/scripts.pory"
-# 118 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_CheckSetEnterCaveOfOriginObjPos::
-# 119 "data/maps/SootopolisCity/scripts.pory"
goto_if_set FLAG_STEVEN_GUIDES_TO_CAVE_OF_ORIGIN, SootopolisCity_EventScript_SetEnterCaveOfOriginObjPos
-# 120 "data/maps/SootopolisCity/scripts.pory"
return
-# 121 "data/maps/SootopolisCity/scripts.pory"
-# 122 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_SetEnterCaveOfOriginObjPos::
-# 123 "data/maps/SootopolisCity/scripts.pory"
setobjectxyperm LOCALID_EXPERT, 30, 18
-# 124 "data/maps/SootopolisCity/scripts.pory"
setobjectxyperm LOCALID_STEVEN, 32, 18
-# 125 "data/maps/SootopolisCity/scripts.pory"
return
-# 126 "data/maps/SootopolisCity/scripts.pory"
-# 127 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_SetExitCaveOfOriginObjPos::
-# 128 "data/maps/SootopolisCity/scripts.pory"
setobjectxyperm LOCALID_EXPERT, 30, 18
-# 129 "data/maps/SootopolisCity/scripts.pory"
setobjectxyperm LOCALID_WALLACE, 31, 18
-# 130 "data/maps/SootopolisCity/scripts.pory"
setobjectxyperm LOCALID_STEVEN, 32, 18
-# 131 "data/maps/SootopolisCity/scripts.pory"
end
-# 132 "data/maps/SootopolisCity/scripts.pory"
-# 133 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_SetOutsideGymObjPos::
-# 134 "data/maps/SootopolisCity/scripts.pory"
setobjectxyperm LOCALID_EXPERT, 31, 18
-# 135 "data/maps/SootopolisCity/scripts.pory"
setobjectxyperm LOCALID_STEVEN, 29, 33
-# 136 "data/maps/SootopolisCity/scripts.pory"
setobjectxyperm LOCALID_MAXIE, 33, 35
-# 137 "data/maps/SootopolisCity/scripts.pory"
setobjectxyperm LOCALID_ARCHIE, 34, 35
-# 138 "data/maps/SootopolisCity/scripts.pory"
call_if_eq VAR_SOOTOPOLIS_WALLACE_STATE, 0, SootopolisCity_EventScript_SetWallaceMiddle
-# 139 "data/maps/SootopolisCity/scripts.pory"
call_if_eq VAR_SOOTOPOLIS_WALLACE_STATE, 1, SootopolisCity_EventScript_SetWallaceRight
-# 140 "data/maps/SootopolisCity/scripts.pory"
call_if_eq VAR_SOOTOPOLIS_WALLACE_STATE, 2, SootopolisCity_EventScript_SetWallaceLeft
-# 141 "data/maps/SootopolisCity/scripts.pory"
return
-# 142 "data/maps/SootopolisCity/scripts.pory"
-# 143 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_SetWallaceMiddle::
-# 144 "data/maps/SootopolisCity/scripts.pory"
setobjectxyperm LOCALID_WALLACE, 31, 33
-# 145 "data/maps/SootopolisCity/scripts.pory"
setobjectmovementtype LOCALID_WALLACE, MOVEMENT_TYPE_FACE_DOWN
-# 146 "data/maps/SootopolisCity/scripts.pory"
return
-# 147 "data/maps/SootopolisCity/scripts.pory"
-# 148 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_SetWallaceRight::
-# 149 "data/maps/SootopolisCity/scripts.pory"
setobjectxyperm LOCALID_WALLACE, 32, 33
-# 150 "data/maps/SootopolisCity/scripts.pory"
setobjectmovementtype LOCALID_WALLACE, MOVEMENT_TYPE_FACE_DOWN
-# 151 "data/maps/SootopolisCity/scripts.pory"
return
-# 152 "data/maps/SootopolisCity/scripts.pory"
-# 153 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_SetWallaceLeft::
-# 154 "data/maps/SootopolisCity/scripts.pory"
setobjectxyperm LOCALID_WALLACE, 30, 33
-# 155 "data/maps/SootopolisCity/scripts.pory"
setobjectmovementtype LOCALID_WALLACE, MOVEMENT_TYPE_FACE_DOWN
-# 156 "data/maps/SootopolisCity/scripts.pory"
return
-# 157 "data/maps/SootopolisCity/scripts.pory"
-# 158 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_SetExpertBlockCaveEntrance::
-# 159 "data/maps/SootopolisCity/scripts.pory"
setobjectxyperm LOCALID_EXPERT, 31, 18
-# 160 "data/maps/SootopolisCity/scripts.pory"
return
-# 161 "data/maps/SootopolisCity/scripts.pory"
-# 162 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_OnWarp:
-# 163 "data/maps/SootopolisCity/scripts.pory"
map_script_2 VAR_SOOTOPOLIS_CITY_STATE, 5, SootopolisCity_EventScript_PlayerFaceLegendaries
-# 164 "data/maps/SootopolisCity/scripts.pory"
.2byte 0
-# 165 "data/maps/SootopolisCity/scripts.pory"
-# 166 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_PlayerFaceLegendaries::
-# 167 "data/maps/SootopolisCity/scripts.pory"
call_if_eq VAR_SKY_PILLAR_STATE, 1, SootopolisCity_EventScript_PlayerFaceLegendaries1
-# 168 "data/maps/SootopolisCity/scripts.pory"
call_if_eq VAR_SKY_PILLAR_STATE, 2, SootopolisCity_EventScript_PlayerFaceLegendaries2
-# 169 "data/maps/SootopolisCity/scripts.pory"
end
-# 170 "data/maps/SootopolisCity/scripts.pory"
-# 171 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_PlayerFaceLegendaries1::
-# 172 "data/maps/SootopolisCity/scripts.pory"
turnobject OBJ_EVENT_ID_PLAYER, DIR_NORTH
-# 173 "data/maps/SootopolisCity/scripts.pory"
return
-# 174 "data/maps/SootopolisCity/scripts.pory"
-# 175 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_PlayerFaceLegendaries2::
-# 176 "data/maps/SootopolisCity/scripts.pory"
turnobject OBJ_EVENT_ID_PLAYER, DIR_NORTH
-# 177 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_SKY_PILLAR_STATE, 3
-# 178 "data/maps/SootopolisCity/scripts.pory"
return
-# 179 "data/maps/SootopolisCity/scripts.pory"
-# 180 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_OnResume:
-# 181 "data/maps/SootopolisCity/scripts.pory"
setdivewarp MAP_UNDERWATER_SOOTOPOLIS_CITY, 9, 6
-# 182 "data/maps/SootopolisCity/scripts.pory"
end
-# 183 "data/maps/SootopolisCity/scripts.pory"
-# 184 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_OnFrame:
-# 185 "data/maps/SootopolisCity/scripts.pory"
map_script_2 VAR_SOOTOPOLIS_CITY_STATE, 1, SootopolisCity_EventScript_StartLegendariesScene
-# 186 "data/maps/SootopolisCity/scripts.pory"
map_script_2 VAR_SKY_PILLAR_STATE, 1, SootopolisCity_EventScript_StartRayquazaScene
-# 187 "data/maps/SootopolisCity/scripts.pory"
.2byte 0
-# 188 "data/maps/SootopolisCity/scripts.pory"
-# 189 "data/maps/SootopolisCity/scripts.pory"
@ If not at PokeCenter, assumed to have arrived via Dive
-# 190 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_StartLegendariesScene::
-# 191 "data/maps/SootopolisCity/scripts.pory"
lockall
-# 192 "data/maps/SootopolisCity/scripts.pory"
special StorePlayerCoordsInVars
-# 193 "data/maps/SootopolisCity/scripts.pory"
goto_if_ne VAR_0x8004, 43, SootopolisCity_EventScript_LegendariesSceneFromDive
-# 194 "data/maps/SootopolisCity/scripts.pory"
goto_if_ne VAR_0x8005, 32, SootopolisCity_EventScript_LegendariesSceneFromDive
-# 195 "data/maps/SootopolisCity/scripts.pory"
goto SootopolisCity_EventScript_LegendariesSceneFromPokeCenter
-# 196 "data/maps/SootopolisCity/scripts.pory"
end
-# 197 "data/maps/SootopolisCity/scripts.pory"
-# 198 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_LegendariesSceneFromPokeCenter::
-# 199 "data/maps/SootopolisCity/scripts.pory"
delay 60
-# 200 "data/maps/SootopolisCity/scripts.pory"
special SpawnCameraObject
-# 201 "data/maps/SootopolisCity/scripts.pory"
applymovement OBJ_EVENT_ID_CAMERA, SootopolisCity_Movement_PanToActionFromPokeCenter
-# 202 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 203 "data/maps/SootopolisCity/scripts.pory"
special RemoveCameraObject
-# 204 "data/maps/SootopolisCity/scripts.pory"
delay 60
-# 205 "data/maps/SootopolisCity/scripts.pory"
fadescreenspeed FADE_TO_BLACK, 8
-# 206 "data/maps/SootopolisCity/scripts.pory"
setweather WEATHER_ABNORMAL
-# 207 "data/maps/SootopolisCity/scripts.pory"
doweather
-# 208 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_0x8004, FALSE @ Just do Groudon/Kyogre fight scene
-# 209 "data/maps/SootopolisCity/scripts.pory"
special Script_DoRayquazaScene
-# 210 "data/maps/SootopolisCity/scripts.pory"
waitstate
-# 211 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_KYOGRE, Common_Movement_WalkInPlaceFasterLeft
-# 212 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_GROUDON, Common_Movement_WalkInPlaceFasterRight
-# 213 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 214 "data/maps/SootopolisCity/scripts.pory"
delay 60
-# 215 "data/maps/SootopolisCity/scripts.pory"
waitse
-# 216 "data/maps/SootopolisCity/scripts.pory"
playmoncry SPECIES_KYOGRE, CRY_MODE_ENCOUNTER
-# 217 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_KYOGRE, SootopolisCity_Movement_KyogreAttack
-# 218 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_GROUDON, SootopolisCity_Movement_GroudonDefend
-# 219 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 220 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_0x8004, 1 @ vertical pan
-# 221 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_0x8005, 1 @ horizontal pan
-# 222 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_0x8006, 8 @ num shakes
-# 223 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_0x8007, 5 @ shake delay
-# 224 "data/maps/SootopolisCity/scripts.pory"
special ShakeCamera
-# 225 "data/maps/SootopolisCity/scripts.pory"
waitstate
-# 226 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_KYOGRE, SootopolisCity_Movement_KyogreMoveBack
-# 227 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_GROUDON, SootopolisCity_Movement_GroudonMoveBack
-# 228 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 229 "data/maps/SootopolisCity/scripts.pory"
waitse
-# 230 "data/maps/SootopolisCity/scripts.pory"
playmoncry SPECIES_GROUDON, CRY_MODE_ENCOUNTER
-# 231 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_KYOGRE, SootopolisCity_Movement_KyogreDefend
-# 232 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_GROUDON, SootopolisCity_Movement_GroudonAttack
-# 233 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 234 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_0x8004, 1 @ vertical pan
-# 235 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_0x8005, 1 @ horizontal pan
-# 236 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_0x8006, 8 @ num shakes
-# 237 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_0x8007, 5 @ shake delay
-# 238 "data/maps/SootopolisCity/scripts.pory"
special ShakeCamera
-# 239 "data/maps/SootopolisCity/scripts.pory"
waitstate
-# 240 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_KYOGRE, SootopolisCity_Movement_KyogreMoveBack
-# 241 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_GROUDON, SootopolisCity_Movement_GroudonMoveBack
-# 242 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 243 "data/maps/SootopolisCity/scripts.pory"
waitse
-# 244 "data/maps/SootopolisCity/scripts.pory"
playmoncry SPECIES_KYOGRE, CRY_MODE_ENCOUNTER
-# 245 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_KYOGRE, SootopolisCity_Movement_KyogreAttack
-# 246 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_GROUDON, SootopolisCity_Movement_GroudonDefend
-# 247 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 248 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_0x8004, 1 @ vertical pan
-# 249 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_0x8005, 1 @ horizontal pan
-# 250 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_0x8006, 8 @ num shakes
-# 251 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_0x8007, 5 @ shake delay
-# 252 "data/maps/SootopolisCity/scripts.pory"
special ShakeCamera
-# 253 "data/maps/SootopolisCity/scripts.pory"
waitstate
-# 254 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_KYOGRE, SootopolisCity_Movement_KyogreMoveBack
-# 255 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_GROUDON, SootopolisCity_Movement_GroudonMoveBack
-# 256 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 257 "data/maps/SootopolisCity/scripts.pory"
special SpawnCameraObject
-# 258 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_KYOGRE, SootopolisCity_Movement_KyogreIdle
-# 259 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_GROUDON, SootopolisCity_Movement_GroudonIdle
-# 260 "data/maps/SootopolisCity/scripts.pory"
applymovement OBJ_EVENT_ID_CAMERA, SootopolisCity_Movement_PanBackToPokeCenter
-# 261 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 262 "data/maps/SootopolisCity/scripts.pory"
special RemoveCameraObject
-# 263 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_SOOTOPOLIS_CITY_STATE, 2
-# 264 "data/maps/SootopolisCity/scripts.pory"
clearflag FLAG_HIDE_MAP_NAME_POPUP
-# 265 "data/maps/SootopolisCity/scripts.pory"
releaseall
-# 266 "data/maps/SootopolisCity/scripts.pory"
end
-# 267 "data/maps/SootopolisCity/scripts.pory"
-# 268 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Movement_PanToActionFromPokeCenter:
-# 269 "data/maps/SootopolisCity/scripts.pory"
walk_slow_diag_southwest
-# 270 "data/maps/SootopolisCity/scripts.pory"
walk_slow_diag_southwest
-# 271 "data/maps/SootopolisCity/scripts.pory"
walk_slow_diag_southwest
-# 272 "data/maps/SootopolisCity/scripts.pory"
walk_slow_diag_southwest
-# 273 "data/maps/SootopolisCity/scripts.pory"
walk_slow_diag_southwest
-# 274 "data/maps/SootopolisCity/scripts.pory"
walk_slow_diag_southwest
-# 275 "data/maps/SootopolisCity/scripts.pory"
walk_slow_diag_southwest
-# 276 "data/maps/SootopolisCity/scripts.pory"
walk_slow_diag_southwest
-# 277 "data/maps/SootopolisCity/scripts.pory"
walk_slow_diag_southwest
-# 278 "data/maps/SootopolisCity/scripts.pory"
walk_slow_diag_southwest
-# 279 "data/maps/SootopolisCity/scripts.pory"
walk_slow_diag_southwest
-# 280 "data/maps/SootopolisCity/scripts.pory"
walk_slow_diag_southwest
-# 281 "data/maps/SootopolisCity/scripts.pory"
step_end
-# 282 "data/maps/SootopolisCity/scripts.pory"
-# 283 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Movement_PanBackToPokeCenter:
-# 284 "data/maps/SootopolisCity/scripts.pory"
walk_slow_diag_northeast
-# 285 "data/maps/SootopolisCity/scripts.pory"
walk_slow_diag_northeast
-# 286 "data/maps/SootopolisCity/scripts.pory"
walk_slow_diag_northeast
-# 287 "data/maps/SootopolisCity/scripts.pory"
walk_slow_diag_northeast
-# 288 "data/maps/SootopolisCity/scripts.pory"
walk_slow_diag_northeast
-# 289 "data/maps/SootopolisCity/scripts.pory"
walk_slow_diag_northeast
-# 290 "data/maps/SootopolisCity/scripts.pory"
walk_slow_diag_northeast
-# 291 "data/maps/SootopolisCity/scripts.pory"
walk_slow_diag_northeast
-# 292 "data/maps/SootopolisCity/scripts.pory"
walk_slow_diag_northeast
-# 293 "data/maps/SootopolisCity/scripts.pory"
walk_slow_diag_northeast
-# 294 "data/maps/SootopolisCity/scripts.pory"
walk_slow_diag_northeast
-# 295 "data/maps/SootopolisCity/scripts.pory"
walk_slow_diag_northeast
-# 296 "data/maps/SootopolisCity/scripts.pory"
step_end
-# 297 "data/maps/SootopolisCity/scripts.pory"
-# 298 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_LegendariesSceneFromDive::
-# 299 "data/maps/SootopolisCity/scripts.pory"
delay 60
-# 300 "data/maps/SootopolisCity/scripts.pory"
special SpawnCameraObject
-# 301 "data/maps/SootopolisCity/scripts.pory"
applymovement OBJ_EVENT_ID_CAMERA, SootopolisCity_Movement_PanToActionFromDive
-# 302 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 303 "data/maps/SootopolisCity/scripts.pory"
special RemoveCameraObject
-# 304 "data/maps/SootopolisCity/scripts.pory"
delay 60
-# 305 "data/maps/SootopolisCity/scripts.pory"
fadescreenspeed FADE_TO_BLACK, 8
-# 306 "data/maps/SootopolisCity/scripts.pory"
setweather WEATHER_ABNORMAL
-# 307 "data/maps/SootopolisCity/scripts.pory"
doweather
-# 308 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_0x8004, FALSE @ Just do Groudon/Kyogre fight scene
-# 309 "data/maps/SootopolisCity/scripts.pory"
special Script_DoRayquazaScene
-# 310 "data/maps/SootopolisCity/scripts.pory"
waitstate
-# 311 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_KYOGRE, Common_Movement_WalkInPlaceFasterLeft
-# 312 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_GROUDON, Common_Movement_WalkInPlaceFasterRight
-# 313 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 314 "data/maps/SootopolisCity/scripts.pory"
delay 60
-# 315 "data/maps/SootopolisCity/scripts.pory"
waitse
-# 316 "data/maps/SootopolisCity/scripts.pory"
playmoncry SPECIES_KYOGRE, CRY_MODE_ENCOUNTER
-# 317 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_KYOGRE, SootopolisCity_Movement_KyogreAttack
-# 318 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_GROUDON, SootopolisCity_Movement_GroudonDefend
-# 319 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 320 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_0x8004, 1 @ vertical pan
-# 321 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_0x8005, 1 @ horizontal pan
-# 322 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_0x8006, 8 @ num shakes
-# 323 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_0x8007, 5 @ shake delay
-# 324 "data/maps/SootopolisCity/scripts.pory"
special ShakeCamera
-# 325 "data/maps/SootopolisCity/scripts.pory"
waitstate
-# 326 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_KYOGRE, SootopolisCity_Movement_KyogreMoveBack
-# 327 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_GROUDON, SootopolisCity_Movement_GroudonMoveBack
-# 328 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 329 "data/maps/SootopolisCity/scripts.pory"
waitse
-# 330 "data/maps/SootopolisCity/scripts.pory"
playmoncry SPECIES_GROUDON, CRY_MODE_ENCOUNTER
-# 331 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_KYOGRE, SootopolisCity_Movement_KyogreDefend
-# 332 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_GROUDON, SootopolisCity_Movement_GroudonAttack
-# 333 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 334 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_0x8004, 1 @ vertical pan
-# 335 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_0x8005, 1 @ horizontal pan
-# 336 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_0x8006, 8 @ num shakes
-# 337 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_0x8007, 5 @ shake delay
-# 338 "data/maps/SootopolisCity/scripts.pory"
special ShakeCamera
-# 339 "data/maps/SootopolisCity/scripts.pory"
waitstate
-# 340 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_KYOGRE, SootopolisCity_Movement_KyogreMoveBack
-# 341 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_GROUDON, SootopolisCity_Movement_GroudonMoveBack
-# 342 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 343 "data/maps/SootopolisCity/scripts.pory"
waitse
-# 344 "data/maps/SootopolisCity/scripts.pory"
playmoncry SPECIES_KYOGRE, CRY_MODE_ENCOUNTER
-# 345 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_KYOGRE, SootopolisCity_Movement_KyogreAttack
-# 346 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_GROUDON, SootopolisCity_Movement_GroudonDefend
-# 347 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 348 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_0x8004, 1 @ vertical pan
-# 349 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_0x8005, 1 @ horizontal pan
-# 350 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_0x8006, 8 @ num shakes
-# 351 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_0x8007, 5 @ shake delay
-# 352 "data/maps/SootopolisCity/scripts.pory"
special ShakeCamera
-# 353 "data/maps/SootopolisCity/scripts.pory"
waitstate
-# 354 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_KYOGRE, SootopolisCity_Movement_KyogreMoveBack
-# 355 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_GROUDON, SootopolisCity_Movement_GroudonMoveBack
-# 356 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 357 "data/maps/SootopolisCity/scripts.pory"
special SpawnCameraObject
-# 358 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_KYOGRE, SootopolisCity_Movement_KyogreIdle
-# 359 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_GROUDON, SootopolisCity_Movement_GroudonIdle
-# 360 "data/maps/SootopolisCity/scripts.pory"
applymovement OBJ_EVENT_ID_CAMERA, SootopolisCity_Movement_PanBackToDive
-# 361 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 362 "data/maps/SootopolisCity/scripts.pory"
special RemoveCameraObject
-# 363 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_SOOTOPOLIS_CITY_STATE, 2
-# 364 "data/maps/SootopolisCity/scripts.pory"
clearflag FLAG_HIDE_MAP_NAME_POPUP
-# 365 "data/maps/SootopolisCity/scripts.pory"
releaseall
-# 366 "data/maps/SootopolisCity/scripts.pory"
end
-# 367 "data/maps/SootopolisCity/scripts.pory"
-# 368 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Movement_PanToActionFromDive:
-# 369 "data/maps/SootopolisCity/scripts.pory"
walk_slow_diag_northeast
-# 370 "data/maps/SootopolisCity/scripts.pory"
walk_slow_diag_northeast
-# 371 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 372 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 373 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 374 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 375 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 376 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 377 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 378 "data/maps/SootopolisCity/scripts.pory"
step_end
-# 379 "data/maps/SootopolisCity/scripts.pory"
-# 380 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Movement_PanBackToDive:
-# 381 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 382 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 383 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 384 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 385 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 386 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 387 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 388 "data/maps/SootopolisCity/scripts.pory"
walk_slow_diag_southwest
-# 389 "data/maps/SootopolisCity/scripts.pory"
walk_slow_diag_southwest
-# 390 "data/maps/SootopolisCity/scripts.pory"
step_end
-# 391 "data/maps/SootopolisCity/scripts.pory"
-# 392 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Movement_KyogreAttack:
-# 393 "data/maps/SootopolisCity/scripts.pory"
walk_in_place_slow_left
-# 394 "data/maps/SootopolisCity/scripts.pory"
walk_in_place_slow_left
-# 395 "data/maps/SootopolisCity/scripts.pory"
walk_in_place_slow_left
-# 396 "data/maps/SootopolisCity/scripts.pory"
delay_16
-# 397 "data/maps/SootopolisCity/scripts.pory"
delay_16
-# 398 "data/maps/SootopolisCity/scripts.pory"
delay_16
-# 399 "data/maps/SootopolisCity/scripts.pory"
init_affine_anim
-# 400 "data/maps/SootopolisCity/scripts.pory"
walk_left_affine
-# 401 "data/maps/SootopolisCity/scripts.pory"
clear_affine_anim
-# 402 "data/maps/SootopolisCity/scripts.pory"
step_end
-# 403 "data/maps/SootopolisCity/scripts.pory"
-# 404 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Movement_KyogreDefend:
-# 405 "data/maps/SootopolisCity/scripts.pory"
delay_16
-# 406 "data/maps/SootopolisCity/scripts.pory"
delay_16
-# 407 "data/maps/SootopolisCity/scripts.pory"
delay_16
-# 408 "data/maps/SootopolisCity/scripts.pory"
delay_16
-# 409 "data/maps/SootopolisCity/scripts.pory"
delay_16
-# 410 "data/maps/SootopolisCity/scripts.pory"
delay_16
-# 411 "data/maps/SootopolisCity/scripts.pory"
delay_16
-# 412 "data/maps/SootopolisCity/scripts.pory"
delay_16
-# 413 "data/maps/SootopolisCity/scripts.pory"
delay_16
-# 414 "data/maps/SootopolisCity/scripts.pory"
init_affine_anim
-# 415 "data/maps/SootopolisCity/scripts.pory"
walk_left_affine
-# 416 "data/maps/SootopolisCity/scripts.pory"
clear_affine_anim
-# 417 "data/maps/SootopolisCity/scripts.pory"
step_end
-# 418 "data/maps/SootopolisCity/scripts.pory"
-# 419 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Movement_KyogreMoveBack:
-# 420 "data/maps/SootopolisCity/scripts.pory"
lock_facing_direction
-# 421 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 422 "data/maps/SootopolisCity/scripts.pory"
delay_16
-# 423 "data/maps/SootopolisCity/scripts.pory"
delay_16
-# 424 "data/maps/SootopolisCity/scripts.pory"
delay_16
-# 425 "data/maps/SootopolisCity/scripts.pory"
unlock_facing_direction
-# 426 "data/maps/SootopolisCity/scripts.pory"
step_end
-# 427 "data/maps/SootopolisCity/scripts.pory"
-# 428 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Movement_KyogreIdle:
-# 429 "data/maps/SootopolisCity/scripts.pory"
walk_in_place_slow_left
-# 430 "data/maps/SootopolisCity/scripts.pory"
walk_in_place_slow_left
-# 431 "data/maps/SootopolisCity/scripts.pory"
walk_in_place_slow_left
-# 432 "data/maps/SootopolisCity/scripts.pory"
walk_in_place_slow_left
-# 433 "data/maps/SootopolisCity/scripts.pory"
walk_in_place_slow_left
-# 434 "data/maps/SootopolisCity/scripts.pory"
walk_in_place_slow_left
-# 435 "data/maps/SootopolisCity/scripts.pory"
step_end
-# 436 "data/maps/SootopolisCity/scripts.pory"
-# 437 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Movement_GroudonAttack:
-# 438 "data/maps/SootopolisCity/scripts.pory"
walk_in_place_slow_right
-# 439 "data/maps/SootopolisCity/scripts.pory"
walk_in_place_slow_right
-# 440 "data/maps/SootopolisCity/scripts.pory"
walk_in_place_slow_right
-# 441 "data/maps/SootopolisCity/scripts.pory"
delay_16
-# 442 "data/maps/SootopolisCity/scripts.pory"
delay_16
-# 443 "data/maps/SootopolisCity/scripts.pory"
delay_16
-# 444 "data/maps/SootopolisCity/scripts.pory"
walk_fast_right
-# 445 "data/maps/SootopolisCity/scripts.pory"
step_end
-# 446 "data/maps/SootopolisCity/scripts.pory"
-# 447 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Movement_GroudonDefend:
-# 448 "data/maps/SootopolisCity/scripts.pory"
delay_16
-# 449 "data/maps/SootopolisCity/scripts.pory"
delay_16
-# 450 "data/maps/SootopolisCity/scripts.pory"
delay_16
-# 451 "data/maps/SootopolisCity/scripts.pory"
delay_16
-# 452 "data/maps/SootopolisCity/scripts.pory"
delay_16
-# 453 "data/maps/SootopolisCity/scripts.pory"
delay_16
-# 454 "data/maps/SootopolisCity/scripts.pory"
delay_16
-# 455 "data/maps/SootopolisCity/scripts.pory"
delay_16
-# 456 "data/maps/SootopolisCity/scripts.pory"
delay_16
-# 457 "data/maps/SootopolisCity/scripts.pory"
walk_fast_right
-# 458 "data/maps/SootopolisCity/scripts.pory"
step_end
-# 459 "data/maps/SootopolisCity/scripts.pory"
-# 460 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Movement_GroudonMoveBack:
-# 461 "data/maps/SootopolisCity/scripts.pory"
lock_facing_direction
-# 462 "data/maps/SootopolisCity/scripts.pory"
walk_left
-# 463 "data/maps/SootopolisCity/scripts.pory"
delay_16
-# 464 "data/maps/SootopolisCity/scripts.pory"
delay_16
-# 465 "data/maps/SootopolisCity/scripts.pory"
delay_16
-# 466 "data/maps/SootopolisCity/scripts.pory"
unlock_facing_direction
-# 467 "data/maps/SootopolisCity/scripts.pory"
step_end
-# 468 "data/maps/SootopolisCity/scripts.pory"
-# 469 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Movement_GroudonIdle:
-# 470 "data/maps/SootopolisCity/scripts.pory"
walk_in_place_slow_right
-# 471 "data/maps/SootopolisCity/scripts.pory"
walk_in_place_slow_right
-# 472 "data/maps/SootopolisCity/scripts.pory"
walk_in_place_slow_right
-# 473 "data/maps/SootopolisCity/scripts.pory"
walk_in_place_slow_right
-# 474 "data/maps/SootopolisCity/scripts.pory"
walk_in_place_slow_right
-# 475 "data/maps/SootopolisCity/scripts.pory"
walk_in_place_slow_right
-# 476 "data/maps/SootopolisCity/scripts.pory"
step_end
-# 477 "data/maps/SootopolisCity/scripts.pory"
-# 478 "data/maps/SootopolisCity/scripts.pory"
@ If not at PokeCenter, assumed to have arrived via Dive
-# 479 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_StartRayquazaScene::
-# 480 "data/maps/SootopolisCity/scripts.pory"
lockall
-# 481 "data/maps/SootopolisCity/scripts.pory"
special StorePlayerCoordsInVars
-# 482 "data/maps/SootopolisCity/scripts.pory"
goto_if_ne VAR_0x8004, 43, SootopolisCity_EventScript_RayquazaSceneFromDive
-# 483 "data/maps/SootopolisCity/scripts.pory"
goto_if_ne VAR_0x8005, 32, SootopolisCity_EventScript_RayquazaSceneFromDive
-# 484 "data/maps/SootopolisCity/scripts.pory"
goto SootopolisCity_EventScript_RayquazaSceneFromPokeCenter
-# 485 "data/maps/SootopolisCity/scripts.pory"
end
-# 486 "data/maps/SootopolisCity/scripts.pory"
-# 487 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_RayquazaSceneFromPokeCenter::
-# 488 "data/maps/SootopolisCity/scripts.pory"
delay 60
-# 489 "data/maps/SootopolisCity/scripts.pory"
special SpawnCameraObject
-# 490 "data/maps/SootopolisCity/scripts.pory"
applymovement OBJ_EVENT_ID_CAMERA, SootopolisCity_Movement_PanToActionFromPokeCenter
-# 491 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 492 "data/maps/SootopolisCity/scripts.pory"
special RemoveCameraObject
-# 493 "data/maps/SootopolisCity/scripts.pory"
delay 60
-# 494 "data/maps/SootopolisCity/scripts.pory"
fadescreenspeed FADE_TO_BLACK, 8
-# 495 "data/maps/SootopolisCity/scripts.pory"
call SootopolisCity_EventScript_SetRoughWater
-# 496 "data/maps/SootopolisCity/scripts.pory"
removeobject LOCALID_GROUDON
-# 497 "data/maps/SootopolisCity/scripts.pory"
removeobject LOCALID_KYOGRE
-# 498 "data/maps/SootopolisCity/scripts.pory"
addobject LOCALID_RAYQUAZA
-# 499 "data/maps/SootopolisCity/scripts.pory"
+ hideobjectat LOCALID_RAYQUAZA, MAP_SOOTOPOLIS_CITY
setvar VAR_0x8004, TRUE
-# 500 "data/maps/SootopolisCity/scripts.pory"
special Script_DoRayquazaScene
-# 501 "data/maps/SootopolisCity/scripts.pory"
waitstate
-# 502 "data/maps/SootopolisCity/scripts.pory"
playse SE_THUNDER
-# 503 "data/maps/SootopolisCity/scripts.pory"
special SpawnCameraObject
-# 504 "data/maps/SootopolisCity/scripts.pory"
applymovement OBJ_EVENT_ID_CAMERA, SootopolisCity_Movement_PanUp
-# 505 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 506 "data/maps/SootopolisCity/scripts.pory"
waitse
-# 507 "data/maps/SootopolisCity/scripts.pory"
playmoncry SPECIES_RAYQUAZA, CRY_MODE_ENCOUNTER
-# 508 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_0x8004, 1 @ vertical pan
-# 509 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_0x8005, 1 @ horizontal pan
-# 510 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_0x8006, 8 @ num shakes
-# 511 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_0x8007, 3 @ shake delay
-# 512 "data/maps/SootopolisCity/scripts.pory"
special ShakeCamera
-# 513 "data/maps/SootopolisCity/scripts.pory"
waitstate
-# 514 "data/maps/SootopolisCity/scripts.pory"
waitse
-# 515 "data/maps/SootopolisCity/scripts.pory"
playmoncry SPECIES_RAYQUAZA, CRY_MODE_ENCOUNTER
-# 516 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_0x8004, 1 @ vertical pan
-# 517 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_0x8005, 2 @ horizontal pan
-# 518 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_0x8006, 8 @ num shakes
-# 519 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_0x8007, 5 @ shake delay
-# 520 "data/maps/SootopolisCity/scripts.pory"
special ShakeCamera
-# 521 "data/maps/SootopolisCity/scripts.pory"
waitstate
-# 522 "data/maps/SootopolisCity/scripts.pory"
waitmoncry
-# 523 "data/maps/SootopolisCity/scripts.pory"
setweather WEATHER_NONE
-# 524 "data/maps/SootopolisCity/scripts.pory"
doweather
-# 525 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_RAYQUAZA, SootopolisCity_Movement_RayquazaFlyOff
-# 526 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 527 "data/maps/SootopolisCity/scripts.pory"
removeobject LOCALID_RAYQUAZA
-# 528 "data/maps/SootopolisCity/scripts.pory"
special WaitWeather
-# 529 "data/maps/SootopolisCity/scripts.pory"
waitstate
-# 530 "data/maps/SootopolisCity/scripts.pory"
clearflag FLAG_SYS_WEATHER_CTRL
-# 531 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_SKY_PILLAR_STATE, 3
-# 532 "data/maps/SootopolisCity/scripts.pory"
clearflag FLAG_LEGENDARIES_IN_SOOTOPOLIS
-# 533 "data/maps/SootopolisCity/scripts.pory"
fadenewbgm MUS_SOOTOPOLIS
-# 534 "data/maps/SootopolisCity/scripts.pory"
delay 120
-# 535 "data/maps/SootopolisCity/scripts.pory"
clearflag FLAG_HIDE_MAP_NAME_POPUP
-# 536 "data/maps/SootopolisCity/scripts.pory"
warpwhitefade MAP_SOOTOPOLIS_CITY, 43, 32
-# 537 "data/maps/SootopolisCity/scripts.pory"
waitstate
-# 538 "data/maps/SootopolisCity/scripts.pory"
end
-# 539 "data/maps/SootopolisCity/scripts.pory"
-# 540 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_RayquazaSceneFromDive::
-# 541 "data/maps/SootopolisCity/scripts.pory"
delay 60
-# 542 "data/maps/SootopolisCity/scripts.pory"
special SpawnCameraObject
-# 543 "data/maps/SootopolisCity/scripts.pory"
applymovement OBJ_EVENT_ID_CAMERA, SootopolisCity_Movement_PanToActionFromDive
-# 544 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 545 "data/maps/SootopolisCity/scripts.pory"
special RemoveCameraObject
-# 546 "data/maps/SootopolisCity/scripts.pory"
delay 60
-# 547 "data/maps/SootopolisCity/scripts.pory"
fadescreenspeed FADE_TO_BLACK, 8
-# 548 "data/maps/SootopolisCity/scripts.pory"
call SootopolisCity_EventScript_SetRoughWater
-# 549 "data/maps/SootopolisCity/scripts.pory"
removeobject LOCALID_GROUDON
-# 550 "data/maps/SootopolisCity/scripts.pory"
removeobject LOCALID_KYOGRE
-# 551 "data/maps/SootopolisCity/scripts.pory"
addobject LOCALID_RAYQUAZA
-# 552 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_0x8004, TRUE
-# 553 "data/maps/SootopolisCity/scripts.pory"
special Script_DoRayquazaScene
-# 554 "data/maps/SootopolisCity/scripts.pory"
waitstate
-# 555 "data/maps/SootopolisCity/scripts.pory"
special SpawnCameraObject
-# 556 "data/maps/SootopolisCity/scripts.pory"
applymovement OBJ_EVENT_ID_CAMERA, SootopolisCity_Movement_PanUp
-# 557 "data/maps/SootopolisCity/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, SootopolisCity_Movement_PlayerApproachLegendaries
-# 558 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 559 "data/maps/SootopolisCity/scripts.pory"
waitse
-# 560 "data/maps/SootopolisCity/scripts.pory"
playmoncry SPECIES_RAYQUAZA, CRY_MODE_ENCOUNTER
-# 561 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_0x8004, 1 @ vertical pan
-# 562 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_0x8005, 1 @ horizontal pan
-# 563 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_0x8006, 8 @ num shakes
-# 564 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_0x8007, 3 @ shake delay
-# 565 "data/maps/SootopolisCity/scripts.pory"
special ShakeCamera
-# 566 "data/maps/SootopolisCity/scripts.pory"
waitstate
-# 567 "data/maps/SootopolisCity/scripts.pory"
waitse
-# 568 "data/maps/SootopolisCity/scripts.pory"
playmoncry SPECIES_RAYQUAZA, CRY_MODE_ENCOUNTER
-# 569 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_0x8004, 1 @ vertical pan
-# 570 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_0x8005, 2 @ horizontal pan
-# 571 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_0x8006, 8 @ num shakes
-# 572 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_0x8007, 5 @ shake delay
-# 573 "data/maps/SootopolisCity/scripts.pory"
special ShakeCamera
-# 574 "data/maps/SootopolisCity/scripts.pory"
waitstate
-# 575 "data/maps/SootopolisCity/scripts.pory"
waitmoncry
-# 576 "data/maps/SootopolisCity/scripts.pory"
setweather WEATHER_NONE
-# 577 "data/maps/SootopolisCity/scripts.pory"
doweather
-# 578 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_RAYQUAZA, SootopolisCity_Movement_RayquazaFlyOff
-# 579 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 580 "data/maps/SootopolisCity/scripts.pory"
removeobject LOCALID_RAYQUAZA
-# 581 "data/maps/SootopolisCity/scripts.pory"
special WaitWeather
-# 582 "data/maps/SootopolisCity/scripts.pory"
waitstate
-# 583 "data/maps/SootopolisCity/scripts.pory"
clearflag FLAG_SYS_WEATHER_CTRL
-# 584 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_SKY_PILLAR_STATE, 2
-# 585 "data/maps/SootopolisCity/scripts.pory"
clearflag FLAG_LEGENDARIES_IN_SOOTOPOLIS
-# 586 "data/maps/SootopolisCity/scripts.pory"
fadenewbgm MUS_SURF
-# 587 "data/maps/SootopolisCity/scripts.pory"
delay 120
-# 588 "data/maps/SootopolisCity/scripts.pory"
clearflag FLAG_HIDE_MAP_NAME_POPUP
-# 589 "data/maps/SootopolisCity/scripts.pory"
warpwhitefade MAP_SOOTOPOLIS_CITY, 29, 53
-# 590 "data/maps/SootopolisCity/scripts.pory"
waitstate
-# 591 "data/maps/SootopolisCity/scripts.pory"
end
-# 592 "data/maps/SootopolisCity/scripts.pory"
-# 593 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_SetRoughWater::
-# 594 "data/maps/SootopolisCity/scripts.pory"
setmetatile 27, 43, METATILE_Sootopolis_RoughWater, FALSE
-# 595 "data/maps/SootopolisCity/scripts.pory"
setmetatile 28, 43, METATILE_Sootopolis_RoughWater, FALSE
-# 596 "data/maps/SootopolisCity/scripts.pory"
setmetatile 29, 43, METATILE_Sootopolis_RoughWater, FALSE
-# 597 "data/maps/SootopolisCity/scripts.pory"
setmetatile 30, 43, METATILE_Sootopolis_RoughWater, FALSE
-# 598 "data/maps/SootopolisCity/scripts.pory"
setmetatile 27, 44, METATILE_Sootopolis_RoughWater, FALSE
-# 599 "data/maps/SootopolisCity/scripts.pory"
setmetatile 28, 44, METATILE_Sootopolis_RoughWater, FALSE
-# 600 "data/maps/SootopolisCity/scripts.pory"
setmetatile 29, 44, METATILE_Sootopolis_RoughWater, FALSE
-# 601 "data/maps/SootopolisCity/scripts.pory"
setmetatile 30, 44, METATILE_Sootopolis_RoughWater, FALSE
-# 602 "data/maps/SootopolisCity/scripts.pory"
setmetatile 27, 45, METATILE_Sootopolis_RoughWater, FALSE
-# 603 "data/maps/SootopolisCity/scripts.pory"
setmetatile 28, 45, METATILE_Sootopolis_RoughWater, FALSE
-# 604 "data/maps/SootopolisCity/scripts.pory"
setmetatile 29, 45, METATILE_Sootopolis_RoughWater, FALSE
-# 605 "data/maps/SootopolisCity/scripts.pory"
setmetatile 30, 45, METATILE_Sootopolis_RoughWater, FALSE
-# 606 "data/maps/SootopolisCity/scripts.pory"
setmetatile 32, 43, METATILE_Sootopolis_RoughWater, FALSE
-# 607 "data/maps/SootopolisCity/scripts.pory"
setmetatile 33, 43, METATILE_Sootopolis_RoughWater, FALSE
-# 608 "data/maps/SootopolisCity/scripts.pory"
setmetatile 34, 43, METATILE_Sootopolis_RoughWater, FALSE
-# 609 "data/maps/SootopolisCity/scripts.pory"
setmetatile 35, 43, METATILE_Sootopolis_RoughWater, FALSE
-# 610 "data/maps/SootopolisCity/scripts.pory"
setmetatile 32, 44, METATILE_Sootopolis_RoughWater, FALSE
-# 611 "data/maps/SootopolisCity/scripts.pory"
setmetatile 33, 44, METATILE_Sootopolis_RoughWater, FALSE
-# 612 "data/maps/SootopolisCity/scripts.pory"
setmetatile 34, 44, METATILE_Sootopolis_RoughWater, FALSE
-# 613 "data/maps/SootopolisCity/scripts.pory"
setmetatile 35, 44, METATILE_Sootopolis_RoughWater, FALSE
-# 614 "data/maps/SootopolisCity/scripts.pory"
setmetatile 32, 45, METATILE_Sootopolis_RoughWater, FALSE
-# 615 "data/maps/SootopolisCity/scripts.pory"
setmetatile 33, 45, METATILE_Sootopolis_RoughWater, FALSE
-# 616 "data/maps/SootopolisCity/scripts.pory"
setmetatile 34, 45, METATILE_Sootopolis_RoughWater, FALSE
-# 617 "data/maps/SootopolisCity/scripts.pory"
setmetatile 35, 45, METATILE_Sootopolis_RoughWater, FALSE
-# 618 "data/maps/SootopolisCity/scripts.pory"
return
-# 619 "data/maps/SootopolisCity/scripts.pory"
-# 620 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Movement_RayquazaFlyOff:
-# 621 "data/maps/SootopolisCity/scripts.pory"
walk_fast_up
-# 622 "data/maps/SootopolisCity/scripts.pory"
walk_faster_up
-# 623 "data/maps/SootopolisCity/scripts.pory"
walk_faster_up
-# 624 "data/maps/SootopolisCity/scripts.pory"
walk_faster_up
-# 625 "data/maps/SootopolisCity/scripts.pory"
walk_faster_up
-# 626 "data/maps/SootopolisCity/scripts.pory"
walk_faster_up
-# 627 "data/maps/SootopolisCity/scripts.pory"
walk_faster_up
-# 628 "data/maps/SootopolisCity/scripts.pory"
step_end
-# 629 "data/maps/SootopolisCity/scripts.pory"
-# 630 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Movement_PanUp:
-# 631 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 632 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 633 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 634 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 635 "data/maps/SootopolisCity/scripts.pory"
step_end
-# 636 "data/maps/SootopolisCity/scripts.pory"
-# 637 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Movement_PlayerApproachLegendaries:
-# 638 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 639 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 640 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 641 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 642 "data/maps/SootopolisCity/scripts.pory"
step_end
-# 643 "data/maps/SootopolisCity/scripts.pory"
-# 644 "data/maps/SootopolisCity/scripts.pory"
@ Unused
-# 645 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Movement_PlayerApproachLegendariesDown:
-# 646 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 647 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 648 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 649 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 650 "data/maps/SootopolisCity/scripts.pory"
step_end
-# 651 "data/maps/SootopolisCity/scripts.pory"
-# 652 "data/maps/SootopolisCity/scripts.pory"
@ Unused
-# 653 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Movement_UnusedPanUp:
-# 654 "data/maps/SootopolisCity/scripts.pory"
walk_slow_diag_northeast
-# 655 "data/maps/SootopolisCity/scripts.pory"
walk_slow_diag_northeast
-# 656 "data/maps/SootopolisCity/scripts.pory"
walk_slow_diag_northeast
-# 657 "data/maps/SootopolisCity/scripts.pory"
walk_slow_diag_northeast
-# 658 "data/maps/SootopolisCity/scripts.pory"
walk_slow_diag_northeast
-# 659 "data/maps/SootopolisCity/scripts.pory"
walk_slow_diag_northeast
-# 660 "data/maps/SootopolisCity/scripts.pory"
walk_slow_diag_northeast
-# 661 "data/maps/SootopolisCity/scripts.pory"
walk_slow_diag_northeast
-# 662 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 663 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 664 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 665 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 666 "data/maps/SootopolisCity/scripts.pory"
step_end
-# 667 "data/maps/SootopolisCity/scripts.pory"
-# 668 "data/maps/SootopolisCity/scripts.pory"
@ Unused
-# 669 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Movement_UnusedPanBack:
-# 670 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 671 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 672 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 673 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 674 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 675 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 676 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 677 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 678 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 679 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 680 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 681 "data/maps/SootopolisCity/scripts.pory"
walk_slow_diag_southwest
-# 682 "data/maps/SootopolisCity/scripts.pory"
walk_slow_diag_southwest
-# 683 "data/maps/SootopolisCity/scripts.pory"
step_end
-# 684 "data/maps/SootopolisCity/scripts.pory"
-# 685 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_CaveOfOriginExpert::
-# 686 "data/maps/SootopolisCity/scripts.pory"
lock
-# 687 "data/maps/SootopolisCity/scripts.pory"
faceplayer
-# 688 "data/maps/SootopolisCity/scripts.pory"
goto_if_ge VAR_SOOTOPOLIS_CITY_STATE, 6, SootopolisCity_EventScript_ExpertPostLegendaries
-# 689 "data/maps/SootopolisCity/scripts.pory"
goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 5, SootopolisCity_EventScript_ExpertLegendaries
-# 690 "data/maps/SootopolisCity/scripts.pory"
goto_if_ge VAR_SOOTOPOLIS_CITY_STATE, 2, SootopolisCity_EventScript_ExpertLeadToCave
-# 691 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_CaveOfOriginPleaseLeave, MSGBOX_DEFAULT
-# 692 "data/maps/SootopolisCity/scripts.pory"
release
-# 693 "data/maps/SootopolisCity/scripts.pory"
end
-# 694 "data/maps/SootopolisCity/scripts.pory"
-# 695 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_ExpertLeadToCave::
-# 696 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_LeadSuperiorTrainerToCave, MSGBOX_DEFAULT
-# 697 "data/maps/SootopolisCity/scripts.pory"
release
-# 698 "data/maps/SootopolisCity/scripts.pory"
end
-# 699 "data/maps/SootopolisCity/scripts.pory"
-# 700 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_ExpertPostLegendaries::
-# 701 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_CaveOfOriginSleepsToo, MSGBOX_DEFAULT
-# 702 "data/maps/SootopolisCity/scripts.pory"
release
-# 703 "data/maps/SootopolisCity/scripts.pory"
end
-# 704 "data/maps/SootopolisCity/scripts.pory"
-# 705 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_ExpertLegendaries::
-# 706 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_AwakenedPokemonClash, MSGBOX_DEFAULT
-# 707 "data/maps/SootopolisCity/scripts.pory"
release
-# 708 "data/maps/SootopolisCity/scripts.pory"
end
-# 709 "data/maps/SootopolisCity/scripts.pory"
-# 710 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_Kiri::
-# 711 "data/maps/SootopolisCity/scripts.pory"
lock
-# 712 "data/maps/SootopolisCity/scripts.pory"
faceplayer
-# 713 "data/maps/SootopolisCity/scripts.pory"
goto_if_le VAR_SOOTOPOLIS_CITY_STATE, 1, SootopolisCity_EventScript_KiriGiveBerry
-# 714 "data/maps/SootopolisCity/scripts.pory"
goto_if_ge VAR_SOOTOPOLIS_CITY_STATE, 6, SootopolisCity_EventScript_KiriGiveBerry
-# 715 "data/maps/SootopolisCity/scripts.pory"
goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 5, SootopolisCity_EventScript_KiriRayquaza
-# 716 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_BigPokemonFighting, MSGBOX_DEFAULT
-# 717 "data/maps/SootopolisCity/scripts.pory"
closemessage
-# 718 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_KIRI, Common_Movement_FaceOriginalDirection
-# 719 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 720 "data/maps/SootopolisCity/scripts.pory"
release
-# 721 "data/maps/SootopolisCity/scripts.pory"
end
-# 722 "data/maps/SootopolisCity/scripts.pory"
-# 723 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_KiriRayquaza::
-# 724 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_PrettyMonCameFromSky, MSGBOX_DEFAULT
-# 725 "data/maps/SootopolisCity/scripts.pory"
closemessage
-# 726 "data/maps/SootopolisCity/scripts.pory"
release
-# 727 "data/maps/SootopolisCity/scripts.pory"
end
-# 728 "data/maps/SootopolisCity/scripts.pory"
-# 729 "data/maps/SootopolisCity/scripts.pory"
@ Gives 2 berries daily. First ranges from FIRST_KIRI_BERRY to LAST_KIRI_BERRY, second is always Figy or Iapapa
-# 730 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_KiriGiveBerry::
-# 731 "data/maps/SootopolisCity/scripts.pory"
dotimebasedevents
-# 732 "data/maps/SootopolisCity/scripts.pory"
special GetPlayerBigGuyGirlString
-# 733 "data/maps/SootopolisCity/scripts.pory"
goto_if_set FLAG_DAILY_SOOTOPOLIS_RECEIVED_BERRY, SootopolisCity_EventScript_KiriReceivedBerry
-# 734 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_NameIsKiriHaveOneOfThese, MSGBOX_DEFAULT
-# 735 "data/maps/SootopolisCity/scripts.pory"
random NUM_KIRI_BERRIES
-# 736 "data/maps/SootopolisCity/scripts.pory"
addvar VAR_RESULT, NUM_KIRI_BERRIES_SKIPPED
-# 737 "data/maps/SootopolisCity/scripts.pory"
addvar VAR_RESULT, FIRST_BERRY_INDEX
-# 738 "data/maps/SootopolisCity/scripts.pory"
giveitem VAR_RESULT
-# 739 "data/maps/SootopolisCity/scripts.pory"
goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull
-# 740 "data/maps/SootopolisCity/scripts.pory"
setflag FLAG_DAILY_SOOTOPOLIS_RECEIVED_BERRY
-# 741 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_GiveYouThisBerryToo, MSGBOX_DEFAULT
-# 742 "data/maps/SootopolisCity/scripts.pory"
random 2
-# 743 "data/maps/SootopolisCity/scripts.pory"
goto_if_eq VAR_RESULT, 0, SootopolisCity_EventScript_GiveFigyBerry
-# 744 "data/maps/SootopolisCity/scripts.pory"
goto_if_eq VAR_RESULT, 1, SootopolisCity_EventScript_GiveIapapaBerry
-# 745 "data/maps/SootopolisCity/scripts.pory"
end
-# 746 "data/maps/SootopolisCity/scripts.pory"
-# 747 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_GiveFigyBerry::
-# 748 "data/maps/SootopolisCity/scripts.pory"
giveitem ITEM_FIGY_BERRY
-# 749 "data/maps/SootopolisCity/scripts.pory"
goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull
-# 750 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_WhatKindOfWishInYourName, MSGBOX_DEFAULT
-# 751 "data/maps/SootopolisCity/scripts.pory"
release
-# 752 "data/maps/SootopolisCity/scripts.pory"
end
-# 753 "data/maps/SootopolisCity/scripts.pory"
-# 754 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_GiveIapapaBerry::
-# 755 "data/maps/SootopolisCity/scripts.pory"
giveitem ITEM_IAPAPA_BERRY
-# 756 "data/maps/SootopolisCity/scripts.pory"
goto_if_eq VAR_RESULT, FALSE, Common_EventScript_ShowBagIsFull
-# 757 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_WhatKindOfWishInYourName, MSGBOX_DEFAULT
-# 758 "data/maps/SootopolisCity/scripts.pory"
release
-# 759 "data/maps/SootopolisCity/scripts.pory"
end
-# 760 "data/maps/SootopolisCity/scripts.pory"
-# 761 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_KiriReceivedBerry::
-# 762 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_LikeSeasonBornIn, MSGBOX_YESNO
-# 763 "data/maps/SootopolisCity/scripts.pory"
goto_if_eq VAR_RESULT, YES, SootopolisCity_EventScript_KiriLikeSeasonBornIn
-# 764 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_OhDoesntMatter, MSGBOX_DEFAULT
-# 765 "data/maps/SootopolisCity/scripts.pory"
release
-# 766 "data/maps/SootopolisCity/scripts.pory"
end
-# 767 "data/maps/SootopolisCity/scripts.pory"
-# 768 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_KiriLikeSeasonBornIn::
-# 769 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_ThenILoveAutumn, MSGBOX_DEFAULT
-# 770 "data/maps/SootopolisCity/scripts.pory"
release
-# 771 "data/maps/SootopolisCity/scripts.pory"
end
-# 772 "data/maps/SootopolisCity/scripts.pory"
-# 773 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_Woman2::
-# 774 "data/maps/SootopolisCity/scripts.pory"
lockall
-# 775 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_WOMAN_2, Common_Movement_FacePlayer
-# 776 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 777 "data/maps/SootopolisCity/scripts.pory"
goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 5, SootopolisCity_EventScript_Woman2Rayquaza
-# 778 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_WeatherWentWild, MSGBOX_DEFAULT
-# 779 "data/maps/SootopolisCity/scripts.pory"
closemessage
-# 780 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_WOMAN_2, Common_Movement_FaceOriginalDirection
-# 781 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 782 "data/maps/SootopolisCity/scripts.pory"
releaseall
-# 783 "data/maps/SootopolisCity/scripts.pory"
end
-# 784 "data/maps/SootopolisCity/scripts.pory"
-# 785 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_Woman2Rayquaza::
-# 786 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_YouBroughtFlyingMon, MSGBOX_DEFAULT
-# 787 "data/maps/SootopolisCity/scripts.pory"
releaseall
-# 788 "data/maps/SootopolisCity/scripts.pory"
end
-# 789 "data/maps/SootopolisCity/scripts.pory"
-# 790 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_Man::
-# 791 "data/maps/SootopolisCity/scripts.pory"
lock
-# 792 "data/maps/SootopolisCity/scripts.pory"
faceplayer
-# 793 "data/maps/SootopolisCity/scripts.pory"
goto_if_ge VAR_SOOTOPOLIS_CITY_STATE, 6, SootopolisCity_EventScript_ManPostLegendaries
-# 794 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_NoOrdinaryTourist, MSGBOX_DEFAULT
-# 795 "data/maps/SootopolisCity/scripts.pory"
release
-# 796 "data/maps/SootopolisCity/scripts.pory"
end
-# 797 "data/maps/SootopolisCity/scripts.pory"
-# 798 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_ManPostLegendaries::
-# 799 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_CityRegainedCalm, MSGBOX_DEFAULT
-# 800 "data/maps/SootopolisCity/scripts.pory"
release
-# 801 "data/maps/SootopolisCity/scripts.pory"
end
-# 802 "data/maps/SootopolisCity/scripts.pory"
-# 803 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_Woman1::
-# 804 "data/maps/SootopolisCity/scripts.pory"
lock
-# 805 "data/maps/SootopolisCity/scripts.pory"
faceplayer
-# 806 "data/maps/SootopolisCity/scripts.pory"
goto_if_ge VAR_SOOTOPOLIS_CITY_STATE, 6, SootopolisCity_EventScript_Woman1PostLegendaries
-# 807 "data/maps/SootopolisCity/scripts.pory"
goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 5, SootopolisCity_EventScript_Woman1Rayquaza
-# 808 "data/maps/SootopolisCity/scripts.pory"
goto_if_ge VAR_SOOTOPOLIS_CITY_STATE, 2, SootopolisCity_EventScript_Woman1Legendaries
-# 809 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_SootopolisSkyBeautiful, MSGBOX_DEFAULT
-# 810 "data/maps/SootopolisCity/scripts.pory"
release
-# 811 "data/maps/SootopolisCity/scripts.pory"
end
-# 812 "data/maps/SootopolisCity/scripts.pory"
-# 813 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_Woman1Legendaries::
-# 814 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_GiganticPokemonFight, MSGBOX_DEFAULT
-# 815 "data/maps/SootopolisCity/scripts.pory"
closemessage
-# 816 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_WOMAN_1, Common_Movement_FaceOriginalDirection
-# 817 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 818 "data/maps/SootopolisCity/scripts.pory"
release
-# 819 "data/maps/SootopolisCity/scripts.pory"
end
-# 820 "data/maps/SootopolisCity/scripts.pory"
-# 821 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_Woman1PostLegendaries::
-# 822 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_NightSkyFavoriteScenery, MSGBOX_DEFAULT
-# 823 "data/maps/SootopolisCity/scripts.pory"
release
-# 824 "data/maps/SootopolisCity/scripts.pory"
end
-# 825 "data/maps/SootopolisCity/scripts.pory"
-# 826 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_Woman1Rayquaza::
-# 827 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_FearedWorstWhenPokemonFlewDown, MSGBOX_DEFAULT
-# 828 "data/maps/SootopolisCity/scripts.pory"
release
-# 829 "data/maps/SootopolisCity/scripts.pory"
end
-# 830 "data/maps/SootopolisCity/scripts.pory"
-# 831 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_NinjaBoy::
-# 832 "data/maps/SootopolisCity/scripts.pory"
lockall
-# 833 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_NINJA_BOY, Common_Movement_FacePlayer
-# 834 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 835 "data/maps/SootopolisCity/scripts.pory"
goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 5, SootopolisCity_EventScript_NinjaBoyRayquaza
-# 836 "data/maps/SootopolisCity/scripts.pory"
goto_if_ge VAR_SOOTOPOLIS_CITY_STATE, 6, SootopolisCity_EventScript_NinjaBoyNormal
-# 837 "data/maps/SootopolisCity/scripts.pory"
goto_if_le VAR_SOOTOPOLIS_CITY_STATE, 1, SootopolisCity_EventScript_NinjaBoyNormal
-# 838 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_ThisIsWicked, MSGBOX_DEFAULT
-# 839 "data/maps/SootopolisCity/scripts.pory"
closemessage
-# 840 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_NINJA_BOY, Common_Movement_FaceOriginalDirection
-# 841 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 842 "data/maps/SootopolisCity/scripts.pory"
release
-# 843 "data/maps/SootopolisCity/scripts.pory"
end
-# 844 "data/maps/SootopolisCity/scripts.pory"
-# 845 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_NinjaBoyNormal::
-# 846 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_WonderWhatWorldIsLike, MSGBOX_DEFAULT
-# 847 "data/maps/SootopolisCity/scripts.pory"
release
-# 848 "data/maps/SootopolisCity/scripts.pory"
end
-# 849 "data/maps/SootopolisCity/scripts.pory"
-# 850 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_NinjaBoyRayquaza::
-# 851 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_ThatWasWicked, MSGBOX_DEFAULT
-# 852 "data/maps/SootopolisCity/scripts.pory"
release
-# 853 "data/maps/SootopolisCity/scripts.pory"
end
-# 854 "data/maps/SootopolisCity/scripts.pory"
-# 855 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_Boy1::
-# 856 "data/maps/SootopolisCity/scripts.pory"
lockall
-# 857 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_BOY_1, Common_Movement_FacePlayer
-# 858 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 859 "data/maps/SootopolisCity/scripts.pory"
goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 5, SootopolisCity_EventScript_Boy1Rayquaza
-# 860 "data/maps/SootopolisCity/scripts.pory"
goto_if_set FLAG_SYS_GAME_CLEAR, SootopolisCity_EventScript_Boy1GameClear
-# 861 "data/maps/SootopolisCity/scripts.pory"
goto_if_ge VAR_SOOTOPOLIS_CITY_STATE, 6, SootopolisCity_EventScript_Boy1Normal
-# 862 "data/maps/SootopolisCity/scripts.pory"
goto_if_le VAR_SOOTOPOLIS_CITY_STATE, 1, SootopolisCity_EventScript_Boy1Normal
-# 863 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_GiantPokemonSuddenlyAppeared, MSGBOX_DEFAULT
-# 864 "data/maps/SootopolisCity/scripts.pory"
closemessage
-# 865 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_BOY_1, Common_Movement_FaceOriginalDirection
-# 866 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 867 "data/maps/SootopolisCity/scripts.pory"
release
-# 868 "data/maps/SootopolisCity/scripts.pory"
end
-# 869 "data/maps/SootopolisCity/scripts.pory"
-# 870 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_Boy1Rayquaza::
-# 871 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_WhatIsThatGreenPokemon, MSGBOX_DEFAULT
-# 872 "data/maps/SootopolisCity/scripts.pory"
release
-# 873 "data/maps/SootopolisCity/scripts.pory"
end
-# 874 "data/maps/SootopolisCity/scripts.pory"
-# 875 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_Boy1GameClear::
-# 876 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_WhereDidLegendariesGo, MSGBOX_DEFAULT
-# 877 "data/maps/SootopolisCity/scripts.pory"
release
-# 878 "data/maps/SootopolisCity/scripts.pory"
end
-# 879 "data/maps/SootopolisCity/scripts.pory"
-# 880 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_Boy1Normal::
-# 881 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_PhysicallyFitLivingHere, MSGBOX_DEFAULT
-# 882 "data/maps/SootopolisCity/scripts.pory"
release
-# 883 "data/maps/SootopolisCity/scripts.pory"
end
-# 884 "data/maps/SootopolisCity/scripts.pory"
-# 885 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_GymSign::
-# 886 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_GymSign, MSGBOX_SIGN
-# 887 "data/maps/SootopolisCity/scripts.pory"
end
-# 888 "data/maps/SootopolisCity/scripts.pory"
-# 889 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_CitySign::
-# 890 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_CitySign, MSGBOX_SIGN
-# 891 "data/maps/SootopolisCity/scripts.pory"
end
-# 892 "data/maps/SootopolisCity/scripts.pory"
-# 893 "data/maps/SootopolisCity/scripts.pory"
EventScript_ClosedSootopolisDoor::
-# 894 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_DoorIsClosed, MSGBOX_SIGN
-# 895 "data/maps/SootopolisCity/scripts.pory"
end
-# 896 "data/maps/SootopolisCity/scripts.pory"
-# 897 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_Steven::
-# 898 "data/maps/SootopolisCity/scripts.pory"
lockall
-# 899 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_STEVEN, Common_Movement_FacePlayer
-# 900 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 901 "data/maps/SootopolisCity/scripts.pory"
call_if_unset FLAG_STEVEN_GUIDES_TO_CAVE_OF_ORIGIN, SootopolisCity_EventScript_StevenLeadPlayerCaveOfOrigin
-# 902 "data/maps/SootopolisCity/scripts.pory"
goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 2, SootopolisCity_EventScript_StevenHelpWallace
-# 903 "data/maps/SootopolisCity/scripts.pory"
goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 3, SootopolisCity_EventScript_StevenHelpedWallace
-# 904 "data/maps/SootopolisCity/scripts.pory"
goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 4, SootopolisCity_EventScript_StevenHelpedWallace
-# 905 "data/maps/SootopolisCity/scripts.pory"
goto_if_set FLAG_SOOTOPOLIS_ARCHIE_MAXIE_LEAVE, SootopolisCity_EventScript_StevenMaxieArchieLeft
-# 906 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_SoThatsRayquaza, MSGBOX_DEFAULT
-# 907 "data/maps/SootopolisCity/scripts.pory"
releaseall
-# 908 "data/maps/SootopolisCity/scripts.pory"
end
-# 909 "data/maps/SootopolisCity/scripts.pory"
-# 910 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_StevenHelpWallace::
-# 911 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_KnowWhatsNeededToHelpHim, MSGBOX_DEFAULT
-# 912 "data/maps/SootopolisCity/scripts.pory"
releaseall
-# 913 "data/maps/SootopolisCity/scripts.pory"
end
-# 914 "data/maps/SootopolisCity/scripts.pory"
-# 915 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_StevenMaxieArchieLeft::
-# 916 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_MaxieArchieLeft, MSGBOX_DEFAULT
-# 917 "data/maps/SootopolisCity/scripts.pory"
releaseall
-# 918 "data/maps/SootopolisCity/scripts.pory"
end
-# 919 "data/maps/SootopolisCity/scripts.pory"
-# 920 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_StevenHelpedWallace::
-# 921 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_NeverBeenToSkyPillar, MSGBOX_DEFAULT
-# 922 "data/maps/SootopolisCity/scripts.pory"
releaseall
-# 923 "data/maps/SootopolisCity/scripts.pory"
end
-# 924 "data/maps/SootopolisCity/scripts.pory"
-# 925 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_StevenLeadPlayerCaveOfOrigin::
-# 926 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_InvolvedWithCrisisComeWithMe, MSGBOX_DEFAULT
-# 927 "data/maps/SootopolisCity/scripts.pory"
closemessage
-# 928 "data/maps/SootopolisCity/scripts.pory"
call_if_eq VAR_FACING, DIR_WEST, SootopolisCity_EventScript_StartWalkToCaveOfOriginWest
-# 929 "data/maps/SootopolisCity/scripts.pory"
call_if_eq VAR_FACING, DIR_NORTH, SootopolisCity_EventScript_StartWalkToCaveOfOriginNorth
-# 930 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_DoesThisMakeYourFearPokemon, MSGBOX_DEFAULT
-# 931 "data/maps/SootopolisCity/scripts.pory"
closemessage
-# 932 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_STEVEN, SootopolisCity_Movement_StevenWalkToCaveOfOrigin
-# 933 "data/maps/SootopolisCity/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, SootopolisCity_Movement_PlayerWalkToCaveOfOrigin
-# 934 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 935 "data/maps/SootopolisCity/scripts.pory"
delay 120
-# 936 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_EXPERT, SootopolisCity_Movement_ExpertMoveAside
-# 937 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 938 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_STEVEN, SootopolisCity_Movement_StevenArriveCaveEntrance
-# 939 "data/maps/SootopolisCity/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, SootopolisCity_Movement_PlayerArriveCaveEntrance
-# 940 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 941 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_HereWereAreHelpWallace, MSGBOX_DEFAULT
-# 942 "data/maps/SootopolisCity/scripts.pory"
closemessage
-# 943 "data/maps/SootopolisCity/scripts.pory"
setflag FLAG_STEVEN_GUIDES_TO_CAVE_OF_ORIGIN
-# 944 "data/maps/SootopolisCity/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, SootopolisCity_Movement_PlayerEnterCaveOfOrigin
-# 945 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 946 "data/maps/SootopolisCity/scripts.pory"
warp MAP_CAVE_OF_ORIGIN_ENTRANCE, 9, 20
-# 947 "data/maps/SootopolisCity/scripts.pory"
waitstate
-# 948 "data/maps/SootopolisCity/scripts.pory"
end
-# 949 "data/maps/SootopolisCity/scripts.pory"
-# 950 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_StartWalkToCaveOfOriginWest::
-# 951 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_STEVEN, SootopolisCity_Movement_StevenStartWalkToCaveOfOrigin
-# 952 "data/maps/SootopolisCity/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, SootopolisCity_Movement_PlayerStartWalkToCaveOfOriginWest
-# 953 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 954 "data/maps/SootopolisCity/scripts.pory"
return
-# 955 "data/maps/SootopolisCity/scripts.pory"
-# 956 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_StartWalkToCaveOfOriginNorth::
-# 957 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_STEVEN, SootopolisCity_Movement_StevenStartWalkToCaveOfOrigin
-# 958 "data/maps/SootopolisCity/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, SootopolisCity_Movement_PlayerStartWalkToCaveOfOriginNorth
-# 959 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 960 "data/maps/SootopolisCity/scripts.pory"
return
-# 961 "data/maps/SootopolisCity/scripts.pory"
-# 962 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Movement_StevenStartWalkToCaveOfOrigin:
-# 963 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 964 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 965 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 966 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 967 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 968 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 969 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 970 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 971 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 972 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 973 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 974 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 975 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 976 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 977 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 978 "data/maps/SootopolisCity/scripts.pory"
walk_left
-# 979 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 980 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 981 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 982 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 983 "data/maps/SootopolisCity/scripts.pory"
walk_left
-# 984 "data/maps/SootopolisCity/scripts.pory"
walk_left
-# 985 "data/maps/SootopolisCity/scripts.pory"
walk_left
-# 986 "data/maps/SootopolisCity/scripts.pory"
walk_left
-# 987 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 988 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 989 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 990 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 991 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 992 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 993 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 994 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 995 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 996 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 997 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 998 "data/maps/SootopolisCity/scripts.pory"
walk_in_place_faster_down
-# 999 "data/maps/SootopolisCity/scripts.pory"
step_end
-# 1000 "data/maps/SootopolisCity/scripts.pory"
-# 1001 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Movement_PlayerStartWalkToCaveOfOriginWest:
-# 1002 "data/maps/SootopolisCity/scripts.pory"
walk_left
-# 1003 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1004 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1005 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1006 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1007 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1008 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1009 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1010 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1011 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1012 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1013 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1014 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1015 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1016 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1017 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1018 "data/maps/SootopolisCity/scripts.pory"
walk_left
-# 1019 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1020 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1021 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1022 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1023 "data/maps/SootopolisCity/scripts.pory"
walk_left
-# 1024 "data/maps/SootopolisCity/scripts.pory"
walk_left
-# 1025 "data/maps/SootopolisCity/scripts.pory"
walk_left
-# 1026 "data/maps/SootopolisCity/scripts.pory"
walk_left
-# 1027 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1028 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1029 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1030 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1031 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1032 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1033 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1034 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1035 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1036 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1037 "data/maps/SootopolisCity/scripts.pory"
step_end
-# 1038 "data/maps/SootopolisCity/scripts.pory"
-# 1039 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Movement_PlayerStartWalkToCaveOfOriginNorth:
-# 1040 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1041 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1042 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1043 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1044 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1045 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1046 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1047 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1048 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1049 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1050 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1051 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1052 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1053 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1054 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1055 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1056 "data/maps/SootopolisCity/scripts.pory"
walk_left
-# 1057 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1058 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1059 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1060 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1061 "data/maps/SootopolisCity/scripts.pory"
walk_left
-# 1062 "data/maps/SootopolisCity/scripts.pory"
walk_left
-# 1063 "data/maps/SootopolisCity/scripts.pory"
walk_left
-# 1064 "data/maps/SootopolisCity/scripts.pory"
walk_left
-# 1065 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1066 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1067 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1068 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1069 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1070 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1071 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1072 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1073 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1074 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1075 "data/maps/SootopolisCity/scripts.pory"
step_end
-# 1076 "data/maps/SootopolisCity/scripts.pory"
-# 1077 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Movement_StevenWalkToCaveOfOrigin:
-# 1078 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1079 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1080 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1081 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1082 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1083 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1084 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 1085 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 1086 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1087 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1088 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1089 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1090 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1091 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1092 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1093 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1094 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1095 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1096 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 1097 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 1098 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 1099 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1100 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1101 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1102 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1103 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1104 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 1105 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 1106 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 1107 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 1108 "data/maps/SootopolisCity/scripts.pory"
walk_left
-# 1109 "data/maps/SootopolisCity/scripts.pory"
walk_left
-# 1110 "data/maps/SootopolisCity/scripts.pory"
walk_left
-# 1111 "data/maps/SootopolisCity/scripts.pory"
walk_left
-# 1112 "data/maps/SootopolisCity/scripts.pory"
walk_left
-# 1113 "data/maps/SootopolisCity/scripts.pory"
walk_left
-# 1114 "data/maps/SootopolisCity/scripts.pory"
walk_left
-# 1115 "data/maps/SootopolisCity/scripts.pory"
walk_left
-# 1116 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 1117 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 1118 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 1119 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 1120 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 1121 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 1122 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 1123 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 1124 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1125 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1126 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1127 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1128 "data/maps/SootopolisCity/scripts.pory"
delay_4
-# 1129 "data/maps/SootopolisCity/scripts.pory"
walk_in_place_faster_left
-# 1130 "data/maps/SootopolisCity/scripts.pory"
delay_16
-# 1131 "data/maps/SootopolisCity/scripts.pory"
delay_16
-# 1132 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1133 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1134 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1135 "data/maps/SootopolisCity/scripts.pory"
step_end
-# 1136 "data/maps/SootopolisCity/scripts.pory"
-# 1137 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Movement_PlayerWalkToCaveOfOrigin:
-# 1138 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1139 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1140 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1141 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1142 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1143 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1144 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1145 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 1146 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 1147 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1148 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1149 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1150 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1151 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1152 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1153 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1154 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1155 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1156 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1157 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 1158 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 1159 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 1160 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1161 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1162 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1163 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1164 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1165 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 1166 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 1167 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 1168 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 1169 "data/maps/SootopolisCity/scripts.pory"
walk_left
-# 1170 "data/maps/SootopolisCity/scripts.pory"
walk_left
-# 1171 "data/maps/SootopolisCity/scripts.pory"
walk_left
-# 1172 "data/maps/SootopolisCity/scripts.pory"
walk_left
-# 1173 "data/maps/SootopolisCity/scripts.pory"
walk_left
-# 1174 "data/maps/SootopolisCity/scripts.pory"
walk_left
-# 1175 "data/maps/SootopolisCity/scripts.pory"
walk_left
-# 1176 "data/maps/SootopolisCity/scripts.pory"
walk_left
-# 1177 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 1178 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 1179 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 1180 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 1181 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 1182 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 1183 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 1184 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 1185 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1186 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1187 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1188 "data/maps/SootopolisCity/scripts.pory"
step_end
-# 1189 "data/maps/SootopolisCity/scripts.pory"
-# 1190 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Movement_ExpertMoveAside:
-# 1191 "data/maps/SootopolisCity/scripts.pory"
walk_slow_left
-# 1192 "data/maps/SootopolisCity/scripts.pory"
walk_in_place_faster_right
-# 1193 "data/maps/SootopolisCity/scripts.pory"
step_end
-# 1194 "data/maps/SootopolisCity/scripts.pory"
-# 1195 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Movement_StevenArriveCaveEntrance:
-# 1196 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 1197 "data/maps/SootopolisCity/scripts.pory"
walk_down
-# 1198 "data/maps/SootopolisCity/scripts.pory"
walk_left
-# 1199 "data/maps/SootopolisCity/scripts.pory"
delay_8
-# 1200 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1201 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1202 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1203 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1204 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1205 "data/maps/SootopolisCity/scripts.pory"
walk_in_place_faster_left
-# 1206 "data/maps/SootopolisCity/scripts.pory"
step_end
-# 1207 "data/maps/SootopolisCity/scripts.pory"
-# 1208 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Movement_PlayerArriveCaveEntrance:
-# 1209 "data/maps/SootopolisCity/scripts.pory"
delay_16
-# 1210 "data/maps/SootopolisCity/scripts.pory"
delay_16
-# 1211 "data/maps/SootopolisCity/scripts.pory"
delay_16
-# 1212 "data/maps/SootopolisCity/scripts.pory"
delay_8
-# 1213 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1214 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1215 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1216 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1217 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1218 "data/maps/SootopolisCity/scripts.pory"
walk_in_place_faster_right
-# 1219 "data/maps/SootopolisCity/scripts.pory"
step_end
-# 1220 "data/maps/SootopolisCity/scripts.pory"
-# 1221 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Movement_PlayerEnterCaveOfOrigin:
-# 1222 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1223 "data/maps/SootopolisCity/scripts.pory"
walk_up
-# 1224 "data/maps/SootopolisCity/scripts.pory"
step_end
-# 1225 "data/maps/SootopolisCity/scripts.pory"
-# 1226 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_Boy2::
-# 1227 "data/maps/SootopolisCity/scripts.pory"
lockall
-# 1228 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_BOY_2, Common_Movement_FacePlayer
-# 1229 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 1230 "data/maps/SootopolisCity/scripts.pory"
goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 5, SootopolisCity_EventScript_Boy2Rayquaza
-# 1231 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_TwoPokemonArentAngry, MSGBOX_DEFAULT
-# 1232 "data/maps/SootopolisCity/scripts.pory"
closemessage
-# 1233 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_BOY_2, Common_Movement_FaceOriginalDirection
-# 1234 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 1235 "data/maps/SootopolisCity/scripts.pory"
releaseall
-# 1236 "data/maps/SootopolisCity/scripts.pory"
end
-# 1237 "data/maps/SootopolisCity/scripts.pory"
-# 1238 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_Boy2Rayquaza::
-# 1239 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_FlyingMonStoppedRampage, MSGBOX_DEFAULT
-# 1240 "data/maps/SootopolisCity/scripts.pory"
closemessage
-# 1241 "data/maps/SootopolisCity/scripts.pory"
releaseall
-# 1242 "data/maps/SootopolisCity/scripts.pory"
end
-# 1243 "data/maps/SootopolisCity/scripts.pory"
-# 1244 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_BlackBelt::
-# 1245 "data/maps/SootopolisCity/scripts.pory"
lockall
-# 1246 "data/maps/SootopolisCity/scripts.pory"
goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 5, SootopolisCity_EventScript_BlackBeltRayquaza
-# 1247 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_GoRedAndBlueMon, MSGBOX_DEFAULT
-# 1248 "data/maps/SootopolisCity/scripts.pory"
closemessage
-# 1249 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_BLACK_BELT, Common_Movement_FacePlayer
-# 1250 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 1251 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_DoYouKnowMonNames, MSGBOX_DEFAULT
-# 1252 "data/maps/SootopolisCity/scripts.pory"
closemessage
-# 1253 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_BLACK_BELT, Common_Movement_FaceOriginalDirection
-# 1254 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 1255 "data/maps/SootopolisCity/scripts.pory"
releaseall
-# 1256 "data/maps/SootopolisCity/scripts.pory"
end
-# 1257 "data/maps/SootopolisCity/scripts.pory"
-# 1258 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_BlackBeltRayquaza::
-# 1259 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_BLACK_BELT, Common_Movement_FacePlayer
-# 1260 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 1261 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_GreenOneSettlesThings, MSGBOX_DEFAULT
-# 1262 "data/maps/SootopolisCity/scripts.pory"
releaseall
-# 1263 "data/maps/SootopolisCity/scripts.pory"
end
-# 1264 "data/maps/SootopolisCity/scripts.pory"
-# 1265 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_Girl::
-# 1266 "data/maps/SootopolisCity/scripts.pory"
lockall
-# 1267 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_GIRL, Common_Movement_FacePlayer
-# 1268 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 1269 "data/maps/SootopolisCity/scripts.pory"
goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 5, SootopolisCity_EventScript_GirlRayquaza
-# 1270 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_SootopolisWillBeWrecked, MSGBOX_DEFAULT
-# 1271 "data/maps/SootopolisCity/scripts.pory"
closemessage
-# 1272 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_GIRL, Common_Movement_FaceOriginalDirection
-# 1273 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 1274 "data/maps/SootopolisCity/scripts.pory"
releaseall
-# 1275 "data/maps/SootopolisCity/scripts.pory"
end
-# 1276 "data/maps/SootopolisCity/scripts.pory"
-# 1277 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_GirlRayquaza::
-# 1278 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_SootopolisDidntGetWrecked, MSGBOX_DEFAULT
-# 1279 "data/maps/SootopolisCity/scripts.pory"
closemessage
-# 1280 "data/maps/SootopolisCity/scripts.pory"
releaseall
-# 1281 "data/maps/SootopolisCity/scripts.pory"
end
-# 1282 "data/maps/SootopolisCity/scripts.pory"
-# 1283 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_Maniac::
-# 1284 "data/maps/SootopolisCity/scripts.pory"
lockall
-# 1285 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_MANIAC, Common_Movement_FacePlayer
-# 1286 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 1287 "data/maps/SootopolisCity/scripts.pory"
goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 5, SootopolisCity_EventScript_ManiacRayquaza
-# 1288 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_SeeingLegendWithOwnEyes, MSGBOX_DEFAULT
-# 1289 "data/maps/SootopolisCity/scripts.pory"
closemessage
-# 1290 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_MANIAC, Common_Movement_FaceOriginalDirection
-# 1291 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 1292 "data/maps/SootopolisCity/scripts.pory"
releaseall
-# 1293 "data/maps/SootopolisCity/scripts.pory"
end
-# 1294 "data/maps/SootopolisCity/scripts.pory"
-# 1295 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_ManiacRayquaza::
-# 1296 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_SawLegendWithOwnEyes, MSGBOX_DEFAULT
-# 1297 "data/maps/SootopolisCity/scripts.pory"
releaseall
-# 1298 "data/maps/SootopolisCity/scripts.pory"
end
-# 1299 "data/maps/SootopolisCity/scripts.pory"
-# 1300 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_Wallace::
-# 1301 "data/maps/SootopolisCity/scripts.pory"
lock
-# 1302 "data/maps/SootopolisCity/scripts.pory"
faceplayer
-# 1303 "data/maps/SootopolisCity/scripts.pory"
goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 4, SootopolisCity_EventScript_GoToSkyPillar
-# 1304 "data/maps/SootopolisCity/scripts.pory"
goto_if_set FLAG_RECEIVED_HM_WATERFALL, SootopolisCity_EventScript_GoToGym
-# 1305 "data/maps/SootopolisCity/scripts.pory"
goto_if_set FLAG_SOOTOPOLIS_ARCHIE_MAXIE_LEAVE, SootopolisCity_EventScript_GiveWaterfall
-# 1306 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_AquaMagmaDidntMeanHarm, MSGBOX_DEFAULT
-# 1307 "data/maps/SootopolisCity/scripts.pory"
release
-# 1308 "data/maps/SootopolisCity/scripts.pory"
end
-# 1309 "data/maps/SootopolisCity/scripts.pory"
-# 1310 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_GiveWaterfall::
-# 1311 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_ThankYouForHelpAcceptThis, MSGBOX_DEFAULT
-# 1312 "data/maps/SootopolisCity/scripts.pory"
giveitem ITEM_HM_WATERFALL
-# 1313 "data/maps/SootopolisCity/scripts.pory"
setflag FLAG_RECEIVED_HM_WATERFALL
-# 1314 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_ExplainWaterfallGoToGym, MSGBOX_DEFAULT
-# 1315 "data/maps/SootopolisCity/scripts.pory"
closemessage
-# 1316 "data/maps/SootopolisCity/scripts.pory"
call_if_eq VAR_FACING, DIR_NORTH, SootopolisCity_EventScript_WallaceMoveFromGym
-# 1317 "data/maps/SootopolisCity/scripts.pory"
call_if_eq VAR_FACING, DIR_EAST, SootopolisCity_EventScript_WallaceMoveFromGym
-# 1318 "data/maps/SootopolisCity/scripts.pory"
call_if_eq VAR_FACING, DIR_WEST, SootopolisCity_EventScript_WallaceMoveFromGymWest
-# 1319 "data/maps/SootopolisCity/scripts.pory"
release
-# 1320 "data/maps/SootopolisCity/scripts.pory"
end
-# 1321 "data/maps/SootopolisCity/scripts.pory"
-# 1322 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_WallaceMoveFromGym::
-# 1323 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_WALLACE, SootopolisCity_Movement_WallaceMoveFromGym
-# 1324 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 1325 "data/maps/SootopolisCity/scripts.pory"
copyobjectxytoperm LOCALID_WALLACE
-# 1326 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_SOOTOPOLIS_WALLACE_STATE, 1
-# 1327 "data/maps/SootopolisCity/scripts.pory"
return
-# 1328 "data/maps/SootopolisCity/scripts.pory"
-# 1329 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_WallaceMoveFromGymWest::
-# 1330 "data/maps/SootopolisCity/scripts.pory"
applymovement LOCALID_WALLACE, SootopolisCity_Movement_WallaceMoveFromGymWest
-# 1331 "data/maps/SootopolisCity/scripts.pory"
waitmovement 0
-# 1332 "data/maps/SootopolisCity/scripts.pory"
copyobjectxytoperm LOCALID_WALLACE
-# 1333 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_SOOTOPOLIS_WALLACE_STATE, 2
-# 1334 "data/maps/SootopolisCity/scripts.pory"
return
-# 1335 "data/maps/SootopolisCity/scripts.pory"
-# 1336 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_GoToSkyPillar::
-# 1337 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_HaventYouScaledSkyPillar, MSGBOX_DEFAULT
-# 1338 "data/maps/SootopolisCity/scripts.pory"
release
-# 1339 "data/maps/SootopolisCity/scripts.pory"
end
-# 1340 "data/maps/SootopolisCity/scripts.pory"
-# 1341 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_GoToGym::
-# 1342 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_DazzledByMentor, MSGBOX_DEFAULT
-# 1343 "data/maps/SootopolisCity/scripts.pory"
release
-# 1344 "data/maps/SootopolisCity/scripts.pory"
end
-# 1345 "data/maps/SootopolisCity/scripts.pory"
-# 1346 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Movement_WallaceMoveFromGym:
-# 1347 "data/maps/SootopolisCity/scripts.pory"
walk_right
-# 1348 "data/maps/SootopolisCity/scripts.pory"
walk_in_place_faster_down
-# 1349 "data/maps/SootopolisCity/scripts.pory"
step_end
-# 1350 "data/maps/SootopolisCity/scripts.pory"
-# 1351 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Movement_WallaceMoveFromGymWest:
-# 1352 "data/maps/SootopolisCity/scripts.pory"
walk_left
-# 1353 "data/maps/SootopolisCity/scripts.pory"
walk_in_place_faster_down
-# 1354 "data/maps/SootopolisCity/scripts.pory"
step_end
-# 1355 "data/maps/SootopolisCity/scripts.pory"
-# 1356 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_Maxie::
-# 1357 "data/maps/SootopolisCity/scripts.pory"
lockall
-# 1358 "data/maps/SootopolisCity/scripts.pory"
goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 5, SootopolisCity_EventScript_MaxieRayquaza
-# 1359 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_GroudonPleaseStop, MSGBOX_DEFAULT
-# 1360 "data/maps/SootopolisCity/scripts.pory"
closemessage
-# 1361 "data/maps/SootopolisCity/scripts.pory"
releaseall
-# 1362 "data/maps/SootopolisCity/scripts.pory"
end
-# 1363 "data/maps/SootopolisCity/scripts.pory"
-# 1364 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_MaxieRayquaza::
-# 1365 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_AfterAllOurScheming, MSGBOX_DEFAULT
-# 1366 "data/maps/SootopolisCity/scripts.pory"
setflag FLAG_MET_MAXIE_SOOTOPOLIS
-# 1367 "data/maps/SootopolisCity/scripts.pory"
goto_if_set FLAG_MET_ARCHIE_SOOTOPOLIS, SootopolisCity_EventScript_MaxieArchieLeave
-# 1368 "data/maps/SootopolisCity/scripts.pory"
releaseall
-# 1369 "data/maps/SootopolisCity/scripts.pory"
end
-# 1370 "data/maps/SootopolisCity/scripts.pory"
-# 1371 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_Archie::
-# 1372 "data/maps/SootopolisCity/scripts.pory"
lockall
-# 1373 "data/maps/SootopolisCity/scripts.pory"
goto_if_eq VAR_SOOTOPOLIS_CITY_STATE, 5, SootopolisCity_EventScript_ArchieRayquaza
-# 1374 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_KyogreCalmDown, MSGBOX_DEFAULT
-# 1375 "data/maps/SootopolisCity/scripts.pory"
closemessage
-# 1376 "data/maps/SootopolisCity/scripts.pory"
releaseall
-# 1377 "data/maps/SootopolisCity/scripts.pory"
end
-# 1378 "data/maps/SootopolisCity/scripts.pory"
-# 1379 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_ArchieRayquaza::
-# 1380 "data/maps/SootopolisCity/scripts.pory"
msgbox SootopolisCity_Text_TryingMeaninglessToPokemon, MSGBOX_DEFAULT
-# 1381 "data/maps/SootopolisCity/scripts.pory"
setflag FLAG_MET_ARCHIE_SOOTOPOLIS
-# 1382 "data/maps/SootopolisCity/scripts.pory"
goto_if_set FLAG_MET_MAXIE_SOOTOPOLIS, SootopolisCity_EventScript_MaxieArchieLeave
-# 1383 "data/maps/SootopolisCity/scripts.pory"
releaseall
-# 1384 "data/maps/SootopolisCity/scripts.pory"
end
-# 1385 "data/maps/SootopolisCity/scripts.pory"
-# 1386 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_EventScript_MaxieArchieLeave::
-# 1387 "data/maps/SootopolisCity/scripts.pory"
setflag FLAG_HIDE_SOOTOPOLIS_CITY_MAXIE
-# 1388 "data/maps/SootopolisCity/scripts.pory"
setflag FLAG_HIDE_SOOTOPOLIS_CITY_ARCHIE
-# 1389 "data/maps/SootopolisCity/scripts.pory"
setflag FLAG_SOOTOPOLIS_ARCHIE_MAXIE_LEAVE
-# 1390 "data/maps/SootopolisCity/scripts.pory"
clearflag FLAG_HIDE_MT_PYRE_SUMMIT_MAXIE
-# 1391 "data/maps/SootopolisCity/scripts.pory"
clearflag FLAG_HIDE_MT_PYRE_SUMMIT_ARCHIE
-# 1392 "data/maps/SootopolisCity/scripts.pory"
setvar VAR_MT_PYRE_STATE, 2
-# 1393 "data/maps/SootopolisCity/scripts.pory"
warpsilent MAP_SOOTOPOLIS_CITY, 31, 34
-# 1394 "data/maps/SootopolisCity/scripts.pory"
waitstate
-# 1395 "data/maps/SootopolisCity/scripts.pory"
releaseall
-# 1396 "data/maps/SootopolisCity/scripts.pory"
end
-# 1397 "data/maps/SootopolisCity/scripts.pory"
-# 1398 "data/maps/SootopolisCity/scripts.pory"
@ Unused
-# 1399 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Movement_Levitate::
-# 1400 "data/maps/SootopolisCity/scripts.pory"
levitate
-# 1401 "data/maps/SootopolisCity/scripts.pory"
step_end
-# 1402 "data/maps/SootopolisCity/scripts.pory"
-# 1403 "data/maps/SootopolisCity/scripts.pory"
@ Unused
-# 1404 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Movement_DestroyTask::
-# 1405 "data/maps/SootopolisCity/scripts.pory"
destroy_extra_task
-# 1406 "data/maps/SootopolisCity/scripts.pory"
step_end
-# 1407 "data/maps/SootopolisCity/scripts.pory"
-# 1408 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_GymSign:
-# 1409 "data/maps/SootopolisCity/scripts.pory"
.string "SOOTOPOLIS CITY POKéMON GYM\n"
-# 1410 "data/maps/SootopolisCity/scripts.pory"
.string "LEADER: JUAN\p"
-# 1411 "data/maps/SootopolisCity/scripts.pory"
.string "“The GYM LEADER with the beauty\n"
-# 1412 "data/maps/SootopolisCity/scripts.pory"
.string "of pure water!”$"
-# 1413 "data/maps/SootopolisCity/scripts.pory"
-# 1414 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_CitySign:
-# 1415 "data/maps/SootopolisCity/scripts.pory"
.string "SOOTOPOLIS CITY\p"
-# 1416 "data/maps/SootopolisCity/scripts.pory"
.string "“The mystical city where history\n"
-# 1417 "data/maps/SootopolisCity/scripts.pory"
.string "slumbers.”$"
-# 1418 "data/maps/SootopolisCity/scripts.pory"
-# 1419 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_DoorIsClosed:
-# 1420 "data/maps/SootopolisCity/scripts.pory"
.string "The door is closed.$"
-# 1421 "data/maps/SootopolisCity/scripts.pory"
-# 1422 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_PhysicallyFitLivingHere:
-# 1423 "data/maps/SootopolisCity/scripts.pory"
.string "Diving in the sea. Climbing up and\n"
-# 1424 "data/maps/SootopolisCity/scripts.pory"
.string "down stairs all the time…\p"
-# 1425 "data/maps/SootopolisCity/scripts.pory"
.string "If you live in this town, you end up\n"
-# 1426 "data/maps/SootopolisCity/scripts.pory"
.string "getting physically fit.$"
-# 1427 "data/maps/SootopolisCity/scripts.pory"
-# 1428 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_GiantPokemonSuddenlyAppeared:
-# 1429 "data/maps/SootopolisCity/scripts.pory"
.string "These giant POKéMON suddenly appeared\n"
-# 1430 "data/maps/SootopolisCity/scripts.pory"
.string "in the middle of the city!\p"
-# 1431 "data/maps/SootopolisCity/scripts.pory"
.string "And, I've never seen them before!\p"
-# 1432 "data/maps/SootopolisCity/scripts.pory"
.string "Why are they smashing into each\n"
-# 1433 "data/maps/SootopolisCity/scripts.pory"
.string "other like that?\p"
-# 1434 "data/maps/SootopolisCity/scripts.pory"
.string "Why can't they be friends, those\n"
-# 1435 "data/maps/SootopolisCity/scripts.pory"
.string "POKéMON?$"
-# 1436 "data/maps/SootopolisCity/scripts.pory"
-# 1437 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_WhatIsThatGreenPokemon:
-# 1438 "data/maps/SootopolisCity/scripts.pory"
.string "What? What? What?\n"
-# 1439 "data/maps/SootopolisCity/scripts.pory"
.string "What is that green POKéMON?!$"
-# 1440 "data/maps/SootopolisCity/scripts.pory"
-# 1441 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_WhereDidLegendariesGo:
-# 1442 "data/maps/SootopolisCity/scripts.pory"
.string "GROUDON and KYOGRE…\n"
-# 1443 "data/maps/SootopolisCity/scripts.pory"
.string "Where did they go?\p"
-# 1444 "data/maps/SootopolisCity/scripts.pory"
.string "Will they cause droughts or downpours\n"
-# 1445 "data/maps/SootopolisCity/scripts.pory"
.string "somewhere else?$"
-# 1446 "data/maps/SootopolisCity/scripts.pory"
-# 1447 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_TwoPokemonArentAngry:
-# 1448 "data/maps/SootopolisCity/scripts.pory"
.string "I just get this sense somehow that\n"
-# 1449 "data/maps/SootopolisCity/scripts.pory"
.string "the two POKéMON aren't angry.\p"
-# 1450 "data/maps/SootopolisCity/scripts.pory"
.string "I think… They probably can't control\n"
-# 1451 "data/maps/SootopolisCity/scripts.pory"
.string "their own power…$"
-# 1452 "data/maps/SootopolisCity/scripts.pory"
-# 1453 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_FlyingMonStoppedRampage:
-# 1454 "data/maps/SootopolisCity/scripts.pory"
.string "That flying POKéMON came down from\n"
-# 1455 "data/maps/SootopolisCity/scripts.pory"
.string "the sky and stopped the rampaging\l"
-# 1456 "data/maps/SootopolisCity/scripts.pory"
.string "POKéMON…$"
-# 1457 "data/maps/SootopolisCity/scripts.pory"
-# 1458 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_WonderWhatWorldIsLike:
-# 1459 "data/maps/SootopolisCity/scripts.pory"
.string "I… I've never been out of this city.\p"
-# 1460 "data/maps/SootopolisCity/scripts.pory"
.string "I wonder what the world is like on\n"
-# 1461 "data/maps/SootopolisCity/scripts.pory"
.string "the other side of this round sky?$"
-# 1462 "data/maps/SootopolisCity/scripts.pory"
-# 1463 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_ThisIsWicked:
-# 1464 "data/maps/SootopolisCity/scripts.pory"
.string "Wow!\n"
-# 1465 "data/maps/SootopolisCity/scripts.pory"
.string "This is wicked!$"
-# 1466 "data/maps/SootopolisCity/scripts.pory"
-# 1467 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_ThatWasWicked:
-# 1468 "data/maps/SootopolisCity/scripts.pory"
.string "Wow!\n"
-# 1469 "data/maps/SootopolisCity/scripts.pory"
.string "That was wicked!$"
-# 1470 "data/maps/SootopolisCity/scripts.pory"
-# 1471 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_GoRedAndBlueMon:
-# 1472 "data/maps/SootopolisCity/scripts.pory"
.string "Go for it, red POKéMON!\n"
-# 1473 "data/maps/SootopolisCity/scripts.pory"
.string "Don't back off, blue POKéMON!$"
-# 1474 "data/maps/SootopolisCity/scripts.pory"
-# 1475 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_DoYouKnowMonNames:
-# 1476 "data/maps/SootopolisCity/scripts.pory"
.string "… … … … … …\p"
-# 1477 "data/maps/SootopolisCity/scripts.pory"
.string "Hi, do you know the names of those\n"
-# 1478 "data/maps/SootopolisCity/scripts.pory"
.string "POKéMON fighting over there?$"
-# 1479 "data/maps/SootopolisCity/scripts.pory"
-# 1480 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_GreenOneSettlesThings:
-# 1481 "data/maps/SootopolisCity/scripts.pory"
.string "I was wondering which one would win,\n"
-# 1482 "data/maps/SootopolisCity/scripts.pory"
.string "the red one or the blue one, but, oh no,\l"
-# 1483 "data/maps/SootopolisCity/scripts.pory"
.string "it's the green one that settles things!\p"
-# 1484 "data/maps/SootopolisCity/scripts.pory"
.string "Talk about a huge turn of events!$"
-# 1485 "data/maps/SootopolisCity/scripts.pory"
-# 1486 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_SeeingLegendWithOwnEyes:
-# 1487 "data/maps/SootopolisCity/scripts.pory"
.string "There's an ancient legend that claims\n"
-# 1488 "data/maps/SootopolisCity/scripts.pory"
.string "the land and sea were shaped by\l"
-# 1489 "data/maps/SootopolisCity/scripts.pory"
.string "a colossal battle between POKéMON.\p"
-# 1490 "data/maps/SootopolisCity/scripts.pory"
.string "Well, I'm seeing that happen with\n"
-# 1491 "data/maps/SootopolisCity/scripts.pory"
.string "my very own eyes!\p"
-# 1492 "data/maps/SootopolisCity/scripts.pory"
.string "Whoa! I never expected to be\n"
-# 1493 "data/maps/SootopolisCity/scripts.pory"
.string "witness to something this huge!$"
-# 1494 "data/maps/SootopolisCity/scripts.pory"
-# 1495 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_SawLegendWithOwnEyes:
-# 1496 "data/maps/SootopolisCity/scripts.pory"
.string "There's an ancient legend that claims\n"
-# 1497 "data/maps/SootopolisCity/scripts.pory"
.string "the land and sea were shaped by\l"
-# 1498 "data/maps/SootopolisCity/scripts.pory"
.string "a colossal battle between POKéMON.\p"
-# 1499 "data/maps/SootopolisCity/scripts.pory"
.string "Well, I saw that happen with\n"
-# 1500 "data/maps/SootopolisCity/scripts.pory"
.string "my very own eyes!\p"
-# 1501 "data/maps/SootopolisCity/scripts.pory"
.string "Whoa! I never expected to be\n"
-# 1502 "data/maps/SootopolisCity/scripts.pory"
.string "witness to something this huge!$"
-# 1503 "data/maps/SootopolisCity/scripts.pory"
-# 1504 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_BigPokemonFighting:
-# 1505 "data/maps/SootopolisCity/scripts.pory"
.string "A big POKéMON is fighting with\n"
-# 1506 "data/maps/SootopolisCity/scripts.pory"
.string "another big POKéMON!\p"
-# 1507 "data/maps/SootopolisCity/scripts.pory"
.string "Please, someone make them stop!$"
-# 1508 "data/maps/SootopolisCity/scripts.pory"
-# 1509 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_PrettyMonCameFromSky:
-# 1510 "data/maps/SootopolisCity/scripts.pory"
.string "A pretty POKéMON came down from\n"
-# 1511 "data/maps/SootopolisCity/scripts.pory"
.string "the sky…$"
-# 1512 "data/maps/SootopolisCity/scripts.pory"
-# 1513 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_SootopolisWillBeWrecked:
-# 1514 "data/maps/SootopolisCity/scripts.pory"
.string "Oh, no!\n"
-# 1515 "data/maps/SootopolisCity/scripts.pory"
.string "SOOTOPOLIS CITY will get wrecked!$"
-# 1516 "data/maps/SootopolisCity/scripts.pory"
-# 1517 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_SootopolisDidntGetWrecked:
-# 1518 "data/maps/SootopolisCity/scripts.pory"
.string "SOOTOPOLIS CITY didn't get wrecked!$"
-# 1519 "data/maps/SootopolisCity/scripts.pory"
-# 1520 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_NoOrdinaryTourist:
-# 1521 "data/maps/SootopolisCity/scripts.pory"
.string "Hm!\n"
-# 1522 "data/maps/SootopolisCity/scripts.pory"
.string "You've come all the way to SOOTOPOLIS?\l"
-# 1523 "data/maps/SootopolisCity/scripts.pory"
.string "You're no ordinary tourist.\p"
-# 1524 "data/maps/SootopolisCity/scripts.pory"
.string "But I suppose that doesn't make you\n"
-# 1525 "data/maps/SootopolisCity/scripts.pory"
.string "an extraordinary tourist, either.$"
-# 1526 "data/maps/SootopolisCity/scripts.pory"
-# 1527 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_CityRegainedCalm:
-# 1528 "data/maps/SootopolisCity/scripts.pory"
.string "The city has regained its calm…$"
-# 1529 "data/maps/SootopolisCity/scripts.pory"
-# 1530 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_CaveOfOriginPleaseLeave:
-# 1531 "data/maps/SootopolisCity/scripts.pory"
.string "Who might you be?\p"
-# 1532 "data/maps/SootopolisCity/scripts.pory"
.string "This is the CAVE OF ORIGIN.\p"
-# 1533 "data/maps/SootopolisCity/scripts.pory"
.string "The spirits of POKéMON, becalmed at\n"
-# 1534 "data/maps/SootopolisCity/scripts.pory"
.string "MT. PYRE, are said to be revived here.\p"
-# 1535 "data/maps/SootopolisCity/scripts.pory"
.string "Please leave.$"
-# 1536 "data/maps/SootopolisCity/scripts.pory"
-# 1537 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_LeadSuperiorTrainerToCave:
-# 1538 "data/maps/SootopolisCity/scripts.pory"
.string "A person with a strong will and\n"
-# 1539 "data/maps/SootopolisCity/scripts.pory"
.string "superior talent…\p"
-# 1540 "data/maps/SootopolisCity/scripts.pory"
.string "A TRAINER who has knowledge and\n"
-# 1541 "data/maps/SootopolisCity/scripts.pory"
.string "experience of many kinds of POKéMON…\p"
-# 1542 "data/maps/SootopolisCity/scripts.pory"
.string "If such a person were to appear, I was\n"
-# 1543 "data/maps/SootopolisCity/scripts.pory"
.string "instructed by WALLACE to lead that\l"
-# 1544 "data/maps/SootopolisCity/scripts.pory"
.string "TRAINER to this CAVE.$"
-# 1545 "data/maps/SootopolisCity/scripts.pory"
-# 1546 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_AwakenedPokemonClash:
-# 1547 "data/maps/SootopolisCity/scripts.pory"
.string "Oh, my…\p"
-# 1548 "data/maps/SootopolisCity/scripts.pory"
.string "The clash between the two awakened\n"
-# 1549 "data/maps/SootopolisCity/scripts.pory"
.string "POKéMON was quelled by the awakening\l"
-# 1550 "data/maps/SootopolisCity/scripts.pory"
.string "of a third POKéMON…$"
-# 1551 "data/maps/SootopolisCity/scripts.pory"
-# 1552 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_CaveOfOriginSleepsToo:
-# 1553 "data/maps/SootopolisCity/scripts.pory"
.string "This is the CAVE OF ORIGIN…\p"
-# 1554 "data/maps/SootopolisCity/scripts.pory"
.string "With the passing of the crisis,\n"
-# 1555 "data/maps/SootopolisCity/scripts.pory"
.string "the cave, too, shall sleep…$"
-# 1556 "data/maps/SootopolisCity/scripts.pory"
-# 1557 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_SootopolisSkyBeautiful:
-# 1558 "data/maps/SootopolisCity/scripts.pory"
.string "SOOTOPOLIS sprang up as a town in\n"
-# 1559 "data/maps/SootopolisCity/scripts.pory"
.string "the crater of a volcano.\p"
-# 1560 "data/maps/SootopolisCity/scripts.pory"
.string "If you look up at the sky, the lip of\n"
-# 1561 "data/maps/SootopolisCity/scripts.pory"
.string "the crater is also visible.\l"
-# 1562 "data/maps/SootopolisCity/scripts.pory"
.string "So, all you see is the sky in a circle.\p"
-# 1563 "data/maps/SootopolisCity/scripts.pory"
.string "But that's what makes the sky above\n"
-# 1564 "data/maps/SootopolisCity/scripts.pory"
.string "SOOTOPOLIS the most beautiful.$"
-# 1565 "data/maps/SootopolisCity/scripts.pory"
-# 1566 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_GiganticPokemonFight:
-# 1567 "data/maps/SootopolisCity/scripts.pory"
.string "When two POKéMON that gigantic\n"
-# 1568 "data/maps/SootopolisCity/scripts.pory"
.string "are fighting that savagely, there's\l"
-# 1569 "data/maps/SootopolisCity/scripts.pory"
.string "not much that we can do.$"
-# 1570 "data/maps/SootopolisCity/scripts.pory"
-# 1571 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_FearedWorstWhenPokemonFlewDown:
-# 1572 "data/maps/SootopolisCity/scripts.pory"
.string "When that third POKéMON flew down,\n"
-# 1573 "data/maps/SootopolisCity/scripts.pory"
.string "I feared the worst.$"
-# 1574 "data/maps/SootopolisCity/scripts.pory"
-# 1575 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_NightSkyFavoriteScenery:
-# 1576 "data/maps/SootopolisCity/scripts.pory"
.string "A circle of a night sky framed by\n"
-# 1577 "data/maps/SootopolisCity/scripts.pory"
.string "the crater of a volcano…\p"
-# 1578 "data/maps/SootopolisCity/scripts.pory"
.string "And in that ring, stars flicker and\n"
-# 1579 "data/maps/SootopolisCity/scripts.pory"
.string "blink as if they were alive…\l"
-# 1580 "data/maps/SootopolisCity/scripts.pory"
.string "It's my favorite scenery.$"
-# 1581 "data/maps/SootopolisCity/scripts.pory"
-# 1582 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_WeatherWentWild:
-# 1583 "data/maps/SootopolisCity/scripts.pory"
.string "The weather was clear this morning,\n"
-# 1584 "data/maps/SootopolisCity/scripts.pory"
.string "but…\p"
-# 1585 "data/maps/SootopolisCity/scripts.pory"
.string "All of a sudden, dark clouds brewed up,\n"
-# 1586 "data/maps/SootopolisCity/scripts.pory"
.string "rain started falling in sheets, and\l"
-# 1587 "data/maps/SootopolisCity/scripts.pory"
.string "there was thunder and lightning, too.\p"
-# 1588 "data/maps/SootopolisCity/scripts.pory"
.string "The weather just went completely\n"
-# 1589 "data/maps/SootopolisCity/scripts.pory"
.string "wild!\p"
-# 1590 "data/maps/SootopolisCity/scripts.pory"
.string "Is all of this because of those\n"
-# 1591 "data/maps/SootopolisCity/scripts.pory"
.string "POKéMON?$"
-# 1592 "data/maps/SootopolisCity/scripts.pory"
-# 1593 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_YouBroughtFlyingMon:
-# 1594 "data/maps/SootopolisCity/scripts.pory"
.string "Oh?\p"
-# 1595 "data/maps/SootopolisCity/scripts.pory"
.string "It was you who brought that flying\n"
-# 1596 "data/maps/SootopolisCity/scripts.pory"
.string "POKéMON here?\p"
-# 1597 "data/maps/SootopolisCity/scripts.pory"
.string "Well, aren't you amazing!$"
-# 1598 "data/maps/SootopolisCity/scripts.pory"
-# 1599 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_GroudonPleaseStop:
-# 1600 "data/maps/SootopolisCity/scripts.pory"
.string "MAXIE: G… GROUDON…\n"
-# 1601 "data/maps/SootopolisCity/scripts.pory"
.string "Please! Stop what you're doing!\p"
-# 1602 "data/maps/SootopolisCity/scripts.pory"
.string "I know the extent of your power now!\p"
-# 1603 "data/maps/SootopolisCity/scripts.pory"
.string "If you keep going, all HOENN, not just\n"
-# 1604 "data/maps/SootopolisCity/scripts.pory"
.string "SOOTOPOLIS, will be utterly ruined!$"
-# 1605 "data/maps/SootopolisCity/scripts.pory"
-# 1606 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_AfterAllOurScheming:
-# 1607 "data/maps/SootopolisCity/scripts.pory"
.string "MAXIE: So the super-ancient POKéMON\n"
-# 1608 "data/maps/SootopolisCity/scripts.pory"
.string "weren't only GROUDON and KYOGRE…\p"
-# 1609 "data/maps/SootopolisCity/scripts.pory"
.string "After all our fruitless scheming and\n"
-# 1610 "data/maps/SootopolisCity/scripts.pory"
.string "frantic efforts, that one POKéMON's\l"
-# 1611 "data/maps/SootopolisCity/scripts.pory"
.string "simple action puts everything right\l"
-# 1612 "data/maps/SootopolisCity/scripts.pory"
.string "again as if nothing had happened…\p"
-# 1613 "data/maps/SootopolisCity/scripts.pory"
.string "Fu…\n"
-# 1614 "data/maps/SootopolisCity/scripts.pory"
.string "Fuhahaha…$"
-# 1615 "data/maps/SootopolisCity/scripts.pory"
-# 1616 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_KyogreCalmDown:
-# 1617 "data/maps/SootopolisCity/scripts.pory"
.string "ARCHIE: KYOGRE! What's wrong?!\n"
-# 1618 "data/maps/SootopolisCity/scripts.pory"
.string "Look over here! It's the RED ORB!\l"
-# 1619 "data/maps/SootopolisCity/scripts.pory"
.string "Calm down! KYOGRE!\p"
-# 1620 "data/maps/SootopolisCity/scripts.pory"
.string "… … … … … …\n"
-# 1621 "data/maps/SootopolisCity/scripts.pory"
.string "… … … … … …\p"
-# 1622 "data/maps/SootopolisCity/scripts.pory"
.string "It's no good!\n"
-# 1623 "data/maps/SootopolisCity/scripts.pory"
.string "It's not responding at all!$"
-# 1624 "data/maps/SootopolisCity/scripts.pory"
-# 1625 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_TryingMeaninglessToPokemon:
-# 1626 "data/maps/SootopolisCity/scripts.pory"
.string "ARCHIE: KYOGRE and GROUDON both\n"
-# 1627 "data/maps/SootopolisCity/scripts.pory"
.string "flew off to who knows where.\p"
-# 1628 "data/maps/SootopolisCity/scripts.pory"
.string "The weather in HOENN has returned\n"
-# 1629 "data/maps/SootopolisCity/scripts.pory"
.string "to its normal state…\p"
-# 1630 "data/maps/SootopolisCity/scripts.pory"
.string "Haha…\n"
-# 1631 "data/maps/SootopolisCity/scripts.pory"
.string "Hahaha…\p"
-# 1632 "data/maps/SootopolisCity/scripts.pory"
.string "Maybe what we were trying to do was\n"
-# 1633 "data/maps/SootopolisCity/scripts.pory"
.string "something small, even meaningless,\l"
-# 1634 "data/maps/SootopolisCity/scripts.pory"
.string "to POKéMON…$"
-# 1635 "data/maps/SootopolisCity/scripts.pory"
-# 1636 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_InvolvedWithCrisisComeWithMe:
-# 1637 "data/maps/SootopolisCity/scripts.pory"
.string "STEVEN: Those POKéMON fighting…\n"
-# 1638 "data/maps/SootopolisCity/scripts.pory"
.string "GROUDON… And KYOGRE…\p"
-# 1639 "data/maps/SootopolisCity/scripts.pory"
.string "The two super-ancient POKéMON\n"
-# 1640 "data/maps/SootopolisCity/scripts.pory"
.string "were awakened from a long sleep…\p"
-# 1641 "data/maps/SootopolisCity/scripts.pory"
.string "And now they are smashing each other\n"
-# 1642 "data/maps/SootopolisCity/scripts.pory"
.string "with their uncontrollable energy…\p"
-# 1643 "data/maps/SootopolisCity/scripts.pory"
.string "…{PLAYER}{KUN}.\p"
-# 1644 "data/maps/SootopolisCity/scripts.pory"
.string "You being here now I'll take to mean\n"
-# 1645 "data/maps/SootopolisCity/scripts.pory"
.string "that you're prepared to become\l"
-# 1646 "data/maps/SootopolisCity/scripts.pory"
.string "involved in this crisis.\p"
-# 1647 "data/maps/SootopolisCity/scripts.pory"
.string "Well, then, there's someone that\n"
-# 1648 "data/maps/SootopolisCity/scripts.pory"
.string "I'd like you to meet.\p"
-# 1649 "data/maps/SootopolisCity/scripts.pory"
.string "Come with me, please.$"
-# 1650 "data/maps/SootopolisCity/scripts.pory"
-# 1651 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_DoesThisMakeYourFearPokemon:
-# 1652 "data/maps/SootopolisCity/scripts.pory"
.string "STEVEN: Listen, {PLAYER}{KUN}.\p"
-# 1653 "data/maps/SootopolisCity/scripts.pory"
.string "Does seeing GROUDON and KYOGRE make\n"
-# 1654 "data/maps/SootopolisCity/scripts.pory"
.string "you think POKéMON are to be feared?\p"
-# 1655 "data/maps/SootopolisCity/scripts.pory"
.string "But that's not true.\n"
-# 1656 "data/maps/SootopolisCity/scripts.pory"
.string "POKéMON are really more…\p"
-# 1657 "data/maps/SootopolisCity/scripts.pory"
.string "…Why am I asking you this?\n"
-# 1658 "data/maps/SootopolisCity/scripts.pory"
.string "You already know.$"
-# 1659 "data/maps/SootopolisCity/scripts.pory"
-# 1660 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_HereWereAreHelpWallace:
-# 1661 "data/maps/SootopolisCity/scripts.pory"
.string "STEVEN: Okay, here we are!\p"
-# 1662 "data/maps/SootopolisCity/scripts.pory"
.string "Inside here you'll find someone named\n"
-# 1663 "data/maps/SootopolisCity/scripts.pory"
.string "WALLACE.\p"
-# 1664 "data/maps/SootopolisCity/scripts.pory"
.string "I think you have what's needed to\n"
-# 1665 "data/maps/SootopolisCity/scripts.pory"
.string "help him…$"
-# 1666 "data/maps/SootopolisCity/scripts.pory"
-# 1667 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_KnowWhatsNeededToHelpHim:
-# 1668 "data/maps/SootopolisCity/scripts.pory"
.string "STEVEN: I think you have what's\n"
-# 1669 "data/maps/SootopolisCity/scripts.pory"
.string "needed to help him…$"
-# 1670 "data/maps/SootopolisCity/scripts.pory"
-# 1671 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_NeverBeenToSkyPillar:
-# 1672 "data/maps/SootopolisCity/scripts.pory"
.string "STEVEN: The SKY PILLAR…\p"
-# 1673 "data/maps/SootopolisCity/scripts.pory"
.string "I've never been there.\n"
-# 1674 "data/maps/SootopolisCity/scripts.pory"
.string "I wonder where it could be?$"
-# 1675 "data/maps/SootopolisCity/scripts.pory"
-# 1676 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_SoThatsRayquaza:
-# 1677 "data/maps/SootopolisCity/scripts.pory"
.string "STEVEN: So that's RAYQUAZA…\p"
-# 1678 "data/maps/SootopolisCity/scripts.pory"
.string "It's incredible how the two rampaging\n"
-# 1679 "data/maps/SootopolisCity/scripts.pory"
.string "POKéMON would flee from it in fear…$"
-# 1680 "data/maps/SootopolisCity/scripts.pory"
-# 1681 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_MaxieArchieLeft:
-# 1682 "data/maps/SootopolisCity/scripts.pory"
.string "STEVEN: It looks like both MAXIE and\n"
-# 1683 "data/maps/SootopolisCity/scripts.pory"
.string "ARCHIE have gone away somewhere.\p"
-# 1684 "data/maps/SootopolisCity/scripts.pory"
.string "Perhaps they've gone to MT. PYRE to\n"
-# 1685 "data/maps/SootopolisCity/scripts.pory"
.string "return those ORBS…$"
-# 1686 "data/maps/SootopolisCity/scripts.pory"
-# 1687 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_HaventYouScaledSkyPillar:
-# 1688 "data/maps/SootopolisCity/scripts.pory"
.string "WALLACE: Oh?\n"
-# 1689 "data/maps/SootopolisCity/scripts.pory"
.string "{PLAYER}{KUN}?\p"
-# 1690 "data/maps/SootopolisCity/scripts.pory"
.string "Haven't you scaled the SKY PILLAR\n"
-# 1691 "data/maps/SootopolisCity/scripts.pory"
.string "yet?\p"
-# 1692 "data/maps/SootopolisCity/scripts.pory"
.string "I'm sure that you can make it to\n"
-# 1693 "data/maps/SootopolisCity/scripts.pory"
.string "the top of the SKY PILLAR…$"
-# 1694 "data/maps/SootopolisCity/scripts.pory"
-# 1695 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_AquaMagmaDidntMeanHarm:
-# 1696 "data/maps/SootopolisCity/scripts.pory"
.string "WALLACE: {PLAYER}{KUN}…\p"
-# 1697 "data/maps/SootopolisCity/scripts.pory"
.string "The leaders of TEAM MAGMA and AQUA,\n"
-# 1698 "data/maps/SootopolisCity/scripts.pory"
.string "I don't think they meant harm.\p"
-# 1699 "data/maps/SootopolisCity/scripts.pory"
.string "It wouldn't hurt to hear what they\n"
-# 1700 "data/maps/SootopolisCity/scripts.pory"
.string "have to say for themselves.$"
-# 1701 "data/maps/SootopolisCity/scripts.pory"
-# 1702 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_ThankYouForHelpAcceptThis:
-# 1703 "data/maps/SootopolisCity/scripts.pory"
.string "WALLACE: {PLAYER}{KUN}…\n"
-# 1704 "data/maps/SootopolisCity/scripts.pory"
.string "My eyes didn't deceive me.\p"
-# 1705 "data/maps/SootopolisCity/scripts.pory"
.string "Thanks to your help, SOOTOPOLIS…\n"
-# 1706 "data/maps/SootopolisCity/scripts.pory"
.string "No, all of HOENN was saved.\p"
-# 1707 "data/maps/SootopolisCity/scripts.pory"
.string "On behalf of the people, I thank you.\p"
-# 1708 "data/maps/SootopolisCity/scripts.pory"
.string "This is a gift from me.\n"
-# 1709 "data/maps/SootopolisCity/scripts.pory"
.string "Please accept it.$"
-# 1710 "data/maps/SootopolisCity/scripts.pory"
-# 1711 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_ExplainWaterfallGoToGym:
-# 1712 "data/maps/SootopolisCity/scripts.pory"
.string "That HIDDEN MACHINE contains\n"
-# 1713 "data/maps/SootopolisCity/scripts.pory"
.string "WATERFALL.\p"
-# 1714 "data/maps/SootopolisCity/scripts.pory"
.string "If you have the RAIN BADGE, a POKéMON\n"
-# 1715 "data/maps/SootopolisCity/scripts.pory"
.string "that has learned that HM move can\l"
-# 1716 "data/maps/SootopolisCity/scripts.pory"
.string "force its way up waterfalls.\p"
-# 1717 "data/maps/SootopolisCity/scripts.pory"
.string "And where does one get the RAIN BADGE?\n"
-# 1718 "data/maps/SootopolisCity/scripts.pory"
.string "You know, don't you?\p"
-# 1719 "data/maps/SootopolisCity/scripts.pory"
.string "That's right! You have to beat\n"
-# 1720 "data/maps/SootopolisCity/scripts.pory"
.string "the SOOTOPOLIS GYM LEADER.\p"
-# 1721 "data/maps/SootopolisCity/scripts.pory"
.string "When you're all set to go, step through\n"
-# 1722 "data/maps/SootopolisCity/scripts.pory"
.string "that door.$"
-# 1723 "data/maps/SootopolisCity/scripts.pory"
-# 1724 "data/maps/SootopolisCity/scripts.pory"
SootopolisCity_Text_DazzledByMentor:
-# 1725 "data/maps/SootopolisCity/scripts.pory"
.string "WALLACE: I'm sure that you will be\n"
-# 1726 "data/maps/SootopolisCity/scripts.pory"
.string "dazzled by my mentor's breathtakingly\l"
-# 1727 "data/maps/SootopolisCity/scripts.pory"
.string "elegant battle style.$"
diff --git a/data/maps/TrainerHill_Entrance/scripts.inc b/data/maps/TrainerHill_Entrance/scripts.inc
index 41cba775e5df..efc63d656162 100644
--- a/data/maps/TrainerHill_Entrance/scripts.inc
+++ b/data/maps/TrainerHill_Entrance/scripts.inc
@@ -1,916 +1,459 @@
-# 1 "data/maps/TrainerHill_Entrance/scripts.pory"
-
-# 2 "data/maps/TrainerHill_Entrance/scripts.pory"
.set LOCALID_ATTENDANT, 1
-# 3 "data/maps/TrainerHill_Entrance/scripts.pory"
.set LOCALID_NURSE, 2
-# 4 "data/maps/TrainerHill_Entrance/scripts.pory"
.set LOCALID_GIRL, 4
-# 5 "data/maps/TrainerHill_Entrance/scripts.pory"
.set LOCALID_MAN, 5
-# 6 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 7 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_MapScripts::
-# 8 "data/maps/TrainerHill_Entrance/scripts.pory"
map_script MAP_SCRIPT_ON_RESUME, TrainerHill_Entrance_OnResume
-# 9 "data/maps/TrainerHill_Entrance/scripts.pory"
map_script MAP_SCRIPT_ON_RETURN_TO_FIELD, TrainerHill_Entrance_OnReturn
-# 10 "data/maps/TrainerHill_Entrance/scripts.pory"
map_script MAP_SCRIPT_ON_TRANSITION, TrainerHill_Entrance_OnTransition
-# 11 "data/maps/TrainerHill_Entrance/scripts.pory"
map_script MAP_SCRIPT_ON_LOAD, TrainerHill_Entrance_OnLoad
-# 12 "data/maps/TrainerHill_Entrance/scripts.pory"
map_script MAP_SCRIPT_ON_FRAME_TABLE, TrainerHill_Entrance_OnFrame
-# 13 "data/maps/TrainerHill_Entrance/scripts.pory"
.byte 0
-# 14 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 15 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_OnTransition:
-# 16 "data/maps/TrainerHill_Entrance/scripts.pory"
setflag FLAG_LANDMARK_TRAINER_HILL
-# 17 "data/maps/TrainerHill_Entrance/scripts.pory"
getplayerxy VAR_TEMP_D, VAR_RESULT
-# 18 "data/maps/TrainerHill_Entrance/scripts.pory"
end
-# 19 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 20 "data/maps/TrainerHill_Entrance/scripts.pory"
@ Unused
-# 21 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_OnWarp:
-# 22 "data/maps/TrainerHill_Entrance/scripts.pory"
end
-# 23 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 24 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_OnResume:
-# 25 "data/maps/TrainerHill_Entrance/scripts.pory"
trainerhill_resumetimer
-# 26 "data/maps/TrainerHill_Entrance/scripts.pory"
setvar VAR_TEMP_0, 0
-# 27 "data/maps/TrainerHill_Entrance/scripts.pory"
trainerhill_getusingereader
-# 28 "data/maps/TrainerHill_Entrance/scripts.pory"
goto_if_eq VAR_RESULT, FALSE, TrainerHill_Entrance_EventScript_TryFaceAttendant @ VAR_RESULT always FALSE here
-# 29 "data/maps/TrainerHill_Entrance/scripts.pory"
setobjectxy OBJ_EVENT_ID_PLAYER, 9, 6
-# 30 "data/maps/TrainerHill_Entrance/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, TrainerHill_Entrance_Movement_PlayerFaceAttendant
-# 31 "data/maps/TrainerHill_Entrance/scripts.pory"
end
-# 32 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 33 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_EventScript_TryFaceAttendant::
-# 34 "data/maps/TrainerHill_Entrance/scripts.pory"
trainerhill_getwon
-# 35 "data/maps/TrainerHill_Entrance/scripts.pory"
goto_if_eq VAR_RESULT, TRUE, TrainerHill_Entrance_EventScript_PlayerDontFaceAttendant
-# 36 "data/maps/TrainerHill_Entrance/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, TrainerHill_Entrance_Movement_PlayerFaceAttendant
-# 37 "data/maps/TrainerHill_Entrance/scripts.pory"
end
-# 38 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 39 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_EventScript_PlayerDontFaceAttendant::
-# 40 "data/maps/TrainerHill_Entrance/scripts.pory"
end
-# 41 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 42 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_OnReturn:
-# 43 "data/maps/TrainerHill_Entrance/scripts.pory"
addobject LOCALID_NURSE
-# 44 "data/maps/TrainerHill_Entrance/scripts.pory"
addobject LOCALID_ATTENDANT
-# 45 "data/maps/TrainerHill_Entrance/scripts.pory"
addobject LOCALID_MAN
-# 46 "data/maps/TrainerHill_Entrance/scripts.pory"
addobject LOCALID_GIRL
-# 47 "data/maps/TrainerHill_Entrance/scripts.pory"
end
-# 48 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 49 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_OnLoad:
-# 50 "data/maps/TrainerHill_Entrance/scripts.pory"
call_if_eq VAR_TEMP_D, 17, TrainerHill_Entrance_EventScript_OpenCounterDoor
-# 51 "data/maps/TrainerHill_Entrance/scripts.pory"
end
-# 52 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 53 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_EventScript_OpenCounterDoor::
-# 54 "data/maps/TrainerHill_Entrance/scripts.pory"
setmetatile 17, 10, METATILE_TrainerHill_GreenFloorTile, FALSE
-# 55 "data/maps/TrainerHill_Entrance/scripts.pory"
return
-# 56 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 57 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_OnFrame:
-# 58 "data/maps/TrainerHill_Entrance/scripts.pory"
map_script_2 VAR_TEMP_0, 0, TrainerHill_Entrance_EventScript_ExitChallenge
-# 59 "data/maps/TrainerHill_Entrance/scripts.pory"
map_script_2 VAR_TEMP_D, 17, TrainerHill_Entrance_EventScript_ExitElevator
-# 60 "data/maps/TrainerHill_Entrance/scripts.pory"
map_script_2 VAR_TEMP_5, 1, TrainerHill_Entrance_EventScript_EntryTrigger
-# 61 "data/maps/TrainerHill_Entrance/scripts.pory"
map_script_2 VAR_TEMP_1, 1, TrainerHill_EventScript_WarpToEntranceCounter
-# 62 "data/maps/TrainerHill_Entrance/scripts.pory"
.2byte 0
-# 63 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 64 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_EventScript_ExitElevator::
-# 65 "data/maps/TrainerHill_Entrance/scripts.pory"
lockall
-# 66 "data/maps/TrainerHill_Entrance/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, TrainerHill_Entrance_Movement_PlayerExitElevator
-# 67 "data/maps/TrainerHill_Entrance/scripts.pory"
waitmovement 0
-# 68 "data/maps/TrainerHill_Entrance/scripts.pory"
setmetatile 17, 10, METATILE_TrainerHill_CounterDoor, TRUE
-# 69 "data/maps/TrainerHill_Entrance/scripts.pory"
special DrawWholeMapView
-# 70 "data/maps/TrainerHill_Entrance/scripts.pory"
playse SE_CLICK
-# 71 "data/maps/TrainerHill_Entrance/scripts.pory"
waitse
-# 72 "data/maps/TrainerHill_Entrance/scripts.pory"
setvar VAR_TEMP_D, 0
-# 73 "data/maps/TrainerHill_Entrance/scripts.pory"
releaseall
-# 74 "data/maps/TrainerHill_Entrance/scripts.pory"
end
-# 75 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 76 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_EventScript_ExitChallenge::
-# 77 "data/maps/TrainerHill_Entrance/scripts.pory"
setvar VAR_TEMP_0, 1
-# 78 "data/maps/TrainerHill_Entrance/scripts.pory"
trainerhill_getstatus
-# 79 "data/maps/TrainerHill_Entrance/scripts.pory"
switch VAR_RESULT
-# 80 "data/maps/TrainerHill_Entrance/scripts.pory"
case TRAINER_HILL_PLAYER_STATUS_LOST, TrainerHill_Entrance_EventScript_ExitChallengeLost
-# 81 "data/maps/TrainerHill_Entrance/scripts.pory"
case TRAINER_HILL_PLAYER_STATUS_ECARD_SCANNED, TrainerHill_Entrance_EventScript_ExitChallengeECard
-# 82 "data/maps/TrainerHill_Entrance/scripts.pory"
case TRAINER_HILL_PLAYER_STATUS_NORMAL, TrainerHill_Entrance_EventScript_EndExitChallenge
-# 83 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 84 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_EventScript_ExitChallengeLost::
-# 85 "data/maps/TrainerHill_Entrance/scripts.pory"
lockall
-# 86 "data/maps/TrainerHill_Entrance/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, TrainerHill_Entrance_Movement_PlayerFaceAttendant
-# 87 "data/maps/TrainerHill_Entrance/scripts.pory"
msgbox TrainerHill_Entrance_Text_TooBadTremendousEffort, MSGBOX_DEFAULT
-# 88 "data/maps/TrainerHill_Entrance/scripts.pory"
goto TrainerHill_Entrance_EventScript_PlayerExitChallenge
-# 89 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 90 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_EventScript_ExitChallengeECard::
-# 91 "data/maps/TrainerHill_Entrance/scripts.pory"
lockall
-# 92 "data/maps/TrainerHill_Entrance/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, TrainerHill_Entrance_Movement_PlayerFaceAttendant
-# 93 "data/maps/TrainerHill_Entrance/scripts.pory"
msgbox TrainerHill_Entrance_Text_MovedReceptionHereForSwitch, MSGBOX_DEFAULT
-# 94 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_EventScript_PlayerExitChallenge::
-# 95 "data/maps/TrainerHill_Entrance/scripts.pory"
closemessage
-# 96 "data/maps/TrainerHill_Entrance/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, TrainerHill_Entrance_Movement_PushPlayerBackFromCounter
-# 97 "data/maps/TrainerHill_Entrance/scripts.pory"
waitmovement 0
-# 98 "data/maps/TrainerHill_Entrance/scripts.pory"
setvar VAR_TRAINER_HILL_IS_ACTIVE, 0
-# 99 "data/maps/TrainerHill_Entrance/scripts.pory"
special HealPlayerParty
-# 100 "data/maps/TrainerHill_Entrance/scripts.pory"
+ callnative UpdateFollowingPokemon
releaseall
-# 101 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_EventScript_EndExitChallenge::
-# 102 "data/maps/TrainerHill_Entrance/scripts.pory"
end
-# 103 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 104 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_EventScript_Nurse::
-# 105 "data/maps/TrainerHill_Entrance/scripts.pory"
setvar VAR_0x800B, LOCALID_NURSE
-# 106 "data/maps/TrainerHill_Entrance/scripts.pory"
call Common_EventScript_PkmnCenterNurse
-# 107 "data/maps/TrainerHill_Entrance/scripts.pory"
waitmessage
-# 108 "data/maps/TrainerHill_Entrance/scripts.pory"
waitbuttonpress
-# 109 "data/maps/TrainerHill_Entrance/scripts.pory"
release
-# 110 "data/maps/TrainerHill_Entrance/scripts.pory"
end
-# 111 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 112 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_EventScript_Attendant::
-# 113 "data/maps/TrainerHill_Entrance/scripts.pory"
lock
-# 114 "data/maps/TrainerHill_Entrance/scripts.pory"
faceplayer
-# 115 "data/maps/TrainerHill_Entrance/scripts.pory"
trainerhill_inchallenge
-# 116 "data/maps/TrainerHill_Entrance/scripts.pory"
goto_if_eq VAR_RESULT, FALSE, TrainerHill_Entrance_EventScript_ThanksForPlaying
-# 117 "data/maps/TrainerHill_Entrance/scripts.pory"
msgbox TrainerHill_Entrance_Text_HopeYouGiveItYourBest, MSGBOX_DEFAULT
-# 118 "data/maps/TrainerHill_Entrance/scripts.pory"
goto TrainerHill_Entrance_EventScript_AttendantEnd
-# 119 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 120 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_EventScript_ThanksForPlaying::
-# 121 "data/maps/TrainerHill_Entrance/scripts.pory"
msgbox TrainerHill_Entrance_Text_ThankYouForPlaying, MSGBOX_DEFAULT
-# 122 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_EventScript_AttendantEnd::
-# 123 "data/maps/TrainerHill_Entrance/scripts.pory"
release
-# 124 "data/maps/TrainerHill_Entrance/scripts.pory"
end
-# 125 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 126 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_EventScript_EntryTrigger::
-# 127 "data/maps/TrainerHill_Entrance/scripts.pory"
lockall
-# 128 "data/maps/TrainerHill_Entrance/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, TrainerHill_Entrance_Movement_PlayerFaceAttendant
-# 129 "data/maps/TrainerHill_Entrance/scripts.pory"
goto_if_unset FLAG_SYS_GAME_CLEAR, TrainerHill_Entrance_EventScript_Closed
-# 130 "data/maps/TrainerHill_Entrance/scripts.pory"
msgbox TrainerHill_Entrance_Text_WelcomeToTrainerHill, MSGBOX_DEFAULT
-# 131 "data/maps/TrainerHill_Entrance/scripts.pory"
trainerhill_getsaved
-# 132 "data/maps/TrainerHill_Entrance/scripts.pory"
call_if_eq VAR_RESULT, FALSE, TrainerHill_Entrance_EventScript_SaveGame
-# 133 "data/maps/TrainerHill_Entrance/scripts.pory"
trainerhill_allfloorsused
-# 134 "data/maps/TrainerHill_Entrance/scripts.pory"
goto_if_eq VAR_RESULT, TRUE, TrainerHill_Entrance_EventScript_AllFloorsUsed
-# 135 "data/maps/TrainerHill_Entrance/scripts.pory"
msgbox TrainerHill_Entrance_Text_TrainersUpToFloorX, MSGBOX_DEFAULT
-# 136 "data/maps/TrainerHill_Entrance/scripts.pory"
goto TrainerHill_Entrance_EventScript_AskChallengeTrainers
-# 137 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 138 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_EventScript_AllFloorsUsed::
-# 139 "data/maps/TrainerHill_Entrance/scripts.pory"
msgbox TrainerHill_Entrance_Text_TrainersInEveryRoom, MSGBOX_DEFAULT
-# 140 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_EventScript_AskChallengeTrainers::
-# 141 "data/maps/TrainerHill_Entrance/scripts.pory"
message TrainerHill_Entrance_Text_LikeToChallengeTrainers
-# 142 "data/maps/TrainerHill_Entrance/scripts.pory"
waitmessage
-# 143 "data/maps/TrainerHill_Entrance/scripts.pory"
multichoice 15, 6, MULTI_YESNOINFO, FALSE
-# 144 "data/maps/TrainerHill_Entrance/scripts.pory"
switch VAR_RESULT
-# 145 "data/maps/TrainerHill_Entrance/scripts.pory"
case 0, TrainerHill_Entrance_EventScript_ChooseChallenge
-# 146 "data/maps/TrainerHill_Entrance/scripts.pory"
case 1, TrainerHill_Entrance_EventScript_CancelEntry
-# 147 "data/maps/TrainerHill_Entrance/scripts.pory"
case 2, TrainerHill_Entrance_EventScript_Info
-# 148 "data/maps/TrainerHill_Entrance/scripts.pory"
case MULTI_B_PRESSED, TrainerHill_Entrance_EventScript_CancelEntry
-# 149 "data/maps/TrainerHill_Entrance/scripts.pory"
end
-# 150 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 151 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_EventScript_Info::
-# 152 "data/maps/TrainerHill_Entrance/scripts.pory"
msgbox TrainerHill_Entrance_Text_ExplainTrainerHill, MSGBOX_DEFAULT
-# 153 "data/maps/TrainerHill_Entrance/scripts.pory"
goto TrainerHill_Entrance_EventScript_AskChallengeTrainers
-# 154 "data/maps/TrainerHill_Entrance/scripts.pory"
end
-# 155 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 156 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_EventScript_ChooseChallenge::
-# 157 "data/maps/TrainerHill_Entrance/scripts.pory"
multichoice 13, 2, MULTI_TAG_MATCH_TYPE, FALSE
-# 158 "data/maps/TrainerHill_Entrance/scripts.pory"
switch VAR_RESULT
-# 159 "data/maps/TrainerHill_Entrance/scripts.pory"
case 4, TrainerHill_Entrance_EventScript_CancelEntry
-# 160 "data/maps/TrainerHill_Entrance/scripts.pory"
case MULTI_B_PRESSED, TrainerHill_Entrance_EventScript_CancelEntry
-# 161 "data/maps/TrainerHill_Entrance/scripts.pory"
trainerhill_setmode VAR_RESULT
-# 162 "data/maps/TrainerHill_Entrance/scripts.pory"
setvar VAR_TRAINER_HILL_IS_ACTIVE, 1
-# 163 "data/maps/TrainerHill_Entrance/scripts.pory"
setvar VAR_TEMP_5, 0
-# 164 "data/maps/TrainerHill_Entrance/scripts.pory"
special HealPlayerParty
-# 165 "data/maps/TrainerHill_Entrance/scripts.pory"
+ callnative UpdateFollowingPokemon
msgbox TrainerHill_Entrance_Text_TimeProgessGetSetGo, MSGBOX_DEFAULT
-# 166 "data/maps/TrainerHill_Entrance/scripts.pory"
trainerhill_start
-# 167 "data/maps/TrainerHill_Entrance/scripts.pory"
releaseall
-# 168 "data/maps/TrainerHill_Entrance/scripts.pory"
end
-# 169 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 170 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_EventScript_CancelEntry::
-# 171 "data/maps/TrainerHill_Entrance/scripts.pory"
setvar VAR_TEMP_5, 0
-# 172 "data/maps/TrainerHill_Entrance/scripts.pory"
msgbox TrainerHill_Entrance_Text_PleaseVisitUsAgain, MSGBOX_DEFAULT
-# 173 "data/maps/TrainerHill_Entrance/scripts.pory"
closemessage
-# 174 "data/maps/TrainerHill_Entrance/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, TrainerHill_Entrance_Movement_PushPlayerBackFromCounter
-# 175 "data/maps/TrainerHill_Entrance/scripts.pory"
waitmovement 0
-# 176 "data/maps/TrainerHill_Entrance/scripts.pory"
releaseall
-# 177 "data/maps/TrainerHill_Entrance/scripts.pory"
end
-# 178 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 179 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_EventScript_SaveGame::
-# 180 "data/maps/TrainerHill_Entrance/scripts.pory"
msgbox TrainerHill_Entrance_Text_SaveGameBeforeEnter, MSGBOX_DEFAULT
-# 181 "data/maps/TrainerHill_Entrance/scripts.pory"
trainerhill_setsaved
-# 182 "data/maps/TrainerHill_Entrance/scripts.pory"
setvar VAR_TEMP_5, 1
-# 183 "data/maps/TrainerHill_Entrance/scripts.pory"
call Common_EventScript_SaveGame
-# 184 "data/maps/TrainerHill_Entrance/scripts.pory"
goto_if_eq VAR_RESULT, FALSE, TrainerHill_Entrance_EventScript_SaveFailed
-# 185 "data/maps/TrainerHill_Entrance/scripts.pory"
trainerhill_setsaved
-# 186 "data/maps/TrainerHill_Entrance/scripts.pory"
return
-# 187 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 188 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_EventScript_SaveFailed::
-# 189 "data/maps/TrainerHill_Entrance/scripts.pory"
trainerhill_clearsaved
-# 190 "data/maps/TrainerHill_Entrance/scripts.pory"
goto TrainerHill_Entrance_EventScript_CancelEntry
-# 191 "data/maps/TrainerHill_Entrance/scripts.pory"
end
-# 192 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 193 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_EventScript_Closed::
-# 194 "data/maps/TrainerHill_Entrance/scripts.pory"
msgbox TrainerHill_Entrance_Text_StillGettingReady, MSGBOX_DEFAULT
-# 195 "data/maps/TrainerHill_Entrance/scripts.pory"
closemessage
-# 196 "data/maps/TrainerHill_Entrance/scripts.pory"
applymovement OBJ_EVENT_ID_PLAYER, TrainerHill_Entrance_Movement_PushPlayerBackFromCounter
-# 197 "data/maps/TrainerHill_Entrance/scripts.pory"
waitmovement 0
-# 198 "data/maps/TrainerHill_Entrance/scripts.pory"
releaseall
-# 199 "data/maps/TrainerHill_Entrance/scripts.pory"
end
-# 200 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 201 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_Movement_PlayerFaceAttendant:
-# 202 "data/maps/TrainerHill_Entrance/scripts.pory"
face_right
-# 203 "data/maps/TrainerHill_Entrance/scripts.pory"
step_end
-# 204 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 205 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_Movement_PushPlayerBackFromCounter:
-# 206 "data/maps/TrainerHill_Entrance/scripts.pory"
walk_down
-# 207 "data/maps/TrainerHill_Entrance/scripts.pory"
step_end
-# 208 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 209 "data/maps/TrainerHill_Entrance/scripts.pory"
@ Unused
-# 210 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_Movement_FaceUp:
-# 211 "data/maps/TrainerHill_Entrance/scripts.pory"
face_up
-# 212 "data/maps/TrainerHill_Entrance/scripts.pory"
step_end
-# 213 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 214 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_Movement_PlayerExitElevator:
-# 215 "data/maps/TrainerHill_Entrance/scripts.pory"
walk_down
-# 216 "data/maps/TrainerHill_Entrance/scripts.pory"
walk_down
-# 217 "data/maps/TrainerHill_Entrance/scripts.pory"
step_end
-# 218 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 219 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_EventScript_Records::
-# 220 "data/maps/TrainerHill_Entrance/scripts.pory"
lockall
-# 221 "data/maps/TrainerHill_Entrance/scripts.pory"
fadescreen FADE_TO_BLACK
-# 222 "data/maps/TrainerHill_Entrance/scripts.pory"
special ShowTrainerHillRecords
-# 223 "data/maps/TrainerHill_Entrance/scripts.pory"
waitstate
-# 224 "data/maps/TrainerHill_Entrance/scripts.pory"
releaseall
-# 225 "data/maps/TrainerHill_Entrance/scripts.pory"
end
-# 226 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 227 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_EventScript_Man::
-# 228 "data/maps/TrainerHill_Entrance/scripts.pory"
goto_if_unset FLAG_SYS_GAME_CLEAR, TrainerHill_Entrance_EventScript_ManTrainerHillClosed
-# 229 "data/maps/TrainerHill_Entrance/scripts.pory"
msgbox TrainerHill_Entrance_Text_WhatSortOfTrainersAreAhead, MSGBOX_NPC
-# 230 "data/maps/TrainerHill_Entrance/scripts.pory"
end
-# 231 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 232 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_EventScript_ManTrainerHillClosed::
-# 233 "data/maps/TrainerHill_Entrance/scripts.pory"
msgbox TrainerHill_Entrance_Text_CantWaitToTestTheWaters, MSGBOX_NPC
-# 234 "data/maps/TrainerHill_Entrance/scripts.pory"
end
-# 235 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 236 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_EventScript_Girl::
-# 237 "data/maps/TrainerHill_Entrance/scripts.pory"
goto_if_unset FLAG_SYS_GAME_CLEAR, TrainerHill_Entrance_EventScript_GirlTrainerHillClosed
-# 238 "data/maps/TrainerHill_Entrance/scripts.pory"
msgbox TrainerHill_Entrance_Text_FriendsTryingToReachTimeBoardTop, MSGBOX_NPC
-# 239 "data/maps/TrainerHill_Entrance/scripts.pory"
end
-# 240 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 241 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_EventScript_GirlTrainerHillClosed::
-# 242 "data/maps/TrainerHill_Entrance/scripts.pory"
msgbox TrainerHill_Entrance_Text_DoYouKnowWhenTheyOpen, MSGBOX_NPC
-# 243 "data/maps/TrainerHill_Entrance/scripts.pory"
end
-# 244 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 245 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_EventScript_Clerk::
-# 246 "data/maps/TrainerHill_Entrance/scripts.pory"
lock
-# 247 "data/maps/TrainerHill_Entrance/scripts.pory"
faceplayer
-# 248 "data/maps/TrainerHill_Entrance/scripts.pory"
message gText_HowMayIServeYou
-# 249 "data/maps/TrainerHill_Entrance/scripts.pory"
waitmessage
-# 250 "data/maps/TrainerHill_Entrance/scripts.pory"
goto_if_set FLAG_SYS_GAME_CLEAR, TrainerHill_Entrance_EventScript_ExpandedPokemart
-# 251 "data/maps/TrainerHill_Entrance/scripts.pory"
pokemart TrainerHill_Entrance_Pokemart_Basic
-# 252 "data/maps/TrainerHill_Entrance/scripts.pory"
msgbox gText_PleaseComeAgain, MSGBOX_DEFAULT
-# 253 "data/maps/TrainerHill_Entrance/scripts.pory"
release
-# 254 "data/maps/TrainerHill_Entrance/scripts.pory"
end
-# 255 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 256 "data/maps/TrainerHill_Entrance/scripts.pory"
.align 2
-# 257 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_Pokemart_Basic:
-# 258 "data/maps/TrainerHill_Entrance/scripts.pory"
.2byte ITEM_SUPER_POTION
-# 259 "data/maps/TrainerHill_Entrance/scripts.pory"
.2byte ITEM_ANTIDOTE
-# 260 "data/maps/TrainerHill_Entrance/scripts.pory"
.2byte ITEM_PARALYZE_HEAL
-# 261 "data/maps/TrainerHill_Entrance/scripts.pory"
.2byte ITEM_AWAKENING
-# 262 "data/maps/TrainerHill_Entrance/scripts.pory"
.2byte ITEM_X_SPEED
-# 263 "data/maps/TrainerHill_Entrance/scripts.pory"
.2byte ITEM_X_SP_ATK
-# 264 "data/maps/TrainerHill_Entrance/scripts.pory"
.2byte ITEM_X_ATTACK
-# 265 "data/maps/TrainerHill_Entrance/scripts.pory"
.2byte ITEM_X_DEFENSE
-# 266 "data/maps/TrainerHill_Entrance/scripts.pory"
.2byte ITEM_DIRE_HIT
-# 267 "data/maps/TrainerHill_Entrance/scripts.pory"
.2byte ITEM_GUARD_SPEC
-# 268 "data/maps/TrainerHill_Entrance/scripts.pory"
.2byte ITEM_X_ACCURACY
-# 269 "data/maps/TrainerHill_Entrance/scripts.pory"
.2byte ITEM_NONE
-# 270 "data/maps/TrainerHill_Entrance/scripts.pory"
release
-# 271 "data/maps/TrainerHill_Entrance/scripts.pory"
end
-# 272 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 273 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_EventScript_ExpandedPokemart::
-# 274 "data/maps/TrainerHill_Entrance/scripts.pory"
pokemart TrainerHill_Entrance_Pokemart_Expanded
-# 275 "data/maps/TrainerHill_Entrance/scripts.pory"
msgbox gText_PleaseComeAgain, MSGBOX_DEFAULT
-# 276 "data/maps/TrainerHill_Entrance/scripts.pory"
release
-# 277 "data/maps/TrainerHill_Entrance/scripts.pory"
end
-# 278 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 279 "data/maps/TrainerHill_Entrance/scripts.pory"
.align 2
-# 280 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_Pokemart_Expanded:
-# 281 "data/maps/TrainerHill_Entrance/scripts.pory"
.2byte ITEM_HYPER_POTION
-# 282 "data/maps/TrainerHill_Entrance/scripts.pory"
.2byte ITEM_MAX_POTION
-# 283 "data/maps/TrainerHill_Entrance/scripts.pory"
.2byte ITEM_FULL_RESTORE
-# 284 "data/maps/TrainerHill_Entrance/scripts.pory"
.2byte ITEM_FULL_HEAL
-# 285 "data/maps/TrainerHill_Entrance/scripts.pory"
.2byte ITEM_REVIVE
-# 286 "data/maps/TrainerHill_Entrance/scripts.pory"
.2byte ITEM_X_SPEED
-# 287 "data/maps/TrainerHill_Entrance/scripts.pory"
.2byte ITEM_X_SP_ATK
-# 288 "data/maps/TrainerHill_Entrance/scripts.pory"
.2byte ITEM_X_ATTACK
-# 289 "data/maps/TrainerHill_Entrance/scripts.pory"
.2byte ITEM_X_DEFENSE
-# 290 "data/maps/TrainerHill_Entrance/scripts.pory"
.2byte ITEM_DIRE_HIT
-# 291 "data/maps/TrainerHill_Entrance/scripts.pory"
.2byte ITEM_GUARD_SPEC
-# 292 "data/maps/TrainerHill_Entrance/scripts.pory"
.2byte ITEM_X_ACCURACY
-# 293 "data/maps/TrainerHill_Entrance/scripts.pory"
.2byte ITEM_NONE
-# 294 "data/maps/TrainerHill_Entrance/scripts.pory"
release
-# 295 "data/maps/TrainerHill_Entrance/scripts.pory"
end
-# 296 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 297 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_Text_StillGettingReady:
-# 298 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "This is the TRAINER HILL where\n"
-# 299 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "you may enjoy tag battles with many\l"
-# 300 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "TRAINERS.\p"
-# 301 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "Unfortunately, we're still getting\n"
-# 302 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "things ready. Please come back later!$"
-# 303 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 304 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_Text_WelcomeToTrainerHill:
-# 305 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "Welcome!\p"
-# 306 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "This is the TRAINER HILL where\n"
-# 307 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "you may enjoy tag battles with many\l"
-# 308 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "TRAINERS!$"
-# 309 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 310 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_Text_SaveGameBeforeEnter:
-# 311 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "Is this your first visit here?\p"
-# 312 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "Before you enter, please save\n"
-# 313 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "your game.$"
-# 314 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 315 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_Text_TrainersUpToFloorX:
-# 316 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "Let's see…\n"
-# 317 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "The TRAINERS here now are…\p"
-# 318 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "Up to floor no. {STR_VAR_1}.$"
-# 319 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 320 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_Text_TrainersInEveryRoom:
-# 321 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "Let's see…\n"
-# 322 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "The TRAINERS here now are…\p"
-# 323 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "There appear to be TRAINERS gathered\n"
-# 324 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "in every room.$"
-# 325 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 326 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_Text_LikeToChallengeTrainers:
-# 327 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "Would you like to challenge the\n"
-# 328 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "waiting TRAINERS?$"
-# 329 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 330 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_Text_TimeProgessGetSetGo:
-# 331 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "I will time your progress.\n"
-# 332 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "Best of luck!\p"
-# 333 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "On your marks…\p"
-# 334 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "Get set…\p"
-# 335 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "Go!$"
-# 336 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 337 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_Text_PleaseVisitUsAgain:
-# 338 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "Please do visit us again!$"
-# 339 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 340 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_Text_TooBadTremendousEffort:
-# 341 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "That was too bad.\p"
-# 342 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "I think you put in a tremendous\n"
-# 343 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "effort in your battling.\p"
-# 344 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "Please come back and try again!$"
-# 345 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 346 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_Text_HopeYouGiveItYourBest:
-# 347 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "I hope you give it your best.$"
-# 348 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 349 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_Text_MovedReceptionHereForSwitch:
-# 350 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "When the TRAINERS switch places,\n"
-# 351 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "the movement can be hectic.\p"
-# 352 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "To avoid the stampede, we moved\n"
-# 353 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "the reception counter here.\p"
-# 354 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "I'm sorry for the inconvenience.$"
-# 355 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 356 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_Text_ThankYouForPlaying:
-# 357 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "Thank you for playing!$"
-# 358 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 359 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_Text_ExplainTrainerHill:
-# 360 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "Here at the TRAINER HILL, we conduct\n"
-# 361 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "an event called the Time Attack.\p"
-# 362 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "It is a race that measures how long\n"
-# 363 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "you take to reach our owner on\l"
-# 364 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "the rooftop from this counter.\p"
-# 365 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "The fastest times are posted on\n"
-# 366 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "the Time Board--try competing with\l"
-# 367 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "your friends.\p"
-# 368 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "In TRAINER battles along the way,\n"
-# 369 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "neither Exp. Points nor money will\l"
-# 370 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "be awarded.$"
-# 371 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 372 "data/maps/TrainerHill_Entrance/scripts.pory"
@ Unused
-# 373 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_Text_NeedAtLeastTwoPokemon:
-# 374 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "Oh, I'm sorry, but you appear to have\n"
-# 375 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "only one POKéMON with you.\p"
-# 376 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "You will need at least two POKéMON\n"
-# 377 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "to enter this event.$"
-# 378 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 379 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Roof_Text_YouFinallyCameBravo:
-# 380 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "Hm! Hm!\p"
-# 381 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "You finally came!\n"
-# 382 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "Yes, you have arrived!\p"
-# 383 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "Wait! Don't say it!\n"
-# 384 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "I know why you came all the way\l"
-# 385 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "here by yourself!\p"
-# 386 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "You wanted to see me, the owner\n"
-# 387 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "of the TRAINER HILL, because…\p"
-# 388 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "You want to form a tag team with me!\n"
-# 389 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "Wa-hoo!\p"
-# 390 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "…Uh?\n"
-# 391 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "That's not it?\p"
-# 392 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "Anyway, I watched you on your way up.\n"
-# 393 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "Marvelous battling! Bravo, indeed!$"
-# 394 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 395 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Roof_Text_HaveTheMostMarvelousGift:
-# 396 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "For a marvelous someone like you,\n"
-# 397 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "I have the most marvelous gift!$"
-# 398 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 399 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Roof_Text_FullUpBeBackLaterForThis:
-# 400 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "Oh, no, full up with things!\n"
-# 401 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "You'll be back later for this!$"
-# 402 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 403 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Roof_Text_GotHereMarvelouslyQuickly:
-# 404 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "Oh, hold on here! Did you possibly get\n"
-# 405 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "here marvelously quickly?\p"
-# 406 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "How splendid! You needn't have\n"
-# 407 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "hurried so to see me!\p"
-# 408 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "That is so delightful. I'll have the Time\n"
-# 409 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "Board at the reception updated!$"
-# 410 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 411 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Roof_Text_YouWerentVeryQuick:
-# 412 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "But, oh…\n"
-# 413 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "You weren't very quick getting here.$"
-# 414 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 415 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Roof_Text_ArriveZippierNextTime:
-# 416 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "Perhaps it would please me more if you\n"
-# 417 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "arrived zippier next time.\p"
-# 418 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "Then, I should be pleased to form\n"
-# 419 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "a tag team with you!\p"
-# 420 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "Until we meet again, amigo!$"
-# 421 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 422 "data/maps/TrainerHill_Entrance/scripts.pory"
@ Unused
-# 423 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Roof_Text_BuiltTrainerHillToFindPartner:
-# 424 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "I had the TRAINER HILL built for but\n"
-# 425 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "one reason and one only!\p"
-# 426 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "To find the most suitable partner\n"
-# 427 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "with whom I may form a tag team!$"
-# 428 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 429 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_Text_ChallengeTime:
-# 430 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "{STR_VAR_1} min. {STR_VAR_2}.{STR_VAR_3} sec.$"
-# 431 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 432 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_Text_WhatSortOfTrainersAreAhead:
-# 433 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "Who knows what sort of TRAINERS\n"
-# 434 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "and POKéMON combos are ahead?\p"
-# 435 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "All I know is that I'll knock aside\n"
-# 436 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "anyone that stands in my way!$"
-# 437 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 438 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_Text_CantWaitToTestTheWaters:
-# 439 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "I heard tough TRAINERS come to this\n"
-# 440 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "TRAINER HILL from all over.\p"
-# 441 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "I can't wait to test the waters!\p"
-# 442 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "I'll knock aside anyone that stands\n"
-# 443 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "in my way!$"
-# 444 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 445 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_Text_FriendsTryingToReachTimeBoardTop:
-# 446 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "Do you see the Time Board over there?\p"
-# 447 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "My friends and I are trying to see who\n"
-# 448 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "can reach the top in the least time.$"
-# 449 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 450 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Entrance_Text_DoYouKnowWhenTheyOpen:
-# 451 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "Do you know when they're opening\n"
-# 452 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "this place up?\p"
-# 453 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "I'm waiting here to be the first\n"
-# 454 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "challenger ever!$"
-# 455 "data/maps/TrainerHill_Entrance/scripts.pory"
-# 456 "data/maps/TrainerHill_Entrance/scripts.pory"
TrainerHill_Elevator_Text_ReturnToReception:
-# 457 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "Would you like to return to\n"
-# 458 "data/maps/TrainerHill_Entrance/scripts.pory"
.string "the reception counter?$"
diff --git a/data/maps/UnionRoom/scripts.inc b/data/maps/UnionRoom/scripts.inc
index 042d8d1a5092..927c4061846a 100644
--- a/data/maps/UnionRoom/scripts.inc
+++ b/data/maps/UnionRoom/scripts.inc
@@ -1,218 +1,109 @@
-# 1 "data/maps/UnionRoom/scripts.pory"
-
-# 2 "data/maps/UnionRoom/scripts.pory"
@ Note: LOCALID_UNION_ROOM_PLAYER_# are local ids for this map used elsewhere. They're defined in event_objects.h
-# 3 "data/maps/UnionRoom/scripts.pory"
-# 4 "data/maps/UnionRoom/scripts.pory"
UnionRoom_MapScripts::
-# 5 "data/maps/UnionRoom/scripts.pory"
map_script MAP_SCRIPT_ON_RESUME, UnionRoom_OnResume
-# 6 "data/maps/UnionRoom/scripts.pory"
map_script MAP_SCRIPT_ON_TRANSITION, UnionRoom_OnTransition
-# 7 "data/maps/UnionRoom/scripts.pory"
.byte 0
-# 8 "data/maps/UnionRoom/scripts.pory"
-# 9 "data/maps/UnionRoom/scripts.pory"
UnionRoom_OnResume:
-# 10 "data/maps/UnionRoom/scripts.pory"
setflag FLAG_HIDE_UNION_ROOM_PLAYER_1
-# 11 "data/maps/UnionRoom/scripts.pory"
setflag FLAG_HIDE_UNION_ROOM_PLAYER_2
-# 12 "data/maps/UnionRoom/scripts.pory"
setflag FLAG_HIDE_UNION_ROOM_PLAYER_3
-# 13 "data/maps/UnionRoom/scripts.pory"
setflag FLAG_HIDE_UNION_ROOM_PLAYER_4
-# 14 "data/maps/UnionRoom/scripts.pory"
setflag FLAG_HIDE_UNION_ROOM_PLAYER_5
-# 15 "data/maps/UnionRoom/scripts.pory"
setflag FLAG_HIDE_UNION_ROOM_PLAYER_6
-# 16 "data/maps/UnionRoom/scripts.pory"
setflag FLAG_HIDE_UNION_ROOM_PLAYER_7
-# 17 "data/maps/UnionRoom/scripts.pory"
setflag FLAG_HIDE_UNION_ROOM_PLAYER_8
-# 18 "data/maps/UnionRoom/scripts.pory"
removeobject LOCALID_UNION_ROOM_PLAYER_1
-# 19 "data/maps/UnionRoom/scripts.pory"
removeobject LOCALID_UNION_ROOM_PLAYER_2
-# 20 "data/maps/UnionRoom/scripts.pory"
removeobject LOCALID_UNION_ROOM_PLAYER_3
-# 21 "data/maps/UnionRoom/scripts.pory"
removeobject LOCALID_UNION_ROOM_PLAYER_4
-# 22 "data/maps/UnionRoom/scripts.pory"
removeobject LOCALID_UNION_ROOM_PLAYER_5
-# 23 "data/maps/UnionRoom/scripts.pory"
removeobject LOCALID_UNION_ROOM_PLAYER_6
-# 24 "data/maps/UnionRoom/scripts.pory"
removeobject LOCALID_UNION_ROOM_PLAYER_7
-# 25 "data/maps/UnionRoom/scripts.pory"
removeobject LOCALID_UNION_ROOM_PLAYER_8
-# 26 "data/maps/UnionRoom/scripts.pory"
special RunUnionRoom
-# 27 "data/maps/UnionRoom/scripts.pory"
end
-# 28 "data/maps/UnionRoom/scripts.pory"
-# 29 "data/maps/UnionRoom/scripts.pory"
UnionRoom_OnTransition:
-# 30 "data/maps/UnionRoom/scripts.pory"
+ setflag FLAG_TEMP_HIDE_FOLLOWER
end
-# 31 "data/maps/UnionRoom/scripts.pory"
-# 32 "data/maps/UnionRoom/scripts.pory"
UnionRoom_EventScript_Player1::
-# 33 "data/maps/UnionRoom/scripts.pory"
lock
-# 34 "data/maps/UnionRoom/scripts.pory"
faceplayer
-# 35 "data/maps/UnionRoom/scripts.pory"
setvar VAR_RESULT, UR_INTERACT_PLAYER_1
-# 36 "data/maps/UnionRoom/scripts.pory"
waitstate
-# 37 "data/maps/UnionRoom/scripts.pory"
release
-# 38 "data/maps/UnionRoom/scripts.pory"
end
-# 39 "data/maps/UnionRoom/scripts.pory"
-# 40 "data/maps/UnionRoom/scripts.pory"
UnionRoom_EventScript_Player2::
-# 41 "data/maps/UnionRoom/scripts.pory"
lock
-# 42 "data/maps/UnionRoom/scripts.pory"
faceplayer
-# 43 "data/maps/UnionRoom/scripts.pory"
setvar VAR_RESULT, UR_INTERACT_PLAYER_2
-# 44 "data/maps/UnionRoom/scripts.pory"
waitstate
-# 45 "data/maps/UnionRoom/scripts.pory"
release
-# 46 "data/maps/UnionRoom/scripts.pory"
end
-# 47 "data/maps/UnionRoom/scripts.pory"
-# 48 "data/maps/UnionRoom/scripts.pory"
UnionRoom_EventScript_Player3::
-# 49 "data/maps/UnionRoom/scripts.pory"
lock
-# 50 "data/maps/UnionRoom/scripts.pory"
faceplayer
-# 51 "data/maps/UnionRoom/scripts.pory"
setvar VAR_RESULT, UR_INTERACT_PLAYER_3
-# 52 "data/maps/UnionRoom/scripts.pory"
waitstate
-# 53 "data/maps/UnionRoom/scripts.pory"
release
-# 54 "data/maps/UnionRoom/scripts.pory"
end
-# 55 "data/maps/UnionRoom/scripts.pory"
-# 56 "data/maps/UnionRoom/scripts.pory"
UnionRoom_EventScript_Player4::
-# 57 "data/maps/UnionRoom/scripts.pory"
lock
-# 58 "data/maps/UnionRoom/scripts.pory"
faceplayer
-# 59 "data/maps/UnionRoom/scripts.pory"
setvar VAR_RESULT, UR_INTERACT_PLAYER_4
-# 60 "data/maps/UnionRoom/scripts.pory"
waitstate
-# 61 "data/maps/UnionRoom/scripts.pory"
release
-# 62 "data/maps/UnionRoom/scripts.pory"
end
-# 63 "data/maps/UnionRoom/scripts.pory"
-# 64 "data/maps/UnionRoom/scripts.pory"
UnionRoom_EventScript_Player5::
-# 65 "data/maps/UnionRoom/scripts.pory"
lock
-# 66 "data/maps/UnionRoom/scripts.pory"
faceplayer
-# 67 "data/maps/UnionRoom/scripts.pory"
setvar VAR_RESULT, UR_INTERACT_PLAYER_5
-# 68 "data/maps/UnionRoom/scripts.pory"
waitstate
-# 69 "data/maps/UnionRoom/scripts.pory"
release
-# 70 "data/maps/UnionRoom/scripts.pory"
end
-# 71 "data/maps/UnionRoom/scripts.pory"
-# 72 "data/maps/UnionRoom/scripts.pory"
UnionRoom_EventScript_Player6::
-# 73 "data/maps/UnionRoom/scripts.pory"
lock
-# 74 "data/maps/UnionRoom/scripts.pory"
faceplayer
-# 75 "data/maps/UnionRoom/scripts.pory"
setvar VAR_RESULT, UR_INTERACT_PLAYER_6
-# 76 "data/maps/UnionRoom/scripts.pory"
waitstate
-# 77 "data/maps/UnionRoom/scripts.pory"
release
-# 78 "data/maps/UnionRoom/scripts.pory"
end
-# 79 "data/maps/UnionRoom/scripts.pory"
-# 80 "data/maps/UnionRoom/scripts.pory"
UnionRoom_EventScript_Player7::
-# 81 "data/maps/UnionRoom/scripts.pory"
lock
-# 82 "data/maps/UnionRoom/scripts.pory"
faceplayer
-# 83 "data/maps/UnionRoom/scripts.pory"
setvar VAR_RESULT, UR_INTERACT_PLAYER_7
-# 84 "data/maps/UnionRoom/scripts.pory"
waitstate
-# 85 "data/maps/UnionRoom/scripts.pory"
release
-# 86 "data/maps/UnionRoom/scripts.pory"
end
-# 87 "data/maps/UnionRoom/scripts.pory"
-# 88 "data/maps/UnionRoom/scripts.pory"
UnionRoom_EventScript_Player8::
-# 89 "data/maps/UnionRoom/scripts.pory"
lock
-# 90 "data/maps/UnionRoom/scripts.pory"
faceplayer
-# 91 "data/maps/UnionRoom/scripts.pory"
setvar VAR_RESULT, UR_INTERACT_PLAYER_8
-# 92 "data/maps/UnionRoom/scripts.pory"
waitstate
-# 93 "data/maps/UnionRoom/scripts.pory"
release
-# 94 "data/maps/UnionRoom/scripts.pory"
end
-# 95 "data/maps/UnionRoom/scripts.pory"
-# 96 "data/maps/UnionRoom/scripts.pory"
UnionRoom_EventScript_Attendant::
-# 97 "data/maps/UnionRoom/scripts.pory"
lock
-# 98 "data/maps/UnionRoom/scripts.pory"
faceplayer
-# 99 "data/maps/UnionRoom/scripts.pory"
setvar VAR_RESULT, UR_INTERACT_ATTENDANT
-# 100 "data/maps/UnionRoom/scripts.pory"
waitstate
-# 101 "data/maps/UnionRoom/scripts.pory"
release
-# 102 "data/maps/UnionRoom/scripts.pory"
end
-# 103 "data/maps/UnionRoom/scripts.pory"
-# 104 "data/maps/UnionRoom/scripts.pory"
UnionRoom_EventScript_Unused::
-# 105 "data/maps/UnionRoom/scripts.pory"
lockall
-# 106 "data/maps/UnionRoom/scripts.pory"
setvar VAR_RESULT, UR_INTERACT_UNUSED
-# 107 "data/maps/UnionRoom/scripts.pory"
waitstate
-# 108 "data/maps/UnionRoom/scripts.pory"
releaseall
-# 109 "data/maps/UnionRoom/scripts.pory"
end
diff --git a/data/scripts/battle_pike.inc b/data/scripts/battle_pike.inc
index 8ca7f5b1af9d..3393f808d3bb 100644
--- a/data/scripts/battle_pike.inc
+++ b/data/scripts/battle_pike.inc
@@ -133,6 +133,7 @@ BattleFrontier_BattlePikeThreePathRoom_EventScript_NoTurningBack::
lockall
msgbox BattleFrontier_BattlePike_Text_PathBlockedNoTurningBack, MSGBOX_DEFAULT
closemessage
+ releaseall
end
BattleFrontier_BattlePikeRoomNormal_EventScript_SetEnteredRoom::
@@ -146,6 +147,7 @@ BattleFrontier_BattlePikeRoomNormal_EventScript_NoTurningBack::
lockall
msgbox BattleFrontier_BattlePike_Text_PathBlockedNoTurningBack, MSGBOX_DEFAULT
closemessage
+ releaseall
end
BattleFrontier_BattlePikeRoomNormal_EventScript_Exit::
@@ -214,6 +216,7 @@ BattleFrontier_BattlePikeRoomWildMons_EventScript_NoTurningBack::
lockall
msgbox BattleFrontier_BattlePike_Text_PathBlockedNoTurningBack, MSGBOX_DEFAULT
closemessage
+ releaseall
end
BattleFrontier_BattlePike_EventScript_Retire::
diff --git a/data/scripts/day_care.inc b/data/scripts/day_care.inc
index cb053f2c401d..ce5c02a93537 100644
--- a/data/scripts/day_care.inc
+++ b/data/scripts/day_care.inc
@@ -103,6 +103,7 @@ Route117_PokemonDayCare_EventScript_GiveMonToRaise::
msgbox Route117_PokemonDayCare_Text_WellRaiseYourMon, MSGBOX_DEFAULT
waitmoncry
special StoreSelectedPokemonInDaycare
+ callnative UpdateFollowingPokemon
incrementgamestat GAME_STAT_USED_DAYCARE
specialvar VAR_RESULT, GetDaycareState
goto_if_eq VAR_RESULT, DAYCARE_ONE_MON, Route117_PokemonDayCare_EventScript_CanRaiseOneMore
diff --git a/data/scripts/debug.inc b/data/scripts/debug.inc
index 09ae1404c4a4..12dc693fd02a 100644
--- a/data/scripts/debug.inc
+++ b/data/scripts/debug.inc
@@ -138,27 +138,35 @@ Debug_EventScript_Text_DefensiveIVs:
.string "HP IVs: {STR_VAR_1}, DEF IVs: {STR_VAR_2}, SPDEF IVs: {STR_VAR_3}$"
Debug_EventScript_Script_1::
+ release
end
Debug_EventScript_Script_2::
+ release
end
Debug_EventScript_Script_3::
+ release
end
Debug_EventScript_Script_4::
+ release
end
Debug_EventScript_Script_5::
+ release
end
Debug_EventScript_Script_6::
+ release
end
Debug_EventScript_Script_7::
+ release
end
Debug_EventScript_Script_8::
+ release
end
Debug_CheckSaveBlock::
@@ -431,4 +439,14 @@ Debug_EventScript_InflictStatus1_Text_Freeze:
Debug_EventScript_InflictStatus1_Text_Frostbite:
.string "Frostbite$"
+Debug_EventScript_EWRAMCounters::
+ callnative CheckEWRAMCounters
+ msgbox Debug_EventScript_EWRAMCounters_Text, MSGBOX_DEFAULT
+ release
+ end
+
+Debug_EventScript_EWRAMCounters_Text::
+ .string "Follower Steps: {STR_VAR_1}.\n"
+ .string "Fishing Chain: {STR_VAR_2}.$"
+
.endif
diff --git a/data/scripts/field_move_scripts.inc b/data/scripts/field_move_scripts.inc
index 3e99fc08e2d4..6e2450822c93 100644
--- a/data/scripts/field_move_scripts.inc
+++ b/data/scripts/field_move_scripts.inc
@@ -11,26 +11,25 @@ EventScript_CutTree::
goto_if_eq VAR_RESULT, NO, EventScript_CancelCut
msgbox Text_MonUsedFieldMove, MSGBOX_DEFAULT
closemessage
+EventScript_CutTreeCommon:
+ isfollowerfieldmoveuser VAR_0x8004
+ setfieldeffectargument 3, VAR_0x8004 @ skip pose if so
dofieldeffect FLDEFF_USE_CUT_ON_TREE
waitstate
- goto EventScript_CutTreeDown
- end
-
-@ Use cut from party menu
-EventScript_UseCut::
- lockall
- dofieldeffect FLDEFF_USE_CUT_ON_TREE
- waitstate
- goto EventScript_CutTreeDown
- end
-
-EventScript_CutTreeDown::
+EventScript_CutTreeDown:: @ fallthrough
+ setflag FLAG_SAFE_FOLLOWER_MOVEMENT
+ call_if_eq VAR_0x8004, TRUE, EventScript_FollowerFieldMove
applymovement VAR_LAST_TALKED, Movement_CutTreeDown
waitmovement 0
removeobject VAR_LAST_TALKED
releaseall
end
+@ Use cut from party menu
+EventScript_UseCut::
+ lockall
+ goto EventScript_CutTreeCommon
+
Movement_CutTreeDown:
cut_tree
step_end
@@ -57,6 +56,11 @@ Text_CantCut:
.string "This tree looks like it can be\n"
.string "CUT down!$"
+@ Use rock smash from party menu
+EventScript_UseRockSmash::
+ lockall
+ goto EventScript_RockSmashCommon
+
@ Interact with smashable rock
EventScript_RockSmash::
lockall
@@ -70,20 +74,15 @@ EventScript_RockSmash::
goto_if_eq VAR_RESULT, NO, EventScript_CancelSmash
msgbox Text_MonUsedFieldMove, MSGBOX_DEFAULT
closemessage
+EventScript_RockSmashCommon:
+ @ check if follower should use the field move
+ isfollowerfieldmoveuser VAR_0x8004
+ setfieldeffectargument 3, VAR_0x8004 @ skip pose if so
dofieldeffect FLDEFF_USE_ROCK_SMASH
waitstate
- goto EventScript_SmashRock
- end
-
-@ Use rock smash from party menu
-EventScript_UseRockSmash::
- lockall
- dofieldeffect FLDEFF_USE_ROCK_SMASH
- waitstate
- goto EventScript_SmashRock
- end
-
-EventScript_SmashRock::
+EventScript_SmashRock:: @ fallthrough
+ setflag FLAG_SAFE_FOLLOWER_MOVEMENT
+ call_if_eq VAR_0x8004, TRUE, EventScript_FollowerFieldMove
applymovement VAR_LAST_TALKED, Movement_SmashRock
waitmovement 0
removeobject VAR_LAST_TALKED
@@ -95,10 +94,117 @@ EventScript_SmashRock::
releaseall
end
+EventScript_FollowerFieldMove:
+ getdirectiontoface VAR_0x8005, OBJ_EVENT_ID_FOLLOWER, OBJ_EVENT_ID_PLAYER
+ specialvar VAR_0x8006, GetPlayerFacingDirection
+ goto_if_eq VAR_0x8005, DIR_NONE, EventScript_FollowerFieldMoveEnd
+ @ Swap follower and player
+ call EventScript_FollowerSwap
+ @ Face follower in direction and jump
+ switch VAR_0x8006
+ case DIR_NORTH, EventScript_FollowerJumpNorth
+ case DIR_EAST, EventScript_FollowerJumpEast
+ case DIR_SOUTH, EventScript_FollowerJumpSouth
+ case DIR_WEST, EventScript_FollowerJumpWest
+EventScript_FollowerFieldMoveEnd:
+ return
+
+EventScript_FollowerSwap:
+ switch VAR_0x8005
+ case DIR_NORTH, EventScript_FollowerMoveNorth
+ case DIR_EAST, EventScript_FollowerMoveEast
+ case DIR_SOUTH, EventScript_FollowerMoveSouth
+ case DIR_WEST, EventScript_FollowerMoveWest
+ return
+
+EventScript_FollowerMoveNorth:
+ applymovement OBJ_EVENT_ID_FOLLOWER, Movement_WalkUp
+ applymovement OBJ_EVENT_ID_PLAYER, Movement_WalkDown
+ waitmovement 0
+ applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_FaceUp
+ waitmovement 0
+ return
+
+EventScript_FollowerMoveEast:
+ applymovement OBJ_EVENT_ID_FOLLOWER, Movement_WalkRight
+ applymovement OBJ_EVENT_ID_PLAYER, Movement_WalkLeft
+ waitmovement 0
+ applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_FaceRight
+ waitmovement 0
+ return
+
+EventScript_FollowerMoveSouth:
+ applymovement OBJ_EVENT_ID_FOLLOWER, Movement_WalkDown
+ applymovement OBJ_EVENT_ID_PLAYER, Movement_WalkUp
+ waitmovement 0
+ applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_FaceDown
+ waitmovement 0
+ return
+
+EventScript_FollowerMoveWest:
+ applymovement OBJ_EVENT_ID_FOLLOWER, Movement_WalkLeft
+ applymovement OBJ_EVENT_ID_PLAYER, Movement_WalkRight
+ waitmovement 0
+ applymovement OBJ_EVENT_ID_PLAYER, Common_Movement_FaceLeft
+ waitmovement 0
+ return
+
+EventScript_FollowerJumpNorth:
+ applymovement OBJ_EVENT_ID_FOLLOWER, Movement_JumpUp
+ waitmovement 0
+ return
+
+EventScript_FollowerJumpEast:
+ applymovement OBJ_EVENT_ID_FOLLOWER, Movement_JumpRight
+ waitmovement 0
+ return
+
+EventScript_FollowerJumpSouth:
+ applymovement OBJ_EVENT_ID_FOLLOWER, Movement_JumpDown
+ waitmovement 0
+ return
+
+EventScript_FollowerJumpWest:
+ applymovement OBJ_EVENT_ID_FOLLOWER, Movement_JumpLeft
+ waitmovement 0
+ return
+
EventScript_EndSmash::
releaseall
end
+Movement_WalkUp:
+ walk_up
+ step_end
+
+Movement_JumpUp:
+ jump_in_place_up
+ step_end
+
+Movement_WalkRight:
+ walk_right
+ step_end
+
+Movement_JumpRight:
+ jump_in_place_right
+ step_end
+
+Movement_WalkDown:
+ walk_down
+ step_end
+
+Movement_JumpDown:
+ jump_in_place_down
+ step_end
+
+Movement_WalkLeft:
+ walk_left
+ step_end
+
+Movement_JumpLeft:
+ jump_in_place_left
+ step_end
+
Movement_SmashRock:
rock_smash_break
step_end
diff --git a/data/scripts/flash.inc b/data/scripts/flash.inc
index dbfec2314dc2..5e8d7160a9e2 100644
--- a/data/scripts/flash.inc
+++ b/data/scripts/flash.inc
@@ -1,4 +1,5 @@
EventScript_UseFlash::
animateflash 1
setflashlevel 1
+ releaseall
end
diff --git a/data/scripts/follower.inc b/data/scripts/follower.inc
new file mode 100644
index 000000000000..0c3c4860983e
--- /dev/null
+++ b/data/scripts/follower.inc
@@ -0,0 +1,648 @@
+gText_FollowerLovesYou::
+ .string "{STR_VAR_1} is regarding you with\nadoration!$"
+
+gText_FollowerLostInThought::
+ .string "{STR_VAR_1} seems lost in thought.$"
+
+gText_FollowerDefault::
+ .string "ERROR 404: Script not found.$"
+
+gText_WantsToFly::
+ .string "{STR_VAR_1} looks up at the\nsky restlessly.\pWould you like to use FLY?$"
+
+EventScript_Follower::
+ lock
+ bufferlivemonnickname 0
+ playfirstmoncry
+ getfolloweraction
+EventScript_FollowerEnd::
+ waitfieldeffect FLDEFF_EMOTE
+ release
+ end
+
+EventScript_FollowerLovesYou::
+ applymovement OBJ_EVENT_ID_FOLLOWER, ContestHall_Movement_Heart
+ waitmovement OBJ_EVENT_ID_FOLLOWER
+ waitmoncry
+ msgbox gText_FollowerLovesYou, MSGBOX_DEFAULT
+ return
+
+@ Message address must be loaded into bank 0
+EventScript_FollowerGeneric:: @ similar to Std_MsgboxDefault
+ faceplayer
+EventScript_FollowerGenericSkipFace:
+ waitfieldeffect FLDEFF_EMOTE
+ message 0x0
+ waitmessage
+ waitbuttonpress
+ return
+
+EventScript_FollowerJump::
+ faceplayer
+ applymovement OBJ_EVENT_ID_FOLLOWER, FollowerSplashMovement
+ waitmovement OBJ_EVENT_ID_FOLLOWER
+ waitfieldeffect FLDEFF_EMOTE
+ message 0x0
+ waitmessage
+ waitbuttonpress
+ return
+
+EnterPokeballMovement::
+ enter_pokeball
+ step_end
+
+@ Movement scripts below, movements are defined in movement.inc
+
+FollowerSplashMovement::
+ jump_in_place_down
+ delay_4
+ jump_in_place_down
+ face_player
+ step_end
+
+FollowerShiverVerticalMovement:
+ lock_facing_direction
+ slide_left
+ slide_right
+ slide_right
+ slide_left
+ unlock_facing_direction
+ step_end
+
+FollowerShiverHorizontalMovement:
+ lock_facing_direction
+ slide_up
+ slide_down
+ slide_down
+ slide_up
+ unlock_facing_direction
+ step_end
+
+FollowerNostalgiaMovement:
+ face_away_player
+ lock_facing_direction
+ jump_in_place_down
+ jump_in_place_down
+ jump_in_place_down
+ unlock_facing_direction
+ face_player
+ lock_facing_direction
+ jump_in_place_down
+ unlock_facing_direction
+ step_end
+
+FollowerSkippingMovement:
+ lock_facing_direction
+ jump_in_place_down
+ delay_4
+ jump_in_place_down
+ unlock_facing_direction
+ step_end
+
+FollowerJumpOnPlayerNorth:
+ jump_up
+ delay_4
+ lock_facing_direction
+ walk_fast_down
+ unlock_facing_direction
+ step_end
+
+FollowerJumpOnPlayerSouth:
+ jump_down
+ delay_4
+ lock_facing_direction
+ walk_fast_up
+ unlock_facing_direction
+ step_end
+
+FollowerJumpOnPlayerEast:
+ jump_right
+ delay_4
+ lock_facing_direction
+ walk_fast_left
+ unlock_facing_direction
+ step_end
+
+FollowerJumpOnPlayerWest:
+ jump_left
+ delay_4
+ lock_facing_direction
+ walk_fast_right
+ unlock_facing_direction
+ step_end
+
+FollowerCuddlingNorth:
+ face_left
+ lock_facing_direction
+ walk_up
+ walk_in_place_left
+ walk_in_place_left
+ unlock_facing_direction
+ walk_down
+ face_player
+ step_end
+
+FollowerCuddlingSouth:
+ face_right
+ lock_facing_direction
+ walk_down
+ walk_in_place_right
+ walk_in_place_right
+ unlock_facing_direction
+ walk_up
+ face_player
+ step_end
+
+FollowerCuddlingEast:
+ face_down
+ lock_facing_direction
+ walk_right
+ walk_in_place_down
+ walk_in_place_down
+ unlock_facing_direction
+ walk_left
+ face_player
+ step_end
+
+FollowerCuddlingWest:
+ face_down
+ lock_facing_direction
+ walk_left
+ walk_in_place_down
+ walk_in_place_down
+ unlock_facing_direction
+ walk_right
+ face_player
+ step_end
+
+FollowerGetCloserNorth:
+ walk_up
+ delay_16
+ lock_facing_direction
+ walk_down
+ unlock_facing_direction
+ step_end
+
+FollowerGetCloserSouth:
+ walk_down
+ delay_16
+ lock_facing_direction
+ walk_up
+ unlock_facing_direction
+ step_end
+
+FollowerGetCloserEast:
+ walk_right
+ delay_16
+ lock_facing_direction
+ walk_left
+ unlock_facing_direction
+ step_end
+
+FollowerGetCloserWest:
+ walk_left
+ delay_16
+ lock_facing_direction
+ walk_right
+ unlock_facing_direction
+ step_end
+
+FollowerPokeNorth:
+ walk_faster_up
+ delay_8
+ lock_facing_direction
+ walk_faster_down
+ delay_4
+ walk_faster_up
+ delay_4
+ walk_faster_down
+ unlock_facing_direction
+ step_end
+
+FollowerPokeSouth:
+ walk_faster_down
+ delay_8
+ lock_facing_direction
+ walk_faster_up
+ delay_4
+ walk_faster_down
+ delay_4
+ walk_faster_up
+ unlock_facing_direction
+ step_end
+
+FollowerPokeEast:
+ walk_faster_right
+ delay_8
+ lock_facing_direction
+ walk_faster_left
+ delay_4
+ walk_faster_right
+ delay_4
+ walk_faster_left
+ unlock_facing_direction
+ step_end
+
+FollowerPokeWest:
+ walk_faster_left
+ delay_8
+ lock_facing_direction
+ walk_faster_right
+ delay_4
+ walk_faster_left
+ delay_4
+ walk_faster_right
+ unlock_facing_direction
+ step_end
+
+FollowerLookAround:
+ face_away_player
+ delay_16
+ delay_16
+ face_left
+ delay_16
+ delay_16
+ face_up
+ delay_16
+ delay_16
+ face_down
+ delay_16
+ delay_16
+ step_end
+
+FollowerLookAway:
+ face_away_player
+ delay_16
+ delay_16
+ step_end
+
+FollowerLookAwayBark:
+ face_away_player
+ lock_facing_direction
+ jump_in_place_down
+ jump_in_place_down
+ unlock_facing_direction
+ step_end
+
+FollowerLookAwayPokeG:
+ face_away_player
+ lock_facing_direction
+ walk_in_place_down
+ walk_in_place_down
+ walk_in_place_down
+ unlock_facing_direction
+ step_end
+
+FollowerPokeGround:
+ lock_facing_direction
+ walk_in_place_down
+ walk_in_place_down
+ walk_in_place_down
+ unlock_facing_direction
+ step_end
+
+FollowerStartled:
+ face_away_player
+ lock_facing_direction
+ jump_in_place_down
+ unlock_facing_direction
+ face_player
+ step_end
+
+FollowerHopFast:
+ jump_in_place_up
+ jump_in_place_down
+ jump_in_place_left
+ jump_in_place_right
+ face_player
+ step_end
+
+FollowerDizzy:
+ walk_in_place_left
+ walk_in_place_fast_right
+ walk_in_place_slow_up
+ walk_in_place_fast_down
+ delay_4
+ face_away_player
+ step_end
+
+FollowerLookAroundScared:
+ face_up
+ delay_16
+ face_down
+ delay_16
+ face_left
+ delay_16
+ face_right
+ delay_16
+ face_up
+ delay_16
+ face_down
+ delay_16
+ face_left
+ delay_16
+ face_right
+ delay_16
+ face_player
+ step_end
+
+FollowerDance:
+ lock_facing_direction
+ jump_in_place_up
+ unlock_facing_direction
+ walk_in_place_fast_up
+ walk_in_place_fast_left
+ walk_in_place_fast_down
+ walk_in_place_fast_right
+ walk_in_place_fast_up
+ walk_in_place_fast_left
+ walk_in_place_fast_down
+ walk_in_place_fast_right
+ jump_in_place_up
+ jump_in_place_down
+ jump_in_place_up
+ face_player
+ step_end
+
+@ Movement scripts
+
+EventScript_FollowerIsShivering::
+ faceplayer
+ compare VAR_FACING, DIR_NORTH
+ call_if_eq ShiverVertical
+ compare VAR_FACING, DIR_SOUTH
+ call_if_eq ShiverVertical
+ compare VAR_FACING, DIR_WEST
+ call_if_eq ShiverHorizontal
+ compare VAR_FACING, DIR_EAST
+ call_if_eq ShiverHorizontal
+ goto EventScript_FollowerGeneric
+
+ShiverVertical:
+ applymovement OBJ_EVENT_ID_FOLLOWER, FollowerShiverVerticalMovement
+ waitmovement OBJ_EVENT_ID_FOLLOWER
+ return
+
+ShiverHorizontal:
+ applymovement OBJ_EVENT_ID_FOLLOWER, FollowerShiverHorizontalMovement
+ waitmovement OBJ_EVENT_ID_FOLLOWER
+ return
+
+EventScript_FollowerNostalgia::
+ applymovement OBJ_EVENT_ID_FOLLOWER, FollowerNostalgiaMovement
+ waitmovement OBJ_EVENT_ID_FOLLOWER
+ goto EventScript_FollowerGeneric
+
+EventScript_FollowerHopping::
+ faceplayer
+ applymovement OBJ_EVENT_ID_FOLLOWER, FollowerSkippingMovement
+ waitmovement OBJ_EVENT_ID_FOLLOWER
+ goto EventScript_FollowerGeneric
+
+JumpOnN:
+ applymovement OBJ_EVENT_ID_FOLLOWER, FollowerJumpOnPlayerNorth
+ waitmovement OBJ_EVENT_ID_FOLLOWER
+ return
+
+JumpOnS:
+ applymovement OBJ_EVENT_ID_FOLLOWER, FollowerJumpOnPlayerSouth
+ waitmovement OBJ_EVENT_ID_FOLLOWER
+ return
+
+JumpOnE:
+ applymovement OBJ_EVENT_ID_FOLLOWER, FollowerJumpOnPlayerEast
+ waitmovement OBJ_EVENT_ID_FOLLOWER
+ return
+
+JumpOnW:
+ applymovement OBJ_EVENT_ID_FOLLOWER, FollowerJumpOnPlayerWest
+ waitmovement OBJ_EVENT_ID_FOLLOWER
+ return
+
+EventScript_FollowerJumpOnPlayer::
+ faceplayer
+ compare VAR_FACING, DIR_NORTH
+ call_if_eq JumpOnS
+ compare VAR_FACING, DIR_SOUTH
+ call_if_eq JumpOnN
+ compare VAR_FACING, DIR_WEST
+ call_if_eq JumpOnE
+ compare VAR_FACING, DIR_EAST
+ call_if_eq JumpOnW
+ goto EventScript_FollowerGeneric
+
+CuddleN:
+ applymovement OBJ_EVENT_ID_FOLLOWER, FollowerCuddlingNorth
+ waitmovement OBJ_EVENT_ID_FOLLOWER
+ return
+
+CuddleS:
+ applymovement OBJ_EVENT_ID_FOLLOWER, FollowerCuddlingSouth
+ waitmovement OBJ_EVENT_ID_FOLLOWER
+ return
+
+CuddleE:
+ applymovement OBJ_EVENT_ID_FOLLOWER, FollowerCuddlingEast
+ waitmovement OBJ_EVENT_ID_FOLLOWER
+ return
+
+CuddleW:
+ applymovement OBJ_EVENT_ID_FOLLOWER, FollowerCuddlingWest
+ waitmovement OBJ_EVENT_ID_FOLLOWER
+ return
+
+EventScript_FollowerCuddling:: @ similar to Std_MsgboxDefault
+ faceplayer
+ compare VAR_FACING, DIR_NORTH
+ call_if_eq CuddleS
+ compare VAR_FACING, DIR_SOUTH
+ call_if_eq CuddleN
+ compare VAR_FACING, DIR_WEST
+ call_if_eq CuddleE
+ compare VAR_FACING, DIR_EAST
+ call_if_eq CuddleW
+ goto EventScript_FollowerGeneric
+
+ShCuddleN:
+ applymovement OBJ_EVENT_ID_FOLLOWER FollowerShiverVerticalMovement
+ waitmovement OBJ_EVENT_ID_FOLLOWER
+ applymovement OBJ_EVENT_ID_FOLLOWER FollowerCuddlingNorth
+ waitmovement OBJ_EVENT_ID_FOLLOWER
+ return
+
+ShCuddleS:
+ applymovement OBJ_EVENT_ID_FOLLOWER FollowerShiverVerticalMovement
+ waitmovement OBJ_EVENT_ID_FOLLOWER
+ applymovement OBJ_EVENT_ID_FOLLOWER FollowerCuddlingSouth
+ waitmovement OBJ_EVENT_ID_FOLLOWER
+ return
+
+ShCuddleE:
+ applymovement OBJ_EVENT_ID_FOLLOWER FollowerShiverHorizontalMovement
+ waitmovement OBJ_EVENT_ID_FOLLOWER
+ applymovement OBJ_EVENT_ID_FOLLOWER FollowerCuddlingEast
+ waitmovement OBJ_EVENT_ID_FOLLOWER
+ return
+
+ShCuddleW:
+ applymovement OBJ_EVENT_ID_FOLLOWER FollowerShiverHorizontalMovement
+ waitmovement OBJ_EVENT_ID_FOLLOWER
+ applymovement OBJ_EVENT_ID_FOLLOWER FollowerCuddlingWest
+ waitmovement OBJ_EVENT_ID_FOLLOWER
+ return
+
+EventScript_FollowerShiverCuddling::
+ faceplayer
+ compare VAR_FACING, DIR_NORTH
+ call_if_eq ShCuddleS
+ compare VAR_FACING, DIR_SOUTH
+ call_if_eq ShCuddleN
+ compare VAR_FACING, DIR_WEST
+ call_if_eq ShCuddleE
+ compare VAR_FACING, DIR_EAST
+ call_if_eq ShCuddleW
+ goto EventScript_FollowerGeneric
+
+CreepCloserN:
+ applymovement OBJ_EVENT_ID_FOLLOWER FollowerGetCloserNorth
+ waitmovement OBJ_EVENT_ID_FOLLOWER
+ return
+
+CreepCloserS:
+ applymovement OBJ_EVENT_ID_FOLLOWER FollowerGetCloserSouth
+ waitmovement OBJ_EVENT_ID_FOLLOWER
+ return
+
+CreepCloserE:
+ applymovement OBJ_EVENT_ID_FOLLOWER FollowerGetCloserEast
+ waitmovement OBJ_EVENT_ID_FOLLOWER
+ return
+
+CreepCloserW:
+ applymovement OBJ_EVENT_ID_FOLLOWER FollowerGetCloserWest
+ waitmovement OBJ_EVENT_ID_FOLLOWER
+ return
+
+EventScript_FollowerGetCloser::
+ faceplayer
+ compare VAR_FACING, DIR_NORTH
+ call_if_eq CreepCloserS
+ compare VAR_FACING, DIR_SOUTH
+ call_if_eq CreepCloserN
+ compare VAR_FACING, DIR_WEST
+ call_if_eq CreepCloserE
+ compare VAR_FACING, DIR_EAST
+ call_if_eq CreepCloserW
+ goto EventScript_FollowerGeneric
+
+PokePlayerN:
+ applymovement OBJ_EVENT_ID_FOLLOWER FollowerGetCloserNorth
+ waitmovement OBJ_EVENT_ID_FOLLOWER
+ return
+
+PokePlayerS:
+ applymovement OBJ_EVENT_ID_FOLLOWER FollowerGetCloserSouth
+ waitmovement OBJ_EVENT_ID_FOLLOWER
+ return
+
+PokePlayerE:
+ applymovement OBJ_EVENT_ID_FOLLOWER FollowerGetCloserEast
+ waitmovement OBJ_EVENT_ID_FOLLOWER
+ return
+
+PokePlayerW:
+ applymovement OBJ_EVENT_ID_FOLLOWER FollowerGetCloserWest
+ waitmovement OBJ_EVENT_ID_FOLLOWER
+ return
+
+EventScript_FollowerPokingPlayer::
+ faceplayer
+ compare VAR_FACING, DIR_NORTH
+ call_if_eq PokePlayerS
+ compare VAR_FACING, DIR_SOUTH
+ call_if_eq PokePlayerN
+ compare VAR_FACING, DIR_WEST
+ call_if_eq PokePlayerE
+ compare VAR_FACING, DIR_EAST
+ call_if_eq PokePlayerW
+ goto EventScript_FollowerGeneric
+
+EventScript_FollowerLookAround::
+ applymovement OBJ_EVENT_ID_FOLLOWER FollowerLookAround
+ waitmovement OBJ_EVENT_ID_FOLLOWER
+ goto EventScript_FollowerGeneric
+
+EventScript_FollowerLookAway::
+ applymovement OBJ_EVENT_ID_FOLLOWER FollowerLookAway
+ waitmovement OBJ_EVENT_ID_FOLLOWER
+ goto EventScript_FollowerGenericSkipFace
+
+EventScript_FollowerLookAwayBark::
+ applymovement OBJ_EVENT_ID_FOLLOWER FollowerLookAwayBark
+ waitmovement OBJ_EVENT_ID_FOLLOWER
+ goto EventScript_FollowerGenericSkipFace
+
+EventScript_FollowerLookAwayPoke::
+ applymovement OBJ_EVENT_ID_FOLLOWER FollowerLookAwayPokeG
+ waitmovement OBJ_EVENT_ID_FOLLOWER
+ goto EventScript_FollowerGenericSkipFace
+
+EventScript_FollowerPokeGround::
+ faceplayer
+ applymovement OBJ_EVENT_ID_FOLLOWER FollowerPokeGround
+ waitmovement OBJ_EVENT_ID_FOLLOWER
+ goto EventScript_FollowerGeneric
+
+EventScript_FollowerStartled::
+ applymovement OBJ_EVENT_ID_FOLLOWER FollowerStartled
+ waitmovement OBJ_EVENT_ID_FOLLOWER
+ goto EventScript_FollowerGenericSkipFace
+
+EventScript_FollowerFastHopping::
+ applymovement OBJ_EVENT_ID_FOLLOWER FollowerHopFast
+ waitmovement OBJ_EVENT_ID_FOLLOWER
+ goto EventScript_FollowerGenericSkipFace
+
+EventScript_FollowerDizzy::
+ applymovement OBJ_EVENT_ID_FOLLOWER FollowerDizzy
+ waitmovement 0
+ goto EventScript_FollowerGenericSkipFace
+
+EventScript_FollowerLookAroundScared::
+ applymovement OBJ_EVENT_ID_FOLLOWER FollowerLookAroundScared
+ waitmovement OBJ_EVENT_ID_FOLLOWER
+ goto EventScript_FollowerGeneric
+
+EventScript_FollowerDance::
+ faceplayer
+ applymovement OBJ_EVENT_ID_FOLLOWER FollowerDance
+ waitmovement 0
+ goto EventScript_FollowerGenericSkipFace
+
+EventScript_FollowerFaceUp::
+ applymovement OBJ_EVENT_ID_FOLLOWER Common_Movement_FaceUp
+ waitmovement OBJ_EVENT_ID_FOLLOWER
+ goto EventScript_FollowerGenericSkipFace
+
+EventScript_FollowerFaceResult:: @ Face towards direction in VAR_RESULT
+ switch VAR_RESULT
+ case DIR_SOUTH, EventScript_FollowerFaceDown
+ case DIR_NORTH, EventScript_FollowerFaceUp
+ case DIR_WEST, EventScript_FollowerFaceLeft
+ case DIR_EAST, EventScript_FollowerFaceRight
+ goto EventScript_FollowerGeneric
+
+EventScript_FollowerFaceDown:
+ applymovement OBJ_EVENT_ID_FOLLOWER Common_Movement_FaceDown
+ waitmovement OBJ_EVENT_ID_FOLLOWER
+ goto EventScript_FollowerGenericSkipFace
+
+EventScript_FollowerFaceLeft:
+ applymovement OBJ_EVENT_ID_FOLLOWER Common_Movement_FaceLeft
+ waitmovement OBJ_EVENT_ID_FOLLOWER
+ goto EventScript_FollowerGenericSkipFace
+
+EventScript_FollowerFaceRight:
+ applymovement OBJ_EVENT_ID_FOLLOWER Common_Movement_FaceRight
+ waitmovement OBJ_EVENT_ID_FOLLOWER
+ goto EventScript_FollowerGenericSkipFace
diff --git a/data/scripts/movement.inc b/data/scripts/movement.inc
index 383c014130cb..a5ebc0ae7fe2 100644
--- a/data/scripts/movement.inc
+++ b/data/scripts/movement.inc
@@ -1,3 +1,6 @@
+@ Starting from here, these movements are considered
+@ 'safe' (won't put follower into a Pokeball)
+Common_Movement_FollowerSafeStart::
Common_Movement_QuestionMark:
emote_question_mark
step_end
@@ -68,6 +71,10 @@ Common_Movement_WalkInPlaceRight:
walk_in_place_right
step_end
+@ End of follower-safe movements
+Common_Movement_FollowerSafeEnd::
+ step_end
+
Common_Movement_WalkUp6:
walk_up
walk_up
diff --git a/data/scripts/pkmn_center_nurse.inc b/data/scripts/pkmn_center_nurse.inc
index 64ccdfa77e55..5cef4587494e 100644
--- a/data/scripts/pkmn_center_nurse.inc
+++ b/data/scripts/pkmn_center_nurse.inc
@@ -33,13 +33,14 @@ EventScript_PkmnCenterNurse_IllTakeYourPkmn2::
return
EventScript_PkmnCenterNurse_TakeAndHealPkmn::
- applymovement VAR_0x800B, Common_Movement_WalkInPlaceFasterLeft
+ applymovement VAR_0x800B, Movement_PkmnCenterNurse_Turn @ Changed from Common_Movement_WalkInPlaceFasterLeft to force the follower to enter their Poké Ball
waitmovement 0
dofieldeffect FLDEFF_POKECENTER_HEAL
waitfieldeffect FLDEFF_POKECENTER_HEAL
applymovement VAR_0x800B, Common_Movement_WalkInPlaceFasterDown
waitmovement 0
special HealPlayerParty
+ callnative UpdateFollowingPokemon
return
EventScript_PkmnCenterNurse_CheckTrainerHillAndUnionRoom::
@@ -120,3 +121,7 @@ Movement_PkmnCenterNurse_Bow:
nurse_joy_bow
delay_4
step_end
+
+Movement_PkmnCenterNurse_Turn:
+ walk_in_place_faster_left
+ step_end
diff --git a/data/scripts/secret_base.inc b/data/scripts/secret_base.inc
index 918a9d630127..9a6fd772537e 100644
--- a/data/scripts/secret_base.inc
+++ b/data/scripts/secret_base.inc
@@ -646,6 +646,7 @@ SecretBase_EventScript_BattleTrainer::
call_if_eq VAR_RESULT, B_OUTCOME_WON, SecretBase_EventScript_WonSecretBaseBattle
call_if_eq VAR_RESULT, B_OUTCOME_LOST, SecretBase_EventScript_LostSecretBaseBattle
special HealPlayerParty
+ callnative UpdateFollowingPokemon
release
end
diff --git a/data/scripts/trainer_battle.inc b/data/scripts/trainer_battle.inc
index bbbcaf3ba3e2..900e5da8f8a6 100644
--- a/data/scripts/trainer_battle.inc
+++ b/data/scripts/trainer_battle.inc
@@ -10,8 +10,10 @@ EventScript_TrainerApproach::
EventScript_TryDoNormalTrainerBattle::
lock
faceplayer
+ setflag FLAG_SAFE_FOLLOWER_MOVEMENT
applymovement VAR_LAST_TALKED, Movement_RevealTrainer
waitmovement 0
+ clearflag FLAG_SAFE_FOLLOWER_MOVEMENT
specialvar VAR_RESULT, GetTrainerFlag
goto_if_ne VAR_RESULT, FALSE, EventScript_NoNormalTrainerBattle
special PlayTrainerEncounterMusic
@@ -44,8 +46,10 @@ EventScript_NoDoubleTrainerBattle::
gotopostbattlescript
EventScript_DoNoIntroTrainerBattle::
+ setflag FLAG_SAFE_FOLLOWER_MOVEMENT
applymovement VAR_LAST_TALKED, Movement_RevealTrainer
waitmovement 0
+ clearflag FLAG_SAFE_FOLLOWER_MOVEMENT
special PlayTrainerEncounterMusic
dotrainerbattle
gotopostbattlescript
@@ -93,8 +97,10 @@ EventScript_NotEnoughMonsForDoubleRematchBattle::
end
EventScript_RevealTrainer::
+ setflag FLAG_SAFE_FOLLOWER_MOVEMENT
applymovement VAR_LAST_TALKED, Movement_RevealTrainer
waitmovement 0
+ clearflag FLAG_SAFE_FOLLOWER_MOVEMENT
return
Movement_RevealTrainer:
diff --git a/dev_scripts/followers/extract_sprites.py b/dev_scripts/followers/extract_sprites.py
new file mode 100644
index 000000000000..32e21aaa52a5
--- /dev/null
+++ b/dev_scripts/followers/extract_sprites.py
@@ -0,0 +1,110 @@
+#!/usr/bin/env python3
+""" Extract sprites from HGSS follower spritesheets. """
+import os.path
+import subprocess
+import sys
+from glob import glob
+
+import png
+
+
+SPRITESHEETS = [('gen1.png', 15, 11, 1)]
+output_dir = 'sprites'
+index_to_name = {}
+with open('names.txt', 'r') as f:
+ for line in f:
+ index, name = line.split(' ')[:2]
+ name = name.strip()
+ index_to_name[int(index)] = name.lower()
+name_to_index = {v: k for k, v in index_to_name.items()}
+PKMN_GRAPHICS = os.path.join('graphics', 'pokemon')
+
+
+def extract_sprites(spritesheet):
+ path, width, height, offset = spritesheet
+ for y in range(height):
+ for x in range(width):
+ if x == 3 and y == 0 or x == 10 and y == 1:
+ continue
+ output_path = os.path.join(output_dir, f'{offset:03d}.png')
+ subprocess.run(['convert', '-extract', f'64x128+{x*(64+1)}+{y*(128+1)}', path, output_path], check=True)
+ offset += 1
+
+
+def stack_sprite(name, path):
+ joinp = os.path.join
+ frames = [joinp(path, 'down', name), joinp(path, 'down', 'frame2', name),
+ joinp(path, 'up', name), joinp(path, 'up', 'frame2', name),
+ joinp(path, 'left', name), joinp(path, 'left', 'frame2', name)]
+ output = joinp(path, name)
+ subprocess.run(['convert'] + frames + ['+append', output], check=True)
+ print(f'Stacked {output}')
+
+def canonicalize_names():
+ for path in glob('overworld/**/*.png', recursive=True):
+ head, tail = os.path.split(path)
+ name, ext = os.path.splitext(tail)
+ try:
+ num = int(name)
+ except ValueError:
+ continue
+ new_name = f'{num:03d}'
+ new_path = os.path.join(head, new_name+ext)
+ os.rename(path, new_path)
+ print(path, '->', new_path)
+
+def closest_color(c, palette):
+ min_d = float('inf')
+ best = 0
+ r1, g1, b1 = c
+ for i, (r2, g2, b2) in enumerate(palette[1:], 1):
+ # Color diff from https://stackoverflow.com/questions/1847092/given-an-rgb-value-what-would-be-the-best-way-to-find-the-closest-match-in-the-d
+ d = ((r2-r1)*0.30)**2 + ((g2-g1)*0.59)**2 + ((b2-b1)*0.11)**2
+ if d < min_d:
+ min_d = d
+ best = i
+ return best
+
+def apply_palette(palette_file, input_file, output_file): # Apply one file's palette to another
+ plt = png.Reader(palette_file)
+ plt.read()
+ target_palette = tuple(c[:3] for c in plt.palette())
+ inp = png.Reader(input_file)
+ w, h, rows, _ = inp.read()
+ src_palette = tuple(c[:3] for c in inp.palette())
+ with open(output_file, 'wb') as f:
+ new_rows = []
+ for row in rows:
+ new_rows.append([closest_color(src_palette[c], target_palette) if c else 0 for c in row])
+ w = png.Writer(width=w, height=h, bitdepth=4, palette=target_palette)
+ w.write(f, new_rows)
+
+def paletteify(path, output_path=None):
+ output_path = output_path or path
+ joinp = os.path.join
+ _, tail = os.path.split(path)
+ species, _ = os.path.splitext(tail)
+ front = png.Reader(joinp(PKMN_GRAPHICS, species, 'anim_front.png'))
+ front.read()
+ target_palette = tuple(c[:3] for c in front.palette())
+ r, g, b = target_palette[0]
+ color = f'rgb({r},{g},{b})'
+ # Strip alpha color
+ subprocess.run(['convert', path, '-background', color, '-alpha', 'remove', output_path], check=True)
+ apply_palette(joinp(PKMN_GRAPHICS, species, 'anim_front.png'), output_path, output_path)
+
+# Sprites from https://veekun.com/dex/downloads
+
+if __name__ == '__main__':
+ args = sys.argv[1:]
+ if args:
+ paletteify(args[0])
+ else:
+ for path in sorted(glob('overworld/*.png')):
+ _, tail = os.path.split(path)
+ name, _ = os.path.splitext(tail)
+ output_path = os.path.join('graphics/object_events/pics/pokemon', f'{name}.png')
+ try:
+ paletteify(path, output_path)
+ except Exception as e:
+ print(name, e.__class__.__name__, e, file=sys.stderr)
diff --git a/dev_scripts/followers/follower_emotions.py b/dev_scripts/followers/follower_emotions.py
new file mode 100644
index 000000000000..522634803102
--- /dev/null
+++ b/dev_scripts/followers/follower_emotions.py
@@ -0,0 +1,50 @@
+""" Processes & outputs follower emotion messages """
+import sys
+import re
+import textwrap
+
+blank_regex = re.compile(r'\(?_+\)?')
+
+
+# Converts a series of message lines to a better format
+def convert_messages(infile, outfile='emotions.txt'):
+ with open(infile, 'r') as f_in, open(outfile, 'w') as f_out:
+ for line in f_in:
+ line = line.rstrip('\n')
+ if line and line[0] == '-':
+ line = line[1:]
+ line = line.lstrip()
+ if not line:
+ continue
+ line = blank_regex.sub('{STR_VAR_1}', line)
+ if line[-1] not in ('.', '?', '!', ':'):
+ line += '.'
+ print(line)
+ f_out.write('\n' + line)
+
+# Prepares a string for field-message display, performing line-wrapping, etc
+# Does not add a terminator, as this is done by _("")
+def prepare_string(s):
+ lines = textwrap.wrap(s, width=36) # Width of message window
+ s = lines[0]
+ for i, line in enumerate(lines[1:]):
+ ending = r'\p' if i % 2 else r'\n'
+ s += ending + line
+ return s
+
+
+# Exports up to n messages in C format to outfile
+def export_messages(infile, outfile, n=None, indent=0, start=0):
+ with open(infile, 'r') as f_in:
+ lines = f_in.readlines()
+ if n is not None:
+ lines = lines[:n]
+ with open(outfile, 'w') as f_out:
+ codelines = [' '*indent + f'static const u8 sCondMsg{start+i:02d}[] = _("{prepare_string(s)}");' for i, s in enumerate(lines)]
+ f_out.write('\n'.join(codelines))
+ print(f'{len(lines)} lines written')
+ return len(lines)
+
+
+if __name__ == '__main__':
+ export_messages('emotions.txt', 'emotions.h', n=1, start=7)
diff --git a/dev_scripts/followers/front_palette.py b/dev_scripts/followers/front_palette.py
new file mode 100644
index 000000000000..e16521dbc02b
--- /dev/null
+++ b/dev_scripts/followers/front_palette.py
@@ -0,0 +1,77 @@
+#!/usr/bin/env python3
+""" Extract sprites from HGSS follower spritesheets. """
+import os.path
+from os.path import join as joinp
+import subprocess
+import sys
+from glob import glob
+
+import png
+from tqdm import tqdm
+
+import shutil
+
+def stack_sprite(name, path):
+ frames = [joinp(path, 'down', name), joinp(path, 'down', 'frame2', name),
+ joinp(path, 'up', name), joinp(path, 'up', 'frame2', name),
+ joinp(path, 'left', name), joinp(path, 'left', 'frame2', name)]
+ output = joinp(path, name)
+ subprocess.run(['convert'] + frames + ['+append', output], check=True)
+ print(f'Stacked {output}')
+
+def closest_color(c, palette):
+ min_d = float('inf')
+ best = 0
+ r1, g1, b1 = c
+ for i, (r2, g2, b2) in enumerate(palette[1:], 1):
+ # Color diff from https://stackoverflow.com/questions/1847092/given-an-rgb-value-what-would-be-the-best-way-to-find-the-closest-match-in-the-d
+ d = ((r2-r1)*0.30)**2 + ((g2-g1)*0.59)**2 + ((b2-b1)*0.11)**2
+ if d < min_d:
+ min_d = d
+ best = i
+ return best
+
+def apply_palette(palette_file, input_file, output_file): # Apply one file's palette to another
+ plt = png.Reader(palette_file)
+ plt.read()
+ target_palette = tuple(c[:3] for c in plt.palette())
+ inp = png.Reader(input_file)
+ w, h, rows, info = inp.read()
+ src_palette = tuple(c[:3] for c in inp.palette())
+ new_rows = [[closest_color(src_palette[c][:3], target_palette) if c else 0 for c in row] for row in rows]
+ with open(output_file, 'wb') as f:
+ w = png.Writer(width=w, height=h, bitdepth=4, palette=target_palette)
+ w.write(f, new_rows)
+
+# Sprites from https://veekun.com/dex/downloads
+
+def apply_front_palettes(ow_dir, project_root=''):
+ mon_graphics = joinp(project_root, 'graphics', 'pokemon')
+ for x in os.walk(ow_dir):
+ current_dir = x[0]
+ sub_dir = current_dir[len(ow_dir) + 1:1000]
+ t = tqdm(sorted(glob(joinp(current_dir, '*.png'))))
+ spaces = 0
+ for path in t:
+ name, _ = os.path.splitext(os.path.basename(path))
+ name = joinp(sub_dir, name)
+ # old_path = joinp(project_root, 'graphics', 'object_events', 'pics', 'pokemon', f'{name}.png')
+ # new_path = joinp(project_root, 'graphics', 'object_events', 'pics', 'pokemon', name, 'follower.png')
+ # os.mkdir(joinp(project_root, 'graphics', 'object_events', 'pics', 'pokemon', name))
+ # shutil.move(old_path, new_path)
+ spaces = min(max(len(name), spaces), 10)
+ t.set_description(name + ' '*(spaces-len(name)))
+ output_path = joinp(project_root, 'graphics', 'object_events', 'pics', 'pokemon', f'{name}.png')
+ palette_path = joinp(mon_graphics, name, 'anim_front.png')
+ try:
+ apply_palette(palette_path, path, output_path)
+ except Exception as e:
+ palette_path = joinp(mon_graphics, name, 'front.png')
+ try:
+ apply_palette(palette_path, path, output_path)
+ except Exception as e2:
+ t.write(f'{name}: {e2.__class__.__name__}: {e2}', file=sys.stderr)
+
+
+if __name__ == '__main__':
+ apply_front_palettes('graphics/object_events/pics/pokemon')
diff --git a/dev_scripts/followers/palette.py b/dev_scripts/followers/palette.py
new file mode 100644
index 000000000000..5fbcb48d4b53
--- /dev/null
+++ b/dev_scripts/followers/palette.py
@@ -0,0 +1,26 @@
+#!/usr/bin/python3
+""" Extract a GBA-compatible palette from a PNG. """
+import sys
+import os.path
+import png
+
+PAL_PRELUDE = 'JASC-PAL\n0100\n'
+
+
+def extract_palette(path):
+ r = png.Reader(path)
+ r.read()
+ root, _ = os.path.splitext(path)
+ out_path = root + '.pal'
+ with open(out_path, 'w', newline='\r\n') as f:
+ f.write(PAL_PRELUDE)
+ colors = r.palette()
+ if len(colors) < 16:
+ colors += [(0, 0, 0) for _ in range(16-len(colors))]
+ f.write(f'{len(colors)}\n')
+ for r, g, b in colors:
+ f.write(f'{r} {g} {b}\n')
+
+
+if __name__ == '__main__':
+ extract_palette(*sys.argv[1:])
diff --git a/dev_scripts/followers/rename.sh b/dev_scripts/followers/rename.sh
new file mode 100644
index 000000000000..f8b36bb4950e
--- /dev/null
+++ b/dev_scripts/followers/rename.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+lalala1="graphics/object_events/pics/pokemon/"
+lalala2="a2"
+for file in graphics/object_events/pics/pokemon/*.png; do
+ name=${file##*/}
+ base=${name%.png}
+ #echo "${file}"
+ #echo "${base}"
+ echo "graphics/pokemon/${base}/follower.png"
+ mv -- "$file" "graphics/pokemon/${base}/follower.png"
+done
diff --git a/dev_scripts/followers/rename_files_of_same_name.py b/dev_scripts/followers/rename_files_of_same_name.py
new file mode 100644
index 000000000000..5c963b6a804a
--- /dev/null
+++ b/dev_scripts/followers/rename_files_of_same_name.py
@@ -0,0 +1,24 @@
+import glob
+import re
+import json
+import os
+import subprocess
+
+# THIS IS A TEMPORARY SCRIPT MADE TO RENAME FILES WITH THE "FOLLOWER" NAME TO "OVERWORLD",
+# AS THESE GRAPHICS CAN ALSO BE USED OUTSIDE THE FOLLOWER FEATURE.
+#
+# I'M SAVING IT HERE IN CASE IT'S NEEDED SOMEWHERE IN THE FUTURE, THOUGH TWEAKING MIGHT BE NEEDED.
+# - AsparagusEduardo
+
+def rename_files(dir, old, new):
+ for root, dirs, files in os.walk(dir):
+ for name in files:
+ if name.endswith(old):
+ originalName = os.path.join(root, name)
+ newName = originalName.replace(old, new)
+ print(originalName + " -> " + newName)
+ os.rename(originalName, newName)
+
+rename_files("graphics/pokemon", 'follower.png', "overworld.png")
+rename_files("graphics/pokemon", 'follow_normal.pal', "overworld_normal.pal")
+rename_files("graphics/pokemon", 'follow_shiny.pal', "overworld_shiny.pal")
diff --git a/dev_scripts/followers/rename_to_graphics_pokemon.py b/dev_scripts/followers/rename_to_graphics_pokemon.py
new file mode 100644
index 000000000000..a89348ddb43b
--- /dev/null
+++ b/dev_scripts/followers/rename_to_graphics_pokemon.py
@@ -0,0 +1,64 @@
+import glob
+import re
+import json
+import os
+import subprocess
+
+# THIS IS A TEMPORARY SCRIPT MADE TO MOVE EXISTING FOLLOWER GRAPHICS FROM A SINGLE DIRECTORY.
+# IT TAKES FOLLOWER GRAPHICS FROM a 'followers' FOLDER IN THE ROOT FOLDER AND MOVES THEM BASED ON THEIR NAME.
+# EG. 'followers/bulbasaur.png' WILL BE MOVED to 'graphics/pokemon/bulbasaur/follower.png'.
+#
+# I'M SAVING IT HERE IN CASE IT'S NEEDED SOMEWHERE IN THE FUTURE, THOUGH TWEAKING MIGHT BE NEEDED.
+# - AsparagusEduardo
+
+def rellocate_follower_graphics():
+ dict_out = {}
+ count = 0
+ for pth in sorted(glob.glob('followers/*.png')):
+ name = pth.replace(".png", "").replace("followers/", "")
+ count+=1
+ #if (count == 2):
+ # break
+ print(name)
+ newname = name
+ newname = newname.replace("_female", "/female")
+ newname = newname.replace("_hisuian", "/hisuian")
+ newname = newname.replace("_galarian", "/galarian")
+ newname = newname.replace("_origin", "/origin")
+ newname = newname.replace("_therian", "/therian")
+ newname = newname.replace("_east_sea", "/east_sea")
+ newname = newname.replace("_crowned", "/crowned")
+
+ newname = newname.replace("arceus_", "arceus/")
+ newname = newname.replace("burmy_", "burmy/")
+ newname = newname.replace("basculin_", "basculin/")
+ newname = newname.replace("castform_", "castform/")
+ newname = newname.replace("calyrex_", "calyrex/")
+ newname = newname.replace("deerling_", "deerling/")
+ newname = newname.replace("deoxys_", "deoxys/")
+ newname = newname.replace("flabebe_", "flabebe/")
+ newname = newname.replace("floette_", "floette/")
+ newname = newname.replace("florges_", "florges/")
+ newname = newname.replace("furfrou_", "furfrou/")
+ newname = newname.replace("hoopa_", "hoopa/")
+ newname = newname.replace("lycanroc_", "lycanroc/")
+ newname = newname.replace("meloetta_", "meloetta/")
+ newname = newname.replace("necrozma_", "necrozma/")
+ newname = newname.replace("pichu_", "pichu/")
+ newname = newname.replace("rotom_", "rotom/")
+ newname = newname.replace("sawsbuck_", "sawsbuck/")
+ newname = newname.replace("toxtricity_", "toxtricity/")
+ newname = newname.replace("unown_", "unown/")
+ newname = newname.replace("ursaluna_", "ursaluna/")
+ newname = newname.replace("vivillon_", "vivillon/")
+ newname = newname.replace("wormadam_", "wormadam/")
+
+ if (os.path.exists('followers/' + newname) == False):
+ os.mkdir('followers/' + newname)
+ os.rename('followers/' + name + '.png', 'followers/' + newname + '/follower.png')
+ #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) + "'"])
+
+rellocate_follower_graphics()
diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md
index d1a93ce0be92..603fa225db6f 100644
--- a/docs/SUMMARY.md
+++ b/docs/SUMMARY.md
@@ -3,8 +3,25 @@
- [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)
- [1.8.x]()
+ - [Version 1.8.6](changelogs/1.8.x/1.8.6.md)
- [Version 1.8.5](changelogs/1.8.x/1.8.5.md)
- [Version 1.8.4](changelogs/1.8.x/1.8.4.md)
- [Version 1.8.3](changelogs/1.8.x/1.8.3.md)
diff --git a/docs/ai_flags.md b/docs/ai_flags.md
new file mode 100644
index 000000000000..bb7b1b7444e5
--- /dev/null
+++ b/docs/ai_flags.md
@@ -0,0 +1,154 @@
+# What are AI Flags?
+AI flags alter the behavior of AI controlled trainers. These flags affect what moves the AI chooses to use, what Pokémon the AI sends out and when they decide to switch, overarching strategic choices the AI prefers to make, and more.
+
+The AI flags can be found in [`include/constants/battle_ai.h`](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/include/constants/battle_ai.h). Some flags have their own dedicated functions that affect how the AI scores its options when choosing what to do in battle, and those functions can be found in [`src/battle_ai_main.c`](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/battle_ai_main.c). Other flags are used in conditional checks to gate certain behaviour behind certain flags, which you can typically find by searching the codebase for the flag name and browsing from there.
+
+# What flags should you use?
+When adding new AI flags it is recommended to use `AI_FLAG_CHECK_BAD_MOVE`, `AI_FLAG_CHECK_VIABILITY`, `AI_FLAG_TRY_TO_FAINT` to make sure the AI makes good decisions. It is especially important to use `AI_FLAG_CHECK_BAD_MOVE` in combination with any added flags otherwise the AI will use moves that can fail.
+
+Other flags should be used with consideration to the circumstances.
+
+# How do you use them?
+Adding an AI flag to a trainer is straightforward, but the process is different depending on how trainers are being defined.
+
+## `COMPETITIVE_PARTY_SYNTAX == TRUE`
+If you are using competitive syntax parties, navigate to the trainer data in [`src/data/trainers.party`](https://github.com/rh-hideout/pokeemerald-expansion/blob/upcoming/src/data/trainers.party), find the trainer you’d like to change, and add flags like so:
+AI: Check Bad Move / Try to Faint / Check Viability. The name of each flag is just the constant, but without AI_FLAG at the beginning. For example, to add `AI_FLAG_SEQUENCE_SWITCHING`, any of the following will work:
+* AI_FLAG_SEQUENCE_SWITCHING
+* SEQUENCE_SWITCHING
+* SEQUENCE SWITCHING
+* Sequence_Switching
+* Sequence Switching
+
+## `COMPETITIVE_PARTY_SYNTAX != TRUE` / Not Found
+If you are not using competitive syntax parties, instead access the trainer data directly in [`src/data/trainers.h`](https://github.com/rh-hideout/pokeemerald-expansion/blob/master/src/data/trainers.h), and add flags like so, typed exactly the same as the flag names themselves:
+`.aiFlags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_CHECK_VIABILITY`
+
+# What AI Flags does pokeemerald-expansion have?
+This section lists all of expansion’s AI Flags and briefly describes the effect they have on the AI’s behaviour. In all cases, please check the corresponding function or surrounding code around their implementation for more details. Some of these functions are vanilla, some share a name with vanilla but have been modified to varying degrees, and some are completely new.
+
+## `AI_FLAG_CHECK_BAD_MOVE`
+The AI will avoid using moves that are likely to fail in the current situation. This flag helps prevent the AI from making ineffective choices, such as using moves into immunities, into invulnerable states, or when the moves are otherwise hindered by abilities, terrain, or status conditions.
+
+## `AI_FLAG_TRY_TO_FAINT`
+AI will prioritize KOing the player if able rather than using status moves. Will prioritize using a move that can OHKO the player. If the player can KO the AI’s mon and the AI’s mon is slower, prioritize priority moves (this does not prevent the AI from switching out instead).
+
+This flag handles scoring for OHKOs but does not handle 2HKOs at all, `AI_FLAG_STRONGEST_MOVE` should be used for 2HKO scoring.
+
+## `AI_FLAG_CHECK_VIABILITY`
+This flag is divided into two components to calculate the best available move for the current context:
+- **`AI_CompareDamagingMoves`**: This function compares damaging moves against each other and picks the best one.
+- **`AI_CalcMoveEffectScore`**: This function checks every move effect (status or damaging move effect) and increases the score accordingly.
+
+This is different to `AI_FLAG_CHECK_BAD_MOVE` as it calculates how poor a move is and not whether it will fail or not.
+
+## `AI_FLAG_SETUP_FIRST_TURN`
+AI will prioritize using setup moves on the first turn. These include stat buffs, field effects, status moves, etc.
+
+This is just a flat increase without any consideration of whether it makes sense to use the move or not. For better move choice quality for those moves, `AI_FLAG_CHECK_VIABILITY` should be used.
+
+## `AI_FLAG_RISKY`
+AI will generally behave more recklessly. This AI enables the following behaviour:
+* Always assume the highest damage roll when scoring moves
+* Blindly Mirror Coat / Counter based on the player mon’s species higher attacking stat
+* Moves with Recoil if they miss are not treated differently even if accuracy is lowered
+* Prioritize maximizing damage from moves at the cost of accuracy
+* Prioritize moves with low change strong effects (Ancient Power etc., check `AI_Risky` function for full list)
+* Switch offensively mid battle rather than defensively (if using `AI_FLAG_SMART_MON_CHOICES`)
+* Prioritize Explosion moves
+
+## `AI_FLAG_PREFER_STRONGEST_MOVE`
+Adds score bonus to any move the AI has that either OHKOs or 2HKOs the player.
+
+Keep in mind that this is a weaker form of `AI_FLAG_TRY_TO_FAINT` at scoring OHKOs as it does not take into account who is attacking first, it does however handle 2HKOs.
+
+## `AI_FLAG_PREFER_BATON_PASS`
+AI prefers raising its own stats if it has >= 60% HP, as well as Ingrain, Aqua Ring, and Protect. Prioritizes Baton Bass if the mon is rooted (Ingrain) or has the Aqua Ring effect, and doesn’t if it has been Leech Seeded.
+
+## `AI_FLAG_DOUBLE_BATTLE`
+This flag is automatically set in double battles, and controls much of the doubles-specific scoring. I’ll summarize some of its scoring as follows:
+* Don’t use Helping Hand if partner is, don’t Perish Trap your partner, don’t change the weather if they are, don’t buff stats if partner will trigger Anger Point for us
+* Collaborate with partner to Perish Trap opponent, Magnet Rise to protect partner, Dragon Cheer partner if applicable
+* Prioritize using weather move if it benefits partner
+* Prioritize triggering partner’s good abilities if possible (Motor Drive, Storm Drain, Beat Up -> Justified, etc.)
+* Handle Skill Swap smartly, both with the partner and against the player
+
+## `AI_FLAG_HP_AWARE`
+Lets the AI make decisions based on how much remaining HP its mon(s) and the player’s mon(s) have.
+
+With respect to the AI’s mons, in doubles:
+* Allows the AI to attack its partner with a move it can absorb if its low on HP (ie. Electric move on partner with Volt Absorb)
+* Prioritizes healing its partner if its HP is <= 50% if able
+
+In both singles and doubles:
+* Prioritizes not using moves that require the user fainting (Destiny Bond, Explosion etc.) and healing moves while on >= 70% HP.
+* Prioritize not using moves that require the user fainting or losing significant HP (Belly Drum etc) while between 30% and 70% HP
+* Prioritize not using setup moves (Light Screen etc.) and Bide while on <= 30% HP
+
+With respect to the player’s mons:
+* Prioritize not using many status moves (stat buffs, Poison, Pain Split) if the player has between 30% and 70% HP
+* Prioritize not using any status moves if the player is has <= 30% HP
+
+## `AI_FLAG_POWERFUL_STATUS`
+AI prioritizes setting up field effects (Trick Room, Rain Dance, etc.) and side statuses (Tailwind, Spikes, etc.), even if it could faint the target.
+
+## `AI_FLAG_NEGATE_UNAWARE`
+AI does not understand ability suppression (Mold Breaker etc., weather suppression (Air Lock etc.), redirection abilities (Lightningrod etc.) being temporarily removed due to move effects (Sky Drop etc.), or item suppression (Magic Room etc.) and will ignore them. This is a handicap flag.
+
+## `AI_FLAG_WILL_SUICIDE`
+AI prioritizes self destruction moves (Explosion, Memento).
+
+## `AI_FLAG_PREFER_STATUS_MOVES`
+AI gets a score bonus for status moves. This should be combined with `AI_FLAG_CHECK_BAD_MOVE` to prevent using only status moves.
+
+## `AI_FLAG_STALL`
+AI prefers simple classically "stalling" behaviour. It will prioritize:
+* Mean Look, Fairy Lock, and Wrap for trapping
+* Increasing its defense and special defense
+* Moves that inflict Poison if it also has a Protect move
+* Copying defense and special defense buffs
+
+## `AI_FLAG_SMART_SWITCHING`
+Affects when the AI chooses to switch. AI will make smarter decisions about when to switch out mid-battle. Automatically enables `AI_FLAG_SMART_MON_CHOICES`, which is required as the vanilla mon selection AI is not smart enough to handle several switch-triggering situations appropriately, leading to bizarre behaviour. Many of these checks have intentional failure rates, so the AI won’t switch out 100% of the time in these cases to keep the player from being able to predict perfectly. Some of these also only apply to singles, and many of them are being simplified for the sake of brevity. This flag lets the AI trigger switches when:
+* It can’t hit Wonder Guard and has another mon in the party that can (switch that mon in)
+* It’s going to die to Perish Song, can’t KO the player and is affected by Yawn, is being severely affected by a status condition that switching helps (Curse, Toxic, Leech Seed)
+* It has a mon that can trap the player’s mon and win the 1v1 (switch that mon in)
+* It has a mon in the party that can absorb the player’s next expected attack (switch that mon in)
+* It will not switch if the current mon will die to hazards on re-entry and it has no means of clearing them in its party
+* All its moves are bad
+* It can take advantage of Natural Cure or Regenerator
+* Its Encore’d into something bad
+* Its primary attacking stats are sufficiently lowered
+* Its "odds are bad", which is a generic "try to make smart, player-like decisions generally speaking" check. Switches can be triggered if the player has a good switchin candidate (`AI_FLAG_SMART_MON_CHOICES`), and:
+* The current mon has a bad type matchup and doesn’t have a super effective move and has at least ½ HP, or ¼ HP and Regenerator, or
+* The current mon loses the 1v1 quickly and has at least ½ HP, or ¼ and Regenerator
+
+## `AI_FLAG_ACE_POKEMON`
+Marks the last Pokemon in the party as the Ace Pokemon. It will not be used unless it is the last one remaining, or is forced to be switched in (Roar, U-Turn with 1 mon remaining, etc.)
+
+## `AI_FLAG_OMNISCIENT`
+AI has full knowledge of player moves, abilities, and hold items, and can use this knowledge when making decisions.
+
+## `AI_FLAG_SMART_MON_CHOICES`
+Affects what the AI chooses to send out after a switch. AI will make smarter decisions when choosing which mon to send out mid-battle and after a KO, which are handled separately. Automatically included when `AI_FLAG_SMART_SWITCHING` is enabled.
+
+With this flag enabled, the AI will prioritize choosing mons after a KO prioritizing the following criteria:
+* Trapper (can trap the player’s mon and win the 1v1)
+* Revenge killer (outspeeds an OHKOs / is outsped and OHKOs, is not OHKOd/ outspeeds and 2HKOs, is not OHKOd / is outsped and 2HKOs, is not 2HKOd)
+* Has good type matchup and a super effective move
+* Has good type matchup and does not have a super effective move
+* Has Baton Pass
+* If no mons meet any of the above criteria, choose the one that does the most damage
+
+And will choose mons after a mid-battle switch prioritizing the following criteria:
+* Trapper (can trap the player’s mon and win the 1v1)
+* Has good type matchup and a super effective move
+* Has good type matchup and does not have a super effective move
+* Is not 3HKO’d by the player
+* Has Baton Pass
+
+## `AI_FLAG_CONSERVATIVE`
+AI always assumes it will roll the lowest possible result when comparing damage in scoring.
+
+## `AI_FLAG_SEQUENCE_SWITCHING`
+AI will always switch out after a KO in exactly party order as defined in the trainer data (ie. slot 1, then 2, then 3, etc.). The AI will never switch out mid-battle unless forced to (Roar etc.). If the AI uses a move that requires a switch where it makes a decision about what to send in (U-Turn etc.), it will always switch out into the lowest available party index.
diff --git a/docs/ai_logic.md b/docs/ai_logic.md
new file mode 100644
index 000000000000..b910d469461b
--- /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 ab6735c7a36a..69e0ecaabf71 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 831814740a01..85748b2375da 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 34aa131e70e5..a92d7789561d 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.8.x/1.8.0.md b/docs/changelogs/1.8.x/1.8.0.md
index e1a50896e723..81b66d3b127e 100644
--- a/docs/changelogs/1.8.x/1.8.0.md
+++ b/docs/changelogs/1.8.x/1.8.0.md
@@ -495,7 +495,7 @@
* Aeroblast: Added Wind Move flag.
* Ivy Cudgel's type now changes based on Ogerpon's form rather than held item by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/3865
* Renamed `healBlockBanned` flag to `healingMove` by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/3981
-* Removed some hardcoded move IDs
+* Removed some hardcoded move IDs
* By @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/3982
* `MOVE_EXPLOSION`, `MOVE_SELF_DESTRUCT`, `MOVE_FRUSTRATION`, `MOVE_AURA_WHEEL`, `MOVE_PRESENT`, `MOVE_BLIZZARD`.
* By @ZnogyroP in https://github.com/rh-hideout/pokeemerald-expansion/pull/4085
diff --git a/docs/changelogs/1.8.x/1.8.5.md b/docs/changelogs/1.8.x/1.8.5.md
index ded502ccfe69..a1d0d3298eb3 100644
--- a/docs/changelogs/1.8.x/1.8.5.md
+++ b/docs/changelogs/1.8.x/1.8.5.md
@@ -58,7 +58,7 @@
* Pawmi (Front by KingOfThe-X-Roads, back by Vent, QC by leParagon)
* Pawmo (By vent, qc by leParagon)
* Okidogi (Front by KingOfThe-X-Roads + by leParagon, back by Lykeron + QC by Alexandrev2. 0)
- * Backported Hedara's Terapagos from `upcoming`.
+ * Backported @hedara90's Terapagos from https://github.com/rh-hideout/pokeemerald-expansion/pull/4691
* Updated wild held items to Gen 9 by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4769
* Teddiursa (Common: None_> Honey)
* Bisharp (Rare: None -> Leader's Crest)
diff --git a/docs/changelogs/1.8.x/1.8.6.md b/docs/changelogs/1.8.x/1.8.6.md
new file mode 100644
index 000000000000..3ede992a608b
--- /dev/null
+++ b/docs/changelogs/1.8.x/1.8.6.md
@@ -0,0 +1,154 @@
+# Version 1.8.6
+
+```md
+## How to update
+- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`.
+- Once you have your remote set up, run the command `git pull RHH expansion/1.8.6`.
+```
+
+## 🌋 *REFACTORS* 🌋
+* [Opportunist/Mirror Herb Refactor](#opportunistmirror-herb-refactor-by-alexon1ine-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull4928)
+* [Removed unused Battle Script labels](#removed-unused-battle-script-labels-by-bassoonian-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull4839)
+* [Fixed Trace not respecting the speed order like other switch-in abilities](#fixed-trace-not-respecting-the-speed-order-like-other-switch-in-abilities-by-alexon1ine-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull4941)
+
+## 🧬 General 🧬
+### Fixed
+* Fixed Battle Frontier ineligibility blocking the entire party if it encountered a disabled species by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4997
+* Fixed random IVs given when using `givemon` only giving values from 1-31 by @cawtds in https://github.com/rh-hideout/pokeemerald-expansion/pull/5021
+* Fixed `givemon` not giving Cherish Ball by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/5022
+
+## 🐉 Pokémon 🐉
+### Added
+* Added missing Terapagos Stellar sprite by @hedara90 in https://github.com/rh-hideout/pokeemerald-expansion/pull/5008
+* Added missing Ogerpon Tera sprites by @hedara90 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4996
+### Changed
+* Temporarely reverted regional form inheritance to fix issue with non-regional forms by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/5004
+* Updated level up learnsets up to Indigo Disk by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/5023
+### Fixed
+* Fixed Basculegion learning Dire Claw in Gen9's level up learnset by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4948
+* Fixed Sandile's sprite by @hedara90 in https://github.com/rh-hideout/pokeemerald-expansion/pull/5038
+
+## ⚔️ Battle General ⚔️ ##
+### Fixed
+* Fixed Debug Menu not properly updating the corresponding flags + general cleanup by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4643
+* Fixed spread damage in double battles by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/5064
+ * In double battles when `B_POSITION_OPPONENT_LEFT` fainted from the first hit of a spread move, the second hit dealt 100% of damage to `B_POSITION_OPPONENT_RIGHT`.
+* #### Removed unused Battle Script labels by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4839
+ * `data/battle_scripts_1.s`
+ * `BattleScript_OctolockTryLowerDef`
+ * `BattleScript_OctolockTurnDmgPrintMsg`
+ * `BattleScript_StuffCheeksEatBerry`
+ * `BattleScript_StrengthSapTryHp` and its contents.
+ * `BattleScript_PartingShotEnd` and its contents.
+ * `BattleScript_RototillerAffected`
+ * `BattleScript_AutotomizeDoAnim`
+ * `BattleScript_TryTailwindAbilitiesLoop_Ret`
+ * `BattleScript_HitFromAtkCanceler`
+ * `BattleScript_EffectMultiHit`
+ * `BattleScript_BattleScript_EffectParalyzeNoTypeCalc`
+ * `BattleScript_EffectTeleportTryToRunAway`
+ * `BattleScript_WindPowerActivates_Ret`
+ * `BattleScript_CottonDownReturn`
+ * `BattleScript_ActivateWeatherAbilities_Increment`
+ * `BattleScript_IntimidateEnd`
+ * `BattleScript_SupersweetSyrupEnd`
+ * `BattleScript_ActivateTerrainEffects_Increment`
+ * `BattleScript_GrassyTerrainHpChange`
+ * `BattleScript_GrassyTerrainLoopEnd`
+ * `BattleScript_AbilityNoSpecificStatLossPrint`
+ * `BattleScript_ArenaNothingDecided`
+ * `BattleScript_ExtremeEvoboostAtk`
+ * `BattleScript_BerserkGeneRet_Anim`
+ * `data/battle_scripts_2.s`
+ * `BattleScript_PrintCaughtMonInfo`
+* #### Opportunist/Mirror Herb Refactor by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4928
+ * Multiple fixes:
+ * Opportunist stacking multiple boosts in one turn from opposing mons.
+ * Increasing the stat by the wrong amount when copying opposing boost (eg. +6 boosts).
+ * Opportunist no longer has a message.
+ * Opportunist only play animations once for every stat boost.
+ * Changes:
+ * `switchInBattlerCounter` replaces both `switchInAbilitiesCounter` and `switchInItemsCounter`.
+ * Removed `STRINGID_OPPORTUNISTCOPIED` and `sText_OpportunistCopied`.
+ * Altered `TryDoEventsBeforeFirstTurn` to use a state switch (`gBattleStruct->eventsBeforeFirstTurnState`)
+ * `FIRST_TURN_EVENTS_START`.
+ * `FIRST_TURN_EVENTS_OVERWORLD_WEATHER`.
+ * `FIRST_TURN_EVENTS_TERRAIN`.
+ * `FIRST_TURN_EVENTS_STARTING_STATUS`.
+ * `FIRST_TURN_EVENTS_TOTEM_BOOST`.
+ * `FIRST_TURN_EVENTS_NEUTRALIZING_GAS`.
+ * `FIRST_TURN_EVENTS_SWITCH_IN_ABILITIES`.
+ * `FIRST_TURN_EVENTS_OPPORTUNIST_1`.
+ * `FIRST_TURN_EVENTS_ITEM_EFFECTS`.
+ * `FIRST_TURN_EVENTS_OPPORTUNIST_2`.
+ * `FIRST_TURN_EVENTS_END`.
+
+## 🤹 Moves 🤹
+### Added
+* Added missing Ivy Cudgel animation by @hedara90 in https://github.com/rh-hideout/pokeemerald-expansion/pull/5034
+ * Cleanup by @hedara90 in https://github.com/rh-hideout/pokeemerald-expansion/pull/5063
+* Added missing Axe Kick animation by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/5039
+### Fixed
+* Fixed Diamond Storm's Defense increase applying to the target instead of the user by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4947
+* Fixed Psycho Shift check for Frostbite using `CanBeFrozen` instead of `CanGetFrostbite` by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4995
+* Fixed Sleep Talk failing on repeated attempts by @PhallenTree in https://github.com/rh-hideout/pokeemerald-expansion/pull/5009
+* Fixed Fury Cutter considering Parental Bond's second hit for its damage multiplier by @PhallenTree in https://github.com/rh-hideout/pokeemerald-expansion/pull/5030
+* Fixed Hidden Power damage category when `B_PHYSICAL_SPECIAL_SPLIT < GEN_4` by @hedara90 in https://github.com/rh-hideout/pokeemerald-expansion/pull/5053
+* Fixed `MoveEffectRemoveStatus` (Sparkling Aria, Wake-Up Slap, ...) that cure Freeze/Frostbite using the other status' battlescript. by @PhallenTree in https://github.com/rh-hideout/pokeemerald-expansion/pull/5061
+
+## 🎭 Abilities 🎭
+### Fixed
+* Fixed Toxic Debris incorrect side check by @PhallenTree in https://github.com/rh-hideout/pokeemerald-expansion/pull/5009
+* Fixed Snow Warning's description not being updated based on `B_SNOW_WARNING` by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/5018
+* Fixed Mold Breaker abilities not properly checking battler actions in double battles causing them to not work by @PhallenTree in https://github.com/rh-hideout/pokeemerald-expansion/pull/5030
+* Fixed `cantBeSurpressed` ability check for breakable abilities by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/5043
+* Fixed Stalwart and Propeller Tail not ignoring redirection from Storm Drain/Lightning Rod + tests by @PhallenTree in https://github.com/rh-hideout/pokeemerald-expansion/pull/5061
+* #### Fixed Trace not respecting the speed order like other switch-in abilities by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4941
+ * Changes:
+ * Removed: `ABILITYEFFECT_TRACE1`, `ABILITYEFFECT_TRACE2` and moved their handling to `ABILITYEFFECT_ON_SWITCHIN`.
+ * Removed `gSpecialStatuses`'s `traced` field.
+
+## 🧶 Items 🧶
+### Fixed
+* Jaboca/Rowap Berry recording the wrong item effects by @PhallenTree in https://github.com/rh-hideout/pokeemerald-expansion/pull/5009
+* Fixed Life Orb damaging its holder if it hits itself in confusion. by @PhallenTree in https://github.com/rh-hideout/pokeemerald-expansion/pull/5061
+
+## 🤖 Battle AI 🤖
+### Documentation
+* Added AI Flags documentation to directory for new documentation site by @anrichtait in https://github.com/rh-hideout/pokeemerald-expansion/pull/5057
+### Fixed
+* Fixed typo that caused AI to use Upper Hand when it shouldn't by @Pawkkie in https://github.com/rh-hideout/pokeemerald-expansion/pull/4973
+* Fixed AI using U-Turn when only the Ace Pokémon is left in the party (#4748) by @Pawkkie in https://github.com/rh-hideout/pokeemerald-expansion/pull/4972
+* Fixed AI not being aware during calculations by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4992
+* Fixed `AI_SetMoveAccuracy` getting the wrong battler's ability by @PhallenTree in https://github.com/rh-hideout/pokeemerald-expansion/pull/5030
+
+## 🧹 Other Cleanup 🧹
+### Fixed
+* Fixed version displayed in `README.md` by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4966
+* Removes unnecessary checks for Shield Dust and Covert Cloak by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/5073
+
+## 🧪 Test Runner 🧪
+### Added
+* Added AI Upper Hand test by @Pawkkie in https://github.com/rh-hideout/pokeemerald-expansion/pull/4973
+* Added test to make sure that Trainer Class balls apply to every member of the party by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4999
+* Added missing Sleep Talk tests by @PhallenTree in https://github.com/rh-hideout/pokeemerald-expansion/pull/5009
+### Changed
+* Improved Test Runner Summary by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4641
+ * Totals are now separated from the erroring test list.
+ * Assumption Fails and Passing `KNOWN_FAILING`s now have their own lists.
+### Fixed
+* Fixed tests failing when `B_USE_FROSTBITE` is set to `TRUE` by @fakuzatsu in https://github.com/rh-hideout/pokeemerald-expansion/pull/4986
+* Fixed tests not compiling outside of CI after incoming pret merge by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4998
+* Fixed Covert Cloak tests being in `item_effect` folder instead of `hold_effect` folder by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/5073
+
+## 📦 Pret merges 📦
+* Pret Merge (13th of July) by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4964
+ * Adds the new C-style enums in preproc commit by @SBird1337 [(550e668)](https://github.com/pret/pokeemerald/commit/550e6688aa3b511a9aa9ea851c49ba4d90c7708a)
+* Pret Merge (27th of July) by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/5045
+ * Includes:
+ * [pret#2016](https://github.com/pret/pokeemerald/pull/2016) Fix WSL1 install instructions
+ * [pret#2017](https://github.com/pret/pokeemerald/pull/2017) Added constant for `NUM_SNOWFLAKE_SPRITES`
+
+**Full Changelog**: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.8.5...expansion/1.8.6
+
+
diff --git a/docs/changelogs/1.9.x/1.9.0.md b/docs/changelogs/1.9.x/1.9.0.md
new file mode 100644
index 000000000000..0d39f109ed69
--- /dev/null
+++ b/docs/changelogs/1.9.x/1.9.0.md
@@ -0,0 +1,556 @@
+# Version 1.9.0
+
+```md
+## How to update
+- If you haven't set up a remote, run the command `git remote add RHH https://github.com/rh-hideout/pokeemerald-expansion`.
+- Once you have your remote set up, run the command `git pull RHH expansion/1.9.0`.
+```
+
+## 🌋 *REFACTORS* 🌋
+📜 = Has a migration script.
+* [agbcc has been deprecated](#agbcc-has-been-deprecated-by-mrgriffin-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull4989)
+* [Added migration script README](#added-migration-script-readme-by-bassoonian-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull4719)
+* [Removed Gen 9 settings for out-of-battle abilities](#removed-gen-9-settings-for-out-of-battle-abilities-by-asparaguseduardo-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull4282)
+* 📜[Customizable Frontier Pokémon sets](#customizable-frontier-pokémon-sets-by-ghoulslash-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull4313)
+* [Replaced VARARG_8 uses with recursive macros](#replaced-vararg_8-uses-with-recursive-macros-by-cfmnephrite-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull4232)
+* 📜[Competitive-formatted parties](#competitive-formatted-parties-by-mrgriffin-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull3545)
+* [Terastallization](#terastallization-by-agustingdlv-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull4110)
+* [Combined weather set commands](#combined-weather-set-commands-by-alexon1ine-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull4434)
+* [Full official GF names for species/items/moves/types](#full-official-gf-names-for-speciesitemsmovestypes-by-mrgriffin-znogyrop-and-cfmnephrite-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull4241)
+* [Automatically display TM/HM icons based on their move](#automatically-display-tmhm-icons-based-on-their-move-by-sneed69-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull4452)
+* [Set `GiveBoxMonIntialMoveset_Fast` as default](#set-giveboxmonintialmoveset_fast-as-default-by-alexon1ine-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull4470)
+* [Changed Battle Frontier validation to species flag](#changed-battle-frontier-validation-to-species-flag-by-kittenchilly-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull4341)
+* [Replaced HP checks with `IsBattlerAlive`](#replaced-hp-checks-with-isbattleralive-by-ghoulslash-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull4429)
+* [Removed redundant `MOVE_EFFECT_SP_ATK_TWO_DOWN`](#removed-redundant-move_effect_sp_atk_two_down-by-sneed69-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull4557)
+* 📜[Removed `gItemIconTable`](#removed-gitemicontable-by-kittenchilly-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull4579)
+* 📜[Egg Move Refactor](#egg-move-refactor-by-bassoonian-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull4534)
+* [Adjusted Ate-Ability code a bit to make it more readable](#adjusted-ate-ability-code-a-bit-to-make-it-more-readable-by-alexon1ine-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull4640)
+* [Type Info refactors](#type-info-refactors-by-asparaguseduardo-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull4462)
+* [merrp/aarant's Followers](#merrpaarants-followers)
+* [Refactored residual damage to be more readable and less prone to bugs](#refactored-residual-damage-to-be-more-readable-and-less-prone-to-bugs-by-alexon1ine-in-httpsgithubcomrh-hideoutpokeemerald-expansionpull4945)
+
+## 🧬 General 🧬
+### Added
+* #### Added migration script README by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4719
+* #### Customizable Frontier Pokémon sets by @ghoulslash in https://github.com/rh-hideout/pokeemerald-expansion/pull/4313
+ * `FacilityMon` has been removed in favor of using regular `TrainerMon`.
+ * Removed `BATTLE_FRONTIER_ITEM_x` item constants in favor of using regular `ITEM_x` constants.
+ * New `CreateFacilityMon` to handle duplicated code.
+ * Added `FLAG_FRONTIER_MON_FACTORY` that replaces Return for Frustration and sets frienship to 0. Used in the Battle Factory.
+ * Converted data in `src/data/battle_frontier/battle_frontier_mons.h` and `src/data/battle_frontier/battle_tent.h`, for example:
+ * `.itemTableId = BATTLE_FRONTIER_ITEM_CHOICE_BAND,` -> `.heldItem = ITEM_CHOICE_BAND,`
+ * `.evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,` -> `.ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),`
+ * Migration script available in `migration_scripts/egg_move_refactor.py` by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/5040
+* Added documentation to `STATIC_ASSERTS` used by the `BoxPokemon` after 1.8.0 by @pkmnsnfrn in https://github.com/rh-hideout/pokeemerald-expansion/pull/4294
+* #### Competitive-formatted parties by @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/3545
+ * Can be disabled by setting `COMPETITIVE_PARTY_SYNTAX` to `FALSE` in `include/config/general.h`. If migrating from 1.8, remove the first and last lines from `src/data/trainers.h` (`const struct Trainer gTrainers[] = {` and `};` respectively).
+ * Introduces `trainerproc`, a tool which converts Competitive-formatted parties into Trainer Control-formatted parties.
+ * If you made custom changes to the following files and want to use this new format, ***Do not accept the incoming changes for them.*** Instead, use the migration script present in `migration_scripts/convert_parties.py`:
+ - `src/data/trainers.h`
+ - `src/data/trainer_parties.h`
+ - `src/data/battle_partners.h`
+ - `src/data/partner_parties.h`
+ * Before:
+ ```c
+ static const struct TrainerMon sTestParty1[] =
+ {
+ {
+ .species = SPECIES_WOBBUFFET,
+ .ball = ITEM_MASTER_BALL,
+ .ability = ABILITY_TELEPATHY,
+ .friendship = 42,
+ .gender = TRAINER_MON_FEMALE,
+ .heldItem = ITEM_ASSAULT_VEST,
+ .isShiny = TRUE,
+ .iv = TRAINER_PARTY_IVS(25,26,27,28,29,30),
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 252, 4, 0),
+ .lvl = 67,
+ .moves = {MOVE_AIR_SLASH, MOVE_BARRIER, MOVE_SOLAR_BEAM, MOVE_EXPLOSION},
+ .nature = NATURE_HASTY,
+ .nickname = COMPOUND_STRING("Bubbles")
+ },
+ {
+ .species = SPECIES_WOBBUFFET,
+ .ability = ABILITY_SHADOW_TAG,
+ .lvl = 5,
+ },
+ };
+
+ static const struct Trainer sTestTrainer1 =
+ {
+ .trainerName = _("Test1"),
+ .party = TRAINER_PARTY(sTestParty1),
+ };
+ ```
+ After:
+ ```
+ === 0 ===
+ Name: Test1
+
+ Bubbles (Wobbuffet) (F) @ Assault Vest
+ Hasty Nature
+ Level: 67
+ Ability: Telepathy
+ IVs: 25 HP / 26 Atk / 27 Def / 29 SpA / 30 SpD / 28 Spe
+ EVs: 252 HP / 4 SpA / 252 Spe
+ Happiness: 42
+ Shiny: Yes
+ Ball: Master Ball
+ - Air Slash
+ - Barrier
+ - Solar Beam
+ - Explosion
+
+ Wobbuffet
+ Level: 5
+ Ability: Shadow Tag
+ ```
+ * You can add comments by using `//` or `/* ... */`, like in C.
+ * You're allowed to write `SPECIES_PIKACHU` instead of `Pikachu` (etc etc) if you want.
+ * In addition to the migration script described above, you can add the following to at the top of the `src/data/trainers.party` file to change how the tool interprets the file:
+ - `#pragma trainerproc ivs explicit` — requires an `IVs:` line for every Pokémon instead of defaulting to 31s.
+ - `#pragma trainerproc ivs ` — changes the default IVs.
+ - `#pragma trainerproc level explicit` — requires a `Level:` line for every Pokémon instead of defaulting to 100.
+ - `#pragma trainerproc level ` — changes the default level.
+ - During the merge you could choose to keep your original `src/data/trainers.h` and `src/data/trainer_parties.h` and then run the conversion script to update the `src/data/trainers.party`, `make`, then check in all three files. Alternatively don't run the conversion script and turn off `COMPETITIVE_PARTY_SYNTAX` in `include/config.h`.
+ * Added synonyms for competitive/CFRU species defines, eg:
+ * `SPECIES_PONYTA_GALAR` for `SPECIES_PONYTA_GALARIAN`
+ * `SPECIES_MAUSHOLD_FOUR` for `SPECIES_MAUSHOLD_FAMILY_OF_FOUR`
+ * `SPECIES_CHARIZARD_GMAX` for `SPECIES_CHARIZARD_GIGANTAMAX`
+ * And so.
+ * ***TODO***:
+ - Support `Hidden Power:` to set IVs appropriate for a particular Hidden Power type.
+ - Consider case-insensitivity in the parser.
+ * Cleanup and bugfixes:
+ * By @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/4362
+ * By @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4366
+ * By @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4374
+ * By @LOuroboros in https://github.com/rh-hideout/pokeemerald-expansion/pull/4397
+ * By @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4421
+ * By @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4431
+ * By @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/4442
+ * By @fdeblasio in https://github.com/rh-hideout/pokeemerald-expansion/pull/4830
+ * By @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/4969
+ * By @hedara90 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4734
+ * By @innocenthedgehog in https://github.com/rh-hideout/pokeemerald-expansion/pull/4988
+ * By @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/4990
+ * By @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/5035
+* Added `OW_PC_MOVE_ORDER` config to use future generation's menu order for the Pokémon Storage System by @pkmnsnfrn and @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4348
+ * `GEN_1/2/3`: Widthraw -> Deposit -> Move.
+ * `GEN_4/5/6_XY`: Deposit -> Widthraw -> Move.
+ * `GEN_6_ORAS/7/8/9`: Move -> Deposit -> Widthraw.
+* Added `OW_HIDE_REPEAT_MAP_POPUP` config that doesn't show the Map Popup when transitioning bewteen maps within the same Map Section by Anon822 from Pokécommunity and @pkmnsnfrn in https://github.com/rh-hideout/pokeemerald-expansion/pull/4370
+* Multiple Fishing Enhancements by @ghoulslash and @pkmnsnfrn in https://github.com/rh-hideout/pokeemerald-expansion/pull/4343
+ * Added `I_FISHING_CHAIN` config to enable XY's chain fishing.
+ * Added `I_FISHING_PROXIMITY` config to enable XY's proximity mechanic, where fishing away from NPCs increases the chance of a Pokémon being hooked.
+ * Added `I_FISHING_MINIGAME` config to change between minigame versions.
+ * `GEN_1/2` will not require a minigame, and instead automatically hook the Pokémon.
+ * All other settings use RSE's minigame. FRLG/Gen4+'s minigame will be implemented in the future.
+ * Cleanup and bugfixes:
+ * By @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4412
+ * By @cawtds in https://github.com/rh-hideout/pokeemerald-expansion/pull/4906
+ * By @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4718
+ * By @cawtds and @pkmnsnfrn in https://github.com/rh-hideout/pokeemerald-expansion/pull/5031
+* #### Full official GF names for species/items/moves/types by @mrgriffin, @ZnogyroP and @cfmnephrite in https://github.com/rh-hideout/pokeemerald-expansion/pull/4241
+ * 8-character type names.
+ * 12-character Pokémon names (and nicknames)
+ * 16-character Move names.
+ * 20-character item names.
+ * This is done by introducing 3 new fonts that automatically change the size of the name in vanilla interfaces:
+ * `FONT_NARROWER`, `FONT_SMALL_NARROWER` and `FONT_SHORT_NARROW`.
+ * If the hack has changed fonts—e.g. to the FrLg ones—then they probably want to create their own versions of the new fonts.
+ * If the hack has introduced more UIs that render names they probably want to use `GetFontIdToFit`—see this PR's changes for examples of that.
+ * If the hack has introduced names in list menus they can use `.fontIdMayNarrow = TRUE` on the list template.
+ * Types, species, moves, and items all have individual commits which enable support in the UI and turn on longer names by default. These can be reverted by downstream projects if they really want to.
+ * Cleanup
+ * By @Nopinou in https://github.com/rh-hideout/pokeemerald-expansion/pull/4473
+ * By @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4588
+ * By @iriv24 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4979
+* Added `OW_PC_RELEASE_ITEM` config that gives back items from released Pokémon by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4577
+ * If the bag is full, the item is lost, however.
+ * Cleanup by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4844
+* Added `P_EGG_CYCLE_LENGTH` config that updates the amount of steps required to complete an egg cycle by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4596
+* Added `trainerbattle_two_trainers` macro to trigger a 1 player vs 2 NPC battle by @aarant and @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4741
+* Added `createmon` Script Command and macro by @ghoulslash in https://github.com/rh-hideout/pokeemerald-expansion/pull/4688
+ * This allows to set up wild enemy parties with the same versatility as `givemon` (IVs, EVs, abilities, moves, etc).
+* Added `setwilddoubleflag` macro to set `sIsScriptedWildDouble` and allow 2 player vs 1 enemy wild battles by @ghoulslash in https://github.com/rh-hideout/pokeemerald-expansion/pull/4688
+* Added support for multiple Roaming Pokémon at once by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4762
+ * By default, `ROAMER_COUNT` is set to 1 to keep save compatibility. Increase it to add more roamers (though this breaks saves).
+* Added `OW_IGNORE_EGGS_ON_HEAL`, which makes it such that eggs are not counted in the Pokémon Center's heal animation by @ghoulslash @pkmnsnfrn in https://github.com/rh-hideout/pokeemerald-expansion/pull/4888
+* Added support for fake RTC by Anon822 from PokéCommunity and @pkmnsnfrn in https://github.com/rh-hideout/pokeemerald-expansion/pull/4910
+ * When `OW_USE_FAKE_RTC` is `TRUE`, time runs at a different rate from real time, like in Legends: Arceus or Scarlet and Violet.
+ * Use `OW_ALTERED_TIME_RATIO` to set the amount of "time" passing every 60 frames (1 real time second):
+ * `GEN_8_PLA`: 1 minute.
+ * `GEN_9`: 20 seconds.
+ * All other settings make the game synced with real life.
+ * You may also set a flag to pause the RTC (`OW_FLAG_PAUSE_TIME`), and the script commands `pausefakertc`, `resumefakertc` and `togglefakertc` by @pkmnsnfrn in https://github.com/rh-hideout/pokeemerald-expansion/pull/4954
+ * Cleanup by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4965
+* Added B2W2-style map pop-Ups by @ravepossum, @nielsmittertreiner and @pkmnsnfrn in https://github.com/rh-hideout/pokeemerald-expansion/pull/4396
+ * Change `OW_POPUP_GENERATION` to `GEN_5` to switch existing map popups.
+ * You may choose between Black or White themes via `OW_POPUP_BW_COLOR` (`OW_POPUP_BW_COLOR_BLACK` or `OW_POPUP_BW_COLOR_WHITE`).
+ * You may choose to display the current time in the pop-up using `OW_POPUP_BW_TIME_MODE`.
+ * `OW_POPUP_BW_TIME_NONE`: Disables time in pop-up.
+ * `OW_POPUP_BW_TIME_12_HR`: Shows 12-hour time in pop-up
+ * `OW_POPUP_BW_TIME_24_HR`: Shows 24-hour time in pop-up
+ * You may enable alpha blending via `OW_POPUP_BW_ALPHA_BLEND` (mainly designed around the Black theme).
+ * Cleanup by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4752
+* Allowed flags to be used in trigger scripts instead of vars by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4900
+### Changed
+* #### agbcc has been deprecated by @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/4989
+ * You technically still use `make agbcc` by disabling the error thrown when using it, but it will be removed completely for version 1.10.
+* #### Moved general config file to the config folder by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4805
+ * `config.h` -> `config/general.h`
+ * Cleanup by @hedara90 in https://github.com/rh-hideout/pokeemerald-expansion/pull/5026
+* #### Set `GiveBoxMonIntialMoveset_Fast` as default by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4470
+* #### Changed Battle Frontier validation to species flag by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4341
+ * Added `isFrontierBanned` flag and removed `gFrontierBannedSpecies`.
+ * Renamed `isParadoxForm` -> `isParadox`.
+* #### Unified Nature info by @fdeblasio in https://github.com/rh-hideout/pokeemerald-expansion/pull/4562
+ * All data is now found on `gNaturesInfo` in `src/pokemon.c`
+ * Names, Stat Up/Down, Back Sprite animation, Pokéblock animation, Nature Girl message and Battle Palace data.
+ * Cleanup by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4598
+* #### Type Info refactors by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4462
+ * Added `src/data/types_info.h` file for `gTypesInfo` instead of `src/battle_main.c`.
+ * Moved `sTypeEffectivenessTable` here file as well (and renamed it to `gTypeEffectivenessTable`)
+ * `TYPE_NONE` duplicates graphics from `TYPE_MYSTERY` due to limitations with `graphics_file_rules.mk`.
+ * Damage Categories for `B_PHYSICAL_SPECIAL_SPLIT`'s pre-Gen4 setting can now be specified in this `gTypesInfo`'s `damageCategory` field instead of depending on the type's order.
+* Consolidated Lilycove Contest Lady's values into one struct (`sContestLadyValues`) by @fdeblasio in https://github.com/rh-hideout/pokeemerald-expansion/pull/4951
+* Applied the Pokémon Sprite Visualizer name officially by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4745
+* Don't specify `sDexSearchTypeOptions` array size by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4820
+ * Prevents Type search in the dex from breaking when non-conventional types are added.
+* Only call RNG once when generating IVs in some cases by @tertu-m in https://github.com/rh-hideout/pokeemerald-expansion/pull/4876
+### Fixed
+* Fixed potential Wireless Adapter desynchronization by @AtariDreams in https://github.com/rh-hideout/pokeemerald-expansion/pull/3730
+* Fixed `ListItemTemplate` UB in the Pokémon Center by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4725
+* Fixed `src/data/map_group_count.h` not being ignored in `.gitignore` properly by @rayrobdod in https://github.com/rh-hideout/pokeemerald-expansion/pull/4727
+* Fixed double battles not occuring with only one Pokemon by talking to the trainers despite `OW_DOUBLE_APPROACH_WITH_ONE_MON` being set `TRUE` by @fdeblasio in https://github.com/rh-hideout/pokeemerald-expansion/pull/4848
+* Fixed unused `B_TRANSITION_SHRED_SPLIT` from softlocking the game by @Lunos, @griffinr and @pkmnsnfrn in https://github.com/rh-hideout/pokeemerald-expansion/pull/4919
+
+## ✨ Feature Branches ✨
+### ***merrp/aarant's Followers***
+* Integrated @aarant's followers branch by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4022
+ * This includes Dynamic Overworld Palettes and Expanded Overworld IDs.
+ * This does ***not*** include the `lighting` branch yet, but will be included in a future version.
+ * Updated up to the latest version of the branch (11th of July) by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4944
+ * Cleanup
+ * By @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4782
+ * By @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4937
+#### Changes from the original branch
+* Follower Pokémon can be enabled using the `OW_FOLLOWERS_ENABLED` config.
+* Pokémon NPCs can be added to a map [independently](https://github.com/rh-hideout/pokeemerald-expansion/pull/4761) from the Followers config. Keep in mind, this requires `OW_POKEMON_OBJECT_EVENTS` to be enabled in order to add the graphics to the ROM.
+ * Eg: use `OBJ_EVENT_GFX_SPECIES(CHARIZARD)` where the graphic ID would go (`OBJ_EVENT_GFX_SPECIES_SHINY()` for shiny version).
+ * May also use `OBJ_EVENT_GFX_SPECIES_SHINY(CHARIZARD)` to make them shiny by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/5049
+* Moved original configs from `include/constants/event_objects.h` to `include/config/overworld.h` and renamed them:
+ * `OW_MON_BOBBING` -> `OW_FOLLOWERS_BOBBING`
+ * `LARGE_OW_SUPPORT` -> `OW_LARGE_OW_SUPPORT`
+ * `OW_MON_POKEBALLS` -> `OW_FOLLOWERS_POKEBALLS`
+* Added follower Pokémon sprites from Gen 4-8
+ * Credits to @Eemeliri and Gerben BSc
+* Moved `OW_GFX_COMPRESS` from `include/global.h` to `include/config/overworld.h`.
+* Added `OW_SUBSTITUTE_PLACEHOLDER` config to hide followers if they don't have a follower sprite instead of using a placeholder Substitute sprite by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4765
+* Follower graphics are shown in the Pokémon Sprite Visualizer.
+* Follower graphics have been moved to the respective species graphics folder instead of all being grouped in `graphics/object_events/pics/pokemon`.
+ * Eg: `graphics/object_events/pics/pokemon/abomasnow.png` was moved to `graphics/pokemon/abomasnow/follower.png`.
+* Follower data has been moved to `gSpeciesInfo`
+ * Their palettes are separate from the battle sprite palettes
+ * Can be enabled using `OW_FOLLOWERS_SHARE_PALETTE`, but requires manual sprite adjustements. For now, it's recommended to keep this `FALSE`. (They don't use much space anyway)
+* Updated `GetTypeEffectiveness` used by follower messages to account for new abilities with type immunities.
+* Cleaned up code style to match pret/expansion's.
+* Reverted Regi's sprite to vanilla's.
+* Follower PicTables use `overworld_ascending_frames` macro.
+* Removed unneeded calls to `bufferspeciesname`.
+* Removed `MON_DATA_NATURE`.
+* Removed debug functions like `IsAccurateGBA`.
+* Removed `ScrCmd_callfunc` to use `callnative`s instead
+
+## 🐉 Pokémon 🐉
+### Added
+* Added `EVO_ITEM_COUNT_999` evolution method (used by Gimmighoul) by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4261
+ * Requires level up while carrying 999 of the specified item in the bag, which will be consumed.
+ * Uses new `EVO_MODE_CANT_STOP` mode, which is a clone of `EVO_MODE_NORMAL` but prevents evolution from being canceled.
+* Added `EVO_DEFEAT_THREE_WITH_ITEM` evolution method (used by Bisharp) by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4768
+ * Requires level up after defeating 3 Pokémon of the same species holding the specified item.
+ * Eg: Bisharp defeating 3 other Bisharp holding Leader Crests.
+ * Cleanup by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/5046
+* Added `EVO_OVERWORLD_STEPS` evolution method (used by Pawmo, Bramblin and Rellor) by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4758
+ * Requires level up after walking the specified amount of steps with that Pokémon as the first member in the party without switching.
+ * Switching the party leader resets the steps.
+ * Cleanup by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/5047
+* Added `FORM_CHANGE_DAYS_PASSED` form change (used by Furfrou and Hoopa) by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4778
+ * Adds `MON_DATA_DAYS_SINCE_FORM_CHANGE`, which is a timer to automatically changes forms at midnight once it runs out. It is set after a different form change has been made (currently only added to Form Change items, including Prison Bottle)
+* Added unique icons for all of Arceus's forms via config (`P_ARCEUS_UNIQUE_FORM_ICONS`) by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4329
+* Added `P_TWO_FRAME_FRONT_SPRITES` config to allow disabling 2-frame front animations by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4750
+* Added `P_CRIES_ENABLED` config to disable species cries and stop them from being included in the ROM by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4791
+* Added configs to prevent unobtainable Pokemon from being shiny by @fdeblasio in https://github.com/rh-hideout/pokeemerald-expansion/pull/4735
+ * `P_ONLY_OBTAINABLE_SHINIES`: Prevents shinies from generating in the Battle Pyramid.
+ * `P_NO_SHINIES_WITHOUT_POKEBALLS`: Prevents shinies from generating if the player has no Poké Balls.
+* Added `P_CAN_FORGET_HIDDEN_MOVE` config allow Pokémon to forget HM moves by @pkmnsnfrn and @Lunos in https://github.com/rh-hideout/pokeemerald-expansion/pull/4968
+### Changed
+* Renamed evolution methods the were labeled as evo level by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4607
+ * `EVO_LEVEL_MOVE_TWENTY_TIMES` -> `EVO_MOVE_TWENTY_TIMES`
+ * `EVO_LEVEL_RECOIL_DAMAGE_MALE` -> `EVO_RECOIL_DAMAGE_MALE`
+ * `EVO_LEVEL_RECOIL_DAMAGE_FEMALE` -> `EVO_RECOIL_DAMAGE_FEMALE`
+ * Cleanup by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4644
+* Evolution tracker is now by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4758
+* #### Replaced VARARG_8 uses with recursive macros by @cfmnephrite in https://github.com/rh-hideout/pokeemerald-expansion/pull/4232
+* #### Egg Move Refactor by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4534
+ * Egg Moves are now formatted like Teachable learnsets and their pointers are stored in `gSpeciesInfo`, as opposed to having one big array.
+ * Only offspring require these tables.
+ * Migration script available in `migration_scripts/egg_move_refactor.py`.
+
+## ⚔️ Battle General ⚔️ ##
+### Added
+* Added option to increase Experience bar speed via `B_FAST_EXP_GROW` by @SonikkuA-DatH and @pkmnsnfrn in https://github.com/rh-hideout/pokeemerald-expansion/pull/4335
+* Added Gen 4's Fog battle weather by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4359
+ * Uses Haze's animation.
+ * Changes `B_FOG_TERRAIN` (TRUE/FALSE config) into `B_OVERWORLD_FOG` (Generational config).
+ * `GEN_4`: Uses this battle weather in maps with `WEATHER_FOG_DIAGONAL` and `WEATHER_FOG_HORIZONTAL`.
+ * `GEN_8` onwards: Sets permanent Misty Terrain.
+ * All others disable them.
+* #### Terastallization by @AgustinGDLV in https://github.com/rh-hideout/pokeemerald-expansion/pull/4110
+ * Tera Type automatically assigned to existing Pokémon based on their personality value.
+ * Can get and set Tera Types in scripts for party members using `checkteratype` and `setteratype` by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4460
+ * To activate, it requires:
+ * `ITEM_TERA_ORB` to be in the player's bag.
+ * `B_FLAG_TERA_ORB_CHARGED` to be set up to an unused flag. It¿s automatically set when `HealPlayerParty` is called.
+ * Added `ignoreTera` argument added to `GetBattlerType`
+ * Added Tera Blast's effect.
+ * Changes type shown in battle screen if the mon is Terastalized or about to by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4447
+ * Added Stellar Type.
+ * Added `teraType` option for Trainers (also supported by Competitive Format Parties)
+ * Added Tera Starstorm's effect by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4447
+ * Terastallization animation by @Pokabbie in https://github.com/rh-hideout/pokeemerald-expansion/pull/4507
+ * Added `forceTeraType` field for `gSpeciesInfo`, which forces the Pokémon to have a specific Tera Type (used by Terapagos and Ogerpon) by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4438
+ * Added `FORM_CHANGE_BATTLE_TERASTALLIZATION` by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4438
+ * It uses a Pokémon's Tera Type to choose which form to switch to upon Terastallizing.
+ * Bugfixes:
+ * By @AgustinGDLV in https://github.com/rh-hideout/pokeemerald-expansion/pull/4435
+ * By @AgustinGDLV in https://github.com/rh-hideout/pokeemerald-expansion/pull/4440
+ * By @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4513
+ * By @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4515
+ * By @WillKolada in https://github.com/rh-hideout/pokeemerald-expansion/pull/4529
+ * By @iriv24 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4975
+* Added Gen 1 type matchups by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4508
+ * Renamed `B_STEEL_RESISTANCES` -> `B_UPDATED_TYPE_MATCHUPS` to reflect this change.
+ * Added defines to cleanup `sTypeEffectivenessTable`.
+* Added Move Descriptions in battle by @Bassoonian, @TheXaman, @Pawkkie and @ravepossum in https://github.com/rh-hideout/pokeemerald-expansion/pull/4152
+ * Press L before selecting a move to see their category, power, accuracy and description.
+ * This can be changed to R by using the `B_MOVE_DESCRIPTION_BUTTON` config by @fakuzatsu in https://github.com/rh-hideout/pokeemerald-expansion/pull/4860
+ * Cleanup
+ * By @AGSMGMaster64 and @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4678
+* Added ball throwing configs by セケツ from PokéCommunity and @pkmnsnfrn in https://github.com/rh-hideout/pokeemerald-expansion/pull/4953
+ * `B_ENEMY_THROW_BALLS`: When set to `GEN_6` or higher, it changes the opposing trainer's ball animation so they throw their Pokéballs instead of already starting on the floor.
+ * `B_PLAYER_THROW_BALLS_SOUND`: When set to `GEN_5` or higher, it plays `SE_BALL_THROW` as part of the player's ball throw animation.
+ * `B_ENEMY_THROW_BALLS_SOUND`: When set to `GEN_5` or higher, it plays `SE_BALL_THROW` as part of the enemy's ball throw animation.
+* Added `RandomChance` macro for battle/test randomization by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4829
+* #### Gimmick Refactor by @AgustinGDLV in https://github.com/rh-hideout/pokeemerald-expansion/pull/4449
+ * Unifies generational mechanics into `gGimmicksInfo` struct (Mega, Z-Moves, Ultra Burst, Dynamax, Terastallization).
+ * Contains triggers, indicator, condition and function to execute when triggered.
+ * Around ~500-1000 lines of redundant / duplicate code removed!
+ * Cleanup
+ * By @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4927
+ * By @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4962
+ * By @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4863
+ * By @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4960
+* Allow users to increase `MAX_MONEY` dynamically by @DizzyEggg and @pkmnsnfrn in https://github.com/rh-hideout/pokeemerald-expansion/pull/4943
+* Added `AUTO_LOWERCASE_KEYBOARD` by @Jaizu and @pkmnsnfrn in https://github.com/rh-hideout/pokeemerald-expansion/pull/4976
+ * Automatically changes to to lowercase if the first character inputted is uppercase.
+### Changed
+* Improved HP drain when enabling `B_FAST_HP_DRAIN` by @pkmnsnfrn and @SonikkuA-DatH in https://github.com/rh-hideout/pokeemerald-expansion/pull/4335
+* #### Combined weather set commands by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4434
+ * `setrain` -> `setfieldweather ENUM_WEATHER_RAIN`.
+ * `setsandstorm` -> `setfieldweather ENUM_WEATHER_SANDSTORM`.
+ * `setsunny` -> `setfieldweather ENUM_WEATHER_SUN`.
+ * `sethail` -> `setfieldweather ENUM_WEATHER_HAIL`.
+ * `setsnow` -> `setfieldweather ENUM_WEATHER_SNOW`.
+* #### Replaced HP checks with `IsBattlerAlive` by @ghoulslash in https://github.com/rh-hideout/pokeemerald-expansion/pull/4429
+* #### Removed redundant `MOVE_EFFECT_SP_ATK_TWO_DOWN` by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4557
+* Added stack for saved targets and attackers by @ghoulslash in https://github.com/rh-hideout/pokeemerald-expansion/pull/4061
+ * This avoids the need to overwriting battler IDs during scripts and cause potential issues.
+ * Several scripts have been updated to use these.
+ * Cleanup and fixes
+ * By @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4653
+ * By @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4668
+* #### Adjusted Ate-Ability code a bit to make it more readable by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4640
+* Added global constants for damage rolls by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4663
+ ```c
+ // Lowest and highest percentages used for damage roll calculations
+ #define DMG_ROLL_PERCENT_LO 85
+ #define DMG_ROLL_PERCENT_HI 100
+ ```
+* #### Refactored residual damage to be more readable and less prone to bugs by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4945
+ * Cleanup by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4993
+* Clarified some cases of `ChangeStatBuffs` usage by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4826
+* Moved EWRAM variables from battle controller player file to gBattleStruct by @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4840
+ * `sDescriptionSubmenu`, `sAckBallUseBtn` and `sBallSwapped`.
+### Fixed
+* Fixed Dynamax data not clearing when a battler faints by @WillKolada in https://github.com/rh-hideout/pokeemerald-expansion/pull/4672
+* Multiple Z-Move fixes by @AgustinGDLV in https://github.com/rh-hideout/pokeemerald-expansion/pull/4449
+ * Fixed Z-Moves not working in Link Battles, recorded battles and tests.
+ * Fixed `Z_EFFECT_ALL_STATS_UP` functionality.
+ * Fixed Z-Nature Power, Z-Copycat, Z-Me First, and Z-Sleep Talk incorrectly using a normal move and not a Z-Move, ~~which had not been raised as an issue yet.~~ (some of these were caught recently!)
+ * Fixed Breakneck Blitz incorrectly being affected by -ate abilities, which had not been raised as an issue yet.
+ * Fixed Instruct incorrectly not failing if the target last used a Z-Move, which had not been raised as an issue yet.
+ * Fixed Guardian of Alola incorrectly doing 50% of the target's HP instead of 75%.
+* Fixed Enemy Data not clearing at the end of battles by @ghoulslash in https://github.com/rh-hideout/pokeemerald-expansion/pull/4867
+
+## 🤹 Moves 🤹
+### Added
+* Expanded Freeze Dry's effect to use `argument` field and allow custom moves to use the effect to be super effective to any specific type by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4312
+ * Renamed `EFFECT_FREEZE_DRY` to `EFFECT_SUPER_EFFECTIVE_ON_ARG`.
+* Expanded `EFFECT_BODY_PRESS` to use category of defense stats for calculation based on the move's own damage category by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4312
+ * Eg: In vanilla, Body Press uses the user's Defense and its stat changes instead of Attack. Now, if we were to change its `category` in `gMovesInfo`, it'll use Sp. Defense and its stat changes instead of Sp. Attack.
+* Expanded Photon Geyser and Shell Side Arm (restored) effects so that they also work for physical moves by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4923
+* Added Knock Off's Gen 5+ effect with config (`B_KNOCK_OFF_REMOVAL`) by @AgustinGDLV in https://github.com/rh-hideout/pokeemerald-expansion/pull/4333
+ * Items are removed outright instead of making them unusable.
+* Added Heal Bell/Soundproof Gen 5-8+ interactions with `B_HEAL_BELL_SOUNDPROOF` config by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4732
+ * Cleanup by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/5060
+* Added Spicy Extract's effect by @AlexOn1ine, @Skeli789, @kittenchilly and @ZnogyroP in https://github.com/rh-hideout/pokeemerald-expansion/pull/4211
+* Added `B_RETURN_STOLEN_NPC_ITEMS` config for Covet/Thief not being able to steal from NPCs by @moostoet and @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4605
+* Added Dragon Darts effect (CFRU port) by @AlexOn1ine, @Skeli789 and @BuffelSaft in https://github.com/rh-hideout/pokeemerald-expansion/pull/4612
+ * Animation by @hedara90 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4620
+### Changed
+* `EFFECT_TRIPLE_KICK`'s base power uses the move's `strikeCount` instead of a constant by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4608
+ * This allows users to create "Quadruple Kick" and similar moves.
+* Migrated move animation pointers to `gMovesInfo` by @cawtds in https://github.com/rh-hideout/pokeemerald-expansion/pull/4683
+ * This removes the need for `gBattleAnims_Moves` which had potential ordering issues if not kept in line with move IDs.
+ * If `battleAnimScript` is not defined for a move, it defaults to Tackle's animation.
+ * Migration script available in `migration_scripts/battle_anim_moves_refactor.py`
+### Fixed
+* Multiple Ally Switch fixes by @ghoulslash in https://github.com/rh-hideout/pokeemerald-expansion/pull/4451
+ * Shadows no longer disappear + safety checks.
+ * Corrected animation for opponents.
+* Fixed Avalanche's target by @TheLastMudkip in https://github.com/rh-hideout/pokeemerald-expansion/pull/4581
+* Fixed Feint and Feint Attack's descriptions by @lhearachel in https://github.com/rh-hideout/pokeemerald-expansion/pull/4617
+* Fixed Mud Sport/Water Sport reducing damage by 77% instead of 67% in Gen5+ by @fdeblasio in https://github.com/rh-hideout/pokeemerald-expansion/pull/4874
+
+## 🎭 Abilities 🎭
+### Added
+* Added Poison Puppeteer's effect by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4416
+* Added Tera Shift, Tera Shell, and Teraform Zero by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4418
+ * `FORM_CHANGE_BATTLE_SWITCH` now has ability as optional parameter.
+ * Cleanup by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4742
+* Added Toxic Chain's effect by @PhallenTree in https://github.com/rh-hideout/pokeemerald-expansion/pull/4823
+ * Cleanup by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4843
+* Added `B_ABILITY_TRIGGER_CHANCE` config to update trigger chances of abilities to Gen4+ by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4829
+ * Shed Skin, Cute Charm, Flame Body, Static and Poison Point have a 30% chance to trigger in Gen4+ instead of 1/3 in Gen3.
+ * Effect Spore has an 11%, 10% and 9% chance of triggering Sleep, Paralysis and Poison in Gen4+ instead of equal 10% each in Gen3.
+### Changed
+* #### Removed Gen 9 settings for out-of-battle abilities by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4282
+ * These configs no longer disable out-of-battle ability effects when set to `GEN_9`.
+ * `OW_SUPER_LUCK`.
+ * `OW_INFILTRATOR`.
+ * `OW_HARVEST`.
+ * `OW_LIGHTNING_ROD`.
+ * `OW_STORM_DRAIN`.
+ * `OW_FLASH_FIRE`.
+ * These configs have been removed
+ * `OW_COMPOUND_EYES`.
+ * `OW_CUTE_CHARM`.
+ * `OW_ILLUMINATE`.
+ * `OW_MAGNET_PULL`.
+ * `OW_STATIC`.
+### Fixed
+* Fixed Mirror Armor bouncing Sticky Web's stat reduction to the opponent by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4713
+* Effect Spore now uses `B_POWDER_GRASS` to toggle Grass-type Pokémon immunity to it by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4829
+
+## 🧶 Items 🧶
+### Added
+* Added Booster Energy's effect by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4337
+ * Cleanup
+ * By @PCG06 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4354
+ * By @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4804
+### Changed
+* #### Removed `gItemIconTable` by @kittenchilly in https://github.com/rh-hideout/pokeemerald-expansion/pull/4579
+ * Sprite and palette pointers have been moved to `gItemsInfo` as `iconPic` and `iconPalette` respectively.
+ * Migration script available in `migration_scripts/convert_item_icons.py`
+ * Cleanup
+ * By @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4591
+ * By @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4658
+* #### Automatically display TM/HM icons based on their move by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4452
+ * TM palettes are now stored in `gTypesInfo` in the `paletteTMHM` field.
+ * Cleanup by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4487
+
+## 🤖 Battle AI 🤖
+### Added
+* Added `AI_GetBattlerAbility` by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4555
+* Added `AI_FLAG_CONSERVATIVE` flag by @Pawkkie and @iriv24 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4615
+ * AI will assume low damage rolls for its `calculationsDamage` roll selection in `AI_CalcDamage`
+ * Cleanup
+ * By @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4663
+* Added `AI_FLAG_SEQUENCE_SWITCHING` flag by @Pawkkie, Kasen, @pkmnsnfrn and @DizzyEggg in https://github.com/rh-hideout/pokeemerald-expansion/pull/4878
+ * AI will keep their party order consistently with switches.
+* Added `setdynamicaifunc`, which allows to setup custom AI functions before a battle besides the predetermined ones used by AI Flags @ghoulslash in https://github.com/rh-hideout/pokeemerald-expansion/pull/4908
+ * Eg:
+ ```
+ setdynamicaifunc AI_TagBattlePreferFoe
+ multi_2_vs_2 TRAINER_MAXIE_MOSSDEEP, MossdeepCity_SpaceCenter_2F_Text_JustWantToExpandLand, TRAINER_TABITHA_MOSSDEEP, MossdeepCity_SpaceCenter_Text_TabithaDefeat, PARTNER_STEVEN
+ ```
+ Where `AI_TagBattlePreferFoe` prioritizes attacking the opposite battler index.
+### Changed
+* AI now calculates and stores minimum possible move damage and uses it with `AI_FLAG_TRY_TO_FAINT` by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4760
+ * This allows AI to prefer guaranteed KO moves over highest expected damage move.
+ * Cleanup by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4808
+* AI Revenge Killer switching factors in Trick Room by @Shadowzlmao and @Pawkkie in https://github.com/rh-hideout/pokeemerald-expansion/pull/4794
+* AI Smarter Choice AI for Status Moves by @Pawkkie in https://github.com/rh-hideout/pokeemerald-expansion/pull/4872
+ * Better behavior for AI under Choice Item effects.
+ * Cleanup by @Pawkkie in https://github.com/rh-hideout/pokeemerald-expansion/pull/4911
+* AI Smarter Focus Punch and Substitute handling by @Pawkkie, @Kasenn and @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4952
+* Moved `RestoreBattlerData` out of `Ai_CalcDmg` and added `SaveBattlerData` Protections by @ghoulslash in https://github.com/rh-hideout/pokeemerald-expansion/pull/4156
+ * Cleanup
+ * By @ghoulslash in https://github.com/rh-hideout/pokeemerald-expansion/pull/4586
+* Made AI see Loaded Dice hold effect for multi hit moves that strike 5 times by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4622
+* `AI_FLAG_RISKY` Improvements by @Pawkkie, @AlexOn1ine and @iriv24 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4648
+ * Check the PR for in depth details.
+ * Cleanup
+ * By @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4790
+ * By @Pawkkie in https://github.com/rh-hideout/pokeemerald-expansion/pull/5032
+* Removed temporary scores in `AI_CalcMoveEffectScores` by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4655
+* Changed `AI_IS_SLOWER` and `AI_IS_FASTER` comparisons into `AI_IsFaster` and `AI_IsSlower` functions by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4671
+ * `AI_STRIKES_FIRST` is also replaced by `AI_IsFaster`.
+* Switch AI uses trapping abilities aggressively by @Pawkkie in https://github.com/rh-hideout/pokeemerald-expansion/pull/4669
+* Use 9th roll instead of average in AI calcs by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4679
+* Use `AI_DATA->abilities` in more places by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4729
+* Minor switch AI cleanup by @Pawkkie, @DizzyEggg, @AlexOn1ine and @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4849
+* Removed `SetBattlerData` from `AI_CalcDamage` by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4881
+* Removed unused `AI_FLAG_HELP_PARTNER` by @pkmnsnfrn and @Pawkkie in https://github.com/rh-hideout/pokeemerald-expansion/pull/4918
+* Added missing `ADJUST_SCORE`s by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4925
+* Reduced `AI_WhoStrikesFirst` to the most essential parts by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4978
+* Changed score adjustments to `tempScore` increases by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4987
+### Fixed
+* Minor AI flag fixes/cleanup by @Pawkkie, @AlexOn1ine and @pkmnsnfrn in https://github.com/rh-hideout/pokeemerald-expansion/pull/4924
+
+## 🧹 Other Cleanup 🧹
+### Changed
+* Corrected species info struct hex comments by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4798
+ * Cleanup by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4800
+
+## 🧪 Test Runner 🧪
+### Added
+* Added missing weather tests by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4434
+* Added missing Gale Wings test by @Pawkkie in https://github.com/rh-hideout/pokeemerald-expansion/pull/4694
+* Added `SWITCH_OUT_MESSAGE` and `SEND_IN_MESSAGE` macros to avoid tests from failing based on changing switch out/in messages by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4717
+ * Usage: `SEND_IN_MESSAGE("Wobbuffet");`
+ * Tests have been updated to use these new macros.
+* Added missing Hidden Power test by @AsparagusEduardo in https://github.com/rh-hideout/pokeemerald-expansion/pull/4462
+* Added some Terastallization tests by @hedara90 in https://github.com/rh-hideout/pokeemerald-expansion/pull/5020
+### Changed
+* Cleaned up Frisk test by @mrgriffin in https://github.com/rh-hideout/pokeemerald-expansion/pull/4441
+* Renamed `MgbaPrintf_` to `Test_MgbaPrintf` by @Bassoonian in https://github.com/rh-hideout/pokeemerald-expansion/pull/4642
+* AI tests have been moved to their own folder by @Pawkkie in https://github.com/rh-hideout/pokeemerald-expansion/pull/4898
+* Species are now always included in tests by @AlexOn1ine in https://github.com/rh-hideout/pokeemerald-expansion/pull/4810
+* Added Battle Anim Debug Check to see if animations aren't cleared by @ghoulslash in https://github.com/rh-hideout/pokeemerald-expansion/pull/4930
+* Test battlers always have their forced abilities to prevent them from changing during a test by @Sneed69 in https://github.com/rh-hideout/pokeemerald-expansion/pull/4707
+### Fixed
+* Test runner uses Set mode to avoid an issue where tests prompted switching and caused a timeout by @Pawkkie in https://github.com/rh-hideout/pokeemerald-expansion/pull/4661
+
+## New Contributors
+* @Pokabbie made their first contribution in https://github.com/rh-hideout/pokeemerald-expansion/pull/4507
+* @TheLastMudkip made their first contribution in https://github.com/rh-hideout/pokeemerald-expansion/pull/4581
+* @moostoet made their first contribution in https://github.com/rh-hideout/pokeemerald-expansion/pull/4605
+* @rayrobdod made their first contribution in https://github.com/rh-hideout/pokeemerald-expansion/pull/4727
+* @innocenthedgehog made their first contribution in https://github.com/rh-hideout/pokeemerald-expansion/pull/4988
+
+**Full Changelog**: https://github.com/rh-hideout/pokeemerald-expansion/compare/expansion/1.8.5...expansion/1.9.0
+
+
diff --git a/docs/changelogs/1.9.x/1.9.1.md b/docs/changelogs/1.9.x/1.9.1.md
new file mode 100644
index 000000000000..8393727c2aa3
--- /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 63e9e352aad1..a40afebad35c 100644
--- a/docs/changelogs/template.md
+++ b/docs/changelogs/template.md
@@ -6,7 +6,8 @@
- Once you have your remote set up, run the command `git pull RHH expansion/1.Y.Z`.
```
-## 🌋 *IMPORTANT CHANGES AND REFACTORS* 🌋
+## 🌋 *REFACTORS* 🌋
+📜 = Uses a migration script.
* N/A
## 💥 *Softlock/Crash fixes* 💥
@@ -49,6 +50,13 @@
* N/A
#### Fixed
* N/A
+### ***merrp/aarant's Followers***
+#### Added
+* N/A
+#### Changed
+* N/A
+#### Fixed
+* N/A
## 🐉 Pokémon 🐉
### Added
@@ -114,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 000000000000..042a87601d39
--- /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 000000000000..9ddc09b904b7
--- /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 000000000000..9bf3e2e61f27
--- /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 000000000000..30c1f82dbe24
--- /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 000000000000..6dbb009fcfff
--- /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 000000000000..e64f8e6e667f
--- /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 000000000000..1f25f9847ebc
--- /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 000000000000..3ce0217c2808
--- /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 000000000000..ef362dc45f77
--- /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 000000000000..88ee2468e65f
--- /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/gflib/malloc.c b/gflib/malloc.c
index 3c15dd944781..95d41fbb97e6 100644
--- a/gflib/malloc.c
+++ b/gflib/malloc.c
@@ -92,14 +92,14 @@ void *AllocInternal(void *heapStart, u32 size, const char *location)
{
const char *location = MemBlockLocation(block);
if (location)
- MgbaPrintf_("%s: %d bytes allocated", location, block->size);
+ Test_MgbaPrintf("%s: %d bytes allocated", location, block->size);
else
- MgbaPrintf_(": %d bytes allocated", block->size);
+ Test_MgbaPrintf(": %d bytes allocated", block->size);
}
block = block->next;
}
while (block != head);
- Test_ExitWithResult(TEST_RESULT_ERROR, "%s: OOM allocating %d bytes", location, size);
+ Test_ExitWithResult(TEST_RESULT_ERROR, SourceLine(0), ":L%s:%d, %s: OOM allocating %d bytes", gTestRunnerState.test->filename, SourceLine(0), location, size);
#endif
return NULL;
}
diff --git a/gflib/sprite.c b/gflib/sprite.c
index 7ae70670223c..7823888cb529 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 s16 AllocSpriteTiles(u16 tileCount);
static void RequestSpriteFrameImageCopy(u16 index, u16 tileNum, const struct SpriteFrameImage *images);
static void ResetAllSprites(void);
static void BeginAnim(struct Sprite *sprite);
@@ -879,9 +878,15 @@ void BeginAnim(struct Sprite *sprite)
SetSpriteOamFlipBits(sprite, hFlip, vFlip);
if (sprite->usingSheet)
+ {
+ if (OW_GFX_COMPRESS && sprite->sheetSpan)
+ imageValue = (imageValue + 1) << sprite->sheetSpan;
sprite->oam.tileNum = sprite->sheetTileStart + imageValue;
+ }
else
+ {
RequestSpriteFrameImageCopy(imageValue, sprite->oam.tileNum, sprite->images);
+ }
}
}
@@ -931,9 +936,15 @@ void AnimCmd_frame(struct Sprite *sprite)
SetSpriteOamFlipBits(sprite, hFlip, vFlip);
if (sprite->usingSheet)
+ {
+ if (OW_GFX_COMPRESS && sprite->sheetSpan)
+ imageValue = (imageValue + 1) << sprite->sheetSpan;
sprite->oam.tileNum = sprite->sheetTileStart + imageValue;
+ }
else
+ {
RequestSpriteFrameImageCopy(imageValue, sprite->oam.tileNum, sprite->images);
+ }
}
void AnimCmd_end(struct Sprite *sprite)
@@ -965,9 +976,15 @@ void AnimCmd_jump(struct Sprite *sprite)
SetSpriteOamFlipBits(sprite, hFlip, vFlip);
if (sprite->usingSheet)
+ {
+ if (OW_GFX_COMPRESS && sprite->sheetSpan)
+ imageValue = (imageValue + 1) << sprite->sheetSpan;
sprite->oam.tileNum = sprite->sheetTileStart + imageValue;
+ }
else
+ {
RequestSpriteFrameImageCopy(imageValue, sprite->oam.tileNum, sprite->images);
+ }
}
void AnimCmd_loop(struct Sprite *sprite)
@@ -1346,6 +1363,8 @@ void SetSpriteSheetFrameTileNum(struct Sprite *sprite)
if (sprite->usingSheet)
{
s16 tileOffset = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.imageValue;
+ if (OW_GFX_COMPRESS && sprite->sheetSpan)
+ tileOffset = (tileOffset + 1) << sprite->sheetSpan;
if (tileOffset < 0)
tileOffset = 0;
sprite->oam.tileNum = sprite->sheetTileStart + tileOffset;
@@ -1424,7 +1443,7 @@ void SetOamMatrixRotationScaling(u8 matrixNum, s16 xScale, s16 yScale, u16 rotat
CopyOamMatrix(matrixNum, &matrix);
}
-u16 LoadSpriteSheet(const struct SpriteSheet *sheet)
+static u16 LoadSpriteSheetWithOffset(const struct SpriteSheet *sheet, u32 offset)
{
s16 tileStart = AllocSpriteTiles(sheet->size / TILE_SIZE_4BPP);
@@ -1435,11 +1454,32 @@ u16 LoadSpriteSheet(const struct SpriteSheet *sheet)
else
{
AllocSpriteTileRange(sheet->tag, (u16)tileStart, sheet->size / TILE_SIZE_4BPP);
- CpuCopy16(sheet->data, (u8 *)OBJ_VRAM0 + TILE_SIZE_4BPP * tileStart, sheet->size);
+ CpuSmartCopy16(sheet->data, (u8 *)OBJ_VRAM0 + TILE_SIZE_4BPP * tileStart + offset, sheet->size - offset);
return (u16)tileStart;
}
}
+u16 LoadSpriteSheet(const struct SpriteSheet *sheet)
+{
+ return LoadSpriteSheetWithOffset(sheet, 0);
+}
+
+// Like LoadSpriteSheet, but checks if already loaded, and uses template image frames
+u16 LoadSpriteSheetByTemplate(const struct SpriteTemplate *template, u32 frame, s32 offset)
+{
+ u16 tileStart;
+ struct SpriteSheet sheet;
+ // error if template is null or tile tag or images not set
+ if (!template || template->tileTag == TAG_NONE || !template->images)
+ return TAG_NONE;
+ if ((tileStart = GetSpriteTileStartByTag(template->tileTag)) != TAG_NONE) // return if already loaded
+ return tileStart;
+ sheet.data = template->images[frame].data;
+ sheet.size = template->images[frame].size;
+ sheet.tag = template->tileTag;
+ return LoadSpriteSheetWithOffset(&sheet, offset);
+}
+
void LoadSpriteSheets(const struct SpriteSheet *sheets)
{
u32 i;
@@ -1691,10 +1731,36 @@ bool8 AddSubspritesToOamBuffer(struct Sprite *sprite, struct OamData *destOam, u
destOam[i].y = baseY + y;
destOam[i].tileNum = tileNum + subspriteTable->subsprites[i].tileOffset;
- if (sprite->subspriteMode != SUBSPRITES_IGNORE_PRIORITY)
+ if (sprite->subspriteMode < SUBSPRITES_IGNORE_PRIORITY)
destOam[i].priority = subspriteTable->subsprites[i].priority;
}
}
return 0;
}
+
+static const u8 sSpanPerImage[4][4] =
+{
+ [ST_OAM_SQUARE] =
+ {
+ [ST_OAM_SIZE_0] = 0, // SPRITE_SIZE_8x8
+ [ST_OAM_SIZE_1] = 2, // SPRITE_SIZE_16x16
+ [ST_OAM_SIZE_2] = 4, // SPRITE_SIZE_32x32
+ [ST_OAM_SIZE_3] = 6 // SPRITE_SIZE_64x64
+ },
+ [ST_OAM_H_RECTANGLE ... ST_OAM_V_RECTANGLE] =
+ {
+ [ST_OAM_SIZE_0] = 1, // SPRITE_SIZE_16x8
+ [ST_OAM_SIZE_1] = 2, // SPRITE_SIZE_32x8
+ [ST_OAM_SIZE_2] = 3, // SPRITE_SIZE_32x16
+ [ST_OAM_SIZE_3] = 5 // SPRITE_SIZE_64x32
+ },
+};
+
+// For a given sprite shape & size, returns
+// the value for sheetSpan:
+// i.e, a 32x32 sprite has span 4, because 1 << 4 == 16 == 4x4 tiles
+u32 GetSpanPerImage(u32 shape, u32 size)
+{
+ return sSpanPerImage[shape][size];
+}
diff --git a/gflib/sprite.h b/gflib/sprite.h
index 9772434a3b4e..6a3084add254 100644
--- a/gflib/sprite.h
+++ b/gflib/sprite.h
@@ -217,22 +217,26 @@ struct Sprite
// general purpose data fields
/*0x2E*/ s16 data[8];
- /*0x3E*/ bool16 inUse:1; //1
- bool16 coordOffsetEnabled:1; //2
- bool16 invisible:1; //4
- bool16 flags_3:1; //8
- bool16 flags_4:1; //0x10
- bool16 flags_5:1; //0x20
- bool16 flags_6:1; //0x40
- bool16 flags_7:1; //0x80
- /*0x3F*/ bool16 hFlip:1; //1
- bool16 vFlip:1; //2
- bool16 animBeginning:1; //4
- bool16 affineAnimBeginning:1; //8
- bool16 animEnded:1; //0x10
- bool16 affineAnimEnded:1; //0x20
- bool16 usingSheet:1; //0x40
- bool16 anchored:1; //0x80
+ /*0x3E*/ u16 inUse:1; //1
+ u16 coordOffsetEnabled:1; //2
+ u16 invisible:1; //4
+ u16 flags_3:1; //8
+ // if nonzero, tile offset for usingSheet sprites
+ // is (offset + 1) << sheetSpan;
+ // (This allows using frame-based anim tables for sheet sprites)
+ u16 sheetSpan:3;
+ // u16 flags_4:1; //0x10
+ // u16 flags_5:1; //0x20
+ // u16 flags_6:1; //0x40
+ u16 flags_7:1; //0x80
+ /*0x3F*/ u16 hFlip:1; //1
+ u16 vFlip:1; //2
+ u16 animBeginning:1; //4
+ u16 affineAnimBeginning:1; //8
+ u16 animEnded:1; //0x10
+ u16 affineAnimEnded:1; //0x20
+ u16 usingSheet:1; //0x40
+ u16 anchored:1; //0x80
/*0x40*/ u16 sheetTileStart;
@@ -298,7 +302,9 @@ void FreeOamMatrix(u8 matrixNum);
void InitSpriteAffineAnim(struct Sprite *sprite);
void SetOamMatrixRotationScaling(u8 matrixNum, s16 xScale, s16 yScale, u16 rotation);
u16 LoadSpriteSheet(const struct SpriteSheet *sheet);
+u16 LoadSpriteSheetByTemplate(const struct SpriteTemplate *template, u32 frame, s32 offset);
void LoadSpriteSheets(const struct SpriteSheet *sheets);
+s16 AllocSpriteTiles(u16 tileCount);
u16 AllocTilesForSpriteSheet(struct SpriteSheet *sheet);
void AllocTilesForSpriteSheets(struct SpriteSheet *sheets);
void LoadTilesForSpriteSheet(const struct SpriteSheet *sheet);
@@ -324,5 +330,6 @@ void CopyFromSprites(u8 *dest);
u8 SpriteTileAllocBitmapOp(u16 bit, u8 op);
void ClearSpriteCopyRequests(void);
void ResetAffineAnimData(void);
+u32 GetSpanPerImage(u32 shape, u32 size);
#endif //GUARD_SPRITE_H
diff --git a/gflib/text.c b/gflib/text.c
index 20927e4f80c4..59c6e3f4e8c3 100644
--- a/gflib/text.c
+++ b/gflib/text.c
@@ -23,17 +23,26 @@ static u16 FontFunc_ShortCopy2(struct TextPrinter *);
static u16 FontFunc_ShortCopy3(struct TextPrinter *);
static u16 FontFunc_Narrow(struct TextPrinter *);
static u16 FontFunc_SmallNarrow(struct TextPrinter *);
+static u16 FontFunc_Narrower(struct TextPrinter *);
+static u16 FontFunc_SmallNarrower(struct TextPrinter *);
+static u16 FontFunc_ShortNarrow(struct TextPrinter *);
static void DecompressGlyph_Small(u16, bool32);
static void DecompressGlyph_Normal(u16, bool32);
static void DecompressGlyph_Short(u16, bool32);
static void DecompressGlyph_Narrow(u16, bool32);
static void DecompressGlyph_SmallNarrow(u16, bool32);
static void DecompressGlyph_Bold(u16);
+static void DecompressGlyph_Narrower(u16, bool32);
+static void DecompressGlyph_SmallNarrower(u16, bool32);
+static void DecompressGlyph_ShortNarrow(u16, bool32);
static u32 GetGlyphWidth_Small(u16, bool32);
static u32 GetGlyphWidth_Normal(u16, bool32);
static u32 GetGlyphWidth_Short(u16, bool32);
static u32 GetGlyphWidth_Narrow(u16, bool32);
static u32 GetGlyphWidth_SmallNarrow(u16, bool32);
+static u32 GetGlyphWidth_Narrower(u16, bool32);
+static u32 GetGlyphWidth_SmallNarrower(u16, bool32);
+static u32 GetGlyphWidth_ShortNarrow(u16, bool32);
static EWRAM_DATA struct TextPrinter sTempTextPrinter = {0};
static EWRAM_DATA struct TextPrinter sTextPrinters[WINDOWS_MAX] = {0};
@@ -81,15 +90,18 @@ static const u8 sWindowVerticalScrollSpeeds[] = {
static const struct GlyphWidthFunc sGlyphWidthFuncs[] =
{
- { FONT_SMALL, GetGlyphWidth_Small },
- { FONT_NORMAL, GetGlyphWidth_Normal },
- { FONT_SHORT, GetGlyphWidth_Short },
- { FONT_SHORT_COPY_1, GetGlyphWidth_Short },
- { FONT_SHORT_COPY_2, GetGlyphWidth_Short },
- { FONT_SHORT_COPY_3, GetGlyphWidth_Short },
- { FONT_BRAILLE, GetGlyphWidth_Braille },
- { FONT_NARROW, GetGlyphWidth_Narrow },
- { FONT_SMALL_NARROW, GetGlyphWidth_SmallNarrow }
+ { FONT_SMALL, GetGlyphWidth_Small },
+ { FONT_NORMAL, GetGlyphWidth_Normal },
+ { FONT_SHORT, GetGlyphWidth_Short },
+ { FONT_SHORT_COPY_1, GetGlyphWidth_Short },
+ { FONT_SHORT_COPY_2, GetGlyphWidth_Short },
+ { FONT_SHORT_COPY_3, GetGlyphWidth_Short },
+ { FONT_BRAILLE, GetGlyphWidth_Braille },
+ { FONT_NARROW, GetGlyphWidth_Narrow },
+ { FONT_SMALL_NARROW, GetGlyphWidth_SmallNarrow },
+ { FONT_NARROWER, GetGlyphWidth_Narrower },
+ { FONT_SMALL_NARROWER, GetGlyphWidth_SmallNarrower },
+ { FONT_SHORT_NARROW, GetGlyphWidth_ShortNarrow },
};
struct
@@ -217,21 +229,54 @@ static const struct FontInfo sFontInfos[] =
.fgColor = 1,
.bgColor = 2,
.shadowColor = 15,
- }
+ },
+ [FONT_NARROWER] = {
+ .fontFunction = FontFunc_Narrower,
+ .maxLetterWidth = 5,
+ .maxLetterHeight = 16,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .fgColor = 2,
+ .bgColor = 1,
+ .shadowColor = 3,
+ },
+ [FONT_SMALL_NARROWER] = {
+ .fontFunction = FontFunc_SmallNarrower,
+ .maxLetterWidth = 5,
+ .maxLetterHeight = 8,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .fgColor = 2,
+ .bgColor = 1,
+ .shadowColor = 3,
+ },
+ [FONT_SHORT_NARROW] = {
+ .fontFunction = FontFunc_ShortNarrow,
+ .maxLetterWidth = 5,
+ .maxLetterHeight = 14,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .fgColor = 2,
+ .bgColor = 1,
+ .shadowColor = 3,
+ },
};
static const u8 sMenuCursorDimensions[][2] =
{
- [FONT_SMALL] = { 8, 12 },
- [FONT_NORMAL] = { 8, 15 },
- [FONT_SHORT] = { 8, 14 },
- [FONT_SHORT_COPY_1] = { 8, 14 },
- [FONT_SHORT_COPY_2] = { 8, 14 },
- [FONT_SHORT_COPY_3] = { 8, 14 },
- [FONT_BRAILLE] = { 8, 16 },
- [FONT_NARROW] = { 8, 15 },
- [FONT_SMALL_NARROW] = { 8, 8 },
- [FONT_BOLD] = {}
+ [FONT_SMALL] = { 8, 12 },
+ [FONT_NORMAL] = { 8, 15 },
+ [FONT_SHORT] = { 8, 14 },
+ [FONT_SHORT_COPY_1] = { 8, 14 },
+ [FONT_SHORT_COPY_2] = { 8, 14 },
+ [FONT_SHORT_COPY_3] = { 8, 14 },
+ [FONT_BRAILLE] = { 8, 16 },
+ [FONT_NARROW] = { 8, 15 },
+ [FONT_SMALL_NARROW] = { 8, 8 },
+ [FONT_BOLD] = {},
+ [FONT_NARROWER] = { 8, 15 },
+ [FONT_SMALL_NARROWER] = { 8, 8 },
+ [FONT_SHORT_NARROW] = { 8, 14 },
};
static const u16 sFontBoldJapaneseGlyphs[] = INCBIN_U16("graphics/fonts/bold.hwjpnfont");
@@ -769,6 +814,42 @@ static u16 FontFunc_SmallNarrow(struct TextPrinter *textPrinter)
return RenderText(textPrinter);
}
+static u16 FontFunc_Narrower(struct TextPrinter *textPrinter)
+{
+ struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields);
+
+ if (subStruct->hasFontIdBeenSet == FALSE)
+ {
+ subStruct->fontId = FONT_NARROWER;
+ subStruct->hasFontIdBeenSet = TRUE;
+ }
+ return RenderText(textPrinter);
+}
+
+static u16 FontFunc_SmallNarrower(struct TextPrinter *textPrinter)
+{
+ struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields);
+
+ if (subStruct->hasFontIdBeenSet == FALSE)
+ {
+ subStruct->fontId = FONT_SMALL_NARROWER;
+ subStruct->hasFontIdBeenSet = TRUE;
+ }
+ return RenderText(textPrinter);
+}
+
+static u16 FontFunc_ShortNarrow(struct TextPrinter *textPrinter)
+{
+ struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields);
+
+ if (subStruct->hasFontIdBeenSet == FALSE)
+ {
+ subStruct->fontId = FONT_SHORT_NARROW;
+ subStruct->hasFontIdBeenSet = TRUE;
+ }
+ return RenderText(textPrinter);
+}
+
void TextPrinterInitDownArrowCounters(struct TextPrinter *textPrinter)
{
struct TextPrinterSubStruct *subStruct = (struct TextPrinterSubStruct *)(&textPrinter->subStructFields);
@@ -1140,6 +1221,15 @@ static u16 RenderText(struct TextPrinter *textPrinter)
case FONT_SMALL_NARROW:
DecompressGlyph_SmallNarrow(currChar, textPrinter->japanese);
break;
+ case FONT_NARROWER:
+ DecompressGlyph_Narrower(currChar, textPrinter->japanese);
+ break;
+ case FONT_SMALL_NARROWER:
+ DecompressGlyph_SmallNarrower(currChar, textPrinter->japanese);
+ break;
+ case FONT_SHORT_NARROW:
+ DecompressGlyph_ShortNarrow(currChar, textPrinter->japanese);
+ break;
case FONT_BRAILLE:
break;
}
@@ -1902,3 +1992,200 @@ static void DecompressGlyph_Bold(u16 glyphId)
gCurGlyph.width = 8;
gCurGlyph.height = 12;
}
+
+static void DecompressGlyph_Narrower(u16 glyphId, bool32 isJapanese)
+{
+ const u16 *glyphs;
+
+ if (isJapanese == TRUE)
+ {
+ glyphs = gFontNormalJapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId % 0x10));
+ DecompressGlyphTile(glyphs, gCurGlyph.gfxBufferTop);
+ DecompressGlyphTile(glyphs + 0x80, gCurGlyph.gfxBufferBottom);
+ gCurGlyph.width = 8;
+ gCurGlyph.height = 15;
+ }
+ else
+ {
+ glyphs = gFontNarrowerLatinGlyphs + (0x20 * glyphId);
+ gCurGlyph.width = gFontNarrowerLatinGlyphWidths[glyphId];
+
+ if (gCurGlyph.width <= 8)
+ {
+ DecompressGlyphTile(glyphs, gCurGlyph.gfxBufferTop);
+ DecompressGlyphTile(glyphs + 0x10, gCurGlyph.gfxBufferBottom);
+ }
+ else
+ {
+ DecompressGlyphTile(glyphs, gCurGlyph.gfxBufferTop);
+ DecompressGlyphTile(glyphs + 0x8, gCurGlyph.gfxBufferTop + 8);
+ DecompressGlyphTile(glyphs + 0x10, gCurGlyph.gfxBufferBottom);
+ DecompressGlyphTile(glyphs + 0x18, gCurGlyph.gfxBufferBottom + 8);
+ }
+
+ gCurGlyph.height = 15;
+ }
+}
+
+static u32 GetGlyphWidth_Narrower(u16 glyphId, bool32 isJapanese)
+{
+ if (isJapanese == TRUE)
+ return 8;
+ else
+ return gFontNarrowerLatinGlyphWidths[glyphId];
+}
+
+static void DecompressGlyph_SmallNarrower(u16 glyphId, bool32 isJapanese)
+{
+ const u16 *glyphs;
+
+ if (isJapanese == TRUE)
+ {
+ glyphs = gFontSmallJapaneseGlyphs + (0x100 * (glyphId >> 0x4)) + (0x8 * (glyphId % 0x10));
+ DecompressGlyphTile(glyphs, gCurGlyph.gfxBufferTop);
+ DecompressGlyphTile(glyphs + 0x80, gCurGlyph.gfxBufferBottom);
+ gCurGlyph.width = 8;
+ gCurGlyph.height = 15;
+ }
+ else
+ {
+ glyphs = gFontSmallNarrowerLatinGlyphs + (0x20 * glyphId);
+ gCurGlyph.width = gFontSmallNarrowerLatinGlyphWidths[glyphId];
+
+ if (gCurGlyph.width <= 8)
+ {
+ DecompressGlyphTile(glyphs, gCurGlyph.gfxBufferTop);
+ DecompressGlyphTile(glyphs + 0x10, gCurGlyph.gfxBufferBottom);
+ }
+ else
+ {
+ DecompressGlyphTile(glyphs, gCurGlyph.gfxBufferTop);
+ DecompressGlyphTile(glyphs + 0x8, gCurGlyph.gfxBufferTop + 8);
+ DecompressGlyphTile(glyphs + 0x10, gCurGlyph.gfxBufferBottom);
+ DecompressGlyphTile(glyphs + 0x18, gCurGlyph.gfxBufferBottom + 8);
+ }
+
+ gCurGlyph.height = 15;
+ }
+}
+
+static u32 GetGlyphWidth_SmallNarrower(u16 glyphId, bool32 isJapanese)
+{
+ if (isJapanese == TRUE)
+ return 8;
+ else
+ return gFontSmallNarrowerLatinGlyphWidths[glyphId];
+}
+
+static void DecompressGlyph_ShortNarrow(u16 glyphId, bool32 isJapanese)
+{
+ const u16 *glyphs;
+
+ if (isJapanese == TRUE)
+ {
+ glyphs = gFontShortJapaneseGlyphs + (0x100 * (glyphId >> 0x3)) + (0x10 * (glyphId & 0x7));
+ DecompressGlyphTile(glyphs, gCurGlyph.gfxBufferTop);
+ DecompressGlyphTile(glyphs + 0x8, gCurGlyph.gfxBufferTop + 8);
+ DecompressGlyphTile(glyphs + 0x80, gCurGlyph.gfxBufferBottom); // gCurGlyph + 0x20
+ DecompressGlyphTile(glyphs + 0x88, gCurGlyph.gfxBufferBottom + 8); // gCurGlyph + 0x60
+ gCurGlyph.width = gFontShortJapaneseGlyphWidths[glyphId];
+ gCurGlyph.height = 14;
+ }
+ else
+ {
+ glyphs = gFontShortNarrowLatinGlyphs + (0x20 * glyphId);
+ gCurGlyph.width = gFontShortNarrowLatinGlyphWidths[glyphId];
+
+ if (gCurGlyph.width <= 8)
+ {
+ DecompressGlyphTile(glyphs, gCurGlyph.gfxBufferTop);
+ DecompressGlyphTile(glyphs + 0x10, gCurGlyph.gfxBufferBottom);
+ }
+ else
+ {
+ DecompressGlyphTile(glyphs, gCurGlyph.gfxBufferTop);
+ DecompressGlyphTile(glyphs + 0x8, gCurGlyph.gfxBufferTop + 8);
+ DecompressGlyphTile(glyphs + 0x10, gCurGlyph.gfxBufferBottom);
+ DecompressGlyphTile(glyphs + 0x18, gCurGlyph.gfxBufferBottom + 8);
+ }
+
+ gCurGlyph.height = 14;
+ }
+}
+
+static u32 GetGlyphWidth_ShortNarrow(u16 glyphId, bool32 isJapanese)
+{
+ if (isJapanese == TRUE)
+ return gFontShortJapaneseGlyphWidths[glyphId];
+ else
+ return gFontShortNarrowLatinGlyphWidths[glyphId];
+}
+
+static const s8 sNarrowerFontIds[] =
+{
+ [FONT_SMALL] = FONT_SMALL_NARROW,
+ [FONT_NORMAL] = FONT_NARROW,
+ [FONT_SHORT] = FONT_SHORT_NARROW,
+ [FONT_SHORT_COPY_1] = FONT_SHORT_NARROW,
+ [FONT_SHORT_COPY_2] = FONT_SHORT_NARROW,
+ [FONT_SHORT_COPY_3] = FONT_SHORT_NARROW,
+ [FONT_BRAILLE] = -1,
+ [FONT_NARROW] = FONT_NARROWER,
+ [FONT_SMALL_NARROW] = FONT_SMALL_NARROWER,
+ [FONT_BOLD] = -1,
+ [FONT_NARROWER] = -1,
+ [FONT_SMALL_NARROWER] = -1,
+ [FONT_SHORT_NARROW] = -1,
+};
+
+// If the narrowest font ID doesn't fit the text, we still return that
+// ID because clipping is better than crashing.
+u32 GetFontIdToFit(const u8 *string, u32 fontId, u32 letterSpacing, u32 widthPx)
+{
+ for (;;)
+ {
+ s32 narrowerFontId = sNarrowerFontIds[fontId];
+ if (narrowerFontId == -1)
+ return fontId;
+ if (GetStringWidth(fontId, string, letterSpacing) <= widthPx)
+ return fontId;
+ fontId = narrowerFontId;
+ }
+}
+
+u8 *PrependFontIdToFit(u8 *start, u8 *end, u32 fontId, u32 width)
+{
+ u32 fitFontId = GetFontIdToFit(start, fontId, 0, width);
+
+ if (fitFontId == fontId)
+ return end;
+
+ memmove(&start[3], &start[0], end - start);
+ start[0] = EXT_CTRL_CODE_BEGIN;
+ start[1] = EXT_CTRL_CODE_FONT;
+ start[2] = fitFontId;
+ end[3] = EOS;
+ return end + 3;
+}
+
+u8 *WrapFontIdToFit(u8 *start, u8 *end, u32 fontId, u32 width)
+{
+
+ u32 fitFontId = GetFontIdToFit(start, fontId, 0, width);
+ if (fitFontId != fontId)
+ {
+ memmove(&start[3], &start[0], end - start);
+ start[0] = EXT_CTRL_CODE_BEGIN;
+ start[1] = EXT_CTRL_CODE_FONT;
+ start[2] = fitFontId;
+ end[3] = EXT_CTRL_CODE_BEGIN;
+ end[4] = EXT_CTRL_CODE_FONT;
+ end[5] = fontId;
+ end[6] = EOS;
+ return end + 6;
+ }
+ else
+ {
+ return end;
+ }
+}
diff --git a/gflib/text.h b/gflib/text.h
index 76d140d86cdb..fc457e5a00f0 100644
--- a/gflib/text.h
+++ b/gflib/text.h
@@ -18,6 +18,9 @@ enum {
FONT_NARROW,
FONT_SMALL_NARROW, // Very similar to FONT_SMALL, some glyphs are narrower
FONT_BOLD, // JP glyph set only
+ FONT_NARROWER,
+ FONT_SMALL_NARROWER,
+ FONT_SHORT_NARROW,
};
// Return values for font functions
@@ -168,4 +171,8 @@ u8 GetMenuCursorDimensionByFont(u8 fontId, u8 whichDimension);
u16 FontFunc_Braille(struct TextPrinter *textPrinter);
u32 GetGlyphWidth_Braille(u16 glyphId, bool32 isJapanese);
+u32 GetFontIdToFit(const u8 *string, u32 widestFontId, u32 letterSpacing, u32 widthPx);
+u8 *PrependFontIdToFit(u8 *start, u8 *end, u32 fontId, u32 width);
+u8 *WrapFontIdToFit(u8 *start, u8 *end, u32 fontId, u32 width);
+
#endif // GUARD_TEXT_H
diff --git a/gflib/window.c b/gflib/window.c
index 61264000ea35..5e77283945b5 100644
--- a/gflib/window.c
+++ b/gflib/window.c
@@ -712,3 +712,13 @@ static u32 GetNumActiveWindowsOnBg8Bit(u32 bgId)
}
return windowsNum;
}
+
+u32 WindowWidthPx(u32 windowId)
+{
+ return gWindows[windowId].window.width * TILE_WIDTH;
+}
+
+u32 WindowTemplateWidthPx(const struct WindowTemplate *template)
+{
+ return template->width * TILE_WIDTH;
+}
diff --git a/gflib/window.h b/gflib/window.h
index 85e385cb9f87..2fd0bddb20cc 100644
--- a/gflib/window.h
+++ b/gflib/window.h
@@ -73,6 +73,8 @@ void FillWindowPixelBuffer8Bit(u32 windowId, u8 fillValue);
void FillWindowPixelRect8Bit(u32 windowId, u8 fillValue, u16 x, u16 y, u16 width, u16 height);
void BlitBitmapRectToWindow4BitTo8Bit(u32 windowId, const u8 *pixels, u16 srcX, u16 srcY, u16 srcWidth, int srcHeight, u16 destX, u16 destY, u16 rectWidth, u16 rectHeight, u8 paletteNum);
void CopyWindowToVram8Bit(u32 windowId, u8 mode);
+u32 WindowWidthPx(u32 windowId);
+u32 WindowTemplateWidthPx(const struct WindowTemplate *template);
extern struct Window gWindows[];
extern void *gWindowBgTilemapBuffers[];
diff --git a/graphics/battle_anims/sprites/beam.png b/graphics/battle_anims/sprites/beam.png
new file mode 100644
index 000000000000..cce0a23a4c29
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 000000000000..014c7bd445de
Binary files /dev/null and b/graphics/battle_anims/sprites/blood_moon.png differ
diff --git a/graphics/battle_anims/sprites/cudgel.png b/graphics/battle_anims/sprites/cudgel.png
new file mode 100644
index 000000000000..a43b450adc55
Binary files /dev/null and b/graphics/battle_anims/sprites/cudgel.png differ
diff --git a/graphics/battle_anims/sprites/dreepy_missile.pal b/graphics/battle_anims/sprites/dreepy_missile.pal
new file mode 100644
index 000000000000..906cfa8a2460
--- /dev/null
+++ b/graphics/battle_anims/sprites/dreepy_missile.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 217 234
+254 87 103
+77 119 117
+62 67 67
+170 237 211
+138 189 179
+121 163 146
+77 119 117
+251 234 137
+195 97 109
+78 52 54
+222 214 198
+173 146 118
+151 135 135
+122 105 94
+0 4 1
diff --git a/graphics/battle_anims/sprites/dreepy_missile.png b/graphics/battle_anims/sprites/dreepy_missile.png
index 73fe2d2f2144..49333681cf21 100644
Binary files a/graphics/battle_anims/sprites/dreepy_missile.png and b/graphics/battle_anims/sprites/dreepy_missile.png differ
diff --git a/graphics/battle_anims/sprites/dreepy_missile_shiny.pal b/graphics/battle_anims/sprites/dreepy_missile_shiny.pal
new file mode 100644
index 000000000000..718b2d240007
--- /dev/null
+++ b/graphics/battle_anims/sprites/dreepy_missile_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 217 234
+222 223 109
+77 119 117
+62 67 67
+170 237 211
+138 189 179
+77 171 225
+53 110 226
+251 234 137
+195 97 109
+78 52 54
+222 214 198
+173 146 118
+151 135 135
+122 105 94
+0 4 1
diff --git a/graphics/battle_anims/sprites/purple_chain.png b/graphics/battle_anims/sprites/purple_chain.png
new file mode 100644
index 000000000000..8c46b34aeb97
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 000000000000..2c974db5c974
Binary files /dev/null and b/graphics/battle_anims/sprites/red_explosion.png differ
diff --git a/graphics/battle_anims/sprites/tera_crystal.png b/graphics/battle_anims/sprites/tera_crystal.png
new file mode 100644
index 000000000000..e1c406a744a3
Binary files /dev/null and b/graphics/battle_anims/sprites/tera_crystal.png differ
diff --git a/graphics/battle_anims/sprites/tera_shatter.png b/graphics/battle_anims/sprites/tera_shatter.png
new file mode 100644
index 000000000000..c3f698b9d475
Binary files /dev/null and b/graphics/battle_anims/sprites/tera_shatter.png differ
diff --git a/graphics/battle_interface/bug_indicator.png b/graphics/battle_interface/bug_indicator.png
new file mode 100644
index 000000000000..7ab7dc6dfa37
Binary files /dev/null and b/graphics/battle_interface/bug_indicator.png differ
diff --git a/graphics/battle_interface/burst_trigger.png b/graphics/battle_interface/burst_trigger.png
index e3eb6384d4b4..bbd16ac5553f 100644
Binary files a/graphics/battle_interface/burst_trigger.png and b/graphics/battle_interface/burst_trigger.png differ
diff --git a/graphics/battle_interface/dark_indicator.png b/graphics/battle_interface/dark_indicator.png
new file mode 100644
index 000000000000..149d2155a397
Binary files /dev/null and b/graphics/battle_interface/dark_indicator.png differ
diff --git a/graphics/battle_interface/dragon_indicator.png b/graphics/battle_interface/dragon_indicator.png
new file mode 100644
index 000000000000..4c1d9e1f785a
Binary files /dev/null and b/graphics/battle_interface/dragon_indicator.png differ
diff --git a/graphics/battle_interface/electric_indicator.png b/graphics/battle_interface/electric_indicator.png
new file mode 100644
index 000000000000..518907dc05fc
Binary files /dev/null and b/graphics/battle_interface/electric_indicator.png differ
diff --git a/graphics/battle_interface/fairy_indicator.png b/graphics/battle_interface/fairy_indicator.png
new file mode 100644
index 000000000000..a41736eeec85
Binary files /dev/null and b/graphics/battle_interface/fairy_indicator.png differ
diff --git a/graphics/battle_interface/fighting_indicator.png b/graphics/battle_interface/fighting_indicator.png
new file mode 100644
index 000000000000..6102ab68465b
Binary files /dev/null and b/graphics/battle_interface/fighting_indicator.png differ
diff --git a/graphics/battle_interface/fire_indicator.png b/graphics/battle_interface/fire_indicator.png
new file mode 100644
index 000000000000..4d3e59d543ac
Binary files /dev/null and b/graphics/battle_interface/fire_indicator.png differ
diff --git a/graphics/battle_interface/flying_indicator.png b/graphics/battle_interface/flying_indicator.png
new file mode 100644
index 000000000000..767954b70633
Binary files /dev/null and b/graphics/battle_interface/flying_indicator.png differ
diff --git a/graphics/battle_interface/ghost_indicator.png b/graphics/battle_interface/ghost_indicator.png
new file mode 100644
index 000000000000..c1aeec6059ff
Binary files /dev/null and b/graphics/battle_interface/ghost_indicator.png differ
diff --git a/graphics/battle_interface/grass_indicator.png b/graphics/battle_interface/grass_indicator.png
new file mode 100644
index 000000000000..81fa2589d0da
Binary files /dev/null and b/graphics/battle_interface/grass_indicator.png differ
diff --git a/graphics/battle_interface/ground_indicator.png b/graphics/battle_interface/ground_indicator.png
new file mode 100644
index 000000000000..7a306510fe75
Binary files /dev/null and b/graphics/battle_interface/ground_indicator.png differ
diff --git a/graphics/battle_interface/ice_indicator.png b/graphics/battle_interface/ice_indicator.png
new file mode 100644
index 000000000000..a40d96f01831
Binary files /dev/null and b/graphics/battle_interface/ice_indicator.png differ
diff --git a/graphics/battle_interface/normal_indicator.png b/graphics/battle_interface/normal_indicator.png
new file mode 100644
index 000000000000..029827e2962b
Binary files /dev/null and b/graphics/battle_interface/normal_indicator.png differ
diff --git a/graphics/battle_interface/poison_indicator.png b/graphics/battle_interface/poison_indicator.png
new file mode 100644
index 000000000000..c2646d0a71b5
Binary files /dev/null and b/graphics/battle_interface/poison_indicator.png differ
diff --git a/graphics/battle_interface/psychic_indicator.png b/graphics/battle_interface/psychic_indicator.png
new file mode 100644
index 000000000000..f70352d2ee8f
Binary files /dev/null and b/graphics/battle_interface/psychic_indicator.png differ
diff --git a/graphics/battle_interface/rock_indicator.png b/graphics/battle_interface/rock_indicator.png
new file mode 100644
index 000000000000..0329ec678cd1
Binary files /dev/null and b/graphics/battle_interface/rock_indicator.png differ
diff --git a/graphics/battle_interface/steel_indicator.png b/graphics/battle_interface/steel_indicator.png
new file mode 100644
index 000000000000..e84d9fa1b0c5
Binary files /dev/null and b/graphics/battle_interface/steel_indicator.png differ
diff --git a/graphics/battle_interface/stellar_indicator.png b/graphics/battle_interface/stellar_indicator.png
new file mode 100644
index 000000000000..7551e2b2305a
Binary files /dev/null and b/graphics/battle_interface/stellar_indicator.png differ
diff --git a/graphics/battle_interface/tera_indicator.pal b/graphics/battle_interface/tera_indicator.pal
new file mode 100644
index 000000000000..d4ab14047263
--- /dev/null
+++ b/graphics/battle_interface/tera_indicator.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+98 83 124
+207 63 109
+83 105 175
+80 144 216
+216 208 179
+254 115 121
+148 155 163
+99 188 91
+147 192 47
+255 156 85
+199 182 140
+113 206 198
+117 206 192
+245 210 55
+255 255 255
diff --git a/graphics/battle_interface/tera_trigger.png b/graphics/battle_interface/tera_trigger.png
new file mode 100644
index 000000000000..5498ea8806cf
Binary files /dev/null and b/graphics/battle_interface/tera_trigger.png differ
diff --git a/graphics/battle_interface/water_indicator.png b/graphics/battle_interface/water_indicator.png
new file mode 100644
index 000000000000..bdeb401f4abe
Binary files /dev/null and b/graphics/battle_interface/water_indicator.png differ
diff --git a/graphics/battle_interface/z_move_trigger.png b/graphics/battle_interface/z_move_trigger.png
index d719494d9f0a..7d5fbaba0f6b 100644
Binary files a/graphics/battle_interface/z_move_trigger.png and b/graphics/battle_interface/z_move_trigger.png differ
diff --git a/graphics/field_effects/pics/bug_tracks.png b/graphics/field_effects/pics/bug_tracks.png
new file mode 100644
index 000000000000..b7062d253f68
Binary files /dev/null and b/graphics/field_effects/pics/bug_tracks.png differ
diff --git a/graphics/field_effects/pics/shadow_extra_large.png b/graphics/field_effects/pics/shadow_extra_large.png
index 765a5291a8d9..eb334a976c59 100644
Binary files a/graphics/field_effects/pics/shadow_extra_large.png and b/graphics/field_effects/pics/shadow_extra_large.png differ
diff --git a/graphics/field_effects/pics/shadow_large.png b/graphics/field_effects/pics/shadow_large.png
index e917823b05cd..1695208af543 100644
Binary files a/graphics/field_effects/pics/shadow_large.png and b/graphics/field_effects/pics/shadow_large.png differ
diff --git a/graphics/field_effects/pics/shadow_medium.png b/graphics/field_effects/pics/shadow_medium.png
index 83ab6e1f6e1e..4327a053d2f4 100644
Binary files a/graphics/field_effects/pics/shadow_medium.png and b/graphics/field_effects/pics/shadow_medium.png differ
diff --git a/graphics/field_effects/pics/shadow_small.png b/graphics/field_effects/pics/shadow_small.png
index f5feada2b966..6cd37c5f23a5 100644
Binary files a/graphics/field_effects/pics/shadow_small.png and b/graphics/field_effects/pics/shadow_small.png differ
diff --git a/graphics/field_effects/pics/slither_tracks.png b/graphics/field_effects/pics/slither_tracks.png
new file mode 100644
index 000000000000..7c8247c344aa
Binary files /dev/null and b/graphics/field_effects/pics/slither_tracks.png differ
diff --git a/graphics/field_effects/pics/spot_tracks.png b/graphics/field_effects/pics/spot_tracks.png
new file mode 100644
index 000000000000..cd8c9c0cf4ba
Binary files /dev/null and b/graphics/field_effects/pics/spot_tracks.png differ
diff --git a/graphics/fonts/latin_narrower.png b/graphics/fonts/latin_narrower.png
new file mode 100644
index 000000000000..22847ef09953
Binary files /dev/null and b/graphics/fonts/latin_narrower.png differ
diff --git a/graphics/fonts/latin_short_narrow.png b/graphics/fonts/latin_short_narrow.png
new file mode 100644
index 000000000000..cf48712719ac
Binary files /dev/null and b/graphics/fonts/latin_short_narrow.png differ
diff --git a/graphics/fonts/latin_small_narrower.png b/graphics/fonts/latin_small_narrower.png
new file mode 100644
index 000000000000..a183bed7cc28
Binary files /dev/null and b/graphics/fonts/latin_small_narrower.png differ
diff --git a/graphics/map_popup/bw/black.pal b/graphics/map_popup/bw/black.pal
new file mode 100644
index 000000000000..ef4da4d29cfe
--- /dev/null
+++ b/graphics/map_popup/bw/black.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+0 0 0
+255 255 255
+84 85 89
+0 0 0
+238 230 238
+189 180 197
+139 139 164
+90 90 123
+41 49 90
+27 27 27
+40 40 40
+51 51 51
+62 62 62
+0 0 0
+0 0 0
diff --git a/graphics/map_popup/bw/bw_primary.png b/graphics/map_popup/bw/bw_primary.png
new file mode 100644
index 000000000000..9dd681ff0abb
Binary files /dev/null and b/graphics/map_popup/bw/bw_primary.png differ
diff --git a/graphics/map_popup/bw/bw_secondary.png b/graphics/map_popup/bw/bw_secondary.png
new file mode 100644
index 000000000000..b63ce95311a8
Binary files /dev/null and b/graphics/map_popup/bw/bw_secondary.png differ
diff --git a/graphics/map_popup/bw/white.pal b/graphics/map_popup/bw/white.pal
new file mode 100644
index 000000000000..8706c80d4e0b
--- /dev/null
+++ b/graphics/map_popup/bw/white.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+255 255 255
+0 0 0
+158 158 158
+0 0 0
+238 230 238
+189 180 197
+139 139 164
+90 90 123
+41 49 90
+228 228 228
+215 215 215
+204 204 204
+193 193 193
+0 0 0
+0 0 0
diff --git a/graphics/misc/emotes.pal b/graphics/misc/emotes.pal
new file mode 100644
index 000000000000..295fc0223784
--- /dev/null
+++ b/graphics/misc/emotes.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 0
+151 48 0
+74 75 87
+88 88 97
+164 72 167
+248 63 2
+78 128 207
+48 160 0
+237 131 0
+205 144 203
+168 168 178
+251 167 159
+240 176 183
+219 181 221
+165 225 69
+247 249 246
diff --git a/graphics/misc/emotes.png b/graphics/misc/emotes.png
new file mode 100644
index 000000000000..2460eaf999a8
Binary files /dev/null and b/graphics/misc/emotes.png differ
diff --git a/graphics/object_events/pics/misc/ball_beast.png b/graphics/object_events/pics/misc/ball_beast.png
new file mode 100644
index 000000000000..f3733d11aec1
Binary files /dev/null and b/graphics/object_events/pics/misc/ball_beast.png differ
diff --git a/graphics/object_events/pics/misc/ball_cherish.png b/graphics/object_events/pics/misc/ball_cherish.png
new file mode 100644
index 000000000000..a93cab30c5bc
Binary files /dev/null and b/graphics/object_events/pics/misc/ball_cherish.png differ
diff --git a/graphics/object_events/pics/misc/ball_dive.png b/graphics/object_events/pics/misc/ball_dive.png
new file mode 100644
index 000000000000..1349ffa3ff04
Binary files /dev/null and b/graphics/object_events/pics/misc/ball_dive.png differ
diff --git a/graphics/object_events/pics/misc/ball_dream.png b/graphics/object_events/pics/misc/ball_dream.png
new file mode 100644
index 000000000000..875e72a702f8
Binary files /dev/null and b/graphics/object_events/pics/misc/ball_dream.png differ
diff --git a/graphics/object_events/pics/misc/ball_dusk.png b/graphics/object_events/pics/misc/ball_dusk.png
new file mode 100644
index 000000000000..824557003d5b
Binary files /dev/null and b/graphics/object_events/pics/misc/ball_dusk.png differ
diff --git a/graphics/object_events/pics/misc/ball_fast.png b/graphics/object_events/pics/misc/ball_fast.png
new file mode 100644
index 000000000000..3e3ca467ea07
Binary files /dev/null and b/graphics/object_events/pics/misc/ball_fast.png differ
diff --git a/graphics/object_events/pics/misc/ball_friend.png b/graphics/object_events/pics/misc/ball_friend.png
new file mode 100644
index 000000000000..f22d7f78a28f
Binary files /dev/null and b/graphics/object_events/pics/misc/ball_friend.png differ
diff --git a/graphics/object_events/pics/misc/ball_great.png b/graphics/object_events/pics/misc/ball_great.png
new file mode 100644
index 000000000000..5a70a505fefb
Binary files /dev/null and b/graphics/object_events/pics/misc/ball_great.png differ
diff --git a/graphics/object_events/pics/misc/ball_heal.png b/graphics/object_events/pics/misc/ball_heal.png
new file mode 100644
index 000000000000..bcb2272e51de
Binary files /dev/null and b/graphics/object_events/pics/misc/ball_heal.png differ
diff --git a/graphics/object_events/pics/misc/ball_heavy.png b/graphics/object_events/pics/misc/ball_heavy.png
new file mode 100644
index 000000000000..5b2841069425
Binary files /dev/null and b/graphics/object_events/pics/misc/ball_heavy.png differ
diff --git a/graphics/object_events/pics/misc/ball_level.png b/graphics/object_events/pics/misc/ball_level.png
new file mode 100644
index 000000000000..9050ad5588c3
Binary files /dev/null and b/graphics/object_events/pics/misc/ball_level.png differ
diff --git a/graphics/object_events/pics/misc/ball_love.png b/graphics/object_events/pics/misc/ball_love.png
new file mode 100644
index 000000000000..9584b6c797d9
Binary files /dev/null and b/graphics/object_events/pics/misc/ball_love.png differ
diff --git a/graphics/object_events/pics/misc/ball_lure.png b/graphics/object_events/pics/misc/ball_lure.png
new file mode 100644
index 000000000000..f3f6c1ffd9d0
Binary files /dev/null and b/graphics/object_events/pics/misc/ball_lure.png differ
diff --git a/graphics/object_events/pics/misc/ball_luxury.png b/graphics/object_events/pics/misc/ball_luxury.png
new file mode 100644
index 000000000000..f04e816cb305
Binary files /dev/null and b/graphics/object_events/pics/misc/ball_luxury.png differ
diff --git a/graphics/object_events/pics/misc/ball_master.png b/graphics/object_events/pics/misc/ball_master.png
new file mode 100644
index 000000000000..1db9b71fba8e
Binary files /dev/null and b/graphics/object_events/pics/misc/ball_master.png differ
diff --git a/graphics/object_events/pics/misc/ball_moon.png b/graphics/object_events/pics/misc/ball_moon.png
new file mode 100644
index 000000000000..f13f34e769f5
Binary files /dev/null and b/graphics/object_events/pics/misc/ball_moon.png differ
diff --git a/graphics/object_events/pics/misc/ball_nest.png b/graphics/object_events/pics/misc/ball_nest.png
new file mode 100644
index 000000000000..48a409183b17
Binary files /dev/null and b/graphics/object_events/pics/misc/ball_nest.png differ
diff --git a/graphics/object_events/pics/misc/ball_net.png b/graphics/object_events/pics/misc/ball_net.png
new file mode 100644
index 000000000000..186d76650e14
Binary files /dev/null and b/graphics/object_events/pics/misc/ball_net.png differ
diff --git a/graphics/object_events/pics/misc/ball_park.png b/graphics/object_events/pics/misc/ball_park.png
new file mode 100644
index 000000000000..5cc3f1a9b0f4
Binary files /dev/null and b/graphics/object_events/pics/misc/ball_park.png differ
diff --git a/graphics/object_events/pics/misc/ball_poke.png b/graphics/object_events/pics/misc/ball_poke.png
new file mode 100644
index 000000000000..03216113ba99
Binary files /dev/null and b/graphics/object_events/pics/misc/ball_poke.png differ
diff --git a/graphics/object_events/pics/misc/ball_premier.png b/graphics/object_events/pics/misc/ball_premier.png
new file mode 100644
index 000000000000..8876cfe22da3
Binary files /dev/null and b/graphics/object_events/pics/misc/ball_premier.png differ
diff --git a/graphics/object_events/pics/misc/ball_quick.png b/graphics/object_events/pics/misc/ball_quick.png
new file mode 100644
index 000000000000..0f6c64b1b1b3
Binary files /dev/null and b/graphics/object_events/pics/misc/ball_quick.png differ
diff --git a/graphics/object_events/pics/misc/ball_repeat.png b/graphics/object_events/pics/misc/ball_repeat.png
new file mode 100644
index 000000000000..36186b094c5f
Binary files /dev/null and b/graphics/object_events/pics/misc/ball_repeat.png differ
diff --git a/graphics/object_events/pics/misc/ball_safari.png b/graphics/object_events/pics/misc/ball_safari.png
new file mode 100644
index 000000000000..f73846a9b82a
Binary files /dev/null and b/graphics/object_events/pics/misc/ball_safari.png differ
diff --git a/graphics/object_events/pics/misc/ball_sport.png b/graphics/object_events/pics/misc/ball_sport.png
new file mode 100644
index 000000000000..1c32d2609ce4
Binary files /dev/null and b/graphics/object_events/pics/misc/ball_sport.png differ
diff --git a/graphics/object_events/pics/misc/ball_strange.png b/graphics/object_events/pics/misc/ball_strange.png
new file mode 100644
index 000000000000..ee09679dc225
Binary files /dev/null and b/graphics/object_events/pics/misc/ball_strange.png differ
diff --git a/graphics/object_events/pics/misc/ball_timer.png b/graphics/object_events/pics/misc/ball_timer.png
new file mode 100644
index 000000000000..878d6ea5ba1c
Binary files /dev/null and b/graphics/object_events/pics/misc/ball_timer.png differ
diff --git a/graphics/object_events/pics/misc/ball_ultra.png b/graphics/object_events/pics/misc/ball_ultra.png
new file mode 100644
index 000000000000..171281666fc5
Binary files /dev/null and b/graphics/object_events/pics/misc/ball_ultra.png differ
diff --git a/graphics/object_events/pics/misc/item_ball.png b/graphics/object_events/pics/misc/item_ball.png
deleted file mode 100644
index ef02e158c99b..000000000000
Binary files a/graphics/object_events/pics/misc/item_ball.png and /dev/null differ
diff --git a/graphics/object_events/pics/misc/light.png b/graphics/object_events/pics/misc/light.png
new file mode 100644
index 000000000000..d1a0402d102c
Binary files /dev/null and b/graphics/object_events/pics/misc/light.png differ
diff --git a/graphics/object_events/pics/pokemon/azumarill.png b/graphics/object_events/pics/pokemon_old/azumarill.png
similarity index 100%
rename from graphics/object_events/pics/pokemon/azumarill.png
rename to graphics/object_events/pics/pokemon_old/azumarill.png
diff --git a/graphics/object_events/pics/pokemon/azurill.png b/graphics/object_events/pics/pokemon_old/azurill.png
similarity index 100%
rename from graphics/object_events/pics/pokemon/azurill.png
rename to graphics/object_events/pics/pokemon_old/azurill.png
diff --git a/graphics/object_events/pics/pokemon/deoxys.png b/graphics/object_events/pics/pokemon_old/deoxys.png
similarity index 100%
rename from graphics/object_events/pics/pokemon/deoxys.png
rename to graphics/object_events/pics/pokemon_old/deoxys.png
diff --git a/graphics/object_events/pics/pokemon/dusclops.png b/graphics/object_events/pics/pokemon_old/dusclops.png
similarity index 100%
rename from graphics/object_events/pics/pokemon/dusclops.png
rename to graphics/object_events/pics/pokemon_old/dusclops.png
diff --git a/graphics/object_events/pics/pokemon/enemy_zigzagoon.png b/graphics/object_events/pics/pokemon_old/enemy_zigzagoon.png
similarity index 100%
rename from graphics/object_events/pics/pokemon/enemy_zigzagoon.png
rename to graphics/object_events/pics/pokemon_old/enemy_zigzagoon.png
diff --git a/graphics/object_events/pics/pokemon/groudon.png b/graphics/object_events/pics/pokemon_old/groudon.png
similarity index 100%
rename from graphics/object_events/pics/pokemon/groudon.png
rename to graphics/object_events/pics/pokemon_old/groudon.png
diff --git a/graphics/object_events/pics/pokemon/ho_oh.png b/graphics/object_events/pics/pokemon_old/ho_oh.png
similarity index 100%
rename from graphics/object_events/pics/pokemon/ho_oh.png
rename to graphics/object_events/pics/pokemon_old/ho_oh.png
diff --git a/graphics/object_events/pics/pokemon/kecleon.png b/graphics/object_events/pics/pokemon_old/kecleon.png
similarity index 100%
rename from graphics/object_events/pics/pokemon/kecleon.png
rename to graphics/object_events/pics/pokemon_old/kecleon.png
diff --git a/graphics/object_events/pics/pokemon/kirlia.png b/graphics/object_events/pics/pokemon_old/kirlia.png
similarity index 100%
rename from graphics/object_events/pics/pokemon/kirlia.png
rename to graphics/object_events/pics/pokemon_old/kirlia.png
diff --git a/graphics/object_events/pics/pokemon/kyogre.png b/graphics/object_events/pics/pokemon_old/kyogre.png
similarity index 100%
rename from graphics/object_events/pics/pokemon/kyogre.png
rename to graphics/object_events/pics/pokemon_old/kyogre.png
diff --git a/graphics/object_events/pics/pokemon/latias_latios.png b/graphics/object_events/pics/pokemon_old/latias_latios.png
similarity index 100%
rename from graphics/object_events/pics/pokemon/latias_latios.png
rename to graphics/object_events/pics/pokemon_old/latias_latios.png
diff --git a/graphics/object_events/pics/pokemon/lugia.png b/graphics/object_events/pics/pokemon_old/lugia.png
similarity index 100%
rename from graphics/object_events/pics/pokemon/lugia.png
rename to graphics/object_events/pics/pokemon_old/lugia.png
diff --git a/graphics/object_events/pics/pokemon/mew.png b/graphics/object_events/pics/pokemon_old/mew.png
similarity index 100%
rename from graphics/object_events/pics/pokemon/mew.png
rename to graphics/object_events/pics/pokemon_old/mew.png
diff --git a/graphics/object_events/pics/pokemon/pikachu.png b/graphics/object_events/pics/pokemon_old/pikachu.png
similarity index 100%
rename from graphics/object_events/pics/pokemon/pikachu.png
rename to graphics/object_events/pics/pokemon_old/pikachu.png
diff --git a/graphics/object_events/pics/pokemon/poochyena.png b/graphics/object_events/pics/pokemon_old/poochyena.png
similarity index 100%
rename from graphics/object_events/pics/pokemon/poochyena.png
rename to graphics/object_events/pics/pokemon_old/poochyena.png
diff --git a/graphics/object_events/pics/pokemon/rayquaza.png b/graphics/object_events/pics/pokemon_old/rayquaza_cutscene.png
similarity index 100%
rename from graphics/object_events/pics/pokemon/rayquaza.png
rename to graphics/object_events/pics/pokemon_old/rayquaza_cutscene.png
diff --git a/graphics/object_events/pics/pokemon/rayquaza_still.png b/graphics/object_events/pics/pokemon_old/rayquaza_still.png
similarity index 100%
rename from graphics/object_events/pics/pokemon/rayquaza_still.png
rename to graphics/object_events/pics/pokemon_old/rayquaza_still.png
diff --git a/graphics/object_events/pics/pokemon/regi.png b/graphics/object_events/pics/pokemon_old/regi.png
similarity index 100%
rename from graphics/object_events/pics/pokemon/regi.png
rename to graphics/object_events/pics/pokemon_old/regi.png
diff --git a/graphics/object_events/pics/pokemon/skitty.png b/graphics/object_events/pics/pokemon_old/skitty.png
similarity index 100%
rename from graphics/object_events/pics/pokemon/skitty.png
rename to graphics/object_events/pics/pokemon_old/skitty.png
diff --git a/graphics/object_events/pics/pokemon_old/substitute.png b/graphics/object_events/pics/pokemon_old/substitute.png
new file mode 100644
index 000000000000..6be1e2ddcb7c
Binary files /dev/null and b/graphics/object_events/pics/pokemon_old/substitute.png differ
diff --git a/graphics/object_events/pics/pokemon/sudowoodo.png b/graphics/object_events/pics/pokemon_old/sudowoodo_tree.png
similarity index 100%
rename from graphics/object_events/pics/pokemon/sudowoodo.png
rename to graphics/object_events/pics/pokemon_old/sudowoodo_tree.png
diff --git a/graphics/object_events/pics/pokemon/vigoroth.png b/graphics/object_events/pics/pokemon_old/vigoroth_mover.png
similarity index 100%
rename from graphics/object_events/pics/pokemon/vigoroth.png
rename to graphics/object_events/pics/pokemon_old/vigoroth_mover.png
diff --git a/graphics/object_events/pics/pokemon/wingull.png b/graphics/object_events/pics/pokemon_old/wingull.png
similarity index 100%
rename from graphics/object_events/pics/pokemon/wingull.png
rename to graphics/object_events/pics/pokemon_old/wingull.png
diff --git a/graphics/object_events/pics/pokemon/zigzagoon.png b/graphics/object_events/pics/pokemon_old/zigzagoon.png
similarity index 100%
rename from graphics/object_events/pics/pokemon/zigzagoon.png
rename to graphics/object_events/pics/pokemon_old/zigzagoon.png
diff --git a/graphics/pokemon/abomasnow/overworld.png b/graphics/pokemon/abomasnow/overworld.png
new file mode 100644
index 000000000000..8683a92d6bfb
Binary files /dev/null and b/graphics/pokemon/abomasnow/overworld.png differ
diff --git a/graphics/pokemon/abomasnow/overworld_normal.pal b/graphics/pokemon/abomasnow/overworld_normal.pal
new file mode 100644
index 000000000000..4897648297e9
--- /dev/null
+++ b/graphics/pokemon/abomasnow/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 80 80
+0 0 0
+232 232 248
+120 120 152
+184 192 208
+216 216 232
+160 168 200
+48 120 64
+144 120 152
+48 72 56
+192 136 208
+48 152 72
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/abomasnow/overworld_shiny.pal b/graphics/pokemon/abomasnow/overworld_shiny.pal
new file mode 100644
index 000000000000..821bfd7b4d19
--- /dev/null
+++ b/graphics/pokemon/abomasnow/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 80 80
+0 0 0
+232 232 248
+120 120 152
+184 192 208
+216 216 232
+160 168 200
+48 96 120
+144 120 152
+40 56 88
+192 136 208
+48 128 152
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/abra/overworld.png b/graphics/pokemon/abra/overworld.png
new file mode 100644
index 000000000000..d1bbbae17cee
Binary files /dev/null and b/graphics/pokemon/abra/overworld.png differ
diff --git a/graphics/pokemon/abra/overworld_normal.pal b/graphics/pokemon/abra/overworld_normal.pal
new file mode 100644
index 000000000000..15a18286c03c
--- /dev/null
+++ b/graphics/pokemon/abra/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 56 24
+0 0 0
+184 152 40
+248 216 96
+144 120 96
+120 96 56
+0 0 0
+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/abra/overworld_shiny.pal b/graphics/pokemon/abra/overworld_shiny.pal
new file mode 100644
index 000000000000..7c7f962e4c55
--- /dev/null
+++ b/graphics/pokemon/abra/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 72 32
+0 0 0
+216 184 112
+248 224 160
+168 144 128
+160 128 72
+0 0 0
+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/absol/mega/front.png b/graphics/pokemon/absol/mega/front.png
index e7656154da2a..bc89ac2de0f1 100644
Binary files a/graphics/pokemon/absol/mega/front.png and b/graphics/pokemon/absol/mega/front.png differ
diff --git a/graphics/pokemon/absol/overworld.png b/graphics/pokemon/absol/overworld.png
new file mode 100644
index 000000000000..3d6c0269e596
Binary files /dev/null and b/graphics/pokemon/absol/overworld.png differ
diff --git a/graphics/pokemon/absol/overworld_normal.pal b/graphics/pokemon/absol/overworld_normal.pal
new file mode 100644
index 000000000000..863d0a3a2066
--- /dev/null
+++ b/graphics/pokemon/absol/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+64 72 88
+96 104 128
+40 48 64
+120 128 160
+64 72 96
+40 48 64
+232 232 248
+120 128 160
+208 216 232
+176 184 200
+64 72 88
+128 32 32
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/absol/overworld_shiny.pal b/graphics/pokemon/absol/overworld_shiny.pal
new file mode 100644
index 000000000000..267ac973f754
--- /dev/null
+++ b/graphics/pokemon/absol/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+136 40 48
+192 56 56
+72 32 40
+240 88 88
+64 72 96
+40 48 64
+232 232 248
+120 128 160
+208 216 232
+176 184 200
+64 72 88
+40 200 192
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/accelgor/overworld.png b/graphics/pokemon/accelgor/overworld.png
new file mode 100644
index 000000000000..7668a9bc7af1
Binary files /dev/null and b/graphics/pokemon/accelgor/overworld.png differ
diff --git a/graphics/pokemon/accelgor/overworld_normal.pal b/graphics/pokemon/accelgor/overworld_normal.pal
new file mode 100644
index 000000000000..f50cf40eeae6
--- /dev/null
+++ b/graphics/pokemon/accelgor/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+117 25 54
+220 54 117
+54 185 54
+0 0 0
+185 54 117
+85 85 117
+85 117 185
+246 246 246
+220 54 117
+25 54 117
+117 25 54
+185 54 117
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/accelgor/overworld_shiny.pal b/graphics/pokemon/accelgor/overworld_shiny.pal
new file mode 100644
index 000000000000..12a1c7cfb534
--- /dev/null
+++ b/graphics/pokemon/accelgor/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 40 24
+240 184 72
+248 72 120
+0 0 0
+176 128 40
+80 80 80
+128 128 128
+246 246 246
+220 54 117
+48 48 48
+117 25 54
+185 54 117
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/aegislash/overworld.png b/graphics/pokemon/aegislash/overworld.png
new file mode 100644
index 000000000000..d77edf68c123
Binary files /dev/null and b/graphics/pokemon/aegislash/overworld.png differ
diff --git a/graphics/pokemon/aegislash/overworld_normal.pal b/graphics/pokemon/aegislash/overworld_normal.pal
new file mode 100644
index 000000000000..8be680eb4e27
--- /dev/null
+++ b/graphics/pokemon/aegislash/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+101 95 56
+230 213 104
+160 149 83
+78 76 77
+173 140 220
+185 169 137
+132 123 107
+230 228 212
+56 50 68
+105 91 133
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/aegislash/overworld_shiny.pal b/graphics/pokemon/aegislash/overworld_shiny.pal
new file mode 100644
index 000000000000..5f7756585c7e
--- /dev/null
+++ b/graphics/pokemon/aegislash/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+79 77 78
+208 207 205
+147 146 143
+79 77 78
+219 199 75
+172 56 54
+166 153 69
+208 207 205
+79 77 78
+166 153 69
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/aerodactyl/mega/front.png b/graphics/pokemon/aerodactyl/mega/front.png
index 86d51181f0f9..c581404a89f6 100644
Binary files a/graphics/pokemon/aerodactyl/mega/front.png and b/graphics/pokemon/aerodactyl/mega/front.png differ
diff --git a/graphics/pokemon/aerodactyl/overworld.png b/graphics/pokemon/aerodactyl/overworld.png
new file mode 100644
index 000000000000..78e3e13bbc47
Binary files /dev/null and b/graphics/pokemon/aerodactyl/overworld.png differ
diff --git a/graphics/pokemon/aerodactyl/overworld_normal.pal b/graphics/pokemon/aerodactyl/overworld_normal.pal
new file mode 100644
index 000000000000..17f2adc12400
--- /dev/null
+++ b/graphics/pokemon/aerodactyl/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 64 96
+0 0 0
+128 112 176
+144 136 200
+176 176 224
+184 136 192
+128 88 128
+200 200 208
+232 232 248
+96 16 16
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/aerodactyl/overworld_shiny.pal b/graphics/pokemon/aerodactyl/overworld_shiny.pal
new file mode 100644
index 000000000000..04475bec2835
--- /dev/null
+++ b/graphics/pokemon/aerodactyl/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 80 96
+0 0 0
+128 104 128
+176 144 184
+200 192 224
+104 184 224
+80 136 232
+200 200 208
+232 232 248
+96 16 16
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/aggron/overworld.png b/graphics/pokemon/aggron/overworld.png
new file mode 100644
index 000000000000..a4f67709464f
Binary files /dev/null and b/graphics/pokemon/aggron/overworld.png differ
diff --git a/graphics/pokemon/aggron/overworld_normal.pal b/graphics/pokemon/aggron/overworld_normal.pal
new file mode 100644
index 000000000000..03296403febc
--- /dev/null
+++ b/graphics/pokemon/aggron/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 40 56
+232 232 248
+176 176 192
+72 64 80
+208 208 216
+128 128 144
+104 96 112
+144 144 152
+0 0 0
+104 144 200
+64 96 128
+208 88 88
+168 56 56
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/aggron/overworld_shiny.pal b/graphics/pokemon/aggron/overworld_shiny.pal
new file mode 100644
index 000000000000..86805ca8cf0a
--- /dev/null
+++ b/graphics/pokemon/aggron/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 56 48
+232 232 248
+176 176 192
+32 88 88
+208 208 216
+88 152 144
+48 128 120
+144 144 152
+0 0 0
+248 72 80
+136 24 40
+208 88 88
+168 56 56
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/aipom/overworld.png b/graphics/pokemon/aipom/overworld.png
new file mode 100644
index 000000000000..90ee83280eae
Binary files /dev/null and b/graphics/pokemon/aipom/overworld.png differ
diff --git a/graphics/pokemon/aipom/overworld_normal.pal b/graphics/pokemon/aipom/overworld_normal.pal
new file mode 100644
index 000000000000..d730b462afd2
--- /dev/null
+++ b/graphics/pokemon/aipom/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 80 64
+224 208 160
+200 176 128
+80 40 112
+168 144 96
+0 0 0
+168 136 200
+136 104 168
+136 112 80
+232 232 248
+136 152 184
+184 200 224
+112 72 144
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/aipom/overworld_shiny.pal b/graphics/pokemon/aipom/overworld_shiny.pal
new file mode 100644
index 000000000000..64a2b5b3df02
--- /dev/null
+++ b/graphics/pokemon/aipom/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 80 64
+224 208 160
+200 176 128
+88 32 80
+168 144 96
+0 0 0
+224 160 224
+184 112 184
+136 112 80
+232 232 248
+136 152 184
+184 200 224
+136 72 128
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/alakazam/overworld.png b/graphics/pokemon/alakazam/overworld.png
new file mode 100644
index 000000000000..31b59e0fb531
Binary files /dev/null and b/graphics/pokemon/alakazam/overworld.png differ
diff --git a/graphics/pokemon/alakazam/overworld_normal.pal b/graphics/pokemon/alakazam/overworld_normal.pal
new file mode 100644
index 000000000000..2a496932872a
--- /dev/null
+++ b/graphics/pokemon/alakazam/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 56 24
+248 216 96
+216 168 48
+144 120 56
+0 0 0
+232 232 248
+144 120 96
+176 176 184
+104 80 56
+248 240 192
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/alakazam/overworld_shiny.pal b/graphics/pokemon/alakazam/overworld_shiny.pal
new file mode 100644
index 000000000000..12277196af3c
--- /dev/null
+++ b/graphics/pokemon/alakazam/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 40 24
+248 200 48
+216 152 48
+144 96 56
+0 0 0
+232 232 248
+160 88 104
+176 176 184
+120 32 72
+248 232 152
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/alcremie/strawberry/overworld.png b/graphics/pokemon/alcremie/strawberry/overworld.png
new file mode 100644
index 000000000000..6387beafd83e
Binary files /dev/null and b/graphics/pokemon/alcremie/strawberry/overworld.png differ
diff --git a/graphics/pokemon/alcremie/strawberry/overworld_normal.pal b/graphics/pokemon/alcremie/strawberry/overworld_normal.pal
new file mode 100644
index 000000000000..600580b16308
--- /dev/null
+++ b/graphics/pokemon/alcremie/strawberry/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+34 177 76
+183 121 128
+0 0 0
+253 228 208
+242 138 149
+138 32 57
+254 114 114
+224 175 187
+183 60 60
+16 16 16
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/alcremie/strawberry/overworld_shiny.pal b/graphics/pokemon/alcremie/strawberry/overworld_shiny.pal
new file mode 100644
index 000000000000..546ccb9d6815
--- /dev/null
+++ b/graphics/pokemon/alcremie/strawberry/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+74 82 74
+0 0 0
+164 172 164
+90 90 98
+139 32 57
+255 115 115
+230 230 230
+180 57 57
+16 16 16
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/alomomola/overworld.png b/graphics/pokemon/alomomola/overworld.png
new file mode 100644
index 000000000000..99439d6814aa
Binary files /dev/null and b/graphics/pokemon/alomomola/overworld.png differ
diff --git a/graphics/pokemon/alomomola/overworld_normal.pal b/graphics/pokemon/alomomola/overworld_normal.pal
new file mode 100644
index 000000000000..0f812c4c1abf
--- /dev/null
+++ b/graphics/pokemon/alomomola/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 56 64
+129 55 87
+255 182 182
+191 79 112
+255 129 164
+245 104 121
+227 129 147
+255 208 227
+255 236 245
+0 33 40
+0 0 0
+0 71 87
+147 129 11
+208 208 47
+0 0 0
diff --git a/graphics/pokemon/alomomola/overworld_shiny.pal b/graphics/pokemon/alomomola/overworld_shiny.pal
new file mode 100644
index 000000000000..2d20876f3307
--- /dev/null
+++ b/graphics/pokemon/alomomola/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 56 64
+112 80 136
+216 192 232
+152 80 160
+184 128 208
+192 120 200
+176 128 216
+232 216 240
+248 248 248
+16 112 32
+0 0 0
+64 184 80
+160 152 8
+208 208 56
+0 0 0
diff --git a/graphics/pokemon/altaria/overworld.png b/graphics/pokemon/altaria/overworld.png
new file mode 100644
index 000000000000..0409738b7c5e
Binary files /dev/null and b/graphics/pokemon/altaria/overworld.png differ
diff --git a/graphics/pokemon/altaria/overworld_normal.pal b/graphics/pokemon/altaria/overworld_normal.pal
new file mode 100644
index 000000000000..94932c48b940
--- /dev/null
+++ b/graphics/pokemon/altaria/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 104 152
+0 64 104
+64 168 216
+0 0 0
+0 32 96
+168 176 192
+112 128 144
+72 80 104
+96 192 232
+208 224 232
+248 248 248
+40 128 168
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/altaria/overworld_shiny.pal b/graphics/pokemon/altaria/overworld_shiny.pal
new file mode 100644
index 000000000000..eae4c8689f76
--- /dev/null
+++ b/graphics/pokemon/altaria/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+136 120 56
+104 80 40
+224 184 88
+0 0 0
+64 56 24
+184 184 144
+120 120 96
+80 72 64
+248 216 120
+232 248 184
+248 248 248
+200 136 48
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/amaura/overworld.png b/graphics/pokemon/amaura/overworld.png
new file mode 100644
index 000000000000..a9e85beda773
Binary files /dev/null and b/graphics/pokemon/amaura/overworld.png differ
diff --git a/graphics/pokemon/amaura/overworld_normal.pal b/graphics/pokemon/amaura/overworld_normal.pal
new file mode 100644
index 000000000000..cd4b4aef8683
--- /dev/null
+++ b/graphics/pokemon/amaura/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+235 125 151
+109 34 27
+158 111 67
+19 56 95
+101 168 207
+147 201 233
+237 226 127
+65 103 143
+167 175 181
+230 238 248
+65 103 143
+147 201 233
+19 56 95
+0 0 0
diff --git a/graphics/pokemon/amaura/overworld_shiny.pal b/graphics/pokemon/amaura/overworld_shiny.pal
new file mode 100644
index 000000000000..b2771aac868e
--- /dev/null
+++ b/graphics/pokemon/amaura/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+229 176 189
+169 110 124
+174 169 122
+114 113 113
+215 215 215
+244 244 244
+242 236 180
+173 172 172
+130 177 213
+230 238 248
+143 219 237
+202 233 240
+97 161 176
+0 0 0
diff --git a/graphics/pokemon/ambipom/overworld.png b/graphics/pokemon/ambipom/overworld.png
new file mode 100644
index 000000000000..f8bcd7489019
Binary files /dev/null and b/graphics/pokemon/ambipom/overworld.png differ
diff --git a/graphics/pokemon/ambipom/overworld_normal.pal b/graphics/pokemon/ambipom/overworld_normal.pal
new file mode 100644
index 000000000000..1138fe1ce73e
--- /dev/null
+++ b/graphics/pokemon/ambipom/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+200 72 104
+96 80 64
+232 216 160
+216 200 144
+160 128 96
+200 176 128
+56 48 96
+152 104 200
+168 128 240
+104 64 152
+184 200 224
+232 232 248
+96 96 96
+0 0 0
diff --git a/graphics/pokemon/ambipom/overworld_shiny.pal b/graphics/pokemon/ambipom/overworld_shiny.pal
new file mode 100644
index 000000000000..da808d6c1734
--- /dev/null
+++ b/graphics/pokemon/ambipom/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+200 72 104
+96 80 64
+232 216 160
+216 200 144
+160 128 96
+200 176 128
+80 40 72
+208 128 168
+216 168 200
+160 64 136
+184 200 224
+232 232 248
+96 96 96
+0 0 0
diff --git a/graphics/pokemon/amoonguss/overworld.png b/graphics/pokemon/amoonguss/overworld.png
new file mode 100644
index 000000000000..b694a64e16f0
Binary files /dev/null and b/graphics/pokemon/amoonguss/overworld.png differ
diff --git a/graphics/pokemon/amoonguss/overworld_normal.pal b/graphics/pokemon/amoonguss/overworld_normal.pal
new file mode 100644
index 000000000000..25b7bd3688f3
--- /dev/null
+++ b/graphics/pokemon/amoonguss/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+98 74 65
+205 197 197
+139 115 90
+222 82 139
+172 49 98
+188 177 177
+198 98 140
+65 49 49
+166 151 151
+210 210 221
+255 172 205
+222 139 164
+156 148 131
+0 0 0
diff --git a/graphics/pokemon/amoonguss/overworld_shiny.pal b/graphics/pokemon/amoonguss/overworld_shiny.pal
new file mode 100644
index 000000000000..015feb8068b7
--- /dev/null
+++ b/graphics/pokemon/amoonguss/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+98 74 65
+208 200 168
+139 115 90
+112 80 216
+80 64 160
+160 152 120
+154 133 228
+65 49 49
+184 184 200
+216 80 136
+168 48 96
+188 177 177
+156 148 131
+0 0 0
diff --git a/graphics/pokemon/ampharos/overworld.png b/graphics/pokemon/ampharos/overworld.png
new file mode 100644
index 000000000000..f5fd21424994
Binary files /dev/null and b/graphics/pokemon/ampharos/overworld.png differ
diff --git a/graphics/pokemon/ampharos/overworld_normal.pal b/graphics/pokemon/ampharos/overworld_normal.pal
new file mode 100644
index 000000000000..6aa9ad55c1df
--- /dev/null
+++ b/graphics/pokemon/ampharos/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 56 64
+104 88 8
+128 24 8
+0 0 0
+112 128 152
+240 208 88
+152 128 24
+232 232 248
+240 88 80
+200 160 32
+80 96 112
+184 56 16
+184 200 224
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/ampharos/overworld_shiny.pal b/graphics/pokemon/ampharos/overworld_shiny.pal
new file mode 100644
index 000000000000..c130ea87db63
--- /dev/null
+++ b/graphics/pokemon/ampharos/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 56 64
+112 48 72
+8 64 96
+0 0 0
+112 128 152
+240 200 216
+152 96 120
+232 232 248
+88 168 224
+200 152 168
+80 96 112
+48 120 160
+184 200 224
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/anorith/overworld.png b/graphics/pokemon/anorith/overworld.png
new file mode 100644
index 000000000000..1391d768d1ac
Binary files /dev/null and b/graphics/pokemon/anorith/overworld.png differ
diff --git a/graphics/pokemon/anorith/overworld_normal.pal b/graphics/pokemon/anorith/overworld_normal.pal
new file mode 100644
index 000000000000..59624f77d7a0
--- /dev/null
+++ b/graphics/pokemon/anorith/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+64 64 72
+48 40 48
+72 112 56
+136 24 56
+200 200 216
+112 152 112
+0 0 0
+168 64 80
+160 160 176
+216 216 232
+104 104 112
+192 112 104
+128 168 120
+232 232 248
+0 0 0
diff --git a/graphics/pokemon/anorith/overworld_shiny.pal b/graphics/pokemon/anorith/overworld_shiny.pal
new file mode 100644
index 000000000000..00a0b5715809
--- /dev/null
+++ b/graphics/pokemon/anorith/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+64 64 72
+48 40 48
+128 104 48
+136 24 56
+200 200 216
+192 160 96
+0 0 0
+168 64 80
+160 160 176
+216 216 232
+104 104 112
+192 112 104
+248 208 152
+232 232 248
+0 0 0
diff --git a/graphics/pokemon/appletun/overworld.png b/graphics/pokemon/appletun/overworld.png
new file mode 100644
index 000000000000..46734f2a7920
Binary files /dev/null and b/graphics/pokemon/appletun/overworld.png differ
diff --git a/graphics/pokemon/appletun/overworld_normal.pal b/graphics/pokemon/appletun/overworld_normal.pal
new file mode 100644
index 000000000000..d15bc6566528
--- /dev/null
+++ b/graphics/pokemon/appletun/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+92 31 49
+13 31 18
+188 50 91
+105 182 131
+145 22 59
+107 67 13
+51 89 63
+225 164 84
+0 0 0
+248 212 132
+252 191 111
+156 185 116
+71 149 97
+244 129 163
+216 95 131
diff --git a/graphics/pokemon/appletun/overworld_shiny.pal b/graphics/pokemon/appletun/overworld_shiny.pal
new file mode 100644
index 000000000000..575d7828e606
--- /dev/null
+++ b/graphics/pokemon/appletun/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+41 82 24
+0 8 0
+90 164 41
+106 180 131
+90 164 41
+106 65 8
+49 90 57
+230 164 82
+0 8 0
+255 213 131
+255 189 106
+148 189 106
+65 148 98
+189 230 131
+148 189 106
diff --git a/graphics/pokemon/applin/overworld.png b/graphics/pokemon/applin/overworld.png
new file mode 100644
index 000000000000..d11fffcf16ef
Binary files /dev/null and b/graphics/pokemon/applin/overworld.png differ
diff --git a/graphics/pokemon/applin/overworld_normal.pal b/graphics/pokemon/applin/overworld_normal.pal
new file mode 100644
index 000000000000..d8683b3446e0
--- /dev/null
+++ b/graphics/pokemon/applin/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 252 252
+36 60 40
+92 28 48
+48 84 24
+52 76 56
+84 120 88
+144 20 56
+168 48 84
+164 36 72
+196 80 116
+92 144 64
+144 204 108
+228 108 144
+0 0 0
+188 164 128
+252 252 252
diff --git a/graphics/pokemon/applin/overworld_shiny.pal b/graphics/pokemon/applin/overworld_shiny.pal
new file mode 100644
index 000000000000..33ba263e9d86
--- /dev/null
+++ b/graphics/pokemon/applin/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+32 57 41
+49 82 24
+49 82 24
+49 74 57
+82 123 90
+65 148 57
+98 164 65
+82 164 74
+115 180 82
+90 148 65
+148 205 106
+131 197 98
+0 0 0
+189 164 131
+255 255 255
diff --git a/graphics/pokemon/araquanid/overworld.png b/graphics/pokemon/araquanid/overworld.png
new file mode 100644
index 000000000000..ab7b85e9178a
Binary files /dev/null and b/graphics/pokemon/araquanid/overworld.png differ
diff --git a/graphics/pokemon/araquanid/overworld_normal.pal b/graphics/pokemon/araquanid/overworld_normal.pal
new file mode 100644
index 000000000000..14ad114b6067
--- /dev/null
+++ b/graphics/pokemon/araquanid/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+232 232 248
+129 203 194
+171 192 64
+126 170 170
+152 129 106
+75 141 167
+107 91 76
+105 81 45
+68 70 72
+37 60 69
+63 55 47
+32 32 32
+16 16 16
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/araquanid/overworld_shiny.pal b/graphics/pokemon/araquanid/overworld_shiny.pal
new file mode 100644
index 000000000000..1d58e1d5cfab
--- /dev/null
+++ b/graphics/pokemon/araquanid/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+232 232 248
+129 203 194
+160 80 192
+126 170 170
+152 129 106
+232 128 104
+107 91 76
+64 8 80
+68 70 72
+37 60 69
+63 55 47
+32 32 32
+16 16 16
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/arbok/overworld.png b/graphics/pokemon/arbok/overworld.png
new file mode 100644
index 000000000000..e639051e8618
Binary files /dev/null and b/graphics/pokemon/arbok/overworld.png differ
diff --git a/graphics/pokemon/arbok/overworld_normal.pal b/graphics/pokemon/arbok/overworld_normal.pal
new file mode 100644
index 000000000000..0dd2215e03c8
--- /dev/null
+++ b/graphics/pokemon/arbok/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 48 80
+120 88 168
+176 128 192
+0 0 0
+232 232 248
+192 64 64
+64 64 64
+208 168 80
+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/arbok/overworld_shiny.pal b/graphics/pokemon/arbok/overworld_shiny.pal
new file mode 100644
index 000000000000..cf52ee55506b
--- /dev/null
+++ b/graphics/pokemon/arbok/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 64 56
+176 136 48
+216 184 48
+0 0 0
+232 232 248
+64 152 192
+64 64 64
+224 216 72
+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/arcanine/hisuian/overworld.png b/graphics/pokemon/arcanine/hisuian/overworld.png
new file mode 100644
index 000000000000..a3c67a34d335
Binary files /dev/null and b/graphics/pokemon/arcanine/hisuian/overworld.png differ
diff --git a/graphics/pokemon/arcanine/hisuian/overworld_normal.pal b/graphics/pokemon/arcanine/hisuian/overworld_normal.pal
new file mode 100644
index 000000000000..07a421dd7378
--- /dev/null
+++ b/graphics/pokemon/arcanine/hisuian/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+49 41 32
+0 0 0
+98 98 82
+180 49 32
+139 139 131
+230 65 57
+205 189 180
+49 49 49
+98 16 0
+238 238 255
+90 90 90
+180 180 213
+65 65 57
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/arcanine/hisuian/overworld_shiny.pal b/graphics/pokemon/arcanine/hisuian/overworld_shiny.pal
new file mode 100644
index 000000000000..e23a04f022d2
--- /dev/null
+++ b/graphics/pokemon/arcanine/hisuian/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+49 41 32
+0 0 0
+98 98 82
+205 180 57
+139 139 131
+230 205 65
+205 189 180
+49 49 49
+139 123 24
+238 238 255
+90 90 90
+180 180 213
+65 65 57
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/arcanine/overworld.png b/graphics/pokemon/arcanine/overworld.png
new file mode 100644
index 000000000000..31eef58c1b38
Binary files /dev/null and b/graphics/pokemon/arcanine/overworld.png differ
diff --git a/graphics/pokemon/arcanine/overworld_normal.pal b/graphics/pokemon/arcanine/overworld_normal.pal
new file mode 100644
index 000000000000..e093b2e2bcee
--- /dev/null
+++ b/graphics/pokemon/arcanine/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+224 192 144
+72 48 24
+184 136 104
+248 104 48
+184 80 24
+144 72 32
+120 88 56
+48 48 48
+176 176 208
+88 88 88
+232 232 248
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/arcanine/overworld_shiny.pal b/graphics/pokemon/arcanine/overworld_shiny.pal
new file mode 100644
index 000000000000..779b10b4aa65
--- /dev/null
+++ b/graphics/pokemon/arcanine/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+216 208 192
+72 64 24
+184 160 152
+232 192 72
+168 136 48
+128 104 40
+120 96 80
+48 48 48
+176 176 208
+88 88 88
+232 232 248
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/arceus/bug/icon.png b/graphics/pokemon/arceus/bug/icon.png
new file mode 100644
index 000000000000..7da8ef619565
Binary files /dev/null and b/graphics/pokemon/arceus/bug/icon.png differ
diff --git a/graphics/pokemon/arceus/bug/overworld.png b/graphics/pokemon/arceus/bug/overworld.png
new file mode 100644
index 000000000000..a655faf7bba7
Binary files /dev/null and b/graphics/pokemon/arceus/bug/overworld.png differ
diff --git a/graphics/pokemon/arceus/bug/overworld_normal.pal b/graphics/pokemon/arceus/bug/overworld_normal.pal
new file mode 100644
index 000000000000..a970e72162b7
--- /dev/null
+++ b/graphics/pokemon/arceus/bug/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 72 72
+232 232 248
+160 176 200
+200 208 224
+16 16 16
+112 120 144
+120 128 144
+144 216 120
+112 160 56
+88 96 112
+48 88 40
+248 160 248
+200 112 200
+40 96 40
+0 0 0
diff --git a/graphics/pokemon/arceus/bug/overworld_shiny.pal b/graphics/pokemon/arceus/bug/overworld_shiny.pal
new file mode 100644
index 000000000000..c240188ea406
--- /dev/null
+++ b/graphics/pokemon/arceus/bug/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 72 72
+248 240 152
+216 192 56
+232 216 96
+16 16 16
+112 120 144
+120 128 144
+144 216 120
+112 160 56
+88 96 112
+48 88 40
+248 160 248
+200 112 200
+40 96 40
+0 0 0
diff --git a/graphics/pokemon/arceus/dark/icon.png b/graphics/pokemon/arceus/dark/icon.png
new file mode 100644
index 000000000000..60e728ce8a47
Binary files /dev/null and b/graphics/pokemon/arceus/dark/icon.png differ
diff --git a/graphics/pokemon/arceus/dark/overworld.png b/graphics/pokemon/arceus/dark/overworld.png
new file mode 100644
index 000000000000..ec8921d07a9d
Binary files /dev/null and b/graphics/pokemon/arceus/dark/overworld.png differ
diff --git a/graphics/pokemon/arceus/dark/overworld_normal.pal b/graphics/pokemon/arceus/dark/overworld_normal.pal
new file mode 100644
index 000000000000..7f118367dc03
--- /dev/null
+++ b/graphics/pokemon/arceus/dark/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 72 72
+232 232 248
+160 176 200
+200 208 224
+16 16 16
+112 120 144
+136 112 128
+144 152 168
+96 104 120
+104 80 96
+72 88 104
+248 104 0
+192 0 56
+32 40 40
+0 0 0
diff --git a/graphics/pokemon/arceus/dark/overworld_shiny.pal b/graphics/pokemon/arceus/dark/overworld_shiny.pal
new file mode 100644
index 000000000000..0f702078c71b
--- /dev/null
+++ b/graphics/pokemon/arceus/dark/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 72 72
+248 240 152
+216 192 56
+232 216 96
+16 16 16
+112 120 144
+136 112 128
+144 152 168
+96 104 120
+104 80 96
+72 88 104
+248 104 0
+192 0 56
+32 40 40
+0 0 0
diff --git a/graphics/pokemon/arceus/dragon/icon.png b/graphics/pokemon/arceus/dragon/icon.png
new file mode 100644
index 000000000000..a8265e3c8461
Binary files /dev/null and b/graphics/pokemon/arceus/dragon/icon.png differ
diff --git a/graphics/pokemon/arceus/dragon/overworld.png b/graphics/pokemon/arceus/dragon/overworld.png
new file mode 100644
index 000000000000..558c857bc508
Binary files /dev/null and b/graphics/pokemon/arceus/dragon/overworld.png differ
diff --git a/graphics/pokemon/arceus/dragon/overworld_normal.pal b/graphics/pokemon/arceus/dragon/overworld_normal.pal
new file mode 100644
index 000000000000..2e9103c96c4a
--- /dev/null
+++ b/graphics/pokemon/arceus/dragon/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 72 72
+232 232 248
+160 176 200
+200 208 224
+16 16 16
+112 120 144
+96 136 120
+176 80 216
+144 32 184
+64 104 88
+104 0 136
+0 224 0
+0 152 0
+192 0 56
+0 0 0
diff --git a/graphics/pokemon/arceus/dragon/overworld_shiny.pal b/graphics/pokemon/arceus/dragon/overworld_shiny.pal
new file mode 100644
index 000000000000..66e8d518a4eb
--- /dev/null
+++ b/graphics/pokemon/arceus/dragon/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 72 72
+248 240 152
+216 192 56
+232 216 96
+16 16 16
+112 120 144
+96 136 120
+176 80 216
+144 32 184
+64 104 88
+104 0 136
+0 224 0
+0 152 0
+192 0 56
+0 0 0
diff --git a/graphics/pokemon/arceus/electric/icon.png b/graphics/pokemon/arceus/electric/icon.png
new file mode 100644
index 000000000000..617b1e1113dc
Binary files /dev/null and b/graphics/pokemon/arceus/electric/icon.png differ
diff --git a/graphics/pokemon/arceus/electric/overworld.png b/graphics/pokemon/arceus/electric/overworld.png
new file mode 100644
index 000000000000..1516a4fc858b
Binary files /dev/null and b/graphics/pokemon/arceus/electric/overworld.png differ
diff --git a/graphics/pokemon/arceus/electric/overworld_normal.pal b/graphics/pokemon/arceus/electric/overworld_normal.pal
new file mode 100644
index 000000000000..10f01e8cac44
--- /dev/null
+++ b/graphics/pokemon/arceus/electric/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 72 72
+232 232 248
+160 176 200
+200 208 224
+16 16 16
+112 120 144
+136 128 88
+248 232 88
+216 192 56
+112 96 56
+128 112 0
+232 128 0
+200 96 0
+192 0 56
+0 0 0
diff --git a/graphics/pokemon/arceus/electric/overworld_shiny.pal b/graphics/pokemon/arceus/electric/overworld_shiny.pal
new file mode 100644
index 000000000000..9488b1fdf875
--- /dev/null
+++ b/graphics/pokemon/arceus/electric/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 72 72
+248 240 152
+216 192 56
+232 216 96
+16 16 16
+112 120 144
+136 128 88
+248 232 88
+216 192 56
+112 96 56
+128 112 0
+232 128 0
+200 96 0
+192 0 56
+0 0 0
diff --git a/graphics/pokemon/arceus/fairy/icon.png b/graphics/pokemon/arceus/fairy/icon.png
new file mode 100644
index 000000000000..3a9fbdfbd491
Binary files /dev/null and b/graphics/pokemon/arceus/fairy/icon.png differ
diff --git a/graphics/pokemon/arceus/fairy/overworld.png b/graphics/pokemon/arceus/fairy/overworld.png
new file mode 100644
index 000000000000..6323b047be7f
Binary files /dev/null and b/graphics/pokemon/arceus/fairy/overworld.png differ
diff --git a/graphics/pokemon/arceus/fairy/overworld_normal.pal b/graphics/pokemon/arceus/fairy/overworld_normal.pal
new file mode 100644
index 000000000000..2ab532101c92
--- /dev/null
+++ b/graphics/pokemon/arceus/fairy/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 72 72
+232 232 248
+160 176 200
+200 208 224
+16 16 16
+134 131 133
+96 136 120
+198 91 205
+166 43 173
+64 104 88
+126 11 125
+0 224 0
+0 152 0
+192 0 56
+0 0 0
diff --git a/graphics/pokemon/arceus/fairy/overworld_shiny.pal b/graphics/pokemon/arceus/fairy/overworld_shiny.pal
new file mode 100644
index 000000000000..3631497ae7af
--- /dev/null
+++ b/graphics/pokemon/arceus/fairy/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 72 72
+248 240 152
+216 192 56
+232 216 96
+16 16 16
+134 131 133
+96 136 120
+198 91 205
+166 43 173
+64 104 88
+126 11 125
+0 224 0
+0 152 0
+192 0 56
+0 0 0
diff --git a/graphics/pokemon/arceus/fighting/icon.png b/graphics/pokemon/arceus/fighting/icon.png
new file mode 100644
index 000000000000..e4ec6068b298
Binary files /dev/null and b/graphics/pokemon/arceus/fighting/icon.png differ
diff --git a/graphics/pokemon/arceus/fighting/overworld.png b/graphics/pokemon/arceus/fighting/overworld.png
new file mode 100644
index 000000000000..0b0a600685eb
Binary files /dev/null and b/graphics/pokemon/arceus/fighting/overworld.png differ
diff --git a/graphics/pokemon/arceus/fighting/overworld_normal.pal b/graphics/pokemon/arceus/fighting/overworld_normal.pal
new file mode 100644
index 000000000000..42e397a3742d
--- /dev/null
+++ b/graphics/pokemon/arceus/fighting/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 72 72
+232 232 248
+160 176 200
+200 208 224
+16 16 16
+112 120 144
+120 128 144
+192 88 32
+152 56 32
+88 96 112
+104 24 8
+232 176 0
+176 112 0
+192 0 56
+0 0 0
diff --git a/graphics/pokemon/arceus/fighting/overworld_shiny.pal b/graphics/pokemon/arceus/fighting/overworld_shiny.pal
new file mode 100644
index 000000000000..5f8ed30c7902
--- /dev/null
+++ b/graphics/pokemon/arceus/fighting/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 72 72
+248 240 152
+216 192 56
+232 216 96
+16 16 16
+112 120 144
+120 128 144
+192 88 32
+152 56 32
+88 96 112
+104 24 8
+232 176 0
+176 112 0
+192 0 56
+0 0 0
diff --git a/graphics/pokemon/arceus/fire/icon.png b/graphics/pokemon/arceus/fire/icon.png
new file mode 100644
index 000000000000..4c67343bb6a5
Binary files /dev/null and b/graphics/pokemon/arceus/fire/icon.png differ
diff --git a/graphics/pokemon/arceus/fire/overworld.png b/graphics/pokemon/arceus/fire/overworld.png
new file mode 100644
index 000000000000..7f37aaa0c7ff
Binary files /dev/null and b/graphics/pokemon/arceus/fire/overworld.png differ
diff --git a/graphics/pokemon/arceus/fire/overworld_normal.pal b/graphics/pokemon/arceus/fire/overworld_normal.pal
new file mode 100644
index 000000000000..00546905504e
--- /dev/null
+++ b/graphics/pokemon/arceus/fire/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 72 72
+232 232 248
+160 176 200
+200 208 224
+16 16 16
+112 120 144
+144 96 88
+240 96 16
+208 48 16
+128 32 32
+160 24 16
+248 224 0
+200 120 0
+192 0 56
+0 0 0
diff --git a/graphics/pokemon/arceus/fire/overworld_shiny.pal b/graphics/pokemon/arceus/fire/overworld_shiny.pal
new file mode 100644
index 000000000000..a45defd54c02
--- /dev/null
+++ b/graphics/pokemon/arceus/fire/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 72 72
+248 240 152
+216 192 56
+232 216 96
+16 16 16
+112 120 144
+144 96 88
+240 96 16
+208 48 16
+128 32 32
+160 24 16
+248 224 0
+200 120 0
+192 0 56
+0 0 0
diff --git a/graphics/pokemon/arceus/flying/icon.png b/graphics/pokemon/arceus/flying/icon.png
new file mode 100644
index 000000000000..c882bc9dfbf1
Binary files /dev/null and b/graphics/pokemon/arceus/flying/icon.png differ
diff --git a/graphics/pokemon/arceus/flying/overworld.png b/graphics/pokemon/arceus/flying/overworld.png
new file mode 100644
index 000000000000..df6b0390f7fb
Binary files /dev/null and b/graphics/pokemon/arceus/flying/overworld.png differ
diff --git a/graphics/pokemon/arceus/flying/overworld_normal.pal b/graphics/pokemon/arceus/flying/overworld_normal.pal
new file mode 100644
index 000000000000..f40b2a597b41
--- /dev/null
+++ b/graphics/pokemon/arceus/flying/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 72 72
+232 232 248
+160 176 200
+200 208 224
+16 16 16
+112 120 144
+120 128 144
+144 152 208
+104 112 168
+88 96 112
+72 80 136
+232 240 240
+160 160 168
+40 128 152
+0 0 0
diff --git a/graphics/pokemon/arceus/flying/overworld_shiny.pal b/graphics/pokemon/arceus/flying/overworld_shiny.pal
new file mode 100644
index 000000000000..ddab34092541
--- /dev/null
+++ b/graphics/pokemon/arceus/flying/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 72 72
+248 240 152
+216 192 56
+232 216 96
+16 16 16
+112 120 144
+120 128 144
+144 152 208
+104 112 168
+88 96 112
+72 80 136
+232 240 240
+160 160 168
+40 128 152
+0 0 0
diff --git a/graphics/pokemon/arceus/ghost/icon.png b/graphics/pokemon/arceus/ghost/icon.png
new file mode 100644
index 000000000000..1e9163e9f5ba
Binary files /dev/null and b/graphics/pokemon/arceus/ghost/icon.png differ
diff --git a/graphics/pokemon/arceus/ghost/overworld.png b/graphics/pokemon/arceus/ghost/overworld.png
new file mode 100644
index 000000000000..87bb58c28f58
Binary files /dev/null and b/graphics/pokemon/arceus/ghost/overworld.png differ
diff --git a/graphics/pokemon/arceus/ghost/overworld_normal.pal b/graphics/pokemon/arceus/ghost/overworld_normal.pal
new file mode 100644
index 000000000000..b7ed93d84f28
--- /dev/null
+++ b/graphics/pokemon/arceus/ghost/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 72 72
+232 232 248
+160 176 200
+200 208 224
+16 16 16
+112 120 144
+104 80 144
+160 96 224
+120 80 184
+80 48 136
+88 40 144
+232 64 0
+160 32 0
+248 248 56
+0 0 0
diff --git a/graphics/pokemon/arceus/ghost/overworld_shiny.pal b/graphics/pokemon/arceus/ghost/overworld_shiny.pal
new file mode 100644
index 000000000000..765304265945
--- /dev/null
+++ b/graphics/pokemon/arceus/ghost/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 72 72
+248 240 152
+216 192 56
+232 216 96
+16 16 16
+112 120 144
+104 80 144
+160 96 224
+120 80 184
+80 48 136
+88 40 144
+232 64 0
+160 32 0
+248 248 56
+0 0 0
diff --git a/graphics/pokemon/arceus/grass/icon.png b/graphics/pokemon/arceus/grass/icon.png
new file mode 100644
index 000000000000..e2c72dd3b69a
Binary files /dev/null and b/graphics/pokemon/arceus/grass/icon.png differ
diff --git a/graphics/pokemon/arceus/grass/overworld.png b/graphics/pokemon/arceus/grass/overworld.png
new file mode 100644
index 000000000000..3bff11b55cc2
Binary files /dev/null and b/graphics/pokemon/arceus/grass/overworld.png differ
diff --git a/graphics/pokemon/arceus/grass/overworld_normal.pal b/graphics/pokemon/arceus/grass/overworld_normal.pal
new file mode 100644
index 000000000000..78c23130a419
--- /dev/null
+++ b/graphics/pokemon/arceus/grass/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 72 72
+232 232 248
+160 176 200
+200 208 224
+16 16 16
+112 120 144
+88 144 112
+88 200 56
+64 152 48
+56 112 80
+40 104 48
+248 224 0
+192 176 0
+192 0 56
+0 0 0
diff --git a/graphics/pokemon/arceus/grass/overworld_shiny.pal b/graphics/pokemon/arceus/grass/overworld_shiny.pal
new file mode 100644
index 000000000000..7b9f242238c2
--- /dev/null
+++ b/graphics/pokemon/arceus/grass/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 72 72
+248 240 152
+216 192 56
+232 216 96
+16 16 16
+112 120 144
+88 144 112
+88 200 56
+64 152 48
+56 112 80
+40 104 48
+248 224 0
+192 176 0
+192 0 56
+0 0 0
diff --git a/graphics/pokemon/arceus/ground/icon.png b/graphics/pokemon/arceus/ground/icon.png
new file mode 100644
index 000000000000..dd02c5c191a8
Binary files /dev/null and b/graphics/pokemon/arceus/ground/icon.png differ
diff --git a/graphics/pokemon/arceus/ground/overworld.png b/graphics/pokemon/arceus/ground/overworld.png
new file mode 100644
index 000000000000..35d715395106
Binary files /dev/null and b/graphics/pokemon/arceus/ground/overworld.png differ
diff --git a/graphics/pokemon/arceus/ground/overworld_normal.pal b/graphics/pokemon/arceus/ground/overworld_normal.pal
new file mode 100644
index 000000000000..c7fb811cb3fc
--- /dev/null
+++ b/graphics/pokemon/arceus/ground/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 72 72
+232 232 248
+160 176 200
+200 208 224
+16 16 16
+112 120 144
+136 112 80
+192 136 56
+168 104 24
+104 88 56
+136 64 0
+176 176 192
+128 128 144
+192 0 56
+0 0 0
diff --git a/graphics/pokemon/arceus/ground/overworld_shiny.pal b/graphics/pokemon/arceus/ground/overworld_shiny.pal
new file mode 100644
index 000000000000..7457a114505d
--- /dev/null
+++ b/graphics/pokemon/arceus/ground/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 72 72
+248 240 152
+216 192 56
+232 216 96
+16 16 16
+112 120 144
+136 112 80
+192 136 56
+168 104 24
+104 88 56
+136 64 0
+176 176 192
+128 128 144
+192 0 56
+0 0 0
diff --git a/graphics/pokemon/arceus/ice/icon.png b/graphics/pokemon/arceus/ice/icon.png
new file mode 100644
index 000000000000..7a63a218240f
Binary files /dev/null and b/graphics/pokemon/arceus/ice/icon.png differ
diff --git a/graphics/pokemon/arceus/ice/overworld.png b/graphics/pokemon/arceus/ice/overworld.png
new file mode 100644
index 000000000000..712e9a92582d
Binary files /dev/null and b/graphics/pokemon/arceus/ice/overworld.png differ
diff --git a/graphics/pokemon/arceus/ice/overworld_normal.pal b/graphics/pokemon/arceus/ice/overworld_normal.pal
new file mode 100644
index 000000000000..fa2f6967f9f5
--- /dev/null
+++ b/graphics/pokemon/arceus/ice/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 72 72
+232 232 248
+160 176 200
+200 208 224
+16 16 16
+112 120 144
+72 136 168
+160 248 248
+120 192 248
+40 96 128
+224 224 232
+128 128 136
+192 0 56
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/arceus/ice/overworld_shiny.pal b/graphics/pokemon/arceus/ice/overworld_shiny.pal
new file mode 100644
index 000000000000..9d92900a7758
--- /dev/null
+++ b/graphics/pokemon/arceus/ice/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 72 72
+248 240 152
+216 192 56
+232 216 96
+16 16 16
+112 120 144
+72 136 168
+160 248 248
+120 192 248
+40 96 128
+224 224 232
+128 128 136
+192 0 56
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/arceus/overworld.png b/graphics/pokemon/arceus/overworld.png
new file mode 100644
index 000000000000..8052c83ee2c4
Binary files /dev/null and b/graphics/pokemon/arceus/overworld.png differ
diff --git a/graphics/pokemon/arceus/overworld_normal.pal b/graphics/pokemon/arceus/overworld_normal.pal
new file mode 100644
index 000000000000..c61d6ea3eb6d
--- /dev/null
+++ b/graphics/pokemon/arceus/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 72 72
+232 232 248
+160 176 200
+200 208 224
+16 16 16
+112 120 144
+120 128 144
+232 208 24
+176 152 24
+88 96 112
+104 96 24
+56 176 88
+48 128 64
+240 64 64
+0 0 0
diff --git a/graphics/pokemon/arceus/overworld_shiny.pal b/graphics/pokemon/arceus/overworld_shiny.pal
new file mode 100644
index 000000000000..f8d14c4979eb
--- /dev/null
+++ b/graphics/pokemon/arceus/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 72 72
+248 240 152
+216 192 56
+232 216 96
+16 16 16
+112 120 144
+120 128 144
+232 208 24
+176 152 24
+88 96 112
+104 96 24
+56 176 88
+48 128 64
+240 64 64
+0 0 0
diff --git a/graphics/pokemon/arceus/poison/icon.png b/graphics/pokemon/arceus/poison/icon.png
new file mode 100644
index 000000000000..32277ba77277
Binary files /dev/null and b/graphics/pokemon/arceus/poison/icon.png differ
diff --git a/graphics/pokemon/arceus/poison/overworld.png b/graphics/pokemon/arceus/poison/overworld.png
new file mode 100644
index 000000000000..c9f7767fd1da
Binary files /dev/null and b/graphics/pokemon/arceus/poison/overworld.png differ
diff --git a/graphics/pokemon/arceus/poison/overworld_normal.pal b/graphics/pokemon/arceus/poison/overworld_normal.pal
new file mode 100644
index 000000000000..36b8119dfca1
--- /dev/null
+++ b/graphics/pokemon/arceus/poison/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 72 72
+232 232 248
+160 176 200
+200 208 224
+16 16 16
+112 120 144
+120 128 144
+176 96 184
+128 48 144
+88 96 112
+80 24 96
+240 160 232
+192 96 208
+192 0 56
+0 0 0
diff --git a/graphics/pokemon/arceus/poison/overworld_shiny.pal b/graphics/pokemon/arceus/poison/overworld_shiny.pal
new file mode 100644
index 000000000000..01e8800100f9
--- /dev/null
+++ b/graphics/pokemon/arceus/poison/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 72 72
+248 240 152
+216 192 56
+232 216 96
+16 16 16
+112 120 144
+120 128 144
+176 96 184
+128 48 144
+88 96 112
+80 24 96
+240 160 232
+192 96 208
+192 0 56
+0 0 0
diff --git a/graphics/pokemon/arceus/psychic/icon.png b/graphics/pokemon/arceus/psychic/icon.png
new file mode 100644
index 000000000000..0c556490e32d
Binary files /dev/null and b/graphics/pokemon/arceus/psychic/icon.png differ
diff --git a/graphics/pokemon/arceus/psychic/overworld.png b/graphics/pokemon/arceus/psychic/overworld.png
new file mode 100644
index 000000000000..f76036622ab5
Binary files /dev/null and b/graphics/pokemon/arceus/psychic/overworld.png differ
diff --git a/graphics/pokemon/arceus/psychic/overworld_normal.pal b/graphics/pokemon/arceus/psychic/overworld_normal.pal
new file mode 100644
index 000000000000..9a4107011fc2
--- /dev/null
+++ b/graphics/pokemon/arceus/psychic/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 72 72
+232 232 248
+160 176 200
+200 208 224
+16 16 16
+112 120 144
+120 128 144
+232 72 112
+192 24 72
+88 96 112
+152 0 48
+0 224 0
+0 152 0
+192 0 56
+0 0 0
diff --git a/graphics/pokemon/arceus/psychic/overworld_shiny.pal b/graphics/pokemon/arceus/psychic/overworld_shiny.pal
new file mode 100644
index 000000000000..3fec008fa48f
--- /dev/null
+++ b/graphics/pokemon/arceus/psychic/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 72 72
+248 240 152
+216 192 56
+232 216 96
+16 16 16
+112 120 144
+120 128 144
+232 72 112
+192 24 72
+88 96 112
+152 0 48
+0 224 0
+0 152 0
+192 0 56
+0 0 0
diff --git a/graphics/pokemon/arceus/rock/icon.png b/graphics/pokemon/arceus/rock/icon.png
new file mode 100644
index 000000000000..91d52e195756
Binary files /dev/null and b/graphics/pokemon/arceus/rock/icon.png differ
diff --git a/graphics/pokemon/arceus/rock/overworld.png b/graphics/pokemon/arceus/rock/overworld.png
new file mode 100644
index 000000000000..53bfee6cf051
Binary files /dev/null and b/graphics/pokemon/arceus/rock/overworld.png differ
diff --git a/graphics/pokemon/arceus/rock/overworld_normal.pal b/graphics/pokemon/arceus/rock/overworld_normal.pal
new file mode 100644
index 000000000000..26d199bfe76f
--- /dev/null
+++ b/graphics/pokemon/arceus/rock/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 72 72
+232 232 248
+160 176 200
+200 208 224
+16 16 16
+112 120 144
+120 128 144
+144 136 96
+112 104 64
+88 96 112
+96 88 48
+216 192 120
+176 152 80
+64 80 64
+0 0 0
diff --git a/graphics/pokemon/arceus/rock/overworld_shiny.pal b/graphics/pokemon/arceus/rock/overworld_shiny.pal
new file mode 100644
index 000000000000..d0c613c78f20
--- /dev/null
+++ b/graphics/pokemon/arceus/rock/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 72 72
+248 240 152
+216 192 56
+232 216 96
+16 16 16
+112 120 144
+120 128 144
+144 136 96
+112 104 64
+88 96 112
+96 88 48
+216 192 120
+176 152 80
+64 80 64
+0 0 0
diff --git a/graphics/pokemon/arceus/steel/icon.png b/graphics/pokemon/arceus/steel/icon.png
new file mode 100644
index 000000000000..4013495e0d47
Binary files /dev/null and b/graphics/pokemon/arceus/steel/icon.png differ
diff --git a/graphics/pokemon/arceus/steel/overworld.png b/graphics/pokemon/arceus/steel/overworld.png
new file mode 100644
index 000000000000..33b51e7a8bbe
Binary files /dev/null and b/graphics/pokemon/arceus/steel/overworld.png differ
diff --git a/graphics/pokemon/arceus/steel/overworld_normal.pal b/graphics/pokemon/arceus/steel/overworld_normal.pal
new file mode 100644
index 000000000000..e3ca81c9a8fe
--- /dev/null
+++ b/graphics/pokemon/arceus/steel/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 72 72
+232 232 248
+160 176 200
+200 208 224
+16 16 16
+112 120 144
+120 128 144
+192 192 208
+128 128 136
+88 96 112
+88 88 96
+232 224 0
+168 160 0
+96 104 96
+0 0 0
diff --git a/graphics/pokemon/arceus/steel/overworld_shiny.pal b/graphics/pokemon/arceus/steel/overworld_shiny.pal
new file mode 100644
index 000000000000..70c82d16172e
--- /dev/null
+++ b/graphics/pokemon/arceus/steel/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 72 72
+248 240 152
+216 192 56
+232 216 96
+16 16 16
+112 120 144
+120 128 144
+192 192 208
+128 128 136
+88 96 112
+88 88 96
+232 224 0
+168 160 0
+96 104 96
+0 0 0
diff --git a/graphics/pokemon/arceus/water/icon.png b/graphics/pokemon/arceus/water/icon.png
new file mode 100644
index 000000000000..546df7ecd106
Binary files /dev/null and b/graphics/pokemon/arceus/water/icon.png differ
diff --git a/graphics/pokemon/arceus/water/overworld.png b/graphics/pokemon/arceus/water/overworld.png
new file mode 100644
index 000000000000..291c68b0a54e
Binary files /dev/null and b/graphics/pokemon/arceus/water/overworld.png differ
diff --git a/graphics/pokemon/arceus/water/overworld_normal.pal b/graphics/pokemon/arceus/water/overworld_normal.pal
new file mode 100644
index 000000000000..981366ca1ac5
--- /dev/null
+++ b/graphics/pokemon/arceus/water/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 72 72
+232 232 248
+160 176 200
+200 208 224
+16 16 16
+112 120 144
+0 56 152
+8 144 240
+8 96 192
+0 40 120
+16 48 120
+0 224 248
+0 160 200
+248 0 56
+0 0 0
diff --git a/graphics/pokemon/arceus/water/overworld_shiny.pal b/graphics/pokemon/arceus/water/overworld_shiny.pal
new file mode 100644
index 000000000000..36d9c53fc1ca
--- /dev/null
+++ b/graphics/pokemon/arceus/water/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 72 72
+248 240 152
+216 192 56
+232 216 96
+16 16 16
+112 120 144
+0 56 152
+8 144 240
+8 96 192
+0 40 120
+16 48 120
+0 224 248
+0 160 200
+248 0 56
+0 0 0
diff --git a/graphics/pokemon/archen/overworld.png b/graphics/pokemon/archen/overworld.png
new file mode 100644
index 000000000000..e25f19ba7f21
Binary files /dev/null and b/graphics/pokemon/archen/overworld.png differ
diff --git a/graphics/pokemon/archen/overworld_normal.pal b/graphics/pokemon/archen/overworld_normal.pal
new file mode 100644
index 000000000000..83bf72363483
--- /dev/null
+++ b/graphics/pokemon/archen/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+11 40 95
+40 71 147
+70 48 35
+40 121 245
+137 54 54
+217 70 62
+0 0 0
+222 221 229
+70 48 35
+70 48 35
+219 174 80
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/archen/overworld_shiny.pal b/graphics/pokemon/archen/overworld_shiny.pal
new file mode 100644
index 000000000000..8e3e7613022b
--- /dev/null
+++ b/graphics/pokemon/archen/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 104 48
+16 152 64
+78 47 25
+16 208 72
+153 86 63
+224 128 72
+0 0 0
+222 221 229
+47 47 47
+80 64 40
+221 201 94
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/archeops/overworld.png b/graphics/pokemon/archeops/overworld.png
new file mode 100644
index 000000000000..8a8a23a4edf7
Binary files /dev/null and b/graphics/pokemon/archeops/overworld.png differ
diff --git a/graphics/pokemon/archeops/overworld_normal.pal b/graphics/pokemon/archeops/overworld_normal.pal
new file mode 100644
index 000000000000..772efa0e1cac
--- /dev/null
+++ b/graphics/pokemon/archeops/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 48 104
+48 80 152
+187 76 72
+212 214 224
+240 200 96
+0 0 0
+48 128 240
+187 76 72
+16 160 144
+16 48 104
+66 75 64
+240 200 96
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/archeops/overworld_shiny.pal b/graphics/pokemon/archeops/overworld_shiny.pal
new file mode 100644
index 000000000000..92931a6ccaef
--- /dev/null
+++ b/graphics/pokemon/archeops/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+8 64 48
+8 111 95
+216 101 35
+220 220 240
+248 176 96
+0 1 0
+16 160 144
+158 72 47
+48 128 240
+48 80 152
+113 61 35
+241 200 100
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/arctovish/overworld.png b/graphics/pokemon/arctovish/overworld.png
new file mode 100644
index 000000000000..0afb28f0db48
Binary files /dev/null and b/graphics/pokemon/arctovish/overworld.png differ
diff --git a/graphics/pokemon/arctovish/overworld_normal.pal b/graphics/pokemon/arctovish/overworld_normal.pal
new file mode 100644
index 000000000000..19c81a707edb
--- /dev/null
+++ b/graphics/pokemon/arctovish/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+252 52 36
+28 40 44
+20 48 68
+0 0 0
+60 100 184
+60 132 184
+100 136 160
+88 128 212
+108 172 212
+140 148 152
+172 184 192
+168 208 236
+152 204 236
+204 204 204
+216 236 252
+252 252 252
diff --git a/graphics/pokemon/arctovish/overworld_shiny.pal b/graphics/pokemon/arctovish/overworld_shiny.pal
new file mode 100644
index 000000000000..7e9379717184
--- /dev/null
+++ b/graphics/pokemon/arctovish/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+65 65 65
+90 82 98
+0 0 0
+98 106 123
+139 123 156
+156 164 156
+139 123 156
+172 164 189
+148 148 148
+172 189 197
+172 164 189
+189 205 189
+205 205 205
+222 230 222
+255 255 255
diff --git a/graphics/pokemon/arctozolt/overworld.png b/graphics/pokemon/arctozolt/overworld.png
new file mode 100644
index 000000000000..105c32fa86b8
Binary files /dev/null and b/graphics/pokemon/arctozolt/overworld.png differ
diff --git a/graphics/pokemon/arctozolt/overworld_normal.pal b/graphics/pokemon/arctozolt/overworld_normal.pal
new file mode 100644
index 000000000000..49943c434490
--- /dev/null
+++ b/graphics/pokemon/arctozolt/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+252 52 36
+0 0 0
+92 88 36
+20 48 68
+44 44 44
+188 156 12
+244 208 44
+60 100 184
+60 132 184
+104 156 212
+136 152 160
+232 232 144
+168 212 244
+204 204 204
+212 236 252
+252 252 252
diff --git a/graphics/pokemon/arctozolt/overworld_shiny.pal b/graphics/pokemon/arctozolt/overworld_shiny.pal
new file mode 100644
index 000000000000..bf024a0ce06c
--- /dev/null
+++ b/graphics/pokemon/arctozolt/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+98 98 106
+90 82 98
+41 41 41
+148 148 148
+213 213 205
+98 98 106
+139 123 156
+172 164 189
+148 148 148
+213 213 205
+197 189 205
+205 205 205
+222 213 230
+255 255 255
diff --git a/graphics/pokemon/ariados/overworld.png b/graphics/pokemon/ariados/overworld.png
new file mode 100644
index 000000000000..4508799e7164
Binary files /dev/null and b/graphics/pokemon/ariados/overworld.png differ
diff --git a/graphics/pokemon/ariados/overworld_normal.pal b/graphics/pokemon/ariados/overworld_normal.pal
new file mode 100644
index 000000000000..02d8dc3c4001
--- /dev/null
+++ b/graphics/pokemon/ariados/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+128 96 8
+0 0 0
+248 192 8
+96 32 168
+216 136 0
+144 80 224
+112 16 24
+72 72 72
+240 96 80
+232 232 248
+200 64 56
+48 40 32
+168 184 208
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/ariados/overworld_shiny.pal b/graphics/pokemon/ariados/overworld_shiny.pal
new file mode 100644
index 000000000000..c8c750e902cf
--- /dev/null
+++ b/graphics/pokemon/ariados/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+128 96 8
+0 0 0
+248 192 8
+64 120 160
+216 136 0
+80 168 184
+96 32 88
+72 72 72
+224 168 216
+232 232 248
+192 112 184
+64 40 56
+168 184 208
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/armaldo/overworld.png b/graphics/pokemon/armaldo/overworld.png
new file mode 100644
index 000000000000..e270df81be0e
Binary files /dev/null and b/graphics/pokemon/armaldo/overworld.png differ
diff --git a/graphics/pokemon/armaldo/overworld_normal.pal b/graphics/pokemon/armaldo/overworld_normal.pal
new file mode 100644
index 000000000000..5c8e2c01da3e
--- /dev/null
+++ b/graphics/pokemon/armaldo/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 48 48
+16 64 96
+0 0 0
+80 80 80
+56 104 144
+128 168 200
+96 144 176
+112 112 120
+232 232 248
+192 64 104
+160 40 80
+144 144 160
+192 192 208
+160 128 8
+232 200 72
diff --git a/graphics/pokemon/armaldo/overworld_shiny.pal b/graphics/pokemon/armaldo/overworld_shiny.pal
new file mode 100644
index 000000000000..46fd73a79ff7
--- /dev/null
+++ b/graphics/pokemon/armaldo/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 48 48
+112 16 32
+0 0 0
+80 80 80
+152 64 80
+240 136 144
+200 96 112
+112 112 120
+232 232 248
+192 64 104
+160 40 80
+144 144 160
+192 192 208
+160 128 8
+232 200 72
diff --git a/graphics/pokemon/aromatisse/overworld.png b/graphics/pokemon/aromatisse/overworld.png
new file mode 100644
index 000000000000..64ad16827167
Binary files /dev/null and b/graphics/pokemon/aromatisse/overworld.png differ
diff --git a/graphics/pokemon/aromatisse/overworld_normal.pal b/graphics/pokemon/aromatisse/overworld_normal.pal
new file mode 100644
index 000000000000..d4331c4a98d5
--- /dev/null
+++ b/graphics/pokemon/aromatisse/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+71 47 71
+16 16 16
+197 105 188
+139 85 139
+234 203 85
+198 163 204
+219 222 241
+57 39 43
+232 76 90
+241 152 170
+217 101 125
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/aromatisse/overworld_shiny.pal b/graphics/pokemon/aromatisse/overworld_shiny.pal
new file mode 100644
index 000000000000..2fe20eb67511
--- /dev/null
+++ b/graphics/pokemon/aromatisse/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+71 47 71
+16 16 16
+241 112 150
+188 87 116
+234 203 85
+233 190 208
+254 216 232
+57 39 43
+254 252 79
+156 125 220
+130 107 178
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/aron/overworld.png b/graphics/pokemon/aron/overworld.png
new file mode 100644
index 000000000000..5dcc4313caee
Binary files /dev/null and b/graphics/pokemon/aron/overworld.png differ
diff --git a/graphics/pokemon/aron/overworld_normal.pal b/graphics/pokemon/aron/overworld_normal.pal
new file mode 100644
index 000000000000..cc8c78a53eed
--- /dev/null
+++ b/graphics/pokemon/aron/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 56 72
+232 232 248
+160 160 176
+0 0 0
+184 184 200
+112 104 120
+64 96 128
+104 144 200
+48 40 56
+88 88 88
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/aron/overworld_shiny.pal b/graphics/pokemon/aron/overworld_shiny.pal
new file mode 100644
index 000000000000..d9cd225fe2fd
--- /dev/null
+++ b/graphics/pokemon/aron/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 56 72
+232 232 248
+160 160 176
+0 0 0
+184 184 200
+112 104 120
+176 0 0
+248 48 88
+48 40 56
+48 112 64
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/arrokuda/overworld.png b/graphics/pokemon/arrokuda/overworld.png
new file mode 100644
index 000000000000..21835e5e1e39
Binary files /dev/null and b/graphics/pokemon/arrokuda/overworld.png differ
diff --git a/graphics/pokemon/arrokuda/overworld_normal.pal b/graphics/pokemon/arrokuda/overworld_normal.pal
new file mode 100644
index 000000000000..cb2cd9aa5578
--- /dev/null
+++ b/graphics/pokemon/arrokuda/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 52 38
+23 20 16
+171 173 131
+223 225 175
+255 255 255
+109 96 81
+77 66 53
+0 0 0
+143 128 111
+205 102 70
+121 121 118
+223 224 207
+173 173 164
+229 126 94
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/arrokuda/overworld_shiny.pal b/graphics/pokemon/arrokuda/overworld_shiny.pal
new file mode 100644
index 000000000000..67e0eb5780f0
--- /dev/null
+++ b/graphics/pokemon/arrokuda/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+32 32 49
+189 213 230
+213 230 246
+255 255 255
+123 123 180
+90 90 139
+0 0 0
+156 164 213
+205 98 65
+115 98 115
+238 197 230
+172 139 164
+230 123 90
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/articuno/galarian/overworld.png b/graphics/pokemon/articuno/galarian/overworld.png
new file mode 100644
index 000000000000..51e46babdbde
Binary files /dev/null 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
new file mode 100644
index 000000000000..a341d1c09852
--- /dev/null
+++ b/graphics/pokemon/articuno/galarian/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+60 184 151
+0 0 0
+120 200 248
+160 224 248
+102 69 138
+212 190 233
+149 111 190
+41 28 44
+232 204 232
+190 163 198
+162 126 172
+203 181 209
+255 255 255
+56 56 56
+24 24 24
+0 0 0
diff --git a/graphics/pokemon/articuno/galarian/overworld_shiny.pal b/graphics/pokemon/articuno/galarian/overworld_shiny.pal
new file mode 100644
index 000000000000..590f0cc88a31
--- /dev/null
+++ b/graphics/pokemon/articuno/galarian/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+60 184 151
+0 0 0
+79 185 255
+110 216 255
+40 64 128
+96 144 216
+40 96 184
+41 28 44
+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
new file mode 100644
index 000000000000..e5e101e259cf
Binary files /dev/null and b/graphics/pokemon/articuno/overworld.png differ
diff --git a/graphics/pokemon/articuno/overworld_normal.pal b/graphics/pokemon/articuno/overworld_normal.pal
new file mode 100644
index 000000000000..d55b7a123583
--- /dev/null
+++ b/graphics/pokemon/articuno/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 64 88
+56 128 136
+160 224 248
+48 176 192
+120 200 248
+0 0 0
+104 160 232
+56 56 40
+232 232 248
+48 104 152
+200 184 72
+160 32 48
+144 128 24
+176 176 208
+216 248 248
diff --git a/graphics/pokemon/articuno/overworld_shiny.pal b/graphics/pokemon/articuno/overworld_shiny.pal
new file mode 100644
index 000000000000..26cc442ff75e
--- /dev/null
+++ b/graphics/pokemon/articuno/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 64 128
+32 144 232
+200 240 248
+96 200 232
+168 224 248
+0 0 0
+152 192 224
+56 56 40
+232 232 248
+96 152 200
+200 184 72
+160 32 48
+144 128 24
+176 176 208
+232 248 248
diff --git a/graphics/pokemon/audino/overworld.png b/graphics/pokemon/audino/overworld.png
new file mode 100644
index 000000000000..27fdc5f6b764
Binary files /dev/null and b/graphics/pokemon/audino/overworld.png differ
diff --git a/graphics/pokemon/audino/overworld_normal.pal b/graphics/pokemon/audino/overworld_normal.pal
new file mode 100644
index 000000000000..b2db480ff648
--- /dev/null
+++ b/graphics/pokemon/audino/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 63 63
+199 95 104
+218 129 138
+0 0 0
+95 87 63
+245 227 164
+199 172 121
+11 11 11
+18 87 164
+229 229 247
+245 227 164
+155 155 155
+218 129 138
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/audino/overworld_shiny.pal b/graphics/pokemon/audino/overworld_shiny.pal
new file mode 100644
index 000000000000..eabc10d396c0
--- /dev/null
+++ b/graphics/pokemon/audino/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 63 63
+152 80 160
+160 120 176
+0 0 0
+95 87 63
+248 216 176
+216 176 136
+11 11 11
+18 87 164
+229 229 247
+245 227 164
+155 155 155
+218 129 138
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/aurorus/overworld.png b/graphics/pokemon/aurorus/overworld.png
new file mode 100644
index 000000000000..b094b1525996
Binary files /dev/null and b/graphics/pokemon/aurorus/overworld.png differ
diff --git a/graphics/pokemon/aurorus/overworld_normal.pal b/graphics/pokemon/aurorus/overworld_normal.pal
new file mode 100644
index 000000000000..3a6f014234f6
--- /dev/null
+++ b/graphics/pokemon/aurorus/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+237 241 227
+67 64 47
+248 208 80
+128 116 54
+38 49 72
+78 110 172
+101 157 237
+170 223 246
+94 176 224
+237 241 227
+161 183 211
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/aurorus/overworld_shiny.pal b/graphics/pokemon/aurorus/overworld_shiny.pal
new file mode 100644
index 000000000000..22501716da67
--- /dev/null
+++ b/graphics/pokemon/aurorus/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+194 210 243
+67 64 47
+231 216 165
+128 116 54
+38 49 72
+179 193 202
+237 248 255
+145 188 233
+117 154 193
+237 241 227
+161 183 211
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/avalugg/hisuian/overworld.png b/graphics/pokemon/avalugg/hisuian/overworld.png
new file mode 100644
index 000000000000..a336b513828e
Binary files /dev/null and b/graphics/pokemon/avalugg/hisuian/overworld.png differ
diff --git a/graphics/pokemon/avalugg/hisuian/overworld_normal.pal b/graphics/pokemon/avalugg/hisuian/overworld_normal.pal
new file mode 100644
index 000000000000..c42896338c59
--- /dev/null
+++ b/graphics/pokemon/avalugg/hisuian/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+139 205 246
+82 41 24
+148 123 98
+106 82 65
+8 8 8
+148 156 172
+230 238 255
+205 205 222
+98 106 131
+148 65 32
+222 172 8
+255 238 57
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/avalugg/hisuian/overworld_shiny.pal b/graphics/pokemon/avalugg/hisuian/overworld_shiny.pal
new file mode 100644
index 000000000000..7460e356f1f8
--- /dev/null
+++ b/graphics/pokemon/avalugg/hisuian/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+139 205 246
+82 41 24
+148 123 98
+106 82 65
+8 8 8
+213 139 90
+230 238 255
+230 148 98
+164 106 74
+197 148 16
+148 123 98
+106 82 65
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/avalugg/overworld.png b/graphics/pokemon/avalugg/overworld.png
new file mode 100644
index 000000000000..5d9c26d329b2
Binary files /dev/null and b/graphics/pokemon/avalugg/overworld.png differ
diff --git a/graphics/pokemon/avalugg/overworld_normal.pal b/graphics/pokemon/avalugg/overworld_normal.pal
new file mode 100644
index 000000000000..c8bdfc3bc60f
--- /dev/null
+++ b/graphics/pokemon/avalugg/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 192 168
+16 16 16
+35 56 153
+136 201 244
+230 238 248
+87 96 157
+116 151 196
+219 169 15
+253 236 58
+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/avalugg/overworld_shiny.pal b/graphics/pokemon/avalugg/overworld_shiny.pal
new file mode 100644
index 000000000000..c437016ed5d9
--- /dev/null
+++ b/graphics/pokemon/avalugg/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 192 214
+16 16 16
+84 127 132
+178 226 231
+230 238 248
+103 167 133
+118 176 182
+219 169 15
+253 236 58
+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/axew/overworld.png b/graphics/pokemon/axew/overworld.png
new file mode 100644
index 000000000000..7b81056bd37b
Binary files /dev/null and b/graphics/pokemon/axew/overworld.png differ
diff --git a/graphics/pokemon/axew/overworld_normal.pal b/graphics/pokemon/axew/overworld_normal.pal
new file mode 100644
index 000000000000..4f3e70f8b782
--- /dev/null
+++ b/graphics/pokemon/axew/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 47 33
+87 95 63
+63 71 47
+0 0 0
+138 155 79
+151 177 194
+229 229 247
+95 112 63
+199 0 0
+87 0 0
+164 182 87
+208 227 138
+121 172 25
+95 138 40
+25 32 32
diff --git a/graphics/pokemon/axew/overworld_shiny.pal b/graphics/pokemon/axew/overworld_shiny.pal
new file mode 100644
index 000000000000..d8ba02535f0c
--- /dev/null
+++ b/graphics/pokemon/axew/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 47 33
+109 93 73
+88 80 56
+0 0 0
+192 176 111
+221 226 195
+221 226 195
+136 120 72
+200 40 112
+40 47 33
+192 176 111
+221 226 195
+160 80 128
+109 93 73
+25 32 32
diff --git a/graphics/pokemon/azelf/overworld.png b/graphics/pokemon/azelf/overworld.png
new file mode 100644
index 000000000000..709618802644
Binary files /dev/null and b/graphics/pokemon/azelf/overworld.png differ
diff --git a/graphics/pokemon/azelf/overworld_normal.pal b/graphics/pokemon/azelf/overworld_normal.pal
new file mode 100644
index 000000000000..cde578ee374b
--- /dev/null
+++ b/graphics/pokemon/azelf/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+32 64 112
+72 128 208
+48 112 176
+0 0 0
+32 88 168
+168 40 0
+248 168 152
+144 184 208
+72 72 88
+232 64 32
+112 128 176
+232 232 248
+248 176 16
+176 208 248
+136 120 32
diff --git a/graphics/pokemon/azelf/overworld_shiny.pal b/graphics/pokemon/azelf/overworld_shiny.pal
new file mode 100644
index 000000000000..11a24ddd0957
--- /dev/null
+++ b/graphics/pokemon/azelf/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+32 96 80
+72 160 160
+48 136 136
+0 0 0
+32 112 128
+168 40 0
+248 168 152
+216 176 88
+104 80 56
+232 64 32
+176 128 48
+232 232 248
+248 176 16
+248 216 88
+136 120 32
diff --git a/graphics/pokemon/azumarill/overworld.png b/graphics/pokemon/azumarill/overworld.png
new file mode 100644
index 000000000000..b2aa9487e5b8
Binary files /dev/null and b/graphics/pokemon/azumarill/overworld.png differ
diff --git a/graphics/pokemon/azumarill/overworld_normal.pal b/graphics/pokemon/azumarill/overworld_normal.pal
new file mode 100644
index 000000000000..550ac4f0a16d
--- /dev/null
+++ b/graphics/pokemon/azumarill/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+32 48 104
+0 0 0
+112 176 240
+56 112 160
+72 144 200
+184 48 40
+232 232 248
+208 208 224
+48 56 64
+184 200 224
+128 160 200
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/azumarill/overworld_shiny.pal b/graphics/pokemon/azumarill/overworld_shiny.pal
new file mode 100644
index 000000000000..181b74b2e392
--- /dev/null
+++ b/graphics/pokemon/azumarill/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 72 0
+0 0 0
+248 208 88
+160 96 8
+232 160 40
+184 48 40
+232 232 248
+208 208 224
+48 56 64
+168 184 208
+128 160 200
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/azurill/overworld.png b/graphics/pokemon/azurill/overworld.png
new file mode 100644
index 000000000000..7169ed9b2936
Binary files /dev/null and b/graphics/pokemon/azurill/overworld.png differ
diff --git a/graphics/pokemon/azurill/overworld_normal.pal b/graphics/pokemon/azurill/overworld_normal.pal
new file mode 100644
index 000000000000..34dc880d06fb
--- /dev/null
+++ b/graphics/pokemon/azurill/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+32 64 120
+72 136 192
+112 176 240
+48 56 64
+56 104 152
+200 88 160
+232 232 248
+168 208 240
+184 48 40
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/azurill/overworld_shiny.pal b/graphics/pokemon/azurill/overworld_shiny.pal
new file mode 100644
index 000000000000..01bf80b52efc
--- /dev/null
+++ b/graphics/pokemon/azurill/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+40 88 64
+104 168 120
+152 208 144
+48 56 64
+72 128 96
+200 88 160
+232 232 248
+184 248 176
+184 48 40
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/bagon/overworld.png b/graphics/pokemon/bagon/overworld.png
new file mode 100644
index 000000000000..a4954683e0a2
Binary files /dev/null and b/graphics/pokemon/bagon/overworld.png differ
diff --git a/graphics/pokemon/bagon/overworld_normal.pal b/graphics/pokemon/bagon/overworld_normal.pal
new file mode 100644
index 000000000000..1ffcbea64e70
--- /dev/null
+++ b/graphics/pokemon/bagon/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 80 104
+200 200 200
+152 152 152
+0 0 0
+120 120 120
+184 184 184
+192 160 72
+64 136 160
+232 232 248
+104 168 224
+120 192 248
+144 120 16
+40 64 104
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/bagon/overworld_shiny.pal b/graphics/pokemon/bagon/overworld_shiny.pal
new file mode 100644
index 000000000000..237827e77722
--- /dev/null
+++ b/graphics/pokemon/bagon/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 80 104
+200 200 200
+152 152 152
+0 0 0
+120 120 120
+184 184 184
+192 160 72
+64 144 56
+232 232 248
+88 192 80
+120 248 144
+144 120 16
+48 88 40
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/baltoy/overworld.png b/graphics/pokemon/baltoy/overworld.png
new file mode 100644
index 000000000000..bbb55b323aa9
Binary files /dev/null and b/graphics/pokemon/baltoy/overworld.png differ
diff --git a/graphics/pokemon/baltoy/overworld_normal.pal b/graphics/pokemon/baltoy/overworld_normal.pal
new file mode 100644
index 000000000000..93510f1737fe
--- /dev/null
+++ b/graphics/pokemon/baltoy/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 80 64
+0 0 0
+224 200 152
+216 184 128
+176 160 96
+144 136 88
+216 112 80
+184 80 40
+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/baltoy/overworld_shiny.pal b/graphics/pokemon/baltoy/overworld_shiny.pal
new file mode 100644
index 000000000000..515cf9b6d7aa
--- /dev/null
+++ b/graphics/pokemon/baltoy/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+176 160 208
+88 80 64
+0 0 0
+248 232 152
+232 176 8
+208 168 8
+168 136 24
+96 176 192
+96 112 176
+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/banette/overworld.png b/graphics/pokemon/banette/overworld.png
new file mode 100644
index 000000000000..4a153522395d
Binary files /dev/null and b/graphics/pokemon/banette/overworld.png differ
diff --git a/graphics/pokemon/banette/overworld_normal.pal b/graphics/pokemon/banette/overworld_normal.pal
new file mode 100644
index 000000000000..4666298524de
--- /dev/null
+++ b/graphics/pokemon/banette/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+96 104 128
+128 128 160
+64 72 96
+40 48 64
+192 56 56
+144 32 32
+72 56 16
+96 16 16
+160 128 40
+120 96 24
+200 160 48
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/banette/overworld_shiny.pal b/graphics/pokemon/banette/overworld_shiny.pal
new file mode 100644
index 000000000000..c10d6fb149fe
--- /dev/null
+++ b/graphics/pokemon/banette/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+80 104 160
+104 136 208
+56 72 112
+40 48 64
+192 56 56
+144 32 32
+72 56 16
+96 16 16
+160 128 40
+120 96 24
+200 160 48
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/barbaracle/overworld.png b/graphics/pokemon/barbaracle/overworld.png
new file mode 100644
index 000000000000..cfd69372f886
Binary files /dev/null and b/graphics/pokemon/barbaracle/overworld.png differ
diff --git a/graphics/pokemon/barbaracle/overworld_normal.pal b/graphics/pokemon/barbaracle/overworld_normal.pal
new file mode 100644
index 000000000000..099d334fea02
--- /dev/null
+++ b/graphics/pokemon/barbaracle/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+63 52 39
+229 215 187
+190 167 122
+16 16 16
+137 102 61
+231 120 77
+202 200 212
+229 215 187
+117 114 136
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/barbaracle/overworld_shiny.pal b/graphics/pokemon/barbaracle/overworld_shiny.pal
new file mode 100644
index 000000000000..fd587273b95d
--- /dev/null
+++ b/graphics/pokemon/barbaracle/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+50 63 41
+160 247 162
+101 163 101
+16 16 16
+85 106 73
+255 131 152
+193 199 213
+251 251 251
+107 118 148
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/barboach/overworld.png b/graphics/pokemon/barboach/overworld.png
new file mode 100644
index 000000000000..2cc66dfe63b4
Binary files /dev/null and b/graphics/pokemon/barboach/overworld.png differ
diff --git a/graphics/pokemon/barboach/overworld_normal.pal b/graphics/pokemon/barboach/overworld_normal.pal
new file mode 100644
index 000000000000..9d753ce34bcb
--- /dev/null
+++ b/graphics/pokemon/barboach/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 112 152
+24 64 104
+88 144 184
+48 64 80
+0 0 0
+184 184 200
+152 160 176
+136 144 152
+88 96 112
+120 176 208
+232 232 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/barboach/overworld_shiny.pal b/graphics/pokemon/barboach/overworld_shiny.pal
new file mode 100644
index 000000000000..8791d2578862
--- /dev/null
+++ b/graphics/pokemon/barboach/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+144 120 56
+96 80 32
+200 152 40
+48 64 80
+0 0 0
+184 184 200
+152 160 176
+136 144 152
+88 96 112
+248 200 72
+232 232 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/barraskewda/overworld.png b/graphics/pokemon/barraskewda/overworld.png
new file mode 100644
index 000000000000..ac05fc57e142
Binary files /dev/null and b/graphics/pokemon/barraskewda/overworld.png differ
diff --git a/graphics/pokemon/barraskewda/overworld_normal.pal b/graphics/pokemon/barraskewda/overworld_normal.pal
new file mode 100644
index 000000000000..219e44c86665
--- /dev/null
+++ b/graphics/pokemon/barraskewda/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 52 38
+19 17 13
+109 96 81
+77 66 53
+98 46 30
+0 0 0
+205 102 70
+73 74 55
+171 173 131
+229 126 94
+223 225 175
+143 128 111
+227 227 227
+255 255 255
+179 179 179
+0 0 0
diff --git a/graphics/pokemon/barraskewda/overworld_shiny.pal b/graphics/pokemon/barraskewda/overworld_shiny.pal
new file mode 100644
index 000000000000..3f2116be85c5
--- /dev/null
+++ b/graphics/pokemon/barraskewda/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 52 38
+16 16 24
+90 82 115
+65 57 82
+98 41 24
+0 0 0
+205 98 65
+74 74 65
+148 148 139
+230 123 90
+180 180 172
+123 115 148
+230 230 230
+255 255 255
+180 180 180
+0 0 0
diff --git a/graphics/pokemon/basculegion/female/overworld.png b/graphics/pokemon/basculegion/female/overworld.png
new file mode 100644
index 000000000000..d246f9f90ac9
Binary files /dev/null and b/graphics/pokemon/basculegion/female/overworld.png differ
diff --git a/graphics/pokemon/basculegion/female/overworld_normal.pal b/graphics/pokemon/basculegion/female/overworld_normal.pal
new file mode 100644
index 000000000000..e90d24829899
--- /dev/null
+++ b/graphics/pokemon/basculegion/female/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+41 57 49
+164 189 180
+41 90 123
+255 255 255
+123 172 172
+172 222 230
+16 65 32
+0 0 0
+41 189 90
+98 123 115
+32 115 57
+57 82 74
+32 139 65
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/basculegion/female/overworld_shiny.pal b/graphics/pokemon/basculegion/female/overworld_shiny.pal
new file mode 100644
index 000000000000..6855fd47a05d
--- /dev/null
+++ b/graphics/pokemon/basculegion/female/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+41 57 49
+164 189 180
+180 156 16
+255 255 255
+213 197 74
+238 222 98
+16 74 32
+0 0 0
+41 197 82
+98 123 115
+32 123 65
+57 82 74
+32 139 65
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/basculegion/overworld.png b/graphics/pokemon/basculegion/overworld.png
new file mode 100644
index 000000000000..26780d419e2b
Binary files /dev/null and b/graphics/pokemon/basculegion/overworld.png differ
diff --git a/graphics/pokemon/basculegion/overworld_normal.pal b/graphics/pokemon/basculegion/overworld_normal.pal
new file mode 100644
index 000000000000..3b067717e9cf
--- /dev/null
+++ b/graphics/pokemon/basculegion/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+41 57 49
+164 189 180
+123 16 41
+255 255 255
+189 24 57
+238 41 82
+16 65 32
+0 0 0
+41 189 90
+98 123 115
+32 115 57
+57 82 74
+32 139 65
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/basculegion/overworld_shiny.pal b/graphics/pokemon/basculegion/overworld_shiny.pal
new file mode 100644
index 000000000000..02e2b66beb5c
--- /dev/null
+++ b/graphics/pokemon/basculegion/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+41 57 49
+164 189 180
+106 8 139
+255 255 255
+172 57 213
+197 74 230
+16 74 32
+0 0 0
+41 197 82
+98 123 115
+32 123 65
+57 82 74
+32 139 65
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/basculin/blue_striped/overworld.png b/graphics/pokemon/basculin/blue_striped/overworld.png
new file mode 100644
index 000000000000..b8f0a345838b
Binary files /dev/null and b/graphics/pokemon/basculin/blue_striped/overworld.png differ
diff --git a/graphics/pokemon/basculin/blue_striped/overworld_normal.pal b/graphics/pokemon/basculin/blue_striped/overworld_normal.pal
new file mode 100644
index 000000000000..4fc642185a1b
--- /dev/null
+++ b/graphics/pokemon/basculin/blue_striped/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 210 164
+26 47 45
+5 5 5
+55 71 71
+74 84 84
+0 63 147
+196 196 196
+98 98 98
+38 111 46
+24 74 24
+25 121 208
+60 159 77
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/basculin/blue_striped/overworld_shiny.pal b/graphics/pokemon/basculin/blue_striped/overworld_shiny.pal
new file mode 100644
index 000000000000..21e43e78950e
--- /dev/null
+++ b/graphics/pokemon/basculin/blue_striped/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 210 164
+28 44 51
+5 5 5
+55 71 71
+55 71 71
+0 104 152
+198 198 165
+90 93 74
+80 136 16
+48 64 8
+32 168 208
+120 192 80
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/basculin/hisuian/overworld.png b/graphics/pokemon/basculin/hisuian/overworld.png
new file mode 100644
index 000000000000..ca1d9a7a86f5
Binary files /dev/null and b/graphics/pokemon/basculin/hisuian/overworld.png differ
diff --git a/graphics/pokemon/basculin/hisuian/overworld_normal.pal b/graphics/pokemon/basculin/hisuian/overworld_normal.pal
new file mode 100644
index 000000000000..d8f1c2033722
--- /dev/null
+++ b/graphics/pokemon/basculin/hisuian/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+103 53 53
+0 0 0
+48 48 48
+248 248 248
+120 144 184
+72 72 72
+168 192 248
+88 88 88
+0 0 0
+122 168 175
+171 222 224
+72 168 112
+56 112 72
+40 64 24
+61 77 86
+120 144 192
diff --git a/graphics/pokemon/basculin/overworld.png b/graphics/pokemon/basculin/overworld.png
new file mode 100644
index 000000000000..4b80cc1b8acc
Binary files /dev/null and b/graphics/pokemon/basculin/overworld.png differ
diff --git a/graphics/pokemon/basculin/overworld_normal.pal b/graphics/pokemon/basculin/overworld_normal.pal
new file mode 100644
index 000000000000..0997fcaffd73
--- /dev/null
+++ b/graphics/pokemon/basculin/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+26 47 45
+6 6 6
+55 71 71
+75 84 84
+152 28 21
+198 199 199
+98 98 98
+38 111 46
+24 74 24
+255 79 63
+60 160 77
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/basculin/overworld_shiny.pal b/graphics/pokemon/basculin/overworld_shiny.pal
new file mode 100644
index 000000000000..22bc51359c2d
--- /dev/null
+++ b/graphics/pokemon/basculin/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+28 44 51
+6 6 6
+55 71 71
+91 94 79
+152 64 0
+231 231 197
+80 136 16
+160 160 128
+47 64 8
+222 109 66
+120 192 80
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/basculin/white_striped/overworld.png b/graphics/pokemon/basculin/white_striped/overworld.png
new file mode 100644
index 000000000000..f1583c2ed3a2
Binary files /dev/null and b/graphics/pokemon/basculin/white_striped/overworld.png differ
diff --git a/graphics/pokemon/basculin/white_striped/overworld_normal.pal b/graphics/pokemon/basculin/white_striped/overworld_normal.pal
new file mode 100644
index 000000000000..1e07057199d8
--- /dev/null
+++ b/graphics/pokemon/basculin/white_striped/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+49 49 49
+255 255 255
+172 197 255
+0 0 0
+57 115 74
+41 65 24
+123 172 172
+172 222 230
+74 172 115
+74 74 74
+90 90 90
+57 74 82
+123 148 197
+123 148 189
+0 0 0
diff --git a/graphics/pokemon/basculin/white_striped/overworld_shiny.pal b/graphics/pokemon/basculin/white_striped/overworld_shiny.pal
new file mode 100644
index 000000000000..b4e0639fc85d
--- /dev/null
+++ b/graphics/pokemon/basculin/white_striped/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+49 49 49
+255 255 255
+172 197 255
+0 0 0
+32 139 65
+16 98 41
+123 172 172
+172 222 230
+41 189 90
+74 74 74
+90 90 90
+57 74 82
+123 148 197
+123 148 189
+0 0 0
diff --git a/graphics/pokemon/bastiodon/overworld.png b/graphics/pokemon/bastiodon/overworld.png
new file mode 100644
index 000000000000..711737cd554a
Binary files /dev/null and b/graphics/pokemon/bastiodon/overworld.png differ
diff --git a/graphics/pokemon/bastiodon/overworld_normal.pal b/graphics/pokemon/bastiodon/overworld_normal.pal
new file mode 100644
index 000000000000..df63870bf905
--- /dev/null
+++ b/graphics/pokemon/bastiodon/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 56 56
+200 200 200
+0 0 0
+72 72 72
+152 152 152
+120 120 120
+96 96 96
+224 168 32
+248 184 64
+192 144 48
+248 184 88
+144 104 72
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/bastiodon/overworld_shiny.pal b/graphics/pokemon/bastiodon/overworld_shiny.pal
new file mode 100644
index 000000000000..847a44ae7118
--- /dev/null
+++ b/graphics/pokemon/bastiodon/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 56 56
+200 200 200
+0 0 0
+56 64 120
+152 152 152
+104 112 160
+72 80 136
+200 168 32
+248 208 64
+192 176 48
+248 208 88
+144 152 72
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/bayleef/overworld.png b/graphics/pokemon/bayleef/overworld.png
new file mode 100644
index 000000000000..f34c8ba5ea88
Binary files /dev/null and b/graphics/pokemon/bayleef/overworld.png differ
diff --git a/graphics/pokemon/bayleef/overworld_normal.pal b/graphics/pokemon/bayleef/overworld_normal.pal
new file mode 100644
index 000000000000..3082081f74e9
--- /dev/null
+++ b/graphics/pokemon/bayleef/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 80 0
+0 0 0
+160 192 80
+88 144 8
+96 80 32
+232 216 88
+200 184 88
+168 152 88
+216 216 216
+232 232 248
+176 80 120
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/bayleef/overworld_shiny.pal b/graphics/pokemon/bayleef/overworld_shiny.pal
new file mode 100644
index 000000000000..ab3b366f8475
--- /dev/null
+++ b/graphics/pokemon/bayleef/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 80 64
+0 0 0
+232 176 88
+184 136 72
+104 64 32
+240 208 176
+232 176 152
+216 144 120
+216 216 216
+232 232 248
+176 80 120
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/beartic/overworld.png b/graphics/pokemon/beartic/overworld.png
new file mode 100644
index 000000000000..275c67607f74
Binary files /dev/null and b/graphics/pokemon/beartic/overworld.png differ
diff --git a/graphics/pokemon/beartic/overworld_normal.pal b/graphics/pokemon/beartic/overworld_normal.pal
new file mode 100644
index 000000000000..8d1d6067fc5f
--- /dev/null
+++ b/graphics/pokemon/beartic/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 210 164
+65 98 106
+222 246 255
+180 197 205
+0 0 0
+16 16 16
+65 139 164
+115 189 205
+232 232 248
+65 65 65
+238 246 255
+156 230 246
+187 255 255
+106 115 115
+160 168 184
+0 0 0
diff --git a/graphics/pokemon/beartic/overworld_shiny.pal b/graphics/pokemon/beartic/overworld_shiny.pal
new file mode 100644
index 000000000000..0c1200ad62ed
--- /dev/null
+++ b/graphics/pokemon/beartic/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 210 164
+64 80 104
+200 216 248
+152 184 224
+0 0 0
+16 16 16
+80 128 216
+56 96 184
+232 232 248
+65 65 65
+208 208 248
+112 168 248
+187 255 255
+106 115 115
+64 80 104
+0 0 0
diff --git a/graphics/pokemon/beautifly/overworld.png b/graphics/pokemon/beautifly/overworld.png
new file mode 100644
index 000000000000..36c31fed279a
Binary files /dev/null and b/graphics/pokemon/beautifly/overworld.png differ
diff --git a/graphics/pokemon/beautifly/overworld_normal.pal b/graphics/pokemon/beautifly/overworld_normal.pal
new file mode 100644
index 000000000000..aa5f03a52440
--- /dev/null
+++ b/graphics/pokemon/beautifly/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 64 72
+96 72 32
+40 40 48
+96 96 104
+0 0 0
+192 168 48
+248 216 104
+216 88 96
+208 208 216
+176 176 176
+80 144 224
+48 96 152
+232 232 248
+184 48 72
+0 0 0
diff --git a/graphics/pokemon/beautifly/overworld_shiny.pal b/graphics/pokemon/beautifly/overworld_shiny.pal
new file mode 100644
index 000000000000..d0af9a497372
--- /dev/null
+++ b/graphics/pokemon/beautifly/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+112 72 72
+96 72 32
+80 40 64
+144 120 104
+0 0 0
+192 168 112
+248 224 152
+216 88 96
+208 208 216
+176 176 176
+80 144 224
+48 96 152
+232 232 248
+184 48 72
+0 0 0
diff --git a/graphics/pokemon/beedrill/overworld.png b/graphics/pokemon/beedrill/overworld.png
new file mode 100644
index 000000000000..2c840cd2780f
Binary files /dev/null and b/graphics/pokemon/beedrill/overworld.png differ
diff --git a/graphics/pokemon/beedrill/overworld_normal.pal b/graphics/pokemon/beedrill/overworld_normal.pal
new file mode 100644
index 000000000000..68b54715f30d
--- /dev/null
+++ b/graphics/pokemon/beedrill/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+80 80 80
+192 192 192
+104 80 40
+144 144 144
+232 232 248
+248 208 64
+192 152 40
+192 40 64
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/beedrill/overworld_shiny.pal b/graphics/pokemon/beedrill/overworld_shiny.pal
new file mode 100644
index 000000000000..b876e92f0886
--- /dev/null
+++ b/graphics/pokemon/beedrill/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+80 80 80
+192 192 192
+72 104 40
+144 144 144
+232 232 248
+216 248 64
+168 192 0
+40 136 192
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/beheeyem/overworld.png b/graphics/pokemon/beheeyem/overworld.png
new file mode 100644
index 000000000000..fa645de6c1a7
Binary files /dev/null and b/graphics/pokemon/beheeyem/overworld.png differ
diff --git a/graphics/pokemon/beheeyem/overworld_normal.pal b/graphics/pokemon/beheeyem/overworld_normal.pal
new file mode 100644
index 000000000000..202a03be24d0
--- /dev/null
+++ b/graphics/pokemon/beheeyem/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+98 65 41
+98 65 41
+222 156 123
+164 98 74
+164 98 74
+41 41 41
+32 98 41
+32 156 57
+197 164 123
+230 197 164
+230 205 0
+205 0 0
+57 180 32
+0 0 0
diff --git a/graphics/pokemon/beheeyem/overworld_shiny.pal b/graphics/pokemon/beheeyem/overworld_shiny.pal
new file mode 100644
index 000000000000..80718d8e854f
--- /dev/null
+++ b/graphics/pokemon/beheeyem/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+80 72 64
+98 65 41
+192 152 136
+152 96 88
+164 98 74
+41 41 41
+32 64 72
+16 120 160
+197 164 123
+230 197 164
+0 136 200
+168 0 200
+160 224 0
+0 0 0
diff --git a/graphics/pokemon/beldum/overworld.png b/graphics/pokemon/beldum/overworld.png
new file mode 100644
index 000000000000..adbf191d71a6
Binary files /dev/null and b/graphics/pokemon/beldum/overworld.png differ
diff --git a/graphics/pokemon/beldum/overworld_normal.pal b/graphics/pokemon/beldum/overworld_normal.pal
new file mode 100644
index 000000000000..541e734ed648
--- /dev/null
+++ b/graphics/pokemon/beldum/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 72 104
+152 216 240
+0 0 0
+112 160 208
+88 128 168
+152 200 232
+64 96 120
+40 40 48
+136 40 40
+96 96 104
+64 64 64
+232 232 248
+176 56 56
+184 184 200
+144 144 160
diff --git a/graphics/pokemon/beldum/overworld_shiny.pal b/graphics/pokemon/beldum/overworld_shiny.pal
new file mode 100644
index 000000000000..87aeae6b4641
--- /dev/null
+++ b/graphics/pokemon/beldum/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 40 48
+216 216 224
+0 0 0
+152 152 160
+104 104 112
+184 184 200
+64 64 64
+40 40 48
+136 40 40
+128 88 0
+64 64 64
+232 232 248
+176 56 56
+248 248 144
+144 144 160
diff --git a/graphics/pokemon/bellossom/overworld.png b/graphics/pokemon/bellossom/overworld.png
new file mode 100644
index 000000000000..dc57c73f18a0
Binary files /dev/null and b/graphics/pokemon/bellossom/overworld.png differ
diff --git a/graphics/pokemon/bellossom/overworld_normal.pal b/graphics/pokemon/bellossom/overworld_normal.pal
new file mode 100644
index 000000000000..466de3fca1a4
--- /dev/null
+++ b/graphics/pokemon/bellossom/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+0 0 0
+112 32 8
+232 80 56
+96 160 64
+72 104 24
+192 40 24
+96 88 8
+152 192 112
+240 192 56
+216 136 24
+232 232 248
+16 64 40
+216 152 16
+56 136 88
+0 0 0
diff --git a/graphics/pokemon/bellossom/overworld_shiny.pal b/graphics/pokemon/bellossom/overworld_shiny.pal
new file mode 100644
index 000000000000..25df85d13e91
--- /dev/null
+++ b/graphics/pokemon/bellossom/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+0 0 0
+120 32 96
+232 160 208
+128 88 152
+72 40 80
+208 96 152
+96 88 8
+184 136 224
+216 216 96
+136 128 32
+232 232 248
+16 80 80
+176 176 64
+56 136 120
+0 0 0
diff --git a/graphics/pokemon/bellsprout/overworld.png b/graphics/pokemon/bellsprout/overworld.png
new file mode 100644
index 000000000000..4a509105d4e8
Binary files /dev/null and b/graphics/pokemon/bellsprout/overworld.png differ
diff --git a/graphics/pokemon/bellsprout/overworld_normal.pal b/graphics/pokemon/bellsprout/overworld_normal.pal
new file mode 100644
index 000000000000..4f3c8d426fb6
--- /dev/null
+++ b/graphics/pokemon/bellsprout/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 64 48
+240 224 72
+184 160 48
+0 0 0
+240 120 160
+168 64 112
+120 8 64
+64 88 40
+136 216 80
+96 152 56
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/bellsprout/overworld_shiny.pal b/graphics/pokemon/bellsprout/overworld_shiny.pal
new file mode 100644
index 000000000000..723a5c485f0c
--- /dev/null
+++ b/graphics/pokemon/bellsprout/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 48 48
+248 200 72
+192 144 48
+0 0 0
+192 200 232
+152 136 176
+80 56 112
+88 56 16
+240 200 72
+184 120 48
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/bergmite/overworld.png b/graphics/pokemon/bergmite/overworld.png
new file mode 100644
index 000000000000..966246499a7e
Binary files /dev/null and b/graphics/pokemon/bergmite/overworld.png differ
diff --git a/graphics/pokemon/bergmite/overworld_normal.pal b/graphics/pokemon/bergmite/overworld_normal.pal
new file mode 100644
index 000000000000..8f5d3fcf5fb1
--- /dev/null
+++ b/graphics/pokemon/bergmite/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+230 238 248
+160 216 252
+96 158 212
+20 137 214
+20 76 119
+112 40 148
+249 210 73
+20 137 214
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/bergmite/overworld_shiny.pal b/graphics/pokemon/bergmite/overworld_shiny.pal
new file mode 100644
index 000000000000..8a84c1ef897c
--- /dev/null
+++ b/graphics/pokemon/bergmite/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+217 240 252
+160 216 252
+96 158 212
+20 137 214
+20 76 119
+141 129 24
+249 210 73
+230 214 80
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/bewear/overworld.png b/graphics/pokemon/bewear/overworld.png
new file mode 100644
index 000000000000..5f663ef9484d
Binary files /dev/null and b/graphics/pokemon/bewear/overworld.png differ
diff --git a/graphics/pokemon/bewear/overworld_normal.pal b/graphics/pokemon/bewear/overworld_normal.pal
new file mode 100644
index 000000000000..55605188c9b9
--- /dev/null
+++ b/graphics/pokemon/bewear/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+235 221 226
+199 184 189
+237 158 190
+167 136 147
+200 96 119
+120 91 102
+92 73 79
+66 47 53
+82 42 49
+41 27 27
+36 21 26
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/bewear/overworld_shiny.pal b/graphics/pokemon/bewear/overworld_shiny.pal
new file mode 100644
index 000000000000..38e17a10b792
--- /dev/null
+++ b/graphics/pokemon/bewear/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+235 221 226
+199 184 189
+248 192 72
+167 136 147
+200 144 40
+120 91 102
+92 73 79
+66 47 53
+82 42 49
+41 27 27
+36 21 26
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/bibarel/overworld.png b/graphics/pokemon/bibarel/overworld.png
new file mode 100644
index 000000000000..99e3de968e3d
Binary files /dev/null and b/graphics/pokemon/bibarel/overworld.png differ
diff --git a/graphics/pokemon/bibarel/overworld_normal.pal b/graphics/pokemon/bibarel/overworld_normal.pal
new file mode 100644
index 000000000000..05425f06186c
--- /dev/null
+++ b/graphics/pokemon/bibarel/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 48 48
+88 80 64
+56 56 48
+176 136 56
+192 160 64
+0 0 0
+176 128 64
+72 56 32
+200 160 96
+232 208 128
+152 24 40
+232 232 248
+184 184 192
+136 136 136
+0 0 0
diff --git a/graphics/pokemon/bibarel/overworld_shiny.pal b/graphics/pokemon/bibarel/overworld_shiny.pal
new file mode 100644
index 000000000000..fb9f7dafbe2d
--- /dev/null
+++ b/graphics/pokemon/bibarel/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 48 48
+120 80 104
+88 56 72
+176 136 56
+216 200 160
+0 0 0
+184 152 80
+72 56 32
+216 192 136
+240 224 184
+152 24 40
+232 232 248
+184 184 192
+136 136 136
+0 0 0
diff --git a/graphics/pokemon/bidoof/overworld.png b/graphics/pokemon/bidoof/overworld.png
new file mode 100644
index 000000000000..9fe63802b4e4
Binary files /dev/null and b/graphics/pokemon/bidoof/overworld.png differ
diff --git a/graphics/pokemon/bidoof/overworld_normal.pal b/graphics/pokemon/bidoof/overworld_normal.pal
new file mode 100644
index 000000000000..4bff58898367
--- /dev/null
+++ b/graphics/pokemon/bidoof/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 56 32
+0 0 0
+176 128 64
+200 160 96
+192 160 64
+232 208 128
+152 24 40
+88 80 64
+232 232 248
+56 56 48
+184 184 192
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/bidoof/overworld_shiny.pal b/graphics/pokemon/bidoof/overworld_shiny.pal
new file mode 100644
index 000000000000..235741c2820e
--- /dev/null
+++ b/graphics/pokemon/bidoof/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 56 32
+0 0 0
+184 152 80
+216 192 136
+216 200 160
+240 224 184
+152 24 40
+120 80 104
+232 232 248
+88 56 72
+184 184 192
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/binacle/overworld.png b/graphics/pokemon/binacle/overworld.png
new file mode 100644
index 000000000000..d82d7365cf97
Binary files /dev/null and b/graphics/pokemon/binacle/overworld.png differ
diff --git a/graphics/pokemon/binacle/overworld_normal.pal b/graphics/pokemon/binacle/overworld_normal.pal
new file mode 100644
index 000000000000..9259f9b3afc4
--- /dev/null
+++ b/graphics/pokemon/binacle/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+63 52 39
+16 16 16
+190 167 122
+229 215 187
+63 52 39
+231 120 77
+137 102 61
+63 52 39
+190 167 122
+229 215 187
+117 114 136
+202 200 212
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/binacle/overworld_shiny.pal b/graphics/pokemon/binacle/overworld_shiny.pal
new file mode 100644
index 000000000000..32620845f9ce
--- /dev/null
+++ b/graphics/pokemon/binacle/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+34 90 70
+16 16 16
+70 153 124
+94 188 155
+49 80 97
+232 117 169
+116 149 83
+70 95 61
+190 167 122
+229 215 187
+109 157 186
+164 196 215
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/bisharp/overworld.png b/graphics/pokemon/bisharp/overworld.png
new file mode 100644
index 000000000000..e946968fb549
Binary files /dev/null and b/graphics/pokemon/bisharp/overworld.png differ
diff --git a/graphics/pokemon/bisharp/overworld_normal.pal b/graphics/pokemon/bisharp/overworld_normal.pal
new file mode 100644
index 000000000000..65f45b8ab311
--- /dev/null
+++ b/graphics/pokemon/bisharp/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+76 63 37
+0 0 0
+198 195 202
+196 164 53
+16 16 16
+104 24 24
+144 48 64
+64 64 73
+192 48 48
+108 108 116
+40 40 40
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/bisharp/overworld_shiny.pal b/graphics/pokemon/bisharp/overworld_shiny.pal
new file mode 100644
index 000000000000..13f26bf2a31b
--- /dev/null
+++ b/graphics/pokemon/bisharp/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 64 32
+0 0 0
+215 215 197
+174 171 86
+16 16 16
+48 40 88
+48 56 152
+64 64 73
+80 64 216
+108 108 116
+40 40 40
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/blacephalon/overworld.png b/graphics/pokemon/blacephalon/overworld.png
new file mode 100644
index 000000000000..b6e66bb5a5d4
Binary files /dev/null and b/graphics/pokemon/blacephalon/overworld.png differ
diff --git a/graphics/pokemon/blacephalon/overworld_normal.pal b/graphics/pokemon/blacephalon/overworld_normal.pal
new file mode 100644
index 000000000000..4114383a3cb0
--- /dev/null
+++ b/graphics/pokemon/blacephalon/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+239 239 239
+215 215 215
+223 246 25
+255 225 55
+247 135 202
+227 115 215
+166 156 43
+102 165 225
+76 149 219
+94 94 94
+107 103 5
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/blacephalon/overworld_shiny.pal b/graphics/pokemon/blacephalon/overworld_shiny.pal
new file mode 100644
index 000000000000..ce347df50b97
--- /dev/null
+++ b/graphics/pokemon/blacephalon/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+8 0 192
+16 0 120
+223 246 25
+255 225 55
+247 135 202
+227 115 215
+166 156 43
+102 165 225
+76 149 219
+0 0 64
+107 103 5
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/blastoise/overworld.png b/graphics/pokemon/blastoise/overworld.png
new file mode 100644
index 000000000000..80d48304a68f
Binary files /dev/null and b/graphics/pokemon/blastoise/overworld.png differ
diff --git a/graphics/pokemon/blastoise/overworld_normal.pal b/graphics/pokemon/blastoise/overworld_normal.pal
new file mode 100644
index 000000000000..f86c7621ef56
--- /dev/null
+++ b/graphics/pokemon/blastoise/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 56 88
+96 96 168
+144 136 232
+0 0 0
+80 80 80
+232 232 248
+184 184 184
+136 136 136
+176 112 24
+128 80 8
+240 200 80
+152 136 80
+72 40 8
+200 168 80
+0 0 0
diff --git a/graphics/pokemon/blastoise/overworld_shiny.pal b/graphics/pokemon/blastoise/overworld_shiny.pal
new file mode 100644
index 000000000000..11143b11cb99
--- /dev/null
+++ b/graphics/pokemon/blastoise/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 48 72
+128 128 168
+176 160 232
+0 0 0
+80 80 80
+232 232 248
+184 184 184
+136 136 136
+144 168 24
+88 120 8
+240 200 80
+152 136 80
+56 72 8
+200 168 80
+0 0 0
diff --git a/graphics/pokemon/blaziken/overworld.png b/graphics/pokemon/blaziken/overworld.png
new file mode 100644
index 000000000000..21fce8c8e9b7
Binary files /dev/null and b/graphics/pokemon/blaziken/overworld.png differ
diff --git a/graphics/pokemon/blaziken/overworld_normal.pal b/graphics/pokemon/blaziken/overworld_normal.pal
new file mode 100644
index 000000000000..ef97e466b094
--- /dev/null
+++ b/graphics/pokemon/blaziken/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+112 88 64
+104 16 0
+240 232 224
+232 48 40
+0 0 0
+240 224 152
+248 96 88
+208 184 88
+176 128 80
+168 24 24
+248 208 80
+32 96 184
+224 168 16
+184 168 160
+96 72 0
diff --git a/graphics/pokemon/blaziken/overworld_shiny.pal b/graphics/pokemon/blaziken/overworld_shiny.pal
new file mode 100644
index 000000000000..f97d2892d0a0
--- /dev/null
+++ b/graphics/pokemon/blaziken/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+112 88 64
+104 16 0
+240 232 224
+232 32 8
+0 0 0
+248 240 208
+248 40 56
+224 216 192
+216 200 184
+168 16 8
+248 184 40
+32 96 184
+240 144 0
+184 168 160
+96 72 0
diff --git a/graphics/pokemon/blipbug/overworld.png b/graphics/pokemon/blipbug/overworld.png
new file mode 100644
index 000000000000..2ce530aec6b2
Binary files /dev/null and b/graphics/pokemon/blipbug/overworld.png differ
diff --git a/graphics/pokemon/blipbug/overworld_normal.pal b/graphics/pokemon/blipbug/overworld_normal.pal
new file mode 100644
index 000000000000..a66a7aa31012
--- /dev/null
+++ b/graphics/pokemon/blipbug/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+252 252 252
+12 16 36
+0 0 0
+68 68 132
+36 40 80
+232 224 216
+212 196 180
+196 188 112
+252 244 156
+252 200 24
+196 152 4
+212 196 180
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/blipbug/overworld_shiny.pal b/graphics/pokemon/blipbug/overworld_shiny.pal
new file mode 100644
index 000000000000..9603d4a4debe
--- /dev/null
+++ b/graphics/pokemon/blipbug/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+252 252 252
+8 16 32
+0 0 0
+65 65 131
+32 41 82
+238 230 222
+213 197 180
+197 189 115
+255 246 156
+164 131 205
+115 90 139
+213 197 180
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/blissey/overworld.png b/graphics/pokemon/blissey/overworld.png
new file mode 100644
index 000000000000..490eeb038fb3
Binary files /dev/null and b/graphics/pokemon/blissey/overworld.png differ
diff --git a/graphics/pokemon/blissey/overworld_normal.pal b/graphics/pokemon/blissey/overworld_normal.pal
new file mode 100644
index 000000000000..cd5d1b7c3963
--- /dev/null
+++ b/graphics/pokemon/blissey/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 16 64
+248 120 184
+0 0 0
+248 168 200
+184 88 136
+144 64 112
+224 80 96
+232 232 248
+64 72 96
+168 184 208
+200 208 232
+128 144 168
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/blissey/overworld_shiny.pal b/graphics/pokemon/blissey/overworld_shiny.pal
new file mode 100644
index 000000000000..6cad84283ade
--- /dev/null
+++ b/graphics/pokemon/blissey/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 16 64
+248 160 208
+0 0 0
+248 192 216
+208 136 168
+144 64 112
+224 80 96
+232 232 248
+112 120 128
+192 200 216
+224 224 232
+160 176 192
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/blitzle/overworld.png b/graphics/pokemon/blitzle/overworld.png
new file mode 100644
index 000000000000..09a594f17b27
Binary files /dev/null and b/graphics/pokemon/blitzle/overworld.png differ
diff --git a/graphics/pokemon/blitzle/overworld_normal.pal b/graphics/pokemon/blitzle/overworld_normal.pal
new file mode 100644
index 000000000000..cd08b136ebc7
--- /dev/null
+++ b/graphics/pokemon/blitzle/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 88 88
+55 55 55
+88 88 88
+55 55 55
+248 248 248
+0 0 0
+200 200 200
+0 168 216
+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/blitzle/overworld_shiny.pal b/graphics/pokemon/blitzle/overworld_shiny.pal
new file mode 100644
index 000000000000..422cd57da45b
--- /dev/null
+++ b/graphics/pokemon/blitzle/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 88 88
+32 48 80
+48 80 112
+55 55 55
+248 248 248
+0 0 0
+200 200 200
+24 232 104
+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/boldore/overworld.png b/graphics/pokemon/boldore/overworld.png
new file mode 100644
index 000000000000..013a09dcf3d4
Binary files /dev/null and b/graphics/pokemon/boldore/overworld.png differ
diff --git a/graphics/pokemon/boldore/overworld_normal.pal b/graphics/pokemon/boldore/overworld_normal.pal
new file mode 100644
index 000000000000..02775cb1b650
--- /dev/null
+++ b/graphics/pokemon/boldore/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+32 41 57
+41 57 106
+65 82 139
+16 16 16
+115 49 32
+205 74 57
+255 106 82
+156 123 16
+90 65 32
+172 41 24
+255 205 65
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/boldore/overworld_shiny.pal b/graphics/pokemon/boldore/overworld_shiny.pal
new file mode 100644
index 000000000000..124e716e4a5c
--- /dev/null
+++ b/graphics/pokemon/boldore/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+32 16 48
+64 40 104
+88 64 136
+16 16 16
+16 48 56
+56 160 200
+80 208 248
+168 96 32
+88 64 32
+32 96 112
+248 120 32
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/boltund/overworld.png b/graphics/pokemon/boltund/overworld.png
new file mode 100644
index 000000000000..122b4ce53ec1
Binary files /dev/null and b/graphics/pokemon/boltund/overworld.png differ
diff --git a/graphics/pokemon/boltund/overworld_normal.pal b/graphics/pokemon/boltund/overworld_normal.pal
new file mode 100644
index 000000000000..410819e8290d
--- /dev/null
+++ b/graphics/pokemon/boltund/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 52 38
+91 84 9
+216 189 72
+248 217 80
+0 0 0
+56 74 55
+104 104 104
+223 223 223
+254 238 99
+255 255 255
+155 166 154
+23 31 23
+96 115 95
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/boltund/overworld_shiny.pal b/graphics/pokemon/boltund/overworld_shiny.pal
new file mode 100644
index 000000000000..2a2b9893b90f
--- /dev/null
+++ b/graphics/pokemon/boltund/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 52 38
+90 82 8
+222 189 74
+255 222 82
+0 0 0
+115 74 106
+106 106 106
+222 222 222
+255 238 98
+255 255 255
+164 106 156
+49 32 41
+139 106 131
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/bombirdier/front.png b/graphics/pokemon/bombirdier/front.png
index 97159715f25c..b8aa83644ba1 100644
Binary files a/graphics/pokemon/bombirdier/front.png and b/graphics/pokemon/bombirdier/front.png differ
diff --git a/graphics/pokemon/bonsly/overworld.png b/graphics/pokemon/bonsly/overworld.png
new file mode 100644
index 000000000000..800f6f8b99fd
Binary files /dev/null and b/graphics/pokemon/bonsly/overworld.png differ
diff --git a/graphics/pokemon/bonsly/overworld_normal.pal b/graphics/pokemon/bonsly/overworld_normal.pal
new file mode 100644
index 000000000000..da265e54dd0a
--- /dev/null
+++ b/graphics/pokemon/bonsly/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+24 80 16
+72 152 64
+120 208 120
+0 0 0
+184 152 88
+88 64 16
+152 112 72
+224 192 0
+200 168 0
+112 88 48
+192 96 160
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/bonsly/overworld_shiny.pal b/graphics/pokemon/bonsly/overworld_shiny.pal
new file mode 100644
index 000000000000..3b0172af2e7e
--- /dev/null
+++ b/graphics/pokemon/bonsly/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+120 40 0
+200 72 0
+224 128 64
+0 0 0
+192 184 88
+88 88 16
+136 144 72
+224 192 0
+200 168 0
+112 104 48
+192 96 160
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/bouffalant/overworld.png b/graphics/pokemon/bouffalant/overworld.png
new file mode 100644
index 000000000000..96df51de8673
Binary files /dev/null and b/graphics/pokemon/bouffalant/overworld.png differ
diff --git a/graphics/pokemon/bouffalant/overworld_normal.pal b/graphics/pokemon/bouffalant/overworld_normal.pal
new file mode 100644
index 000000000000..583d8bc8ab99
--- /dev/null
+++ b/graphics/pokemon/bouffalant/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+32 24 8
+63 55 40
+11 9 7
+231 209 163
+41 33 23
+138 95 40
+95 95 104
+195 153 62
+95 63 33
+47 47 55
+147 121 79
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/bouffalant/overworld_shiny.pal b/graphics/pokemon/bouffalant/overworld_shiny.pal
new file mode 100644
index 000000000000..f1eb8c938406
--- /dev/null
+++ b/graphics/pokemon/bouffalant/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+11 9 7
+80 72 64
+11 9 7
+228 201 178
+44 35 30
+200 172 97
+95 95 104
+104 48 40
+104 48 40
+44 35 30
+147 121 79
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/bounsweet/back.png b/graphics/pokemon/bounsweet/back.png
index cd2a5401b59b..c6ddb69f5d04 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
new file mode 100644
index 000000000000..c64dd42ad11a
Binary files /dev/null and b/graphics/pokemon/bounsweet/overworld.png differ
diff --git a/graphics/pokemon/bounsweet/overworld_normal.pal b/graphics/pokemon/bounsweet/overworld_normal.pal
new file mode 100644
index 000000000000..10cd6d77ab50
--- /dev/null
+++ b/graphics/pokemon/bounsweet/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+225 232 232
+192 224 112
+232 200 0
+120 184 72
+136 153 149
+224 104 128
+224 96 144
+195 81 133
+153 70 108
+168 64 88
+131 29 92
+83 26 46
+61 71 69
+32 64 32
+0 0 0
diff --git a/graphics/pokemon/bounsweet/overworld_shiny.pal b/graphics/pokemon/bounsweet/overworld_shiny.pal
new file mode 100644
index 000000000000..769d9abd9e40
--- /dev/null
+++ b/graphics/pokemon/bounsweet/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+247 240 184
+216 192 248
+232 200 0
+160 128 240
+200 192 128
+224 104 128
+200 112 152
+176 64 104
+153 70 108
+168 64 88
+131 29 92
+83 26 46
+61 71 69
+96 80 168
+0 0 0
diff --git a/graphics/pokemon/braixen/overworld.png b/graphics/pokemon/braixen/overworld.png
new file mode 100644
index 000000000000..66b76ffeefb7
Binary files /dev/null and b/graphics/pokemon/braixen/overworld.png differ
diff --git a/graphics/pokemon/braixen/overworld_normal.pal b/graphics/pokemon/braixen/overworld_normal.pal
new file mode 100644
index 000000000000..7a1077b989d6
--- /dev/null
+++ b/graphics/pokemon/braixen/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+144 112 32
+224 173 16
+0 0 0
+255 224 96
+148 41 34
+201 66 48
+243 86 58
+129 114 116
+255 255 255
+201 198 205
+20 20 20
+84 33 24
+128 71 40
+51 36 53
+77 67 74
diff --git a/graphics/pokemon/braixen/overworld_shiny.pal b/graphics/pokemon/braixen/overworld_shiny.pal
new file mode 100644
index 000000000000..b28632064d0d
--- /dev/null
+++ b/graphics/pokemon/braixen/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+95 70 112
+132 107 148
+0 0 0
+177 146 199
+148 41 34
+201 66 48
+243 86 58
+129 114 116
+255 255 255
+201 198 205
+20 20 20
+84 33 24
+128 71 40
+51 36 53
+77 67 74
diff --git a/graphics/pokemon/braviary/hisuian/overworld.png b/graphics/pokemon/braviary/hisuian/overworld.png
new file mode 100644
index 000000000000..55634525180b
Binary files /dev/null and b/graphics/pokemon/braviary/hisuian/overworld.png differ
diff --git a/graphics/pokemon/braviary/hisuian/overworld_normal.pal b/graphics/pokemon/braviary/hisuian/overworld_normal.pal
new file mode 100644
index 000000000000..af0d29cc0db8
--- /dev/null
+++ b/graphics/pokemon/braviary/hisuian/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+255 255 255
+57 65 74
+180 156 148
+98 82 74
+74 90 115
+172 90 230
+139 65 189
+131 213 255
+222 139 24
+205 57 41
+246 213 65
+180 172 131
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/braviary/hisuian/overworld_shiny.pal b/graphics/pokemon/braviary/hisuian/overworld_shiny.pal
new file mode 100644
index 000000000000..796d7bec9f5b
--- /dev/null
+++ b/graphics/pokemon/braviary/hisuian/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+65 57 49
+41 49 49
+41 41 32
+16 16 16
+49 65 82
+131 213 255
+115 197 230
+255 255 255
+222 139 24
+205 57 41
+246 213 65
+41 41 32
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/braviary/overworld.png b/graphics/pokemon/braviary/overworld.png
new file mode 100644
index 000000000000..8e352afab7e3
Binary files /dev/null and b/graphics/pokemon/braviary/overworld.png differ
diff --git a/graphics/pokemon/braviary/overworld_normal.pal b/graphics/pokemon/braviary/overworld_normal.pal
new file mode 100644
index 000000000000..c9ec83d8140b
--- /dev/null
+++ b/graphics/pokemon/braviary/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+82 82 114
+49 49 74
+214 210 195
+32 32 32
+179 157 82
+74 16 0
+115 32 32
+0 0 0
+164 49 49
+24 98 172
+98 82 32
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/braviary/overworld_shiny.pal b/graphics/pokemon/braviary/overworld_shiny.pal
new file mode 100644
index 000000000000..7241967249db
--- /dev/null
+++ b/graphics/pokemon/braviary/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+109 90 67
+64 47 31
+209 205 192
+32 32 32
+12 40 72
+24 72 120
+0 0 0
+32 104 168
+24 98 172
+98 82 32
+203 158 26
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/breloom/overworld.png b/graphics/pokemon/breloom/overworld.png
new file mode 100644
index 000000000000..b398f72f5d02
Binary files /dev/null and b/graphics/pokemon/breloom/overworld.png differ
diff --git a/graphics/pokemon/breloom/overworld_normal.pal b/graphics/pokemon/breloom/overworld_normal.pal
new file mode 100644
index 000000000000..3f05a222b66a
--- /dev/null
+++ b/graphics/pokemon/breloom/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+32 56 16
+128 192 88
+104 168 64
+96 32 32
+72 112 48
+80 72 48
+200 64 64
+0 0 0
+160 40 40
+48 80 32
+176 136 56
+232 208 144
+232 232 248
+208 184 112
+128 104 56
diff --git a/graphics/pokemon/breloom/overworld_shiny.pal b/graphics/pokemon/breloom/overworld_shiny.pal
new file mode 100644
index 000000000000..76694dd38e92
--- /dev/null
+++ b/graphics/pokemon/breloom/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+64 24 24
+248 88 56
+200 40 32
+120 48 16
+160 40 40
+80 72 48
+248 184 24
+0 0 0
+232 112 0
+120 32 0
+176 136 56
+232 208 144
+232 232 248
+208 184 112
+128 104 56
diff --git a/graphics/pokemon/brionne/overworld.png b/graphics/pokemon/brionne/overworld.png
new file mode 100644
index 000000000000..e2c617a175eb
Binary files /dev/null and b/graphics/pokemon/brionne/overworld.png differ
diff --git a/graphics/pokemon/brionne/overworld_normal.pal b/graphics/pokemon/brionne/overworld_normal.pal
new file mode 100644
index 000000000000..210b9cfb043c
--- /dev/null
+++ b/graphics/pokemon/brionne/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+218 231 234
+93 199 219
+141 196 207
+115 165 187
+55 160 205
+238 126 192
+138 149 154
+54 107 164
+57 88 119
+27 56 83
+101 45 64
+16 16 16
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/brionne/overworld_shiny.pal b/graphics/pokemon/brionne/overworld_shiny.pal
new file mode 100644
index 000000000000..4cbe707b8b4d
--- /dev/null
+++ b/graphics/pokemon/brionne/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+218 231 234
+152 144 216
+248 208 200
+115 165 187
+112 96 184
+238 126 192
+138 149 154
+112 96 184
+57 88 119
+27 56 83
+101 45 64
+16 16 16
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/bronzong/overworld.png b/graphics/pokemon/bronzong/overworld.png
new file mode 100644
index 000000000000..128e7276ddfa
Binary files /dev/null and b/graphics/pokemon/bronzong/overworld.png differ
diff --git a/graphics/pokemon/bronzong/overworld_normal.pal b/graphics/pokemon/bronzong/overworld_normal.pal
new file mode 100644
index 000000000000..cc7be816dcfc
--- /dev/null
+++ b/graphics/pokemon/bronzong/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+40 72 64
+144 192 200
+48 136 128
+72 160 152
+48 96 88
+32 56 48
+56 112 104
+96 152 152
+160 48 56
+128 48 56
+152 168 168
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/bronzong/overworld_shiny.pal b/graphics/pokemon/bronzong/overworld_shiny.pal
new file mode 100644
index 000000000000..f2d01d47c767
--- /dev/null
+++ b/graphics/pokemon/bronzong/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+72 104 240
+0 0 0
+64 88 64
+176 216 80
+96 152 80
+104 176 80
+80 120 72
+40 64 64
+80 120 72
+120 192 72
+160 48 56
+128 48 56
+152 168 168
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/bronzor/overworld.png b/graphics/pokemon/bronzor/overworld.png
new file mode 100644
index 000000000000..e861c435ad9b
Binary files /dev/null and b/graphics/pokemon/bronzor/overworld.png differ
diff --git a/graphics/pokemon/bronzor/overworld_normal.pal b/graphics/pokemon/bronzor/overworld_normal.pal
new file mode 100644
index 000000000000..4f9b38dbbb24
--- /dev/null
+++ b/graphics/pokemon/bronzor/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 64 64
+88 176 208
+72 152 192
+40 96 120
+0 0 0
+64 120 152
+232 200 0
+32 80 96
+160 144 16
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/bronzor/overworld_shiny.pal b/graphics/pokemon/bronzor/overworld_shiny.pal
new file mode 100644
index 000000000000..dbc54af8a321
--- /dev/null
+++ b/graphics/pokemon/bronzor/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 64 64
+152 200 80
+128 176 72
+80 120 72
+0 0 0
+104 144 72
+232 200 0
+64 88 64
+160 144 16
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/bruxish/overworld.png b/graphics/pokemon/bruxish/overworld.png
new file mode 100644
index 000000000000..04757426e6cc
Binary files /dev/null and b/graphics/pokemon/bruxish/overworld.png differ
diff --git a/graphics/pokemon/bruxish/overworld_normal.pal b/graphics/pokemon/bruxish/overworld_normal.pal
new file mode 100644
index 000000000000..613b331e9952
--- /dev/null
+++ b/graphics/pokemon/bruxish/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+248 244 244
+245 241 71
+225 220 64
+164 214 232
+196 203 194
+189 186 67
+232 120 180
+176 101 197
+59 105 101
+140 82 158
+75 74 26
+87 48 120
+105 44 76
+38 23 43
+0 0 0
diff --git a/graphics/pokemon/bruxish/overworld_shiny.pal b/graphics/pokemon/bruxish/overworld_shiny.pal
new file mode 100644
index 000000000000..7de5796528cc
--- /dev/null
+++ b/graphics/pokemon/bruxish/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+248 244 244
+232 208 136
+225 220 64
+248 248 248
+196 203 194
+200 160 80
+232 56 40
+104 208 152
+59 105 101
+56 160 104
+75 74 26
+56 160 104
+105 44 76
+38 23 43
+0 0 0
diff --git a/graphics/pokemon/budew/overworld.png b/graphics/pokemon/budew/overworld.png
new file mode 100644
index 000000000000..a588906b9355
Binary files /dev/null and b/graphics/pokemon/budew/overworld.png differ
diff --git a/graphics/pokemon/budew/overworld_normal.pal b/graphics/pokemon/budew/overworld_normal.pal
new file mode 100644
index 000000000000..a3239feb8b7d
--- /dev/null
+++ b/graphics/pokemon/budew/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+32 56 16
+168 216 144
+144 200 104
+88 144 16
+64 112 8
+32 80 8
+200 152 16
+216 208 56
+0 0 0
+144 112 32
+64 64 64
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/budew/overworld_shiny.pal b/graphics/pokemon/budew/overworld_shiny.pal
new file mode 100644
index 000000000000..18ec56f1c7d8
--- /dev/null
+++ b/graphics/pokemon/budew/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 56 16
+232 240 152
+200 208 112
+160 176 16
+120 136 8
+64 88 8
+200 152 16
+216 208 56
+0 0 0
+144 112 32
+64 64 64
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/buizel/overworld.png b/graphics/pokemon/buizel/overworld.png
new file mode 100644
index 000000000000..3a2543f9ff7d
Binary files /dev/null and b/graphics/pokemon/buizel/overworld.png differ
diff --git a/graphics/pokemon/buizel/overworld_normal.pal b/graphics/pokemon/buizel/overworld_normal.pal
new file mode 100644
index 000000000000..67d19673cb94
--- /dev/null
+++ b/graphics/pokemon/buizel/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 56 48
+240 224 128
+240 128 16
+200 104 32
+0 0 0
+200 144 0
+248 192 32
+216 184 72
+160 96 40
+232 232 248
+72 136 192
+112 112 112
+64 96 120
+176 192 208
+0 0 0
diff --git a/graphics/pokemon/buizel/overworld_shiny.pal b/graphics/pokemon/buizel/overworld_shiny.pal
new file mode 100644
index 000000000000..e0106d0deeff
--- /dev/null
+++ b/graphics/pokemon/buizel/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 64 24
+248 240 184
+232 192 88
+176 144 56
+0 0 0
+152 152 152
+200 200 200
+240 208 96
+96 96 64
+232 232 248
+72 136 192
+88 88 88
+64 96 120
+168 184 200
+0 0 0
diff --git a/graphics/pokemon/bulbasaur/overworld.png b/graphics/pokemon/bulbasaur/overworld.png
new file mode 100644
index 000000000000..3eb99143e0f2
Binary files /dev/null and b/graphics/pokemon/bulbasaur/overworld.png differ
diff --git a/graphics/pokemon/bulbasaur/overworld_normal.pal b/graphics/pokemon/bulbasaur/overworld_normal.pal
new file mode 100644
index 000000000000..1e893b858b86
--- /dev/null
+++ b/graphics/pokemon/bulbasaur/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+208 248 184
+64 96 48
+96 168 16
+64 64 64
+136 224 32
+0 0 0
+104 208 120
+64 152 80
+104 16 24
+232 232 248
+184 48 24
+200 200 200
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/bulbasaur/overworld_shiny.pal b/graphics/pokemon/bulbasaur/overworld_shiny.pal
new file mode 100644
index 000000000000..cf17aebf6bf6
--- /dev/null
+++ b/graphics/pokemon/bulbasaur/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+208 248 184
+64 96 48
+32 120 64
+64 64 64
+80 160 88
+0 0 0
+160 208 56
+112 152 48
+104 16 24
+232 232 248
+184 48 24
+216 216 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/buneary/overworld.png b/graphics/pokemon/buneary/overworld.png
new file mode 100644
index 000000000000..488506babb2f
Binary files /dev/null and b/graphics/pokemon/buneary/overworld.png differ
diff --git a/graphics/pokemon/buneary/overworld_normal.pal b/graphics/pokemon/buneary/overworld_normal.pal
new file mode 100644
index 000000000000..220a9fff36fd
--- /dev/null
+++ b/graphics/pokemon/buneary/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 48 32
+232 192 136
+232 216 168
+96 80 64
+0 0 0
+200 160 64
+184 144 88
+144 80 88
+152 120 64
+208 120 120
+232 232 248
+80 80 72
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/buneary/overworld_shiny.pal b/graphics/pokemon/buneary/overworld_shiny.pal
new file mode 100644
index 000000000000..9ebf9a6bb2ca
--- /dev/null
+++ b/graphics/pokemon/buneary/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 48 32
+232 144 160
+232 184 192
+96 80 64
+0 0 0
+176 96 120
+192 136 120
+104 120 152
+152 104 88
+160 160 192
+232 232 248
+80 80 72
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/bunnelby/overworld.png b/graphics/pokemon/bunnelby/overworld.png
new file mode 100644
index 000000000000..8b76ee56a40c
Binary files /dev/null and b/graphics/pokemon/bunnelby/overworld.png differ
diff --git a/graphics/pokemon/bunnelby/overworld_normal.pal b/graphics/pokemon/bunnelby/overworld_normal.pal
new file mode 100644
index 000000000000..6ee9fbf5644a
--- /dev/null
+++ b/graphics/pokemon/bunnelby/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+31 31 31
+170 119 85
+0 0 0
+207 205 206
+154 148 148
+126 121 130
+56 48 32
+222 140 149
+71 69 69
+224 224 222
+255 255 255
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/bunnelby/overworld_shiny.pal b/graphics/pokemon/bunnelby/overworld_shiny.pal
new file mode 100644
index 000000000000..664545988b70
--- /dev/null
+++ b/graphics/pokemon/bunnelby/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+31 31 31
+213 215 210
+0 0 0
+149 153 143
+119 119 113
+126 121 130
+56 48 32
+246 173 123
+72 68 83
+224 224 222
+255 255 255
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/burmy/overworld.png b/graphics/pokemon/burmy/overworld.png
new file mode 100644
index 000000000000..a8c3fce5f187
Binary files /dev/null and b/graphics/pokemon/burmy/overworld.png differ
diff --git a/graphics/pokemon/burmy/overworld_normal.pal b/graphics/pokemon/burmy/overworld_normal.pal
new file mode 100644
index 000000000000..390ceea8c663
--- /dev/null
+++ b/graphics/pokemon/burmy/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 48 48
+0 0 0
+96 96 96
+40 72 40
+64 120 24
+80 168 24
+136 208 56
+248 176 0
+184 120 64
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/burmy/overworld_shiny.pal b/graphics/pokemon/burmy/overworld_shiny.pal
new file mode 100644
index 000000000000..c823c2045338
--- /dev/null
+++ b/graphics/pokemon/burmy/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 48 48
+0 0 0
+96 128 152
+40 72 40
+64 120 24
+80 168 24
+136 208 56
+248 176 0
+184 120 64
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/burmy/sandy_cloak/overworld.png b/graphics/pokemon/burmy/sandy_cloak/overworld.png
new file mode 100644
index 000000000000..882ef2e32ac3
Binary files /dev/null and b/graphics/pokemon/burmy/sandy_cloak/overworld.png differ
diff --git a/graphics/pokemon/burmy/sandy_cloak/overworld_normal.pal b/graphics/pokemon/burmy/sandy_cloak/overworld_normal.pal
new file mode 100644
index 000000000000..3e985f0e3af1
--- /dev/null
+++ b/graphics/pokemon/burmy/sandy_cloak/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 48 48
+0 0 0
+96 96 96
+96 80 64
+152 144 96
+232 216 136
+200 192 136
+248 176 0
+160 160 160
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/burmy/sandy_cloak/overworld_shiny.pal b/graphics/pokemon/burmy/sandy_cloak/overworld_shiny.pal
new file mode 100644
index 000000000000..77ab69f0c1d8
--- /dev/null
+++ b/graphics/pokemon/burmy/sandy_cloak/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 48 48
+0 0 0
+96 128 152
+96 80 64
+152 144 96
+232 216 136
+200 192 136
+248 176 0
+160 160 160
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/burmy/trash_cloak/overworld.png b/graphics/pokemon/burmy/trash_cloak/overworld.png
new file mode 100644
index 000000000000..dc193fe430b7
Binary files /dev/null and b/graphics/pokemon/burmy/trash_cloak/overworld.png differ
diff --git a/graphics/pokemon/burmy/trash_cloak/overworld_normal.pal b/graphics/pokemon/burmy/trash_cloak/overworld_normal.pal
new file mode 100644
index 000000000000..c1c9ac316b5c
--- /dev/null
+++ b/graphics/pokemon/burmy/trash_cloak/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 48 48
+0 0 0
+96 96 96
+96 48 64
+168 56 104
+248 168 168
+216 120 152
+248 176 0
+136 136 136
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/burmy/trash_cloak/overworld_shiny.pal b/graphics/pokemon/burmy/trash_cloak/overworld_shiny.pal
new file mode 100644
index 000000000000..fe5fe09e89b8
--- /dev/null
+++ b/graphics/pokemon/burmy/trash_cloak/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 48 48
+0 0 0
+96 128 152
+96 48 64
+168 56 104
+248 168 168
+216 120 152
+248 176 0
+136 136 136
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/butterfree/overworld.png b/graphics/pokemon/butterfree/overworld.png
new file mode 100644
index 000000000000..c29f337badf4
Binary files /dev/null and b/graphics/pokemon/butterfree/overworld.png differ
diff --git a/graphics/pokemon/butterfree/overworld_normal.pal b/graphics/pokemon/butterfree/overworld_normal.pal
new file mode 100644
index 000000000000..1ce5a15e5d70
--- /dev/null
+++ b/graphics/pokemon/butterfree/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+64 40 88
+96 96 96
+232 232 248
+184 192 224
+112 80 200
+160 104 224
+144 144 144
+192 40 64
+248 112 136
+104 200 248
+80 144 224
+48 64 144
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/butterfree/overworld_shiny.pal b/graphics/pokemon/butterfree/overworld_shiny.pal
new file mode 100644
index 000000000000..222adecce1f0
--- /dev/null
+++ b/graphics/pokemon/butterfree/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+64 40 88
+96 96 96
+232 232 248
+224 176 216
+112 80 200
+160 104 224
+168 128 136
+48 136 48
+136 208 144
+248 112 136
+176 72 96
+112 40 56
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/buzzwole/overworld.png b/graphics/pokemon/buzzwole/overworld.png
new file mode 100644
index 000000000000..2459f87cfa65
Binary files /dev/null and b/graphics/pokemon/buzzwole/overworld.png differ
diff --git a/graphics/pokemon/buzzwole/overworld_normal.pal b/graphics/pokemon/buzzwole/overworld_normal.pal
new file mode 100644
index 000000000000..5e32bbf67e31
--- /dev/null
+++ b/graphics/pokemon/buzzwole/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+241 241 241
+255 184 136
+244 181 85
+255 148 74
+241 145 73
+235 116 82
+255 82 57
+205 82 57
+114 96 92
+234 77 77
+184 58 58
+90 66 65
+129 39 39
+35 29 29
+0 0 0
diff --git a/graphics/pokemon/buzzwole/overworld_shiny.pal b/graphics/pokemon/buzzwole/overworld_shiny.pal
new file mode 100644
index 000000000000..2f28ca1bcce4
--- /dev/null
+++ b/graphics/pokemon/buzzwole/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+241 241 241
+255 184 136
+244 181 85
+255 148 74
+241 145 73
+235 116 82
+255 82 57
+205 82 57
+114 96 92
+16 224 48
+0 72 8
+90 66 65
+24 144 40
+35 29 29
+0 0 0
diff --git a/graphics/pokemon/cacnea/overworld.png b/graphics/pokemon/cacnea/overworld.png
new file mode 100644
index 000000000000..3344958768ed
Binary files /dev/null and b/graphics/pokemon/cacnea/overworld.png differ
diff --git a/graphics/pokemon/cacnea/overworld_normal.pal b/graphics/pokemon/cacnea/overworld_normal.pal
new file mode 100644
index 000000000000..1ebe5943730e
--- /dev/null
+++ b/graphics/pokemon/cacnea/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+88 80 48
+200 152 56
+16 16 16
+248 216 88
+40 64 40
+104 168 96
+56 96 56
+72 136 64
+128 192 120
+80 80 80
+248 248 248
+216 224 224
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/cacnea/overworld_shiny.pal b/graphics/pokemon/cacnea/overworld_shiny.pal
new file mode 100644
index 000000000000..bb2a62a1be1e
--- /dev/null
+++ b/graphics/pokemon/cacnea/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+88 80 48
+200 152 56
+16 16 16
+248 216 88
+104 40 40
+184 128 48
+144 56 40
+184 112 48
+216 160 48
+80 80 80
+248 248 248
+216 224 224
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/cacturne/overworld.png b/graphics/pokemon/cacturne/overworld.png
new file mode 100644
index 000000000000..7084b00283af
Binary files /dev/null and b/graphics/pokemon/cacturne/overworld.png differ
diff --git a/graphics/pokemon/cacturne/overworld_normal.pal b/graphics/pokemon/cacturne/overworld_normal.pal
new file mode 100644
index 000000000000..6e76ee1e28ff
--- /dev/null
+++ b/graphics/pokemon/cacturne/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+40 64 40
+72 136 64
+56 96 56
+16 16 16
+104 168 96
+248 216 88
+80 80 80
+128 168 64
+168 200 120
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/cacturne/overworld_shiny.pal b/graphics/pokemon/cacturne/overworld_shiny.pal
new file mode 100644
index 000000000000..85ac2ca6d899
--- /dev/null
+++ b/graphics/pokemon/cacturne/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+88 8 24
+168 72 64
+128 40 40
+16 16 16
+184 96 88
+248 216 88
+80 80 80
+184 128 48
+216 160 48
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/calyrex/ice_rider/overworld.png b/graphics/pokemon/calyrex/ice_rider/overworld.png
new file mode 100644
index 000000000000..24b3b6215a11
Binary files /dev/null and b/graphics/pokemon/calyrex/ice_rider/overworld.png differ
diff --git a/graphics/pokemon/calyrex/ice_rider/overworld_normal.pal b/graphics/pokemon/calyrex/ice_rider/overworld_normal.pal
new file mode 100644
index 000000000000..9eb0730f2323
--- /dev/null
+++ b/graphics/pokemon/calyrex/ice_rider/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+203 37 37
+0 0 0
+25 35 94
+0 37 32
+146 175 206
+183 206 229
+0 75 65
+52 69 167
+66 119 111
+100 100 100
+242 242 242
+64 83 103
+216 215 206
+0 0 0
+169 160 155
+191 191 191
diff --git a/graphics/pokemon/calyrex/ice_rider/overworld_shiny.pal b/graphics/pokemon/calyrex/ice_rider/overworld_shiny.pal
new file mode 100644
index 000000000000..9eb0730f2323
--- /dev/null
+++ b/graphics/pokemon/calyrex/ice_rider/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+203 37 37
+0 0 0
+25 35 94
+0 37 32
+146 175 206
+183 206 229
+0 75 65
+52 69 167
+66 119 111
+100 100 100
+242 242 242
+64 83 103
+216 215 206
+0 0 0
+169 160 155
+191 191 191
diff --git a/graphics/pokemon/calyrex/overworld.png b/graphics/pokemon/calyrex/overworld.png
new file mode 100644
index 000000000000..34cc158ba4a2
Binary files /dev/null and b/graphics/pokemon/calyrex/overworld.png differ
diff --git a/graphics/pokemon/calyrex/overworld_normal.pal b/graphics/pokemon/calyrex/overworld_normal.pal
new file mode 100644
index 000000000000..ce21dfcc9d0b
--- /dev/null
+++ b/graphics/pokemon/calyrex/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+180 228 28
+4 8 40
+0 12 8
+136 140 176
+204 208 228
+0 72 64
+52 68 164
+64 116 108
+100 100 100
+252 252 252
+68 64 60
+0 0 0
+168 160 152
+216 212 204
+0 36 32
+0 0 0
diff --git a/graphics/pokemon/calyrex/overworld_shiny.pal b/graphics/pokemon/calyrex/overworld_shiny.pal
new file mode 100644
index 000000000000..421d5ccfbe86
--- /dev/null
+++ b/graphics/pokemon/calyrex/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 8 41
+0 8 8
+139 139 180
+205 213 230
+0 74 65
+49 65 164
+65 115 106
+98 98 98
+213 205 148
+65 65 57
+0 0 0
+172 139 90
+213 205 148
+0 32 32
+0 0 0
diff --git a/graphics/pokemon/calyrex/shadow_rider/overworld.png b/graphics/pokemon/calyrex/shadow_rider/overworld.png
new file mode 100644
index 000000000000..bb8c91b2f3a2
Binary files /dev/null and b/graphics/pokemon/calyrex/shadow_rider/overworld.png differ
diff --git a/graphics/pokemon/calyrex/shadow_rider/overworld_normal.pal b/graphics/pokemon/calyrex/shadow_rider/overworld_normal.pal
new file mode 100644
index 000000000000..8114f67fe8ab
--- /dev/null
+++ b/graphics/pokemon/calyrex/shadow_rider/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+65 194 115
+0 0 0
+65 117 106
+148 133 189
+246 242 246
+65 64 74
+32 36 65
+49 68 164
+213 210 205
+0 32 24
+148 174 205
+74 52 148
+172 161 156
+98 101 98
+24 16 65
+49 36 115
diff --git a/graphics/pokemon/calyrex/shadow_rider/overworld_shiny.pal b/graphics/pokemon/calyrex/shadow_rider/overworld_shiny.pal
new file mode 100644
index 000000000000..8114f67fe8ab
--- /dev/null
+++ b/graphics/pokemon/calyrex/shadow_rider/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+65 194 115
+0 0 0
+65 117 106
+148 133 189
+246 242 246
+65 64 74
+32 36 65
+49 68 164
+213 210 205
+0 32 24
+148 174 205
+74 52 148
+172 161 156
+98 101 98
+24 16 65
+49 36 115
diff --git a/graphics/pokemon/camerupt/overworld.png b/graphics/pokemon/camerupt/overworld.png
new file mode 100644
index 000000000000..291156bd7971
Binary files /dev/null and b/graphics/pokemon/camerupt/overworld.png differ
diff --git a/graphics/pokemon/camerupt/overworld_normal.pal b/graphics/pokemon/camerupt/overworld_normal.pal
new file mode 100644
index 000000000000..36e4a6a04b27
--- /dev/null
+++ b/graphics/pokemon/camerupt/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+216 104 48
+160 48 24
+192 184 152
+48 56 64
+160 152 120
+200 72 24
+128 112 80
+72 64 48
+88 32 32
+224 136 80
+88 96 96
+248 248 248
+72 144 160
+0 0 0
diff --git a/graphics/pokemon/camerupt/overworld_shiny.pal b/graphics/pokemon/camerupt/overworld_shiny.pal
new file mode 100644
index 000000000000..6b8e3ea3fe66
--- /dev/null
+++ b/graphics/pokemon/camerupt/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+96 104 104
+64 72 72
+216 184 176
+32 40 40
+176 152 136
+88 96 96
+144 112 96
+104 64 48
+24 32 32
+120 128 128
+56 64 64
+248 248 248
+216 184 96
+0 0 0
diff --git a/graphics/pokemon/carbink/overworld.png b/graphics/pokemon/carbink/overworld.png
new file mode 100644
index 000000000000..61891ec1e548
Binary files /dev/null and b/graphics/pokemon/carbink/overworld.png differ
diff --git a/graphics/pokemon/carbink/overworld_normal.pal b/graphics/pokemon/carbink/overworld_normal.pal
new file mode 100644
index 000000000000..e187751a8f8f
--- /dev/null
+++ b/graphics/pokemon/carbink/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+26 54 94
+124 128 152
+85 96 149
+16 16 16
+230 238 248
+153 163 175
+161 200 255
+91 136 201
+15 80 173
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/carbink/overworld_shiny.pal b/graphics/pokemon/carbink/overworld_shiny.pal
new file mode 100644
index 000000000000..3c15bf46d69d
--- /dev/null
+++ b/graphics/pokemon/carbink/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+37 35 37
+79 78 79
+55 54 55
+16 16 16
+121 208 216
+86 160 167
+86 160 167
+48 116 124
+15 80 173
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/carkol/overworld.png b/graphics/pokemon/carkol/overworld.png
new file mode 100644
index 000000000000..9255ba4231ea
Binary files /dev/null and b/graphics/pokemon/carkol/overworld.png differ
diff --git a/graphics/pokemon/carkol/overworld_normal.pal b/graphics/pokemon/carkol/overworld_normal.pal
new file mode 100644
index 000000000000..be92f7c02908
--- /dev/null
+++ b/graphics/pokemon/carkol/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 255 42
+10 10 10
+26 26 26
+50 50 50
+181 65 65
+212 83 83
+2 2 2
+34 33 33
+0 0 0
+66 65 62
+255 255 255
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/carkol/overworld_shiny.pal b/graphics/pokemon/carkol/overworld_shiny.pal
new file mode 100644
index 000000000000..fc06152d0f8d
--- /dev/null
+++ b/graphics/pokemon/carkol/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+8 8 8
+24 24 24
+49 49 49
+180 65 65
+213 82 82
+16 32 32
+49 82 98
+0 0 0
+82 123 131
+255 255 255
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/carnivine/overworld.png b/graphics/pokemon/carnivine/overworld.png
new file mode 100644
index 000000000000..014e7e0c0374
Binary files /dev/null and b/graphics/pokemon/carnivine/overworld.png differ
diff --git a/graphics/pokemon/carnivine/overworld_normal.pal b/graphics/pokemon/carnivine/overworld_normal.pal
new file mode 100644
index 000000000000..e72cdc37b8ed
--- /dev/null
+++ b/graphics/pokemon/carnivine/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 72 16
+0 0 0
+104 136 48
+80 96 40
+64 120 24
+128 168 64
+176 184 192
+232 232 248
+144 72 48
+104 40 40
+152 200 88
+56 56 56
+200 152 16
+136 96 24
+72 144 24
diff --git a/graphics/pokemon/carnivine/overworld_shiny.pal b/graphics/pokemon/carnivine/overworld_shiny.pal
new file mode 100644
index 000000000000..021b6427b968
--- /dev/null
+++ b/graphics/pokemon/carnivine/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 48 16
+0 0 0
+144 128 16
+144 80 16
+192 112 24
+192 168 32
+176 184 192
+232 232 248
+144 72 48
+104 40 40
+216 200 88
+56 56 56
+200 152 16
+136 96 24
+208 112 24
diff --git a/graphics/pokemon/carracosta/overworld.png b/graphics/pokemon/carracosta/overworld.png
new file mode 100644
index 000000000000..15ed479fb9d3
Binary files /dev/null and b/graphics/pokemon/carracosta/overworld.png differ
diff --git a/graphics/pokemon/carracosta/overworld_normal.pal b/graphics/pokemon/carracosta/overworld_normal.pal
new file mode 100644
index 000000000000..e1c755d8bf5e
--- /dev/null
+++ b/graphics/pokemon/carracosta/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+41 57 98
+0 0 0
+57 115 156
+41 49 57
+57 115 156
+74 148 213
+98 115 131
+65 74 90
+164 205 213
+65 74 90
+82 90 106
+57 115 156
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/carracosta/overworld_shiny.pal b/graphics/pokemon/carracosta/overworld_shiny.pal
new file mode 100644
index 000000000000..a0e4b6ae4f4a
--- /dev/null
+++ b/graphics/pokemon/carracosta/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+41 57 98
+0 0 0
+80 120 160
+8 24 24
+57 115 156
+112 168 208
+32 64 72
+24 56 56
+136 184 192
+65 74 90
+16 40 48
+48 72 120
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/carvanha/overworld.png b/graphics/pokemon/carvanha/overworld.png
new file mode 100644
index 000000000000..2591306f44ee
Binary files /dev/null and b/graphics/pokemon/carvanha/overworld.png differ
diff --git a/graphics/pokemon/carvanha/overworld_normal.pal b/graphics/pokemon/carvanha/overworld_normal.pal
new file mode 100644
index 000000000000..12e11c88d62a
--- /dev/null
+++ b/graphics/pokemon/carvanha/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+144 48 8
+0 0 0
+200 56 32
+240 192 16
+104 80 0
+224 160 8
+248 216 32
+8 48 120
+16 96 184
+48 120 232
+248 80 40
+168 176 184
+48 56 64
+232 232 248
+0 0 0
diff --git a/graphics/pokemon/carvanha/overworld_shiny.pal b/graphics/pokemon/carvanha/overworld_shiny.pal
new file mode 100644
index 000000000000..8cbd2af9ddcb
--- /dev/null
+++ b/graphics/pokemon/carvanha/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 160 176
+64 120 200
+0 0 0
+96 160 224
+240 192 16
+104 80 0
+224 160 8
+248 216 32
+48 88 0
+88 128 24
+128 176 56
+128 200 248
+168 176 184
+48 56 64
+232 232 248
+0 0 0
diff --git a/graphics/pokemon/cascoon/overworld.png b/graphics/pokemon/cascoon/overworld.png
new file mode 100644
index 000000000000..5ee9cfa0e9a8
Binary files /dev/null and b/graphics/pokemon/cascoon/overworld.png differ
diff --git a/graphics/pokemon/cascoon/overworld_normal.pal b/graphics/pokemon/cascoon/overworld_normal.pal
new file mode 100644
index 000000000000..081fde892c3c
--- /dev/null
+++ b/graphics/pokemon/cascoon/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+120 104 160
+160 152 200
+208 200 232
+80 64 120
+128 32 56
+184 48 72
+232 232 248
+240 104 104
+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/cascoon/overworld_shiny.pal b/graphics/pokemon/cascoon/overworld_shiny.pal
new file mode 100644
index 000000000000..84e5a572f13b
--- /dev/null
+++ b/graphics/pokemon/cascoon/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+120 144 88
+168 184 128
+208 224 168
+80 104 56
+128 32 56
+184 48 72
+232 232 248
+240 104 104
+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/castform/overworld.png b/graphics/pokemon/castform/overworld.png
new file mode 100644
index 000000000000..377ea45b3dd4
Binary files /dev/null and b/graphics/pokemon/castform/overworld.png differ
diff --git a/graphics/pokemon/castform/overworld_normal.pal b/graphics/pokemon/castform/overworld_normal.pal
new file mode 100644
index 000000000000..4d2ffa5c055d
--- /dev/null
+++ b/graphics/pokemon/castform/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+197 197 148
+0 0 0
+64 64 80
+192 192 208
+96 96 112
+160 160 176
+128 128 144
+232 232 248
+232 232 248
+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/castform/overworld_shiny.pal b/graphics/pokemon/castform/overworld_shiny.pal
new file mode 100644
index 000000000000..b634a3dee33b
--- /dev/null
+++ b/graphics/pokemon/castform/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+197 197 148
+0 0 0
+64 64 80
+208 168 224
+112 96 128
+176 144 192
+144 120 160
+248 224 88
+232 232 248
+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/castform/rainy/overworld.png b/graphics/pokemon/castform/rainy/overworld.png
new file mode 100644
index 000000000000..bdbf1c83432a
Binary files /dev/null and b/graphics/pokemon/castform/rainy/overworld.png differ
diff --git a/graphics/pokemon/castform/rainy/overworld_normal.pal b/graphics/pokemon/castform/rainy/overworld_normal.pal
new file mode 100644
index 000000000000..95df630d9bab
--- /dev/null
+++ b/graphics/pokemon/castform/rainy/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+144 208 208
+0 0 0
+33 50 133
+96 136 224
+136 166 236
+152 184 224
+191 217 250
+48 72 184
+152 184 224
+136 166 236
+72 102 197
+207 229 255
+52 74 145
+120 136 168
+192 200 208
+39 40 40
diff --git a/graphics/pokemon/castform/rainy/overworld_shiny.pal b/graphics/pokemon/castform/rainy/overworld_shiny.pal
new file mode 100644
index 000000000000..6fa0fa1ac21e
--- /dev/null
+++ b/graphics/pokemon/castform/rainy/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 163 233
+0 0 0
+33 50 133
+96 136 224
+136 166 236
+152 184 224
+191 217 250
+21 149 141
+38 220 211
+33 186 177
+23 161 153
+130 255 111
+30 137 99
+120 136 168
+192 200 208
+39 40 40
diff --git a/graphics/pokemon/castform/snowy/overworld.png b/graphics/pokemon/castform/snowy/overworld.png
new file mode 100644
index 000000000000..a5ffd5f54cc9
Binary files /dev/null and b/graphics/pokemon/castform/snowy/overworld.png differ
diff --git a/graphics/pokemon/castform/snowy/overworld_normal.pal b/graphics/pokemon/castform/snowy/overworld_normal.pal
new file mode 100644
index 000000000000..e795605be53f
--- /dev/null
+++ b/graphics/pokemon/castform/snowy/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 163 233
+30 40 37
+115 180 149
+149 225 192
+0 0 0
+73 114 104
+61 84 78
+83 53 136
+147 117 224
+172 157 241
+128 104 176
+219 205 253
+255 255 255
+127 79 201
+197 197 148
+0 0 0
diff --git a/graphics/pokemon/castform/snowy/overworld_shiny.pal b/graphics/pokemon/castform/snowy/overworld_shiny.pal
new file mode 100644
index 000000000000..e9b66e635079
--- /dev/null
+++ b/graphics/pokemon/castform/snowy/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 163 233
+30 40 37
+115 180 149
+149 225 192
+0 0 0
+73 114 104
+61 84 78
+48 50 138
+73 85 188
+126 149 233
+241 245 102
+86 100 222
+255 255 255
+74 72 203
+197 197 148
+0 0 0
diff --git a/graphics/pokemon/castform/sunny/overworld.png b/graphics/pokemon/castform/sunny/overworld.png
new file mode 100644
index 000000000000..adafc6de76d6
Binary files /dev/null and b/graphics/pokemon/castform/sunny/overworld.png differ
diff --git a/graphics/pokemon/castform/sunny/overworld_normal.pal b/graphics/pokemon/castform/sunny/overworld_normal.pal
new file mode 100644
index 000000000000..5f4c2ae5f099
--- /dev/null
+++ b/graphics/pokemon/castform/sunny/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 163 233
+8 8 8
+121 79 32
+240 232 168
+224 184 112
+200 128 48
+146 54 13
+253 126 69
+0 0 0
+224 96 30
+231 105 40
+239 220 65
+64 64 80
+240 240 240
+197 197 148
+0 0 0
diff --git a/graphics/pokemon/castform/sunny/overworld_shiny.pal b/graphics/pokemon/castform/sunny/overworld_shiny.pal
new file mode 100644
index 000000000000..7b6e2f1fb8cc
--- /dev/null
+++ b/graphics/pokemon/castform/sunny/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+144 208 208
+8 8 8
+121 79 32
+240 232 168
+224 184 112
+200 128 48
+137 21 24
+241 81 85
+0 0 0
+211 43 42
+218 53 52
+255 160 108
+64 64 80
+240 240 240
+197 197 148
+0 0 0
diff --git a/graphics/pokemon/caterpie/overworld.png b/graphics/pokemon/caterpie/overworld.png
new file mode 100644
index 000000000000..8c023b59d525
Binary files /dev/null and b/graphics/pokemon/caterpie/overworld.png differ
diff --git a/graphics/pokemon/caterpie/overworld_normal.pal b/graphics/pokemon/caterpie/overworld_normal.pal
new file mode 100644
index 000000000000..fc939ec4d4d1
--- /dev/null
+++ b/graphics/pokemon/caterpie/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+160 48 72
+64 88 32
+248 120 112
+104 152 40
+168 232 64
+248 232 96
+0 0 0
+128 96 40
+80 80 80
+168 152 64
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/caterpie/overworld_shiny.pal b/graphics/pokemon/caterpie/overworld_shiny.pal
new file mode 100644
index 000000000000..e013fd7cbb1c
--- /dev/null
+++ b/graphics/pokemon/caterpie/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+144 40 48
+104 56 32
+240 96 72
+248 152 40
+248 224 96
+248 232 96
+0 0 0
+128 96 40
+80 80 80
+168 152 64
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/celebi/overworld.png b/graphics/pokemon/celebi/overworld.png
new file mode 100644
index 000000000000..95d372831ab0
Binary files /dev/null and b/graphics/pokemon/celebi/overworld.png differ
diff --git a/graphics/pokemon/celebi/overworld_normal.pal b/graphics/pokemon/celebi/overworld_normal.pal
new file mode 100644
index 000000000000..6380e014c9be
--- /dev/null
+++ b/graphics/pokemon/celebi/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 160 176
+32 64 32
+120 184 72
+72 136 80
+8 104 176
+0 0 0
+80 176 208
+192 224 112
+248 248 192
+144 152 152
+32 40 40
+232 232 248
+24 168 224
+136 184 240
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/celebi/overworld_shiny.pal b/graphics/pokemon/celebi/overworld_shiny.pal
new file mode 100644
index 000000000000..3b938d1c4b6b
--- /dev/null
+++ b/graphics/pokemon/celebi/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+64 32 32
+248 120 216
+168 72 184
+48 112 88
+0 0 0
+72 200 120
+248 192 232
+248 224 240
+144 152 152
+32 40 40
+232 232 248
+24 168 224
+136 184 240
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/celesteela/overworld.png b/graphics/pokemon/celesteela/overworld.png
new file mode 100644
index 000000000000..df6abdc791f0
Binary files /dev/null and b/graphics/pokemon/celesteela/overworld.png differ
diff --git a/graphics/pokemon/celesteela/overworld_normal.pal b/graphics/pokemon/celesteela/overworld_normal.pal
new file mode 100644
index 000000000000..b99f696dab78
--- /dev/null
+++ b/graphics/pokemon/celesteela/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+19 19 19
+0 0 0
+172 197 189
+230 230 230
+33 55 51
+98 123 98
+139 172 148
+98 205 164
+205 205 205
+74 123 115
+222 255 172
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/celesteela/overworld_shiny.pal b/graphics/pokemon/celesteela/overworld_shiny.pal
new file mode 100644
index 000000000000..daa5a4e1380d
--- /dev/null
+++ b/graphics/pokemon/celesteela/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+19 19 19
+0 0 0
+240 240 240
+230 230 230
+136 136 136
+192 192 192
+139 172 148
+98 205 164
+205 205 205
+74 123 115
+222 255 172
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/centiskorch/overworld.png b/graphics/pokemon/centiskorch/overworld.png
new file mode 100644
index 000000000000..73f10f5962f8
Binary files /dev/null and b/graphics/pokemon/centiskorch/overworld.png differ
diff --git a/graphics/pokemon/centiskorch/overworld_normal.pal b/graphics/pokemon/centiskorch/overworld_normal.pal
new file mode 100644
index 000000000000..5a99050eb772
--- /dev/null
+++ b/graphics/pokemon/centiskorch/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+92 27 11
+240 68 13
+254 251 129
+246 133 28
+9 5 4
+219 79 78
+150 40 42
+215 165 48
+197 195 33
+238 236 86
+135 74 73
+66 44 38
+119 84 76
+102 44 43
+109 16 17
diff --git a/graphics/pokemon/centiskorch/overworld_shiny.pal b/graphics/pokemon/centiskorch/overworld_shiny.pal
new file mode 100644
index 000000000000..d33aeae54a3e
--- /dev/null
+++ b/graphics/pokemon/centiskorch/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+90 16 8
+246 65 8
+255 255 131
+246 131 24
+0 0 0
+222 74 74
+148 41 41
+213 164 41
+197 197 32
+238 238 82
+131 74 74
+65 115 115
+90 156 156
+106 16 16
+106 16 16
diff --git a/graphics/pokemon/chandelure/overworld.png b/graphics/pokemon/chandelure/overworld.png
new file mode 100644
index 000000000000..f72f3000e808
Binary files /dev/null and b/graphics/pokemon/chandelure/overworld.png differ
diff --git a/graphics/pokemon/chandelure/overworld_normal.pal b/graphics/pokemon/chandelure/overworld_normal.pal
new file mode 100644
index 000000000000..f273ba8fd645
--- /dev/null
+++ b/graphics/pokemon/chandelure/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 255 42
+56 33 173
+104 71 228
+165 156 246
+12 12 12
+42 42 42
+75 75 75
+192 209 209
+255 228 26
+0 0 0
+172 154 220
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/chandelure/overworld_shiny.pal b/graphics/pokemon/chandelure/overworld_shiny.pal
new file mode 100644
index 000000000000..b0eb6197e5ad
--- /dev/null
+++ b/graphics/pokemon/chandelure/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+189 82 24
+255 139 16
+255 180 65
+8 8 8
+49 57 41
+90 98 74
+205 255 205
+238 106 164
+0 0 0
+255 180 65
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/chansey/overworld.png b/graphics/pokemon/chansey/overworld.png
new file mode 100644
index 000000000000..c5827a299ba3
Binary files /dev/null and b/graphics/pokemon/chansey/overworld.png differ
diff --git a/graphics/pokemon/chansey/overworld_normal.pal b/graphics/pokemon/chansey/overworld_normal.pal
new file mode 100644
index 000000000000..32559fd2e1fd
--- /dev/null
+++ b/graphics/pokemon/chansey/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 56 88
+232 192 216
+0 0 0
+216 136 184
+224 96 120
+152 88 128
+232 232 248
+168 184 208
+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/chansey/overworld_shiny.pal b/graphics/pokemon/chansey/overworld_shiny.pal
new file mode 100644
index 000000000000..fe2e8c734ba7
--- /dev/null
+++ b/graphics/pokemon/chansey/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 120 64
+232 208 192
+0 0 0
+216 176 128
+152 184 56
+128 120 88
+232 232 248
+168 184 208
+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/charizard/overworld.png b/graphics/pokemon/charizard/overworld.png
new file mode 100644
index 000000000000..274e65ccf718
Binary files /dev/null and b/graphics/pokemon/charizard/overworld.png differ
diff --git a/graphics/pokemon/charizard/overworld_normal.pal b/graphics/pokemon/charizard/overworld_normal.pal
new file mode 100644
index 000000000000..537b69673172
--- /dev/null
+++ b/graphics/pokemon/charizard/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 48 0
+248 120 56
+200 88 40
+0 0 0
+144 64 32
+192 16 32
+40 72 88
+64 128 128
+248 184 16
+160 160 160
+216 216 248
+96 64 0
+216 168 48
+240 208 112
+0 0 0
diff --git a/graphics/pokemon/charizard/overworld_shiny.pal b/graphics/pokemon/charizard/overworld_shiny.pal
new file mode 100644
index 000000000000..0ec7fa25f520
--- /dev/null
+++ b/graphics/pokemon/charizard/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 48 48
+152 152 152
+120 120 120
+0 0 0
+88 88 88
+192 16 32
+152 0 24
+208 8 40
+248 184 16
+160 160 160
+216 216 248
+48 48 48
+160 160 160
+216 216 216
+0 0 0
diff --git a/graphics/pokemon/charjabug/overworld.png b/graphics/pokemon/charjabug/overworld.png
new file mode 100644
index 000000000000..04edfa8956a2
Binary files /dev/null and b/graphics/pokemon/charjabug/overworld.png differ
diff --git a/graphics/pokemon/charjabug/overworld_normal.pal b/graphics/pokemon/charjabug/overworld_normal.pal
new file mode 100644
index 000000000000..6ea1e719d678
--- /dev/null
+++ b/graphics/pokemon/charjabug/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+254 254 255
+204 200 200
+241 186 102
+145 175 133
+125 156 112
+148 134 138
+98 127 87
+0 139 240
+209 115 47
+100 81 46
+78 100 70
+53 66 48
+16 16 16
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/charjabug/overworld_shiny.pal b/graphics/pokemon/charjabug/overworld_shiny.pal
new file mode 100644
index 000000000000..4008736edd5f
--- /dev/null
+++ b/graphics/pokemon/charjabug/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+254 254 255
+204 200 200
+241 186 102
+232 136 112
+216 56 56
+148 134 138
+160 24 24
+0 139 240
+176 112 48
+100 81 46
+121 17 17
+112 8 8
+16 16 16
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/charmander/overworld.png b/graphics/pokemon/charmander/overworld.png
new file mode 100644
index 000000000000..0767ffa89a21
Binary files /dev/null and b/graphics/pokemon/charmander/overworld.png differ
diff --git a/graphics/pokemon/charmander/overworld_normal.pal b/graphics/pokemon/charmander/overworld_normal.pal
new file mode 100644
index 000000000000..4926f9a8bc52
--- /dev/null
+++ b/graphics/pokemon/charmander/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 64 32
+248 136 56
+184 88 32
+224 40 40
+240 208 112
+232 232 248
+0 0 0
+40 72 88
+216 168 48
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/charmander/overworld_shiny.pal b/graphics/pokemon/charmander/overworld_shiny.pal
new file mode 100644
index 000000000000..776dfabd59ee
--- /dev/null
+++ b/graphics/pokemon/charmander/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 64 32
+248 192 56
+248 136 56
+224 40 40
+240 208 112
+232 232 248
+0 0 0
+40 72 88
+216 168 48
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/charmeleon/overworld.png b/graphics/pokemon/charmeleon/overworld.png
new file mode 100644
index 000000000000..810d66835630
Binary files /dev/null and b/graphics/pokemon/charmeleon/overworld.png differ
diff --git a/graphics/pokemon/charmeleon/overworld_normal.pal b/graphics/pokemon/charmeleon/overworld_normal.pal
new file mode 100644
index 000000000000..47a74de14a55
--- /dev/null
+++ b/graphics/pokemon/charmeleon/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 24 32
+184 64 56
+248 104 88
+0 0 0
+200 16 40
+240 208 112
+216 168 48
+176 184 248
+232 232 248
+40 104 128
+144 144 144
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/charmeleon/overworld_shiny.pal b/graphics/pokemon/charmeleon/overworld_shiny.pal
new file mode 100644
index 000000000000..618bbe9b3cc1
--- /dev/null
+++ b/graphics/pokemon/charmeleon/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 64 32
+224 120 56
+248 192 56
+0 0 0
+224 40 40
+240 208 112
+216 168 48
+176 184 248
+232 232 248
+40 104 128
+144 144 144
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/chatot/overworld.png b/graphics/pokemon/chatot/overworld.png
new file mode 100644
index 000000000000..16e1579518b5
Binary files /dev/null and b/graphics/pokemon/chatot/overworld.png differ
diff --git a/graphics/pokemon/chatot/overworld_normal.pal b/graphics/pokemon/chatot/overworld_normal.pal
new file mode 100644
index 000000000000..b985a166f743
--- /dev/null
+++ b/graphics/pokemon/chatot/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+56 56 56
+128 120 120
+88 88 88
+152 160 168
+144 56 112
+216 128 176
+232 232 248
+176 56 128
+40 136 32
+32 128 200
+32 80 112
+248 168 24
+160 128 8
+0 0 0
diff --git a/graphics/pokemon/chatot/overworld_shiny.pal b/graphics/pokemon/chatot/overworld_shiny.pal
new file mode 100644
index 000000000000..52168f5acd88
--- /dev/null
+++ b/graphics/pokemon/chatot/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+32 56 72
+128 128 152
+72 88 128
+152 160 168
+80 64 16
+248 168 24
+232 232 248
+200 112 8
+32 120 144
+208 72 72
+152 16 16
+248 168 24
+160 128 8
+0 0 0
diff --git a/graphics/pokemon/cherrim/overworld.png b/graphics/pokemon/cherrim/overworld.png
new file mode 100644
index 000000000000..86585b240e03
Binary files /dev/null and b/graphics/pokemon/cherrim/overworld.png differ
diff --git a/graphics/pokemon/cherrim/overworld_normal.pal b/graphics/pokemon/cherrim/overworld_normal.pal
new file mode 100644
index 000000000000..053286272b45
--- /dev/null
+++ b/graphics/pokemon/cherrim/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 40 56
+184 72 120
+0 0 0
+128 56 88
+40 96 16
+80 152 24
+64 40 72
+112 64 136
+80 64 96
+152 72 192
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/cherrim/overworld_shiny.pal b/graphics/pokemon/cherrim/overworld_shiny.pal
new file mode 100644
index 000000000000..9d460e623e11
--- /dev/null
+++ b/graphics/pokemon/cherrim/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 40 56
+184 72 120
+0 0 0
+128 56 88
+40 88 64
+56 152 96
+64 96 104
+80 160 152
+80 136 120
+120 192 168
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/cherubi/overworld.png b/graphics/pokemon/cherubi/overworld.png
new file mode 100644
index 000000000000..c156853774b0
Binary files /dev/null and b/graphics/pokemon/cherubi/overworld.png differ
diff --git a/graphics/pokemon/cherubi/overworld_normal.pal b/graphics/pokemon/cherubi/overworld_normal.pal
new file mode 100644
index 000000000000..ed871407e053
--- /dev/null
+++ b/graphics/pokemon/cherubi/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 72 16
+72 152 16
+64 120 24
+0 0 0
+80 40 56
+224 96 144
+128 56 88
+184 72 120
+176 24 96
+232 232 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/cherubi/overworld_shiny.pal b/graphics/pokemon/cherubi/overworld_shiny.pal
new file mode 100644
index 000000000000..6d31fdab4160
--- /dev/null
+++ b/graphics/pokemon/cherubi/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 96 16
+144 176 16
+104 136 16
+0 0 0
+80 40 56
+224 136 112
+128 56 88
+208 72 72
+176 24 96
+232 232 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/chesnaught/overworld.png b/graphics/pokemon/chesnaught/overworld.png
new file mode 100644
index 000000000000..7902feaf5758
Binary files /dev/null and b/graphics/pokemon/chesnaught/overworld.png differ
diff --git a/graphics/pokemon/chesnaught/overworld_normal.pal b/graphics/pokemon/chesnaught/overworld_normal.pal
new file mode 100644
index 000000000000..cebe7418eae5
--- /dev/null
+++ b/graphics/pokemon/chesnaught/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+0 0 0
+135 71 51
+241 226 179
+202 163 119
+77 163 56
+135 71 51
+67 65 45
+222 222 222
+222 222 222
+67 65 45
+77 163 56
+202 163 119
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/chesnaught/overworld_shiny.pal b/graphics/pokemon/chesnaught/overworld_shiny.pal
new file mode 100644
index 000000000000..f6fd47f1d048
--- /dev/null
+++ b/graphics/pokemon/chesnaught/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+0 0 0
+52 57 36
+128 141 91
+104 114 67
+106 56 54
+106 97 89
+62 21 21
+237 197 152
+175 136 102
+94 35 28
+80 39 37
+233 141 80
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/chespin/overworld.png b/graphics/pokemon/chespin/overworld.png
new file mode 100644
index 000000000000..5056ad774a4a
Binary files /dev/null and b/graphics/pokemon/chespin/overworld.png differ
diff --git a/graphics/pokemon/chespin/overworld_normal.pal b/graphics/pokemon/chespin/overworld_normal.pal
new file mode 100644
index 000000000000..e5dcd7d2b70e
--- /dev/null
+++ b/graphics/pokemon/chespin/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 181 239
+32 66 40
+0 0 1
+68 160 93
+84 187 79
+133 97 64
+56 56 72
+240 176 121
+209 149 100
+243 121 82
+180 87 59
+74 54 36
+177 134 95
+255 255 255
+192 192 200
+0 0 0
diff --git a/graphics/pokemon/chespin/overworld_shiny.pal b/graphics/pokemon/chespin/overworld_shiny.pal
new file mode 100644
index 000000000000..02bd3bda71d8
--- /dev/null
+++ b/graphics/pokemon/chespin/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 181 239
+57 24 19
+0 0 1
+120 51 40
+151 65 51
+133 97 64
+56 56 72
+240 176 121
+209 149 100
+249 220 95
+225 198 86
+74 54 36
+177 134 95
+255 255 255
+192 192 200
+0 0 0
diff --git a/graphics/pokemon/chewtle/overworld.png b/graphics/pokemon/chewtle/overworld.png
new file mode 100644
index 000000000000..12dab73c8edf
Binary files /dev/null and b/graphics/pokemon/chewtle/overworld.png differ
diff --git a/graphics/pokemon/chewtle/overworld_normal.pal b/graphics/pokemon/chewtle/overworld_normal.pal
new file mode 100644
index 000000000000..d29704f6c368
--- /dev/null
+++ b/graphics/pokemon/chewtle/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+252 252 252
+132 88 4
+212 148 28
+248 180 56
+48 96 100
+96 152 160
+144 188 192
+0 0 0
+136 60 24
+24 32 36
+52 120 148
+232 232 248
+36 88 108
+72 148 180
+184 160 80
+136 60 24
diff --git a/graphics/pokemon/chewtle/overworld_shiny.pal b/graphics/pokemon/chewtle/overworld_shiny.pal
new file mode 100644
index 000000000000..dd47432a159c
--- /dev/null
+++ b/graphics/pokemon/chewtle/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+82 24 24
+197 65 65
+238 90 90
+24 57 16
+106 197 74
+148 255 115
+0 0 0
+90 24 0
+32 49 24
+24 74 32
+238 238 255
+8 49 16
+24 98 41
+238 90 90
+90 24 0
diff --git a/graphics/pokemon/chikorita/overworld.png b/graphics/pokemon/chikorita/overworld.png
new file mode 100644
index 000000000000..97855e720705
Binary files /dev/null and b/graphics/pokemon/chikorita/overworld.png differ
diff --git a/graphics/pokemon/chikorita/overworld_normal.pal b/graphics/pokemon/chikorita/overworld_normal.pal
new file mode 100644
index 000000000000..f37c20181c12
--- /dev/null
+++ b/graphics/pokemon/chikorita/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+56 104 16
+112 176 80
+0 0 0
+64 144 40
+192 216 112
+144 192 64
+232 232 248
+168 40 40
+168 184 208
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/chikorita/overworld_shiny.pal b/graphics/pokemon/chikorita/overworld_shiny.pal
new file mode 100644
index 000000000000..3624fa670a24
--- /dev/null
+++ b/graphics/pokemon/chikorita/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+128 72 24
+224 144 120
+0 0 0
+184 96 80
+240 216 136
+184 184 64
+232 232 248
+168 40 40
+168 184 208
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/chimchar/overworld.png b/graphics/pokemon/chimchar/overworld.png
new file mode 100644
index 000000000000..598d8037532a
Binary files /dev/null and b/graphics/pokemon/chimchar/overworld.png differ
diff --git a/graphics/pokemon/chimchar/overworld_normal.pal b/graphics/pokemon/chimchar/overworld_normal.pal
new file mode 100644
index 000000000000..39a5dcf82257
--- /dev/null
+++ b/graphics/pokemon/chimchar/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 56 40
+240 128 16
+184 96 16
+0 0 0
+248 232 168
+216 184 112
+208 80 64
+128 80 40
+192 144 72
+160 88 80
+192 192 192
+232 232 248
+128 16 16
+240 56 40
+248 192 0
diff --git a/graphics/pokemon/chimchar/overworld_shiny.pal b/graphics/pokemon/chimchar/overworld_shiny.pal
new file mode 100644
index 000000000000..8b96df9158f8
--- /dev/null
+++ b/graphics/pokemon/chimchar/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 56 40
+240 96 112
+184 72 96
+0 0 0
+248 232 168
+216 184 112
+208 80 64
+120 56 80
+192 144 72
+160 88 80
+192 192 192
+232 232 248
+128 16 16
+240 56 40
+248 192 0
diff --git a/graphics/pokemon/chimecho/overworld.png b/graphics/pokemon/chimecho/overworld.png
new file mode 100644
index 000000000000..b78409e06af1
Binary files /dev/null and b/graphics/pokemon/chimecho/overworld.png differ
diff --git a/graphics/pokemon/chimecho/overworld_normal.pal b/graphics/pokemon/chimecho/overworld_normal.pal
new file mode 100644
index 000000000000..68e07ee4bdec
--- /dev/null
+++ b/graphics/pokemon/chimecho/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+136 104 32
+248 216 88
+232 232 248
+0 0 0
+88 96 120
+208 160 80
+160 168 192
+208 208 232
+192 56 56
+112 32 32
+184 144 56
+120 128 152
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/chimecho/overworld_shiny.pal b/graphics/pokemon/chimecho/overworld_shiny.pal
new file mode 100644
index 000000000000..c0b679f281c1
--- /dev/null
+++ b/graphics/pokemon/chimecho/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 160 176
+136 104 32
+248 216 88
+232 232 248
+0 0 0
+88 160 120
+208 160 80
+176 216 168
+216 232 208
+216 128 56
+104 40 0
+184 144 56
+136 208 152
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/chinchou/overworld.png b/graphics/pokemon/chinchou/overworld.png
new file mode 100644
index 000000000000..b552e544b738
Binary files /dev/null and b/graphics/pokemon/chinchou/overworld.png differ
diff --git a/graphics/pokemon/chinchou/overworld_normal.pal b/graphics/pokemon/chinchou/overworld_normal.pal
new file mode 100644
index 000000000000..c26d5a398d84
--- /dev/null
+++ b/graphics/pokemon/chinchou/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 56 112
+0 0 0
+128 104 24
+88 88 160
+224 160 16
+80 64 8
+248 208 96
+112 168 240
+232 232 248
+96 136 224
+192 200 216
+184 48 40
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/chinchou/overworld_shiny.pal b/graphics/pokemon/chinchou/overworld_shiny.pal
new file mode 100644
index 000000000000..c051ef83a95f
--- /dev/null
+++ b/graphics/pokemon/chinchou/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 88 88
+0 0 0
+128 104 24
+64 112 160
+200 232 8
+80 64 8
+232 248 144
+112 200 208
+232 232 248
+48 184 184
+168 184 208
+184 48 40
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/chingling/overworld.png b/graphics/pokemon/chingling/overworld.png
new file mode 100644
index 000000000000..80963c5e16b2
Binary files /dev/null and b/graphics/pokemon/chingling/overworld.png differ
diff --git a/graphics/pokemon/chingling/overworld_normal.pal b/graphics/pokemon/chingling/overworld_normal.pal
new file mode 100644
index 000000000000..6c89d30a7516
--- /dev/null
+++ b/graphics/pokemon/chingling/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 64 64
+136 24 24
+192 56 56
+0 0 0
+192 200 208
+224 232 240
+248 224 8
+208 152 40
+136 104 32
+248 248 152
+248 192 0
+232 232 248
+88 88 88
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/chingling/overworld_shiny.pal b/graphics/pokemon/chingling/overworld_shiny.pal
new file mode 100644
index 000000000000..f0bef8f74da6
--- /dev/null
+++ b/graphics/pokemon/chingling/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 64 64
+200 104 24
+248 128 56
+0 0 0
+192 200 208
+224 232 240
+216 248 64
+168 160 64
+120 128 32
+248 248 184
+192 200 40
+232 232 248
+88 88 88
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/cinccino/overworld.png b/graphics/pokemon/cinccino/overworld.png
new file mode 100644
index 000000000000..7ca2d2f4da55
Binary files /dev/null and b/graphics/pokemon/cinccino/overworld.png differ
diff --git a/graphics/pokemon/cinccino/overworld_normal.pal b/graphics/pokemon/cinccino/overworld_normal.pal
new file mode 100644
index 000000000000..64da1bbdcff1
--- /dev/null
+++ b/graphics/pokemon/cinccino/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 210 164
+189 180 180
+238 238 247
+131 123 115
+73 73 77
+222 205 197
+194 184 173
+189 172 156
+0 0 0
+137 117 107
+173 76 75
+47 46 47
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/cinccino/overworld_shiny.pal b/graphics/pokemon/cinccino/overworld_shiny.pal
new file mode 100644
index 000000000000..ce54231e21ce
--- /dev/null
+++ b/graphics/pokemon/cinccino/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 210 164
+189 180 180
+238 238 247
+176 144 112
+88 80 48
+73 73 77
+222 205 197
+200 184 136
+0 0 0
+152 56 104
+47 46 47
+131 123 115
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/cinderace/overworld.png b/graphics/pokemon/cinderace/overworld.png
new file mode 100644
index 000000000000..1ac358ca8bdd
Binary files /dev/null and b/graphics/pokemon/cinderace/overworld.png differ
diff --git a/graphics/pokemon/cinderace/overworld_normal.pal b/graphics/pokemon/cinderace/overworld_normal.pal
new file mode 100644
index 000000000000..193f05ef338c
--- /dev/null
+++ b/graphics/pokemon/cinderace/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+252 252 252
+64 64 64
+204 204 204
+244 244 244
+0 0 0
+236 236 236
+108 28 0
+216 204 56
+224 72 8
+184 48 0
+252 116 56
+104 96 8
+248 236 88
+4 40 88
+0 28 60
+0 0 0
diff --git a/graphics/pokemon/cinderace/overworld_shiny.pal b/graphics/pokemon/cinderace/overworld_shiny.pal
new file mode 100644
index 000000000000..a93f9d2ef2e4
--- /dev/null
+++ b/graphics/pokemon/cinderace/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+65 65 65
+156 139 123
+255 255 255
+0 0 0
+197 180 164
+82 41 0
+222 205 57
+230 131 0
+189 106 0
+255 156 32
+106 98 8
+255 238 90
+213 213 213
+131 131 131
+0 0 0
diff --git a/graphics/pokemon/clamperl/overworld.png b/graphics/pokemon/clamperl/overworld.png
new file mode 100644
index 000000000000..514bf903ff5c
Binary files /dev/null and b/graphics/pokemon/clamperl/overworld.png differ
diff --git a/graphics/pokemon/clamperl/overworld_normal.pal b/graphics/pokemon/clamperl/overworld_normal.pal
new file mode 100644
index 000000000000..0a797e60f5b3
--- /dev/null
+++ b/graphics/pokemon/clamperl/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 64 104
+0 0 0
+136 160 208
+72 96 136
+208 216 232
+104 128 168
+96 104 128
+152 168 200
+48 48 64
+136 32 72
+232 120 160
+200 88 128
+168 64 104
+160 192 240
+0 0 0
diff --git a/graphics/pokemon/clamperl/overworld_shiny.pal b/graphics/pokemon/clamperl/overworld_shiny.pal
new file mode 100644
index 000000000000..31efeb743959
--- /dev/null
+++ b/graphics/pokemon/clamperl/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 48 104
+0 0 0
+176 128 216
+104 72 136
+208 216 232
+136 96 168
+96 104 128
+152 168 200
+48 48 64
+136 32 72
+232 120 160
+200 88 128
+168 64 104
+200 168 232
+0 0 0
diff --git a/graphics/pokemon/clauncher/overworld.png b/graphics/pokemon/clauncher/overworld.png
new file mode 100644
index 000000000000..9459d44cef25
Binary files /dev/null and b/graphics/pokemon/clauncher/overworld.png differ
diff --git a/graphics/pokemon/clauncher/overworld_normal.pal b/graphics/pokemon/clauncher/overworld_normal.pal
new file mode 100644
index 000000000000..abe69db5ddf7
--- /dev/null
+++ b/graphics/pokemon/clauncher/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+29 41 50
+80 77 76
+223 193 27
+92 174 210
+70 119 154
+16 16 16
+144 155 92
+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/clauncher/overworld_shiny.pal b/graphics/pokemon/clauncher/overworld_shiny.pal
new file mode 100644
index 000000000000..5bd5ba9cafc7
--- /dev/null
+++ b/graphics/pokemon/clauncher/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+118 34 11
+238 237 237
+94 181 225
+254 128 95
+201 85 54
+16 16 16
+65 138 175
+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/clawitzer/overworld.png b/graphics/pokemon/clawitzer/overworld.png
new file mode 100644
index 000000000000..7912c401fda8
Binary files /dev/null and b/graphics/pokemon/clawitzer/overworld.png differ
diff --git a/graphics/pokemon/clawitzer/overworld_normal.pal b/graphics/pokemon/clawitzer/overworld_normal.pal
new file mode 100644
index 000000000000..fb24d54c98df
--- /dev/null
+++ b/graphics/pokemon/clawitzer/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 63 90
+246 210 101
+64 126 203
+20 20 20
+93 162 228
+64 67 71
+74 103 151
+34 42 56
+195 139 56
+114 196 255
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/clawitzer/overworld_shiny.pal b/graphics/pokemon/clawitzer/overworld_shiny.pal
new file mode 100644
index 000000000000..99d1defde945
--- /dev/null
+++ b/graphics/pokemon/clawitzer/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+121 32 28
+52 160 211
+254 90 83
+20 20 20
+253 159 155
+220 220 220
+215 58 51
+121 32 28
+32 118 158
+254 114 81
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/claydol/overworld.png b/graphics/pokemon/claydol/overworld.png
new file mode 100644
index 000000000000..23aaa3cdbcf8
Binary files /dev/null and b/graphics/pokemon/claydol/overworld.png differ
diff --git a/graphics/pokemon/claydol/overworld_normal.pal b/graphics/pokemon/claydol/overworld_normal.pal
new file mode 100644
index 000000000000..6e77b7af3a16
--- /dev/null
+++ b/graphics/pokemon/claydol/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 48 40
+88 80 64
+0 0 0
+112 88 72
+136 120 88
+184 184 192
+192 72 120
+232 232 248
+136 40 64
+232 136 112
+216 184 88
+152 120 24
+136 136 152
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/claydol/overworld_shiny.pal b/graphics/pokemon/claydol/overworld_shiny.pal
new file mode 100644
index 000000000000..7c5fef6b2204
--- /dev/null
+++ b/graphics/pokemon/claydol/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 48 40
+88 80 64
+0 0 0
+112 88 72
+136 120 88
+184 184 192
+224 152 0
+232 232 248
+152 104 0
+240 192 88
+216 184 88
+152 120 24
+136 136 152
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/clefable/overworld.png b/graphics/pokemon/clefable/overworld.png
new file mode 100644
index 000000000000..90b47b2a5a92
Binary files /dev/null and b/graphics/pokemon/clefable/overworld.png differ
diff --git a/graphics/pokemon/clefable/overworld_normal.pal b/graphics/pokemon/clefable/overworld_normal.pal
new file mode 100644
index 000000000000..4aee1f611b3f
--- /dev/null
+++ b/graphics/pokemon/clefable/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+120 56 72
+120 96 72
+224 144 152
+248 192 192
+72 56 56
+216 80 120
+248 128 168
+200 200 200
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/clefable/overworld_shiny.pal b/graphics/pokemon/clefable/overworld_shiny.pal
new file mode 100644
index 000000000000..5ce44f090907
--- /dev/null
+++ b/graphics/pokemon/clefable/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+128 80 96
+96 160 104
+240 144 160
+248 200 216
+56 96 72
+224 128 160
+248 152 192
+200 200 200
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/clefairy/overworld.png b/graphics/pokemon/clefairy/overworld.png
new file mode 100644
index 000000000000..92487e3fea8b
Binary files /dev/null and b/graphics/pokemon/clefairy/overworld.png differ
diff --git a/graphics/pokemon/clefairy/overworld_normal.pal b/graphics/pokemon/clefairy/overworld_normal.pal
new file mode 100644
index 000000000000..9da22f51ac3e
--- /dev/null
+++ b/graphics/pokemon/clefairy/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 56 64
+0 0 0
+240 152 168
+120 88 56
+184 104 128
+232 232 248
+160 80 96
+168 168 168
+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/clefairy/overworld_shiny.pal b/graphics/pokemon/clefairy/overworld_shiny.pal
new file mode 100644
index 000000000000..e47b5bc8d76a
--- /dev/null
+++ b/graphics/pokemon/clefairy/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 56 64
+0 0 0
+248 200 216
+96 160 104
+208 136 160
+232 232 248
+160 80 96
+168 168 168
+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/cleffa/overworld.png b/graphics/pokemon/cleffa/overworld.png
new file mode 100644
index 000000000000..76c754fb44ab
Binary files /dev/null and b/graphics/pokemon/cleffa/overworld.png differ
diff --git a/graphics/pokemon/cleffa/overworld_normal.pal b/graphics/pokemon/cleffa/overworld_normal.pal
new file mode 100644
index 000000000000..a8e2c0ada64e
--- /dev/null
+++ b/graphics/pokemon/cleffa/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 48 64
+80 40 32
+240 184 192
+0 0 0
+128 72 56
+152 88 96
+200 152 152
+168 112 104
+232 232 248
+216 88 96
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/cleffa/overworld_shiny.pal b/graphics/pokemon/cleffa/overworld_shiny.pal
new file mode 100644
index 000000000000..598cce7acedb
--- /dev/null
+++ b/graphics/pokemon/cleffa/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 32 88
+48 112 72
+248 192 240
+0 0 0
+104 192 128
+144 80 120
+224 144 184
+176 104 144
+232 232 248
+216 88 96
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/clobbopus/overworld.png b/graphics/pokemon/clobbopus/overworld.png
new file mode 100644
index 000000000000..2a2804431305
Binary files /dev/null and b/graphics/pokemon/clobbopus/overworld.png differ
diff --git a/graphics/pokemon/clobbopus/overworld_normal.pal b/graphics/pokemon/clobbopus/overworld_normal.pal
new file mode 100644
index 000000000000..765bfa8af380
--- /dev/null
+++ b/graphics/pokemon/clobbopus/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+62 58 57
+255 112 62
+201 83 41
+173 162 149
+235 225 213
+242 153 123
+17 15 27
+0 0 0
+64 58 94
+112 198 224
+40 36 62
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/clobbopus/overworld_shiny.pal b/graphics/pokemon/clobbopus/overworld_shiny.pal
new file mode 100644
index 000000000000..ac13d1c78833
--- /dev/null
+++ b/graphics/pokemon/clobbopus/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+49 49 65
+255 115 57
+205 82 41
+115 115 164
+164 164 205
+255 205 189
+123 123 123
+0 0 0
+255 238 238
+115 197 230
+213 197 197
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/cloyster/overworld.png b/graphics/pokemon/cloyster/overworld.png
new file mode 100644
index 000000000000..e01669bf69a2
Binary files /dev/null and b/graphics/pokemon/cloyster/overworld.png differ
diff --git a/graphics/pokemon/cloyster/overworld_normal.pal b/graphics/pokemon/cloyster/overworld_normal.pal
new file mode 100644
index 000000000000..f98a54cdd975
--- /dev/null
+++ b/graphics/pokemon/cloyster/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+192 176 232
+144 112 184
+96 88 120
+40 40 48
+56 56 56
+232 232 248
+96 96 96
+152 152 152
+80 80 80
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/cloyster/overworld_shiny.pal b/graphics/pokemon/cloyster/overworld_shiny.pal
new file mode 100644
index 000000000000..d58b2584e066
--- /dev/null
+++ b/graphics/pokemon/cloyster/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+192 216 232
+136 176 232
+72 136 224
+40 40 48
+56 72 80
+232 232 248
+96 96 96
+152 152 152
+80 80 80
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/coalossal/overworld.png b/graphics/pokemon/coalossal/overworld.png
new file mode 100644
index 000000000000..1ec31140cf43
Binary files /dev/null and b/graphics/pokemon/coalossal/overworld.png differ
diff --git a/graphics/pokemon/coalossal/overworld_normal.pal b/graphics/pokemon/coalossal/overworld_normal.pal
new file mode 100644
index 000000000000..a7989f71f2de
--- /dev/null
+++ b/graphics/pokemon/coalossal/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 255 42
+10 10 10
+50 50 50
+26 26 26
+212 83 83
+181 65 65
+2 2 2
+66 65 62
+34 33 33
+18 18 18
+0 0 0
+255 255 255
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/coalossal/overworld_shiny.pal b/graphics/pokemon/coalossal/overworld_shiny.pal
new file mode 100644
index 000000000000..3511dc8b7782
--- /dev/null
+++ b/graphics/pokemon/coalossal/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+8 8 8
+49 49 49
+24 24 24
+213 82 82
+180 65 65
+16 32 32
+82 123 131
+49 82 98
+24 49 57
+0 0 0
+255 255 255
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/cobalion/overworld.png b/graphics/pokemon/cobalion/overworld.png
new file mode 100644
index 000000000000..82064f39e89d
Binary files /dev/null and b/graphics/pokemon/cobalion/overworld.png differ
diff --git a/graphics/pokemon/cobalion/overworld_normal.pal b/graphics/pokemon/cobalion/overworld_normal.pal
new file mode 100644
index 000000000000..8fb0e0c75159
--- /dev/null
+++ b/graphics/pokemon/cobalion/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 68 9
+231 178 49
+20 48 71
+75 171 208
+24 40 16
+84 84 86
+32 104 168
+48 136 192
+142 102 19
+161 159 160
+212 212 223
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/cobalion/overworld_shiny.pal b/graphics/pokemon/cobalion/overworld_shiny.pal
new file mode 100644
index 000000000000..60a5c54af452
--- /dev/null
+++ b/graphics/pokemon/cobalion/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 112 56
+173 204 102
+21 44 68
+27 93 154
+24 40 16
+76 91 87
+21 44 68
+27 93 154
+104 112 56
+111 151 136
+206 238 230
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/cofagrigus/overworld.png b/graphics/pokemon/cofagrigus/overworld.png
new file mode 100644
index 000000000000..9911f69a22e8
Binary files /dev/null and b/graphics/pokemon/cofagrigus/overworld.png differ
diff --git a/graphics/pokemon/cofagrigus/overworld_normal.pal b/graphics/pokemon/cofagrigus/overworld_normal.pal
new file mode 100644
index 000000000000..4f39f3d77ad9
--- /dev/null
+++ b/graphics/pokemon/cofagrigus/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+47 47 55
+4 4 4
+27 92 107
+40 138 164
+172 121 40
+87 76 38
+229 229 247
+4 4 4
+255 182 40
+47 47 55
+255 40 25
+87 76 38
+47 47 55
+4 4 4
+0 0 0
diff --git a/graphics/pokemon/cofagrigus/overworld_shiny.pal b/graphics/pokemon/cofagrigus/overworld_shiny.pal
new file mode 100644
index 000000000000..242d54735535
--- /dev/null
+++ b/graphics/pokemon/cofagrigus/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 56 104
+0 0 0
+128 80 144
+216 120 208
+112 136 136
+88 40 72
+229 229 247
+11 11 11
+192 200 208
+47 47 55
+255 40 25
+112 112 112
+57 57 65
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/combee/followerf.png b/graphics/pokemon/combee/followerf.png
new file mode 100644
index 000000000000..e39109ce825f
Binary files /dev/null and b/graphics/pokemon/combee/followerf.png differ
diff --git a/graphics/pokemon/combee/overworld.png b/graphics/pokemon/combee/overworld.png
new file mode 100644
index 000000000000..459538f5f07c
Binary files /dev/null and b/graphics/pokemon/combee/overworld.png differ
diff --git a/graphics/pokemon/combee/overworld_normal.pal b/graphics/pokemon/combee/overworld_normal.pal
new file mode 100644
index 000000000000..ae404c011250
--- /dev/null
+++ b/graphics/pokemon/combee/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 104 128
+200 216 232
+48 48 48
+72 64 40
+0 0 0
+168 88 48
+200 144 24
+152 104 16
+232 176 56
+200 104 40
+152 184 232
+248 216 120
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/combee/overworld_shiny.pal b/graphics/pokemon/combee/overworld_shiny.pal
new file mode 100644
index 000000000000..01483e8cd601
--- /dev/null
+++ b/graphics/pokemon/combee/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 104 128
+200 216 232
+48 48 48
+72 64 40
+0 0 0
+168 88 48
+176 88 40
+144 48 0
+216 136 88
+200 104 40
+152 184 232
+248 176 128
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/combusken/overworld.png b/graphics/pokemon/combusken/overworld.png
new file mode 100644
index 000000000000..b4302f91aa97
Binary files /dev/null and b/graphics/pokemon/combusken/overworld.png differ
diff --git a/graphics/pokemon/combusken/overworld_normal.pal b/graphics/pokemon/combusken/overworld_normal.pal
new file mode 100644
index 000000000000..3cf730894c76
--- /dev/null
+++ b/graphics/pokemon/combusken/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+112 48 8
+240 128 16
+0 0 0
+160 80 16
+72 64 16
+248 208 96
+232 232 248
+184 160 88
+112 104 48
+168 160 200
+200 104 16
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/combusken/overworld_shiny.pal b/graphics/pokemon/combusken/overworld_shiny.pal
new file mode 100644
index 000000000000..86616744d72e
--- /dev/null
+++ b/graphics/pokemon/combusken/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+112 16 8
+240 80 16
+0 0 0
+152 32 8
+72 64 16
+248 208 152
+232 232 248
+184 168 120
+112 104 56
+168 160 200
+200 56 8
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/comfey/overworld.png b/graphics/pokemon/comfey/overworld.png
new file mode 100644
index 000000000000..29075825aea6
Binary files /dev/null and b/graphics/pokemon/comfey/overworld.png differ
diff --git a/graphics/pokemon/comfey/overworld_normal.pal b/graphics/pokemon/comfey/overworld_normal.pal
new file mode 100644
index 000000000000..7f3a7eb6705f
--- /dev/null
+++ b/graphics/pokemon/comfey/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+250 248 233
+202 238 122
+247 220 26
+216 209 192
+183 203 87
+105 182 218
+172 134 11
+139 123 49
+71 84 37
+57 90 106
+227 78 133
+230 82 65
+115 41 49
+80 80 80
+0 0 0
diff --git a/graphics/pokemon/comfey/overworld_shiny.pal b/graphics/pokemon/comfey/overworld_shiny.pal
new file mode 100644
index 000000000000..bf5e705bc8c2
--- /dev/null
+++ b/graphics/pokemon/comfey/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+250 248 233
+120 184 232
+247 220 26
+216 209 192
+40 136 208
+105 182 218
+172 134 11
+248 224 64
+71 84 37
+57 90 106
+227 78 133
+230 82 65
+115 41 49
+80 80 80
+0 0 0
diff --git a/graphics/pokemon/conkeldurr/overworld.png b/graphics/pokemon/conkeldurr/overworld.png
new file mode 100644
index 000000000000..fa83edbdc5ab
Binary files /dev/null and b/graphics/pokemon/conkeldurr/overworld.png differ
diff --git a/graphics/pokemon/conkeldurr/overworld_normal.pal b/graphics/pokemon/conkeldurr/overworld_normal.pal
new file mode 100644
index 000000000000..6e4935354aae
--- /dev/null
+++ b/graphics/pokemon/conkeldurr/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+89 53 34
+197 156 115
+10 10 10
+139 106 90
+57 57 49
+115 48 80
+173 87 151
+101 101 94
+144 144 137
+172 41 65
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/conkeldurr/overworld_shiny.pal b/graphics/pokemon/conkeldurr/overworld_shiny.pal
new file mode 100644
index 000000000000..4ed16e43f94c
--- /dev/null
+++ b/graphics/pokemon/conkeldurr/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+90 57 32
+200 136 112
+10 10 10
+144 88 88
+57 57 49
+114 25 27
+214 66 61
+103 92 90
+144 144 137
+214 66 61
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/copperajah/overworld.png b/graphics/pokemon/copperajah/overworld.png
new file mode 100644
index 000000000000..28c0b53ef5b3
Binary files /dev/null and b/graphics/pokemon/copperajah/overworld.png differ
diff --git a/graphics/pokemon/copperajah/overworld_normal.pal b/graphics/pokemon/copperajah/overworld_normal.pal
new file mode 100644
index 000000000000..38b755708dbc
--- /dev/null
+++ b/graphics/pokemon/copperajah/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 255 42
+0 14 14
+0 42 42
+0 82 82
+251 152 51
+177 101 23
+0 0 0
+255 255 255
+38 200 179
+199 199 199
+10 141 124
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/copperajah/overworld_shiny.pal b/graphics/pokemon/copperajah/overworld_shiny.pal
new file mode 100644
index 000000000000..2ac41287b87e
--- /dev/null
+++ b/graphics/pokemon/copperajah/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 255 42
+8 16 8
+24 49 32
+57 98 65
+238 197 32
+180 156 16
+0 0 0
+255 255 255
+148 222 197
+197 197 197
+90 156 131
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/corphish/overworld.png b/graphics/pokemon/corphish/overworld.png
new file mode 100644
index 000000000000..a930c891bddf
Binary files /dev/null and b/graphics/pokemon/corphish/overworld.png differ
diff --git a/graphics/pokemon/corphish/overworld_normal.pal b/graphics/pokemon/corphish/overworld_normal.pal
new file mode 100644
index 000000000000..3cf33df08c27
--- /dev/null
+++ b/graphics/pokemon/corphish/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 24 0
+232 136 96
+152 48 8
+0 0 0
+216 104 64
+192 72 32
+160 152 128
+120 112 96
+56 72 88
+88 80 64
+112 120 144
+232 232 248
+176 176 192
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/corphish/overworld_shiny.pal b/graphics/pokemon/corphish/overworld_shiny.pal
new file mode 100644
index 000000000000..b8de31ba4319
--- /dev/null
+++ b/graphics/pokemon/corphish/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 24 8
+216 112 144
+104 48 40
+0 0 0
+184 80 104
+144 64 72
+160 152 128
+120 112 96
+56 72 88
+88 80 64
+112 120 144
+232 232 248
+176 176 192
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/corsola/galarian/overworld.png b/graphics/pokemon/corsola/galarian/overworld.png
new file mode 100644
index 000000000000..1d606c6c579e
Binary files /dev/null and b/graphics/pokemon/corsola/galarian/overworld.png differ
diff --git a/graphics/pokemon/corsola/galarian/overworld_normal.pal b/graphics/pokemon/corsola/galarian/overworld_normal.pal
new file mode 100644
index 000000000000..f4c705d38f20
--- /dev/null
+++ b/graphics/pokemon/corsola/galarian/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+83 112 198
+44 43 41
+151 149 145
+0 0 0
+110 109 104
+234 233 229
+177 176 173
+173 112 134
+136 136 136
+158 158 158
+47 47 47
+11 11 11
+12 12 12
+13 13 13
+14 14 14
+15 15 15
diff --git a/graphics/pokemon/corsola/galarian/overworld_shiny.pal b/graphics/pokemon/corsola/galarian/overworld_shiny.pal
new file mode 100644
index 000000000000..f4c705d38f20
--- /dev/null
+++ b/graphics/pokemon/corsola/galarian/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+83 112 198
+44 43 41
+151 149 145
+0 0 0
+110 109 104
+234 233 229
+177 176 173
+173 112 134
+136 136 136
+158 158 158
+47 47 47
+11 11 11
+12 12 12
+13 13 13
+14 14 14
+15 15 15
diff --git a/graphics/pokemon/corsola/overworld.png b/graphics/pokemon/corsola/overworld.png
new file mode 100644
index 000000000000..4b7131a846ff
Binary files /dev/null and b/graphics/pokemon/corsola/overworld.png differ
diff --git a/graphics/pokemon/corsola/overworld_normal.pal b/graphics/pokemon/corsola/overworld_normal.pal
new file mode 100644
index 000000000000..3d3ce3b5cab9
--- /dev/null
+++ b/graphics/pokemon/corsola/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+120 32 64
+216 104 128
+0 0 0
+168 64 88
+240 168 192
+232 128 160
+232 232 248
+168 184 208
+192 208 232
+72 80 96
+128 144 184
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/corsola/overworld_shiny.pal b/graphics/pokemon/corsola/overworld_shiny.pal
new file mode 100644
index 000000000000..c0082e1280ea
--- /dev/null
+++ b/graphics/pokemon/corsola/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 56 160
+80 152 208
+0 0 0
+72 112 176
+136 200 248
+104 176 216
+232 232 248
+168 184 208
+192 208 232
+72 80 96
+128 144 184
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/corviknight/overworld.png b/graphics/pokemon/corviknight/overworld.png
new file mode 100644
index 000000000000..ea0244698cfa
Binary files /dev/null and b/graphics/pokemon/corviknight/overworld.png differ
diff --git a/graphics/pokemon/corviknight/overworld_normal.pal b/graphics/pokemon/corviknight/overworld_normal.pal
new file mode 100644
index 000000000000..5c28cf9a80f9
--- /dev/null
+++ b/graphics/pokemon/corviknight/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+28 26 59
+43 41 92
+58 56 125
+0 0 0
+18 16 37
+33 31 70
+11 11 11
+151 151 151
+171 32 33
+23 21 48
+38 36 81
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/corviknight/overworld_shiny.pal b/graphics/pokemon/corviknight/overworld_shiny.pal
new file mode 100644
index 000000000000..b3f9456052dd
--- /dev/null
+++ b/graphics/pokemon/corviknight/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+115 98 90
+172 164 156
+205 197 189
+0 0 0
+49 41 32
+139 131 123
+8 8 8
+148 148 148
+172 32 32
+49 49 49
+49 49 49
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/corvisquire/overworld.png b/graphics/pokemon/corvisquire/overworld.png
new file mode 100644
index 000000000000..2c5a7edbc906
Binary files /dev/null and b/graphics/pokemon/corvisquire/overworld.png differ
diff --git a/graphics/pokemon/corvisquire/overworld_normal.pal b/graphics/pokemon/corvisquire/overworld_normal.pal
new file mode 100644
index 000000000000..7ad121704f02
--- /dev/null
+++ b/graphics/pokemon/corvisquire/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 255 41
+8 8 8
+8 24 41
+24 24 24
+0 0 0
+49 106 172
+32 74 115
+172 32 32
+255 255 255
+57 65 90
+115 123 156
+139 148 180
+123 164 189
+90 131 156
+115 123 156
+0 0 0
diff --git a/graphics/pokemon/corvisquire/overworld_shiny.pal b/graphics/pokemon/corvisquire/overworld_shiny.pal
new file mode 100644
index 000000000000..7982bff06d9e
--- /dev/null
+++ b/graphics/pokemon/corvisquire/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 255 41
+16 16 16
+65 57 57
+41 41 41
+0 0 0
+180 164 156
+148 131 123
+172 32 32
+255 255 255
+57 65 90
+115 123 156
+139 148 180
+222 213 205
+172 164 156
+115 123 156
+0 0 0
diff --git a/graphics/pokemon/cosmoem/overworld.png b/graphics/pokemon/cosmoem/overworld.png
new file mode 100644
index 000000000000..c05ab505cf12
Binary files /dev/null and b/graphics/pokemon/cosmoem/overworld.png differ
diff --git a/graphics/pokemon/cosmoem/overworld_normal.pal b/graphics/pokemon/cosmoem/overworld_normal.pal
new file mode 100644
index 000000000000..f6818c322737
--- /dev/null
+++ b/graphics/pokemon/cosmoem/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+247 237 88
+229 211 79
+213 196 74
+196 148 58
+97 193 255
+77 114 237
+32 132 197
+57 86 181
+233 80 216
+101 78 44
+76 76 76
+42 42 42
+28 35 77
+20 18 18
+0 0 0
diff --git a/graphics/pokemon/cosmoem/overworld_shiny.pal b/graphics/pokemon/cosmoem/overworld_shiny.pal
new file mode 100644
index 000000000000..881d09112aa7
--- /dev/null
+++ b/graphics/pokemon/cosmoem/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+247 237 88
+229 211 79
+213 196 74
+196 148 58
+97 193 255
+160 40 64
+32 132 197
+184 72 128
+233 80 216
+101 78 44
+76 76 76
+42 42 42
+28 35 77
+20 18 18
+0 0 0
diff --git a/graphics/pokemon/cosmog/overworld.png b/graphics/pokemon/cosmog/overworld.png
new file mode 100644
index 000000000000..f13a79bfbb56
Binary files /dev/null and b/graphics/pokemon/cosmog/overworld.png differ
diff --git a/graphics/pokemon/cosmog/overworld_normal.pal b/graphics/pokemon/cosmog/overworld_normal.pal
new file mode 100644
index 000000000000..e08b3a68f983
--- /dev/null
+++ b/graphics/pokemon/cosmog/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+187 234 250
+243 223 61
+173 174 59
+41 131 196
+28 176 226
+122 78 173
+101 78 44
+11 78 102
+58 72 155
+88 68 155
+46 42 42
+36 47 113
+30 38 87
+32 29 29
+0 0 0
diff --git a/graphics/pokemon/cosmog/overworld_shiny.pal b/graphics/pokemon/cosmog/overworld_shiny.pal
new file mode 100644
index 000000000000..162674bf93b2
--- /dev/null
+++ b/graphics/pokemon/cosmog/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+187 234 250
+243 223 61
+173 174 59
+41 131 196
+28 176 226
+240 136 88
+101 78 44
+11 78 102
+58 72 155
+88 68 155
+46 42 42
+36 47 113
+30 38 87
+32 29 29
+0 0 0
diff --git a/graphics/pokemon/cottonee/overworld.png b/graphics/pokemon/cottonee/overworld.png
new file mode 100644
index 000000000000..15aec0406727
Binary files /dev/null and b/graphics/pokemon/cottonee/overworld.png differ
diff --git a/graphics/pokemon/cottonee/overworld_normal.pal b/graphics/pokemon/cottonee/overworld_normal.pal
new file mode 100644
index 000000000000..76222db0ce6b
--- /dev/null
+++ b/graphics/pokemon/cottonee/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+110 110 110
+204 227 209
+208 241 229
+164 207 173
+64 128 16
+92 224 48
+74 176 49
+47 46 47
+198 196 235
+137 162 175
+238 238 247
+137 117 107
+230 77 40
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/cottonee/overworld_shiny.pal b/graphics/pokemon/cottonee/overworld_shiny.pal
new file mode 100644
index 000000000000..bb3d8c85c8f3
--- /dev/null
+++ b/graphics/pokemon/cottonee/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 72 0
+240 240 192
+240 240 192
+192 176 136
+152 40 8
+232 144 32
+192 96 40
+47 46 47
+192 176 136
+137 162 175
+248 248 248
+137 117 107
+230 77 40
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/crabominable/overworld.png b/graphics/pokemon/crabominable/overworld.png
new file mode 100644
index 000000000000..619af9186c8a
Binary files /dev/null and b/graphics/pokemon/crabominable/overworld.png differ
diff --git a/graphics/pokemon/crabominable/overworld_normal.pal b/graphics/pokemon/crabominable/overworld_normal.pal
new file mode 100644
index 000000000000..2d20fdc88405
--- /dev/null
+++ b/graphics/pokemon/crabominable/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+220 227 228
+229 221 131
+202 188 120
+145 211 225
+156 165 166
+154 154 154
+74 123 134
+109 110 110
+99 95 181
+106 98 56
+75 74 124
+72 74 74
+16 16 16
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/crabominable/overworld_shiny.pal b/graphics/pokemon/crabominable/overworld_shiny.pal
new file mode 100644
index 000000000000..ada6989131a7
--- /dev/null
+++ b/graphics/pokemon/crabominable/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+220 227 228
+248 216 176
+202 188 120
+240 96 80
+156 165 166
+154 154 154
+128 40 40
+109 110 110
+80 88 120
+144 88 64
+56 56 88
+72 74 74
+16 16 16
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/crabrawler/overworld.png b/graphics/pokemon/crabrawler/overworld.png
new file mode 100644
index 000000000000..3c3d39d04c0d
Binary files /dev/null and b/graphics/pokemon/crabrawler/overworld.png differ
diff --git a/graphics/pokemon/crabrawler/overworld_normal.pal b/graphics/pokemon/crabrawler/overworld_normal.pal
new file mode 100644
index 000000000000..569201c5598f
--- /dev/null
+++ b/graphics/pokemon/crabrawler/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+212 220 220
+239 208 99
+209 167 67
+77 187 205
+63 137 158
+160 72 200
+64 99 118
+120 48 152
+98 84 34
+37 53 62
+47 45 69
+16 16 16
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/crabrawler/overworld_shiny.pal b/graphics/pokemon/crabrawler/overworld_shiny.pal
new file mode 100644
index 000000000000..755afbeb8b50
--- /dev/null
+++ b/graphics/pokemon/crabrawler/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+212 220 220
+248 216 176
+224 152 120
+240 96 80
+208 48 48
+160 72 200
+64 99 118
+84 79 119
+98 84 34
+37 53 62
+47 45 69
+16 16 16
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/cradily/overworld.png b/graphics/pokemon/cradily/overworld.png
new file mode 100644
index 000000000000..784f7ea9009f
Binary files /dev/null and b/graphics/pokemon/cradily/overworld.png differ
diff --git a/graphics/pokemon/cradily/overworld_normal.pal b/graphics/pokemon/cradily/overworld_normal.pal
new file mode 100644
index 000000000000..c7a6dab18dd5
--- /dev/null
+++ b/graphics/pokemon/cradily/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+0 0 0
+208 104 136
+160 48 88
+136 24 56
+192 64 96
+32 88 48
+96 168 96
+72 128 88
+152 216 152
+48 40 48
+240 208 96
+240 184 0
+128 112 64
+88 80 48
+0 0 0
diff --git a/graphics/pokemon/cradily/overworld_shiny.pal b/graphics/pokemon/cradily/overworld_shiny.pal
new file mode 100644
index 000000000000..aba268d08295
--- /dev/null
+++ b/graphics/pokemon/cradily/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+0 0 0
+208 104 136
+160 48 88
+136 24 56
+192 64 96
+80 48 88
+192 104 192
+136 80 120
+216 152 216
+48 40 48
+240 208 96
+240 184 0
+128 112 64
+88 80 48
+0 0 0
diff --git a/graphics/pokemon/cramorant/overworld.png b/graphics/pokemon/cramorant/overworld.png
new file mode 100644
index 000000000000..050cb330be52
Binary files /dev/null and b/graphics/pokemon/cramorant/overworld.png differ
diff --git a/graphics/pokemon/cramorant/overworld_normal.pal b/graphics/pokemon/cramorant/overworld_normal.pal
new file mode 100644
index 000000000000..d5f4002dcc49
--- /dev/null
+++ b/graphics/pokemon/cramorant/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+0 59 97
+0 113 187
+0 0 0
+0 86 142
+159 128 23
+229 194 73
+101 170 79
+198 161 29
+117 119 164
+189 191 212
+153 155 188
+0 77 127
+20 20 20
+76 76 76
+52 52 52
diff --git a/graphics/pokemon/cramorant/overworld_shiny.pal b/graphics/pokemon/cramorant/overworld_shiny.pal
new file mode 100644
index 000000000000..b581b9f49d34
--- /dev/null
+++ b/graphics/pokemon/cramorant/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+65 32 8
+255 156 57
+0 0 0
+222 131 41
+156 131 16
+230 197 74
+98 172 74
+197 164 24
+164 139 115
+222 205 189
+189 172 156
+164 98 32
+16 16 16
+74 74 74
+49 49 49
diff --git a/graphics/pokemon/cranidos/overworld.png b/graphics/pokemon/cranidos/overworld.png
new file mode 100644
index 000000000000..c0f27f15b1cc
Binary files /dev/null and b/graphics/pokemon/cranidos/overworld.png differ
diff --git a/graphics/pokemon/cranidos/overworld_normal.pal b/graphics/pokemon/cranidos/overworld_normal.pal
new file mode 100644
index 000000000000..cffa311a1dd3
--- /dev/null
+++ b/graphics/pokemon/cranidos/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 56 56
+48 56 80
+200 200 200
+0 0 0
+64 88 152
+88 128 232
+152 152 152
+112 112 112
+232 232 248
+144 8 32
+152 152 152
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/cranidos/overworld_shiny.pal b/graphics/pokemon/cranidos/overworld_shiny.pal
new file mode 100644
index 000000000000..b477880a239e
--- /dev/null
+++ b/graphics/pokemon/cranidos/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 56 56
+104 8 32
+224 224 160
+0 0 0
+168 32 64
+240 56 96
+168 168 120
+144 144 88
+232 232 248
+144 8 32
+176 176 120
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/crawdaunt/overworld.png b/graphics/pokemon/crawdaunt/overworld.png
new file mode 100644
index 000000000000..4f9acced4450
Binary files /dev/null and b/graphics/pokemon/crawdaunt/overworld.png differ
diff --git a/graphics/pokemon/crawdaunt/overworld_normal.pal b/graphics/pokemon/crawdaunt/overworld_normal.pal
new file mode 100644
index 000000000000..d530da4af8b6
--- /dev/null
+++ b/graphics/pokemon/crawdaunt/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+112 88 24
+248 216 88
+0 0 0
+184 152 40
+88 40 8
+248 104 96
+200 80 64
+144 56 32
+48 56 72
+232 232 248
+168 168 184
+168 152 144
+40 128 168
+88 80 64
+56 144 200
diff --git a/graphics/pokemon/crawdaunt/overworld_shiny.pal b/graphics/pokemon/crawdaunt/overworld_shiny.pal
new file mode 100644
index 000000000000..16f9fad35d82
--- /dev/null
+++ b/graphics/pokemon/crawdaunt/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+112 88 24
+248 240 184
+0 0 0
+248 192 0
+88 40 8
+248 160 96
+224 120 56
+160 80 32
+48 56 72
+232 232 248
+168 168 184
+176 176 200
+160 72 224
+88 80 64
+192 112 248
diff --git a/graphics/pokemon/cresselia/overworld.png b/graphics/pokemon/cresselia/overworld.png
new file mode 100644
index 000000000000..dd48c81cc1cb
Binary files /dev/null and b/graphics/pokemon/cresselia/overworld.png differ
diff --git a/graphics/pokemon/cresselia/overworld_normal.pal b/graphics/pokemon/cresselia/overworld_normal.pal
new file mode 100644
index 000000000000..6a3209ed3a42
--- /dev/null
+++ b/graphics/pokemon/cresselia/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 64 32
+248 232 168
+240 192 96
+176 136 72
+0 0 0
+104 40 56
+104 88 56
+216 104 168
+248 168 224
+160 72 112
+80 104 160
+88 144 224
+232 232 248
+64 64 64
+0 0 0
diff --git a/graphics/pokemon/cresselia/overworld_shiny.pal b/graphics/pokemon/cresselia/overworld_shiny.pal
new file mode 100644
index 000000000000..349315038275
--- /dev/null
+++ b/graphics/pokemon/cresselia/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 64 32
+248 232 168
+240 192 96
+176 136 72
+0 0 0
+8 80 120
+104 88 56
+72 168 160
+96 208 184
+48 120 136
+104 72 136
+160 112 216
+232 232 248
+64 64 64
+0 0 0
diff --git a/graphics/pokemon/croagunk/overworld.png b/graphics/pokemon/croagunk/overworld.png
new file mode 100644
index 000000000000..f822f403bdb4
Binary files /dev/null and b/graphics/pokemon/croagunk/overworld.png differ
diff --git a/graphics/pokemon/croagunk/overworld_normal.pal b/graphics/pokemon/croagunk/overworld_normal.pal
new file mode 100644
index 000000000000..5604dd41da7c
--- /dev/null
+++ b/graphics/pokemon/croagunk/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+48 48 88
+56 72 128
+88 128 208
+48 96 192
+248 128 8
+48 48 48
+248 216 56
+192 152 0
+192 88 0
+200 200 200
+128 128 128
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/croagunk/overworld_shiny.pal b/graphics/pokemon/croagunk/overworld_shiny.pal
new file mode 100644
index 000000000000..045c97797014
--- /dev/null
+++ b/graphics/pokemon/croagunk/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+40 56 56
+56 104 88
+88 200 168
+72 152 128
+248 112 144
+48 48 48
+248 216 56
+192 152 0
+176 64 128
+200 200 200
+128 128 128
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/crobat/overworld.png b/graphics/pokemon/crobat/overworld.png
new file mode 100644
index 000000000000..28add5ba23ca
Binary files /dev/null and b/graphics/pokemon/crobat/overworld.png differ
diff --git a/graphics/pokemon/crobat/overworld_normal.pal b/graphics/pokemon/crobat/overworld_normal.pal
new file mode 100644
index 000000000000..1fe057d5614f
--- /dev/null
+++ b/graphics/pokemon/crobat/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 24 120
+160 112 184
+120 80 144
+16 96 144
+40 144 184
+0 0 0
+232 216 96
+160 48 56
+168 184 208
+232 232 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/crobat/overworld_shiny.pal b/graphics/pokemon/crobat/overworld_shiny.pal
new file mode 100644
index 000000000000..bf03b689ca64
--- /dev/null
+++ b/graphics/pokemon/crobat/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 56 64
+232 168 184
+176 112 136
+64 80 88
+120 136 72
+0 0 0
+232 216 96
+160 48 56
+168 184 208
+232 232 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/croconaw/overworld.png b/graphics/pokemon/croconaw/overworld.png
new file mode 100644
index 000000000000..b028b22f560e
Binary files /dev/null and b/graphics/pokemon/croconaw/overworld.png differ
diff --git a/graphics/pokemon/croconaw/overworld_normal.pal b/graphics/pokemon/croconaw/overworld_normal.pal
new file mode 100644
index 000000000000..69cdb80a80dc
--- /dev/null
+++ b/graphics/pokemon/croconaw/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+112 24 40
+168 40 64
+0 0 0
+208 48 72
+40 64 96
+112 192 224
+64 104 136
+56 168 192
+232 232 248
+72 64 16
+136 72 0
+224 208 120
+184 160 88
+120 104 40
+0 0 0
diff --git a/graphics/pokemon/croconaw/overworld_shiny.pal b/graphics/pokemon/croconaw/overworld_shiny.pal
new file mode 100644
index 000000000000..8a0ba385e8e4
--- /dev/null
+++ b/graphics/pokemon/croconaw/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 160 176
+16 56 136
+32 96 224
+0 0 0
+16 120 248
+24 80 88
+104 224 184
+48 120 128
+56 192 168
+232 232 248
+72 64 16
+136 72 0
+224 192 120
+184 160 88
+120 104 40
+0 0 0
diff --git a/graphics/pokemon/crustle/overworld.png b/graphics/pokemon/crustle/overworld.png
new file mode 100644
index 000000000000..1132e915c326
Binary files /dev/null and b/graphics/pokemon/crustle/overworld.png differ
diff --git a/graphics/pokemon/crustle/overworld_normal.pal b/graphics/pokemon/crustle/overworld_normal.pal
new file mode 100644
index 000000000000..fe051f639a4d
--- /dev/null
+++ b/graphics/pokemon/crustle/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 64 64
+0 0 0
+160 160 128
+128 96 64
+224 192 64
+192 128 0
+229 229 247
+96 32 0
+224 128 64
+192 96 64
+0 0 0
+0 0 0
+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
new file mode 100644
index 000000000000..3104d02abadd
--- /dev/null
+++ b/graphics/pokemon/crustle/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 64 56
+0 0 0
+160 160 128
+96 88 80
+176 192 72
+48 40 24
+229 229 247
+48 40 24
+136 152 72
+96 104 48
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/cryogonal/overworld.png b/graphics/pokemon/cryogonal/overworld.png
new file mode 100644
index 000000000000..a1249fae839c
Binary files /dev/null and b/graphics/pokemon/cryogonal/overworld.png differ
diff --git a/graphics/pokemon/cryogonal/overworld_normal.pal b/graphics/pokemon/cryogonal/overworld_normal.pal
new file mode 100644
index 000000000000..1539494c585b
--- /dev/null
+++ b/graphics/pokemon/cryogonal/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+82 93 199
+40 47 101
+138 174 252
+0 0 0
+41 57 168
+189 223 255
+205 221 254
+205 221 254
+123 217 227
+41 57 168
+40 47 101
+189 223 255
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/cryogonal/overworld_shiny.pal b/graphics/pokemon/cryogonal/overworld_shiny.pal
new file mode 100644
index 000000000000..9195f2c0912a
--- /dev/null
+++ b/graphics/pokemon/cryogonal/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 136 192
+40 64 88
+138 174 252
+0 0 0
+48 96 160
+200 232 248
+205 221 254
+232 152 96
+232 200 128
+41 57 168
+40 47 101
+189 223 255
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/cubchoo/overworld.png b/graphics/pokemon/cubchoo/overworld.png
new file mode 100644
index 000000000000..f01f0f212b3f
Binary files /dev/null and b/graphics/pokemon/cubchoo/overworld.png differ
diff --git a/graphics/pokemon/cubchoo/overworld_normal.pal b/graphics/pokemon/cubchoo/overworld_normal.pal
new file mode 100644
index 000000000000..50d75a0e2938
--- /dev/null
+++ b/graphics/pokemon/cubchoo/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+74 115 115
+0 0 0
+148 213 238
+115 164 180
+74 115 164
+123 172 230
+232 232 248
+98 131 205
+57 74 74
+139 148 148
+176 184 192
+245 245 245
+200 208 224
+238 246 255
+197 205 222
diff --git a/graphics/pokemon/cubchoo/overworld_shiny.pal b/graphics/pokemon/cubchoo/overworld_shiny.pal
new file mode 100644
index 000000000000..384414bd4fed
--- /dev/null
+++ b/graphics/pokemon/cubchoo/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 72 128
+0 0 0
+192 160 240
+160 112 216
+98 98 202
+120 128 224
+228 231 237
+98 98 202
+57 74 74
+144 163 168
+144 163 168
+228 231 237
+228 231 237
+228 231 237
+197 205 222
diff --git a/graphics/pokemon/cubone/overworld.png b/graphics/pokemon/cubone/overworld.png
new file mode 100644
index 000000000000..26802dc5aea3
Binary files /dev/null and b/graphics/pokemon/cubone/overworld.png differ
diff --git a/graphics/pokemon/cubone/overworld_normal.pal b/graphics/pokemon/cubone/overworld_normal.pal
new file mode 100644
index 000000000000..955a43e179a9
--- /dev/null
+++ b/graphics/pokemon/cubone/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+72 72 72
+216 224 224
+192 192 192
+128 128 128
+136 96 24
+168 136 88
+232 232 248
+72 48 48
+160 160 160
+208 176 144
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/cubone/overworld_shiny.pal b/graphics/pokemon/cubone/overworld_shiny.pal
new file mode 100644
index 000000000000..84e8a88a933d
--- /dev/null
+++ b/graphics/pokemon/cubone/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+72 72 72
+224 224 200
+200 192 176
+128 128 128
+88 112 48
+136 152 64
+232 232 248
+40 64 24
+160 160 160
+208 176 144
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/cufant/overworld.png b/graphics/pokemon/cufant/overworld.png
new file mode 100644
index 000000000000..46df401e6d59
Binary files /dev/null and b/graphics/pokemon/cufant/overworld.png differ
diff --git a/graphics/pokemon/cufant/overworld_normal.pal b/graphics/pokemon/cufant/overworld_normal.pal
new file mode 100644
index 000000000000..3deec461909a
--- /dev/null
+++ b/graphics/pokemon/cufant/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+76 255 40
+2 27 26
+182 180 117
+5 83 82
+249 246 169
+14 127 125
+51 28 14
+247 171 122
+190 124 81
+0 0 0
+255 255 255
+16 16 16
+199 199 199
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/cufant/overworld_shiny.pal b/graphics/pokemon/cufant/overworld_shiny.pal
new file mode 100644
index 000000000000..96c7b05b69a3
--- /dev/null
+++ b/graphics/pokemon/cufant/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+76 255 40
+0 24 16
+180 180 115
+0 90 57
+255 246 172
+0 148 98
+65 57 16
+246 222 115
+189 164 74
+0 0 0
+255 255 255
+16 16 16
+197 197 197
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/cursola/front.png b/graphics/pokemon/cursola/front.png
index 2e4036381214..5dd4cea7de0a 100644
Binary files a/graphics/pokemon/cursola/front.png and b/graphics/pokemon/cursola/front.png differ
diff --git a/graphics/pokemon/cursola/overworld.png b/graphics/pokemon/cursola/overworld.png
new file mode 100644
index 000000000000..08c11e0f83d4
Binary files /dev/null and b/graphics/pokemon/cursola/overworld.png differ
diff --git a/graphics/pokemon/cursola/overworld_normal.pal b/graphics/pokemon/cursola/overworld_normal.pal
new file mode 100644
index 000000000000..ab614dd1d90d
--- /dev/null
+++ b/graphics/pokemon/cursola/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+76 252 40
+60 56 56
+0 0 0
+160 160 156
+220 216 212
+100 100 96
+252 252 252
+176 176 172
+232 232 228
+204 92 132
+44 40 40
+176 176 172
+0 0 0
+92 92 88
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/cursola/overworld_shiny.pal b/graphics/pokemon/cursola/overworld_shiny.pal
new file mode 100644
index 000000000000..9e82ed4fb1b7
--- /dev/null
+++ b/graphics/pokemon/cursola/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+57 57 57
+0 0 0
+164 164 156
+222 222 213
+98 98 98
+255 255 255
+57 57 65
+90 98 106
+205 90 131
+24 24 24
+57 57 65
+0 0 0
+90 90 90
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/cursola/shiny.pal b/graphics/pokemon/cursola/shiny.pal
index 552b1077fc62..925984395018 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/cutiefly/overworld.png b/graphics/pokemon/cutiefly/overworld.png
new file mode 100644
index 000000000000..26cc49748737
Binary files /dev/null and b/graphics/pokemon/cutiefly/overworld.png differ
diff --git a/graphics/pokemon/cutiefly/overworld_normal.pal b/graphics/pokemon/cutiefly/overworld_normal.pal
new file mode 100644
index 000000000000..741d0b11c090
--- /dev/null
+++ b/graphics/pokemon/cutiefly/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+224 224 208
+217 195 75
+182 181 166
+183 146 45
+177 127 63
+134 67 38
+80 80 80
+78 63 46
+16 16 16
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/cutiefly/overworld_shiny.pal b/graphics/pokemon/cutiefly/overworld_shiny.pal
new file mode 100644
index 000000000000..eba66bf48046
--- /dev/null
+++ b/graphics/pokemon/cutiefly/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+224 224 208
+240 184 192
+182 181 166
+200 120 128
+177 127 63
+184 48 32
+80 80 80
+78 63 46
+16 16 16
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/cyndaquil/overworld.png b/graphics/pokemon/cyndaquil/overworld.png
new file mode 100644
index 000000000000..8e48ebada892
Binary files /dev/null and b/graphics/pokemon/cyndaquil/overworld.png differ
diff --git a/graphics/pokemon/cyndaquil/overworld_normal.pal b/graphics/pokemon/cyndaquil/overworld_normal.pal
new file mode 100644
index 000000000000..6af9f489233c
--- /dev/null
+++ b/graphics/pokemon/cyndaquil/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+160 40 40
+128 24 24
+240 160 16
+208 56 48
+32 48 80
+96 128 224
+80 96 160
+72 72 112
+0 0 0
+208 168 24
+248 208 96
+88 64 16
+232 232 248
+168 184 208
+56 64 80
diff --git a/graphics/pokemon/cyndaquil/overworld_shiny.pal b/graphics/pokemon/cyndaquil/overworld_shiny.pal
new file mode 100644
index 000000000000..6e05ed9f5010
--- /dev/null
+++ b/graphics/pokemon/cyndaquil/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+160 40 40
+128 24 24
+240 160 16
+208 56 48
+104 56 0
+208 144 40
+168 112 8
+144 96 8
+0 0 0
+216 184 40
+248 208 96
+88 64 16
+232 232 248
+168 184 208
+56 64 80
diff --git a/graphics/pokemon/darkrai/overworld.png b/graphics/pokemon/darkrai/overworld.png
new file mode 100644
index 000000000000..048ed473f440
Binary files /dev/null and b/graphics/pokemon/darkrai/overworld.png differ
diff --git a/graphics/pokemon/darkrai/overworld_normal.pal b/graphics/pokemon/darkrai/overworld_normal.pal
new file mode 100644
index 000000000000..e28e62917eb7
--- /dev/null
+++ b/graphics/pokemon/darkrai/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 64 80
+48 48 48
+192 192 224
+136 144 168
+0 0 0
+96 104 120
+152 48 64
+248 72 64
+48 152 192
+248 248 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/darkrai/overworld_shiny.pal b/graphics/pokemon/darkrai/overworld_shiny.pal
new file mode 100644
index 000000000000..abfcb759e174
--- /dev/null
+++ b/graphics/pokemon/darkrai/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 64 120
+48 48 88
+192 192 232
+136 144 184
+0 0 0
+96 104 152
+144 56 96
+232 80 104
+32 136 168
+248 248 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/darmanitan/galarian/overworld.png b/graphics/pokemon/darmanitan/galarian/overworld.png
new file mode 100644
index 000000000000..f6d78555e5bc
Binary files /dev/null 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
new file mode 100644
index 000000000000..2036748fc693
--- /dev/null
+++ b/graphics/pokemon/darmanitan/galarian/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+140 78 78
+36 36 36
+167 167 167
+215 215 215
+10 34 40
+40 192 168
+0 0 0
+120 155 209
+79 111 160
+255 255 255
+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
new file mode 100644
index 000000000000..e61043b14e69
--- /dev/null
+++ b/graphics/pokemon/darmanitan/galarian/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+140 78 78
+36 36 36
+167 167 167
+215 215 215
+10 34 40
+72 160 216
+0 0 0
+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
diff --git a/graphics/pokemon/darmanitan/overworld.png b/graphics/pokemon/darmanitan/overworld.png
new file mode 100644
index 000000000000..6de83551bcf9
Binary files /dev/null and b/graphics/pokemon/darmanitan/overworld.png differ
diff --git a/graphics/pokemon/darmanitan/overworld_normal.pal b/graphics/pokemon/darmanitan/overworld_normal.pal
new file mode 100644
index 000000000000..985972ce943b
--- /dev/null
+++ b/graphics/pokemon/darmanitan/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+182 0 0
+87 18 18
+91 77 17
+228 172 48
+164 25 18
+202 63 38
+0 0 0
+197 197 215
+71 47 25
+129 18 33
+39 39 39
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/darmanitan/overworld_shiny.pal b/graphics/pokemon/darmanitan/overworld_shiny.pal
new file mode 100644
index 000000000000..dde3fd5efa61
--- /dev/null
+++ b/graphics/pokemon/darmanitan/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+182 0 0
+32 16 16
+99 85 21
+222 179 97
+120 48 72
+191 62 86
+0 0 0
+197 197 215
+71 30 30
+71 30 30
+39 39 39
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/dartrix/overworld.png b/graphics/pokemon/dartrix/overworld.png
new file mode 100644
index 000000000000..c5cdd65daa30
Binary files /dev/null and b/graphics/pokemon/dartrix/overworld.png differ
diff --git a/graphics/pokemon/dartrix/overworld_normal.pal b/graphics/pokemon/dartrix/overworld_normal.pal
new file mode 100644
index 000000000000..3adac8f4bf6b
--- /dev/null
+++ b/graphics/pokemon/dartrix/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+225 226 227
+167 173 181
+121 178 82
+240 132 94
+181 150 95
+156 120 78
+74 134 86
+99 100 103
+218 86 64
+122 81 70
+71 47 43
+52 58 55
+16 16 16
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/dartrix/overworld_shiny.pal b/graphics/pokemon/dartrix/overworld_shiny.pal
new file mode 100644
index 000000000000..389a1829e9d8
--- /dev/null
+++ b/graphics/pokemon/dartrix/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+225 226 227
+167 173 181
+87 199 178
+240 104 94
+181 150 95
+56 110 120
+74 134 125
+99 100 103
+218 64 82
+51 84 89
+34 58 60
+52 58 55
+16 16 16
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/darumaka/galarian/back.png b/graphics/pokemon/darumaka/galarian/back.png
index 94115f536adc..8aef0d775651 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.png b/graphics/pokemon/darumaka/galarian/overworld.png
new file mode 100644
index 000000000000..9e0554edc9b2
Binary files /dev/null and b/graphics/pokemon/darumaka/galarian/overworld.png differ
diff --git a/graphics/pokemon/darumaka/galarian/overworld_normal.pal b/graphics/pokemon/darumaka/galarian/overworld_normal.pal
new file mode 100644
index 000000000000..44a066b5bca5
--- /dev/null
+++ b/graphics/pokemon/darumaka/galarian/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+123 19 175
+10 34 40
+36 36 36
+0 0 0
+93 188 210
+215 215 215
+56 134 152
+29 45 70
+128 128 128
+120 155 209
+79 111 160
+167 167 167
+55 72 127
+255 255 255
+80 108 152
+15 15 15
diff --git a/graphics/pokemon/darumaka/galarian/overworld_shiny.pal b/graphics/pokemon/darumaka/galarian/overworld_shiny.pal
new file mode 100644
index 000000000000..409dc17fba7b
--- /dev/null
+++ b/graphics/pokemon/darumaka/galarian/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+123 19 175
+10 34 40
+36 36 36
+0 0 0
+120 203 214
+215 215 215
+32 146 160
+31 51 8
+128 128 128
+182 212 119
+120 184 40
+167 167 167
+64 104 16
+255 255 255
+40 93 104
+255 255 255
diff --git a/graphics/pokemon/darumaka/galarian/shiny.pal b/graphics/pokemon/darumaka/galarian/shiny.pal
index 21bd015c8a54..f7748fd8d4ce 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/darumaka/overworld.png b/graphics/pokemon/darumaka/overworld.png
new file mode 100644
index 000000000000..e481a5971b0e
Binary files /dev/null and b/graphics/pokemon/darumaka/overworld.png differ
diff --git a/graphics/pokemon/darumaka/overworld_normal.pal b/graphics/pokemon/darumaka/overworld_normal.pal
new file mode 100644
index 000000000000..beeb87003057
--- /dev/null
+++ b/graphics/pokemon/darumaka/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+79 18 18
+199 40 40
+147 33 33
+87 55 40
+138 104 11
+0 0 0
+255 199 25
+164 79 33
+255 138 71
+229 229 229
+155 155 164
+79 79 79
+199 155 18
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/darumaka/overworld_shiny.pal b/graphics/pokemon/darumaka/overworld_shiny.pal
new file mode 100644
index 000000000000..ed6cf7dc1c79
--- /dev/null
+++ b/graphics/pokemon/darumaka/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+79 18 18
+224 136 152
+160 80 104
+87 55 40
+144 120 64
+0 0 0
+248 224 104
+164 79 33
+248 184 88
+229 229 229
+155 155 164
+79 79 79
+232 184 56
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/decidueye/hisuian/overworld.png b/graphics/pokemon/decidueye/hisuian/overworld.png
new file mode 100644
index 000000000000..d528a33f2da7
Binary files /dev/null and b/graphics/pokemon/decidueye/hisuian/overworld.png differ
diff --git a/graphics/pokemon/decidueye/hisuian/overworld_normal.pal b/graphics/pokemon/decidueye/hisuian/overworld_normal.pal
new file mode 100644
index 000000000000..ed0e1cf36a38
--- /dev/null
+++ b/graphics/pokemon/decidueye/hisuian/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+8 8 8
+205 49 65
+131 24 24
+57 65 57
+255 90 90
+222 222 222
+222 180 90
+98 82 57
+74 57 41
+172 148 82
+164 139 123
+230 131 49
+74 82 82
+255 205 82
+222 65 49
diff --git a/graphics/pokemon/decidueye/hisuian/overworld_shiny.pal b/graphics/pokemon/decidueye/hisuian/overworld_shiny.pal
new file mode 100644
index 000000000000..14dffa72c0eb
--- /dev/null
+++ b/graphics/pokemon/decidueye/hisuian/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+8 8 8
+41 123 106
+24 57 49
+57 65 57
+90 189 106
+222 222 222
+205 131 74
+98 82 57
+74 57 41
+172 98 65
+164 139 123
+222 65 49
+74 82 82
+230 131 49
+197 57 49
diff --git a/graphics/pokemon/decidueye/overworld.png b/graphics/pokemon/decidueye/overworld.png
new file mode 100644
index 000000000000..14b8113c7b95
Binary files /dev/null and b/graphics/pokemon/decidueye/overworld.png differ
diff --git a/graphics/pokemon/decidueye/overworld_normal.pal b/graphics/pokemon/decidueye/overworld_normal.pal
new file mode 100644
index 000000000000..4d41e9da4a1d
--- /dev/null
+++ b/graphics/pokemon/decidueye/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+66 68 74
+216 220 222
+164 141 122
+24 61 53
+227 132 49
+41 125 107
+95 187 111
+219 70 51
+16 16 16
+63 67 63
+204 133 78
+173 97 71
+68 67 72
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/decidueye/overworld_shiny.pal b/graphics/pokemon/decidueye/overworld_shiny.pal
new file mode 100644
index 000000000000..9f3a7bc1491c
--- /dev/null
+++ b/graphics/pokemon/decidueye/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+66 68 74
+216 220 222
+164 141 122
+24 61 53
+238 97 74
+41 119 125
+95 187 179
+219 51 62
+16 16 16
+63 67 63
+128 128 128
+92 94 100
+68 67 72
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/dedenne/overworld.png b/graphics/pokemon/dedenne/overworld.png
new file mode 100644
index 000000000000..d92c317d75e0
Binary files /dev/null and b/graphics/pokemon/dedenne/overworld.png differ
diff --git a/graphics/pokemon/dedenne/overworld_normal.pal b/graphics/pokemon/dedenne/overworld_normal.pal
new file mode 100644
index 000000000000..d427c6fdc3cc
--- /dev/null
+++ b/graphics/pokemon/dedenne/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+49 49 49
+82 82 82
+250 218 144
+104 61 32
+255 242 115
+255 198 49
+0 0 0
+193 119 23
+232 180 63
+255 255 255
+240 68 31
+244 177 23
+251 241 219
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/dedenne/overworld_shiny.pal b/graphics/pokemon/dedenne/overworld_shiny.pal
new file mode 100644
index 000000000000..8c43e5b3ff00
--- /dev/null
+++ b/graphics/pokemon/dedenne/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+49 49 49
+82 82 82
+207 174 52
+85 65 54
+245 211 65
+255 198 49
+0 0 0
+139 103 84
+155 118 98
+255 255 255
+101 76 64
+244 177 23
+251 241 219
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/deerling/autumn/overworld.png b/graphics/pokemon/deerling/autumn/overworld.png
new file mode 100644
index 000000000000..eda763b62191
Binary files /dev/null and b/graphics/pokemon/deerling/autumn/overworld.png differ
diff --git a/graphics/pokemon/deerling/autumn/overworld_normal.pal b/graphics/pokemon/deerling/autumn/overworld_normal.pal
new file mode 100644
index 000000000000..ea85feef5ee0
--- /dev/null
+++ b/graphics/pokemon/deerling/autumn/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+18 32 11
+216 145 19
+63 33 13
+132 91 14
+246 236 65
+246 228 194
+206 164 103
+63 33 13
+216 145 19
+99 99 99
+62 62 66
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/deerling/autumn/overworld_shiny.pal b/graphics/pokemon/deerling/autumn/overworld_shiny.pal
new file mode 100644
index 000000000000..e49a9a7f7a83
--- /dev/null
+++ b/graphics/pokemon/deerling/autumn/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+18 32 11
+232 128 24
+128 72 16
+160 112 32
+248 208 240
+246 228 194
+206 164 103
+63 33 13
+216 145 19
+99 99 99
+62 62 66
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/deerling/overworld.png b/graphics/pokemon/deerling/overworld.png
new file mode 100644
index 000000000000..e2bfd0d9d32c
Binary files /dev/null and b/graphics/pokemon/deerling/overworld.png differ
diff --git a/graphics/pokemon/deerling/overworld_normal.pal b/graphics/pokemon/deerling/overworld_normal.pal
new file mode 100644
index 000000000000..f5fd58d7c477
--- /dev/null
+++ b/graphics/pokemon/deerling/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+24 40 16
+240 129 184
+102 56 100
+142 102 19
+247 238 76
+194 96 140
+220 154 25
+194 96 140
+247 231 200
+211 172 114
+110 110 110
+73 73 77
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/deerling/overworld_shiny.pal b/graphics/pokemon/deerling/overworld_shiny.pal
new file mode 100644
index 000000000000..5517152271a4
--- /dev/null
+++ b/graphics/pokemon/deerling/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+24 40 16
+248 152 168
+136 64 64
+142 102 19
+248 208 240
+176 104 104
+248 152 232
+194 96 140
+247 231 200
+211 172 114
+110 110 110
+73 73 77
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/deerling/summer/overworld.png b/graphics/pokemon/deerling/summer/overworld.png
new file mode 100644
index 000000000000..fcbc6a19fad2
Binary files /dev/null and b/graphics/pokemon/deerling/summer/overworld.png differ
diff --git a/graphics/pokemon/deerling/summer/overworld_normal.pal b/graphics/pokemon/deerling/summer/overworld_normal.pal
new file mode 100644
index 000000000000..12c0a070e034
--- /dev/null
+++ b/graphics/pokemon/deerling/summer/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+18 32 11
+63 168 40
+35 61 29
+132 91 14
+246 236 65
+43 97 38
+216 145 19
+246 228 194
+206 164 103
+99 99 99
+62 62 66
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/deerling/summer/overworld_shiny.pal b/graphics/pokemon/deerling/summer/overworld_shiny.pal
new file mode 100644
index 000000000000..0c6f48254ac5
--- /dev/null
+++ b/graphics/pokemon/deerling/summer/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+18 32 11
+64 176 64
+35 61 29
+132 91 14
+248 208 240
+48 120 64
+248 152 232
+246 228 194
+206 164 103
+99 99 99
+62 62 66
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/deerling/winter/overworld.png b/graphics/pokemon/deerling/winter/overworld.png
new file mode 100644
index 000000000000..0b619b55ac4c
Binary files /dev/null and b/graphics/pokemon/deerling/winter/overworld.png differ
diff --git a/graphics/pokemon/deerling/winter/overworld_normal.pal b/graphics/pokemon/deerling/winter/overworld_normal.pal
new file mode 100644
index 000000000000..0c74439bd505
--- /dev/null
+++ b/graphics/pokemon/deerling/winter/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+18 32 11
+134 102 61
+37 26 13
+132 91 14
+246 236 65
+35 61 29
+102 61 36
+216 145 19
+134 102 61
+246 228 194
+206 164 103
+99 99 99
+62 62 66
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/deerling/winter/overworld_shiny.pal b/graphics/pokemon/deerling/winter/overworld_shiny.pal
new file mode 100644
index 000000000000..1628855ed136
--- /dev/null
+++ b/graphics/pokemon/deerling/winter/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+18 32 11
+168 128 96
+37 26 13
+132 91 14
+248 208 240
+35 61 29
+120 80 72
+248 152 232
+134 102 61
+246 228 194
+206 164 103
+99 99 99
+62 62 66
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/deino/overworld.png b/graphics/pokemon/deino/overworld.png
new file mode 100644
index 000000000000..491f6a170ca4
Binary files /dev/null and b/graphics/pokemon/deino/overworld.png differ
diff --git a/graphics/pokemon/deino/overworld_normal.pal b/graphics/pokemon/deino/overworld_normal.pal
new file mode 100644
index 000000000000..4643179060e9
--- /dev/null
+++ b/graphics/pokemon/deino/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+41 32 41
+16 16 16
+82 82 82
+65 57 65
+0 0 0
+57 98 164
+24 49 106
+98 148 222
+156 65 49
+82 82 82
+156 57 106
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/deino/overworld_shiny.pal b/graphics/pokemon/deino/overworld_shiny.pal
new file mode 100644
index 000000000000..5ab732da3c01
--- /dev/null
+++ b/graphics/pokemon/deino/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+41 32 41
+16 16 16
+96 88 80
+80 64 64
+0 0 0
+88 104 48
+40 40 24
+112 152 72
+156 65 49
+82 82 82
+160 96 192
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/delcatty/overworld.png b/graphics/pokemon/delcatty/overworld.png
new file mode 100644
index 000000000000..0e4a1b0ed53e
Binary files /dev/null and b/graphics/pokemon/delcatty/overworld.png differ
diff --git a/graphics/pokemon/delcatty/overworld_normal.pal b/graphics/pokemon/delcatty/overworld_normal.pal
new file mode 100644
index 000000000000..119d3d3b01c9
--- /dev/null
+++ b/graphics/pokemon/delcatty/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 72 136
+152 104 200
+64 48 104
+192 144 216
+0 0 0
+224 184 56
+80 72 56
+176 120 72
+232 208 128
+232 232 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/delcatty/overworld_shiny.pal b/graphics/pokemon/delcatty/overworld_shiny.pal
new file mode 100644
index 000000000000..4ff5fe6bd42b
--- /dev/null
+++ b/graphics/pokemon/delcatty/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+184 56 56
+208 88 88
+104 32 32
+216 128 112
+0 0 0
+240 160 56
+80 72 56
+176 104 72
+248 192 128
+232 232 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/delibird/overworld.png b/graphics/pokemon/delibird/overworld.png
new file mode 100644
index 000000000000..d80f62384e7d
Binary files /dev/null and b/graphics/pokemon/delibird/overworld.png differ
diff --git a/graphics/pokemon/delibird/overworld_normal.pal b/graphics/pokemon/delibird/overworld_normal.pal
new file mode 100644
index 000000000000..4e03f4337f84
--- /dev/null
+++ b/graphics/pokemon/delibird/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 72 72
+144 160 176
+0 0 0
+232 232 248
+88 8 8
+200 24 24
+192 208 232
+152 8 8
+128 104 16
+248 216 88
+184 160 24
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/delibird/overworld_shiny.pal b/graphics/pokemon/delibird/overworld_shiny.pal
new file mode 100644
index 000000000000..7f3cc6a4e9a0
--- /dev/null
+++ b/graphics/pokemon/delibird/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 72 72
+144 160 176
+0 0 0
+232 232 248
+88 8 88
+208 144 208
+192 208 232
+152 72 152
+128 104 16
+248 216 88
+184 160 24
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/delphox/overworld.png b/graphics/pokemon/delphox/overworld.png
new file mode 100644
index 000000000000..e490e31cd818
Binary files /dev/null and b/graphics/pokemon/delphox/overworld.png differ
diff --git a/graphics/pokemon/delphox/overworld_normal.pal b/graphics/pokemon/delphox/overworld_normal.pal
new file mode 100644
index 000000000000..78bf3748c221
--- /dev/null
+++ b/graphics/pokemon/delphox/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+128 96 32
+0 0 0
+148 41 34
+250 224 96
+201 66 48
+243 86 58
+224 173 16
+153 68 75
+20 20 20
+255 255 255
+115 49 37
+111 51 51
+144 112 32
+51 36 53
+0 0 0
diff --git a/graphics/pokemon/delphox/overworld_shiny.pal b/graphics/pokemon/delphox/overworld_shiny.pal
new file mode 100644
index 000000000000..0ce8eda4cbe5
--- /dev/null
+++ b/graphics/pokemon/delphox/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+136 135 135
+0 0 0
+148 41 34
+208 208 208
+201 66 48
+243 86 58
+183 183 183
+121 92 131
+20 20 20
+255 255 255
+65 43 72
+101 69 111
+136 135 135
+51 36 53
+0 0 0
diff --git a/graphics/pokemon/deoxys/attack/overworld.png b/graphics/pokemon/deoxys/attack/overworld.png
new file mode 100644
index 000000000000..33d68d6b0721
Binary files /dev/null and b/graphics/pokemon/deoxys/attack/overworld.png differ
diff --git a/graphics/pokemon/deoxys/attack/overworld_normal.pal b/graphics/pokemon/deoxys/attack/overworld_normal.pal
new file mode 100644
index 000000000000..645290954fdc
--- /dev/null
+++ b/graphics/pokemon/deoxys/attack/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 160 176
+96 16 16
+0 0 0
+248 128 80
+184 40 40
+224 72 64
+64 168 152
+48 120 104
+184 88 208
+32 72 64
+56 56 56
+232 232 248
+120 64 128
+80 88 96
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/deoxys/attack/overworld_shiny.pal b/graphics/pokemon/deoxys/attack/overworld_shiny.pal
new file mode 100644
index 000000000000..ffda233a8106
--- /dev/null
+++ b/graphics/pokemon/deoxys/attack/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 160 176
+96 64 16
+0 0 0
+248 208 40
+192 112 0
+240 168 0
+64 168 152
+48 120 104
+184 88 208
+32 72 64
+56 56 56
+232 232 248
+120 64 128
+80 88 96
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/deoxys/defense/overworld.png b/graphics/pokemon/deoxys/defense/overworld.png
new file mode 100644
index 000000000000..3565df1926ee
Binary files /dev/null and b/graphics/pokemon/deoxys/defense/overworld.png differ
diff --git a/graphics/pokemon/deoxys/defense/overworld_normal.pal b/graphics/pokemon/deoxys/defense/overworld_normal.pal
new file mode 100644
index 000000000000..172e6b3e003f
--- /dev/null
+++ b/graphics/pokemon/deoxys/defense/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 160 176
+96 16 16
+0 0 0
+248 128 80
+224 72 64
+184 40 40
+64 168 152
+184 88 208
+32 72 64
+48 120 104
+56 56 56
+120 64 128
+232 232 248
+80 88 96
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/deoxys/defense/overworld_shiny.pal b/graphics/pokemon/deoxys/defense/overworld_shiny.pal
new file mode 100644
index 000000000000..95aecde7a0a5
--- /dev/null
+++ b/graphics/pokemon/deoxys/defense/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 160 176
+96 64 16
+0 0 0
+248 208 40
+240 168 0
+192 112 0
+64 168 152
+184 88 208
+32 72 64
+48 120 104
+56 56 56
+120 64 128
+232 232 248
+80 88 96
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/deoxys/overworld.png b/graphics/pokemon/deoxys/overworld.png
new file mode 100644
index 000000000000..7a46c8b23ac6
Binary files /dev/null and b/graphics/pokemon/deoxys/overworld.png differ
diff --git a/graphics/pokemon/deoxys/overworld_normal.pal b/graphics/pokemon/deoxys/overworld_normal.pal
new file mode 100644
index 000000000000..d88224cc9ad9
--- /dev/null
+++ b/graphics/pokemon/deoxys/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 160 176
+96 16 16
+248 128 80
+0 0 0
+224 72 64
+184 40 40
+64 168 152
+184 88 208
+48 120 104
+56 56 56
+232 232 248
+120 64 128
+32 72 64
+80 88 96
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/deoxys/overworld_shiny.pal b/graphics/pokemon/deoxys/overworld_shiny.pal
new file mode 100644
index 000000000000..f656d65d96a1
--- /dev/null
+++ b/graphics/pokemon/deoxys/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 160 176
+96 64 16
+248 208 40
+0 0 0
+240 168 0
+192 112 0
+64 168 152
+184 88 208
+48 120 104
+56 56 56
+232 232 248
+120 64 128
+32 72 64
+80 88 96
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/deoxys/speed/overworld.png b/graphics/pokemon/deoxys/speed/overworld.png
new file mode 100644
index 000000000000..24e4ba48ee2d
Binary files /dev/null and b/graphics/pokemon/deoxys/speed/overworld.png differ
diff --git a/graphics/pokemon/deoxys/speed/overworld_normal.pal b/graphics/pokemon/deoxys/speed/overworld_normal.pal
new file mode 100644
index 000000000000..caa4f6fbfb40
--- /dev/null
+++ b/graphics/pokemon/deoxys/speed/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 160 176
+32 72 64
+64 168 152
+0 0 0
+48 120 104
+184 40 40
+248 128 80
+96 16 16
+224 72 64
+184 88 208
+56 56 56
+232 232 248
+120 64 128
+80 88 96
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/deoxys/speed/overworld_shiny.pal b/graphics/pokemon/deoxys/speed/overworld_shiny.pal
new file mode 100644
index 000000000000..c8122e3382bb
--- /dev/null
+++ b/graphics/pokemon/deoxys/speed/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 160 176
+32 72 64
+64 168 152
+0 0 0
+48 120 104
+192 112 0
+248 208 40
+96 64 16
+240 168 0
+184 88 208
+56 56 56
+232 232 248
+120 64 128
+80 88 96
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/dewgong/overworld.png b/graphics/pokemon/dewgong/overworld.png
new file mode 100644
index 000000000000..1959cc4fb3b6
Binary files /dev/null and b/graphics/pokemon/dewgong/overworld.png differ
diff --git a/graphics/pokemon/dewgong/overworld_normal.pal b/graphics/pokemon/dewgong/overworld_normal.pal
new file mode 100644
index 000000000000..0c2bd6a12cbb
--- /dev/null
+++ b/graphics/pokemon/dewgong/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 210 164
+48 48 80
+176 184 216
+224 224 240
+72 80 120
+0 0 0
+232 232 248
+112 128 184
+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/dewgong/overworld_shiny.pal b/graphics/pokemon/dewgong/overworld_shiny.pal
new file mode 100644
index 000000000000..8473af74eb6d
--- /dev/null
+++ b/graphics/pokemon/dewgong/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 210 164
+80 80 64
+184 184 184
+232 232 232
+104 104 64
+0 0 0
+232 232 248
+144 144 120
+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/dewott/overworld.png b/graphics/pokemon/dewott/overworld.png
new file mode 100644
index 000000000000..7f28592c7776
Binary files /dev/null and b/graphics/pokemon/dewott/overworld.png differ
diff --git a/graphics/pokemon/dewott/overworld_normal.pal b/graphics/pokemon/dewott/overworld_normal.pal
new file mode 100644
index 000000000000..3ef7077292a9
--- /dev/null
+++ b/graphics/pokemon/dewott/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+41 88 105
+0 0 0
+32 139 148
+32 139 148
+82 189 189
+49 49 49
+74 74 74
+115 57 57
+250 247 240
+82 189 189
+46 56 92
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/dewott/overworld_shiny.pal b/graphics/pokemon/dewott/overworld_shiny.pal
new file mode 100644
index 000000000000..8c28ea7eda18
--- /dev/null
+++ b/graphics/pokemon/dewott/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+51 76 90
+0 0 0
+64 176 152
+32 139 148
+80 208 184
+49 49 49
+74 74 74
+197 82 90
+250 247 240
+82 189 189
+128 56 120
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/dewpider/overworld.png b/graphics/pokemon/dewpider/overworld.png
new file mode 100644
index 000000000000..a5851c7ff85a
Binary files /dev/null and b/graphics/pokemon/dewpider/overworld.png differ
diff --git a/graphics/pokemon/dewpider/overworld_normal.pal b/graphics/pokemon/dewpider/overworld_normal.pal
new file mode 100644
index 000000000000..1c6033a2832f
--- /dev/null
+++ b/graphics/pokemon/dewpider/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+248 248 248
+232 232 232
+163 185 55
+79 156 197
+101 108 143
+70 119 37
+77 83 108
+96 54 50
+34 36 43
+16 16 16
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/dewpider/overworld_shiny.pal b/graphics/pokemon/dewpider/overworld_shiny.pal
new file mode 100644
index 000000000000..45e31b40525a
--- /dev/null
+++ b/graphics/pokemon/dewpider/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+248 248 248
+232 232 232
+160 80 192
+248 128 80
+101 108 143
+104 48 144
+77 83 108
+96 54 50
+34 36 43
+16 16 16
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/dhelmise/overworld.png b/graphics/pokemon/dhelmise/overworld.png
new file mode 100644
index 000000000000..f291a0c0a268
Binary files /dev/null and b/graphics/pokemon/dhelmise/overworld.png differ
diff --git a/graphics/pokemon/dhelmise/overworld_normal.pal b/graphics/pokemon/dhelmise/overworld_normal.pal
new file mode 100644
index 000000000000..9b14093407b8
--- /dev/null
+++ b/graphics/pokemon/dhelmise/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+248 246 217
+227 210 73
+52 146 161
+241 145 98
+118 141 46
+42 113 124
+255 83 0
+164 101 128
+159 107 54
+141 94 46
+91 96 32
+109 62 46
+101 61 71
+20 49 65
+16 16 16
diff --git a/graphics/pokemon/dhelmise/overworld_shiny.pal b/graphics/pokemon/dhelmise/overworld_shiny.pal
new file mode 100644
index 000000000000..6eb64cd0178a
--- /dev/null
+++ b/graphics/pokemon/dhelmise/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+248 246 217
+232 232 232
+232 72 72
+241 145 98
+184 104 136
+184 32 32
+255 83 0
+216 160 184
+159 107 54
+141 94 46
+120 96 112
+109 62 46
+101 61 71
+20 49 65
+16 16 16
diff --git a/graphics/pokemon/dialga/origin/overworld.png b/graphics/pokemon/dialga/origin/overworld.png
new file mode 100644
index 000000000000..f0e7a4429796
Binary files /dev/null and b/graphics/pokemon/dialga/origin/overworld.png differ
diff --git a/graphics/pokemon/dialga/origin/overworld_normal.pal b/graphics/pokemon/dialga/origin/overworld_normal.pal
new file mode 100644
index 000000000000..e6bfc48201b1
--- /dev/null
+++ b/graphics/pokemon/dialga/origin/overworld_normal.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/dialga/origin/overworld_shiny.pal b/graphics/pokemon/dialga/origin/overworld_shiny.pal
new file mode 100644
index 000000000000..e6bfc48201b1
--- /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/dialga/overworld.png b/graphics/pokemon/dialga/overworld.png
new file mode 100644
index 000000000000..d7632b6dc02c
Binary files /dev/null and b/graphics/pokemon/dialga/overworld.png differ
diff --git a/graphics/pokemon/dialga/overworld_normal.pal b/graphics/pokemon/dialga/overworld_normal.pal
new file mode 100644
index 000000000000..e536b2eab85b
--- /dev/null
+++ b/graphics/pokemon/dialga/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+96 160 192
+32 88 144
+32 64 104
+40 56 72
+184 200 216
+136 160 176
+96 120 136
+56 120 176
+152 208 240
+216 232 248
+184 32 16
+240 80 64
+64 128 248
+0 0 0
diff --git a/graphics/pokemon/dialga/overworld_shiny.pal b/graphics/pokemon/dialga/overworld_shiny.pal
new file mode 100644
index 000000000000..e0a10b98fde0
--- /dev/null
+++ b/graphics/pokemon/dialga/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+96 168 192
+0 136 152
+24 72 88
+64 64 64
+216 208 144
+184 184 136
+136 136 56
+40 160 160
+152 208 240
+232 224 176
+184 32 16
+240 80 64
+64 128 248
+0 0 0
diff --git a/graphics/pokemon/diancie/mega/back.png b/graphics/pokemon/diancie/mega/back.png
index cb9a177a0d55..3816c40d78e8 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 ef48adeebd04..73f34c79c91d 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 0d9dd1445713..d7bca6486679 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 f221fb1d59cf..d69f1886bcbe 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/diancie/overworld.png b/graphics/pokemon/diancie/overworld.png
new file mode 100644
index 000000000000..7c1eb759e11a
Binary files /dev/null and b/graphics/pokemon/diancie/overworld.png differ
diff --git a/graphics/pokemon/diancie/overworld_normal.pal b/graphics/pokemon/diancie/overworld_normal.pal
new file mode 100644
index 000000000000..990c8faba8dc
--- /dev/null
+++ b/graphics/pokemon/diancie/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+225 213 222
+242 154 218
+131 31 71
+206 86 159
+37 38 48
+116 120 150
+75 77 101
+227 199 137
+198 152 98
+225 213 222
+182 166 178
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/diancie/overworld_shiny.pal b/graphics/pokemon/diancie/overworld_shiny.pal
new file mode 100644
index 000000000000..d09a01beec12
--- /dev/null
+++ b/graphics/pokemon/diancie/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+251 194 216
+243 148 184
+161 42 109
+217 100 143
+30 29 29
+77 77 77
+50 49 49
+227 199 137
+198 152 98
+226 66 127
+168 45 92
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/diggersby/overworld.png b/graphics/pokemon/diggersby/overworld.png
new file mode 100644
index 000000000000..03d6b5906674
Binary files /dev/null and b/graphics/pokemon/diggersby/overworld.png differ
diff --git a/graphics/pokemon/diggersby/overworld_normal.pal b/graphics/pokemon/diggersby/overworld_normal.pal
new file mode 100644
index 000000000000..6676ad6c6eb6
--- /dev/null
+++ b/graphics/pokemon/diggersby/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 88 88
+66 53 35
+221 221 221
+153 119 68
+161 161 161
+117 90 55
+16 16 16
+238 153 170
+230 238 248
+196 179 152
+200 169 86
+255 221 119
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/diggersby/overworld_shiny.pal b/graphics/pokemon/diggersby/overworld_shiny.pal
new file mode 100644
index 000000000000..a9e53ba65541
--- /dev/null
+++ b/graphics/pokemon/diggersby/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 88 88
+66 53 35
+169 175 161
+233 235 229
+115 116 109
+197 198 194
+16 16 16
+238 153 170
+230 238 248
+196 179 152
+123 104 90
+168 142 123
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/diglett/alolan/overworld.png b/graphics/pokemon/diglett/alolan/overworld.png
new file mode 100644
index 000000000000..0e26118a99ab
Binary files /dev/null and b/graphics/pokemon/diglett/alolan/overworld.png differ
diff --git a/graphics/pokemon/diglett/alolan/overworld_normal.pal b/graphics/pokemon/diglett/alolan/overworld_normal.pal
new file mode 100644
index 000000000000..666679790db7
--- /dev/null
+++ b/graphics/pokemon/diglett/alolan/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+142 136 86
+0 0 0
+255 253 159
+204 199 145
+90 49 24
+197 115 65
+149 69 115
+148 86 48
+255 214 243
+233 122 186
+197 35 136
+47 47 47
+60 59 59
+149 149 149
+112 112 112
diff --git a/graphics/pokemon/diglett/alolan/overworld_shiny.pal b/graphics/pokemon/diglett/alolan/overworld_shiny.pal
new file mode 100644
index 000000000000..0de622feb7db
--- /dev/null
+++ b/graphics/pokemon/diglett/alolan/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+142 136 86
+0 0 0
+255 253 159
+204 199 145
+100 25 14
+229 88 72
+80 87 138
+175 66 54
+255 214 243
+137 147 217
+57 77 174
+47 47 47
+60 59 59
+149 149 149
+112 112 112
diff --git a/graphics/pokemon/diglett/overworld.png b/graphics/pokemon/diglett/overworld.png
new file mode 100644
index 000000000000..e1dd33f63ec3
Binary files /dev/null and b/graphics/pokemon/diglett/overworld.png differ
diff --git a/graphics/pokemon/diglett/overworld_normal.pal b/graphics/pokemon/diglett/overworld_normal.pal
new file mode 100644
index 000000000000..ed1417709e1c
--- /dev/null
+++ b/graphics/pokemon/diglett/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 48 16
+152 120 56
+104 8 40
+112 72 32
+200 200 200
+0 0 0
+208 64 104
+232 112 152
+152 32 72
+64 64 64
+112 112 112
+168 168 168
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/diglett/overworld_shiny.pal b/graphics/pokemon/diglett/overworld_shiny.pal
new file mode 100644
index 000000000000..f93b4caa0759
--- /dev/null
+++ b/graphics/pokemon/diglett/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 48 16
+152 120 56
+0 48 80
+112 72 32
+200 200 200
+0 0 0
+56 136 216
+136 192 248
+24 80 160
+64 64 64
+112 112 112
+168 168 168
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/ditto/overworld.png b/graphics/pokemon/ditto/overworld.png
new file mode 100644
index 000000000000..a74652588e5c
Binary files /dev/null and b/graphics/pokemon/ditto/overworld.png differ
diff --git a/graphics/pokemon/ditto/overworld_normal.pal b/graphics/pokemon/ditto/overworld_normal.pal
new file mode 100644
index 000000000000..d21458714fa3
--- /dev/null
+++ b/graphics/pokemon/ditto/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+64 64 64
+144 120 176
+184 144 224
+224 176 240
+112 80 144
+0 0 0
+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/ditto/overworld_shiny.pal b/graphics/pokemon/ditto/overworld_shiny.pal
new file mode 100644
index 000000000000..b5f8d3f9b145
--- /dev/null
+++ b/graphics/pokemon/ditto/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+64 64 64
+104 160 208
+128 184 224
+160 232 240
+48 112 168
+0 0 0
+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/dodrio/overworld.png b/graphics/pokemon/dodrio/overworld.png
new file mode 100644
index 000000000000..b9d1b7ffb16b
Binary files /dev/null and b/graphics/pokemon/dodrio/overworld.png differ
diff --git a/graphics/pokemon/dodrio/overworld_normal.pal b/graphics/pokemon/dodrio/overworld_normal.pal
new file mode 100644
index 000000000000..b636b4382add
--- /dev/null
+++ b/graphics/pokemon/dodrio/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 56 56
+128 128 128
+0 0 0
+64 48 32
+136 96 40
+184 128 72
+120 80 40
+232 232 248
+176 176 152
+248 176 48
+136 112 40
+96 24 32
+184 64 88
+224 128 144
+192 160 64
diff --git a/graphics/pokemon/dodrio/overworld_shiny.pal b/graphics/pokemon/dodrio/overworld_shiny.pal
new file mode 100644
index 000000000000..e153881f09dd
--- /dev/null
+++ b/graphics/pokemon/dodrio/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 56 56
+120 120 120
+0 0 0
+72 80 48
+128 120 56
+184 160 72
+112 104 56
+232 232 248
+176 176 152
+248 176 48
+136 112 40
+96 24 32
+184 64 88
+224 128 144
+192 160 64
diff --git a/graphics/pokemon/doduo/overworld.png b/graphics/pokemon/doduo/overworld.png
new file mode 100644
index 000000000000..5877cb1e7bdc
Binary files /dev/null and b/graphics/pokemon/doduo/overworld.png differ
diff --git a/graphics/pokemon/doduo/overworld_normal.pal b/graphics/pokemon/doduo/overworld_normal.pal
new file mode 100644
index 000000000000..6a2e2d3e46b0
--- /dev/null
+++ b/graphics/pokemon/doduo/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 56 40
+136 96 40
+104 72 32
+0 0 0
+224 176 104
+192 120 24
+184 128 72
+112 104 96
+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/doduo/overworld_shiny.pal b/graphics/pokemon/doduo/overworld_shiny.pal
new file mode 100644
index 000000000000..f1d64b254cf5
--- /dev/null
+++ b/graphics/pokemon/doduo/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 80 48
+144 136 64
+112 104 56
+0 0 0
+224 176 104
+192 120 24
+184 160 72
+112 104 96
+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/donphan/overworld.png b/graphics/pokemon/donphan/overworld.png
new file mode 100644
index 000000000000..e6afdd6f2f76
Binary files /dev/null and b/graphics/pokemon/donphan/overworld.png differ
diff --git a/graphics/pokemon/donphan/overworld_normal.pal b/graphics/pokemon/donphan/overworld_normal.pal
new file mode 100644
index 000000000000..e90107418931
--- /dev/null
+++ b/graphics/pokemon/donphan/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+24 40 56
+48 72 80
+120 136 152
+16 16 16
+72 88 112
+72 64 72
+120 120 128
+152 152 160
+88 8 8
+136 24 24
+184 184 200
+248 248 248
+184 184 192
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/donphan/overworld_shiny.pal b/graphics/pokemon/donphan/overworld_shiny.pal
new file mode 100644
index 000000000000..22f9a2b5d827
--- /dev/null
+++ b/graphics/pokemon/donphan/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 24 24
+120 48 32
+184 136 96
+16 16 16
+152 96 64
+72 64 72
+128 136 96
+168 176 144
+88 8 8
+136 24 24
+184 184 200
+248 248 248
+184 184 192
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/dottler/overworld.png b/graphics/pokemon/dottler/overworld.png
new file mode 100644
index 000000000000..4b627b4df28f
Binary files /dev/null and b/graphics/pokemon/dottler/overworld.png differ
diff --git a/graphics/pokemon/dottler/overworld_normal.pal b/graphics/pokemon/dottler/overworld_normal.pal
new file mode 100644
index 000000000000..48eaed7716ef
--- /dev/null
+++ b/graphics/pokemon/dottler/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+32 252 12
+132 100 40
+96 196 228
+252 252 252
+252 216 136
+100 96 120
+60 60 76
+232 172 48
+252 192 88
+0 0 0
+20 20 24
+232 104 20
+172 224 220
+252 168 80
+96 196 228
+0 0 0
diff --git a/graphics/pokemon/dottler/overworld_shiny.pal b/graphics/pokemon/dottler/overworld_shiny.pal
new file mode 100644
index 000000000000..b4f2a1978a93
--- /dev/null
+++ b/graphics/pokemon/dottler/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+32 252 12
+49 41 57
+98 197 230
+255 255 255
+180 164 222
+98 98 123
+57 57 74
+131 123 164
+156 148 197
+0 0 0
+16 16 24
+238 106 16
+172 230 222
+255 172 82
+98 197 230
+0 0 0
diff --git a/graphics/pokemon/doublade/overworld.png b/graphics/pokemon/doublade/overworld.png
new file mode 100644
index 000000000000..93b31c056763
Binary files /dev/null and b/graphics/pokemon/doublade/overworld.png differ
diff --git a/graphics/pokemon/doublade/overworld_normal.pal b/graphics/pokemon/doublade/overworld_normal.pal
new file mode 100644
index 000000000000..76af98f462cf
--- /dev/null
+++ b/graphics/pokemon/doublade/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 52 81
+16 16 16
+48 47 47
+157 77 143
+185 171 151
+127 110 94
+238 155 191
+156 141 123
+251 254 255
+207 126 177
+185 171 151
+81 78 78
+127 110 94
+156 141 123
+0 0 0
diff --git a/graphics/pokemon/doublade/overworld_shiny.pal b/graphics/pokemon/doublade/overworld_shiny.pal
new file mode 100644
index 000000000000..d1fb5b574bee
--- /dev/null
+++ b/graphics/pokemon/doublade/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+67 40 86
+16 16 16
+48 47 47
+109 66 132
+152 150 149
+106 104 103
+247 223 143
+126 123 122
+251 254 255
+197 171 112
+185 171 151
+81 78 78
+127 110 94
+156 141 123
+0 0 0
diff --git a/graphics/pokemon/dracovish/overworld.png b/graphics/pokemon/dracovish/overworld.png
new file mode 100644
index 000000000000..16efb8cc148c
Binary files /dev/null and b/graphics/pokemon/dracovish/overworld.png differ
diff --git a/graphics/pokemon/dracovish/overworld_normal.pal b/graphics/pokemon/dracovish/overworld_normal.pal
new file mode 100644
index 000000000000..9a08cd6df10f
--- /dev/null
+++ b/graphics/pokemon/dracovish/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+12 252 96
+0 0 0
+44 20 24
+12 48 48
+0 108 92
+244 72 88
+244 88 100
+0 20 16
+236 120 128
+100 136 160
+240 132 144
+252 168 176
+172 184 192
+152 204 236
+216 236 252
+252 252 252
diff --git a/graphics/pokemon/dracovish/overworld_shiny.pal b/graphics/pokemon/dracovish/overworld_shiny.pal
new file mode 100644
index 000000000000..d8b11a9e9490
--- /dev/null
+++ b/graphics/pokemon/dracovish/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+24 24 24
+90 82 82
+131 123 123
+24 24 24
+98 90 115
+24 24 24
+57 57 57
+156 164 156
+139 123 156
+74 74 74
+172 189 197
+189 205 189
+222 238 213
+255 255 255
diff --git a/graphics/pokemon/dracozolt/overworld.png b/graphics/pokemon/dracozolt/overworld.png
new file mode 100644
index 000000000000..8cbd25de4adf
Binary files /dev/null and b/graphics/pokemon/dracozolt/overworld.png differ
diff --git a/graphics/pokemon/dracozolt/overworld_normal.pal b/graphics/pokemon/dracozolt/overworld_normal.pal
new file mode 100644
index 000000000000..11b3c9f0464e
--- /dev/null
+++ b/graphics/pokemon/dracozolt/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+252 252 252
+92 92 40
+216 216 128
+0 0 0
+252 252 164
+244 72 88
+0 108 92
+20 40 36
+244 208 44
+252 168 176
+188 156 12
+244 72 88
+236 120 128
+240 164 112
+188 124 80
+196 196 124
diff --git a/graphics/pokemon/dracozolt/overworld_shiny.pal b/graphics/pokemon/dracozolt/overworld_shiny.pal
new file mode 100644
index 000000000000..7f93f86fd687
--- /dev/null
+++ b/graphics/pokemon/dracozolt/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+41 41 41
+213 213 205
+0 0 0
+238 238 230
+131 115 148
+131 123 115
+82 74 74
+213 213 205
+98 115 131
+156 156 156
+57 65 82
+82 98 115
+197 172 230
+131 115 148
+164 156 156
diff --git a/graphics/pokemon/dragalge/overworld.png b/graphics/pokemon/dragalge/overworld.png
new file mode 100644
index 000000000000..b19bc7d03c45
Binary files /dev/null and b/graphics/pokemon/dragalge/overworld.png differ
diff --git a/graphics/pokemon/dragalge/overworld_normal.pal b/graphics/pokemon/dragalge/overworld_normal.pal
new file mode 100644
index 000000000000..fab860d1e0f0
--- /dev/null
+++ b/graphics/pokemon/dragalge/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+144 200 152
+40 63 31
+54 33 27
+123 179 61
+158 56 92
+195 65 104
+16 16 16
+91 125 51
+54 33 27
+131 87 62
+109 67 49
+222 148 200
+173 98 156
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/dragalge/overworld_shiny.pal b/graphics/pokemon/dragalge/overworld_shiny.pal
new file mode 100644
index 000000000000..28e15a75429a
--- /dev/null
+++ b/graphics/pokemon/dragalge/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+144 200 152
+139 121 53
+83 130 65
+255 234 156
+129 180 110
+165 216 144
+16 16 16
+198 176 94
+93 56 73
+179 126 152
+141 89 114
+183 247 247
+119 195 195
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/dragapult/overworld.png b/graphics/pokemon/dragapult/overworld.png
new file mode 100644
index 000000000000..cae22a731aba
Binary files /dev/null and b/graphics/pokemon/dragapult/overworld.png differ
diff --git a/graphics/pokemon/dragapult/overworld_normal.pal b/graphics/pokemon/dragapult/overworld_normal.pal
new file mode 100644
index 000000000000..944e5572f689
--- /dev/null
+++ b/graphics/pokemon/dragapult/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+252 252 252
+4 8 8
+48 72 84
+96 136 120
+228 96 116
+172 60 76
+72 100 112
+16 40 44
+96 28 36
+216 212 104
+232 228 52
+252 248 140
+208 244 244
+56 152 152
+92 200 200
+228 96 116
diff --git a/graphics/pokemon/dragapult/overworld_shiny.pal b/graphics/pokemon/dragapult/overworld_shiny.pal
new file mode 100644
index 000000000000..e81e1be403d0
--- /dev/null
+++ b/graphics/pokemon/dragapult/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 8
+49 74 82
+74 164 189
+238 255 74
+189 197 49
+74 98 115
+16 41 41
+106 115 24
+148 164 164
+238 230 49
+213 238 238
+213 238 238
+57 156 156
+90 205 205
+222 82 106
diff --git a/graphics/pokemon/dragonair/overworld.png b/graphics/pokemon/dragonair/overworld.png
new file mode 100644
index 000000000000..6186bbad5aff
Binary files /dev/null and b/graphics/pokemon/dragonair/overworld.png differ
diff --git a/graphics/pokemon/dragonair/overworld_normal.pal b/graphics/pokemon/dragonair/overworld_normal.pal
new file mode 100644
index 000000000000..50e4ce59c79b
--- /dev/null
+++ b/graphics/pokemon/dragonair/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 64 64
+0 0 0
+240 240 240
+48 64 104
+208 208 208
+112 176 240
+160 200 248
+104 104 104
+80 144 216
+88 176 216
+232 232 248
+40 120 168
+80 112 176
+144 40 32
+0 0 0
diff --git a/graphics/pokemon/dragonair/overworld_shiny.pal b/graphics/pokemon/dragonair/overworld_shiny.pal
new file mode 100644
index 000000000000..9ba2f48f7d0b
--- /dev/null
+++ b/graphics/pokemon/dragonair/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 64 64
+0 0 0
+240 240 240
+96 64 96
+208 208 208
+216 160 248
+240 200 248
+104 104 104
+176 128 208
+248 216 120
+232 232 248
+248 168 32
+152 104 152
+144 40 32
+0 0 0
diff --git a/graphics/pokemon/dragonite/overworld.png b/graphics/pokemon/dragonite/overworld.png
new file mode 100644
index 000000000000..fbb49598d3d3
Binary files /dev/null and b/graphics/pokemon/dragonite/overworld.png differ
diff --git a/graphics/pokemon/dragonite/overworld_normal.pal b/graphics/pokemon/dragonite/overworld_normal.pal
new file mode 100644
index 000000000000..d0b3851741db
--- /dev/null
+++ b/graphics/pokemon/dragonite/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 56 32
+0 0 0
+232 200 152
+216 136 64
+240 176 80
+152 96 48
+56 128 112
+40 96 80
+232 232 248
+96 96 96
+184 192 208
+208 168 120
+184 128 64
+152 152 152
+0 0 0
diff --git a/graphics/pokemon/dragonite/overworld_shiny.pal b/graphics/pokemon/dragonite/overworld_shiny.pal
new file mode 100644
index 000000000000..9957a95f9804
--- /dev/null
+++ b/graphics/pokemon/dragonite/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+24 56 32
+0 0 0
+232 200 152
+112 144 72
+160 192 96
+64 104 48
+176 88 128
+128 64 112
+232 232 248
+96 96 96
+184 192 208
+208 168 120
+184 128 64
+152 152 152
+0 0 0
diff --git a/graphics/pokemon/drakloak/overworld.png b/graphics/pokemon/drakloak/overworld.png
new file mode 100644
index 000000000000..4dbcfd72a40d
Binary files /dev/null and b/graphics/pokemon/drakloak/overworld.png differ
diff --git a/graphics/pokemon/drakloak/overworld_normal.pal b/graphics/pokemon/drakloak/overworld_normal.pal
new file mode 100644
index 000000000000..4237502ce8c6
--- /dev/null
+++ b/graphics/pokemon/drakloak/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+252 252 252
+104 36 44
+0 4 4
+252 112 132
+28 44 48
+104 36 44
+216 84 104
+136 164 156
+96 136 120
+72 100 108
+252 248 140
+216 212 104
+48 72 84
+232 228 52
+92 136 132
+128 176 176
diff --git a/graphics/pokemon/drakloak/overworld_shiny.pal b/graphics/pokemon/drakloak/overworld_shiny.pal
new file mode 100644
index 000000000000..3ee7b64a1758
--- /dev/null
+++ b/graphics/pokemon/drakloak/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+65 65 0
+0 8 8
+230 238 24
+0 57 82
+106 32 49
+197 65 90
+131 172 180
+90 148 148
+8 106 148
+156 205 213
+131 172 180
+0 82 115
+230 238 24
+90 148 148
+131 172 180
diff --git a/graphics/pokemon/drampa/overworld.png b/graphics/pokemon/drampa/overworld.png
new file mode 100644
index 000000000000..8b92f1196c2f
Binary files /dev/null and b/graphics/pokemon/drampa/overworld.png differ
diff --git a/graphics/pokemon/drampa/overworld_normal.pal b/graphics/pokemon/drampa/overworld_normal.pal
new file mode 100644
index 000000000000..5749f136083a
--- /dev/null
+++ b/graphics/pokemon/drampa/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+239 239 231
+205 200 190
+185 201 156
+247 170 206
+156 146 126
+102 188 176
+139 154 118
+86 150 145
+241 139 198
+181 105 16
+195 91 151
+74 71 62
+72 123 125
+52 83 89
+0 0 0
diff --git a/graphics/pokemon/drampa/overworld_shiny.pal b/graphics/pokemon/drampa/overworld_shiny.pal
new file mode 100644
index 000000000000..de7f5f00ef24
--- /dev/null
+++ b/graphics/pokemon/drampa/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+239 239 231
+205 200 190
+240 232 144
+247 170 206
+156 146 126
+224 176 112
+139 154 118
+200 120 64
+241 139 198
+40 48 72
+195 91 151
+74 71 62
+72 123 125
+64 80 112
+0 0 0
diff --git a/graphics/pokemon/drapion/overworld.png b/graphics/pokemon/drapion/overworld.png
new file mode 100644
index 000000000000..8490d39a7127
Binary files /dev/null and b/graphics/pokemon/drapion/overworld.png differ
diff --git a/graphics/pokemon/drapion/overworld_normal.pal b/graphics/pokemon/drapion/overworld_normal.pal
new file mode 100644
index 000000000000..63d1088a1089
--- /dev/null
+++ b/graphics/pokemon/drapion/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 40 56
+176 184 192
+144 96 160
+72 48 80
+32 120 112
+0 0 0
+168 136 200
+40 160 152
+104 64 112
+232 232 248
+120 128 136
+80 32 72
+128 88 168
+32 32 40
+0 0 0
diff --git a/graphics/pokemon/drapion/overworld_shiny.pal b/graphics/pokemon/drapion/overworld_shiny.pal
new file mode 100644
index 000000000000..e0f3bd1a7baf
--- /dev/null
+++ b/graphics/pokemon/drapion/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 8 16
+176 184 192
+200 96 136
+128 24 48
+32 120 112
+0 0 0
+208 104 160
+40 160 152
+168 40 80
+232 232 248
+120 128 136
+80 32 72
+184 64 128
+32 32 40
+0 0 0
diff --git a/graphics/pokemon/dratini/overworld.png b/graphics/pokemon/dratini/overworld.png
new file mode 100644
index 000000000000..1a744c59f10b
Binary files /dev/null and b/graphics/pokemon/dratini/overworld.png differ
diff --git a/graphics/pokemon/dratini/overworld_normal.pal b/graphics/pokemon/dratini/overworld_normal.pal
new file mode 100644
index 000000000000..dd8d13fb5641
--- /dev/null
+++ b/graphics/pokemon/dratini/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 64 64
+216 216 216
+0 0 0
+56 64 96
+192 192 216
+128 136 208
+152 160 224
+96 112 168
+232 232 248
+104 104 104
+144 40 32
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/dratini/overworld_shiny.pal b/graphics/pokemon/dratini/overworld_shiny.pal
new file mode 100644
index 000000000000..de7653816480
--- /dev/null
+++ b/graphics/pokemon/dratini/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 64 64
+216 216 216
+0 0 0
+96 64 96
+192 192 216
+184 136 224
+208 160 248
+160 112 208
+232 232 248
+104 104 104
+144 40 32
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/drednaw/overworld.png b/graphics/pokemon/drednaw/overworld.png
new file mode 100644
index 000000000000..7514ada70136
Binary files /dev/null and b/graphics/pokemon/drednaw/overworld.png differ
diff --git a/graphics/pokemon/drednaw/overworld_normal.pal b/graphics/pokemon/drednaw/overworld_normal.pal
new file mode 100644
index 000000000000..ff9e1ac8a9f3
--- /dev/null
+++ b/graphics/pokemon/drednaw/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+12 252 96
+0 0 0
+84 40 24
+108 48 32
+64 112 120
+148 108 28
+144 68 40
+200 152 96
+220 168 60
+224 184 100
+72 120 128
+92 156 168
+112 168 176
+228 196 128
+148 184 192
+252 252 252
diff --git a/graphics/pokemon/drednaw/overworld_shiny.pal b/graphics/pokemon/drednaw/overworld_shiny.pal
new file mode 100644
index 000000000000..032ee7c779c7
--- /dev/null
+++ b/graphics/pokemon/drednaw/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+41 24 24
+65 49 32
+0 24 8
+82 41 16
+90 65 49
+222 164 57
+180 90 49
+213 106 57
+16 74 41
+16 74 41
+16 74 41
+230 197 131
+32 115 65
+238 238 255
diff --git a/graphics/pokemon/dreepy/overworld.png b/graphics/pokemon/dreepy/overworld.png
new file mode 100644
index 000000000000..15666515741c
Binary files /dev/null and b/graphics/pokemon/dreepy/overworld.png differ
diff --git a/graphics/pokemon/dreepy/overworld_normal.pal b/graphics/pokemon/dreepy/overworld_normal.pal
new file mode 100644
index 000000000000..e36e561c8517
--- /dev/null
+++ b/graphics/pokemon/dreepy/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+252 252 252
+100 32 40
+28 44 36
+0 0 0
+252 112 132
+112 160 132
+176 60 76
+216 84 104
+136 164 156
+96 136 120
+144 188 160
+108 36 48
+68 104 88
+176 60 76
+252 248 140
+0 0 0
diff --git a/graphics/pokemon/dreepy/overworld_shiny.pal b/graphics/pokemon/dreepy/overworld_shiny.pal
new file mode 100644
index 000000000000..2afaf14cc75b
--- /dev/null
+++ b/graphics/pokemon/dreepy/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+65 65 0
+16 41 49
+0 0 0
+246 246 115
+115 164 131
+189 57 82
+222 98 115
+115 205 230
+74 164 189
+148 189 164
+106 32 49
+32 82 98
+230 238 16
+255 255 139
+0 0 0
diff --git a/graphics/pokemon/drifblim/overworld.png b/graphics/pokemon/drifblim/overworld.png
new file mode 100644
index 000000000000..ff4dcf65c525
Binary files /dev/null and b/graphics/pokemon/drifblim/overworld.png differ
diff --git a/graphics/pokemon/drifblim/overworld_normal.pal b/graphics/pokemon/drifblim/overworld_normal.pal
new file mode 100644
index 000000000000..ac241c17f125
--- /dev/null
+++ b/graphics/pokemon/drifblim/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 88 112
+64 64 64
+232 232 248
+168 160 200
+0 0 0
+88 64 120
+128 96 184
+152 120 224
+136 120 56
+208 176 88
+216 16 40
+104 16 24
+104 104 128
+128 128 152
+48 48 48
diff --git a/graphics/pokemon/drifblim/overworld_shiny.pal b/graphics/pokemon/drifblim/overworld_shiny.pal
new file mode 100644
index 000000000000..cd5344a2e8bc
--- /dev/null
+++ b/graphics/pokemon/drifblim/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+200 128 216
+192 160 56
+64 64 64
+232 232 248
+192 184 136
+0 0 0
+192 128 0
+240 208 88
+240 208 88
+32 112 136
+112 176 200
+24 216 16
+16 104 16
+184 144 8
+240 208 88
+48 48 48
diff --git a/graphics/pokemon/drifloon/overworld.png b/graphics/pokemon/drifloon/overworld.png
new file mode 100644
index 000000000000..321190861119
Binary files /dev/null and b/graphics/pokemon/drifloon/overworld.png differ
diff --git a/graphics/pokemon/drifloon/overworld_normal.pal b/graphics/pokemon/drifloon/overworld_normal.pal
new file mode 100644
index 000000000000..f89e056781a6
--- /dev/null
+++ b/graphics/pokemon/drifloon/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 88 112
+168 160 200
+232 232 248
+0 0 0
+88 64 120
+64 64 64
+128 96 184
+168 136 224
+224 176 88
+136 120 56
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/drifloon/overworld_shiny.pal b/graphics/pokemon/drifloon/overworld_shiny.pal
new file mode 100644
index 000000000000..0287fab8e594
--- /dev/null
+++ b/graphics/pokemon/drifloon/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 88 112
+168 160 200
+232 232 248
+0 0 0
+192 128 0
+64 64 64
+240 208 88
+248 224 184
+136 200 200
+16 128 128
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/drilbur/overworld.png b/graphics/pokemon/drilbur/overworld.png
new file mode 100644
index 000000000000..9d1c7ddcf8dc
Binary files /dev/null and b/graphics/pokemon/drilbur/overworld.png differ
diff --git a/graphics/pokemon/drilbur/overworld_normal.pal b/graphics/pokemon/drilbur/overworld_normal.pal
new file mode 100644
index 000000000000..34ab39137a68
--- /dev/null
+++ b/graphics/pokemon/drilbur/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 40 40
+40 40 40
+11 11 11
+55 55 55
+55 55 55
+87 87 87
+0 0 0
+208 208 208
+229 229 247
+155 155 155
+63 63 79
+236 147 129
+87 95 121
+199 112 95
+0 0 0
diff --git a/graphics/pokemon/drilbur/overworld_shiny.pal b/graphics/pokemon/drilbur/overworld_shiny.pal
new file mode 100644
index 000000000000..87c4e96618b1
--- /dev/null
+++ b/graphics/pokemon/drilbur/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 40 40
+48 48 48
+11 11 11
+55 55 55
+64 64 64
+87 87 87
+0 0 0
+208 208 208
+229 229 247
+155 155 155
+152 72 104
+136 184 216
+184 112 136
+40 96 136
+0 0 0
diff --git a/graphics/pokemon/drizzile/overworld.png b/graphics/pokemon/drizzile/overworld.png
new file mode 100644
index 000000000000..c4eb47d930e7
Binary files /dev/null and b/graphics/pokemon/drizzile/overworld.png differ
diff --git a/graphics/pokemon/drizzile/overworld_normal.pal b/graphics/pokemon/drizzile/overworld_normal.pal
new file mode 100644
index 000000000000..a18b3f533e24
--- /dev/null
+++ b/graphics/pokemon/drizzile/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+252 0 108
+64 88 36
+24 60 96
+72 48 84
+24 72 88
+116 160 64
+0 4 8
+164 216 104
+40 96 136
+128 84 152
+60 148 184
+64 156 192
+116 184 212
+172 128 196
+8 88 184
+232 232 232
diff --git a/graphics/pokemon/drizzile/overworld_shiny.pal b/graphics/pokemon/drizzile/overworld_shiny.pal
new file mode 100644
index 000000000000..c991a792d45f
--- /dev/null
+++ b/graphics/pokemon/drizzile/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+90 49 74
+8 164 180
+90 49 74
+41 57 82
+164 90 148
+0 0 0
+246 131 189
+8 213 238
+164 90 148
+57 148 189
+82 131 172
+106 156 205
+172 131 197
+41 115 139
+238 238 238
diff --git a/graphics/pokemon/drowzee/overworld.png b/graphics/pokemon/drowzee/overworld.png
new file mode 100644
index 000000000000..0d34c68c7f7a
Binary files /dev/null and b/graphics/pokemon/drowzee/overworld.png differ
diff --git a/graphics/pokemon/drowzee/overworld_normal.pal b/graphics/pokemon/drowzee/overworld_normal.pal
new file mode 100644
index 000000000000..53a5a66ac623
--- /dev/null
+++ b/graphics/pokemon/drowzee/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 64 48
+0 0 0
+120 104 32
+232 200 80
+184 152 40
+104 80 120
+232 232 248
+48 48 48
+88 80 72
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/drowzee/overworld_shiny.pal b/graphics/pokemon/drowzee/overworld_shiny.pal
new file mode 100644
index 000000000000..68dbf146621f
--- /dev/null
+++ b/graphics/pokemon/drowzee/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 48 56
+0 0 0
+128 80 112
+200 176 184
+168 128 152
+128 80 96
+232 232 248
+48 48 48
+104 56 72
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/druddigon/overworld.png b/graphics/pokemon/druddigon/overworld.png
new file mode 100644
index 000000000000..6bcdebf3081f
Binary files /dev/null and b/graphics/pokemon/druddigon/overworld.png differ
diff --git a/graphics/pokemon/druddigon/overworld_normal.pal b/graphics/pokemon/druddigon/overworld_normal.pal
new file mode 100644
index 000000000000..10535d161123
--- /dev/null
+++ b/graphics/pokemon/druddigon/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+82 16 49
+15 15 15
+16 49 98
+213 0 65
+148 0 65
+49 106 172
+16 74 139
+206 194 144
+206 194 144
+88 80 62
+139 123 90
+206 194 144
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/druddigon/overworld_shiny.pal b/graphics/pokemon/druddigon/overworld_shiny.pal
new file mode 100644
index 000000000000..4f6cf407e125
--- /dev/null
+++ b/graphics/pokemon/druddigon/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+82 16 49
+15 15 15
+32 80 32
+248 152 8
+144 64 0
+16 152 24
+24 112 16
+207 207 220
+112 232 0
+88 80 62
+141 95 84
+207 183 96
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/dubwool/overworld.png b/graphics/pokemon/dubwool/overworld.png
new file mode 100644
index 000000000000..d9d4a3bc2811
Binary files /dev/null and b/graphics/pokemon/dubwool/overworld.png differ
diff --git a/graphics/pokemon/dubwool/overworld_normal.pal b/graphics/pokemon/dubwool/overworld_normal.pal
new file mode 100644
index 000000000000..a056c5b56313
--- /dev/null
+++ b/graphics/pokemon/dubwool/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+252 0 192
+0 0 0
+40 32 28
+28 32 32
+64 48 44
+64 68 72
+100 68 72
+92 100 104
+108 108 108
+20 12 12
+248 252 116
+64 48 44
+200 200 200
+240 212 216
+252 252 252
+236 236 236
diff --git a/graphics/pokemon/dubwool/overworld_shiny.pal b/graphics/pokemon/dubwool/overworld_shiny.pal
new file mode 100644
index 000000000000..48e8b3e5c030
--- /dev/null
+++ b/graphics/pokemon/dubwool/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+197 197 197
+24 32 32
+255 255 255
+74 65 74
+98 65 74
+90 98 106
+0 0 0
+16 8 8
+255 255 115
+65 32 32
+24 24 24
+41 24 24
+49 41 41
+49 41 41
diff --git a/graphics/pokemon/ducklett/overworld.png b/graphics/pokemon/ducklett/overworld.png
new file mode 100644
index 000000000000..d05f7cb8d710
Binary files /dev/null and b/graphics/pokemon/ducklett/overworld.png differ
diff --git a/graphics/pokemon/ducklett/overworld_normal.pal b/graphics/pokemon/ducklett/overworld_normal.pal
new file mode 100644
index 000000000000..0d22d152b0af
--- /dev/null
+++ b/graphics/pokemon/ducklett/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+10 61 77
+44 196 215
+147 227 236
+164 155 87
+229 229 247
+177 177 177
+245 245 63
+95 95 55
+63 203 219
+40 63 104
+33 172 218
+18 129 164
+194 177 109
+0 0 0
diff --git a/graphics/pokemon/ducklett/overworld_shiny.pal b/graphics/pokemon/ducklett/overworld_shiny.pal
new file mode 100644
index 000000000000..7ed37a370b57
--- /dev/null
+++ b/graphics/pokemon/ducklett/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+96 72 128
+216 128 176
+248 176 184
+164 155 87
+229 229 247
+177 177 177
+245 245 63
+95 95 55
+248 176 184
+96 72 128
+176 112 208
+152 88 168
+194 177 109
+0 0 0
diff --git a/graphics/pokemon/dugtrio/alolan/overworld.png b/graphics/pokemon/dugtrio/alolan/overworld.png
new file mode 100644
index 000000000000..b6c5d11209ae
Binary files /dev/null and b/graphics/pokemon/dugtrio/alolan/overworld.png differ
diff --git a/graphics/pokemon/dugtrio/alolan/overworld_normal.pal b/graphics/pokemon/dugtrio/alolan/overworld_normal.pal
new file mode 100644
index 000000000000..12cf548756e1
--- /dev/null
+++ b/graphics/pokemon/dugtrio/alolan/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+255 214 243
+242 188 82
+163 126 20
+197 115 65
+148 86 48
+149 69 115
+107 84 14
+233 122 186
+197 35 136
+90 49 24
+60 59 59
+112 112 112
+47 47 47
+149 149 149
diff --git a/graphics/pokemon/dugtrio/alolan/overworld_shiny.pal b/graphics/pokemon/dugtrio/alolan/overworld_shiny.pal
new file mode 100644
index 000000000000..dfea0fb76dcb
--- /dev/null
+++ b/graphics/pokemon/dugtrio/alolan/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+255 214 243
+242 188 82
+163 126 20
+229 88 72
+175 66 54
+80 87 138
+107 84 14
+137 147 217
+57 77 174
+100 25 14
+60 59 59
+112 112 112
+47 47 47
+149 149 149
diff --git a/graphics/pokemon/dugtrio/overworld.png b/graphics/pokemon/dugtrio/overworld.png
new file mode 100644
index 000000000000..997c8b5f7e06
Binary files /dev/null and b/graphics/pokemon/dugtrio/overworld.png differ
diff --git a/graphics/pokemon/dugtrio/overworld_normal.pal b/graphics/pokemon/dugtrio/overworld_normal.pal
new file mode 100644
index 000000000000..487bcf3ac0cd
--- /dev/null
+++ b/graphics/pokemon/dugtrio/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+56 40 16
+152 120 56
+112 72 32
+200 200 200
+128 16 48
+136 104 56
+208 64 104
+232 120 152
+152 32 72
+64 64 64
+112 112 112
+168 168 168
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/dugtrio/overworld_shiny.pal b/graphics/pokemon/dugtrio/overworld_shiny.pal
new file mode 100644
index 000000000000..a11109d5e7a7
--- /dev/null
+++ b/graphics/pokemon/dugtrio/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+56 40 16
+152 120 56
+112 72 32
+200 200 200
+0 48 80
+136 104 56
+56 136 216
+136 192 248
+24 80 160
+64 64 64
+112 112 112
+168 168 168
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/dunsparce/overworld.png b/graphics/pokemon/dunsparce/overworld.png
new file mode 100644
index 000000000000..c95127f2adc1
Binary files /dev/null and b/graphics/pokemon/dunsparce/overworld.png differ
diff --git a/graphics/pokemon/dunsparce/overworld_normal.pal b/graphics/pokemon/dunsparce/overworld_normal.pal
new file mode 100644
index 000000000000..b9da33e354b1
--- /dev/null
+++ b/graphics/pokemon/dunsparce/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 56 56
+248 232 112
+192 168 0
+216 192 0
+152 136 104
+24 56 72
+64 80 96
+80 160 184
+248 224 160
+232 232 248
+120 192 216
+136 184 224
+184 208 240
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/dunsparce/overworld_shiny.pal b/graphics/pokemon/dunsparce/overworld_shiny.pal
new file mode 100644
index 000000000000..fb39cb1d277c
--- /dev/null
+++ b/graphics/pokemon/dunsparce/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 56 56
+248 232 112
+192 168 0
+216 192 0
+152 136 104
+64 32 72
+64 80 96
+184 80 200
+248 224 160
+232 232 248
+216 136 224
+168 144 168
+192 168 192
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/duosion/overworld.png b/graphics/pokemon/duosion/overworld.png
new file mode 100644
index 000000000000..6e0819c46ad8
Binary files /dev/null and b/graphics/pokemon/duosion/overworld.png differ
diff --git a/graphics/pokemon/duosion/overworld_normal.pal b/graphics/pokemon/duosion/overworld_normal.pal
new file mode 100644
index 000000000000..2a71820b18d9
--- /dev/null
+++ b/graphics/pokemon/duosion/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+54 117 54
+85 185 117
+85 117 117
+185 216 185
+151 185 117
+117 220 117
+234 234 245
+0 0 0
+234 93 137
+244 128 244
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/duosion/overworld_shiny.pal b/graphics/pokemon/duosion/overworld_shiny.pal
new file mode 100644
index 000000000000..ad761d41eb60
--- /dev/null
+++ b/graphics/pokemon/duosion/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+48 96 120
+88 176 168
+96 112 80
+216 224 168
+168 168 120
+136 216 248
+234 234 245
+0 0 0
+168 64 80
+128 24 72
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/duraludon/overworld.png b/graphics/pokemon/duraludon/overworld.png
new file mode 100644
index 000000000000..0c8228abcb18
Binary files /dev/null and b/graphics/pokemon/duraludon/overworld.png differ
diff --git a/graphics/pokemon/duraludon/overworld_normal.pal b/graphics/pokemon/duraludon/overworld_normal.pal
new file mode 100644
index 000000000000..7e26475605b5
--- /dev/null
+++ b/graphics/pokemon/duraludon/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+115 98 115
+16 16 16
+230 230 246
+82 98 139
+131 131 156
+189 180 189
+41 49 82
+205 172 16
+255 213 98
+172 148 172
+106 24 24
+90 82 8
+156 32 32
+205 74 74
+238 123 123
diff --git a/graphics/pokemon/duraludon/overworld_shiny.pal b/graphics/pokemon/duraludon/overworld_shiny.pal
new file mode 100644
index 000000000000..8b3e89163ae2
--- /dev/null
+++ b/graphics/pokemon/duraludon/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+106 131 115
+16 16 16
+238 238 222
+65 98 156
+123 123 164
+180 197 189
+32 49 90
+205 156 16
+255 197 98
+139 164 148
+90 90 90
+90 74 8
+131 131 131
+172 172 172
+213 213 213
diff --git a/graphics/pokemon/durant/overworld.png b/graphics/pokemon/durant/overworld.png
new file mode 100644
index 000000000000..2ac0b505a99b
Binary files /dev/null and b/graphics/pokemon/durant/overworld.png differ
diff --git a/graphics/pokemon/durant/overworld_normal.pal b/graphics/pokemon/durant/overworld_normal.pal
new file mode 100644
index 000000000000..a5a0c7fcc436
--- /dev/null
+++ b/graphics/pokemon/durant/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+66 66 66
+189 189 189
+132 132 115
+40 40 40
+223 237 142
+49 49 49
+99 99 90
+214 99 66
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/durant/overworld_shiny.pal b/graphics/pokemon/durant/overworld_shiny.pal
new file mode 100644
index 000000000000..fe02680bdc7c
--- /dev/null
+++ b/graphics/pokemon/durant/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+80 64 64
+216 184 168
+184 152 144
+66 66 66
+40 40 40
+49 49 49
+99 99 90
+214 99 66
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/dusclops/overworld.png b/graphics/pokemon/dusclops/overworld.png
new file mode 100644
index 000000000000..1efad8ec93fd
Binary files /dev/null and b/graphics/pokemon/dusclops/overworld.png differ
diff --git a/graphics/pokemon/dusclops/overworld_normal.pal b/graphics/pokemon/dusclops/overworld_normal.pal
new file mode 100644
index 000000000000..5639076ddeba
--- /dev/null
+++ b/graphics/pokemon/dusclops/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 64 48
+0 0 0
+224 216 216
+184 176 176
+64 64 64
+136 120 112
+160 160 160
+120 120 120
+184 184 184
+232 232 248
+208 96 96
+144 32 32
+168 176 200
+104 88 80
+0 0 0
diff --git a/graphics/pokemon/dusclops/overworld_shiny.pal b/graphics/pokemon/dusclops/overworld_shiny.pal
new file mode 100644
index 000000000000..814235da231a
--- /dev/null
+++ b/graphics/pokemon/dusclops/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 64 48
+0 0 0
+224 216 216
+184 176 176
+128 56 56
+136 120 112
+208 88 88
+176 72 72
+216 120 120
+232 232 248
+208 96 96
+144 32 32
+168 176 200
+104 88 80
+0 0 0
diff --git a/graphics/pokemon/dusknoir/overworld.png b/graphics/pokemon/dusknoir/overworld.png
new file mode 100644
index 000000000000..6026e02e5b93
Binary files /dev/null and b/graphics/pokemon/dusknoir/overworld.png differ
diff --git a/graphics/pokemon/dusknoir/overworld_normal.pal b/graphics/pokemon/dusknoir/overworld_normal.pal
new file mode 100644
index 000000000000..5d25fe25349f
--- /dev/null
+++ b/graphics/pokemon/dusknoir/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+152 96 8
+240 176 0
+80 80 80
+200 128 16
+48 48 48
+120 120 120
+0 0 0
+160 160 160
+208 96 96
+144 32 32
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/dusknoir/overworld_shiny.pal b/graphics/pokemon/dusknoir/overworld_shiny.pal
new file mode 100644
index 000000000000..bd669cada045
--- /dev/null
+++ b/graphics/pokemon/dusknoir/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+160 168 8
+232 224 48
+64 88 88
+184 192 24
+32 48 48
+104 144 144
+0 0 0
+144 184 176
+208 96 96
+144 32 32
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/duskull/overworld.png b/graphics/pokemon/duskull/overworld.png
new file mode 100644
index 000000000000..5b19b52f0fe7
Binary files /dev/null and b/graphics/pokemon/duskull/overworld.png differ
diff --git a/graphics/pokemon/duskull/overworld_normal.pal b/graphics/pokemon/duskull/overworld_normal.pal
new file mode 100644
index 000000000000..3a1ef1c57ecb
--- /dev/null
+++ b/graphics/pokemon/duskull/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+32 40 56
+56 64 80
+104 112 144
+80 88 112
+0 0 0
+224 216 216
+200 184 184
+136 120 112
+144 32 32
+216 112 112
+192 56 56
+72 64 48
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/duskull/overworld_shiny.pal b/graphics/pokemon/duskull/overworld_shiny.pal
new file mode 100644
index 000000000000..a6aec56f90f0
--- /dev/null
+++ b/graphics/pokemon/duskull/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 8 8
+96 24 24
+192 56 56
+144 40 40
+0 0 0
+224 216 216
+200 184 184
+136 120 112
+144 32 32
+216 112 112
+192 56 56
+72 64 48
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/dustox/overworld.png b/graphics/pokemon/dustox/overworld.png
new file mode 100644
index 000000000000..a9436bcfdece
Binary files /dev/null and b/graphics/pokemon/dustox/overworld.png differ
diff --git a/graphics/pokemon/dustox/overworld_normal.pal b/graphics/pokemon/dustox/overworld_normal.pal
new file mode 100644
index 000000000000..8fa7b93bc219
--- /dev/null
+++ b/graphics/pokemon/dustox/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+144 144 248
+0 0 0
+64 88 32
+104 152 40
+96 72 32
+240 216 104
+144 112 56
+72 56 112
+160 144 216
+168 216 88
+120 96 168
+240 104 104
+184 48 72
+56 56 56
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/dustox/overworld_shiny.pal b/graphics/pokemon/dustox/overworld_shiny.pal
new file mode 100644
index 000000000000..e34210ad4cc2
--- /dev/null
+++ b/graphics/pokemon/dustox/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+144 144 248
+0 0 0
+96 48 32
+184 128 56
+96 72 32
+240 216 104
+144 112 56
+72 56 112
+160 144 216
+240 176 104
+120 96 168
+240 104 104
+184 48 72
+56 56 56
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/dwebble/overworld.png b/graphics/pokemon/dwebble/overworld.png
new file mode 100644
index 000000000000..fe33f3a71b6c
Binary files /dev/null and b/graphics/pokemon/dwebble/overworld.png differ
diff --git a/graphics/pokemon/dwebble/overworld_normal.pal b/graphics/pokemon/dwebble/overworld_normal.pal
new file mode 100644
index 000000000000..c55257d70b1a
--- /dev/null
+++ b/graphics/pokemon/dwebble/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 80 72
+160 152 136
+0 0 0
+120 112 112
+192 184 128
+232 232 248
+96 64 40
+232 152 72
+192 96 32
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/dwebble/overworld_shiny.pal b/graphics/pokemon/dwebble/overworld_shiny.pal
new file mode 100644
index 000000000000..0782375b6e57
--- /dev/null
+++ b/graphics/pokemon/dwebble/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 80 72
+112 112 104
+0 0 0
+88 80 80
+120 152 32
+232 232 248
+80 24 16
+232 120 72
+208 64 24
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/eelektrik/overworld.png b/graphics/pokemon/eelektrik/overworld.png
new file mode 100644
index 000000000000..449b25ca595d
Binary files /dev/null and b/graphics/pokemon/eelektrik/overworld.png differ
diff --git a/graphics/pokemon/eelektrik/overworld_normal.pal b/graphics/pokemon/eelektrik/overworld_normal.pal
new file mode 100644
index 000000000000..83febacc1b48
--- /dev/null
+++ b/graphics/pokemon/eelektrik/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+128 128 64
+224 224 128
+192 160 128
+32 32 64
+32 96 128
+32 64 64
+224 192 0
+128 32 0
+0 0 0
+224 128 64
+236 255 255
+224 224 0
+192 64 64
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/eelektrik/overworld_shiny.pal b/graphics/pokemon/eelektrik/overworld_shiny.pal
new file mode 100644
index 000000000000..5b1f52ed60b1
--- /dev/null
+++ b/graphics/pokemon/eelektrik/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+128 128 64
+159 227 0
+170 191 77
+32 32 64
+31 90 163
+31 90 163
+159 227 0
+128 32 0
+0 0 0
+213 107 53
+236 255 255
+159 227 0
+128 128 64
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/eelektross/overworld.png b/graphics/pokemon/eelektross/overworld.png
new file mode 100644
index 000000000000..094e7d46b0a8
Binary files /dev/null and b/graphics/pokemon/eelektross/overworld.png differ
diff --git a/graphics/pokemon/eelektross/overworld_normal.pal b/graphics/pokemon/eelektross/overworld_normal.pal
new file mode 100644
index 000000000000..7b9abbb4abea
--- /dev/null
+++ b/graphics/pokemon/eelektross/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 120 0
+0 32 49
+32 98 115
+115 180 205
+131 115 65
+16 49 65
+197 172 123
+242 200 0
+12 14 19
+92 92 92
+188 81 48
+198 190 163
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/eelektross/overworld_shiny.pal b/graphics/pokemon/eelektross/overworld_shiny.pal
new file mode 100644
index 000000000000..3d0e7cc1f564
--- /dev/null
+++ b/graphics/pokemon/eelektross/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 120 0
+0 32 49
+48 160 112
+115 180 205
+112 144 168
+16 112 80
+176 208 224
+196 242 68
+12 14 19
+112 144 168
+183 79 109
+176 208 224
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/eevee/overworld.png b/graphics/pokemon/eevee/overworld.png
new file mode 100644
index 000000000000..9b29013b43b0
Binary files /dev/null and b/graphics/pokemon/eevee/overworld.png differ
diff --git a/graphics/pokemon/eevee/overworld_normal.pal b/graphics/pokemon/eevee/overworld_normal.pal
new file mode 100644
index 000000000000..aae9670b7832
--- /dev/null
+++ b/graphics/pokemon/eevee/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 48 24
+0 0 0
+192 144 80
+168 128 64
+128 96 48
+232 232 248
+120 96 64
+184 160 96
+224 208 168
+96 64 56
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/eevee/overworld_shiny.pal b/graphics/pokemon/eevee/overworld_shiny.pal
new file mode 100644
index 000000000000..266ba6885b73
--- /dev/null
+++ b/graphics/pokemon/eevee/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 56 40
+0 0 0
+208 192 184
+176 160 144
+144 128 112
+232 232 248
+128 128 120
+184 184 176
+216 216 216
+104 88 72
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/eiscue/overworld.png b/graphics/pokemon/eiscue/overworld.png
new file mode 100644
index 000000000000..5935fb72fdfa
Binary files /dev/null and b/graphics/pokemon/eiscue/overworld.png differ
diff --git a/graphics/pokemon/eiscue/overworld_normal.pal b/graphics/pokemon/eiscue/overworld_normal.pal
new file mode 100644
index 000000000000..0194ad503e6b
--- /dev/null
+++ b/graphics/pokemon/eiscue/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+15 255 99
+0 0 0
+56 62 70
+232 252 254
+200 220 222
+145 155 175
+218 232 233
+169 181 206
+14 14 14
+199 199 199
+38 38 38
+255 255 255
+143 206 218
+117 166 175
+222 164 61
+250 194 94
diff --git a/graphics/pokemon/eiscue/overworld_shiny.pal b/graphics/pokemon/eiscue/overworld_shiny.pal
new file mode 100644
index 000000000000..a32860185d71
--- /dev/null
+++ b/graphics/pokemon/eiscue/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+98 74 98
+255 246 255
+255 222 255
+197 156 197
+230 189 230
+213 180 213
+172 106 139
+197 197 197
+189 123 156
+255 246 255
+255 205 255
+238 172 238
+222 164 57
+255 197 90
diff --git a/graphics/pokemon/ekans/overworld.png b/graphics/pokemon/ekans/overworld.png
new file mode 100644
index 000000000000..d592065d67c9
Binary files /dev/null and b/graphics/pokemon/ekans/overworld.png differ
diff --git a/graphics/pokemon/ekans/overworld_normal.pal b/graphics/pokemon/ekans/overworld_normal.pal
new file mode 100644
index 000000000000..460fe3d3dc38
--- /dev/null
+++ b/graphics/pokemon/ekans/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 48 104
+200 128 192
+144 96 144
+0 0 0
+112 96 40
+248 216 64
+208 160 48
+120 80 120
+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/ekans/overworld_shiny.pal b/graphics/pokemon/ekans/overworld_shiny.pal
new file mode 100644
index 000000000000..a7c3c199eb70
--- /dev/null
+++ b/graphics/pokemon/ekans/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 96 48
+192 200 120
+136 152 64
+0 0 0
+104 112 48
+248 216 64
+208 160 48
+128 128 48
+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/eldegoss/overworld.png b/graphics/pokemon/eldegoss/overworld.png
new file mode 100644
index 000000000000..113a8c690bbc
Binary files /dev/null and b/graphics/pokemon/eldegoss/overworld.png differ
diff --git a/graphics/pokemon/eldegoss/overworld_normal.pal b/graphics/pokemon/eldegoss/overworld_normal.pal
new file mode 100644
index 000000000000..389c86496b66
--- /dev/null
+++ b/graphics/pokemon/eldegoss/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+252 252 252
+112 112 96
+248 248 212
+136 144 64
+136 88 56
+0 0 0
+204 196 176
+128 136 56
+176 176 56
+180 168 140
+184 176 64
+184 176 64
+152 96 48
+240 208 32
+232 228 104
+224 160 40
diff --git a/graphics/pokemon/eldegoss/overworld_shiny.pal b/graphics/pokemon/eldegoss/overworld_shiny.pal
new file mode 100644
index 000000000000..0fb159592b36
--- /dev/null
+++ b/graphics/pokemon/eldegoss/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+115 115 98
+255 255 213
+106 65 74
+246 246 189
+0 0 0
+205 197 180
+139 90 82
+255 180 148
+106 82 41
+115 115 98
+139 90 82
+0 0 0
+106 65 74
+139 90 82
+180 123 131
diff --git a/graphics/pokemon/electabuzz/overworld.png b/graphics/pokemon/electabuzz/overworld.png
new file mode 100644
index 000000000000..8eabb6c8ff40
Binary files /dev/null and b/graphics/pokemon/electabuzz/overworld.png differ
diff --git a/graphics/pokemon/electabuzz/overworld_normal.pal b/graphics/pokemon/electabuzz/overworld_normal.pal
new file mode 100644
index 000000000000..9d1762d9a4e4
--- /dev/null
+++ b/graphics/pokemon/electabuzz/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 56 32
+240 208 0
+0 0 0
+184 136 16
+72 80 80
+232 232 248
+48 48 48
+144 144 144
+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/electabuzz/overworld_shiny.pal b/graphics/pokemon/electabuzz/overworld_shiny.pal
new file mode 100644
index 000000000000..b7418ac89b4c
--- /dev/null
+++ b/graphics/pokemon/electabuzz/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 56 32
+240 176 0
+0 0 0
+200 120 16
+72 80 80
+232 232 248
+48 48 48
+144 144 144
+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/electivire/overworld.png b/graphics/pokemon/electivire/overworld.png
new file mode 100644
index 000000000000..eee454c9d81d
Binary files /dev/null and b/graphics/pokemon/electivire/overworld.png differ
diff --git a/graphics/pokemon/electivire/overworld_normal.pal b/graphics/pokemon/electivire/overworld_normal.pal
new file mode 100644
index 000000000000..c38111523f4c
--- /dev/null
+++ b/graphics/pokemon/electivire/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 56 32
+240 208 0
+248 232 120
+184 136 16
+48 48 48
+240 96 112
+176 8 32
+0 0 0
+88 88 88
+72 24 32
+112 88 24
+192 192 208
+232 232 248
+144 144 144
+0 0 0
diff --git a/graphics/pokemon/electivire/overworld_shiny.pal b/graphics/pokemon/electivire/overworld_shiny.pal
new file mode 100644
index 000000000000..dae78611d3de
--- /dev/null
+++ b/graphics/pokemon/electivire/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 24 16
+248 184 0
+248 208 120
+184 104 16
+48 48 48
+48 176 232
+48 88 152
+0 0 0
+88 88 88
+72 24 32
+112 88 24
+192 192 208
+232 232 248
+144 144 144
+0 0 0
diff --git a/graphics/pokemon/electrike/overworld.png b/graphics/pokemon/electrike/overworld.png
new file mode 100644
index 000000000000..265a1a63b6e5
Binary files /dev/null and b/graphics/pokemon/electrike/overworld.png differ
diff --git a/graphics/pokemon/electrike/overworld_normal.pal b/graphics/pokemon/electrike/overworld_normal.pal
new file mode 100644
index 000000000000..c5769b84996a
--- /dev/null
+++ b/graphics/pokemon/electrike/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+112 80 24
+192 144 40
+32 56 8
+88 136 64
+0 0 0
+176 224 112
+152 200 96
+128 168 96
+248 208 64
+232 232 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/electrike/overworld_shiny.pal b/graphics/pokemon/electrike/overworld_shiny.pal
new file mode 100644
index 000000000000..90eb2cd788fc
--- /dev/null
+++ b/graphics/pokemon/electrike/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+112 80 24
+192 144 40
+32 56 88
+56 96 128
+0 0 0
+136 216 248
+112 176 208
+80 136 168
+248 208 64
+232 232 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/electrode/hisuian/overworld.png b/graphics/pokemon/electrode/hisuian/overworld.png
new file mode 100644
index 000000000000..f3297669aada
Binary files /dev/null and b/graphics/pokemon/electrode/hisuian/overworld.png differ
diff --git a/graphics/pokemon/electrode/hisuian/overworld_normal.pal b/graphics/pokemon/electrode/hisuian/overworld_normal.pal
new file mode 100644
index 000000000000..b39616c0cfc7
--- /dev/null
+++ b/graphics/pokemon/electrode/hisuian/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+106 74 32
+0 0 0
+238 180 82
+205 32 32
+246 222 139
+189 139 41
+156 106 32
+255 246 197
+238 238 238
+189 172 172
+82 74 65
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/electrode/hisuian/overworld_shiny.pal b/graphics/pokemon/electrode/hisuian/overworld_shiny.pal
new file mode 100644
index 000000000000..c2cedbc2326e
--- /dev/null
+++ b/graphics/pokemon/electrode/hisuian/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+106 74 32
+0 0 0
+238 180 82
+32 32 32
+246 222 139
+189 139 41
+156 106 32
+255 246 197
+238 238 238
+189 172 172
+82 74 65
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/electrode/overworld.png b/graphics/pokemon/electrode/overworld.png
new file mode 100644
index 000000000000..50f529895065
Binary files /dev/null and b/graphics/pokemon/electrode/overworld.png differ
diff --git a/graphics/pokemon/electrode/overworld_normal.pal b/graphics/pokemon/electrode/overworld_normal.pal
new file mode 100644
index 000000000000..760c7082a1e9
--- /dev/null
+++ b/graphics/pokemon/electrode/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 48 48
+216 216 216
+232 232 248
+184 184 192
+104 104 104
+0 0 0
+200 32 32
+160 160 160
+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/electrode/overworld_shiny.pal b/graphics/pokemon/electrode/overworld_shiny.pal
new file mode 100644
index 000000000000..12c20793b215
--- /dev/null
+++ b/graphics/pokemon/electrode/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 48 48
+216 216 216
+232 232 248
+184 184 192
+104 104 104
+0 0 0
+32 104 200
+160 160 160
+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/elekid/overworld.png b/graphics/pokemon/elekid/overworld.png
new file mode 100644
index 000000000000..ea838908cd85
Binary files /dev/null and b/graphics/pokemon/elekid/overworld.png differ
diff --git a/graphics/pokemon/elekid/overworld_normal.pal b/graphics/pokemon/elekid/overworld_normal.pal
new file mode 100644
index 000000000000..16204e870a56
--- /dev/null
+++ b/graphics/pokemon/elekid/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 80 0
+0 0 0
+248 168 0
+248 216 96
+232 232 248
+56 64 72
+192 112 0
+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/elekid/overworld_shiny.pal b/graphics/pokemon/elekid/overworld_shiny.pal
new file mode 100644
index 000000000000..85143102e02a
--- /dev/null
+++ b/graphics/pokemon/elekid/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 96 0
+0 0 0
+216 184 0
+216 224 96
+232 232 248
+56 64 72
+192 112 0
+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/elgyem/overworld.png b/graphics/pokemon/elgyem/overworld.png
new file mode 100644
index 000000000000..a6613905b72b
Binary files /dev/null and b/graphics/pokemon/elgyem/overworld.png differ
diff --git a/graphics/pokemon/elgyem/overworld_normal.pal b/graphics/pokemon/elgyem/overworld_normal.pal
new file mode 100644
index 000000000000..9ac3a4d35a5d
--- /dev/null
+++ b/graphics/pokemon/elgyem/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 160 176
+7 59 25
+141 187 169
+74 124 106
+44 44 44
+82 82 90
+0 0 0
+74 124 106
+7 59 25
+141 187 169
+19 132 7
+187 0 0
+216 187 0
+82 74 7
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/elgyem/overworld_shiny.pal b/graphics/pokemon/elgyem/overworld_shiny.pal
new file mode 100644
index 000000000000..8932c555d55a
--- /dev/null
+++ b/graphics/pokemon/elgyem/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 160 176
+48 88 112
+152 184 184
+96 136 144
+44 44 44
+82 82 90
+0 0 0
+74 124 106
+80 56 104
+141 187 169
+32 152 216
+168 64 136
+224 200 0
+82 74 7
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/emboar/overworld.png b/graphics/pokemon/emboar/overworld.png
new file mode 100644
index 000000000000..06e17288d7ea
Binary files /dev/null and b/graphics/pokemon/emboar/overworld.png differ
diff --git a/graphics/pokemon/emboar/overworld_normal.pal b/graphics/pokemon/emboar/overworld_normal.pal
new file mode 100644
index 000000000000..e9f672d506f8
--- /dev/null
+++ b/graphics/pokemon/emboar/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+32 32 32
+5 5 5
+48 48 48
+111 40 1
+216 85 36
+188 82 31
+119 19 12
+215 195 196
+230 49 41
+237 172 8
+180 139 32
+123 90 8
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/emboar/overworld_shiny.pal b/graphics/pokemon/emboar/overworld_shiny.pal
new file mode 100644
index 000000000000..1c5459473dc7
--- /dev/null
+++ b/graphics/pokemon/emboar/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+41 41 41
+5 5 5
+41 41 41
+117 70 5
+229 130 31
+41 41 41
+41 41 41
+229 130 31
+128 152 224
+151 195 221
+128 152 224
+117 70 5
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/emolga/overworld.png b/graphics/pokemon/emolga/overworld.png
new file mode 100644
index 000000000000..77e657c28e70
Binary files /dev/null and b/graphics/pokemon/emolga/overworld.png differ
diff --git a/graphics/pokemon/emolga/overworld_normal.pal b/graphics/pokemon/emolga/overworld_normal.pal
new file mode 100644
index 000000000000..e92fff7b853b
--- /dev/null
+++ b/graphics/pokemon/emolga/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+3 3 3
+54 54 54
+204 158 61
+25 25 54
+192 188 173
+40 40 40
+240 240 247
+235 214 0
+88 81 45
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/emolga/overworld_shiny.pal b/graphics/pokemon/emolga/overworld_shiny.pal
new file mode 100644
index 000000000000..9e77aa55969c
--- /dev/null
+++ b/graphics/pokemon/emolga/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+3 3 3
+160 112 80
+210 163 39
+84 77 46
+219 204 152
+112 80 64
+247 247 247
+219 204 152
+84 77 46
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/empoleon/overworld.png b/graphics/pokemon/empoleon/overworld.png
new file mode 100644
index 000000000000..3d81600cb782
Binary files /dev/null and b/graphics/pokemon/empoleon/overworld.png differ
diff --git a/graphics/pokemon/empoleon/overworld_normal.pal b/graphics/pokemon/empoleon/overworld_normal.pal
new file mode 100644
index 000000000000..6257260ecb1a
--- /dev/null
+++ b/graphics/pokemon/empoleon/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 80 32
+0 0 0
+208 136 24
+248 200 88
+40 40 40
+64 72 144
+80 128 160
+232 232 248
+120 192 240
+56 56 96
+184 192 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/empoleon/overworld_shiny.pal b/graphics/pokemon/empoleon/overworld_shiny.pal
new file mode 100644
index 000000000000..441b13708818
--- /dev/null
+++ b/graphics/pokemon/empoleon/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 80 32
+0 0 0
+208 136 24
+248 200 88
+40 40 40
+56 112 136
+96 160 176
+232 232 248
+136 216 240
+48 96 112
+184 192 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/enamorus/overworld.png b/graphics/pokemon/enamorus/overworld.png
new file mode 100644
index 000000000000..077dae310a00
Binary files /dev/null and b/graphics/pokemon/enamorus/overworld.png differ
diff --git a/graphics/pokemon/enamorus/overworld_normal.pal b/graphics/pokemon/enamorus/overworld_normal.pal
new file mode 100644
index 000000000000..88fa42851ff7
--- /dev/null
+++ b/graphics/pokemon/enamorus/overworld_normal.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/overworld_shiny.pal b/graphics/pokemon/enamorus/overworld_shiny.pal
new file mode 100644
index 000000000000..88fa42851ff7
--- /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.png b/graphics/pokemon/enamorus/therian/overworld.png
new file mode 100644
index 000000000000..f588895eb276
Binary files /dev/null and b/graphics/pokemon/enamorus/therian/overworld.png differ
diff --git a/graphics/pokemon/enamorus/therian/overworld_normal.pal b/graphics/pokemon/enamorus/therian/overworld_normal.pal
new file mode 100644
index 000000000000..c799ddfb8975
--- /dev/null
+++ b/graphics/pokemon/enamorus/therian/overworld_normal.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/enamorus/therian/overworld_shiny.pal b/graphics/pokemon/enamorus/therian/overworld_shiny.pal
new file mode 100644
index 000000000000..c799ddfb8975
--- /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/entei/overworld.png b/graphics/pokemon/entei/overworld.png
new file mode 100644
index 000000000000..2b9bc83f4fa7
Binary files /dev/null and b/graphics/pokemon/entei/overworld.png differ
diff --git a/graphics/pokemon/entei/overworld_normal.pal b/graphics/pokemon/entei/overworld_normal.pal
new file mode 100644
index 000000000000..a6231855f054
--- /dev/null
+++ b/graphics/pokemon/entei/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 96 120
+48 56 80
+232 232 248
+168 192 208
+72 48 40
+128 88 56
+0 0 0
+168 120 80
+112 136 144
+248 216 56
+192 136 24
+88 80 24
+216 72 32
+96 64 48
+168 24 0
diff --git a/graphics/pokemon/entei/overworld_shiny.pal b/graphics/pokemon/entei/overworld_shiny.pal
new file mode 100644
index 000000000000..800f56ef16d4
--- /dev/null
+++ b/graphics/pokemon/entei/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 96 120
+48 56 80
+232 232 248
+168 192 208
+72 32 48
+160 104 104
+0 0 0
+192 128 120
+112 136 144
+248 216 56
+192 136 24
+88 80 24
+176 176 192
+112 56 64
+128 128 144
diff --git a/graphics/pokemon/escavalier/overworld.png b/graphics/pokemon/escavalier/overworld.png
new file mode 100644
index 000000000000..340131a534ce
Binary files /dev/null and b/graphics/pokemon/escavalier/overworld.png differ
diff --git a/graphics/pokemon/escavalier/overworld_normal.pal b/graphics/pokemon/escavalier/overworld_normal.pal
new file mode 100644
index 000000000000..5920e3a5fec9
--- /dev/null
+++ b/graphics/pokemon/escavalier/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+121 5 5
+16 16 16
+182 25 71
+236 33 71
+56 64 72
+138 138 147
+191 191 191
+192 80 0
+255 218 18
+182 147 18
+104 87 25
+25 47 79
+152 208 160
+40 95 255
+8 168 144
diff --git a/graphics/pokemon/escavalier/overworld_shiny.pal b/graphics/pokemon/escavalier/overworld_shiny.pal
new file mode 100644
index 000000000000..d647cda1779b
--- /dev/null
+++ b/graphics/pokemon/escavalier/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+128 40 96
+16 16 16
+184 24 128
+248 56 184
+56 64 72
+152 152 96
+200 200 176
+192 80 0
+176 248 16
+128 168 24
+80 112 32
+8 64 48
+223 237 142
+8 120 104
+8 168 144
diff --git a/graphics/pokemon/espeon/overworld.png b/graphics/pokemon/espeon/overworld.png
new file mode 100644
index 000000000000..158ba055c9b3
Binary files /dev/null and b/graphics/pokemon/espeon/overworld.png differ
diff --git a/graphics/pokemon/espeon/overworld_normal.pal b/graphics/pokemon/espeon/overworld_normal.pal
new file mode 100644
index 000000000000..80d1e3988e6e
--- /dev/null
+++ b/graphics/pokemon/espeon/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 40 120
+240 200 232
+224 176 216
+168 104 160
+0 0 0
+200 144 208
+56 112 176
+200 56 48
+232 136 176
+232 232 248
+48 32 120
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/espeon/overworld_shiny.pal b/graphics/pokemon/espeon/overworld_shiny.pal
new file mode 100644
index 000000000000..308eb31594e6
--- /dev/null
+++ b/graphics/pokemon/espeon/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 88 16
+184 216 136
+144 192 96
+80 136 72
+0 0 0
+96 152 64
+56 128 176
+200 64 24
+232 128 48
+232 232 248
+48 32 120
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/espurr/overworld.png b/graphics/pokemon/espurr/overworld.png
new file mode 100644
index 000000000000..f7ba8e08a0a7
Binary files /dev/null and b/graphics/pokemon/espurr/overworld.png differ
diff --git a/graphics/pokemon/espurr/overworld_normal.pal b/graphics/pokemon/espurr/overworld_normal.pal
new file mode 100644
index 000000000000..02bd48ed1e9c
--- /dev/null
+++ b/graphics/pokemon/espurr/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+54 54 71
+16 16 16
+135 139 167
+97 98 143
+244 245 246
+174 156 192
+223 177 222
+74 41 141
+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/espurr/overworld_shiny.pal b/graphics/pokemon/espurr/overworld_shiny.pal
new file mode 100644
index 000000000000..caceee3ef280
--- /dev/null
+++ b/graphics/pokemon/espurr/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+108 78 88
+16 16 16
+241 211 223
+202 153 171
+244 245 246
+174 156 192
+223 177 222
+74 41 141
+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/eternatus/overworld.png b/graphics/pokemon/eternatus/overworld.png
new file mode 100644
index 000000000000..28a3ef1c36a7
Binary files /dev/null and b/graphics/pokemon/eternatus/overworld.png differ
diff --git a/graphics/pokemon/eternatus/overworld_normal.pal b/graphics/pokemon/eternatus/overworld_normal.pal
new file mode 100644
index 000000000000..f140e24cacf2
--- /dev/null
+++ b/graphics/pokemon/eternatus/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 252 32
+0 0 0
+4 40 124
+164 28 64
+252 68 120
+32 76 176
+60 0 16
+204 32 80
+228 168 168
+164 28 64
+96 0 28
+252 68 120
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/eternatus/overworld_shiny.pal b/graphics/pokemon/eternatus/overworld_shiny.pal
new file mode 100644
index 000000000000..8715d80d8734
--- /dev/null
+++ b/graphics/pokemon/eternatus/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+104 32 104
+176 24 48
+240 104 112
+168 24 168
+152 32 48
+248 32 80
+248 184 184
+248 32 80
+152 32 48
+232 16 48
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/excadrill/overworld.png b/graphics/pokemon/excadrill/overworld.png
new file mode 100644
index 000000000000..00bd8575d0d5
Binary files /dev/null and b/graphics/pokemon/excadrill/overworld.png differ
diff --git a/graphics/pokemon/excadrill/overworld_normal.pal b/graphics/pokemon/excadrill/overworld_normal.pal
new file mode 100644
index 000000000000..7f4595da39c7
--- /dev/null
+++ b/graphics/pokemon/excadrill/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+11 11 11
+208 208 208
+55 40 33
+79 63 55
+155 155 155
+87 87 87
+121 55 55
+182 55 55
+0 0 0
+229 229 247
+199 112 95
+236 147 129
+164 71 71
+236 121 112
+33 25 18
diff --git a/graphics/pokemon/excadrill/overworld_shiny.pal b/graphics/pokemon/excadrill/overworld_shiny.pal
new file mode 100644
index 000000000000..4879340ef865
--- /dev/null
+++ b/graphics/pokemon/excadrill/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+5 5 5
+201 206 220
+120 48 64
+176 64 96
+152 152 192
+75 81 113
+78 140 154
+78 140 154
+5 5 5
+201 206 220
+208 114 99
+208 114 99
+164 71 71
+208 114 99
+33 25 18
diff --git a/graphics/pokemon/exeggcute/overworld.png b/graphics/pokemon/exeggcute/overworld.png
new file mode 100644
index 000000000000..002ffd58229b
Binary files /dev/null and b/graphics/pokemon/exeggcute/overworld.png differ
diff --git a/graphics/pokemon/exeggcute/overworld_normal.pal b/graphics/pokemon/exeggcute/overworld_normal.pal
new file mode 100644
index 000000000000..a86c530ffbf4
--- /dev/null
+++ b/graphics/pokemon/exeggcute/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 72 64
+0 0 0
+240 208 216
+232 176 184
+232 232 248
+160 96 104
+208 120 104
+232 176 56
+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/exeggcute/overworld_shiny.pal b/graphics/pokemon/exeggcute/overworld_shiny.pal
new file mode 100644
index 000000000000..347796436cf9
--- /dev/null
+++ b/graphics/pokemon/exeggcute/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 72 64
+0 0 0
+248 216 88
+248 184 48
+232 232 248
+160 112 64
+216 136 16
+232 176 56
+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/exeggutor/alolan/overworld.png b/graphics/pokemon/exeggutor/alolan/overworld.png
new file mode 100644
index 000000000000..6597515899cf
Binary files /dev/null and b/graphics/pokemon/exeggutor/alolan/overworld.png differ
diff --git a/graphics/pokemon/exeggutor/alolan/overworld_normal.pal b/graphics/pokemon/exeggutor/alolan/overworld_normal.pal
new file mode 100644
index 000000000000..036f31f5604c
--- /dev/null
+++ b/graphics/pokemon/exeggutor/alolan/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+54 78 40
+128 216 88
+0 0 0
+80 168 40
+64 40 40
+208 160 88
+248 200 88
+144 96 56
+232 232 248
+200 136 88
+200 88 120
+88 72 64
+157 229 108
+108 178 64
+244 178 129
diff --git a/graphics/pokemon/exeggutor/alolan/overworld_shiny.pal b/graphics/pokemon/exeggutor/alolan/overworld_shiny.pal
new file mode 100644
index 000000000000..8740260214bb
--- /dev/null
+++ b/graphics/pokemon/exeggutor/alolan/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+152 56 24
+248 160 88
+0 0 0
+200 104 64
+64 40 40
+208 160 88
+248 200 88
+192 152 32
+232 232 248
+232 200 88
+200 88 120
+88 72 64
+217 229 108
+169 178 64
+247 222 135
diff --git a/graphics/pokemon/exeggutor/overworld.png b/graphics/pokemon/exeggutor/overworld.png
new file mode 100644
index 000000000000..7ab99d1faba9
Binary files /dev/null and b/graphics/pokemon/exeggutor/overworld.png differ
diff --git a/graphics/pokemon/exeggutor/overworld_normal.pal b/graphics/pokemon/exeggutor/overworld_normal.pal
new file mode 100644
index 000000000000..89e31c5e63bd
--- /dev/null
+++ b/graphics/pokemon/exeggutor/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+56 80 40
+128 216 88
+0 0 0
+80 168 40
+64 40 40
+208 160 88
+248 200 88
+232 232 248
+144 96 56
+200 88 120
+200 136 88
+88 72 64
+160 160 160
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/exeggutor/overworld_shiny.pal b/graphics/pokemon/exeggutor/overworld_shiny.pal
new file mode 100644
index 000000000000..86399820cc8d
--- /dev/null
+++ b/graphics/pokemon/exeggutor/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+152 56 24
+248 160 88
+0 0 0
+200 104 64
+64 40 40
+208 160 88
+248 200 88
+232 232 248
+192 152 32
+200 88 120
+232 200 88
+104 88 64
+160 160 160
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/exploud/overworld.png b/graphics/pokemon/exploud/overworld.png
new file mode 100644
index 000000000000..6aa5e5247d7d
Binary files /dev/null and b/graphics/pokemon/exploud/overworld.png differ
diff --git a/graphics/pokemon/exploud/overworld_normal.pal b/graphics/pokemon/exploud/overworld_normal.pal
new file mode 100644
index 000000000000..144de7f83fa1
--- /dev/null
+++ b/graphics/pokemon/exploud/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 72 32
+0 0 0
+184 144 48
+232 208 104
+40 48 64
+176 168 224
+104 96 152
+136 128 184
+80 72 104
+184 64 104
+112 32 48
+136 40 64
+104 112 136
+232 232 248
+168 176 192
diff --git a/graphics/pokemon/exploud/overworld_shiny.pal b/graphics/pokemon/exploud/overworld_shiny.pal
new file mode 100644
index 000000000000..73ab3ead16ed
--- /dev/null
+++ b/graphics/pokemon/exploud/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+128 80 32
+0 0 0
+208 152 80
+248 192 104
+40 48 64
+208 168 224
+136 96 152
+168 128 184
+88 64 96
+184 64 104
+112 32 48
+136 40 64
+104 112 136
+232 232 248
+168 176 192
diff --git a/graphics/pokemon/falinks/overworld.png b/graphics/pokemon/falinks/overworld.png
new file mode 100644
index 000000000000..810cf1e45b85
Binary files /dev/null and b/graphics/pokemon/falinks/overworld.png differ
diff --git a/graphics/pokemon/falinks/overworld_normal.pal b/graphics/pokemon/falinks/overworld_normal.pal
new file mode 100644
index 000000000000..2353d20f237a
--- /dev/null
+++ b/graphics/pokemon/falinks/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+15 255 99
+81 11 10
+187 23 21
+72 61 17
+216 59 57
+199 167 44
+251 214 74
+24 24 24
+255 255 255
+0 0 0
+8 8 8
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/falinks/overworld_shiny.pal b/graphics/pokemon/falinks/overworld_shiny.pal
new file mode 100644
index 000000000000..0b8ba7e4d888
--- /dev/null
+++ b/graphics/pokemon/falinks/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+15 255 99
+65 57 16
+164 139 41
+41 24 24
+222 189 74
+106 74 65
+156 115 90
+24 24 24
+255 255 255
+0 0 0
+8 8 8
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/farfetchd/galarian/overworld.png b/graphics/pokemon/farfetchd/galarian/overworld.png
new file mode 100644
index 000000000000..bde1b5b7ecf9
Binary files /dev/null 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
new file mode 100644
index 000000000000..3df22685d9f2
--- /dev/null
+++ b/graphics/pokemon/farfetchd/galarian/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+57 153 197
+0 0 0
+156 161 115
+180 174 156
+180 145 41
+115 93 90
+238 234 255
+49 89 41
+255 202 49
+213 210 197
+65 117 57
+57 48 49
+82 68 65
+213 210 197
+24 20 16
+41 44 41
diff --git a/graphics/pokemon/farfetchd/galarian/overworld_shiny.pal b/graphics/pokemon/farfetchd/galarian/overworld_shiny.pal
new file mode 100644
index 000000000000..2d02e605e7b0
--- /dev/null
+++ b/graphics/pokemon/farfetchd/galarian/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+57 153 197
+0 0 0
+156 161 115
+200 176 112
+180 145 41
+128 96 96
+238 234 255
+49 89 41
+255 202 49
+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
new file mode 100644
index 000000000000..530741a8732a
Binary files /dev/null and b/graphics/pokemon/farfetchd/overworld.png differ
diff --git a/graphics/pokemon/farfetchd/overworld_normal.pal b/graphics/pokemon/farfetchd/overworld_normal.pal
new file mode 100644
index 000000000000..0acf61c8df06
--- /dev/null
+++ b/graphics/pokemon/farfetchd/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 56 40
+216 168 120
+0 0 0
+176 128 72
+136 112 64
+80 80 80
+168 168 168
+80 144 32
+232 232 248
+176 144 40
+152 160 112
+248 200 48
+208 208 192
+200 184 120
+240 224 160
diff --git a/graphics/pokemon/farfetchd/overworld_shiny.pal b/graphics/pokemon/farfetchd/overworld_shiny.pal
new file mode 100644
index 000000000000..269b9ef2718e
--- /dev/null
+++ b/graphics/pokemon/farfetchd/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 40 72
+224 152 160
+0 0 0
+184 112 128
+136 72 104
+80 80 80
+168 168 168
+136 144 32
+232 232 248
+176 144 40
+176 176 112
+248 200 48
+208 208 192
+200 184 120
+240 224 160
diff --git a/graphics/pokemon/fearow/overworld.png b/graphics/pokemon/fearow/overworld.png
new file mode 100644
index 000000000000..ef6825b1c564
Binary files /dev/null and b/graphics/pokemon/fearow/overworld.png differ
diff --git a/graphics/pokemon/fearow/overworld_normal.pal b/graphics/pokemon/fearow/overworld_normal.pal
new file mode 100644
index 000000000000..9bb484e708bb
--- /dev/null
+++ b/graphics/pokemon/fearow/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 16 8
+88 56 16
+224 128 96
+224 200 168
+192 64 0
+184 168 112
+232 144 32
+176 112 16
+64 64 64
+0 0 0
+176 80 120
+232 232 248
+240 128 152
+184 184 184
+0 0 0
diff --git a/graphics/pokemon/fearow/overworld_shiny.pal b/graphics/pokemon/fearow/overworld_shiny.pal
new file mode 100644
index 000000000000..fbd9f3c70715
--- /dev/null
+++ b/graphics/pokemon/fearow/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 72 16
+88 96 16
+248 200 32
+224 216 136
+248 152 16
+192 184 80
+208 176 16
+176 144 0
+64 64 64
+0 0 0
+200 136 0
+232 232 248
+248 176 16
+184 184 184
+0 0 0
diff --git a/graphics/pokemon/feebas/overworld.png b/graphics/pokemon/feebas/overworld.png
new file mode 100644
index 000000000000..096d67682d8e
Binary files /dev/null and b/graphics/pokemon/feebas/overworld.png differ
diff --git a/graphics/pokemon/feebas/overworld_normal.pal b/graphics/pokemon/feebas/overworld_normal.pal
new file mode 100644
index 000000000000..3b33f32c956a
--- /dev/null
+++ b/graphics/pokemon/feebas/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 40 64
+48 80 112
+112 160 208
+0 0 0
+80 120 160
+72 56 32
+136 120 72
+168 152 88
+104 88 48
+200 184 112
+192 192 208
+232 232 248
+192 64 104
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/feebas/overworld_shiny.pal b/graphics/pokemon/feebas/overworld_shiny.pal
new file mode 100644
index 000000000000..f7fb5580a0ef
--- /dev/null
+++ b/graphics/pokemon/feebas/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+24 40 48
+64 80 104
+160 168 176
+0 0 0
+112 128 144
+88 80 96
+128 120 136
+144 144 160
+104 104 112
+160 160 176
+192 192 208
+232 232 248
+192 64 104
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/fennekin/overworld.png b/graphics/pokemon/fennekin/overworld.png
new file mode 100644
index 000000000000..db31b0fd04c7
Binary files /dev/null and b/graphics/pokemon/fennekin/overworld.png differ
diff --git a/graphics/pokemon/fennekin/overworld_normal.pal b/graphics/pokemon/fennekin/overworld_normal.pal
new file mode 100644
index 000000000000..5b5f78aaeac3
--- /dev/null
+++ b/graphics/pokemon/fennekin/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+251 104 57
+147 137 76
+255 250 127
+227 199 97
+245 216 75
+88 56 48
+214 82 52
+255 255 255
+118 108 103
+174 167 164
+231 228 228
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/fennekin/overworld_shiny.pal b/graphics/pokemon/fennekin/overworld_shiny.pal
new file mode 100644
index 000000000000..488c07656a03
--- /dev/null
+++ b/graphics/pokemon/fennekin/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+251 104 57
+101 100 100
+199 199 199
+159 159 159
+159 159 159
+88 56 48
+214 82 52
+255 255 255
+118 108 103
+174 167 164
+231 228 228
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/feraligatr/overworld.png b/graphics/pokemon/feraligatr/overworld.png
new file mode 100644
index 000000000000..dc2f26ebe094
Binary files /dev/null and b/graphics/pokemon/feraligatr/overworld.png differ
diff --git a/graphics/pokemon/feraligatr/overworld_normal.pal b/graphics/pokemon/feraligatr/overworld_normal.pal
new file mode 100644
index 000000000000..a3c21a2ab7ba
--- /dev/null
+++ b/graphics/pokemon/feraligatr/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 32 40
+0 0 0
+168 40 64
+208 48 72
+16 64 96
+112 176 232
+80 128 184
+160 208 240
+72 64 16
+224 192 120
+232 232 248
+184 160 88
+144 120 40
+64 104 136
+160 176 200
diff --git a/graphics/pokemon/feraligatr/overworld_shiny.pal b/graphics/pokemon/feraligatr/overworld_shiny.pal
new file mode 100644
index 000000000000..9546df3e50ee
--- /dev/null
+++ b/graphics/pokemon/feraligatr/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 160 176
+16 56 136
+0 0 0
+32 96 224
+16 120 248
+24 80 88
+80 200 184
+40 152 184
+136 224 208
+72 64 16
+224 192 120
+232 232 248
+184 160 88
+120 104 40
+48 120 128
+168 184 208
diff --git a/graphics/pokemon/ferroseed/overworld.png b/graphics/pokemon/ferroseed/overworld.png
new file mode 100644
index 000000000000..b61dd226093f
Binary files /dev/null and b/graphics/pokemon/ferroseed/overworld.png differ
diff --git a/graphics/pokemon/ferroseed/overworld_normal.pal b/graphics/pokemon/ferroseed/overworld_normal.pal
new file mode 100644
index 000000000000..ebec33f1457e
--- /dev/null
+++ b/graphics/pokemon/ferroseed/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 65 32
+0 180 90
+16 16 16
+0 0 0
+180 189 189
+139 139 139
+139 139 139
+65 65 65
+232 232 248
+65 65 65
+16 65 32
+90 90 90
+32 106 65
+180 139 65
+232 136 72
diff --git a/graphics/pokemon/ferroseed/overworld_shiny.pal b/graphics/pokemon/ferroseed/overworld_shiny.pal
new file mode 100644
index 000000000000..8520ca1c8570
--- /dev/null
+++ b/graphics/pokemon/ferroseed/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 56 64
+0 136 176
+16 16 16
+0 0 0
+176 184 200
+120 136 160
+139 139 139
+65 65 65
+232 232 232
+72 88 120
+16 65 32
+56 64 104
+32 88 104
+192 104 48
+232 136 72
diff --git a/graphics/pokemon/ferrothorn/overworld.png b/graphics/pokemon/ferrothorn/overworld.png
new file mode 100644
index 000000000000..cfbe242688a1
Binary files /dev/null and b/graphics/pokemon/ferrothorn/overworld.png differ
diff --git a/graphics/pokemon/ferrothorn/overworld_normal.pal b/graphics/pokemon/ferrothorn/overworld_normal.pal
new file mode 100644
index 000000000000..05000ab76d1f
--- /dev/null
+++ b/graphics/pokemon/ferrothorn/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+55 55 55
+0 0 0
+172 182 182
+129 129 129
+8 8 8
+11 55 25
+25 95 55
+0 172 79
+232 232 248
+236 182 63
+172 129 55
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/ferrothorn/overworld_shiny.pal b/graphics/pokemon/ferrothorn/overworld_shiny.pal
new file mode 100644
index 000000000000..f26a52fbc932
--- /dev/null
+++ b/graphics/pokemon/ferrothorn/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 64 48
+0 0 0
+200 192 112
+144 136 72
+8 8 8
+96 24 40
+152 40 64
+200 72 88
+232 232 248
+240 192 72
+200 136 40
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/finneon/overworld.png b/graphics/pokemon/finneon/overworld.png
new file mode 100644
index 000000000000..ac2d22c51c95
Binary files /dev/null and b/graphics/pokemon/finneon/overworld.png differ
diff --git a/graphics/pokemon/finneon/overworld_normal.pal b/graphics/pokemon/finneon/overworld_normal.pal
new file mode 100644
index 000000000000..f1c1774e99a2
--- /dev/null
+++ b/graphics/pokemon/finneon/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+48 56 64
+160 208 216
+48 72 64
+72 96 96
+240 120 160
+168 64 112
+104 136 160
+104 0 16
+248 184 208
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/finneon/overworld_shiny.pal b/graphics/pokemon/finneon/overworld_shiny.pal
new file mode 100644
index 000000000000..5ee22cfe7381
--- /dev/null
+++ b/graphics/pokemon/finneon/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+64 32 64
+208 168 216
+96 32 64
+120 88 96
+240 120 160
+168 64 112
+176 112 160
+104 0 16
+248 184 208
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/flaaffy/overworld.png b/graphics/pokemon/flaaffy/overworld.png
new file mode 100644
index 000000000000..e13f4b730084
Binary files /dev/null and b/graphics/pokemon/flaaffy/overworld.png differ
diff --git a/graphics/pokemon/flaaffy/overworld_normal.pal b/graphics/pokemon/flaaffy/overworld_normal.pal
new file mode 100644
index 000000000000..225e4789351f
--- /dev/null
+++ b/graphics/pokemon/flaaffy/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 104 120
+232 232 248
+48 56 64
+0 0 0
+136 152 176
+184 200 224
+224 144 184
+112 40 64
+184 96 128
+248 184 216
+32 88 144
+56 152 192
+96 200 240
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/flaaffy/overworld_shiny.pal b/graphics/pokemon/flaaffy/overworld_shiny.pal
new file mode 100644
index 000000000000..060d27de6a25
--- /dev/null
+++ b/graphics/pokemon/flaaffy/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 88 72
+232 232 248
+48 56 64
+0 0 0
+168 160 136
+200 192 176
+240 168 232
+112 40 64
+208 120 168
+248 208 248
+24 128 96
+16 192 144
+152 224 208
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/flabebe/blue_flower/overworld.png b/graphics/pokemon/flabebe/blue_flower/overworld.png
new file mode 100644
index 000000000000..02176b255c3d
Binary files /dev/null and b/graphics/pokemon/flabebe/blue_flower/overworld.png differ
diff --git a/graphics/pokemon/flabebe/blue_flower/overworld_normal.pal b/graphics/pokemon/flabebe/blue_flower/overworld_normal.pal
new file mode 100644
index 000000000000..a1225bc27060
--- /dev/null
+++ b/graphics/pokemon/flabebe/blue_flower/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 183 239
+16 16 16
+88 89 77
+242 243 238
+187 106 1
+255 255 0
+145 145 137
+232 153 2
+221 181 0
+243 86 75
+21 44 77
+35 69 35
+70 144 248
+91 185 75
+68 125 57
+0 0 0
diff --git a/graphics/pokemon/flabebe/blue_flower/overworld_shiny.pal b/graphics/pokemon/flabebe/blue_flower/overworld_shiny.pal
new file mode 100644
index 000000000000..4a019608b5c4
--- /dev/null
+++ b/graphics/pokemon/flabebe/blue_flower/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 183 239
+16 16 16
+88 89 77
+242 243 238
+187 106 1
+255 255 0
+145 145 137
+232 153 2
+221 181 0
+243 86 75
+21 44 77
+69 66 127
+70 144 248
+154 149 228
+96 90 188
+0 0 0
diff --git a/graphics/pokemon/flabebe/orange_flower/overworld.png b/graphics/pokemon/flabebe/orange_flower/overworld.png
new file mode 100644
index 000000000000..af5fe1322db5
Binary files /dev/null and b/graphics/pokemon/flabebe/orange_flower/overworld.png differ
diff --git a/graphics/pokemon/flabebe/orange_flower/overworld_normal.pal b/graphics/pokemon/flabebe/orange_flower/overworld_normal.pal
new file mode 100644
index 000000000000..9729c86612d1
--- /dev/null
+++ b/graphics/pokemon/flabebe/orange_flower/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 183 239
+16 16 16
+88 89 77
+242 243 238
+187 106 1
+255 255 0
+145 145 137
+232 153 2
+221 181 0
+243 86 75
+171 61 1
+35 69 35
+253 145 59
+91 185 75
+68 125 57
+0 0 0
diff --git a/graphics/pokemon/flabebe/orange_flower/overworld_shiny.pal b/graphics/pokemon/flabebe/orange_flower/overworld_shiny.pal
new file mode 100644
index 000000000000..678dd2b20533
--- /dev/null
+++ b/graphics/pokemon/flabebe/orange_flower/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 183 239
+16 16 16
+88 89 77
+242 243 238
+187 106 1
+255 255 0
+145 145 137
+232 153 2
+221 181 0
+243 86 75
+171 61 1
+69 66 127
+253 145 59
+154 149 228
+96 90 188
+0 0 0
diff --git a/graphics/pokemon/flabebe/overworld.png b/graphics/pokemon/flabebe/overworld.png
new file mode 100644
index 000000000000..922fed03cd94
Binary files /dev/null and b/graphics/pokemon/flabebe/overworld.png differ
diff --git a/graphics/pokemon/flabebe/overworld_normal.pal b/graphics/pokemon/flabebe/overworld_normal.pal
new file mode 100644
index 000000000000..d153782d63e0
--- /dev/null
+++ b/graphics/pokemon/flabebe/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 183 239
+16 16 16
+88 89 77
+242 243 238
+187 106 1
+255 255 0
+145 145 137
+232 153 2
+221 181 0
+243 86 75
+107 36 33
+35 69 35
+91 185 75
+68 125 57
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/flabebe/overworld_shiny.pal b/graphics/pokemon/flabebe/overworld_shiny.pal
new file mode 100644
index 000000000000..4b3bd7e5c5ab
--- /dev/null
+++ b/graphics/pokemon/flabebe/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 183 239
+16 16 16
+88 89 77
+242 243 238
+187 106 1
+255 255 0
+145 145 137
+232 153 2
+221 181 0
+243 86 75
+107 36 33
+96 90 188
+154 149 228
+96 90 188
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/flabebe/white_flower/overworld.png b/graphics/pokemon/flabebe/white_flower/overworld.png
new file mode 100644
index 000000000000..843d45c96d8a
Binary files /dev/null and b/graphics/pokemon/flabebe/white_flower/overworld.png differ
diff --git a/graphics/pokemon/flabebe/white_flower/overworld_normal.pal b/graphics/pokemon/flabebe/white_flower/overworld_normal.pal
new file mode 100644
index 000000000000..34f9822fd34e
--- /dev/null
+++ b/graphics/pokemon/flabebe/white_flower/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 183 239
+16 16 16
+88 89 77
+242 243 238
+187 106 1
+255 255 0
+145 145 137
+232 153 2
+221 181 0
+243 86 75
+35 69 35
+91 185 75
+68 125 57
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/flabebe/white_flower/overworld_shiny.pal b/graphics/pokemon/flabebe/white_flower/overworld_shiny.pal
new file mode 100644
index 000000000000..66317d403732
--- /dev/null
+++ b/graphics/pokemon/flabebe/white_flower/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 183 239
+16 16 16
+88 89 77
+242 243 238
+187 106 1
+255 255 0
+145 145 137
+232 153 2
+221 181 0
+243 86 75
+69 66 127
+154 149 228
+96 90 188
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/flabebe/yellow_flower/overworld.png b/graphics/pokemon/flabebe/yellow_flower/overworld.png
new file mode 100644
index 000000000000..d170322b186c
Binary files /dev/null and b/graphics/pokemon/flabebe/yellow_flower/overworld.png differ
diff --git a/graphics/pokemon/flabebe/yellow_flower/overworld_normal.pal b/graphics/pokemon/flabebe/yellow_flower/overworld_normal.pal
new file mode 100644
index 000000000000..ec2afcb3a638
--- /dev/null
+++ b/graphics/pokemon/flabebe/yellow_flower/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 183 239
+16 16 16
+88 89 77
+242 243 238
+187 106 1
+255 255 0
+145 145 137
+232 153 2
+221 181 0
+243 86 75
+148 81 2
+35 69 35
+230 206 10
+91 185 75
+68 125 57
+0 0 0
diff --git a/graphics/pokemon/flabebe/yellow_flower/overworld_shiny.pal b/graphics/pokemon/flabebe/yellow_flower/overworld_shiny.pal
new file mode 100644
index 000000000000..04f701918cee
--- /dev/null
+++ b/graphics/pokemon/flabebe/yellow_flower/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 183 239
+16 16 16
+88 89 77
+242 243 238
+187 106 1
+255 255 0
+145 145 137
+232 153 2
+221 181 0
+243 86 75
+148 81 2
+69 66 127
+230 206 10
+154 149 228
+96 90 188
+0 0 0
diff --git a/graphics/pokemon/flapple/overworld.png b/graphics/pokemon/flapple/overworld.png
new file mode 100644
index 000000000000..edd01a68a254
Binary files /dev/null and b/graphics/pokemon/flapple/overworld.png differ
diff --git a/graphics/pokemon/flapple/overworld_normal.pal b/graphics/pokemon/flapple/overworld_normal.pal
new file mode 100644
index 000000000000..77aadabac64a
--- /dev/null
+++ b/graphics/pokemon/flapple/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+92 17 17
+171 42 42
+226 91 91
+28 55 11
+96 84 33
+92 143 59
+167 152 82
+212 197 128
+0 0 0
+58 104 28
+111 95 18
+236 210 95
+224 193 48
+194 167 51
+136 116 31
diff --git a/graphics/pokemon/flapple/overworld_shiny.pal b/graphics/pokemon/flapple/overworld_shiny.pal
new file mode 100644
index 000000000000..065c05dbf680
--- /dev/null
+++ b/graphics/pokemon/flapple/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+49 82 24
+123 180 65
+164 238 98
+24 49 8
+98 82 32
+90 139 57
+164 156 82
+213 197 131
+0 0 0
+57 106 24
+106 90 16
+238 213 90
+230 197 49
+197 164 49
+139 115 24
diff --git a/graphics/pokemon/flareon/overworld.png b/graphics/pokemon/flareon/overworld.png
new file mode 100644
index 000000000000..c32cab6f9d2a
Binary files /dev/null and b/graphics/pokemon/flareon/overworld.png differ
diff --git a/graphics/pokemon/flareon/overworld_normal.pal b/graphics/pokemon/flareon/overworld_normal.pal
new file mode 100644
index 000000000000..ccc4e8701666
--- /dev/null
+++ b/graphics/pokemon/flareon/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 56 40
+216 168 72
+232 216 152
+0 0 0
+248 128 72
+152 120 48
+216 88 32
+152 64 40
+80 64 64
+192 64 32
+232 232 248
+216 192 192
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/flareon/overworld_shiny.pal b/graphics/pokemon/flareon/overworld_shiny.pal
new file mode 100644
index 000000000000..b2cdf694c90f
--- /dev/null
+++ b/graphics/pokemon/flareon/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 56 40
+216 168 72
+232 216 152
+0 0 0
+248 168 72
+152 104 48
+216 128 48
+144 96 40
+80 64 64
+200 120 24
+232 232 248
+216 192 192
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/fletchinder/overworld.png b/graphics/pokemon/fletchinder/overworld.png
new file mode 100644
index 000000000000..a987365357f7
Binary files /dev/null and b/graphics/pokemon/fletchinder/overworld.png differ
diff --git a/graphics/pokemon/fletchinder/overworld_normal.pal b/graphics/pokemon/fletchinder/overworld_normal.pal
new file mode 100644
index 000000000000..80fab4ddf1d9
--- /dev/null
+++ b/graphics/pokemon/fletchinder/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 184 168
+113 79 25
+250 199 62
+16 16 16
+112 103 96
+58 56 57
+86 24 18
+255 104 79
+224 54 32
+233 157 37
+230 238 248
+194 203 232
+153 163 195
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/fletchinder/overworld_shiny.pal b/graphics/pokemon/fletchinder/overworld_shiny.pal
new file mode 100644
index 000000000000..36f64c6a053d
--- /dev/null
+++ b/graphics/pokemon/fletchinder/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 184 168
+113 79 25
+250 199 62
+16 16 16
+88 56 58
+56 33 34
+144 41 27
+244 86 59
+175 61 46
+233 157 37
+230 238 248
+230 193 154
+191 158 125
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/fletchling/overworld.png b/graphics/pokemon/fletchling/overworld.png
new file mode 100644
index 000000000000..acfc95f616a7
Binary files /dev/null and b/graphics/pokemon/fletchling/overworld.png differ
diff --git a/graphics/pokemon/fletchling/overworld_normal.pal b/graphics/pokemon/fletchling/overworld_normal.pal
new file mode 100644
index 000000000000..dffd5c93d506
--- /dev/null
+++ b/graphics/pokemon/fletchling/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+119 183 167
+125 33 9
+254 135 94
+0 0 0
+213 80 45
+81 81 81
+252 252 252
+163 163 163
+36 25 25
+225 188 51
+111 53 33
+109 167 152
+120 184 168
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/fletchling/overworld_shiny.pal b/graphics/pokemon/fletchling/overworld_shiny.pal
new file mode 100644
index 000000000000..706ab10c6e4a
--- /dev/null
+++ b/graphics/pokemon/fletchling/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+119 183 167
+138 50 18
+234 121 72
+0 0 0
+199 71 31
+81 81 81
+234 214 193
+36 25 25
+225 188 51
+188 155 122
+111 53 33
+109 167 152
+120 184 168
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/floatzel/overworld.png b/graphics/pokemon/floatzel/overworld.png
new file mode 100644
index 000000000000..cd7c20372c42
Binary files /dev/null and b/graphics/pokemon/floatzel/overworld.png differ
diff --git a/graphics/pokemon/floatzel/overworld_normal.pal b/graphics/pokemon/floatzel/overworld_normal.pal
new file mode 100644
index 000000000000..68cff42330d9
--- /dev/null
+++ b/graphics/pokemon/floatzel/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 48 40
+232 112 48
+0 0 0
+184 72 32
+128 64 32
+208 184 96
+240 224 128
+248 192 32
+232 232 248
+208 128 0
+88 88 88
+168 184 200
+64 96 120
+72 136 192
+160 96 0
diff --git a/graphics/pokemon/floatzel/overworld_shiny.pal b/graphics/pokemon/floatzel/overworld_shiny.pal
new file mode 100644
index 000000000000..a04429411778
--- /dev/null
+++ b/graphics/pokemon/floatzel/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 40 32
+232 192 88
+0 0 0
+176 144 56
+112 96 32
+224 208 152
+248 240 184
+200 200 200
+232 232 248
+152 152 152
+88 88 88
+168 184 200
+64 96 120
+72 136 192
+152 128 56
diff --git a/graphics/pokemon/floette/blue_flower/overworld.png b/graphics/pokemon/floette/blue_flower/overworld.png
new file mode 100644
index 000000000000..034b336557f1
Binary files /dev/null and b/graphics/pokemon/floette/blue_flower/overworld.png differ
diff --git a/graphics/pokemon/floette/blue_flower/overworld_normal.pal b/graphics/pokemon/floette/blue_flower/overworld_normal.pal
new file mode 100644
index 000000000000..b071d3f4d3e9
--- /dev/null
+++ b/graphics/pokemon/floette/blue_flower/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 183 239
+16 16 16
+21 44 77
+188 118 10
+253 236 58
+70 144 248
+33 89 169
+66 95 29
+25 105 88
+126 181 59
+12 180 149
+251 254 255
+99 113 115
+197 199 199
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/floette/blue_flower/overworld_shiny.pal b/graphics/pokemon/floette/blue_flower/overworld_shiny.pal
new file mode 100644
index 000000000000..7c429dca6d6c
--- /dev/null
+++ b/graphics/pokemon/floette/blue_flower/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 183 239
+16 16 16
+21 44 77
+188 118 10
+253 236 58
+70 144 248
+33 89 169
+66 95 29
+96 90 188
+126 181 59
+154 149 228
+251 254 255
+99 113 115
+197 199 199
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/floette/eternal_flower/overworld.png b/graphics/pokemon/floette/eternal_flower/overworld.png
new file mode 100644
index 000000000000..890288792cdd
Binary files /dev/null and b/graphics/pokemon/floette/eternal_flower/overworld.png differ
diff --git a/graphics/pokemon/floette/eternal_flower/overworld_normal.pal b/graphics/pokemon/floette/eternal_flower/overworld_normal.pal
new file mode 100644
index 000000000000..4ec25cf4e618
--- /dev/null
+++ b/graphics/pokemon/floette/eternal_flower/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 183 239
+40 38 38
+107 33 62
+16 16 16
+103 95 95
+255 93 135
+59 55 55
+205 39 81
+49 67 149
+120 137 214
+251 254 255
+99 113 115
+197 199 199
+230 238 248
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/floette/eternal_flower/overworld_shiny.pal b/graphics/pokemon/floette/eternal_flower/overworld_shiny.pal
new file mode 100644
index 000000000000..3917a8c5fc88
--- /dev/null
+++ b/graphics/pokemon/floette/eternal_flower/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 183 239
+40 38 38
+107 33 62
+16 16 16
+103 95 95
+255 93 135
+59 55 55
+205 39 81
+25 105 88
+12 180 149
+251 254 255
+99 113 115
+197 199 199
+230 238 248
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/floette/orange_flower/overworld.png b/graphics/pokemon/floette/orange_flower/overworld.png
new file mode 100644
index 000000000000..f1559fcdc53a
Binary files /dev/null and b/graphics/pokemon/floette/orange_flower/overworld.png differ
diff --git a/graphics/pokemon/floette/orange_flower/overworld_normal.pal b/graphics/pokemon/floette/orange_flower/overworld_normal.pal
new file mode 100644
index 000000000000..20c727f0222d
--- /dev/null
+++ b/graphics/pokemon/floette/orange_flower/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 183 239
+16 16 16
+171 61 1
+188 118 10
+253 236 58
+253 145 59
+240 101 26
+66 95 29
+25 105 88
+126 181 59
+12 180 149
+251 254 255
+99 113 115
+197 199 199
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/floette/orange_flower/overworld_shiny.pal b/graphics/pokemon/floette/orange_flower/overworld_shiny.pal
new file mode 100644
index 000000000000..b5ef2a806cf3
--- /dev/null
+++ b/graphics/pokemon/floette/orange_flower/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 183 239
+16 16 16
+171 61 1
+188 118 10
+253 236 58
+253 145 59
+240 101 26
+66 95 29
+96 90 188
+126 181 59
+154 149 228
+251 254 255
+99 113 115
+197 199 199
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/floette/overworld.png b/graphics/pokemon/floette/overworld.png
new file mode 100644
index 000000000000..54f4dd54affb
Binary files /dev/null and b/graphics/pokemon/floette/overworld.png differ
diff --git a/graphics/pokemon/floette/overworld_normal.pal b/graphics/pokemon/floette/overworld_normal.pal
new file mode 100644
index 000000000000..1b7a65a8b1fe
--- /dev/null
+++ b/graphics/pokemon/floette/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 183 239
+16 16 16
+107 36 33
+188 118 10
+253 236 58
+243 86 75
+182 64 56
+66 95 29
+25 105 88
+126 181 59
+12 180 149
+251 254 255
+99 113 115
+197 199 199
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/floette/overworld_shiny.pal b/graphics/pokemon/floette/overworld_shiny.pal
new file mode 100644
index 000000000000..39e73ff789fc
--- /dev/null
+++ b/graphics/pokemon/floette/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 183 239
+16 16 16
+107 36 33
+188 118 10
+253 236 58
+243 86 75
+182 64 56
+66 95 29
+96 90 188
+126 181 59
+154 149 228
+251 254 255
+99 113 115
+197 199 199
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/floette/white_flower/overworld.png b/graphics/pokemon/floette/white_flower/overworld.png
new file mode 100644
index 000000000000..af49bcc9211f
Binary files /dev/null and b/graphics/pokemon/floette/white_flower/overworld.png differ
diff --git a/graphics/pokemon/floette/white_flower/overworld_normal.pal b/graphics/pokemon/floette/white_flower/overworld_normal.pal
new file mode 100644
index 000000000000..6e6e7242f57a
--- /dev/null
+++ b/graphics/pokemon/floette/white_flower/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 183 239
+16 16 16
+88 89 77
+188 118 10
+253 236 58
+242 243 238
+197 199 199
+66 95 29
+25 105 88
+126 181 59
+12 180 149
+251 254 255
+99 113 115
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/floette/white_flower/overworld_shiny.pal b/graphics/pokemon/floette/white_flower/overworld_shiny.pal
new file mode 100644
index 000000000000..81be54505166
--- /dev/null
+++ b/graphics/pokemon/floette/white_flower/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 183 239
+16 16 16
+88 89 77
+188 118 10
+253 236 58
+242 243 238
+197 199 199
+66 95 29
+96 90 188
+126 181 59
+154 149 228
+251 254 255
+99 113 115
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/floette/yellow_flower/overworld.png b/graphics/pokemon/floette/yellow_flower/overworld.png
new file mode 100644
index 000000000000..647e8149779e
Binary files /dev/null and b/graphics/pokemon/floette/yellow_flower/overworld.png differ
diff --git a/graphics/pokemon/floette/yellow_flower/overworld_normal.pal b/graphics/pokemon/floette/yellow_flower/overworld_normal.pal
new file mode 100644
index 000000000000..b4ad160f52f9
--- /dev/null
+++ b/graphics/pokemon/floette/yellow_flower/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 183 239
+16 16 16
+148 81 2
+188 118 10
+253 236 58
+230 206 10
+232 153 2
+66 95 29
+25 105 88
+126 181 59
+12 180 149
+251 254 255
+99 113 115
+197 199 199
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/floette/yellow_flower/overworld_shiny.pal b/graphics/pokemon/floette/yellow_flower/overworld_shiny.pal
new file mode 100644
index 000000000000..b3fd29046266
--- /dev/null
+++ b/graphics/pokemon/floette/yellow_flower/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 183 239
+16 16 16
+148 81 2
+188 118 10
+253 236 58
+230 206 10
+232 153 2
+66 95 29
+96 90 188
+126 181 59
+154 149 228
+251 254 255
+99 113 115
+197 199 199
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/florges/blue_flower/overworld.png b/graphics/pokemon/florges/blue_flower/overworld.png
new file mode 100644
index 000000000000..7231b8e323fc
Binary files /dev/null and b/graphics/pokemon/florges/blue_flower/overworld.png differ
diff --git a/graphics/pokemon/florges/blue_flower/overworld_normal.pal b/graphics/pokemon/florges/blue_flower/overworld_normal.pal
new file mode 100644
index 000000000000..a7fc95c86b69
--- /dev/null
+++ b/graphics/pokemon/florges/blue_flower/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 183 239
+77 137 151
+16 16 16
+21 44 77
+142 213 232
+70 144 248
+55 104 173
+75 169 118
+30 56 41
+59 123 75
+253 145 59
+203 207 209
+252 254 255
+86 97 102
+74 76 75
+0 0 0
diff --git a/graphics/pokemon/florges/blue_flower/overworld_shiny.pal b/graphics/pokemon/florges/blue_flower/overworld_shiny.pal
new file mode 100644
index 000000000000..dff565005906
--- /dev/null
+++ b/graphics/pokemon/florges/blue_flower/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 183 239
+77 137 151
+16 16 16
+21 44 77
+142 213 232
+70 144 248
+55 104 173
+154 149 228
+69 66 127
+96 90 188
+253 145 59
+203 207 209
+252 254 255
+86 97 102
+74 76 75
+0 0 0
diff --git a/graphics/pokemon/florges/orange_flower/overworld.png b/graphics/pokemon/florges/orange_flower/overworld.png
new file mode 100644
index 000000000000..ef910fcfc3d3
Binary files /dev/null and b/graphics/pokemon/florges/orange_flower/overworld.png differ
diff --git a/graphics/pokemon/florges/orange_flower/overworld_normal.pal b/graphics/pokemon/florges/orange_flower/overworld_normal.pal
new file mode 100644
index 000000000000..50a974fef608
--- /dev/null
+++ b/graphics/pokemon/florges/orange_flower/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 183 239
+126 86 62
+16 16 16
+171 61 1
+235 185 151
+253 145 59
+238 113 22
+75 169 118
+30 56 41
+59 123 75
+123 101 157
+203 207 209
+252 254 255
+86 97 102
+74 76 75
+0 0 0
diff --git a/graphics/pokemon/florges/orange_flower/overworld_shiny.pal b/graphics/pokemon/florges/orange_flower/overworld_shiny.pal
new file mode 100644
index 000000000000..e7957e79ab24
--- /dev/null
+++ b/graphics/pokemon/florges/orange_flower/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 183 239
+126 86 62
+16 16 16
+171 61 1
+235 185 151
+253 145 59
+238 113 22
+154 149 228
+69 66 127
+96 90 188
+123 101 157
+203 207 209
+252 254 255
+86 97 102
+74 76 75
+0 0 0
diff --git a/graphics/pokemon/florges/overworld.png b/graphics/pokemon/florges/overworld.png
new file mode 100644
index 000000000000..efa6efdd9c2d
Binary files /dev/null and b/graphics/pokemon/florges/overworld.png differ
diff --git a/graphics/pokemon/florges/overworld_normal.pal b/graphics/pokemon/florges/overworld_normal.pal
new file mode 100644
index 000000000000..20b9d250f48e
--- /dev/null
+++ b/graphics/pokemon/florges/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 183 239
+126 62 104
+16 16 16
+107 36 33
+215 159 196
+243 86 75
+214 44 36
+75 169 118
+30 56 41
+59 123 75
+253 236 58
+203 207 209
+252 254 255
+86 97 102
+74 76 75
+0 0 0
diff --git a/graphics/pokemon/florges/overworld_shiny.pal b/graphics/pokemon/florges/overworld_shiny.pal
new file mode 100644
index 000000000000..744516f42c08
--- /dev/null
+++ b/graphics/pokemon/florges/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+116 194 164
+126 62 104
+16 16 16
+107 36 33
+215 159 196
+243 86 75
+214 44 36
+154 149 228
+69 66 127
+96 90 188
+253 236 58
+203 207 209
+252 254 255
+86 97 102
+74 76 75
+0 0 0
diff --git a/graphics/pokemon/florges/white_flower/overworld.png b/graphics/pokemon/florges/white_flower/overworld.png
new file mode 100644
index 000000000000..b5548c273b7d
Binary files /dev/null and b/graphics/pokemon/florges/white_flower/overworld.png differ
diff --git a/graphics/pokemon/florges/white_flower/overworld_normal.pal b/graphics/pokemon/florges/white_flower/overworld_normal.pal
new file mode 100644
index 000000000000..a6a7d39f74c9
--- /dev/null
+++ b/graphics/pokemon/florges/white_flower/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 183 239
+205 166 174
+16 16 16
+62 62 62
+252 235 238
+251 254 255
+183 181 181
+75 169 118
+30 56 41
+59 123 75
+120 195 216
+203 207 209
+252 254 255
+86 97 102
+74 76 75
+0 0 0
diff --git a/graphics/pokemon/florges/white_flower/overworld_shiny.pal b/graphics/pokemon/florges/white_flower/overworld_shiny.pal
new file mode 100644
index 000000000000..ff775da51ca8
--- /dev/null
+++ b/graphics/pokemon/florges/white_flower/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 183 239
+205 166 174
+16 16 16
+62 62 62
+252 235 238
+251 254 255
+183 181 181
+154 149 228
+69 66 127
+96 90 188
+120 195 216
+203 207 209
+252 254 255
+86 97 102
+74 76 75
+0 0 0
diff --git a/graphics/pokemon/florges/yellow_flower/overworld.png b/graphics/pokemon/florges/yellow_flower/overworld.png
new file mode 100644
index 000000000000..cf000fb73923
Binary files /dev/null and b/graphics/pokemon/florges/yellow_flower/overworld.png differ
diff --git a/graphics/pokemon/florges/yellow_flower/overworld_normal.pal b/graphics/pokemon/florges/yellow_flower/overworld_normal.pal
new file mode 100644
index 000000000000..fdfc589dcdc6
--- /dev/null
+++ b/graphics/pokemon/florges/yellow_flower/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 183 239
+125 133 135
+16 16 16
+148 81 2
+252 254 255
+230 206 10
+232 153 2
+75 169 118
+30 56 41
+59 123 75
+253 236 58
+203 207 209
+86 97 102
+74 76 75
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/florges/yellow_flower/overworld_shiny.pal b/graphics/pokemon/florges/yellow_flower/overworld_shiny.pal
new file mode 100644
index 000000000000..4668878bfc3b
--- /dev/null
+++ b/graphics/pokemon/florges/yellow_flower/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 183 239
+125 133 135
+16 16 16
+148 81 2
+252 254 255
+230 206 10
+232 153 2
+154 149 228
+69 66 127
+96 90 188
+253 236 58
+203 207 209
+86 97 102
+74 76 75
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/flygon/overworld.png b/graphics/pokemon/flygon/overworld.png
new file mode 100644
index 000000000000..eac77815f611
Binary files /dev/null and b/graphics/pokemon/flygon/overworld.png differ
diff --git a/graphics/pokemon/flygon/overworld_normal.pal b/graphics/pokemon/flygon/overworld_normal.pal
new file mode 100644
index 000000000000..e3d9262d5473
--- /dev/null
+++ b/graphics/pokemon/flygon/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+176 176 176
+48 72 48
+64 104 56
+16 16 16
+72 136 64
+128 32 32
+208 64 88
+192 216 152
+168 48 64
+248 128 152
+160 192 96
+248 248 248
+120 144 56
+96 96 96
+184 192 208
+0 0 0
diff --git a/graphics/pokemon/flygon/overworld_shiny.pal b/graphics/pokemon/flygon/overworld_shiny.pal
new file mode 100644
index 000000000000..8accf94da7c9
--- /dev/null
+++ b/graphics/pokemon/flygon/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+176 176 176
+48 72 88
+56 104 120
+16 16 16
+72 136 160
+128 64 32
+208 120 64
+192 216 152
+168 88 48
+248 184 128
+160 192 96
+248 248 248
+120 144 56
+96 96 96
+184 192 208
+0 0 0
diff --git a/graphics/pokemon/fomantis/overworld.png b/graphics/pokemon/fomantis/overworld.png
new file mode 100644
index 000000000000..f5d1da87824a
Binary files /dev/null and b/graphics/pokemon/fomantis/overworld.png differ
diff --git a/graphics/pokemon/fomantis/overworld_normal.pal b/graphics/pokemon/fomantis/overworld_normal.pal
new file mode 100644
index 000000000000..d0f124555d42
--- /dev/null
+++ b/graphics/pokemon/fomantis/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+248 248 248
+250 222 241
+108 213 148
+248 192 232
+243 175 199
+68 154 94
+46 160 89
+37 129 71
+28 99 54
+232 98 124
+108 31 69
+28 91 51
+17 55 31
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/fomantis/overworld_shiny.pal b/graphics/pokemon/fomantis/overworld_shiny.pal
new file mode 100644
index 000000000000..225677ce78d3
--- /dev/null
+++ b/graphics/pokemon/fomantis/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+248 248 248
+248 216 128
+108 213 148
+224 160 72
+176 112 48
+68 154 94
+46 160 89
+37 129 71
+28 99 54
+128 192 96
+72 128 48
+28 91 51
+17 55 31
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/foongus/overworld.png b/graphics/pokemon/foongus/overworld.png
new file mode 100644
index 000000000000..aefcd2c5181d
Binary files /dev/null and b/graphics/pokemon/foongus/overworld.png differ
diff --git a/graphics/pokemon/foongus/overworld_normal.pal b/graphics/pokemon/foongus/overworld_normal.pal
new file mode 100644
index 000000000000..5b1bd986b01e
--- /dev/null
+++ b/graphics/pokemon/foongus/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+123 49 49
+106 74 49
+65 41 41
+156 57 57
+222 90 82
+197 180 156
+255 246 230
+65 41 41
+255 246 230
+16 16 16
+0 0 0
+106 74 49
+156 57 123
+213 98 156
+0 0 0
diff --git a/graphics/pokemon/foongus/overworld_shiny.pal b/graphics/pokemon/foongus/overworld_shiny.pal
new file mode 100644
index 000000000000..59d28d5af40d
--- /dev/null
+++ b/graphics/pokemon/foongus/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 48 120
+72 88 48
+40 64 40
+112 56 240
+144 112 216
+200 168 136
+255 246 230
+65 41 41
+248 240 224
+16 16 16
+0 0 0
+106 74 49
+184 72 88
+224 112 112
+0 0 0
diff --git a/graphics/pokemon/forretress/overworld.png b/graphics/pokemon/forretress/overworld.png
new file mode 100644
index 000000000000..f3994240fab3
Binary files /dev/null and b/graphics/pokemon/forretress/overworld.png differ
diff --git a/graphics/pokemon/forretress/overworld_normal.pal b/graphics/pokemon/forretress/overworld_normal.pal
new file mode 100644
index 000000000000..b213db8f9200
--- /dev/null
+++ b/graphics/pokemon/forretress/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+88 64 104
+208 184 216
+184 152 184
+224 208 248
+136 112 144
+104 16 24
+192 48 56
+48 48 48
+216 96 64
+136 136 136
+232 232 248
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/forretress/overworld_shiny.pal b/graphics/pokemon/forretress/overworld_shiny.pal
new file mode 100644
index 000000000000..8dd78f9ff78f
--- /dev/null
+++ b/graphics/pokemon/forretress/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+104 80 24
+216 192 128
+184 152 80
+240 224 184
+160 112 32
+80 56 24
+112 88 56
+48 48 48
+152 128 96
+136 136 136
+232 232 248
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/fraxure/overworld.png b/graphics/pokemon/fraxure/overworld.png
new file mode 100644
index 000000000000..ce5eef781e26
Binary files /dev/null and b/graphics/pokemon/fraxure/overworld.png differ
diff --git a/graphics/pokemon/fraxure/overworld_normal.pal b/graphics/pokemon/fraxure/overworld_normal.pal
new file mode 100644
index 000000000000..ff3615706be2
--- /dev/null
+++ b/graphics/pokemon/fraxure/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 73 40
+111 159 30
+68 107 57
+17 17 17
+42 48 37
+98 98 96
+156 165 154
+0 0 0
+98 0 0
+209 52 52
+111 159 30
+68 107 57
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/fraxure/overworld_shiny.pal b/graphics/pokemon/fraxure/overworld_shiny.pal
new file mode 100644
index 000000000000..f68e1f5ff04d
--- /dev/null
+++ b/graphics/pokemon/fraxure/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 56 56
+120 136 72
+96 96 64
+17 17 17
+42 48 37
+98 98 96
+162 170 159
+0 0 0
+8 64 88
+101 174 220
+111 159 30
+95 112 63
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/frillish/followerf.png b/graphics/pokemon/frillish/followerf.png
new file mode 100644
index 000000000000..4fcc86d96f15
Binary files /dev/null and b/graphics/pokemon/frillish/followerf.png differ
diff --git a/graphics/pokemon/frillish/overworld.png b/graphics/pokemon/frillish/overworld.png
new file mode 100644
index 000000000000..46abf27e23ff
Binary files /dev/null and b/graphics/pokemon/frillish/overworld.png differ
diff --git a/graphics/pokemon/frillish/overworld_normal.pal b/graphics/pokemon/frillish/overworld_normal.pal
new file mode 100644
index 000000000000..5ea6bf9b8acd
--- /dev/null
+++ b/graphics/pokemon/frillish/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+79 155 191
+47 79 95
+172 191 227
+208 227 255
+121 208 255
+46 61 85
+11 11 11
+229 229 247
+47 87 191
+218 33 11
+208 227 255
+79 155 191
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/frillish/overworld_shiny.pal b/graphics/pokemon/frillish/overworld_shiny.pal
new file mode 100644
index 000000000000..cb56fe4d857a
--- /dev/null
+++ b/graphics/pokemon/frillish/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 152 136
+47 79 95
+208 200 120
+232 224 184
+120 216 192
+46 61 85
+11 11 11
+229 229 247
+96 64 192
+216 16 208
+208 227 255
+79 155 191
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/froakie/overworld.png b/graphics/pokemon/froakie/overworld.png
new file mode 100644
index 000000000000..bc82d543b343
Binary files /dev/null and b/graphics/pokemon/froakie/overworld.png differ
diff --git a/graphics/pokemon/froakie/overworld_normal.pal b/graphics/pokemon/froakie/overworld_normal.pal
new file mode 100644
index 000000000000..385140b8dbcb
--- /dev/null
+++ b/graphics/pokemon/froakie/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+136 192 240
+48 64 104
+72 152 200
+248 216 88
+230 234 234
+188 192 192
+230 238 248
+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/froakie/overworld_shiny.pal b/graphics/pokemon/froakie/overworld_shiny.pal
new file mode 100644
index 000000000000..ea4dbcab0970
--- /dev/null
+++ b/graphics/pokemon/froakie/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+187 255 255
+75 130 130
+97 183 183
+248 216 88
+230 234 234
+188 192 192
+230 238 248
+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/frogadier/overworld.png b/graphics/pokemon/frogadier/overworld.png
new file mode 100644
index 000000000000..2c4ff43dbb23
Binary files /dev/null and b/graphics/pokemon/frogadier/overworld.png differ
diff --git a/graphics/pokemon/frogadier/overworld_normal.pal b/graphics/pokemon/frogadier/overworld_normal.pal
new file mode 100644
index 000000000000..08d38f157471
--- /dev/null
+++ b/graphics/pokemon/frogadier/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+95 137 191
+37 57 83
+136 192 240
+248 216 88
+230 234 234
+188 192 192
+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/frogadier/overworld_shiny.pal b/graphics/pokemon/frogadier/overworld_shiny.pal
new file mode 100644
index 000000000000..35f7a785c331
--- /dev/null
+++ b/graphics/pokemon/frogadier/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+42 85 128
+1 49 99
+180 231 240
+248 216 88
+230 234 234
+188 192 192
+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/froslass/overworld.png b/graphics/pokemon/froslass/overworld.png
new file mode 100644
index 000000000000..473b0a75af70
Binary files /dev/null and b/graphics/pokemon/froslass/overworld.png differ
diff --git a/graphics/pokemon/froslass/overworld_normal.pal b/graphics/pokemon/froslass/overworld_normal.pal
new file mode 100644
index 000000000000..a619e318b75a
--- /dev/null
+++ b/graphics/pokemon/froslass/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 72 88
+0 0 0
+64 64 64
+56 120 152
+88 160 200
+112 120 136
+192 200 216
+232 232 248
+152 160 176
+80 40 80
+128 72 128
+248 224 8
+192 56 32
+120 64 56
+0 0 0
diff --git a/graphics/pokemon/froslass/overworld_shiny.pal b/graphics/pokemon/froslass/overworld_shiny.pal
new file mode 100644
index 000000000000..d049c4cdc924
--- /dev/null
+++ b/graphics/pokemon/froslass/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 64 64
+0 0 0
+64 64 64
+80 104 112
+136 168 176
+112 120 136
+192 200 216
+232 232 248
+152 160 176
+80 40 80
+128 72 128
+248 224 8
+184 88 160
+120 56 144
+0 0 0
diff --git a/graphics/pokemon/frosmoth/overworld.png b/graphics/pokemon/frosmoth/overworld.png
new file mode 100644
index 000000000000..480ee8ef6854
Binary files /dev/null and b/graphics/pokemon/frosmoth/overworld.png differ
diff --git a/graphics/pokemon/frosmoth/overworld_normal.pal b/graphics/pokemon/frosmoth/overworld_normal.pal
new file mode 100644
index 000000000000..fb7a83cf3833
--- /dev/null
+++ b/graphics/pokemon/frosmoth/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+252 252 252
+44 56 60
+96 96 96
+180 200 212
+240 240 236
+220 240 248
+204 204 204
+0 0 0
+184 212 224
+160 188 200
+68 88 212
+132 140 228
+160 160 160
+160 204 136
+192 216 128
+0 0 0
diff --git a/graphics/pokemon/frosmoth/overworld_shiny.pal b/graphics/pokemon/frosmoth/overworld_shiny.pal
new file mode 100644
index 000000000000..ebcc1aaf1251
--- /dev/null
+++ b/graphics/pokemon/frosmoth/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+41 57 57
+98 98 98
+180 205 213
+246 246 238
+222 238 213
+205 205 205
+0 0 0
+197 230 189
+180 205 172
+41 148 74
+90 189 115
+164 164 164
+205 205 205
+41 148 74
+0 0 0
diff --git a/graphics/pokemon/furfrou/dandy_trim/overworld.png b/graphics/pokemon/furfrou/dandy_trim/overworld.png
new file mode 100644
index 000000000000..4fa5e53c1c30
Binary files /dev/null and b/graphics/pokemon/furfrou/dandy_trim/overworld.png differ
diff --git a/graphics/pokemon/furfrou/dandy_trim/overworld_normal.pal b/graphics/pokemon/furfrou/dandy_trim/overworld_normal.pal
new file mode 100644
index 000000000000..16e445224afa
--- /dev/null
+++ b/graphics/pokemon/furfrou/dandy_trim/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 211 165
+54 91 49
+88 88 88
+103 184 66
+237 241 227
+177 175 160
+16 16 16
+65 145 57
+91 134 247
+88 88 88
+237 241 227
+119 118 115
+188 4 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/furfrou/dandy_trim/overworld_shiny.pal b/graphics/pokemon/furfrou/dandy_trim/overworld_shiny.pal
new file mode 100644
index 000000000000..f25fd2922d4a
--- /dev/null
+++ b/graphics/pokemon/furfrou/dandy_trim/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 211 165
+54 91 49
+50 48 48
+103 184 66
+119 118 115
+88 88 88
+16 16 16
+65 145 57
+91 134 247
+177 175 160
+255 255 255
+237 241 227
+188 4 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/furfrou/debutante_trim/overworld.png b/graphics/pokemon/furfrou/debutante_trim/overworld.png
new file mode 100644
index 000000000000..4ba981659cf7
Binary files /dev/null and b/graphics/pokemon/furfrou/debutante_trim/overworld.png differ
diff --git a/graphics/pokemon/furfrou/debutante_trim/overworld_normal.pal b/graphics/pokemon/furfrou/debutante_trim/overworld_normal.pal
new file mode 100644
index 000000000000..6acebd65028b
--- /dev/null
+++ b/graphics/pokemon/furfrou/debutante_trim/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 211 165
+50 48 48
+177 175 160
+237 241 227
+120 85 30
+229 214 89
+88 88 88
+188 149 56
+16 16 16
+91 134 247
+119 118 115
+237 241 227
+188 4 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/furfrou/debutante_trim/overworld_shiny.pal b/graphics/pokemon/furfrou/debutante_trim/overworld_shiny.pal
new file mode 100644
index 000000000000..43cfed54c84e
--- /dev/null
+++ b/graphics/pokemon/furfrou/debutante_trim/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 211 165
+50 48 48
+88 88 88
+119 118 115
+120 85 30
+229 214 89
+177 175 160
+188 149 56
+16 16 16
+91 134 247
+237 241 227
+255 255 255
+188 4 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/furfrou/diamond_trim/overworld.png b/graphics/pokemon/furfrou/diamond_trim/overworld.png
new file mode 100644
index 000000000000..ca116d2624da
Binary files /dev/null and b/graphics/pokemon/furfrou/diamond_trim/overworld.png differ
diff --git a/graphics/pokemon/furfrou/diamond_trim/overworld_normal.pal b/graphics/pokemon/furfrou/diamond_trim/overworld_normal.pal
new file mode 100644
index 000000000000..1251ffea2cc7
--- /dev/null
+++ b/graphics/pokemon/furfrou/diamond_trim/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 211 165
+50 48 48
+111 51 19
+237 241 227
+252 141 44
+177 175 160
+16 16 16
+228 94 48
+119 118 115
+59 86 159
+91 134 247
+88 88 88
+119 118 115
+237 241 227
+188 4 0
+0 0 0
diff --git a/graphics/pokemon/furfrou/diamond_trim/overworld_shiny.pal b/graphics/pokemon/furfrou/diamond_trim/overworld_shiny.pal
new file mode 100644
index 000000000000..8daa740a74ac
--- /dev/null
+++ b/graphics/pokemon/furfrou/diamond_trim/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 211 165
+50 48 48
+111 51 19
+119 118 115
+252 141 44
+88 88 88
+16 16 16
+228 94 48
+67 65 65
+59 86 159
+91 134 247
+177 175 160
+237 241 227
+255 255 255
+188 4 0
+0 0 0
diff --git a/graphics/pokemon/furfrou/heart_trim/overworld.png b/graphics/pokemon/furfrou/heart_trim/overworld.png
new file mode 100644
index 000000000000..226b08ce7d8c
Binary files /dev/null and b/graphics/pokemon/furfrou/heart_trim/overworld.png differ
diff --git a/graphics/pokemon/furfrou/heart_trim/overworld_normal.pal b/graphics/pokemon/furfrou/heart_trim/overworld_normal.pal
new file mode 100644
index 000000000000..dda4559267dd
--- /dev/null
+++ b/graphics/pokemon/furfrou/heart_trim/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 211 165
+99 51 78
+88 88 88
+224 98 118
+177 175 160
+237 241 227
+16 16 16
+188 62 109
+119 118 115
+88 88 88
+91 134 247
+59 86 159
+188 4 0
+255 255 255
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/furfrou/heart_trim/overworld_shiny.pal b/graphics/pokemon/furfrou/heart_trim/overworld_shiny.pal
new file mode 100644
index 000000000000..9718218e1e1a
--- /dev/null
+++ b/graphics/pokemon/furfrou/heart_trim/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 211 165
+99 51 78
+50 48 48
+224 98 118
+88 88 88
+119 118 115
+16 16 16
+188 62 109
+237 241 227
+177 175 160
+91 134 247
+59 86 159
+188 4 0
+255 255 255
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/furfrou/kabuki_trim/overworld.png b/graphics/pokemon/furfrou/kabuki_trim/overworld.png
new file mode 100644
index 000000000000..97cf66d39fd3
Binary files /dev/null and b/graphics/pokemon/furfrou/kabuki_trim/overworld.png differ
diff --git a/graphics/pokemon/furfrou/kabuki_trim/overworld_normal.pal b/graphics/pokemon/furfrou/kabuki_trim/overworld_normal.pal
new file mode 100644
index 000000000000..b88fca160e69
--- /dev/null
+++ b/graphics/pokemon/furfrou/kabuki_trim/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 211 165
+50 48 48
+177 175 160
+237 241 227
+16 16 16
+99 32 31
+255 108 63
+201 52 49
+119 118 115
+91 134 247
+88 88 88
+59 86 159
+59 85 156
+237 241 227
+188 4 0
+0 0 0
diff --git a/graphics/pokemon/furfrou/kabuki_trim/overworld_shiny.pal b/graphics/pokemon/furfrou/kabuki_trim/overworld_shiny.pal
new file mode 100644
index 000000000000..ec0564b46385
--- /dev/null
+++ b/graphics/pokemon/furfrou/kabuki_trim/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 211 165
+50 48 48
+88 88 88
+119 118 115
+16 16 16
+99 32 31
+255 108 63
+201 52 49
+237 241 227
+91 134 247
+177 175 160
+59 86 159
+59 85 156
+255 255 255
+188 4 0
+0 0 0
diff --git a/graphics/pokemon/furfrou/la_reine_trim/overworld.png b/graphics/pokemon/furfrou/la_reine_trim/overworld.png
new file mode 100644
index 000000000000..79ab66d7fd06
Binary files /dev/null and b/graphics/pokemon/furfrou/la_reine_trim/overworld.png differ
diff --git a/graphics/pokemon/furfrou/la_reine_trim/overworld_normal.pal b/graphics/pokemon/furfrou/la_reine_trim/overworld_normal.pal
new file mode 100644
index 000000000000..d93d3a1acf4f
--- /dev/null
+++ b/graphics/pokemon/furfrou/la_reine_trim/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 211 165
+37 64 73
+50 48 48
+70 200 206
+177 175 160
+237 241 227
+16 16 16
+119 118 115
+23 128 149
+91 134 247
+59 86 159
+88 88 88
+119 118 115
+237 241 227
+188 4 0
+0 0 0
diff --git a/graphics/pokemon/furfrou/la_reine_trim/overworld_shiny.pal b/graphics/pokemon/furfrou/la_reine_trim/overworld_shiny.pal
new file mode 100644
index 000000000000..4a660b347f56
--- /dev/null
+++ b/graphics/pokemon/furfrou/la_reine_trim/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 211 165
+37 64 73
+50 48 48
+70 200 206
+88 88 88
+119 118 115
+16 16 16
+60 59 59
+23 128 149
+91 134 247
+59 86 159
+177 175 160
+237 241 227
+255 255 255
+188 4 0
+0 0 0
diff --git a/graphics/pokemon/furfrou/matron_trim/overworld.png b/graphics/pokemon/furfrou/matron_trim/overworld.png
new file mode 100644
index 000000000000..34ba857e57d7
Binary files /dev/null and b/graphics/pokemon/furfrou/matron_trim/overworld.png differ
diff --git a/graphics/pokemon/furfrou/matron_trim/overworld_normal.pal b/graphics/pokemon/furfrou/matron_trim/overworld_normal.pal
new file mode 100644
index 000000000000..ba544e822b82
--- /dev/null
+++ b/graphics/pokemon/furfrou/matron_trim/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 211 165
+88 88 88
+237 241 227
+181 107 211
+16 16 16
+177 175 160
+73 47 89
+136 62 182
+91 134 247
+88 88 88
+119 118 115
+237 241 227
+188 4 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/furfrou/matron_trim/overworld_shiny.pal b/graphics/pokemon/furfrou/matron_trim/overworld_shiny.pal
new file mode 100644
index 000000000000..617f8f6753c0
--- /dev/null
+++ b/graphics/pokemon/furfrou/matron_trim/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 211 165
+50 48 48
+119 118 115
+181 107 211
+16 16 16
+88 88 88
+73 47 89
+136 62 182
+91 134 247
+177 175 160
+237 241 227
+255 255 255
+188 4 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/furfrou/overworld.png b/graphics/pokemon/furfrou/overworld.png
new file mode 100644
index 000000000000..e0c16890f10d
Binary files /dev/null and b/graphics/pokemon/furfrou/overworld.png differ
diff --git a/graphics/pokemon/furfrou/overworld_normal.pal b/graphics/pokemon/furfrou/overworld_normal.pal
new file mode 100644
index 000000000000..d8ec8b9e10f1
--- /dev/null
+++ b/graphics/pokemon/furfrou/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+95 94 92
+16 16 16
+237 241 227
+177 175 160
+91 134 247
+95 94 92
+188 4 0
+230 238 248
+71 70 69
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/furfrou/overworld_shiny.pal b/graphics/pokemon/furfrou/overworld_shiny.pal
new file mode 100644
index 000000000000..7cc4146a1e7a
--- /dev/null
+++ b/graphics/pokemon/furfrou/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+54 53 53
+16 16 16
+112 111 110
+86 85 85
+91 134 247
+237 241 227
+188 4 0
+243 244 245
+177 175 160
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/furfrou/pharaoh_trim/overworld.png b/graphics/pokemon/furfrou/pharaoh_trim/overworld.png
new file mode 100644
index 000000000000..dc51c70e514f
Binary files /dev/null and b/graphics/pokemon/furfrou/pharaoh_trim/overworld.png differ
diff --git a/graphics/pokemon/furfrou/pharaoh_trim/overworld_normal.pal b/graphics/pokemon/furfrou/pharaoh_trim/overworld_normal.pal
new file mode 100644
index 000000000000..24d49d04c4bc
--- /dev/null
+++ b/graphics/pokemon/furfrou/pharaoh_trim/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 211 165
+50 48 48
+237 241 227
+177 175 160
+16 16 16
+34 50 102
+57 91 209
+91 134 247
+112 184 248
+88 88 88
+119 118 115
+237 241 227
+188 4 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/furfrou/pharaoh_trim/overworld_shiny.pal b/graphics/pokemon/furfrou/pharaoh_trim/overworld_shiny.pal
new file mode 100644
index 000000000000..bca12d7faac4
--- /dev/null
+++ b/graphics/pokemon/furfrou/pharaoh_trim/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 211 165
+50 48 48
+119 118 115
+88 88 88
+16 16 16
+34 50 102
+57 91 209
+91 134 247
+112 184 248
+177 175 160
+237 241 227
+255 255 255
+188 4 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/furfrou/star_trim/overworld.png b/graphics/pokemon/furfrou/star_trim/overworld.png
new file mode 100644
index 000000000000..09cd1a2e4097
Binary files /dev/null and b/graphics/pokemon/furfrou/star_trim/overworld.png differ
diff --git a/graphics/pokemon/furfrou/star_trim/overworld_normal.pal b/graphics/pokemon/furfrou/star_trim/overworld_normal.pal
new file mode 100644
index 000000000000..5814a041a682
--- /dev/null
+++ b/graphics/pokemon/furfrou/star_trim/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 211 165
+50 48 48
+237 241 227
+44 105 154
+177 175 160
+80 163 212
+16 16 16
+28 60 86
+119 118 115
+91 134 247
+88 88 88
+188 4 0
+237 241 227
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/furfrou/star_trim/overworld_shiny.pal b/graphics/pokemon/furfrou/star_trim/overworld_shiny.pal
new file mode 100644
index 000000000000..55b7e6f09c5b
--- /dev/null
+++ b/graphics/pokemon/furfrou/star_trim/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 211 165
+50 48 48
+119 118 115
+44 105 154
+88 88 88
+80 163 212
+16 16 16
+28 60 86
+237 241 227
+91 134 247
+177 175 160
+188 4 0
+255 255 255
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/furret/overworld.png b/graphics/pokemon/furret/overworld.png
new file mode 100644
index 000000000000..de8beb85169e
Binary files /dev/null and b/graphics/pokemon/furret/overworld.png differ
diff --git a/graphics/pokemon/furret/overworld_normal.pal b/graphics/pokemon/furret/overworld_normal.pal
new file mode 100644
index 000000000000..6c65763c63bb
--- /dev/null
+++ b/graphics/pokemon/furret/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+152 112 64
+88 56 24
+240 208 160
+208 176 112
+64 32 8
+112 80 48
+232 232 248
+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/furret/overworld_shiny.pal b/graphics/pokemon/furret/overworld_shiny.pal
new file mode 100644
index 000000000000..381f36fc75ca
--- /dev/null
+++ b/graphics/pokemon/furret/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+192 120 136
+80 16 80
+240 224 192
+232 200 152
+64 32 8
+144 72 80
+232 232 248
+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/gabite/overworld.png b/graphics/pokemon/gabite/overworld.png
new file mode 100644
index 000000000000..a0aa0c65279b
Binary files /dev/null and b/graphics/pokemon/gabite/overworld.png differ
diff --git a/graphics/pokemon/gabite/overworld_normal.pal b/graphics/pokemon/gabite/overworld_normal.pal
new file mode 100644
index 000000000000..47f6efaf92bb
--- /dev/null
+++ b/graphics/pokemon/gabite/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 48 96
+0 0 0
+80 112 184
+120 136 208
+176 176 232
+56 80 120
+104 144 192
+248 224 8
+200 152 8
+152 152 152
+128 48 16
+184 64 24
+232 232 248
+104 104 104
+0 0 0
diff --git a/graphics/pokemon/gabite/overworld_shiny.pal b/graphics/pokemon/gabite/overworld_shiny.pal
new file mode 100644
index 000000000000..b5a8192aa202
--- /dev/null
+++ b/graphics/pokemon/gabite/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 64 96
+0 0 0
+32 96 200
+120 136 208
+176 176 232
+40 80 144
+56 136 216
+248 224 8
+200 152 8
+152 152 152
+128 48 16
+184 64 24
+232 232 248
+104 104 104
+0 0 0
diff --git a/graphics/pokemon/gallade/overworld.png b/graphics/pokemon/gallade/overworld.png
new file mode 100644
index 000000000000..ead3234d1d17
Binary files /dev/null and b/graphics/pokemon/gallade/overworld.png differ
diff --git a/graphics/pokemon/gallade/overworld_normal.pal b/graphics/pokemon/gallade/overworld_normal.pal
new file mode 100644
index 000000000000..121745d5f33e
--- /dev/null
+++ b/graphics/pokemon/gallade/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+24 104 96
+0 0 0
+104 200 224
+24 184 200
+0 72 16
+24 144 48
+48 176 64
+8 104 24
+72 72 80
+232 232 248
+208 208 224
+184 48 72
+192 192 200
+136 136 152
+128 32 56
diff --git a/graphics/pokemon/gallade/overworld_shiny.pal b/graphics/pokemon/gallade/overworld_shiny.pal
new file mode 100644
index 000000000000..54ba329dd082
--- /dev/null
+++ b/graphics/pokemon/gallade/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+112 112 112
+0 0 0
+200 200 200
+152 208 160
+0 72 120
+32 144 192
+48 168 216
+16 112 160
+72 72 80
+232 232 248
+208 208 224
+224 128 40
+192 192 200
+136 136 152
+128 32 56
diff --git a/graphics/pokemon/galvantula/overworld.png b/graphics/pokemon/galvantula/overworld.png
new file mode 100644
index 000000000000..8e9eeb8e66a5
Binary files /dev/null and b/graphics/pokemon/galvantula/overworld.png differ
diff --git a/graphics/pokemon/galvantula/overworld_normal.pal b/graphics/pokemon/galvantula/overworld_normal.pal
new file mode 100644
index 000000000000..651f2c478a3e
--- /dev/null
+++ b/graphics/pokemon/galvantula/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+252 220 0
+36 48 92
+60 80 172
+16 16 16
+112 100 100
+200 176 64
+252 220 80
+104 88 0
+164 144 160
+0 0 0
+48 40 32
+232 232 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/galvantula/overworld_shiny.pal b/graphics/pokemon/galvantula/overworld_shiny.pal
new file mode 100644
index 000000000000..e3e49deac886
--- /dev/null
+++ b/graphics/pokemon/galvantula/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 82
+16 65 98
+24 41 65
+65 74 74
+238 164 0
+255 213 82
+106 57 57
+98 106 98
+0 0 0
+0 0 0
+180 180 238
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/garbodor/overworld.png b/graphics/pokemon/garbodor/overworld.png
new file mode 100644
index 000000000000..66b437edaae3
Binary files /dev/null and b/graphics/pokemon/garbodor/overworld.png differ
diff --git a/graphics/pokemon/garbodor/overworld_normal.pal b/graphics/pokemon/garbodor/overworld_normal.pal
new file mode 100644
index 000000000000..7ab2233f4560
--- /dev/null
+++ b/graphics/pokemon/garbodor/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 39 35
+164 139 115
+90 74 65
+0 0 0
+123 106 90
+103 118 172
+24 57 41
+115 115 115
+188 187 188
+41 106 74
+24 74 49
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/garbodor/overworld_shiny.pal b/graphics/pokemon/garbodor/overworld_shiny.pal
new file mode 100644
index 000000000000..a80760629d4d
--- /dev/null
+++ b/graphics/pokemon/garbodor/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 33 30
+157 152 146
+80 72 71
+0 0 0
+107 107 102
+141 186 84
+16 64 72
+107 107 102
+157 152 146
+40 160 160
+16 120 120
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/garchomp/overworld.png b/graphics/pokemon/garchomp/overworld.png
new file mode 100644
index 000000000000..2a6a93bd54a4
Binary files /dev/null and b/graphics/pokemon/garchomp/overworld.png differ
diff --git a/graphics/pokemon/garchomp/overworld_normal.pal b/graphics/pokemon/garchomp/overworld_normal.pal
new file mode 100644
index 000000000000..ec2e1d504e31
--- /dev/null
+++ b/graphics/pokemon/garchomp/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+96 112 160
+72 80 120
+48 48 80
+120 152 200
+248 224 8
+192 152 0
+128 48 16
+104 104 104
+168 168 168
+232 232 248
+200 200 208
+184 64 24
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/garchomp/overworld_shiny.pal b/graphics/pokemon/garchomp/overworld_shiny.pal
new file mode 100644
index 000000000000..1855aa765800
--- /dev/null
+++ b/graphics/pokemon/garchomp/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+56 88 112
+48 72 88
+32 48 56
+72 112 136
+248 224 8
+192 152 0
+128 48 16
+104 104 104
+152 152 152
+232 232 248
+200 200 208
+184 64 24
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/gardevoir/overworld.png b/graphics/pokemon/gardevoir/overworld.png
new file mode 100644
index 000000000000..d09e002a8be4
Binary files /dev/null and b/graphics/pokemon/gardevoir/overworld.png differ
diff --git a/graphics/pokemon/gardevoir/overworld_normal.pal b/graphics/pokemon/gardevoir/overworld_normal.pal
new file mode 100644
index 000000000000..3b82b2d5c8b4
--- /dev/null
+++ b/graphics/pokemon/gardevoir/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+0 0 0
+40 128 56
+72 176 88
+16 64 32
+104 200 128
+72 72 80
+232 232 248
+128 128 144
+200 200 216
+168 168 176
+184 48 72
+240 104 104
+128 32 56
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/gardevoir/overworld_shiny.pal b/graphics/pokemon/gardevoir/overworld_shiny.pal
new file mode 100644
index 000000000000..21ce10171773
--- /dev/null
+++ b/graphics/pokemon/gardevoir/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+32 144 120
+88 200 176
+16 96 120
+160 224 200
+88 88 64
+232 232 248
+128 128 112
+208 208 184
+168 168 144
+208 104 64
+240 160 72
+128 80 56
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/garganacl/back.png b/graphics/pokemon/garganacl/back.png
index d8590c6ce0bb..09b120f72f07 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 416f535b353f..d983a91346f4 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 2acd11e3b932..da3c63de41b4 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/shiny.pal b/graphics/pokemon/garganacl/shiny.pal
index 0b0979dd27c5..ea99f676a17c 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
new file mode 100644
index 000000000000..4df5a7740ca6
Binary files /dev/null and b/graphics/pokemon/gastly/overworld.png differ
diff --git a/graphics/pokemon/gastly/overworld_normal.pal b/graphics/pokemon/gastly/overworld_normal.pal
new file mode 100644
index 000000000000..e4e4f4b6db96
--- /dev/null
+++ b/graphics/pokemon/gastly/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+112 88 152
+136 112 160
+80 56 104
+40 40 56
+56 56 56
+72 72 72
+0 0 0
+184 184 184
+232 232 248
+136 136 136
+64 16 56
+152 8 64
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/gastly/overworld_shiny.pal b/graphics/pokemon/gastly/overworld_shiny.pal
new file mode 100644
index 000000000000..154bd818a3ed
--- /dev/null
+++ b/graphics/pokemon/gastly/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 128 208
+112 176 248
+56 64 120
+56 16 56
+64 32 64
+88 48 88
+0 0 0
+184 184 184
+232 232 248
+136 136 136
+64 16 56
+152 8 64
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/gastrodon/east_sea/overworld.png b/graphics/pokemon/gastrodon/east_sea/overworld.png
new file mode 100644
index 000000000000..038846ad45f0
Binary files /dev/null and b/graphics/pokemon/gastrodon/east_sea/overworld.png differ
diff --git a/graphics/pokemon/gastrodon/east_sea/overworld_normal.pal b/graphics/pokemon/gastrodon/east_sea/overworld_normal.pal
new file mode 100644
index 000000000000..34392afb93b9
--- /dev/null
+++ b/graphics/pokemon/gastrodon/east_sea/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 210 164
+48 80 48
+0 0 0
+200 160 0
+88 160 64
+48 48 48
+248 208 88
+56 120 40
+184 184 200
+64 184 232
+48 112 128
+40 152 184
+144 120 48
+32 72 72
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/gastrodon/east_sea/overworld_shiny.pal b/graphics/pokemon/gastrodon/east_sea/overworld_shiny.pal
new file mode 100644
index 000000000000..9269b3503a36
--- /dev/null
+++ b/graphics/pokemon/gastrodon/east_sea/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 210 164
+80 80 48
+0 0 0
+200 160 0
+152 184 40
+48 48 48
+248 208 88
+96 136 0
+184 184 200
+152 224 248
+8 160 200
+104 192 224
+144 120 48
+32 72 72
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/gastrodon/overworld.png b/graphics/pokemon/gastrodon/overworld.png
new file mode 100644
index 000000000000..3d67e41b61a4
Binary files /dev/null and b/graphics/pokemon/gastrodon/overworld.png differ
diff --git a/graphics/pokemon/gastrodon/overworld_normal.pal b/graphics/pokemon/gastrodon/overworld_normal.pal
new file mode 100644
index 000000000000..2e367aa8c290
--- /dev/null
+++ b/graphics/pokemon/gastrodon/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 48 40
+48 48 48
+200 160 0
+160 104 64
+112 72 56
+0 0 0
+248 208 88
+184 184 200
+232 152 216
+152 96 128
+144 120 48
+200 120 168
+80 40 88
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/gastrodon/overworld_shiny.pal b/graphics/pokemon/gastrodon/overworld_shiny.pal
new file mode 100644
index 000000000000..d493e9aa1cef
--- /dev/null
+++ b/graphics/pokemon/gastrodon/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 80 40
+48 48 48
+200 160 0
+160 144 64
+112 104 56
+0 0 0
+248 208 88
+184 184 200
+232 168 160
+152 80 64
+144 120 48
+200 120 104
+96 24 64
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/genesect/overworld.png b/graphics/pokemon/genesect/overworld.png
new file mode 100644
index 000000000000..ed29dd09d0f5
Binary files /dev/null and b/graphics/pokemon/genesect/overworld.png differ
diff --git a/graphics/pokemon/genesect/overworld_normal.pal b/graphics/pokemon/genesect/overworld_normal.pal
new file mode 100644
index 000000000000..c01dbd0a2fb1
--- /dev/null
+++ b/graphics/pokemon/genesect/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+71 33 63
+104 55 129
+147 79 191
+199 172 255
+11 11 11
+155 121 182
+240 228 0
+206 196 0
+0 0 0
+104 40 33
+229 229 247
+245 71 25
+172 55 25
+104 104 104
+223 237 142
diff --git a/graphics/pokemon/genesect/overworld_shiny.pal b/graphics/pokemon/genesect/overworld_shiny.pal
new file mode 100644
index 000000000000..c6f59d674d17
--- /dev/null
+++ b/graphics/pokemon/genesect/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 32 24
+144 48 40
+208 64 72
+71 33 63
+248 176 200
+11 11 11
+184 120 144
+232 184 0
+192 128 0
+0 0 0
+104 40 33
+229 229 247
+168 168 184
+88 88 112
+104 104 104
diff --git a/graphics/pokemon/gengar/overworld.png b/graphics/pokemon/gengar/overworld.png
new file mode 100644
index 000000000000..514d080e1cc4
Binary files /dev/null and b/graphics/pokemon/gengar/overworld.png differ
diff --git a/graphics/pokemon/gengar/overworld_normal.pal b/graphics/pokemon/gengar/overworld_normal.pal
new file mode 100644
index 000000000000..5450ef839ca0
--- /dev/null
+++ b/graphics/pokemon/gengar/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 40 56
+0 0 0
+144 120 160
+104 80 128
+80 56 104
+216 96 96
+248 168 160
+152 152 152
+96 96 96
+184 184 184
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/gengar/overworld_shiny.pal b/graphics/pokemon/gengar/overworld_shiny.pal
new file mode 100644
index 000000000000..b0bf73361671
--- /dev/null
+++ b/graphics/pokemon/gengar/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 64 72
+0 0 0
+144 144 160
+120 112 128
+96 88 120
+216 144 136
+248 192 184
+152 152 152
+96 96 96
+184 184 184
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/geodude/alolan/overworld.png b/graphics/pokemon/geodude/alolan/overworld.png
new file mode 100644
index 000000000000..9897707a297c
Binary files /dev/null and b/graphics/pokemon/geodude/alolan/overworld.png differ
diff --git a/graphics/pokemon/geodude/alolan/overworld_normal.pal b/graphics/pokemon/geodude/alolan/overworld_normal.pal
new file mode 100644
index 000000000000..bea7c262fa2b
--- /dev/null
+++ b/graphics/pokemon/geodude/alolan/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+51 47 47
+74 101 112
+0 0 0
+173 185 198
+119 134 150
+46 64 71
+99 102 105
+55 59 61
+232 232 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/geodude/alolan/overworld_shiny.pal b/graphics/pokemon/geodude/alolan/overworld_shiny.pal
new file mode 100644
index 000000000000..7d1d0a50e07b
--- /dev/null
+++ b/graphics/pokemon/geodude/alolan/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+51 47 47
+74 101 112
+0 0 0
+248 184 56
+208 136 56
+80 56 16
+99 102 105
+55 59 61
+232 232 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/geodude/overworld.png b/graphics/pokemon/geodude/overworld.png
new file mode 100644
index 000000000000..b3410ecca1fe
Binary files /dev/null and b/graphics/pokemon/geodude/overworld.png differ
diff --git a/graphics/pokemon/geodude/overworld_normal.pal b/graphics/pokemon/geodude/overworld_normal.pal
new file mode 100644
index 000000000000..94158f3e268b
--- /dev/null
+++ b/graphics/pokemon/geodude/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 48 32
+0 0 0
+184 168 128
+120 112 96
+232 232 248
+0 0 0
+0 0 0
+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/geodude/overworld_shiny.pal b/graphics/pokemon/geodude/overworld_shiny.pal
new file mode 100644
index 000000000000..c548276f7b2f
--- /dev/null
+++ b/graphics/pokemon/geodude/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 56 16
+0 0 0
+248 184 56
+208 136 56
+232 232 248
+0 0 0
+0 0 0
+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/gible/overworld.png b/graphics/pokemon/gible/overworld.png
new file mode 100644
index 000000000000..05c3846855e2
Binary files /dev/null and b/graphics/pokemon/gible/overworld.png differ
diff --git a/graphics/pokemon/gible/overworld_normal.pal b/graphics/pokemon/gible/overworld_normal.pal
new file mode 100644
index 000000000000..224ec1fb0bb2
--- /dev/null
+++ b/graphics/pokemon/gible/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+32 40 48
+104 168 168
+48 88 88
+80 136 136
+112 168 184
+136 192 216
+0 0 0
+152 152 152
+56 56 56
+224 224 224
+184 64 24
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/gible/overworld_shiny.pal b/graphics/pokemon/gible/overworld_shiny.pal
new file mode 100644
index 000000000000..c8af4ae6e74a
--- /dev/null
+++ b/graphics/pokemon/gible/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 64 88
+64 176 200
+24 88 144
+40 144 176
+112 168 184
+136 192 216
+0 0 0
+152 152 152
+56 56 56
+224 224 224
+184 152 24
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/gigalith/overworld.png b/graphics/pokemon/gigalith/overworld.png
new file mode 100644
index 000000000000..8e5b2b7b3532
Binary files /dev/null and b/graphics/pokemon/gigalith/overworld.png differ
diff --git a/graphics/pokemon/gigalith/overworld_normal.pal b/graphics/pokemon/gigalith/overworld_normal.pal
new file mode 100644
index 000000000000..54840537bacd
--- /dev/null
+++ b/graphics/pokemon/gigalith/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+95 25 25
+236 104 104
+147 40 40
+33 47 95
+227 40 40
+55 71 129
+25 33 55
+25 33 55
+0 0 0
+164 121 18
+218 182 79
+32 46 85
+25 25 33
+54 61 77
+0 0 0
diff --git a/graphics/pokemon/gigalith/overworld_shiny.pal b/graphics/pokemon/gigalith/overworld_shiny.pal
new file mode 100644
index 000000000000..5b24f52b1447
--- /dev/null
+++ b/graphics/pokemon/gigalith/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+32 64 72
+176 248 248
+40 120 152
+64 40 104
+16 200 192
+88 64 136
+25 33 55
+40 16 64
+0 0 0
+168 96 32
+248 120 32
+32 46 85
+25 25 33
+54 61 77
+0 0 0
diff --git a/graphics/pokemon/girafarig/overworld.png b/graphics/pokemon/girafarig/overworld.png
new file mode 100644
index 000000000000..8c9402494e2d
Binary files /dev/null and b/graphics/pokemon/girafarig/overworld.png differ
diff --git a/graphics/pokemon/girafarig/overworld_normal.pal b/graphics/pokemon/girafarig/overworld_normal.pal
new file mode 100644
index 000000000000..4050cdf2873c
--- /dev/null
+++ b/graphics/pokemon/girafarig/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 80 88
+0 0 0
+232 232 248
+160 176 200
+96 112 152
+104 80 56
+72 48 16
+200 160 80
+248 208 96
+152 120 80
+184 80 104
+56 112 160
+232 112 184
+32 64 120
+40 48 56
diff --git a/graphics/pokemon/girafarig/overworld_shiny.pal b/graphics/pokemon/girafarig/overworld_shiny.pal
new file mode 100644
index 000000000000..8ea6ebaac1a3
--- /dev/null
+++ b/graphics/pokemon/girafarig/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 80 88
+0 0 0
+232 232 248
+160 176 200
+96 112 152
+136 96 56
+72 48 16
+216 160 56
+248 200 80
+176 112 80
+0 136 192
+56 112 160
+24 184 248
+32 64 120
+40 48 56
diff --git a/graphics/pokemon/giratina/origin/overworld.png b/graphics/pokemon/giratina/origin/overworld.png
new file mode 100644
index 000000000000..a4de07e1cf22
Binary files /dev/null and b/graphics/pokemon/giratina/origin/overworld.png differ
diff --git a/graphics/pokemon/giratina/origin/overworld_normal.pal b/graphics/pokemon/giratina/origin/overworld_normal.pal
new file mode 100644
index 000000000000..c05ed66c48e5
--- /dev/null
+++ b/graphics/pokemon/giratina/origin/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+96 80 16
+40 40 40
+248 248 208
+176 152 24
+56 56 56
+240 80 64
+168 48 64
+232 208 24
+184 184 184
+144 144 144
+80 80 80
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/giratina/origin/overworld_shiny.pal b/graphics/pokemon/giratina/origin/overworld_shiny.pal
new file mode 100644
index 000000000000..560f34aaf5a8
--- /dev/null
+++ b/graphics/pokemon/giratina/origin/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+80 80 80
+40 40 40
+248 248 208
+144 144 144
+56 48 24
+16 184 192
+8 112 120
+184 184 184
+248 224 96
+200 144 48
+112 96 16
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/giratina/overworld.png b/graphics/pokemon/giratina/overworld.png
new file mode 100644
index 000000000000..8caa512dc119
Binary files /dev/null and b/graphics/pokemon/giratina/overworld.png differ
diff --git a/graphics/pokemon/giratina/overworld_normal.pal b/graphics/pokemon/giratina/overworld_normal.pal
new file mode 100644
index 000000000000..7d21338a8b4b
--- /dev/null
+++ b/graphics/pokemon/giratina/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 40 40
+56 64 64
+104 96 24
+232 208 24
+16 16 16
+176 152 24
+248 248 208
+136 136 168
+168 176 200
+240 80 64
+168 48 64
+88 88 112
+112 112 144
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/giratina/overworld_shiny.pal b/graphics/pokemon/giratina/overworld_shiny.pal
new file mode 100644
index 000000000000..4e7f9da3449e
--- /dev/null
+++ b/graphics/pokemon/giratina/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 40 40
+56 64 64
+96 104 128
+200 200 208
+16 16 16
+168 168 184
+248 248 208
+224 200 48
+248 240 136
+16 184 192
+8 112 120
+160 128 24
+192 160 24
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/glaceon/overworld.png b/graphics/pokemon/glaceon/overworld.png
new file mode 100644
index 000000000000..84100e04d074
Binary files /dev/null and b/graphics/pokemon/glaceon/overworld.png differ
diff --git a/graphics/pokemon/glaceon/overworld_normal.pal b/graphics/pokemon/glaceon/overworld_normal.pal
new file mode 100644
index 000000000000..6280c829b6ad
--- /dev/null
+++ b/graphics/pokemon/glaceon/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 64 80
+0 0 0
+32 104 104
+80 184 216
+24 96 112
+48 152 176
+40 152 168
+136 224 232
+176 232 248
+112 200 224
+48 144 136
+208 224 232
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/glaceon/overworld_shiny.pal b/graphics/pokemon/glaceon/overworld_shiny.pal
new file mode 100644
index 000000000000..50db4a295b40
--- /dev/null
+++ b/graphics/pokemon/glaceon/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 64 80
+0 0 0
+56 152 144
+160 216 232
+56 136 152
+64 192 216
+136 200 208
+192 240 240
+208 240 248
+112 200 224
+64 192 176
+208 224 232
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/glalie/overworld.png b/graphics/pokemon/glalie/overworld.png
new file mode 100644
index 000000000000..3ce1fda91ed2
Binary files /dev/null and b/graphics/pokemon/glalie/overworld.png differ
diff --git a/graphics/pokemon/glalie/overworld_normal.pal b/graphics/pokemon/glalie/overworld_normal.pal
new file mode 100644
index 000000000000..7784213a6dc6
--- /dev/null
+++ b/graphics/pokemon/glalie/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+56 56 72
+40 40 56
+80 80 96
+152 160 176
+112 120 136
+192 200 216
+40 128 192
+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/glalie/overworld_shiny.pal b/graphics/pokemon/glalie/overworld_shiny.pal
new file mode 100644
index 000000000000..a02592dd4d99
--- /dev/null
+++ b/graphics/pokemon/glalie/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+56 64 80
+40 48 64
+80 88 104
+152 168 184
+112 128 144
+192 208 224
+208 48 32
+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/glameow/overworld.png b/graphics/pokemon/glameow/overworld.png
new file mode 100644
index 000000000000..5c305aec9085
Binary files /dev/null and b/graphics/pokemon/glameow/overworld.png differ
diff --git a/graphics/pokemon/glameow/overworld_normal.pal b/graphics/pokemon/glameow/overworld_normal.pal
new file mode 100644
index 000000000000..1358d05bff57
--- /dev/null
+++ b/graphics/pokemon/glameow/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 48 48
+192 192 192
+0 0 0
+232 232 248
+128 128 128
+112 112 112
+152 152 152
+176 56 104
+208 96 176
+16 32 104
+224 152 40
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/glameow/overworld_shiny.pal b/graphics/pokemon/glameow/overworld_shiny.pal
new file mode 100644
index 000000000000..5406a32b48b1
--- /dev/null
+++ b/graphics/pokemon/glameow/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 48 48
+192 192 192
+0 0 0
+232 232 248
+128 128 128
+112 72 88
+168 120 144
+176 56 104
+208 96 176
+16 32 104
+224 152 40
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/glastrier/overworld.png b/graphics/pokemon/glastrier/overworld.png
new file mode 100644
index 000000000000..44bd656b6764
Binary files /dev/null and b/graphics/pokemon/glastrier/overworld.png differ
diff --git a/graphics/pokemon/glastrier/overworld_normal.pal b/graphics/pokemon/glastrier/overworld_normal.pal
new file mode 100644
index 000000000000..1c1d0e7162c3
--- /dev/null
+++ b/graphics/pokemon/glastrier/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 88 80
+168 224 240
+168 168 192
+16 16 16
+248 248 248
+0 40 88
+192 200 200
+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/glastrier/overworld_shiny.pal b/graphics/pokemon/glastrier/overworld_shiny.pal
new file mode 100644
index 000000000000..e45960848df3
--- /dev/null
+++ b/graphics/pokemon/glastrier/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+65 82 98
+197 197 255
+148 156 213
+0 0 0
+246 246 246
+49 49 49
+189 189 189
+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/gligar/overworld.png b/graphics/pokemon/gligar/overworld.png
new file mode 100644
index 000000000000..50f94601f185
Binary files /dev/null and b/graphics/pokemon/gligar/overworld.png differ
diff --git a/graphics/pokemon/gligar/overworld_normal.pal b/graphics/pokemon/gligar/overworld_normal.pal
new file mode 100644
index 000000000000..afbe559d8a5d
--- /dev/null
+++ b/graphics/pokemon/gligar/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 40 96
+200 112 176
+0 0 0
+240 192 216
+224 152 208
+160 88 136
+232 232 248
+0 56 88
+40 144 168
+16 96 128
+200 208 216
+136 32 56
+176 72 120
+208 104 152
+0 0 0
diff --git a/graphics/pokemon/gligar/overworld_shiny.pal b/graphics/pokemon/gligar/overworld_shiny.pal
new file mode 100644
index 000000000000..63e0e8afd30d
--- /dev/null
+++ b/graphics/pokemon/gligar/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+8 48 112
+128 160 216
+0 0 0
+176 232 248
+152 192 232
+80 112 208
+232 232 248
+24 56 128
+96 128 224
+56 112 184
+200 208 216
+136 32 56
+176 72 120
+208 104 152
+0 0 0
diff --git a/graphics/pokemon/gliscor/overworld.png b/graphics/pokemon/gliscor/overworld.png
new file mode 100644
index 000000000000..397301fa3f31
Binary files /dev/null and b/graphics/pokemon/gliscor/overworld.png differ
diff --git a/graphics/pokemon/gliscor/overworld_normal.pal b/graphics/pokemon/gliscor/overworld_normal.pal
new file mode 100644
index 000000000000..e04040ea2313
--- /dev/null
+++ b/graphics/pokemon/gliscor/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+32 40 88
+152 168 224
+168 40 24
+136 136 208
+120 24 16
+32 32 32
+248 216 56
+144 112 0
+96 96 112
+64 64 64
+168 168 168
+104 32 80
+96 96 96
+0 0 0
diff --git a/graphics/pokemon/gliscor/overworld_shiny.pal b/graphics/pokemon/gliscor/overworld_shiny.pal
new file mode 100644
index 000000000000..45cb85b28f68
--- /dev/null
+++ b/graphics/pokemon/gliscor/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+32 64 88
+128 200 248
+248 216 56
+48 144 200
+200 176 0
+32 32 32
+248 216 56
+144 112 0
+72 104 120
+32 32 32
+152 208 160
+104 32 80
+56 56 56
+0 0 0
diff --git a/graphics/pokemon/gloom/overworld.png b/graphics/pokemon/gloom/overworld.png
new file mode 100644
index 000000000000..349429731a0a
Binary files /dev/null and b/graphics/pokemon/gloom/overworld.png differ
diff --git a/graphics/pokemon/gloom/overworld_normal.pal b/graphics/pokemon/gloom/overworld_normal.pal
new file mode 100644
index 000000000000..d519e23b1ca8
--- /dev/null
+++ b/graphics/pokemon/gloom/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+120 32 16
+168 80 16
+0 0 0
+168 48 72
+216 96 112
+216 144 144
+248 112 24
+48 80 112
+32 56 104
+64 112 152
+80 40 128
+168 168 168
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/gloom/overworld_shiny.pal b/graphics/pokemon/gloom/overworld_shiny.pal
new file mode 100644
index 000000000000..1bef80553895
--- /dev/null
+++ b/graphics/pokemon/gloom/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 64 24
+168 128 16
+0 0 0
+136 80 16
+192 112 24
+216 144 144
+248 160 24
+88 128 64
+32 72 40
+160 184 48
+160 96 24
+208 208 208
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/gogoat/overworld.png b/graphics/pokemon/gogoat/overworld.png
new file mode 100644
index 000000000000..2043a6150784
Binary files /dev/null and b/graphics/pokemon/gogoat/overworld.png differ
diff --git a/graphics/pokemon/gogoat/overworld_normal.pal b/graphics/pokemon/gogoat/overworld_normal.pal
new file mode 100644
index 000000000000..450b906627bc
--- /dev/null
+++ b/graphics/pokemon/gogoat/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+10 68 43
+1 146 83
+71 51 28
+16 16 16
+151 151 151
+139 94 42
+250 251 253
+99 99 99
+55 55 55
+5 111 65
+233 89 75
+188 159 124
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/gogoat/overworld_shiny.pal b/graphics/pokemon/gogoat/overworld_shiny.pal
new file mode 100644
index 000000000000..06829425dce4
--- /dev/null
+++ b/graphics/pokemon/gogoat/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+126 155 52
+185 226 67
+47 38 34
+16 16 16
+254 215 81
+63 53 48
+250 251 253
+184 160 62
+129 111 40
+5 111 65
+233 89 75
+81 70 64
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/golbat/overworld.png b/graphics/pokemon/golbat/overworld.png
new file mode 100644
index 000000000000..9ec0ecc2d8e7
Binary files /dev/null and b/graphics/pokemon/golbat/overworld.png differ
diff --git a/graphics/pokemon/golbat/overworld_normal.pal b/graphics/pokemon/golbat/overworld_normal.pal
new file mode 100644
index 000000000000..cd9ef090691d
--- /dev/null
+++ b/graphics/pokemon/golbat/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 56 64
+64 112 120
+80 184 176
+0 0 0
+96 64 128
+56 24 88
+136 96 184
+72 144 152
+232 232 248
+184 184 192
+56 56 80
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/golbat/overworld_shiny.pal b/graphics/pokemon/golbat/overworld_shiny.pal
new file mode 100644
index 000000000000..ebc603b29b89
--- /dev/null
+++ b/graphics/pokemon/golbat/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 56 24
+96 120 56
+160 184 88
+0 0 0
+184 112 136
+144 88 88
+216 144 184
+128 152 72
+232 232 248
+184 184 192
+64 64 64
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/goldeen/overworld.png b/graphics/pokemon/goldeen/overworld.png
new file mode 100644
index 000000000000..a8f8ac58a30f
Binary files /dev/null and b/graphics/pokemon/goldeen/overworld.png differ
diff --git a/graphics/pokemon/goldeen/overworld_normal.pal b/graphics/pokemon/goldeen/overworld_normal.pal
new file mode 100644
index 000000000000..98c9aeb76f44
--- /dev/null
+++ b/graphics/pokemon/goldeen/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 80 80
+232 232 248
+0 0 0
+248 232 160
+176 176 176
+232 72 32
+216 160 80
+160 32 16
+96 16 0
+200 88 120
+240 128 160
+40 128 112
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/goldeen/overworld_shiny.pal b/graphics/pokemon/goldeen/overworld_shiny.pal
new file mode 100644
index 000000000000..a3932f12c40c
--- /dev/null
+++ b/graphics/pokemon/goldeen/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 80 80
+232 232 248
+0 0 0
+248 232 160
+176 176 176
+248 168 32
+216 160 80
+216 120 16
+192 72 0
+200 88 120
+240 128 160
+40 128 112
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/golduck/overworld.png b/graphics/pokemon/golduck/overworld.png
new file mode 100644
index 000000000000..4eccae74c417
Binary files /dev/null and b/graphics/pokemon/golduck/overworld.png differ
diff --git a/graphics/pokemon/golduck/overworld_normal.pal b/graphics/pokemon/golduck/overworld_normal.pal
new file mode 100644
index 000000000000..ffe266945036
--- /dev/null
+++ b/graphics/pokemon/golduck/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 56 80
+120 160 248
+80 120 168
+0 0 0
+240 48 112
+232 232 248
+176 176 208
+248 232 136
+200 184 64
+88 16 32
+248 192 80
+64 64 64
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/golduck/overworld_shiny.pal b/graphics/pokemon/golduck/overworld_shiny.pal
new file mode 100644
index 000000000000..fa8c9b31c522
--- /dev/null
+++ b/graphics/pokemon/golduck/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 56 80
+88 184 248
+40 136 168
+0 0 0
+240 48 112
+232 232 248
+176 176 208
+248 192 200
+200 120 128
+88 16 32
+224 168 176
+64 64 64
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/golem/alolan/overworld.png b/graphics/pokemon/golem/alolan/overworld.png
new file mode 100644
index 000000000000..d5d950f84dd5
Binary files /dev/null and b/graphics/pokemon/golem/alolan/overworld.png differ
diff --git a/graphics/pokemon/golem/alolan/overworld_normal.pal b/graphics/pokemon/golem/alolan/overworld_normal.pal
new file mode 100644
index 000000000000..a0d2c141a38b
--- /dev/null
+++ b/graphics/pokemon/golem/alolan/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+82 99 107
+43 68 77
+226 191 84
+24 37 41
+48 48 48
+157 168 157
+130 138 130
+89 96 89
+131 121 112
+168 157 147
+103 96 88
+192 192 192
+104 16 24
+232 232 248
diff --git a/graphics/pokemon/golem/alolan/overworld_shiny.pal b/graphics/pokemon/golem/alolan/overworld_shiny.pal
new file mode 100644
index 000000000000..6207cd3977af
--- /dev/null
+++ b/graphics/pokemon/golem/alolan/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+82 99 107
+43 68 77
+226 191 84
+24 37 41
+49 40 20
+163 126 64
+131 82 61
+90 62 30
+184 138 128
+208 169 160
+103 96 88
+192 192 192
+104 16 24
+232 232 248
diff --git a/graphics/pokemon/golem/overworld.png b/graphics/pokemon/golem/overworld.png
new file mode 100644
index 000000000000..9400d2d42926
Binary files /dev/null and b/graphics/pokemon/golem/overworld.png differ
diff --git a/graphics/pokemon/golem/overworld_normal.pal b/graphics/pokemon/golem/overworld_normal.pal
new file mode 100644
index 000000000000..d05008296afd
--- /dev/null
+++ b/graphics/pokemon/golem/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 48 48
+0 0 0
+160 144 104
+120 112 80
+88 80 56
+144 112 96
+192 152 120
+112 88 72
+192 192 192
+232 232 248
+160 160 160
+104 16 24
+152 152 152
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/golem/overworld_shiny.pal b/graphics/pokemon/golem/overworld_shiny.pal
new file mode 100644
index 000000000000..6bba9477df56
--- /dev/null
+++ b/graphics/pokemon/golem/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 40 24
+0 0 0
+160 128 80
+128 88 72
+88 64 40
+184 128 128
+208 160 160
+128 88 80
+192 192 192
+232 232 248
+160 160 160
+104 16 24
+152 152 152
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/golett/overworld.png b/graphics/pokemon/golett/overworld.png
new file mode 100644
index 000000000000..7a393c8b265a
Binary files /dev/null and b/graphics/pokemon/golett/overworld.png differ
diff --git a/graphics/pokemon/golett/overworld_normal.pal b/graphics/pokemon/golett/overworld_normal.pal
new file mode 100644
index 000000000000..2ace7bf7eab1
--- /dev/null
+++ b/graphics/pokemon/golett/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+32 32 64
+128 192 192
+0 0 0
+96 160 192
+32 96 128
+0 64 64
+224 224 128
+32 128 128
+160 128 64
+18 25 32
+0 64 64
+46 54 69
+192 160 64
+128 192 192
+0 0 0
diff --git a/graphics/pokemon/golett/overworld_shiny.pal b/graphics/pokemon/golett/overworld_shiny.pal
new file mode 100644
index 000000000000..2ec1b5742be8
--- /dev/null
+++ b/graphics/pokemon/golett/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 210 164
+32 32 64
+144 184 184
+0 0 0
+104 152 144
+40 56 64
+64 72 88
+208 248 64
+32 128 128
+160 128 64
+18 25 32
+0 64 64
+46 54 69
+192 160 64
+128 192 192
+0 0 0
diff --git a/graphics/pokemon/golisopod/overworld.png b/graphics/pokemon/golisopod/overworld.png
new file mode 100644
index 000000000000..8415b0b75fbb
Binary files /dev/null and b/graphics/pokemon/golisopod/overworld.png differ
diff --git a/graphics/pokemon/golisopod/overworld_normal.pal b/graphics/pokemon/golisopod/overworld_normal.pal
new file mode 100644
index 000000000000..78d579d20cc7
--- /dev/null
+++ b/graphics/pokemon/golisopod/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+157 203 179
+145 189 166
+112 180 146
+161 130 162
+83 145 147
+112 92 121
+177 87 165
+112 84 113
+43 79 80
+138 66 131
+74 74 74
+67 33 63
+32 57 58
+25 25 25
+0 0 0
diff --git a/graphics/pokemon/golisopod/overworld_shiny.pal b/graphics/pokemon/golisopod/overworld_shiny.pal
new file mode 100644
index 000000000000..9a4c65e3ace5
--- /dev/null
+++ b/graphics/pokemon/golisopod/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+232 232 232
+168 160 168
+168 160 168
+168 160 168
+32 152 208
+112 92 121
+248 40 40
+112 84 113
+88 80 88
+120 0 0
+74 74 74
+67 33 63
+32 57 58
+25 25 25
+0 0 0
diff --git a/graphics/pokemon/golurk/overworld.png b/graphics/pokemon/golurk/overworld.png
new file mode 100644
index 000000000000..7aeb780b5be5
Binary files /dev/null and b/graphics/pokemon/golurk/overworld.png differ
diff --git a/graphics/pokemon/golurk/overworld_normal.pal b/graphics/pokemon/golurk/overworld_normal.pal
new file mode 100644
index 000000000000..ed3e86a69287
--- /dev/null
+++ b/graphics/pokemon/golurk/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+25 25 54
+41 123 139
+44 122 140
+131 197 205
+132 198 204
+90 164 164
+255 238 164
+189 172 115
+92 166 164
+156 115 41
+197 156 82
+32 32 64
+24 90 123
+96 160 192
diff --git a/graphics/pokemon/golurk/overworld_shiny.pal b/graphics/pokemon/golurk/overworld_shiny.pal
new file mode 100644
index 000000000000..80eb88b78db5
--- /dev/null
+++ b/graphics/pokemon/golurk/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+25 25 54
+64 72 88
+64 72 88
+160 184 184
+120 136 136
+120 136 136
+168 248 64
+189 172 115
+120 136 136
+136 104 56
+176 144 96
+32 32 64
+64 72 88
+96 160 192
diff --git a/graphics/pokemon/goodra/hisuian/overworld.png b/graphics/pokemon/goodra/hisuian/overworld.png
new file mode 100644
index 000000000000..5bc1d200c897
Binary files /dev/null and b/graphics/pokemon/goodra/hisuian/overworld.png differ
diff --git a/graphics/pokemon/goodra/hisuian/overworld_normal.pal b/graphics/pokemon/goodra/hisuian/overworld_normal.pal
new file mode 100644
index 000000000000..f2bf5d8a84e0
--- /dev/null
+++ b/graphics/pokemon/goodra/hisuian/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+74 41 90
+16 16 16
+189 148 213
+222 205 230
+0 0 0
+131 131 131
+172 172 172
+255 255 255
+164 82 197
+106 106 106
+106 82 115
+65 65 65
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/goodra/hisuian/overworld_shiny.pal b/graphics/pokemon/goodra/hisuian/overworld_shiny.pal
new file mode 100644
index 000000000000..70ff17dbc3c4
--- /dev/null
+++ b/graphics/pokemon/goodra/hisuian/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+74 41 90
+16 16 16
+189 148 213
+222 205 230
+0 0 0
+172 115 41
+205 172 82
+255 255 255
+164 82 197
+156 106 41
+106 82 115
+115 74 24
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/goodra/overworld.png b/graphics/pokemon/goodra/overworld.png
new file mode 100644
index 000000000000..7a218e5ec29d
Binary files /dev/null and b/graphics/pokemon/goodra/overworld.png differ
diff --git a/graphics/pokemon/goodra/overworld_normal.pal b/graphics/pokemon/goodra/overworld_normal.pal
new file mode 100644
index 000000000000..d77971c86742
--- /dev/null
+++ b/graphics/pokemon/goodra/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+73 42 88
+190 147 214
+218 207 228
+16 16 16
+249 254 255
+46 188 78
+34 106 46
+162 87 199
+104 83 115
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/goodra/overworld_shiny.pal b/graphics/pokemon/goodra/overworld_shiny.pal
new file mode 100644
index 000000000000..59e42b34e7a5
--- /dev/null
+++ b/graphics/pokemon/goodra/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+140 131 69
+215 213 142
+255 255 193
+16 16 16
+249 254 255
+167 164 205
+128 125 167
+254 194 176
+203 152 137
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/goomy/overworld.png b/graphics/pokemon/goomy/overworld.png
new file mode 100644
index 000000000000..a5088f4c2f60
Binary files /dev/null and b/graphics/pokemon/goomy/overworld.png differ
diff --git a/graphics/pokemon/goomy/overworld_normal.pal b/graphics/pokemon/goomy/overworld_normal.pal
new file mode 100644
index 000000000000..e9c570611099
--- /dev/null
+++ b/graphics/pokemon/goomy/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+223 207 241
+76 63 75
+174 163 181
+87 135 79
+118 195 107
+128 80 125
+163 113 160
+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/goomy/overworld_shiny.pal b/graphics/pokemon/goomy/overworld_shiny.pal
new file mode 100644
index 000000000000..a88611d164fd
--- /dev/null
+++ b/graphics/pokemon/goomy/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+255 230 156
+141 116 43
+210 184 108
+70 96 196
+105 131 230
+207 127 127
+255 172 172
+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/gorebyss/overworld.png b/graphics/pokemon/gorebyss/overworld.png
new file mode 100644
index 000000000000..7b405894dd03
Binary files /dev/null and b/graphics/pokemon/gorebyss/overworld.png differ
diff --git a/graphics/pokemon/gorebyss/overworld_normal.pal b/graphics/pokemon/gorebyss/overworld_normal.pal
new file mode 100644
index 000000000000..2afabc7b9196
--- /dev/null
+++ b/graphics/pokemon/gorebyss/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 56 128
+168 152 240
+0 0 0
+144 128 216
+120 104 184
+136 32 72
+216 120 136
+232 144 160
+184 80 96
+200 88 112
+48 48 64
+152 168 200
+96 104 128
+232 232 248
+208 216 232
diff --git a/graphics/pokemon/gorebyss/overworld_shiny.pal b/graphics/pokemon/gorebyss/overworld_shiny.pal
new file mode 100644
index 000000000000..c94d7b42f3f0
--- /dev/null
+++ b/graphics/pokemon/gorebyss/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 56 128
+168 152 240
+0 0 0
+144 128 216
+120 104 184
+136 96 0
+248 192 8
+224 216 136
+216 152 0
+232 168 0
+48 48 64
+152 168 200
+96 104 128
+232 232 248
+208 216 232
diff --git a/graphics/pokemon/gossifleur/overworld.png b/graphics/pokemon/gossifleur/overworld.png
new file mode 100644
index 000000000000..1ca072254f55
Binary files /dev/null and b/graphics/pokemon/gossifleur/overworld.png differ
diff --git a/graphics/pokemon/gossifleur/overworld_normal.pal b/graphics/pokemon/gossifleur/overworld_normal.pal
new file mode 100644
index 000000000000..528908056120
--- /dev/null
+++ b/graphics/pokemon/gossifleur/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+193 170 7
+249 227 91
+0 0 0
+248 221 46
+238 209 9
+248 237 152
+223 196 8
+153 56 31
+215 95 65
+192 71 40
+90 167 123
+85 72 55
+64 118 88
+130 187 155
+160 202 179
diff --git a/graphics/pokemon/gossifleur/overworld_shiny.pal b/graphics/pokemon/gossifleur/overworld_shiny.pal
new file mode 100644
index 000000000000..4e47e232ddb3
--- /dev/null
+++ b/graphics/pokemon/gossifleur/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+148 65 90
+230 131 164
+0 0 0
+197 106 131
+172 82 106
+246 246 246
+172 82 106
+74 106 106
+189 230 230
+123 172 180
+74 172 106
+82 74 49
+49 123 74
+115 222 156
+148 238 180
diff --git a/graphics/pokemon/gothita/overworld.png b/graphics/pokemon/gothita/overworld.png
new file mode 100644
index 000000000000..0aebbc3d5f11
Binary files /dev/null and b/graphics/pokemon/gothita/overworld.png differ
diff --git a/graphics/pokemon/gothita/overworld_normal.pal b/graphics/pokemon/gothita/overworld_normal.pal
new file mode 100644
index 000000000000..ffa296562455
--- /dev/null
+++ b/graphics/pokemon/gothita/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 48 48
+24 24 24
+64 64 64
+112 112 112
+0 0 0
+88 48 72
+248 248 248
+200 136 184
+176 176 176
+144 104 128
+56 160 248
+120 72 64
+8 72 136
+248 104 72
+0 0 0
diff --git a/graphics/pokemon/gothita/overworld_shiny.pal b/graphics/pokemon/gothita/overworld_shiny.pal
new file mode 100644
index 000000000000..4d2e69d492e0
--- /dev/null
+++ b/graphics/pokemon/gothita/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+32 32 48
+24 24 24
+64 64 88
+112 112 112
+0 0 0
+88 48 72
+248 248 248
+200 136 160
+176 176 176
+144 104 112
+120 16 112
+120 72 64
+48 24 48
+248 104 72
+0 0 0
diff --git a/graphics/pokemon/gothitelle/overworld.png b/graphics/pokemon/gothitelle/overworld.png
new file mode 100644
index 000000000000..49ddc3ff3768
Binary files /dev/null and b/graphics/pokemon/gothitelle/overworld.png differ
diff --git a/graphics/pokemon/gothitelle/overworld_normal.pal b/graphics/pokemon/gothitelle/overworld_normal.pal
new file mode 100644
index 000000000000..93328cc89669
--- /dev/null
+++ b/graphics/pokemon/gothitelle/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+24 24 24
+80 80 80
+176 167 172
+222 205 228
+40 40 40
+112 110 110
+48 48 48
+32 116 192
+182 93 102
+64 64 64
+48 24 32
+84 49 71
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/gothitelle/overworld_shiny.pal b/graphics/pokemon/gothitelle/overworld_shiny.pal
new file mode 100644
index 000000000000..a2329df97597
--- /dev/null
+++ b/graphics/pokemon/gothitelle/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+32 32 48
+64 64 112
+205 192 203
+205 192 203
+40 40 71
+111 110 110
+32 32 48
+64 64 112
+182 104 97
+40 40 71
+48 24 32
+88 48 72
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/gothorita/overworld.png b/graphics/pokemon/gothorita/overworld.png
new file mode 100644
index 000000000000..0d0cbd90c2b2
Binary files /dev/null and b/graphics/pokemon/gothorita/overworld.png differ
diff --git a/graphics/pokemon/gothorita/overworld_normal.pal b/graphics/pokemon/gothorita/overworld_normal.pal
new file mode 100644
index 000000000000..3e2888379c44
--- /dev/null
+++ b/graphics/pokemon/gothorita/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+176 176 176
+233 233 246
+24 24 24
+112 111 110
+64 64 64
+40 40 40
+88 48 72
+144 104 128
+200 136 184
+148 109 127
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/gothorita/overworld_shiny.pal b/graphics/pokemon/gothorita/overworld_shiny.pal
new file mode 100644
index 000000000000..ff2c016b78f9
--- /dev/null
+++ b/graphics/pokemon/gothorita/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+176 176 176
+233 233 246
+24 24 24
+112 111 110
+64 64 88
+34 34 45
+88 48 72
+200 136 176
+178 80 140
+48 24 48
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/gourgeist/overworld.png b/graphics/pokemon/gourgeist/overworld.png
new file mode 100644
index 000000000000..f2184b2cfc56
Binary files /dev/null and b/graphics/pokemon/gourgeist/overworld.png differ
diff --git a/graphics/pokemon/gourgeist/overworld_normal.pal b/graphics/pokemon/gourgeist/overworld_normal.pal
new file mode 100644
index 000000000000..3039d5410f13
--- /dev/null
+++ b/graphics/pokemon/gourgeist/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 210 164
+51 34 24
+101 85 61
+16 16 16
+96 18 21
+224 91 78
+151 47 51
+248 147 112
+170 108 79
+255 211 37
+245 236 155
+176 132 64
+72 54 38
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/gourgeist/overworld_shiny.pal b/graphics/pokemon/gourgeist/overworld_shiny.pal
new file mode 100644
index 000000000000..02ecd8afdf67
--- /dev/null
+++ b/graphics/pokemon/gourgeist/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 210 164
+21 21 21
+71 71 71
+16 16 16
+72 35 96
+156 91 196
+118 65 151
+187 121 215
+169 146 101
+210 171 98
+253 220 121
+217 188 133
+39 39 40
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/granbull/overworld.png b/graphics/pokemon/granbull/overworld.png
new file mode 100644
index 000000000000..9bb9eab7b7d1
Binary files /dev/null and b/graphics/pokemon/granbull/overworld.png differ
diff --git a/graphics/pokemon/granbull/overworld_normal.pal b/graphics/pokemon/granbull/overworld_normal.pal
new file mode 100644
index 000000000000..20c73cebbce9
--- /dev/null
+++ b/graphics/pokemon/granbull/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 64 104
+224 184 240
+0 0 0
+192 144 208
+128 88 136
+232 232 248
+96 120 136
+160 112 168
+48 64 80
+176 192 208
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/granbull/overworld_shiny.pal b/graphics/pokemon/granbull/overworld_shiny.pal
new file mode 100644
index 000000000000..e79344702586
--- /dev/null
+++ b/graphics/pokemon/granbull/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 80 80
+216 208 176
+0 0 0
+192 168 152
+120 112 120
+232 232 248
+96 120 136
+144 136 144
+48 64 80
+176 192 208
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/grapploct/overworld.png b/graphics/pokemon/grapploct/overworld.png
new file mode 100644
index 000000000000..d271bcacbca5
Binary files /dev/null and b/graphics/pokemon/grapploct/overworld.png differ
diff --git a/graphics/pokemon/grapploct/overworld_normal.pal b/graphics/pokemon/grapploct/overworld_normal.pal
new file mode 100644
index 000000000000..1c202d904618
--- /dev/null
+++ b/graphics/pokemon/grapploct/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 221 1
+1 10 25
+0 51 134
+1 72 188
+45 118 237
+0 0 0
+168 204 33
+15 13 23
+233 231 23
+194 192 21
+62 56 92
+32 28 49
+112 198 224
+255 255 255
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/grapploct/overworld_shiny.pal b/graphics/pokemon/grapploct/overworld_shiny.pal
new file mode 100644
index 000000000000..17f80b3e3b78
--- /dev/null
+++ b/graphics/pokemon/grapploct/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+74 16 16
+156 24 24
+205 41 41
+246 82 82
+0 0 0
+255 189 65
+65 65 65
+238 230 16
+197 197 16
+230 230 230
+189 189 189
+115 197 230
+255 255 255
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/graveler/alolan/overworld.png b/graphics/pokemon/graveler/alolan/overworld.png
new file mode 100644
index 000000000000..7ff3687da6b7
Binary files /dev/null and b/graphics/pokemon/graveler/alolan/overworld.png differ
diff --git a/graphics/pokemon/graveler/alolan/overworld_normal.pal b/graphics/pokemon/graveler/alolan/overworld_normal.pal
new file mode 100644
index 000000000000..64ef5263be0d
--- /dev/null
+++ b/graphics/pokemon/graveler/alolan/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+55 63 80
+0 0 0
+167 175 175
+118 127 127
+51 47 47
+85 91 91
+70 86 95
+140 148 148
+250 216 80
+232 232 248
+168 168 176
+176 80 104
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/graveler/alolan/overworld_shiny.pal b/graphics/pokemon/graveler/alolan/overworld_shiny.pal
new file mode 100644
index 000000000000..d46824bee3a1
--- /dev/null
+++ b/graphics/pokemon/graveler/alolan/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 32 8
+0 0 0
+200 123 48
+152 74 48
+51 47 47
+112 60 24
+70 86 95
+176 95 48
+250 216 80
+232 232 248
+168 168 176
+176 80 104
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/graveler/overworld.png b/graphics/pokemon/graveler/overworld.png
new file mode 100644
index 000000000000..41ce30ae1b01
Binary files /dev/null and b/graphics/pokemon/graveler/overworld.png differ
diff --git a/graphics/pokemon/graveler/overworld_normal.pal b/graphics/pokemon/graveler/overworld_normal.pal
new file mode 100644
index 000000000000..e9b28a20d689
--- /dev/null
+++ b/graphics/pokemon/graveler/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 48 48
+0 0 0
+184 168 128
+120 112 96
+80 72 64
+144 136 104
+232 232 248
+168 168 176
+176 80 104
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/graveler/overworld_shiny.pal b/graphics/pokemon/graveler/overworld_shiny.pal
new file mode 100644
index 000000000000..7a75636b5af9
--- /dev/null
+++ b/graphics/pokemon/graveler/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 40 8
+0 0 0
+200 144 48
+152 88 48
+112 72 24
+176 112 48
+232 232 248
+168 168 176
+176 80 104
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/greedent/overworld.png b/graphics/pokemon/greedent/overworld.png
new file mode 100644
index 000000000000..b4b99bda523f
Binary files /dev/null and b/graphics/pokemon/greedent/overworld.png differ
diff --git a/graphics/pokemon/greedent/overworld_normal.pal b/graphics/pokemon/greedent/overworld_normal.pal
new file mode 100644
index 000000000000..48df51552b37
--- /dev/null
+++ b/graphics/pokemon/greedent/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 221 1
+56 35 33
+187 135 124
+0 0 0
+155 102 94
+218 170 160
+25 16 15
+97 63 61
+124 75 71
+226 145 83
+255 255 255
+255 173 109
+239 239 239
+199 199 199
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/greedent/overworld_shiny.pal b/graphics/pokemon/greedent/overworld_shiny.pal
new file mode 100644
index 000000000000..923380d2fda0
--- /dev/null
+++ b/graphics/pokemon/greedent/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 221 1
+57 49 41
+222 189 164
+0 0 0
+189 156 131
+246 222 197
+90 49 57
+139 82 90
+180 106 123
+230 148 82
+255 255 255
+255 172 106
+238 238 238
+197 197 197
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/greninja/overworld.png b/graphics/pokemon/greninja/overworld.png
new file mode 100644
index 000000000000..bb08608ca5b8
Binary files /dev/null and b/graphics/pokemon/greninja/overworld.png differ
diff --git a/graphics/pokemon/greninja/overworld_normal.pal b/graphics/pokemon/greninja/overworld_normal.pal
new file mode 100644
index 000000000000..33fe49de2b56
--- /dev/null
+++ b/graphics/pokemon/greninja/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+46 58 91
+95 55 74
+20 20 20
+220 212 133
+234 152 208
+72 95 157
+245 103 190
+115 151 212
+136 186 226
+184 152 83
+176 97 134
+222 231 235
+233 85 88
+241 174 219
+128 85 41
diff --git a/graphics/pokemon/greninja/overworld_shiny.pal b/graphics/pokemon/greninja/overworld_shiny.pal
new file mode 100644
index 000000000000..48e25a2ce11f
--- /dev/null
+++ b/graphics/pokemon/greninja/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+20 24 25
+92 22 25
+20 20 20
+81 94 95
+255 139 136
+29 38 41
+232 57 65
+38 50 54
+136 186 226
+59 70 71
+118 35 38
+222 231 235
+233 85 88
+44 51 52
+180 180 180
diff --git a/graphics/pokemon/grimer/alolan/overworld.png b/graphics/pokemon/grimer/alolan/overworld.png
new file mode 100644
index 000000000000..b0e3140c9e1f
Binary files /dev/null and b/graphics/pokemon/grimer/alolan/overworld.png differ
diff --git a/graphics/pokemon/grimer/alolan/overworld_normal.pal b/graphics/pokemon/grimer/alolan/overworld_normal.pal
new file mode 100644
index 000000000000..4dcf5f24a18a
--- /dev/null
+++ b/graphics/pokemon/grimer/alolan/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+48 74 45
+116 180 117
+187 222 169
+102 142 91
+232 232 248
+109 147 98
+0 0 0
+74 114 69
+64 56 64
+114 145 106
+240 228 0
+77 111 156
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/grimer/alolan/overworld_shiny.pal b/graphics/pokemon/grimer/alolan/overworld_shiny.pal
new file mode 100644
index 000000000000..388abadd7db8
--- /dev/null
+++ b/graphics/pokemon/grimer/alolan/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+64 56 64
+176 144 184
+200 176 216
+120 96 152
+232 232 248
+128 104 136
+0 0 0
+104 80 120
+64 56 64
+99 79 105
+240 228 0
+77 111 156
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/grimer/overworld.png b/graphics/pokemon/grimer/overworld.png
new file mode 100644
index 000000000000..a8639d44669a
Binary files /dev/null and b/graphics/pokemon/grimer/overworld.png differ
diff --git a/graphics/pokemon/grimer/overworld_normal.pal b/graphics/pokemon/grimer/overworld_normal.pal
new file mode 100644
index 000000000000..c80dd2ef0c8d
--- /dev/null
+++ b/graphics/pokemon/grimer/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 56 64
+176 144 184
+200 176 216
+120 96 152
+232 232 248
+128 104 136
+0 0 0
+104 80 120
+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/grimer/overworld_shiny.pal b/graphics/pokemon/grimer/overworld_shiny.pal
new file mode 100644
index 000000000000..f886e1cd8973
--- /dev/null
+++ b/graphics/pokemon/grimer/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 80 64
+168 184 136
+184 200 160
+128 160 56
+232 232 248
+128 136 112
+0 0 0
+96 112 32
+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/grimmsnarl/overworld.png b/graphics/pokemon/grimmsnarl/overworld.png
new file mode 100644
index 000000000000..06f6b343882b
Binary files /dev/null and b/graphics/pokemon/grimmsnarl/overworld.png differ
diff --git a/graphics/pokemon/grimmsnarl/overworld_normal.pal b/graphics/pokemon/grimmsnarl/overworld_normal.pal
new file mode 100644
index 000000000000..0b4921558a7f
--- /dev/null
+++ b/graphics/pokemon/grimmsnarl/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 228 252
+0 40 24
+28 28 48
+40 40 40
+60 60 96
+76 76 76
+200 36 92
+236 52 68
+232 64 120
+4 4 4
+0 148 92
+136 252 36
+152 252 68
+0 204 128
+220 220 220
+252 252 252
diff --git a/graphics/pokemon/grimmsnarl/overworld_shiny.pal b/graphics/pokemon/grimmsnarl/overworld_shiny.pal
new file mode 100644
index 000000000000..babd54aac98a
--- /dev/null
+++ b/graphics/pokemon/grimmsnarl/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+41 24 41
+148 148 148
+82 82 82
+213 213 213
+123 123 123
+0 115 148
+238 49 65
+0 148 189
+0 0 0
+115 57 98
+0 0 0
+0 0 0
+156 90 148
+222 222 222
+255 255 255
diff --git a/graphics/pokemon/grookey/overworld.png b/graphics/pokemon/grookey/overworld.png
new file mode 100644
index 000000000000..2fb83529569e
Binary files /dev/null and b/graphics/pokemon/grookey/overworld.png differ
diff --git a/graphics/pokemon/grookey/overworld_normal.pal b/graphics/pokemon/grookey/overworld_normal.pal
new file mode 100644
index 000000000000..555241f84bb0
--- /dev/null
+++ b/graphics/pokemon/grookey/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+252 0 244
+108 56 20
+68 44 24
+112 76 40
+68 96 40
+148 88 48
+208 104 48
+216 124 72
+96 140 60
+0 0 0
+112 160 72
+136 184 96
+220 140 100
+232 216 124
+160 200 128
+252 252 252
diff --git a/graphics/pokemon/grookey/overworld_shiny.pal b/graphics/pokemon/grookey/overworld_shiny.pal
new file mode 100644
index 000000000000..b53bc34b0b5d
--- /dev/null
+++ b/graphics/pokemon/grookey/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+131 57 8
+57 8 16
+131 41 57
+106 106 24
+156 57 74
+230 106 24
+222 123 74
+172 172 49
+0 0 0
+213 213 82
+246 246 115
+230 106 24
+246 238 197
+255 255 156
+255 255 255
diff --git a/graphics/pokemon/grotle/overworld.png b/graphics/pokemon/grotle/overworld.png
new file mode 100644
index 000000000000..d040992350c6
Binary files /dev/null and b/graphics/pokemon/grotle/overworld.png differ
diff --git a/graphics/pokemon/grotle/overworld_normal.pal b/graphics/pokemon/grotle/overworld_normal.pal
new file mode 100644
index 000000000000..78c07db4d5e0
--- /dev/null
+++ b/graphics/pokemon/grotle/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 80 56
+0 0 0
+128 200 48
+64 160 48
+72 72 72
+152 112 56
+200 144 24
+224 184 40
+80 72 56
+104 88 72
+96 176 80
+160 224 112
+168 176 200
+232 232 248
+0 0 0
diff --git a/graphics/pokemon/grotle/overworld_shiny.pal b/graphics/pokemon/grotle/overworld_shiny.pal
new file mode 100644
index 000000000000..5b61202b19cf
--- /dev/null
+++ b/graphics/pokemon/grotle/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+120 96 56
+0 0 0
+184 200 48
+144 160 48
+72 72 72
+80 152 104
+96 176 120
+144 224 168
+56 72 88
+72 120 96
+200 160 24
+224 192 40
+168 176 200
+232 232 248
+0 0 0
diff --git a/graphics/pokemon/groudon/overworld.png b/graphics/pokemon/groudon/overworld.png
new file mode 100644
index 000000000000..0520115d2dfc
Binary files /dev/null and b/graphics/pokemon/groudon/overworld.png differ
diff --git a/graphics/pokemon/groudon/overworld_normal.pal b/graphics/pokemon/groudon/overworld_normal.pal
new file mode 100644
index 000000000000..5ebdf0d5967d
--- /dev/null
+++ b/graphics/pokemon/groudon/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+88 16 8
+136 24 16
+216 72 64
+176 32 32
+56 64 80
+32 40 56
+144 152 176
+232 232 248
+128 112 24
+184 200 216
+208 192 48
+96 104 120
+120 128 144
+72 80 96
diff --git a/graphics/pokemon/groudon/overworld_shiny.pal b/graphics/pokemon/groudon/overworld_shiny.pal
new file mode 100644
index 000000000000..18430c35e5a7
--- /dev/null
+++ b/graphics/pokemon/groudon/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+104 104 16
+152 144 32
+240 240 80
+200 192 40
+56 64 80
+32 40 56
+144 152 176
+232 232 248
+128 112 24
+184 200 216
+208 192 48
+96 104 120
+120 128 144
+72 80 96
diff --git a/graphics/pokemon/grovyle/overworld.png b/graphics/pokemon/grovyle/overworld.png
new file mode 100644
index 000000000000..3b25fd5c5b09
Binary files /dev/null and b/graphics/pokemon/grovyle/overworld.png differ
diff --git a/graphics/pokemon/grovyle/overworld_normal.pal b/graphics/pokemon/grovyle/overworld_normal.pal
new file mode 100644
index 000000000000..526c5f392a3e
--- /dev/null
+++ b/graphics/pokemon/grovyle/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+200 128 216
+0 0 0
+96 152 72
+8 56 48
+56 120 64
+64 104 40
+152 200 120
+40 56 16
+112 152 72
+248 216 88
+104 24 24
+152 40 40
+184 48 48
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/grovyle/overworld_shiny.pal b/graphics/pokemon/grovyle/overworld_shiny.pal
new file mode 100644
index 000000000000..9c84147b17ed
--- /dev/null
+++ b/graphics/pokemon/grovyle/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+200 128 216
+0 0 0
+208 96 48
+104 24 24
+176 72 32
+72 120 64
+184 232 216
+24 48 56
+128 176 144
+248 216 88
+160 112 40
+192 152 80
+224 192 128
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/growlithe/hisuian/overworld.png b/graphics/pokemon/growlithe/hisuian/overworld.png
new file mode 100644
index 000000000000..f9cb0ef6cca6
Binary files /dev/null and b/graphics/pokemon/growlithe/hisuian/overworld.png differ
diff --git a/graphics/pokemon/growlithe/hisuian/overworld_normal.pal b/graphics/pokemon/growlithe/hisuian/overworld_normal.pal
new file mode 100644
index 000000000000..70c37011656e
--- /dev/null
+++ b/graphics/pokemon/growlithe/hisuian/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+230 82 57
+180 49 24
+41 41 49
+139 57 41
+156 123 115
+90 65 57
+98 24 24
+197 180 172
+180 148 98
+148 74 32
+230 205 172
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/growlithe/hisuian/overworld_shiny.pal b/graphics/pokemon/growlithe/hisuian/overworld_shiny.pal
new file mode 100644
index 000000000000..a3b8d19a42ee
--- /dev/null
+++ b/graphics/pokemon/growlithe/hisuian/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+230 205 65
+205 180 57
+41 41 49
+139 57 41
+156 123 115
+90 65 57
+139 123 24
+197 180 172
+180 148 98
+148 74 32
+230 205 172
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/growlithe/overworld.png b/graphics/pokemon/growlithe/overworld.png
new file mode 100644
index 000000000000..76265d168742
Binary files /dev/null and b/graphics/pokemon/growlithe/overworld.png differ
diff --git a/graphics/pokemon/growlithe/overworld_normal.pal b/graphics/pokemon/growlithe/overworld_normal.pal
new file mode 100644
index 000000000000..8c0ab3d8bc3e
--- /dev/null
+++ b/graphics/pokemon/growlithe/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 48 24
+224 192 144
+200 152 80
+0 0 0
+232 120 72
+144 72 32
+184 80 24
+136 88 40
+176 176 208
+88 88 88
+232 232 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/growlithe/overworld_shiny.pal b/graphics/pokemon/growlithe/overworld_shiny.pal
new file mode 100644
index 000000000000..0745fb2a999f
--- /dev/null
+++ b/graphics/pokemon/growlithe/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 64 24
+224 192 144
+200 152 80
+0 0 0
+232 192 72
+128 104 40
+168 136 48
+136 88 40
+176 176 208
+88 88 88
+232 232 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/grubbin/overworld.png b/graphics/pokemon/grubbin/overworld.png
new file mode 100644
index 000000000000..d4d41084cdfa
Binary files /dev/null and b/graphics/pokemon/grubbin/overworld.png differ
diff --git a/graphics/pokemon/grubbin/overworld_normal.pal b/graphics/pokemon/grubbin/overworld_normal.pal
new file mode 100644
index 000000000000..3d0e980cd471
--- /dev/null
+++ b/graphics/pokemon/grubbin/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+224 224 208
+248 208 96
+173 171 161
+207 143 43
+169 111 65
+248 96 88
+213 75 73
+182 57 58
+94 93 88
+68 68 64
+87 58 33
+16 16 16
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/grubbin/overworld_shiny.pal b/graphics/pokemon/grubbin/overworld_shiny.pal
new file mode 100644
index 000000000000..cc957019c642
--- /dev/null
+++ b/graphics/pokemon/grubbin/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+224 224 208
+232 128 104
+173 171 161
+192 64 40
+169 111 65
+192 64 40
+213 75 73
+182 57 58
+94 93 88
+68 68 64
+128 128 128
+16 16 16
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/grumpig/overworld.png b/graphics/pokemon/grumpig/overworld.png
new file mode 100644
index 000000000000..650792871150
Binary files /dev/null and b/graphics/pokemon/grumpig/overworld.png differ
diff --git a/graphics/pokemon/grumpig/overworld_normal.pal b/graphics/pokemon/grumpig/overworld_normal.pal
new file mode 100644
index 000000000000..b79dbb1b9b34
--- /dev/null
+++ b/graphics/pokemon/grumpig/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 56 64
+16 16 16
+112 120 120
+80 40 104
+72 80 88
+144 48 96
+192 120 224
+104 24 64
+152 88 184
+120 64 144
+224 96 160
+192 192 192
+248 248 248
+184 72 128
+136 72 168
diff --git a/graphics/pokemon/grumpig/overworld_shiny.pal b/graphics/pokemon/grumpig/overworld_shiny.pal
new file mode 100644
index 000000000000..cfc56b11d14a
--- /dev/null
+++ b/graphics/pokemon/grumpig/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 56 64
+16 16 16
+112 120 120
+96 80 0
+72 80 88
+144 48 96
+248 184 80
+104 24 64
+216 160 56
+136 104 16
+224 96 160
+192 192 192
+248 248 248
+184 72 128
+176 128 40
diff --git a/graphics/pokemon/gulpin/overworld.png b/graphics/pokemon/gulpin/overworld.png
new file mode 100644
index 000000000000..41fe6631fb7c
Binary files /dev/null and b/graphics/pokemon/gulpin/overworld.png differ
diff --git a/graphics/pokemon/gulpin/overworld_normal.pal b/graphics/pokemon/gulpin/overworld_normal.pal
new file mode 100644
index 000000000000..0fa22dcbab05
--- /dev/null
+++ b/graphics/pokemon/gulpin/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+112 88 40
+0 0 0
+232 184 64
+56 96 16
+168 128 56
+32 48 16
+104 152 64
+136 192 112
+72 88 96
+80 120 40
+56 72 80
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/gulpin/overworld_shiny.pal b/graphics/pokemon/gulpin/overworld_shiny.pal
new file mode 100644
index 000000000000..346c4d6a4070
--- /dev/null
+++ b/graphics/pokemon/gulpin/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+112 48 40
+0 0 0
+232 136 64
+80 112 152
+192 104 48
+64 80 96
+96 176 224
+144 200 232
+72 88 96
+40 136 208
+56 72 80
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/gumshoos/overworld.png b/graphics/pokemon/gumshoos/overworld.png
new file mode 100644
index 000000000000..483c405e17d0
Binary files /dev/null and b/graphics/pokemon/gumshoos/overworld.png differ
diff --git a/graphics/pokemon/gumshoos/overworld_normal.pal b/graphics/pokemon/gumshoos/overworld_normal.pal
new file mode 100644
index 000000000000..26be101007fe
--- /dev/null
+++ b/graphics/pokemon/gumshoos/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+232 232 248
+239 215 129
+151 170 177
+171 153 92
+169 136 104
+162 119 59
+138 105 84
+227 101 142
+206 60 94
+128 95 41
+98 73 59
+102 56 51
+78 95 105
+74 49 46
+16 16 16
diff --git a/graphics/pokemon/gumshoos/overworld_shiny.pal b/graphics/pokemon/gumshoos/overworld_shiny.pal
new file mode 100644
index 000000000000..1e22a9077961
--- /dev/null
+++ b/graphics/pokemon/gumshoos/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+232 232 248
+224 120 168
+151 170 177
+200 72 104
+184 96 88
+200 72 104
+152 64 56
+227 101 142
+206 60 94
+136 48 72
+98 73 59
+102 56 51
+224 224 224
+74 49 46
+16 16 16
diff --git a/graphics/pokemon/gurdurr/overworld.png b/graphics/pokemon/gurdurr/overworld.png
new file mode 100644
index 000000000000..a2b8aabbfa70
Binary files /dev/null and b/graphics/pokemon/gurdurr/overworld.png differ
diff --git a/graphics/pokemon/gurdurr/overworld_normal.pal b/graphics/pokemon/gurdurr/overworld_normal.pal
new file mode 100644
index 000000000000..1219c452c470
--- /dev/null
+++ b/graphics/pokemon/gurdurr/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+94 32 47
+207 63 74
+7 7 7
+191 182 164
+146 129 121
+47 47 40
+147 63 121
+104 40 71
+200 95 172
+229 229 247
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/gurdurr/overworld_shiny.pal b/graphics/pokemon/gurdurr/overworld_shiny.pal
new file mode 100644
index 000000000000..09b2dfe70ca6
--- /dev/null
+++ b/graphics/pokemon/gurdurr/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 210 164
+82 32 47
+136 40 51
+180 68 48
+7 7 7
+208 192 128
+174 151 96
+47 47 40
+224 80 69
+104 40 71
+229 229 247
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/guzzlord/overworld.png b/graphics/pokemon/guzzlord/overworld.png
new file mode 100644
index 000000000000..f8e2dd5fe50a
Binary files /dev/null and b/graphics/pokemon/guzzlord/overworld.png differ
diff --git a/graphics/pokemon/guzzlord/overworld_normal.pal b/graphics/pokemon/guzzlord/overworld_normal.pal
new file mode 100644
index 000000000000..d3f8d62b682a
--- /dev/null
+++ b/graphics/pokemon/guzzlord/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+253 209 72
+178 240 255
+56 162 200
+191 143 55
+82 87 101
+30 91 114
+69 73 85
+59 63 70
+42 45 50
+43 37 30
+29 31 37
+18 20 23
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/guzzlord/overworld_shiny.pal b/graphics/pokemon/guzzlord/overworld_shiny.pal
new file mode 100644
index 000000000000..9e0be85beff0
--- /dev/null
+++ b/graphics/pokemon/guzzlord/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+232 96 24
+178 240 255
+56 162 200
+168 64 16
+232 232 232
+30 91 114
+227 227 227
+176 168 168
+62 65 70
+43 37 30
+29 31 37
+18 20 23
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/gyarados/overworld.png b/graphics/pokemon/gyarados/overworld.png
new file mode 100644
index 000000000000..7c0400b1e5b7
Binary files /dev/null and b/graphics/pokemon/gyarados/overworld.png differ
diff --git a/graphics/pokemon/gyarados/overworld_normal.pal b/graphics/pokemon/gyarados/overworld_normal.pal
new file mode 100644
index 000000000000..fca7fbe01ac5
--- /dev/null
+++ b/graphics/pokemon/gyarados/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+48 56 80
+232 232 248
+192 192 208
+72 176 224
+136 144 144
+40 128 128
+64 120 152
+248 200 104
+176 136 48
+32 96 128
+136 0 24
+136 96 32
+184 64 104
+216 112 152
diff --git a/graphics/pokemon/gyarados/overworld_shiny.pal b/graphics/pokemon/gyarados/overworld_shiny.pal
new file mode 100644
index 000000000000..8c0963eef73e
--- /dev/null
+++ b/graphics/pokemon/gyarados/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+104 0 0
+232 232 248
+216 216 224
+248 64 40
+176 144 120
+200 40 80
+200 24 0
+248 200 104
+176 136 48
+160 0 8
+136 0 24
+136 96 32
+184 64 104
+216 112 152
diff --git a/graphics/pokemon/hakamo_o/overworld.png b/graphics/pokemon/hakamo_o/overworld.png
new file mode 100644
index 000000000000..86dfd2238c0e
Binary files /dev/null and b/graphics/pokemon/hakamo_o/overworld.png differ
diff --git a/graphics/pokemon/hakamo_o/overworld_normal.pal b/graphics/pokemon/hakamo_o/overworld_normal.pal
new file mode 100644
index 000000000000..12daadf35dff
--- /dev/null
+++ b/graphics/pokemon/hakamo_o/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+16 16 16
+223 167 69
+244 234 84
+94 73 36
+69 68 67
+124 122 110
+188 187 176
+244 241 240
+227 70 59
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/hakamo_o/overworld_shiny.pal b/graphics/pokemon/hakamo_o/overworld_shiny.pal
new file mode 100644
index 000000000000..fab1014d102c
--- /dev/null
+++ b/graphics/pokemon/hakamo_o/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+16 16 16
+248 152 184
+248 200 224
+94 73 36
+69 68 67
+184 184 24
+224 240 32
+244 241 240
+227 70 59
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/happiny/overworld.png b/graphics/pokemon/happiny/overworld.png
new file mode 100644
index 000000000000..3779dfcbd5fe
Binary files /dev/null and b/graphics/pokemon/happiny/overworld.png differ
diff --git a/graphics/pokemon/happiny/overworld_normal.pal b/graphics/pokemon/happiny/overworld_normal.pal
new file mode 100644
index 000000000000..3fb8e878a01e
--- /dev/null
+++ b/graphics/pokemon/happiny/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+120 72 88
+248 176 192
+216 128 160
+184 96 128
+0 0 0
+96 32 40
+192 72 96
+216 96 112
+232 232 248
+168 184 208
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/happiny/overworld_shiny.pal b/graphics/pokemon/happiny/overworld_shiny.pal
new file mode 100644
index 000000000000..937d4cbe19ae
--- /dev/null
+++ b/graphics/pokemon/happiny/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+120 72 88
+240 192 216
+208 160 192
+168 112 176
+0 0 0
+88 24 80
+176 64 128
+200 80 136
+232 232 248
+168 184 208
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/hariyama/overworld.png b/graphics/pokemon/hariyama/overworld.png
new file mode 100644
index 000000000000..52622056a8c8
Binary files /dev/null and b/graphics/pokemon/hariyama/overworld.png differ
diff --git a/graphics/pokemon/hariyama/overworld_normal.pal b/graphics/pokemon/hariyama/overworld_normal.pal
new file mode 100644
index 000000000000..d652e0414b59
--- /dev/null
+++ b/graphics/pokemon/hariyama/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+104 80 64
+240 232 192
+24 40 88
+216 200 152
+96 32 8
+184 152 104
+64 80 136
+184 88 16
+104 128 176
+232 232 248
+208 128 56
+72 56 8
+176 120 32
+216 184 64
diff --git a/graphics/pokemon/hariyama/overworld_shiny.pal b/graphics/pokemon/hariyama/overworld_shiny.pal
new file mode 100644
index 000000000000..e15d4cdadc93
--- /dev/null
+++ b/graphics/pokemon/hariyama/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+104 80 64
+240 232 192
+24 40 88
+216 200 152
+72 32 56
+184 152 104
+64 80 136
+136 80 96
+104 128 176
+232 232 248
+184 136 152
+96 32 8
+184 88 16
+208 128 56
diff --git a/graphics/pokemon/hatenna/overworld.png b/graphics/pokemon/hatenna/overworld.png
new file mode 100644
index 000000000000..35c3aa5acd50
Binary files /dev/null and b/graphics/pokemon/hatenna/overworld.png differ
diff --git a/graphics/pokemon/hatenna/overworld_normal.pal b/graphics/pokemon/hatenna/overworld_normal.pal
new file mode 100644
index 000000000000..6f85ef548d27
--- /dev/null
+++ b/graphics/pokemon/hatenna/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+76 77 85
+226 238 250
+0 0 0
+190 215 239
+130 146 162
+100 81 90
+211 163 186
+167 151 159
+255 244 244
+246 216 216
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/hatenna/overworld_shiny.pal b/graphics/pokemon/hatenna/overworld_shiny.pal
new file mode 100644
index 000000000000..a7c64401a852
--- /dev/null
+++ b/graphics/pokemon/hatenna/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+57 57 57
+255 246 246
+0 0 0
+230 222 213
+172 164 156
+98 82 90
+213 164 189
+164 148 156
+255 246 246
+246 222 222
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/hatterene/overworld.png b/graphics/pokemon/hatterene/overworld.png
new file mode 100644
index 000000000000..e1b1d6da638a
Binary files /dev/null and b/graphics/pokemon/hatterene/overworld.png differ
diff --git a/graphics/pokemon/hatterene/overworld_normal.pal b/graphics/pokemon/hatterene/overworld_normal.pal
new file mode 100644
index 000000000000..87fce642a6fe
--- /dev/null
+++ b/graphics/pokemon/hatterene/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+24 0 252
+0 0 0
+48 60 64
+104 76 80
+120 120 120
+16 16 16
+0 0 0
+132 152 164
+188 188 188
+212 160 168
+188 220 240
+208 208 208
+252 208 212
+220 212 224
+236 248 252
+236 236 236
diff --git a/graphics/pokemon/hatterene/overworld_shiny.pal b/graphics/pokemon/hatterene/overworld_shiny.pal
new file mode 100644
index 000000000000..5b745fa8b73f
--- /dev/null
+++ b/graphics/pokemon/hatterene/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+65 57 57
+115 74 82
+123 123 123
+16 16 16
+0 0 0
+156 139 148
+189 189 189
+238 139 172
+222 205 213
+213 213 213
+246 189 205
+222 213 230
+246 246 246
+238 238 238
diff --git a/graphics/pokemon/hattrem/overworld.png b/graphics/pokemon/hattrem/overworld.png
new file mode 100644
index 000000000000..6f87f926eb8e
Binary files /dev/null and b/graphics/pokemon/hattrem/overworld.png differ
diff --git a/graphics/pokemon/hattrem/overworld_normal.pal b/graphics/pokemon/hattrem/overworld_normal.pal
new file mode 100644
index 000000000000..6c0d886da1f4
--- /dev/null
+++ b/graphics/pokemon/hattrem/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 16 252
+16 16 16
+104 76 80
+76 92 104
+0 0 0
+148 144 148
+132 152 164
+212 160 168
+224 184 188
+188 220 240
+208 208 208
+252 208 212
+252 236 236
+252 236 240
+224 244 252
+252 252 252
diff --git a/graphics/pokemon/hattrem/overworld_shiny.pal b/graphics/pokemon/hattrem/overworld_shiny.pal
new file mode 100644
index 000000000000..b5a715d2562b
--- /dev/null
+++ b/graphics/pokemon/hattrem/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+115 74 82
+65 57 57
+0 0 0
+148 148 148
+156 139 148
+238 139 172
+255 172 197
+222 205 213
+213 213 213
+255 172 197
+255 238 238
+255 222 230
+255 255 255
+255 255 255
diff --git a/graphics/pokemon/haunter/overworld.png b/graphics/pokemon/haunter/overworld.png
new file mode 100644
index 000000000000..0f2f1534e93a
Binary files /dev/null and b/graphics/pokemon/haunter/overworld.png differ
diff --git a/graphics/pokemon/haunter/overworld_normal.pal b/graphics/pokemon/haunter/overworld_normal.pal
new file mode 100644
index 000000000000..d09731399504
--- /dev/null
+++ b/graphics/pokemon/haunter/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+64 48 56
+160 136 160
+96 72 104
+128 96 128
+232 232 248
+184 184 184
+72 72 72
+152 152 152
+64 16 56
+96 32 88
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/haunter/overworld_shiny.pal b/graphics/pokemon/haunter/overworld_shiny.pal
new file mode 100644
index 000000000000..23b14b673b53
--- /dev/null
+++ b/graphics/pokemon/haunter/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+64 48 56
+152 120 144
+96 64 88
+128 88 120
+232 232 248
+184 184 184
+72 72 72
+152 152 152
+56 64 160
+56 112 208
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/hawlucha/overworld.png b/graphics/pokemon/hawlucha/overworld.png
new file mode 100644
index 000000000000..36fda946183b
Binary files /dev/null and b/graphics/pokemon/hawlucha/overworld.png differ
diff --git a/graphics/pokemon/hawlucha/overworld_normal.pal b/graphics/pokemon/hawlucha/overworld_normal.pal
new file mode 100644
index 000000000000..fae2bd54057a
--- /dev/null
+++ b/graphics/pokemon/hawlucha/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+241 133 61
+83 25 29
+185 94 41
+49 149 114
+128 54 22
+75 207 161
+214 81 82
+230 238 248
+165 37 46
+184 176 179
+184 176 179
+16 72 49
+230 238 248
+0 0 0
diff --git a/graphics/pokemon/hawlucha/overworld_shiny.pal b/graphics/pokemon/hawlucha/overworld_shiny.pal
new file mode 100644
index 000000000000..8ab0d4019318
--- /dev/null
+++ b/graphics/pokemon/hawlucha/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+147 178 67
+32 32 36
+116 144 45
+112 104 159
+93 115 40
+154 143 212
+69 69 75
+236 187 92
+47 47 52
+162 44 68
+197 151 60
+72 65 108
+202 60 89
+0 0 0
diff --git a/graphics/pokemon/haxorus/overworld.png b/graphics/pokemon/haxorus/overworld.png
new file mode 100644
index 000000000000..8d9d6b366a74
Binary files /dev/null and b/graphics/pokemon/haxorus/overworld.png differ
diff --git a/graphics/pokemon/haxorus/overworld_normal.pal b/graphics/pokemon/haxorus/overworld_normal.pal
new file mode 100644
index 000000000000..a6d09d754bc8
--- /dev/null
+++ b/graphics/pokemon/haxorus/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 48 28
+182 191 71
+87 95 11
+0 0 0
+72 2 3
+155 164 18
+161 0 0
+71 71 87
+202 202 234
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/haxorus/overworld_shiny.pal b/graphics/pokemon/haxorus/overworld_shiny.pal
new file mode 100644
index 000000000000..78a753845ad0
--- /dev/null
+++ b/graphics/pokemon/haxorus/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+45 41 44
+136 136 136
+71 71 70
+0 0 0
+72 2 3
+104 104 104
+161 0 0
+71 71 70
+136 136 136
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/heatmor/overworld.png b/graphics/pokemon/heatmor/overworld.png
new file mode 100644
index 000000000000..e6b8d575bd27
Binary files /dev/null and b/graphics/pokemon/heatmor/overworld.png differ
diff --git a/graphics/pokemon/heatmor/overworld_normal.pal b/graphics/pokemon/heatmor/overworld_normal.pal
new file mode 100644
index 000000000000..be4082d916ab
--- /dev/null
+++ b/graphics/pokemon/heatmor/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+69 54 39
+96 64 64
+128 96 64
+160 128 128
+192 64 64
+0 0 0
+224 128 64
+224 192 64
+236 236 246
+128 64 64
+39 39 39
+96 32 0
+254 177 127
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/heatmor/overworld_shiny.pal b/graphics/pokemon/heatmor/overworld_shiny.pal
new file mode 100644
index 000000000000..bbf238e6a9a4
--- /dev/null
+++ b/graphics/pokemon/heatmor/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 16 16
+56 48 48
+88 80 80
+104 48 48
+0 0 0
+176 64 32
+248 80 64
+96 64 64
+236 236 246
+69 54 39
+128 64 64
+39 39 39
+96 32 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/heatran/overworld.png b/graphics/pokemon/heatran/overworld.png
new file mode 100644
index 000000000000..4939e6fbc98a
Binary files /dev/null and b/graphics/pokemon/heatran/overworld.png differ
diff --git a/graphics/pokemon/heatran/overworld_normal.pal b/graphics/pokemon/heatran/overworld_normal.pal
new file mode 100644
index 000000000000..2744c5d02615
--- /dev/null
+++ b/graphics/pokemon/heatran/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 64 64
+0 0 0
+64 24 40
+176 104 88
+72 80 96
+192 192 208
+136 64 64
+128 128 136
+40 40 40
+192 120 0
+232 152 0
+232 232 248
+48 56 80
+168 40 32
+240 80 64
diff --git a/graphics/pokemon/heatran/overworld_shiny.pal b/graphics/pokemon/heatran/overworld_shiny.pal
new file mode 100644
index 000000000000..874053580da1
--- /dev/null
+++ b/graphics/pokemon/heatran/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+136 0 0
+0 0 0
+80 0 0
+216 72 48
+120 112 88
+208 200 176
+160 40 24
+168 160 136
+40 40 40
+192 120 0
+232 152 0
+232 232 248
+80 72 48
+200 64 112
+240 128 168
diff --git a/graphics/pokemon/heliolisk/overworld.png b/graphics/pokemon/heliolisk/overworld.png
new file mode 100644
index 000000000000..ae5a60907f0d
Binary files /dev/null and b/graphics/pokemon/heliolisk/overworld.png differ
diff --git a/graphics/pokemon/heliolisk/overworld_normal.pal b/graphics/pokemon/heliolisk/overworld_normal.pal
new file mode 100644
index 000000000000..52ac0248ba33
--- /dev/null
+++ b/graphics/pokemon/heliolisk/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 184 168
+16 16 16
+48 48 48
+96 95 95
+75 74 74
+178 171 171
+213 203 203
+58 109 176
+116 42 20
+232 113 18
+214 163 42
+248 203 96
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/heliolisk/overworld_shiny.pal b/graphics/pokemon/heliolisk/overworld_shiny.pal
new file mode 100644
index 000000000000..022071485b78
--- /dev/null
+++ b/graphics/pokemon/heliolisk/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 184 168
+16 16 16
+48 48 48
+96 95 95
+75 74 74
+178 171 171
+213 203 203
+58 109 176
+158 121 52
+235 208 94
+218 82 72
+178 63 55
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/helioptile/overworld.png b/graphics/pokemon/helioptile/overworld.png
new file mode 100644
index 000000000000..587601065ed4
Binary files /dev/null and b/graphics/pokemon/helioptile/overworld.png differ
diff --git a/graphics/pokemon/helioptile/overworld_normal.pal b/graphics/pokemon/helioptile/overworld_normal.pal
new file mode 100644
index 000000000000..c807127b7a59
--- /dev/null
+++ b/graphics/pokemon/helioptile/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 184 168
+16 16 16
+99 95 77
+50 48 38
+192 152 90
+242 225 112
+192 152 90
+242 225 112
+49 102 159
+242 240 222
+214 185 100
+192 152 90
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/helioptile/overworld_shiny.pal b/graphics/pokemon/helioptile/overworld_shiny.pal
new file mode 100644
index 000000000000..a08ee57ad720
--- /dev/null
+++ b/graphics/pokemon/helioptile/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 184 168
+16 16 16
+99 95 77
+50 48 38
+155 53 46
+205 72 63
+192 152 90
+242 225 112
+49 102 159
+242 240 222
+163 58 51
+138 43 36
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/heracross/overworld.png b/graphics/pokemon/heracross/overworld.png
new file mode 100644
index 000000000000..4ce6d4a04432
Binary files /dev/null and b/graphics/pokemon/heracross/overworld.png differ
diff --git a/graphics/pokemon/heracross/overworld_normal.pal b/graphics/pokemon/heracross/overworld_normal.pal
new file mode 100644
index 000000000000..6ba2873796d6
--- /dev/null
+++ b/graphics/pokemon/heracross/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+8 48 64
+16 72 96
+128 192 200
+80 152 176
+56 120 144
+240 176 64
+32 96 120
+248 248 248
+152 88 0
+216 136 8
+56 72 80
+184 200 216
+152 168 184
+0 0 0
diff --git a/graphics/pokemon/heracross/overworld_shiny.pal b/graphics/pokemon/heracross/overworld_shiny.pal
new file mode 100644
index 000000000000..6fc7816a97f4
--- /dev/null
+++ b/graphics/pokemon/heracross/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+72 48 88
+96 72 120
+216 160 248
+192 136 216
+160 112 184
+240 176 64
+128 88 152
+248 248 248
+152 88 0
+216 136 8
+56 72 80
+184 200 216
+152 168 184
+0 0 0
diff --git a/graphics/pokemon/herdier/overworld.png b/graphics/pokemon/herdier/overworld.png
new file mode 100644
index 000000000000..51e2a2207bb9
Binary files /dev/null and b/graphics/pokemon/herdier/overworld.png differ
diff --git a/graphics/pokemon/herdier/overworld_normal.pal b/graphics/pokemon/herdier/overworld_normal.pal
new file mode 100644
index 000000000000..60614990e486
--- /dev/null
+++ b/graphics/pokemon/herdier/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+54 54 78
+0 0 0
+54 54 78
+96 72 24
+96 96 140
+144 88 64
+72 72 104
+216 144 88
+232 200 144
+144 88 64
+88 88 88
+192 192 192
+232 232 248
+72 72 104
+0 0 0
diff --git a/graphics/pokemon/herdier/overworld_shiny.pal b/graphics/pokemon/herdier/overworld_shiny.pal
new file mode 100644
index 000000000000..4713003a789c
--- /dev/null
+++ b/graphics/pokemon/herdier/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+54 54 78
+0 0 0
+64 64 64
+96 72 24
+152 152 152
+152 112 64
+104 104 104
+248 184 112
+248 216 176
+144 88 64
+88 88 88
+192 192 192
+232 232 248
+72 72 104
+0 0 0
diff --git a/graphics/pokemon/hippopotas/followerf.png b/graphics/pokemon/hippopotas/followerf.png
new file mode 100644
index 000000000000..e8802de5c496
Binary files /dev/null and b/graphics/pokemon/hippopotas/followerf.png differ
diff --git a/graphics/pokemon/hippopotas/overworld.png b/graphics/pokemon/hippopotas/overworld.png
new file mode 100644
index 000000000000..4ff33e32f318
Binary files /dev/null and b/graphics/pokemon/hippopotas/overworld.png differ
diff --git a/graphics/pokemon/hippopotas/overworld_normal.pal b/graphics/pokemon/hippopotas/overworld_normal.pal
new file mode 100644
index 000000000000..8bada9c45fad
--- /dev/null
+++ b/graphics/pokemon/hippopotas/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+72 56 32
+184 120 80
+144 128 56
+208 176 56
+48 48 48
+208 176 80
+136 88 56
+232 232 248
+224 200 112
+184 184 192
+136 136 136
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/hippopotas/overworld_shiny.pal b/graphics/pokemon/hippopotas/overworld_shiny.pal
new file mode 100644
index 000000000000..eb4d0d164cc4
--- /dev/null
+++ b/graphics/pokemon/hippopotas/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+72 56 32
+200 144 112
+184 152 80
+224 208 136
+48 48 48
+248 216 160
+176 112 72
+232 232 248
+248 232 200
+184 184 192
+136 136 136
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/hippowdon/followerf.png b/graphics/pokemon/hippowdon/followerf.png
new file mode 100644
index 000000000000..20ac193d7458
Binary files /dev/null and b/graphics/pokemon/hippowdon/followerf.png differ
diff --git a/graphics/pokemon/hippowdon/overworld.png b/graphics/pokemon/hippowdon/overworld.png
new file mode 100644
index 000000000000..f666ab8c5025
Binary files /dev/null and b/graphics/pokemon/hippowdon/overworld.png differ
diff --git a/graphics/pokemon/hippowdon/overworld_normal.pal b/graphics/pokemon/hippowdon/overworld_normal.pal
new file mode 100644
index 000000000000..d9c692e5e9bc
--- /dev/null
+++ b/graphics/pokemon/hippowdon/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+96 96 96
+48 48 48
+72 72 72
+184 144 56
+208 176 80
+192 56 80
+168 168 168
+200 200 208
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/hippowdon/overworld_shiny.pal b/graphics/pokemon/hippowdon/overworld_shiny.pal
new file mode 100644
index 000000000000..3e223a13c576
--- /dev/null
+++ b/graphics/pokemon/hippowdon/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+136 136 104
+48 48 48
+96 96 72
+208 176 120
+224 200 136
+192 56 80
+152 208 160
+200 200 208
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/hitmonchan/overworld.png b/graphics/pokemon/hitmonchan/overworld.png
new file mode 100644
index 000000000000..3fceca61d1ec
Binary files /dev/null and b/graphics/pokemon/hitmonchan/overworld.png differ
diff --git a/graphics/pokemon/hitmonchan/overworld_normal.pal b/graphics/pokemon/hitmonchan/overworld_normal.pal
new file mode 100644
index 000000000000..de26d921b2dc
--- /dev/null
+++ b/graphics/pokemon/hitmonchan/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 48 48
+0 0 0
+192 160 104
+112 80 56
+152 112 64
+232 232 248
+144 24 40
+112 104 128
+224 56 56
+56 56 56
+160 136 200
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/hitmonchan/overworld_shiny.pal b/graphics/pokemon/hitmonchan/overworld_shiny.pal
new file mode 100644
index 000000000000..48bfc8d625e3
--- /dev/null
+++ b/graphics/pokemon/hitmonchan/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 72 48
+0 0 0
+176 176 104
+96 96 56
+136 128 64
+232 232 248
+40 72 136
+112 104 128
+80 152 192
+56 56 56
+160 136 200
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/hitmonlee/overworld.png b/graphics/pokemon/hitmonlee/overworld.png
new file mode 100644
index 000000000000..2cb159d14f36
Binary files /dev/null and b/graphics/pokemon/hitmonlee/overworld.png differ
diff --git a/graphics/pokemon/hitmonlee/overworld_normal.pal b/graphics/pokemon/hitmonlee/overworld_normal.pal
new file mode 100644
index 000000000000..3de1f1f732ac
--- /dev/null
+++ b/graphics/pokemon/hitmonlee/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 48 48
+160 128 80
+120 96 56
+0 0 0
+200 200 208
+232 232 248
+152 136 88
+88 72 40
+208 184 112
+136 120 48
+96 96 96
+160 160 160
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/hitmonlee/overworld_shiny.pal b/graphics/pokemon/hitmonlee/overworld_shiny.pal
new file mode 100644
index 000000000000..9bfdbab384dd
--- /dev/null
+++ b/graphics/pokemon/hitmonlee/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 72 48
+144 152 80
+104 112 56
+0 0 0
+200 200 208
+232 232 248
+152 136 88
+72 88 40
+208 184 112
+136 120 48
+96 96 96
+160 160 160
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/hitmontop/overworld.png b/graphics/pokemon/hitmontop/overworld.png
new file mode 100644
index 000000000000..5708d9b8181a
Binary files /dev/null and b/graphics/pokemon/hitmontop/overworld.png differ
diff --git a/graphics/pokemon/hitmontop/overworld_normal.pal b/graphics/pokemon/hitmontop/overworld_normal.pal
new file mode 100644
index 000000000000..1450180c7fa7
--- /dev/null
+++ b/graphics/pokemon/hitmontop/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 72 24
+208 160 104
+128 80 24
+184 128 72
+0 0 0
+232 232 248
+96 152 208
+56 112 160
+24 56 104
+176 184 192
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/hitmontop/overworld_shiny.pal b/graphics/pokemon/hitmontop/overworld_shiny.pal
new file mode 100644
index 000000000000..1e47650f4507
--- /dev/null
+++ b/graphics/pokemon/hitmontop/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 88 88
+192 184 176
+120 120 128
+144 144 136
+0 0 0
+232 232 248
+216 144 232
+168 96 184
+96 40 112
+176 184 192
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/ho_oh/overworld.png b/graphics/pokemon/ho_oh/overworld.png
new file mode 100644
index 000000000000..ceba8ee16129
Binary files /dev/null and b/graphics/pokemon/ho_oh/overworld.png differ
diff --git a/graphics/pokemon/ho_oh/overworld_normal.pal b/graphics/pokemon/ho_oh/overworld_normal.pal
new file mode 100644
index 000000000000..1a28ecd192b5
--- /dev/null
+++ b/graphics/pokemon/ho_oh/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+96 40 0
+0 0 0
+232 152 0
+248 208 96
+168 104 0
+80 24 0
+56 96 16
+216 80 48
+160 56 24
+128 200 80
+216 232 248
+56 56 56
+232 232 248
+168 184 208
+96 120 120
diff --git a/graphics/pokemon/ho_oh/overworld_shiny.pal b/graphics/pokemon/ho_oh/overworld_shiny.pal
new file mode 100644
index 000000000000..3b8187019582
--- /dev/null
+++ b/graphics/pokemon/ho_oh/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+40 40 40
+0 0 0
+160 176 176
+216 216 216
+112 128 152
+80 24 0
+160 56 24
+248 184 16
+216 112 40
+216 80 48
+240 184 0
+56 56 56
+232 232 248
+168 184 208
+96 120 120
diff --git a/graphics/pokemon/honchkrow/overworld.png b/graphics/pokemon/honchkrow/overworld.png
new file mode 100644
index 000000000000..49e5f9b10903
Binary files /dev/null and b/graphics/pokemon/honchkrow/overworld.png differ
diff --git a/graphics/pokemon/honchkrow/overworld_normal.pal b/graphics/pokemon/honchkrow/overworld_normal.pal
new file mode 100644
index 000000000000..4c9cbf187c85
--- /dev/null
+++ b/graphics/pokemon/honchkrow/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+56 88 112
+32 40 48
+40 64 104
+48 56 72
+168 168 176
+232 232 248
+248 224 8
+120 16 24
+112 112 112
+192 152 0
+200 200 200
+56 56 56
+168 8 8
+80 64 48
diff --git a/graphics/pokemon/honchkrow/overworld_shiny.pal b/graphics/pokemon/honchkrow/overworld_shiny.pal
new file mode 100644
index 000000000000..6412fd7c835e
--- /dev/null
+++ b/graphics/pokemon/honchkrow/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+160 88 152
+56 40 64
+128 72 120
+88 56 96
+168 168 176
+232 232 248
+248 224 8
+120 16 24
+112 112 112
+192 152 0
+200 200 200
+56 56 56
+168 8 8
+80 64 48
diff --git a/graphics/pokemon/honedge/overworld.png b/graphics/pokemon/honedge/overworld.png
new file mode 100644
index 000000000000..1e98eae01cbf
Binary files /dev/null and b/graphics/pokemon/honedge/overworld.png differ
diff --git a/graphics/pokemon/honedge/overworld_normal.pal b/graphics/pokemon/honedge/overworld_normal.pal
new file mode 100644
index 000000000000..6c263df029e5
--- /dev/null
+++ b/graphics/pokemon/honedge/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+32 55 77
+38 111 176
+16 16 16
+56 49 42
+122 112 92
+108 154 186
+166 209 225
+173 165 113
+97 82 69
+251 254 255
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/honedge/overworld_shiny.pal b/graphics/pokemon/honedge/overworld_shiny.pal
new file mode 100644
index 000000000000..177af7bebc0d
--- /dev/null
+++ b/graphics/pokemon/honedge/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+139 43 53
+218 69 89
+16 16 16
+56 49 42
+122 112 92
+115 119 176
+141 153 228
+173 165 113
+97 82 69
+251 254 255
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/hoopa/overworld.png b/graphics/pokemon/hoopa/overworld.png
new file mode 100644
index 000000000000..4f4cb43b246d
Binary files /dev/null and b/graphics/pokemon/hoopa/overworld.png differ
diff --git a/graphics/pokemon/hoopa/overworld_normal.pal b/graphics/pokemon/hoopa/overworld_normal.pal
new file mode 100644
index 000000000000..3827861e2600
--- /dev/null
+++ b/graphics/pokemon/hoopa/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 168 144
+16 16 16
+104 88 78
+75 31 51
+184 116 53
+255 205 76
+255 131 207
+219 82 164
+140 118 166
+53 78 18
+209 196 230
+217 221 225
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/hoopa/overworld_shiny.pal b/graphics/pokemon/hoopa/overworld_shiny.pal
new file mode 100644
index 000000000000..2cab22108790
--- /dev/null
+++ b/graphics/pokemon/hoopa/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 168 144
+16 16 16
+153 124 38
+80 62 11
+184 116 53
+255 205 76
+187 135 67
+148 107 53
+171 156 64
+53 78 18
+205 189 97
+217 221 225
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/hoopa/unbound/overworld.png b/graphics/pokemon/hoopa/unbound/overworld.png
new file mode 100644
index 000000000000..93756e095bd5
Binary files /dev/null and b/graphics/pokemon/hoopa/unbound/overworld.png differ
diff --git a/graphics/pokemon/hoopa/unbound/overworld_normal.pal b/graphics/pokemon/hoopa/unbound/overworld_normal.pal
new file mode 100644
index 000000000000..169f56ef4bff
--- /dev/null
+++ b/graphics/pokemon/hoopa/unbound/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 168 144
+65 48 39
+238 190 74
+16 16 16
+68 76 88
+154 192 220
+95 41 66
+217 111 173
+172 111 52
+113 137 163
+178 66 134
+100 86 76
+217 219 221
+22 20 23
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/hoopa/unbound/overworld_shiny.pal b/graphics/pokemon/hoopa/unbound/overworld_shiny.pal
new file mode 100644
index 000000000000..beb215b5108f
--- /dev/null
+++ b/graphics/pokemon/hoopa/unbound/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 168 144
+65 48 39
+243 183 37
+16 16 16
+120 107 29
+205 189 97
+80 62 11
+187 135 67
+172 111 52
+171 156 64
+148 107 53
+153 124 38
+217 219 221
+22 20 23
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/hoothoot/overworld.png b/graphics/pokemon/hoothoot/overworld.png
new file mode 100644
index 000000000000..72ccbdc9d56f
Binary files /dev/null and b/graphics/pokemon/hoothoot/overworld.png differ
diff --git a/graphics/pokemon/hoothoot/overworld_normal.pal b/graphics/pokemon/hoothoot/overworld_normal.pal
new file mode 100644
index 000000000000..3c77d7c67c7c
--- /dev/null
+++ b/graphics/pokemon/hoothoot/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 40 40
+64 80 88
+80 40 8
+0 0 0
+176 128 88
+136 88 64
+216 80 72
+224 168 168
+104 40 40
+200 112 112
+200 176 120
+232 216 160
+168 184 208
+136 72 56
+0 0 0
diff --git a/graphics/pokemon/hoothoot/overworld_shiny.pal b/graphics/pokemon/hoothoot/overworld_shiny.pal
new file mode 100644
index 000000000000..f19b0baa4c0c
--- /dev/null
+++ b/graphics/pokemon/hoothoot/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 40 40
+64 80 88
+96 64 8
+0 0 0
+248 200 88
+216 136 64
+216 80 72
+224 168 168
+104 40 40
+200 112 112
+200 176 120
+232 216 160
+168 184 208
+136 88 56
+0 0 0
diff --git a/graphics/pokemon/hoppip/overworld.png b/graphics/pokemon/hoppip/overworld.png
new file mode 100644
index 000000000000..77e1ea5bdecf
Binary files /dev/null and b/graphics/pokemon/hoppip/overworld.png differ
diff --git a/graphics/pokemon/hoppip/overworld_normal.pal b/graphics/pokemon/hoppip/overworld_normal.pal
new file mode 100644
index 000000000000..bd0c077d62bf
--- /dev/null
+++ b/graphics/pokemon/hoppip/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+48 88 16
+0 0 0
+112 192 80
+96 152 64
+88 8 32
+168 64 88
+224 104 128
+240 144 192
+232 200 0
+200 88 104
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/hoppip/overworld_shiny.pal b/graphics/pokemon/hoppip/overworld_shiny.pal
new file mode 100644
index 000000000000..b67f960787fe
--- /dev/null
+++ b/graphics/pokemon/hoppip/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+48 88 16
+0 0 0
+136 200 80
+120 168 64
+24 32 0
+56 112 24
+104 176 56
+136 200 112
+232 200 0
+72 128 32
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/horsea/overworld.png b/graphics/pokemon/horsea/overworld.png
new file mode 100644
index 000000000000..6c291b7d9328
Binary files /dev/null and b/graphics/pokemon/horsea/overworld.png differ
diff --git a/graphics/pokemon/horsea/overworld_normal.pal b/graphics/pokemon/horsea/overworld_normal.pal
new file mode 100644
index 000000000000..54a5cf1d3f6a
--- /dev/null
+++ b/graphics/pokemon/horsea/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+24 56 96
+96 152 192
+144 184 224
+40 88 136
+168 184 208
+232 232 248
+144 16 16
+64 64 64
+192 160 96
+248 208 160
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/horsea/overworld_shiny.pal b/graphics/pokemon/horsea/overworld_shiny.pal
new file mode 100644
index 000000000000..28bd790daa83
--- /dev/null
+++ b/graphics/pokemon/horsea/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+24 80 64
+96 184 168
+128 200 192
+40 136 112
+168 184 208
+232 232 248
+144 16 16
+64 64 64
+192 120 128
+248 184 184
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/houndoom/overworld.png b/graphics/pokemon/houndoom/overworld.png
new file mode 100644
index 000000000000..96212ee3e5ea
Binary files /dev/null and b/graphics/pokemon/houndoom/overworld.png differ
diff --git a/graphics/pokemon/houndoom/overworld_normal.pal b/graphics/pokemon/houndoom/overworld_normal.pal
new file mode 100644
index 000000000000..c3468aa5b0b0
--- /dev/null
+++ b/graphics/pokemon/houndoom/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 56 80
+0 0 0
+168 160 184
+232 232 248
+136 128 144
+40 40 48
+104 112 112
+80 80 88
+56 56 64
+224 184 160
+136 96 64
+184 136 96
+144 24 40
+112 96 120
+0 0 0
diff --git a/graphics/pokemon/houndoom/overworld_shiny.pal b/graphics/pokemon/houndoom/overworld_shiny.pal
new file mode 100644
index 000000000000..05b66d6ede38
--- /dev/null
+++ b/graphics/pokemon/houndoom/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 56 80
+0 0 0
+168 160 184
+232 232 248
+136 128 144
+16 48 72
+72 144 192
+48 112 152
+24 56 80
+224 184 160
+136 96 64
+184 136 96
+144 24 40
+112 96 120
+0 0 0
diff --git a/graphics/pokemon/houndour/overworld.png b/graphics/pokemon/houndour/overworld.png
new file mode 100644
index 000000000000..664fab3f83a2
Binary files /dev/null and b/graphics/pokemon/houndour/overworld.png differ
diff --git a/graphics/pokemon/houndour/overworld_normal.pal b/graphics/pokemon/houndour/overworld_normal.pal
new file mode 100644
index 000000000000..e8f3ee64e933
--- /dev/null
+++ b/graphics/pokemon/houndour/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 56 80
+40 40 48
+56 56 64
+232 232 248
+80 80 88
+0 0 0
+104 112 112
+112 96 120
+168 160 184
+224 184 160
+176 184 192
+184 136 96
+136 128 144
+136 96 64
+0 0 0
diff --git a/graphics/pokemon/houndour/overworld_shiny.pal b/graphics/pokemon/houndour/overworld_shiny.pal
new file mode 100644
index 000000000000..8d7f91222cc0
--- /dev/null
+++ b/graphics/pokemon/houndour/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 56 80
+16 48 72
+24 56 80
+232 232 248
+48 112 152
+0 0 0
+72 144 192
+112 96 120
+168 160 184
+224 184 160
+176 184 248
+184 136 96
+136 128 144
+136 96 64
+0 0 0
diff --git a/graphics/pokemon/huntail/overworld.png b/graphics/pokemon/huntail/overworld.png
new file mode 100644
index 000000000000..8a0b8ef8c382
Binary files /dev/null and b/graphics/pokemon/huntail/overworld.png differ
diff --git a/graphics/pokemon/huntail/overworld_normal.pal b/graphics/pokemon/huntail/overworld_normal.pal
new file mode 100644
index 000000000000..ae0c4771bb7a
--- /dev/null
+++ b/graphics/pokemon/huntail/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 96 136
+152 200 224
+128 48 24
+120 184 216
+0 0 0
+184 80 48
+96 152 216
+216 112 72
+208 216 232
+176 192 216
+232 232 248
+152 40 88
+48 48 64
+184 64 112
+0 0 0
diff --git a/graphics/pokemon/huntail/overworld_shiny.pal b/graphics/pokemon/huntail/overworld_shiny.pal
new file mode 100644
index 000000000000..8d443a8a9b9e
--- /dev/null
+++ b/graphics/pokemon/huntail/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+48 144 112
+136 208 160
+128 48 24
+104 192 144
+0 0 0
+184 80 48
+72 168 128
+216 112 72
+208 216 232
+176 192 216
+232 232 248
+152 40 88
+48 48 64
+184 64 112
+0 0 0
diff --git a/graphics/pokemon/hydreigon/overworld.png b/graphics/pokemon/hydreigon/overworld.png
new file mode 100644
index 000000000000..58e187d31bb1
Binary files /dev/null and b/graphics/pokemon/hydreigon/overworld.png differ
diff --git a/graphics/pokemon/hydreigon/overworld_normal.pal b/graphics/pokemon/hydreigon/overworld_normal.pal
new file mode 100644
index 000000000000..82af3b34282e
--- /dev/null
+++ b/graphics/pokemon/hydreigon/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+82 82 82
+0 0 0
+65 57 65
+41 32 41
+139 41 98
+189 82 123
+98 32 65
+24 49 106
+57 90 156
+90 131 205
+156 65 49
+115 41 24
+230 222 222
+0 0 0
diff --git a/graphics/pokemon/hydreigon/overworld_shiny.pal b/graphics/pokemon/hydreigon/overworld_shiny.pal
new file mode 100644
index 000000000000..9797e900198b
--- /dev/null
+++ b/graphics/pokemon/hydreigon/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+2 2 2
+96 88 80
+2 2 2
+80 64 64
+55 39 40
+96 56 152
+160 96 192
+65 33 84
+55 39 40
+88 104 48
+112 152 72
+163 80 66
+80 64 64
+160 96 192
+0 0 0
diff --git a/graphics/pokemon/hypno/overworld.png b/graphics/pokemon/hypno/overworld.png
new file mode 100644
index 000000000000..1ef615b2a36e
Binary files /dev/null and b/graphics/pokemon/hypno/overworld.png differ
diff --git a/graphics/pokemon/hypno/overworld_normal.pal b/graphics/pokemon/hypno/overworld_normal.pal
new file mode 100644
index 000000000000..88d4aed1e032
--- /dev/null
+++ b/graphics/pokemon/hypno/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 48 40
+0 0 0
+232 200 80
+184 152 40
+104 80 120
+120 104 32
+48 48 48
+168 168 168
+232 232 248
+200 200 208
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/hypno/overworld_shiny.pal b/graphics/pokemon/hypno/overworld_shiny.pal
new file mode 100644
index 000000000000..345a52c295dd
--- /dev/null
+++ b/graphics/pokemon/hypno/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 56 72
+0 0 0
+200 176 184
+168 128 152
+112 64 96
+128 80 112
+48 48 48
+184 176 144
+232 232 248
+200 200 208
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/igglybuff/overworld.png b/graphics/pokemon/igglybuff/overworld.png
new file mode 100644
index 000000000000..ab5af8ee16e1
Binary files /dev/null and b/graphics/pokemon/igglybuff/overworld.png differ
diff --git a/graphics/pokemon/igglybuff/overworld_normal.pal b/graphics/pokemon/igglybuff/overworld_normal.pal
new file mode 100644
index 000000000000..9d3a3a4ebc22
--- /dev/null
+++ b/graphics/pokemon/igglybuff/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 40 64
+248 200 216
+168 80 96
+224 144 168
+200 112 144
+224 112 120
+232 232 248
+168 48 56
+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/igglybuff/overworld_shiny.pal b/graphics/pokemon/igglybuff/overworld_shiny.pal
new file mode 100644
index 000000000000..d9e101639e09
--- /dev/null
+++ b/graphics/pokemon/igglybuff/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 32 88
+248 200 248
+120 80 120
+216 160 216
+176 104 144
+224 112 120
+232 232 248
+168 48 56
+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/illumise/overworld.png b/graphics/pokemon/illumise/overworld.png
new file mode 100644
index 000000000000..a5092316f4f0
Binary files /dev/null and b/graphics/pokemon/illumise/overworld.png differ
diff --git a/graphics/pokemon/illumise/overworld_normal.pal b/graphics/pokemon/illumise/overworld_normal.pal
new file mode 100644
index 000000000000..eb5efd177848
--- /dev/null
+++ b/graphics/pokemon/illumise/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+112 88 56
+0 0 0
+104 56 104
+160 136 40
+200 184 88
+200 120 200
+208 176 232
+88 160 232
+160 192 232
+48 64 104
+232 232 248
+168 168 200
+40 40 48
+64 64 72
+104 104 112
diff --git a/graphics/pokemon/illumise/overworld_shiny.pal b/graphics/pokemon/illumise/overworld_shiny.pal
new file mode 100644
index 000000000000..17e83d03ea67
--- /dev/null
+++ b/graphics/pokemon/illumise/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+168 56 48
+0 0 0
+112 88 56
+216 112 96
+232 176 176
+224 160 40
+248 208 96
+88 160 232
+160 192 232
+48 64 104
+232 232 248
+168 168 200
+40 40 48
+64 64 72
+104 104 112
diff --git a/graphics/pokemon/impidimp/overworld.png b/graphics/pokemon/impidimp/overworld.png
new file mode 100644
index 000000000000..20736c300e14
Binary files /dev/null and b/graphics/pokemon/impidimp/overworld.png differ
diff --git a/graphics/pokemon/impidimp/overworld_normal.pal b/graphics/pokemon/impidimp/overworld_normal.pal
new file mode 100644
index 000000000000..ecac15ae98cb
--- /dev/null
+++ b/graphics/pokemon/impidimp/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+116 252 0
+56 24 36
+244 124 176
+0 0 0
+252 180 212
+8 8 12
+60 60 96
+176 84 124
+236 52 68
+28 28 48
+220 220 220
+252 252 252
+252 252 252
+56 24 36
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/impidimp/overworld_shiny.pal b/graphics/pokemon/impidimp/overworld_shiny.pal
new file mode 100644
index 000000000000..1a28a86ad130
--- /dev/null
+++ b/graphics/pokemon/impidimp/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+116 252 0
+0 49 49
+0 164 180
+0 0 0
+32 205 230
+74 74 74
+230 222 230
+0 123 131
+238 49 65
+172 172 172
+222 222 222
+255 255 255
+255 255 255
+0 49 49
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/incineroar/overworld.png b/graphics/pokemon/incineroar/overworld.png
new file mode 100644
index 000000000000..6c01302cfd36
Binary files /dev/null and b/graphics/pokemon/incineroar/overworld.png differ
diff --git a/graphics/pokemon/incineroar/overworld_normal.pal b/graphics/pokemon/incineroar/overworld_normal.pal
new file mode 100644
index 000000000000..2539d4db2eb2
--- /dev/null
+++ b/graphics/pokemon/incineroar/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+219 219 219
+246 207 88
+234 122 48
+110 148 86
+120 120 120
+105 102 102
+243 80 59
+208 62 65
+82 74 74
+60 50 50
+186 42 52
+75 19 20
+16 16 16
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/incineroar/overworld_shiny.pal b/graphics/pokemon/incineroar/overworld_shiny.pal
new file mode 100644
index 000000000000..24b3310b54e2
--- /dev/null
+++ b/graphics/pokemon/incineroar/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+219 219 219
+246 207 88
+234 122 48
+110 148 86
+120 120 120
+105 102 102
+240 48 32
+208 62 65
+240 232 224
+60 50 50
+186 42 52
+75 19 20
+16 16 16
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/indeedee/female/overworld.png b/graphics/pokemon/indeedee/female/overworld.png
new file mode 100644
index 000000000000..609039c70d30
Binary files /dev/null and b/graphics/pokemon/indeedee/female/overworld.png differ
diff --git a/graphics/pokemon/indeedee/female/overworld_normal.pal b/graphics/pokemon/indeedee/female/overworld_normal.pal
new file mode 100644
index 000000000000..d258b99c8df2
--- /dev/null
+++ b/graphics/pokemon/indeedee/female/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 128 128
+26 24 32
+135 128 162
+86 82 102
+8 8 14
+0 0 0
+37 37 62
+77 76 116
+255 255 255
+121 83 136
+61 37 19
+175 175 175
+121 72 39
+136 136 136
+14 14 14
+15 15 15
diff --git a/graphics/pokemon/indeedee/female/overworld_shiny.pal b/graphics/pokemon/indeedee/female/overworld_shiny.pal
new file mode 100644
index 000000000000..d258b99c8df2
--- /dev/null
+++ b/graphics/pokemon/indeedee/female/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 128 128
+26 24 32
+135 128 162
+86 82 102
+8 8 14
+0 0 0
+37 37 62
+77 76 116
+255 255 255
+121 83 136
+61 37 19
+175 175 175
+121 72 39
+136 136 136
+14 14 14
+15 15 15
diff --git a/graphics/pokemon/indeedee/overworld.png b/graphics/pokemon/indeedee/overworld.png
new file mode 100644
index 000000000000..71419fc897d9
Binary files /dev/null and b/graphics/pokemon/indeedee/overworld.png differ
diff --git a/graphics/pokemon/indeedee/overworld_normal.pal b/graphics/pokemon/indeedee/overworld_normal.pal
new file mode 100644
index 000000000000..dcb3b8aac8b0
--- /dev/null
+++ b/graphics/pokemon/indeedee/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+116 252 0
+24 24 32
+132 128 160
+84 80 100
+0 0 0
+252 252 252
+8 8 12
+36 36 60
+76 76 116
+172 172 172
+128 160 176
+120 72 36
+60 36 16
+136 136 136
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/indeedee/overworld_shiny.pal b/graphics/pokemon/indeedee/overworld_shiny.pal
new file mode 100644
index 000000000000..41e77455de0d
--- /dev/null
+++ b/graphics/pokemon/indeedee/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+116 252 0
+32 24 41
+115 98 156
+82 65 106
+0 0 0
+255 255 255
+16 32 32
+49 82 90
+82 123 139
+172 172 172
+131 164 180
+123 74 32
+57 32 16
+139 139 139
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/infernape/overworld.png b/graphics/pokemon/infernape/overworld.png
new file mode 100644
index 000000000000..8e3187ca6d52
Binary files /dev/null and b/graphics/pokemon/infernape/overworld.png differ
diff --git a/graphics/pokemon/infernape/overworld_normal.pal b/graphics/pokemon/infernape/overworld_normal.pal
new file mode 100644
index 000000000000..1f13a34b3a58
--- /dev/null
+++ b/graphics/pokemon/infernape/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+144 24 24
+240 56 40
+248 208 0
+64 64 64
+232 232 248
+216 216 216
+168 168 168
+0 0 0
+104 72 56
+200 56 88
+224 112 80
+192 64 32
+24 88 176
+208 152 0
+128 56 32
diff --git a/graphics/pokemon/infernape/overworld_shiny.pal b/graphics/pokemon/infernape/overworld_shiny.pal
new file mode 100644
index 000000000000..ba4c61aec8c5
--- /dev/null
+++ b/graphics/pokemon/infernape/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+144 24 24
+240 56 40
+248 232 128
+64 64 64
+232 232 248
+216 216 216
+168 168 168
+0 0 0
+104 64 96
+200 56 88
+248 104 160
+200 72 112
+160 72 224
+208 160 72
+144 32 80
diff --git a/graphics/pokemon/inkay/overworld.png b/graphics/pokemon/inkay/overworld.png
new file mode 100644
index 000000000000..44e041110b18
Binary files /dev/null and b/graphics/pokemon/inkay/overworld.png differ
diff --git a/graphics/pokemon/inkay/overworld_normal.pal b/graphics/pokemon/inkay/overworld_normal.pal
new file mode 100644
index 000000000000..dc97a035c133
--- /dev/null
+++ b/graphics/pokemon/inkay/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+86 86 86
+249 254 255
+175 211 246
+233 131 135
+253 236 58
+243 183 97
+59 92 139
+101 167 237
+84 137 198
+165 63 68
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/inkay/overworld_shiny.pal b/graphics/pokemon/inkay/overworld_shiny.pal
new file mode 100644
index 000000000000..ba7a04a091a2
--- /dev/null
+++ b/graphics/pokemon/inkay/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+86 86 86
+249 254 255
+175 211 246
+191 148 196
+253 236 58
+243 183 97
+176 143 70
+218 190 116
+202 167 88
+116 87 120
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/inteleon/overworld.png b/graphics/pokemon/inteleon/overworld.png
new file mode 100644
index 000000000000..14059b3972fd
Binary files /dev/null and b/graphics/pokemon/inteleon/overworld.png differ
diff --git a/graphics/pokemon/inteleon/overworld_normal.pal b/graphics/pokemon/inteleon/overworld_normal.pal
new file mode 100644
index 000000000000..2217c0ec8321
--- /dev/null
+++ b/graphics/pokemon/inteleon/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+116 252 0
+0 0 0
+4 20 32
+100 100 24
+24 60 96
+36 96 116
+36 36 36
+196 168 32
+16 16 16
+196 196 64
+224 224 84
+36 92 136
+60 148 184
+116 184 212
+176 216 232
+244 244 244
diff --git a/graphics/pokemon/inteleon/overworld_shiny.pal b/graphics/pokemon/inteleon/overworld_shiny.pal
new file mode 100644
index 000000000000..28c81ff36ce6
--- /dev/null
+++ b/graphics/pokemon/inteleon/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+0 49 65
+74 32 49
+0 156 180
+16 32 49
+213 213 213
+115 57 82
+156 156 156
+172 82 123
+222 115 172
+16 230 255
+49 74 106
+74 106 156
+106 139 189
+213 213 213
diff --git a/graphics/pokemon/ivysaur/overworld.png b/graphics/pokemon/ivysaur/overworld.png
new file mode 100644
index 000000000000..03e9ca56fc35
Binary files /dev/null and b/graphics/pokemon/ivysaur/overworld.png differ
diff --git a/graphics/pokemon/ivysaur/overworld_normal.pal b/graphics/pokemon/ivysaur/overworld_normal.pal
new file mode 100644
index 000000000000..c1f09aeed63b
--- /dev/null
+++ b/graphics/pokemon/ivysaur/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 32 40
+240 128 160
+144 64 32
+200 88 120
+40 64 64
+48 88 24
+104 208 192
+72 168 152
+96 168 16
+0 0 0
+136 224 32
+64 128 120
+64 64 64
+232 232 248
+200 200 216
diff --git a/graphics/pokemon/ivysaur/overworld_shiny.pal b/graphics/pokemon/ivysaur/overworld_shiny.pal
new file mode 100644
index 000000000000..28a0371d2590
--- /dev/null
+++ b/graphics/pokemon/ivysaur/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 210 164
+136 72 0
+248 208 64
+144 64 32
+232 160 0
+64 80 32
+64 96 48
+160 208 56
+112 152 48
+56 144 16
+0 0 0
+96 184 56
+72 120 40
+64 64 64
+232 232 248
+176 176 176
diff --git a/graphics/pokemon/jangmo_o/overworld.png b/graphics/pokemon/jangmo_o/overworld.png
new file mode 100644
index 000000000000..d21cda1e95e3
Binary files /dev/null and b/graphics/pokemon/jangmo_o/overworld.png differ
diff --git a/graphics/pokemon/jangmo_o/overworld_normal.pal b/graphics/pokemon/jangmo_o/overworld_normal.pal
new file mode 100644
index 000000000000..0bc5d026a79d
--- /dev/null
+++ b/graphics/pokemon/jangmo_o/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+122 98 34
+241 210 67
+75 75 75
+49 49 49
+16 16 16
+172 172 172
+127 127 127
+232 232 232
+203 63 66
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/jangmo_o/overworld_shiny.pal b/graphics/pokemon/jangmo_o/overworld_shiny.pal
new file mode 100644
index 000000000000..fb57b014b9f3
--- /dev/null
+++ b/graphics/pokemon/jangmo_o/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+122 98 34
+248 120 192
+75 75 75
+49 49 49
+16 16 16
+224 248 56
+168 184 16
+232 232 232
+203 63 66
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/jellicent/followerf.png b/graphics/pokemon/jellicent/followerf.png
new file mode 100644
index 000000000000..1de8ee407b9c
Binary files /dev/null and b/graphics/pokemon/jellicent/followerf.png differ
diff --git a/graphics/pokemon/jellicent/overworld.png b/graphics/pokemon/jellicent/overworld.png
new file mode 100644
index 000000000000..315750cd18d1
Binary files /dev/null and b/graphics/pokemon/jellicent/overworld.png differ
diff --git a/graphics/pokemon/jellicent/overworld_normal.pal b/graphics/pokemon/jellicent/overworld_normal.pal
new file mode 100644
index 000000000000..8b935ea96ce7
--- /dev/null
+++ b/graphics/pokemon/jellicent/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+11 11 11
+208 227 255
+208 227 255
+25 47 95
+47 121 199
+47 191 245
+218 63 33
+147 164 208
+25 47 95
+0 0 0
+147 164 208
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/jellicent/overworld_shiny.pal b/graphics/pokemon/jellicent/overworld_shiny.pal
new file mode 100644
index 000000000000..e63fc0fd0de7
--- /dev/null
+++ b/graphics/pokemon/jellicent/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+11 11 11
+208 224 248
+208 227 255
+40 72 56
+56 152 112
+32 208 136
+218 63 33
+152 184 176
+25 47 95
+0 0 0
+147 164 208
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/jigglypuff/overworld.png b/graphics/pokemon/jigglypuff/overworld.png
new file mode 100644
index 000000000000..7da20e473409
Binary files /dev/null and b/graphics/pokemon/jigglypuff/overworld.png differ
diff --git a/graphics/pokemon/jigglypuff/overworld_normal.pal b/graphics/pokemon/jigglypuff/overworld_normal.pal
new file mode 100644
index 000000000000..ff0e5bdb5085
--- /dev/null
+++ b/graphics/pokemon/jigglypuff/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 210 164
+0 0 0
+144 72 88
+96 40 64
+248 168 184
+208 112 144
+96 72 64
+232 232 248
+112 160 248
+80 80 120
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/jigglypuff/overworld_shiny.pal b/graphics/pokemon/jigglypuff/overworld_shiny.pal
new file mode 100644
index 000000000000..7567d53695a0
--- /dev/null
+++ b/graphics/pokemon/jigglypuff/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 210 164
+0 0 0
+152 72 96
+96 40 64
+248 200 216
+208 144 184
+96 72 64
+232 232 248
+136 232 144
+8 152 80
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/jirachi/overworld.png b/graphics/pokemon/jirachi/overworld.png
new file mode 100644
index 000000000000..91b63d0bb7fb
Binary files /dev/null and b/graphics/pokemon/jirachi/overworld.png differ
diff --git a/graphics/pokemon/jirachi/overworld_normal.pal b/graphics/pokemon/jirachi/overworld_normal.pal
new file mode 100644
index 000000000000..1858bff2975f
--- /dev/null
+++ b/graphics/pokemon/jirachi/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 64 16
+200 152 0
+248 216 88
+216 184 64
+0 0 0
+168 112 8
+32 88 80
+120 200 176
+56 128 112
+88 160 144
+232 232 248
+80 104 104
+176 184 184
+136 152 152
+208 208 224
diff --git a/graphics/pokemon/jirachi/overworld_shiny.pal b/graphics/pokemon/jirachi/overworld_shiny.pal
new file mode 100644
index 000000000000..af5026555746
--- /dev/null
+++ b/graphics/pokemon/jirachi/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 64 16
+200 152 0
+248 216 88
+216 184 64
+0 0 0
+168 112 8
+96 48 48
+224 144 128
+176 48 48
+208 80 80
+232 232 248
+112 96 88
+192 176 168
+152 136 128
+232 216 208
diff --git a/graphics/pokemon/jolteon/overworld.png b/graphics/pokemon/jolteon/overworld.png
new file mode 100644
index 000000000000..0c739e25ca9b
Binary files /dev/null and b/graphics/pokemon/jolteon/overworld.png differ
diff --git a/graphics/pokemon/jolteon/overworld_normal.pal b/graphics/pokemon/jolteon/overworld_normal.pal
new file mode 100644
index 000000000000..4c5e10bff713
--- /dev/null
+++ b/graphics/pokemon/jolteon/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 56 40
+248 200 24
+248 248 80
+168 104 32
+232 160 32
+0 0 0
+72 64 80
+208 224 232
+168 168 192
+232 232 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/jolteon/overworld_shiny.pal b/graphics/pokemon/jolteon/overworld_shiny.pal
new file mode 100644
index 000000000000..226c0bedb5ef
--- /dev/null
+++ b/graphics/pokemon/jolteon/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 56 40
+208 232 24
+248 248 104
+112 144 32
+168 200 32
+0 0 0
+72 64 80
+208 224 232
+168 168 192
+232 232 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/joltik/overworld.png b/graphics/pokemon/joltik/overworld.png
new file mode 100644
index 000000000000..1a94172c2993
Binary files /dev/null and b/graphics/pokemon/joltik/overworld.png differ
diff --git a/graphics/pokemon/joltik/overworld_normal.pal b/graphics/pokemon/joltik/overworld_normal.pal
new file mode 100644
index 000000000000..28d37d4ea595
--- /dev/null
+++ b/graphics/pokemon/joltik/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+199 164 5
+104 71 5
+245 218 55
+69 46 0
+18 33 55
+40 79 191
+87 95 227
+185 126 0
+218 218 236
+11 11 11
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/joltik/overworld_shiny.pal b/graphics/pokemon/joltik/overworld_shiny.pal
new file mode 100644
index 000000000000..93966ce506e7
--- /dev/null
+++ b/graphics/pokemon/joltik/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+184 184 24
+96 96 8
+216 224 80
+69 46 0
+18 33 55
+56 24 88
+184 72 216
+185 126 0
+218 218 236
+11 11 11
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/jumpluff/overworld.png b/graphics/pokemon/jumpluff/overworld.png
new file mode 100644
index 000000000000..b22b2d7c1c22
Binary files /dev/null and b/graphics/pokemon/jumpluff/overworld.png differ
diff --git a/graphics/pokemon/jumpluff/overworld_normal.pal b/graphics/pokemon/jumpluff/overworld_normal.pal
new file mode 100644
index 000000000000..2878d2f888dc
--- /dev/null
+++ b/graphics/pokemon/jumpluff/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+112 112 96
+248 248 200
+0 0 0
+192 184 160
+32 56 96
+96 152 224
+56 112 216
+232 232 248
+120 16 8
+40 80 136
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/jumpluff/overworld_shiny.pal b/graphics/pokemon/jumpluff/overworld_shiny.pal
new file mode 100644
index 000000000000..9c46461e6eed
--- /dev/null
+++ b/graphics/pokemon/jumpluff/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+120 80 112
+248 248 200
+0 0 0
+200 168 216
+64 32 48
+248 200 224
+216 152 192
+232 232 248
+120 16 8
+136 80 112
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/jynx/overworld.png b/graphics/pokemon/jynx/overworld.png
new file mode 100644
index 000000000000..d53ff2d3c10c
Binary files /dev/null and b/graphics/pokemon/jynx/overworld.png differ
diff --git a/graphics/pokemon/jynx/overworld_normal.pal b/graphics/pokemon/jynx/overworld_normal.pal
new file mode 100644
index 000000000000..801b1bb0f964
--- /dev/null
+++ b/graphics/pokemon/jynx/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+64 56 56
+248 208 96
+192 152 24
+248 232 184
+136 96 192
+104 72 136
+240 128 160
+232 232 248
+192 192 208
+200 88 120
+248 224 32
+152 152 184
+248 88 72
+176 56 32
diff --git a/graphics/pokemon/jynx/overworld_shiny.pal b/graphics/pokemon/jynx/overworld_shiny.pal
new file mode 100644
index 000000000000..dea4bbb264cc
--- /dev/null
+++ b/graphics/pokemon/jynx/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+64 56 56
+248 240 128
+200 176 112
+248 248 200
+136 96 192
+104 72 136
+240 144 192
+232 232 248
+192 192 208
+200 120 152
+248 224 32
+152 152 184
+240 144 184
+200 88 152
diff --git a/graphics/pokemon/kabuto/overworld.png b/graphics/pokemon/kabuto/overworld.png
new file mode 100644
index 000000000000..d13b97f85542
Binary files /dev/null and b/graphics/pokemon/kabuto/overworld.png differ
diff --git a/graphics/pokemon/kabuto/overworld_normal.pal b/graphics/pokemon/kabuto/overworld_normal.pal
new file mode 100644
index 000000000000..9b372b52296d
--- /dev/null
+++ b/graphics/pokemon/kabuto/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 40 40
+120 96 64
+152 120 72
+0 0 0
+88 72 56
+208 64 64
+168 128 56
+48 56 72
+136 24 24
+232 184 88
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/kabuto/overworld_shiny.pal b/graphics/pokemon/kabuto/overworld_shiny.pal
new file mode 100644
index 000000000000..39c845e290f5
--- /dev/null
+++ b/graphics/pokemon/kabuto/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 96 40
+96 176 56
+144 200 56
+0 0 0
+80 128 48
+208 64 64
+168 128 56
+48 56 72
+136 24 24
+232 184 88
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/kabutops/overworld.png b/graphics/pokemon/kabutops/overworld.png
new file mode 100644
index 000000000000..084d6339b7df
Binary files /dev/null and b/graphics/pokemon/kabutops/overworld.png differ
diff --git a/graphics/pokemon/kabutops/overworld_normal.pal b/graphics/pokemon/kabutops/overworld_normal.pal
new file mode 100644
index 000000000000..04f6316663cf
--- /dev/null
+++ b/graphics/pokemon/kabutops/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 40 40
+88 56 32
+152 120 72
+0 0 0
+136 96 40
+104 72 48
+64 64 64
+152 208 160
+192 192 200
+232 232 248
+104 104 120
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/kabutops/overworld_shiny.pal b/graphics/pokemon/kabutops/overworld_shiny.pal
new file mode 100644
index 000000000000..f53dd0d57a1f
--- /dev/null
+++ b/graphics/pokemon/kabutops/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 56 40
+80 128 48
+176 192 72
+0 0 0
+136 176 64
+104 152 56
+64 64 64
+152 152 152
+192 192 200
+232 232 248
+104 104 120
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/kadabra/overworld.png b/graphics/pokemon/kadabra/overworld.png
new file mode 100644
index 000000000000..99b95ad6abdb
Binary files /dev/null and b/graphics/pokemon/kadabra/overworld.png differ
diff --git a/graphics/pokemon/kadabra/overworld_normal.pal b/graphics/pokemon/kadabra/overworld_normal.pal
new file mode 100644
index 000000000000..cc955b59a3c6
--- /dev/null
+++ b/graphics/pokemon/kadabra/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 56 24
+0 0 0
+248 216 96
+144 120 56
+216 168 48
+96 72 48
+232 96 120
+192 40 64
+232 232 248
+176 176 184
+144 120 96
+248 240 192
+88 88 88
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/kadabra/overworld_shiny.pal b/graphics/pokemon/kadabra/overworld_shiny.pal
new file mode 100644
index 000000000000..cd209cc4b60b
--- /dev/null
+++ b/graphics/pokemon/kadabra/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 80 64
+0 0 0
+248 224 144
+176 160 112
+232 192 112
+128 112 88
+232 96 120
+192 40 64
+232 232 248
+176 176 184
+168 144 128
+248 240 208
+88 88 88
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/kakuna/overworld.png b/graphics/pokemon/kakuna/overworld.png
new file mode 100644
index 000000000000..327951e5c3ff
Binary files /dev/null and b/graphics/pokemon/kakuna/overworld.png differ
diff --git a/graphics/pokemon/kakuna/overworld_normal.pal b/graphics/pokemon/kakuna/overworld_normal.pal
new file mode 100644
index 000000000000..8cdc6d8be9b0
--- /dev/null
+++ b/graphics/pokemon/kakuna/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 72 40
+248 208 64
+192 152 64
+64 64 64
+0 0 0
+232 232 248
+144 112 32
+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/kakuna/overworld_shiny.pal b/graphics/pokemon/kakuna/overworld_shiny.pal
new file mode 100644
index 000000000000..5955987512b2
--- /dev/null
+++ b/graphics/pokemon/kakuna/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 96 40
+192 216 64
+136 152 64
+64 64 64
+0 0 0
+232 232 248
+112 144 32
+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/kangaskhan/overworld.png b/graphics/pokemon/kangaskhan/overworld.png
new file mode 100644
index 000000000000..2b1f21c66dfc
Binary files /dev/null and b/graphics/pokemon/kangaskhan/overworld.png differ
diff --git a/graphics/pokemon/kangaskhan/overworld_normal.pal b/graphics/pokemon/kangaskhan/overworld_normal.pal
new file mode 100644
index 000000000000..9defd5939ff9
--- /dev/null
+++ b/graphics/pokemon/kangaskhan/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+208 168 96
+56 56 64
+112 112 112
+72 72 72
+160 120 40
+64 48 32
+248 200 120
+120 80 56
+184 120 112
+232 232 248
+104 8 16
+168 184 208
+128 112 144
+88 72 40
diff --git a/graphics/pokemon/kangaskhan/overworld_shiny.pal b/graphics/pokemon/kangaskhan/overworld_shiny.pal
new file mode 100644
index 000000000000..d295826d5011
--- /dev/null
+++ b/graphics/pokemon/kangaskhan/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+208 168 96
+56 56 64
+120 144 96
+64 88 64
+160 120 40
+80 56 64
+248 200 120
+136 120 128
+176 168 144
+232 232 248
+104 8 16
+168 184 208
+128 112 144
+80 72 48
diff --git a/graphics/pokemon/karrablast/overworld.png b/graphics/pokemon/karrablast/overworld.png
new file mode 100644
index 000000000000..1d4d9de0c10f
Binary files /dev/null and b/graphics/pokemon/karrablast/overworld.png differ
diff --git a/graphics/pokemon/karrablast/overworld_normal.pal b/graphics/pokemon/karrablast/overworld_normal.pal
new file mode 100644
index 000000000000..c15bfcc4572f
--- /dev/null
+++ b/graphics/pokemon/karrablast/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+25 47 79
+71 129 255
+40 95 255
+11 11 11
+47 71 121
+47 71 121
+55 138 164
+104 208 255
+40 40 40
+63 63 63
+255 218 18
+191 71 0
+238 240 246
+104 87 25
+128 168 24
diff --git a/graphics/pokemon/karrablast/overworld_shiny.pal b/graphics/pokemon/karrablast/overworld_shiny.pal
new file mode 100644
index 000000000000..6a9fdd5639be
--- /dev/null
+++ b/graphics/pokemon/karrablast/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+25 47 79
+16 216 200
+8 168 144
+11 11 11
+47 71 121
+8 120 104
+55 138 164
+112 208 248
+40 40 40
+63 63 63
+176 248 16
+191 71 0
+238 240 246
+80 112 32
+128 168 24
diff --git a/graphics/pokemon/kartana/overworld.png b/graphics/pokemon/kartana/overworld.png
new file mode 100644
index 000000000000..30c3f272afe7
Binary files /dev/null and b/graphics/pokemon/kartana/overworld.png differ
diff --git a/graphics/pokemon/kartana/overworld_normal.pal b/graphics/pokemon/kartana/overworld_normal.pal
new file mode 100644
index 000000000000..3803c6dd2086
--- /dev/null
+++ b/graphics/pokemon/kartana/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+73 51 187
+0 0 0
+255 255 255
+177 64 35
+216 88 56
+200 200 200
+135 133 133
+167 148 37
+255 225 86
+255 222 65
+112 99 24
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/kartana/overworld_shiny.pal b/graphics/pokemon/kartana/overworld_shiny.pal
new file mode 100644
index 000000000000..56caa2f57417
--- /dev/null
+++ b/graphics/pokemon/kartana/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+73 51 187
+0 0 0
+208 224 224
+177 64 35
+216 88 56
+152 160 176
+135 133 133
+16 8 88
+24 48 160
+255 222 65
+112 99 24
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/kecleon/overworld.png b/graphics/pokemon/kecleon/overworld.png
new file mode 100644
index 000000000000..b41cf6884034
Binary files /dev/null and b/graphics/pokemon/kecleon/overworld.png differ
diff --git a/graphics/pokemon/kecleon/overworld_normal.pal b/graphics/pokemon/kecleon/overworld_normal.pal
new file mode 100644
index 000000000000..036c5783a994
--- /dev/null
+++ b/graphics/pokemon/kecleon/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+0 0 0
+88 80 40
+248 224 120
+128 112 64
+216 168 32
+32 56 16
+144 192 88
+184 224 104
+248 192 64
+120 168 48
+96 128 40
+232 232 248
+152 40 64
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/kecleon/overworld_shiny.pal b/graphics/pokemon/kecleon/overworld_shiny.pal
new file mode 100644
index 000000000000..77cc0112e01f
--- /dev/null
+++ b/graphics/pokemon/kecleon/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+0 0 0
+88 80 40
+248 224 120
+128 112 64
+240 144 32
+32 56 16
+120 200 152
+152 224 176
+248 184 72
+96 168 120
+64 136 96
+232 232 248
+152 40 64
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/keldeo/overworld.png b/graphics/pokemon/keldeo/overworld.png
new file mode 100644
index 000000000000..9e7fd65b83bc
Binary files /dev/null and b/graphics/pokemon/keldeo/overworld.png differ
diff --git a/graphics/pokemon/keldeo/overworld_normal.pal b/graphics/pokemon/keldeo/overworld_normal.pal
new file mode 100644
index 000000000000..d967f0c6616f
--- /dev/null
+++ b/graphics/pokemon/keldeo/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 160 176
+142 40 17
+230 77 40
+173 48 18
+75 67 43
+247 229 180
+47 77 136
+237 209 118
+99 141 204
+177 138 76
+86 111 167
+153 207 251
+24 40 16
+86 180 226
+152 232 243
+238 238 247
diff --git a/graphics/pokemon/keldeo/overworld_shiny.pal b/graphics/pokemon/keldeo/overworld_shiny.pal
new file mode 100644
index 000000000000..f9a004aae0db
--- /dev/null
+++ b/graphics/pokemon/keldeo/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 160 176
+80 40 16
+224 96 40
+170 68 25
+88 64 48
+222 214 170
+24 56 88
+222 214 170
+47 114 145
+122 166 83
+24 113 103
+222 214 170
+24 40 16
+72 144 200
+222 214 170
+238 238 247
diff --git a/graphics/pokemon/kilowattrel/back.png b/graphics/pokemon/kilowattrel/back.png
index 26eb440b6a3c..d72494af1c0c 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 3a8e97164463..fdb1a38e4822 100755
Binary files a/graphics/pokemon/kilowattrel/front.png and b/graphics/pokemon/kilowattrel/front.png differ
diff --git a/graphics/pokemon/kilowattrel/shiny.pal b/graphics/pokemon/kilowattrel/shiny.pal
index a9ad2ba3a8c8..ab148371be3d 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/kingdra/overworld.png b/graphics/pokemon/kingdra/overworld.png
new file mode 100644
index 000000000000..86a8e4f58a09
Binary files /dev/null and b/graphics/pokemon/kingdra/overworld.png differ
diff --git a/graphics/pokemon/kingdra/overworld_normal.pal b/graphics/pokemon/kingdra/overworld_normal.pal
new file mode 100644
index 000000000000..dbb4f4a0b32a
--- /dev/null
+++ b/graphics/pokemon/kingdra/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+24 56 96
+40 80 128
+144 192 232
+0 0 0
+112 152 200
+192 208 232
+72 120 160
+168 184 208
+232 232 248
+112 16 16
+72 72 72
+176 128 40
+136 96 32
+216 160 56
+0 0 0
diff --git a/graphics/pokemon/kingdra/overworld_shiny.pal b/graphics/pokemon/kingdra/overworld_shiny.pal
new file mode 100644
index 000000000000..a33944d23756
--- /dev/null
+++ b/graphics/pokemon/kingdra/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 48 96
+88 80 136
+192 184 248
+0 0 0
+160 152 216
+192 208 232
+120 120 176
+168 184 208
+232 232 248
+112 16 16
+72 72 72
+176 128 40
+136 96 32
+216 160 56
+0 0 0
diff --git a/graphics/pokemon/kingler/overworld.png b/graphics/pokemon/kingler/overworld.png
new file mode 100644
index 000000000000..4538f564cf6c
Binary files /dev/null and b/graphics/pokemon/kingler/overworld.png differ
diff --git a/graphics/pokemon/kingler/overworld_normal.pal b/graphics/pokemon/kingler/overworld_normal.pal
new file mode 100644
index 000000000000..f79648f08ba6
--- /dev/null
+++ b/graphics/pokemon/kingler/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+216 104 48
+168 64 56
+64 40 40
+176 152 104
+224 192 152
+232 232 248
+160 128 80
+152 208 160
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/kingler/overworld_shiny.pal b/graphics/pokemon/kingler/overworld_shiny.pal
new file mode 100644
index 000000000000..e95a5b2ab964
--- /dev/null
+++ b/graphics/pokemon/kingler/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+160 176 112
+112 128 56
+72 80 32
+192 184 120
+208 200 168
+232 232 248
+168 160 80
+200 200 208
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/kirlia/overworld.png b/graphics/pokemon/kirlia/overworld.png
new file mode 100644
index 000000000000..6536e6c1211c
Binary files /dev/null and b/graphics/pokemon/kirlia/overworld.png differ
diff --git a/graphics/pokemon/kirlia/overworld_normal.pal b/graphics/pokemon/kirlia/overworld_normal.pal
new file mode 100644
index 000000000000..519ef3335d3a
--- /dev/null
+++ b/graphics/pokemon/kirlia/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+192 160 232
+128 32 56
+184 48 72
+0 0 0
+240 104 104
+16 64 32
+72 176 88
+40 128 56
+104 200 128
+168 168 176
+232 232 248
+200 200 216
+128 128 144
+72 72 80
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/kirlia/overworld_shiny.pal b/graphics/pokemon/kirlia/overworld_shiny.pal
new file mode 100644
index 000000000000..f09a89f87555
--- /dev/null
+++ b/graphics/pokemon/kirlia/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+128 80 56
+208 104 64
+0 0 0
+240 160 72
+16 96 120
+88 200 176
+32 144 120
+160 224 200
+168 168 144
+232 232 248
+208 208 184
+128 128 112
+88 88 64
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/klang/overworld.png b/graphics/pokemon/klang/overworld.png
new file mode 100644
index 000000000000..ebe1563db754
Binary files /dev/null and b/graphics/pokemon/klang/overworld.png differ
diff --git a/graphics/pokemon/klang/overworld_normal.pal b/graphics/pokemon/klang/overworld_normal.pal
new file mode 100644
index 000000000000..b44ea14f551e
--- /dev/null
+++ b/graphics/pokemon/klang/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 72 72
+40 40 40
+208 218 236
+96 88 80
+138 138 138
+0 0 0
+248 248 248
+88 96 88
+33 164 182
+33 129 138
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/klang/overworld_shiny.pal b/graphics/pokemon/klang/overworld_shiny.pal
new file mode 100644
index 000000000000..6c1adf445d77
--- /dev/null
+++ b/graphics/pokemon/klang/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 72 72
+40 40 40
+216 200 136
+96 88 80
+152 144 112
+0 0 0
+248 248 248
+88 96 88
+104 224 40
+80 120 32
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/kleavor/overworld.png b/graphics/pokemon/kleavor/overworld.png
new file mode 100644
index 000000000000..cce4eed8c9a1
Binary files /dev/null and b/graphics/pokemon/kleavor/overworld.png differ
diff --git a/graphics/pokemon/kleavor/overworld_normal.pal b/graphics/pokemon/kleavor/overworld_normal.pal
new file mode 100644
index 000000000000..c2a4f32ab375
--- /dev/null
+++ b/graphics/pokemon/kleavor/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+106 90 90
+82 65 65
+49 32 41
+74 49 32
+230 180 98
+106 115 139
+172 123 65
+148 131 115
+222 213 189
+238 238 255
+131 131 131
+148 156 180
+189 205 222
+180 180 205
diff --git a/graphics/pokemon/kleavor/overworld_shiny.pal b/graphics/pokemon/kleavor/overworld_shiny.pal
new file mode 100644
index 000000000000..1e5e579a02dc
--- /dev/null
+++ b/graphics/pokemon/kleavor/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+106 90 90
+82 65 65
+49 32 41
+74 49 32
+164 180 115
+106 115 139
+139 148 90
+148 131 115
+222 213 189
+238 238 255
+131 131 131
+148 156 180
+189 205 222
+180 180 205
diff --git a/graphics/pokemon/klefki/overworld.png b/graphics/pokemon/klefki/overworld.png
new file mode 100644
index 000000000000..e24ad8ec69d7
Binary files /dev/null and b/graphics/pokemon/klefki/overworld.png differ
diff --git a/graphics/pokemon/klefki/overworld_normal.pal b/graphics/pokemon/klefki/overworld_normal.pal
new file mode 100644
index 000000000000..6c6b259d6763
--- /dev/null
+++ b/graphics/pokemon/klefki/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+68 70 72
+233 231 233
+146 158 166
+16 16 16
+190 195 200
+250 72 143
+94 38 26
+239 173 69
+194 112 72
+96 64 50
+233 231 233
+146 158 166
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/klefki/overworld_shiny.pal b/graphics/pokemon/klefki/overworld_shiny.pal
new file mode 100644
index 000000000000..0a029849a617
--- /dev/null
+++ b/graphics/pokemon/klefki/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+68 70 72
+217 209 139
+151 143 70
+16 16 16
+182 174 106
+250 72 143
+94 38 26
+239 173 69
+194 112 72
+96 64 50
+251 251 251
+188 188 188
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/klink/overworld.png b/graphics/pokemon/klink/overworld.png
new file mode 100644
index 000000000000..e52f7a5a6b01
Binary files /dev/null and b/graphics/pokemon/klink/overworld.png differ
diff --git a/graphics/pokemon/klink/overworld_normal.pal b/graphics/pokemon/klink/overworld_normal.pal
new file mode 100644
index 000000000000..c9ec80b5aabd
--- /dev/null
+++ b/graphics/pokemon/klink/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+32 54 54
+63 63 63
+104 104 114
+208 218 236
+138 138 138
+11 11 11
+95 95 104
+164 173 186
+229 229 247
+33 164 182
+28 142 159
+0 0 0
+90 90 98
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/klink/overworld_shiny.pal b/graphics/pokemon/klink/overworld_shiny.pal
new file mode 100644
index 000000000000..c226e97f8bf9
--- /dev/null
+++ b/graphics/pokemon/klink/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+32 54 54
+63 63 63
+104 104 114
+208 192 136
+152 144 112
+11 11 11
+95 95 104
+229 229 247
+104 216 40
+104 168 48
+0 0 0
+90 90 98
+33 164 182
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/klinklang/overworld.png b/graphics/pokemon/klinklang/overworld.png
new file mode 100644
index 000000000000..818587505987
Binary files /dev/null and b/graphics/pokemon/klinklang/overworld.png differ
diff --git a/graphics/pokemon/klinklang/overworld_normal.pal b/graphics/pokemon/klinklang/overworld_normal.pal
new file mode 100644
index 000000000000..b459e2e9228a
--- /dev/null
+++ b/graphics/pokemon/klinklang/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 96 128
+40 40 40
+208 218 236
+104 104 129
+155 155 164
+0 0 0
+248 248 248
+88 96 88
+33 164 182
+33 129 138
+224 96 64
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/klinklang/overworld_shiny.pal b/graphics/pokemon/klinklang/overworld_shiny.pal
new file mode 100644
index 000000000000..ec1ee862f6b2
--- /dev/null
+++ b/graphics/pokemon/klinklang/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 72 72
+40 40 40
+216 200 136
+96 88 80
+152 144 112
+0 0 0
+248 248 248
+88 96 88
+104 224 40
+80 120 32
+224 96 152
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/koffing/overworld.png b/graphics/pokemon/koffing/overworld.png
new file mode 100644
index 000000000000..33fefbdcae7d
Binary files /dev/null and b/graphics/pokemon/koffing/overworld.png differ
diff --git a/graphics/pokemon/koffing/overworld_normal.pal b/graphics/pokemon/koffing/overworld_normal.pal
new file mode 100644
index 000000000000..cbc0980a5bc1
--- /dev/null
+++ b/graphics/pokemon/koffing/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+200 184 120
+144 128 40
+56 40 56
+88 80 120
+136 128 208
+120 104 192
+0 0 0
+232 232 248
+104 56 64
+168 168 208
+128 72 80
+128 128 128
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/koffing/overworld_shiny.pal b/graphics/pokemon/koffing/overworld_shiny.pal
new file mode 100644
index 000000000000..ad161817b013
--- /dev/null
+++ b/graphics/pokemon/koffing/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+184 144 184
+128 72 128
+48 72 80
+72 112 96
+136 168 168
+104 144 136
+0 0 0
+232 232 248
+104 56 64
+168 168 208
+128 72 80
+128 128 128
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/komala/overworld.png b/graphics/pokemon/komala/overworld.png
new file mode 100644
index 000000000000..c7bbcb57a4ff
Binary files /dev/null and b/graphics/pokemon/komala/overworld.png differ
diff --git a/graphics/pokemon/komala/overworld_normal.pal b/graphics/pokemon/komala/overworld_normal.pal
new file mode 100644
index 000000000000..c79f9d97d43f
--- /dev/null
+++ b/graphics/pokemon/komala/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+228 231 237
+236 199 158
+172 192 216
+213 168 142
+184 185 190
+168 176 192
+123 139 154
+172 134 78
+79 79 79
+118 74 51
+58 68 78
+81 59 47
+69 47 30
+36 36 36
+0 0 0
diff --git a/graphics/pokemon/komala/overworld_shiny.pal b/graphics/pokemon/komala/overworld_shiny.pal
new file mode 100644
index 000000000000..75f12831d470
--- /dev/null
+++ b/graphics/pokemon/komala/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+228 231 237
+236 199 158
+172 192 216
+213 168 142
+184 185 190
+168 176 192
+123 139 154
+232 88 96
+79 79 79
+240 240 240
+58 68 78
+81 59 47
+69 47 30
+36 36 36
+0 0 0
diff --git a/graphics/pokemon/kommo_o/overworld.png b/graphics/pokemon/kommo_o/overworld.png
new file mode 100644
index 000000000000..91e7256a9975
Binary files /dev/null and b/graphics/pokemon/kommo_o/overworld.png differ
diff --git a/graphics/pokemon/kommo_o/overworld_normal.pal b/graphics/pokemon/kommo_o/overworld_normal.pal
new file mode 100644
index 000000000000..09421fc5f87d
--- /dev/null
+++ b/graphics/pokemon/kommo_o/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+16 16 16
+240 211 94
+92 82 42
+207 151 63
+224 81 62
+91 91 91
+231 228 217
+72 70 70
+177 171 171
+140 136 136
+101 104 55
+26 30 23
+25 19 18
+33 21 20
+0 0 0
diff --git a/graphics/pokemon/kommo_o/overworld_shiny.pal b/graphics/pokemon/kommo_o/overworld_shiny.pal
new file mode 100644
index 000000000000..dcdea738cc3e
--- /dev/null
+++ b/graphics/pokemon/kommo_o/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+16 16 16
+240 136 184
+92 82 42
+240 40 80
+224 81 62
+91 91 91
+231 228 217
+72 70 70
+200 208 0
+160 152 0
+101 104 55
+26 30 23
+25 19 18
+33 21 20
+0 0 0
diff --git a/graphics/pokemon/krabby/overworld.png b/graphics/pokemon/krabby/overworld.png
new file mode 100644
index 000000000000..abe66ceb6f23
Binary files /dev/null and b/graphics/pokemon/krabby/overworld.png differ
diff --git a/graphics/pokemon/krabby/overworld_normal.pal b/graphics/pokemon/krabby/overworld_normal.pal
new file mode 100644
index 000000000000..0c429de50a4e
--- /dev/null
+++ b/graphics/pokemon/krabby/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 56 48
+0 0 0
+200 96 32
+168 64 56
+192 168 128
+200 200 208
+232 232 248
+160 128 80
+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/krabby/overworld_shiny.pal b/graphics/pokemon/krabby/overworld_shiny.pal
new file mode 100644
index 000000000000..2285ef39740b
--- /dev/null
+++ b/graphics/pokemon/krabby/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 72 48
+0 0 0
+200 176 32
+168 136 40
+192 184 128
+200 200 208
+232 232 248
+160 152 80
+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/kricketot/overworld.png b/graphics/pokemon/kricketot/overworld.png
new file mode 100644
index 000000000000..d9b6033cb939
Binary files /dev/null and b/graphics/pokemon/kricketot/overworld.png differ
diff --git a/graphics/pokemon/kricketot/overworld_normal.pal b/graphics/pokemon/kricketot/overworld_normal.pal
new file mode 100644
index 000000000000..633580b433fe
--- /dev/null
+++ b/graphics/pokemon/kricketot/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 56 56
+0 0 0
+96 64 32
+104 104 104
+224 160 80
+80 40 24
+224 112 88
+168 80 56
+184 88 32
+240 208 144
+144 72 24
+232 232 248
+136 56 32
+176 128 72
+0 0 0
diff --git a/graphics/pokemon/kricketot/overworld_shiny.pal b/graphics/pokemon/kricketot/overworld_shiny.pal
new file mode 100644
index 000000000000..ae480c7e4511
--- /dev/null
+++ b/graphics/pokemon/kricketot/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 56 56
+0 0 0
+96 64 32
+104 104 104
+224 192 80
+80 40 24
+224 152 72
+184 120 56
+184 88 32
+240 208 144
+144 72 24
+232 232 248
+152 80 32
+176 128 72
+0 0 0
diff --git a/graphics/pokemon/kricketune/overworld.png b/graphics/pokemon/kricketune/overworld.png
new file mode 100644
index 000000000000..285d4e2baa53
Binary files /dev/null and b/graphics/pokemon/kricketune/overworld.png differ
diff --git a/graphics/pokemon/kricketune/overworld_normal.pal b/graphics/pokemon/kricketune/overworld_normal.pal
new file mode 100644
index 000000000000..9a0d8a3900b9
--- /dev/null
+++ b/graphics/pokemon/kricketune/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+136 56 32
+168 80 56
+80 40 24
+224 112 88
+0 0 0
+104 104 104
+232 232 248
+56 56 56
+80 80 80
+144 72 24
+96 64 32
+184 88 32
+224 160 80
+240 208 144
+176 128 72
diff --git a/graphics/pokemon/kricketune/overworld_shiny.pal b/graphics/pokemon/kricketune/overworld_shiny.pal
new file mode 100644
index 000000000000..df6ae941dc67
--- /dev/null
+++ b/graphics/pokemon/kricketune/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+120 88 16
+168 112 56
+80 40 24
+224 168 72
+0 0 0
+104 104 104
+232 232 248
+56 56 56
+80 80 80
+144 72 24
+96 64 32
+184 88 32
+224 160 80
+240 208 144
+176 128 72
diff --git a/graphics/pokemon/krokorok/overworld.png b/graphics/pokemon/krokorok/overworld.png
new file mode 100644
index 000000000000..8f1b68615c31
Binary files /dev/null and b/graphics/pokemon/krokorok/overworld.png differ
diff --git a/graphics/pokemon/krokorok/overworld_normal.pal b/graphics/pokemon/krokorok/overworld_normal.pal
new file mode 100644
index 000000000000..d54e50f579b0
--- /dev/null
+++ b/graphics/pokemon/krokorok/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+75 67 43
+75 67 43
+177 138 76
+181 152 110
+142 102 19
+0 0 0
+110 110 110
+110 110 110
+238 238 247
+47 46 47
+192 180 195
+173 76 75
+236 117 117
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/krokorok/overworld_shiny.pal b/graphics/pokemon/krokorok/overworld_shiny.pal
new file mode 100644
index 000000000000..97fdcc9c83a6
--- /dev/null
+++ b/graphics/pokemon/krokorok/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 40 16
+75 67 43
+112 88 56
+128 104 80
+88 64 48
+0 0 0
+224 208 88
+88 88 104
+238 238 247
+160 144 88
+192 180 195
+104 120 160
+136 152 224
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/krookodile/overworld.png b/graphics/pokemon/krookodile/overworld.png
new file mode 100644
index 000000000000..9bac01354437
Binary files /dev/null and b/graphics/pokemon/krookodile/overworld.png differ
diff --git a/graphics/pokemon/krookodile/overworld_normal.pal b/graphics/pokemon/krookodile/overworld_normal.pal
new file mode 100644
index 000000000000..04d2244669f5
--- /dev/null
+++ b/graphics/pokemon/krookodile/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+129 40 55
+191 71 71
+71 33 25
+227 112 104
+0 0 0
+25 25 33
+99 99 99
+236 236 246
+99 99 99
+185 172 189
+38 37 38
+129 138 129
+182 191 199
+182 191 199
+0 0 0
diff --git a/graphics/pokemon/krookodile/overworld_shiny.pal b/graphics/pokemon/krookodile/overworld_shiny.pal
new file mode 100644
index 000000000000..070a0a4e5dd5
--- /dev/null
+++ b/graphics/pokemon/krookodile/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 80 48
+144 120 80
+71 33 25
+168 136 88
+0 0 0
+224 200 88
+99 99 99
+236 236 246
+168 144 64
+185 172 189
+38 37 38
+129 138 129
+182 191 199
+184 192 200
+0 0 0
diff --git a/graphics/pokemon/kubfu/overworld.png b/graphics/pokemon/kubfu/overworld.png
new file mode 100644
index 000000000000..bc9e45a373f5
Binary files /dev/null and b/graphics/pokemon/kubfu/overworld.png differ
diff --git a/graphics/pokemon/kubfu/overworld_normal.pal b/graphics/pokemon/kubfu/overworld_normal.pal
new file mode 100644
index 000000000000..cd5fca32e36f
--- /dev/null
+++ b/graphics/pokemon/kubfu/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+252 220 0
+48 44 44
+188 180 176
+0 0 0
+140 128 124
+28 28 28
+204 204 204
+252 252 252
+220 216 148
+12 12 12
+96 88 96
+96 88 96
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/kubfu/overworld_shiny.pal b/graphics/pokemon/kubfu/overworld_shiny.pal
new file mode 100644
index 000000000000..669a93cba4e9
--- /dev/null
+++ b/graphics/pokemon/kubfu/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+49 41 41
+180 172 148
+0 0 0
+213 205 189
+24 24 24
+205 205 205
+255 255 255
+255 148 82
+8 8 8
+24 24 24
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/kyogre/overworld.png b/graphics/pokemon/kyogre/overworld.png
new file mode 100644
index 000000000000..f69db09df803
Binary files /dev/null and b/graphics/pokemon/kyogre/overworld.png differ
diff --git a/graphics/pokemon/kyogre/overworld_normal.pal b/graphics/pokemon/kyogre/overworld_normal.pal
new file mode 100644
index 000000000000..24e7fc2623a6
--- /dev/null
+++ b/graphics/pokemon/kyogre/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 96 152
+24 56 88
+64 128 192
+16 16 16
+96 160 192
+128 184 216
+112 120 128
+152 24 24
+56 56 56
+200 40 40
+88 16 8
+200 216 240
+152 168 176
+224 192 32
+128 112 24
diff --git a/graphics/pokemon/kyogre/overworld_shiny.pal b/graphics/pokemon/kyogre/overworld_shiny.pal
new file mode 100644
index 000000000000..660c8e41e559
--- /dev/null
+++ b/graphics/pokemon/kyogre/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+120 80 136
+96 56 104
+152 96 168
+16 16 16
+176 112 200
+208 128 232
+112 120 128
+152 24 24
+56 56 56
+200 40 40
+88 16 8
+200 216 240
+152 168 176
+224 192 32
+128 112 24
diff --git a/graphics/pokemon/kyurem/overworld.png b/graphics/pokemon/kyurem/overworld.png
new file mode 100644
index 000000000000..adf00b5e87cf
Binary files /dev/null and b/graphics/pokemon/kyurem/overworld.png differ
diff --git a/graphics/pokemon/kyurem/overworld_normal.pal b/graphics/pokemon/kyurem/overworld_normal.pal
new file mode 100644
index 000000000000..5f63791fb897
--- /dev/null
+++ b/graphics/pokemon/kyurem/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+18 32 11
+198 224 204
+74 91 80
+129 120 123
+152 200 162
+62 62 66
+228 197 26
+139 130 133
+55 83 64
+27 32 25
+209 226 216
+99 99 99
+142 142 252
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/kyurem/overworld_shiny.pal b/graphics/pokemon/kyurem/overworld_shiny.pal
new file mode 100644
index 000000000000..e36f817b045d
--- /dev/null
+++ b/graphics/pokemon/kyurem/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+20 32 30
+232 239 247
+40 72 79
+88 104 192
+200 208 248
+62 62 66
+205 64 158
+88 104 192
+40 72 79
+20 32 30
+232 239 247
+72 104 120
+152 208 160
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/lairon/overworld.png b/graphics/pokemon/lairon/overworld.png
new file mode 100644
index 000000000000..059d0edd64c6
Binary files /dev/null and b/graphics/pokemon/lairon/overworld.png differ
diff --git a/graphics/pokemon/lairon/overworld_normal.pal b/graphics/pokemon/lairon/overworld_normal.pal
new file mode 100644
index 000000000000..ce484a1eada5
--- /dev/null
+++ b/graphics/pokemon/lairon/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 64 80
+104 96 112
+184 184 200
+128 128 144
+48 40 56
+160 160 176
+208 208 224
+232 232 248
+0 0 0
+104 144 200
+64 96 128
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/lairon/overworld_shiny.pal b/graphics/pokemon/lairon/overworld_shiny.pal
new file mode 100644
index 000000000000..aff583b754a4
--- /dev/null
+++ b/graphics/pokemon/lairon/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 96 96
+48 128 120
+184 184 200
+128 128 144
+16 40 48
+160 160 176
+208 208 224
+232 232 248
+0 0 0
+248 72 80
+136 24 40
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/lampent/overworld.png b/graphics/pokemon/lampent/overworld.png
new file mode 100644
index 000000000000..63f63e202250
Binary files /dev/null and b/graphics/pokemon/lampent/overworld.png differ
diff --git a/graphics/pokemon/lampent/overworld_normal.pal b/graphics/pokemon/lampent/overworld_normal.pal
new file mode 100644
index 000000000000..8ec32fa8e13b
--- /dev/null
+++ b/graphics/pokemon/lampent/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+74 74 74
+26 26 26
+49 49 49
+131 131 131
+197 205 213
+222 230 238
+178 150 25
+131 106 230
+26 26 26
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/lampent/overworld_shiny.pal b/graphics/pokemon/lampent/overworld_shiny.pal
new file mode 100644
index 000000000000..0e0e0d5d0633
--- /dev/null
+++ b/graphics/pokemon/lampent/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+80 72 56
+33 28 18
+56 48 32
+131 131 131
+197 205 213
+222 230 238
+32 192 232
+176 104 224
+26 26 26
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/landorus/anim_front.png b/graphics/pokemon/landorus/anim_front.png
index 762c5cd2e7c1..08808382b964 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 f70121ac4f8d..9df361e4b6cf 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 bbacdca83740..36dd9dbac0fc 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/overworld.png b/graphics/pokemon/landorus/overworld.png
new file mode 100644
index 000000000000..c5e237f0b775
Binary files /dev/null and b/graphics/pokemon/landorus/overworld.png differ
diff --git a/graphics/pokemon/landorus/overworld_normal.pal b/graphics/pokemon/landorus/overworld_normal.pal
new file mode 100644
index 000000000000..68ee7e89de25
--- /dev/null
+++ b/graphics/pokemon/landorus/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+84 86 84
+109 127 139
+237 237 246
+198 198 211
+22 37 14
+142 85 23
+219 152 23
+246 131 142
+87 78 43
+212 99 49
+225 80 74
+38 37 38
+214 195 61
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/landorus/overworld_shiny.pal b/graphics/pokemon/landorus/overworld_shiny.pal
new file mode 100644
index 000000000000..36e4944980c5
--- /dev/null
+++ b/graphics/pokemon/landorus/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+103 64 40
+103 128 140
+237 237 246
+160 184 160
+22 37 14
+158 97 23
+248 160 40
+229 89 32
+38 37 38
+158 97 23
+229 89 32
+38 37 38
+214 195 61
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/landorus/shiny.pal b/graphics/pokemon/landorus/shiny.pal
index 25f3ac5c93ca..c76bc2922b38 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/lanturn/overworld.png b/graphics/pokemon/lanturn/overworld.png
new file mode 100644
index 000000000000..2965c11fe061
Binary files /dev/null and b/graphics/pokemon/lanturn/overworld.png differ
diff --git a/graphics/pokemon/lanturn/overworld_normal.pal b/graphics/pokemon/lanturn/overworld_normal.pal
new file mode 100644
index 000000000000..de863f074cd2
--- /dev/null
+++ b/graphics/pokemon/lanturn/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 32 88
+80 64 8
+112 176 240
+0 0 0
+248 208 96
+224 160 16
+232 232 248
+96 136 224
+128 104 24
+160 208 240
+64 96 168
+184 200 216
+224 232 240
+184 48 40
+0 0 0
diff --git a/graphics/pokemon/lanturn/overworld_shiny.pal b/graphics/pokemon/lanturn/overworld_shiny.pal
new file mode 100644
index 000000000000..0f8b4ef76c21
--- /dev/null
+++ b/graphics/pokemon/lanturn/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 8 72
+80 64 8
+144 136 240
+0 0 0
+216 224 144
+208 184 16
+232 232 248
+128 104 224
+128 104 24
+176 176 248
+104 88 160
+168 184 208
+224 232 240
+184 48 40
+0 0 0
diff --git a/graphics/pokemon/lapras/overworld.png b/graphics/pokemon/lapras/overworld.png
new file mode 100644
index 000000000000..f8bb74e36243
Binary files /dev/null and b/graphics/pokemon/lapras/overworld.png differ
diff --git a/graphics/pokemon/lapras/overworld_normal.pal b/graphics/pokemon/lapras/overworld_normal.pal
new file mode 100644
index 000000000000..712bf6a44cbf
--- /dev/null
+++ b/graphics/pokemon/lapras/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+96 176 232
+48 72 104
+88 128 176
+232 232 248
+104 80 16
+192 200 208
+48 56 56
+112 112 128
+200 152 72
+144 152 160
+248 208 104
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/lapras/overworld_shiny.pal b/graphics/pokemon/lapras/overworld_shiny.pal
new file mode 100644
index 000000000000..05c23238aaa6
--- /dev/null
+++ b/graphics/pokemon/lapras/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+176 168 232
+88 72 104
+144 120 168
+232 232 248
+104 80 16
+192 200 208
+48 56 56
+112 112 128
+200 152 72
+144 152 160
+248 208 104
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/larvesta/overworld.png b/graphics/pokemon/larvesta/overworld.png
new file mode 100644
index 000000000000..189a51f30b4a
Binary files /dev/null and b/graphics/pokemon/larvesta/overworld.png differ
diff --git a/graphics/pokemon/larvesta/overworld_normal.pal b/graphics/pokemon/larvesta/overworld_normal.pal
new file mode 100644
index 000000000000..5b2d1cdad9f0
--- /dev/null
+++ b/graphics/pokemon/larvesta/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+96 32 0
+224 64 0
+128 128 128
+192 220 192
+236 236 246
+0 128 192
+69 69 69
+128 96 64
+0 255 255
+96 64 0
+192 128 64
+64 64 64
+109 85 18
+0 0 0
diff --git a/graphics/pokemon/larvesta/overworld_shiny.pal b/graphics/pokemon/larvesta/overworld_shiny.pal
new file mode 100644
index 000000000000..1a680a1d050e
--- /dev/null
+++ b/graphics/pokemon/larvesta/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+136 80 24
+248 200 48
+128 128 128
+236 236 239
+236 236 239
+0 200 88
+97 81 64
+97 81 64
+0 200 88
+76 59 19
+192 128 64
+97 81 64
+76 59 19
+0 0 0
diff --git a/graphics/pokemon/larvitar/overworld.png b/graphics/pokemon/larvitar/overworld.png
new file mode 100644
index 000000000000..04d3285142f4
Binary files /dev/null and b/graphics/pokemon/larvitar/overworld.png differ
diff --git a/graphics/pokemon/larvitar/overworld_normal.pal b/graphics/pokemon/larvitar/overworld_normal.pal
new file mode 100644
index 000000000000..956a461b8bda
--- /dev/null
+++ b/graphics/pokemon/larvitar/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+0 0 0
+72 88 40
+176 216 120
+136 176 104
+32 40 40
+160 184 200
+232 232 248
+184 48 48
+56 64 72
+120 32 32
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/larvitar/overworld_shiny.pal b/graphics/pokemon/larvitar/overworld_shiny.pal
new file mode 100644
index 000000000000..69bc93e53d87
--- /dev/null
+++ b/graphics/pokemon/larvitar/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+0 0 0
+80 88 0
+192 200 88
+128 152 40
+32 40 40
+160 184 200
+232 232 248
+184 48 48
+56 64 72
+120 32 32
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/latias/mega/front.png b/graphics/pokemon/latias/mega/front.png
index bb513505645a..491f02fa4b45 100644
Binary files a/graphics/pokemon/latias/mega/front.png and b/graphics/pokemon/latias/mega/front.png differ
diff --git a/graphics/pokemon/latias/overworld.png b/graphics/pokemon/latias/overworld.png
new file mode 100644
index 000000000000..4f7f9e59aedc
Binary files /dev/null and b/graphics/pokemon/latias/overworld.png differ
diff --git a/graphics/pokemon/latias/overworld_normal.pal b/graphics/pokemon/latias/overworld_normal.pal
new file mode 100644
index 000000000000..d9c5301da0a3
--- /dev/null
+++ b/graphics/pokemon/latias/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 24 16
+32 40 40
+56 64 64
+144 40 40
+0 0 0
+232 232 248
+232 88 88
+184 200 208
+192 64 64
+152 168 176
+104 120 120
+128 144 152
+232 168 0
+64 128 168
+0 0 0
diff --git a/graphics/pokemon/latias/overworld_shiny.pal b/graphics/pokemon/latias/overworld_shiny.pal
new file mode 100644
index 000000000000..4f2cc140c739
--- /dev/null
+++ b/graphics/pokemon/latias/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+112 64 16
+32 40 40
+56 64 64
+184 112 0
+0 0 0
+232 232 248
+224 192 40
+184 200 208
+224 168 16
+152 168 176
+104 120 120
+128 144 152
+120 176 80
+64 128 168
+0 0 0
diff --git a/graphics/pokemon/latios/mega/front.png b/graphics/pokemon/latios/mega/front.png
index cc20e9d1cb9f..ebca8034d8bd 100644
Binary files a/graphics/pokemon/latios/mega/front.png and b/graphics/pokemon/latios/mega/front.png differ
diff --git a/graphics/pokemon/latios/overworld.png b/graphics/pokemon/latios/overworld.png
new file mode 100644
index 000000000000..f35d70a8d8bc
Binary files /dev/null and b/graphics/pokemon/latios/overworld.png differ
diff --git a/graphics/pokemon/latios/overworld_normal.pal b/graphics/pokemon/latios/overworld_normal.pal
new file mode 100644
index 000000000000..58ffd72b6330
--- /dev/null
+++ b/graphics/pokemon/latios/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+8 56 88
+32 40 40
+0 0 0
+56 64 64
+32 112 168
+232 232 248
+64 152 216
+184 200 208
+88 192 248
+128 144 152
+48 128 192
+104 120 120
+152 168 176
+192 32 32
+128 32 32
diff --git a/graphics/pokemon/latios/overworld_shiny.pal b/graphics/pokemon/latios/overworld_shiny.pal
new file mode 100644
index 000000000000..7409627ece93
--- /dev/null
+++ b/graphics/pokemon/latios/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 160 176
+24 104 72
+32 40 40
+0 0 0
+56 64 64
+56 136 96
+232 232 248
+120 200 152
+184 200 208
+152 224 176
+128 144 152
+88 168 120
+104 120 120
+152 168 176
+192 136 32
+168 72 0
diff --git a/graphics/pokemon/leafeon/overworld.png b/graphics/pokemon/leafeon/overworld.png
new file mode 100644
index 000000000000..bed79105c4ab
Binary files /dev/null and b/graphics/pokemon/leafeon/overworld.png differ
diff --git a/graphics/pokemon/leafeon/overworld_normal.pal b/graphics/pokemon/leafeon/overworld_normal.pal
new file mode 100644
index 000000000000..52330f7aa755
--- /dev/null
+++ b/graphics/pokemon/leafeon/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+80 48 24
+96 160 96
+72 144 80
+152 104 48
+128 192 96
+0 0 0
+168 136 80
+216 184 88
+240 216 160
+112 80 32
+208 224 232
+232 232 248
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/leafeon/overworld_shiny.pal b/graphics/pokemon/leafeon/overworld_shiny.pal
new file mode 100644
index 000000000000..602f72bba68b
--- /dev/null
+++ b/graphics/pokemon/leafeon/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+88 48 16
+96 200 136
+72 192 120
+160 104 40
+128 216 136
+0 0 0
+168 136 80
+224 184 80
+240 216 160
+112 80 32
+208 224 232
+232 232 248
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/leavanny/overworld.png b/graphics/pokemon/leavanny/overworld.png
new file mode 100644
index 000000000000..6e5e2b474d35
Binary files /dev/null and b/graphics/pokemon/leavanny/overworld.png differ
diff --git a/graphics/pokemon/leavanny/overworld_normal.pal b/graphics/pokemon/leavanny/overworld_normal.pal
new file mode 100644
index 000000000000..6cc575184dbb
--- /dev/null
+++ b/graphics/pokemon/leavanny/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+136 120 16
+0 0 0
+248 232 56
+248 232 56
+176 160 40
+176 160 40
+16 64 56
+16 64 56
+144 200 8
+88 152 48
+218 52 48
+40 152 80
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/leavanny/overworld_shiny.pal b/graphics/pokemon/leavanny/overworld_shiny.pal
new file mode 100644
index 000000000000..659cef2b6312
--- /dev/null
+++ b/graphics/pokemon/leavanny/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+176 96 16
+0 0 0
+248 208 104
+248 232 56
+224 176 64
+176 160 40
+40 72 40
+16 64 56
+216 248 8
+176 184 16
+248 32 208
+72 136 40
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/ledian/overworld.png b/graphics/pokemon/ledian/overworld.png
new file mode 100644
index 000000000000..8ca49bef3b62
Binary files /dev/null and b/graphics/pokemon/ledian/overworld.png differ
diff --git a/graphics/pokemon/ledian/overworld_normal.pal b/graphics/pokemon/ledian/overworld_normal.pal
new file mode 100644
index 000000000000..854890e8b979
--- /dev/null
+++ b/graphics/pokemon/ledian/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+64 64 96
+176 40 48
+248 96 120
+136 0 56
+224 32 56
+16 128 192
+0 56 152
+208 176 80
+232 232 248
+184 200 224
+112 96 72
+168 152 88
+240 208 80
+0 0 0
diff --git a/graphics/pokemon/ledian/overworld_shiny.pal b/graphics/pokemon/ledian/overworld_shiny.pal
new file mode 100644
index 000000000000..a9ea8b82b276
--- /dev/null
+++ b/graphics/pokemon/ledian/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+64 64 96
+168 96 8
+248 160 48
+104 56 16
+224 112 32
+16 104 152
+0 56 128
+208 176 80
+232 232 248
+168 184 208
+112 96 72
+168 152 88
+240 208 80
+0 0 0
diff --git a/graphics/pokemon/ledyba/overworld.png b/graphics/pokemon/ledyba/overworld.png
new file mode 100644
index 000000000000..706008b91999
Binary files /dev/null and b/graphics/pokemon/ledyba/overworld.png differ
diff --git a/graphics/pokemon/ledyba/overworld_normal.pal b/graphics/pokemon/ledyba/overworld_normal.pal
new file mode 100644
index 000000000000..cab54700e9c6
--- /dev/null
+++ b/graphics/pokemon/ledyba/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 32 40
+168 32 8
+56 56 56
+248 112 48
+224 56 32
+0 0 0
+80 88 200
+232 232 240
+192 200 224
+232 232 248
+240 224 128
+200 176 48
+224 200 40
+128 112 48
+0 0 0
diff --git a/graphics/pokemon/ledyba/overworld_shiny.pal b/graphics/pokemon/ledyba/overworld_shiny.pal
new file mode 100644
index 000000000000..f9f1c3482023
--- /dev/null
+++ b/graphics/pokemon/ledyba/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 32 40
+168 96 8
+56 56 56
+248 176 48
+224 136 32
+0 0 0
+80 88 200
+232 232 240
+192 200 224
+232 232 248
+240 224 128
+200 176 48
+224 200 40
+128 112 48
+0 0 0
diff --git a/graphics/pokemon/lickilicky/overworld.png b/graphics/pokemon/lickilicky/overworld.png
new file mode 100644
index 000000000000..03e8902b498f
Binary files /dev/null and b/graphics/pokemon/lickilicky/overworld.png differ
diff --git a/graphics/pokemon/lickilicky/overworld_normal.pal b/graphics/pokemon/lickilicky/overworld_normal.pal
new file mode 100644
index 000000000000..5315690de277
--- /dev/null
+++ b/graphics/pokemon/lickilicky/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 48 48
+192 80 112
+216 120 144
+152 64 88
+0 0 0
+232 232 248
+168 88 136
+160 160 160
+80 80 80
+208 136 168
+200 200 208
+232 184 200
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/lickilicky/overworld_shiny.pal b/graphics/pokemon/lickilicky/overworld_shiny.pal
new file mode 100644
index 000000000000..0968c3fa199e
--- /dev/null
+++ b/graphics/pokemon/lickilicky/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 80 40
+224 176 40
+248 216 80
+184 128 16
+0 0 0
+232 232 248
+168 88 136
+160 160 160
+80 80 80
+208 136 168
+200 200 208
+232 184 200
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/lickitung/overworld.png b/graphics/pokemon/lickitung/overworld.png
new file mode 100644
index 000000000000..95e4d09088d4
Binary files /dev/null and b/graphics/pokemon/lickitung/overworld.png differ
diff --git a/graphics/pokemon/lickitung/overworld_normal.pal b/graphics/pokemon/lickitung/overworld_normal.pal
new file mode 100644
index 000000000000..47cb91d329f5
--- /dev/null
+++ b/graphics/pokemon/lickitung/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 48 72
+0 0 0
+240 168 168
+200 128 128
+176 96 120
+232 232 248
+168 88 136
+216 152 176
+232 184 200
+216 200 48
+160 160 160
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/lickitung/overworld_shiny.pal b/graphics/pokemon/lickitung/overworld_shiny.pal
new file mode 100644
index 000000000000..e55cb9067bcb
--- /dev/null
+++ b/graphics/pokemon/lickitung/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 72 48
+0 0 0
+200 184 64
+176 160 48
+136 120 48
+232 232 248
+176 80 88
+208 112 104
+240 144 128
+248 224 120
+160 160 160
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/liepard/overworld.png b/graphics/pokemon/liepard/overworld.png
new file mode 100644
index 000000000000..eb6611bf8456
Binary files /dev/null and b/graphics/pokemon/liepard/overworld.png differ
diff --git a/graphics/pokemon/liepard/overworld_normal.pal b/graphics/pokemon/liepard/overworld_normal.pal
new file mode 100644
index 000000000000..2cfc7b2fd9a2
--- /dev/null
+++ b/graphics/pokemon/liepard/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+49 32 57
+131 98 148
+0 0 0
+90 65 115
+64 56 48
+205 164 24
+246 213 65
+90 82 16
+189 57 131
+230 123 156
+232 232 248
+8 123 65
+49 32 57
+131 98 148
+112 96 32
diff --git a/graphics/pokemon/liepard/overworld_shiny.pal b/graphics/pokemon/liepard/overworld_shiny.pal
new file mode 100644
index 000000000000..370ee1777b3c
--- /dev/null
+++ b/graphics/pokemon/liepard/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+112 32 48
+0 0 0
+80 8 32
+64 56 48
+144 128 72
+224 200 136
+90 82 16
+136 64 168
+192 96 192
+232 232 248
+24 96 88
+49 32 57
+131 98 148
+112 96 32
diff --git a/graphics/pokemon/lileep/overworld.png b/graphics/pokemon/lileep/overworld.png
new file mode 100644
index 000000000000..59494df354ef
Binary files /dev/null and b/graphics/pokemon/lileep/overworld.png differ
diff --git a/graphics/pokemon/lileep/overworld_normal.pal b/graphics/pokemon/lileep/overworld_normal.pal
new file mode 100644
index 000000000000..546781fdaa28
--- /dev/null
+++ b/graphics/pokemon/lileep/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 16 40
+0 0 0
+160 48 88
+208 104 136
+192 64 96
+40 24 40
+40 32 88
+160 144 216
+136 96 176
+208 184 72
+184 120 56
+80 56 80
+96 56 144
+112 88 48
+0 0 0
diff --git a/graphics/pokemon/lileep/overworld_shiny.pal b/graphics/pokemon/lileep/overworld_shiny.pal
new file mode 100644
index 000000000000..cec4a23a0180
--- /dev/null
+++ b/graphics/pokemon/lileep/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+88 16 40
+0 0 0
+160 48 88
+208 104 136
+192 64 96
+40 24 40
+32 64 72
+96 168 176
+56 120 128
+184 168 72
+136 120 56
+80 56 80
+32 88 96
+88 80 48
+0 0 0
diff --git a/graphics/pokemon/lilligant/hisuian/overworld.png b/graphics/pokemon/lilligant/hisuian/overworld.png
new file mode 100644
index 000000000000..9b5ed7b30ff0
Binary files /dev/null and b/graphics/pokemon/lilligant/hisuian/overworld.png differ
diff --git a/graphics/pokemon/lilligant/hisuian/overworld_normal.pal b/graphics/pokemon/lilligant/hisuian/overworld_normal.pal
new file mode 100644
index 000000000000..693acf6da44e
--- /dev/null
+++ b/graphics/pokemon/lilligant/hisuian/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+49 90 49
+57 172 57
+8 8 8
+82 98 41
+123 172 49
+139 238 41
+74 131 74
+98 65 65
+230 230 255
+205 197 189
+189 164 82
+255 139 180
+189 90 156
+74 139 49
+255 222 65
diff --git a/graphics/pokemon/lilligant/hisuian/overworld_shiny.pal b/graphics/pokemon/lilligant/hisuian/overworld_shiny.pal
new file mode 100644
index 000000000000..7a94456d0e36
--- /dev/null
+++ b/graphics/pokemon/lilligant/hisuian/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+49 65 90
+106 197 205
+8 8 8
+82 98 41
+123 172 49
+139 238 41
+41 123 148
+106 49 24
+230 230 255
+205 197 189
+189 164 82
+255 172 148
+255 90 41
+74 139 49
+255 222 65
diff --git a/graphics/pokemon/lilligant/overworld.png b/graphics/pokemon/lilligant/overworld.png
new file mode 100644
index 000000000000..ef1b2df28438
Binary files /dev/null and b/graphics/pokemon/lilligant/overworld.png differ
diff --git a/graphics/pokemon/lilligant/overworld_normal.pal b/graphics/pokemon/lilligant/overworld_normal.pal
new file mode 100644
index 000000000000..88fdd632e535
--- /dev/null
+++ b/graphics/pokemon/lilligant/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+103 77 35
+189 164 82
+48 89 48
+10 10 10
+212 233 107
+63 159 62
+230 103 57
+231 205 207
+189 164 82
+63 159 62
+156 180 98
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/lilligant/overworld_shiny.pal b/graphics/pokemon/lilligant/overworld_shiny.pal
new file mode 100644
index 000000000000..336f56cde1ea
--- /dev/null
+++ b/graphics/pokemon/lilligant/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+99 82 36
+96 64 64
+47 72 73
+10 10 10
+219 228 105
+104 192 200
+249 140 177
+225 222 221
+187 164 82
+122 104 135
+168 176 96
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/lillipup/overworld.png b/graphics/pokemon/lillipup/overworld.png
new file mode 100644
index 000000000000..ef8841471354
Binary files /dev/null and b/graphics/pokemon/lillipup/overworld.png differ
diff --git a/graphics/pokemon/lillipup/overworld_normal.pal b/graphics/pokemon/lillipup/overworld_normal.pal
new file mode 100644
index 000000000000..199de3f20af0
--- /dev/null
+++ b/graphics/pokemon/lillipup/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 72 24
+144 88 64
+216 144 88
+0 0 0
+176 136 72
+232 200 144
+88 88 88
+232 232 248
+80 88 112
+216 88 88
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/lillipup/overworld_shiny.pal b/graphics/pokemon/lillipup/overworld_shiny.pal
new file mode 100644
index 000000000000..63bbc81935bb
--- /dev/null
+++ b/graphics/pokemon/lillipup/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 72 16
+96 72 24
+184 128 72
+232 176 88
+0 0 0
+240 216 152
+88 88 88
+232 232 248
+80 128 112
+216 88 88
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/linoone/galarian/overworld.png b/graphics/pokemon/linoone/galarian/overworld.png
new file mode 100644
index 000000000000..3b56ead0b839
Binary files /dev/null and b/graphics/pokemon/linoone/galarian/overworld.png differ
diff --git a/graphics/pokemon/linoone/galarian/overworld_normal.pal b/graphics/pokemon/linoone/galarian/overworld_normal.pal
new file mode 100644
index 000000000000..435a0977a0a4
--- /dev/null
+++ b/graphics/pokemon/linoone/galarian/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+252 252 252
+96 96 96
+208 208 208
+16 16 16
+0 0 0
+40 40 40
+184 184 184
+136 12 40
+180 16 52
+232 232 248
+8 8 8
+56 56 56
+24 24 24
+168 184 208
+72 72 72
+64 72 80
diff --git a/graphics/pokemon/linoone/galarian/overworld_shiny.pal b/graphics/pokemon/linoone/galarian/overworld_shiny.pal
new file mode 100644
index 000000000000..4c86da9c26b7
--- /dev/null
+++ b/graphics/pokemon/linoone/galarian/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+98 98 98
+213 213 213
+115 8 49
+0 0 0
+189 8 74
+189 189 189
+139 8 41
+131 197 197
+238 238 255
+8 8 8
+164 246 238
+139 16 57
+172 189 213
+131 197 197
+65 74 82
diff --git a/graphics/pokemon/linoone/overworld.png b/graphics/pokemon/linoone/overworld.png
new file mode 100644
index 000000000000..31c84d5637b0
Binary files /dev/null and b/graphics/pokemon/linoone/overworld.png differ
diff --git a/graphics/pokemon/linoone/overworld_normal.pal b/graphics/pokemon/linoone/overworld_normal.pal
new file mode 100644
index 000000000000..77dac1ae8ed4
--- /dev/null
+++ b/graphics/pokemon/linoone/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 72 64
+216 208 184
+64 40 16
+0 0 0
+152 112 88
+184 176 168
+120 88 64
+112 104 88
+64 72 80
+40 80 120
+232 232 248
+64 128 184
+168 184 208
+104 104 120
+0 0 0
diff --git a/graphics/pokemon/linoone/overworld_shiny.pal b/graphics/pokemon/linoone/overworld_shiny.pal
new file mode 100644
index 000000000000..482c4ad1460d
--- /dev/null
+++ b/graphics/pokemon/linoone/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 72 64
+216 208 184
+72 32 0
+0 0 0
+200 96 40
+184 176 168
+152 80 32
+112 104 88
+64 72 80
+200 96 48
+232 232 248
+248 152 48
+168 184 208
+104 104 120
+0 0 0
diff --git a/graphics/pokemon/litleo/overworld.png b/graphics/pokemon/litleo/overworld.png
new file mode 100644
index 000000000000..2c128f3184b2
Binary files /dev/null and b/graphics/pokemon/litleo/overworld.png differ
diff --git a/graphics/pokemon/litleo/overworld_normal.pal b/graphics/pokemon/litleo/overworld_normal.pal
new file mode 100644
index 000000000000..6a5b5fd29340
--- /dev/null
+++ b/graphics/pokemon/litleo/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+73 54 51
+16 16 16
+229 177 115
+231 67 39
+149 123 96
+157 70 54
+67 57 53
+113 96 89
+95 77 72
+230 238 248
+167 164 162
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/litleo/overworld_shiny.pal b/graphics/pokemon/litleo/overworld_shiny.pal
new file mode 100644
index 000000000000..04908654fdaa
--- /dev/null
+++ b/graphics/pokemon/litleo/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+132 106 83
+16 16 16
+201 197 187
+231 67 39
+149 123 96
+157 70 54
+67 57 53
+223 187 154
+175 145 119
+230 238 248
+167 164 162
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/litten/overworld.png b/graphics/pokemon/litten/overworld.png
new file mode 100644
index 000000000000..50b464347f7b
Binary files /dev/null and b/graphics/pokemon/litten/overworld.png differ
diff --git a/graphics/pokemon/litten/overworld_normal.pal b/graphics/pokemon/litten/overworld_normal.pal
new file mode 100644
index 000000000000..72f3eb826cbf
--- /dev/null
+++ b/graphics/pokemon/litten/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+234 230 230
+227 221 49
+152 144 144
+142 122 30
+109 107 111
+252 92 95
+85 86 91
+180 54 59
+68 64 64
+73 29 31
+46 44 44
+16 16 16
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/litten/overworld_shiny.pal b/graphics/pokemon/litten/overworld_shiny.pal
new file mode 100644
index 000000000000..35fa8d754477
--- /dev/null
+++ b/graphics/pokemon/litten/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+234 230 230
+248 216 0
+152 144 144
+142 122 30
+248 248 248
+232 88 72
+200 184 184
+232 88 72
+68 64 64
+73 29 31
+46 44 44
+16 16 16
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/litwick/overworld.png b/graphics/pokemon/litwick/overworld.png
new file mode 100644
index 000000000000..072dd6f70d9b
Binary files /dev/null and b/graphics/pokemon/litwick/overworld.png differ
diff --git a/graphics/pokemon/litwick/overworld_normal.pal b/graphics/pokemon/litwick/overworld_normal.pal
new file mode 100644
index 000000000000..f229ef5a10bb
--- /dev/null
+++ b/graphics/pokemon/litwick/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 221 1
+47 33 104
+104 71 227
+54 25 117
+147 129 227
+191 182 245
+0 0 0
+117 117 117
+227 227 255
+229 229 247
+199 191 199
+104 104 104
+185 185 185
+178 150 25
+98 98 98
+0 0 0
diff --git a/graphics/pokemon/litwick/overworld_shiny.pal b/graphics/pokemon/litwick/overworld_shiny.pal
new file mode 100644
index 000000000000..d5017fd15a33
--- /dev/null
+++ b/graphics/pokemon/litwick/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 221 1
+41 90 115
+82 197 238
+41 90 115
+115 205 246
+172 238 255
+0 0 0
+115 115 115
+255 255 255
+255 255 255
+205 197 180
+115 115 115
+205 197 180
+90 148 0
+115 115 115
+0 0 0
diff --git a/graphics/pokemon/lombre/overworld.png b/graphics/pokemon/lombre/overworld.png
new file mode 100644
index 000000000000..df2df60d70e1
Binary files /dev/null and b/graphics/pokemon/lombre/overworld.png differ
diff --git a/graphics/pokemon/lombre/overworld_normal.pal b/graphics/pokemon/lombre/overworld_normal.pal
new file mode 100644
index 000000000000..7a9244152caf
--- /dev/null
+++ b/graphics/pokemon/lombre/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 192 8
+0 0 0
+40 80 32
+72 112 64
+104 152 64
+144 208 16
+112 168 16
+120 152 136
+152 192 160
+8 48 40
+232 232 248
+168 48 24
+232 88 64
+128 40 16
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/lombre/overworld_shiny.pal b/graphics/pokemon/lombre/overworld_shiny.pal
new file mode 100644
index 000000000000..ba0f834c8044
--- /dev/null
+++ b/graphics/pokemon/lombre/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 160 176
+0 0 0
+32 56 72
+48 72 96
+64 120 128
+144 208 192
+104 176 168
+136 152 64
+184 208 16
+64 80 32
+232 232 248
+168 48 24
+232 88 64
+128 40 16
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/lopunny/overworld.png b/graphics/pokemon/lopunny/overworld.png
new file mode 100644
index 000000000000..945680372150
Binary files /dev/null and b/graphics/pokemon/lopunny/overworld.png differ
diff --git a/graphics/pokemon/lopunny/overworld_normal.pal b/graphics/pokemon/lopunny/overworld_normal.pal
new file mode 100644
index 000000000000..ac88003ac284
--- /dev/null
+++ b/graphics/pokemon/lopunny/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+56 48 32
+168 128 88
+128 96 56
+144 80 88
+232 216 168
+200 168 104
+96 80 64
+144 120 64
+248 168 168
+208 120 120
+80 80 72
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/lopunny/overworld_shiny.pal b/graphics/pokemon/lopunny/overworld_shiny.pal
new file mode 100644
index 000000000000..e193bf5ec5f7
--- /dev/null
+++ b/graphics/pokemon/lopunny/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+56 48 32
+192 136 144
+152 104 120
+144 80 88
+232 184 192
+232 144 160
+120 80 88
+176 96 120
+248 168 168
+208 120 120
+80 80 72
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/lotad/overworld.png b/graphics/pokemon/lotad/overworld.png
new file mode 100644
index 000000000000..ea192848aa61
Binary files /dev/null and b/graphics/pokemon/lotad/overworld.png differ
diff --git a/graphics/pokemon/lotad/overworld_normal.pal b/graphics/pokemon/lotad/overworld_normal.pal
new file mode 100644
index 000000000000..d067b797bc4e
--- /dev/null
+++ b/graphics/pokemon/lotad/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+208 216 216
+0 0 0
+32 56 16
+80 128 24
+40 96 64
+144 208 16
+24 48 88
+112 168 16
+80 144 192
+40 96 136
+232 184 64
+232 232 248
+168 120 24
+96 64 8
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/lotad/overworld_shiny.pal b/graphics/pokemon/lotad/overworld_shiny.pal
new file mode 100644
index 000000000000..3262a070bb49
--- /dev/null
+++ b/graphics/pokemon/lotad/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+208 216 216
+0 0 0
+32 56 72
+64 104 112
+40 96 88
+144 208 192
+80 48 88
+104 160 152
+176 112 192
+128 80 144
+232 184 64
+232 232 248
+168 120 24
+96 64 8
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/loudred/overworld.png b/graphics/pokemon/loudred/overworld.png
new file mode 100644
index 000000000000..ebeb67efff92
Binary files /dev/null and b/graphics/pokemon/loudred/overworld.png differ
diff --git a/graphics/pokemon/loudred/overworld_normal.pal b/graphics/pokemon/loudred/overworld_normal.pal
new file mode 100644
index 000000000000..845967ebec1c
--- /dev/null
+++ b/graphics/pokemon/loudred/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 72 104
+104 96 152
+176 168 224
+184 64 104
+0 0 0
+136 128 184
+40 48 64
+136 40 64
+232 208 104
+168 176 192
+232 232 248
+184 144 48
+104 72 32
+104 112 136
+0 0 0
diff --git a/graphics/pokemon/loudred/overworld_shiny.pal b/graphics/pokemon/loudred/overworld_shiny.pal
new file mode 100644
index 000000000000..c46b40509ff0
--- /dev/null
+++ b/graphics/pokemon/loudred/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 64 96
+136 96 152
+208 168 224
+184 64 104
+0 0 0
+168 128 184
+40 48 64
+136 40 64
+232 208 104
+168 176 192
+232 232 248
+184 144 48
+104 72 32
+104 112 136
+0 0 0
diff --git a/graphics/pokemon/lucario/overworld.png b/graphics/pokemon/lucario/overworld.png
new file mode 100644
index 000000000000..1421a014e56f
Binary files /dev/null and b/graphics/pokemon/lucario/overworld.png differ
diff --git a/graphics/pokemon/lucario/overworld_normal.pal b/graphics/pokemon/lucario/overworld_normal.pal
new file mode 100644
index 000000000000..4ecdf26ad217
--- /dev/null
+++ b/graphics/pokemon/lucario/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 56 88
+72 136 192
+112 184 240
+56 104 144
+0 0 0
+72 72 72
+40 40 40
+96 96 96
+232 232 248
+152 24 48
+168 184 200
+120 96 40
+176 136 56
+232 184 80
+0 0 0
diff --git a/graphics/pokemon/lucario/overworld_shiny.pal b/graphics/pokemon/lucario/overworld_shiny.pal
new file mode 100644
index 000000000000..58e6064222a7
--- /dev/null
+++ b/graphics/pokemon/lucario/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+120 96 40
+232 184 80
+248 216 120
+176 136 56
+0 0 0
+56 96 104
+40 40 40
+88 112 128
+232 232 248
+152 24 48
+176 184 192
+56 88 112
+88 136 176
+128 184 224
+0 0 0
diff --git a/graphics/pokemon/ludicolo/overworld.png b/graphics/pokemon/ludicolo/overworld.png
new file mode 100644
index 000000000000..28a1e23d8ba5
Binary files /dev/null and b/graphics/pokemon/ludicolo/overworld.png differ
diff --git a/graphics/pokemon/ludicolo/overworld_normal.pal b/graphics/pokemon/ludicolo/overworld_normal.pal
new file mode 100644
index 000000000000..068c085ca035
--- /dev/null
+++ b/graphics/pokemon/ludicolo/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+192 192 240
+0 0 0
+48 40 8
+232 200 120
+208 176 64
+32 56 16
+104 136 56
+96 72 48
+144 208 16
+120 176 32
+136 104 80
+64 64 72
+160 160 160
+232 232 248
+136 64 0
+208 128 8
diff --git a/graphics/pokemon/ludicolo/overworld_shiny.pal b/graphics/pokemon/ludicolo/overworld_shiny.pal
new file mode 100644
index 000000000000..52922edc64ca
--- /dev/null
+++ b/graphics/pokemon/ludicolo/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+192 192 240
+0 0 0
+48 40 8
+232 200 120
+208 176 64
+32 56 72
+64 104 112
+96 72 48
+144 208 192
+104 160 152
+136 104 80
+64 64 72
+160 160 160
+232 232 248
+136 64 0
+208 128 8
diff --git a/graphics/pokemon/lugia/overworld.png b/graphics/pokemon/lugia/overworld.png
new file mode 100644
index 000000000000..a50717cb9347
Binary files /dev/null and b/graphics/pokemon/lugia/overworld.png differ
diff --git a/graphics/pokemon/lugia/overworld_normal.pal b/graphics/pokemon/lugia/overworld_normal.pal
new file mode 100644
index 000000000000..c2dd89d8b95c
--- /dev/null
+++ b/graphics/pokemon/lugia/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+72 72 88
+232 232 248
+200 208 216
+152 160 168
+40 48 112
+48 96 192
+136 168 224
+40 120 192
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/lugia/overworld_shiny.pal b/graphics/pokemon/lugia/overworld_shiny.pal
new file mode 100644
index 000000000000..dffa1d880871
--- /dev/null
+++ b/graphics/pokemon/lugia/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+72 72 88
+232 232 248
+200 208 216
+152 160 168
+88 40 64
+184 64 120
+216 144 184
+216 88 136
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/lumineon/overworld.png b/graphics/pokemon/lumineon/overworld.png
new file mode 100644
index 000000000000..670655a2a158
Binary files /dev/null and b/graphics/pokemon/lumineon/overworld.png differ
diff --git a/graphics/pokemon/lumineon/overworld_normal.pal b/graphics/pokemon/lumineon/overworld_normal.pal
new file mode 100644
index 000000000000..5a81d1c0e055
--- /dev/null
+++ b/graphics/pokemon/lumineon/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 56 64
+0 0 0
+72 96 96
+88 104 120
+160 208 216
+96 144 184
+168 64 112
+48 72 64
+104 0 16
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/lumineon/overworld_shiny.pal b/graphics/pokemon/lumineon/overworld_shiny.pal
new file mode 100644
index 000000000000..59d9221705b8
--- /dev/null
+++ b/graphics/pokemon/lumineon/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 56 64
+0 0 0
+136 120 64
+128 120 88
+240 208 136
+216 176 80
+168 64 112
+96 64 16
+104 0 16
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/lunala/overworld.png b/graphics/pokemon/lunala/overworld.png
new file mode 100644
index 000000000000..226deb05b680
Binary files /dev/null and b/graphics/pokemon/lunala/overworld.png differ
diff --git a/graphics/pokemon/lunala/overworld_normal.pal b/graphics/pokemon/lunala/overworld_normal.pal
new file mode 100644
index 000000000000..0c001dbf3f0e
--- /dev/null
+++ b/graphics/pokemon/lunala/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+1 1 1
+246 238 131
+111 84 49
+94 94 94
+49 49 49
+106 90 197
+196 194 217
+78 59 159
+185 169 97
+163 111 234
+255 255 255
+107 65 165
+255 82 123
+163 160 192
+115 230 205
diff --git a/graphics/pokemon/lunala/overworld_shiny.pal b/graphics/pokemon/lunala/overworld_shiny.pal
new file mode 100644
index 000000000000..7b0cda7e3135
--- /dev/null
+++ b/graphics/pokemon/lunala/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+1 1 1
+246 238 131
+144 80 8
+94 94 94
+62 0 16
+192 40 64
+131 57 101
+128 24 40
+185 169 97
+72 24 32
+95 34 81
+56 32 96
+255 82 123
+182 54 74
+255 95 143
diff --git a/graphics/pokemon/lunatone/overworld.png b/graphics/pokemon/lunatone/overworld.png
new file mode 100644
index 000000000000..66663a66c78a
Binary files /dev/null and b/graphics/pokemon/lunatone/overworld.png differ
diff --git a/graphics/pokemon/lunatone/overworld_normal.pal b/graphics/pokemon/lunatone/overworld_normal.pal
new file mode 100644
index 000000000000..00f360f0a1ec
--- /dev/null
+++ b/graphics/pokemon/lunatone/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 80 32
+176 160 72
+208 192 96
+144 120 56
+0 0 0
+32 40 48
+64 72 88
+160 48 112
+208 72 144
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/lunatone/overworld_shiny.pal b/graphics/pokemon/lunatone/overworld_shiny.pal
new file mode 100644
index 000000000000..b939b6be1cc2
--- /dev/null
+++ b/graphics/pokemon/lunatone/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 80 32
+176 160 72
+208 192 96
+144 120 56
+0 0 0
+32 40 48
+64 72 88
+64 112 176
+120 168 224
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/lurantis/overworld.png b/graphics/pokemon/lurantis/overworld.png
new file mode 100644
index 000000000000..988d3c3ca3ac
Binary files /dev/null and b/graphics/pokemon/lurantis/overworld.png differ
diff --git a/graphics/pokemon/lurantis/overworld_normal.pal b/graphics/pokemon/lurantis/overworld_normal.pal
new file mode 100644
index 000000000000..96b4637a7a83
--- /dev/null
+++ b/graphics/pokemon/lurantis/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+255 251 251
+253 207 208
+243 195 213
+228 147 179
+92 222 143
+74 174 117
+39 152 79
+228 87 111
+57 110 89
+116 71 90
+149 39 67
+69 14 28
+39 75 61
+27 53 43
+0 0 0
diff --git a/graphics/pokemon/lurantis/overworld_shiny.pal b/graphics/pokemon/lurantis/overworld_shiny.pal
new file mode 100644
index 000000000000..d8d46d9f2ae3
--- /dev/null
+++ b/graphics/pokemon/lurantis/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+255 251 251
+248 216 128
+238 243 195
+224 160 72
+92 222 143
+74 174 117
+39 152 79
+128 192 96
+57 110 89
+116 71 90
+24 80 16
+69 14 28
+39 75 61
+27 53 43
+0 0 0
diff --git a/graphics/pokemon/luvdisc/overworld.png b/graphics/pokemon/luvdisc/overworld.png
new file mode 100644
index 000000000000..6d224dcbebca
Binary files /dev/null and b/graphics/pokemon/luvdisc/overworld.png differ
diff --git a/graphics/pokemon/luvdisc/overworld_normal.pal b/graphics/pokemon/luvdisc/overworld_normal.pal
new file mode 100644
index 000000000000..68f906e2049b
--- /dev/null
+++ b/graphics/pokemon/luvdisc/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+136 32 72
+232 152 160
+224 128 152
+208 96 136
+160 48 96
+0 0 0
+216 104 152
+48 48 64
+248 192 184
+248 176 144
+232 232 248
+232 144 144
+96 104 128
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/luvdisc/overworld_shiny.pal b/graphics/pokemon/luvdisc/overworld_shiny.pal
new file mode 100644
index 000000000000..e0b1b2d97f7b
--- /dev/null
+++ b/graphics/pokemon/luvdisc/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+136 104 32
+248 240 0
+232 184 32
+216 160 32
+160 128 40
+0 0 0
+232 160 32
+48 48 64
+248 192 184
+248 176 144
+232 232 248
+232 144 144
+96 104 128
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/luxio/overworld.png b/graphics/pokemon/luxio/overworld.png
new file mode 100644
index 000000000000..939966d7fbfe
Binary files /dev/null and b/graphics/pokemon/luxio/overworld.png differ
diff --git a/graphics/pokemon/luxio/overworld_normal.pal b/graphics/pokemon/luxio/overworld_normal.pal
new file mode 100644
index 000000000000..69a3076b377b
--- /dev/null
+++ b/graphics/pokemon/luxio/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 64 24
+248 208 24
+168 88 16
+208 144 32
+0 0 0
+64 64 64
+88 88 88
+40 40 40
+80 144 184
+112 176 216
+48 80 112
+232 232 248
+208 80 64
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/luxio/overworld_shiny.pal b/graphics/pokemon/luxio/overworld_shiny.pal
new file mode 100644
index 000000000000..0b31d8e16d33
--- /dev/null
+++ b/graphics/pokemon/luxio/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+144 64 16
+248 128 24
+192 80 16
+208 104 16
+0 0 0
+64 64 64
+88 88 88
+40 40 40
+200 128 32
+248 184 24
+104 88 40
+232 232 248
+208 80 64
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/luxray/overworld.png b/graphics/pokemon/luxray/overworld.png
new file mode 100644
index 000000000000..9f1e835c563c
Binary files /dev/null and b/graphics/pokemon/luxray/overworld.png differ
diff --git a/graphics/pokemon/luxray/overworld_normal.pal b/graphics/pokemon/luxray/overworld_normal.pal
new file mode 100644
index 000000000000..ee661847bf8c
--- /dev/null
+++ b/graphics/pokemon/luxray/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 64 24
+248 208 24
+144 112 16
+208 144 32
+40 40 40
+64 64 64
+0 0 0
+88 88 88
+128 192 232
+80 168 216
+64 128 168
+32 80 104
+184 32 16
+208 80 64
+0 0 0
diff --git a/graphics/pokemon/luxray/overworld_shiny.pal b/graphics/pokemon/luxray/overworld_shiny.pal
new file mode 100644
index 000000000000..b72dd0cecb2d
--- /dev/null
+++ b/graphics/pokemon/luxray/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+144 64 16
+248 128 24
+192 80 16
+208 104 16
+40 40 40
+64 64 64
+0 0 0
+88 88 88
+248 216 24
+224 176 32
+184 136 0
+104 72 0
+96 24 16
+208 80 64
+0 0 0
diff --git a/graphics/pokemon/lycanroc/dusk/overworld.png b/graphics/pokemon/lycanroc/dusk/overworld.png
new file mode 100644
index 000000000000..4aecdc918676
Binary files /dev/null and b/graphics/pokemon/lycanroc/dusk/overworld.png differ
diff --git a/graphics/pokemon/lycanroc/dusk/overworld_normal.pal b/graphics/pokemon/lycanroc/dusk/overworld_normal.pal
new file mode 100644
index 000000000000..3cfb9d0e13ca
--- /dev/null
+++ b/graphics/pokemon/lycanroc/dusk/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+16 16 16
+255 255 255
+80 79 78
+42 39 37
+75 69 63
+184 181 175
+96 50 40
+199 134 77
+178 98 156
+152 100 54
+156 90 50
+64 136 60
+104 191 73
+128 128 128
+0 0 0
diff --git a/graphics/pokemon/lycanroc/dusk/overworld_shiny.pal b/graphics/pokemon/lycanroc/dusk/overworld_shiny.pal
new file mode 100644
index 000000000000..66d38cf4023a
--- /dev/null
+++ b/graphics/pokemon/lycanroc/dusk/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+16 16 16
+255 255 255
+80 79 78
+42 39 37
+75 69 63
+184 181 175
+26 38 56
+96 120 176
+248 152 136
+56 72 96
+156 90 50
+91 188 86
+168 208 32
+128 128 128
+0 0 0
diff --git a/graphics/pokemon/lycanroc/midnight/overworld.png b/graphics/pokemon/lycanroc/midnight/overworld.png
new file mode 100644
index 000000000000..044306dde5cc
Binary files /dev/null and b/graphics/pokemon/lycanroc/midnight/overworld.png differ
diff --git a/graphics/pokemon/lycanroc/midnight/overworld_normal.pal b/graphics/pokemon/lycanroc/midnight/overworld_normal.pal
new file mode 100644
index 000000000000..1b2faaa6d1f5
--- /dev/null
+++ b/graphics/pokemon/lycanroc/midnight/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+53 52 53
+240 235 230
+16 16 16
+174 157 148
+216 74 87
+111 95 79
+84 38 43
+139 51 59
+128 128 128
+252 83 100
+47 45 41
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/lycanroc/midnight/overworld_shiny.pal b/graphics/pokemon/lycanroc/midnight/overworld_shiny.pal
new file mode 100644
index 000000000000..ec6a7d3b0e12
--- /dev/null
+++ b/graphics/pokemon/lycanroc/midnight/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+53 52 53
+240 235 230
+16 16 16
+174 157 148
+37 100 137
+111 95 79
+84 38 43
+29 66 88
+128 128 128
+252 83 100
+47 45 41
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/lycanroc/overworld.png b/graphics/pokemon/lycanroc/overworld.png
new file mode 100644
index 000000000000..e625ff82502f
Binary files /dev/null and b/graphics/pokemon/lycanroc/overworld.png differ
diff --git a/graphics/pokemon/lycanroc/overworld_normal.pal b/graphics/pokemon/lycanroc/overworld_normal.pal
new file mode 100644
index 000000000000..87f56c95fa63
--- /dev/null
+++ b/graphics/pokemon/lycanroc/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+199 162 141
+184 181 175
+92 170 238
+128 128 128
+88 146 214
+85 129 197
+141 116 102
+178 98 156
+101 84 74
+80 79 78
+75 69 63
+65 56 51
+42 39 37
+16 16 16
+0 0 0
diff --git a/graphics/pokemon/lycanroc/overworld_shiny.pal b/graphics/pokemon/lycanroc/overworld_shiny.pal
new file mode 100644
index 000000000000..03f98160dbb7
--- /dev/null
+++ b/graphics/pokemon/lycanroc/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+136 168 200
+184 181 175
+92 170 238
+128 128 128
+88 146 214
+85 129 197
+96 120 176
+248 152 136
+96 120 176
+80 79 78
+75 69 63
+65 56 51
+42 39 37
+16 16 16
+0 0 0
diff --git a/graphics/pokemon/machamp/overworld.png b/graphics/pokemon/machamp/overworld.png
new file mode 100644
index 000000000000..846ecd72ce35
Binary files /dev/null and b/graphics/pokemon/machamp/overworld.png differ
diff --git a/graphics/pokemon/machamp/overworld_normal.pal b/graphics/pokemon/machamp/overworld_normal.pal
new file mode 100644
index 000000000000..f93181182fe1
--- /dev/null
+++ b/graphics/pokemon/machamp/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+232 200 152
+64 64 64
+160 160 200
+128 128 144
+176 152 112
+80 88 104
+232 232 248
+192 40 64
+200 200 200
+240 232 112
+208 184 72
+144 128 24
+248 208 8
+0 0 0
diff --git a/graphics/pokemon/machamp/overworld_shiny.pal b/graphics/pokemon/machamp/overworld_shiny.pal
new file mode 100644
index 000000000000..110331435e19
--- /dev/null
+++ b/graphics/pokemon/machamp/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+232 200 152
+56 72 56
+168 192 120
+128 144 80
+176 152 112
+64 104 64
+232 232 248
+192 40 64
+200 200 200
+240 232 112
+208 184 72
+144 128 24
+248 208 8
+0 0 0
diff --git a/graphics/pokemon/machoke/overworld.png b/graphics/pokemon/machoke/overworld.png
new file mode 100644
index 000000000000..76579aa26226
Binary files /dev/null and b/graphics/pokemon/machoke/overworld.png differ
diff --git a/graphics/pokemon/machoke/overworld_normal.pal b/graphics/pokemon/machoke/overworld_normal.pal
new file mode 100644
index 000000000000..ca64380358af
--- /dev/null
+++ b/graphics/pokemon/machoke/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 72 72
+176 152 112
+0 0 0
+232 200 152
+128 128 144
+160 160 200
+232 232 248
+192 40 64
+96 104 128
+208 160 16
+88 88 88
+248 208 8
+144 128 24
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/machoke/overworld_shiny.pal b/graphics/pokemon/machoke/overworld_shiny.pal
new file mode 100644
index 000000000000..e45567a3572c
--- /dev/null
+++ b/graphics/pokemon/machoke/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 160 176
+56 56 56
+176 152 112
+0 0 0
+232 200 152
+128 136 96
+168 176 136
+232 232 248
+40 96 128
+80 88 64
+208 160 16
+88 88 88
+248 208 8
+144 128 24
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/machop/overworld.png b/graphics/pokemon/machop/overworld.png
new file mode 100644
index 000000000000..d4692e70c134
Binary files /dev/null and b/graphics/pokemon/machop/overworld.png differ
diff --git a/graphics/pokemon/machop/overworld_normal.pal b/graphics/pokemon/machop/overworld_normal.pal
new file mode 100644
index 000000000000..26eb0ad6144e
--- /dev/null
+++ b/graphics/pokemon/machop/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 56 56
+176 152 112
+232 200 152
+0 0 0
+136 168 184
+112 128 136
+72 96 104
+232 232 248
+192 40 64
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/machop/overworld_shiny.pal b/graphics/pokemon/machop/overworld_shiny.pal
new file mode 100644
index 000000000000..01e6fea80d86
--- /dev/null
+++ b/graphics/pokemon/machop/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 56 56
+176 152 112
+232 200 152
+0 0 0
+168 176 136
+128 136 96
+80 88 64
+232 232 248
+192 40 64
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/magby/overworld.png b/graphics/pokemon/magby/overworld.png
new file mode 100644
index 000000000000..6b3efd8585e4
Binary files /dev/null and b/graphics/pokemon/magby/overworld.png differ
diff --git a/graphics/pokemon/magby/overworld_normal.pal b/graphics/pokemon/magby/overworld_normal.pal
new file mode 100644
index 000000000000..e1a3accf8843
--- /dev/null
+++ b/graphics/pokemon/magby/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 0 24
+0 0 0
+208 40 56
+248 80 120
+104 72 0
+240 192 56
+176 184 192
+200 152 32
+80 88 104
+232 232 248
+64 64 72
+152 40 56
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/magby/overworld_shiny.pal b/graphics/pokemon/magby/overworld_shiny.pal
new file mode 100644
index 000000000000..3ce78722f8bb
--- /dev/null
+++ b/graphics/pokemon/magby/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 72 0
+0 0 0
+248 184 16
+248 224 56
+136 88 0
+240 192 56
+176 184 192
+200 152 32
+80 88 104
+232 232 248
+64 64 72
+168 120 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/magcargo/overworld.png b/graphics/pokemon/magcargo/overworld.png
new file mode 100644
index 000000000000..10f1b74ea349
Binary files /dev/null and b/graphics/pokemon/magcargo/overworld.png differ
diff --git a/graphics/pokemon/magcargo/overworld_normal.pal b/graphics/pokemon/magcargo/overworld_normal.pal
new file mode 100644
index 000000000000..ae59bf42fa25
--- /dev/null
+++ b/graphics/pokemon/magcargo/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 0 0
+224 80 72
+0 0 0
+40 48 56
+104 112 136
+248 208 88
+72 80 96
+248 152 0
+176 56 48
+120 24 16
+224 120 24
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/magcargo/overworld_shiny.pal b/graphics/pokemon/magcargo/overworld_shiny.pal
new file mode 100644
index 000000000000..b2c613353e20
--- /dev/null
+++ b/graphics/pokemon/magcargo/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+32 0 80
+176 120 216
+0 0 0
+72 0 0
+176 56 48
+248 208 88
+120 24 16
+248 152 0
+112 72 152
+80 40 128
+224 120 24
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/magearna/back.png b/graphics/pokemon/magearna/back.png
index 17568f8bb230..2e3a77c51214 100644
Binary files a/graphics/pokemon/magearna/back.png and b/graphics/pokemon/magearna/back.png differ
diff --git a/graphics/pokemon/magearna/overworld.png b/graphics/pokemon/magearna/overworld.png
new file mode 100644
index 000000000000..adcbe391cc6a
Binary files /dev/null and b/graphics/pokemon/magearna/overworld.png differ
diff --git a/graphics/pokemon/magearna/overworld_normal.pal b/graphics/pokemon/magearna/overworld_normal.pal
new file mode 100644
index 000000000000..09e877f3f6b8
--- /dev/null
+++ b/graphics/pokemon/magearna/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+232 220 110
+218 192 200
+168 161 155
+183 132 149
+167 157 71
+70 153 169
+113 102 99
+203 98 96
+179 74 68
+105 93 91
+77 70 67
+65 58 23
+49 44 43
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/magearna/overworld_shiny.pal b/graphics/pokemon/magearna/overworld_shiny.pal
new file mode 100644
index 000000000000..b7da7967dfd5
--- /dev/null
+++ b/graphics/pokemon/magearna/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+232 220 110
+206 200 197
+168 161 155
+153 146 143
+167 157 71
+70 153 169
+113 102 99
+203 98 96
+179 74 68
+105 93 91
+77 70 67
+65 58 23
+49 44 43
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/magearna/shiny.pal b/graphics/pokemon/magearna/shiny.pal
index cb523c62f3e5..a8573fe8e9a1 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/magikarp/overworld.png b/graphics/pokemon/magikarp/overworld.png
new file mode 100644
index 000000000000..debcdb492539
Binary files /dev/null and b/graphics/pokemon/magikarp/overworld.png differ
diff --git a/graphics/pokemon/magikarp/overworld_normal.pal b/graphics/pokemon/magikarp/overworld_normal.pal
new file mode 100644
index 000000000000..7475ba359d08
--- /dev/null
+++ b/graphics/pokemon/magikarp/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 48 48
+144 144 144
+80 32 16
+0 0 0
+120 32 64
+248 192 16
+184 64 104
+216 112 152
+136 40 24
+232 96 64
+200 56 16
+184 136 24
+232 168 72
+232 232 248
+192 192 208
diff --git a/graphics/pokemon/magikarp/overworld_shiny.pal b/graphics/pokemon/magikarp/overworld_shiny.pal
new file mode 100644
index 000000000000..43cbfeca8847
--- /dev/null
+++ b/graphics/pokemon/magikarp/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 48 48
+144 144 144
+72 56 8
+0 0 0
+120 64 0
+248 192 16
+208 144 48
+216 192 80
+192 72 0
+248 192 16
+248 160 16
+184 136 24
+232 168 72
+232 232 248
+192 192 208
diff --git a/graphics/pokemon/magmar/overworld.png b/graphics/pokemon/magmar/overworld.png
new file mode 100644
index 000000000000..dd186f16abfa
Binary files /dev/null and b/graphics/pokemon/magmar/overworld.png differ
diff --git a/graphics/pokemon/magmar/overworld_normal.pal b/graphics/pokemon/magmar/overworld_normal.pal
new file mode 100644
index 000000000000..3b0b823e98d5
--- /dev/null
+++ b/graphics/pokemon/magmar/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 32 16
+240 208 0
+224 152 16
+0 0 0
+176 120 8
+184 56 24
+128 0 0
+240 72 32
+232 232 248
+240 184 200
+200 88 128
+192 192 208
+48 48 48
+112 80 16
+144 144 144
diff --git a/graphics/pokemon/magmar/overworld_shiny.pal b/graphics/pokemon/magmar/overworld_shiny.pal
new file mode 100644
index 000000000000..6b847ea300ef
--- /dev/null
+++ b/graphics/pokemon/magmar/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 32 16
+240 184 200
+248 160 176
+0 0 0
+200 112 128
+184 72 120
+128 0 0
+240 88 104
+232 232 248
+240 184 200
+200 88 128
+192 192 208
+48 48 48
+112 40 64
+144 144 144
diff --git a/graphics/pokemon/magmortar/overworld.png b/graphics/pokemon/magmortar/overworld.png
new file mode 100644
index 000000000000..f98ac07c47b5
Binary files /dev/null and b/graphics/pokemon/magmortar/overworld.png differ
diff --git a/graphics/pokemon/magmortar/overworld_normal.pal b/graphics/pokemon/magmortar/overworld_normal.pal
new file mode 100644
index 000000000000..f2395d067b42
--- /dev/null
+++ b/graphics/pokemon/magmortar/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 0 0
+240 208 0
+0 0 0
+240 72 32
+224 152 16
+184 56 24
+192 96 104
+48 48 48
+232 232 248
+224 136 152
+136 72 88
+192 192 208
+168 104 0
+144 144 144
+72 80 80
diff --git a/graphics/pokemon/magmortar/overworld_shiny.pal b/graphics/pokemon/magmortar/overworld_shiny.pal
new file mode 100644
index 000000000000..21324c959b58
--- /dev/null
+++ b/graphics/pokemon/magmortar/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 0 0
+248 176 192
+0 0 0
+240 72 32
+232 136 144
+184 56 24
+192 96 104
+48 48 48
+232 232 248
+224 136 152
+136 72 88
+192 192 208
+192 112 144
+144 144 144
+72 80 80
diff --git a/graphics/pokemon/magnemite/overworld.png b/graphics/pokemon/magnemite/overworld.png
new file mode 100644
index 000000000000..3956750a8974
Binary files /dev/null and b/graphics/pokemon/magnemite/overworld.png differ
diff --git a/graphics/pokemon/magnemite/overworld_normal.pal b/graphics/pokemon/magnemite/overworld_normal.pal
new file mode 100644
index 000000000000..eed58a5b5308
--- /dev/null
+++ b/graphics/pokemon/magnemite/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+176 176 184
+112 112 120
+56 56 56
+104 128 144
+72 136 232
+152 168 184
+232 64 64
+192 208 216
+232 232 248
+80 80 80
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/magnemite/overworld_shiny.pal b/graphics/pokemon/magnemite/overworld_shiny.pal
new file mode 100644
index 000000000000..9186eeb9c660
--- /dev/null
+++ b/graphics/pokemon/magnemite/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+176 176 184
+112 112 120
+56 56 56
+128 120 104
+176 176 184
+168 160 136
+112 112 120
+208 200 168
+232 232 248
+80 80 80
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/magneton/overworld.png b/graphics/pokemon/magneton/overworld.png
new file mode 100644
index 000000000000..692f46111a65
Binary files /dev/null and b/graphics/pokemon/magneton/overworld.png differ
diff --git a/graphics/pokemon/magneton/overworld_normal.pal b/graphics/pokemon/magneton/overworld_normal.pal
new file mode 100644
index 000000000000..ade63a0f30c6
--- /dev/null
+++ b/graphics/pokemon/magneton/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+176 176 184
+112 112 120
+56 56 56
+104 128 144
+232 64 64
+152 168 184
+192 208 216
+80 80 80
+232 232 248
+72 136 232
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/magneton/overworld_shiny.pal b/graphics/pokemon/magneton/overworld_shiny.pal
new file mode 100644
index 000000000000..63034b4473cd
--- /dev/null
+++ b/graphics/pokemon/magneton/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+176 176 184
+112 112 120
+56 56 56
+128 120 104
+112 112 120
+168 160 136
+208 200 168
+80 80 80
+232 232 248
+176 176 184
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/magnezone/overworld.png b/graphics/pokemon/magnezone/overworld.png
new file mode 100644
index 000000000000..0c239b0f83a6
Binary files /dev/null and b/graphics/pokemon/magnezone/overworld.png differ
diff --git a/graphics/pokemon/magnezone/overworld_normal.pal b/graphics/pokemon/magnezone/overworld_normal.pal
new file mode 100644
index 000000000000..ee54c68ce5d0
--- /dev/null
+++ b/graphics/pokemon/magnezone/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 56 56
+184 160 56
+248 224 8
+0 0 0
+80 80 80
+184 184 192
+48 64 72
+112 112 120
+104 128 144
+152 152 152
+152 168 184
+232 232 248
+184 72 72
+216 0 0
+0 0 0
diff --git a/graphics/pokemon/magnezone/overworld_shiny.pal b/graphics/pokemon/magnezone/overworld_shiny.pal
new file mode 100644
index 000000000000..22f78641d89d
--- /dev/null
+++ b/graphics/pokemon/magnezone/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 56 56
+200 184 136
+248 248 120
+0 0 0
+80 80 80
+184 184 192
+48 64 72
+112 112 120
+176 184 192
+152 152 152
+200 208 216
+232 232 248
+8 160 216
+120 208 248
+0 0 0
diff --git a/graphics/pokemon/makuhita/overworld.png b/graphics/pokemon/makuhita/overworld.png
new file mode 100644
index 000000000000..84c202a001d3
Binary files /dev/null and b/graphics/pokemon/makuhita/overworld.png differ
diff --git a/graphics/pokemon/makuhita/overworld_normal.pal b/graphics/pokemon/makuhita/overworld_normal.pal
new file mode 100644
index 000000000000..fee5cdee8dfa
--- /dev/null
+++ b/graphics/pokemon/makuhita/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 56 8
+184 152 56
+0 0 0
+224 200 104
+112 96 16
+136 40 64
+184 64 104
+56 64 80
+80 88 112
+24 32 40
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/makuhita/overworld_shiny.pal b/graphics/pokemon/makuhita/overworld_shiny.pal
new file mode 100644
index 000000000000..b07ce5d1ba64
--- /dev/null
+++ b/graphics/pokemon/makuhita/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 56 8
+200 168 80
+0 0 0
+240 208 136
+120 104 24
+136 40 64
+184 64 104
+112 0 0
+192 32 16
+24 32 40
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/malamar/overworld.png b/graphics/pokemon/malamar/overworld.png
new file mode 100644
index 000000000000..d1ecbc02584b
Binary files /dev/null and b/graphics/pokemon/malamar/overworld.png differ
diff --git a/graphics/pokemon/malamar/overworld_normal.pal b/graphics/pokemon/malamar/overworld_normal.pal
new file mode 100644
index 000000000000..4e6271bf791d
--- /dev/null
+++ b/graphics/pokemon/malamar/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+49 37 59
+16 16 16
+124 110 176
+113 179 215
+72 137 184
+83 59 103
+203 203 212
+49 37 59
+210 82 130
+235 196 41
+166 139 118
+127 127 143
+83 59 103
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/malamar/overworld_shiny.pal b/graphics/pokemon/malamar/overworld_shiny.pal
new file mode 100644
index 000000000000..78b30c0d5711
--- /dev/null
+++ b/graphics/pokemon/malamar/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+120 101 66
+16 16 16
+214 186 139
+232 206 60
+178 157 43
+157 134 90
+194 230 172
+72 90 61
+169 57 71
+235 196 41
+166 163 118
+131 162 112
+43 53 37
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/mamoswine/overworld.png b/graphics/pokemon/mamoswine/overworld.png
new file mode 100644
index 000000000000..201c3a7a845d
Binary files /dev/null and b/graphics/pokemon/mamoswine/overworld.png differ
diff --git a/graphics/pokemon/mamoswine/overworld_normal.pal b/graphics/pokemon/mamoswine/overworld_normal.pal
new file mode 100644
index 000000000000..75e8601828e0
--- /dev/null
+++ b/graphics/pokemon/mamoswine/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+56 40 16
+136 88 56
+168 120 80
+104 64 40
+184 192 208
+128 136 144
+64 64 64
+40 112 144
+232 232 248
+200 168 104
+72 168 216
+152 120 32
+200 96 112
+136 56 72
diff --git a/graphics/pokemon/mamoswine/overworld_shiny.pal b/graphics/pokemon/mamoswine/overworld_shiny.pal
new file mode 100644
index 000000000000..5fa05c41ed3e
--- /dev/null
+++ b/graphics/pokemon/mamoswine/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+56 56 16
+128 128 56
+168 168 80
+88 80 32
+160 200 240
+120 152 168
+64 64 64
+32 128 112
+232 232 248
+200 184 104
+56 168 176
+152 152 32
+200 96 112
+136 56 72
diff --git a/graphics/pokemon/manaphy/overworld.png b/graphics/pokemon/manaphy/overworld.png
new file mode 100644
index 000000000000..77478a059338
Binary files /dev/null and b/graphics/pokemon/manaphy/overworld.png differ
diff --git a/graphics/pokemon/manaphy/overworld_normal.pal b/graphics/pokemon/manaphy/overworld_normal.pal
new file mode 100644
index 000000000000..6e3c729cecf0
--- /dev/null
+++ b/graphics/pokemon/manaphy/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 64 64
+128 160 240
+24 72 160
+80 128 232
+64 96 200
+0 0 0
+248 208 96
+232 232 248
+192 144 8
+192 64 104
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/manaphy/overworld_shiny.pal b/graphics/pokemon/manaphy/overworld_shiny.pal
new file mode 100644
index 000000000000..300ed3a43041
--- /dev/null
+++ b/graphics/pokemon/manaphy/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 64 64
+96 200 240
+8 96 112
+56 176 232
+48 168 200
+0 0 0
+248 224 96
+232 232 248
+168 168 24
+192 80 40
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/mandibuzz/overworld.png b/graphics/pokemon/mandibuzz/overworld.png
new file mode 100644
index 000000000000..4bad2765fb22
Binary files /dev/null and b/graphics/pokemon/mandibuzz/overworld.png differ
diff --git a/graphics/pokemon/mandibuzz/overworld_normal.pal b/graphics/pokemon/mandibuzz/overworld_normal.pal
new file mode 100644
index 000000000000..39599a33d638
--- /dev/null
+++ b/graphics/pokemon/mandibuzz/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+51 38 38
+93 93 88
+6 6 6
+92 57 54
+78 70 46
+153 91 86
+185 161 121
+222 118 135
+198 198 186
+203 46 25
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/mandibuzz/overworld_shiny.pal b/graphics/pokemon/mandibuzz/overworld_shiny.pal
new file mode 100644
index 000000000000..5f7e59532818
--- /dev/null
+++ b/graphics/pokemon/mandibuzz/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+51 38 38
+164 99 78
+6 6 6
+92 57 54
+119 65 64
+188 103 163
+189 170 196
+78 70 46
+203 46 25
+191 164 121
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/manectric/overworld.png b/graphics/pokemon/manectric/overworld.png
new file mode 100644
index 000000000000..2daf99e0c785
Binary files /dev/null and b/graphics/pokemon/manectric/overworld.png differ
diff --git a/graphics/pokemon/manectric/overworld_normal.pal b/graphics/pokemon/manectric/overworld_normal.pal
new file mode 100644
index 000000000000..9fcad2a9942e
--- /dev/null
+++ b/graphics/pokemon/manectric/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+248 248 144
+96 72 48
+224 192 72
+192 144 32
+24 48 88
+160 216 248
+128 184 216
+64 64 72
+80 152 184
+232 232 248
+192 56 56
+32 120 152
+160 160 160
+0 0 0
diff --git a/graphics/pokemon/manectric/overworld_shiny.pal b/graphics/pokemon/manectric/overworld_shiny.pal
new file mode 100644
index 000000000000..4a9add357132
--- /dev/null
+++ b/graphics/pokemon/manectric/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+248 248 144
+96 72 48
+224 192 72
+192 144 32
+40 48 64
+160 192 208
+104 136 152
+64 64 72
+80 104 120
+232 232 248
+0 72 160
+48 72 88
+160 160 160
+0 0 0
diff --git a/graphics/pokemon/mankey/overworld.png b/graphics/pokemon/mankey/overworld.png
new file mode 100644
index 000000000000..cc6f9ba54ee5
Binary files /dev/null and b/graphics/pokemon/mankey/overworld.png differ
diff --git a/graphics/pokemon/mankey/overworld_normal.pal b/graphics/pokemon/mankey/overworld_normal.pal
new file mode 100644
index 000000000000..3a603bc91058
--- /dev/null
+++ b/graphics/pokemon/mankey/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 64 56
+232 216 136
+152 120 96
+0 0 0
+208 176 128
+136 104 56
+176 128 48
+120 40 64
+176 104 128
+232 232 248
+176 176 208
+240 128 160
+144 16 48
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/mankey/overworld_shiny.pal b/graphics/pokemon/mankey/overworld_shiny.pal
new file mode 100644
index 000000000000..57a55b3e92fb
--- /dev/null
+++ b/graphics/pokemon/mankey/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 64 56
+208 224 136
+128 128 72
+0 0 0
+168 176 104
+104 104 56
+144 128 48
+120 40 64
+176 104 128
+232 232 248
+176 176 208
+240 128 160
+144 16 48
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/mantine/overworld.png b/graphics/pokemon/mantine/overworld.png
new file mode 100644
index 000000000000..aad777672028
Binary files /dev/null and b/graphics/pokemon/mantine/overworld.png differ
diff --git a/graphics/pokemon/mantine/overworld_normal.pal b/graphics/pokemon/mantine/overworld_normal.pal
new file mode 100644
index 000000000000..8ec8bdbe45ba
--- /dev/null
+++ b/graphics/pokemon/mantine/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 80 120
+0 0 0
+208 232 248
+136 176 216
+80 120 184
+120 160 216
+16 64 104
+40 64 72
+48 88 144
+176 168 184
+48 48 72
+144 136 152
+216 208 224
+232 232 248
+0 0 0
diff --git a/graphics/pokemon/mantine/overworld_shiny.pal b/graphics/pokemon/mantine/overworld_shiny.pal
new file mode 100644
index 000000000000..4e4d81c210da
--- /dev/null
+++ b/graphics/pokemon/mantine/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 80 120
+0 0 0
+208 232 248
+136 176 216
+80 160 200
+120 200 232
+16 48 96
+40 64 72
+48 96 144
+176 192 184
+48 48 72
+144 152 152
+216 208 224
+232 232 248
+0 0 0
diff --git a/graphics/pokemon/mantyke/overworld.png b/graphics/pokemon/mantyke/overworld.png
new file mode 100644
index 000000000000..9e935676bf18
Binary files /dev/null and b/graphics/pokemon/mantyke/overworld.png differ
diff --git a/graphics/pokemon/mantyke/overworld_normal.pal b/graphics/pokemon/mantyke/overworld_normal.pal
new file mode 100644
index 000000000000..f72b703fcdc6
--- /dev/null
+++ b/graphics/pokemon/mantyke/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 48 96
+0 0 0
+32 120 248
+8 88 200
+8 64 152
+112 192 240
+184 224 248
+144 64 56
+152 192 224
+232 232 248
+96 96 104
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/mantyke/overworld_shiny.pal b/graphics/pokemon/mantyke/overworld_shiny.pal
new file mode 100644
index 000000000000..dcc2969614d2
--- /dev/null
+++ b/graphics/pokemon/mantyke/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+8 80 72
+0 0 0
+56 168 216
+40 136 168
+24 112 120
+136 200 240
+184 224 248
+144 64 56
+160 200 232
+232 232 248
+96 96 104
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/maractus/overworld.png b/graphics/pokemon/maractus/overworld.png
new file mode 100644
index 000000000000..e74498531b5a
Binary files /dev/null and b/graphics/pokemon/maractus/overworld.png differ
diff --git a/graphics/pokemon/maractus/overworld_normal.pal b/graphics/pokemon/maractus/overworld_normal.pal
new file mode 100644
index 000000000000..46b279cf80a3
--- /dev/null
+++ b/graphics/pokemon/maractus/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 224 248
+127 37 80
+220 85 185
+117 117 0
+185 54 117
+220 220 0
+54 151 54
+85 220 117
+0 54 54
+0 25 25
+25 117 117
+25 85 54
+0 0 0
+25 54 54
+254 254 254
+0 0 0
diff --git a/graphics/pokemon/maractus/overworld_shiny.pal b/graphics/pokemon/maractus/overworld_shiny.pal
new file mode 100644
index 000000000000..9a3a5aa40956
--- /dev/null
+++ b/graphics/pokemon/maractus/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 224 248
+200 96 0
+239 184 39
+117 117 0
+239 184 39
+239 184 39
+104 144 72
+152 200 64
+35 54 44
+0 17 17
+184 32 120
+120 16 72
+0 17 17
+35 54 44
+120 224 248
+0 0 0
diff --git a/graphics/pokemon/mareanie/overworld.png b/graphics/pokemon/mareanie/overworld.png
new file mode 100644
index 000000000000..d608833c703b
Binary files /dev/null and b/graphics/pokemon/mareanie/overworld.png differ
diff --git a/graphics/pokemon/mareanie/overworld_normal.pal b/graphics/pokemon/mareanie/overworld_normal.pal
new file mode 100644
index 000000000000..4cba6f123639
--- /dev/null
+++ b/graphics/pokemon/mareanie/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+228 193 86
+120 197 206
+179 144 188
+185 155 70
+166 161 169
+85 169 83
+69 114 171
+169 107 215
+147 69 175
+87 76 40
+77 58 85
+43 76 101
+16 16 16
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/mareanie/overworld_shiny.pal b/graphics/pokemon/mareanie/overworld_shiny.pal
new file mode 100644
index 000000000000..6b6569dd3365
--- /dev/null
+++ b/graphics/pokemon/mareanie/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+228 193 86
+232 104 160
+179 144 188
+185 155 70
+166 161 169
+85 169 83
+192 56 112
+240 104 80
+208 56 80
+87 76 40
+128 40 48
+43 76 101
+16 16 16
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/mareep/overworld.png b/graphics/pokemon/mareep/overworld.png
new file mode 100644
index 000000000000..7a3e4ad1d0f1
Binary files /dev/null and b/graphics/pokemon/mareep/overworld.png differ
diff --git a/graphics/pokemon/mareep/overworld_normal.pal b/graphics/pokemon/mareep/overworld_normal.pal
new file mode 100644
index 000000000000..1de585f7aa8b
--- /dev/null
+++ b/graphics/pokemon/mareep/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 88 8
+248 168 0
+232 232 248
+224 112 0
+0 0 0
+248 248 176
+88 104 120
+232 208 104
+240 200 80
+48 56 64
+200 160 0
+168 144 72
+80 128 184
+8 72 96
+120 168 232
diff --git a/graphics/pokemon/mareep/overworld_shiny.pal b/graphics/pokemon/mareep/overworld_shiny.pal
new file mode 100644
index 000000000000..eb79f7951b39
--- /dev/null
+++ b/graphics/pokemon/mareep/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+136 96 112
+248 168 0
+232 232 248
+224 112 0
+0 0 0
+248 216 248
+88 104 120
+224 168 200
+240 200 80
+48 56 64
+200 160 0
+176 128 152
+72 136 176
+8 88 120
+136 184 232
diff --git a/graphics/pokemon/marill/overworld.png b/graphics/pokemon/marill/overworld.png
new file mode 100644
index 000000000000..fd1dab2db1db
Binary files /dev/null and b/graphics/pokemon/marill/overworld.png differ
diff --git a/graphics/pokemon/marill/overworld_normal.pal b/graphics/pokemon/marill/overworld_normal.pal
new file mode 100644
index 000000000000..5b777ad6a0d5
--- /dev/null
+++ b/graphics/pokemon/marill/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+32 56 104
+0 0 0
+112 176 240
+56 112 160
+184 48 40
+72 144 200
+232 232 248
+48 56 64
+136 160 184
+168 184 208
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/marill/overworld_shiny.pal b/graphics/pokemon/marill/overworld_shiny.pal
new file mode 100644
index 000000000000..c81c595de3e2
--- /dev/null
+++ b/graphics/pokemon/marill/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+32 64 48
+0 0 0
+120 216 152
+24 152 104
+184 48 40
+88 184 128
+232 232 248
+48 56 64
+136 160 184
+168 184 208
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/marowak/alolan/overworld.png b/graphics/pokemon/marowak/alolan/overworld.png
new file mode 100644
index 000000000000..07dc3ff981a1
Binary files /dev/null and b/graphics/pokemon/marowak/alolan/overworld.png differ
diff --git a/graphics/pokemon/marowak/alolan/overworld_normal.pal b/graphics/pokemon/marowak/alolan/overworld_normal.pal
new file mode 100644
index 000000000000..e8ff3de95a9e
--- /dev/null
+++ b/graphics/pokemon/marowak/alolan/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+128 128 128
+192 192 192
+72 72 72
+0 0 0
+216 224 224
+81 51 79
+50 142 66
+211 248 121
+52 35 51
+112 71 82
+4 107 56
+48 189 120
+137 86 133
+170 130 145
+172 229 196
diff --git a/graphics/pokemon/marowak/alolan/overworld_shiny.pal b/graphics/pokemon/marowak/alolan/overworld_shiny.pal
new file mode 100644
index 000000000000..d42162967550
--- /dev/null
+++ b/graphics/pokemon/marowak/alolan/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+128 128 128
+192 192 192
+72 72 72
+0 0 0
+216 224 224
+67 58 109
+50 142 66
+211 248 121
+54 49 81
+67 67 67
+4 107 56
+48 189 120
+101 87 164
+112 112 112
+172 229 196
diff --git a/graphics/pokemon/marowak/overworld.png b/graphics/pokemon/marowak/overworld.png
new file mode 100644
index 000000000000..d37ef5730937
Binary files /dev/null and b/graphics/pokemon/marowak/overworld.png differ
diff --git a/graphics/pokemon/marowak/overworld_normal.pal b/graphics/pokemon/marowak/overworld_normal.pal
new file mode 100644
index 000000000000..44ae1c4ae99b
--- /dev/null
+++ b/graphics/pokemon/marowak/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+128 128 128
+192 192 192
+72 72 72
+0 0 0
+216 224 224
+232 232 248
+72 48 48
+168 128 72
+200 152 80
+224 192 144
+192 160 104
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/marowak/overworld_shiny.pal b/graphics/pokemon/marowak/overworld_shiny.pal
new file mode 100644
index 000000000000..312939d9bc49
--- /dev/null
+++ b/graphics/pokemon/marowak/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+128 128 128
+200 200 176
+72 72 72
+0 0 0
+224 232 216
+232 232 248
+40 64 24
+96 120 56
+144 160 72
+224 192 144
+192 160 104
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/marshadow/overworld.png b/graphics/pokemon/marshadow/overworld.png
new file mode 100644
index 000000000000..1cec592be9d8
Binary files /dev/null and b/graphics/pokemon/marshadow/overworld.png differ
diff --git a/graphics/pokemon/marshadow/overworld_normal.pal b/graphics/pokemon/marshadow/overworld_normal.pal
new file mode 100644
index 000000000000..e0de7bae9910
--- /dev/null
+++ b/graphics/pokemon/marshadow/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+255 253 0
+255 247 0
+100 133 103
+106 106 106
+255 101 40
+255 85 33
+78 100 81
+62 66 62
+48 61 50
+40 43 40
+19 19 19
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/marshadow/overworld_shiny.pal b/graphics/pokemon/marshadow/overworld_shiny.pal
new file mode 100644
index 000000000000..b425429f44ce
--- /dev/null
+++ b/graphics/pokemon/marshadow/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+255 253 0
+255 247 0
+132 99 140
+106 106 106
+255 101 40
+255 85 33
+90 66 107
+62 66 62
+48 61 50
+40 43 40
+19 19 19
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/marshtomp/overworld.png b/graphics/pokemon/marshtomp/overworld.png
new file mode 100644
index 000000000000..a2d25bbab8b6
Binary files /dev/null and b/graphics/pokemon/marshtomp/overworld.png differ
diff --git a/graphics/pokemon/marshtomp/overworld_normal.pal b/graphics/pokemon/marshtomp/overworld_normal.pal
new file mode 100644
index 000000000000..19a6000b98a7
--- /dev/null
+++ b/graphics/pokemon/marshtomp/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+168 224 24
+48 80 96
+0 0 0
+128 160 176
+96 120 128
+32 80 88
+88 184 176
+64 128 128
+72 56 16
+240 128 16
+232 232 248
+160 72 16
+176 192 208
+192 88 16
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/marshtomp/overworld_shiny.pal b/graphics/pokemon/marshtomp/overworld_shiny.pal
new file mode 100644
index 000000000000..4a6f1cdcabdd
--- /dev/null
+++ b/graphics/pokemon/marshtomp/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+168 230 29
+56 56 64
+0 0 0
+136 120 168
+104 88 112
+104 88 144
+200 168 240
+152 128 192
+104 64 0
+248 200 48
+232 232 248
+128 80 0
+176 176 208
+216 144 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/masquerain/overworld.png b/graphics/pokemon/masquerain/overworld.png
new file mode 100644
index 000000000000..b1e41fb33c51
Binary files /dev/null and b/graphics/pokemon/masquerain/overworld.png differ
diff --git a/graphics/pokemon/masquerain/overworld_normal.pal b/graphics/pokemon/masquerain/overworld_normal.pal
new file mode 100644
index 000000000000..8fd35c441bc0
--- /dev/null
+++ b/graphics/pokemon/masquerain/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+104 24 32
+200 88 72
+160 64 48
+88 112 152
+160 208 224
+176 216 232
+232 232 248
+64 80 112
+136 32 88
+216 104 120
+224 160 184
+136 176 200
+232 232 248
+80 80 88
diff --git a/graphics/pokemon/masquerain/overworld_shiny.pal b/graphics/pokemon/masquerain/overworld_shiny.pal
new file mode 100644
index 000000000000..25aef3f7f442
--- /dev/null
+++ b/graphics/pokemon/masquerain/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+0 0 0
+24 72 56
+96 160 48
+72 128 24
+80 120 80
+208 176 64
+176 208 168
+248 200 104
+64 88 56
+136 32 88
+216 120 128
+224 160 184
+136 184 136
+232 232 248
+80 80 88
diff --git a/graphics/pokemon/mawile/overworld.png b/graphics/pokemon/mawile/overworld.png
new file mode 100644
index 000000000000..470363d2857a
Binary files /dev/null and b/graphics/pokemon/mawile/overworld.png differ
diff --git a/graphics/pokemon/mawile/overworld_normal.pal b/graphics/pokemon/mawile/overworld_normal.pal
new file mode 100644
index 000000000000..df0e2b920374
--- /dev/null
+++ b/graphics/pokemon/mawile/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+112 112 112
+40 40 40
+72 72 72
+144 144 144
+200 168 88
+248 216 128
+176 184 200
+128 104 72
+80 72 56
+232 232 248
+192 56 56
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/mawile/overworld_shiny.pal b/graphics/pokemon/mawile/overworld_shiny.pal
new file mode 100644
index 000000000000..dccc179b1df1
--- /dev/null
+++ b/graphics/pokemon/mawile/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+136 80 120
+48 24 48
+88 48 80
+184 112 152
+200 168 88
+248 216 128
+176 184 200
+128 104 72
+80 72 56
+232 232 248
+192 56 56
+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 692470be7a0d..336d79ce1c61 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 d375b55d42ff..9438f9d0df22 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 f7b8a8fd4e97..2b0f86482efc 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 2a07de3b1de1..09fef3a59229 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/medicham/overworld.png b/graphics/pokemon/medicham/overworld.png
new file mode 100644
index 000000000000..01bb389c079c
Binary files /dev/null and b/graphics/pokemon/medicham/overworld.png differ
diff --git a/graphics/pokemon/medicham/overworld_normal.pal b/graphics/pokemon/medicham/overworld_normal.pal
new file mode 100644
index 000000000000..08d2ee0e18ed
--- /dev/null
+++ b/graphics/pokemon/medicham/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 24 32
+0 0 0
+200 96 128
+232 136 160
+184 80 104
+144 56 88
+152 152 144
+248 216 88
+192 192 184
+112 112 96
+232 232 248
+56 56 64
+192 160 16
+152 128 24
+112 80 16
diff --git a/graphics/pokemon/medicham/overworld_shiny.pal b/graphics/pokemon/medicham/overworld_shiny.pal
new file mode 100644
index 000000000000..483d63dd6a59
--- /dev/null
+++ b/graphics/pokemon/medicham/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 24 48
+0 0 0
+112 160 200
+136 192 232
+88 128 168
+64 96 136
+200 168 104
+248 216 88
+232 208 136
+120 88 64
+232 232 248
+80 56 24
+192 160 16
+152 128 24
+112 80 16
diff --git a/graphics/pokemon/meditite/overworld.png b/graphics/pokemon/meditite/overworld.png
new file mode 100644
index 000000000000..53adfb2b00d5
Binary files /dev/null and b/graphics/pokemon/meditite/overworld.png differ
diff --git a/graphics/pokemon/meditite/overworld_normal.pal b/graphics/pokemon/meditite/overworld_normal.pal
new file mode 100644
index 000000000000..c588d2426547
--- /dev/null
+++ b/graphics/pokemon/meditite/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 56 64
+176 184 200
+216 224 232
+0 0 0
+136 136 152
+160 160 176
+80 80 88
+232 232 248
+40 64 96
+184 48 40
+64 104 152
+88 144 192
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/meditite/overworld_shiny.pal b/graphics/pokemon/meditite/overworld_shiny.pal
new file mode 100644
index 000000000000..7c76a3780f46
--- /dev/null
+++ b/graphics/pokemon/meditite/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 56 64
+176 184 200
+216 224 232
+0 0 0
+136 136 152
+160 160 176
+80 80 88
+232 232 248
+104 32 8
+184 48 40
+176 80 16
+216 120 32
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/meganium/overworld.png b/graphics/pokemon/meganium/overworld.png
new file mode 100644
index 000000000000..4f1cb708293b
Binary files /dev/null and b/graphics/pokemon/meganium/overworld.png differ
diff --git a/graphics/pokemon/meganium/overworld_normal.pal b/graphics/pokemon/meganium/overworld_normal.pal
new file mode 100644
index 000000000000..c64f70a10219
--- /dev/null
+++ b/graphics/pokemon/meganium/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+104 104 64
+240 208 48
+192 152 40
+72 88 40
+0 0 0
+192 208 80
+128 160 88
+160 184 80
+232 232 248
+136 96 0
+104 40 80
+200 176 184
+176 80 120
+208 96 144
+184 176 200
diff --git a/graphics/pokemon/meganium/overworld_shiny.pal b/graphics/pokemon/meganium/overworld_shiny.pal
new file mode 100644
index 000000000000..d735254d20c8
--- /dev/null
+++ b/graphics/pokemon/meganium/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 104 64
+240 208 48
+192 152 40
+96 80 32
+0 0 0
+232 216 88
+168 152 56
+200 184 72
+232 232 248
+136 96 0
+144 88 32
+200 176 184
+224 112 16
+248 144 96
+184 176 200
diff --git a/graphics/pokemon/melmetal/overworld.png b/graphics/pokemon/melmetal/overworld.png
new file mode 100644
index 000000000000..4be020a5c6a8
Binary files /dev/null and b/graphics/pokemon/melmetal/overworld.png differ
diff --git a/graphics/pokemon/melmetal/overworld_normal.pal b/graphics/pokemon/melmetal/overworld_normal.pal
new file mode 100644
index 000000000000..28e459319267
--- /dev/null
+++ b/graphics/pokemon/melmetal/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+254 235 185
+220 220 218
+235 192 100
+175 175 178
+164 136 61
+136 136 128
+123 102 40
+96 96 96
+94 77 30
+228 74 49
+78 26 17
+64 64 64
+45 43 43
+8 8 8
+0 0 0
diff --git a/graphics/pokemon/melmetal/overworld_shiny.pal b/graphics/pokemon/melmetal/overworld_shiny.pal
new file mode 100644
index 000000000000..6d1c75c9bbf3
--- /dev/null
+++ b/graphics/pokemon/melmetal/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+254 235 185
+220 220 218
+248 160 80
+175 175 178
+216 104 40
+136 136 128
+176 72 40
+96 96 96
+128 48 32
+0 88 216
+17 23 78
+64 64 64
+45 43 43
+8 8 8
+0 0 0
diff --git a/graphics/pokemon/meloetta/overworld.png b/graphics/pokemon/meloetta/overworld.png
new file mode 100644
index 000000000000..02de1cbccfc5
Binary files /dev/null and b/graphics/pokemon/meloetta/overworld.png differ
diff --git a/graphics/pokemon/meloetta/overworld_normal.pal b/graphics/pokemon/meloetta/overworld_normal.pal
new file mode 100644
index 000000000000..883c1689303e
--- /dev/null
+++ b/graphics/pokemon/meloetta/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+42 47 74
+89 76 91
+109 101 43
+197 210 120
+111 143 71
+145 193 81
+220 220 230
+171 186 202
+66 148 170
+46 102 112
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/meloetta/overworld_shiny.pal b/graphics/pokemon/meloetta/overworld_shiny.pal
new file mode 100644
index 000000000000..e9290e1f4cb9
--- /dev/null
+++ b/graphics/pokemon/meloetta/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+224 168 120
+43 48 72
+87 99 110
+87 99 110
+160 240 192
+48 160 32
+112 168 152
+243 243 230
+177 173 181
+104 211 71
+48 160 32
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/meloetta/pirouette/overworld.png b/graphics/pokemon/meloetta/pirouette/overworld.png
new file mode 100644
index 000000000000..44e802879427
Binary files /dev/null and b/graphics/pokemon/meloetta/pirouette/overworld.png differ
diff --git a/graphics/pokemon/meloetta/pirouette/overworld_normal.pal b/graphics/pokemon/meloetta/pirouette/overworld_normal.pal
new file mode 100644
index 000000000000..5b8f9a6f3778
--- /dev/null
+++ b/graphics/pokemon/meloetta/pirouette/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+32 35 53
+83 59 83
+42 47 74
+88 76 90
+104 55 47
+236 100 75
+164 71 47
+222 222 233
+176 178 190
+191 40 79
+208 128 162
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/meloetta/pirouette/overworld_shiny.pal b/graphics/pokemon/meloetta/pirouette/overworld_shiny.pal
new file mode 100644
index 000000000000..d1c14a244417
--- /dev/null
+++ b/graphics/pokemon/meloetta/pirouette/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+26 30 53
+42 47 74
+42 47 74
+103 103 111
+65 32 49
+238 82 197
+180 41 139
+222 222 233
+176 178 190
+189 95 69
+189 95 69
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/meltan/overworld.png b/graphics/pokemon/meltan/overworld.png
new file mode 100644
index 000000000000..a72f9839b1b7
Binary files /dev/null and b/graphics/pokemon/meltan/overworld.png differ
diff --git a/graphics/pokemon/meltan/overworld_normal.pal b/graphics/pokemon/meltan/overworld_normal.pal
new file mode 100644
index 000000000000..3f15fd8644e3
--- /dev/null
+++ b/graphics/pokemon/meltan/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+220 220 218
+235 197 123
+231 187 93
+176 176 175
+232 128 115
+179 152 81
+123 123 122
+121 102 52
+222 73 55
+125 91 85
+79 67 34
+79 27 20
+68 68 67
+62 58 52
+8 8 8
diff --git a/graphics/pokemon/meltan/overworld_shiny.pal b/graphics/pokemon/meltan/overworld_shiny.pal
new file mode 100644
index 000000000000..f14a3f2e5880
--- /dev/null
+++ b/graphics/pokemon/meltan/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+220 220 218
+248 160 80
+216 104 40
+176 176 175
+115 160 232
+128 48 32
+123 123 122
+176 72 40
+0 88 216
+125 91 85
+79 67 34
+0 48 120
+68 68 67
+62 58 52
+8 8 8
diff --git a/graphics/pokemon/meowstic/female/overworld.png b/graphics/pokemon/meowstic/female/overworld.png
new file mode 100644
index 000000000000..abafe4c21a2b
Binary files /dev/null and b/graphics/pokemon/meowstic/female/overworld.png differ
diff --git a/graphics/pokemon/meowstic/female/overworld_normal.pal b/graphics/pokemon/meowstic/female/overworld_normal.pal
new file mode 100644
index 000000000000..3456a6d7ddbe
--- /dev/null
+++ b/graphics/pokemon/meowstic/female/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+76 90 90
+251 254 255
+45 54 73
+142 169 170
+80 102 144
+45 54 73
+60 74 102
+253 236 58
+226 143 56
+199 51 54
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/meowstic/female/overworld_shiny.pal b/graphics/pokemon/meowstic/female/overworld_shiny.pal
new file mode 100644
index 000000000000..ba3cd3ff475c
--- /dev/null
+++ b/graphics/pokemon/meowstic/female/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+76 90 90
+251 254 255
+148 123 34
+142 169 170
+226 222 75
+45 54 73
+203 184 45
+253 236 58
+226 143 56
+199 51 54
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/meowstic/overworld.png b/graphics/pokemon/meowstic/overworld.png
new file mode 100644
index 000000000000..d34d7455d847
Binary files /dev/null and b/graphics/pokemon/meowstic/overworld.png differ
diff --git a/graphics/pokemon/meowstic/overworld_normal.pal b/graphics/pokemon/meowstic/overworld_normal.pal
new file mode 100644
index 000000000000..cbfe930dfc28
--- /dev/null
+++ b/graphics/pokemon/meowstic/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+45 54 73
+251 254 255
+16 16 16
+45 54 73
+80 102 144
+165 178 200
+66 83 116
+157 233 224
+34 122 48
+110 150 170
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/meowstic/overworld_shiny.pal b/graphics/pokemon/meowstic/overworld_shiny.pal
new file mode 100644
index 000000000000..ae9237b1c5e0
--- /dev/null
+++ b/graphics/pokemon/meowstic/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+45 54 73
+251 254 255
+16 16 16
+148 123 34
+226 222 75
+165 178 200
+203 184 45
+157 233 224
+34 122 48
+110 150 170
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/meowth/alolan/overworld.png b/graphics/pokemon/meowth/alolan/overworld.png
new file mode 100644
index 000000000000..8b2ee85857fa
Binary files /dev/null and b/graphics/pokemon/meowth/alolan/overworld.png differ
diff --git a/graphics/pokemon/meowth/alolan/overworld_normal.pal b/graphics/pokemon/meowth/alolan/overworld_normal.pal
new file mode 100644
index 000000000000..cf3a77b36193
--- /dev/null
+++ b/graphics/pokemon/meowth/alolan/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+225 227 242
+53 48 80
+158 164 205
+112 104 162
+248 200 32
+216 144 24
+69 63 103
+52 49 68
+79 74 103
+244 251 255
+151 142 174
+64 56 48
+225 227 242
+0 0 0
diff --git a/graphics/pokemon/meowth/alolan/overworld_shiny.pal b/graphics/pokemon/meowth/alolan/overworld_shiny.pal
new file mode 100644
index 000000000000..47bb6a945b5e
--- /dev/null
+++ b/graphics/pokemon/meowth/alolan/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+117 74 144
+31 27 99
+126 150 233
+86 106 172
+248 200 32
+216 144 24
+69 63 103
+52 49 68
+79 74 103
+187 113 225
+151 142 174
+64 56 48
+225 227 242
+0 0 0
diff --git a/graphics/pokemon/meowth/galarian/overworld.png b/graphics/pokemon/meowth/galarian/overworld.png
new file mode 100644
index 000000000000..2a95a729ec15
Binary files /dev/null and b/graphics/pokemon/meowth/galarian/overworld.png differ
diff --git a/graphics/pokemon/meowth/galarian/overworld_normal.pal b/graphics/pokemon/meowth/galarian/overworld_normal.pal
new file mode 100644
index 000000000000..e115d77e4f4b
--- /dev/null
+++ b/graphics/pokemon/meowth/galarian/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 128 128
+14 14 14
+32 32 32
+68 68 68
+0 0 0
+40 34 27
+244 244 244
+130 114 98
+193 177 161
+194 194 194
+251 216 60
+255 255 255
+12 12 12
+13 13 13
+14 14 14
+15 15 15
diff --git a/graphics/pokemon/meowth/galarian/overworld_shiny.pal b/graphics/pokemon/meowth/galarian/overworld_shiny.pal
new file mode 100644
index 000000000000..e115d77e4f4b
--- /dev/null
+++ b/graphics/pokemon/meowth/galarian/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 128 128
+14 14 14
+32 32 32
+68 68 68
+0 0 0
+40 34 27
+244 244 244
+130 114 98
+193 177 161
+194 194 194
+251 216 60
+255 255 255
+12 12 12
+13 13 13
+14 14 14
+15 15 15
diff --git a/graphics/pokemon/meowth/overworld.png b/graphics/pokemon/meowth/overworld.png
new file mode 100644
index 000000000000..4961e2ce85f4
Binary files /dev/null and b/graphics/pokemon/meowth/overworld.png differ
diff --git a/graphics/pokemon/meowth/overworld_normal.pal b/graphics/pokemon/meowth/overworld_normal.pal
new file mode 100644
index 000000000000..cc95ce267c33
--- /dev/null
+++ b/graphics/pokemon/meowth/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+152 80 24
+80 56 24
+240 216 128
+216 176 64
+248 200 32
+216 144 24
+120 104 80
+64 56 48
+176 88 80
+200 128 48
+168 32 80
+168 120 80
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/meowth/overworld_shiny.pal b/graphics/pokemon/meowth/overworld_shiny.pal
new file mode 100644
index 000000000000..b73f08732fd8
--- /dev/null
+++ b/graphics/pokemon/meowth/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+160 72 104
+96 40 64
+240 192 128
+200 152 136
+248 200 32
+216 144 24
+120 104 80
+64 56 48
+176 88 80
+184 88 128
+168 32 80
+144 112 104
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/mesprit/overworld.png b/graphics/pokemon/mesprit/overworld.png
new file mode 100644
index 000000000000..ea0c72eeced0
Binary files /dev/null and b/graphics/pokemon/mesprit/overworld.png differ
diff --git a/graphics/pokemon/mesprit/overworld_normal.pal b/graphics/pokemon/mesprit/overworld_normal.pal
new file mode 100644
index 000000000000..7d87729400fd
--- /dev/null
+++ b/graphics/pokemon/mesprit/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 48 56
+0 0 0
+184 80 128
+224 112 144
+144 72 112
+168 40 0
+248 168 152
+72 72 88
+176 208 248
+232 64 32
+112 128 176
+136 120 32
+144 184 208
+232 232 248
+248 176 16
diff --git a/graphics/pokemon/mesprit/overworld_shiny.pal b/graphics/pokemon/mesprit/overworld_shiny.pal
new file mode 100644
index 000000000000..fc3e53fa80ba
--- /dev/null
+++ b/graphics/pokemon/mesprit/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 48 56
+0 0 0
+224 112 112
+248 144 128
+200 88 72
+168 40 0
+248 168 152
+104 80 56
+248 216 88
+232 64 32
+176 128 48
+136 120 32
+216 176 88
+232 232 248
+248 176 16
diff --git a/graphics/pokemon/metagross/overworld.png b/graphics/pokemon/metagross/overworld.png
new file mode 100644
index 000000000000..5665e8ffa770
Binary files /dev/null and b/graphics/pokemon/metagross/overworld.png differ
diff --git a/graphics/pokemon/metagross/overworld_normal.pal b/graphics/pokemon/metagross/overworld_normal.pal
new file mode 100644
index 000000000000..7755c99417ec
--- /dev/null
+++ b/graphics/pokemon/metagross/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+32 64 80
+88 128 168
+64 96 120
+0 0 0
+152 216 240
+144 192 232
+64 64 64
+192 192 192
+40 40 48
+104 144 208
+144 144 160
+232 232 248
+152 40 40
+152 152 160
+0 0 0
diff --git a/graphics/pokemon/metagross/overworld_shiny.pal b/graphics/pokemon/metagross/overworld_shiny.pal
new file mode 100644
index 000000000000..33c35936aaea
--- /dev/null
+++ b/graphics/pokemon/metagross/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 56 56
+168 168 168
+112 112 112
+0 0 0
+216 216 216
+216 216 216
+64 64 64
+232 200 0
+40 40 48
+192 192 192
+192 136 0
+232 232 248
+152 40 40
+128 88 0
+0 0 0
diff --git a/graphics/pokemon/metang/overworld.png b/graphics/pokemon/metang/overworld.png
new file mode 100644
index 000000000000..66f8270d4420
Binary files /dev/null and b/graphics/pokemon/metang/overworld.png differ
diff --git a/graphics/pokemon/metang/overworld_normal.pal b/graphics/pokemon/metang/overworld_normal.pal
new file mode 100644
index 000000000000..4a68b5849747
--- /dev/null
+++ b/graphics/pokemon/metang/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+64 64 64
+144 192 232
+152 216 240
+232 232 248
+144 144 160
+104 144 208
+32 64 80
+192 192 192
+64 96 120
+88 128 168
+40 40 48
+152 152 160
+152 40 40
+120 32 32
diff --git a/graphics/pokemon/metang/overworld_shiny.pal b/graphics/pokemon/metang/overworld_shiny.pal
new file mode 100644
index 000000000000..f1fbda46e7c8
--- /dev/null
+++ b/graphics/pokemon/metang/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+96 72 48
+216 216 216
+216 216 216
+232 200 0
+192 96 0
+192 192 192
+56 56 56
+232 144 0
+112 112 112
+168 168 168
+40 40 48
+128 64 0
+152 40 40
+120 32 32
diff --git a/graphics/pokemon/metapod/overworld.png b/graphics/pokemon/metapod/overworld.png
new file mode 100644
index 000000000000..1e1d363f8a9f
Binary files /dev/null and b/graphics/pokemon/metapod/overworld.png differ
diff --git a/graphics/pokemon/metapod/overworld_normal.pal b/graphics/pokemon/metapod/overworld_normal.pal
new file mode 100644
index 000000000000..c0903a0f6b4a
--- /dev/null
+++ b/graphics/pokemon/metapod/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 72 24
+160 216 72
+104 136 48
+0 0 0
+224 224 224
+232 232 248
+0 0 0
+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/metapod/overworld_shiny.pal b/graphics/pokemon/metapod/overworld_shiny.pal
new file mode 100644
index 000000000000..a2eb3c155458
--- /dev/null
+++ b/graphics/pokemon/metapod/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 56 24
+248 168 72
+208 120 24
+0 0 0
+224 224 224
+232 232 248
+0 0 0
+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/mew/overworld.png b/graphics/pokemon/mew/overworld.png
new file mode 100644
index 000000000000..067d6c83d67b
Binary files /dev/null and b/graphics/pokemon/mew/overworld.png differ
diff --git a/graphics/pokemon/mew/overworld_normal.pal b/graphics/pokemon/mew/overworld_normal.pal
new file mode 100644
index 000000000000..59b29db91da0
--- /dev/null
+++ b/graphics/pokemon/mew/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 48 80
+96 96 96
+248 208 232
+176 104 168
+216 160 184
+0 0 0
+232 232 248
+64 128 128
+200 200 248
+112 88 112
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/mew/overworld_shiny.pal b/graphics/pokemon/mew/overworld_shiny.pal
new file mode 100644
index 000000000000..daf7559247f5
--- /dev/null
+++ b/graphics/pokemon/mew/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+24 72 120
+96 96 96
+176 224 248
+104 144 200
+144 192 216
+0 0 0
+232 232 248
+64 128 128
+200 200 248
+72 96 136
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/mewtwo/overworld.png b/graphics/pokemon/mewtwo/overworld.png
new file mode 100644
index 000000000000..dbd7d5b76fcb
Binary files /dev/null and b/graphics/pokemon/mewtwo/overworld.png differ
diff --git a/graphics/pokemon/mewtwo/overworld_normal.pal b/graphics/pokemon/mewtwo/overworld_normal.pal
new file mode 100644
index 000000000000..1f11ddbb6522
--- /dev/null
+++ b/graphics/pokemon/mewtwo/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 96 96
+0 0 0
+232 232 248
+64 64 64
+216 200 216
+176 152 192
+136 72 136
+128 120 152
+64 48 80
+184 88 208
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/mewtwo/overworld_shiny.pal b/graphics/pokemon/mewtwo/overworld_shiny.pal
new file mode 100644
index 000000000000..965e699ed35c
--- /dev/null
+++ b/graphics/pokemon/mewtwo/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 96 96
+0 0 0
+232 232 248
+64 64 64
+216 200 216
+176 152 192
+104 152 40
+128 120 152
+80 112 48
+128 200 72
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/mienfoo/overworld.png b/graphics/pokemon/mienfoo/overworld.png
new file mode 100644
index 000000000000..dc8920b193ba
Binary files /dev/null and b/graphics/pokemon/mienfoo/overworld.png differ
diff --git a/graphics/pokemon/mienfoo/overworld_normal.pal b/graphics/pokemon/mienfoo/overworld_normal.pal
new file mode 100644
index 000000000000..c381a390d1a2
--- /dev/null
+++ b/graphics/pokemon/mienfoo/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 80 0
+104 80 0
+187 168 89
+248 216 96
+0 0 0
+120 120 120
+120 32 56
+216 96 120
+232 232 248
+144 120 80
+160 64 80
+248 216 96
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/mienfoo/overworld_shiny.pal b/graphics/pokemon/mienfoo/overworld_shiny.pal
new file mode 100644
index 000000000000..2ef31fe5dab3
--- /dev/null
+++ b/graphics/pokemon/mienfoo/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+120 112 96
+104 80 0
+168 160 136
+232 232 200
+0 0 0
+120 120 120
+56 56 168
+104 96 240
+232 232 248
+144 120 80
+72 72 200
+248 216 96
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/mienshao/overworld.png b/graphics/pokemon/mienshao/overworld.png
new file mode 100644
index 000000000000..921b97665e65
Binary files /dev/null and b/graphics/pokemon/mienshao/overworld.png differ
diff --git a/graphics/pokemon/mienshao/overworld_normal.pal b/graphics/pokemon/mienshao/overworld_normal.pal
new file mode 100644
index 000000000000..79731d0935b1
--- /dev/null
+++ b/graphics/pokemon/mienshao/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+70 49 61
+180 158 156
+228 214 212
+0 0 0
+132 98 172
+172 138 196
+222 204 211
+229 214 213
+228 213 211
+84 66 100
+252 174 100
+232 232 248
+164 34 36
+104 74 140
+0 0 0
diff --git a/graphics/pokemon/mienshao/overworld_shiny.pal b/graphics/pokemon/mienshao/overworld_shiny.pal
new file mode 100644
index 000000000000..c619aed9c225
--- /dev/null
+++ b/graphics/pokemon/mienshao/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+70 49 61
+152 144 168
+224 216 224
+0 0 0
+152 56 128
+216 88 160
+224 216 224
+224 216 224
+224 216 224
+64 24 48
+168 112 224
+232 232 248
+164 34 36
+104 74 140
+0 0 0
diff --git a/graphics/pokemon/mightyena/overworld.png b/graphics/pokemon/mightyena/overworld.png
new file mode 100644
index 000000000000..a7d232508614
Binary files /dev/null and b/graphics/pokemon/mightyena/overworld.png differ
diff --git a/graphics/pokemon/mightyena/overworld_normal.pal b/graphics/pokemon/mightyena/overworld_normal.pal
new file mode 100644
index 000000000000..937b068866b3
--- /dev/null
+++ b/graphics/pokemon/mightyena/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+48 56 56
+80 80 88
+64 56 80
+168 160 184
+128 120 136
+104 112 112
+128 32 32
+224 64 64
+248 216 88
+144 152 160
+176 184 192
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/mightyena/overworld_shiny.pal b/graphics/pokemon/mightyena/overworld_shiny.pal
new file mode 100644
index 000000000000..50b9dd9418ee
--- /dev/null
+++ b/graphics/pokemon/mightyena/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+64 56 40
+120 80 32
+80 64 0
+200 184 144
+160 120 72
+128 88 40
+0 120 200
+88 176 192
+168 216 248
+144 152 160
+176 184 192
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/milcery/overworld.png b/graphics/pokemon/milcery/overworld.png
new file mode 100644
index 000000000000..f159e3f08b1d
Binary files /dev/null and b/graphics/pokemon/milcery/overworld.png differ
diff --git a/graphics/pokemon/milcery/overworld_normal.pal b/graphics/pokemon/milcery/overworld_normal.pal
new file mode 100644
index 000000000000..d5408d86c0dd
--- /dev/null
+++ b/graphics/pokemon/milcery/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 25
+167 154 101
+239 227 179
+0 0 0
+214 201 147
+255 255 255
+0 0 0
+0 0 0
+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/milcery/overworld_shiny.pal b/graphics/pokemon/milcery/overworld_shiny.pal
new file mode 100644
index 000000000000..596ba17239d4
--- /dev/null
+++ b/graphics/pokemon/milcery/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 25
+139 139 139
+255 255 255
+0 0 0
+222 222 222
+65 65 65
+0 0 0
+0 0 0
+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/milotic/overworld.png b/graphics/pokemon/milotic/overworld.png
new file mode 100644
index 000000000000..55a0fa432cdb
Binary files /dev/null and b/graphics/pokemon/milotic/overworld.png differ
diff --git a/graphics/pokemon/milotic/overworld_normal.pal b/graphics/pokemon/milotic/overworld_normal.pal
new file mode 100644
index 000000000000..c704285eb7ac
--- /dev/null
+++ b/graphics/pokemon/milotic/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+240 104 112
+96 88 64
+184 48 80
+248 240 216
+0 0 0
+208 168 64
+32 56 88
+232 216 168
+112 160 208
+184 48 112
+128 8 72
+240 104 152
+56 88 128
+80 128 168
+80 72 152
diff --git a/graphics/pokemon/milotic/overworld_shiny.pal b/graphics/pokemon/milotic/overworld_shiny.pal
new file mode 100644
index 000000000000..bee7d440aef0
--- /dev/null
+++ b/graphics/pokemon/milotic/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+240 104 112
+96 88 64
+184 48 80
+248 240 216
+0 0 0
+208 168 64
+96 56 0
+232 216 168
+248 200 48
+72 128 152
+40 56 88
+112 200 208
+144 96 0
+200 136 24
+136 96 8
diff --git a/graphics/pokemon/miltank/overworld.png b/graphics/pokemon/miltank/overworld.png
new file mode 100644
index 000000000000..351fc02f878f
Binary files /dev/null and b/graphics/pokemon/miltank/overworld.png differ
diff --git a/graphics/pokemon/miltank/overworld_normal.pal b/graphics/pokemon/miltank/overworld_normal.pal
new file mode 100644
index 000000000000..84739e680fb9
--- /dev/null
+++ b/graphics/pokemon/miltank/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+32 48 64
+56 64 72
+232 232 248
+168 184 208
+72 96 120
+40 64 80
+240 168 192
+208 136 160
+88 40 56
+120 72 80
+176 96 120
+160 144 88
+208 184 120
+80 64 32
diff --git a/graphics/pokemon/miltank/overworld_shiny.pal b/graphics/pokemon/miltank/overworld_shiny.pal
new file mode 100644
index 000000000000..83eb27dce68b
--- /dev/null
+++ b/graphics/pokemon/miltank/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+64 64 56
+56 64 72
+232 232 248
+168 184 208
+136 72 40
+88 56 40
+184 192 232
+144 160 192
+32 48 64
+72 80 104
+104 120 152
+184 184 184
+216 216 216
+56 56 56
diff --git a/graphics/pokemon/mime_jr/overworld.png b/graphics/pokemon/mime_jr/overworld.png
new file mode 100644
index 000000000000..4021617ffff0
Binary files /dev/null and b/graphics/pokemon/mime_jr/overworld.png differ
diff --git a/graphics/pokemon/mime_jr/overworld_normal.pal b/graphics/pokemon/mime_jr/overworld_normal.pal
new file mode 100644
index 000000000000..63c1342a0a7c
--- /dev/null
+++ b/graphics/pokemon/mime_jr/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 64 64
+232 232 248
+168 168 168
+0 0 0
+40 40 72
+64 64 128
+88 96 176
+120 128 232
+96 32 56
+240 176 200
+208 64 88
+216 112 144
+120 72 88
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/mime_jr/overworld_shiny.pal b/graphics/pokemon/mime_jr/overworld_shiny.pal
new file mode 100644
index 000000000000..0a455bdaa3ad
--- /dev/null
+++ b/graphics/pokemon/mime_jr/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 64 64
+232 232 248
+152 208 160
+0 0 0
+40 72 88
+24 112 88
+8 152 88
+24 184 104
+96 32 56
+248 200 216
+208 64 88
+224 160 184
+120 72 88
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/mimikyu/overworld.png b/graphics/pokemon/mimikyu/overworld.png
new file mode 100644
index 000000000000..8c83b114cb13
Binary files /dev/null and b/graphics/pokemon/mimikyu/overworld.png differ
diff --git a/graphics/pokemon/mimikyu/overworld_normal.pal b/graphics/pokemon/mimikyu/overworld_normal.pal
new file mode 100644
index 000000000000..145148606c08
--- /dev/null
+++ b/graphics/pokemon/mimikyu/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+216 208 168
+181 166 129
+152 136 98
+151 91 39
+101 90 65
+122 73 31
+95 76 61
+64 64 64
+48 48 48
+54 44 34
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/mimikyu/overworld_shiny.pal b/graphics/pokemon/mimikyu/overworld_shiny.pal
new file mode 100644
index 000000000000..cfa4e45a8e86
--- /dev/null
+++ b/graphics/pokemon/mimikyu/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+216 216 192
+168 160 144
+152 136 98
+112 128 128
+101 90 65
+91 87 84
+96 88 72
+64 64 64
+48 48 48
+54 44 34
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/minccino/overworld.png b/graphics/pokemon/minccino/overworld.png
new file mode 100644
index 000000000000..0e57f7f94b45
Binary files /dev/null and b/graphics/pokemon/minccino/overworld.png differ
diff --git a/graphics/pokemon/minccino/overworld_normal.pal b/graphics/pokemon/minccino/overworld_normal.pal
new file mode 100644
index 000000000000..dddd79dfb960
--- /dev/null
+++ b/graphics/pokemon/minccino/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+73 73 77
+238 238 247
+200 200 212
+194 184 173
+194 184 173
+0 0 0
+137 117 107
+173 76 75
+47 46 47
+194 184 173
+149 140 143
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/minccino/overworld_shiny.pal b/graphics/pokemon/minccino/overworld_shiny.pal
new file mode 100644
index 000000000000..1b86f0f762c8
--- /dev/null
+++ b/graphics/pokemon/minccino/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 210 164
+80 48 56
+238 238 247
+240 192 184
+168 112 128
+216 160 168
+0 0 0
+137 117 107
+216 232 128
+47 46 47
+194 184 173
+149 140 143
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/minior/overworld.png b/graphics/pokemon/minior/overworld.png
new file mode 100644
index 000000000000..b614804654d6
Binary files /dev/null and b/graphics/pokemon/minior/overworld.png differ
diff --git a/graphics/pokemon/minior/overworld_normal.pal b/graphics/pokemon/minior/overworld_normal.pal
new file mode 100644
index 000000000000..1ea08a76b96d
--- /dev/null
+++ b/graphics/pokemon/minior/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+245 245 245
+213 213 213
+237 165 165
+208 121 121
+161 87 87
+134 87 87
+117 75 75
+87 63 61
+72 72 72
+96 58 59
+70 42 43
+51 39 39
+31 31 31
+10 10 10
+0 0 0
diff --git a/graphics/pokemon/minior/overworld_shiny.pal b/graphics/pokemon/minior/overworld_shiny.pal
new file mode 100644
index 000000000000..1ea08a76b96d
--- /dev/null
+++ b/graphics/pokemon/minior/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+245 245 245
+213 213 213
+237 165 165
+208 121 121
+161 87 87
+134 87 87
+117 75 75
+87 63 61
+72 72 72
+96 58 59
+70 42 43
+51 39 39
+31 31 31
+10 10 10
+0 0 0
diff --git a/graphics/pokemon/minun/overworld.png b/graphics/pokemon/minun/overworld.png
new file mode 100644
index 000000000000..77fe911ef578
Binary files /dev/null and b/graphics/pokemon/minun/overworld.png differ
diff --git a/graphics/pokemon/minun/overworld_normal.pal b/graphics/pokemon/minun/overworld_normal.pal
new file mode 100644
index 000000000000..5f8fc3edacd9
--- /dev/null
+++ b/graphics/pokemon/minun/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+48 80 120
+112 176 208
+80 128 160
+112 88 48
+248 224 136
+200 168 96
+168 136 104
+232 232 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/minun/overworld_shiny.pal b/graphics/pokemon/minun/overworld_shiny.pal
new file mode 100644
index 000000000000..041fd83659f7
--- /dev/null
+++ b/graphics/pokemon/minun/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 160 176
+0 0 0
+24 104 64
+112 200 160
+64 152 112
+112 88 48
+248 216 104
+192 168 64
+160 136 72
+232 232 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/misdreavus/overworld.png b/graphics/pokemon/misdreavus/overworld.png
new file mode 100644
index 000000000000..fbb6a2341b1a
Binary files /dev/null and b/graphics/pokemon/misdreavus/overworld.png differ
diff --git a/graphics/pokemon/misdreavus/overworld_normal.pal b/graphics/pokemon/misdreavus/overworld_normal.pal
new file mode 100644
index 000000000000..de9938bb7f83
--- /dev/null
+++ b/graphics/pokemon/misdreavus/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 8 48
+192 64 128
+0 0 0
+32 48 88
+64 104 136
+32 80 96
+80 112 152
+104 128 160
+216 96 160
+224 176 40
+96 0 32
+176 120 0
+200 72 104
+232 232 248
+0 0 0
diff --git a/graphics/pokemon/misdreavus/overworld_shiny.pal b/graphics/pokemon/misdreavus/overworld_shiny.pal
new file mode 100644
index 000000000000..1b9716b3ab38
--- /dev/null
+++ b/graphics/pokemon/misdreavus/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 72 0
+192 128 0
+0 0 0
+32 48 8
+104 136 32
+64 88 24
+144 168 64
+168 184 104
+232 160 0
+224 176 40
+96 0 32
+176 120 0
+200 72 104
+232 232 248
+0 0 0
diff --git a/graphics/pokemon/mismagius/overworld.png b/graphics/pokemon/mismagius/overworld.png
new file mode 100644
index 000000000000..2660abd9336f
Binary files /dev/null and b/graphics/pokemon/mismagius/overworld.png differ
diff --git a/graphics/pokemon/mismagius/overworld_normal.pal b/graphics/pokemon/mismagius/overworld_normal.pal
new file mode 100644
index 000000000000..dd818c3e8e18
--- /dev/null
+++ b/graphics/pokemon/mismagius/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 32 56
+192 64 128
+104 32 80
+152 40 88
+0 0 0
+48 40 96
+96 80 144
+144 120 192
+224 176 40
+176 96 0
+72 32 48
+176 16 40
+216 80 112
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/mismagius/overworld_shiny.pal b/graphics/pokemon/mismagius/overworld_shiny.pal
new file mode 100644
index 000000000000..09edd6930eb1
--- /dev/null
+++ b/graphics/pokemon/mismagius/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 56 48
+192 152 72
+80 64 0
+136 112 40
+0 0 0
+64 72 0
+144 152 40
+192 192 72
+224 176 40
+176 96 0
+72 32 48
+176 16 40
+216 80 112
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/moltres/galarian/overworld.png b/graphics/pokemon/moltres/galarian/overworld.png
new file mode 100644
index 000000000000..b6aeb63f9643
Binary files /dev/null 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
new file mode 100644
index 000000000000..ca9a549d1065
--- /dev/null
+++ b/graphics/pokemon/moltres/galarian/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+185 195 106
+0 0 0
+0 0 0
+61 0 25
+24 24 24
+56 56 56
+173 28 86
+235 88 147
+249 181 225
+120 200 248
+160 224 248
+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
new file mode 100644
index 000000000000..8330f2687abb
--- /dev/null
+++ b/graphics/pokemon/moltres/galarian/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+185 195 106
+0 0 0
+0 0 0
+61 0 25
+229 185 8
+248 208 48
+240 80 32
+240 128 48
+248 232 104
+120 200 248
+160 224 248
+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
new file mode 100644
index 000000000000..df9a412f110e
Binary files /dev/null and b/graphics/pokemon/moltres/overworld.png differ
diff --git a/graphics/pokemon/moltres/overworld_normal.pal b/graphics/pokemon/moltres/overworld_normal.pal
new file mode 100644
index 000000000000..c289d6fa5b98
--- /dev/null
+++ b/graphics/pokemon/moltres/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+160 24 40
+64 48 48
+232 72 48
+200 128 56
+248 136 32
+232 176 80
+0 0 0
+248 200 120
+248 184 32
+112 72 56
+176 176 208
+248 136 120
+232 232 248
+64 64 64
+184 112 96
diff --git a/graphics/pokemon/moltres/overworld_shiny.pal b/graphics/pokemon/moltres/overworld_shiny.pal
new file mode 100644
index 000000000000..657e060567a0
--- /dev/null
+++ b/graphics/pokemon/moltres/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+160 24 40
+64 48 48
+232 72 48
+200 128 176
+248 136 32
+232 176 192
+0 0 0
+248 216 216
+248 184 32
+112 72 56
+176 176 208
+248 136 120
+232 232 248
+64 64 64
+184 112 184
diff --git a/graphics/pokemon/monferno/overworld.png b/graphics/pokemon/monferno/overworld.png
new file mode 100644
index 000000000000..2fa70c299bc8
Binary files /dev/null and b/graphics/pokemon/monferno/overworld.png differ
diff --git a/graphics/pokemon/monferno/overworld_normal.pal b/graphics/pokemon/monferno/overworld_normal.pal
new file mode 100644
index 000000000000..181360f006ee
--- /dev/null
+++ b/graphics/pokemon/monferno/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 56 40
+240 128 16
+0 0 0
+184 96 32
+128 88 56
+56 144 208
+248 232 168
+216 184 112
+144 24 24
+184 120 64
+240 56 40
+208 80 64
+232 232 248
+248 192 0
+152 152 152
diff --git a/graphics/pokemon/monferno/overworld_shiny.pal b/graphics/pokemon/monferno/overworld_shiny.pal
new file mode 100644
index 000000000000..db2ab2e29e7a
--- /dev/null
+++ b/graphics/pokemon/monferno/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 56 40
+240 96 112
+0 0 0
+184 72 96
+120 56 80
+192 152 240
+248 248 184
+216 200 136
+144 24 24
+192 144 64
+240 56 40
+208 80 64
+232 232 248
+248 192 0
+152 152 152
diff --git a/graphics/pokemon/morelull/overworld.png b/graphics/pokemon/morelull/overworld.png
new file mode 100644
index 000000000000..5f85740da2f6
Binary files /dev/null and b/graphics/pokemon/morelull/overworld.png differ
diff --git a/graphics/pokemon/morelull/overworld_normal.pal b/graphics/pokemon/morelull/overworld_normal.pal
new file mode 100644
index 000000000000..6efa8c740b27
--- /dev/null
+++ b/graphics/pokemon/morelull/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+230 227 233
+245 210 217
+220 210 232
+242 196 206
+184 131 178
+191 196 122
+158 158 158
+171 152 193
+196 196 255
+146 150 89
+224 124 140
+120 120 120
+32 32 32
+0 0 0
+200 184 168
diff --git a/graphics/pokemon/morelull/overworld_shiny.pal b/graphics/pokemon/morelull/overworld_shiny.pal
new file mode 100644
index 000000000000..7f3068c45510
--- /dev/null
+++ b/graphics/pokemon/morelull/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+230 227 233
+186 57 24
+220 210 232
+209 134 54
+240 192 72
+191 196 122
+158 158 158
+112 40 24
+176 112 64
+146 150 89
+112 56 24
+120 120 120
+32 32 32
+0 0 0
+200 184 168
diff --git a/graphics/pokemon/morgrem/overworld.png b/graphics/pokemon/morgrem/overworld.png
new file mode 100644
index 000000000000..00e5eab9e347
Binary files /dev/null and b/graphics/pokemon/morgrem/overworld.png differ
diff --git a/graphics/pokemon/morgrem/overworld_normal.pal b/graphics/pokemon/morgrem/overworld_normal.pal
new file mode 100644
index 000000000000..6793ccae7f9f
--- /dev/null
+++ b/graphics/pokemon/morgrem/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+252 0 24
+8 8 16
+72 12 32
+60 60 96
+232 64 120
+0 0 0
+28 28 48
+200 36 92
+236 52 68
+252 252 252
+220 220 220
+0 204 128
+0 148 92
+0 40 24
+252 68 88
+0 0 0
diff --git a/graphics/pokemon/morgrem/overworld_shiny.pal b/graphics/pokemon/morgrem/overworld_shiny.pal
new file mode 100644
index 000000000000..d91500fb4deb
--- /dev/null
+++ b/graphics/pokemon/morgrem/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+252 0 24
+24 24 24
+0 16 16
+213 213 213
+0 148 189
+0 0 0
+148 148 148
+0 115 148
+238 49 65
+255 255 255
+222 222 222
+156 90 148
+115 57 98
+41 24 41
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/morpeko/overworld.png b/graphics/pokemon/morpeko/overworld.png
new file mode 100644
index 000000000000..84bf28d13c35
Binary files /dev/null and b/graphics/pokemon/morpeko/overworld.png differ
diff --git a/graphics/pokemon/morpeko/overworld_normal.pal b/graphics/pokemon/morpeko/overworld_normal.pal
new file mode 100644
index 000000000000..daf321c74827
--- /dev/null
+++ b/graphics/pokemon/morpeko/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+252 0 24
+56 40 24
+40 40 40
+76 56 36
+72 68 28
+120 92 56
+72 72 72
+8 8 8
+144 120 56
+156 120 76
+244 200 44
+156 152 92
+248 216 104
+208 100 148
+248 228 148
+252 248 240
diff --git a/graphics/pokemon/morpeko/overworld_shiny.pal b/graphics/pokemon/morpeko/overworld_shiny.pal
new file mode 100644
index 000000000000..96f94b6ee9ce
--- /dev/null
+++ b/graphics/pokemon/morpeko/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+57 41 24
+41 41 41
+74 57 32
+74 65 24
+123 90 57
+74 74 74
+8 8 8
+148 123 57
+156 123 74
+222 213 189
+156 156 90
+255 238 205
+213 98 156
+255 255 255
+255 255 255
diff --git a/graphics/pokemon/mothim/overworld.png b/graphics/pokemon/mothim/overworld.png
new file mode 100644
index 000000000000..9bcf1b69500a
Binary files /dev/null and b/graphics/pokemon/mothim/overworld.png differ
diff --git a/graphics/pokemon/mothim/overworld_normal.pal b/graphics/pokemon/mothim/overworld_normal.pal
new file mode 100644
index 000000000000..e76548ff3281
--- /dev/null
+++ b/graphics/pokemon/mothim/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+136 56 8
+48 48 48
+248 128 40
+144 96 16
+96 96 96
+192 144 40
+136 136 136
+160 88 32
+64 48 40
+0 0 0
+200 200 200
+224 176 64
+72 72 72
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/mothim/overworld_shiny.pal b/graphics/pokemon/mothim/overworld_shiny.pal
new file mode 100644
index 000000000000..300a9fcc5aae
--- /dev/null
+++ b/graphics/pokemon/mothim/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 72 104
+48 48 48
+72 168 200
+88 96 104
+96 96 96
+192 144 40
+136 136 136
+24 120 152
+64 48 40
+0 0 0
+200 200 200
+224 176 64
+72 72 72
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/mr_mime/galarian/overworld.png b/graphics/pokemon/mr_mime/galarian/overworld.png
new file mode 100644
index 000000000000..fd95946076a2
Binary files /dev/null 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
new file mode 100644
index 000000000000..9783b2507f18
--- /dev/null
+++ b/graphics/pokemon/mr_mime/galarian/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+197 44 44
+0 0 0
+15 20 29
+89 106 134
+59 49 48
+53 69 94
+135 118 118
+0 0 0
+246 226 225
+255 255 255
+57 57 57
+164 222 242
+190 190 190
+113 170 190
+104 104 104
+255 255 255
diff --git a/graphics/pokemon/mr_mime/galarian/overworld_shiny.pal b/graphics/pokemon/mr_mime/galarian/overworld_shiny.pal
new file mode 100644
index 000000000000..b2ee5a4fd19c
--- /dev/null
+++ b/graphics/pokemon/mr_mime/galarian/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 63 60
+0 0 0
+15 20 29
+112 96 136
+59 49 48
+96 72 104
+114 93 92
+0 0 0
+246 226 225
+255 255 255
+57 57 57
+144 176 208
+190 190 190
+112 136 184
+104 104 104
+255 255 255
diff --git a/graphics/pokemon/mr_mime/overworld.png b/graphics/pokemon/mr_mime/overworld.png
new file mode 100644
index 000000000000..b7b4f63e0412
Binary files /dev/null and b/graphics/pokemon/mr_mime/overworld.png differ
diff --git a/graphics/pokemon/mr_mime/overworld_normal.pal b/graphics/pokemon/mr_mime/overworld_normal.pal
new file mode 100644
index 000000000000..a57700229844
--- /dev/null
+++ b/graphics/pokemon/mr_mime/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 48 64
+72 48 56
+0 0 0
+48 96 112
+192 144 144
+240 192 200
+32 64 88
+200 200 232
+104 104 104
+232 232 248
+144 144 160
+168 104 120
+208 64 88
+144 64 80
+0 0 0
diff --git a/graphics/pokemon/mr_mime/overworld_shiny.pal b/graphics/pokemon/mr_mime/overworld_shiny.pal
new file mode 100644
index 000000000000..bb272636b3fa
--- /dev/null
+++ b/graphics/pokemon/mr_mime/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 48 64
+48 64 48
+0 0 0
+48 96 112
+192 144 144
+240 192 200
+32 64 88
+200 200 232
+104 104 104
+232 232 248
+144 144 160
+168 104 120
+128 176 80
+64 96 24
+0 0 0
diff --git a/graphics/pokemon/mr_rime/overworld.png b/graphics/pokemon/mr_rime/overworld.png
new file mode 100644
index 000000000000..efbd7209844d
Binary files /dev/null and b/graphics/pokemon/mr_rime/overworld.png differ
diff --git a/graphics/pokemon/mr_rime/overworld_normal.pal b/graphics/pokemon/mr_rime/overworld_normal.pal
new file mode 100644
index 000000000000..fe885aae93f2
--- /dev/null
+++ b/graphics/pokemon/mr_rime/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+252 0 24
+40 36 56
+16 32 64
+76 76 104
+4 4 4
+148 72 96
+252 212 124
+196 112 144
+112 168 188
+72 136 236
+172 152 152
+188 188 188
+252 228 172
+164 220 240
+192 192 192
+252 244 244
diff --git a/graphics/pokemon/mr_rime/overworld_shiny.pal b/graphics/pokemon/mr_rime/overworld_shiny.pal
new file mode 100644
index 000000000000..16fa3dd31dbd
--- /dev/null
+++ b/graphics/pokemon/mr_rime/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+41 32 49
+32 24 41
+90 74 98
+0 0 0
+148 106 106
+255 213 123
+197 164 164
+123 131 156
+139 123 164
+172 156 156
+189 189 189
+255 230 172
+222 222 238
+197 197 197
+255 246 246
diff --git a/graphics/pokemon/mudbray/overworld.png b/graphics/pokemon/mudbray/overworld.png
new file mode 100644
index 000000000000..e6ba966949c4
Binary files /dev/null and b/graphics/pokemon/mudbray/overworld.png differ
diff --git a/graphics/pokemon/mudbray/overworld_normal.pal b/graphics/pokemon/mudbray/overworld_normal.pal
new file mode 100644
index 000000000000..b5a81889e807
--- /dev/null
+++ b/graphics/pokemon/mudbray/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+226 222 222
+237 202 187
+237 162 140
+210 146 124
+180 127 106
+125 81 63
+107 67 55
+77 77 79
+52 52 52
+16 16 16
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/mudbray/overworld_shiny.pal b/graphics/pokemon/mudbray/overworld_shiny.pal
new file mode 100644
index 000000000000..27d596c7af4b
--- /dev/null
+++ b/graphics/pokemon/mudbray/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+226 222 222
+237 202 187
+237 162 140
+210 146 124
+224 152 32
+144 56 16
+107 67 55
+24 72 128
+8 40 80
+16 16 16
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/mudkip/overworld.png b/graphics/pokemon/mudkip/overworld.png
new file mode 100644
index 000000000000..cd56f362089e
Binary files /dev/null and b/graphics/pokemon/mudkip/overworld.png differ
diff --git a/graphics/pokemon/mudkip/overworld_normal.pal b/graphics/pokemon/mudkip/overworld_normal.pal
new file mode 100644
index 000000000000..553601ec5b21
--- /dev/null
+++ b/graphics/pokemon/mudkip/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 72 120
+0 0 0
+88 176 216
+72 136 176
+64 64 80
+72 56 16
+240 128 16
+232 232 248
+160 72 16
+112 104 144
+176 176 208
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/mudkip/overworld_shiny.pal b/graphics/pokemon/mudkip/overworld_shiny.pal
new file mode 100644
index 000000000000..351f36231c76
--- /dev/null
+++ b/graphics/pokemon/mudkip/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 88 144
+0 0 0
+184 168 240
+136 128 192
+64 64 80
+72 56 16
+240 128 16
+232 232 248
+160 72 16
+224 152 0
+248 248 144
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/mudsdale/overworld.png b/graphics/pokemon/mudsdale/overworld.png
new file mode 100644
index 000000000000..6b531cb0381f
Binary files /dev/null and b/graphics/pokemon/mudsdale/overworld.png differ
diff --git a/graphics/pokemon/mudsdale/overworld_normal.pal b/graphics/pokemon/mudsdale/overworld_normal.pal
new file mode 100644
index 000000000000..6d810916d7ce
--- /dev/null
+++ b/graphics/pokemon/mudsdale/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+166 177 182
+159 119 101
+225 111 90
+79 88 99
+181 87 69
+128 85 72
+64 65 82
+68 49 43
+48 49 59
+16 16 16
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/mudsdale/overworld_shiny.pal b/graphics/pokemon/mudsdale/overworld_shiny.pal
new file mode 100644
index 000000000000..46725de67500
--- /dev/null
+++ b/graphics/pokemon/mudsdale/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+166 177 182
+248 168 32
+225 111 90
+24 72 128
+181 87 69
+184 112 16
+32 96 160
+68 49 43
+8 40 80
+16 16 16
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/muk/alolan/overworld.png b/graphics/pokemon/muk/alolan/overworld.png
new file mode 100644
index 000000000000..c5437e5ebdfc
Binary files /dev/null and b/graphics/pokemon/muk/alolan/overworld.png differ
diff --git a/graphics/pokemon/muk/alolan/overworld_normal.pal b/graphics/pokemon/muk/alolan/overworld_normal.pal
new file mode 100644
index 000000000000..9ebda0dcdd3b
--- /dev/null
+++ b/graphics/pokemon/muk/alolan/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+48 74 45
+116 180 117
+102 142 91
+42 88 146
+0 0 0
+30 170 210
+26 148 183
+232 202 0
+113 194 255
+232 232 248
+217 88 210
+160 74 125
+255 255 0
+85 40 67
+74 114 69
diff --git a/graphics/pokemon/muk/alolan/overworld_shiny.pal b/graphics/pokemon/muk/alolan/overworld_shiny.pal
new file mode 100644
index 000000000000..c1e3f398843e
--- /dev/null
+++ b/graphics/pokemon/muk/alolan/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+64 56 64
+176 144 184
+120 96 152
+42 88 146
+0 0 0
+30 170 210
+26 148 183
+232 202 0
+113 194 255
+232 232 248
+217 88 210
+160 74 125
+255 255 0
+85 40 67
+104 80 120
diff --git a/graphics/pokemon/muk/overworld.png b/graphics/pokemon/muk/overworld.png
new file mode 100644
index 000000000000..892e670a68e4
Binary files /dev/null and b/graphics/pokemon/muk/overworld.png differ
diff --git a/graphics/pokemon/muk/overworld_normal.pal b/graphics/pokemon/muk/overworld_normal.pal
new file mode 100644
index 000000000000..758e33481564
--- /dev/null
+++ b/graphics/pokemon/muk/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 56 64
+176 144 184
+120 96 152
+0 0 0
+128 104 136
+104 80 120
+200 176 216
+232 232 248
+96 72 104
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/muk/overworld_shiny.pal b/graphics/pokemon/muk/overworld_shiny.pal
new file mode 100644
index 000000000000..9c379a865a3b
--- /dev/null
+++ b/graphics/pokemon/muk/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 80 64
+168 184 136
+128 160 56
+0 0 0
+128 136 112
+96 112 32
+184 200 160
+232 232 248
+96 104 104
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/munchlax/overworld.png b/graphics/pokemon/munchlax/overworld.png
new file mode 100644
index 000000000000..10ef0356fd73
Binary files /dev/null and b/graphics/pokemon/munchlax/overworld.png differ
diff --git a/graphics/pokemon/munchlax/overworld_normal.pal b/graphics/pokemon/munchlax/overworld_normal.pal
new file mode 100644
index 000000000000..e8cd7bd56bf1
--- /dev/null
+++ b/graphics/pokemon/munchlax/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 48 48
+64 104 120
+0 0 0
+64 80 80
+80 128 144
+144 152 144
+232 232 248
+40 72 72
+248 200 120
+152 128 72
+192 168 104
+192 192 200
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/munchlax/overworld_shiny.pal b/graphics/pokemon/munchlax/overworld_shiny.pal
new file mode 100644
index 000000000000..9f3925a28e94
--- /dev/null
+++ b/graphics/pokemon/munchlax/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 48 48
+64 104 152
+0 0 0
+56 72 104
+80 128 232
+144 152 144
+232 232 248
+40 72 96
+248 200 120
+152 128 72
+192 168 104
+192 192 200
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/munna/overworld.png b/graphics/pokemon/munna/overworld.png
new file mode 100644
index 000000000000..9dc20321457f
Binary files /dev/null and b/graphics/pokemon/munna/overworld.png differ
diff --git a/graphics/pokemon/munna/overworld_normal.pal b/graphics/pokemon/munna/overworld_normal.pal
new file mode 100644
index 000000000000..0e68501d393a
--- /dev/null
+++ b/graphics/pokemon/munna/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 224 224
+145 83 106
+232 182 200
+195 150 174
+195 150 174
+140 137 175
+240 214 237
+24 40 16
+238 238 247
+208 24 80
+225 112 161
+208 24 80
+145 83 106
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/munna/overworld_shiny.pal b/graphics/pokemon/munna/overworld_shiny.pal
new file mode 100644
index 000000000000..04fb73d163e2
--- /dev/null
+++ b/graphics/pokemon/munna/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 224 224
+128 112 64
+232 224 128
+195 150 174
+192 176 104
+128 200 120
+248 248 248
+24 40 16
+238 238 247
+208 24 80
+240 136 208
+144 40 112
+145 83 106
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/murkrow/overworld.png b/graphics/pokemon/murkrow/overworld.png
new file mode 100644
index 000000000000..c70c19ba2cbf
Binary files /dev/null and b/graphics/pokemon/murkrow/overworld.png differ
diff --git a/graphics/pokemon/murkrow/overworld_normal.pal b/graphics/pokemon/murkrow/overworld_normal.pal
new file mode 100644
index 000000000000..6a4790eae2d7
--- /dev/null
+++ b/graphics/pokemon/murkrow/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+16 32 72
+72 88 136
+48 64 112
+32 48 96
+120 152 192
+112 88 8
+176 192 216
+200 56 48
+144 32 24
+184 136 24
+224 176 40
+232 232 248
+48 48 48
+0 0 0
diff --git a/graphics/pokemon/murkrow/overworld_shiny.pal b/graphics/pokemon/murkrow/overworld_shiny.pal
new file mode 100644
index 000000000000..54e704e6ba07
--- /dev/null
+++ b/graphics/pokemon/murkrow/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+80 48 96
+168 112 184
+136 88 152
+112 64 128
+120 152 192
+112 88 8
+176 192 216
+200 56 48
+144 32 24
+184 136 24
+224 176 40
+232 232 248
+48 48 48
+0 0 0
diff --git a/graphics/pokemon/musharna/overworld.png b/graphics/pokemon/musharna/overworld.png
new file mode 100644
index 000000000000..aef3207b7e1a
Binary files /dev/null and b/graphics/pokemon/musharna/overworld.png differ
diff --git a/graphics/pokemon/musharna/overworld_normal.pal b/graphics/pokemon/musharna/overworld_normal.pal
new file mode 100644
index 000000000000..f1b11dd773e3
--- /dev/null
+++ b/graphics/pokemon/musharna/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+109 75 80
+145 83 106
+225 112 161
+175 112 140
+97 66 145
+42 47 74
+140 137 175
+134 96 184
+252 188 219
+247 207 182
+207 150 111
+0 0 0
+160 175 128
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/musharna/overworld_shiny.pal b/graphics/pokemon/musharna/overworld_shiny.pal
new file mode 100644
index 000000000000..6b5ab82193c0
--- /dev/null
+++ b/graphics/pokemon/musharna/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+109 75 80
+112 56 128
+152 112 200
+175 112 140
+48 72 96
+42 47 74
+80 152 192
+64 120 192
+152 208 160
+248 176 192
+208 128 152
+0 0 0
+152 208 160
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/naclstack/back.png b/graphics/pokemon/naclstack/back.png
index 34d80185e7c5..6d0238f3f426 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 4055c46cf312..646b29881c1c 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 2fd0dd7abd2b..19fea0383fa0 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/shiny.pal b/graphics/pokemon/naclstack/shiny.pal
index a8f14a01b0ea..94d60d473108 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/naganadel/overworld.png b/graphics/pokemon/naganadel/overworld.png
new file mode 100644
index 000000000000..051a25cf6bdb
Binary files /dev/null and b/graphics/pokemon/naganadel/overworld.png differ
diff --git a/graphics/pokemon/naganadel/overworld_normal.pal b/graphics/pokemon/naganadel/overworld_normal.pal
new file mode 100644
index 000000000000..cda63bdfd79e
--- /dev/null
+++ b/graphics/pokemon/naganadel/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+221 215 223
+134 219 226
+148 142 150
+131 110 177
+222 74 155
+97 80 148
+156 52 141
+87 44 164
+56 48 75
+124 41 196
+96 38 83
+65 19 104
+51 26 104
+35 17 67
+0 0 0
diff --git a/graphics/pokemon/naganadel/overworld_shiny.pal b/graphics/pokemon/naganadel/overworld_shiny.pal
new file mode 100644
index 000000000000..752a25bd1b26
--- /dev/null
+++ b/graphics/pokemon/naganadel/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+221 215 223
+134 219 226
+148 142 150
+248 208 24
+136 152 144
+152 80 16
+56 80 80
+80 96 88
+56 48 75
+136 152 144
+96 96 104
+48 64 64
+48 64 64
+35 17 67
+0 0 0
diff --git a/graphics/pokemon/natu/overworld.png b/graphics/pokemon/natu/overworld.png
new file mode 100644
index 000000000000..8941c2402ac0
Binary files /dev/null and b/graphics/pokemon/natu/overworld.png differ
diff --git a/graphics/pokemon/natu/overworld_normal.pal b/graphics/pokemon/natu/overworld_normal.pal
new file mode 100644
index 000000000000..a2e624a97ced
--- /dev/null
+++ b/graphics/pokemon/natu/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+120 16 32
+0 0 0
+216 72 88
+56 80 32
+104 160 72
+176 40 56
+128 192 112
+96 80 0
+48 48 48
+184 152 48
+232 232 248
+112 128 152
+240 208 96
+184 200 224
+64 80 104
diff --git a/graphics/pokemon/natu/overworld_shiny.pal b/graphics/pokemon/natu/overworld_shiny.pal
new file mode 100644
index 000000000000..a8638a811f9c
--- /dev/null
+++ b/graphics/pokemon/natu/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+120 64 16
+0 0 0
+216 120 88
+56 80 32
+136 160 48
+176 88 56
+160 200 112
+96 80 0
+48 48 48
+184 152 48
+232 232 248
+112 128 152
+240 208 96
+184 200 224
+64 80 104
diff --git a/graphics/pokemon/necrozma/dawn_wings/overworld.png b/graphics/pokemon/necrozma/dawn_wings/overworld.png
new file mode 100644
index 000000000000..3bae5a72f9ae
Binary files /dev/null and b/graphics/pokemon/necrozma/dawn_wings/overworld.png differ
diff --git a/graphics/pokemon/necrozma/dawn_wings/overworld_normal.pal b/graphics/pokemon/necrozma/dawn_wings/overworld_normal.pal
new file mode 100644
index 000000000000..098095747ee1
--- /dev/null
+++ b/graphics/pokemon/necrozma/dawn_wings/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+1 1 1
+32 32 32
+130 197 247
+48 95 182
+66 74 80
+118 129 136
+48 48 48
+88 88 96
+189 240 244
+186 209 214
+97 151 233
+91 51 185
+254 254 254
+182 24 67
+254 170 211
diff --git a/graphics/pokemon/necrozma/dawn_wings/overworld_shiny.pal b/graphics/pokemon/necrozma/dawn_wings/overworld_shiny.pal
new file mode 100644
index 000000000000..bfae4fe6f160
--- /dev/null
+++ b/graphics/pokemon/necrozma/dawn_wings/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+1 1 1
+32 32 32
+237 118 151
+167 50 73
+66 74 80
+65 72 190
+48 48 48
+38 42 111
+233 182 196
+186 209 214
+224 73 115
+91 51 185
+254 254 254
+182 24 67
+254 170 211
diff --git a/graphics/pokemon/necrozma/dusk_mane/overworld.png b/graphics/pokemon/necrozma/dusk_mane/overworld.png
new file mode 100644
index 000000000000..043918a9e5b2
Binary files /dev/null and b/graphics/pokemon/necrozma/dusk_mane/overworld.png differ
diff --git a/graphics/pokemon/necrozma/dusk_mane/overworld_normal.pal b/graphics/pokemon/necrozma/dusk_mane/overworld_normal.pal
new file mode 100644
index 000000000000..4dc13c3500ea
--- /dev/null
+++ b/graphics/pokemon/necrozma/dusk_mane/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 211 165
+27 32 33
+43 50 51
+16 16 16
+43 50 51
+66 74 80
+243 207 85
+118 129 136
+137 112 75
+253 248 225
+174 98 0
+219 204 143
+24 240 19
+253 43 43
+43 50 51
+83 242 242
diff --git a/graphics/pokemon/necrozma/dusk_mane/overworld_shiny.pal b/graphics/pokemon/necrozma/dusk_mane/overworld_shiny.pal
new file mode 100644
index 000000000000..be497e13a507
--- /dev/null
+++ b/graphics/pokemon/necrozma/dusk_mane/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 211 165
+10 11 36
+25 28 76
+16 16 16
+25 28 76
+38 42 111
+237 118 151
+65 72 190
+184 100 114
+250 218 223
+167 50 73
+233 182 196
+24 240 19
+253 43 43
+25 28 76
+83 242 242
diff --git a/graphics/pokemon/necrozma/overworld.png b/graphics/pokemon/necrozma/overworld.png
new file mode 100644
index 000000000000..fe65b173a448
Binary files /dev/null and b/graphics/pokemon/necrozma/overworld.png differ
diff --git a/graphics/pokemon/necrozma/overworld_normal.pal b/graphics/pokemon/necrozma/overworld_normal.pal
new file mode 100644
index 000000000000..90bf8b29e132
--- /dev/null
+++ b/graphics/pokemon/necrozma/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+247 247 247
+249 225 95
+210 210 210
+155 235 183
+186 186 186
+237 134 241
+155 169 235
+122 122 122
+245 108 108
+78 78 78
+60 59 59
+38 38 38
+28 28 28
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/necrozma/overworld_shiny.pal b/graphics/pokemon/necrozma/overworld_shiny.pal
new file mode 100644
index 000000000000..65c5d3f05e79
--- /dev/null
+++ b/graphics/pokemon/necrozma/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+247 247 247
+249 225 95
+210 210 210
+155 235 183
+32 40 104
+237 134 241
+155 169 235
+24 24 72
+245 108 108
+32 40 104
+24 24 72
+64 72 184
+28 28 28
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/nickit/overworld.png b/graphics/pokemon/nickit/overworld.png
new file mode 100644
index 000000000000..2b868637e5b4
Binary files /dev/null and b/graphics/pokemon/nickit/overworld.png differ
diff --git a/graphics/pokemon/nickit/overworld_normal.pal b/graphics/pokemon/nickit/overworld_normal.pal
new file mode 100644
index 000000000000..faa146c087fb
--- /dev/null
+++ b/graphics/pokemon/nickit/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 25
+8 8 7
+0 0 0
+52 51 48
+21 20 18
+121 53 31
+185 90 59
+36 14 7
+255 255 255
+210 184 61
+92 92 92
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/nickit/overworld_shiny.pal b/graphics/pokemon/nickit/overworld_shiny.pal
new file mode 100644
index 000000000000..50a8845599f9
--- /dev/null
+++ b/graphics/pokemon/nickit/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 24
+0 0 0
+8 41 115
+0 16 74
+115 106 98
+164 148 139
+24 24 24
+255 255 255
+213 189 57
+90 90 90
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/nidoking/overworld.png b/graphics/pokemon/nidoking/overworld.png
new file mode 100644
index 000000000000..9755872d5012
Binary files /dev/null and b/graphics/pokemon/nidoking/overworld.png differ
diff --git a/graphics/pokemon/nidoking/overworld_normal.pal b/graphics/pokemon/nidoking/overworld_normal.pal
new file mode 100644
index 000000000000..7ece70c16abc
--- /dev/null
+++ b/graphics/pokemon/nidoking/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+64 48 80
+216 152 240
+152 104 160
+48 112 104
+24 168 152
+184 128 184
+160 160 160
+232 232 248
+88 24 24
+168 168 152
+240 232 224
+200 200 200
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/nidoking/overworld_shiny.pal b/graphics/pokemon/nidoking/overworld_shiny.pal
new file mode 100644
index 000000000000..05bc10e756f5
--- /dev/null
+++ b/graphics/pokemon/nidoking/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+40 64 88
+104 200 248
+48 160 200
+104 48 8
+168 88 56
+96 176 240
+160 160 160
+232 232 248
+88 24 24
+168 152 152
+240 232 224
+200 200 200
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/nidoqueen/overworld.png b/graphics/pokemon/nidoqueen/overworld.png
new file mode 100644
index 000000000000..e6792eb29522
Binary files /dev/null and b/graphics/pokemon/nidoqueen/overworld.png differ
diff --git a/graphics/pokemon/nidoqueen/overworld_normal.pal b/graphics/pokemon/nidoqueen/overworld_normal.pal
new file mode 100644
index 000000000000..126361ae602a
--- /dev/null
+++ b/graphics/pokemon/nidoqueen/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+72 64 120
+168 200 240
+96 136 176
+168 96 48
+128 176 216
+88 64 48
+200 200 200
+232 232 248
+192 160 80
+96 40 24
+240 192 120
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/nidoqueen/overworld_shiny.pal b/graphics/pokemon/nidoqueen/overworld_shiny.pal
new file mode 100644
index 000000000000..09a3d2ba8d24
--- /dev/null
+++ b/graphics/pokemon/nidoqueen/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+32 80 40
+192 208 96
+96 152 40
+168 96 48
+144 184 64
+88 64 48
+200 200 200
+232 232 248
+224 136 152
+96 40 24
+240 176 184
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/nidoran_f/overworld.png b/graphics/pokemon/nidoran_f/overworld.png
new file mode 100644
index 000000000000..a9657b4c5754
Binary files /dev/null and b/graphics/pokemon/nidoran_f/overworld.png differ
diff --git a/graphics/pokemon/nidoran_f/overworld_normal.pal b/graphics/pokemon/nidoran_f/overworld_normal.pal
new file mode 100644
index 000000000000..a16477056b97
--- /dev/null
+++ b/graphics/pokemon/nidoran_f/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 88 72
+152 240 224
+88 168 136
+64 80 136
+0 0 0
+16 152 240
+232 232 248
+240 120 112
+160 32 16
+216 104 136
+160 80 104
+160 160 160
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/nidoran_f/overworld_shiny.pal b/graphics/pokemon/nidoran_f/overworld_shiny.pal
new file mode 100644
index 000000000000..56a71febd0c0
--- /dev/null
+++ b/graphics/pokemon/nidoran_f/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 64 112
+184 176 248
+128 128 192
+40 96 88
+0 0 0
+88 136 64
+232 232 248
+240 120 112
+160 32 16
+216 104 136
+160 80 104
+160 160 160
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/nidoran_m/overworld.png b/graphics/pokemon/nidoran_m/overworld.png
new file mode 100644
index 000000000000..f03fdfe7ded9
Binary files /dev/null and b/graphics/pokemon/nidoran_m/overworld.png differ
diff --git a/graphics/pokemon/nidoran_m/overworld_normal.pal b/graphics/pokemon/nidoran_m/overworld_normal.pal
new file mode 100644
index 000000000000..9b5d39aa5a87
--- /dev/null
+++ b/graphics/pokemon/nidoran_m/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 48 80
+216 152 240
+136 96 152
+0 0 0
+48 112 104
+24 168 152
+232 232 248
+184 24 8
+176 112 208
+192 64 104
+160 160 160
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/nidoran_m/overworld_shiny.pal b/graphics/pokemon/nidoran_m/overworld_shiny.pal
new file mode 100644
index 000000000000..7f0f15d9ee4f
--- /dev/null
+++ b/graphics/pokemon/nidoran_m/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 64 88
+160 200 240
+80 136 168
+0 0 0
+72 48 8
+136 104 0
+232 232 248
+160 32 16
+120 168 200
+192 64 104
+160 160 160
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/nidorina/overworld.png b/graphics/pokemon/nidorina/overworld.png
new file mode 100644
index 000000000000..9fc5626cafe3
Binary files /dev/null and b/graphics/pokemon/nidorina/overworld.png differ
diff --git a/graphics/pokemon/nidorina/overworld_normal.pal b/graphics/pokemon/nidorina/overworld_normal.pal
new file mode 100644
index 000000000000..96baf3c7e74d
--- /dev/null
+++ b/graphics/pokemon/nidorina/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 210 164
+48 88 104
+0 0 0
+152 224 248
+112 192 224
+80 160 176
+48 96 136
+40 136 208
+232 232 248
+160 40 32
+240 160 152
+168 168 192
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/nidorina/overworld_shiny.pal b/graphics/pokemon/nidorina/overworld_shiny.pal
new file mode 100644
index 000000000000..6a5df389b326
--- /dev/null
+++ b/graphics/pokemon/nidorina/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 210 164
+64 64 112
+0 0 0
+216 192 248
+184 168 232
+152 128 192
+40 96 88
+88 136 64
+232 232 248
+160 32 16
+240 120 112
+168 168 192
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/nidorino/overworld.png b/graphics/pokemon/nidorino/overworld.png
new file mode 100644
index 000000000000..a79e2a3aaf99
Binary files /dev/null and b/graphics/pokemon/nidorino/overworld.png differ
diff --git a/graphics/pokemon/nidorino/overworld_normal.pal b/graphics/pokemon/nidorino/overworld_normal.pal
new file mode 100644
index 000000000000..18f4ee815f01
--- /dev/null
+++ b/graphics/pokemon/nidorino/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 56 80
+0 0 0
+176 120 200
+216 152 240
+136 96 152
+48 112 104
+24 168 152
+176 176 192
+232 232 248
+184 24 8
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/nidorino/overworld_shiny.pal b/graphics/pokemon/nidorino/overworld_shiny.pal
new file mode 100644
index 000000000000..d7555a29908c
--- /dev/null
+++ b/graphics/pokemon/nidorino/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 64 88
+0 0 0
+120 160 208
+160 200 240
+80 120 168
+104 48 8
+168 88 56
+160 160 160
+232 232 248
+184 24 8
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/nihilego/overworld.png b/graphics/pokemon/nihilego/overworld.png
new file mode 100644
index 000000000000..b5b8597d2c3b
Binary files /dev/null and b/graphics/pokemon/nihilego/overworld.png differ
diff --git a/graphics/pokemon/nihilego/overworld_normal.pal b/graphics/pokemon/nihilego/overworld_normal.pal
new file mode 100644
index 000000000000..2a5f126e79bb
--- /dev/null
+++ b/graphics/pokemon/nihilego/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+238 255 255
+222 246 255
+180 222 255
+131 213 255
+199 199 233
+172 172 222
+139 189 230
+148 148 189
+115 148 197
+124 124 175
+115 123 197
+70 114 137
+49 65 89
+56 61 68
+15 15 15
diff --git a/graphics/pokemon/nihilego/overworld_shiny.pal b/graphics/pokemon/nihilego/overworld_shiny.pal
new file mode 100644
index 000000000000..18f3e689bb6a
--- /dev/null
+++ b/graphics/pokemon/nihilego/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+224 208 176
+240 232 216
+208 192 152
+248 216 56
+224 208 176
+208 192 152
+139 189 230
+200 176 128
+115 148 197
+124 124 175
+115 123 197
+168 96 16
+49 65 89
+56 61 68
+15 15 15
diff --git a/graphics/pokemon/nincada/overworld.png b/graphics/pokemon/nincada/overworld.png
new file mode 100644
index 000000000000..f016e0dd1f4f
Binary files /dev/null and b/graphics/pokemon/nincada/overworld.png differ
diff --git a/graphics/pokemon/nincada/overworld_normal.pal b/graphics/pokemon/nincada/overworld_normal.pal
new file mode 100644
index 000000000000..7ecacac90948
--- /dev/null
+++ b/graphics/pokemon/nincada/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+96 88 112
+56 112 40
+232 232 248
+120 176 88
+184 176 192
+48 40 64
+152 144 160
+120 112 136
+88 144 64
+96 88 64
+0 0 0
+32 72 24
+144 128 88
+64 56 40
+0 0 0
diff --git a/graphics/pokemon/nincada/overworld_shiny.pal b/graphics/pokemon/nincada/overworld_shiny.pal
new file mode 100644
index 000000000000..6b8c520f1c5a
--- /dev/null
+++ b/graphics/pokemon/nincada/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+128 96 48
+56 112 40
+248 248 192
+120 176 88
+248 200 80
+80 64 40
+224 168 64
+176 136 56
+88 144 64
+96 88 64
+0 0 0
+32 72 24
+144 128 88
+64 56 40
+0 0 0
diff --git a/graphics/pokemon/ninetales/alolan/overworld.png b/graphics/pokemon/ninetales/alolan/overworld.png
new file mode 100644
index 000000000000..0abf5d6433ba
Binary files /dev/null and b/graphics/pokemon/ninetales/alolan/overworld.png differ
diff --git a/graphics/pokemon/ninetales/alolan/overworld_normal.pal b/graphics/pokemon/ninetales/alolan/overworld_normal.pal
new file mode 100644
index 000000000000..9df83da2ecb1
--- /dev/null
+++ b/graphics/pokemon/ninetales/alolan/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+49 97 163
+0 0 0
+162 212 235
+217 234 255
+232 240 255
+253 253 253
+86 153 192
+54 142 209
+116 195 227
+232 232 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/ninetales/alolan/overworld_shiny.pal b/graphics/pokemon/ninetales/alolan/overworld_shiny.pal
new file mode 100644
index 000000000000..dfb053a96177
--- /dev/null
+++ b/graphics/pokemon/ninetales/alolan/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+91 74 138
+0 0 0
+178 178 219
+230 225 246
+241 237 250
+253 253 253
+112 109 169
+193 69 121
+140 142 202
+241 235 244
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/ninetales/overworld.png b/graphics/pokemon/ninetales/overworld.png
new file mode 100644
index 000000000000..4c9deb6873b3
Binary files /dev/null and b/graphics/pokemon/ninetales/overworld.png differ
diff --git a/graphics/pokemon/ninetales/overworld_normal.pal b/graphics/pokemon/ninetales/overworld_normal.pal
new file mode 100644
index 000000000000..577135efc5eb
--- /dev/null
+++ b/graphics/pokemon/ninetales/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+88 56 48
+232 216 152
+184 160 104
+144 112 72
+136 56 56
+248 168 0
+192 64 104
+232 232 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/ninetales/overworld_shiny.pal b/graphics/pokemon/ninetales/overworld_shiny.pal
new file mode 100644
index 000000000000..ef406e511607
--- /dev/null
+++ b/graphics/pokemon/ninetales/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+64 64 64
+216 224 224
+168 168 208
+104 104 104
+136 56 56
+112 176 232
+192 64 104
+232 232 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/ninjask/overworld.png b/graphics/pokemon/ninjask/overworld.png
new file mode 100644
index 000000000000..3a0d9bbcc573
Binary files /dev/null and b/graphics/pokemon/ninjask/overworld.png differ
diff --git a/graphics/pokemon/ninjask/overworld_normal.pal b/graphics/pokemon/ninjask/overworld_normal.pal
new file mode 100644
index 000000000000..7ff6154c1e00
--- /dev/null
+++ b/graphics/pokemon/ninjask/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 48 72
+96 88 112
+0 0 0
+232 232 248
+200 200 200
+112 32 32
+144 96 16
+192 56 56
+232 192 48
+240 224 72
+192 144 64
+216 216 224
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/ninjask/overworld_shiny.pal b/graphics/pokemon/ninjask/overworld_shiny.pal
new file mode 100644
index 000000000000..0fedb11beef0
--- /dev/null
+++ b/graphics/pokemon/ninjask/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 64 0
+144 120 32
+0 0 0
+232 232 248
+248 192 96
+112 32 32
+144 96 16
+192 56 56
+232 192 48
+240 224 72
+192 144 64
+248 240 96
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/noctowl/overworld.png b/graphics/pokemon/noctowl/overworld.png
new file mode 100644
index 000000000000..c8942ec37950
Binary files /dev/null and b/graphics/pokemon/noctowl/overworld.png differ
diff --git a/graphics/pokemon/noctowl/overworld_normal.pal b/graphics/pokemon/noctowl/overworld_normal.pal
new file mode 100644
index 000000000000..8a1f15100fdb
--- /dev/null
+++ b/graphics/pokemon/noctowl/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 64 16
+128 96 80
+0 0 0
+224 216 160
+200 184 120
+96 72 56
+208 160 112
+184 136 96
+104 40 40
+224 168 168
+200 112 112
+168 184 208
+64 80 88
+168 48 48
+232 232 248
diff --git a/graphics/pokemon/noctowl/overworld_shiny.pal b/graphics/pokemon/noctowl/overworld_shiny.pal
new file mode 100644
index 000000000000..e50163e37a3b
--- /dev/null
+++ b/graphics/pokemon/noctowl/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 72 56
+160 80 32
+0 0 0
+224 232 160
+200 200 120
+104 48 40
+208 192 112
+184 168 96
+104 40 40
+224 168 168
+200 112 112
+168 184 208
+64 80 88
+168 48 48
+232 232 248
diff --git a/graphics/pokemon/noibat/overworld.png b/graphics/pokemon/noibat/overworld.png
new file mode 100644
index 000000000000..06ff494eb3d4
Binary files /dev/null and b/graphics/pokemon/noibat/overworld.png differ
diff --git a/graphics/pokemon/noibat/overworld_normal.pal b/graphics/pokemon/noibat/overworld_normal.pal
new file mode 100644
index 000000000000..4d386c5fb39a
--- /dev/null
+++ b/graphics/pokemon/noibat/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+112 192 160
+16 16 16
+57 42 62
+118 82 132
+154 105 181
+207 165 235
+255 219 93
+206 153 90
+183 145 95
+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/noibat/overworld_shiny.pal b/graphics/pokemon/noibat/overworld_shiny.pal
new file mode 100644
index 000000000000..fa84541d7690
--- /dev/null
+++ b/graphics/pokemon/noibat/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+112 192 160
+16 16 16
+38 71 61
+83 134 120
+118 180 163
+158 229 210
+255 219 93
+206 153 90
+183 145 95
+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/noivern/overworld.png b/graphics/pokemon/noivern/overworld.png
new file mode 100644
index 000000000000..e37cbfaa44ea
Binary files /dev/null and b/graphics/pokemon/noivern/overworld.png differ
diff --git a/graphics/pokemon/noivern/overworld_normal.pal b/graphics/pokemon/noivern/overworld_normal.pal
new file mode 100644
index 000000000000..b76a9dc38ce8
--- /dev/null
+++ b/graphics/pokemon/noivern/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+112 192 160
+16 16 16
+44 40 40
+97 85 85
+161 124 188
+117 221 172
+98 158 116
+126 167 147
+151 31 25
+239 94 79
+255 241 103
+141 141 141
+218 220 220
+53 40 70
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/noivern/overworld_shiny.pal b/graphics/pokemon/noivern/overworld_shiny.pal
new file mode 100644
index 000000000000..d544561af076
--- /dev/null
+++ b/graphics/pokemon/noivern/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+16 16 16
+57 92 64
+109 173 123
+91 49 68
+166 47 71
+91 49 68
+166 47 71
+91 49 68
+140 123 140
+179 180 180
+140 123 140
+179 180 180
+49 40 39
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/nosepass/overworld.png b/graphics/pokemon/nosepass/overworld.png
new file mode 100644
index 000000000000..d6b1e747b0d4
Binary files /dev/null and b/graphics/pokemon/nosepass/overworld.png differ
diff --git a/graphics/pokemon/nosepass/overworld_normal.pal b/graphics/pokemon/nosepass/overworld_normal.pal
new file mode 100644
index 000000000000..5193e6a24de6
--- /dev/null
+++ b/graphics/pokemon/nosepass/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 56 96
+0 0 0
+112 176 232
+80 128 184
+64 88 136
+64 72 80
+40 48 56
+160 32 56
+208 48 72
+112 24 40
+16 32 72
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/nosepass/overworld_shiny.pal b/graphics/pokemon/nosepass/overworld_shiny.pal
new file mode 100644
index 000000000000..121eb6d451b2
--- /dev/null
+++ b/graphics/pokemon/nosepass/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+120 80 24
+0 0 0
+208 184 112
+192 152 80
+160 120 56
+64 72 80
+40 48 56
+160 32 56
+208 48 72
+112 24 40
+56 32 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/numel/overworld.png b/graphics/pokemon/numel/overworld.png
new file mode 100644
index 000000000000..38b5a2421d3b
Binary files /dev/null and b/graphics/pokemon/numel/overworld.png differ
diff --git a/graphics/pokemon/numel/overworld_normal.pal b/graphics/pokemon/numel/overworld_normal.pal
new file mode 100644
index 000000000000..4838cb78e910
--- /dev/null
+++ b/graphics/pokemon/numel/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+16 16 16
+240 216 88
+48 80 24
+216 184 72
+88 72 56
+136 200 64
+120 96 72
+184 144 56
+72 120 32
+104 160 48
+64 72 80
+216 224 184
+248 248 248
+176 184 136
+0 0 0
diff --git a/graphics/pokemon/numel/overworld_shiny.pal b/graphics/pokemon/numel/overworld_shiny.pal
new file mode 100644
index 000000000000..e85a11f2c8e0
--- /dev/null
+++ b/graphics/pokemon/numel/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+224 224 176
+48 80 112
+192 192 144
+88 72 56
+136 200 224
+120 96 72
+168 160 128
+72 120 152
+104 160 192
+64 72 80
+216 224 184
+248 248 248
+176 184 136
+0 0 0
diff --git a/graphics/pokemon/nuzleaf/overworld.png b/graphics/pokemon/nuzleaf/overworld.png
new file mode 100644
index 000000000000..220e6320736c
Binary files /dev/null and b/graphics/pokemon/nuzleaf/overworld.png differ
diff --git a/graphics/pokemon/nuzleaf/overworld_normal.pal b/graphics/pokemon/nuzleaf/overworld_normal.pal
new file mode 100644
index 000000000000..e029d06670d5
--- /dev/null
+++ b/graphics/pokemon/nuzleaf/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+32 56 8
+144 208 16
+64 104 8
+104 160 8
+0 0 0
+72 48 24
+160 112 48
+96 64 32
+120 80 40
+232 200 120
+88 72 8
+232 232 248
+160 136 64
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/nuzleaf/overworld_shiny.pal b/graphics/pokemon/nuzleaf/overworld_shiny.pal
new file mode 100644
index 000000000000..76b413c7ccea
--- /dev/null
+++ b/graphics/pokemon/nuzleaf/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+32 56 8
+144 208 16
+64 104 8
+104 160 8
+0 0 0
+72 48 24
+128 88 72
+96 64 32
+104 64 56
+232 120 64
+88 48 8
+232 232 248
+160 88 48
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/obstagoon/overworld.png b/graphics/pokemon/obstagoon/overworld.png
new file mode 100644
index 000000000000..8c2bca2f5853
Binary files /dev/null and b/graphics/pokemon/obstagoon/overworld.png differ
diff --git a/graphics/pokemon/obstagoon/overworld_normal.pal b/graphics/pokemon/obstagoon/overworld_normal.pal
new file mode 100644
index 000000000000..2a5419b3cd58
--- /dev/null
+++ b/graphics/pokemon/obstagoon/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 25
+0 0 0
+35 35 35
+11 11 11
+19 19 19
+59 59 59
+208 208 208
+81 81 81
+168 168 168
+68 68 68
+99 99 99
+181 16 54
+148 148 148
+43 43 43
+124 124 124
+27 27 27
diff --git a/graphics/pokemon/obstagoon/overworld_shiny.pal b/graphics/pokemon/obstagoon/overworld_shiny.pal
new file mode 100644
index 000000000000..d850097696ea
--- /dev/null
+++ b/graphics/pokemon/obstagoon/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+156 16 57
+98 8 32
+197 24 74
+197 90 98
+213 213 213
+8 49 57
+172 172 172
+8 49 57
+32 115 139
+49 172 205
+74 172 197
+8 49 57
+49 139 164
+0 0 0
diff --git a/graphics/pokemon/octillery/overworld.png b/graphics/pokemon/octillery/overworld.png
new file mode 100644
index 000000000000..6f21f35a6c81
Binary files /dev/null and b/graphics/pokemon/octillery/overworld.png differ
diff --git a/graphics/pokemon/octillery/overworld_normal.pal b/graphics/pokemon/octillery/overworld_normal.pal
new file mode 100644
index 000000000000..69eaefcada8c
--- /dev/null
+++ b/graphics/pokemon/octillery/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+128 104 16
+248 216 88
+88 8 8
+0 0 0
+200 88 72
+176 40 0
+136 24 0
+232 232 248
+152 160 176
+200 160 24
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/octillery/overworld_shiny.pal b/graphics/pokemon/octillery/overworld_shiny.pal
new file mode 100644
index 000000000000..2942eb93c81a
--- /dev/null
+++ b/graphics/pokemon/octillery/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+128 104 16
+248 216 88
+64 48 8
+0 0 0
+208 168 64
+168 144 40
+128 104 16
+232 232 248
+152 160 176
+200 160 24
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/oddish/overworld.png b/graphics/pokemon/oddish/overworld.png
new file mode 100644
index 000000000000..30d68bfe9f30
Binary files /dev/null and b/graphics/pokemon/oddish/overworld.png differ
diff --git a/graphics/pokemon/oddish/overworld_normal.pal b/graphics/pokemon/oddish/overworld_normal.pal
new file mode 100644
index 000000000000..929feadb480e
--- /dev/null
+++ b/graphics/pokemon/oddish/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 210 164
+40 72 72
+0 0 0
+56 112 64
+136 192 128
+16 160 48
+32 72 40
+64 112 152
+112 0 16
+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/oddish/overworld_shiny.pal b/graphics/pokemon/oddish/overworld_shiny.pal
new file mode 100644
index 000000000000..14a0ae3eadf1
--- /dev/null
+++ b/graphics/pokemon/oddish/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 210 164
+32 72 40
+0 0 0
+88 128 64
+184 208 128
+160 184 48
+32 72 40
+16 160 48
+112 0 16
+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/ogerpon/back.png b/graphics/pokemon/ogerpon/back.png
index 8ec6f0fc0d52..75f309fd67ce 100644
Binary files a/graphics/pokemon/ogerpon/back.png and b/graphics/pokemon/ogerpon/back.png differ
diff --git a/graphics/pokemon/ogerpon/cornerstone/back.png b/graphics/pokemon/ogerpon/cornerstone/back.png
index 1f37c9c1dffb..7e40fee557b8 100644
Binary files a/graphics/pokemon/ogerpon/cornerstone/back.png and b/graphics/pokemon/ogerpon/cornerstone/back.png differ
diff --git a/graphics/pokemon/ogerpon/cornerstone/front.png b/graphics/pokemon/ogerpon/cornerstone/front.png
index 6bca5e915c01..8e96be70e7c8 100644
Binary files a/graphics/pokemon/ogerpon/cornerstone/front.png and b/graphics/pokemon/ogerpon/cornerstone/front.png differ
diff --git a/graphics/pokemon/ogerpon/cornerstone/normal.pal b/graphics/pokemon/ogerpon/cornerstone/normal.pal
index 057bd48dcccb..852898a6b705 100644
--- a/graphics/pokemon/ogerpon/cornerstone/normal.pal
+++ b/graphics/pokemon/ogerpon/cornerstone/normal.pal
@@ -2,12 +2,12 @@ JASC-PAL
0100
15
148 209 161
+0 0 0
42 44 41
21 158 7
-0 0 0
74 76 73
-25 27 24
61 113 53
+25 27 24
109 99 108
133 139 139
53 134 168
diff --git a/graphics/pokemon/ogerpon/cornerstone/shiny.pal b/graphics/pokemon/ogerpon/cornerstone/shiny.pal
index b4d7d151955a..c4956ce77495 100644
--- a/graphics/pokemon/ogerpon/cornerstone/shiny.pal
+++ b/graphics/pokemon/ogerpon/cornerstone/shiny.pal
@@ -2,12 +2,12 @@ JASC-PAL
0100
15
148 209 161
+0 0 0
42 44 41
21 158 7
-0 0 0
74 76 73
-25 27 24
61 113 53
+25 27 24
109 99 108
133 139 139
53 134 168
diff --git a/graphics/pokemon/ogerpon/cornerstone/tera/back.png b/graphics/pokemon/ogerpon/cornerstone/tera/back.png
new file mode 100644
index 000000000000..63c105ba0d94
Binary files /dev/null and b/graphics/pokemon/ogerpon/cornerstone/tera/back.png differ
diff --git a/graphics/pokemon/ogerpon/cornerstone/tera/front.png b/graphics/pokemon/ogerpon/cornerstone/tera/front.png
new file mode 100644
index 000000000000..7b93d3210a94
Binary files /dev/null and b/graphics/pokemon/ogerpon/cornerstone/tera/front.png differ
diff --git a/graphics/pokemon/ogerpon/cornerstone/tera/normal.pal b/graphics/pokemon/ogerpon/cornerstone/tera/normal.pal
new file mode 100644
index 000000000000..eb034d36e9fd
--- /dev/null
+++ b/graphics/pokemon/ogerpon/cornerstone/tera/normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+224 54 230
+14 17 13
+27 29 27
+42 44 41
+46 48 45
+74 76 73
+90 96 103
+61 113 53
+139 99 57
+0 150 177
+90 171 46
+149 151 148
+0 212 248
+196 198 195
+253 218 63
+251 253 250
diff --git a/graphics/pokemon/ogerpon/cornerstone/tera/shiny.pal b/graphics/pokemon/ogerpon/cornerstone/tera/shiny.pal
new file mode 100644
index 000000000000..eb034d36e9fd
--- /dev/null
+++ b/graphics/pokemon/ogerpon/cornerstone/tera/shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+224 54 230
+14 17 13
+27 29 27
+42 44 41
+46 48 45
+74 76 73
+90 96 103
+61 113 53
+139 99 57
+0 150 177
+90 171 46
+149 151 148
+0 212 248
+196 198 195
+253 218 63
+251 253 250
diff --git a/graphics/pokemon/ogerpon/front.png b/graphics/pokemon/ogerpon/front.png
index 5fa971f87352..dec38ef0b850 100644
Binary files a/graphics/pokemon/ogerpon/front.png and b/graphics/pokemon/ogerpon/front.png differ
diff --git a/graphics/pokemon/ogerpon/hearthflame/back.png b/graphics/pokemon/ogerpon/hearthflame/back.png
index d092ec3297cf..d6d927f19d5a 100644
Binary files a/graphics/pokemon/ogerpon/hearthflame/back.png and b/graphics/pokemon/ogerpon/hearthflame/back.png differ
diff --git a/graphics/pokemon/ogerpon/hearthflame/front.png b/graphics/pokemon/ogerpon/hearthflame/front.png
index 036ea37f328f..d8b9cb7b2346 100644
Binary files a/graphics/pokemon/ogerpon/hearthflame/front.png and b/graphics/pokemon/ogerpon/hearthflame/front.png differ
diff --git a/graphics/pokemon/ogerpon/hearthflame/normal.pal b/graphics/pokemon/ogerpon/hearthflame/normal.pal
index 637556660ada..3f478af8aae5 100644
--- a/graphics/pokemon/ogerpon/hearthflame/normal.pal
+++ b/graphics/pokemon/ogerpon/hearthflame/normal.pal
@@ -2,18 +2,18 @@ JASC-PAL
0100
16
148 210 164
-156 153 172
-131 28 24
+0 0 0
+41 44 41
+16 157 0
+230 60 49
+57 113 49
49 133 172
+131 28 24
213 230 246
-41 44 41
255 198 74
172 105 32
-16 157 0
-57 113 49
+156 153 172
49 190 230
-0 0 0
164 52 49
74 76 74
189 137 90
-230 60 49
diff --git a/graphics/pokemon/ogerpon/hearthflame/shiny.pal b/graphics/pokemon/ogerpon/hearthflame/shiny.pal
index f874367b4bc2..fee0f8de7b0f 100644
--- a/graphics/pokemon/ogerpon/hearthflame/shiny.pal
+++ b/graphics/pokemon/ogerpon/hearthflame/shiny.pal
@@ -2,18 +2,18 @@ JASC-PAL
0100
16
148 210 164
-156 153 172
-131 28 24
+0 0 0
+41 44 41
+16 157 0
+230 60 49
+57 113 49
49 133 172
+131 28 24
213 230 246
-41 44 41
255 198 74
124 162 56
-16 157 0
-57 113 49
+156 153 172
49 190 230
-0 0 0
164 52 49
74 76 74
189 137 90
-230 60 49
diff --git a/graphics/pokemon/ogerpon/hearthflame/tera/back.png b/graphics/pokemon/ogerpon/hearthflame/tera/back.png
new file mode 100644
index 000000000000..d98631e11e86
Binary files /dev/null and b/graphics/pokemon/ogerpon/hearthflame/tera/back.png differ
diff --git a/graphics/pokemon/ogerpon/hearthflame/tera/front.png b/graphics/pokemon/ogerpon/hearthflame/tera/front.png
new file mode 100644
index 000000000000..8a9e9b6a0a8a
Binary files /dev/null and b/graphics/pokemon/ogerpon/hearthflame/tera/front.png differ
diff --git a/graphics/pokemon/ogerpon/hearthflame/tera/normal.pal b/graphics/pokemon/ogerpon/hearthflame/tera/normal.pal
new file mode 100644
index 000000000000..fbb3c82e191a
--- /dev/null
+++ b/graphics/pokemon/ogerpon/hearthflame/tera/normal.pal
@@ -0,0 +1,18 @@
+JASC-PAL
+0100
+15
+222 57 229
+16 16 16
+87 15 15
+44 43 41
+153 23 23
+75 76 76
+64 112 54
+237 59 47
+141 98 59
+91 171 49
+209 154 24
+232 157 2
+0 211 249
+255 218 70
+253 253 253
diff --git a/graphics/pokemon/ogerpon/hearthflame/tera/shiny.pal b/graphics/pokemon/ogerpon/hearthflame/tera/shiny.pal
new file mode 100644
index 000000000000..fbb3c82e191a
--- /dev/null
+++ b/graphics/pokemon/ogerpon/hearthflame/tera/shiny.pal
@@ -0,0 +1,18 @@
+JASC-PAL
+0100
+15
+222 57 229
+16 16 16
+87 15 15
+44 43 41
+153 23 23
+75 76 76
+64 112 54
+237 59 47
+141 98 59
+91 171 49
+209 154 24
+232 157 2
+0 211 249
+255 218 70
+253 253 253
diff --git a/graphics/pokemon/ogerpon/normal.pal b/graphics/pokemon/ogerpon/normal.pal
index 8f715fd815b0..a1ac4baf96b9 100644
--- a/graphics/pokemon/ogerpon/normal.pal
+++ b/graphics/pokemon/ogerpon/normal.pal
@@ -2,17 +2,17 @@ JASC-PAL
0100
15
148 209 161
-42 44 41
0 1 0
+42 44 41
+21 158 7
27 70 15
-0 164 153
+61 113 53
17 106 68
-21 158 7
+83 133 90
74 76 73
-61 97 53
175 216 159
251 253 250
139 99 57
+0 164 153
120 81 39
219 157 92
-83 133 90
diff --git a/graphics/pokemon/ogerpon/shiny.pal b/graphics/pokemon/ogerpon/shiny.pal
index a96c55d35d88..08c751ebdad3 100644
--- a/graphics/pokemon/ogerpon/shiny.pal
+++ b/graphics/pokemon/ogerpon/shiny.pal
@@ -2,17 +2,17 @@ JASC-PAL
0100
15
148 209 161
-42 44 41
0 1 0
+42 44 41
+21 158 7
27 70 15
-0 164 153
+61 113 53
17 106 68
-21 158 7
+83 133 90
74 76 73
-61 97 53
175 216 159
251 253 250
139 99 57
+0 164 153
124 162 56
219 157 92
-83 133 90
diff --git a/graphics/pokemon/ogerpon/tera/back.png b/graphics/pokemon/ogerpon/tera/back.png
new file mode 100644
index 000000000000..47e211e5568a
Binary files /dev/null and b/graphics/pokemon/ogerpon/tera/back.png differ
diff --git a/graphics/pokemon/ogerpon/tera/front.png b/graphics/pokemon/ogerpon/tera/front.png
new file mode 100644
index 000000000000..7131db78d5fb
Binary files /dev/null and b/graphics/pokemon/ogerpon/tera/front.png differ
diff --git a/graphics/pokemon/ogerpon/tera/normal.pal b/graphics/pokemon/ogerpon/tera/normal.pal
new file mode 100644
index 000000000000..2409682978f7
--- /dev/null
+++ b/graphics/pokemon/ogerpon/tera/normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+222 57 229
+16 16 16
+44 43 41
+75 76 76
+15 106 67
+64 112 54
+141 98 59
+9 164 156
+97 167 27
+91 171 49
+84 182 101
+232 157 2
+219 156 94
+151 216 120
+255 218 70
+253 253 253
diff --git a/graphics/pokemon/ogerpon/tera/shiny.pal b/graphics/pokemon/ogerpon/tera/shiny.pal
new file mode 100644
index 000000000000..2409682978f7
--- /dev/null
+++ b/graphics/pokemon/ogerpon/tera/shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+222 57 229
+16 16 16
+44 43 41
+75 76 76
+15 106 67
+64 112 54
+141 98 59
+9 164 156
+97 167 27
+91 171 49
+84 182 101
+232 157 2
+219 156 94
+151 216 120
+255 218 70
+253 253 253
diff --git a/graphics/pokemon/ogerpon/wellspring/back.png b/graphics/pokemon/ogerpon/wellspring/back.png
index ed74528e6579..87d82032f475 100644
Binary files a/graphics/pokemon/ogerpon/wellspring/back.png and b/graphics/pokemon/ogerpon/wellspring/back.png differ
diff --git a/graphics/pokemon/ogerpon/wellspring/front.png b/graphics/pokemon/ogerpon/wellspring/front.png
index 5263ce2f1ebb..77ffb489a53d 100644
Binary files a/graphics/pokemon/ogerpon/wellspring/front.png and b/graphics/pokemon/ogerpon/wellspring/front.png differ
diff --git a/graphics/pokemon/ogerpon/wellspring/normal.pal b/graphics/pokemon/ogerpon/wellspring/normal.pal
index 4b22619be413..db40508a52bb 100644
--- a/graphics/pokemon/ogerpon/wellspring/normal.pal
+++ b/graphics/pokemon/ogerpon/wellspring/normal.pal
@@ -2,12 +2,12 @@ JASC-PAL
0100
16
148 209 161
+0 0 0
42 44 41
21 158 7
-74 76 73
-0 0 0
-61 113 53
11 64 121
+61 113 53
+74 76 73
15 90 170
0 126 229
53 134 168
diff --git a/graphics/pokemon/ogerpon/wellspring/shiny.pal b/graphics/pokemon/ogerpon/wellspring/shiny.pal
index bca722c95d81..7c44d3352d90 100644
--- a/graphics/pokemon/ogerpon/wellspring/shiny.pal
+++ b/graphics/pokemon/ogerpon/wellspring/shiny.pal
@@ -2,12 +2,12 @@ JASC-PAL
0100
16
148 209 161
+0 0 0
42 44 41
21 158 7
-74 76 73
-0 0 0
-61 113 53
11 64 121
+61 113 53
+74 76 73
15 90 170
0 126 229
53 134 168
diff --git a/graphics/pokemon/ogerpon/wellspring/tera/back.png b/graphics/pokemon/ogerpon/wellspring/tera/back.png
new file mode 100644
index 000000000000..a0a9c9834ae7
Binary files /dev/null and b/graphics/pokemon/ogerpon/wellspring/tera/back.png differ
diff --git a/graphics/pokemon/ogerpon/wellspring/tera/front.png b/graphics/pokemon/ogerpon/wellspring/tera/front.png
new file mode 100644
index 000000000000..714d271fb2ad
Binary files /dev/null and b/graphics/pokemon/ogerpon/wellspring/tera/front.png differ
diff --git a/graphics/pokemon/ogerpon/wellspring/tera/normal.pal b/graphics/pokemon/ogerpon/wellspring/tera/normal.pal
new file mode 100644
index 000000000000..c4f92593b64d
--- /dev/null
+++ b/graphics/pokemon/ogerpon/wellspring/tera/normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+224 54 230
+14 17 13
+42 44 41
+22 65 128
+74 76 73
+19 94 181
+61 113 53
+139 99 57
+0 130 229
+90 171 46
+42 214 251
+139 196 213
+204 222 254
+251 253 250
+253 218 63
+232 157 0
diff --git a/graphics/pokemon/ogerpon/wellspring/tera/shiny.pal b/graphics/pokemon/ogerpon/wellspring/tera/shiny.pal
new file mode 100644
index 000000000000..c4f92593b64d
--- /dev/null
+++ b/graphics/pokemon/ogerpon/wellspring/tera/shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+224 54 230
+14 17 13
+42 44 41
+22 65 128
+74 76 73
+19 94 181
+61 113 53
+139 99 57
+0 130 229
+90 171 46
+42 214 251
+139 196 213
+204 222 254
+251 253 250
+253 218 63
+232 157 0
diff --git a/graphics/pokemon/omanyte/overworld.png b/graphics/pokemon/omanyte/overworld.png
new file mode 100644
index 000000000000..3fc090727e26
Binary files /dev/null and b/graphics/pokemon/omanyte/overworld.png differ
diff --git a/graphics/pokemon/omanyte/overworld_normal.pal b/graphics/pokemon/omanyte/overworld_normal.pal
new file mode 100644
index 000000000000..618b1acffcf7
--- /dev/null
+++ b/graphics/pokemon/omanyte/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 64 56
+144 112 72
+176 152 104
+232 200 152
+0 0 0
+48 72 80
+232 232 248
+120 200 240
+72 168 216
+104 104 104
+56 128 160
+168 168 176
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/omanyte/overworld_shiny.pal b/graphics/pokemon/omanyte/overworld_shiny.pal
new file mode 100644
index 000000000000..19bd4cc79f29
--- /dev/null
+++ b/graphics/pokemon/omanyte/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 64 56
+144 112 72
+184 152 104
+248 192 152
+0 0 0
+80 56 112
+232 232 248
+216 192 248
+168 128 240
+104 104 104
+136 80 200
+168 168 176
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/omastar/overworld.png b/graphics/pokemon/omastar/overworld.png
new file mode 100644
index 000000000000..dbc1bf40d454
Binary files /dev/null and b/graphics/pokemon/omastar/overworld.png differ
diff --git a/graphics/pokemon/omastar/overworld_normal.pal b/graphics/pokemon/omastar/overworld_normal.pal
new file mode 100644
index 000000000000..1cf029320da6
--- /dev/null
+++ b/graphics/pokemon/omastar/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+80 64 56
+232 224 184
+176 152 104
+232 200 152
+128 104 80
+48 64 72
+72 168 216
+56 128 160
+248 224 104
+120 200 240
+104 104 104
+200 144 64
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/omastar/overworld_shiny.pal b/graphics/pokemon/omastar/overworld_shiny.pal
new file mode 100644
index 000000000000..dd8055f9ba81
--- /dev/null
+++ b/graphics/pokemon/omastar/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+80 64 48
+232 224 184
+176 152 96
+232 200 144
+128 104 72
+80 56 112
+168 128 240
+136 80 200
+248 224 104
+216 192 248
+104 104 104
+200 144 64
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/onix/overworld.png b/graphics/pokemon/onix/overworld.png
new file mode 100644
index 000000000000..521bf80e1d5f
Binary files /dev/null and b/graphics/pokemon/onix/overworld.png differ
diff --git a/graphics/pokemon/onix/overworld_normal.pal b/graphics/pokemon/onix/overworld_normal.pal
new file mode 100644
index 000000000000..a476b6606b59
--- /dev/null
+++ b/graphics/pokemon/onix/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+144 144 144
+48 48 48
+192 192 192
+104 96 96
+128 128 128
+80 72 72
+232 232 248
+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/onix/overworld_shiny.pal b/graphics/pokemon/onix/overworld_shiny.pal
new file mode 100644
index 000000000000..31db7daf66e6
--- /dev/null
+++ b/graphics/pokemon/onix/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+176 160 80
+32 32 16
+208 192 96
+104 96 48
+136 128 64
+64 64 32
+232 232 248
+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/oranguru/overworld.png b/graphics/pokemon/oranguru/overworld.png
new file mode 100644
index 000000000000..dfa30ea19cb4
Binary files /dev/null and b/graphics/pokemon/oranguru/overworld.png differ
diff --git a/graphics/pokemon/oranguru/overworld_normal.pal b/graphics/pokemon/oranguru/overworld_normal.pal
new file mode 100644
index 000000000000..2355e1de4381
--- /dev/null
+++ b/graphics/pokemon/oranguru/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+228 228 237
+206 206 215
+243 186 96
+170 170 174
+147 178 221
+234 157 30
+145 85 165
+78 78 78
+131 76 149
+107 62 122
+87 52 93
+56 55 55
+55 29 60
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/oranguru/overworld_shiny.pal b/graphics/pokemon/oranguru/overworld_shiny.pal
new file mode 100644
index 000000000000..461244e2bea2
--- /dev/null
+++ b/graphics/pokemon/oranguru/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+224 184 208
+206 206 215
+48 128 216
+176 136 160
+147 178 221
+120 192 208
+145 85 165
+78 78 78
+131 76 149
+107 62 122
+87 52 93
+56 55 55
+55 29 60
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/orbeetle/overworld.png b/graphics/pokemon/orbeetle/overworld.png
new file mode 100644
index 000000000000..c5b3209d310b
Binary files /dev/null and b/graphics/pokemon/orbeetle/overworld.png differ
diff --git a/graphics/pokemon/orbeetle/overworld_normal.pal b/graphics/pokemon/orbeetle/overworld_normal.pal
new file mode 100644
index 000000000000..b237f0d85d04
--- /dev/null
+++ b/graphics/pokemon/orbeetle/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+252 252 252
+44 44 44
+80 16 16
+52 40 96
+172 20 24
+224 32 32
+148 104 8
+232 96 88
+252 176 12
+252 204 88
+72 64 128
+108 100 164
+80 212 188
+216 216 216
+208 240 236
+4 4 4
diff --git a/graphics/pokemon/orbeetle/overworld_shiny.pal b/graphics/pokemon/orbeetle/overworld_shiny.pal
new file mode 100644
index 000000000000..fd4e30210f37
--- /dev/null
+++ b/graphics/pokemon/orbeetle/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+252 252 252
+41 41 41
+24 16 41
+49 41 98
+106 90 148
+131 131 205
+65 57 57
+172 172 230
+148 115 123
+205 148 156
+74 65 131
+106 98 164
+82 213 189
+90 115 213
+213 246 238
+0 0 0
diff --git a/graphics/pokemon/oricorio/overworld.png b/graphics/pokemon/oricorio/overworld.png
new file mode 100644
index 000000000000..900c5e9b95c6
Binary files /dev/null and b/graphics/pokemon/oricorio/overworld.png differ
diff --git a/graphics/pokemon/oricorio/overworld_normal.pal b/graphics/pokemon/oricorio/overworld_normal.pal
new file mode 100644
index 000000000000..ffb47e3bbc77
--- /dev/null
+++ b/graphics/pokemon/oricorio/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+240 243 236
+246 190 194
+255 180 180
+208 87 119
+92 69 61
+159 64 88
+66 66 143
+238 55 60
+202 51 85
+60 50 46
+180 45 74
+178 40 45
+134 32 34
+96 21 35
+0 0 0
diff --git a/graphics/pokemon/oricorio/overworld_shiny.pal b/graphics/pokemon/oricorio/overworld_shiny.pal
new file mode 100644
index 000000000000..f43e007a505e
--- /dev/null
+++ b/graphics/pokemon/oricorio/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+240 243 236
+246 190 194
+248 248 248
+208 87 119
+92 69 61
+159 64 88
+66 66 143
+112 96 96
+202 51 85
+60 50 46
+180 45 74
+80 72 72
+134 32 34
+48 40 40
+0 0 0
diff --git a/graphics/pokemon/orthworm/front.png b/graphics/pokemon/orthworm/front.png
index 87535ce92cf1..14884ce2c7d8 100755
Binary files a/graphics/pokemon/orthworm/front.png and b/graphics/pokemon/orthworm/front.png differ
diff --git a/graphics/pokemon/oshawott/overworld.png b/graphics/pokemon/oshawott/overworld.png
new file mode 100644
index 000000000000..55e4a2710684
Binary files /dev/null and b/graphics/pokemon/oshawott/overworld.png differ
diff --git a/graphics/pokemon/oshawott/overworld_normal.pal b/graphics/pokemon/oshawott/overworld_normal.pal
new file mode 100644
index 000000000000..20114cf4c334
--- /dev/null
+++ b/graphics/pokemon/oshawott/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 56 72
+252 252 252
+41 76 102
+197 197 205
+0 0 0
+41 76 102
+136 114 87
+100 100 100
+197 197 205
+167 157 148
+34 159 167
+197 197 205
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/oshawott/overworld_shiny.pal b/graphics/pokemon/oshawott/overworld_shiny.pal
new file mode 100644
index 000000000000..dbb08f80a3c8
--- /dev/null
+++ b/graphics/pokemon/oshawott/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 56 72
+248 248 232
+37 69 81
+200 208 160
+0 0 0
+50 82 182
+183 109 96
+100 100 100
+197 197 205
+144 161 200
+93 135 210
+238 205 131
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/overqwil/overworld.png b/graphics/pokemon/overqwil/overworld.png
new file mode 100644
index 000000000000..4472b4535af7
Binary files /dev/null and b/graphics/pokemon/overqwil/overworld.png differ
diff --git a/graphics/pokemon/overqwil/overworld_normal.pal b/graphics/pokemon/overqwil/overworld_normal.pal
new file mode 100644
index 000000000000..520959e080d8
--- /dev/null
+++ b/graphics/pokemon/overqwil/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+123 32 98
+246 65 213
+156 74 205
+57 49 24
+0 0 0
+139 123 82
+189 180 148
+82 82 98
+65 65 74
+24 24 24
+238 238 255
+189 49 156
+156 139 82
+41 41 49
+90 82 41
diff --git a/graphics/pokemon/overqwil/overworld_shiny.pal b/graphics/pokemon/overqwil/overworld_shiny.pal
new file mode 100644
index 000000000000..7e53de01d247
--- /dev/null
+++ b/graphics/pokemon/overqwil/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+74 57 131
+98 90 164
+115 106 156
+131 123 98
+0 0 0
+230 222 205
+246 246 238
+189 189 189
+148 139 139
+24 24 24
+238 238 255
+189 49 156
+164 156 115
+41 41 49
+131 123 98
diff --git a/graphics/pokemon/pachirisu/overworld.png b/graphics/pokemon/pachirisu/overworld.png
new file mode 100644
index 000000000000..7b285c7ec297
Binary files /dev/null and b/graphics/pokemon/pachirisu/overworld.png differ
diff --git a/graphics/pokemon/pachirisu/overworld_normal.pal b/graphics/pokemon/pachirisu/overworld_normal.pal
new file mode 100644
index 000000000000..9f90a41b3bc8
--- /dev/null
+++ b/graphics/pokemon/pachirisu/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 80 112
+120 160 216
+88 88 120
+176 176 208
+96 128 200
+0 0 0
+136 120 144
+232 232 248
+224 184 88
+184 144 96
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/pachirisu/overworld_shiny.pal b/graphics/pokemon/pachirisu/overworld_shiny.pal
new file mode 100644
index 000000000000..57159e928bef
--- /dev/null
+++ b/graphics/pokemon/pachirisu/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+128 80 112
+232 160 216
+88 88 120
+176 176 208
+200 128 200
+0 0 0
+136 120 144
+232 232 248
+224 184 88
+184 144 96
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/palkia/origin/overworld.png b/graphics/pokemon/palkia/origin/overworld.png
new file mode 100644
index 000000000000..e40c8c6a3f00
Binary files /dev/null and b/graphics/pokemon/palkia/origin/overworld.png differ
diff --git a/graphics/pokemon/palkia/origin/overworld_normal.pal b/graphics/pokemon/palkia/origin/overworld_normal.pal
new file mode 100644
index 000000000000..8a6f0c4ab8e6
--- /dev/null
+++ b/graphics/pokemon/palkia/origin/overworld_normal.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/palkia/origin/overworld_shiny.pal b/graphics/pokemon/palkia/origin/overworld_shiny.pal
new file mode 100644
index 000000000000..8a6f0c4ab8e6
--- /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/palkia/overworld.png b/graphics/pokemon/palkia/overworld.png
new file mode 100644
index 000000000000..20739d71ff7a
Binary files /dev/null and b/graphics/pokemon/palkia/overworld.png differ
diff --git a/graphics/pokemon/palkia/overworld_normal.pal b/graphics/pokemon/palkia/overworld_normal.pal
new file mode 100644
index 000000000000..aaa72bb70760
--- /dev/null
+++ b/graphics/pokemon/palkia/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+136 120 144
+80 80 88
+232 216 248
+208 192 216
+248 248 248
+168 160 176
+176 184 192
+200 216 232
+120 136 144
+16 16 16
+200 136 192
+240 80 64
+240 160 152
+160 80 160
+0 0 0
diff --git a/graphics/pokemon/palkia/overworld_shiny.pal b/graphics/pokemon/palkia/overworld_shiny.pal
new file mode 100644
index 000000000000..e9b746a9352a
--- /dev/null
+++ b/graphics/pokemon/palkia/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+200 152 160
+104 80 80
+248 216 240
+248 192 192
+248 248 248
+224 168 176
+176 184 192
+200 216 232
+120 136 144
+16 16 16
+200 112 144
+240 80 64
+240 160 152
+184 104 120
+0 0 0
diff --git a/graphics/pokemon/palossand/overworld.png b/graphics/pokemon/palossand/overworld.png
new file mode 100644
index 000000000000..df83e1d7a5de
Binary files /dev/null and b/graphics/pokemon/palossand/overworld.png differ
diff --git a/graphics/pokemon/palossand/overworld_normal.pal b/graphics/pokemon/palossand/overworld_normal.pal
new file mode 100644
index 000000000000..0bf0e0ba8815
--- /dev/null
+++ b/graphics/pokemon/palossand/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+253 226 190
+247 174 105
+236 187 169
+149 182 186
+211 149 90
+198 138 83
+251 117 147
+247 95 91
+229 84 81
+179 123 74
+101 72 44
+165 61 59
+83 59 37
+63 45 28
+0 0 0
diff --git a/graphics/pokemon/palossand/overworld_shiny.pal b/graphics/pokemon/palossand/overworld_shiny.pal
new file mode 100644
index 000000000000..fced791566b7
--- /dev/null
+++ b/graphics/pokemon/palossand/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+253 226 190
+112 112 112
+48 168 224
+112 176 224
+72 72 72
+32 32 32
+232 168 192
+248 240 80
+208 176 0
+179 123 74
+16 16 16
+136 104 0
+32 32 32
+72 72 72
+0 0 0
diff --git a/graphics/pokemon/palpitoad/overworld.png b/graphics/pokemon/palpitoad/overworld.png
new file mode 100644
index 000000000000..3be06ec27571
Binary files /dev/null and b/graphics/pokemon/palpitoad/overworld.png differ
diff --git a/graphics/pokemon/palpitoad/overworld_normal.pal b/graphics/pokemon/palpitoad/overworld_normal.pal
new file mode 100644
index 000000000000..4d5d03566cbd
--- /dev/null
+++ b/graphics/pokemon/palpitoad/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+89 89 87
+52 52 52
+100 198 193
+11 55 112
+25 32 46
+33 95 164
+5 138 208
+18 87 104
+191 147 121
+239 215 196
+138 79 63
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/palpitoad/overworld_shiny.pal b/graphics/pokemon/palpitoad/overworld_shiny.pal
new file mode 100644
index 000000000000..46d834cac643
--- /dev/null
+++ b/graphics/pokemon/palpitoad/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+96 96 94
+65 65 65
+188 99 24
+15 87 72
+38 39 41
+40 168 168
+8 192 208
+120 80 8
+222 196 194
+222 196 194
+96 96 94
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/pancham/overworld.png b/graphics/pokemon/pancham/overworld.png
new file mode 100644
index 000000000000..90d10d9bfa62
Binary files /dev/null and b/graphics/pokemon/pancham/overworld.png differ
diff --git a/graphics/pokemon/pancham/overworld_normal.pal b/graphics/pokemon/pancham/overworld_normal.pal
new file mode 100644
index 000000000000..6e404b00b4fd
--- /dev/null
+++ b/graphics/pokemon/pancham/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+16 16 16
+249 243 213
+122 130 154
+40 41 45
+83 86 95
+170 171 164
+70 72 80
+251 254 255
+28 134 64
+3 199 19
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/pancham/overworld_shiny.pal b/graphics/pokemon/pancham/overworld_shiny.pal
new file mode 100644
index 000000000000..f58cc92953a2
--- /dev/null
+++ b/graphics/pokemon/pancham/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+16 16 16
+249 237 194
+129 85 71
+39 17 11
+98 55 42
+186 179 135
+170 171 164
+251 254 255
+28 134 64
+3 199 19
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/pangoro/overworld.png b/graphics/pokemon/pangoro/overworld.png
new file mode 100644
index 000000000000..a5ba7ae0e556
Binary files /dev/null and b/graphics/pokemon/pangoro/overworld.png differ
diff --git a/graphics/pokemon/pangoro/overworld_normal.pal b/graphics/pokemon/pangoro/overworld_normal.pal
new file mode 100644
index 000000000000..35ff7f5f1a28
--- /dev/null
+++ b/graphics/pokemon/pangoro/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+16 16 16
+46 47 48
+244 239 220
+182 181 168
+87 91 95
+132 136 140
+52 104 75
+75 169 118
+83 62 11
+183 181 168
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/pangoro/overworld_shiny.pal b/graphics/pokemon/pangoro/overworld_shiny.pal
new file mode 100644
index 000000000000..b8492d4ea265
--- /dev/null
+++ b/graphics/pokemon/pangoro/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+16 16 16
+60 37 31
+239 234 225
+189 179 161
+75 50 43
+119 84 71
+52 104 75
+75 169 118
+83 62 11
+189 179 161
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/panpour/overworld.png b/graphics/pokemon/panpour/overworld.png
new file mode 100644
index 000000000000..e02358cf2dd6
Binary files /dev/null and b/graphics/pokemon/panpour/overworld.png differ
diff --git a/graphics/pokemon/panpour/overworld_normal.pal b/graphics/pokemon/panpour/overworld_normal.pal
new file mode 100644
index 000000000000..99ad9dc501d7
--- /dev/null
+++ b/graphics/pokemon/panpour/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 57 115
+24 139 172
+41 180 222
+0 0 0
+156 230 238
+232 232 248
+205 164 90
+32 115 156
+82 82 82
+255 205 123
+115 82 32
+96 80 64
+24 139 172
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/panpour/overworld_shiny.pal b/graphics/pokemon/panpour/overworld_shiny.pal
new file mode 100644
index 000000000000..b11114f76410
--- /dev/null
+++ b/graphics/pokemon/panpour/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+24 104 116
+24 176 168
+24 216 184
+0 0 0
+200 232 248
+232 232 248
+205 164 90
+32 136 152
+82 82 82
+255 205 123
+115 82 32
+96 80 64
+24 139 172
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/pansage/overworld.png b/graphics/pokemon/pansage/overworld.png
new file mode 100644
index 000000000000..6addd12e2069
Binary files /dev/null and b/graphics/pokemon/pansage/overworld.png differ
diff --git a/graphics/pokemon/pansage/overworld_normal.pal b/graphics/pokemon/pansage/overworld_normal.pal
new file mode 100644
index 000000000000..26276f8fc549
--- /dev/null
+++ b/graphics/pokemon/pansage/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+24 74 41
+8 115 49
+24 164 82
+8 115 49
+255 205 123
+0 0 0
+131 205 156
+232 232 248
+131 131 131
+205 164 90
+136 152 184
+96 80 64
+115 82 32
+205 164 90
+0 0 0
diff --git a/graphics/pokemon/pansage/overworld_shiny.pal b/graphics/pokemon/pansage/overworld_shiny.pal
new file mode 100644
index 000000000000..3b498eaa0305
--- /dev/null
+++ b/graphics/pokemon/pansage/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+24 74 41
+8 115 49
+80 176 48
+32 112 16
+248 224 120
+0 0 0
+128 208 64
+232 232 248
+131 131 131
+200 176 88
+136 152 184
+96 80 64
+115 82 32
+205 164 90
+0 0 0
diff --git a/graphics/pokemon/pansear/overworld.png b/graphics/pokemon/pansear/overworld.png
new file mode 100644
index 000000000000..0962330b53fd
Binary files /dev/null and b/graphics/pokemon/pansear/overworld.png differ
diff --git a/graphics/pokemon/pansear/overworld_normal.pal b/graphics/pokemon/pansear/overworld_normal.pal
new file mode 100644
index 000000000000..6b94eaeef367
--- /dev/null
+++ b/graphics/pokemon/pansear/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+123 49 49
+0 0 0
+230 82 65
+189 65 57
+123 49 49
+246 148 65
+131 131 131
+205 164 90
+136 152 184
+232 232 248
+255 205 123
+96 80 64
+115 82 32
+205 164 90
+0 0 0
diff --git a/graphics/pokemon/pansear/overworld_shiny.pal b/graphics/pokemon/pansear/overworld_shiny.pal
new file mode 100644
index 000000000000..6cfad8da8ae7
--- /dev/null
+++ b/graphics/pokemon/pansear/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+128 64 16
+0 0 0
+248 128 32
+184 96 24
+123 49 49
+248 184 32
+131 131 131
+216 184 128
+136 152 184
+232 232 248
+248 216 160
+96 80 64
+115 82 32
+205 164 90
+0 0 0
diff --git a/graphics/pokemon/paras/overworld.png b/graphics/pokemon/paras/overworld.png
new file mode 100644
index 000000000000..d3e8f893e751
Binary files /dev/null and b/graphics/pokemon/paras/overworld.png differ
diff --git a/graphics/pokemon/paras/overworld_normal.pal b/graphics/pokemon/paras/overworld_normal.pal
new file mode 100644
index 000000000000..89076990a5b0
--- /dev/null
+++ b/graphics/pokemon/paras/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 40 24
+216 96 112
+224 160 40
+168 48 72
+0 0 0
+168 80 16
+248 112 24
+232 232 248
+168 168 168
+112 112 112
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/paras/overworld_shiny.pal b/graphics/pokemon/paras/overworld_shiny.pal
new file mode 100644
index 000000000000..d2aeb4b21c45
--- /dev/null
+++ b/graphics/pokemon/paras/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 40 24
+216 96 112
+224 160 40
+168 48 72
+0 0 0
+168 48 16
+248 72 24
+232 232 248
+168 168 168
+112 112 112
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/parasect/overworld.png b/graphics/pokemon/parasect/overworld.png
new file mode 100644
index 000000000000..78cd7da4ec4d
Binary files /dev/null and b/graphics/pokemon/parasect/overworld.png differ
diff --git a/graphics/pokemon/parasect/overworld_normal.pal b/graphics/pokemon/parasect/overworld_normal.pal
new file mode 100644
index 000000000000..b93ab4303f1e
--- /dev/null
+++ b/graphics/pokemon/parasect/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 40 24
+168 48 72
+216 96 112
+232 200 88
+224 160 32
+0 0 0
+248 112 24
+168 80 16
+168 168 168
+232 232 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/parasect/overworld_shiny.pal b/graphics/pokemon/parasect/overworld_shiny.pal
new file mode 100644
index 000000000000..8d6d542b4053
--- /dev/null
+++ b/graphics/pokemon/parasect/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 72 24
+184 112 40
+208 152 72
+232 200 88
+224 160 32
+0 0 0
+248 152 24
+168 120 16
+168 168 168
+232 232 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/passimian/overworld.png b/graphics/pokemon/passimian/overworld.png
new file mode 100644
index 000000000000..268cf737b3ee
Binary files /dev/null and b/graphics/pokemon/passimian/overworld.png differ
diff --git a/graphics/pokemon/passimian/overworld_normal.pal b/graphics/pokemon/passimian/overworld_normal.pal
new file mode 100644
index 000000000000..46b303a39861
--- /dev/null
+++ b/graphics/pokemon/passimian/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+248 250 243
+197 238 123
+192 193 175
+255 159 0
+156 180 98
+123 124 115
+89 83 76
+103 102 92
+21 187 111
+23 148 91
+10 111 65
+70 69 63
+62 75 30
+40 42 39
+0 0 0
diff --git a/graphics/pokemon/passimian/overworld_shiny.pal b/graphics/pokemon/passimian/overworld_shiny.pal
new file mode 100644
index 000000000000..e5f70dbaf916
--- /dev/null
+++ b/graphics/pokemon/passimian/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+248 250 243
+240 173 29
+192 193 175
+156 110 12
+156 180 98
+123 124 115
+23 68 181
+115 115 64
+21 187 111
+23 148 91
+10 111 65
+70 69 63
+62 75 30
+40 42 39
+0 0 0
diff --git a/graphics/pokemon/patrat/overworld.png b/graphics/pokemon/patrat/overworld.png
new file mode 100644
index 000000000000..ea2df04dc1ae
Binary files /dev/null and b/graphics/pokemon/patrat/overworld.png differ
diff --git a/graphics/pokemon/patrat/overworld_normal.pal b/graphics/pokemon/patrat/overworld_normal.pal
new file mode 100644
index 000000000000..7ebea6fe937d
--- /dev/null
+++ b/graphics/pokemon/patrat/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+73 48 40
+73 48 40
+0 0 0
+163 111 49
+47 46 47
+230 77 40
+246 207 78
+202 194 161
+202 194 161
+181 152 110
+238 238 247
+181 152 110
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/patrat/overworld_shiny.pal b/graphics/pokemon/patrat/overworld_shiny.pal
new file mode 100644
index 000000000000..98d4b16f0e1b
--- /dev/null
+++ b/graphics/pokemon/patrat/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 72 72
+16 16 16
+0 0 0
+136 120 96
+47 46 47
+48 152 240
+176 224 40
+202 194 161
+216 200 144
+181 152 110
+238 238 247
+192 168 104
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/pawniard/overworld.png b/graphics/pokemon/pawniard/overworld.png
new file mode 100644
index 000000000000..27aa6174b548
Binary files /dev/null and b/graphics/pokemon/pawniard/overworld.png differ
diff --git a/graphics/pokemon/pawniard/overworld_normal.pal b/graphics/pokemon/pawniard/overworld_normal.pal
new file mode 100644
index 000000000000..b8aff96f0dd5
--- /dev/null
+++ b/graphics/pokemon/pawniard/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+229 229 247
+147 138 147
+87 0 0
+182 55 55
+129 25 18
+87 87 87
+55 55 71
+33 33 40
+227 129 55
+71 71 79
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/pawniard/overworld_shiny.pal b/graphics/pokemon/pawniard/overworld_shiny.pal
new file mode 100644
index 000000000000..a7e49ced50ee
--- /dev/null
+++ b/graphics/pokemon/pawniard/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+229 229 247
+147 138 147
+0 16 96
+64 80 184
+16 32 136
+96 96 96
+55 55 71
+40 40 48
+227 129 55
+71 71 79
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/pelipper/overworld.png b/graphics/pokemon/pelipper/overworld.png
new file mode 100644
index 000000000000..ddc45510ce5d
Binary files /dev/null and b/graphics/pokemon/pelipper/overworld.png differ
diff --git a/graphics/pokemon/pelipper/overworld_normal.pal b/graphics/pokemon/pelipper/overworld_normal.pal
new file mode 100644
index 000000000000..a2644cf356bc
--- /dev/null
+++ b/graphics/pokemon/pelipper/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 72 112
+104 160 216
+0 0 0
+144 192 224
+80 80 88
+184 192 208
+232 232 248
+64 104 144
+80 136 168
+104 80 16
+136 136 152
+160 136 40
+200 176 56
+224 208 72
+136 104 24
diff --git a/graphics/pokemon/pelipper/overworld_shiny.pal b/graphics/pokemon/pelipper/overworld_shiny.pal
new file mode 100644
index 000000000000..0490459872f2
--- /dev/null
+++ b/graphics/pokemon/pelipper/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 64 8
+144 200 72
+0 0 0
+200 224 120
+80 80 88
+184 192 208
+232 232 248
+64 104 16
+112 168 32
+104 80 16
+136 136 152
+160 136 40
+200 176 56
+224 208 72
+136 104 24
diff --git a/graphics/pokemon/perrserker/overworld.png b/graphics/pokemon/perrserker/overworld.png
new file mode 100644
index 000000000000..887026db09ef
Binary files /dev/null and b/graphics/pokemon/perrserker/overworld.png differ
diff --git a/graphics/pokemon/perrserker/overworld_normal.pal b/graphics/pokemon/perrserker/overworld_normal.pal
new file mode 100644
index 000000000000..28de916843df
--- /dev/null
+++ b/graphics/pokemon/perrserker/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+10 10 10
+57 57 57
+32 32 32
+0 0 0
+116 117 116
+182 184 181
+68 68 68
+14 14 14
+225 130 65
+40 34 27
+193 177 161
+130 114 98
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/perrserker/overworld_shiny.pal b/graphics/pokemon/perrserker/overworld_shiny.pal
new file mode 100644
index 000000000000..2ded41b99cfe
--- /dev/null
+++ b/graphics/pokemon/perrserker/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+8 8 8
+49 32 16
+32 32 32
+0 0 0
+139 90 49
+222 156 82
+65 65 65
+8 8 8
+255 255 255
+49 41 8
+255 238 106
+180 164 57
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/persian/alolan/overworld.png b/graphics/pokemon/persian/alolan/overworld.png
new file mode 100644
index 000000000000..94b2269630c1
Binary files /dev/null and b/graphics/pokemon/persian/alolan/overworld.png differ
diff --git a/graphics/pokemon/persian/alolan/overworld_normal.pal b/graphics/pokemon/persian/alolan/overworld_normal.pal
new file mode 100644
index 000000000000..87d03a1ce5a9
--- /dev/null
+++ b/graphics/pokemon/persian/alolan/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+85 80 97
+210 211 239
+160 146 168
+0 0 0
+142 129 149
+69 86 114
+44 180 228
+232 232 248
+253 253 253
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/persian/alolan/overworld_shiny.pal b/graphics/pokemon/persian/alolan/overworld_shiny.pal
new file mode 100644
index 000000000000..92c9678cf48d
--- /dev/null
+++ b/graphics/pokemon/persian/alolan/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+58 52 83
+146 153 224
+103 108 152
+0 0 0
+142 129 149
+69 86 114
+44 180 228
+232 232 248
+253 253 253
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/persian/overworld.png b/graphics/pokemon/persian/overworld.png
new file mode 100644
index 000000000000..5d4af3cc5e17
Binary files /dev/null and b/graphics/pokemon/persian/overworld.png differ
diff --git a/graphics/pokemon/persian/overworld_normal.pal b/graphics/pokemon/persian/overworld_normal.pal
new file mode 100644
index 000000000000..cb528441bf38
--- /dev/null
+++ b/graphics/pokemon/persian/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 56 24
+240 216 128
+144 128 72
+0 0 0
+64 56 48
+192 168 120
+144 104 80
+184 64 112
+232 232 248
+104 8 40
+160 128 104
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/persian/overworld_shiny.pal b/graphics/pokemon/persian/overworld_shiny.pal
new file mode 100644
index 000000000000..579e732fea27
--- /dev/null
+++ b/graphics/pokemon/persian/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 56 56
+240 224 168
+144 136 104
+0 0 0
+64 56 48
+192 184 144
+152 88 128
+184 64 112
+232 232 248
+104 8 40
+160 120 96
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/petilil/overworld.png b/graphics/pokemon/petilil/overworld.png
new file mode 100644
index 000000000000..1ece1481dad5
Binary files /dev/null and b/graphics/pokemon/petilil/overworld.png differ
diff --git a/graphics/pokemon/petilil/overworld_normal.pal b/graphics/pokemon/petilil/overworld_normal.pal
new file mode 100644
index 000000000000..0e977288db24
--- /dev/null
+++ b/graphics/pokemon/petilil/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 128 16
+92 224 48
+47 46 47
+74 176 49
+109 101 43
+184 200 64
+184 200 64
+214 234 140
+198 196 235
+143 168 0
+238 238 247
+141 49 50
+64 128 16
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/petilil/overworld_shiny.pal b/graphics/pokemon/petilil/overworld_shiny.pal
new file mode 100644
index 000000000000..783841bf40da
--- /dev/null
+++ b/graphics/pokemon/petilil/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 104 16
+104 192 56
+47 46 47
+88 144 32
+109 101 43
+168 160 48
+184 200 64
+232 224 120
+198 196 235
+154 146 44
+238 238 247
+141 49 50
+64 128 16
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/phanpy/overworld.png b/graphics/pokemon/phanpy/overworld.png
new file mode 100644
index 000000000000..49f93d5b45dc
Binary files /dev/null and b/graphics/pokemon/phanpy/overworld.png differ
diff --git a/graphics/pokemon/phanpy/overworld_normal.pal b/graphics/pokemon/phanpy/overworld_normal.pal
new file mode 100644
index 000000000000..9bd5ef772383
--- /dev/null
+++ b/graphics/pokemon/phanpy/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 160 176
+32 56 104
+16 16 16
+136 176 208
+80 128 176
+208 48 48
+152 32 32
+248 248 248
+88 8 8
+184 200 216
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/phanpy/overworld_shiny.pal b/graphics/pokemon/phanpy/overworld_shiny.pal
new file mode 100644
index 000000000000..5d8160680a48
--- /dev/null
+++ b/graphics/pokemon/phanpy/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 160 176
+56 72 112
+16 16 16
+184 200 216
+128 168 208
+208 48 48
+152 32 32
+248 248 248
+88 8 8
+184 200 216
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/phantump/overworld.png b/graphics/pokemon/phantump/overworld.png
new file mode 100644
index 000000000000..faea977e9219
Binary files /dev/null and b/graphics/pokemon/phantump/overworld.png differ
diff --git a/graphics/pokemon/phantump/overworld_normal.pal b/graphics/pokemon/phantump/overworld_normal.pal
new file mode 100644
index 000000000000..77898c1846d7
--- /dev/null
+++ b/graphics/pokemon/phantump/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+25 59 31
+50 29 18
+16 16 16
+67 41 27
+58 130 58
+88 79 74
+198 164 110
+155 123 85
+47 42 41
+122 85 60
+229 125 157
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/phantump/overworld_shiny.pal b/graphics/pokemon/phantump/overworld_shiny.pal
new file mode 100644
index 000000000000..e13722f4a591
--- /dev/null
+++ b/graphics/pokemon/phantump/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+81 30 25
+51 54 50
+16 16 16
+51 54 50
+203 76 63
+88 79 74
+191 196 187
+124 129 123
+47 42 41
+81 85 79
+142 177 223
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/pheromosa/overworld.png b/graphics/pokemon/pheromosa/overworld.png
new file mode 100644
index 000000000000..3c17ba622e6c
Binary files /dev/null and b/graphics/pokemon/pheromosa/overworld.png differ
diff --git a/graphics/pokemon/pheromosa/overworld_normal.pal b/graphics/pokemon/pheromosa/overworld_normal.pal
new file mode 100644
index 000000000000..1cc4c5577a0e
--- /dev/null
+++ b/graphics/pokemon/pheromosa/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+46 186 64
+0 0 0
+82 82 82
+255 255 255
+148 148 131
+187 187 187
+119 119 119
+233 233 233
+230 213 139
+211 189 147
+172 156 98
+49 49 49
+243 241 235
+55 44 90
+168 40 192
+40 152 224
diff --git a/graphics/pokemon/pheromosa/overworld_shiny.pal b/graphics/pokemon/pheromosa/overworld_shiny.pal
new file mode 100644
index 000000000000..166e2ca0b35e
--- /dev/null
+++ b/graphics/pokemon/pheromosa/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+46 186 64
+0 0 0
+48 56 56
+255 255 255
+148 148 131
+187 187 187
+72 88 88
+233 233 233
+208 208 208
+72 88 88
+96 104 112
+49 49 49
+243 241 235
+55 44 90
+168 40 192
+40 152 224
diff --git a/graphics/pokemon/phione/overworld.png b/graphics/pokemon/phione/overworld.png
new file mode 100644
index 000000000000..2a66fefecbff
Binary files /dev/null and b/graphics/pokemon/phione/overworld.png differ
diff --git a/graphics/pokemon/phione/overworld_normal.pal b/graphics/pokemon/phione/overworld_normal.pal
new file mode 100644
index 000000000000..f9aa03406be5
--- /dev/null
+++ b/graphics/pokemon/phione/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+24 72 160
+80 128 232
+0 0 0
+128 160 240
+176 200 248
+64 64 64
+16 112 176
+232 232 248
+64 96 200
+192 64 104
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/phione/overworld_shiny.pal b/graphics/pokemon/phione/overworld_shiny.pal
new file mode 100644
index 000000000000..7283e7fc105f
--- /dev/null
+++ b/graphics/pokemon/phione/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+8 112 128
+56 176 232
+0 0 0
+96 200 240
+176 200 248
+64 64 64
+8 136 176
+232 232 248
+48 168 200
+192 144 40
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/pichu/overworld.png b/graphics/pokemon/pichu/overworld.png
new file mode 100644
index 000000000000..6384dc22517a
Binary files /dev/null and b/graphics/pokemon/pichu/overworld.png differ
diff --git a/graphics/pokemon/pichu/overworld_normal.pal b/graphics/pokemon/pichu/overworld_normal.pal
new file mode 100644
index 000000000000..6c8a5df97879
--- /dev/null
+++ b/graphics/pokemon/pichu/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+64 64 64
+48 48 48
+248 216 104
+96 88 40
+192 168 64
+232 232 248
+224 120 160
+192 80 136
+144 120 56
+80 80 80
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/pichu/overworld_shiny.pal b/graphics/pokemon/pichu/overworld_shiny.pal
new file mode 100644
index 000000000000..7738ce634c18
--- /dev/null
+++ b/graphics/pokemon/pichu/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+64 64 64
+48 48 48
+248 200 0
+96 64 40
+240 136 0
+232 232 248
+216 88 64
+224 40 0
+184 88 0
+80 80 80
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/pichu/spiky_eared/overworld.png b/graphics/pokemon/pichu/spiky_eared/overworld.png
new file mode 100644
index 000000000000..7208db510850
Binary files /dev/null and b/graphics/pokemon/pichu/spiky_eared/overworld.png differ
diff --git a/graphics/pokemon/pichu/spiky_eared/overworld_normal.pal b/graphics/pokemon/pichu/spiky_eared/overworld_normal.pal
new file mode 100644
index 000000000000..13b7044ab4c1
--- /dev/null
+++ b/graphics/pokemon/pichu/spiky_eared/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+64 64 64
+48 48 48
+248 216 104
+96 88 40
+192 168 64
+144 120 56
+232 232 248
+224 120 160
+192 80 136
+80 80 80
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/pichu/spiky_eared/overworld_shiny.pal b/graphics/pokemon/pichu/spiky_eared/overworld_shiny.pal
new file mode 100644
index 000000000000..2e1acabeb8b5
--- /dev/null
+++ b/graphics/pokemon/pichu/spiky_eared/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+64 64 64
+48 48 48
+248 200 0
+96 64 40
+240 136 0
+184 88 0
+232 232 248
+216 88 64
+224 40 0
+80 80 80
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/pidgeot/overworld.png b/graphics/pokemon/pidgeot/overworld.png
new file mode 100644
index 000000000000..a918b8ce1ae9
Binary files /dev/null and b/graphics/pokemon/pidgeot/overworld.png differ
diff --git a/graphics/pokemon/pidgeot/overworld_normal.pal b/graphics/pokemon/pidgeot/overworld_normal.pal
new file mode 100644
index 000000000000..000c8125049d
--- /dev/null
+++ b/graphics/pokemon/pidgeot/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 56 24
+232 136 0
+144 88 48
+248 192 48
+208 112 40
+240 208 112
+192 152 64
+0 0 0
+200 72 32
+224 112 112
+128 24 112
+240 104 224
+232 232 248
+160 160 160
+176 64 96
diff --git a/graphics/pokemon/pidgeot/overworld_shiny.pal b/graphics/pokemon/pidgeot/overworld_shiny.pal
new file mode 100644
index 000000000000..fcbef2a8ad90
--- /dev/null
+++ b/graphics/pokemon/pidgeot/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 64 24
+232 136 0
+144 128 48
+248 192 48
+208 160 40
+248 216 136
+208 176 112
+0 0 0
+232 136 0
+248 192 48
+128 80 80
+240 176 96
+232 232 248
+160 160 160
+176 64 96
diff --git a/graphics/pokemon/pidgeotto/overworld.png b/graphics/pokemon/pidgeotto/overworld.png
new file mode 100644
index 000000000000..af229ff1b34d
Binary files /dev/null and b/graphics/pokemon/pidgeotto/overworld.png differ
diff --git a/graphics/pokemon/pidgeotto/overworld_normal.pal b/graphics/pokemon/pidgeotto/overworld_normal.pal
new file mode 100644
index 000000000000..efbf3d6d17d9
--- /dev/null
+++ b/graphics/pokemon/pidgeotto/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 64 32
+200 72 32
+0 0 0
+224 112 112
+176 80 32
+240 208 112
+192 152 64
+208 128 32
+160 32 160
+232 232 248
+152 152 152
+240 136 224
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/pidgeotto/overworld_shiny.pal b/graphics/pokemon/pidgeotto/overworld_shiny.pal
new file mode 100644
index 000000000000..70e760e9da25
--- /dev/null
+++ b/graphics/pokemon/pidgeotto/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 72 72
+248 144 0
+0 0 0
+248 200 72
+144 144 72
+224 208 168
+184 168 128
+168 176 128
+200 72 32
+232 232 248
+152 152 152
+248 144 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/pidgey/overworld.png b/graphics/pokemon/pidgey/overworld.png
new file mode 100644
index 000000000000..3cb825fe501a
Binary files /dev/null and b/graphics/pokemon/pidgey/overworld.png differ
diff --git a/graphics/pokemon/pidgey/overworld_normal.pal b/graphics/pokemon/pidgey/overworld_normal.pal
new file mode 100644
index 000000000000..8b05a034ff3d
--- /dev/null
+++ b/graphics/pokemon/pidgey/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 64 32
+240 208 112
+200 112 32
+184 88 32
+192 152 64
+0 0 0
+232 232 248
+152 56 96
+216 144 176
+184 184 184
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/pidgey/overworld_shiny.pal b/graphics/pokemon/pidgey/overworld_shiny.pal
new file mode 100644
index 000000000000..ef1db93a7a65
--- /dev/null
+++ b/graphics/pokemon/pidgey/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 88 32
+240 208 112
+200 184 32
+152 152 40
+192 152 64
+0 0 0
+232 232 248
+112 96 0
+248 200 72
+184 184 184
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/pidove/overworld.png b/graphics/pokemon/pidove/overworld.png
new file mode 100644
index 000000000000..b55a13e39010
Binary files /dev/null and b/graphics/pokemon/pidove/overworld.png differ
diff --git a/graphics/pokemon/pidove/overworld_normal.pal b/graphics/pokemon/pidove/overworld_normal.pal
new file mode 100644
index 000000000000..704bb5f94638
--- /dev/null
+++ b/graphics/pokemon/pidove/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+55 55 55
+55 55 55
+88 88 88
+172 172 172
+128 128 128
+48 48 48
+248 152 152
+248 248 248
+248 184 40
+184 96 96
+128 128 128
+172 172 172
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/pidove/overworld_shiny.pal b/graphics/pokemon/pidove/overworld_shiny.pal
new file mode 100644
index 000000000000..3e184b75a563
--- /dev/null
+++ b/graphics/pokemon/pidove/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+55 55 55
+32 48 96
+64 80 120
+200 200 208
+176 184 184
+48 48 48
+248 152 152
+248 248 248
+248 136 32
+184 96 96
+128 128 128
+172 172 172
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/pignite/overworld.png b/graphics/pokemon/pignite/overworld.png
new file mode 100644
index 000000000000..9ea0862b2d49
Binary files /dev/null and b/graphics/pokemon/pignite/overworld.png differ
diff --git a/graphics/pokemon/pignite/overworld_normal.pal b/graphics/pokemon/pignite/overworld_normal.pal
new file mode 100644
index 000000000000..5cf1ee3ef0e5
--- /dev/null
+++ b/graphics/pokemon/pignite/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+0 0 0
+82 49 41
+57 37 37
+189 90 49
+123 57 41
+232 106 43
+210 182 96
+24 32 40
+83 79 60
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/pignite/overworld_shiny.pal b/graphics/pokemon/pignite/overworld_shiny.pal
new file mode 100644
index 000000000000..21a321291465
--- /dev/null
+++ b/graphics/pokemon/pignite/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+0 0 0
+48 56 72
+42 48 55
+120 104 240
+101 69 51
+232 160 32
+204 156 214
+42 48 55
+48 56 72
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/pikachu/overworld.png b/graphics/pokemon/pikachu/overworld.png
new file mode 100644
index 000000000000..c1389cdce324
Binary files /dev/null and b/graphics/pokemon/pikachu/overworld.png differ
diff --git a/graphics/pokemon/pikachu/overworld_normal.pal b/graphics/pokemon/pikachu/overworld_normal.pal
new file mode 100644
index 000000000000..36deaad99d35
--- /dev/null
+++ b/graphics/pokemon/pikachu/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+48 48 48
+248 208 80
+112 80 56
+152 112 56
+200 160 64
+232 232 248
+200 88 56
+144 56 24
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/pikachu/overworld_shiny.pal b/graphics/pokemon/pikachu/overworld_shiny.pal
new file mode 100644
index 000000000000..f62dd068ce68
--- /dev/null
+++ b/graphics/pokemon/pikachu/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+48 48 48
+248 168 40
+136 80 56
+192 80 48
+224 120 64
+232 232 248
+200 88 56
+144 56 24
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/pikipek/overworld.png b/graphics/pokemon/pikipek/overworld.png
new file mode 100644
index 000000000000..9739fabeed70
Binary files /dev/null and b/graphics/pokemon/pikipek/overworld.png differ
diff --git a/graphics/pokemon/pikipek/overworld_normal.pal b/graphics/pokemon/pikipek/overworld_normal.pal
new file mode 100644
index 000000000000..299efed97648
--- /dev/null
+++ b/graphics/pokemon/pikipek/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+213 213 213
+141 141 141
+49 178 247
+43 118 191
+109 109 109
+99 99 99
+242 86 89
+53 51 51
+140 42 48
+16 16 16
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/pikipek/overworld_shiny.pal b/graphics/pokemon/pikipek/overworld_shiny.pal
new file mode 100644
index 000000000000..55fdc0eccb81
--- /dev/null
+++ b/graphics/pokemon/pikipek/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+213 213 213
+141 141 141
+56 192 72
+47 161 60
+109 109 109
+72 88 80
+248 64 120
+40 48 40
+140 42 48
+16 16 16
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/piloswine/overworld.png b/graphics/pokemon/piloswine/overworld.png
new file mode 100644
index 000000000000..d063c3da8b1f
Binary files /dev/null and b/graphics/pokemon/piloswine/overworld.png differ
diff --git a/graphics/pokemon/piloswine/overworld_normal.pal b/graphics/pokemon/piloswine/overworld_normal.pal
new file mode 100644
index 000000000000..c8f0d9fb48ca
--- /dev/null
+++ b/graphics/pokemon/piloswine/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 40 8
+176 128 88
+152 104 64
+0 0 0
+120 72 48
+232 136 160
+200 96 112
+144 40 64
+48 48 64
+168 184 208
+232 232 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/piloswine/overworld_shiny.pal b/graphics/pokemon/piloswine/overworld_shiny.pal
new file mode 100644
index 000000000000..6709eb7cc8c9
--- /dev/null
+++ b/graphics/pokemon/piloswine/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 80 8
+208 192 144
+192 144 80
+0 0 0
+144 112 64
+232 136 160
+200 96 112
+144 40 64
+48 48 64
+168 184 208
+232 232 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/pincurchin/overworld.png b/graphics/pokemon/pincurchin/overworld.png
new file mode 100644
index 000000000000..ebbd4b26de11
Binary files /dev/null and b/graphics/pokemon/pincurchin/overworld.png differ
diff --git a/graphics/pokemon/pincurchin/overworld_normal.pal b/graphics/pokemon/pincurchin/overworld_normal.pal
new file mode 100644
index 000000000000..abc7bfd925ad
--- /dev/null
+++ b/graphics/pokemon/pincurchin/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+17 11 17
+147 129 116
+46 33 47
+0 0 0
+78 59 81
+89 67 7
+252 202 61
+255 219 116
+252 198 46
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/pincurchin/overworld_shiny.pal b/graphics/pokemon/pincurchin/overworld_shiny.pal
new file mode 100644
index 000000000000..4f93c6b7800f
--- /dev/null
+++ b/graphics/pokemon/pincurchin/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+8 8 8
+148 131 115
+24 24 24
+0 0 0
+65 57 65
+90 49 8
+255 197 41
+255 139 41
+213 106 16
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/pincurchin/shiny.pal b/graphics/pokemon/pincurchin/shiny.pal
index dd03c31a28fb..a2b0a156a7c3 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/pineco/overworld.png b/graphics/pokemon/pineco/overworld.png
new file mode 100644
index 000000000000..2107344189a5
Binary files /dev/null and b/graphics/pokemon/pineco/overworld.png differ
diff --git a/graphics/pokemon/pineco/overworld_normal.pal b/graphics/pokemon/pineco/overworld_normal.pal
new file mode 100644
index 000000000000..4659770069c0
--- /dev/null
+++ b/graphics/pokemon/pineco/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 160 176
+0 0 0
+80 176 192
+8 56 96
+16 88 128
+48 128 168
+232 232 248
+96 112 152
+200 64 72
+160 176 200
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/pineco/overworld_shiny.pal b/graphics/pokemon/pineco/overworld_shiny.pal
new file mode 100644
index 000000000000..7cc52c908513
--- /dev/null
+++ b/graphics/pokemon/pineco/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 160 176
+0 0 0
+248 192 104
+112 56 0
+152 104 32
+216 128 64
+232 232 248
+160 136 96
+200 64 72
+160 176 200
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/pinsir/overworld.png b/graphics/pokemon/pinsir/overworld.png
new file mode 100644
index 000000000000..3ac6218fe732
Binary files /dev/null and b/graphics/pokemon/pinsir/overworld.png differ
diff --git a/graphics/pokemon/pinsir/overworld_normal.pal b/graphics/pokemon/pinsir/overworld_normal.pal
new file mode 100644
index 000000000000..d88051943db4
--- /dev/null
+++ b/graphics/pokemon/pinsir/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+192 192 208
+48 48 48
+104 104 104
+144 144 144
+120 104 80
+152 128 96
+96 80 56
+232 232 248
+80 64 48
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/pinsir/overworld_shiny.pal b/graphics/pokemon/pinsir/overworld_shiny.pal
new file mode 100644
index 000000000000..0488359dbb75
--- /dev/null
+++ b/graphics/pokemon/pinsir/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+216 200 120
+48 48 48
+128 120 64
+176 152 80
+104 120 176
+152 152 176
+72 88 160
+232 232 248
+48 80 120
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/piplup/overworld.png b/graphics/pokemon/piplup/overworld.png
new file mode 100644
index 000000000000..818bb837ed07
Binary files /dev/null and b/graphics/pokemon/piplup/overworld.png differ
diff --git a/graphics/pokemon/piplup/overworld_normal.pal b/graphics/pokemon/piplup/overworld_normal.pal
new file mode 100644
index 000000000000..48c0c3e3decb
--- /dev/null
+++ b/graphics/pokemon/piplup/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 56 72
+64 104 224
+0 0 0
+40 88 168
+56 64 104
+120 176 240
+232 232 248
+176 184 216
+120 104 64
+120 120 120
+248 184 24
+80 144 184
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/piplup/overworld_shiny.pal b/graphics/pokemon/piplup/overworld_shiny.pal
new file mode 100644
index 000000000000..940a6481423d
--- /dev/null
+++ b/graphics/pokemon/piplup/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 56 72
+64 152 248
+0 0 0
+40 136 192
+56 88 112
+120 200 248
+232 232 248
+176 184 216
+120 104 64
+120 120 120
+248 184 24
+104 184 200
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/plusle/overworld.png b/graphics/pokemon/plusle/overworld.png
new file mode 100644
index 000000000000..296826646907
Binary files /dev/null and b/graphics/pokemon/plusle/overworld.png differ
diff --git a/graphics/pokemon/plusle/overworld_normal.pal b/graphics/pokemon/plusle/overworld_normal.pal
new file mode 100644
index 000000000000..d4b90952e2db
--- /dev/null
+++ b/graphics/pokemon/plusle/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+136 40 64
+224 112 120
+184 72 88
+112 88 48
+248 224 136
+200 168 96
+168 136 104
+232 232 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/plusle/overworld_shiny.pal b/graphics/pokemon/plusle/overworld_shiny.pal
new file mode 100644
index 000000000000..d88a9547b96b
--- /dev/null
+++ b/graphics/pokemon/plusle/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+136 0 0
+216 96 56
+176 48 24
+112 88 48
+248 216 104
+192 168 64
+160 136 72
+232 232 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/poipole/overworld.png b/graphics/pokemon/poipole/overworld.png
new file mode 100644
index 000000000000..848e751066d2
Binary files /dev/null and b/graphics/pokemon/poipole/overworld.png differ
diff --git a/graphics/pokemon/poipole/overworld_normal.pal b/graphics/pokemon/poipole/overworld_normal.pal
new file mode 100644
index 000000000000..1c5e37b7b51c
--- /dev/null
+++ b/graphics/pokemon/poipole/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+174 237 254
+201 201 201
+146 178 199
+142 93 208
+223 85 157
+81 81 81
+125 75 191
+188 64 133
+101 35 73
+62 39 86
+44 27 61
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/poipole/overworld_shiny.pal b/graphics/pokemon/poipole/overworld_shiny.pal
new file mode 100644
index 000000000000..7d476518cb99
--- /dev/null
+++ b/graphics/pokemon/poipole/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+174 237 254
+200 200 192
+128 160 24
+152 80 16
+248 208 24
+81 81 81
+248 248 248
+200 136 8
+101 35 73
+112 112 104
+44 27 61
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/politoed/overworld.png b/graphics/pokemon/politoed/overworld.png
new file mode 100644
index 000000000000..aadde5b61471
Binary files /dev/null and b/graphics/pokemon/politoed/overworld.png differ
diff --git a/graphics/pokemon/politoed/overworld_normal.pal b/graphics/pokemon/politoed/overworld_normal.pal
new file mode 100644
index 000000000000..e7b45a11d748
--- /dev/null
+++ b/graphics/pokemon/politoed/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+32 64 80
+64 112 120
+0 0 0
+48 80 16
+152 216 112
+88 152 56
+104 184 64
+232 232 248
+184 200 224
+248 128 176
+136 56 72
+200 88 136
+208 184 64
+240 200 72
+136 120 8
diff --git a/graphics/pokemon/politoed/overworld_shiny.pal b/graphics/pokemon/politoed/overworld_shiny.pal
new file mode 100644
index 000000000000..08604be146eb
--- /dev/null
+++ b/graphics/pokemon/politoed/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+32 64 80
+64 112 120
+0 0 0
+32 64 80
+168 216 200
+64 128 152
+120 168 192
+232 232 248
+184 200 224
+232 120 160
+136 56 72
+200 88 136
+208 136 200
+216 112 192
+136 120 8
diff --git a/graphics/pokemon/poliwag/overworld.png b/graphics/pokemon/poliwag/overworld.png
new file mode 100644
index 000000000000..217c3aa99815
Binary files /dev/null and b/graphics/pokemon/poliwag/overworld.png differ
diff --git a/graphics/pokemon/poliwag/overworld_normal.pal b/graphics/pokemon/poliwag/overworld_normal.pal
new file mode 100644
index 000000000000..34df16304cea
--- /dev/null
+++ b/graphics/pokemon/poliwag/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+24 40 56
+120 128 232
+96 48 64
+48 48 48
+232 232 232
+176 64 104
+240 120 160
+232 232 248
+176 176 208
+0 0 0
+64 88 152
+88 88 88
+120 120 120
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/poliwag/overworld_shiny.pal b/graphics/pokemon/poliwag/overworld_shiny.pal
new file mode 100644
index 000000000000..4606909696cc
--- /dev/null
+++ b/graphics/pokemon/poliwag/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+24 40 56
+120 192 232
+96 48 64
+48 48 48
+232 232 232
+176 64 104
+240 120 160
+232 232 248
+176 176 208
+0 0 0
+88 144 176
+88 88 88
+120 120 120
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/poliwhirl/overworld.png b/graphics/pokemon/poliwhirl/overworld.png
new file mode 100644
index 000000000000..6600795f055d
Binary files /dev/null and b/graphics/pokemon/poliwhirl/overworld.png differ
diff --git a/graphics/pokemon/poliwhirl/overworld_normal.pal b/graphics/pokemon/poliwhirl/overworld_normal.pal
new file mode 100644
index 000000000000..b58c05f41697
--- /dev/null
+++ b/graphics/pokemon/poliwhirl/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+32 40 56
+72 96 184
+0 0 0
+120 128 232
+56 72 112
+160 160 160
+232 232 248
+88 88 88
+48 48 48
+176 176 208
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/poliwhirl/overworld_shiny.pal b/graphics/pokemon/poliwhirl/overworld_shiny.pal
new file mode 100644
index 000000000000..0078e3a56a7d
--- /dev/null
+++ b/graphics/pokemon/poliwhirl/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+24 40 56
+88 144 176
+0 0 0
+120 192 232
+56 96 112
+160 160 160
+232 232 248
+88 88 88
+48 48 48
+176 176 208
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/poliwrath/overworld.png b/graphics/pokemon/poliwrath/overworld.png
new file mode 100644
index 000000000000..144d1194686d
Binary files /dev/null and b/graphics/pokemon/poliwrath/overworld.png differ
diff --git a/graphics/pokemon/poliwrath/overworld_normal.pal b/graphics/pokemon/poliwrath/overworld_normal.pal
new file mode 100644
index 000000000000..fe70d0036ed0
--- /dev/null
+++ b/graphics/pokemon/poliwrath/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+32 40 56
+120 128 232
+72 96 184
+232 232 248
+88 88 88
+48 48 48
+200 200 200
+0 0 0
+160 160 160
+176 176 208
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/poliwrath/overworld_shiny.pal b/graphics/pokemon/poliwrath/overworld_shiny.pal
new file mode 100644
index 000000000000..be550c311026
--- /dev/null
+++ b/graphics/pokemon/poliwrath/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 160 176
+40 48 24
+168 184 120
+112 120 72
+232 232 248
+88 88 88
+48 48 48
+200 200 200
+0 0 0
+160 160 160
+176 176 208
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/polteageist/overworld.png b/graphics/pokemon/polteageist/overworld.png
new file mode 100644
index 000000000000..878262b66004
Binary files /dev/null and b/graphics/pokemon/polteageist/overworld.png differ
diff --git a/graphics/pokemon/polteageist/overworld_normal.pal b/graphics/pokemon/polteageist/overworld_normal.pal
new file mode 100644
index 000000000000..99a675acedab
--- /dev/null
+++ b/graphics/pokemon/polteageist/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+252 0 24
+88 52 104
+40 96 100
+104 104 120
+188 124 124
+0 0 0
+152 112 8
+220 156 96
+192 184 224
+248 212 120
+120 80 140
+148 88 164
+60 144 156
+72 172 184
+240 248 248
+148 208 212
diff --git a/graphics/pokemon/polteageist/overworld_shiny.pal b/graphics/pokemon/polteageist/overworld_shiny.pal
new file mode 100644
index 000000000000..3b3251af213e
--- /dev/null
+++ b/graphics/pokemon/polteageist/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+90 41 90
+90 41 90
+106 106 123
+189 123 123
+0 0 0
+156 115 8
+230 156 98
+213 213 213
+255 213 123
+123 82 148
+164 90 148
+164 90 148
+197 106 164
+213 213 213
+213 213 213
diff --git a/graphics/pokemon/ponyta/galarian/back.png b/graphics/pokemon/ponyta/galarian/back.png
index fe45584312b7..f798d5cb45a3 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
new file mode 100644
index 000000000000..683780312b2b
Binary files /dev/null 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
new file mode 100644
index 000000000000..288903139216
--- /dev/null
+++ b/graphics/pokemon/ponyta/galarian/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+123 72 123
+131 121 90
+32 32 32
+230 222 164
+197 109 197
+65 113 106
+213 153 213
+189 186 189
+246 226 172
+238 234 255
+0 0 0
+106 222 222
+115 113 65
+230 186 230
+246 242 222
diff --git a/graphics/pokemon/ponyta/galarian/overworld_shiny.pal b/graphics/pokemon/ponyta/galarian/overworld_shiny.pal
new file mode 100644
index 000000000000..143612d3ead1
--- /dev/null
+++ b/graphics/pokemon/ponyta/galarian/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+200 144 48
+131 121 90
+32 32 32
+192 216 200
+240 200 80
+66 149 97
+248 240 160
+189 186 189
+71 180 150
+238 234 255
+0 0 0
+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 707eb51faa0a..62925ea1a8aa 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/ponyta/overworld.png b/graphics/pokemon/ponyta/overworld.png
new file mode 100644
index 000000000000..79a20ab366da
Binary files /dev/null and b/graphics/pokemon/ponyta/overworld.png differ
diff --git a/graphics/pokemon/ponyta/overworld_normal.pal b/graphics/pokemon/ponyta/overworld_normal.pal
new file mode 100644
index 000000000000..525ebd64e283
--- /dev/null
+++ b/graphics/pokemon/ponyta/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+160 48 8
+248 160 24
+224 72 32
+72 56 40
+240 224 168
+184 168 112
+152 56 80
+0 0 0
+128 120 88
+80 56 32
+232 232 248
+80 96 128
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/ponyta/overworld_shiny.pal b/graphics/pokemon/ponyta/overworld_shiny.pal
new file mode 100644
index 000000000000..9ae14f9cbf1b
--- /dev/null
+++ b/graphics/pokemon/ponyta/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 112 176
+136 192 248
+88 168 248
+72 72 72
+248 232 176
+192 176 128
+80 80 152
+0 0 0
+128 120 88
+80 56 32
+232 232 248
+80 96 128
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/poochyena/overworld.png b/graphics/pokemon/poochyena/overworld.png
new file mode 100644
index 000000000000..8253e9527357
Binary files /dev/null and b/graphics/pokemon/poochyena/overworld.png differ
diff --git a/graphics/pokemon/poochyena/overworld_normal.pal b/graphics/pokemon/poochyena/overworld_normal.pal
new file mode 100644
index 000000000000..6833ea880874
--- /dev/null
+++ b/graphics/pokemon/poochyena/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 56 80
+0 0 0
+80 80 88
+184 184 184
+144 144 144
+104 112 112
+248 216 88
+192 56 56
+136 40 40
+184 184 184
+48 56 56
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/poochyena/overworld_shiny.pal b/graphics/pokemon/poochyena/overworld_shiny.pal
new file mode 100644
index 000000000000..66a0fcf0c0a4
--- /dev/null
+++ b/graphics/pokemon/poochyena/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 80 8
+0 0 0
+96 64 40
+200 200 144
+160 152 72
+128 88 40
+168 216 248
+192 56 56
+136 40 40
+184 184 184
+64 56 40
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/popplio/overworld.png b/graphics/pokemon/popplio/overworld.png
new file mode 100644
index 000000000000..2c58d75e6424
Binary files /dev/null and b/graphics/pokemon/popplio/overworld.png differ
diff --git a/graphics/pokemon/popplio/overworld_normal.pal b/graphics/pokemon/popplio/overworld_normal.pal
new file mode 100644
index 000000000000..f815c353cdf1
--- /dev/null
+++ b/graphics/pokemon/popplio/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+232 232 248
+115 234 239
+254 136 197
+136 164 238
+72 135 157
+65 121 227
+140 88 68
+49 87 159
+112 80 96
+37 55 90
+16 16 16
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/popplio/overworld_shiny.pal b/graphics/pokemon/popplio/overworld_shiny.pal
new file mode 100644
index 000000000000..c1191ba1065f
--- /dev/null
+++ b/graphics/pokemon/popplio/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+232 232 248
+248 200 232
+254 136 197
+64 64 128
+208 160 168
+104 88 192
+140 88 68
+64 64 128
+112 80 96
+37 55 90
+16 16 16
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/porygon/overworld.png b/graphics/pokemon/porygon/overworld.png
new file mode 100644
index 000000000000..37e9a6349297
Binary files /dev/null and b/graphics/pokemon/porygon/overworld.png differ
diff --git a/graphics/pokemon/porygon/overworld_normal.pal b/graphics/pokemon/porygon/overworld_normal.pal
new file mode 100644
index 000000000000..c14e3e9b530c
--- /dev/null
+++ b/graphics/pokemon/porygon/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 24 48
+208 64 136
+248 152 208
+160 184 200
+232 104 160
+232 232 248
+40 64 72
+0 0 0
+176 48 104
+40 184 192
+80 216 216
+48 136 152
+40 96 96
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/porygon/overworld_shiny.pal b/graphics/pokemon/porygon/overworld_shiny.pal
new file mode 100644
index 000000000000..eab5a782e858
--- /dev/null
+++ b/graphics/pokemon/porygon/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 24 120
+72 128 184
+136 192 240
+160 184 200
+96 176 216
+232 232 248
+104 104 104
+0 0 0
+40 120 176
+248 200 208
+232 232 248
+200 184 192
+152 120 136
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/porygon2/overworld.png b/graphics/pokemon/porygon2/overworld.png
new file mode 100644
index 000000000000..4a89c2234a5b
Binary files /dev/null and b/graphics/pokemon/porygon2/overworld.png differ
diff --git a/graphics/pokemon/porygon2/overworld_normal.pal b/graphics/pokemon/porygon2/overworld_normal.pal
new file mode 100644
index 000000000000..95d5df7259c3
--- /dev/null
+++ b/graphics/pokemon/porygon2/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+112 16 48
+224 80 136
+248 152 208
+16 16 16
+168 40 80
+192 56 96
+184 200 216
+248 248 248
+16 72 120
+40 120 168
+144 232 248
+88 184 216
+64 152 192
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/porygon2/overworld_shiny.pal b/graphics/pokemon/porygon2/overworld_shiny.pal
new file mode 100644
index 000000000000..0067839935e8
--- /dev/null
+++ b/graphics/pokemon/porygon2/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 72 144
+64 192 248
+144 232 248
+16 16 16
+40 120 208
+64 152 248
+184 200 216
+248 248 248
+80 80 80
+120 120 128
+208 208 208
+176 176 176
+160 160 160
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/porygon_z/overworld.png b/graphics/pokemon/porygon_z/overworld.png
new file mode 100644
index 000000000000..88c46e03b284
Binary files /dev/null and b/graphics/pokemon/porygon_z/overworld.png differ
diff --git a/graphics/pokemon/porygon_z/overworld_normal.pal b/graphics/pokemon/porygon_z/overworld_normal.pal
new file mode 100644
index 000000000000..23c2c4b29ed1
--- /dev/null
+++ b/graphics/pokemon/porygon_z/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 24 48
+240 160 168
+0 0 0
+224 96 112
+168 64 104
+248 208 56
+16 64 96
+168 112 48
+64 152 192
+216 144 48
+144 232 248
+88 184 216
+40 120 168
+112 48 80
+0 0 0
diff --git a/graphics/pokemon/porygon_z/overworld_shiny.pal b/graphics/pokemon/porygon_z/overworld_shiny.pal
new file mode 100644
index 000000000000..0648e44ed0a3
--- /dev/null
+++ b/graphics/pokemon/porygon_z/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 64 96
+184 232 248
+0 0 0
+72 168 208
+40 120 168
+248 208 56
+144 80 80
+168 112 48
+208 184 184
+216 144 48
+248 248 248
+224 216 216
+192 160 160
+112 48 80
+0 0 0
diff --git a/graphics/pokemon/primarina/overworld.png b/graphics/pokemon/primarina/overworld.png
new file mode 100644
index 000000000000..8e2ae969b9c4
Binary files /dev/null and b/graphics/pokemon/primarina/overworld.png differ
diff --git a/graphics/pokemon/primarina/overworld_normal.pal b/graphics/pokemon/primarina/overworld_normal.pal
new file mode 100644
index 000000000000..e664e8f732d7
--- /dev/null
+++ b/graphics/pokemon/primarina/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+218 227 230
+138 165 208
+77 171 158
+154 162 167
+207 101 118
+79 93 117
+61 130 121
+31 132 193
+28 91 152
+49 69 83
+64 67 68
+41 67 63
+23 49 65
+83 46 52
+16 16 16
diff --git a/graphics/pokemon/primarina/overworld_shiny.pal b/graphics/pokemon/primarina/overworld_shiny.pal
new file mode 100644
index 000000000000..7615f1ba64e0
--- /dev/null
+++ b/graphics/pokemon/primarina/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+218 227 230
+248 224 240
+248 248 152
+154 162 167
+207 101 118
+79 93 117
+232 200 96
+31 132 193
+28 91 152
+49 69 83
+64 67 68
+41 67 63
+23 49 65
+83 46 52
+16 16 16
diff --git a/graphics/pokemon/primeape/overworld.png b/graphics/pokemon/primeape/overworld.png
new file mode 100644
index 000000000000..16fec225f61f
Binary files /dev/null and b/graphics/pokemon/primeape/overworld.png differ
diff --git a/graphics/pokemon/primeape/overworld_normal.pal b/graphics/pokemon/primeape/overworld_normal.pal
new file mode 100644
index 000000000000..05a7d68a5b16
--- /dev/null
+++ b/graphics/pokemon/primeape/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 56 48
+232 216 136
+208 168 112
+0 0 0
+152 120 96
+176 104 128
+136 104 56
+104 104 104
+176 128 48
+120 40 64
+176 176 208
+240 128 160
+232 232 248
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/primeape/overworld_shiny.pal b/graphics/pokemon/primeape/overworld_shiny.pal
new file mode 100644
index 000000000000..6d10d495dcc0
--- /dev/null
+++ b/graphics/pokemon/primeape/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 56 48
+232 192 136
+208 144 96
+0 0 0
+152 112 80
+176 104 128
+104 104 56
+104 104 104
+136 128 48
+120 40 64
+176 176 208
+240 128 160
+232 232 248
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/prinplup/overworld.png b/graphics/pokemon/prinplup/overworld.png
new file mode 100644
index 000000000000..2ff43dd8cd44
Binary files /dev/null and b/graphics/pokemon/prinplup/overworld.png differ
diff --git a/graphics/pokemon/prinplup/overworld_normal.pal b/graphics/pokemon/prinplup/overworld_normal.pal
new file mode 100644
index 000000000000..283e4354b8d1
--- /dev/null
+++ b/graphics/pokemon/prinplup/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 80 32
+248 192 24
+200 152 0
+48 56 96
+0 0 0
+64 112 200
+120 200 240
+232 232 248
+120 120 120
+40 88 168
+56 112 176
+112 152 184
+168 176 200
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/prinplup/overworld_shiny.pal b/graphics/pokemon/prinplup/overworld_shiny.pal
new file mode 100644
index 000000000000..942301ee8985
--- /dev/null
+++ b/graphics/pokemon/prinplup/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 80 32
+248 200 24
+200 160 0
+40 56 64
+0 0 0
+64 152 208
+136 216 248
+232 232 248
+120 120 120
+32 120 144
+56 152 184
+128 176 192
+168 176 200
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/probopass/overworld.png b/graphics/pokemon/probopass/overworld.png
new file mode 100644
index 000000000000..6f743089640f
Binary files /dev/null and b/graphics/pokemon/probopass/overworld.png differ
diff --git a/graphics/pokemon/probopass/overworld_normal.pal b/graphics/pokemon/probopass/overworld_normal.pal
new file mode 100644
index 000000000000..74c39b3403ab
--- /dev/null
+++ b/graphics/pokemon/probopass/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+160 32 56
+112 24 40
+208 80 72
+0 0 0
+192 56 88
+40 56 96
+64 88 136
+40 48 56
+152 152 152
+80 128 184
+112 176 232
+192 200 216
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/probopass/overworld_shiny.pal b/graphics/pokemon/probopass/overworld_shiny.pal
new file mode 100644
index 000000000000..6c9913690a71
--- /dev/null
+++ b/graphics/pokemon/probopass/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+160 32 56
+112 24 40
+208 80 72
+0 0 0
+192 56 88
+96 80 40
+136 120 64
+40 48 56
+152 152 152
+184 144 80
+232 184 112
+192 200 216
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/psyduck/overworld.png b/graphics/pokemon/psyduck/overworld.png
new file mode 100644
index 000000000000..5544c1942c5b
Binary files /dev/null and b/graphics/pokemon/psyduck/overworld.png differ
diff --git a/graphics/pokemon/psyduck/overworld_normal.pal b/graphics/pokemon/psyduck/overworld_normal.pal
new file mode 100644
index 000000000000..95885505d7d1
--- /dev/null
+++ b/graphics/pokemon/psyduck/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+104 96 64
+168 144 64
+232 184 64
+232 232 248
+248 216 104
+240 232 184
+200 184 136
+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/psyduck/overworld_shiny.pal b/graphics/pokemon/psyduck/overworld_shiny.pal
new file mode 100644
index 000000000000..e4543a27ae83
--- /dev/null
+++ b/graphics/pokemon/psyduck/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+64 88 128
+96 136 168
+152 200 208
+232 232 248
+184 232 240
+208 224 248
+168 176 192
+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/pumpkaboo/overworld.png b/graphics/pokemon/pumpkaboo/overworld.png
new file mode 100644
index 000000000000..67542d25d920
Binary files /dev/null and b/graphics/pokemon/pumpkaboo/overworld.png differ
diff --git a/graphics/pokemon/pumpkaboo/overworld_normal.pal b/graphics/pokemon/pumpkaboo/overworld_normal.pal
new file mode 100644
index 000000000000..f3798e228cf8
--- /dev/null
+++ b/graphics/pokemon/pumpkaboo/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 210 164
+49 33 19
+16 16 16
+88 70 52
+103 90 69
+229 160 73
+240 202 68
+170 150 132
+193 78 51
+219 117 77
+229 159 73
+117 43 29
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/pumpkaboo/overworld_shiny.pal b/graphics/pokemon/pumpkaboo/overworld_shiny.pal
new file mode 100644
index 000000000000..482a93422d14
--- /dev/null
+++ b/graphics/pokemon/pumpkaboo/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 210 164
+34 34 34
+16 16 16
+55 53 53
+78 76 76
+207 219 46
+252 254 116
+170 150 132
+95 58 100
+131 89 136
+207 219 46
+55 33 59
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/pupitar/overworld.png b/graphics/pokemon/pupitar/overworld.png
new file mode 100644
index 000000000000..e9906838a444
Binary files /dev/null and b/graphics/pokemon/pupitar/overworld.png differ
diff --git a/graphics/pokemon/pupitar/overworld_normal.pal b/graphics/pokemon/pupitar/overworld_normal.pal
new file mode 100644
index 000000000000..72e3521e5895
--- /dev/null
+++ b/graphics/pokemon/pupitar/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 160 176
+32 56 72
+136 192 200
+0 0 0
+120 160 176
+56 64 72
+32 40 40
+160 184 200
+184 48 48
+232 232 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/pupitar/overworld_shiny.pal b/graphics/pokemon/pupitar/overworld_shiny.pal
new file mode 100644
index 000000000000..062065a7bede
--- /dev/null
+++ b/graphics/pokemon/pupitar/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 160 176
+112 56 128
+184 176 224
+0 0 0
+144 112 176
+56 64 72
+32 40 40
+160 184 200
+184 48 48
+232 232 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/purrloin/overworld.png b/graphics/pokemon/purrloin/overworld.png
new file mode 100644
index 000000000000..dd0d58266ef6
Binary files /dev/null and b/graphics/pokemon/purrloin/overworld.png differ
diff --git a/graphics/pokemon/purrloin/overworld_normal.pal b/graphics/pokemon/purrloin/overworld_normal.pal
new file mode 100644
index 000000000000..9a452572bc62
--- /dev/null
+++ b/graphics/pokemon/purrloin/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 34 91
+155 106 155
+0 0 0
+120 80 120
+216 112 152
+8 184 96
+176 160 120
+232 232 248
+216 200 136
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/purrloin/overworld_shiny.pal b/graphics/pokemon/purrloin/overworld_shiny.pal
new file mode 100644
index 000000000000..f1c5b242d017
--- /dev/null
+++ b/graphics/pokemon/purrloin/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 48 80
+80 96 128
+0 0 0
+56 72 104
+168 112 224
+216 216 56
+240 232 192
+232 232 248
+216 200 136
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/purugly/overworld.png b/graphics/pokemon/purugly/overworld.png
new file mode 100644
index 000000000000..5260c2e0fa2d
Binary files /dev/null and b/graphics/pokemon/purugly/overworld.png differ
diff --git a/graphics/pokemon/purugly/overworld_normal.pal b/graphics/pokemon/purugly/overworld_normal.pal
new file mode 100644
index 000000000000..06feb916733c
--- /dev/null
+++ b/graphics/pokemon/purugly/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 48 48
+0 0 0
+136 72 184
+80 80 80
+88 56 136
+120 120 120
+64 64 64
+184 72 112
+192 192 192
+176 120 232
+232 232 248
+152 152 152
+248 184 32
+200 104 8
+0 0 0
diff --git a/graphics/pokemon/purugly/overworld_shiny.pal b/graphics/pokemon/purugly/overworld_shiny.pal
new file mode 100644
index 000000000000..9bbc5cd087a9
--- /dev/null
+++ b/graphics/pokemon/purugly/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 48 48
+0 0 0
+88 88 88
+112 72 88
+56 56 56
+168 120 144
+80 48 56
+184 72 112
+192 192 192
+128 128 128
+232 232 248
+152 152 152
+248 184 32
+200 104 8
+0 0 0
diff --git a/graphics/pokemon/pyroar/followerf.png b/graphics/pokemon/pyroar/followerf.png
new file mode 100644
index 000000000000..d6163f0f1c5a
Binary files /dev/null and b/graphics/pokemon/pyroar/followerf.png differ
diff --git a/graphics/pokemon/pyroar/overworld.png b/graphics/pokemon/pyroar/overworld.png
new file mode 100644
index 000000000000..490a2803da1a
Binary files /dev/null and b/graphics/pokemon/pyroar/overworld.png differ
diff --git a/graphics/pokemon/pyroar/overworld_normal.pal b/graphics/pokemon/pyroar/overworld_normal.pal
new file mode 100644
index 000000000000..1cd8a06bba85
--- /dev/null
+++ b/graphics/pokemon/pyroar/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 56 52
+229 177 115
+16 16 16
+253 59 63
+88 32 33
+179 47 50
+113 96 89
+236 186 50
+127 76 39
+194 195 194
+60 142 158
+230 238 248
+174 127 79
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/pyroar/overworld_shiny.pal b/graphics/pokemon/pyroar/overworld_shiny.pal
new file mode 100644
index 000000000000..fd4676b43294
--- /dev/null
+++ b/graphics/pokemon/pyroar/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+140 123 82
+253 241 167
+16 16 16
+253 59 63
+88 32 33
+179 47 50
+191 172 118
+236 186 50
+127 76 39
+194 195 194
+230 84 51
+230 238 248
+237 216 149
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/pyukumuku/overworld.png b/graphics/pokemon/pyukumuku/overworld.png
new file mode 100644
index 000000000000..47450a32e58c
Binary files /dev/null and b/graphics/pokemon/pyukumuku/overworld.png differ
diff --git a/graphics/pokemon/pyukumuku/overworld_normal.pal b/graphics/pokemon/pyukumuku/overworld_normal.pal
new file mode 100644
index 000000000000..e1be008f253a
--- /dev/null
+++ b/graphics/pokemon/pyukumuku/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+214 214 214
+198 198 198
+190 190 190
+250 84 147
+89 81 81
+223 69 120
+69 68 68
+73 67 67
+181 62 178
+152 45 81
+41 39 39
+106 32 57
+71 21 38
+5 5 5
+0 0 0
diff --git a/graphics/pokemon/pyukumuku/overworld_shiny.pal b/graphics/pokemon/pyukumuku/overworld_shiny.pal
new file mode 100644
index 000000000000..a0e5beeb1953
--- /dev/null
+++ b/graphics/pokemon/pyukumuku/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+214 214 214
+198 198 198
+190 190 190
+248 192 88
+64 184 80
+224 144 24
+69 68 68
+64 128 72
+248 192 88
+152 45 81
+32 88 40
+183 122 29
+152 88 24
+5 5 5
+0 0 0
diff --git a/graphics/pokemon/quagsire/overworld.png b/graphics/pokemon/quagsire/overworld.png
new file mode 100644
index 000000000000..21a7622cda57
Binary files /dev/null and b/graphics/pokemon/quagsire/overworld.png differ
diff --git a/graphics/pokemon/quagsire/overworld_normal.pal b/graphics/pokemon/quagsire/overworld_normal.pal
new file mode 100644
index 000000000000..1f5b8b6492c4
--- /dev/null
+++ b/graphics/pokemon/quagsire/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+112 176 240
+32 64 120
+176 112 208
+56 88 80
+32 48 56
+72 144 200
+144 88 184
+56 112 160
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/quagsire/overworld_shiny.pal b/graphics/pokemon/quagsire/overworld_shiny.pal
new file mode 100644
index 000000000000..b192cffcb17e
--- /dev/null
+++ b/graphics/pokemon/quagsire/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+192 152 240
+96 48 80
+128 80 144
+96 48 80
+32 48 56
+160 120 192
+96 72 120
+128 80 136
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/question_mark/overworld.png b/graphics/pokemon/question_mark/overworld.png
new file mode 100644
index 000000000000..6be1e2ddcb7c
Binary files /dev/null and b/graphics/pokemon/question_mark/overworld.png differ
diff --git a/graphics/pokemon/quilava/overworld.png b/graphics/pokemon/quilava/overworld.png
new file mode 100644
index 000000000000..a7ee14f2f9a8
Binary files /dev/null and b/graphics/pokemon/quilava/overworld.png differ
diff --git a/graphics/pokemon/quilava/overworld_normal.pal b/graphics/pokemon/quilava/overworld_normal.pal
new file mode 100644
index 000000000000..4a9b29949c62
--- /dev/null
+++ b/graphics/pokemon/quilava/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+184 48 48
+160 16 24
+216 80 80
+240 200 40
+24 56 72
+0 0 0
+40 112 120
+48 136 152
+32 80 88
+72 64 16
+160 144 80
+232 232 248
+248 208 96
+208 176 88
+0 0 0
diff --git a/graphics/pokemon/quilava/overworld_shiny.pal b/graphics/pokemon/quilava/overworld_shiny.pal
new file mode 100644
index 000000000000..496b34a9fc8b
--- /dev/null
+++ b/graphics/pokemon/quilava/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+184 48 48
+160 16 24
+216 80 80
+240 200 40
+56 32 8
+0 0 0
+168 112 8
+208 144 40
+112 72 8
+72 64 16
+160 144 80
+232 232 248
+248 208 96
+208 176 88
+0 0 0
diff --git a/graphics/pokemon/quilladin/overworld.png b/graphics/pokemon/quilladin/overworld.png
new file mode 100644
index 000000000000..98e4f9e4003d
Binary files /dev/null and b/graphics/pokemon/quilladin/overworld.png differ
diff --git a/graphics/pokemon/quilladin/overworld_normal.pal b/graphics/pokemon/quilladin/overworld_normal.pal
new file mode 100644
index 000000000000..a5ae3da2ae88
--- /dev/null
+++ b/graphics/pokemon/quilladin/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+62 42 36
+16 16 16
+138 97 70
+203 94 73
+104 196 96
+33 65 35
+76 152 82
+184 132 98
+216 168 120
+213 208 203
+112 77 60
+171 164 157
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/quilladin/overworld_shiny.pal b/graphics/pokemon/quilladin/overworld_shiny.pal
new file mode 100644
index 000000000000..16039a627e7d
--- /dev/null
+++ b/graphics/pokemon/quilladin/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+38 24 19
+16 16 16
+51 33 27
+255 238 95
+115 44 39
+73 20 17
+100 35 32
+184 132 98
+216 168 120
+213 208 203
+38 24 19
+171 164 157
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/qwilfish/hisuian/overworld.png b/graphics/pokemon/qwilfish/hisuian/overworld.png
new file mode 100644
index 000000000000..1d318f26ca88
Binary files /dev/null and b/graphics/pokemon/qwilfish/hisuian/overworld.png differ
diff --git a/graphics/pokemon/qwilfish/hisuian/overworld_normal.pal b/graphics/pokemon/qwilfish/hisuian/overworld_normal.pal
new file mode 100644
index 000000000000..bde8015b1ade
--- /dev/null
+++ b/graphics/pokemon/qwilfish/hisuian/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+57 49 24
+90 82 41
+123 32 98
+0 0 0
+189 49 156
+82 82 98
+65 65 74
+238 238 255
+189 180 148
+41 41 49
+156 139 82
+24 24 24
+246 65 213
+131 131 131
+0 0 0
diff --git a/graphics/pokemon/qwilfish/hisuian/overworld_shiny.pal b/graphics/pokemon/qwilfish/hisuian/overworld_shiny.pal
new file mode 100644
index 000000000000..9f03da9c2e5f
--- /dev/null
+++ b/graphics/pokemon/qwilfish/hisuian/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 55 50
+131 123 106
+74 57 131
+0 0 0
+128 92 240
+189 189 189
+148 139 139
+238 238 255
+246 246 238
+41 41 49
+164 156 115
+24 24 24
+98 90 164
+131 131 131
+0 0 0
diff --git a/graphics/pokemon/qwilfish/overworld.png b/graphics/pokemon/qwilfish/overworld.png
new file mode 100644
index 000000000000..a76a8419654b
Binary files /dev/null and b/graphics/pokemon/qwilfish/overworld.png differ
diff --git a/graphics/pokemon/qwilfish/overworld_normal.pal b/graphics/pokemon/qwilfish/overworld_normal.pal
new file mode 100644
index 000000000000..a7fe28c91360
--- /dev/null
+++ b/graphics/pokemon/qwilfish/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 48 104
+32 72 128
+48 104 152
+168 152 64
+0 0 0
+72 144 192
+56 56 24
+192 176 96
+232 232 248
+152 32 56
+248 128 160
+224 208 136
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/qwilfish/overworld_shiny.pal b/graphics/pokemon/qwilfish/overworld_shiny.pal
new file mode 100644
index 000000000000..bbed5bc3e22d
--- /dev/null
+++ b/graphics/pokemon/qwilfish/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 40 64
+104 56 96
+144 72 136
+152 136 200
+0 0 0
+184 96 168
+56 48 80
+184 160 224
+232 232 248
+152 32 56
+248 128 160
+208 192 248
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/raboot/overworld.png b/graphics/pokemon/raboot/overworld.png
new file mode 100644
index 000000000000..8c04c2ed5e0b
Binary files /dev/null and b/graphics/pokemon/raboot/overworld.png differ
diff --git a/graphics/pokemon/raboot/overworld_normal.pal b/graphics/pokemon/raboot/overworld_normal.pal
new file mode 100644
index 000000000000..57709b7029a8
--- /dev/null
+++ b/graphics/pokemon/raboot/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+252 252 252
+40 40 44
+212 212 212
+236 236 236
+180 180 180
+0 0 0
+216 204 56
+248 236 88
+252 244 144
+224 72 8
+184 48 0
+104 28 0
+16 16 16
+52 56 60
+88 92 100
+0 0 0
diff --git a/graphics/pokemon/raboot/overworld_shiny.pal b/graphics/pokemon/raboot/overworld_shiny.pal
new file mode 100644
index 000000000000..0331264f7935
--- /dev/null
+++ b/graphics/pokemon/raboot/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+41 41 41
+172 189 172
+238 238 238
+131 139 131
+0 0 0
+222 205 57
+255 238 90
+255 246 148
+189 74 24
+148 57 16
+74 24 0
+65 65 65
+164 164 164
+222 222 222
+0 0 0
diff --git a/graphics/pokemon/raichu/alolan/overworld.png b/graphics/pokemon/raichu/alolan/overworld.png
new file mode 100644
index 000000000000..c3c5482832f6
Binary files /dev/null and b/graphics/pokemon/raichu/alolan/overworld.png differ
diff --git a/graphics/pokemon/raichu/alolan/overworld_normal.pal b/graphics/pokemon/raichu/alolan/overworld_normal.pal
new file mode 100644
index 000000000000..43905847e390
--- /dev/null
+++ b/graphics/pokemon/raichu/alolan/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+112 105 18
+240 225 38
+0 0 0
+248 192 64
+136 88 24
+150 141 24
+184 127 0
+212 154 23
+112 72 40
+255 239 225
+72 40 24
+78 201 201
+204 188 174
+73 52 4
+187 175 22
diff --git a/graphics/pokemon/raichu/alolan/overworld_shiny.pal b/graphics/pokemon/raichu/alolan/overworld_shiny.pal
new file mode 100644
index 000000000000..1d2eb4fe6178
--- /dev/null
+++ b/graphics/pokemon/raichu/alolan/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+112 105 18
+240 225 38
+0 0 0
+81 54 41
+150 141 24
+151 117 86
+102 68 37
+123 87 56
+112 72 40
+255 239 225
+44 29 27
+78 201 201
+204 188 174
+73 52 4
+187 175 22
diff --git a/graphics/pokemon/raichu/overworld.png b/graphics/pokemon/raichu/overworld.png
new file mode 100644
index 000000000000..19f6f277939f
Binary files /dev/null and b/graphics/pokemon/raichu/overworld.png differ
diff --git a/graphics/pokemon/raichu/overworld_normal.pal b/graphics/pokemon/raichu/overworld_normal.pal
new file mode 100644
index 000000000000..28ccb30b24d7
--- /dev/null
+++ b/graphics/pokemon/raichu/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 40 24
+112 72 40
+0 0 0
+136 88 24
+208 176 24
+248 224 8
+208 120 32
+248 192 64
+248 144 0
+232 232 248
+248 232 208
+120 104 72
+192 176 128
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/raichu/overworld_shiny.pal b/graphics/pokemon/raichu/overworld_shiny.pal
new file mode 100644
index 000000000000..38bc7a623eea
--- /dev/null
+++ b/graphics/pokemon/raichu/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 40 24
+112 72 40
+0 0 0
+112 80 24
+184 176 96
+224 216 176
+200 104 32
+248 168 80
+240 120 40
+232 232 248
+248 232 208
+120 104 72
+192 176 128
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/raikou/overworld.png b/graphics/pokemon/raikou/overworld.png
new file mode 100644
index 000000000000..8936847f4055
Binary files /dev/null and b/graphics/pokemon/raikou/overworld.png differ
diff --git a/graphics/pokemon/raikou/overworld_normal.pal b/graphics/pokemon/raikou/overworld_normal.pal
new file mode 100644
index 000000000000..3db57948b895
--- /dev/null
+++ b/graphics/pokemon/raikou/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 32 96
+160 88 184
+72 88 88
+112 56 144
+0 0 0
+160 184 200
+232 232 248
+88 64 40
+152 200 200
+56 96 96
+48 80 104
+32 56 64
+232 184 64
+184 48 48
+184 120 16
diff --git a/graphics/pokemon/raikou/overworld_shiny.pal b/graphics/pokemon/raikou/overworld_shiny.pal
new file mode 100644
index 000000000000..e460feaf0cf3
--- /dev/null
+++ b/graphics/pokemon/raikou/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 112 48
+240 248 128
+72 88 88
+160 192 32
+0 0 0
+160 184 200
+232 232 248
+88 64 40
+152 200 200
+56 96 96
+48 80 104
+32 56 64
+248 152 64
+184 48 48
+192 112 64
diff --git a/graphics/pokemon/ralts/overworld.png b/graphics/pokemon/ralts/overworld.png
new file mode 100644
index 000000000000..a698d6a274a8
Binary files /dev/null and b/graphics/pokemon/ralts/overworld.png differ
diff --git a/graphics/pokemon/ralts/overworld_normal.pal b/graphics/pokemon/ralts/overworld_normal.pal
new file mode 100644
index 000000000000..21ab5072b0a5
--- /dev/null
+++ b/graphics/pokemon/ralts/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+128 32 56
+240 104 104
+0 0 0
+16 64 32
+184 48 72
+104 200 128
+72 176 88
+40 128 56
+72 72 80
+168 168 176
+200 200 216
+232 232 248
+128 128 144
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/ralts/overworld_shiny.pal b/graphics/pokemon/ralts/overworld_shiny.pal
new file mode 100644
index 000000000000..339ddeebedc6
--- /dev/null
+++ b/graphics/pokemon/ralts/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+128 80 56
+240 160 72
+0 0 0
+16 96 120
+208 104 64
+160 224 200
+88 200 176
+32 144 120
+88 88 64
+168 168 144
+208 208 184
+232 232 248
+128 128 112
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/rampardos/overworld.png b/graphics/pokemon/rampardos/overworld.png
new file mode 100644
index 000000000000..7687dcc26416
Binary files /dev/null and b/graphics/pokemon/rampardos/overworld.png differ
diff --git a/graphics/pokemon/rampardos/overworld_normal.pal b/graphics/pokemon/rampardos/overworld_normal.pal
new file mode 100644
index 000000000000..f7f87300abfc
--- /dev/null
+++ b/graphics/pokemon/rampardos/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 56 80
+64 88 152
+88 128 232
+0 0 0
+56 56 56
+112 112 112
+120 160 248
+224 224 224
+184 184 184
+152 152 152
+232 104 120
+128 64 80
+96 96 96
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/rampardos/overworld_shiny.pal b/graphics/pokemon/rampardos/overworld_shiny.pal
new file mode 100644
index 000000000000..cd4c65b37df2
--- /dev/null
+++ b/graphics/pokemon/rampardos/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 8 32
+168 32 64
+208 72 104
+0 0 0
+56 56 56
+112 112 112
+248 144 176
+224 224 224
+184 184 184
+152 152 152
+232 104 120
+128 64 80
+96 96 96
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/rapidash/galarian/back.png b/graphics/pokemon/rapidash/galarian/back.png
index df065bf1f0e6..59816614d913 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
new file mode 100644
index 000000000000..1271349061dc
Binary files /dev/null and b/graphics/pokemon/rapidash/galarian/overworld.png differ
diff --git a/graphics/pokemon/rapidash/galarian/overworld_normal.pal b/graphics/pokemon/rapidash/galarian/overworld_normal.pal
new file mode 100644
index 000000000000..f317ac33009e
--- /dev/null
+++ b/graphics/pokemon/rapidash/galarian/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 128 128
+18 2 31
+61 9 100
+71 113 111
+107 220 217
+167 235 232
+62 62 62
+121 74 121
+245 243 220
+198 110 198
+255 255 255
+0 0 0
+214 154 214
+226 187 226
+232 232 248
+230 223 160
diff --git a/graphics/pokemon/rapidash/galarian/overworld_shiny.pal b/graphics/pokemon/rapidash/galarian/overworld_shiny.pal
new file mode 100644
index 000000000000..fa425be9b7f7
--- /dev/null
+++ b/graphics/pokemon/rapidash/galarian/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+18 2 31
+0 24 96
+71 113 111
+107 220 217
+167 235 232
+62 62 62
+176 144 32
+245 243 220
+237 237 137
+255 255 255
+0 0 0
+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 c1b04fe6b896..3a76f1576dbf 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
new file mode 100644
index 000000000000..f63e4811b2ee
Binary files /dev/null and b/graphics/pokemon/rapidash/overworld.png differ
diff --git a/graphics/pokemon/rapidash/overworld_normal.pal b/graphics/pokemon/rapidash/overworld_normal.pal
new file mode 100644
index 000000000000..1282bee0c37f
--- /dev/null
+++ b/graphics/pokemon/rapidash/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+160 48 8
+248 160 24
+248 80 32
+72 56 40
+240 224 168
+0 0 0
+184 168 112
+152 56 80
+112 96 64
+232 232 248
+80 96 128
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/rapidash/overworld_shiny.pal b/graphics/pokemon/rapidash/overworld_shiny.pal
new file mode 100644
index 000000000000..bb41fdb95be6
--- /dev/null
+++ b/graphics/pokemon/rapidash/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 80 80
+200 200 200
+160 160 160
+88 72 72
+224 216 192
+0 0 0
+176 168 144
+104 104 104
+120 112 96
+232 232 248
+80 96 128
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/raticate/alolan/overworld.png b/graphics/pokemon/raticate/alolan/overworld.png
new file mode 100644
index 000000000000..36ff136eea6d
Binary files /dev/null and b/graphics/pokemon/raticate/alolan/overworld.png differ
diff --git a/graphics/pokemon/raticate/alolan/overworld_normal.pal b/graphics/pokemon/raticate/alolan/overworld_normal.pal
new file mode 100644
index 000000000000..bec9e9e129a4
--- /dev/null
+++ b/graphics/pokemon/raticate/alolan/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+101 93 91
+185 165 153
+50 56 50
+100 108 96
+74 79 72
+0 0 0
+118 73 73
+152 97 90
+237 221 205
+200 200 200
+232 232 248
+210 45 49
+222 207 199
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/raticate/alolan/overworld_shiny.pal b/graphics/pokemon/raticate/alolan/overworld_shiny.pal
new file mode 100644
index 000000000000..5aba4b921dbe
--- /dev/null
+++ b/graphics/pokemon/raticate/alolan/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+101 93 91
+185 161 153
+62 32 36
+156 79 90
+119 58 65
+0 0 0
+118 73 73
+152 97 90
+237 217 205
+200 200 200
+232 232 248
+210 45 49
+222 207 199
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/raticate/overworld.png b/graphics/pokemon/raticate/overworld.png
new file mode 100644
index 000000000000..4ad2fd4be5e5
Binary files /dev/null and b/graphics/pokemon/raticate/overworld.png differ
diff --git a/graphics/pokemon/raticate/overworld_normal.pal b/graphics/pokemon/raticate/overworld_normal.pal
new file mode 100644
index 000000000000..bc5f7de1ee0c
--- /dev/null
+++ b/graphics/pokemon/raticate/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 64 24
+224 200 168
+224 144 56
+176 96 56
+0 0 0
+184 168 112
+200 200 200
+232 232 248
+136 48 120
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/raticate/overworld_shiny.pal b/graphics/pokemon/raticate/overworld_shiny.pal
new file mode 100644
index 000000000000..abeb7d1f5837
--- /dev/null
+++ b/graphics/pokemon/raticate/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 32 32
+224 200 168
+224 128 80
+192 88 56
+0 0 0
+184 168 112
+200 200 200
+232 232 248
+136 48 120
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/rattata/alolan/overworld.png b/graphics/pokemon/rattata/alolan/overworld.png
new file mode 100644
index 000000000000..8e870e819de6
Binary files /dev/null and b/graphics/pokemon/rattata/alolan/overworld.png differ
diff --git a/graphics/pokemon/rattata/alolan/overworld_normal.pal b/graphics/pokemon/rattata/alolan/overworld_normal.pal
new file mode 100644
index 000000000000..a858ce043308
--- /dev/null
+++ b/graphics/pokemon/rattata/alolan/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+50 56 50
+100 108 96
+74 79 72
+0 0 0
+116 135 146
+184 168 128
+101 119 130
+216 216 216
+232 232 248
+210 45 49
+160 136 80
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/rattata/alolan/overworld_shiny.pal b/graphics/pokemon/rattata/alolan/overworld_shiny.pal
new file mode 100644
index 000000000000..c740854db299
--- /dev/null
+++ b/graphics/pokemon/rattata/alolan/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+62 32 36
+156 79 90
+119 58 65
+0 0 0
+116 135 146
+184 168 128
+101 119 130
+216 216 216
+232 232 248
+210 45 49
+160 136 80
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/rattata/overworld.png b/graphics/pokemon/rattata/overworld.png
new file mode 100644
index 000000000000..b708b3862c9d
Binary files /dev/null and b/graphics/pokemon/rattata/overworld.png differ
diff --git a/graphics/pokemon/rattata/overworld_normal.pal b/graphics/pokemon/rattata/overworld_normal.pal
new file mode 100644
index 000000000000..2c8f5294d428
--- /dev/null
+++ b/graphics/pokemon/rattata/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 48 88
+168 128 216
+104 88 152
+0 0 0
+232 216 176
+184 168 128
+216 216 216
+232 232 248
+224 56 32
+160 136 80
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/rattata/overworld_shiny.pal b/graphics/pokemon/rattata/overworld_shiny.pal
new file mode 100644
index 000000000000..8812ad877a0a
--- /dev/null
+++ b/graphics/pokemon/rattata/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 80 48
+184 168 128
+136 128 88
+0 0 0
+232 216 176
+184 168 128
+216 216 216
+232 232 248
+56 120 128
+160 136 80
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/rayquaza/overworld.png b/graphics/pokemon/rayquaza/overworld.png
new file mode 100644
index 000000000000..7e67f45c4dc3
Binary files /dev/null and b/graphics/pokemon/rayquaza/overworld.png differ
diff --git a/graphics/pokemon/rayquaza/overworld_normal.pal b/graphics/pokemon/rayquaza/overworld_normal.pal
new file mode 100644
index 000000000000..eacddd29f191
--- /dev/null
+++ b/graphics/pokemon/rayquaza/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+88 16 8
+152 24 24
+16 16 16
+48 104 48
+16 64 24
+80 144 80
+120 184 112
+152 224 144
+48 48 48
+144 120 24
+192 160 40
+240 200 48
+200 40 40
+152 168 176
+200 216 240
diff --git a/graphics/pokemon/rayquaza/overworld_shiny.pal b/graphics/pokemon/rayquaza/overworld_shiny.pal
new file mode 100644
index 000000000000..8685b6a397ea
--- /dev/null
+++ b/graphics/pokemon/rayquaza/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+88 16 8
+152 24 24
+16 16 16
+72 72 72
+40 40 40
+112 112 112
+144 144 144
+184 184 184
+48 48 48
+144 120 24
+192 160 40
+240 200 48
+200 40 40
+152 168 176
+200 216 240
diff --git a/graphics/pokemon/regice/overworld.png b/graphics/pokemon/regice/overworld.png
new file mode 100644
index 000000000000..4b3338ce4448
Binary files /dev/null and b/graphics/pokemon/regice/overworld.png differ
diff --git a/graphics/pokemon/regice/overworld_normal.pal b/graphics/pokemon/regice/overworld_normal.pal
new file mode 100644
index 000000000000..5f160680e914
--- /dev/null
+++ b/graphics/pokemon/regice/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 72 96
+0 0 0
+120 168 208
+200 240 248
+96 144 184
+176 224 248
+144 184 224
+64 104 144
+232 232 136
+184 168 88
+216 200 112
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/regice/overworld_shiny.pal b/graphics/pokemon/regice/overworld_shiny.pal
new file mode 100644
index 000000000000..67ea8105891c
--- /dev/null
+++ b/graphics/pokemon/regice/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+24 56 128
+0 0 0
+112 200 232
+208 248 248
+72 168 232
+160 216 248
+136 200 240
+0 96 168
+232 232 136
+184 168 88
+216 200 112
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/regidrago/overworld.png b/graphics/pokemon/regidrago/overworld.png
new file mode 100644
index 000000000000..5999a2cd6e5a
Binary files /dev/null and b/graphics/pokemon/regidrago/overworld.png differ
diff --git a/graphics/pokemon/regidrago/overworld_normal.pal b/graphics/pokemon/regidrago/overworld_normal.pal
new file mode 100644
index 000000000000..514ea98459f5
--- /dev/null
+++ b/graphics/pokemon/regidrago/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+56 80 88
+40 56 64
+224 80 112
+96 24 40
+128 40 56
+16 152 224
+96 136 152
+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/regidrago/overworld_shiny.pal b/graphics/pokemon/regidrago/overworld_shiny.pal
new file mode 100644
index 000000000000..ddf14d710054
--- /dev/null
+++ b/graphics/pokemon/regidrago/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+90 139 180
+65 115 148
+213 49 123
+106 0 49
+156 16 82
+24 197 230
+16 139 164
+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/regieleki/overworld.png b/graphics/pokemon/regieleki/overworld.png
new file mode 100644
index 000000000000..154015c3850f
Binary files /dev/null and b/graphics/pokemon/regieleki/overworld.png differ
diff --git a/graphics/pokemon/regieleki/overworld_normal.pal b/graphics/pokemon/regieleki/overworld_normal.pal
new file mode 100644
index 000000000000..f6bab934e8ca
--- /dev/null
+++ b/graphics/pokemon/regieleki/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+184 136 40
+224 232 24
+72 120 200
+48 80 144
+208 168 8
+248 248 192
+248 152 192
+232 119 176
+0 0 0
+0 0 0
+0 0 0
+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
new file mode 100644
index 000000000000..ae43ceece95b
--- /dev/null
+++ b/graphics/pokemon/regieleki/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+156 164 16
+230 238 49
+222 222 222
+172 164 205
+172 172 106
+238 246 172
+248 152 192
+232 119 176
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/regigigas/overworld.png b/graphics/pokemon/regigigas/overworld.png
new file mode 100644
index 000000000000..d647c41fe977
Binary files /dev/null and b/graphics/pokemon/regigigas/overworld.png differ
diff --git a/graphics/pokemon/regigigas/overworld_normal.pal b/graphics/pokemon/regigigas/overworld_normal.pal
new file mode 100644
index 000000000000..ebdf327b3666
--- /dev/null
+++ b/graphics/pokemon/regigigas/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 80 40
+0 0 0
+168 136 40
+248 208 40
+232 232 248
+40 64 48
+40 104 72
+64 152 72
+80 80 104
+168 168 192
+120 120 136
+208 72 48
+64 160 152
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/regigigas/overworld_shiny.pal b/graphics/pokemon/regigigas/overworld_shiny.pal
new file mode 100644
index 000000000000..7b06ca032c82
--- /dev/null
+++ b/graphics/pokemon/regigigas/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 56 72
+0 0 0
+80 104 120
+136 136 168
+232 232 248
+40 64 48
+40 104 72
+64 152 72
+80 80 104
+168 168 192
+120 120 136
+208 72 48
+64 160 152
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/regirock/overworld.png b/graphics/pokemon/regirock/overworld.png
new file mode 100644
index 000000000000..1a5f11a9e7d1
Binary files /dev/null and b/graphics/pokemon/regirock/overworld.png differ
diff --git a/graphics/pokemon/regirock/overworld_normal.pal b/graphics/pokemon/regirock/overworld_normal.pal
new file mode 100644
index 000000000000..d5d1bcf22ef4
--- /dev/null
+++ b/graphics/pokemon/regirock/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+136 64 40
+96 40 32
+216 112 72
+176 88 56
+176 160 144
+232 216 200
+200 184 168
+136 112 88
+160 144 128
+112 88 80
+56 40 32
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/regirock/overworld_shiny.pal b/graphics/pokemon/regirock/overworld_shiny.pal
new file mode 100644
index 000000000000..f3f27ce168f1
--- /dev/null
+++ b/graphics/pokemon/regirock/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+136 64 40
+96 40 32
+216 112 72
+176 88 56
+160 112 80
+208 144 112
+184 128 96
+96 64 48
+128 88 72
+72 48 32
+56 40 32
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/registeel/overworld.png b/graphics/pokemon/registeel/overworld.png
new file mode 100644
index 000000000000..621acb8d3822
Binary files /dev/null and b/graphics/pokemon/registeel/overworld.png differ
diff --git a/graphics/pokemon/registeel/overworld_normal.pal b/graphics/pokemon/registeel/overworld_normal.pal
new file mode 100644
index 000000000000..02eae9472a63
--- /dev/null
+++ b/graphics/pokemon/registeel/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+32 40 40
+0 0 0
+152 168 176
+184 200 208
+56 64 64
+104 120 120
+80 88 96
+128 144 152
+232 232 248
+96 40 32
+208 104 104
+192 56 56
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/registeel/overworld_shiny.pal b/graphics/pokemon/registeel/overworld_shiny.pal
new file mode 100644
index 000000000000..f4c6cf2f329b
--- /dev/null
+++ b/graphics/pokemon/registeel/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+32 40 40
+0 0 0
+128 176 128
+152 200 144
+56 64 64
+96 112 104
+80 88 96
+112 144 120
+232 232 248
+96 40 32
+208 104 104
+192 56 56
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/relicanth/overworld.png b/graphics/pokemon/relicanth/overworld.png
new file mode 100644
index 000000000000..623b9cfc538c
Binary files /dev/null and b/graphics/pokemon/relicanth/overworld.png differ
diff --git a/graphics/pokemon/relicanth/overworld_normal.pal b/graphics/pokemon/relicanth/overworld_normal.pal
new file mode 100644
index 000000000000..c957ceb36f2b
--- /dev/null
+++ b/graphics/pokemon/relicanth/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 48 40
+0 0 0
+96 64 56
+144 112 96
+56 40 32
+136 120 104
+120 88 72
+168 152 128
+192 176 152
+216 200 168
+176 40 80
+104 96 80
+48 48 64
+72 72 96
+0 0 0
diff --git a/graphics/pokemon/relicanth/overworld_shiny.pal b/graphics/pokemon/relicanth/overworld_shiny.pal
new file mode 100644
index 000000000000..2a233ac7ecf6
--- /dev/null
+++ b/graphics/pokemon/relicanth/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 80 88
+0 0 0
+72 120 128
+136 216 192
+56 40 32
+136 120 104
+104 168 168
+168 152 128
+192 176 152
+216 200 168
+176 40 80
+104 96 80
+48 48 64
+72 72 96
+0 0 0
diff --git a/graphics/pokemon/remoraid/overworld.png b/graphics/pokemon/remoraid/overworld.png
new file mode 100644
index 000000000000..794da41c9da1
Binary files /dev/null and b/graphics/pokemon/remoraid/overworld.png differ
diff --git a/graphics/pokemon/remoraid/overworld_normal.pal b/graphics/pokemon/remoraid/overworld_normal.pal
new file mode 100644
index 000000000000..0d3ce9c54896
--- /dev/null
+++ b/graphics/pokemon/remoraid/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 160 176
+24 56 104
+72 120 160
+0 0 0
+40 80 128
+144 192 232
+112 152 200
+232 232 248
+72 72 72
+192 208 232
+168 184 208
+104 24 80
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/remoraid/overworld_shiny.pal b/graphics/pokemon/remoraid/overworld_shiny.pal
new file mode 100644
index 000000000000..3b31fa91ee75
--- /dev/null
+++ b/graphics/pokemon/remoraid/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+64 40 104
+120 104 168
+0 0 0
+96 72 136
+184 168 232
+152 136 200
+232 232 248
+72 72 72
+216 200 248
+184 168 232
+104 24 80
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/reshiram/overworld.png b/graphics/pokemon/reshiram/overworld.png
new file mode 100644
index 000000000000..1f3f3ec241f4
Binary files /dev/null and b/graphics/pokemon/reshiram/overworld.png differ
diff --git a/graphics/pokemon/reshiram/overworld_normal.pal b/graphics/pokemon/reshiram/overworld_normal.pal
new file mode 100644
index 000000000000..b2377d6e4146
--- /dev/null
+++ b/graphics/pokemon/reshiram/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+95 95 132
+194 194 207
+235 235 245
+62 62 66
+29 38 26
+122 150 164
+187 187 202
+246 202 174
+219 72 46
+78 84 120
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/reshiram/overworld_shiny.pal b/graphics/pokemon/reshiram/overworld_shiny.pal
new file mode 100644
index 000000000000..b5f55ccb80f7
--- /dev/null
+++ b/graphics/pokemon/reshiram/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+95 95 132
+194 194 207
+235 235 245
+62 62 66
+29 38 26
+124 151 165
+187 187 202
+246 202 174
+212 133 69
+84 84 122
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/reuniclus/overworld.png b/graphics/pokemon/reuniclus/overworld.png
new file mode 100644
index 000000000000..d62c0ce78533
Binary files /dev/null and b/graphics/pokemon/reuniclus/overworld.png differ
diff --git a/graphics/pokemon/reuniclus/overworld_normal.pal b/graphics/pokemon/reuniclus/overworld_normal.pal
new file mode 100644
index 000000000000..c6e8b289577a
--- /dev/null
+++ b/graphics/pokemon/reuniclus/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+26 89 56
+55 129 79
+79 172 112
+63 129 87
+208 236 191
+147 182 129
+40 87 55
+248 248 248
+218 87 87
+128 24 72
+155 71 71
+168 64 80
+218 182 112
+191 155 87
+0 0 0
diff --git a/graphics/pokemon/reuniclus/overworld_shiny.pal b/graphics/pokemon/reuniclus/overworld_shiny.pal
new file mode 100644
index 000000000000..800b6b432c3e
--- /dev/null
+++ b/graphics/pokemon/reuniclus/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+48 64 120
+48 104 136
+136 152 208
+96 112 80
+216 224 168
+168 168 120
+48 64 120
+248 248 248
+120 248 240
+128 24 72
+72 168 136
+168 64 80
+160 208 120
+96 176 24
+0 0 0
diff --git a/graphics/pokemon/rhydon/overworld.png b/graphics/pokemon/rhydon/overworld.png
new file mode 100644
index 000000000000..c2dbf7628641
Binary files /dev/null and b/graphics/pokemon/rhydon/overworld.png differ
diff --git a/graphics/pokemon/rhydon/overworld_normal.pal b/graphics/pokemon/rhydon/overworld_normal.pal
new file mode 100644
index 000000000000..cab1a73a81ef
--- /dev/null
+++ b/graphics/pokemon/rhydon/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 64 64
+0 0 0
+184 184 184
+136 136 136
+216 216 216
+64 56 24
+232 232 248
+216 176 88
+136 32 56
+144 120 48
+120 104 56
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/rhydon/overworld_shiny.pal b/graphics/pokemon/rhydon/overworld_shiny.pal
new file mode 100644
index 000000000000..858452f8d4e5
--- /dev/null
+++ b/graphics/pokemon/rhydon/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 96 64
+0 0 0
+200 192 160
+160 160 128
+208 208 208
+64 56 24
+232 232 248
+216 176 88
+136 32 56
+144 120 48
+120 104 56
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/rhyhorn/overworld.png b/graphics/pokemon/rhyhorn/overworld.png
new file mode 100644
index 000000000000..d4d50881c82c
Binary files /dev/null and b/graphics/pokemon/rhyhorn/overworld.png differ
diff --git a/graphics/pokemon/rhyhorn/overworld_normal.pal b/graphics/pokemon/rhyhorn/overworld_normal.pal
new file mode 100644
index 000000000000..192337d89f79
--- /dev/null
+++ b/graphics/pokemon/rhyhorn/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 64 64
+176 176 176
+0 0 0
+144 144 144
+200 200 200
+112 112 112
+232 232 248
+136 32 56
+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/rhyhorn/overworld_shiny.pal b/graphics/pokemon/rhyhorn/overworld_shiny.pal
new file mode 100644
index 000000000000..915c27a76d0b
--- /dev/null
+++ b/graphics/pokemon/rhyhorn/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 40 16
+192 152 128
+0 0 0
+160 112 80
+224 200 184
+120 64 48
+232 232 248
+136 32 56
+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/rhyperior/overworld.png b/graphics/pokemon/rhyperior/overworld.png
new file mode 100644
index 000000000000..a5560186a279
Binary files /dev/null and b/graphics/pokemon/rhyperior/overworld.png differ
diff --git a/graphics/pokemon/rhyperior/overworld_normal.pal b/graphics/pokemon/rhyperior/overworld_normal.pal
new file mode 100644
index 000000000000..cddee3b8faf4
--- /dev/null
+++ b/graphics/pokemon/rhyperior/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+48 48 48
+208 72 32
+144 72 16
+192 192 200
+136 112 104
+64 40 24
+144 144 152
+88 80 72
+112 112 112
+232 232 248
+136 32 56
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/rhyperior/overworld_shiny.pal b/graphics/pokemon/rhyperior/overworld_shiny.pal
new file mode 100644
index 000000000000..89db31d8fadd
--- /dev/null
+++ b/graphics/pokemon/rhyperior/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+48 48 48
+224 184 32
+144 128 64
+192 192 200
+160 160 160
+64 56 24
+144 144 152
+112 112 112
+112 112 112
+232 232 248
+136 32 56
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/ribombee/overworld.png b/graphics/pokemon/ribombee/overworld.png
new file mode 100644
index 000000000000..494759c7481e
Binary files /dev/null and b/graphics/pokemon/ribombee/overworld.png differ
diff --git a/graphics/pokemon/ribombee/overworld_normal.pal b/graphics/pokemon/ribombee/overworld_normal.pal
new file mode 100644
index 000000000000..bb24a1dc50d3
--- /dev/null
+++ b/graphics/pokemon/ribombee/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+255 254 241
+255 231 111
+233 192 151
+201 195 165
+255 186 98
+235 170 65
+135 132 119
+182 125 64
+146 100 34
+112 112 112
+95 95 95
+109 78 55
+59 59 59
+70 52 44
+0 0 0
diff --git a/graphics/pokemon/ribombee/overworld_shiny.pal b/graphics/pokemon/ribombee/overworld_shiny.pal
new file mode 100644
index 000000000000..9ce05aa5c4de
--- /dev/null
+++ b/graphics/pokemon/ribombee/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+255 254 241
+248 168 192
+233 192 151
+201 195 165
+255 186 98
+224 112 136
+135 132 119
+208 56 16
+152 48 32
+112 112 112
+95 95 95
+152 48 32
+59 59 59
+70 52 44
+0 0 0
diff --git a/graphics/pokemon/rillaboom/overworld.png b/graphics/pokemon/rillaboom/overworld.png
new file mode 100644
index 000000000000..3fafecb6fdee
Binary files /dev/null and b/graphics/pokemon/rillaboom/overworld.png differ
diff --git a/graphics/pokemon/rillaboom/overworld_normal.pal b/graphics/pokemon/rillaboom/overworld_normal.pal
new file mode 100644
index 000000000000..fa7f89011f68
--- /dev/null
+++ b/graphics/pokemon/rillaboom/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 156 252
+0 36 16
+76 52 48
+0 92 40
+112 92 76
+160 48 4
+144 88 56
+220 92 48
+128 96 92
+4 128 64
+180 128 76
+192 180 112
+4 4 4
+164 148 132
+228 220 156
+252 248 228
diff --git a/graphics/pokemon/rillaboom/overworld_shiny.pal b/graphics/pokemon/rillaboom/overworld_shiny.pal
new file mode 100644
index 000000000000..01473c16c218
--- /dev/null
+++ b/graphics/pokemon/rillaboom/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+65 74 8
+74 32 32
+139 156 32
+74 32 32
+164 49 0
+148 90 57
+222 90 41
+131 98 90
+172 197 41
+180 131 74
+197 180 115
+16 8 8
+164 148 131
+230 222 156
+255 255 230
diff --git a/graphics/pokemon/riolu/overworld.png b/graphics/pokemon/riolu/overworld.png
new file mode 100644
index 000000000000..f8f36a2e8181
Binary files /dev/null and b/graphics/pokemon/riolu/overworld.png differ
diff --git a/graphics/pokemon/riolu/overworld_normal.pal b/graphics/pokemon/riolu/overworld_normal.pal
new file mode 100644
index 000000000000..88539cd0432c
--- /dev/null
+++ b/graphics/pokemon/riolu/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 88 112
+0 0 0
+72 136 192
+112 184 240
+56 104 144
+96 96 96
+72 72 72
+48 56 88
+232 232 248
+152 24 48
+168 184 200
+120 96 40
+40 40 40
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/riolu/overworld_shiny.pal b/graphics/pokemon/riolu/overworld_shiny.pal
new file mode 100644
index 000000000000..5f57dfa96cb3
--- /dev/null
+++ b/graphics/pokemon/riolu/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+120 96 40
+0 0 0
+232 184 80
+248 216 120
+176 136 56
+88 112 120
+64 96 104
+64 64 48
+232 232 248
+152 24 48
+176 184 192
+8 152 248
+40 40 40
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/rockruff/overworld.png b/graphics/pokemon/rockruff/overworld.png
new file mode 100644
index 000000000000..ee6c33ee007c
Binary files /dev/null and b/graphics/pokemon/rockruff/overworld.png differ
diff --git a/graphics/pokemon/rockruff/overworld_normal.pal b/graphics/pokemon/rockruff/overworld_normal.pal
new file mode 100644
index 000000000000..23b5d4df131a
--- /dev/null
+++ b/graphics/pokemon/rockruff/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+237 236 231
+222 218 210
+180 170 168
+198 158 135
+242 132 210
+160 120 100
+136 116 114
+51 153 235
+104 81 72
+122 79 70
+72 57 51
+16 16 16
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/rockruff/overworld_shiny.pal b/graphics/pokemon/rockruff/overworld_shiny.pal
new file mode 100644
index 000000000000..2d0c2b6a9750
--- /dev/null
+++ b/graphics/pokemon/rockruff/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+237 236 231
+222 218 210
+180 170 168
+144 200 224
+242 132 210
+96 144 200
+136 116 114
+168 184 40
+104 81 72
+122 79 70
+40 80 104
+16 16 16
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/roggenrola/overworld.png b/graphics/pokemon/roggenrola/overworld.png
new file mode 100644
index 000000000000..1c29045f2fa6
Binary files /dev/null and b/graphics/pokemon/roggenrola/overworld.png differ
diff --git a/graphics/pokemon/roggenrola/overworld_normal.pal b/graphics/pokemon/roggenrola/overworld_normal.pal
new file mode 100644
index 000000000000..271c608de630
--- /dev/null
+++ b/graphics/pokemon/roggenrola/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+57 32 24
+0 0 0
+123 90 74
+90 65 49
+24 32 57
+41 57 106
+65 82 139
+90 65 32
+156 115 16
+255 189 74
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/roggenrola/overworld_shiny.pal b/graphics/pokemon/roggenrola/overworld_shiny.pal
new file mode 100644
index 000000000000..ddc8f8d9eb9c
--- /dev/null
+++ b/graphics/pokemon/roggenrola/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 32 32
+0 0 0
+104 88 88
+72 64 56
+40 16 48
+72 40 104
+104 64 136
+88 64 32
+168 96 32
+248 120 32
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/rolycoly/overworld.png b/graphics/pokemon/rolycoly/overworld.png
new file mode 100644
index 000000000000..04aff9995b94
Binary files /dev/null and b/graphics/pokemon/rolycoly/overworld.png differ
diff --git a/graphics/pokemon/rolycoly/overworld_normal.pal b/graphics/pokemon/rolycoly/overworld_normal.pal
new file mode 100644
index 000000000000..972f337c51e2
--- /dev/null
+++ b/graphics/pokemon/rolycoly/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+10 10 10
+50 50 50
+26 25 25
+26 26 26
+114 113 104
+66 65 62
+90 89 83
+34 33 33
+0 0 0
+242 121 37
+224 224 224
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/rolycoly/overworld_shiny.pal b/graphics/pokemon/rolycoly/overworld_shiny.pal
new file mode 100644
index 000000000000..783489d67e64
--- /dev/null
+++ b/graphics/pokemon/rolycoly/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+8 8 8
+49 49 49
+16 32 32
+24 24 24
+123 164 172
+82 123 131
+98 139 156
+49 82 98
+0 0 0
+246 123 32
+230 230 230
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/rookidee/overworld.png b/graphics/pokemon/rookidee/overworld.png
new file mode 100644
index 000000000000..5448710bd845
Binary files /dev/null and b/graphics/pokemon/rookidee/overworld.png differ
diff --git a/graphics/pokemon/rookidee/overworld_normal.pal b/graphics/pokemon/rookidee/overworld_normal.pal
new file mode 100644
index 000000000000..a053bf41d92f
--- /dev/null
+++ b/graphics/pokemon/rookidee/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+46 255 0
+15 30 51
+14 14 14
+36 74 124
+31 31 31
+59 107 169
+0 0 0
+220 46 53
+255 255 255
+153 154 158
+113 114 119
+230 205 74
+244 223 113
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/rookidee/overworld_shiny.pal b/graphics/pokemon/rookidee/overworld_shiny.pal
new file mode 100644
index 000000000000..9187e984b15a
--- /dev/null
+++ b/graphics/pokemon/rookidee/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+46 255 0
+82 74 41
+8 8 8
+172 156 106
+24 24 24
+238 222 156
+0 0 0
+222 41 49
+255 255 255
+156 156 156
+115 115 115
+189 189 180
+238 238 238
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/roselia/overworld.png b/graphics/pokemon/roselia/overworld.png
new file mode 100644
index 000000000000..e648e28ceb08
Binary files /dev/null and b/graphics/pokemon/roselia/overworld.png differ
diff --git a/graphics/pokemon/roselia/overworld_normal.pal b/graphics/pokemon/roselia/overworld_normal.pal
new file mode 100644
index 000000000000..bd11b0e9fb75
--- /dev/null
+++ b/graphics/pokemon/roselia/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+216 216 216
+56 96 16
+32 56 16
+88 144 16
+0 0 0
+160 200 144
+88 16 48
+24 48 88
+144 40 80
+200 64 112
+80 144 208
+40 96 136
+88 144 16
+168 128 56
+232 184 64
+0 0 0
diff --git a/graphics/pokemon/roselia/overworld_shiny.pal b/graphics/pokemon/roselia/overworld_shiny.pal
new file mode 100644
index 000000000000..4049805a68d4
--- /dev/null
+++ b/graphics/pokemon/roselia/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+104 112 16
+64 56 16
+152 152 16
+0 0 0
+216 200 144
+72 16 96
+40 40 40
+136 64 184
+176 112 232
+120 120 128
+64 64 64
+168 152 112
+168 128 56
+232 184 64
+0 0 0
diff --git a/graphics/pokemon/roserade/overworld.png b/graphics/pokemon/roserade/overworld.png
new file mode 100644
index 000000000000..68745987cd89
Binary files /dev/null and b/graphics/pokemon/roserade/overworld.png differ
diff --git a/graphics/pokemon/roserade/overworld_normal.pal b/graphics/pokemon/roserade/overworld_normal.pal
new file mode 100644
index 000000000000..3a723e6f04c3
--- /dev/null
+++ b/graphics/pokemon/roserade/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 208 240
+72 72 72
+200 216 216
+232 232 248
+160 176 176
+0 0 0
+16 64 24
+48 120 40
+144 192 104
+96 168 72
+232 184 64
+200 64 112
+168 128 56
+136 16 72
+80 168 232
+40 104 152
diff --git a/graphics/pokemon/roserade/overworld_shiny.pal b/graphics/pokemon/roserade/overworld_shiny.pal
new file mode 100644
index 000000000000..1d59ab1fedcd
--- /dev/null
+++ b/graphics/pokemon/roserade/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 208 240
+72 72 72
+200 216 216
+232 232 248
+160 176 176
+0 0 0
+56 96 8
+112 144 32
+184 208 88
+144 184 64
+232 184 64
+176 120 176
+168 128 56
+128 80 128
+144 144 144
+40 104 152
diff --git a/graphics/pokemon/rotom/fan/overworld.png b/graphics/pokemon/rotom/fan/overworld.png
new file mode 100644
index 000000000000..a89318dd2c8c
Binary files /dev/null and b/graphics/pokemon/rotom/fan/overworld.png differ
diff --git a/graphics/pokemon/rotom/fan/overworld_normal.pal b/graphics/pokemon/rotom/fan/overworld_normal.pal
new file mode 100644
index 000000000000..b0e952c33ab4
--- /dev/null
+++ b/graphics/pokemon/rotom/fan/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+232 144 64
+248 200 80
+112 56 8
+216 112 48
+240 152 72
+0 0 0
+64 64 64
+184 88 32
+248 248 152
+208 160 48
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/rotom/fan/overworld_shiny.pal b/graphics/pokemon/rotom/fan/overworld_shiny.pal
new file mode 100644
index 000000000000..78bb6043a9d2
--- /dev/null
+++ b/graphics/pokemon/rotom/fan/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+200 128 0
+224 200 88
+128 48 40
+224 72 64
+248 136 136
+0 0 0
+64 64 64
+192 48 48
+248 248 184
+208 160 48
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/rotom/frost/overworld.png b/graphics/pokemon/rotom/frost/overworld.png
new file mode 100644
index 000000000000..7711749deeab
Binary files /dev/null and b/graphics/pokemon/rotom/frost/overworld.png differ
diff --git a/graphics/pokemon/rotom/frost/overworld_normal.pal b/graphics/pokemon/rotom/frost/overworld_normal.pal
new file mode 100644
index 000000000000..fa2c6ac9ec8a
--- /dev/null
+++ b/graphics/pokemon/rotom/frost/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+120 96 160
+192 160 216
+144 72 16
+240 152 72
+216 112 48
+216 216 240
+184 88 32
+72 16 112
+0 0 0
+48 48 48
+88 88 88
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/rotom/frost/overworld_shiny.pal b/graphics/pokemon/rotom/frost/overworld_shiny.pal
new file mode 100644
index 000000000000..8434e1e2fe9b
--- /dev/null
+++ b/graphics/pokemon/rotom/frost/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+200 128 0
+224 200 88
+128 48 40
+240 120 104
+208 72 48
+248 248 184
+192 48 48
+72 16 112
+0 0 0
+48 48 48
+88 88 88
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/rotom/heat/overworld.png b/graphics/pokemon/rotom/heat/overworld.png
new file mode 100644
index 000000000000..0aee2d126a7c
Binary files /dev/null and b/graphics/pokemon/rotom/heat/overworld.png differ
diff --git a/graphics/pokemon/rotom/heat/overworld_normal.pal b/graphics/pokemon/rotom/heat/overworld_normal.pal
new file mode 100644
index 000000000000..51c9ac20c114
--- /dev/null
+++ b/graphics/pokemon/rotom/heat/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+160 40 16
+216 88 48
+144 72 16
+240 152 72
+216 112 48
+248 216 128
+0 0 0
+184 88 32
+128 32 24
+40 40 40
+72 72 72
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/rotom/heat/overworld_shiny.pal b/graphics/pokemon/rotom/heat/overworld_shiny.pal
new file mode 100644
index 000000000000..9cc5f39c9d8f
--- /dev/null
+++ b/graphics/pokemon/rotom/heat/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+200 128 0
+224 200 88
+128 48 40
+240 120 104
+208 72 48
+248 248 184
+0 0 0
+192 48 48
+128 32 24
+40 40 40
+72 72 72
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/rotom/mow/overworld.png b/graphics/pokemon/rotom/mow/overworld.png
new file mode 100644
index 000000000000..37214063158a
Binary files /dev/null and b/graphics/pokemon/rotom/mow/overworld.png differ
diff --git a/graphics/pokemon/rotom/mow/overworld_normal.pal b/graphics/pokemon/rotom/mow/overworld_normal.pal
new file mode 100644
index 000000000000..bbab999de97f
--- /dev/null
+++ b/graphics/pokemon/rotom/mow/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 128 72
+152 216 40
+144 72 16
+216 112 48
+240 152 72
+216 248 136
+0 0 0
+184 88 32
+64 64 64
+112 112 112
+24 88 16
+192 192 224
+232 232 248
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/rotom/mow/overworld_shiny.pal b/graphics/pokemon/rotom/mow/overworld_shiny.pal
new file mode 100644
index 000000000000..58e19f94b155
--- /dev/null
+++ b/graphics/pokemon/rotom/mow/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+200 128 0
+224 200 88
+128 48 40
+224 72 64
+248 136 136
+248 248 184
+0 0 0
+192 48 48
+64 64 64
+112 112 112
+24 88 16
+192 192 224
+232 232 248
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/rotom/overworld.png b/graphics/pokemon/rotom/overworld.png
new file mode 100644
index 000000000000..e7f268974cab
Binary files /dev/null and b/graphics/pokemon/rotom/overworld.png differ
diff --git a/graphics/pokemon/rotom/overworld_normal.pal b/graphics/pokemon/rotom/overworld_normal.pal
new file mode 100644
index 000000000000..178ad55402b9
--- /dev/null
+++ b/graphics/pokemon/rotom/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 128 160
+104 184 216
+144 72 16
+216 112 48
+184 88 32
+240 152 72
+176 232 240
+64 64 64
+16 72 112
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/rotom/overworld_shiny.pal b/graphics/pokemon/rotom/overworld_shiny.pal
new file mode 100644
index 000000000000..34b417b5e271
--- /dev/null
+++ b/graphics/pokemon/rotom/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+200 128 0
+224 200 88
+128 48 40
+224 72 64
+192 48 48
+248 136 136
+248 248 184
+64 64 64
+16 136 216
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/rotom/wash/overworld.png b/graphics/pokemon/rotom/wash/overworld.png
new file mode 100644
index 000000000000..e2cd230ce4e8
Binary files /dev/null and b/graphics/pokemon/rotom/wash/overworld.png differ
diff --git a/graphics/pokemon/rotom/wash/overworld_normal.pal b/graphics/pokemon/rotom/wash/overworld_normal.pal
new file mode 100644
index 000000000000..fadf8c9901d0
--- /dev/null
+++ b/graphics/pokemon/rotom/wash/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 96 160
+104 160 232
+112 56 8
+240 152 72
+216 112 48
+184 88 32
+176 232 240
+16 72 112
+64 64 64
+80 80 80
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/rotom/wash/overworld_shiny.pal b/graphics/pokemon/rotom/wash/overworld_shiny.pal
new file mode 100644
index 000000000000..1c55175837d0
--- /dev/null
+++ b/graphics/pokemon/rotom/wash/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+200 128 0
+224 200 88
+128 48 40
+240 120 104
+208 72 48
+192 48 48
+248 248 184
+16 72 112
+64 64 64
+80 80 80
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/rowlet/overworld.png b/graphics/pokemon/rowlet/overworld.png
new file mode 100644
index 000000000000..62f168d60e1a
Binary files /dev/null and b/graphics/pokemon/rowlet/overworld.png differ
diff --git a/graphics/pokemon/rowlet/overworld_normal.pal b/graphics/pokemon/rowlet/overworld_normal.pal
new file mode 100644
index 000000000000..68cb9b4e0a9c
--- /dev/null
+++ b/graphics/pokemon/rowlet/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+85 66 53
+213 160 121
+16 16 16
+232 232 248
+179 183 184
+189 115 87
+250 171 78
+38 76 38
+112 86 67
+64 164 70
+184 106 14
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/rowlet/overworld_shiny.pal b/graphics/pokemon/rowlet/overworld_shiny.pal
new file mode 100644
index 000000000000..b03438e93820
--- /dev/null
+++ b/graphics/pokemon/rowlet/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 0 0
+40 70 58
+138 204 171
+16 16 16
+232 232 248
+179 183 184
+92 168 138
+228 83 64
+38 76 38
+112 86 67
+54 149 170
+211 54 39
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/rufflet/overworld.png b/graphics/pokemon/rufflet/overworld.png
new file mode 100644
index 000000000000..8f1ea609be4b
Binary files /dev/null and b/graphics/pokemon/rufflet/overworld.png differ
diff --git a/graphics/pokemon/rufflet/overworld_normal.pal b/graphics/pokemon/rufflet/overworld_normal.pal
new file mode 100644
index 000000000000..3bc9910d92da
--- /dev/null
+++ b/graphics/pokemon/rufflet/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+33 55 71
+0 0 0
+164 172 191
+71 63 47
+245 236 208
+182 172 147
+215 129 55
+215 129 55
+95 121 138
+215 129 55
+229 229 247
+215 129 55
+245 236 208
+77 91 99
+152 88 40
diff --git a/graphics/pokemon/rufflet/overworld_shiny.pal b/graphics/pokemon/rufflet/overworld_shiny.pal
new file mode 100644
index 000000000000..247ce5eee7b8
--- /dev/null
+++ b/graphics/pokemon/rufflet/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+128 56 32
+0 0 0
+164 172 191
+71 63 47
+240 232 208
+184 176 152
+240 120 48
+164 63 63
+168 136 88
+247 203 85
+229 229 247
+229 159 11
+245 236 208
+121 104 87
+152 88 40
diff --git a/graphics/pokemon/runerigus/overworld.png b/graphics/pokemon/runerigus/overworld.png
new file mode 100644
index 000000000000..fcaef221b5ef
Binary files /dev/null and b/graphics/pokemon/runerigus/overworld.png differ
diff --git a/graphics/pokemon/runerigus/overworld_normal.pal b/graphics/pokemon/runerigus/overworld_normal.pal
new file mode 100644
index 000000000000..05bb899f0b83
--- /dev/null
+++ b/graphics/pokemon/runerigus/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+40 36 36
+229 224 225
+136 126 127
+194 184 185
+235 93 91
+179 56 54
+0 0 0
+24 24 24
+56 56 56
+87 43 104
+159 83 188
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/runerigus/overworld_shiny.pal b/graphics/pokemon/runerigus/overworld_shiny.pal
new file mode 100644
index 000000000000..7e74fbf2df6a
--- /dev/null
+++ b/graphics/pokemon/runerigus/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+57 49 57
+246 222 246
+164 148 164
+197 180 189
+189 90 164
+106 41 90
+0 0 0
+41 41 49
+65 57 74
+74 156 115
+115 230 172
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/runerigus/shiny.pal b/graphics/pokemon/runerigus/shiny.pal
index 6166d5bfd632..8fd4e72f0644 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/sableye/overworld.png b/graphics/pokemon/sableye/overworld.png
new file mode 100644
index 000000000000..c78ae22e23a9
Binary files /dev/null and b/graphics/pokemon/sableye/overworld.png differ
diff --git a/graphics/pokemon/sableye/overworld_normal.pal b/graphics/pokemon/sableye/overworld_normal.pal
new file mode 100644
index 000000000000..270f480bc9b6
--- /dev/null
+++ b/graphics/pokemon/sableye/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+64 48 104
+88 64 144
+144 128 216
+120 96 176
+48 80 136
+120 160 224
+80 120 184
+232 232 248
+232 88 112
+192 56 56
+24 152 120
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/sableye/overworld_shiny.pal b/graphics/pokemon/sableye/overworld_shiny.pal
new file mode 100644
index 000000000000..a84194b5cd91
--- /dev/null
+++ b/graphics/pokemon/sableye/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+104 56 0
+160 96 32
+248 208 112
+208 152 72
+160 96 32
+248 200 88
+248 168 72
+232 232 248
+24 224 120
+0 160 88
+192 56 56
+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 977f43a6f845..41a88189961d 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 bec9a9254923..44812fa0580a 100644
Binary files a/graphics/pokemon/salamence/mega/front.png and b/graphics/pokemon/salamence/mega/front.png differ
diff --git a/graphics/pokemon/salamence/overworld.png b/graphics/pokemon/salamence/overworld.png
new file mode 100644
index 000000000000..e6a01c24755a
Binary files /dev/null and b/graphics/pokemon/salamence/overworld.png differ
diff --git a/graphics/pokemon/salamence/overworld_normal.pal b/graphics/pokemon/salamence/overworld_normal.pal
new file mode 100644
index 000000000000..da129e141985
--- /dev/null
+++ b/graphics/pokemon/salamence/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 32 32
+216 88 120
+0 0 0
+160 64 64
+48 72 112
+152 200 208
+40 144 168
+192 80 96
+80 184 200
+160 160 176
+232 232 248
+56 56 64
+128 128 144
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/salamence/overworld_shiny.pal b/graphics/pokemon/salamence/overworld_shiny.pal
new file mode 100644
index 000000000000..0a98e224a909
--- /dev/null
+++ b/graphics/pokemon/salamence/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 32 32
+216 88 120
+0 0 0
+160 64 64
+40 88 40
+136 224 152
+48 168 64
+192 80 96
+104 192 112
+160 160 176
+232 232 248
+56 56 64
+128 128 144
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/salandit/overworld.png b/graphics/pokemon/salandit/overworld.png
new file mode 100644
index 000000000000..ecccf533ccba
Binary files /dev/null and b/graphics/pokemon/salandit/overworld.png differ
diff --git a/graphics/pokemon/salandit/overworld_normal.pal b/graphics/pokemon/salandit/overworld_normal.pal
new file mode 100644
index 000000000000..1f5568b9b208
--- /dev/null
+++ b/graphics/pokemon/salandit/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+190 130 230
+243 118 85
+209 78 57
+126 130 130
+100 100 108
+85 90 91
+80 80 88
+62 62 67
+42 42 45
+16 16 16
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/salandit/overworld_shiny.pal b/graphics/pokemon/salandit/overworld_shiny.pal
new file mode 100644
index 000000000000..eaa4f0a9afac
--- /dev/null
+++ b/graphics/pokemon/salandit/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+190 130 230
+243 118 85
+209 78 57
+200 192 200
+100 100 108
+144 136 144
+80 80 88
+62 62 67
+42 42 45
+16 16 16
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/salazzle/overworld.png b/graphics/pokemon/salazzle/overworld.png
new file mode 100644
index 000000000000..8b19f171baf9
Binary files /dev/null and b/graphics/pokemon/salazzle/overworld.png differ
diff --git a/graphics/pokemon/salazzle/overworld_normal.pal b/graphics/pokemon/salazzle/overworld_normal.pal
new file mode 100644
index 000000000000..0b296bdf942d
--- /dev/null
+++ b/graphics/pokemon/salazzle/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+184 157 206
+145 106 170
+109 104 102
+100 100 108
+214 75 124
+190 69 111
+80 80 88
+72 67 66
+86 55 115
+62 62 67
+42 42 45
+44 40 39
+34 34 37
+54 21 33
+0 0 0
diff --git a/graphics/pokemon/salazzle/overworld_shiny.pal b/graphics/pokemon/salazzle/overworld_shiny.pal
new file mode 100644
index 000000000000..0e4f0c07174e
--- /dev/null
+++ b/graphics/pokemon/salazzle/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+184 157 206
+145 106 170
+109 104 102
+200 192 200
+214 75 124
+190 69 111
+144 136 144
+72 67 66
+86 55 115
+112 96 96
+42 42 45
+44 40 39
+34 34 37
+54 21 33
+0 0 0
diff --git a/graphics/pokemon/samurott/hisuian/overworld.png b/graphics/pokemon/samurott/hisuian/overworld.png
new file mode 100644
index 000000000000..7d4db0b87d2c
Binary files /dev/null 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
new file mode 100644
index 000000000000..15854747e9f5
--- /dev/null
+++ b/graphics/pokemon/samurott/hisuian/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+65 65 65
+0 0 0
+238 238 255
+189 189 197
+14 22 48
+189 49 49
+32 24 32
+41 49 74
+106 32 32
+82 65 98
+213 65 82
+123 156 156
+74 106 106
+32 65 156
+164 164 180
diff --git a/graphics/pokemon/samurott/hisuian/overworld_shiny.pal b/graphics/pokemon/samurott/hisuian/overworld_shiny.pal
new file mode 100644
index 000000000000..494b52f0aa8c
--- /dev/null
+++ b/graphics/pokemon/samurott/hisuian/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+65 65 65
+0 0 0
+238 238 246
+189 189 197
+16 24 49
+180 164 156
+84 80 84
+222 213 222
+139 115 106
+238 238 246
+213 65 82
+123 156 156
+74 106 106
+32 65 156
+164 164 180
diff --git a/graphics/pokemon/samurott/overworld.png b/graphics/pokemon/samurott/overworld.png
new file mode 100644
index 000000000000..2cb7655415e0
Binary files /dev/null and b/graphics/pokemon/samurott/overworld.png differ
diff --git a/graphics/pokemon/samurott/overworld_normal.pal b/graphics/pokemon/samurott/overworld_normal.pal
new file mode 100644
index 000000000000..e957723e2c0a
--- /dev/null
+++ b/graphics/pokemon/samurott/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+63 63 63
+112 87 55
+230 219 179
+208 191 112
+164 138 79
+0 0 0
+229 229 247
+191 191 199
+121 155 155
+25 47 87
+16 16 40
+25 79 147
+208 71 87
+117 0 0
+79 104 104
diff --git a/graphics/pokemon/samurott/overworld_shiny.pal b/graphics/pokemon/samurott/overworld_shiny.pal
new file mode 100644
index 000000000000..9ea4641182d9
--- /dev/null
+++ b/graphics/pokemon/samurott/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+152 80 64
+184 112 88
+240 224 224
+216 168 144
+216 152 128
+0 0 0
+248 248 248
+192 192 200
+192 184 128
+32 32 56
+16 16 40
+24 56 96
+208 80 96
+96 96 96
+136 136 88
diff --git a/graphics/pokemon/sandaconda/overworld.png b/graphics/pokemon/sandaconda/overworld.png
new file mode 100644
index 000000000000..812ca3317606
Binary files /dev/null and b/graphics/pokemon/sandaconda/overworld.png differ
diff --git a/graphics/pokemon/sandaconda/overworld_normal.pal b/graphics/pokemon/sandaconda/overworld_normal.pal
new file mode 100644
index 000000000000..aaf6a3d6066a
--- /dev/null
+++ b/graphics/pokemon/sandaconda/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+252 0 200
+0 0 0
+16 16 4
+24 24 16
+52 48 20
+84 60 36
+92 84 36
+120 92 60
+116 108 56
+76 72 72
+168 76 56
+136 212 0
+148 148 140
+160 156 148
+204 200 192
+8 8 4
diff --git a/graphics/pokemon/sandaconda/overworld_shiny.pal b/graphics/pokemon/sandaconda/overworld_shiny.pal
new file mode 100644
index 000000000000..5393b93af8a5
--- /dev/null
+++ b/graphics/pokemon/sandaconda/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+24 32 24
+32 32 32
+82 82 74
+106 98 98
+115 123 106
+139 131 123
+156 156 131
+74 74 65
+90 82 49
+180 180 24
+156 156 131
+164 156 148
+238 230 205
+8 8 8
diff --git a/graphics/pokemon/sandile/anim_front.png b/graphics/pokemon/sandile/anim_front.png
index 24d3545a42c0..ccf8146b3be0 100644
Binary files a/graphics/pokemon/sandile/anim_front.png and b/graphics/pokemon/sandile/anim_front.png differ
diff --git a/graphics/pokemon/sandile/back.png b/graphics/pokemon/sandile/back.png
index 1680947040ab..0bf5c9e3f4df 100644
Binary files a/graphics/pokemon/sandile/back.png and b/graphics/pokemon/sandile/back.png differ
diff --git a/graphics/pokemon/sandile/normal.pal b/graphics/pokemon/sandile/normal.pal
index b079c8061ae0..f428787e3c1e 100644
--- a/graphics/pokemon/sandile/normal.pal
+++ b/graphics/pokemon/sandile/normal.pal
@@ -1,6 +1,6 @@
JASC-PAL
0100
-16
+13
152 208 160
139 115 49
32 32 32
@@ -12,8 +12,5 @@ JASC-PAL
180 180 189
82 82 98
205 115 123
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
+205 115 123
+169 92 99
diff --git a/graphics/pokemon/sandile/overworld.png b/graphics/pokemon/sandile/overworld.png
new file mode 100644
index 000000000000..4f19f9cb1292
Binary files /dev/null and b/graphics/pokemon/sandile/overworld.png differ
diff --git a/graphics/pokemon/sandile/overworld_normal.pal b/graphics/pokemon/sandile/overworld_normal.pal
new file mode 100644
index 000000000000..5656ae68c411
--- /dev/null
+++ b/graphics/pokemon/sandile/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+85 54 0
+117 117 54
+54 54 54
+25 25 54
+185 151 54
+117 117 54
+220 185 117
+85 85 117
+54 54 61
+185 117 117
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/sandile/overworld_shiny.pal b/graphics/pokemon/sandile/overworld_shiny.pal
new file mode 100644
index 000000000000..2eb5b97a0ecb
--- /dev/null
+++ b/graphics/pokemon/sandile/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+56 80 32
+128 144 56
+54 54 54
+25 25 54
+200 200 72
+117 117 54
+224 216 120
+85 85 117
+54 54 61
+64 144 160
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/sandile/shiny.pal b/graphics/pokemon/sandile/shiny.pal
index f92d5f6bd033..b1a758254bbf 100644
--- a/graphics/pokemon/sandile/shiny.pal
+++ b/graphics/pokemon/sandile/shiny.pal
@@ -1,6 +1,6 @@
JASC-PAL
0100
-16
+13
152 208 160
120 136 56
32 32 32
@@ -12,8 +12,5 @@ JASC-PAL
176 168 168
80 80 96
64 144 160
-0 0 0
-0 0 0
-0 0 0
-0 0 0
-0 0 0
+205 115 123
+169 92 99
diff --git a/graphics/pokemon/sandshrew/alolan/overworld.png b/graphics/pokemon/sandshrew/alolan/overworld.png
new file mode 100644
index 000000000000..8b6c58a6699a
Binary files /dev/null and b/graphics/pokemon/sandshrew/alolan/overworld.png differ
diff --git a/graphics/pokemon/sandshrew/alolan/overworld_normal.pal b/graphics/pokemon/sandshrew/alolan/overworld_normal.pal
new file mode 100644
index 000000000000..e348ab85bd3a
--- /dev/null
+++ b/graphics/pokemon/sandshrew/alolan/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+53 78 115
+132 179 206
+182 219 231
+0 0 0
+93 132 155
+16 57 123
+232 232 248
+205 190 133
+254 254 169
+160 160 160
+98 90 74
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/sandshrew/alolan/overworld_shiny.pal b/graphics/pokemon/sandshrew/alolan/overworld_shiny.pal
new file mode 100644
index 000000000000..b9c27badc702
--- /dev/null
+++ b/graphics/pokemon/sandshrew/alolan/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+53 78 115
+132 179 206
+182 219 231
+0 0 0
+93 132 155
+16 57 123
+232 232 248
+58 106 183
+100 151 234
+117 146 193
+30 78 154
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/sandshrew/overworld.png b/graphics/pokemon/sandshrew/overworld.png
new file mode 100644
index 000000000000..cc4652b276b5
Binary files /dev/null and b/graphics/pokemon/sandshrew/overworld.png differ
diff --git a/graphics/pokemon/sandshrew/overworld_normal.pal b/graphics/pokemon/sandshrew/overworld_normal.pal
new file mode 100644
index 000000000000..f6548e630173
--- /dev/null
+++ b/graphics/pokemon/sandshrew/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 64 32
+184 136 40
+216 168 56
+0 0 0
+120 104 88
+32 96 120
+232 232 248
+184 168 136
+224 216 168
+160 160 160
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/sandshrew/overworld_shiny.pal b/graphics/pokemon/sandshrew/overworld_shiny.pal
new file mode 100644
index 000000000000..25eadc3f708b
--- /dev/null
+++ b/graphics/pokemon/sandshrew/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 96 32
+136 152 40
+168 192 56
+0 0 0
+96 112 80
+32 96 120
+232 232 248
+184 168 136
+224 216 168
+160 160 160
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/sandslash/alolan/overworld.png b/graphics/pokemon/sandslash/alolan/overworld.png
new file mode 100644
index 000000000000..aaae1473d5e7
Binary files /dev/null and b/graphics/pokemon/sandslash/alolan/overworld.png differ
diff --git a/graphics/pokemon/sandslash/alolan/overworld_normal.pal b/graphics/pokemon/sandslash/alolan/overworld_normal.pal
new file mode 100644
index 000000000000..ec88d1783795
--- /dev/null
+++ b/graphics/pokemon/sandslash/alolan/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+54 89 112
+167 236 243
+104 192 236
+0 0 0
+173 216 232
+139 168 202
+84 148 186
+1 63 94
+44 138 172
+232 232 248
+240 240 244
+88 88 88
+170 170 196
+152 152 152
+176 176 176
diff --git a/graphics/pokemon/sandslash/alolan/overworld_shiny.pal b/graphics/pokemon/sandslash/alolan/overworld_shiny.pal
new file mode 100644
index 000000000000..d7128629bf69
--- /dev/null
+++ b/graphics/pokemon/sandslash/alolan/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+54 89 112
+167 236 243
+104 192 236
+0 0 0
+137 199 224
+106 148 197
+84 148 186
+1 63 94
+44 138 172
+232 232 248
+71 133 157
+88 88 88
+64 138 164
+71 133 157
+176 176 176
diff --git a/graphics/pokemon/sandslash/overworld.png b/graphics/pokemon/sandslash/overworld.png
new file mode 100644
index 000000000000..efe541d2ada9
Binary files /dev/null and b/graphics/pokemon/sandslash/overworld.png differ
diff --git a/graphics/pokemon/sandslash/overworld_normal.pal b/graphics/pokemon/sandslash/overworld_normal.pal
new file mode 100644
index 000000000000..72ee2e31ef00
--- /dev/null
+++ b/graphics/pokemon/sandslash/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 32 16
+136 96 40
+0 0 0
+224 168 64
+96 64 32
+160 104 32
+200 136 48
+8 40 56
+40 104 128
+232 232 248
+232 224 152
+88 88 88
+152 152 152
+192 160 136
+176 176 176
diff --git a/graphics/pokemon/sandslash/overworld_shiny.pal b/graphics/pokemon/sandslash/overworld_shiny.pal
new file mode 100644
index 000000000000..b78acc2d4e70
--- /dev/null
+++ b/graphics/pokemon/sandslash/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 8 8
+176 40 40
+0 0 0
+192 152 96
+112 8 8
+136 96 64
+168 120 80
+8 40 56
+40 104 128
+232 232 248
+232 224 152
+88 88 88
+152 152 152
+192 160 136
+176 176 176
diff --git a/graphics/pokemon/sandygast/overworld.png b/graphics/pokemon/sandygast/overworld.png
new file mode 100644
index 000000000000..a407e9341c55
Binary files /dev/null and b/graphics/pokemon/sandygast/overworld.png differ
diff --git a/graphics/pokemon/sandygast/overworld_normal.pal b/graphics/pokemon/sandygast/overworld_normal.pal
new file mode 100644
index 000000000000..50ed5787cc41
--- /dev/null
+++ b/graphics/pokemon/sandygast/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+233 228 195
+206 218 227
+204 199 171
+200 112 84
+96 91 78
+89 87 76
+132 47 47
+16 16 16
+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/sandygast/overworld_shiny.pal b/graphics/pokemon/sandygast/overworld_shiny.pal
new file mode 100644
index 000000000000..6bdcf374b68c
--- /dev/null
+++ b/graphics/pokemon/sandygast/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+112 112 112
+206 218 227
+72 72 72
+248 240 80
+96 91 78
+32 32 32
+208 176 0
+16 16 16
+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/sawk/overworld.png b/graphics/pokemon/sawk/overworld.png
new file mode 100644
index 000000000000..8d5bc531cda6
Binary files /dev/null and b/graphics/pokemon/sawk/overworld.png differ
diff --git a/graphics/pokemon/sawk/overworld_normal.pal b/graphics/pokemon/sawk/overworld_normal.pal
new file mode 100644
index 000000000000..8a8a62c1c887
--- /dev/null
+++ b/graphics/pokemon/sawk/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+18 63 87
+71 129 236
+33 33 33
+18 79 147
+55 55 63
+104 164 182
+11 11 11
+172 245 236
+229 229 247
+138 129 121
+95 104 112
+47 95 191
+0 0 0
+47 95 191
+0 0 0
diff --git a/graphics/pokemon/sawk/overworld_shiny.pal b/graphics/pokemon/sawk/overworld_shiny.pal
new file mode 100644
index 000000000000..ccf10150dd39
--- /dev/null
+++ b/graphics/pokemon/sawk/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 48 64
+112 96 232
+33 33 33
+72 64 88
+55 55 63
+168 200 200
+11 11 11
+208 240 232
+229 229 247
+138 129 121
+95 104 112
+80 72 192
+0 0 0
+47 95 191
+0 0 0
diff --git a/graphics/pokemon/sawsbuck/autumn/overworld.png b/graphics/pokemon/sawsbuck/autumn/overworld.png
new file mode 100644
index 000000000000..d846642dd559
Binary files /dev/null and b/graphics/pokemon/sawsbuck/autumn/overworld.png differ
diff --git a/graphics/pokemon/sawsbuck/autumn/overworld_normal.pal b/graphics/pokemon/sawsbuck/autumn/overworld_normal.pal
new file mode 100644
index 000000000000..2af7855b1210
--- /dev/null
+++ b/graphics/pokemon/sawsbuck/autumn/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+169 37 37
+73 23 17
+73 23 17
+98 66 31
+47 13 8
+73 23 17
+153 103 45
+153 103 45
+242 242 246
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/sawsbuck/autumn/overworld_shiny.pal b/graphics/pokemon/sawsbuck/autumn/overworld_shiny.pal
new file mode 100644
index 000000000000..a3ea1c808c99
--- /dev/null
+++ b/graphics/pokemon/sawsbuck/autumn/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+184 56 56
+67 13 11
+128 32 48
+176 104 32
+47 14 9
+128 64 16
+207 124 25
+191 173 88
+233 219 172
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/sawsbuck/overworld.png b/graphics/pokemon/sawsbuck/overworld.png
new file mode 100644
index 000000000000..2fcab6fc3087
Binary files /dev/null and b/graphics/pokemon/sawsbuck/overworld.png differ
diff --git a/graphics/pokemon/sawsbuck/overworld_normal.pal b/graphics/pokemon/sawsbuck/overworld_normal.pal
new file mode 100644
index 000000000000..3fadfc757aa3
--- /dev/null
+++ b/graphics/pokemon/sawsbuck/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+57 17 10
+246 138 169
+174 79 74
+217 177 55
+57 17 10
+109 77 39
+101 18 39
+84 45 24
+217 177 55
+246 138 169
+246 138 169
+84 45 24
+210 183 93
+0 0 0
diff --git a/graphics/pokemon/sawsbuck/overworld_shiny.pal b/graphics/pokemon/sawsbuck/overworld_shiny.pal
new file mode 100644
index 000000000000..75de9f8faf8b
--- /dev/null
+++ b/graphics/pokemon/sawsbuck/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+61 11 5
+247 101 142
+194 54 85
+232 216 160
+54 25 18
+176 104 32
+101 18 39
+128 64 16
+212 134 32
+229 229 247
+247 247 247
+65 32 24
+194 168 101
+0 0 0
diff --git a/graphics/pokemon/sawsbuck/summer/overworld.png b/graphics/pokemon/sawsbuck/summer/overworld.png
new file mode 100644
index 000000000000..7bb026e55df0
Binary files /dev/null and b/graphics/pokemon/sawsbuck/summer/overworld.png differ
diff --git a/graphics/pokemon/sawsbuck/summer/overworld_normal.pal b/graphics/pokemon/sawsbuck/summer/overworld_normal.pal
new file mode 100644
index 000000000000..a742d1bd0e12
--- /dev/null
+++ b/graphics/pokemon/sawsbuck/summer/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+6 97 39
+13 37 25
+205 176 82
+66 13 13
+46 15 9
+98 66 31
+74 37 19
+153 103 45
+242 242 246
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/sawsbuck/summer/overworld_shiny.pal b/graphics/pokemon/sawsbuck/summer/overworld_shiny.pal
new file mode 100644
index 000000000000..4d2a5df53cdc
--- /dev/null
+++ b/graphics/pokemon/sawsbuck/summer/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+8 136 64
+27 81 44
+238 222 164
+74 16 8
+84 35 16
+178 114 49
+128 64 16
+183 167 84
+255 255 255
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/sawsbuck/winter/overworld.png b/graphics/pokemon/sawsbuck/winter/overworld.png
new file mode 100644
index 000000000000..29748fd3e933
Binary files /dev/null and b/graphics/pokemon/sawsbuck/winter/overworld.png differ
diff --git a/graphics/pokemon/sawsbuck/winter/overworld_normal.pal b/graphics/pokemon/sawsbuck/winter/overworld_normal.pal
new file mode 100644
index 000000000000..3e3f00fa16b8
--- /dev/null
+++ b/graphics/pokemon/sawsbuck/winter/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+93 93 93
+54 61 54
+0 0 0
+54 25 18
+220 203 69
+109 77 39
+61 11 5
+85 46 25
+212 134 32
+151 109 61
+247 247 247
+65 32 24
+159 159 159
+194 168 101
+85 39 5
diff --git a/graphics/pokemon/sawsbuck/winter/overworld_shiny.pal b/graphics/pokemon/sawsbuck/winter/overworld_shiny.pal
new file mode 100644
index 000000000000..65d337c96628
--- /dev/null
+++ b/graphics/pokemon/sawsbuck/winter/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+91 87 85
+54 61 54
+0 0 0
+55 21 14
+213 177 62
+128 64 16
+55 21 14
+128 64 16
+176 104 32
+128 64 16
+247 247 247
+55 21 14
+159 159 159
+213 177 62
+85 39 5
diff --git a/graphics/pokemon/scatterbug/overworld.png b/graphics/pokemon/scatterbug/overworld.png
new file mode 100644
index 000000000000..2da700223db7
Binary files /dev/null and b/graphics/pokemon/scatterbug/overworld.png differ
diff --git a/graphics/pokemon/scatterbug/overworld_normal.pal b/graphics/pokemon/scatterbug/overworld_normal.pal
new file mode 100644
index 000000000000..9e04cea7a6b9
--- /dev/null
+++ b/graphics/pokemon/scatterbug/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+54 50 48
+244 246 249
+100 93 88
+148 141 136
+16 16 16
+148 141 136
+212 197 171
+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/scatterbug/overworld_shiny.pal b/graphics/pokemon/scatterbug/overworld_shiny.pal
new file mode 100644
index 000000000000..7b9b22a1bcfd
--- /dev/null
+++ b/graphics/pokemon/scatterbug/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+34 36 36
+64 65 64
+165 166 158
+195 196 192
+16 16 16
+48 49 49
+212 197 171
+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/sceptile/overworld.png b/graphics/pokemon/sceptile/overworld.png
new file mode 100644
index 000000000000..b33a076b3c1f
Binary files /dev/null and b/graphics/pokemon/sceptile/overworld.png differ
diff --git a/graphics/pokemon/sceptile/overworld_normal.pal b/graphics/pokemon/sceptile/overworld_normal.pal
new file mode 100644
index 000000000000..ccaeb5a217fd
--- /dev/null
+++ b/graphics/pokemon/sceptile/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+200 128 216
+40 80 16
+0 0 0
+128 176 72
+160 208 104
+64 88 24
+80 144 48
+152 40 40
+248 216 88
+64 48 8
+120 104 24
+200 160 56
+104 24 24
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/sceptile/overworld_shiny.pal b/graphics/pokemon/sceptile/overworld_shiny.pal
new file mode 100644
index 000000000000..948395176618
--- /dev/null
+++ b/graphics/pokemon/sceptile/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+200 128 216
+24 64 56
+0 0 0
+96 152 128
+136 216 192
+48 88 80
+72 120 112
+192 144 0
+224 96 48
+64 48 8
+104 24 24
+160 56 32
+120 80 32
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/scizor/overworld.png b/graphics/pokemon/scizor/overworld.png
new file mode 100644
index 000000000000..2b88f0e58aad
Binary files /dev/null and b/graphics/pokemon/scizor/overworld.png differ
diff --git a/graphics/pokemon/scizor/overworld_normal.pal b/graphics/pokemon/scizor/overworld_normal.pal
new file mode 100644
index 000000000000..0defd9ccf1fe
--- /dev/null
+++ b/graphics/pokemon/scizor/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 16 8
+160 32 32
+0 0 0
+208 56 56
+80 88 112
+104 112 136
+40 48 64
+184 200 216
+144 152 176
+136 88 0
+232 232 248
+128 24 16
+248 136 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/scizor/overworld_shiny.pal b/graphics/pokemon/scizor/overworld_shiny.pal
new file mode 100644
index 000000000000..bff595c2fe21
--- /dev/null
+++ b/graphics/pokemon/scizor/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 56 8
+144 152 40
+0 0 0
+168 176 56
+72 128 96
+104 152 128
+40 96 64
+184 200 216
+144 184 160
+136 88 0
+232 232 248
+112 120 32
+248 136 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/scolipede/overworld.png b/graphics/pokemon/scolipede/overworld.png
new file mode 100644
index 000000000000..7ecd86201a96
Binary files /dev/null and b/graphics/pokemon/scolipede/overworld.png differ
diff --git a/graphics/pokemon/scolipede/overworld_normal.pal b/graphics/pokemon/scolipede/overworld_normal.pal
new file mode 100644
index 000000000000..1230d642a139
--- /dev/null
+++ b/graphics/pokemon/scolipede/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+68 40 40
+0 0 0
+218 78 126
+151 54 87
+87 40 87
+183 77 204
+151 54 87
+104 104 104
+247 187 0
+136 96 0
+147 97 0
+104 104 104
+79 79 79
+79 79 79
+0 0 0
diff --git a/graphics/pokemon/scolipede/overworld_shiny.pal b/graphics/pokemon/scolipede/overworld_shiny.pal
new file mode 100644
index 000000000000..db1adb121523
--- /dev/null
+++ b/graphics/pokemon/scolipede/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+68 40 40
+0 0 0
+200 40 0
+152 0 0
+72 0 0
+56 184 176
+151 54 87
+48 80 56
+112 184 32
+136 96 0
+75 124 22
+104 104 104
+24 48 24
+79 79 79
+0 0 0
diff --git a/graphics/pokemon/scorbunny/overworld.png b/graphics/pokemon/scorbunny/overworld.png
new file mode 100644
index 000000000000..f10db698d342
Binary files /dev/null and b/graphics/pokemon/scorbunny/overworld.png differ
diff --git a/graphics/pokemon/scorbunny/overworld_normal.pal b/graphics/pokemon/scorbunny/overworld_normal.pal
new file mode 100644
index 000000000000..bbe46b088c5a
--- /dev/null
+++ b/graphics/pokemon/scorbunny/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+44 252 0
+60 60 60
+68 68 68
+136 56 28
+176 52 16
+180 80 48
+208 88 52
+208 96 64
+0 0 0
+228 104 68
+228 168 60
+232 180 88
+212 136 116
+216 216 216
+252 252 252
+232 232 232
diff --git a/graphics/pokemon/scorbunny/overworld_shiny.pal b/graphics/pokemon/scorbunny/overworld_shiny.pal
new file mode 100644
index 000000000000..01f4e1a4c48d
--- /dev/null
+++ b/graphics/pokemon/scorbunny/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+57 57 57
+65 65 65
+106 74 0
+172 123 8
+205 148 16
+246 180 8
+246 180 8
+0 0 0
+213 106 74
+230 172 57
+238 180 90
+255 197 49
+230 222 213
+255 255 255
+255 255 255
diff --git a/graphics/pokemon/scrafty/overworld.png b/graphics/pokemon/scrafty/overworld.png
new file mode 100644
index 000000000000..456a626834bd
Binary files /dev/null and b/graphics/pokemon/scrafty/overworld.png differ
diff --git a/graphics/pokemon/scrafty/overworld_normal.pal b/graphics/pokemon/scrafty/overworld_normal.pal
new file mode 100644
index 000000000000..81481512dbfb
--- /dev/null
+++ b/graphics/pokemon/scrafty/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+123 57 41
+222 41 57
+230 98 115
+0 0 0
+246 123 32
+32 32 32
+197 90 24
+103 85 38
+212 212 212
+246 204 15
+184 152 10
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/scrafty/overworld_shiny.pal b/graphics/pokemon/scrafty/overworld_shiny.pal
new file mode 100644
index 000000000000..63d67c3904ac
--- /dev/null
+++ b/graphics/pokemon/scrafty/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+117 80 33
+216 96 32
+232 128 104
+0 0 0
+240 207 23
+32 32 32
+192 152 24
+84 73 71
+212 212 212
+64 120 56
+85 177 56
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/scraggy/overworld.png b/graphics/pokemon/scraggy/overworld.png
new file mode 100644
index 000000000000..f02244c3a370
Binary files /dev/null and b/graphics/pokemon/scraggy/overworld.png differ
diff --git a/graphics/pokemon/scraggy/overworld_normal.pal b/graphics/pokemon/scraggy/overworld_normal.pal
new file mode 100644
index 000000000000..2d2c68b7f348
--- /dev/null
+++ b/graphics/pokemon/scraggy/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 74 59
+194 38 46
+112 87 5
+255 199 0
+182 147 0
+5 5 5
+204 204 211
+255 245 172
+5 5 5
+45 45 45
+104 74 59
+5 5 5
+5 5 5
+5 5 5
+0 0 0
diff --git a/graphics/pokemon/scraggy/overworld_shiny.pal b/graphics/pokemon/scraggy/overworld_shiny.pal
new file mode 100644
index 000000000000..ab9518eb9931
--- /dev/null
+++ b/graphics/pokemon/scraggy/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 32 72
+163 46 116
+112 87 5
+248 160 0
+192 128 0
+0 0 0
+204 204 211
+193 185 112
+25 25 25
+45 45 45
+104 99 73
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/scyther/overworld.png b/graphics/pokemon/scyther/overworld.png
new file mode 100644
index 000000000000..ed45062aaef5
Binary files /dev/null and b/graphics/pokemon/scyther/overworld.png differ
diff --git a/graphics/pokemon/scyther/overworld_normal.pal b/graphics/pokemon/scyther/overworld_normal.pal
new file mode 100644
index 000000000000..76744263f157
--- /dev/null
+++ b/graphics/pokemon/scyther/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+40 64 32
+152 208 104
+0 0 0
+96 160 64
+80 64 16
+240 216 72
+232 232 248
+176 152 40
+128 128 128
+176 176 200
+176 152 40
+240 216 72
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/scyther/overworld_shiny.pal b/graphics/pokemon/scyther/overworld_shiny.pal
new file mode 100644
index 000000000000..f3bdc007f9cd
--- /dev/null
+++ b/graphics/pokemon/scyther/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+40 64 32
+104 192 16
+0 0 0
+80 144 56
+80 64 16
+240 216 72
+232 232 248
+176 152 40
+128 128 128
+176 176 200
+168 96 72
+240 168 144
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/seadra/overworld.png b/graphics/pokemon/seadra/overworld.png
new file mode 100644
index 000000000000..47179a2b8cee
Binary files /dev/null and b/graphics/pokemon/seadra/overworld.png differ
diff --git a/graphics/pokemon/seadra/overworld_normal.pal b/graphics/pokemon/seadra/overworld_normal.pal
new file mode 100644
index 000000000000..affd77c8f5b7
--- /dev/null
+++ b/graphics/pokemon/seadra/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 80 112
+0 0 0
+120 184 240
+88 144 216
+72 136 168
+64 64 72
+232 232 248
+168 184 208
+248 208 160
+192 160 96
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/seadra/overworld_shiny.pal b/graphics/pokemon/seadra/overworld_shiny.pal
new file mode 100644
index 000000000000..b8760607cf15
--- /dev/null
+++ b/graphics/pokemon/seadra/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+24 56 96
+0 0 0
+120 168 216
+80 136 184
+40 88 136
+64 64 72
+232 232 248
+168 184 208
+248 192 184
+192 136 128
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/seaking/overworld.png b/graphics/pokemon/seaking/overworld.png
new file mode 100644
index 000000000000..2f335978ed8e
Binary files /dev/null and b/graphics/pokemon/seaking/overworld.png differ
diff --git a/graphics/pokemon/seaking/overworld_normal.pal b/graphics/pokemon/seaking/overworld_normal.pal
new file mode 100644
index 000000000000..40f1f30b9820
--- /dev/null
+++ b/graphics/pokemon/seaking/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 48 48
+232 232 248
+96 96 96
+176 176 176
+0 0 0
+112 24 16
+248 80 40
+168 56 48
+248 232 160
+216 160 80
+240 128 160
+192 64 104
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/seaking/overworld_shiny.pal b/graphics/pokemon/seaking/overworld_shiny.pal
new file mode 100644
index 000000000000..4d5bb5463688
--- /dev/null
+++ b/graphics/pokemon/seaking/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+48 48 48
+232 232 248
+96 96 96
+200 192 152
+0 0 0
+128 56 0
+248 136 40
+200 104 24
+248 232 160
+216 160 80
+240 128 160
+192 64 104
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/sealeo/overworld.png b/graphics/pokemon/sealeo/overworld.png
new file mode 100644
index 000000000000..ac18313c679c
Binary files /dev/null and b/graphics/pokemon/sealeo/overworld.png differ
diff --git a/graphics/pokemon/sealeo/overworld_normal.pal b/graphics/pokemon/sealeo/overworld_normal.pal
new file mode 100644
index 000000000000..4f9f3585486e
--- /dev/null
+++ b/graphics/pokemon/sealeo/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 64 104
+136 192 240
+0 0 0
+48 112 144
+80 80 104
+72 152 200
+208 216 232
+128 136 152
+232 232 248
+176 184 208
+184 168 112
+216 208 152
+120 112 80
+80 80 56
+0 0 0
diff --git a/graphics/pokemon/sealeo/overworld_shiny.pal b/graphics/pokemon/sealeo/overworld_shiny.pal
new file mode 100644
index 000000000000..b7da8547101a
--- /dev/null
+++ b/graphics/pokemon/sealeo/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 56 112
+200 160 248
+0 0 0
+128 88 160
+80 80 104
+160 128 208
+208 216 232
+128 136 152
+232 232 248
+176 184 208
+184 168 112
+216 208 152
+120 112 80
+80 80 56
+0 0 0
diff --git a/graphics/pokemon/seedot/overworld.png b/graphics/pokemon/seedot/overworld.png
new file mode 100644
index 000000000000..91fe482aa40f
Binary files /dev/null and b/graphics/pokemon/seedot/overworld.png differ
diff --git a/graphics/pokemon/seedot/overworld_normal.pal b/graphics/pokemon/seedot/overworld_normal.pal
new file mode 100644
index 000000000000..e4f984725d46
--- /dev/null
+++ b/graphics/pokemon/seedot/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+32 32 24
+0 0 0
+128 112 112
+96 88 80
+64 56 56
+176 160 64
+64 64 72
+120 80 40
+232 200 120
+72 48 24
+160 112 48
+136 120 40
+88 72 8
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/seedot/overworld_shiny.pal b/graphics/pokemon/seedot/overworld_shiny.pal
new file mode 100644
index 000000000000..858d0016b710
--- /dev/null
+++ b/graphics/pokemon/seedot/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 64 64
+0 0 0
+168 168 168
+136 136 136
+120 120 120
+176 160 64
+64 64 72
+184 80 40
+232 200 120
+160 48 24
+208 112 48
+136 120 40
+88 72 8
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/seel/overworld.png b/graphics/pokemon/seel/overworld.png
new file mode 100644
index 000000000000..cc9dbad620dc
Binary files /dev/null and b/graphics/pokemon/seel/overworld.png differ
diff --git a/graphics/pokemon/seel/overworld_normal.pal b/graphics/pokemon/seel/overworld_normal.pal
new file mode 100644
index 000000000000..2e2dac942ead
--- /dev/null
+++ b/graphics/pokemon/seel/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 80 120
+48 48 80
+224 224 240
+0 0 0
+160 168 208
+112 88 32
+232 200 96
+96 96 96
+208 152 8
+248 240 184
+232 232 248
+80 32 32
+192 64 88
+224 128 144
+0 0 0
diff --git a/graphics/pokemon/seel/overworld_shiny.pal b/graphics/pokemon/seel/overworld_shiny.pal
new file mode 100644
index 000000000000..88001511f5e3
--- /dev/null
+++ b/graphics/pokemon/seel/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 104 64
+80 80 64
+232 232 232
+0 0 0
+184 184 184
+112 88 32
+232 200 96
+96 96 96
+208 152 8
+248 240 184
+232 232 248
+80 32 32
+192 64 88
+224 128 144
+0 0 0
diff --git a/graphics/pokemon/seismitoad/overworld.png b/graphics/pokemon/seismitoad/overworld.png
new file mode 100644
index 000000000000..780b69f64134
Binary files /dev/null and b/graphics/pokemon/seismitoad/overworld.png differ
diff --git a/graphics/pokemon/seismitoad/overworld_normal.pal b/graphics/pokemon/seismitoad/overworld_normal.pal
new file mode 100644
index 000000000000..ce4ce069ec73
--- /dev/null
+++ b/graphics/pokemon/seismitoad/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+55 55 55
+87 87 87
+0 0 0
+11 55 112
+104 227 199
+11 55 112
+33 95 164
+5 138 208
+71 155 129
+236 79 47
+172 47 25
+33 33 33
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/seismitoad/overworld_shiny.pal b/graphics/pokemon/seismitoad/overworld_shiny.pal
new file mode 100644
index 000000000000..6f97a5d2f4d5
--- /dev/null
+++ b/graphics/pokemon/seismitoad/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+55 55 55
+87 87 87
+0 0 0
+24 56 64
+232 128 56
+11 55 112
+24 112 104
+32 160 136
+176 104 32
+236 79 47
+172 47 25
+33 33 33
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/sentret/overworld.png b/graphics/pokemon/sentret/overworld.png
new file mode 100644
index 000000000000..67e333d913f8
Binary files /dev/null and b/graphics/pokemon/sentret/overworld.png differ
diff --git a/graphics/pokemon/sentret/overworld_normal.pal b/graphics/pokemon/sentret/overworld_normal.pal
new file mode 100644
index 000000000000..26eb876e9487
--- /dev/null
+++ b/graphics/pokemon/sentret/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 72 56
+0 0 0
+168 128 88
+48 32 24
+80 64 56
+72 40 8
+208 168 128
+136 32 48
+160 64 112
+128 96 72
+232 232 248
+216 192 128
+240 224 192
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/sentret/overworld_shiny.pal b/graphics/pokemon/sentret/overworld_shiny.pal
new file mode 100644
index 000000000000..ee55960e3a1c
--- /dev/null
+++ b/graphics/pokemon/sentret/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+128 48 64
+0 0 0
+216 176 128
+48 32 24
+80 64 56
+120 56 8
+240 224 192
+136 32 48
+184 48 64
+176 96 80
+232 232 248
+240 216 160
+248 248 248
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/serperior/overworld.png b/graphics/pokemon/serperior/overworld.png
new file mode 100644
index 000000000000..8cee61f96627
Binary files /dev/null and b/graphics/pokemon/serperior/overworld.png differ
diff --git a/graphics/pokemon/serperior/overworld_normal.pal b/graphics/pokemon/serperior/overworld_normal.pal
new file mode 100644
index 000000000000..3733e903b2b2
--- /dev/null
+++ b/graphics/pokemon/serperior/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 208 232
+12 98 39
+106 115 57
+24 156 74
+236 173 21
+8 16 16
+156 213 156
+236 173 21
+115 164 115
+12 98 39
+236 173 21
+24 156 74
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/serperior/overworld_shiny.pal b/graphics/pokemon/serperior/overworld_shiny.pal
new file mode 100644
index 000000000000..eafc2d1fda8b
--- /dev/null
+++ b/graphics/pokemon/serperior/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 208 232
+40 72 104
+103 114 55
+64 120 152
+207 215 195
+7 14 14
+168 232 104
+185 175 53
+96 166 87
+40 56 48
+212 33 0
+24 156 74
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/servine/overworld.png b/graphics/pokemon/servine/overworld.png
new file mode 100644
index 000000000000..b329b478379c
Binary files /dev/null and b/graphics/pokemon/servine/overworld.png differ
diff --git a/graphics/pokemon/servine/overworld_normal.pal b/graphics/pokemon/servine/overworld_normal.pal
new file mode 100644
index 000000000000..ca1ffe3c1439
--- /dev/null
+++ b/graphics/pokemon/servine/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+14 82 36
+221 195 73
+41 197 74
+31 147 55
+0 0 0
+141 120 48
+251 243 199
+110 64 20
+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/servine/overworld_shiny.pal b/graphics/pokemon/servine/overworld_shiny.pal
new file mode 100644
index 000000000000..ff9fff513358
--- /dev/null
+++ b/graphics/pokemon/servine/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+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
+218 221 187
+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/seviper/overworld.png b/graphics/pokemon/seviper/overworld.png
new file mode 100644
index 000000000000..71095eaa2e57
Binary files /dev/null and b/graphics/pokemon/seviper/overworld.png differ
diff --git a/graphics/pokemon/seviper/overworld_normal.pal b/graphics/pokemon/seviper/overworld_normal.pal
new file mode 100644
index 000000000000..84c7c632905a
--- /dev/null
+++ b/graphics/pokemon/seviper/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+32 40 56
+120 32 32
+112 120 136
+56 64 80
+160 48 56
+0 0 0
+80 88 104
+216 168 72
+168 112 240
+208 72 80
+248 216 88
+152 112 24
+144 88 184
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/seviper/overworld_shiny.pal b/graphics/pokemon/seviper/overworld_shiny.pal
new file mode 100644
index 000000000000..fc90e0c9cb54
--- /dev/null
+++ b/graphics/pokemon/seviper/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+32 40 56
+24 72 112
+112 120 136
+56 64 80
+56 112 168
+0 0 0
+80 88 104
+168 184 56
+208 72 80
+80 152 216
+200 224 88
+128 136 24
+160 48 56
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/sewaddle/overworld.png b/graphics/pokemon/sewaddle/overworld.png
new file mode 100644
index 000000000000..4ea3161e9d43
Binary files /dev/null and b/graphics/pokemon/sewaddle/overworld.png differ
diff --git a/graphics/pokemon/sewaddle/overworld_normal.pal b/graphics/pokemon/sewaddle/overworld_normal.pal
new file mode 100644
index 000000000000..c7d53519986b
--- /dev/null
+++ b/graphics/pokemon/sewaddle/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+88 152 48
+144 200 8
+88 152 48
+152 120 8
+248 208 64
+192 152 64
+152 120 8
+252 252 252
+80 80 80
+224 128 8
+152 120 8
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/sewaddle/overworld_shiny.pal b/graphics/pokemon/sewaddle/overworld_shiny.pal
new file mode 100644
index 000000000000..7b83b6196111
--- /dev/null
+++ b/graphics/pokemon/sewaddle/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+64 152 104
+104 184 144
+88 152 48
+120 64 72
+240 248 168
+200 232 48
+112 128 16
+252 252 252
+80 80 80
+248 88 64
+152 120 8
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/sharpedo/overworld.png b/graphics/pokemon/sharpedo/overworld.png
new file mode 100644
index 000000000000..246fa5118d09
Binary files /dev/null and b/graphics/pokemon/sharpedo/overworld.png differ
diff --git a/graphics/pokemon/sharpedo/overworld_normal.pal b/graphics/pokemon/sharpedo/overworld_normal.pal
new file mode 100644
index 000000000000..f49ff824f150
--- /dev/null
+++ b/graphics/pokemon/sharpedo/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+32 64 104
+88 144 192
+64 112 160
+248 208 80
+32 88 136
+96 80 16
+208 168 48
+56 64 72
+72 80 88
+192 88 112
+232 232 248
+128 136 144
+160 168 176
+112 24 48
diff --git a/graphics/pokemon/sharpedo/overworld_shiny.pal b/graphics/pokemon/sharpedo/overworld_shiny.pal
new file mode 100644
index 000000000000..d4d877c67579
--- /dev/null
+++ b/graphics/pokemon/sharpedo/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+128 32 112
+216 128 216
+192 88 192
+248 208 80
+168 56 152
+96 80 16
+208 168 48
+56 64 72
+72 80 88
+192 88 112
+232 232 248
+128 136 144
+160 168 176
+112 24 48
diff --git a/graphics/pokemon/shaymin/overworld.png b/graphics/pokemon/shaymin/overworld.png
new file mode 100644
index 000000000000..49508c52f187
Binary files /dev/null and b/graphics/pokemon/shaymin/overworld.png differ
diff --git a/graphics/pokemon/shaymin/overworld_normal.pal b/graphics/pokemon/shaymin/overworld_normal.pal
new file mode 100644
index 000000000000..a843f529323f
--- /dev/null
+++ b/graphics/pokemon/shaymin/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 88 56
+160 208 112
+120 152 112
+240 192 0
+240 128 168
+128 128 152
+0 0 0
+192 88 128
+48 152 72
+232 232 248
+168 168 208
+64 64 64
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/shaymin/overworld_shiny.pal b/graphics/pokemon/shaymin/overworld_shiny.pal
new file mode 100644
index 000000000000..2479101b7b3d
--- /dev/null
+++ b/graphics/pokemon/shaymin/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 88 56
+112 208 176
+88 152 144
+240 192 0
+240 128 168
+128 128 152
+0 0 0
+192 88 128
+48 152 72
+232 232 248
+168 168 208
+64 64 64
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/shedinja/overworld.png b/graphics/pokemon/shedinja/overworld.png
new file mode 100644
index 000000000000..15e95f216e58
Binary files /dev/null and b/graphics/pokemon/shedinja/overworld.png differ
diff --git a/graphics/pokemon/shedinja/overworld_normal.pal b/graphics/pokemon/shedinja/overworld_normal.pal
new file mode 100644
index 000000000000..65dd574b7ff3
--- /dev/null
+++ b/graphics/pokemon/shedinja/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+120 112 136
+96 88 112
+232 232 248
+152 144 160
+184 176 192
+104 80 16
+160 136 64
+240 216 120
+200 176 104
+0 0 0
+56 48 72
+64 56 32
+120 104 64
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/shedinja/overworld_shiny.pal b/graphics/pokemon/shedinja/overworld_shiny.pal
new file mode 100644
index 000000000000..ff8142c9c196
--- /dev/null
+++ b/graphics/pokemon/shedinja/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+120 112 96
+96 88 64
+232 232 248
+152 144 120
+184 176 152
+120 112 96
+176 152 80
+248 232 144
+216 200 104
+0 0 0
+56 48 72
+80 72 48
+120 120 88
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/shelgon/overworld.png b/graphics/pokemon/shelgon/overworld.png
new file mode 100644
index 000000000000..a7c73b36dd42
Binary files /dev/null and b/graphics/pokemon/shelgon/overworld.png differ
diff --git a/graphics/pokemon/shelgon/overworld_normal.pal b/graphics/pokemon/shelgon/overworld_normal.pal
new file mode 100644
index 000000000000..6e6b94be6cbb
--- /dev/null
+++ b/graphics/pokemon/shelgon/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 64 80
+0 0 0
+160 160 184
+232 232 248
+184 184 200
+200 200 216
+112 112 136
+88 88 104
+168 128 64
+208 176 96
+128 40 40
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/shelgon/overworld_shiny.pal b/graphics/pokemon/shelgon/overworld_shiny.pal
new file mode 100644
index 000000000000..a7eac336aeb3
--- /dev/null
+++ b/graphics/pokemon/shelgon/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+64 96 64
+0 0 0
+160 184 168
+216 232 240
+184 200 184
+200 224 168
+112 128 112
+88 120 88
+168 128 64
+208 176 96
+128 40 40
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/shellder/overworld.png b/graphics/pokemon/shellder/overworld.png
new file mode 100644
index 000000000000..53176ade7390
Binary files /dev/null and b/graphics/pokemon/shellder/overworld.png differ
diff --git a/graphics/pokemon/shellder/overworld_normal.pal b/graphics/pokemon/shellder/overworld_normal.pal
new file mode 100644
index 000000000000..65fff3e0c348
--- /dev/null
+++ b/graphics/pokemon/shellder/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+56 56 72
+160 160 240
+72 72 160
+128 128 200
+40 40 48
+152 152 152
+72 32 64
+232 232 248
+232 152 216
+192 88 176
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/shellder/overworld_shiny.pal b/graphics/pokemon/shellder/overworld_shiny.pal
new file mode 100644
index 000000000000..a1954294aef6
--- /dev/null
+++ b/graphics/pokemon/shellder/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+72 56 40
+224 112 48
+160 64 40
+200 72 40
+40 40 48
+152 152 152
+88 56 40
+232 232 248
+232 112 104
+192 72 80
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/shellos/east_sea/overworld.png b/graphics/pokemon/shellos/east_sea/overworld.png
new file mode 100644
index 000000000000..b5d39d5e0ffa
Binary files /dev/null and b/graphics/pokemon/shellos/east_sea/overworld.png differ
diff --git a/graphics/pokemon/shellos/east_sea/overworld_normal.pal b/graphics/pokemon/shellos/east_sea/overworld_normal.pal
new file mode 100644
index 000000000000..0735d64706de
--- /dev/null
+++ b/graphics/pokemon/shellos/east_sea/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 210 164
+48 88 104
+232 232 248
+80 136 152
+0 0 0
+72 104 128
+152 152 176
+88 168 208
+248 216 56
+184 152 8
+48 48 48
+128 184 88
+88 144 80
+168 200 88
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/shellos/east_sea/overworld_shiny.pal b/graphics/pokemon/shellos/east_sea/overworld_shiny.pal
new file mode 100644
index 000000000000..abe4ef8f93ef
--- /dev/null
+++ b/graphics/pokemon/shellos/east_sea/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 210 164
+48 88 104
+232 232 248
+88 192 216
+0 0 0
+72 104 128
+152 152 176
+152 208 232
+248 216 56
+184 152 8
+48 48 48
+136 160 112
+96 128 96
+160 168 120
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/shellos/overworld.png b/graphics/pokemon/shellos/overworld.png
new file mode 100644
index 000000000000..6bc7b369704b
Binary files /dev/null and b/graphics/pokemon/shellos/overworld.png differ
diff --git a/graphics/pokemon/shellos/overworld_normal.pal b/graphics/pokemon/shellos/overworld_normal.pal
new file mode 100644
index 000000000000..0cde9c4df9ee
--- /dev/null
+++ b/graphics/pokemon/shellos/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 48 72
+144 32 104
+0 0 0
+248 88 208
+248 136 200
+192 104 144
+248 208 88
+232 232 248
+200 160 0
+48 48 48
+128 128 128
+112 112 112
+184 184 200
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/shellos/overworld_shiny.pal b/graphics/pokemon/shellos/overworld_shiny.pal
new file mode 100644
index 000000000000..2f03c07253c4
--- /dev/null
+++ b/graphics/pokemon/shellos/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 48 72
+152 64 80
+0 0 0
+248 136 112
+248 160 136
+176 96 80
+248 208 88
+232 232 248
+200 160 0
+48 48 48
+128 128 128
+112 112 112
+184 184 200
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/shelmet/overworld.png b/graphics/pokemon/shelmet/overworld.png
new file mode 100644
index 000000000000..e629811e2392
Binary files /dev/null and b/graphics/pokemon/shelmet/overworld.png differ
diff --git a/graphics/pokemon/shelmet/overworld_normal.pal b/graphics/pokemon/shelmet/overworld_normal.pal
new file mode 100644
index 000000000000..0beaae3c83e5
--- /dev/null
+++ b/graphics/pokemon/shelmet/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+90 90 123
+197 197 213
+148 148 172
+41 49 90
+16 16 16
+180 32 74
+98 0 32
+255 74 123
+255 255 255
+57 131 65
+49 49 49
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/shelmet/overworld_shiny.pal b/graphics/pokemon/shelmet/overworld_shiny.pal
new file mode 100644
index 000000000000..b73c23ea13ad
--- /dev/null
+++ b/graphics/pokemon/shelmet/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 64 32
+216 216 208
+176 168 152
+72 64 32
+16 16 16
+184 136 32
+96 88 0
+248 216 72
+152 208 160
+248 72 120
+49 49 49
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/shieldon/overworld.png b/graphics/pokemon/shieldon/overworld.png
new file mode 100644
index 000000000000..4636dda608d6
Binary files /dev/null and b/graphics/pokemon/shieldon/overworld.png differ
diff --git a/graphics/pokemon/shieldon/overworld_normal.pal b/graphics/pokemon/shieldon/overworld_normal.pal
new file mode 100644
index 000000000000..0a5616640e27
--- /dev/null
+++ b/graphics/pokemon/shieldon/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 56 56
+88 88 88
+0 0 0
+72 72 72
+120 120 120
+144 128 72
+192 160 72
+200 200 200
+56 48 40
+232 232 248
+152 208 160
+104 80 48
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/shieldon/overworld_shiny.pal b/graphics/pokemon/shieldon/overworld_shiny.pal
new file mode 100644
index 000000000000..efcf321f7a2b
--- /dev/null
+++ b/graphics/pokemon/shieldon/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 56 56
+104 112 144
+0 0 0
+72 80 128
+136 144 168
+160 152 72
+208 184 72
+200 200 200
+56 48 40
+232 232 248
+168 168 184
+112 96 48
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/shiftry/overworld.png b/graphics/pokemon/shiftry/overworld.png
new file mode 100644
index 000000000000..2716938e6ee4
Binary files /dev/null and b/graphics/pokemon/shiftry/overworld.png differ
diff --git a/graphics/pokemon/shiftry/overworld_normal.pal b/graphics/pokemon/shiftry/overworld_normal.pal
new file mode 100644
index 000000000000..43fe40217d64
--- /dev/null
+++ b/graphics/pokemon/shiftry/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+80 80 88
+64 40 8
+160 176 184
+0 0 0
+232 232 248
+96 64 32
+160 112 48
+136 96 40
+128 136 144
+160 136 64
+232 200 120
+32 56 8
+96 136 8
+144 208 16
+0 0 0
diff --git a/graphics/pokemon/shiftry/overworld_shiny.pal b/graphics/pokemon/shiftry/overworld_shiny.pal
new file mode 100644
index 000000000000..e4ea6e4dcac1
--- /dev/null
+++ b/graphics/pokemon/shiftry/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+152 104 32
+80 8 8
+248 216 112
+0 0 0
+232 232 248
+160 48 8
+200 112 48
+184 96 40
+208 176 72
+160 136 64
+232 200 120
+64 56 8
+128 136 8
+184 208 16
+0 0 0
diff --git a/graphics/pokemon/shiinotic/overworld.png b/graphics/pokemon/shiinotic/overworld.png
new file mode 100644
index 000000000000..2b23c62508fb
Binary files /dev/null and b/graphics/pokemon/shiinotic/overworld.png differ
diff --git a/graphics/pokemon/shiinotic/overworld_normal.pal b/graphics/pokemon/shiinotic/overworld_normal.pal
new file mode 100644
index 000000000000..aeab30565748
--- /dev/null
+++ b/graphics/pokemon/shiinotic/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+231 231 231
+201 206 157
+244 180 200
+183 183 183
+178 182 116
+171 176 79
+238 141 170
+171 160 151
+199 134 195
+186 127 182
+175 116 171
+182 111 132
+104 106 66
+114 65 111
+18 18 18
diff --git a/graphics/pokemon/shiinotic/overworld_shiny.pal b/graphics/pokemon/shiinotic/overworld_shiny.pal
new file mode 100644
index 000000000000..d75a86a783f8
--- /dev/null
+++ b/graphics/pokemon/shiinotic/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+231 231 231
+201 206 157
+152 72 64
+183 183 183
+178 182 116
+171 176 79
+192 112 88
+171 160 151
+248 208 80
+232 160 16
+168 88 24
+152 72 64
+104 106 66
+114 65 111
+18 18 18
diff --git a/graphics/pokemon/shinx/overworld.png b/graphics/pokemon/shinx/overworld.png
new file mode 100644
index 000000000000..698799abd398
Binary files /dev/null and b/graphics/pokemon/shinx/overworld.png differ
diff --git a/graphics/pokemon/shinx/overworld_normal.pal b/graphics/pokemon/shinx/overworld_normal.pal
new file mode 100644
index 000000000000..5b1d63fcc4cb
--- /dev/null
+++ b/graphics/pokemon/shinx/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 88 40
+224 184 24
+184 144 32
+0 0 0
+64 64 64
+144 184 232
+112 160 216
+80 120 184
+48 80 112
+88 88 88
+208 80 64
+232 232 248
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/shinx/overworld_shiny.pal b/graphics/pokemon/shinx/overworld_shiny.pal
new file mode 100644
index 000000000000..60ee66dc55e1
--- /dev/null
+++ b/graphics/pokemon/shinx/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+144 64 16
+248 144 24
+200 104 16
+0 0 0
+64 64 64
+248 200 24
+248 184 24
+200 128 32
+104 88 40
+88 88 88
+208 80 64
+232 232 248
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/shroodle/back.png b/graphics/pokemon/shroodle/back.png
index ffecfe183c73..3bb3cb4a581c 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 38dac9194a00..aa6410070ef2 100755
Binary files a/graphics/pokemon/shroodle/front.png and b/graphics/pokemon/shroodle/front.png differ
diff --git a/graphics/pokemon/shroodle/shiny.pal b/graphics/pokemon/shroodle/shiny.pal
index bb3f9a6a7da9..67046e31cf43 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/shroomish/overworld.png b/graphics/pokemon/shroomish/overworld.png
new file mode 100644
index 000000000000..3443ccc814b7
Binary files /dev/null and b/graphics/pokemon/shroomish/overworld.png differ
diff --git a/graphics/pokemon/shroomish/overworld_normal.pal b/graphics/pokemon/shroomish/overworld_normal.pal
new file mode 100644
index 000000000000..1af76d8bba51
--- /dev/null
+++ b/graphics/pokemon/shroomish/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+72 64 48
+0 0 0
+192 160 128
+224 200 144
+144 128 88
+104 104 72
+120 176 88
+80 136 64
+48 88 40
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/shroomish/overworld_shiny.pal b/graphics/pokemon/shroomish/overworld_shiny.pal
new file mode 100644
index 000000000000..56d66604d4b5
--- /dev/null
+++ b/graphics/pokemon/shroomish/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+72 64 48
+0 0 0
+192 160 128
+224 200 144
+144 128 88
+104 104 72
+224 96 48
+184 64 48
+128 16 16
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/shuckle/overworld.png b/graphics/pokemon/shuckle/overworld.png
new file mode 100644
index 000000000000..0a4fb153ffc7
Binary files /dev/null and b/graphics/pokemon/shuckle/overworld.png differ
diff --git a/graphics/pokemon/shuckle/overworld_normal.pal b/graphics/pokemon/shuckle/overworld_normal.pal
new file mode 100644
index 000000000000..1f206bc10185
--- /dev/null
+++ b/graphics/pokemon/shuckle/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+112 96 32
+160 136 48
+240 216 80
+200 176 64
+0 0 0
+88 24 16
+72 56 56
+160 32 32
+200 168 152
+232 208 200
+208 56 56
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/shuckle/overworld_shiny.pal b/graphics/pokemon/shuckle/overworld_shiny.pal
new file mode 100644
index 000000000000..a1966e08d74d
--- /dev/null
+++ b/graphics/pokemon/shuckle/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+112 96 32
+160 136 48
+240 216 80
+200 176 64
+0 0 0
+0 56 104
+72 56 56
+40 128 200
+200 168 152
+232 208 200
+64 160 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/shuppet/overworld.png b/graphics/pokemon/shuppet/overworld.png
new file mode 100644
index 000000000000..5aa4529e3576
Binary files /dev/null and b/graphics/pokemon/shuppet/overworld.png differ
diff --git a/graphics/pokemon/shuppet/overworld_normal.pal b/graphics/pokemon/shuppet/overworld_normal.pal
new file mode 100644
index 000000000000..e5daac6903b6
--- /dev/null
+++ b/graphics/pokemon/shuppet/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 48 64
+0 0 0
+128 128 160
+160 160 192
+64 72 96
+96 104 128
+48 80 152
+80 128 200
+200 160 48
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/shuppet/overworld_shiny.pal b/graphics/pokemon/shuppet/overworld_shiny.pal
new file mode 100644
index 000000000000..18c6d9659ee6
--- /dev/null
+++ b/graphics/pokemon/shuppet/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 48 64
+0 0 0
+104 136 208
+152 176 216
+56 72 112
+80 104 160
+48 80 152
+80 128 200
+200 160 48
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/sigilyph/overworld.png b/graphics/pokemon/sigilyph/overworld.png
new file mode 100644
index 000000000000..3f2805407073
Binary files /dev/null and b/graphics/pokemon/sigilyph/overworld.png differ
diff --git a/graphics/pokemon/sigilyph/overworld_normal.pal b/graphics/pokemon/sigilyph/overworld_normal.pal
new file mode 100644
index 000000000000..95d6d5cb63db
--- /dev/null
+++ b/graphics/pokemon/sigilyph/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+33 112 129
+72 70 22
+7 7 7
+63 164 227
+171 92 25
+255 191 5
+40 40 40
+192 192 203
+47 155 63
+0 0 0
+0 0 0
+0 0 0
+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
new file mode 100644
index 000000000000..24e47afc05e9
--- /dev/null
+++ b/graphics/pokemon/sigilyph/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+203 38 19
+90 63 20
+7 7 7
+248 136 0
+192 224 88
+40 40 40
+209 88 56
+128 152 40
+192 192 203
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/silcoon/overworld.png b/graphics/pokemon/silcoon/overworld.png
new file mode 100644
index 000000000000..1b6bbbede8f6
Binary files /dev/null and b/graphics/pokemon/silcoon/overworld.png differ
diff --git a/graphics/pokemon/silcoon/overworld_normal.pal b/graphics/pokemon/silcoon/overworld_normal.pal
new file mode 100644
index 000000000000..efcb71b5a491
--- /dev/null
+++ b/graphics/pokemon/silcoon/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+128 128 136
+184 184 168
+224 224 208
+80 80 80
+0 0 0
+240 104 104
+128 32 56
+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/silcoon/overworld_shiny.pal b/graphics/pokemon/silcoon/overworld_shiny.pal
new file mode 100644
index 000000000000..5eecbf6bee0e
--- /dev/null
+++ b/graphics/pokemon/silcoon/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+192 136 56
+248 192 64
+248 248 168
+168 96 0
+0 0 0
+80 176 224
+0 104 128
+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/silicobra/overworld.png b/graphics/pokemon/silicobra/overworld.png
new file mode 100644
index 000000000000..6f6141d0e162
Binary files /dev/null and b/graphics/pokemon/silicobra/overworld.png differ
diff --git a/graphics/pokemon/silicobra/overworld_normal.pal b/graphics/pokemon/silicobra/overworld_normal.pal
new file mode 100644
index 000000000000..a249569ebe3b
--- /dev/null
+++ b/graphics/pokemon/silicobra/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+24 21 13
+109 98 60
+55 54 47
+45 46 35
+163 151 107
+253 255 229
+172 164 117
+83 79 54
+184 186 159
+0 0 0
+139 213 2
+24 24 24
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/silicobra/overworld_shiny.pal b/graphics/pokemon/silicobra/overworld_shiny.pal
new file mode 100644
index 000000000000..cd220f278a5f
--- /dev/null
+++ b/graphics/pokemon/silicobra/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+16 16 8
+74 82 49
+49 49 41
+41 41 32
+123 131 98
+255 255 230
+139 123 106
+65 57 41
+189 189 156
+0 0 0
+205 205 16
+24 24 24
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/silvally/overworld.png b/graphics/pokemon/silvally/overworld.png
new file mode 100644
index 000000000000..0325d6ec78d7
Binary files /dev/null and b/graphics/pokemon/silvally/overworld.png differ
diff --git a/graphics/pokemon/silvally/overworld_normal.pal b/graphics/pokemon/silvally/overworld_normal.pal
new file mode 100644
index 000000000000..3861e5602c8a
--- /dev/null
+++ b/graphics/pokemon/silvally/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+254 254 254
+228 231 237
+200 200 210
+175 175 190
+147 159 158
+122 122 122
+55 120 82
+72 103 165
+86 89 105
+230 79 94
+103 88 84
+71 61 59
+46 41 95
+40 34 32
+0 0 0
diff --git a/graphics/pokemon/silvally/overworld_shiny.pal b/graphics/pokemon/silvally/overworld_shiny.pal
new file mode 100644
index 000000000000..df2e346bf99b
--- /dev/null
+++ b/graphics/pokemon/silvally/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+254 254 254
+255 243 187
+200 200 210
+210 196 89
+147 159 158
+122 122 122
+55 120 82
+72 103 165
+86 89 105
+29 182 148
+103 88 84
+71 61 59
+46 41 95
+40 34 32
+0 0 0
diff --git a/graphics/pokemon/simipour/overworld.png b/graphics/pokemon/simipour/overworld.png
new file mode 100644
index 000000000000..ba9643720509
Binary files /dev/null and b/graphics/pokemon/simipour/overworld.png differ
diff --git a/graphics/pokemon/simipour/overworld_normal.pal b/graphics/pokemon/simipour/overworld_normal.pal
new file mode 100644
index 000000000000..45ec377628c5
--- /dev/null
+++ b/graphics/pokemon/simipour/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+0 57 115
+16 106 139
+0 57 115
+32 139 164
+41 180 222
+156 230 238
+115 82 32
+255 205 123
+232 232 248
+205 164 90
+57 57 57
+82 82 82
+164 123 57
+197 197 197
diff --git a/graphics/pokemon/simipour/overworld_shiny.pal b/graphics/pokemon/simipour/overworld_shiny.pal
new file mode 100644
index 000000000000..c0d4ea4132dd
--- /dev/null
+++ b/graphics/pokemon/simipour/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+0 57 115
+64 56 136
+48 32 96
+80 88 168
+88 112 208
+128 176 232
+115 82 32
+255 205 123
+232 232 248
+205 164 90
+57 57 57
+82 82 82
+164 123 57
+197 197 197
diff --git a/graphics/pokemon/simisage/overworld.png b/graphics/pokemon/simisage/overworld.png
new file mode 100644
index 000000000000..0d36ec8a09e3
Binary files /dev/null and b/graphics/pokemon/simisage/overworld.png differ
diff --git a/graphics/pokemon/simisage/overworld_normal.pal b/graphics/pokemon/simisage/overworld_normal.pal
new file mode 100644
index 000000000000..d4e3004f0b45
--- /dev/null
+++ b/graphics/pokemon/simisage/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+24 74 41
+24 164 82
+8 115 49
+255 205 123
+205 164 90
+0 0 0
+131 205 156
+232 232 248
+156 156 156
+96 96 96
+115 82 32
+164 123 57
+82 82 82
+24 74 41
+0 0 0
diff --git a/graphics/pokemon/simisage/overworld_shiny.pal b/graphics/pokemon/simisage/overworld_shiny.pal
new file mode 100644
index 000000000000..6cea125c471a
--- /dev/null
+++ b/graphics/pokemon/simisage/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+24 48 40
+24 112 80
+8 80 48
+255 205 123
+205 164 90
+0 0 0
+72 168 104
+232 232 248
+156 156 156
+96 96 96
+115 82 32
+164 123 57
+82 82 82
+24 74 41
+0 0 0
diff --git a/graphics/pokemon/simisear/overworld.png b/graphics/pokemon/simisear/overworld.png
new file mode 100644
index 000000000000..d978281b6b2f
Binary files /dev/null and b/graphics/pokemon/simisear/overworld.png differ
diff --git a/graphics/pokemon/simisear/overworld_normal.pal b/graphics/pokemon/simisear/overworld_normal.pal
new file mode 100644
index 000000000000..f37d994461e0
--- /dev/null
+++ b/graphics/pokemon/simisear/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+123 49 49
+230 82 65
+0 0 0
+189 65 57
+246 148 65
+232 232 248
+96 96 96
+205 164 90
+255 205 123
+115 82 32
+164 123 57
+82 82 82
+156 156 156
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/simisear/overworld_shiny.pal b/graphics/pokemon/simisear/overworld_shiny.pal
new file mode 100644
index 000000000000..6eb29dc49117
--- /dev/null
+++ b/graphics/pokemon/simisear/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 24 32
+232 40 64
+0 0 0
+160 32 48
+228 154 56
+207 207 218
+101 83 55
+228 154 56
+228 154 56
+101 83 55
+213 89 62
+101 83 55
+207 207 218
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/sinistea/overworld.png b/graphics/pokemon/sinistea/overworld.png
new file mode 100644
index 000000000000..b1457cb38cab
Binary files /dev/null and b/graphics/pokemon/sinistea/overworld.png differ
diff --git a/graphics/pokemon/sinistea/overworld_normal.pal b/graphics/pokemon/sinistea/overworld_normal.pal
new file mode 100644
index 000000000000..f226a8837d3f
--- /dev/null
+++ b/graphics/pokemon/sinistea/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+252 252 252
+88 52 104
+148 92 172
+152 112 8
+124 72 144
+248 212 120
+0 0 0
+244 184 44
+72 172 184
+60 144 156
+128 196 204
+104 104 120
+240 240 240
+208 208 212
+248 212 120
+208 208 212
diff --git a/graphics/pokemon/sinistea/overworld_shiny.pal b/graphics/pokemon/sinistea/overworld_shiny.pal
new file mode 100644
index 000000000000..4066a1c8843c
--- /dev/null
+++ b/graphics/pokemon/sinistea/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+252 252 252
+90 49 106
+148 90 172
+156 115 8
+123 74 148
+255 213 123
+0 0 0
+246 189 41
+222 131 189
+172 90 139
+238 189 230
+106 106 123
+246 246 246
+213 213 213
+255 213 123
+213 213 213
diff --git a/graphics/pokemon/sirfetchd/overworld.png b/graphics/pokemon/sirfetchd/overworld.png
new file mode 100644
index 000000000000..2209cb768675
Binary files /dev/null and b/graphics/pokemon/sirfetchd/overworld.png differ
diff --git a/graphics/pokemon/sirfetchd/overworld_normal.pal b/graphics/pokemon/sirfetchd/overworld_normal.pal
new file mode 100644
index 000000000000..162bc674725c
--- /dev/null
+++ b/graphics/pokemon/sirfetchd/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+252 28 0
+20 72 52
+88 80 80
+28 108 76
+96 96 92
+8 12 4
+160 124 56
+104 148 44
+176 144 40
+136 192 56
+248 200 48
+132 132 104
+164 164 152
+164 164 152
+228 228 224
+228 228 224
diff --git a/graphics/pokemon/sirfetchd/overworld_shiny.pal b/graphics/pokemon/sirfetchd/overworld_shiny.pal
new file mode 100644
index 000000000000..2516e98d6630
--- /dev/null
+++ b/graphics/pokemon/sirfetchd/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 8 0
+74 74 74
+24 106 74
+98 90 24
+0 8 0
+164 123 57
+106 148 41
+180 156 49
+139 197 57
+255 205 49
+131 131 106
+189 180 148
+180 156 49
+230 230 222
+246 222 106
diff --git a/graphics/pokemon/sizzlipede/overworld.png b/graphics/pokemon/sizzlipede/overworld.png
new file mode 100644
index 000000000000..e1c3f8257ab6
Binary files /dev/null and b/graphics/pokemon/sizzlipede/overworld.png differ
diff --git a/graphics/pokemon/sizzlipede/overworld_normal.pal b/graphics/pokemon/sizzlipede/overworld_normal.pal
new file mode 100644
index 000000000000..9a9cad6db9e8
--- /dev/null
+++ b/graphics/pokemon/sizzlipede/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+252 252 252
+80 12 12
+240 124 112
+148 40 40
+24 12 12
+212 64 68
+64 44 36
+196 192 32
+236 236 84
+132 72 72
+100 44 40
+108 72 16
+240 176 72
+116 84 76
+180 124 32
+0 0 0
diff --git a/graphics/pokemon/sizzlipede/overworld_shiny.pal b/graphics/pokemon/sizzlipede/overworld_shiny.pal
new file mode 100644
index 000000000000..2c99aa2e875e
--- /dev/null
+++ b/graphics/pokemon/sizzlipede/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+252 252 252
+82 8 8
+246 123 115
+148 41 41
+24 41 41
+213 65 65
+65 115 115
+197 197 32
+238 238 82
+131 74 74
+98 41 41
+106 74 16
+246 180 74
+90 156 156
+180 123 32
+0 0 0
diff --git a/graphics/pokemon/skarmory/overworld.png b/graphics/pokemon/skarmory/overworld.png
new file mode 100644
index 000000000000..f09f7d41fe34
Binary files /dev/null and b/graphics/pokemon/skarmory/overworld.png differ
diff --git a/graphics/pokemon/skarmory/overworld_normal.pal b/graphics/pokemon/skarmory/overworld_normal.pal
new file mode 100644
index 000000000000..929f7e42fff1
--- /dev/null
+++ b/graphics/pokemon/skarmory/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+32 48 104
+208 232 248
+0 0 0
+152 176 216
+72 0 16
+200 56 88
+120 144 192
+64 96 152
+160 24 48
+248 208 96
+200 168 16
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/skarmory/overworld_shiny.pal b/graphics/pokemon/skarmory/overworld_shiny.pal
new file mode 100644
index 000000000000..10a924fe94a3
--- /dev/null
+++ b/graphics/pokemon/skarmory/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+32 48 104
+232 232 216
+0 0 0
+192 192 176
+40 88 8
+128 200 88
+152 144 136
+104 104 88
+96 160 48
+248 208 96
+200 168 16
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/skiddo/overworld.png b/graphics/pokemon/skiddo/overworld.png
new file mode 100644
index 000000000000..8a765ad7adea
Binary files /dev/null and b/graphics/pokemon/skiddo/overworld.png differ
diff --git a/graphics/pokemon/skiddo/overworld_normal.pal b/graphics/pokemon/skiddo/overworld_normal.pal
new file mode 100644
index 000000000000..24e13e74795b
--- /dev/null
+++ b/graphics/pokemon/skiddo/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+27 32 28
+118 113 110
+27 32 28
+166 158 152
+16 16 16
+152 123 104
+107 88 75
+62 52 46
+253 251 248
+35 75 49
+25 163 75
+196 192 189
+30 120 63
+255 108 11
+143 67 41
diff --git a/graphics/pokemon/skiddo/overworld_shiny.pal b/graphics/pokemon/skiddo/overworld_shiny.pal
new file mode 100644
index 000000000000..df7b94e4957e
--- /dev/null
+++ b/graphics/pokemon/skiddo/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+145 124 56
+194 161 49
+27 32 28
+225 189 70
+16 16 16
+251 232 216
+220 192 168
+158 132 110
+253 251 248
+108 144 42
+185 226 67
+218 217 216
+139 174 51
+255 108 11
+143 67 41
diff --git a/graphics/pokemon/skiploom/overworld.png b/graphics/pokemon/skiploom/overworld.png
new file mode 100644
index 000000000000..2da705ffcc09
Binary files /dev/null and b/graphics/pokemon/skiploom/overworld.png differ
diff --git a/graphics/pokemon/skiploom/overworld_normal.pal b/graphics/pokemon/skiploom/overworld_normal.pal
new file mode 100644
index 000000000000..dfe268481643
--- /dev/null
+++ b/graphics/pokemon/skiploom/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+168 120 8
+120 80 8
+232 192 24
+248 216 80
+184 200 224
+0 0 0
+232 232 248
+40 112 8
+128 192 80
+184 216 120
+64 152 32
+184 48 176
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/skiploom/overworld_shiny.pal b/graphics/pokemon/skiploom/overworld_shiny.pal
new file mode 100644
index 000000000000..f96d249c3447
--- /dev/null
+++ b/graphics/pokemon/skiploom/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+160 128 8
+120 88 8
+200 168 24
+232 192 32
+184 200 224
+0 0 0
+232 232 248
+120 48 96
+200 128 168
+224 160 216
+184 88 144
+248 104 24
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/skitty/overworld.png b/graphics/pokemon/skitty/overworld.png
new file mode 100644
index 000000000000..7c1d5ebadd41
Binary files /dev/null and b/graphics/pokemon/skitty/overworld.png differ
diff --git a/graphics/pokemon/skitty/overworld_normal.pal b/graphics/pokemon/skitty/overworld_normal.pal
new file mode 100644
index 000000000000..d4f33d46f5e5
--- /dev/null
+++ b/graphics/pokemon/skitty/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+128 104 72
+248 224 128
+96 56 56
+176 80 88
+248 136 152
+0 0 0
+56 56 88
+208 160 72
+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/skitty/overworld_shiny.pal b/graphics/pokemon/skitty/overworld_shiny.pal
new file mode 100644
index 000000000000..73758858995f
--- /dev/null
+++ b/graphics/pokemon/skitty/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+128 104 72
+248 224 128
+96 40 32
+184 64 32
+248 128 112
+0 0 0
+56 56 88
+208 160 72
+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/skorupi/overworld.png b/graphics/pokemon/skorupi/overworld.png
new file mode 100644
index 000000000000..4d18b9792098
Binary files /dev/null and b/graphics/pokemon/skorupi/overworld.png differ
diff --git a/graphics/pokemon/skorupi/overworld_normal.pal b/graphics/pokemon/skorupi/overworld_normal.pal
new file mode 100644
index 000000000000..e2c4b4a2b246
--- /dev/null
+++ b/graphics/pokemon/skorupi/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+56 56 80
+232 232 248
+72 72 144
+88 96 176
+176 184 192
+120 128 136
+120 128 208
+152 160 224
+40 160 152
+32 120 112
+24 192 176
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/skorupi/overworld_shiny.pal b/graphics/pokemon/skorupi/overworld_shiny.pal
new file mode 100644
index 000000000000..91068d4fcbcc
--- /dev/null
+++ b/graphics/pokemon/skorupi/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+120 0 0
+232 232 248
+152 24 24
+184 56 48
+176 184 192
+120 128 136
+216 80 80
+248 112 104
+40 160 152
+32 120 112
+24 192 176
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/skrelp/overworld.png b/graphics/pokemon/skrelp/overworld.png
new file mode 100644
index 000000000000..91f44f48517b
Binary files /dev/null and b/graphics/pokemon/skrelp/overworld.png differ
diff --git a/graphics/pokemon/skrelp/overworld_normal.pal b/graphics/pokemon/skrelp/overworld_normal.pal
new file mode 100644
index 000000000000..8b443bbb0ff6
--- /dev/null
+++ b/graphics/pokemon/skrelp/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+144 200 152
+54 33 27
+16 16 16
+131 87 62
+109 67 49
+92 51 38
+84 135 150
+173 98 156
+54 33 27
+222 148 200
+253 95 98
+121 202 213
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/skrelp/overworld_shiny.pal b/graphics/pokemon/skrelp/overworld_shiny.pal
new file mode 100644
index 000000000000..09ce52e87467
--- /dev/null
+++ b/graphics/pokemon/skrelp/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+144 200 152
+95 17 17
+16 16 16
+194 65 65
+163 41 41
+128 26 26
+84 135 150
+105 134 179
+56 103 118
+148 173 212
+253 95 98
+121 202 213
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/skuntank/overworld.png b/graphics/pokemon/skuntank/overworld.png
new file mode 100644
index 000000000000..fc2ba61d2adb
Binary files /dev/null and b/graphics/pokemon/skuntank/overworld.png differ
diff --git a/graphics/pokemon/skuntank/overworld_normal.pal b/graphics/pokemon/skuntank/overworld_normal.pal
new file mode 100644
index 000000000000..487055f4155b
--- /dev/null
+++ b/graphics/pokemon/skuntank/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+104 48 112
+232 216 144
+40 40 40
+184 160 96
+136 88 144
+64 48 64
+88 80 48
+160 40 32
+112 112 112
+192 96 64
+184 184 200
+232 232 248
+232 208 96
+0 0 0
diff --git a/graphics/pokemon/skuntank/overworld_shiny.pal b/graphics/pokemon/skuntank/overworld_shiny.pal
new file mode 100644
index 000000000000..64bff7c8e3e0
--- /dev/null
+++ b/graphics/pokemon/skuntank/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+152 24 64
+232 216 144
+112 0 40
+184 160 96
+208 64 104
+64 48 64
+88 80 48
+160 40 32
+112 112 112
+192 96 64
+184 184 200
+232 232 248
+232 208 96
+0 0 0
diff --git a/graphics/pokemon/skwovet/overworld.png b/graphics/pokemon/skwovet/overworld.png
new file mode 100644
index 000000000000..5b20b7b61f43
Binary files /dev/null and b/graphics/pokemon/skwovet/overworld.png differ
diff --git a/graphics/pokemon/skwovet/overworld_normal.pal b/graphics/pokemon/skwovet/overworld_normal.pal
new file mode 100644
index 000000000000..7a3a222f145a
--- /dev/null
+++ b/graphics/pokemon/skwovet/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 29 0
+19 17 15
+0 0 0
+77 72 64
+105 98 88
+51 42 29
+142 123 98
+173 153 128
+201 183 161
+226 145 83
+169 162 151
+215 209 199
+255 255 255
+255 173 109
+239 239 239
+0 0 0
diff --git a/graphics/pokemon/skwovet/overworld_shiny.pal b/graphics/pokemon/skwovet/overworld_shiny.pal
new file mode 100644
index 000000000000..b830f20f26a8
--- /dev/null
+++ b/graphics/pokemon/skwovet/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 29 0
+49 16 24
+0 0 0
+106 41 49
+164 65 90
+82 49 49
+164 98 106
+197 139 148
+230 180 189
+230 148 82
+172 164 148
+213 213 197
+255 255 255
+255 172 106
+238 238 238
+0 0 0
diff --git a/graphics/pokemon/slaking/overworld.png b/graphics/pokemon/slaking/overworld.png
new file mode 100644
index 000000000000..2d739781e399
Binary files /dev/null and b/graphics/pokemon/slaking/overworld.png differ
diff --git a/graphics/pokemon/slaking/overworld_normal.pal b/graphics/pokemon/slaking/overworld_normal.pal
new file mode 100644
index 000000000000..1e263bb16aff
--- /dev/null
+++ b/graphics/pokemon/slaking/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 72 88
+232 232 248
+192 192 208
+0 0 0
+144 136 152
+96 72 72
+200 176 152
+216 200 160
+144 120 96
+72 56 40
+128 104 88
+168 128 104
+120 56 72
+208 112 136
+168 80 104
diff --git a/graphics/pokemon/slaking/overworld_shiny.pal b/graphics/pokemon/slaking/overworld_shiny.pal
new file mode 100644
index 000000000000..f1e08cc7f0ed
--- /dev/null
+++ b/graphics/pokemon/slaking/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 88 56
+240 248 184
+224 200 96
+0 0 0
+192 152 48
+96 72 72
+200 176 152
+216 200 160
+144 120 96
+64 48 40
+112 96 88
+152 120 104
+120 56 72
+208 112 136
+168 80 104
diff --git a/graphics/pokemon/slakoth/overworld.png b/graphics/pokemon/slakoth/overworld.png
new file mode 100644
index 000000000000..a4187236feb1
Binary files /dev/null and b/graphics/pokemon/slakoth/overworld.png differ
diff --git a/graphics/pokemon/slakoth/overworld_normal.pal b/graphics/pokemon/slakoth/overworld_normal.pal
new file mode 100644
index 000000000000..2742a5b6d93d
--- /dev/null
+++ b/graphics/pokemon/slakoth/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 64 64
+112 96 88
+184 152 112
+224 200 144
+152 128 88
+0 0 0
+144 136 152
+128 88 80
+112 64 56
+120 32 32
+208 88 88
+168 56 56
+232 232 248
+184 176 192
+88 80 96
diff --git a/graphics/pokemon/slakoth/overworld_shiny.pal b/graphics/pokemon/slakoth/overworld_shiny.pal
new file mode 100644
index 000000000000..a96e6c70000b
--- /dev/null
+++ b/graphics/pokemon/slakoth/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 40 96
+104 72 120
+176 144 168
+200 176 192
+128 96 144
+0 0 0
+144 136 152
+128 88 80
+112 64 56
+120 72 32
+208 120 88
+168 88 56
+232 232 248
+184 176 192
+88 80 96
diff --git a/graphics/pokemon/sliggoo/hisuian/overworld.png b/graphics/pokemon/sliggoo/hisuian/overworld.png
new file mode 100644
index 000000000000..511b750d83cc
Binary files /dev/null and b/graphics/pokemon/sliggoo/hisuian/overworld.png differ
diff --git a/graphics/pokemon/sliggoo/hisuian/overworld_normal.pal b/graphics/pokemon/sliggoo/hisuian/overworld_normal.pal
new file mode 100644
index 000000000000..66b17f5ba276
--- /dev/null
+++ b/graphics/pokemon/sliggoo/hisuian/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+65 65 65
+106 106 106
+16 16 16
+131 131 131
+82 49 82
+189 148 205
+222 197 255
+139 82 139
+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/sliggoo/hisuian/overworld_shiny.pal b/graphics/pokemon/sliggoo/hisuian/overworld_shiny.pal
new file mode 100644
index 000000000000..d9dcb3cab257
--- /dev/null
+++ b/graphics/pokemon/sliggoo/hisuian/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+115 74 24
+172 115 41
+16 16 16
+205 172 82
+82 49 82
+189 148 205
+222 197 255
+139 82 139
+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/sliggoo/overworld.png b/graphics/pokemon/sliggoo/overworld.png
new file mode 100644
index 000000000000..fad6f57fd8d1
Binary files /dev/null and b/graphics/pokemon/sliggoo/overworld.png differ
diff --git a/graphics/pokemon/sliggoo/overworld_normal.pal b/graphics/pokemon/sliggoo/overworld_normal.pal
new file mode 100644
index 000000000000..d3a0260ff305
--- /dev/null
+++ b/graphics/pokemon/sliggoo/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+85 54 86
+191 151 203
+218 194 248
+16 16 16
+38 98 41
+57 235 68
+47 153 53
+139 87 141
+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/sliggoo/overworld_shiny.pal b/graphics/pokemon/sliggoo/overworld_shiny.pal
new file mode 100644
index 000000000000..fd5a2e122ccc
--- /dev/null
+++ b/graphics/pokemon/sliggoo/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+146 134 73
+209 194 114
+255 242 173
+16 16 16
+88 83 153
+159 154 230
+119 113 200
+226 164 145
+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/slowbro/galarian/overworld.png b/graphics/pokemon/slowbro/galarian/overworld.png
new file mode 100644
index 000000000000..f62e2b3bdd84
Binary files /dev/null and b/graphics/pokemon/slowbro/galarian/overworld.png differ
diff --git a/graphics/pokemon/slowbro/galarian/overworld_normal.pal b/graphics/pokemon/slowbro/galarian/overworld_normal.pal
new file mode 100644
index 000000000000..c4e5d9c5b5b4
--- /dev/null
+++ b/graphics/pokemon/slowbro/galarian/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+236 28 36
+232 224 232
+176 128 192
+0 0 0
+120 88 168
+240 168 176
+248 248 248
+108 44 52
+208 120 128
+72 80 88
+204 208 220
+152 152 152
+224 80 40
+216 192 88
+240 240 168
+176 160 184
diff --git a/graphics/pokemon/slowbro/galarian/overworld_shiny.pal b/graphics/pokemon/slowbro/galarian/overworld_shiny.pal
new file mode 100644
index 000000000000..508d550296dd
--- /dev/null
+++ b/graphics/pokemon/slowbro/galarian/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+197 205 213
+180 131 197
+0 0 0
+123 90 172
+246 246 172
+238 238 255
+0 0 0
+222 197 90
+74 82 90
+197 205 213
+156 156 156
+74 82 90
+222 197 90
+246 246 172
+156 156 156
diff --git a/graphics/pokemon/slowbro/overworld.png b/graphics/pokemon/slowbro/overworld.png
new file mode 100644
index 000000000000..553c4df7f621
Binary files /dev/null and b/graphics/pokemon/slowbro/overworld.png differ
diff --git a/graphics/pokemon/slowbro/overworld_normal.pal b/graphics/pokemon/slowbro/overworld_normal.pal
new file mode 100644
index 000000000000..f1a3ea572f45
--- /dev/null
+++ b/graphics/pokemon/slowbro/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+112 48 56
+240 168 176
+0 0 0
+208 120 128
+176 96 104
+72 80 88
+232 232 248
+152 152 152
+192 200 208
+216 192 88
+240 240 168
+232 232 248
+192 64 64
+216 112 96
+144 120 48
diff --git a/graphics/pokemon/slowbro/overworld_shiny.pal b/graphics/pokemon/slowbro/overworld_shiny.pal
new file mode 100644
index 000000000000..8ee36f1fb36e
--- /dev/null
+++ b/graphics/pokemon/slowbro/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+32 48 88
+176 160 224
+0 0 0
+128 120 184
+80 80 136
+104 80 16
+232 232 248
+160 128 32
+208 168 96
+216 192 88
+240 240 168
+232 208 128
+192 64 64
+216 112 96
+144 120 48
diff --git a/graphics/pokemon/slowking/galarian/overworld.png b/graphics/pokemon/slowking/galarian/overworld.png
new file mode 100644
index 000000000000..4ff3b7f4b705
Binary files /dev/null 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
new file mode 100644
index 000000000000..7b64228b1da7
--- /dev/null
+++ b/graphics/pokemon/slowking/galarian/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+41 194 156
+49 52 74
+16 129 8
+182 235 136
+230 230 246
+156 157 115
+90 80 115
+189 210 139
+49 52 74
+98 36 74
+0 0 0
+131 121 139
+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
new file mode 100644
index 000000000000..9a2bdbc76e5f
--- /dev/null
+++ b/graphics/pokemon/slowking/galarian/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+41 194 156
+60 52 140
+166 48 112
+215 117 170
+230 230 246
+156 157 115
+80 91 138
+189 210 139
+49 52 74
+128 39 93
+0 0 0
+131 121 139
+82 64 128
+154 70 116
+189 174 189
+112 140 196
diff --git a/graphics/pokemon/slowking/overworld.png b/graphics/pokemon/slowking/overworld.png
new file mode 100644
index 000000000000..3d5dde2e49e0
Binary files /dev/null and b/graphics/pokemon/slowking/overworld.png differ
diff --git a/graphics/pokemon/slowking/overworld_normal.pal b/graphics/pokemon/slowking/overworld_normal.pal
new file mode 100644
index 000000000000..ec617c434801
--- /dev/null
+++ b/graphics/pokemon/slowking/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 80 88
+0 0 0
+192 200 208
+232 232 248
+152 160 168
+152 64 72
+208 120 128
+240 168 176
+112 48 56
+200 160 64
+208 16 16
+232 200 96
+120 88 16
+200 80 96
+192 136 40
diff --git a/graphics/pokemon/slowking/overworld_shiny.pal b/graphics/pokemon/slowking/overworld_shiny.pal
new file mode 100644
index 000000000000..8c5a6a3cf74a
--- /dev/null
+++ b/graphics/pokemon/slowking/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 80 88
+0 0 0
+192 200 208
+232 232 248
+152 160 168
+144 80 144
+216 136 200
+240 168 224
+80 48 112
+200 160 64
+0 136 248
+232 200 96
+120 88 16
+176 104 168
+192 136 40
diff --git a/graphics/pokemon/slowpoke/galarian/overworld.png b/graphics/pokemon/slowpoke/galarian/overworld.png
new file mode 100644
index 000000000000..38352ce27eaf
Binary files /dev/null and b/graphics/pokemon/slowpoke/galarian/overworld.png differ
diff --git a/graphics/pokemon/slowpoke/galarian/overworld_normal.pal b/graphics/pokemon/slowpoke/galarian/overworld_normal.pal
new file mode 100644
index 000000000000..39773f539fa4
--- /dev/null
+++ b/graphics/pokemon/slowpoke/galarian/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 128 128
+66 63 0
+96 40 48
+173 166 8
+239 229 9
+0 0 0
+204 109 117
+240 152 160
+160 168 176
+104 80 16
+208 168 96
+240 216 144
+232 232 248
+13 13 13
+14 14 14
+15 15 15
diff --git a/graphics/pokemon/slowpoke/galarian/overworld_shiny.pal b/graphics/pokemon/slowpoke/galarian/overworld_shiny.pal
new file mode 100644
index 000000000000..ee20b0579754
--- /dev/null
+++ b/graphics/pokemon/slowpoke/galarian/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+66 63 0
+80 72 0
+136 120 16
+171 144 18
+0 0 0
+200 176 0
+248 216 0
+160 168 176
+104 80 16
+208 168 96
+240 216 144
+232 232 248
+255 255 255
+255 255 255
+255 255 255
diff --git a/graphics/pokemon/slowpoke/overworld.png b/graphics/pokemon/slowpoke/overworld.png
new file mode 100644
index 000000000000..7c2a0369fe6f
Binary files /dev/null and b/graphics/pokemon/slowpoke/overworld.png differ
diff --git a/graphics/pokemon/slowpoke/overworld_normal.pal b/graphics/pokemon/slowpoke/overworld_normal.pal
new file mode 100644
index 000000000000..85748434bac2
--- /dev/null
+++ b/graphics/pokemon/slowpoke/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 40 48
+152 88 96
+192 192 192
+232 232 248
+208 120 128
+240 152 160
+0 0 0
+160 168 176
+104 80 16
+208 168 96
+240 216 144
+248 192 176
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/slowpoke/overworld_shiny.pal b/graphics/pokemon/slowpoke/overworld_shiny.pal
new file mode 100644
index 000000000000..f321ac09b66b
--- /dev/null
+++ b/graphics/pokemon/slowpoke/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 72 80
+184 112 120
+192 192 192
+232 232 248
+224 136 160
+248 176 208
+0 0 0
+160 168 176
+104 80 16
+208 168 96
+240 216 144
+248 200 224
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/slugma/overworld.png b/graphics/pokemon/slugma/overworld.png
new file mode 100644
index 000000000000..61439bc0fbcb
Binary files /dev/null and b/graphics/pokemon/slugma/overworld.png differ
diff --git a/graphics/pokemon/slugma/overworld_normal.pal b/graphics/pokemon/slugma/overworld_normal.pal
new file mode 100644
index 000000000000..da10c73e9dfc
--- /dev/null
+++ b/graphics/pokemon/slugma/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+216 96 64
+72 0 0
+160 56 24
+192 72 40
+200 144 16
+232 208 104
+120 24 16
+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/slugma/overworld_shiny.pal b/graphics/pokemon/slugma/overworld_shiny.pal
new file mode 100644
index 000000000000..ee33de70cb54
--- /dev/null
+++ b/graphics/pokemon/slugma/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+184 184 184
+64 64 64
+136 136 136
+160 160 160
+200 144 16
+232 208 104
+88 88 88
+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/slurpuff/overworld.png b/graphics/pokemon/slurpuff/overworld.png
new file mode 100644
index 000000000000..94998ffac9fa
Binary files /dev/null and b/graphics/pokemon/slurpuff/overworld.png differ
diff --git a/graphics/pokemon/slurpuff/overworld_normal.pal b/graphics/pokemon/slurpuff/overworld_normal.pal
new file mode 100644
index 000000000000..112eabce5e87
--- /dev/null
+++ b/graphics/pokemon/slurpuff/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+214 104 138
+236 186 215
+134 48 66
+236 186 215
+225 123 154
+134 48 66
+212 184 193
+255 255 255
+236 186 215
+134 48 66
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/slurpuff/overworld_shiny.pal b/graphics/pokemon/slurpuff/overworld_shiny.pal
new file mode 100644
index 000000000000..e9f54ed7a654
--- /dev/null
+++ b/graphics/pokemon/slurpuff/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+203 43 83
+247 129 159
+69 44 29
+147 113 94
+98 73 58
+168 128 71
+212 177 128
+254 227 165
+247 129 158
+154 30 56
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/smeargle/overworld.png b/graphics/pokemon/smeargle/overworld.png
new file mode 100644
index 000000000000..c6f88466ee00
Binary files /dev/null and b/graphics/pokemon/smeargle/overworld.png differ
diff --git a/graphics/pokemon/smeargle/overworld_normal.pal b/graphics/pokemon/smeargle/overworld_normal.pal
new file mode 100644
index 000000000000..105263d9bd7a
--- /dev/null
+++ b/graphics/pokemon/smeargle/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+96 88 72
+0 0 0
+216 216 184
+160 152 104
+184 184 136
+64 56 48
+112 96 32
+40 112 40
+232 232 248
+176 184 192
+72 176 64
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/smeargle/overworld_shiny.pal b/graphics/pokemon/smeargle/overworld_shiny.pal
new file mode 100644
index 000000000000..6adf1b8e0c86
--- /dev/null
+++ b/graphics/pokemon/smeargle/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+96 80 48
+0 0 0
+232 224 160
+168 136 72
+200 184 120
+64 56 48
+112 96 32
+152 48 104
+232 232 248
+176 184 192
+216 136 176
+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
new file mode 100644
index 000000000000..ccee071741cb
Binary files /dev/null and b/graphics/pokemon/smoochum/overworld.png differ
diff --git a/graphics/pokemon/smoochum/overworld_normal.pal b/graphics/pokemon/smoochum/overworld_normal.pal
new file mode 100644
index 000000000000..ad1fb9a48f8b
--- /dev/null
+++ b/graphics/pokemon/smoochum/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+128 80 0
+0 0 0
+208 136 24
+248 192 48
+176 64 152
+248 152 200
+112 32 96
+232 232 248
+176 184 192
+152 48 80
+216 64 104
+200 128 56
+224 160 104
+152 96 40
+0 0 0
diff --git a/graphics/pokemon/smoochum/overworld_shiny.pal b/graphics/pokemon/smoochum/overworld_shiny.pal
new file mode 100644
index 000000000000..0c4052b9cce2
--- /dev/null
+++ b/graphics/pokemon/smoochum/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+136 80 16
+0 0 0
+248 192 64
+248 224 168
+232 128 224
+248 192 248
+144 32 96
+232 232 248
+176 184 192
+152 48 80
+216 64 104
+200 128 56
+224 160 104
+152 96 40
+0 0 0
diff --git a/graphics/pokemon/sneasel/hisuian/overworld.png b/graphics/pokemon/sneasel/hisuian/overworld.png
new file mode 100644
index 000000000000..a830d0c0e8db
Binary files /dev/null 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
new file mode 100644
index 000000000000..3a4e58b0eb3b
--- /dev/null
+++ b/graphics/pokemon/sneasel/hisuian/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+74 74 98
+16 16 16
+70 19 70
+98 115 164
+164 189 222
+57 74 82
+113 65 145
+123 139 180
+255 255 255
+71 53 97
+164 123 222
+205 49 74
+246 180 65
+230 139 16
+97 25 97
diff --git a/graphics/pokemon/sneasel/hisuian/overworld_shiny.pal b/graphics/pokemon/sneasel/hisuian/overworld_shiny.pal
new file mode 100644
index 000000000000..580e24ee3ed1
--- /dev/null
+++ b/graphics/pokemon/sneasel/hisuian/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 48 48
+16 16 16
+87 68 9
+47 66 69
+131 148 156
+57 74 82
+255 212 0
+79 110 110
+255 255 255
+50 39 61
+90 82 98
+230 205 82
+135 149 204
+112 128 193
+204 170 0
diff --git a/graphics/pokemon/sneasel/overworld.png b/graphics/pokemon/sneasel/overworld.png
new file mode 100644
index 000000000000..3cabd75c5493
Binary files /dev/null and b/graphics/pokemon/sneasel/overworld.png differ
diff --git a/graphics/pokemon/sneasel/overworld_normal.pal b/graphics/pokemon/sneasel/overworld_normal.pal
new file mode 100644
index 000000000000..7a4190d087f9
--- /dev/null
+++ b/graphics/pokemon/sneasel/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+8 56 72
+96 8 24
+80 152 176
+24 88 112
+200 48 72
+16 16 16
+56 112 136
+152 8 32
+56 72 80
+240 176 64
+168 184 200
+248 248 248
+224 136 16
+88 96 104
+128 144 168
diff --git a/graphics/pokemon/sneasel/overworld_shiny.pal b/graphics/pokemon/sneasel/overworld_shiny.pal
new file mode 100644
index 000000000000..d84067f4bc70
--- /dev/null
+++ b/graphics/pokemon/sneasel/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 40 64
+152 80 0
+224 168 232
+216 72 128
+248 200 64
+16 16 16
+224 112 168
+232 144 32
+184 64 128
+120 208 248
+168 184 200
+248 248 248
+0 152 208
+88 96 104
+128 144 168
diff --git a/graphics/pokemon/sneasler/overworld.png b/graphics/pokemon/sneasler/overworld.png
new file mode 100644
index 000000000000..b81dedda541b
Binary files /dev/null and b/graphics/pokemon/sneasler/overworld.png differ
diff --git a/graphics/pokemon/sneasler/overworld_normal.pal b/graphics/pokemon/sneasler/overworld_normal.pal
new file mode 100644
index 000000000000..12b06e1358fb
--- /dev/null
+++ b/graphics/pokemon/sneasler/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+41 49 65
+172 0 41
+74 74 98
+123 139 180
+74 49 90
+106 90 164
+164 189 222
+57 74 82
+255 255 255
+164 123 222
+246 180 65
+230 139 16
+213 0 57
+205 49 74
diff --git a/graphics/pokemon/sneasler/overworld_shiny.pal b/graphics/pokemon/sneasler/overworld_shiny.pal
new file mode 100644
index 000000000000..a77780060f14
--- /dev/null
+++ b/graphics/pokemon/sneasler/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+8 8 8
+32 32 41
+205 172 65
+114 109 83
+171 165 128
+74 57 82
+80 56 84
+213 205 156
+57 74 82
+255 255 255
+106 84 119
+156 172 238
+116 132 198
+230 197 82
+104 176 47
diff --git a/graphics/pokemon/sneasler/shiny.pal b/graphics/pokemon/sneasler/shiny.pal
index 8c1df6a5060d..ca2ee6ce6e5c 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
new file mode 100644
index 000000000000..b3615871094e
Binary files /dev/null and b/graphics/pokemon/snivy/overworld.png differ
diff --git a/graphics/pokemon/snivy/overworld_normal.pal b/graphics/pokemon/snivy/overworld_normal.pal
new file mode 100644
index 000000000000..3b13b6e882a6
--- /dev/null
+++ b/graphics/pokemon/snivy/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 88 0
+0 143 7
+0 0 0
+0 88 0
+255 226 50
+197 157 0
+96 64 32
+191 184 103
+191 184 103
+237 254 162
+232 232 248
+184 88 32
+255 226 50
+197 157 0
+237 254 162
diff --git a/graphics/pokemon/snivy/overworld_shiny.pal b/graphics/pokemon/snivy/overworld_shiny.pal
new file mode 100644
index 000000000000..d17858108887
--- /dev/null
+++ b/graphics/pokemon/snivy/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 72 72
+0 152 152
+0 0 0
+0 88 0
+248 216 40
+192 128 0
+96 64 32
+191 184 103
+184 184 96
+224 248 184
+232 232 248
+184 88 32
+255 226 50
+197 157 0
+237 254 162
diff --git a/graphics/pokemon/snom/overworld.png b/graphics/pokemon/snom/overworld.png
new file mode 100644
index 000000000000..36e63d50e256
Binary files /dev/null and b/graphics/pokemon/snom/overworld.png differ
diff --git a/graphics/pokemon/snom/overworld_normal.pal b/graphics/pokemon/snom/overworld_normal.pal
new file mode 100644
index 000000000000..9884fbc23581
--- /dev/null
+++ b/graphics/pokemon/snom/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+252 28 0
+44 56 60
+220 240 248
+240 248 252
+180 200 212
+104 120 128
+0 0 0
+128 128 128
+252 252 252
+212 212 212
+24 24 24
+104 88 112
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/snom/overworld_shiny.pal b/graphics/pokemon/snom/overworld_shiny.pal
new file mode 100644
index 000000000000..ab7ceca1228f
--- /dev/null
+++ b/graphics/pokemon/snom/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+41 57 57
+222 246 255
+246 255 255
+180 205 213
+106 123 131
+0 0 0
+148 156 131
+238 255 230
+222 238 205
+24 24 24
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/snorlax/overworld.png b/graphics/pokemon/snorlax/overworld.png
new file mode 100644
index 000000000000..413990299107
Binary files /dev/null and b/graphics/pokemon/snorlax/overworld.png differ
diff --git a/graphics/pokemon/snorlax/overworld_normal.pal b/graphics/pokemon/snorlax/overworld_normal.pal
new file mode 100644
index 000000000000..b3f5917464fc
--- /dev/null
+++ b/graphics/pokemon/snorlax/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 48 48
+0 0 0
+80 128 144
+64 104 120
+248 224 168
+216 192 120
+40 72 72
+64 64 64
+136 104 72
+184 144 80
+232 232 248
+192 192 200
+160 160 184
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/snorlax/overworld_shiny.pal b/graphics/pokemon/snorlax/overworld_shiny.pal
new file mode 100644
index 000000000000..f0cd65c757e9
--- /dev/null
+++ b/graphics/pokemon/snorlax/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+24 32 72
+0 0 0
+104 136 184
+64 96 152
+248 216 168
+224 176 120
+56 64 120
+64 64 64
+136 104 72
+168 136 104
+232 232 248
+192 192 200
+160 160 184
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/snorunt/overworld.png b/graphics/pokemon/snorunt/overworld.png
new file mode 100644
index 000000000000..42f666151921
Binary files /dev/null and b/graphics/pokemon/snorunt/overworld.png differ
diff --git a/graphics/pokemon/snorunt/overworld_normal.pal b/graphics/pokemon/snorunt/overworld_normal.pal
new file mode 100644
index 000000000000..15886e0c4c27
--- /dev/null
+++ b/graphics/pokemon/snorunt/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 64 56
+248 216 88
+200 152 56
+0 0 0
+240 104 88
+168 72 64
+48 48 64
+32 32 40
+192 80 64
+64 64 80
+40 128 192
+96 96 120
+168 168 184
+144 104 56
+232 232 248
diff --git a/graphics/pokemon/snorunt/overworld_shiny.pal b/graphics/pokemon/snorunt/overworld_shiny.pal
new file mode 100644
index 000000000000..baf242ad241f
--- /dev/null
+++ b/graphics/pokemon/snorunt/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 64 88
+80 224 248
+72 176 192
+0 0 0
+248 216 88
+144 104 56
+48 48 64
+32 32 40
+200 152 56
+64 64 80
+232 96 88
+96 96 120
+168 168 184
+64 120 136
+232 232 248
diff --git a/graphics/pokemon/snover/overworld.png b/graphics/pokemon/snover/overworld.png
new file mode 100644
index 000000000000..6e8403118726
Binary files /dev/null and b/graphics/pokemon/snover/overworld.png differ
diff --git a/graphics/pokemon/snover/overworld_normal.pal b/graphics/pokemon/snover/overworld_normal.pal
new file mode 100644
index 000000000000..e1ec3499d8fa
--- /dev/null
+++ b/graphics/pokemon/snover/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+168 224 24
+64 64 64
+120 120 152
+232 232 248
+184 192 208
+216 216 232
+160 160 192
+0 0 0
+48 120 64
+48 72 56
+48 152 72
+64 56 24
+168 136 56
+96 80 56
+128 104 40
+0 0 0
diff --git a/graphics/pokemon/snover/overworld_shiny.pal b/graphics/pokemon/snover/overworld_shiny.pal
new file mode 100644
index 000000000000..66f6e6532f79
--- /dev/null
+++ b/graphics/pokemon/snover/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+168 224 24
+64 64 64
+120 120 152
+232 232 248
+184 192 208
+216 216 232
+160 160 192
+0 0 0
+32 72 72
+32 48 56
+32 96 96
+48 40 16
+128 104 40
+72 56 40
+96 72 24
+0 0 0
diff --git a/graphics/pokemon/snubbull/overworld.png b/graphics/pokemon/snubbull/overworld.png
new file mode 100644
index 000000000000..d4aee69ec0c1
Binary files /dev/null and b/graphics/pokemon/snubbull/overworld.png differ
diff --git a/graphics/pokemon/snubbull/overworld_normal.pal b/graphics/pokemon/snubbull/overworld_normal.pal
new file mode 100644
index 000000000000..43446de778d7
--- /dev/null
+++ b/graphics/pokemon/snubbull/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+120 32 64
+48 64 80
+240 144 184
+160 48 80
+184 72 112
+208 104 144
+232 232 248
+176 192 208
+32 80 112
+48 120 152
+72 152 192
+208 192 144
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/snubbull/overworld_shiny.pal b/graphics/pokemon/snubbull/overworld_shiny.pal
new file mode 100644
index 000000000000..af67d8a63dd5
--- /dev/null
+++ b/graphics/pokemon/snubbull/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+88 32 112
+120 32 64
+184 184 248
+112 72 144
+136 104 184
+160 144 216
+232 232 248
+176 192 208
+120 32 64
+216 104 136
+240 144 184
+176 192 208
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/sobble/overworld.png b/graphics/pokemon/sobble/overworld.png
new file mode 100644
index 000000000000..7fd769da4b4d
Binary files /dev/null and b/graphics/pokemon/sobble/overworld.png differ
diff --git a/graphics/pokemon/sobble/overworld_normal.pal b/graphics/pokemon/sobble/overworld_normal.pal
new file mode 100644
index 000000000000..a2d82c8deb12
--- /dev/null
+++ b/graphics/pokemon/sobble/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+252 28 0
+24 64 84
+32 72 108
+36 96 116
+0 0 0
+196 168 28
+224 196 64
+228 208 104
+36 92 132
+80 168 200
+116 184 212
+132 184 192
+172 208 212
+152 204 224
+192 220 220
+252 252 252
diff --git a/graphics/pokemon/sobble/overworld_shiny.pal b/graphics/pokemon/sobble/overworld_shiny.pal
new file mode 100644
index 000000000000..ac8a70090076
--- /dev/null
+++ b/graphics/pokemon/sobble/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+24 65 82
+32 131 131
+57 65 82
+0 0 0
+164 74 115
+213 98 156
+230 115 172
+49 180 180
+115 131 172
+172 197 238
+156 172 172
+205 222 246
+205 222 246
+205 222 246
+246 246 246
diff --git a/graphics/pokemon/solgaleo/overworld.png b/graphics/pokemon/solgaleo/overworld.png
new file mode 100644
index 000000000000..7ff76401b723
Binary files /dev/null and b/graphics/pokemon/solgaleo/overworld.png differ
diff --git a/graphics/pokemon/solgaleo/overworld_normal.pal b/graphics/pokemon/solgaleo/overworld_normal.pal
new file mode 100644
index 000000000000..eae35eee8c25
--- /dev/null
+++ b/graphics/pokemon/solgaleo/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+110 201 255
+255 255 255
+81 52 22
+254 238 112
+255 171 40
+0 0 0
+252 132 62
+203 65 45
+155 112 34
+153 153 153
+207 211 208
+35 33 36
+29 53 102
+52 84 151
+69 76 77
+248 248 248
diff --git a/graphics/pokemon/solgaleo/overworld_shiny.pal b/graphics/pokemon/solgaleo/overworld_shiny.pal
new file mode 100644
index 000000000000..42f75019562a
--- /dev/null
+++ b/graphics/pokemon/solgaleo/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+110 201 255
+248 40 48
+81 52 22
+254 238 112
+255 171 40
+0 0 0
+144 56 160
+203 65 45
+155 112 34
+112 24 24
+168 40 48
+35 33 36
+29 53 102
+52 84 151
+69 76 77
+248 248 248
diff --git a/graphics/pokemon/solosis/overworld.png b/graphics/pokemon/solosis/overworld.png
new file mode 100644
index 000000000000..dfa0f1475825
Binary files /dev/null and b/graphics/pokemon/solosis/overworld.png differ
diff --git a/graphics/pokemon/solosis/overworld_normal.pal b/graphics/pokemon/solosis/overworld_normal.pal
new file mode 100644
index 000000000000..b473e7651a95
--- /dev/null
+++ b/graphics/pokemon/solosis/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+65 139 90
+90 180 123
+148 230 172
+106 98 41
+232 232 248
+90 131 90
+16 16 16
+230 222 115
+164 156 49
+205 230 189
+156 172 139
+180 205 164
+49 98 65
+148 49 74
+197 65 82
diff --git a/graphics/pokemon/solosis/overworld_shiny.pal b/graphics/pokemon/solosis/overworld_shiny.pal
new file mode 100644
index 000000000000..4194bfc8cf41
--- /dev/null
+++ b/graphics/pokemon/solosis/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+32 128 136
+88 176 168
+136 216 248
+192 96 144
+232 232 248
+96 112 80
+16 16 16
+240 216 176
+216 152 144
+216 224 168
+168 168 120
+192 200 144
+48 96 120
+148 49 74
+197 65 82
diff --git a/graphics/pokemon/solrock/overworld.png b/graphics/pokemon/solrock/overworld.png
new file mode 100644
index 000000000000..088aa6e1b83d
Binary files /dev/null and b/graphics/pokemon/solrock/overworld.png differ
diff --git a/graphics/pokemon/solrock/overworld_normal.pal b/graphics/pokemon/solrock/overworld_normal.pal
new file mode 100644
index 000000000000..6684842120b5
--- /dev/null
+++ b/graphics/pokemon/solrock/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 80 32
+0 0 0
+176 160 72
+208 192 96
+144 120 56
+144 72 32
+184 104 40
+216 136 56
+32 40 48
+64 72 88
+224 8 48
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/solrock/overworld_shiny.pal b/graphics/pokemon/solrock/overworld_shiny.pal
new file mode 100644
index 000000000000..f1f5c5af0e1d
--- /dev/null
+++ b/graphics/pokemon/solrock/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 80 32
+0 0 0
+176 160 72
+208 192 96
+144 120 56
+128 32 48
+200 32 72
+240 104 136
+32 40 48
+64 72 88
+24 200 208
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/spearow/overworld.png b/graphics/pokemon/spearow/overworld.png
new file mode 100644
index 000000000000..f6f2039aabe1
Binary files /dev/null and b/graphics/pokemon/spearow/overworld.png differ
diff --git a/graphics/pokemon/spearow/overworld_normal.pal b/graphics/pokemon/spearow/overworld_normal.pal
new file mode 100644
index 000000000000..dd5a891a7190
--- /dev/null
+++ b/graphics/pokemon/spearow/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 56 16
+184 128 32
+128 88 32
+0 0 0
+144 40 16
+200 56 24
+232 232 248
+248 136 144
+232 120 88
+64 64 64
+160 80 104
+184 168 112
+136 120 64
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/spearow/overworld_shiny.pal b/graphics/pokemon/spearow/overworld_shiny.pal
new file mode 100644
index 000000000000..d38bddb6510d
--- /dev/null
+++ b/graphics/pokemon/spearow/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 80 16
+200 168 32
+136 136 32
+0 0 0
+144 96 48
+216 120 48
+232 232 248
+248 176 32
+248 184 48
+64 64 64
+200 96 0
+184 168 112
+136 120 64
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/spectrier/overworld.png b/graphics/pokemon/spectrier/overworld.png
new file mode 100644
index 000000000000..a97c66c1b7b2
Binary files /dev/null and b/graphics/pokemon/spectrier/overworld.png differ
diff --git a/graphics/pokemon/spectrier/overworld_normal.pal b/graphics/pokemon/spectrier/overworld_normal.pal
new file mode 100644
index 000000000000..bdf64cb3a154
--- /dev/null
+++ b/graphics/pokemon/spectrier/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+56 56 56
+0 40 88
+80 88 80
+120 104 216
+80 72 136
+80 80 80
+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/spectrier/overworld_shiny.pal b/graphics/pokemon/spectrier/overworld_shiny.pal
new file mode 100644
index 000000000000..9514f88e1260
--- /dev/null
+++ b/graphics/pokemon/spectrier/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+49 49 49
+98 32 65
+115 82 123
+255 255 255
+213 90 131
+65 65 65
+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/spewpa/overworld.png b/graphics/pokemon/spewpa/overworld.png
new file mode 100644
index 000000000000..3a05a1a4a189
Binary files /dev/null and b/graphics/pokemon/spewpa/overworld.png differ
diff --git a/graphics/pokemon/spewpa/overworld_normal.pal b/graphics/pokemon/spewpa/overworld_normal.pal
new file mode 100644
index 000000000000..636221df436c
--- /dev/null
+++ b/graphics/pokemon/spewpa/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+58 54 52
+212 197 171
+111 103 97
+16 16 16
+186 179 174
+100 93 88
+216 216 216
+240 240 236
+215 103 129
+245 204 77
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/spewpa/overworld_shiny.pal b/graphics/pokemon/spewpa/overworld_shiny.pal
new file mode 100644
index 000000000000..2a3cc4343ba1
--- /dev/null
+++ b/graphics/pokemon/spewpa/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+58 54 52
+212 197 171
+233 234 233
+16 16 16
+155 155 155
+197 198 197
+82 81 81
+110 112 111
+215 103 129
+245 204 77
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/spheal/overworld.png b/graphics/pokemon/spheal/overworld.png
new file mode 100644
index 000000000000..dc394187ec54
Binary files /dev/null and b/graphics/pokemon/spheal/overworld.png differ
diff --git a/graphics/pokemon/spheal/overworld_normal.pal b/graphics/pokemon/spheal/overworld_normal.pal
new file mode 100644
index 000000000000..4f5810be7053
--- /dev/null
+++ b/graphics/pokemon/spheal/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 64 104
+80 96 144
+0 0 0
+136 168 224
+104 136 184
+208 216 232
+176 184 208
+232 232 248
+80 80 56
+192 176 136
+160 144 112
+80 80 104
+120 112 80
+216 200 160
+0 0 0
diff --git a/graphics/pokemon/spheal/overworld_shiny.pal b/graphics/pokemon/spheal/overworld_shiny.pal
new file mode 100644
index 000000000000..9c797970b85b
--- /dev/null
+++ b/graphics/pokemon/spheal/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 64 104
+128 96 144
+0 0 0
+208 160 192
+176 120 168
+208 216 232
+176 184 208
+232 232 248
+80 80 56
+192 176 136
+160 144 112
+80 80 104
+120 112 80
+216 200 160
+0 0 0
diff --git a/graphics/pokemon/spidops/front.png b/graphics/pokemon/spidops/front.png
index 944a9110703b..d6bfb05623f2 100644
Binary files a/graphics/pokemon/spidops/front.png and b/graphics/pokemon/spidops/front.png differ
diff --git a/graphics/pokemon/spinarak/overworld.png b/graphics/pokemon/spinarak/overworld.png
new file mode 100644
index 000000000000..235adf07389c
Binary files /dev/null and b/graphics/pokemon/spinarak/overworld.png differ
diff --git a/graphics/pokemon/spinarak/overworld_normal.pal b/graphics/pokemon/spinarak/overworld_normal.pal
new file mode 100644
index 000000000000..8ef381be2cd2
--- /dev/null
+++ b/graphics/pokemon/spinarak/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+32 80 32
+64 96 88
+0 0 0
+232 232 248
+112 136 152
+80 136 32
+160 216 96
+120 184 32
+80 56 0
+192 136 0
+168 184 208
+112 16 24
+208 64 104
+224 192 8
+0 0 0
diff --git a/graphics/pokemon/spinarak/overworld_shiny.pal b/graphics/pokemon/spinarak/overworld_shiny.pal
new file mode 100644
index 000000000000..2a3ead998b22
--- /dev/null
+++ b/graphics/pokemon/spinarak/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+168 224 24
+48 48 112
+64 64 64
+0 0 0
+232 232 248
+112 120 120
+80 128 192
+168 200 216
+112 160 224
+96 48 88
+152 80 144
+168 184 208
+112 16 24
+208 64 104
+208 168 192
+0 0 0
diff --git a/graphics/pokemon/spinda/overworld.png b/graphics/pokemon/spinda/overworld.png
new file mode 100644
index 000000000000..d50b8f9149c3
Binary files /dev/null and b/graphics/pokemon/spinda/overworld.png differ
diff --git a/graphics/pokemon/spinda/overworld_normal.pal b/graphics/pokemon/spinda/overworld_normal.pal
new file mode 100644
index 000000000000..0eb93e8f6c3f
--- /dev/null
+++ b/graphics/pokemon/spinda/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+49 164 82
+120 48 48
+16 16 16
+144 64 64
+168 128 112
+208 104 104
+216 192 168
+80 72 56
+56 64 72
+176 80 80
+192 168 144
+128 104 88
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/spinda/overworld_shiny.pal b/graphics/pokemon/spinda/overworld_shiny.pal
new file mode 100644
index 000000000000..0cc1d3a8d591
--- /dev/null
+++ b/graphics/pokemon/spinda/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+49 164 82
+56 80 64
+16 16 16
+88 120 72
+168 128 112
+168 208 88
+216 192 168
+80 72 56
+56 64 72
+128 168 80
+192 168 144
+128 104 88
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/spiritomb/overworld.png b/graphics/pokemon/spiritomb/overworld.png
new file mode 100644
index 000000000000..430f8eed2572
Binary files /dev/null and b/graphics/pokemon/spiritomb/overworld.png differ
diff --git a/graphics/pokemon/spiritomb/overworld_normal.pal b/graphics/pokemon/spiritomb/overworld_normal.pal
new file mode 100644
index 000000000000..ed89ca8fbfb9
--- /dev/null
+++ b/graphics/pokemon/spiritomb/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+120 56 104
+200 144 208
+168 112 168
+144 200 88
+208 240 120
+104 168 72
+64 112 64
+72 56 32
+96 88 96
+48 48 48
+104 80 24
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/spiritomb/overworld_shiny.pal b/graphics/pokemon/spiritomb/overworld_shiny.pal
new file mode 100644
index 000000000000..52f437e14310
--- /dev/null
+++ b/graphics/pokemon/spiritomb/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 120 136
+152 216 248
+88 184 208
+216 128 224
+240 200 248
+192 88 192
+136 32 128
+72 56 32
+96 88 96
+48 48 48
+104 80 24
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/spoink/overworld.png b/graphics/pokemon/spoink/overworld.png
new file mode 100644
index 000000000000..4e3e1a833a51
Binary files /dev/null and b/graphics/pokemon/spoink/overworld.png differ
diff --git a/graphics/pokemon/spoink/overworld_normal.pal b/graphics/pokemon/spoink/overworld_normal.pal
new file mode 100644
index 000000000000..9ad38c64127f
--- /dev/null
+++ b/graphics/pokemon/spoink/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 24 64
+224 96 160
+16 16 16
+248 248 248
+144 48 96
+184 72 128
+96 104 104
+48 56 64
+128 136 136
+72 80 88
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/spoink/overworld_shiny.pal b/graphics/pokemon/spoink/overworld_shiny.pal
new file mode 100644
index 000000000000..7ac97455d6ad
--- /dev/null
+++ b/graphics/pokemon/spoink/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 56 64
+128 136 136
+16 16 16
+248 248 248
+72 80 88
+128 136 136
+192 160 104
+88 72 48
+216 192 152
+168 120 64
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/spritzee/overworld.png b/graphics/pokemon/spritzee/overworld.png
new file mode 100644
index 000000000000..4efae5bc6781
Binary files /dev/null and b/graphics/pokemon/spritzee/overworld.png differ
diff --git a/graphics/pokemon/spritzee/overworld_normal.pal b/graphics/pokemon/spritzee/overworld_normal.pal
new file mode 100644
index 000000000000..87d10307a0d8
--- /dev/null
+++ b/graphics/pokemon/spritzee/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+57 39 43
+16 16 16
+236 141 161
+219 222 241
+197 95 116
+208 159 179
+232 76 90
+249 254 255
+131 71 119
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/spritzee/overworld_shiny.pal b/graphics/pokemon/spritzee/overworld_shiny.pal
new file mode 100644
index 000000000000..8ece39f7a33f
--- /dev/null
+++ b/graphics/pokemon/spritzee/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+58 42 94
+16 16 16
+124 102 171
+254 234 246
+97 74 147
+231 191 206
+245 225 11
+249 254 255
+173 86 161
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/squirtle/overworld.png b/graphics/pokemon/squirtle/overworld.png
new file mode 100644
index 000000000000..bbc5861ff123
Binary files /dev/null and b/graphics/pokemon/squirtle/overworld.png differ
diff --git a/graphics/pokemon/squirtle/overworld_normal.pal b/graphics/pokemon/squirtle/overworld_normal.pal
new file mode 100644
index 000000000000..ed2ae724b8e1
--- /dev/null
+++ b/graphics/pokemon/squirtle/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+32 72 96
+88 184 240
+56 136 184
+232 232 248
+0 0 0
+160 8 48
+184 184 184
+216 168 48
+200 120 24
+240 208 112
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/squirtle/overworld_shiny.pal b/graphics/pokemon/squirtle/overworld_shiny.pal
new file mode 100644
index 000000000000..95b812e82c3c
--- /dev/null
+++ b/graphics/pokemon/squirtle/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 80 120
+136 208 248
+120 168 200
+232 232 248
+0 0 0
+160 8 48
+184 184 184
+152 168 24
+96 136 24
+240 208 112
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/stakataka/overworld.png b/graphics/pokemon/stakataka/overworld.png
new file mode 100644
index 000000000000..d4e59ce9d2b8
Binary files /dev/null and b/graphics/pokemon/stakataka/overworld.png differ
diff --git a/graphics/pokemon/stakataka/overworld_normal.pal b/graphics/pokemon/stakataka/overworld_normal.pal
new file mode 100644
index 000000000000..2c3b6474c184
--- /dev/null
+++ b/graphics/pokemon/stakataka/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+117 117 117
+24 159 210
+20 139 182
+18 94 122
+93 93 93
+76 76 76
+35 35 35
+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/stakataka/overworld_shiny.pal b/graphics/pokemon/stakataka/overworld_shiny.pal
new file mode 100644
index 000000000000..d1d21069fc32
--- /dev/null
+++ b/graphics/pokemon/stakataka/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+208 192 24
+24 159 210
+20 139 182
+88 80 8
+136 120 16
+160 144 16
+35 35 35
+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/stantler/overworld.png b/graphics/pokemon/stantler/overworld.png
new file mode 100644
index 000000000000..2296f6c0633f
Binary files /dev/null and b/graphics/pokemon/stantler/overworld.png differ
diff --git a/graphics/pokemon/stantler/overworld_normal.pal b/graphics/pokemon/stantler/overworld_normal.pal
new file mode 100644
index 000000000000..b30705863113
--- /dev/null
+++ b/graphics/pokemon/stantler/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 72 8
+0 0 0
+168 144 24
+224 208 80
+72 64 56
+168 184 208
+96 48 8
+200 144 88
+184 96 48
+136 32 48
+232 232 248
+112 88 80
+200 176 112
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/stantler/overworld_shiny.pal b/graphics/pokemon/stantler/overworld_shiny.pal
new file mode 100644
index 000000000000..1de599220625
--- /dev/null
+++ b/graphics/pokemon/stantler/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 72 8
+0 0 0
+200 208 72
+240 232 152
+80 56 56
+224 120 72
+88 72 8
+192 216 104
+136 176 64
+136 32 48
+232 232 248
+112 88 80
+200 176 112
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/staraptor/overworld.png b/graphics/pokemon/staraptor/overworld.png
new file mode 100644
index 000000000000..a6f9360ac2a7
Binary files /dev/null and b/graphics/pokemon/staraptor/overworld.png differ
diff --git a/graphics/pokemon/staraptor/overworld_normal.pal b/graphics/pokemon/staraptor/overworld_normal.pal
new file mode 100644
index 000000000000..5ae0c8e448a3
--- /dev/null
+++ b/graphics/pokemon/staraptor/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+32 32 32
+72 72 72
+104 96 96
+224 48 32
+144 128 128
+56 56 56
+104 16 24
+200 200 200
+216 216 216
+248 168 32
+232 232 248
+144 144 144
+192 112 0
+72 64 64
diff --git a/graphics/pokemon/staraptor/overworld_shiny.pal b/graphics/pokemon/staraptor/overworld_shiny.pal
new file mode 100644
index 000000000000..a00b91bace14
--- /dev/null
+++ b/graphics/pokemon/staraptor/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+48 32 16
+96 72 64
+136 80 80
+112 112 136
+176 120 96
+88 56 48
+40 40 48
+200 200 200
+216 216 216
+248 168 32
+232 232 248
+144 144 144
+192 112 0
+96 56 56
diff --git a/graphics/pokemon/staravia/overworld.png b/graphics/pokemon/staravia/overworld.png
new file mode 100644
index 000000000000..f49d10581932
Binary files /dev/null and b/graphics/pokemon/staravia/overworld.png differ
diff --git a/graphics/pokemon/staravia/overworld_normal.pal b/graphics/pokemon/staravia/overworld_normal.pal
new file mode 100644
index 000000000000..aa6b58e4dc95
--- /dev/null
+++ b/graphics/pokemon/staravia/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+32 32 32
+64 64 64
+120 120 120
+88 88 88
+168 152 128
+0 0 0
+192 184 152
+192 112 0
+248 168 32
+184 184 176
+232 232 248
+224 216 208
+144 128 104
+208 200 200
+0 0 0
diff --git a/graphics/pokemon/staravia/overworld_shiny.pal b/graphics/pokemon/staravia/overworld_shiny.pal
new file mode 100644
index 000000000000..a1dc57f1a39c
--- /dev/null
+++ b/graphics/pokemon/staravia/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+32 32 32
+120 72 64
+160 128 120
+136 96 88
+200 160 136
+0 0 0
+216 184 160
+224 152 0
+248 200 32
+184 184 176
+232 232 248
+224 216 208
+176 136 120
+208 200 200
+0 0 0
diff --git a/graphics/pokemon/starly/overworld.png b/graphics/pokemon/starly/overworld.png
new file mode 100644
index 000000000000..9ed2c45c54a0
Binary files /dev/null and b/graphics/pokemon/starly/overworld.png differ
diff --git a/graphics/pokemon/starly/overworld_normal.pal b/graphics/pokemon/starly/overworld_normal.pal
new file mode 100644
index 000000000000..babbecc6b37e
--- /dev/null
+++ b/graphics/pokemon/starly/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 48 48
+104 104 104
+72 72 72
+0 0 0
+184 184 184
+216 216 216
+192 112 0
+248 168 32
+96 96 88
+232 232 248
+80 64 64
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/starly/overworld_shiny.pal b/graphics/pokemon/starly/overworld_shiny.pal
new file mode 100644
index 000000000000..a586e4936190
--- /dev/null
+++ b/graphics/pokemon/starly/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 48 48
+152 120 104
+120 96 72
+0 0 0
+184 184 184
+216 216 216
+192 136 0
+248 200 32
+128 120 88
+232 232 248
+112 88 64
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/starmie/overworld.png b/graphics/pokemon/starmie/overworld.png
new file mode 100644
index 000000000000..b1098f1f7ac1
Binary files /dev/null and b/graphics/pokemon/starmie/overworld.png differ
diff --git a/graphics/pokemon/starmie/overworld_normal.pal b/graphics/pokemon/starmie/overworld_normal.pal
new file mode 100644
index 000000000000..b14064097e9d
--- /dev/null
+++ b/graphics/pokemon/starmie/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 40 64
+136 112 232
+88 88 192
+64 64 112
+0 0 0
+232 176 32
+56 48 16
+104 24 24
+184 40 40
+176 144 24
+240 88 72
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/starmie/overworld_shiny.pal b/graphics/pokemon/starmie/overworld_shiny.pal
new file mode 100644
index 000000000000..17a3770e10d1
--- /dev/null
+++ b/graphics/pokemon/starmie/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 40 64
+120 184 224
+80 144 240
+72 104 184
+0 0 0
+232 160 176
+80 32 64
+32 80 112
+56 120 176
+176 104 144
+80 168 240
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/staryu/overworld.png b/graphics/pokemon/staryu/overworld.png
new file mode 100644
index 000000000000..d9a7d5c0cf42
Binary files /dev/null and b/graphics/pokemon/staryu/overworld.png differ
diff --git a/graphics/pokemon/staryu/overworld_normal.pal b/graphics/pokemon/staryu/overworld_normal.pal
new file mode 100644
index 000000000000..b87941ed3033
--- /dev/null
+++ b/graphics/pokemon/staryu/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 48 16
+0 0 0
+168 120 32
+120 80 8
+232 176 32
+184 40 40
+176 144 24
+224 96 72
+104 24 24
+88 72 40
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/staryu/overworld_shiny.pal b/graphics/pokemon/staryu/overworld_shiny.pal
new file mode 100644
index 000000000000..a954fc80ce64
--- /dev/null
+++ b/graphics/pokemon/staryu/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+32 32 32
+0 0 0
+192 192 192
+144 144 144
+232 176 32
+32 112 152
+176 144 24
+72 168 200
+0 56 104
+112 112 112
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/steelix/overworld.png b/graphics/pokemon/steelix/overworld.png
new file mode 100644
index 000000000000..1a0ff067983d
Binary files /dev/null and b/graphics/pokemon/steelix/overworld.png differ
diff --git a/graphics/pokemon/steelix/overworld_normal.pal b/graphics/pokemon/steelix/overworld_normal.pal
new file mode 100644
index 000000000000..e951d3e46ef6
--- /dev/null
+++ b/graphics/pokemon/steelix/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 64 80
+128 152 168
+88 120 144
+0 0 0
+160 184 200
+192 208 224
+232 232 248
+192 56 56
+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/steelix/overworld_shiny.pal b/graphics/pokemon/steelix/overworld_shiny.pal
new file mode 100644
index 000000000000..ca3b5dd5ba0f
--- /dev/null
+++ b/graphics/pokemon/steelix/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 72 56
+200 160 104
+144 120 88
+0 0 0
+224 184 136
+224 208 160
+232 232 248
+192 56 56
+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/steenee/overworld.png b/graphics/pokemon/steenee/overworld.png
new file mode 100644
index 000000000000..5b45ce5bcc31
Binary files /dev/null and b/graphics/pokemon/steenee/overworld.png differ
diff --git a/graphics/pokemon/steenee/overworld_normal.pal b/graphics/pokemon/steenee/overworld_normal.pal
new file mode 100644
index 000000000000..394284708767
--- /dev/null
+++ b/graphics/pokemon/steenee/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+230 230 245
+232 230 96
+166 232 136
+149 197 110
+133 189 88
+155 151 178
+224 134 142
+94 144 56
+75 111 46
+88 74 94
+172 57 106
+45 63 32
+124 41 77
+0 0 0
+248 248 248
diff --git a/graphics/pokemon/steenee/overworld_shiny.pal b/graphics/pokemon/steenee/overworld_shiny.pal
new file mode 100644
index 000000000000..0cb6bb975017
--- /dev/null
+++ b/graphics/pokemon/steenee/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+208 200 136
+230 96 232
+232 168 240
+200 112 208
+189 88 165
+155 151 178
+224 134 142
+128 64 160
+152 0 224
+88 74 94
+172 57 106
+45 63 32
+124 41 77
+0 0 0
+248 240 200
diff --git a/graphics/pokemon/stonjourner/overworld.png b/graphics/pokemon/stonjourner/overworld.png
new file mode 100644
index 000000000000..b509c9b6de2c
Binary files /dev/null and b/graphics/pokemon/stonjourner/overworld.png differ
diff --git a/graphics/pokemon/stonjourner/overworld_normal.pal b/graphics/pokemon/stonjourner/overworld_normal.pal
new file mode 100644
index 000000000000..d62b57cad403
--- /dev/null
+++ b/graphics/pokemon/stonjourner/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+74 74 65
+24 24 24
+180 180 164
+106 98 98
+65 74 74
+82 65 41
+49 49 49
+98 106 98
+115 82 41
+131 131 123
+246 246 189
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/stonjourner/overworld_shiny.pal b/graphics/pokemon/stonjourner/overworld_shiny.pal
new file mode 100644
index 000000000000..e489d9a1b5d0
--- /dev/null
+++ b/graphics/pokemon/stonjourner/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+57 57 57
+24 24 24
+115 123 106
+57 57 49
+115 115 115
+82 65 41
+49 49 49
+172 180 172
+115 82 41
+82 82 74
+246 246 189
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/stoutland/overworld.png b/graphics/pokemon/stoutland/overworld.png
new file mode 100644
index 000000000000..f2e49bdd8327
Binary files /dev/null and b/graphics/pokemon/stoutland/overworld.png differ
diff --git a/graphics/pokemon/stoutland/overworld_normal.pal b/graphics/pokemon/stoutland/overworld_normal.pal
new file mode 100644
index 000000000000..1fdbfe3d85b6
--- /dev/null
+++ b/graphics/pokemon/stoutland/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 72 24
+0 0 0
+54 54 78
+232 200 144
+144 88 64
+96 96 140
+216 144 88
+176 136 72
+72 72 104
+88 88 88
+192 192 192
+232 232 248
+120 144 152
+248 248 248
+0 0 0
diff --git a/graphics/pokemon/stoutland/overworld_shiny.pal b/graphics/pokemon/stoutland/overworld_shiny.pal
new file mode 100644
index 000000000000..9720869b140f
--- /dev/null
+++ b/graphics/pokemon/stoutland/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+99 75 33
+0 0 0
+32 48 40
+240 184 64
+144 88 64
+48 80 64
+176 112 56
+176 136 72
+32 48 40
+102 94 95
+193 183 184
+193 183 184
+193 183 184
+193 183 184
+0 0 0
diff --git a/graphics/pokemon/stufful/overworld.png b/graphics/pokemon/stufful/overworld.png
new file mode 100644
index 000000000000..ad57e8e63028
Binary files /dev/null and b/graphics/pokemon/stufful/overworld.png differ
diff --git a/graphics/pokemon/stufful/overworld_normal.pal b/graphics/pokemon/stufful/overworld_normal.pal
new file mode 100644
index 000000000000..ca377b1ee996
--- /dev/null
+++ b/graphics/pokemon/stufful/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+245 245 245
+235 221 226
+205 205 205
+237 158 190
+189 155 167
+240 149 172
+238 122 152
+120 91 102
+222 58 99
+162 82 101
+92 73 79
+82 42 49
+57 54 54
+45 33 33
+0 0 0
diff --git a/graphics/pokemon/stufful/overworld_shiny.pal b/graphics/pokemon/stufful/overworld_shiny.pal
new file mode 100644
index 000000000000..b057009d110d
--- /dev/null
+++ b/graphics/pokemon/stufful/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+245 245 245
+235 221 226
+205 205 205
+248 192 72
+189 155 167
+160 80 8
+200 144 40
+120 91 102
+200 64 8
+162 82 101
+92 73 79
+82 42 49
+57 54 54
+45 33 33
+0 0 0
diff --git a/graphics/pokemon/stunfisk/galarian/overworld.png b/graphics/pokemon/stunfisk/galarian/overworld.png
new file mode 100644
index 000000000000..dc394873e7c5
Binary files /dev/null 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
new file mode 100644
index 000000000000..5d6a48cd7699
--- /dev/null
+++ b/graphics/pokemon/stunfisk/galarian/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+123 58 58
+29 32 27
+59 64 56
+95 102 90
+142 172 96
+157 146 133
+205 246 140
+255 255 255
+0 0 0
+119 108 95
+168 20 20
+199 199 199
+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
new file mode 100644
index 000000000000..7fe680b775a3
--- /dev/null
+++ b/graphics/pokemon/stunfisk/galarian/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+123 58 58
+29 32 27
+59 64 56
+95 102 90
+168 160 56
+160 128 112
+240 224 80
+255 255 255
+0 0 0
+119 108 95
+168 20 20
+199 199 199
+12 12 12
+13 13 13
+14 14 14
+15 15 15
diff --git a/graphics/pokemon/stunfisk/overworld.png b/graphics/pokemon/stunfisk/overworld.png
new file mode 100644
index 000000000000..b9f2201c9547
Binary files /dev/null and b/graphics/pokemon/stunfisk/overworld.png differ
diff --git a/graphics/pokemon/stunfisk/overworld_normal.pal b/graphics/pokemon/stunfisk/overworld_normal.pal
new file mode 100644
index 000000000000..d4a0040aa3ba
--- /dev/null
+++ b/graphics/pokemon/stunfisk/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+93 93 33
+106 63 54
+245 245 1
+201 201 1
+198 136 125
+149 95 83
+240 183 173
+0 0 0
+255 237 236
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/stunfisk/overworld_shiny.pal b/graphics/pokemon/stunfisk/overworld_shiny.pal
new file mode 100644
index 000000000000..eb886eb8b98a
--- /dev/null
+++ b/graphics/pokemon/stunfisk/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+24 104 152
+80 64 56
+64 200 232
+40 152 192
+184 152 104
+160 128 64
+208 176 128
+0 0 0
+255 237 236
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/stunky/overworld.png b/graphics/pokemon/stunky/overworld.png
new file mode 100644
index 000000000000..b6c7c2b7a537
Binary files /dev/null and b/graphics/pokemon/stunky/overworld.png differ
diff --git a/graphics/pokemon/stunky/overworld_normal.pal b/graphics/pokemon/stunky/overworld_normal.pal
new file mode 100644
index 000000000000..1484043595a1
--- /dev/null
+++ b/graphics/pokemon/stunky/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 40 64
+88 64 96
+88 80 48
+48 48 48
+232 216 144
+184 168 112
+136 80 136
+0 0 0
+184 80 56
+216 136 104
+112 112 112
+232 232 248
+184 184 200
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/stunky/overworld_shiny.pal b/graphics/pokemon/stunky/overworld_shiny.pal
new file mode 100644
index 000000000000..1623f89d8504
--- /dev/null
+++ b/graphics/pokemon/stunky/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+112 0 40
+152 24 64
+88 80 48
+48 48 48
+232 216 144
+184 168 112
+208 64 104
+0 0 0
+184 80 56
+216 136 104
+112 112 112
+232 232 248
+184 184 200
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/sudowoodo/overworld.png b/graphics/pokemon/sudowoodo/overworld.png
new file mode 100644
index 000000000000..58dceaf06728
Binary files /dev/null and b/graphics/pokemon/sudowoodo/overworld.png differ
diff --git a/graphics/pokemon/sudowoodo/overworld_normal.pal b/graphics/pokemon/sudowoodo/overworld_normal.pal
new file mode 100644
index 000000000000..068f66d77275
--- /dev/null
+++ b/graphics/pokemon/sudowoodo/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+88 64 16
+0 0 0
+128 104 64
+184 152 88
+160 128 88
+24 80 16
+120 208 120
+72 152 64
+232 232 248
+224 120 120
+224 192 0
+200 168 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/sudowoodo/overworld_shiny.pal b/graphics/pokemon/sudowoodo/overworld_shiny.pal
new file mode 100644
index 000000000000..688e5b7769fa
--- /dev/null
+++ b/graphics/pokemon/sudowoodo/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+88 64 16
+0 0 0
+136 120 40
+200 192 88
+168 160 64
+112 32 8
+224 144 72
+168 56 40
+232 232 248
+224 120 120
+224 192 0
+200 168 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/suicune/overworld.png b/graphics/pokemon/suicune/overworld.png
new file mode 100644
index 000000000000..8c7070c238a4
Binary files /dev/null and b/graphics/pokemon/suicune/overworld.png differ
diff --git a/graphics/pokemon/suicune/overworld_normal.pal b/graphics/pokemon/suicune/overworld_normal.pal
new file mode 100644
index 000000000000..2cb612185f54
--- /dev/null
+++ b/graphics/pokemon/suicune/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 32 96
+160 96 176
+24 56 88
+0 0 0
+96 200 192
+48 152 136
+112 56 136
+232 232 248
+48 96 136
+80 80 96
+184 200 200
+184 48 48
+96 152 192
+128 152 152
+0 0 0
diff --git a/graphics/pokemon/suicune/overworld_shiny.pal b/graphics/pokemon/suicune/overworld_shiny.pal
new file mode 100644
index 000000000000..cd3ee9091d52
--- /dev/null
+++ b/graphics/pokemon/suicune/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 40 64
+96 160 216
+24 96 152
+0 0 0
+120 224 216
+56 200 176
+8 88 152
+232 232 248
+48 112 176
+80 80 96
+184 200 200
+184 48 48
+144 200 232
+128 152 152
+0 0 0
diff --git a/graphics/pokemon/sunflora/overworld.png b/graphics/pokemon/sunflora/overworld.png
new file mode 100644
index 000000000000..2870eb32a202
Binary files /dev/null and b/graphics/pokemon/sunflora/overworld.png differ
diff --git a/graphics/pokemon/sunflora/overworld_normal.pal b/graphics/pokemon/sunflora/overworld_normal.pal
new file mode 100644
index 000000000000..15ecb4f27630
--- /dev/null
+++ b/graphics/pokemon/sunflora/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+0 0 0
+128 72 0
+224 160 40
+224 184 16
+240 224 112
+232 192 32
+200 128 32
+40 80 16
+88 184 80
+120 208 112
+64 136 48
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/sunflora/overworld_shiny.pal b/graphics/pokemon/sunflora/overworld_shiny.pal
new file mode 100644
index 000000000000..8a3f67ad50c9
--- /dev/null
+++ b/graphics/pokemon/sunflora/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+0 0 0
+56 96 0
+168 176 0
+208 200 32
+248 248 136
+248 232 88
+200 152 32
+56 64 16
+128 136 64
+168 176 96
+88 104 40
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/sunkern/overworld.png b/graphics/pokemon/sunkern/overworld.png
new file mode 100644
index 000000000000..7482251893ce
Binary files /dev/null and b/graphics/pokemon/sunkern/overworld.png differ
diff --git a/graphics/pokemon/sunkern/overworld_normal.pal b/graphics/pokemon/sunkern/overworld_normal.pal
new file mode 100644
index 000000000000..85a9e8187132
--- /dev/null
+++ b/graphics/pokemon/sunkern/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+40 80 16
+0 0 0
+112 192 80
+104 160 56
+88 64 0
+216 184 48
+240 216 112
+152 104 8
+72 96 112
+32 48 56
+232 232 248
+184 136 8
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/sunkern/overworld_shiny.pal b/graphics/pokemon/sunkern/overworld_shiny.pal
new file mode 100644
index 000000000000..8256fa6706bd
--- /dev/null
+++ b/graphics/pokemon/sunkern/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 64 16
+0 0 0
+176 192 80
+152 160 56
+112 48 0
+232 184 56
+248 208 128
+176 96 8
+72 96 112
+32 48 56
+232 232 248
+216 136 8
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/surskit/overworld.png b/graphics/pokemon/surskit/overworld.png
new file mode 100644
index 000000000000..f5a5ebf13acc
Binary files /dev/null and b/graphics/pokemon/surskit/overworld.png differ
diff --git a/graphics/pokemon/surskit/overworld_normal.pal b/graphics/pokemon/surskit/overworld_normal.pal
new file mode 100644
index 000000000000..b7935fcc2f05
--- /dev/null
+++ b/graphics/pokemon/surskit/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 80 16
+0 0 0
+224 208 72
+184 168 48
+144 120 32
+40 72 96
+96 144 184
+32 40 56
+72 104 136
+120 176 224
+232 232 248
+192 56 56
+144 40 40
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/surskit/overworld_shiny.pal b/graphics/pokemon/surskit/overworld_shiny.pal
new file mode 100644
index 000000000000..e39c9ca8e40c
--- /dev/null
+++ b/graphics/pokemon/surskit/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 80 16
+0 0 0
+224 208 72
+184 168 48
+144 120 32
+48 64 128
+72 88 136
+32 40 56
+56 72 136
+104 120 152
+232 232 248
+192 56 56
+144 40 40
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/swablu/overworld.png b/graphics/pokemon/swablu/overworld.png
new file mode 100644
index 000000000000..cc22fadd58f0
Binary files /dev/null and b/graphics/pokemon/swablu/overworld.png differ
diff --git a/graphics/pokemon/swablu/overworld_normal.pal b/graphics/pokemon/swablu/overworld_normal.pal
new file mode 100644
index 000000000000..3bc8edb828fa
--- /dev/null
+++ b/graphics/pokemon/swablu/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 80 120
+112 176 208
+64 112 152
+112 128 144
+0 0 0
+248 248 248
+168 176 192
+88 144 176
+72 80 104
+224 224 232
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/swablu/overworld_shiny.pal b/graphics/pokemon/swablu/overworld_shiny.pal
new file mode 100644
index 000000000000..e018450c6ada
--- /dev/null
+++ b/graphics/pokemon/swablu/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+112 80 40
+248 216 120
+152 120 64
+112 128 144
+0 0 0
+248 248 248
+168 176 192
+208 152 48
+72 80 104
+224 224 232
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/swadloon/overworld.png b/graphics/pokemon/swadloon/overworld.png
new file mode 100644
index 000000000000..50d6ccc7894d
Binary files /dev/null and b/graphics/pokemon/swadloon/overworld.png differ
diff --git a/graphics/pokemon/swadloon/overworld_normal.pal b/graphics/pokemon/swadloon/overworld_normal.pal
new file mode 100644
index 000000000000..3ac446432253
--- /dev/null
+++ b/graphics/pokemon/swadloon/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+24 112 72
+0 0 0
+144 200 8
+88 152 48
+176 160 40
+248 232 56
+184 184 168
+252 252 252
+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/swadloon/overworld_shiny.pal b/graphics/pokemon/swadloon/overworld_shiny.pal
new file mode 100644
index 000000000000..899ee15b310f
--- /dev/null
+++ b/graphics/pokemon/swadloon/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 72 8
+0 0 0
+176 208 0
+120 152 8
+160 152 136
+248 248 248
+184 184 168
+248 152 128
+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/swalot/overworld.png b/graphics/pokemon/swalot/overworld.png
new file mode 100644
index 000000000000..0d0850d8aedc
Binary files /dev/null and b/graphics/pokemon/swalot/overworld.png differ
diff --git a/graphics/pokemon/swalot/overworld_normal.pal b/graphics/pokemon/swalot/overworld_normal.pal
new file mode 100644
index 000000000000..f454bbdaaf7c
--- /dev/null
+++ b/graphics/pokemon/swalot/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 40 96
+160 128 192
+184 144 216
+0 0 0
+136 104 160
+120 88 144
+96 72 120
+216 104 104
+160 24 24
+168 128 56
+232 184 64
+56 72 80
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/swalot/overworld_shiny.pal b/graphics/pokemon/swalot/overworld_shiny.pal
new file mode 100644
index 000000000000..18fa37e4c56c
--- /dev/null
+++ b/graphics/pokemon/swalot/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 80 96
+144 200 232
+184 208 240
+0 0 0
+120 168 200
+104 144 168
+80 112 128
+216 104 104
+160 24 24
+224 112 56
+248 168 88
+56 72 80
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/swampert/overworld.png b/graphics/pokemon/swampert/overworld.png
new file mode 100644
index 000000000000..70415f47d334
Binary files /dev/null and b/graphics/pokemon/swampert/overworld.png differ
diff --git a/graphics/pokemon/swampert/overworld_normal.pal b/graphics/pokemon/swampert/overworld_normal.pal
new file mode 100644
index 000000000000..6daae155622c
--- /dev/null
+++ b/graphics/pokemon/swampert/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 64 72
+0 0 0
+160 160 192
+88 104 128
+48 72 112
+96 160 208
+128 184 240
+160 72 16
+248 192 128
+240 128 16
+88 120 160
+192 88 16
+48 56 80
+200 200 224
+0 0 0
diff --git a/graphics/pokemon/swampert/overworld_shiny.pal b/graphics/pokemon/swampert/overworld_shiny.pal
new file mode 100644
index 000000000000..85a7d57f6e04
--- /dev/null
+++ b/graphics/pokemon/swampert/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 64 72
+0 0 0
+184 160 192
+112 104 128
+88 64 112
+184 144 208
+216 168 240
+184 48 16
+248 192 128
+248 112 16
+144 112 160
+216 72 16
+48 56 80
+216 200 224
+0 0 0
diff --git a/graphics/pokemon/swanna/overworld.png b/graphics/pokemon/swanna/overworld.png
new file mode 100644
index 000000000000..cd958e2e25b8
Binary files /dev/null and b/graphics/pokemon/swanna/overworld.png differ
diff --git a/graphics/pokemon/swanna/overworld_normal.pal b/graphics/pokemon/swanna/overworld_normal.pal
new file mode 100644
index 000000000000..1daee94ad2d5
--- /dev/null
+++ b/graphics/pokemon/swanna/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+180 197 213
+49 49 82
+238 240 246
+229 229 247
+51 51 51
+64 64 84
+76 109 158
+156 160 124
+165 205 238
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/swanna/overworld_shiny.pal b/graphics/pokemon/swanna/overworld_shiny.pal
new file mode 100644
index 000000000000..56d7661880e3
--- /dev/null
+++ b/graphics/pokemon/swanna/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+200 184 224
+49 49 82
+238 240 246
+229 229 247
+51 51 51
+64 64 84
+77 64 156
+64 64 84
+180 141 165
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/swellow/overworld.png b/graphics/pokemon/swellow/overworld.png
new file mode 100644
index 000000000000..06c500273119
Binary files /dev/null and b/graphics/pokemon/swellow/overworld.png differ
diff --git a/graphics/pokemon/swellow/overworld_normal.pal b/graphics/pokemon/swellow/overworld_normal.pal
new file mode 100644
index 000000000000..eefe0950b8a6
--- /dev/null
+++ b/graphics/pokemon/swellow/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 48 72
+104 32 64
+0 0 0
+48 72 112
+104 136 192
+72 104 152
+176 64 80
+208 208 232
+216 80 88
+184 184 192
+88 80 16
+224 208 72
+232 232 248
+64 64 64
+152 136 40
diff --git a/graphics/pokemon/swellow/overworld_shiny.pal b/graphics/pokemon/swellow/overworld_shiny.pal
new file mode 100644
index 000000000000..d1b1e053948a
--- /dev/null
+++ b/graphics/pokemon/swellow/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+16 72 72
+144 64 32
+0 0 0
+40 112 96
+88 192 144
+64 152 120
+192 96 48
+208 208 232
+240 136 64
+184 184 192
+104 80 16
+224 208 72
+232 232 248
+64 64 64
+168 144 40
diff --git a/graphics/pokemon/swinub/overworld.png b/graphics/pokemon/swinub/overworld.png
new file mode 100644
index 000000000000..60bad0ef6118
Binary files /dev/null and b/graphics/pokemon/swinub/overworld.png differ
diff --git a/graphics/pokemon/swinub/overworld_normal.pal b/graphics/pokemon/swinub/overworld_normal.pal
new file mode 100644
index 000000000000..e5b76b22ba78
--- /dev/null
+++ b/graphics/pokemon/swinub/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+72 40 8
+168 128 72
+112 88 80
+184 152 104
+144 96 56
+144 40 64
+200 96 112
+232 136 160
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/swinub/overworld_shiny.pal b/graphics/pokemon/swinub/overworld_shiny.pal
new file mode 100644
index 000000000000..fa2d2fec7181
--- /dev/null
+++ b/graphics/pokemon/swinub/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+0 0 0
+40 88 48
+120 144 128
+72 104 80
+144 168 152
+96 136 104
+144 40 64
+200 96 112
+232 136 160
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/swirlix/overworld.png b/graphics/pokemon/swirlix/overworld.png
new file mode 100644
index 000000000000..640367b737e9
Binary files /dev/null and b/graphics/pokemon/swirlix/overworld.png differ
diff --git a/graphics/pokemon/swirlix/overworld_normal.pal b/graphics/pokemon/swirlix/overworld_normal.pal
new file mode 100644
index 000000000000..2e81ff484abc
--- /dev/null
+++ b/graphics/pokemon/swirlix/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+81 59 71
+16 16 16
+230 238 248
+198 149 156
+183 161 182
+165 59 64
+195 81 97
+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/swirlix/overworld_shiny.pal b/graphics/pokemon/swirlix/overworld_shiny.pal
new file mode 100644
index 000000000000..b7f64e0106a8
--- /dev/null
+++ b/graphics/pokemon/swirlix/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+108 75 58
+16 16 16
+245 228 185
+147 111 93
+211 188 142
+165 59 64
+147 111 93
+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/swoobat/overworld.png b/graphics/pokemon/swoobat/overworld.png
new file mode 100644
index 000000000000..ad665f834665
Binary files /dev/null and b/graphics/pokemon/swoobat/overworld.png differ
diff --git a/graphics/pokemon/swoobat/overworld_normal.pal b/graphics/pokemon/swoobat/overworld_normal.pal
new file mode 100644
index 000000000000..3b15128f7045
--- /dev/null
+++ b/graphics/pokemon/swoobat/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+104 48 152
+16 56 64
+24 160 200
+48 120 144
+0 0 0
+168 216 240
+112 168 192
+29 29 29
+64 72 88
+192 104 120
+232 232 248
+136 72 80
+240 168 176
+184 184 192
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/swoobat/overworld_shiny.pal b/graphics/pokemon/swoobat/overworld_shiny.pal
new file mode 100644
index 000000000000..84b110886f8a
--- /dev/null
+++ b/graphics/pokemon/swoobat/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+104 48 152
+72 32 0
+248 192 48
+232 144 16
+1 1 1
+198 217 180
+198 217 180
+72 32 0
+96 48 16
+167 89 102
+198 217 180
+167 89 102
+198 217 180
+198 217 180
+1 1 1
+0 0 0
diff --git a/graphics/pokemon/sylveon/overworld.png b/graphics/pokemon/sylveon/overworld.png
new file mode 100644
index 000000000000..514d3df20737
Binary files /dev/null and b/graphics/pokemon/sylveon/overworld.png differ
diff --git a/graphics/pokemon/sylveon/overworld_normal.pal b/graphics/pokemon/sylveon/overworld_normal.pal
new file mode 100644
index 000000000000..c280882366a1
--- /dev/null
+++ b/graphics/pokemon/sylveon/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+144 200 152
+16 16 16
+238 116 159
+107 29 56
+193 67 111
+68 54 70
+74 180 244
+237 241 227
+12 111 216
+197 180 200
+109 188 235
+109 161 235
+112 24 34
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/sylveon/overworld_shiny.pal b/graphics/pokemon/sylveon/overworld_shiny.pal
new file mode 100644
index 000000000000..e8487fd5a2be
--- /dev/null
+++ b/graphics/pokemon/sylveon/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+144 200 152
+16 16 16
+103 191 244
+21 85 124
+40 130 185
+68 54 70
+238 116 159
+237 241 227
+193 67 111
+197 180 200
+238 116 159
+193 67 111
+6 42 84
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/taillow/overworld.png b/graphics/pokemon/taillow/overworld.png
new file mode 100644
index 000000000000..c6ee696ace2b
Binary files /dev/null and b/graphics/pokemon/taillow/overworld.png differ
diff --git a/graphics/pokemon/taillow/overworld_normal.pal b/graphics/pokemon/taillow/overworld_normal.pal
new file mode 100644
index 000000000000..9a576c9f8f19
--- /dev/null
+++ b/graphics/pokemon/taillow/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 48 72
+104 136 192
+72 104 152
+48 72 112
+240 104 104
+0 0 0
+144 48 80
+232 232 248
+192 72 88
+168 168 176
+224 208 72
+168 144 40
+64 64 64
+120 120 128
+104 80 16
diff --git a/graphics/pokemon/taillow/overworld_shiny.pal b/graphics/pokemon/taillow/overworld_shiny.pal
new file mode 100644
index 000000000000..b7e2aaa47dca
--- /dev/null
+++ b/graphics/pokemon/taillow/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 72 72
+88 192 144
+64 152 120
+40 112 96
+240 136 64
+0 0 0
+144 64 32
+232 232 248
+192 96 48
+168 168 176
+224 208 72
+168 144 40
+64 64 64
+120 120 128
+104 80 16
diff --git a/graphics/pokemon/talonflame/overworld.png b/graphics/pokemon/talonflame/overworld.png
new file mode 100644
index 000000000000..43760d9e8512
Binary files /dev/null and b/graphics/pokemon/talonflame/overworld.png differ
diff --git a/graphics/pokemon/talonflame/overworld_normal.pal b/graphics/pokemon/talonflame/overworld_normal.pal
new file mode 100644
index 000000000000..6573ab204dd6
--- /dev/null
+++ b/graphics/pokemon/talonflame/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 184 168
+16 16 16
+154 154 154
+112 103 96
+58 56 57
+190 189 187
+136 36 20
+248 127 100
+229 76 47
+156 80 68
+235 178 25
+252 224 99
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/talonflame/overworld_shiny.pal b/graphics/pokemon/talonflame/overworld_shiny.pal
new file mode 100644
index 000000000000..dce07a26afd1
--- /dev/null
+++ b/graphics/pokemon/talonflame/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+120 184 168
+16 16 16
+160 128 93
+131 31 32
+93 16 16
+207 167 126
+136 36 20
+254 97 85
+226 71 59
+156 80 68
+235 178 25
+252 224 99
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/tangela/overworld.png b/graphics/pokemon/tangela/overworld.png
new file mode 100644
index 000000000000..d2105e408941
Binary files /dev/null and b/graphics/pokemon/tangela/overworld.png differ
diff --git a/graphics/pokemon/tangela/overworld_normal.pal b/graphics/pokemon/tangela/overworld_normal.pal
new file mode 100644
index 000000000000..6c3d79edc511
--- /dev/null
+++ b/graphics/pokemon/tangela/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+24 32 32
+104 160 168
+72 136 144
+0 0 0
+88 112 112
+64 64 64
+120 144 176
+232 232 248
+168 184 208
+160 48 40
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/tangela/overworld_shiny.pal b/graphics/pokemon/tangela/overworld_shiny.pal
new file mode 100644
index 000000000000..fddc5dd45f91
--- /dev/null
+++ b/graphics/pokemon/tangela/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+24 32 32
+96 184 104
+56 136 56
+0 0 0
+80 96 80
+64 64 64
+120 144 176
+232 232 248
+168 184 208
+160 48 40
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/tangrowth/overworld.png b/graphics/pokemon/tangrowth/overworld.png
new file mode 100644
index 000000000000..2f1537c6cfdb
Binary files /dev/null and b/graphics/pokemon/tangrowth/overworld.png differ
diff --git a/graphics/pokemon/tangrowth/overworld_normal.pal b/graphics/pokemon/tangrowth/overworld_normal.pal
new file mode 100644
index 000000000000..b239c0d30bd6
--- /dev/null
+++ b/graphics/pokemon/tangrowth/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 48 48
+24 32 48
+56 136 200
+56 104 152
+0 0 0
+48 80 112
+40 64 88
+232 232 248
+168 184 208
+120 120 120
+200 64 112
+128 48 72
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/tangrowth/overworld_shiny.pal b/graphics/pokemon/tangrowth/overworld_shiny.pal
new file mode 100644
index 000000000000..79de84534b40
--- /dev/null
+++ b/graphics/pokemon/tangrowth/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 48 48
+24 48 40
+96 200 104
+72 160 88
+0 0 0
+64 120 72
+32 112 56
+232 232 248
+168 184 208
+120 120 120
+216 64 88
+144 40 40
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/tapu_bulu/overworld.png b/graphics/pokemon/tapu_bulu/overworld.png
new file mode 100644
index 000000000000..0f0cf0239a10
Binary files /dev/null and b/graphics/pokemon/tapu_bulu/overworld.png differ
diff --git a/graphics/pokemon/tapu_bulu/overworld_normal.pal b/graphics/pokemon/tapu_bulu/overworld_normal.pal
new file mode 100644
index 000000000000..0803e39c46be
--- /dev/null
+++ b/graphics/pokemon/tapu_bulu/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+218 210 86
+185 162 27
+145 144 142
+50 185 171
+133 99 99
+79 88 78
+97 81 81
+108 85 18
+255 63 55
+181 48 61
+67 54 54
+121 29 28
+45 34 34
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/tapu_bulu/overworld_shiny.pal b/graphics/pokemon/tapu_bulu/overworld_shiny.pal
new file mode 100644
index 000000000000..266b5af5fdc0
--- /dev/null
+++ b/graphics/pokemon/tapu_bulu/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+232 216 72
+192 168 16
+145 144 142
+50 185 171
+133 99 99
+79 88 78
+97 81 81
+108 85 18
+64 64 72
+40 40 48
+67 54 54
+32 40 32
+45 34 34
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/tapu_fini/overworld.png b/graphics/pokemon/tapu_fini/overworld.png
new file mode 100644
index 000000000000..21de74c49823
Binary files /dev/null and b/graphics/pokemon/tapu_fini/overworld.png differ
diff --git a/graphics/pokemon/tapu_fini/overworld_normal.pal b/graphics/pokemon/tapu_fini/overworld_normal.pal
new file mode 100644
index 000000000000..afb189f124bd
--- /dev/null
+++ b/graphics/pokemon/tapu_fini/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+206 206 206
+147 193 252
+112 196 230
+94 128 187
+126 87 198
+85 85 85
+87 61 131
+36 63 111
+55 55 55
+43 30 67
+53 29 70
+16 16 16
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/tapu_fini/overworld_shiny.pal b/graphics/pokemon/tapu_fini/overworld_shiny.pal
new file mode 100644
index 000000000000..e2b7ce64abee
--- /dev/null
+++ b/graphics/pokemon/tapu_fini/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+206 206 206
+168 216 248
+112 196 230
+104 160 200
+64 64 72
+85 85 85
+40 40 48
+36 63 111
+55 55 55
+43 30 67
+53 29 70
+16 16 16
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/tapu_koko/overworld.png b/graphics/pokemon/tapu_koko/overworld.png
new file mode 100644
index 000000000000..17eb51eb6d60
Binary files /dev/null and b/graphics/pokemon/tapu_koko/overworld.png differ
diff --git a/graphics/pokemon/tapu_koko/overworld_normal.pal b/graphics/pokemon/tapu_koko/overworld_normal.pal
new file mode 100644
index 000000000000..3f879409b71a
--- /dev/null
+++ b/graphics/pokemon/tapu_koko/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+248 248 248
+247 218 64
+208 208 208
+217 189 38
+189 163 21
+208 128 56
+46 179 185
+97 97 97
+173 96 10
+184 88 16
+112 80 24
+66 38 3
+52 52 52
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/tapu_koko/overworld_shiny.pal b/graphics/pokemon/tapu_koko/overworld_shiny.pal
new file mode 100644
index 000000000000..220447d668d0
--- /dev/null
+++ b/graphics/pokemon/tapu_koko/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+248 248 248
+64 64 72
+208 208 208
+40 40 48
+40 40 48
+240 160 72
+46 179 185
+97 97 97
+173 96 10
+200 112 24
+112 80 24
+66 38 3
+52 52 52
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/tapu_lele/overworld.png b/graphics/pokemon/tapu_lele/overworld.png
new file mode 100644
index 000000000000..eed688ac674f
Binary files /dev/null and b/graphics/pokemon/tapu_lele/overworld.png differ
diff --git a/graphics/pokemon/tapu_lele/overworld_normal.pal b/graphics/pokemon/tapu_lele/overworld_normal.pal
new file mode 100644
index 000000000000..72a35e8e681e
--- /dev/null
+++ b/graphics/pokemon/tapu_lele/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+253 255 255
+255 147 191
+183 183 182
+59 219 203
+255 113 131
+203 99 142
+225 74 98
+89 92 89
+137 41 56
+103 46 70
+64 47 53
+63 63 58
+36 33 28
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/tapu_lele/overworld_shiny.pal b/graphics/pokemon/tapu_lele/overworld_shiny.pal
new file mode 100644
index 000000000000..1a9ff7f3f73a
--- /dev/null
+++ b/graphics/pokemon/tapu_lele/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+253 255 255
+64 64 72
+183 183 182
+59 219 203
+255 113 131
+40 40 48
+225 74 98
+89 92 89
+137 41 56
+103 46 70
+64 47 53
+63 63 58
+36 33 28
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/tauros/overworld.png b/graphics/pokemon/tauros/overworld.png
new file mode 100644
index 000000000000..589016e044b5
Binary files /dev/null and b/graphics/pokemon/tauros/overworld.png differ
diff --git a/graphics/pokemon/tauros/overworld_normal.pal b/graphics/pokemon/tauros/overworld_normal.pal
new file mode 100644
index 000000000000..9068909bcbbe
--- /dev/null
+++ b/graphics/pokemon/tauros/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 32 16
+0 0 0
+200 152 64
+112 128 168
+152 120 72
+192 192 208
+80 80 104
+144 144 144
+104 96 88
+224 168 72
+72 64 64
+232 232 248
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/tauros/overworld_shiny.pal b/graphics/pokemon/tauros/overworld_shiny.pal
new file mode 100644
index 000000000000..93c18b805fa0
--- /dev/null
+++ b/graphics/pokemon/tauros/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 32 16
+0 0 0
+240 168 32
+112 128 168
+200 120 40
+192 192 208
+80 80 104
+144 144 144
+104 200 48
+248 208 64
+64 152 56
+232 232 248
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/tauros/paldean_blaze_breed/front.ase b/graphics/pokemon/tauros/paldean_blaze_breed/front.ase
deleted file mode 100644
index f0e555005184..000000000000
Binary files a/graphics/pokemon/tauros/paldean_blaze_breed/front.ase and /dev/null differ
diff --git a/graphics/pokemon/teddiursa/overworld.png b/graphics/pokemon/teddiursa/overworld.png
new file mode 100644
index 000000000000..1246941c742f
Binary files /dev/null and b/graphics/pokemon/teddiursa/overworld.png differ
diff --git a/graphics/pokemon/teddiursa/overworld_normal.pal b/graphics/pokemon/teddiursa/overworld_normal.pal
new file mode 100644
index 000000000000..e80627f613be
--- /dev/null
+++ b/graphics/pokemon/teddiursa/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 48 16
+0 0 0
+232 160 56
+152 96 32
+200 120 32
+88 72 64
+240 224 192
+216 200 136
+232 232 248
+224 200 96
+176 184 192
+200 208 224
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/teddiursa/overworld_shiny.pal b/graphics/pokemon/teddiursa/overworld_shiny.pal
new file mode 100644
index 000000000000..3a2c814db428
--- /dev/null
+++ b/graphics/pokemon/teddiursa/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+56 72 56
+0 0 0
+144 208 144
+88 144 96
+112 176 120
+88 72 64
+240 224 192
+240 208 152
+232 232 248
+240 184 112
+176 184 192
+200 208 224
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/tentacool/overworld.png b/graphics/pokemon/tentacool/overworld.png
new file mode 100644
index 000000000000..4c626599f1bc
Binary files /dev/null and b/graphics/pokemon/tentacool/overworld.png differ
diff --git a/graphics/pokemon/tentacool/overworld_normal.pal b/graphics/pokemon/tentacool/overworld_normal.pal
new file mode 100644
index 000000000000..f9f57b53462a
--- /dev/null
+++ b/graphics/pokemon/tentacool/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 72 96
+72 8 40
+72 144 160
+120 192 240
+0 0 0
+144 24 88
+232 232 248
+248 160 160
+40 104 120
+224 48 96
+64 64 64
+208 208 208
+64 48 40
+176 120 72
+208 168 96
diff --git a/graphics/pokemon/tentacool/overworld_shiny.pal b/graphics/pokemon/tentacool/overworld_shiny.pal
new file mode 100644
index 000000000000..7f2681d5e7be
--- /dev/null
+++ b/graphics/pokemon/tentacool/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+80 48 104
+8 48 64
+160 128 176
+200 168 216
+0 0 0
+40 120 88
+232 232 248
+112 200 160
+120 88 144
+40 168 120
+64 64 64
+208 208 208
+64 48 40
+176 120 72
+208 168 96
diff --git a/graphics/pokemon/tentacruel/overworld.png b/graphics/pokemon/tentacruel/overworld.png
new file mode 100644
index 000000000000..fa10e84a2d43
Binary files /dev/null and b/graphics/pokemon/tentacruel/overworld.png differ
diff --git a/graphics/pokemon/tentacruel/overworld_normal.pal b/graphics/pokemon/tentacruel/overworld_normal.pal
new file mode 100644
index 000000000000..653e3ecd8a94
--- /dev/null
+++ b/graphics/pokemon/tentacruel/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 72 96
+0 0 0
+120 192 240
+72 8 40
+80 152 168
+144 24 88
+248 160 160
+232 232 248
+224 48 96
+40 104 120
+64 64 64
+168 168 168
+152 120 88
+184 160 120
+0 0 0
diff --git a/graphics/pokemon/tentacruel/overworld_shiny.pal b/graphics/pokemon/tentacruel/overworld_shiny.pal
new file mode 100644
index 000000000000..671f4748c544
--- /dev/null
+++ b/graphics/pokemon/tentacruel/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 160 176
+48 64 104
+0 0 0
+184 192 216
+8 48 64
+136 152 176
+40 120 88
+112 200 160
+232 232 248
+40 168 120
+88 104 144
+64 64 64
+168 168 168
+152 120 88
+184 160 120
+0 0 0
diff --git a/graphics/pokemon/tepig/overworld.png b/graphics/pokemon/tepig/overworld.png
new file mode 100644
index 000000000000..b600bd7e74fb
Binary files /dev/null and b/graphics/pokemon/tepig/overworld.png differ
diff --git a/graphics/pokemon/tepig/overworld_normal.pal b/graphics/pokemon/tepig/overworld_normal.pal
new file mode 100644
index 000000000000..2ee7f03d2a4a
--- /dev/null
+++ b/graphics/pokemon/tepig/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+57 37 38
+0 0 0
+115 86 77
+80 60 53
+80 60 53
+208 96 0
+241 134 56
+248 192 0
+241 134 56
+201 67 66
+232 232 248
+115 86 77
+201 67 66
+200 200 200
+96 64 32
diff --git a/graphics/pokemon/tepig/overworld_shiny.pal b/graphics/pokemon/tepig/overworld_shiny.pal
new file mode 100644
index 000000000000..ffcbe32219e7
--- /dev/null
+++ b/graphics/pokemon/tepig/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+57 37 38
+0 0 0
+112 56 48
+64 24 24
+80 60 53
+184 152 48
+232 200 48
+248 208 112
+224 136 168
+224 80 128
+232 232 248
+115 86 77
+201 67 66
+200 200 200
+96 64 32
diff --git a/graphics/pokemon/terapagos/stellar/back.png b/graphics/pokemon/terapagos/stellar/back.png
new file mode 100644
index 000000000000..bad6bc3916d6
Binary files /dev/null and b/graphics/pokemon/terapagos/stellar/back.png differ
diff --git a/graphics/pokemon/terapagos/stellar/front.png b/graphics/pokemon/terapagos/stellar/front.png
new file mode 100644
index 000000000000..62bac5c46806
Binary files /dev/null and b/graphics/pokemon/terapagos/stellar/front.png differ
diff --git a/graphics/pokemon/terapagos/stellar/normal.pal b/graphics/pokemon/terapagos/stellar/normal.pal
new file mode 100644
index 000000000000..4cdc143ad657
--- /dev/null
+++ b/graphics/pokemon/terapagos/stellar/normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+224 54 230
+26 26 26
+50 56 135
+56 56 177
+62 85 198
+169 58 211
+147 78 192
+247 69 26
+65 132 243
+43 149 206
+34 177 76
+44 211 177
+245 160 163
+165 230 153
+255 213 45
+212 245 255
diff --git a/graphics/pokemon/terapagos/stellar/shiny.pal b/graphics/pokemon/terapagos/stellar/shiny.pal
new file mode 100644
index 000000000000..4cdc143ad657
--- /dev/null
+++ b/graphics/pokemon/terapagos/stellar/shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+224 54 230
+26 26 26
+50 56 135
+56 56 177
+62 85 198
+169 58 211
+147 78 192
+247 69 26
+65 132 243
+43 149 206
+34 177 76
+44 211 177
+245 160 163
+165 230 153
+255 213 45
+212 245 255
diff --git a/graphics/pokemon/terrakion/overworld.png b/graphics/pokemon/terrakion/overworld.png
new file mode 100644
index 000000000000..e83ffe596a2e
Binary files /dev/null and b/graphics/pokemon/terrakion/overworld.png differ
diff --git a/graphics/pokemon/terrakion/overworld_normal.pal b/graphics/pokemon/terrakion/overworld_normal.pal
new file mode 100644
index 000000000000..0008b2125911
--- /dev/null
+++ b/graphics/pokemon/terrakion/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+24 40 16
+73 48 40
+139 102 49
+144 136 115
+113 72 45
+194 184 173
+109 75 80
+76 105 86
+224 96 0
+238 238 247
+237 195 133
+104 14 5
+177 138 76
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/terrakion/overworld_shiny.pal b/graphics/pokemon/terrakion/overworld_shiny.pal
new file mode 100644
index 000000000000..da27436c9ab5
--- /dev/null
+++ b/graphics/pokemon/terrakion/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+24 40 16
+62 62 62
+168 24 16
+136 120 80
+110 24 24
+184 160 112
+84 79 79
+84 79 79
+16 168 152
+237 198 142
+237 198 142
+110 24 24
+176 137 76
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/thievul/overworld.png b/graphics/pokemon/thievul/overworld.png
new file mode 100644
index 000000000000..c83530247159
Binary files /dev/null and b/graphics/pokemon/thievul/overworld.png differ
diff --git a/graphics/pokemon/thievul/overworld_normal.pal b/graphics/pokemon/thievul/overworld_normal.pal
new file mode 100644
index 000000000000..764d23bb6039
--- /dev/null
+++ b/graphics/pokemon/thievul/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+238 255 0
+8 8 7
+52 51 48
+0 0 0
+121 53 31
+21 20 18
+185 90 59
+36 14 7
+255 255 255
+210 184 61
+92 92 92
+176 176 176
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/thievul/overworld_shiny.pal b/graphics/pokemon/thievul/overworld_shiny.pal
new file mode 100644
index 000000000000..6584b3d19efb
--- /dev/null
+++ b/graphics/pokemon/thievul/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+238 255 0
+8 8 0
+8 41 115
+0 0 0
+115 106 98
+0 16 74
+164 148 139
+24 24 24
+255 255 255
+213 189 57
+90 90 90
+180 180 180
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/throh/overworld.png b/graphics/pokemon/throh/overworld.png
new file mode 100644
index 000000000000..dabd0d8ebadc
Binary files /dev/null and b/graphics/pokemon/throh/overworld.png differ
diff --git a/graphics/pokemon/throh/overworld_normal.pal b/graphics/pokemon/throh/overworld_normal.pal
new file mode 100644
index 000000000000..61eb7658596b
--- /dev/null
+++ b/graphics/pokemon/throh/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+87 18 18
+87 18 18
+152 208 160
+0 0 0
+218 79 79
+164 40 40
+47 47 47
+236 227 208
+138 129 121
+11 11 11
+33 33 33
+191 182 164
+191 182 164
+229 229 247
+39 39 39
diff --git a/graphics/pokemon/throh/overworld_shiny.pal b/graphics/pokemon/throh/overworld_shiny.pal
new file mode 100644
index 000000000000..7ac46dcbda28
--- /dev/null
+++ b/graphics/pokemon/throh/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+87 18 18
+96 48 24
+33 33 25
+0 0 0
+232 112 40
+160 80 32
+47 47 47
+216 232 208
+120 128 104
+11 11 11
+33 33 33
+184 200 168
+191 182 164
+229 229 247
+39 39 39
diff --git a/graphics/pokemon/thundurus/overworld.png b/graphics/pokemon/thundurus/overworld.png
new file mode 100644
index 000000000000..ffe39c24ddfb
Binary files /dev/null and b/graphics/pokemon/thundurus/overworld.png differ
diff --git a/graphics/pokemon/thundurus/overworld_normal.pal b/graphics/pokemon/thundurus/overworld_normal.pal
new file mode 100644
index 000000000000..438462057539
--- /dev/null
+++ b/graphics/pokemon/thundurus/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+77 77 99
+237 237 246
+44 43 44
+198 198 210
+22 38 14
+145 97 201
+164 140 247
+19 82 87
+96 185 218
+78 156 180
+107 192 222
+95 135 105
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/thundurus/overworld_shiny.pal b/graphics/pokemon/thundurus/overworld_shiny.pal
new file mode 100644
index 000000000000..064aa3a5cc85
--- /dev/null
+++ b/graphics/pokemon/thundurus/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+77 77 99
+237 237 246
+44 43 44
+198 198 210
+22 38 14
+144 32 176
+164 140 247
+24 40 72
+128 152 200
+72 96 136
+17 79 81
+186 173 72
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/thwackey/overworld.png b/graphics/pokemon/thwackey/overworld.png
new file mode 100644
index 000000000000..d3f043eea23e
Binary files /dev/null and b/graphics/pokemon/thwackey/overworld.png differ
diff --git a/graphics/pokemon/thwackey/overworld_normal.pal b/graphics/pokemon/thwackey/overworld_normal.pal
new file mode 100644
index 000000000000..9c84244e1e66
--- /dev/null
+++ b/graphics/pokemon/thwackey/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+252 4 200
+48 32 16
+0 44 36
+72 56 32
+96 92 36
+128 84 44
+160 48 4
+156 104 56
+220 96 48
+8 132 100
+180 188 52
+236 212 48
+232 240 100
+0 0 0
+236 232 156
+252 252 252
diff --git a/graphics/pokemon/thwackey/overworld_shiny.pal b/graphics/pokemon/thwackey/overworld_shiny.pal
new file mode 100644
index 000000000000..69b42e9b9729
--- /dev/null
+++ b/graphics/pokemon/thwackey/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+41 16 8
+41 65 0
+74 32 49
+98 57 74
+115 82 8
+164 49 0
+156 106 57
+230 90 41
+106 148 0
+213 180 41
+238 213 49
+246 213 74
+0 0 0
+238 238 156
+255 255 255
diff --git a/graphics/pokemon/timburr/overworld.png b/graphics/pokemon/timburr/overworld.png
new file mode 100644
index 000000000000..4cdec74ce592
Binary files /dev/null and b/graphics/pokemon/timburr/overworld.png differ
diff --git a/graphics/pokemon/timburr/overworld_normal.pal b/graphics/pokemon/timburr/overworld_normal.pal
new file mode 100644
index 000000000000..48c26d4786c0
--- /dev/null
+++ b/graphics/pokemon/timburr/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+79 63 63
+191 182 164
+0 0 0
+147 129 121
+11 11 11
+121 40 55
+191 79 104
+236 112 129
+95 47 40
+229 229 247
+138 87 79
+79 47 5
+164 104 5
+112 71 5
+218 172 87
diff --git a/graphics/pokemon/timburr/overworld_shiny.pal b/graphics/pokemon/timburr/overworld_shiny.pal
new file mode 100644
index 000000000000..d3ac821ecb4e
--- /dev/null
+++ b/graphics/pokemon/timburr/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 61 60
+208 192 128
+2 2 2
+175 151 96
+2 2 2
+186 71 45
+186 71 45
+236 112 129
+80 61 60
+213 210 213
+186 71 45
+79 47 5
+186 71 45
+112 71 5
+218 172 87
diff --git a/graphics/pokemon/tirtouga/overworld.png b/graphics/pokemon/tirtouga/overworld.png
new file mode 100644
index 000000000000..57315cbad0eb
Binary files /dev/null and b/graphics/pokemon/tirtouga/overworld.png differ
diff --git a/graphics/pokemon/tirtouga/overworld_normal.pal b/graphics/pokemon/tirtouga/overworld_normal.pal
new file mode 100644
index 000000000000..7fa5924fd99a
--- /dev/null
+++ b/graphics/pokemon/tirtouga/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+33 82 115
+49 115 173
+74 156 222
+54 54 54
+85 85 117
+69 69 94
+49 57 74
+69 69 94
+184 219 255
+85 85 117
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/tirtouga/overworld_shiny.pal b/graphics/pokemon/tirtouga/overworld_shiny.pal
new file mode 100644
index 000000000000..c2affd78a902
--- /dev/null
+++ b/graphics/pokemon/tirtouga/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+24 144 104
+56 176 152
+96 200 184
+48 40 56
+104 96 112
+80 72 88
+49 57 74
+69 69 94
+184 219 255
+85 85 117
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/togedemaru/overworld.png b/graphics/pokemon/togedemaru/overworld.png
new file mode 100644
index 000000000000..547586318fa9
Binary files /dev/null and b/graphics/pokemon/togedemaru/overworld.png differ
diff --git a/graphics/pokemon/togedemaru/overworld_normal.pal b/graphics/pokemon/togedemaru/overworld_normal.pal
new file mode 100644
index 000000000000..7ec7ff095e33
--- /dev/null
+++ b/graphics/pokemon/togedemaru/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+248 248 248
+248 208 80
+202 202 202
+216 200 192
+200 160 64
+155 155 155
+160 144 136
+110 107 112
+116 94 63
+112 80 56
+85 82 86
+64 64 80
+80 56 24
+48 48 48
+0 0 0
diff --git a/graphics/pokemon/togedemaru/overworld_shiny.pal b/graphics/pokemon/togedemaru/overworld_shiny.pal
new file mode 100644
index 000000000000..70c4f082df3e
--- /dev/null
+++ b/graphics/pokemon/togedemaru/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+248 248 248
+248 208 80
+240 192 176
+216 200 192
+200 160 64
+208 144 136
+160 144 136
+110 107 112
+116 94 63
+112 80 56
+85 82 86
+184 80 80
+80 56 24
+48 48 48
+0 0 0
diff --git a/graphics/pokemon/togekiss/overworld.png b/graphics/pokemon/togekiss/overworld.png
new file mode 100644
index 000000000000..0808c0f9bba4
Binary files /dev/null and b/graphics/pokemon/togekiss/overworld.png differ
diff --git a/graphics/pokemon/togekiss/overworld_normal.pal b/graphics/pokemon/togekiss/overworld_normal.pal
new file mode 100644
index 000000000000..aea23c134313
--- /dev/null
+++ b/graphics/pokemon/togekiss/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+232 232 248
+104 120 128
+64 64 64
+168 184 208
+40 168 248
+232 64 72
+144 152 176
+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/togekiss/overworld_shiny.pal b/graphics/pokemon/togekiss/overworld_shiny.pal
new file mode 100644
index 000000000000..a318b5fba1bd
--- /dev/null
+++ b/graphics/pokemon/togekiss/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+8 0 0
+232 232 184
+128 120 80
+64 64 48
+184 184 136
+232 64 72
+40 168 248
+160 152 112
+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/togepi/overworld.png b/graphics/pokemon/togepi/overworld.png
new file mode 100644
index 000000000000..ff0af9c3196b
Binary files /dev/null and b/graphics/pokemon/togepi/overworld.png differ
diff --git a/graphics/pokemon/togepi/overworld_normal.pal b/graphics/pokemon/togepi/overworld_normal.pal
new file mode 100644
index 000000000000..41d5f871d87f
--- /dev/null
+++ b/graphics/pokemon/togepi/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 56 40
+232 216 88
+112 96 48
+192 176 72
+152 136 72
+248 232 144
+232 232 248
+80 80 80
+0 0 0
+152 152 144
+96 168 224
+232 120 144
+216 208 208
+120 200 240
+216 80 88
diff --git a/graphics/pokemon/togepi/overworld_shiny.pal b/graphics/pokemon/togepi/overworld_shiny.pal
new file mode 100644
index 000000000000..fce4f14abe27
--- /dev/null
+++ b/graphics/pokemon/togepi/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 40 40
+232 200 104
+136 80 64
+200 168 88
+168 128 72
+248 224 144
+232 232 248
+64 64 64
+0 0 0
+152 152 144
+216 80 88
+120 200 240
+216 208 208
+232 120 144
+96 168 224
diff --git a/graphics/pokemon/togetic/overworld.png b/graphics/pokemon/togetic/overworld.png
new file mode 100644
index 000000000000..b380b7aa2f16
Binary files /dev/null and b/graphics/pokemon/togetic/overworld.png differ
diff --git a/graphics/pokemon/togetic/overworld_normal.pal b/graphics/pokemon/togetic/overworld_normal.pal
new file mode 100644
index 000000000000..4dd85b5f6f0c
--- /dev/null
+++ b/graphics/pokemon/togetic/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 40 40
+160 176 216
+40 48 88
+232 232 248
+128 144 144
+0 0 0
+216 80 88
+96 168 224
+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/togetic/overworld_shiny.pal b/graphics/pokemon/togetic/overworld_shiny.pal
new file mode 100644
index 000000000000..f56fce08dbec
--- /dev/null
+++ b/graphics/pokemon/togetic/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 24 16
+200 152 152
+96 32 32
+232 232 248
+144 104 96
+0 0 0
+96 168 224
+216 80 88
+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/torchic/overworld.png b/graphics/pokemon/torchic/overworld.png
new file mode 100644
index 000000000000..5513342c36fb
Binary files /dev/null and b/graphics/pokemon/torchic/overworld.png differ
diff --git a/graphics/pokemon/torchic/overworld_normal.pal b/graphics/pokemon/torchic/overworld_normal.pal
new file mode 100644
index 000000000000..3fd0cd45f491
--- /dev/null
+++ b/graphics/pokemon/torchic/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 208 224
+120 80 16
+248 208 96
+160 144 80
+232 168 16
+0 0 0
+240 128 16
+208 96 0
+248 208 96
+232 232 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/torchic/overworld_shiny.pal b/graphics/pokemon/torchic/overworld_shiny.pal
new file mode 100644
index 000000000000..41312ee0f967
--- /dev/null
+++ b/graphics/pokemon/torchic/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 208 224
+120 80 16
+240 128 16
+208 96 0
+216 120 0
+0 0 0
+248 208 96
+200 168 48
+248 208 152
+232 232 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/torkoal/overworld.png b/graphics/pokemon/torkoal/overworld.png
new file mode 100644
index 000000000000..1a94282109c6
Binary files /dev/null and b/graphics/pokemon/torkoal/overworld.png differ
diff --git a/graphics/pokemon/torkoal/overworld_normal.pal b/graphics/pokemon/torkoal/overworld_normal.pal
new file mode 100644
index 000000000000..da80304f0fa7
--- /dev/null
+++ b/graphics/pokemon/torkoal/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 40 40
+144 96 56
+208 136 80
+16 16 16
+48 56 64
+184 112 64
+120 128 128
+88 96 104
+136 32 48
+208 56 80
+184 184 184
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/torkoal/overworld_shiny.pal b/graphics/pokemon/torkoal/overworld_shiny.pal
new file mode 100644
index 000000000000..9f53fcb6048c
--- /dev/null
+++ b/graphics/pokemon/torkoal/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 40 40
+144 128 56
+208 176 80
+16 16 16
+64 40 40
+176 152 64
+152 88 48
+112 64 48
+136 32 48
+208 56 80
+184 184 184
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/tornadus/overworld.png b/graphics/pokemon/tornadus/overworld.png
new file mode 100644
index 000000000000..00117c968376
Binary files /dev/null and b/graphics/pokemon/tornadus/overworld.png differ
diff --git a/graphics/pokemon/tornadus/overworld_normal.pal b/graphics/pokemon/tornadus/overworld_normal.pal
new file mode 100644
index 000000000000..6f28efc38158
--- /dev/null
+++ b/graphics/pokemon/tornadus/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+81 81 82
+218 218 229
+22 37 14
+216 203 66
+140 124 69
+108 55 149
+128 72 168
+38 37 38
+89 223 46
+215 106 214
+63 168 40
+73 164 46
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/tornadus/overworld_shiny.pal b/graphics/pokemon/tornadus/overworld_shiny.pal
new file mode 100644
index 000000000000..93eba0fc6c11
--- /dev/null
+++ b/graphics/pokemon/tornadus/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+38 37 38
+198 198 210
+22 37 14
+213 164 75
+186 116 43
+38 37 38
+72 64 119
+57 80 55
+104 160 24
+72 64 119
+71 144 42
+71 144 42
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/torracat/overworld.png b/graphics/pokemon/torracat/overworld.png
new file mode 100644
index 000000000000..63a3d1e1605e
Binary files /dev/null and b/graphics/pokemon/torracat/overworld.png differ
diff --git a/graphics/pokemon/torracat/overworld_normal.pal b/graphics/pokemon/torracat/overworld_normal.pal
new file mode 100644
index 000000000000..0f8a9bc5eb3c
--- /dev/null
+++ b/graphics/pokemon/torracat/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+255 255 104
+226 223 222
+157 152 152
+255 144 60
+255 110 50
+87 79 79
+255 59 36
+62 60 60
+116 41 34
+35 33 33
+16 16 16
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/torracat/overworld_shiny.pal b/graphics/pokemon/torracat/overworld_shiny.pal
new file mode 100644
index 000000000000..044c4928f767
--- /dev/null
+++ b/graphics/pokemon/torracat/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+248 240 8
+226 223 222
+157 152 152
+255 144 60
+240 104 48
+248 248 248
+184 48 32
+200 184 184
+116 41 34
+35 33 33
+16 16 16
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/torterra/overworld.png b/graphics/pokemon/torterra/overworld.png
new file mode 100644
index 000000000000..76d591256391
Binary files /dev/null and b/graphics/pokemon/torterra/overworld.png differ
diff --git a/graphics/pokemon/torterra/overworld_normal.pal b/graphics/pokemon/torterra/overworld_normal.pal
new file mode 100644
index 000000000000..d7ac5f7d31a3
--- /dev/null
+++ b/graphics/pokemon/torterra/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 96 40
+104 208 64
+64 176 80
+0 0 0
+48 48 48
+88 88 88
+208 208 216
+152 152 152
+88 184 64
+64 152 88
+120 96 48
+160 120 64
+80 64 48
+120 0 16
+232 232 248
diff --git a/graphics/pokemon/torterra/overworld_shiny.pal b/graphics/pokemon/torterra/overworld_shiny.pal
new file mode 100644
index 000000000000..da952f699f56
--- /dev/null
+++ b/graphics/pokemon/torterra/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 80 80
+160 192 88
+112 160 72
+0 0 0
+48 48 48
+88 88 88
+208 208 216
+152 152 152
+160 192 88
+112 160 72
+112 120 48
+160 160 64
+80 88 48
+120 0 16
+232 232 248
diff --git a/graphics/pokemon/totodile/overworld.png b/graphics/pokemon/totodile/overworld.png
new file mode 100644
index 000000000000..d9f0f5b9f11f
Binary files /dev/null and b/graphics/pokemon/totodile/overworld.png differ
diff --git a/graphics/pokemon/totodile/overworld_normal.pal b/graphics/pokemon/totodile/overworld_normal.pal
new file mode 100644
index 000000000000..376cdeb3b17d
--- /dev/null
+++ b/graphics/pokemon/totodile/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+208 152 184
+0 0 0
+40 56 96
+208 48 72
+80 128 184
+64 96 136
+112 176 232
+168 184 208
+232 232 248
+160 32 56
+112 24 40
+64 72 80
+168 152 80
+120 104 40
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/totodile/overworld_shiny.pal b/graphics/pokemon/totodile/overworld_shiny.pal
new file mode 100644
index 000000000000..b9f448df6d0d
--- /dev/null
+++ b/graphics/pokemon/totodile/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+208 152 184
+0 0 0
+24 80 88
+16 120 248
+40 152 184
+48 120 128
+80 200 184
+168 184 208
+232 232 248
+32 96 224
+16 56 136
+64 72 80
+168 152 80
+120 104 40
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/toucannon/overworld.png b/graphics/pokemon/toucannon/overworld.png
new file mode 100644
index 000000000000..bc174957b3b0
Binary files /dev/null and b/graphics/pokemon/toucannon/overworld.png differ
diff --git a/graphics/pokemon/toucannon/overworld_normal.pal b/graphics/pokemon/toucannon/overworld_normal.pal
new file mode 100644
index 000000000000..8123d4fa8d77
--- /dev/null
+++ b/graphics/pokemon/toucannon/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+213 213 213
+229 215 99
+235 188 77
+158 158 158
+226 132 70
+75 148 191
+99 99 99
+218 78 64
+66 66 66
+97 41 35
+52 52 52
+37 37 37
+16 16 16
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/toucannon/overworld_shiny.pal b/graphics/pokemon/toucannon/overworld_shiny.pal
new file mode 100644
index 000000000000..d96b38e2611f
--- /dev/null
+++ b/graphics/pokemon/toucannon/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+213 213 213
+88 120 200
+64 64 168
+200 208 104
+160 72 184
+49 131 145
+80 88 80
+224 32 104
+48 56 48
+97 41 35
+52 52 52
+37 37 37
+16 16 16
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/toxapex/overworld.png b/graphics/pokemon/toxapex/overworld.png
new file mode 100644
index 000000000000..2f8a61a72d14
Binary files /dev/null and b/graphics/pokemon/toxapex/overworld.png differ
diff --git a/graphics/pokemon/toxapex/overworld_normal.pal b/graphics/pokemon/toxapex/overworld_normal.pal
new file mode 100644
index 000000000000..d095be50db49
--- /dev/null
+++ b/graphics/pokemon/toxapex/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+217 210 97
+130 187 204
+79 158 72
+93 130 165
+234 129 66
+190 93 193
+183 113 79
+128 128 128
+118 72 111
+91 75 131
+113 62 37
+68 48 65
+53 62 85
+16 16 16
+0 0 0
diff --git a/graphics/pokemon/toxapex/overworld_shiny.pal b/graphics/pokemon/toxapex/overworld_shiny.pal
new file mode 100644
index 000000000000..a7aa04de738f
--- /dev/null
+++ b/graphics/pokemon/toxapex/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+217 210 97
+208 112 136
+79 158 72
+184 64 88
+234 129 66
+144 56 56
+183 113 79
+128 128 128
+118 72 111
+48 72 80
+113 62 37
+152 64 112
+53 62 85
+16 16 16
+0 0 0
diff --git a/graphics/pokemon/toxel/overworld.png b/graphics/pokemon/toxel/overworld.png
new file mode 100644
index 000000000000..bfc91d819780
Binary files /dev/null and b/graphics/pokemon/toxel/overworld.png differ
diff --git a/graphics/pokemon/toxel/overworld_normal.pal b/graphics/pokemon/toxel/overworld_normal.pal
new file mode 100644
index 000000000000..43b6ce52bd2e
--- /dev/null
+++ b/graphics/pokemon/toxel/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+252 0 20
+52 40 56
+88 88 88
+152 120 164
+24 12 32
+252 252 252
+116 84 128
+0 0 0
+156 92 188
+192 188 188
+104 52 128
+96 96 140
+248 248 248
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/toxel/overworld_shiny.pal b/graphics/pokemon/toxel/overworld_shiny.pal
new file mode 100644
index 000000000000..ab75d21ddafa
--- /dev/null
+++ b/graphics/pokemon/toxel/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+252 0 20
+49 41 57
+90 90 90
+156 123 164
+41 16 24
+255 255 255
+115 82 131
+0 0 0
+197 90 131
+197 189 189
+148 57 90
+98 98 139
+255 255 255
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/toxicroak/overworld.png b/graphics/pokemon/toxicroak/overworld.png
new file mode 100644
index 000000000000..18191db95ebd
Binary files /dev/null and b/graphics/pokemon/toxicroak/overworld.png differ
diff --git a/graphics/pokemon/toxicroak/overworld_normal.pal b/graphics/pokemon/toxicroak/overworld_normal.pal
new file mode 100644
index 000000000000..a4fce05b8c3d
--- /dev/null
+++ b/graphics/pokemon/toxicroak/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+88 128 208
+40 40 72
+48 96 192
+56 80 168
+48 48 48
+248 216 56
+168 48 56
+216 160 0
+216 88 64
+112 24 32
+128 128 128
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/toxicroak/overworld_shiny.pal b/graphics/pokemon/toxicroak/overworld_shiny.pal
new file mode 100644
index 000000000000..797fc220a9e1
--- /dev/null
+++ b/graphics/pokemon/toxicroak/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+88 200 168
+40 56 56
+72 152 128
+48 128 96
+48 48 48
+248 216 56
+168 32 120
+216 160 0
+248 112 144
+112 24 72
+128 128 128
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/toxtricity/low_key/overworld.png b/graphics/pokemon/toxtricity/low_key/overworld.png
new file mode 100644
index 000000000000..2701d7c8b129
Binary files /dev/null and b/graphics/pokemon/toxtricity/low_key/overworld.png differ
diff --git a/graphics/pokemon/toxtricity/low_key/overworld_normal.pal b/graphics/pokemon/toxtricity/low_key/overworld_normal.pal
new file mode 100644
index 000000000000..4ffcb8ad61dd
--- /dev/null
+++ b/graphics/pokemon/toxtricity/low_key/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 128 128
+33 46 49
+0 0 0
+162 205 214
+26 14 32
+114 150 158
+152 83 187
+97 51 119
+255 255 255
+132 98 147
+167 141 178
+11 11 11
+12 12 12
+13 13 13
+14 14 14
+15 15 15
diff --git a/graphics/pokemon/toxtricity/low_key/overworld_shiny.pal b/graphics/pokemon/toxtricity/low_key/overworld_shiny.pal
new file mode 100644
index 000000000000..4ffcb8ad61dd
--- /dev/null
+++ b/graphics/pokemon/toxtricity/low_key/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+128 128 128
+33 46 49
+0 0 0
+162 205 214
+26 14 32
+114 150 158
+152 83 187
+97 51 119
+255 255 255
+132 98 147
+167 141 178
+11 11 11
+12 12 12
+13 13 13
+14 14 14
+15 15 15
diff --git a/graphics/pokemon/toxtricity/overworld.png b/graphics/pokemon/toxtricity/overworld.png
new file mode 100644
index 000000000000..286a9d72a237
Binary files /dev/null and b/graphics/pokemon/toxtricity/overworld.png differ
diff --git a/graphics/pokemon/toxtricity/overworld_normal.pal b/graphics/pokemon/toxtricity/overworld_normal.pal
new file mode 100644
index 000000000000..180675299875
--- /dev/null
+++ b/graphics/pokemon/toxtricity/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 21
+55 52 3
+239 226 53
+181 170 28
+0 0 0
+26 14 32
+97 51 119
+152 83 187
+255 255 255
+132 98 147
+167 141 178
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/toxtricity/overworld_shiny.pal b/graphics/pokemon/toxtricity/overworld_shiny.pal
new file mode 100644
index 000000000000..1726f67467ff
--- /dev/null
+++ b/graphics/pokemon/toxtricity/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 0 21
+49 49 0
+238 230 49
+180 172 24
+0 0 0
+41 8 24
+156 57 90
+189 82 115
+255 255 255
+131 98 148
+164 139 180
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/tranquill/overworld.png b/graphics/pokemon/tranquill/overworld.png
new file mode 100644
index 000000000000..8ce1d6fcceb4
Binary files /dev/null and b/graphics/pokemon/tranquill/overworld.png differ
diff --git a/graphics/pokemon/tranquill/overworld_normal.pal b/graphics/pokemon/tranquill/overworld_normal.pal
new file mode 100644
index 000000000000..718a5bffae3c
--- /dev/null
+++ b/graphics/pokemon/tranquill/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+43 43 42
+76 76 76
+0 0 0
+151 151 151
+212 212 213
+232 49 98
+126 101 54
+224 176 38
+117 117 117
+0 0 0
+0 0 0
+0 0 0
+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
new file mode 100644
index 000000000000..0436c808546f
--- /dev/null
+++ b/graphics/pokemon/tranquill/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+48 64 48
+72 128 72
+0 0 0
+49 45 41
+112 168 112
+184 248 184
+96 79 92
+201 144 119
+217 217 233
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/trapinch/overworld.png b/graphics/pokemon/trapinch/overworld.png
new file mode 100644
index 000000000000..f42dd92999e8
Binary files /dev/null and b/graphics/pokemon/trapinch/overworld.png differ
diff --git a/graphics/pokemon/trapinch/overworld_normal.pal b/graphics/pokemon/trapinch/overworld_normal.pal
new file mode 100644
index 000000000000..e9cda1118b01
--- /dev/null
+++ b/graphics/pokemon/trapinch/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+112 48 48
+16 16 16
+224 152 112
+168 88 72
+200 120 80
+40 40 40
+248 248 248
+120 120 120
+104 104 104
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/trapinch/overworld_shiny.pal b/graphics/pokemon/trapinch/overworld_shiny.pal
new file mode 100644
index 000000000000..6e8291cb15c2
--- /dev/null
+++ b/graphics/pokemon/trapinch/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 80 80
+16 16 16
+168 168 168
+120 120 120
+136 136 136
+40 40 40
+248 248 248
+120 120 120
+104 104 104
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/treecko/overworld.png b/graphics/pokemon/treecko/overworld.png
new file mode 100644
index 000000000000..1a9fe685d61a
Binary files /dev/null and b/graphics/pokemon/treecko/overworld.png differ
diff --git a/graphics/pokemon/treecko/overworld_normal.pal b/graphics/pokemon/treecko/overworld_normal.pal
new file mode 100644
index 000000000000..965da8b10738
--- /dev/null
+++ b/graphics/pokemon/treecko/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+48 72 24
+0 0 0
+200 216 120
+152 168 32
+248 216 88
+8 56 48
+64 104 40
+48 88 56
+184 48 48
+56 136 104
+104 24 24
+144 32 32
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/treecko/overworld_shiny.pal b/graphics/pokemon/treecko/overworld_shiny.pal
new file mode 100644
index 000000000000..276d3cb26da3
--- /dev/null
+++ b/graphics/pokemon/treecko/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+168 224 24
+24 64 56
+0 0 0
+184 232 216
+128 176 160
+248 216 88
+104 24 24
+72 120 112
+160 56 32
+224 192 128
+200 80 48
+160 112 40
+192 152 80
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/trevenant/overworld.png b/graphics/pokemon/trevenant/overworld.png
new file mode 100644
index 000000000000..709921cac6ea
Binary files /dev/null and b/graphics/pokemon/trevenant/overworld.png differ
diff --git a/graphics/pokemon/trevenant/overworld_normal.pal b/graphics/pokemon/trevenant/overworld_normal.pal
new file mode 100644
index 000000000000..d493a61e9555
--- /dev/null
+++ b/graphics/pokemon/trevenant/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+41 89 50
+61 40 23
+39 28 20
+178 138 92
+185 145 97
+14 48 20
+120 86 62
+56 128 44
+16 16 16
+221 45 48
+255 89 93
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/trevenant/overworld_shiny.pal b/graphics/pokemon/trevenant/overworld_shiny.pal
new file mode 100644
index 000000000000..001c88041a4e
--- /dev/null
+++ b/graphics/pokemon/trevenant/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+159 55 45
+99 100 99
+55 56 55
+187 187 186
+237 238 236
+64 22 18
+148 148 147
+215 81 66
+16 16 16
+130 102 172
+161 136 199
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/tropius/overworld.png b/graphics/pokemon/tropius/overworld.png
new file mode 100644
index 000000000000..cd3dba6f8f14
Binary files /dev/null and b/graphics/pokemon/tropius/overworld.png differ
diff --git a/graphics/pokemon/tropius/overworld_normal.pal b/graphics/pokemon/tropius/overworld_normal.pal
new file mode 100644
index 000000000000..0c28452dae51
--- /dev/null
+++ b/graphics/pokemon/tropius/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+24 56 32
+128 184 96
+0 0 0
+64 144 72
+40 104 56
+120 96 72
+160 120 80
+64 48 0
+160 160 160
+232 232 248
+208 168 24
+184 120 8
+248 208 32
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/tropius/overworld_shiny.pal b/graphics/pokemon/tropius/overworld_shiny.pal
new file mode 100644
index 000000000000..f2b86d603942
--- /dev/null
+++ b/graphics/pokemon/tropius/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+24 56 32
+192 216 72
+0 0 0
+160 192 56
+80 96 32
+184 120 8
+208 168 24
+120 72 8
+160 160 160
+232 232 248
+208 168 24
+184 120 8
+248 208 32
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/trubbish/overworld.png b/graphics/pokemon/trubbish/overworld.png
new file mode 100644
index 000000000000..fb6f19e452c0
Binary files /dev/null and b/graphics/pokemon/trubbish/overworld.png differ
diff --git a/graphics/pokemon/trubbish/overworld_normal.pal b/graphics/pokemon/trubbish/overworld_normal.pal
new file mode 100644
index 000000000000..0fc884893428
--- /dev/null
+++ b/graphics/pokemon/trubbish/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+176 176 176
+16 49 32
+0 0 0
+41 106 74
+74 139 106
+24 74 49
+82 74 57
+164 139 115
+220 220 220
+115 98 82
+189 49 123
+0 139 230
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/trubbish/overworld_shiny.pal b/graphics/pokemon/trubbish/overworld_shiny.pal
new file mode 100644
index 000000000000..18b7620e2bb0
--- /dev/null
+++ b/graphics/pokemon/trubbish/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+176 176 176
+16 24 48
+0 0 0
+40 72 104
+72 104 136
+16 40 72
+82 74 57
+152 160 112
+220 220 220
+104 112 80
+8 144 80
+168 184 48
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/trumbeak/overworld.png b/graphics/pokemon/trumbeak/overworld.png
new file mode 100644
index 000000000000..8062560d9157
Binary files /dev/null and b/graphics/pokemon/trumbeak/overworld.png differ
diff --git a/graphics/pokemon/trumbeak/overworld_normal.pal b/graphics/pokemon/trumbeak/overworld_normal.pal
new file mode 100644
index 000000000000..9cdd4dc7dab6
--- /dev/null
+++ b/graphics/pokemon/trumbeak/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+213 213 213
+219 141 57
+146 146 146
+72 171 224
+72 113 146
+104 104 105
+95 93 93
+210 63 60
+122 75 50
+64 63 64
+62 62 62
+53 52 51
+16 16 16
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/trumbeak/overworld_shiny.pal b/graphics/pokemon/trumbeak/overworld_shiny.pal
new file mode 100644
index 000000000000..061ba8e60ffb
--- /dev/null
+++ b/graphics/pokemon/trumbeak/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+213 213 213
+160 80 176
+146 146 146
+72 171 224
+88 192 224
+104 104 105
+80 96 80
+240 56 136
+122 75 50
+56 64 48
+62 62 62
+53 52 51
+16 16 16
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/tsareena/overworld.png b/graphics/pokemon/tsareena/overworld.png
new file mode 100644
index 000000000000..0f7f8724e130
Binary files /dev/null and b/graphics/pokemon/tsareena/overworld.png differ
diff --git a/graphics/pokemon/tsareena/overworld_normal.pal b/graphics/pokemon/tsareena/overworld_normal.pal
new file mode 100644
index 000000000000..262496ab5709
--- /dev/null
+++ b/graphics/pokemon/tsareena/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+241 241 241
+232 230 95
+159 211 116
+197 197 197
+125 185 77
+114 172 67
+93 140 55
+137 137 137
+209 97 140
+196 71 119
+63 93 38
+174 58 103
+115 35 66
+44 64 27
+0 0 0
diff --git a/graphics/pokemon/tsareena/overworld_shiny.pal b/graphics/pokemon/tsareena/overworld_shiny.pal
new file mode 100644
index 000000000000..c05e30b3453a
--- /dev/null
+++ b/graphics/pokemon/tsareena/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+248 240 184
+232 95 199
+216 160 232
+200 192 128
+176 104 200
+152 88 200
+152 0 208
+137 137 137
+209 97 140
+196 71 119
+112 56 144
+174 58 103
+115 35 66
+44 64 27
+0 0 0
diff --git a/graphics/pokemon/turtonator/overworld.png b/graphics/pokemon/turtonator/overworld.png
new file mode 100644
index 000000000000..1c42a8c540ee
Binary files /dev/null and b/graphics/pokemon/turtonator/overworld.png differ
diff --git a/graphics/pokemon/turtonator/overworld_normal.pal b/graphics/pokemon/turtonator/overworld_normal.pal
new file mode 100644
index 000000000000..f8744fa12145
--- /dev/null
+++ b/graphics/pokemon/turtonator/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+219 224 189
+223 205 50
+253 232 37
+190 190 157
+181 158 20
+152 101 86
+113 114 98
+255 83 95
+191 72 82
+176 66 68
+91 92 73
+86 61 51
+112 35 40
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/turtonator/overworld_shiny.pal b/graphics/pokemon/turtonator/overworld_shiny.pal
new file mode 100644
index 000000000000..84f8f4c6b0db
--- /dev/null
+++ b/graphics/pokemon/turtonator/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+160 200 192
+223 205 50
+200 136 48
+160 200 192
+248 224 88
+152 101 86
+104 152 152
+200 136 48
+128 72 16
+56 40 32
+91 92 73
+86 61 51
+112 35 40
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/turtwig/overworld.png b/graphics/pokemon/turtwig/overworld.png
new file mode 100644
index 000000000000..ed2e3d8276fa
Binary files /dev/null and b/graphics/pokemon/turtwig/overworld.png differ
diff --git a/graphics/pokemon/turtwig/overworld_normal.pal b/graphics/pokemon/turtwig/overworld_normal.pal
new file mode 100644
index 000000000000..81ef901b1d7d
--- /dev/null
+++ b/graphics/pokemon/turtwig/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 80 56
+72 120 64
+0 0 0
+80 72 56
+152 112 56
+104 88 72
+136 200 176
+80 152 104
+208 176 40
+48 48 48
+248 232 112
+232 232 248
+72 72 72
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/turtwig/overworld_shiny.pal b/graphics/pokemon/turtwig/overworld_shiny.pal
new file mode 100644
index 000000000000..c70f3b4e7bd6
--- /dev/null
+++ b/graphics/pokemon/turtwig/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 80 104
+72 120 64
+0 0 0
+80 72 56
+152 112 56
+104 88 72
+112 200 216
+80 144 168
+208 176 40
+48 48 48
+248 232 112
+232 232 248
+72 72 72
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/tympole/overworld.png b/graphics/pokemon/tympole/overworld.png
new file mode 100644
index 000000000000..9f9778553c0d
Binary files /dev/null and b/graphics/pokemon/tympole/overworld.png differ
diff --git a/graphics/pokemon/tympole/overworld_normal.pal b/graphics/pokemon/tympole/overworld_normal.pal
new file mode 100644
index 000000000000..b0abde6d7025
--- /dev/null
+++ b/graphics/pokemon/tympole/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 96 136
+104 184 248
+112 144 192
+40 40 40
+0 0 0
+64 64 64
+96 96 96
+192 152 128
+248 216 184
+48 48 48
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/tympole/overworld_shiny.pal b/graphics/pokemon/tympole/overworld_shiny.pal
new file mode 100644
index 000000000000..82854d4d99fb
--- /dev/null
+++ b/graphics/pokemon/tympole/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 48 0
+248 208 120
+248 168 8
+40 40 40
+0 0 0
+64 64 64
+96 96 96
+192 152 128
+248 216 184
+48 48 48
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/tynamo/overworld.png b/graphics/pokemon/tynamo/overworld.png
new file mode 100644
index 000000000000..3c32e833f557
Binary files /dev/null and b/graphics/pokemon/tynamo/overworld.png differ
diff --git a/graphics/pokemon/tynamo/overworld_normal.pal b/graphics/pokemon/tynamo/overworld_normal.pal
new file mode 100644
index 000000000000..e36f523fd2dd
--- /dev/null
+++ b/graphics/pokemon/tynamo/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+123 131 148
+205 222 230
+238 255 255
+156 164 180
+232 232 248
+205 74 0
+24 24 32
+148 32 0
+255 230 123
+255 213 0
+238 255 255
+205 222 230
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/tynamo/overworld_shiny.pal b/graphics/pokemon/tynamo/overworld_shiny.pal
new file mode 100644
index 000000000000..3d5dceb2594c
--- /dev/null
+++ b/graphics/pokemon/tynamo/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 144 160
+192 224 232
+232 248 248
+136 184 200
+232 232 248
+205 74 0
+24 24 32
+148 32 0
+240 192 48
+248 136 8
+238 255 255
+205 222 230
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/type_null/overworld.png b/graphics/pokemon/type_null/overworld.png
new file mode 100644
index 000000000000..ca4056c171b2
Binary files /dev/null and b/graphics/pokemon/type_null/overworld.png differ
diff --git a/graphics/pokemon/type_null/overworld_normal.pal b/graphics/pokemon/type_null/overworld_normal.pal
new file mode 100644
index 000000000000..6aed76aa389e
--- /dev/null
+++ b/graphics/pokemon/type_null/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+173 173 173
+216 133 99
+161 103 79
+122 122 122
+72 103 165
+55 120 82
+103 88 84
+67 67 67
+97 65 53
+72 60 57
+64 43 35
+46 41 95
+40 34 32
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/type_null/overworld_shiny.pal b/graphics/pokemon/type_null/overworld_shiny.pal
new file mode 100644
index 000000000000..9355bd6e03bf
--- /dev/null
+++ b/graphics/pokemon/type_null/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+200 184 152
+192 88 56
+144 64 48
+160 144 104
+72 103 165
+55 120 82
+103 88 84
+67 67 67
+97 65 53
+72 60 57
+64 43 35
+46 41 95
+40 34 32
+0 0 0
+192 200 200
diff --git a/graphics/pokemon/typhlosion/hisuian/overworld.png b/graphics/pokemon/typhlosion/hisuian/overworld.png
new file mode 100644
index 000000000000..d98d72059186
Binary files /dev/null and b/graphics/pokemon/typhlosion/hisuian/overworld.png differ
diff --git a/graphics/pokemon/typhlosion/hisuian/overworld_normal.pal b/graphics/pokemon/typhlosion/hisuian/overworld_normal.pal
new file mode 100644
index 000000000000..1cff39ee1204
--- /dev/null
+++ b/graphics/pokemon/typhlosion/hisuian/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+180 57 156
+238 98 230
+246 74 106
+246 90 164
+74 65 16
+180 180 123
+0 0 0
+16 16 82
+57 49 98
+139 131 82
+90 74 156
+222 222 172
+238 238 255
+238 139 0
+82 65 49
diff --git a/graphics/pokemon/typhlosion/hisuian/overworld_shiny.pal b/graphics/pokemon/typhlosion/hisuian/overworld_shiny.pal
new file mode 100644
index 000000000000..c4e051efca40
--- /dev/null
+++ b/graphics/pokemon/typhlosion/hisuian/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+180 57 156
+238 98 230
+246 74 106
+246 90 164
+74 65 16
+180 180 123
+0 0 0
+24 57 74
+57 98 123
+139 131 82
+57 139 172
+222 222 172
+238 238 255
+164 16 24
+82 65 49
diff --git a/graphics/pokemon/typhlosion/overworld.png b/graphics/pokemon/typhlosion/overworld.png
new file mode 100644
index 000000000000..99f25eea0a40
Binary files /dev/null and b/graphics/pokemon/typhlosion/overworld.png differ
diff --git a/graphics/pokemon/typhlosion/overworld_normal.pal b/graphics/pokemon/typhlosion/overworld_normal.pal
new file mode 100644
index 000000000000..a4b60c5538f9
--- /dev/null
+++ b/graphics/pokemon/typhlosion/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+160 16 24
+184 48 48
+24 56 72
+216 80 80
+0 0 0
+56 96 120
+56 136 168
+240 200 40
+208 184 96
+72 64 16
+248 208 96
+232 232 248
+104 88 56
+168 144 80
+0 0 0
diff --git a/graphics/pokemon/typhlosion/overworld_shiny.pal b/graphics/pokemon/typhlosion/overworld_shiny.pal
new file mode 100644
index 000000000000..f03c95c02597
--- /dev/null
+++ b/graphics/pokemon/typhlosion/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+160 16 24
+184 48 48
+88 16 56
+216 80 80
+0 0 0
+136 56 88
+184 120 160
+240 200 40
+208 184 96
+72 64 16
+248 208 96
+232 232 248
+104 88 56
+168 144 80
+0 0 0
diff --git a/graphics/pokemon/tyranitar/overworld.png b/graphics/pokemon/tyranitar/overworld.png
new file mode 100644
index 000000000000..5743028ae3b8
Binary files /dev/null and b/graphics/pokemon/tyranitar/overworld.png differ
diff --git a/graphics/pokemon/tyranitar/overworld_normal.pal b/graphics/pokemon/tyranitar/overworld_normal.pal
new file mode 100644
index 000000000000..a01ad1769851
--- /dev/null
+++ b/graphics/pokemon/tyranitar/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 160 176
+40 72 48
+176 216 120
+136 184 104
+88 120 80
+112 160 88
+0 0 0
+232 232 248
+32 40 40
+48 64 64
+160 184 200
+80 104 168
+56 48 104
+96 136 192
+120 136 144
+0 0 0
diff --git a/graphics/pokemon/tyranitar/overworld_shiny.pal b/graphics/pokemon/tyranitar/overworld_shiny.pal
new file mode 100644
index 000000000000..b04f1f2cc317
--- /dev/null
+++ b/graphics/pokemon/tyranitar/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 160 176
+64 72 0
+216 216 120
+176 184 80
+104 120 16
+128 152 40
+0 0 0
+232 232 248
+32 40 40
+48 64 64
+160 184 200
+112 40 144
+72 24 112
+136 88 176
+120 136 144
+0 0 0
diff --git a/graphics/pokemon/tyrantrum/overworld.png b/graphics/pokemon/tyrantrum/overworld.png
new file mode 100644
index 000000000000..23fa4ca873bc
Binary files /dev/null and b/graphics/pokemon/tyrantrum/overworld.png differ
diff --git a/graphics/pokemon/tyrantrum/overworld_normal.pal b/graphics/pokemon/tyrantrum/overworld_normal.pal
new file mode 100644
index 000000000000..1f69a40811e5
--- /dev/null
+++ b/graphics/pokemon/tyrantrum/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+70 36 37
+227 141 65
+202 109 42
+182 74 76
+16 16 16
+137 61 62
+198 197 195
+59 55 55
+155 152 147
+152 78 30
+198 197 195
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/tyrantrum/overworld_shiny.pal b/graphics/pokemon/tyrantrum/overworld_shiny.pal
new file mode 100644
index 000000000000..387223987616
--- /dev/null
+++ b/graphics/pokemon/tyrantrum/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+45 56 99
+185 185 185
+146 145 145
+97 116 225
+16 16 16
+74 90 151
+198 197 195
+59 55 55
+155 152 147
+112 112 112
+230 238 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/tyrogue/overworld.png b/graphics/pokemon/tyrogue/overworld.png
new file mode 100644
index 000000000000..f66fab64fb42
Binary files /dev/null and b/graphics/pokemon/tyrogue/overworld.png differ
diff --git a/graphics/pokemon/tyrogue/overworld_normal.pal b/graphics/pokemon/tyrogue/overworld_normal.pal
new file mode 100644
index 000000000000..889ba9d6da2c
--- /dev/null
+++ b/graphics/pokemon/tyrogue/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 48 104
+0 0 0
+200 160 216
+112 80 128
+168 120 176
+176 184 192
+136 96 8
+232 232 248
+72 88 104
+136 144 152
+96 24 24
+192 56 56
+144 40 40
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/tyrogue/overworld_shiny.pal b/graphics/pokemon/tyrogue/overworld_shiny.pal
new file mode 100644
index 000000000000..b4a1b2d1c014
--- /dev/null
+++ b/graphics/pokemon/tyrogue/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 64 80
+0 0 0
+192 176 192
+104 96 104
+152 136 152
+176 184 192
+32 120 152
+232 232 248
+72 88 104
+136 144 152
+0 56 64
+56 160 192
+32 120 152
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/tyrunt/overworld.png b/graphics/pokemon/tyrunt/overworld.png
new file mode 100644
index 000000000000..6ca4c9604cd9
Binary files /dev/null and b/graphics/pokemon/tyrunt/overworld.png differ
diff --git a/graphics/pokemon/tyrunt/overworld_normal.pal b/graphics/pokemon/tyrunt/overworld_normal.pal
new file mode 100644
index 000000000000..2a66ac071c8b
--- /dev/null
+++ b/graphics/pokemon/tyrunt/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+49 43 39
+229 90 53
+124 104 94
+96 79 70
+155 152 147
+16 16 16
+198 197 195
+155 124 111
+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/tyrunt/overworld_shiny.pal b/graphics/pokemon/tyrunt/overworld_shiny.pal
new file mode 100644
index 000000000000..47313d0d1f7c
--- /dev/null
+++ b/graphics/pokemon/tyrunt/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+33 61 89
+191 191 191
+82 131 179
+61 102 143
+155 152 147
+16 16 16
+198 197 195
+91 153 214
+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/umbreon/overworld.png b/graphics/pokemon/umbreon/overworld.png
new file mode 100644
index 000000000000..6bf726c2ced1
Binary files /dev/null and b/graphics/pokemon/umbreon/overworld.png differ
diff --git a/graphics/pokemon/umbreon/overworld_normal.pal b/graphics/pokemon/umbreon/overworld_normal.pal
new file mode 100644
index 000000000000..c44e7b2e1223
--- /dev/null
+++ b/graphics/pokemon/umbreon/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+24 40 56
+104 112 120
+0 0 0
+224 176 40
+176 128 16
+248 216 88
+64 72 80
+128 88 8
+112 8 8
+232 232 248
+208 24 24
+40 56 64
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/umbreon/overworld_shiny.pal b/graphics/pokemon/umbreon/overworld_shiny.pal
new file mode 100644
index 000000000000..f4379a6c6a60
--- /dev/null
+++ b/graphics/pokemon/umbreon/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+24 40 56
+104 112 120
+0 0 0
+88 176 200
+40 136 160
+144 216 232
+64 72 80
+40 136 152
+176 128 16
+232 232 248
+224 176 40
+40 56 64
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/unfezant/followerf.png b/graphics/pokemon/unfezant/followerf.png
new file mode 100644
index 000000000000..ae5e096b4bc2
Binary files /dev/null and b/graphics/pokemon/unfezant/followerf.png differ
diff --git a/graphics/pokemon/unfezant/overworld.png b/graphics/pokemon/unfezant/overworld.png
new file mode 100644
index 000000000000..d1aa945df72d
Binary files /dev/null and b/graphics/pokemon/unfezant/overworld.png differ
diff --git a/graphics/pokemon/unfezant/overworld_normal.pal b/graphics/pokemon/unfezant/overworld_normal.pal
new file mode 100644
index 000000000000..ade74aadfdc2
--- /dev/null
+++ b/graphics/pokemon/unfezant/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+45 45 45
+0 0 0
+247 54 109
+151 151 151
+212 212 212
+208 25 75
+77 77 77
+171 171 178
+247 194 46
+117 117 117
+61 46 32
+247 194 39
+229 229 247
+168 134 32
+39 151 109
diff --git a/graphics/pokemon/unfezant/overworld_shiny.pal b/graphics/pokemon/unfezant/overworld_shiny.pal
new file mode 100644
index 000000000000..cb3ec8c47f72
--- /dev/null
+++ b/graphics/pokemon/unfezant/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 210 164
+32 32 24
+0 0 0
+200 88 208
+151 151 151
+200 200 176
+112 56 144
+88 64 40
+88 64 40
+168 160 128
+103 103 103
+50 45 40
+168 160 128
+229 229 247
+118 156 100
+39 151 109
diff --git a/graphics/pokemon/unfezant_f/overworld.png b/graphics/pokemon/unfezant_f/overworld.png
new file mode 100644
index 000000000000..ae5e096b4bc2
Binary files /dev/null and b/graphics/pokemon/unfezant_f/overworld.png differ
diff --git a/graphics/pokemon/unown/b/overworld.png b/graphics/pokemon/unown/b/overworld.png
new file mode 100644
index 000000000000..1e8ab69c117e
Binary files /dev/null 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
new file mode 100644
index 000000000000..a53b43e06fca
Binary files /dev/null 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
new file mode 100644
index 000000000000..d8796d020083
Binary files /dev/null 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
new file mode 100644
index 000000000000..34fd50f0040e
Binary files /dev/null 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
new file mode 100644
index 000000000000..96073167d0ab
Binary files /dev/null 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
new file mode 100644
index 000000000000..789e65cc1de3
Binary files /dev/null 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
new file mode 100644
index 000000000000..38f70bdcf4d4
Binary files /dev/null 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
new file mode 100644
index 000000000000..a5f030dbd601
Binary files /dev/null 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
new file mode 100644
index 000000000000..b360c0faac3b
Binary files /dev/null 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
new file mode 100644
index 000000000000..e1c88938d7bb
Binary files /dev/null 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
new file mode 100644
index 000000000000..41e037221832
Binary files /dev/null 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
new file mode 100644
index 000000000000..dbbe738b8bb2
Binary files /dev/null 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
new file mode 100644
index 000000000000..19524911541f
Binary files /dev/null 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
new file mode 100644
index 000000000000..5cb9e114871e
Binary files /dev/null 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
new file mode 100644
index 000000000000..1314548e920d
Binary files /dev/null and b/graphics/pokemon/unown/o/overworld.png differ
diff --git a/graphics/pokemon/unown/overworld.png b/graphics/pokemon/unown/overworld.png
new file mode 100644
index 000000000000..160a75a83dfe
Binary files /dev/null and b/graphics/pokemon/unown/overworld.png differ
diff --git a/graphics/pokemon/unown/overworld_normal.pal b/graphics/pokemon/unown/overworld_normal.pal
new file mode 100644
index 000000000000..1e603c38957c
--- /dev/null
+++ b/graphics/pokemon/unown/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+205 205 172
+0 0 0
+96 104 144
+64 72 88
+40 48 64
+232 232 248
+184 184 184
+0 0 0
+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/unown/overworld_shiny.pal b/graphics/pokemon/unown/overworld_shiny.pal
new file mode 100644
index 000000000000..2b77657dc053
--- /dev/null
+++ b/graphics/pokemon/unown/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+205 205 172
+16 48 144
+112 144 232
+80 120 232
+48 88 224
+232 232 248
+184 184 184
+0 0 0
+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/unown/p/overworld.png b/graphics/pokemon/unown/p/overworld.png
new file mode 100644
index 000000000000..fc497afc096b
Binary files /dev/null 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
new file mode 100644
index 000000000000..5e29b1a4d468
Binary files /dev/null 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
new file mode 100644
index 000000000000..743b7edbfe9d
Binary files /dev/null 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
new file mode 100644
index 000000000000..493b1f0e0636
Binary files /dev/null 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
new file mode 100644
index 000000000000..d088d0d2b656
Binary files /dev/null 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
new file mode 100644
index 000000000000..e8435537f2d0
Binary files /dev/null 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
new file mode 100644
index 000000000000..a3b10de9cf11
Binary files /dev/null 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
new file mode 100644
index 000000000000..c1fd90ff23d7
Binary files /dev/null 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
new file mode 100644
index 000000000000..8c424c88b9a1
Binary files /dev/null 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
new file mode 100644
index 000000000000..4de871393935
Binary files /dev/null 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
new file mode 100644
index 000000000000..4af4693cbb74
Binary files /dev/null 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
new file mode 100644
index 000000000000..94fab08a3609
Binary files /dev/null and b/graphics/pokemon/unown/z/overworld.png differ
diff --git a/graphics/pokemon/unused_garbage.bin b/graphics/pokemon/unused_garbage.bin
deleted file mode 100644
index fcb503112fc5..000000000000
Binary files a/graphics/pokemon/unused_garbage.bin and /dev/null differ
diff --git a/graphics/pokemon/ursaluna/bloodmoon/overworld.png b/graphics/pokemon/ursaluna/bloodmoon/overworld.png
new file mode 100644
index 000000000000..fbb792082021
Binary files /dev/null and b/graphics/pokemon/ursaluna/bloodmoon/overworld.png differ
diff --git a/graphics/pokemon/ursaluna/bloodmoon/overworld_normal.pal b/graphics/pokemon/ursaluna/bloodmoon/overworld_normal.pal
new file mode 100644
index 000000000000..bce28e18ac20
--- /dev/null
+++ b/graphics/pokemon/ursaluna/bloodmoon/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+65 141 172
+255 48 90
+197 194 205
+32 105 57
+189 129 82
+148 149 148
+82 72 82
+213 161 98
+49 48 41
+115 76 57
+238 234 255
+156 105 65
+115 117 115
+74 36 24
+16 16 16
+17 17 17
diff --git a/graphics/pokemon/ursaluna/overworld.png b/graphics/pokemon/ursaluna/overworld.png
new file mode 100644
index 000000000000..4fc2e0177f04
Binary files /dev/null and b/graphics/pokemon/ursaluna/overworld.png differ
diff --git a/graphics/pokemon/ursaluna/overworld_normal.pal b/graphics/pokemon/ursaluna/overworld_normal.pal
new file mode 100644
index 000000000000..358836abce50
--- /dev/null
+++ b/graphics/pokemon/ursaluna/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+57 41 41
+106 74 65
+74 57 49
+65 65 65
+115 115 115
+148 148 148
+115 82 74
+238 238 255
+197 197 213
+197 139 57
+213 164 98
+148 106 57
+32 106 57
+222 205 139
diff --git a/graphics/pokemon/ursaluna/overworld_shiny.pal b/graphics/pokemon/ursaluna/overworld_shiny.pal
new file mode 100644
index 000000000000..1af516796a78
--- /dev/null
+++ b/graphics/pokemon/ursaluna/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+131 57 49
+180 90 82
+164 74 65
+74 74 74
+131 131 123
+156 156 156
+197 106 98
+238 238 255
+156 156 156
+205 180 57
+222 189 98
+148 106 57
+123 148 197
+222 205 115
diff --git a/graphics/pokemon/ursaring/overworld.png b/graphics/pokemon/ursaring/overworld.png
new file mode 100644
index 000000000000..193585e6b0b1
Binary files /dev/null and b/graphics/pokemon/ursaring/overworld.png differ
diff --git a/graphics/pokemon/ursaring/overworld_normal.pal b/graphics/pokemon/ursaring/overworld_normal.pal
new file mode 100644
index 000000000000..763e99e6ce36
--- /dev/null
+++ b/graphics/pokemon/ursaring/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 40 8
+120 72 48
+0 0 0
+176 128 88
+152 104 64
+192 136 56
+208 160 96
+144 104 56
+192 192 200
+232 232 248
+88 72 64
+216 200 136
+160 168 184
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/ursaring/overworld_shiny.pal b/graphics/pokemon/ursaring/overworld_shiny.pal
new file mode 100644
index 000000000000..222323119b26
--- /dev/null
+++ b/graphics/pokemon/ursaring/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+24 56 16
+40 112 48
+0 0 0
+136 200 96
+88 160 72
+192 136 56
+208 160 96
+144 104 56
+192 192 200
+232 232 248
+88 72 64
+216 200 136
+160 168 184
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/urshifu/front.png b/graphics/pokemon/urshifu/front.png
index cbb462be2ea0..468ba31f7090 100644
Binary files a/graphics/pokemon/urshifu/front.png and b/graphics/pokemon/urshifu/front.png differ
diff --git a/graphics/pokemon/urshifu/overworld.png b/graphics/pokemon/urshifu/overworld.png
new file mode 100644
index 000000000000..fd726f3113de
Binary files /dev/null and b/graphics/pokemon/urshifu/overworld.png differ
diff --git a/graphics/pokemon/urshifu/overworld_normal.pal b/graphics/pokemon/urshifu/overworld_normal.pal
new file mode 100644
index 000000000000..03f1772def42
--- /dev/null
+++ b/graphics/pokemon/urshifu/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+248 248 248
+184 184 184
+72 72 88
+104 96 112
+64 64 56
+208 168 32
+248 248 96
+16 16 16
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/urshifu/overworld_shiny.pal b/graphics/pokemon/urshifu/overworld_shiny.pal
new file mode 100644
index 000000000000..465bbf54c4f9
--- /dev/null
+++ b/graphics/pokemon/urshifu/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+255 255 255
+205 205 205
+106 98 115
+139 139 139
+98 90 74
+189 90 32
+255 148 49
+41 41 32
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/urshifu/rapid_strike_style/front.png b/graphics/pokemon/urshifu/rapid_strike_style/front.png
index 09d72971424b..d06637f4e173 100644
Binary files a/graphics/pokemon/urshifu/rapid_strike_style/front.png and b/graphics/pokemon/urshifu/rapid_strike_style/front.png differ
diff --git a/graphics/pokemon/uxie/overworld.png b/graphics/pokemon/uxie/overworld.png
new file mode 100644
index 000000000000..4f762b9a43ab
Binary files /dev/null and b/graphics/pokemon/uxie/overworld.png differ
diff --git a/graphics/pokemon/uxie/overworld_normal.pal b/graphics/pokemon/uxie/overworld_normal.pal
new file mode 100644
index 000000000000..383a2a8a7b0c
--- /dev/null
+++ b/graphics/pokemon/uxie/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 64 56
+136 120 88
+192 152 88
+240 200 88
+168 40 0
+248 168 152
+72 72 88
+176 208 248
+232 64 32
+112 128 176
+0 0 0
+144 184 208
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/uxie/overworld_shiny.pal b/graphics/pokemon/uxie/overworld_shiny.pal
new file mode 100644
index 000000000000..37864c416d56
--- /dev/null
+++ b/graphics/pokemon/uxie/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 64 32
+160 96 40
+224 152 64
+248 192 72
+168 40 0
+248 168 152
+104 80 56
+248 216 88
+232 64 32
+176 128 48
+0 0 0
+216 176 88
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/vanillish/overworld.png b/graphics/pokemon/vanillish/overworld.png
new file mode 100644
index 000000000000..a918c5dfb9bc
Binary files /dev/null and b/graphics/pokemon/vanillish/overworld.png differ
diff --git a/graphics/pokemon/vanillish/overworld_normal.pal b/graphics/pokemon/vanillish/overworld_normal.pal
new file mode 100644
index 000000000000..879e4ea39956
--- /dev/null
+++ b/graphics/pokemon/vanillish/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+112 129 182
+238 240 246
+208 208 236
+182 182 218
+63 71 104
+164 222 244
+95 155 236
+108 166 236
+76 82 164
+0 0 0
+155 218 245
+41 98 172
+32 82 123
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/vanillish/overworld_shiny.pal b/graphics/pokemon/vanillish/overworld_shiny.pal
new file mode 100644
index 000000000000..be9ad808130c
--- /dev/null
+++ b/graphics/pokemon/vanillish/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+112 129 182
+238 240 246
+208 208 236
+182 182 218
+63 71 104
+184 184 240
+168 128 232
+168 128 232
+76 82 164
+0 0 0
+184 184 240
+128 80 168
+32 82 123
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/vanillite/overworld.png b/graphics/pokemon/vanillite/overworld.png
new file mode 100644
index 000000000000..dd66fd463dfa
Binary files /dev/null and b/graphics/pokemon/vanillite/overworld.png differ
diff --git a/graphics/pokemon/vanillite/overworld_normal.pal b/graphics/pokemon/vanillite/overworld_normal.pal
new file mode 100644
index 000000000000..950017ffb5d9
--- /dev/null
+++ b/graphics/pokemon/vanillite/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+123 139 189
+240 242 247
+74 82 115
+189 189 222
+213 213 238
+123 164 197
+164 222 246
+65 74 139
+106 164 238
+49 57 98
+0 0 0
+106 123 164
+32 82 123
+41 98 172
+0 0 0
diff --git a/graphics/pokemon/vanillite/overworld_shiny.pal b/graphics/pokemon/vanillite/overworld_shiny.pal
new file mode 100644
index 000000000000..923c14a83737
--- /dev/null
+++ b/graphics/pokemon/vanillite/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+112 56 88
+247 247 247
+74 82 115
+216 176 176
+232 216 216
+109 94 161
+207 160 223
+74 82 115
+192 128 168
+74 82 115
+13 22 36
+109 94 161
+112 56 88
+112 56 88
+0 0 0
diff --git a/graphics/pokemon/vanilluxe/overworld.png b/graphics/pokemon/vanilluxe/overworld.png
new file mode 100644
index 000000000000..6f3162a06350
Binary files /dev/null and b/graphics/pokemon/vanilluxe/overworld.png differ
diff --git a/graphics/pokemon/vanilluxe/overworld_normal.pal b/graphics/pokemon/vanilluxe/overworld_normal.pal
new file mode 100644
index 000000000000..41a1d154218f
--- /dev/null
+++ b/graphics/pokemon/vanilluxe/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+113 129 182
+183 183 218
+238 240 246
+49 75 112
+208 208 236
+41 98 172
+163 221 244
+107 165 236
+76 82 164
+55 54 94
+132 90 172
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/vanilluxe/overworld_shiny.pal b/graphics/pokemon/vanilluxe/overworld_shiny.pal
new file mode 100644
index 000000000000..a120e4a34efd
--- /dev/null
+++ b/graphics/pokemon/vanilluxe/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+113 129 182
+176 192 240
+238 240 246
+49 75 112
+208 208 236
+87 72 167
+176 192 240
+150 155 226
+87 72 167
+55 54 94
+132 90 172
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/vaporeon/overworld.png b/graphics/pokemon/vaporeon/overworld.png
new file mode 100644
index 000000000000..beec2a377559
Binary files /dev/null and b/graphics/pokemon/vaporeon/overworld.png differ
diff --git a/graphics/pokemon/vaporeon/overworld_normal.pal b/graphics/pokemon/vaporeon/overworld_normal.pal
new file mode 100644
index 000000000000..03347d86c19d
--- /dev/null
+++ b/graphics/pokemon/vaporeon/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+32 56 104
+128 200 232
+88 176 224
+48 104 136
+72 136 176
+8 48 72
+16 112 120
+32 144 136
+176 152 56
+80 72 56
+224 200 104
+208 208 208
+160 160 160
+232 232 248
diff --git a/graphics/pokemon/vaporeon/overworld_shiny.pal b/graphics/pokemon/vaporeon/overworld_shiny.pal
new file mode 100644
index 000000000000..12e395a08663
--- /dev/null
+++ b/graphics/pokemon/vaporeon/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+72 40 80
+192 168 232
+184 136 216
+104 80 104
+136 104 192
+96 40 80
+136 24 104
+168 72 136
+176 152 56
+80 72 56
+224 200 104
+208 208 208
+160 160 160
+232 232 248
diff --git a/graphics/pokemon/veluza/front.png b/graphics/pokemon/veluza/front.png
index 9a2a7643abb4..de17bca7c074 100755
Binary files a/graphics/pokemon/veluza/front.png and b/graphics/pokemon/veluza/front.png differ
diff --git a/graphics/pokemon/venipede/overworld.png b/graphics/pokemon/venipede/overworld.png
new file mode 100644
index 000000000000..9add5c858de7
Binary files /dev/null and b/graphics/pokemon/venipede/overworld.png differ
diff --git a/graphics/pokemon/venipede/overworld_normal.pal b/graphics/pokemon/venipede/overworld_normal.pal
new file mode 100644
index 000000000000..61a94495e70b
--- /dev/null
+++ b/graphics/pokemon/venipede/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+11 11 11
+124 56 72
+182 65 92
+191 69 98
+227 81 116
+55 55 55
+79 79 79
+26 95 77
+20 140 80
+22 177 116
+55 106 55
+224 172 35
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/venipede/overworld_shiny.pal b/graphics/pokemon/venipede/overworld_shiny.pal
new file mode 100644
index 000000000000..97a17fdcd961
--- /dev/null
+++ b/graphics/pokemon/venipede/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+11 11 11
+64 64 16
+96 72 40
+144 80 48
+55 55 55
+40 40 40
+40 72 8
+80 112 0
+96 144 0
+55 106 55
+182 65 92
+224 172 35
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/venomoth/overworld.png b/graphics/pokemon/venomoth/overworld.png
new file mode 100644
index 000000000000..69c7ae22eb51
Binary files /dev/null and b/graphics/pokemon/venomoth/overworld.png differ
diff --git a/graphics/pokemon/venomoth/overworld_normal.pal b/graphics/pokemon/venomoth/overworld_normal.pal
new file mode 100644
index 000000000000..81d74a59b965
--- /dev/null
+++ b/graphics/pokemon/venomoth/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 64 88
+0 0 0
+160 104 240
+208 152 248
+232 184 248
+104 96 136
+232 232 248
+192 192 192
+112 112 112
+152 120 64
+216 184 128
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/venomoth/overworld_shiny.pal b/graphics/pokemon/venomoth/overworld_shiny.pal
new file mode 100644
index 000000000000..954f2a52324c
--- /dev/null
+++ b/graphics/pokemon/venomoth/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 80 104
+0 0 0
+120 176 232
+160 216 248
+208 232 248
+80 136 216
+232 232 248
+192 192 192
+112 112 112
+152 120 64
+216 184 128
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/venonat/overworld.png b/graphics/pokemon/venonat/overworld.png
new file mode 100644
index 000000000000..d872137dbf35
Binary files /dev/null and b/graphics/pokemon/venonat/overworld.png differ
diff --git a/graphics/pokemon/venonat/overworld_normal.pal b/graphics/pokemon/venonat/overworld_normal.pal
new file mode 100644
index 000000000000..d88c0e21b296
--- /dev/null
+++ b/graphics/pokemon/venonat/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 32 64
+0 0 0
+160 104 240
+112 72 208
+232 232 248
+136 136 136
+200 200 200
+72 56 128
+136 0 0
+248 200 200
+232 128 152
+168 48 80
+176 144 80
+216 184 128
+128 96 32
diff --git a/graphics/pokemon/venonat/overworld_shiny.pal b/graphics/pokemon/venonat/overworld_shiny.pal
new file mode 100644
index 000000000000..7d8d9dec2003
--- /dev/null
+++ b/graphics/pokemon/venonat/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 32 64
+0 0 0
+160 104 240
+112 72 208
+232 232 248
+136 136 136
+200 200 200
+72 56 128
+0 96 136
+184 248 248
+88 192 224
+0 136 192
+176 144 80
+216 184 128
+128 96 32
diff --git a/graphics/pokemon/venusaur/overworld.png b/graphics/pokemon/venusaur/overworld.png
new file mode 100644
index 000000000000..7ae681a895e3
Binary files /dev/null and b/graphics/pokemon/venusaur/overworld.png differ
diff --git a/graphics/pokemon/venusaur/overworld_normal.pal b/graphics/pokemon/venusaur/overworld_normal.pal
new file mode 100644
index 000000000000..19b75679eaed
--- /dev/null
+++ b/graphics/pokemon/venusaur/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+208 248 184
+104 32 40
+200 72 128
+232 192 112
+240 120 160
+248 224 8
+192 128 40
+0 0 0
+64 96 48
+144 64 32
+96 168 16
+136 224 32
+64 152 96
+104 216 192
+160 160 160
+232 232 248
diff --git a/graphics/pokemon/venusaur/overworld_shiny.pal b/graphics/pokemon/venusaur/overworld_shiny.pal
new file mode 100644
index 000000000000..0ca20763bd57
--- /dev/null
+++ b/graphics/pokemon/venusaur/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+208 248 184
+120 64 40
+240 176 0
+232 192 112
+248 224 0
+248 224 8
+192 128 40
+0 0 0
+64 96 48
+144 64 32
+56 144 16
+96 184 56
+112 152 48
+160 208 56
+160 160 160
+232 232 248
diff --git a/graphics/pokemon/vespiquen/overworld.png b/graphics/pokemon/vespiquen/overworld.png
new file mode 100644
index 000000000000..5c131d7e4089
Binary files /dev/null and b/graphics/pokemon/vespiquen/overworld.png differ
diff --git a/graphics/pokemon/vespiquen/overworld_normal.pal b/graphics/pokemon/vespiquen/overworld_normal.pal
new file mode 100644
index 000000000000..7f98a243db60
--- /dev/null
+++ b/graphics/pokemon/vespiquen/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+216 224 232
+48 48 48
+104 104 104
+160 184 224
+200 104 40
+160 32 56
+248 200 56
+176 104 32
+232 152 24
+72 64 40
+248 48 104
+168 88 48
+232 232 248
+0 0 0
diff --git a/graphics/pokemon/vespiquen/overworld_shiny.pal b/graphics/pokemon/vespiquen/overworld_shiny.pal
new file mode 100644
index 000000000000..fda7a17c8557
--- /dev/null
+++ b/graphics/pokemon/vespiquen/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+216 224 232
+48 48 48
+104 104 104
+160 184 224
+200 104 40
+160 32 56
+248 136 56
+152 56 32
+216 88 64
+72 64 40
+248 48 104
+168 88 48
+232 232 248
+0 0 0
diff --git a/graphics/pokemon/vibrava/overworld.png b/graphics/pokemon/vibrava/overworld.png
new file mode 100644
index 000000000000..feea84430f81
Binary files /dev/null and b/graphics/pokemon/vibrava/overworld.png differ
diff --git a/graphics/pokemon/vibrava/overworld_normal.pal b/graphics/pokemon/vibrava/overworld_normal.pal
new file mode 100644
index 000000000000..edd646d95440
--- /dev/null
+++ b/graphics/pokemon/vibrava/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 88 56
+72 72 72
+160 176 136
+16 16 16
+56 56 56
+128 136 96
+104 104 104
+40 104 24
+120 184 112
+96 160 96
+216 224 184
+184 192 208
+248 248 248
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/vibrava/overworld_shiny.pal b/graphics/pokemon/vibrava/overworld_shiny.pal
new file mode 100644
index 000000000000..59288c990b36
--- /dev/null
+++ b/graphics/pokemon/vibrava/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 88 56
+72 72 72
+160 176 136
+16 16 16
+56 56 56
+128 136 96
+104 104 104
+128 80 32
+224 136 16
+176 112 24
+216 224 184
+184 192 208
+248 248 248
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/victini/overworld.png b/graphics/pokemon/victini/overworld.png
new file mode 100644
index 000000000000..3c76017a1368
Binary files /dev/null and b/graphics/pokemon/victini/overworld.png differ
diff --git a/graphics/pokemon/victini/overworld_normal.pal b/graphics/pokemon/victini/overworld_normal.pal
new file mode 100644
index 000000000000..1dee2cdac826
--- /dev/null
+++ b/graphics/pokemon/victini/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 168
+74 41 18
+230 77 40
+142 40 17
+109 101 43
+232 174 79
+0 0 0
+73 48 40
+248 237 138
+48 136 192
+32 104 168
+238 238 247
+247 231 200
+75 171 208
+166 133 46
+230 77 40
diff --git a/graphics/pokemon/victini/overworld_shiny.pal b/graphics/pokemon/victini/overworld_shiny.pal
new file mode 100644
index 000000000000..663e14a70240
--- /dev/null
+++ b/graphics/pokemon/victini/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 168
+74 41 18
+248 64 24
+112 16 0
+96 96 96
+184 184 184
+0 0 0
+73 48 40
+248 248 248
+48 136 192
+32 104 168
+238 238 247
+243 243 243
+75 171 208
+128 128 136
+230 77 40
diff --git a/graphics/pokemon/victreebel/overworld.png b/graphics/pokemon/victreebel/overworld.png
new file mode 100644
index 000000000000..58079e2cd429
Binary files /dev/null and b/graphics/pokemon/victreebel/overworld.png differ
diff --git a/graphics/pokemon/victreebel/overworld_normal.pal b/graphics/pokemon/victreebel/overworld_normal.pal
new file mode 100644
index 000000000000..3e00a8ecaf59
--- /dev/null
+++ b/graphics/pokemon/victreebel/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+80 64 48
+64 88 40
+128 96 40
+0 0 0
+96 152 56
+184 136 56
+136 216 80
+168 64 112
+120 8 64
+32 32 32
+240 120 160
+192 192 192
+232 232 248
+184 160 48
+240 224 72
diff --git a/graphics/pokemon/victreebel/overworld_shiny.pal b/graphics/pokemon/victreebel/overworld_shiny.pal
new file mode 100644
index 000000000000..ae4a85f8ef25
--- /dev/null
+++ b/graphics/pokemon/victreebel/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 64 48
+88 80 48
+128 96 40
+0 0 0
+128 112 72
+184 136 56
+184 152 88
+64 112 152
+64 88 128
+32 32 32
+96 168 216
+192 192 192
+232 232 248
+152 160 72
+200 216 88
diff --git a/graphics/pokemon/vigoroth/overworld.png b/graphics/pokemon/vigoroth/overworld.png
new file mode 100644
index 000000000000..951885303cef
Binary files /dev/null and b/graphics/pokemon/vigoroth/overworld.png differ
diff --git a/graphics/pokemon/vigoroth/overworld_normal.pal b/graphics/pokemon/vigoroth/overworld_normal.pal
new file mode 100644
index 000000000000..f226b3dbde1f
--- /dev/null
+++ b/graphics/pokemon/vigoroth/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 24 24
+96 88 104
+64 56 72
+208 88 88
+168 56 56
+176 168 176
+0 0 0
+232 232 248
+216 208 216
+144 104 96
+120 80 72
+96 48 48
+232 128 120
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/vigoroth/overworld_shiny.pal b/graphics/pokemon/vigoroth/overworld_shiny.pal
new file mode 100644
index 000000000000..d352536d052a
--- /dev/null
+++ b/graphics/pokemon/vigoroth/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 32 16
+120 112 72
+96 80 48
+208 96 72
+168 64 48
+184 176 128
+0 0 0
+232 232 248
+216 216 168
+144 104 96
+120 80 72
+96 48 48
+232 136 104
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/vikavolt/overworld.png b/graphics/pokemon/vikavolt/overworld.png
new file mode 100644
index 000000000000..dbd1c77383ec
Binary files /dev/null and b/graphics/pokemon/vikavolt/overworld.png differ
diff --git a/graphics/pokemon/vikavolt/overworld_normal.pal b/graphics/pokemon/vikavolt/overworld_normal.pal
new file mode 100644
index 000000000000..6a1e69c1fb5d
--- /dev/null
+++ b/graphics/pokemon/vikavolt/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+222 223 246
+226 191 70
+137 142 165
+55 152 195
+195 112 23
+134 105 28
+86 93 96
+50 116 152
+32 85 114
+60 67 70
+23 68 101
+37 39 41
+16 16 16
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/vikavolt/overworld_shiny.pal b/graphics/pokemon/vikavolt/overworld_shiny.pal
new file mode 100644
index 000000000000..9a794a547920
--- /dev/null
+++ b/graphics/pokemon/vikavolt/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+222 223 246
+168 248 24
+137 142 165
+208 200 208
+208 56 32
+134 105 28
+86 93 96
+160 144 160
+88 80 88
+60 67 70
+88 88 88
+37 39 41
+16 16 16
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/vileplume/overworld.png b/graphics/pokemon/vileplume/overworld.png
new file mode 100644
index 000000000000..8d9728feffb7
Binary files /dev/null and b/graphics/pokemon/vileplume/overworld.png differ
diff --git a/graphics/pokemon/vileplume/overworld_normal.pal b/graphics/pokemon/vileplume/overworld_normal.pal
new file mode 100644
index 000000000000..f803547b53fb
--- /dev/null
+++ b/graphics/pokemon/vileplume/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+120 32 16
+216 96 112
+216 184 144
+168 48 72
+0 0 0
+248 136 72
+168 80 16
+32 56 104
+48 80 112
+64 112 152
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/vileplume/overworld_shiny.pal b/graphics/pokemon/vileplume/overworld_shiny.pal
new file mode 100644
index 000000000000..7ed5503f4ad8
--- /dev/null
+++ b/graphics/pokemon/vileplume/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+104 64 24
+248 184 72
+216 224 144
+200 112 16
+0 0 0
+248 160 24
+168 128 16
+32 72 40
+56 120 64
+120 160 72
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/virizion/overworld.png b/graphics/pokemon/virizion/overworld.png
new file mode 100644
index 000000000000..a61c383dfd44
Binary files /dev/null and b/graphics/pokemon/virizion/overworld.png differ
diff --git a/graphics/pokemon/virizion/overworld_normal.pal b/graphics/pokemon/virizion/overworld_normal.pal
new file mode 100644
index 000000000000..4ffdcfbb2638
--- /dev/null
+++ b/graphics/pokemon/virizion/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+44 72 37
+55 130 52
+24 40 16
+139 215 47
+75 94 83
+117 179 51
+220 153 149
+220 153 149
+109 101 43
+197 166 106
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/virizion/overworld_shiny.pal b/graphics/pokemon/virizion/overworld_shiny.pal
new file mode 100644
index 000000000000..5c9f5d8df0dd
--- /dev/null
+++ b/graphics/pokemon/virizion/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+63 76 51
+144 56 88
+24 40 16
+232 136 160
+104 112 160
+208 96 120
+241 228 205
+224 107 136
+171 55 36
+197 165 106
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/vivillon/archipelago/overworld.png b/graphics/pokemon/vivillon/archipelago/overworld.png
new file mode 100644
index 000000000000..259b90a64d92
Binary files /dev/null and b/graphics/pokemon/vivillon/archipelago/overworld.png differ
diff --git a/graphics/pokemon/vivillon/archipelago/overworld_normal.pal b/graphics/pokemon/vivillon/archipelago/overworld_normal.pal
new file mode 100644
index 000000000000..5646ef56e5e6
--- /dev/null
+++ b/graphics/pokemon/vivillon/archipelago/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+62 62 60
+192 73 76
+99 57 62
+62 62 60
+207 188 157
+185 120 93
+75 191 117
+155 90 73
+140 139 136
+233 232 231
+183 179 171
+97 96 95
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/vivillon/archipelago/overworld_shiny.pal b/graphics/pokemon/vivillon/archipelago/overworld_shiny.pal
new file mode 100644
index 000000000000..350b00e2302b
--- /dev/null
+++ b/graphics/pokemon/vivillon/archipelago/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+62 62 60
+192 73 76
+99 57 62
+110 110 102
+207 188 157
+185 120 93
+75 191 117
+155 90 73
+185 185 176
+233 232 231
+183 179 171
+97 96 95
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/vivillon/continental/overworld.png b/graphics/pokemon/vivillon/continental/overworld.png
new file mode 100644
index 000000000000..51adbd54ae13
Binary files /dev/null and b/graphics/pokemon/vivillon/continental/overworld.png differ
diff --git a/graphics/pokemon/vivillon/continental/overworld_normal.pal b/graphics/pokemon/vivillon/continental/overworld_normal.pal
new file mode 100644
index 000000000000..67fa56778cbd
--- /dev/null
+++ b/graphics/pokemon/vivillon/continental/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+62 62 60
+208 137 101
+109 72 53
+62 62 60
+255 251 123
+209 89 79
+249 192 104
+90 84 102
+140 139 136
+233 232 231
+183 179 171
+97 96 95
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/vivillon/continental/overworld_shiny.pal b/graphics/pokemon/vivillon/continental/overworld_shiny.pal
new file mode 100644
index 000000000000..3fa7e4862d3a
--- /dev/null
+++ b/graphics/pokemon/vivillon/continental/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+62 62 60
+208 137 101
+109 72 53
+110 110 102
+255 251 123
+209 89 79
+249 192 104
+90 84 102
+185 185 176
+233 232 231
+183 179 171
+97 96 95
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/vivillon/elegant/overworld.png b/graphics/pokemon/vivillon/elegant/overworld.png
new file mode 100644
index 000000000000..9cf951ab152f
Binary files /dev/null and b/graphics/pokemon/vivillon/elegant/overworld.png differ
diff --git a/graphics/pokemon/vivillon/elegant/overworld_normal.pal b/graphics/pokemon/vivillon/elegant/overworld_normal.pal
new file mode 100644
index 000000000000..9c25835776da
--- /dev/null
+++ b/graphics/pokemon/vivillon/elegant/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+62 62 60
+237 221 253
+50 45 69
+252 225 96
+62 62 60
+143 123 179
+213 168 238
+220 76 79
+113 100 156
+140 139 136
+233 232 231
+183 179 171
+97 96 95
+0 0 0
diff --git a/graphics/pokemon/vivillon/elegant/overworld_shiny.pal b/graphics/pokemon/vivillon/elegant/overworld_shiny.pal
new file mode 100644
index 000000000000..2929621808a4
--- /dev/null
+++ b/graphics/pokemon/vivillon/elegant/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+62 62 60
+237 221 253
+50 45 69
+252 225 96
+110 110 102
+143 123 179
+213 168 238
+220 76 79
+113 100 156
+185 185 176
+233 232 231
+183 179 171
+97 96 95
+0 0 0
diff --git a/graphics/pokemon/vivillon/fancy/overworld.png b/graphics/pokemon/vivillon/fancy/overworld.png
new file mode 100644
index 000000000000..353e85d6a669
Binary files /dev/null and b/graphics/pokemon/vivillon/fancy/overworld.png differ
diff --git a/graphics/pokemon/vivillon/fancy/overworld_normal.pal b/graphics/pokemon/vivillon/fancy/overworld_normal.pal
new file mode 100644
index 000000000000..792d36c45e7c
--- /dev/null
+++ b/graphics/pokemon/vivillon/fancy/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 160 248
+16 16 16
+62 62 60
+206 221 152
+87 80 83
+155 146 151
+129 182 114
+236 118 121
+245 229 232
+62 27 26
+183 214 115
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/vivillon/fancy/overworld_shiny.pal b/graphics/pokemon/vivillon/fancy/overworld_shiny.pal
new file mode 100644
index 000000000000..690cfdd9a2f0
--- /dev/null
+++ b/graphics/pokemon/vivillon/fancy/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 160 248
+16 16 16
+62 60 58
+206 221 152
+96 91 90
+173 164 167
+129 182 114
+236 118 121
+245 229 232
+62 60 58
+183 214 115
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/vivillon/garden/overworld.png b/graphics/pokemon/vivillon/garden/overworld.png
new file mode 100644
index 000000000000..b2fd3d4a1869
Binary files /dev/null and b/graphics/pokemon/vivillon/garden/overworld.png differ
diff --git a/graphics/pokemon/vivillon/garden/overworld_normal.pal b/graphics/pokemon/vivillon/garden/overworld_normal.pal
new file mode 100644
index 000000000000..34fde952ec72
--- /dev/null
+++ b/graphics/pokemon/vivillon/garden/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+62 62 60
+70 128 91
+38 56 45
+62 62 60
+82 184 153
+140 205 103
+183 97 93
+140 139 136
+233 232 231
+183 179 171
+97 96 95
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/vivillon/garden/overworld_shiny.pal b/graphics/pokemon/vivillon/garden/overworld_shiny.pal
new file mode 100644
index 000000000000..4ac2f2c76504
--- /dev/null
+++ b/graphics/pokemon/vivillon/garden/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+62 62 60
+70 128 91
+38 56 45
+110 110 102
+82 184 153
+140 205 103
+183 97 93
+185 185 176
+233 232 231
+183 179 171
+97 96 95
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/vivillon/high_plains/overworld.png b/graphics/pokemon/vivillon/high_plains/overworld.png
new file mode 100644
index 000000000000..5a1d4df35f59
Binary files /dev/null and b/graphics/pokemon/vivillon/high_plains/overworld.png differ
diff --git a/graphics/pokemon/vivillon/high_plains/overworld_normal.pal b/graphics/pokemon/vivillon/high_plains/overworld_normal.pal
new file mode 100644
index 000000000000..76552c14c012
--- /dev/null
+++ b/graphics/pokemon/vivillon/high_plains/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+62 62 60
+224 131 94
+97 68 53
+62 62 60
+239 164 109
+168 78 77
+164 110 72
+140 139 136
+233 232 231
+183 179 171
+97 96 95
+156 97 72
+73 109 79
+236 204 30
diff --git a/graphics/pokemon/vivillon/high_plains/overworld_shiny.pal b/graphics/pokemon/vivillon/high_plains/overworld_shiny.pal
new file mode 100644
index 000000000000..6d2de96234cd
--- /dev/null
+++ b/graphics/pokemon/vivillon/high_plains/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+62 62 60
+224 131 94
+97 68 53
+110 110 102
+239 164 109
+168 78 77
+164 110 72
+185 185 176
+233 232 231
+183 179 171
+97 96 95
+156 97 72
+73 109 79
+236 204 30
diff --git a/graphics/pokemon/vivillon/jungle/overworld.png b/graphics/pokemon/vivillon/jungle/overworld.png
new file mode 100644
index 000000000000..d4e43eb5e18e
Binary files /dev/null and b/graphics/pokemon/vivillon/jungle/overworld.png differ
diff --git a/graphics/pokemon/vivillon/jungle/overworld_normal.pal b/graphics/pokemon/vivillon/jungle/overworld_normal.pal
new file mode 100644
index 000000000000..7a15e8218f1c
--- /dev/null
+++ b/graphics/pokemon/vivillon/jungle/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+62 62 60
+95 113 100
+60 64 61
+62 62 60
+112 132 114
+155 204 160
+140 139 136
+216 214 210
+183 179 171
+97 96 95
+116 79 50
+194 152 116
+151 108 77
+0 0 0
diff --git a/graphics/pokemon/vivillon/jungle/overworld_shiny.pal b/graphics/pokemon/vivillon/jungle/overworld_shiny.pal
new file mode 100644
index 000000000000..420afe6fea65
--- /dev/null
+++ b/graphics/pokemon/vivillon/jungle/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+62 62 60
+95 113 100
+60 64 61
+110 110 102
+112 132 114
+155 204 160
+185 185 176
+233 232 231
+183 179 171
+97 96 95
+116 79 50
+194 152 116
+151 108 77
+0 0 0
diff --git a/graphics/pokemon/vivillon/marine/overworld.png b/graphics/pokemon/vivillon/marine/overworld.png
new file mode 100644
index 000000000000..7faa9449d0af
Binary files /dev/null and b/graphics/pokemon/vivillon/marine/overworld.png differ
diff --git a/graphics/pokemon/vivillon/marine/overworld_normal.pal b/graphics/pokemon/vivillon/marine/overworld_normal.pal
new file mode 100644
index 000000000000..7b55c906c5c3
--- /dev/null
+++ b/graphics/pokemon/vivillon/marine/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+62 62 60
+65 147 201
+64 59 103
+62 62 60
+115 205 237
+233 232 231
+140 139 136
+183 179 171
+97 96 95
+50 74 106
+75 110 159
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/vivillon/marine/overworld_shiny.pal b/graphics/pokemon/vivillon/marine/overworld_shiny.pal
new file mode 100644
index 000000000000..3525539d33fe
--- /dev/null
+++ b/graphics/pokemon/vivillon/marine/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+62 62 60
+65 147 201
+64 59 103
+110 110 102
+115 205 237
+233 232 231
+185 185 176
+183 179 171
+97 96 95
+50 74 106
+75 110 159
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/vivillon/meadow/overworld.png b/graphics/pokemon/vivillon/meadow/overworld.png
new file mode 100644
index 000000000000..7af7e67072d2
Binary files /dev/null and b/graphics/pokemon/vivillon/meadow/overworld.png differ
diff --git a/graphics/pokemon/vivillon/meadow/overworld_normal.pal b/graphics/pokemon/vivillon/meadow/overworld_normal.pal
new file mode 100644
index 000000000000..c1a028a140e0
--- /dev/null
+++ b/graphics/pokemon/vivillon/meadow/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+62 62 60
+202 105 121
+116 60 69
+62 62 60
+243 143 190
+233 232 231
+74 180 183
+140 139 136
+183 179 171
+97 96 95
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/vivillon/meadow/overworld_shiny.pal b/graphics/pokemon/vivillon/meadow/overworld_shiny.pal
new file mode 100644
index 000000000000..098ddca30f97
--- /dev/null
+++ b/graphics/pokemon/vivillon/meadow/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+62 62 60
+202 105 121
+116 60 69
+110 110 102
+243 143 190
+233 232 231
+74 180 183
+185 185 176
+183 179 171
+97 96 95
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/vivillon/modern/overworld.png b/graphics/pokemon/vivillon/modern/overworld.png
new file mode 100644
index 000000000000..e952b77e03f5
Binary files /dev/null and b/graphics/pokemon/vivillon/modern/overworld.png differ
diff --git a/graphics/pokemon/vivillon/modern/overworld_normal.pal b/graphics/pokemon/vivillon/modern/overworld_normal.pal
new file mode 100644
index 000000000000..e9c5b62ecc29
--- /dev/null
+++ b/graphics/pokemon/vivillon/modern/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+62 62 60
+249 254 255
+126 62 86
+62 62 60
+91 123 183
+221 97 93
+253 242 129
+171 79 92
+140 139 136
+233 232 231
+183 179 171
+97 96 95
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/vivillon/modern/overworld_shiny.pal b/graphics/pokemon/vivillon/modern/overworld_shiny.pal
new file mode 100644
index 000000000000..f3ba9a255c2b
--- /dev/null
+++ b/graphics/pokemon/vivillon/modern/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+62 62 60
+249 254 255
+126 62 86
+110 110 102
+91 123 183
+221 97 93
+253 242 129
+171 79 92
+185 185 176
+233 232 231
+183 179 171
+97 96 95
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/vivillon/monsoon/overworld.png b/graphics/pokemon/vivillon/monsoon/overworld.png
new file mode 100644
index 000000000000..4e764e3e7510
Binary files /dev/null and b/graphics/pokemon/vivillon/monsoon/overworld.png differ
diff --git a/graphics/pokemon/vivillon/monsoon/overworld_normal.pal b/graphics/pokemon/vivillon/monsoon/overworld_normal.pal
new file mode 100644
index 000000000000..5c1e9b68ee3c
--- /dev/null
+++ b/graphics/pokemon/vivillon/monsoon/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+62 62 60
+249 254 255
+75 73 99
+231 232 232
+103 108 114
+173 239 238
+140 139 136
+126 141 212
+194 195 196
+233 232 231
+183 179 171
+150 151 152
+97 96 95
+124 202 210
diff --git a/graphics/pokemon/vivillon/monsoon/overworld_shiny.pal b/graphics/pokemon/vivillon/monsoon/overworld_shiny.pal
new file mode 100644
index 000000000000..6be7ea31d6fc
--- /dev/null
+++ b/graphics/pokemon/vivillon/monsoon/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+62 62 60
+245 249 249
+76 74 98
+245 249 249
+105 108 109
+173 239 238
+170 170 165
+125 143 211
+194 195 196
+245 249 249
+170 170 165
+170 170 165
+105 108 109
+124 202 210
diff --git a/graphics/pokemon/vivillon/ocean/overworld.png b/graphics/pokemon/vivillon/ocean/overworld.png
new file mode 100644
index 000000000000..3c7b1b92cb8f
Binary files /dev/null and b/graphics/pokemon/vivillon/ocean/overworld.png differ
diff --git a/graphics/pokemon/vivillon/ocean/overworld_normal.pal b/graphics/pokemon/vivillon/ocean/overworld_normal.pal
new file mode 100644
index 000000000000..202e5aed1b6a
--- /dev/null
+++ b/graphics/pokemon/vivillon/ocean/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+32 32 31
+50 46 78
+252 248 132
+243 106 96
+241 175 103
+146 145 141
+233 232 231
+131 188 229
+97 96 95
+87 136 199
+62 94 136
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/vivillon/ocean/overworld_shiny.pal b/graphics/pokemon/vivillon/ocean/overworld_shiny.pal
new file mode 100644
index 000000000000..044c91ddc264
--- /dev/null
+++ b/graphics/pokemon/vivillon/ocean/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+24 24 24
+50 46 78
+252 248 132
+243 106 96
+108 108 101
+241 175 103
+184 184 175
+233 232 231
+131 188 229
+87 136 199
+62 94 136
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/vivillon/overworld.png b/graphics/pokemon/vivillon/overworld.png
new file mode 100644
index 000000000000..6c4d09f88bf1
Binary files /dev/null and b/graphics/pokemon/vivillon/overworld.png differ
diff --git a/graphics/pokemon/vivillon/overworld_normal.pal b/graphics/pokemon/vivillon/overworld_normal.pal
new file mode 100644
index 000000000000..46f8c176edca
--- /dev/null
+++ b/graphics/pokemon/vivillon/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+62 62 60
+212 207 219
+140 138 154
+62 62 60
+249 254 255
+187 193 191
+140 139 136
+233 232 231
+183 179 171
+97 96 95
+152 162 159
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/vivillon/overworld_shiny.pal b/graphics/pokemon/vivillon/overworld_shiny.pal
new file mode 100644
index 000000000000..d61b8186c841
--- /dev/null
+++ b/graphics/pokemon/vivillon/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+62 62 60
+212 207 219
+140 138 154
+110 110 102
+249 254 255
+187 193 191
+185 185 176
+233 232 231
+183 179 171
+97 96 95
+152 162 159
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/vivillon/poke_ball/overworld.png b/graphics/pokemon/vivillon/poke_ball/overworld.png
new file mode 100644
index 000000000000..023615a1bfdc
Binary files /dev/null and b/graphics/pokemon/vivillon/poke_ball/overworld.png differ
diff --git a/graphics/pokemon/vivillon/poke_ball/overworld_normal.pal b/graphics/pokemon/vivillon/poke_ball/overworld_normal.pal
new file mode 100644
index 000000000000..3a7817c8ea3a
--- /dev/null
+++ b/graphics/pokemon/vivillon/poke_ball/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 168 248
+16 16 16
+62 62 60
+172 52 54
+62 27 26
+111 39 40
+211 101 103
+246 180 182
+86 82 93
+225 224 222
+147 146 144
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/vivillon/poke_ball/overworld_shiny.pal b/graphics/pokemon/vivillon/poke_ball/overworld_shiny.pal
new file mode 100644
index 000000000000..015dcf290336
--- /dev/null
+++ b/graphics/pokemon/vivillon/poke_ball/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 168 248
+16 16 16
+62 39 37
+172 52 54
+62 39 37
+111 39 40
+211 101 103
+246 180 182
+94 91 96
+227 226 224
+169 168 163
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/vivillon/polar/overworld.png b/graphics/pokemon/vivillon/polar/overworld.png
new file mode 100644
index 000000000000..d6c24d599f33
Binary files /dev/null and b/graphics/pokemon/vivillon/polar/overworld.png differ
diff --git a/graphics/pokemon/vivillon/polar/overworld_normal.pal b/graphics/pokemon/vivillon/polar/overworld_normal.pal
new file mode 100644
index 000000000000..31488b122dc6
--- /dev/null
+++ b/graphics/pokemon/vivillon/polar/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+62 62 60
+62 67 110
+50 46 78
+62 62 60
+78 94 150
+255 255 255
+140 139 136
+233 232 231
+183 179 171
+97 96 95
+135 165 210
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/vivillon/polar/overworld_shiny.pal b/graphics/pokemon/vivillon/polar/overworld_shiny.pal
new file mode 100644
index 000000000000..c597ac5098b0
--- /dev/null
+++ b/graphics/pokemon/vivillon/polar/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+62 62 60
+62 67 110
+50 46 78
+110 110 102
+78 94 150
+255 255 255
+185 185 176
+233 232 231
+183 179 171
+97 96 95
+135 165 210
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/vivillon/river/overworld.png b/graphics/pokemon/vivillon/river/overworld.png
new file mode 100644
index 000000000000..983c82d2a5ed
Binary files /dev/null and b/graphics/pokemon/vivillon/river/overworld.png differ
diff --git a/graphics/pokemon/vivillon/river/overworld_normal.pal b/graphics/pokemon/vivillon/river/overworld_normal.pal
new file mode 100644
index 000000000000..2dcfb037187a
--- /dev/null
+++ b/graphics/pokemon/vivillon/river/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+62 62 60
+179 139 81
+106 78 56
+62 62 60
+204 169 95
+153 140 85
+102 92 69
+140 139 136
+233 232 231
+183 179 171
+97 96 95
+49 113 107
+64 159 192
+118 201 210
diff --git a/graphics/pokemon/vivillon/river/overworld_shiny.pal b/graphics/pokemon/vivillon/river/overworld_shiny.pal
new file mode 100644
index 000000000000..1ed1cad2a679
--- /dev/null
+++ b/graphics/pokemon/vivillon/river/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+62 62 60
+179 139 81
+106 78 56
+110 110 102
+204 169 95
+153 140 85
+102 92 69
+185 185 176
+233 232 231
+183 179 171
+97 96 95
+49 113 107
+64 159 192
+118 201 210
diff --git a/graphics/pokemon/vivillon/sandstorm/overworld.png b/graphics/pokemon/vivillon/sandstorm/overworld.png
new file mode 100644
index 000000000000..b10bf90418f9
Binary files /dev/null and b/graphics/pokemon/vivillon/sandstorm/overworld.png differ
diff --git a/graphics/pokemon/vivillon/sandstorm/overworld_normal.pal b/graphics/pokemon/vivillon/sandstorm/overworld_normal.pal
new file mode 100644
index 000000000000..75a5a382dfc6
--- /dev/null
+++ b/graphics/pokemon/vivillon/sandstorm/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+62 62 60
+221 189 139
+77 60 53
+62 62 60
+240 219 165
+187 180 133
+111 106 82
+140 139 136
+233 232 231
+183 179 171
+97 96 95
+112 95 80
+184 142 112
+0 0 0
diff --git a/graphics/pokemon/vivillon/sandstorm/overworld_shiny.pal b/graphics/pokemon/vivillon/sandstorm/overworld_shiny.pal
new file mode 100644
index 000000000000..691552206853
--- /dev/null
+++ b/graphics/pokemon/vivillon/sandstorm/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+62 62 60
+221 189 139
+77 60 53
+110 110 102
+240 219 165
+187 180 133
+111 106 82
+185 185 176
+233 232 231
+183 179 171
+97 96 95
+112 95 80
+184 142 112
+0 0 0
diff --git a/graphics/pokemon/vivillon/savanna/overworld.png b/graphics/pokemon/vivillon/savanna/overworld.png
new file mode 100644
index 000000000000..84cdd7f5b19b
Binary files /dev/null and b/graphics/pokemon/vivillon/savanna/overworld.png differ
diff --git a/graphics/pokemon/vivillon/savanna/overworld_normal.pal b/graphics/pokemon/vivillon/savanna/overworld_normal.pal
new file mode 100644
index 000000000000..357fdd9ce15e
--- /dev/null
+++ b/graphics/pokemon/vivillon/savanna/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+62 62 60
+106 141 190
+73 66 122
+62 62 60
+253 245 136
+162 218 193
+140 139 136
+233 232 231
+183 179 171
+97 96 95
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/vivillon/savanna/overworld_shiny.pal b/graphics/pokemon/vivillon/savanna/overworld_shiny.pal
new file mode 100644
index 000000000000..caf64a4a3c57
--- /dev/null
+++ b/graphics/pokemon/vivillon/savanna/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+62 62 60
+106 141 190
+73 66 122
+110 110 102
+253 245 136
+162 218 193
+185 185 176
+233 232 231
+183 179 171
+97 96 95
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/vivillon/sun/overworld.png b/graphics/pokemon/vivillon/sun/overworld.png
new file mode 100644
index 000000000000..48d9294e3df5
Binary files /dev/null and b/graphics/pokemon/vivillon/sun/overworld.png differ
diff --git a/graphics/pokemon/vivillon/sun/overworld_normal.pal b/graphics/pokemon/vivillon/sun/overworld_normal.pal
new file mode 100644
index 000000000000..b75ea83e3369
--- /dev/null
+++ b/graphics/pokemon/vivillon/sun/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+62 62 60
+238 171 118
+119 59 53
+62 62 60
+252 244 136
+244 130 154
+140 139 136
+214 94 128
+233 232 231
+183 179 171
+97 96 95
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/vivillon/sun/overworld_shiny.pal b/graphics/pokemon/vivillon/sun/overworld_shiny.pal
new file mode 100644
index 000000000000..8776840e0d5a
--- /dev/null
+++ b/graphics/pokemon/vivillon/sun/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+62 62 60
+238 171 118
+119 59 53
+110 110 102
+252 244 136
+244 130 154
+185 185 176
+214 94 128
+233 232 231
+183 179 171
+97 96 95
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/vivillon/tundra/overworld.png b/graphics/pokemon/vivillon/tundra/overworld.png
new file mode 100644
index 000000000000..6de83f9cb477
Binary files /dev/null and b/graphics/pokemon/vivillon/tundra/overworld.png differ
diff --git a/graphics/pokemon/vivillon/tundra/overworld_normal.pal b/graphics/pokemon/vivillon/tundra/overworld_normal.pal
new file mode 100644
index 000000000000..2ec3e7a49e48
--- /dev/null
+++ b/graphics/pokemon/vivillon/tundra/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+62 62 60
+139 190 231
+60 105 138
+62 62 60
+176 224 245
+255 255 255
+140 139 136
+233 232 231
+183 179 171
+97 96 95
+103 157 215
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/vivillon/tundra/overworld_shiny.pal b/graphics/pokemon/vivillon/tundra/overworld_shiny.pal
new file mode 100644
index 000000000000..142b48fbaf8a
--- /dev/null
+++ b/graphics/pokemon/vivillon/tundra/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+62 62 60
+139 190 231
+60 105 138
+110 110 102
+176 224 245
+255 255 255
+185 185 176
+233 232 231
+183 179 171
+97 96 95
+103 157 215
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/volbeat/overworld.png b/graphics/pokemon/volbeat/overworld.png
new file mode 100644
index 000000000000..00db3d2c22c2
Binary files /dev/null and b/graphics/pokemon/volbeat/overworld.png differ
diff --git a/graphics/pokemon/volbeat/overworld_normal.pal b/graphics/pokemon/volbeat/overworld_normal.pal
new file mode 100644
index 000000000000..ad118011eba7
--- /dev/null
+++ b/graphics/pokemon/volbeat/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 80 48
+0 0 0
+64 64 72
+192 152 56
+224 184 64
+40 40 48
+176 176 192
+120 32 48
+224 112 120
+208 72 80
+232 232 248
+176 56 64
+104 104 112
+136 136 152
+224 208 88
diff --git a/graphics/pokemon/volbeat/overworld_shiny.pal b/graphics/pokemon/volbeat/overworld_shiny.pal
new file mode 100644
index 000000000000..bd281bb9e091
--- /dev/null
+++ b/graphics/pokemon/volbeat/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 80 48
+0 0 0
+64 64 72
+152 136 56
+192 168 64
+40 40 48
+200 168 208
+0 56 104
+128 184 232
+88 144 208
+232 232 248
+56 112 168
+104 104 112
+168 136 176
+224 208 88
diff --git a/graphics/pokemon/volcanion/overworld.png b/graphics/pokemon/volcanion/overworld.png
new file mode 100644
index 000000000000..6d0f1b08992e
Binary files /dev/null and b/graphics/pokemon/volcanion/overworld.png differ
diff --git a/graphics/pokemon/volcanion/overworld_normal.pal b/graphics/pokemon/volcanion/overworld_normal.pal
new file mode 100644
index 000000000000..239bff08ef40
--- /dev/null
+++ b/graphics/pokemon/volcanion/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+104 36 47
+208 174 84
+173 117 45
+16 16 16
+66 22 27
+231 84 81
+147 67 80
+105 176 187
+48 108 140
+193 188 187
+170 76 74
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/volcanion/overworld_shiny.pal b/graphics/pokemon/volcanion/overworld_shiny.pal
new file mode 100644
index 000000000000..1f484364691e
--- /dev/null
+++ b/graphics/pokemon/volcanion/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+136 126 37
+226 106 219
+173 93 168
+16 16 16
+136 126 37
+236 219 68
+191 175 37
+105 176 187
+48 108 140
+193 188 187
+170 76 74
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/volcarona/overworld.png b/graphics/pokemon/volcarona/overworld.png
new file mode 100644
index 000000000000..5f2a3065f40d
Binary files /dev/null and b/graphics/pokemon/volcarona/overworld.png differ
diff --git a/graphics/pokemon/volcarona/overworld_normal.pal b/graphics/pokemon/volcarona/overworld_normal.pal
new file mode 100644
index 000000000000..4642303ade87
--- /dev/null
+++ b/graphics/pokemon/volcarona/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+157 77 65
+72 73 76
+212 86 55
+23 38 15
+235 235 243
+158 200 224
+76 105 86
+220 154 25
+88 131 154
+224 128 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/volcarona/overworld_shiny.pal b/graphics/pokemon/volcarona/overworld_shiny.pal
new file mode 100644
index 000000000000..c7a01678aadd
--- /dev/null
+++ b/graphics/pokemon/volcarona/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+136 94 29
+72 73 76
+200 152 16
+23 38 15
+100 104 142
+224 224 224
+76 105 86
+232 184 24
+0 221 98
+158 160 210
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/voltorb/hisuian/overworld.png b/graphics/pokemon/voltorb/hisuian/overworld.png
new file mode 100644
index 000000000000..9289315c623d
Binary files /dev/null and b/graphics/pokemon/voltorb/hisuian/overworld.png differ
diff --git a/graphics/pokemon/voltorb/hisuian/overworld_normal.pal b/graphics/pokemon/voltorb/hisuian/overworld_normal.pal
new file mode 100644
index 000000000000..72e6674a7ba0
--- /dev/null
+++ b/graphics/pokemon/voltorb/hisuian/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+90 0 0
+0 0 0
+222 57 24
+238 180 82
+115 16 16
+172 123 65
+255 98 57
+205 205 213
+255 164 106
+238 238 255
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/voltorb/hisuian/overworld_shiny.pal b/graphics/pokemon/voltorb/hisuian/overworld_shiny.pal
new file mode 100644
index 000000000000..fda740f72362
--- /dev/null
+++ b/graphics/pokemon/voltorb/hisuian/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+0 0 0
+41 41 41
+238 180 82
+16 16 16
+172 123 65
+49 49 49
+205 205 213
+57 57 57
+238 238 255
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/voltorb/overworld.png b/graphics/pokemon/voltorb/overworld.png
new file mode 100644
index 000000000000..365e07ca2635
Binary files /dev/null and b/graphics/pokemon/voltorb/overworld.png differ
diff --git a/graphics/pokemon/voltorb/overworld_normal.pal b/graphics/pokemon/voltorb/overworld_normal.pal
new file mode 100644
index 000000000000..bdc59b6fb90b
--- /dev/null
+++ b/graphics/pokemon/voltorb/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 48 48
+232 80 80
+240 112 112
+200 32 32
+0 0 0
+200 200 208
+112 16 16
+160 160 160
+232 232 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/voltorb/overworld_shiny.pal b/graphics/pokemon/voltorb/overworld_shiny.pal
new file mode 100644
index 000000000000..a906eed53202
--- /dev/null
+++ b/graphics/pokemon/voltorb/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 48 48
+72 152 248
+144 208 248
+32 104 200
+0 0 0
+200 200 208
+24 80 144
+160 160 160
+232 232 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/vullaby/overworld.png b/graphics/pokemon/vullaby/overworld.png
new file mode 100644
index 000000000000..a478e072bcb0
Binary files /dev/null and b/graphics/pokemon/vullaby/overworld.png differ
diff --git a/graphics/pokemon/vullaby/overworld_normal.pal b/graphics/pokemon/vullaby/overworld_normal.pal
new file mode 100644
index 000000000000..392fc49fee93
--- /dev/null
+++ b/graphics/pokemon/vullaby/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+70 54 54
+53 45 45
+182 61 78
+212 117 151
+235 147 168
+94 94 93
+237 237 199
+172 155 121
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/vullaby/overworld_shiny.pal b/graphics/pokemon/vullaby/overworld_shiny.pal
new file mode 100644
index 000000000000..7811c36566eb
--- /dev/null
+++ b/graphics/pokemon/vullaby/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+158 84 80
+158 84 80
+158 84 80
+158 84 80
+232 88 144
+158 84 80
+227 227 220
+160 152 160
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/vulpix/alolan/overworld.png b/graphics/pokemon/vulpix/alolan/overworld.png
new file mode 100644
index 000000000000..2557ae031421
Binary files /dev/null and b/graphics/pokemon/vulpix/alolan/overworld.png differ
diff --git a/graphics/pokemon/vulpix/alolan/overworld_normal.pal b/graphics/pokemon/vulpix/alolan/overworld_normal.pal
new file mode 100644
index 000000000000..afefdbb0cf26
--- /dev/null
+++ b/graphics/pokemon/vulpix/alolan/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+91 119 160
+211 230 253
+250 251 253
+206 222 238
+71 101 147
+150 188 205
+119 154 169
+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/vulpix/alolan/overworld_shiny.pal b/graphics/pokemon/vulpix/alolan/overworld_shiny.pal
new file mode 100644
index 000000000000..9be720ef3d16
--- /dev/null
+++ b/graphics/pokemon/vulpix/alolan/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+149 100 152
+237 213 240
+253 250 253
+219 204 230
+140 93 148
+184 156 198
+149 100 152
+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/vulpix/overworld.png b/graphics/pokemon/vulpix/overworld.png
new file mode 100644
index 000000000000..e8db777a0050
Binary files /dev/null and b/graphics/pokemon/vulpix/overworld.png differ
diff --git a/graphics/pokemon/vulpix/overworld_normal.pal b/graphics/pokemon/vulpix/overworld_normal.pal
new file mode 100644
index 000000000000..6b9a00fded3d
--- /dev/null
+++ b/graphics/pokemon/vulpix/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+88 56 48
+168 80 24
+216 112 48
+240 136 72
+184 88 56
+136 56 56
+88 64 72
+232 232 248
+240 200 152
+120 72 56
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/vulpix/overworld_shiny.pal b/graphics/pokemon/vulpix/overworld_shiny.pal
new file mode 100644
index 000000000000..634302db6f28
--- /dev/null
+++ b/graphics/pokemon/vulpix/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+104 72 48
+216 112 24
+248 152 48
+248 192 88
+208 136 8
+144 120 40
+88 88 56
+232 232 248
+240 216 176
+144 120 40
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/wailmer/overworld.png b/graphics/pokemon/wailmer/overworld.png
new file mode 100644
index 000000000000..9e8a7e494a98
Binary files /dev/null and b/graphics/pokemon/wailmer/overworld.png differ
diff --git a/graphics/pokemon/wailmer/overworld_normal.pal b/graphics/pokemon/wailmer/overworld_normal.pal
new file mode 100644
index 000000000000..43fa25d0a133
--- /dev/null
+++ b/graphics/pokemon/wailmer/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+32 64 96
+104 160 224
+64 128 192
+16 16 16
+48 104 160
+40 96 136
+136 152 168
+96 112 120
+64 72 80
+184 200 216
+80 64 32
+136 120 72
+192 184 120
+168 152 96
+216 232 248
diff --git a/graphics/pokemon/wailmer/overworld_shiny.pal b/graphics/pokemon/wailmer/overworld_shiny.pal
new file mode 100644
index 000000000000..b6cd625b49a2
--- /dev/null
+++ b/graphics/pokemon/wailmer/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 64 96
+168 160 240
+144 136 208
+16 16 16
+120 112 168
+112 88 136
+136 152 168
+96 112 120
+64 72 80
+184 200 216
+80 64 32
+136 120 72
+192 184 120
+168 152 96
+216 232 248
diff --git a/graphics/pokemon/wailord/overworld.png b/graphics/pokemon/wailord/overworld.png
new file mode 100644
index 000000000000..7fec5932a5d8
Binary files /dev/null and b/graphics/pokemon/wailord/overworld.png differ
diff --git a/graphics/pokemon/wailord/overworld_normal.pal b/graphics/pokemon/wailord/overworld_normal.pal
new file mode 100644
index 000000000000..992e70524679
--- /dev/null
+++ b/graphics/pokemon/wailord/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+64 128 192
+32 64 104
+104 160 224
+40 104 152
+136 160 176
+184 200 216
+56 72 80
+216 232 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/wailord/overworld_shiny.pal b/graphics/pokemon/wailord/overworld_shiny.pal
new file mode 100644
index 000000000000..7b78080c7c21
--- /dev/null
+++ b/graphics/pokemon/wailord/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+144 128 192
+80 64 96
+168 160 240
+112 88 136
+136 160 176
+184 200 216
+56 72 80
+216 232 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/walrein/overworld.png b/graphics/pokemon/walrein/overworld.png
new file mode 100644
index 000000000000..e6d9ae8b0493
Binary files /dev/null and b/graphics/pokemon/walrein/overworld.png differ
diff --git a/graphics/pokemon/walrein/overworld_normal.pal b/graphics/pokemon/walrein/overworld_normal.pal
new file mode 100644
index 000000000000..ab057a2c2b19
--- /dev/null
+++ b/graphics/pokemon/walrein/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 80 104
+208 216 232
+0 0 0
+176 184 208
+128 136 152
+136 184 248
+104 160 216
+80 128 176
+248 216 88
+48 64 104
+192 152 24
+80 80 56
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/walrein/overworld_shiny.pal b/graphics/pokemon/walrein/overworld_shiny.pal
new file mode 100644
index 000000000000..070b7487981a
--- /dev/null
+++ b/graphics/pokemon/walrein/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 80 104
+208 216 232
+0 0 0
+176 184 208
+128 136 152
+200 160 248
+160 128 208
+128 88 160
+248 216 88
+88 56 112
+192 152 24
+80 80 56
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/wartortle/overworld.png b/graphics/pokemon/wartortle/overworld.png
new file mode 100644
index 000000000000..53c5c24a0584
Binary files /dev/null and b/graphics/pokemon/wartortle/overworld.png differ
diff --git a/graphics/pokemon/wartortle/overworld_normal.pal b/graphics/pokemon/wartortle/overworld_normal.pal
new file mode 100644
index 000000000000..d421a7063e25
--- /dev/null
+++ b/graphics/pokemon/wartortle/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 210 164
+64 64 64
+232 232 248
+160 160 160
+64 80 152
+112 152 224
+64 120 216
+56 56 72
+0 0 0
+160 8 48
+184 136 24
+160 88 24
+240 208 112
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/wartortle/overworld_shiny.pal b/graphics/pokemon/wartortle/overworld_shiny.pal
new file mode 100644
index 000000000000..32dbf8ab5ca9
--- /dev/null
+++ b/graphics/pokemon/wartortle/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+153 210 164
+64 64 64
+232 232 248
+160 160 160
+64 96 152
+128 184 248
+88 144 216
+56 56 72
+0 0 0
+160 8 48
+144 168 24
+96 136 24
+240 208 112
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/watchog/overworld.png b/graphics/pokemon/watchog/overworld.png
new file mode 100644
index 000000000000..f2e9ff47338f
Binary files /dev/null and b/graphics/pokemon/watchog/overworld.png differ
diff --git a/graphics/pokemon/watchog/overworld_normal.pal b/graphics/pokemon/watchog/overworld_normal.pal
new file mode 100644
index 000000000000..3e75b9e987be
--- /dev/null
+++ b/graphics/pokemon/watchog/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+90 41 57
+115 49 65
+0 0 0
+148 57 57
+47 46 47
+152 152 152
+218 85 79
+230 222 210
+212 157 60
+16 16 16
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/watchog/overworld_shiny.pal b/graphics/pokemon/watchog/overworld_shiny.pal
new file mode 100644
index 000000000000..0a5ae605c945
--- /dev/null
+++ b/graphics/pokemon/watchog/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+90 41 57
+112 48 86
+0 0 0
+144 56 96
+47 46 47
+152 152 152
+212 118 77
+193 223 190
+91 169 85
+16 16 16
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/wattrel/back.png b/graphics/pokemon/wattrel/back.png
index 2a5bc640b581..5df11376f393 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 72981aa44e91..c2527bab8b7f 100755
Binary files a/graphics/pokemon/wattrel/front.png and b/graphics/pokemon/wattrel/front.png differ
diff --git a/graphics/pokemon/weavile/overworld.png b/graphics/pokemon/weavile/overworld.png
new file mode 100644
index 000000000000..9a0bb45eaebc
Binary files /dev/null and b/graphics/pokemon/weavile/overworld.png differ
diff --git a/graphics/pokemon/weavile/overworld_normal.pal b/graphics/pokemon/weavile/overworld_normal.pal
new file mode 100644
index 000000000000..155eff3de614
--- /dev/null
+++ b/graphics/pokemon/weavile/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+152 8 32
+160 40 64
+200 48 72
+96 8 24
+48 56 88
+64 96 160
+104 120 176
+0 0 0
+240 176 64
+168 184 200
+112 120 128
+232 232 248
+56 72 112
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/weavile/overworld_shiny.pal b/graphics/pokemon/weavile/overworld_shiny.pal
new file mode 100644
index 000000000000..e45ea86c0ddf
--- /dev/null
+++ b/graphics/pokemon/weavile/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+168 104 56
+232 168 72
+248 208 64
+136 72 32
+120 32 104
+192 88 184
+224 176 224
+0 0 0
+240 176 64
+168 184 200
+112 120 128
+232 232 248
+128 56 128
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/weedle/overworld.png b/graphics/pokemon/weedle/overworld.png
new file mode 100644
index 000000000000..dd0679be626d
Binary files /dev/null and b/graphics/pokemon/weedle/overworld.png differ
diff --git a/graphics/pokemon/weedle/overworld_normal.pal b/graphics/pokemon/weedle/overworld_normal.pal
new file mode 100644
index 000000000000..be7742350ce3
--- /dev/null
+++ b/graphics/pokemon/weedle/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 64 64
+232 232 248
+96 72 40
+128 128 128
+192 152 64
+184 184 184
+248 208 64
+0 0 0
+192 40 64
+248 112 136
+192 40 64
+160 120 48
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/weedle/overworld_shiny.pal b/graphics/pokemon/weedle/overworld_shiny.pal
new file mode 100644
index 000000000000..eb8ffc26db13
--- /dev/null
+++ b/graphics/pokemon/weedle/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+64 64 64
+232 232 248
+96 72 40
+128 128 128
+224 168 16
+184 184 184
+248 248 128
+0 0 0
+192 40 64
+248 184 216
+200 96 112
+160 120 48
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/weepinbell/overworld.png b/graphics/pokemon/weepinbell/overworld.png
new file mode 100644
index 000000000000..4f96c0973d73
Binary files /dev/null and b/graphics/pokemon/weepinbell/overworld.png differ
diff --git a/graphics/pokemon/weepinbell/overworld_normal.pal b/graphics/pokemon/weepinbell/overworld_normal.pal
new file mode 100644
index 000000000000..866d6941aa86
--- /dev/null
+++ b/graphics/pokemon/weepinbell/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+80 64 48
+184 136 56
+0 0 0
+128 96 40
+184 160 48
+240 224 72
+96 152 56
+64 88 40
+136 216 80
+232 232 248
+120 8 64
+168 64 112
+184 184 184
+88 88 88
+240 120 160
diff --git a/graphics/pokemon/weepinbell/overworld_shiny.pal b/graphics/pokemon/weepinbell/overworld_shiny.pal
new file mode 100644
index 000000000000..35014b32d92e
--- /dev/null
+++ b/graphics/pokemon/weepinbell/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+80 64 48
+184 136 56
+0 0 0
+128 96 40
+160 168 64
+224 240 88
+120 160 32
+72 88 40
+168 216 80
+232 232 248
+80 56 112
+152 136 176
+184 184 184
+88 88 88
+192 200 232
diff --git a/graphics/pokemon/weezing/galarian/overworld.png b/graphics/pokemon/weezing/galarian/overworld.png
new file mode 100644
index 000000000000..869fd482d1af
Binary files /dev/null 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
new file mode 100644
index 000000000000..70db757710dd
--- /dev/null
+++ b/graphics/pokemon/weezing/galarian/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+148 145 148
+148 145 148
+106 56 65
+98 101 98
+205 202 205
+57 165 65
+82 190 90
+57 60 57
+238 234 255
+106 198 115
+115 113 115
+164 161 131
+230 226 230
+123 125 123
diff --git a/graphics/pokemon/weezing/galarian/overworld_shiny.pal b/graphics/pokemon/weezing/galarian/overworld_shiny.pal
new file mode 100644
index 000000000000..009cae37fb3a
--- /dev/null
+++ b/graphics/pokemon/weezing/galarian/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+106 44 156
+0 0 0
+148 145 148
+192 144 128
+106 56 65
+112 80 72
+205 202 205
+57 165 65
+82 190 90
+48 32 24
+238 234 255
+106 198 115
+115 113 115
+171 170 151
+230 226 230
+168 120 104
diff --git a/graphics/pokemon/weezing/overworld.png b/graphics/pokemon/weezing/overworld.png
new file mode 100644
index 000000000000..f5ddcfe4fb93
Binary files /dev/null and b/graphics/pokemon/weezing/overworld.png differ
diff --git a/graphics/pokemon/weezing/overworld_normal.pal b/graphics/pokemon/weezing/overworld_normal.pal
new file mode 100644
index 000000000000..357fa9a4eefc
--- /dev/null
+++ b/graphics/pokemon/weezing/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+144 128 40
+200 184 120
+56 40 56
+120 104 192
+136 128 208
+88 80 120
+0 0 0
+168 168 208
+232 232 248
+104 56 64
+128 72 80
+160 160 128
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/weezing/overworld_shiny.pal b/graphics/pokemon/weezing/overworld_shiny.pal
new file mode 100644
index 000000000000..d43b58cd8238
--- /dev/null
+++ b/graphics/pokemon/weezing/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+128 72 128
+184 144 184
+48 72 80
+104 144 136
+136 168 168
+72 112 96
+0 0 0
+168 168 208
+232 232 248
+104 56 64
+128 72 80
+176 160 128
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/whimsicott/overworld.png b/graphics/pokemon/whimsicott/overworld.png
new file mode 100644
index 000000000000..62057ff6f895
Binary files /dev/null and b/graphics/pokemon/whimsicott/overworld.png differ
diff --git a/graphics/pokemon/whimsicott/overworld_normal.pal b/graphics/pokemon/whimsicott/overworld_normal.pal
new file mode 100644
index 000000000000..c9e2ef3b0095
--- /dev/null
+++ b/graphics/pokemon/whimsicott/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+168 151 83
+106 84 64
+226 218 202
+41 66 22
+194 178 137
+194 178 137
+12 12 12
+41 66 22
+66 119 65
+237 237 247
+106 84 64
+226 218 202
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/whimsicott/overworld_shiny.pal b/graphics/pokemon/whimsicott/overworld_shiny.pal
new file mode 100644
index 000000000000..1e09d1a78e6e
--- /dev/null
+++ b/graphics/pokemon/whimsicott/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+110 94 94
+105 89 68
+248 240 232
+56 50 50
+192 192 184
+194 178 137
+9 9 9
+35 86 194
+107 154 170
+237 237 247
+82 57 41
+230 222 205
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/whirlipede/overworld.png b/graphics/pokemon/whirlipede/overworld.png
new file mode 100644
index 000000000000..d6cc3e73d1ec
Binary files /dev/null and b/graphics/pokemon/whirlipede/overworld.png differ
diff --git a/graphics/pokemon/whirlipede/overworld_normal.pal b/graphics/pokemon/whirlipede/overworld_normal.pal
new file mode 100644
index 000000000000..10ce9dee7ffe
--- /dev/null
+++ b/graphics/pokemon/whirlipede/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+149 108 231
+64 64 80
+100 85 143
+198 165 255
+184 80 144
+0 0 0
+64 64 80
+40 40 40
+168 128 64
+208 176 96
+149 108 231
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/whirlipede/overworld_shiny.pal b/graphics/pokemon/whirlipede/overworld_shiny.pal
new file mode 100644
index 000000000000..18192596b39c
--- /dev/null
+++ b/graphics/pokemon/whirlipede/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+72 56 88
+64 56 72
+100 85 143
+128 104 160
+88 152 136
+0 0 0
+64 64 80
+40 40 40
+168 128 64
+208 176 96
+96 80 128
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/whiscash/overworld.png b/graphics/pokemon/whiscash/overworld.png
new file mode 100644
index 000000000000..27d4ee088c1f
Binary files /dev/null and b/graphics/pokemon/whiscash/overworld.png differ
diff --git a/graphics/pokemon/whiscash/overworld_normal.pal b/graphics/pokemon/whiscash/overworld_normal.pal
new file mode 100644
index 000000000000..f714c83272a1
--- /dev/null
+++ b/graphics/pokemon/whiscash/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+8 64 128
+48 64 136
+96 160 216
+96 80 32
+0 0 0
+32 96 160
+64 128 184
+144 120 56
+72 96 160
+104 128 192
+176 160 72
+24 32 104
+208 192 96
+232 232 248
+176 176 192
diff --git a/graphics/pokemon/whiscash/overworld_shiny.pal b/graphics/pokemon/whiscash/overworld_shiny.pal
new file mode 100644
index 000000000000..38240b5f2c5e
--- /dev/null
+++ b/graphics/pokemon/whiscash/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+8 64 128
+40 48 64
+96 160 216
+96 56 16
+0 0 0
+32 96 160
+64 128 184
+144 80 56
+48 64 96
+80 104 160
+208 96 48
+32 32 40
+248 144 96
+232 232 248
+176 176 192
diff --git a/graphics/pokemon/whismur/overworld.png b/graphics/pokemon/whismur/overworld.png
new file mode 100644
index 000000000000..d484493fd2b2
Binary files /dev/null and b/graphics/pokemon/whismur/overworld.png differ
diff --git a/graphics/pokemon/whismur/overworld_normal.pal b/graphics/pokemon/whismur/overworld_normal.pal
new file mode 100644
index 000000000000..c09aa2d027f2
--- /dev/null
+++ b/graphics/pokemon/whismur/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 40 72
+80 56 8
+0 0 0
+232 160 200
+160 88 128
+208 120 168
+192 168 48
+152 136 40
+224 208 72
+64 72 88
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/whismur/overworld_shiny.pal b/graphics/pokemon/whismur/overworld_shiny.pal
new file mode 100644
index 000000000000..79be5822f1f2
--- /dev/null
+++ b/graphics/pokemon/whismur/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+96 40 72
+32 104 88
+0 0 0
+232 160 200
+160 88 128
+208 120 168
+96 192 120
+72 176 104
+128 208 136
+64 72 88
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/wigglytuff/overworld.png b/graphics/pokemon/wigglytuff/overworld.png
new file mode 100644
index 000000000000..c89239412b1b
Binary files /dev/null and b/graphics/pokemon/wigglytuff/overworld.png differ
diff --git a/graphics/pokemon/wigglytuff/overworld_normal.pal b/graphics/pokemon/wigglytuff/overworld_normal.pal
new file mode 100644
index 000000000000..a04a0b9f2ebe
--- /dev/null
+++ b/graphics/pokemon/wigglytuff/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+136 56 80
+232 232 248
+0 0 0
+192 192 192
+80 80 80
+240 152 168
+184 104 128
+56 96 200
+112 184 248
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/wigglytuff/overworld_shiny.pal b/graphics/pokemon/wigglytuff/overworld_shiny.pal
new file mode 100644
index 000000000000..6a51c7dcd6df
--- /dev/null
+++ b/graphics/pokemon/wigglytuff/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+136 56 80
+232 232 248
+0 0 0
+192 192 192
+80 80 80
+248 200 216
+208 136 160
+8 152 80
+136 232 144
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/wimpod/overworld.png b/graphics/pokemon/wimpod/overworld.png
new file mode 100644
index 000000000000..2febc3dd146a
Binary files /dev/null and b/graphics/pokemon/wimpod/overworld.png differ
diff --git a/graphics/pokemon/wimpod/overworld_normal.pal b/graphics/pokemon/wimpod/overworld_normal.pal
new file mode 100644
index 000000000000..800eb3f2a8d2
--- /dev/null
+++ b/graphics/pokemon/wimpod/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+247 247 247
+237 230 80
+190 211 207
+138 159 158
+92 120 119
+166 94 151
+113 62 112
+51 66 66
+101 55 100
+72 39 71
+16 16 16
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/wimpod/overworld_shiny.pal b/graphics/pokemon/wimpod/overworld_shiny.pal
new file mode 100644
index 000000000000..161794f58cd5
--- /dev/null
+++ b/graphics/pokemon/wimpod/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+247 247 247
+237 230 80
+224 232 232
+168 184 176
+128 144 144
+248 72 40
+176 32 16
+51 66 66
+101 55 100
+72 39 71
+16 16 16
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/wingull/overworld.png b/graphics/pokemon/wingull/overworld.png
new file mode 100644
index 000000000000..6aaed2667ad4
Binary files /dev/null and b/graphics/pokemon/wingull/overworld.png differ
diff --git a/graphics/pokemon/wingull/overworld_normal.pal b/graphics/pokemon/wingull/overworld_normal.pal
new file mode 100644
index 000000000000..88ea5da4969c
--- /dev/null
+++ b/graphics/pokemon/wingull/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 80 88
+64 104 144
+136 136 152
+48 72 112
+80 144 184
+0 0 0
+232 232 248
+160 200 224
+176 184 200
+104 160 216
+168 144 40
+224 208 72
+104 80 16
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/wingull/overworld_shiny.pal b/graphics/pokemon/wingull/overworld_shiny.pal
new file mode 100644
index 000000000000..19fdc5e02dc1
--- /dev/null
+++ b/graphics/pokemon/wingull/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 80 88
+64 104 16
+136 136 152
+40 64 8
+112 168 32
+0 0 0
+232 232 248
+200 224 120
+176 184 200
+144 200 72
+168 144 40
+224 208 72
+104 80 16
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/wishiwashi/overworld.png b/graphics/pokemon/wishiwashi/overworld.png
new file mode 100644
index 000000000000..5a47bda39599
Binary files /dev/null and b/graphics/pokemon/wishiwashi/overworld.png differ
diff --git a/graphics/pokemon/wishiwashi/overworld_normal.pal b/graphics/pokemon/wishiwashi/overworld_normal.pal
new file mode 100644
index 000000000000..4197bbc38f59
--- /dev/null
+++ b/graphics/pokemon/wishiwashi/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+241 241 242
+239 240 241
+211 214 216
+141 207 228
+133 166 182
+89 151 213
+148 123 205
+83 133 181
+64 86 141
+81 83 85
+52 58 64
+23 70 80
+16 49 56
+16 16 16
+0 0 0
diff --git a/graphics/pokemon/wishiwashi/overworld_shiny.pal b/graphics/pokemon/wishiwashi/overworld_shiny.pal
new file mode 100644
index 000000000000..ca70dee150e0
--- /dev/null
+++ b/graphics/pokemon/wishiwashi/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+240 240 192
+239 240 241
+211 214 216
+141 207 228
+133 166 182
+89 151 213
+148 123 205
+83 133 181
+216 136 0
+81 83 85
+52 58 64
+136 120 104
+16 49 56
+16 16 16
+0 0 0
diff --git a/graphics/pokemon/wobbuffet/overworld.png b/graphics/pokemon/wobbuffet/overworld.png
new file mode 100644
index 000000000000..04b136113566
Binary files /dev/null and b/graphics/pokemon/wobbuffet/overworld.png differ
diff --git a/graphics/pokemon/wobbuffet/overworld_normal.pal b/graphics/pokemon/wobbuffet/overworld_normal.pal
new file mode 100644
index 000000000000..208392f976f7
--- /dev/null
+++ b/graphics/pokemon/wobbuffet/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+24 56 112
+112 200 240
+56 160 192
+56 128 160
+0 0 0
+32 48 64
+56 80 112
+168 184 208
+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/wobbuffet/overworld_shiny.pal b/graphics/pokemon/wobbuffet/overworld_shiny.pal
new file mode 100644
index 000000000000..126ef8e8c9e0
--- /dev/null
+++ b/graphics/pokemon/wobbuffet/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+80 24 80
+216 160 240
+192 120 216
+152 104 152
+0 0 0
+32 48 64
+56 80 112
+168 184 208
+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/woobat/overworld.png b/graphics/pokemon/woobat/overworld.png
new file mode 100644
index 000000000000..2035262ed4c3
Binary files /dev/null and b/graphics/pokemon/woobat/overworld.png differ
diff --git a/graphics/pokemon/woobat/overworld_normal.pal b/graphics/pokemon/woobat/overworld_normal.pal
new file mode 100644
index 000000000000..83841034413e
--- /dev/null
+++ b/graphics/pokemon/woobat/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 56 64
+168 216 240
+0 0 0
+112 168 192
+64 72 88
+29 29 29
+192 104 120
+136 72 80
+240 168 176
+72 104 120
+252 188 219
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/woobat/overworld_shiny.pal b/graphics/pokemon/woobat/overworld_shiny.pal
new file mode 100644
index 000000000000..9f71bce45fd3
--- /dev/null
+++ b/graphics/pokemon/woobat/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 56 64
+192 232 160
+0 0 0
+120 184 56
+64 72 88
+29 29 29
+192 104 120
+136 72 80
+240 168 176
+72 104 120
+252 188 219
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/wooloo/overworld.png b/graphics/pokemon/wooloo/overworld.png
new file mode 100644
index 000000000000..3dbcd7fd0fdc
Binary files /dev/null and b/graphics/pokemon/wooloo/overworld.png differ
diff --git a/graphics/pokemon/wooloo/overworld_normal.pal b/graphics/pokemon/wooloo/overworld_normal.pal
new file mode 100644
index 000000000000..8e782102b475
--- /dev/null
+++ b/graphics/pokemon/wooloo/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 252 36
+0 0 0
+40 28 24
+52 48 48
+72 56 48
+84 64 56
+108 108 108
+236 236 236
+28 20 20
+148 148 148
+180 180 180
+228 152 152
+0 0 0
+196 196 196
+236 236 236
+252 252 252
diff --git a/graphics/pokemon/wooloo/overworld_shiny.pal b/graphics/pokemon/wooloo/overworld_shiny.pal
new file mode 100644
index 000000000000..52f3c558accd
--- /dev/null
+++ b/graphics/pokemon/wooloo/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+74 74 74
+49 49 49
+255 255 255
+82 65 57
+0 0 0
+255 255 255
+74 74 74
+148 148 148
+172 172 172
+230 156 156
+0 0 0
+24 24 24
+49 41 41
+90 74 74
diff --git a/graphics/pokemon/wooper/overworld.png b/graphics/pokemon/wooper/overworld.png
new file mode 100644
index 000000000000..e41562eb17e9
Binary files /dev/null and b/graphics/pokemon/wooper/overworld.png differ
diff --git a/graphics/pokemon/wooper/overworld_normal.pal b/graphics/pokemon/wooper/overworld_normal.pal
new file mode 100644
index 000000000000..bf2ff38e1e07
--- /dev/null
+++ b/graphics/pokemon/wooper/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+144 200 248
+112 176 240
+32 64 120
+96 40 96
+232 232 248
+72 144 200
+176 112 208
+56 112 160
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/wooper/overworld_shiny.pal b/graphics/pokemon/wooper/overworld_shiny.pal
new file mode 100644
index 000000000000..3818d41187e0
--- /dev/null
+++ b/graphics/pokemon/wooper/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+248 216 224
+248 192 208
+104 48 96
+160 64 64
+232 232 248
+216 152 176
+248 120 136
+176 104 152
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/wormadam/overworld.png b/graphics/pokemon/wormadam/overworld.png
new file mode 100644
index 000000000000..68d418865d76
Binary files /dev/null and b/graphics/pokemon/wormadam/overworld.png differ
diff --git a/graphics/pokemon/wormadam/overworld_normal.pal b/graphics/pokemon/wormadam/overworld_normal.pal
new file mode 100644
index 000000000000..0a22762e6799
--- /dev/null
+++ b/graphics/pokemon/wormadam/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 48 48
+96 96 96
+72 72 72
+32 64 32
+0 0 0
+40 168 48
+40 120 72
+232 232 248
+80 168 24
+64 120 24
+136 208 56
+184 200 152
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/wormadam/overworld_shiny.pal b/graphics/pokemon/wormadam/overworld_shiny.pal
new file mode 100644
index 000000000000..61118908ca8d
--- /dev/null
+++ b/graphics/pokemon/wormadam/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 48 48
+96 128 152
+72 96 104
+32 64 32
+0 0 0
+40 168 48
+40 120 72
+232 232 248
+80 168 24
+64 120 24
+136 208 56
+184 200 152
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/wormadam/sandy_cloak/overworld.png b/graphics/pokemon/wormadam/sandy_cloak/overworld.png
new file mode 100644
index 000000000000..ed34c20e726c
Binary files /dev/null and b/graphics/pokemon/wormadam/sandy_cloak/overworld.png differ
diff --git a/graphics/pokemon/wormadam/sandy_cloak/overworld_normal.pal b/graphics/pokemon/wormadam/sandy_cloak/overworld_normal.pal
new file mode 100644
index 000000000000..010a4f490ee0
--- /dev/null
+++ b/graphics/pokemon/wormadam/sandy_cloak/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 48 48
+96 96 96
+72 72 72
+0 0 0
+56 32 16
+144 104 40
+80 64 48
+192 144 64
+200 192 136
+232 232 248
+152 144 96
+232 216 136
+192 56 40
+200 112 96
+0 0 0
diff --git a/graphics/pokemon/wormadam/sandy_cloak/overworld_shiny.pal b/graphics/pokemon/wormadam/sandy_cloak/overworld_shiny.pal
new file mode 100644
index 000000000000..80ed0f7d9a87
--- /dev/null
+++ b/graphics/pokemon/wormadam/sandy_cloak/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 48 48
+96 128 152
+72 96 104
+0 0 0
+56 32 16
+144 104 40
+80 64 48
+192 144 64
+200 192 136
+232 232 248
+152 144 96
+232 216 136
+192 56 40
+200 112 96
+0 0 0
diff --git a/graphics/pokemon/wormadam/trash_cloak/overworld.png b/graphics/pokemon/wormadam/trash_cloak/overworld.png
new file mode 100644
index 000000000000..e380c1c549d7
Binary files /dev/null and b/graphics/pokemon/wormadam/trash_cloak/overworld.png differ
diff --git a/graphics/pokemon/wormadam/trash_cloak/overworld_normal.pal b/graphics/pokemon/wormadam/trash_cloak/overworld_normal.pal
new file mode 100644
index 000000000000..93c0000a827e
--- /dev/null
+++ b/graphics/pokemon/wormadam/trash_cloak/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 48 48
+96 96 96
+72 72 72
+96 48 64
+0 0 0
+216 56 136
+152 32 88
+160 96 128
+216 120 152
+232 232 248
+248 168 168
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/wormadam/trash_cloak/overworld_shiny.pal b/graphics/pokemon/wormadam/trash_cloak/overworld_shiny.pal
new file mode 100644
index 000000000000..8e4880455f08
--- /dev/null
+++ b/graphics/pokemon/wormadam/trash_cloak/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+48 48 48
+96 128 152
+72 96 104
+96 48 64
+0 0 0
+216 56 136
+152 32 88
+160 96 128
+216 120 152
+232 232 248
+248 168 168
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/wurmple/overworld.png b/graphics/pokemon/wurmple/overworld.png
new file mode 100644
index 000000000000..6879324184de
Binary files /dev/null and b/graphics/pokemon/wurmple/overworld.png differ
diff --git a/graphics/pokemon/wurmple/overworld_normal.pal b/graphics/pokemon/wurmple/overworld_normal.pal
new file mode 100644
index 000000000000..bebe46894084
--- /dev/null
+++ b/graphics/pokemon/wurmple/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+240 104 104
+128 32 56
+120 96 24
+240 216 104
+184 48 72
+176 152 56
+80 80 80
+176 144 128
+112 88 80
+248 208 184
+168 168 176
+136 136 144
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/wurmple/overworld_shiny.pal b/graphics/pokemon/wurmple/overworld_shiny.pal
new file mode 100644
index 000000000000..47db427639e4
--- /dev/null
+++ b/graphics/pokemon/wurmple/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+168 136 216
+72 56 88
+120 96 24
+240 216 104
+120 96 152
+176 152 56
+80 80 80
+176 144 128
+112 88 80
+248 208 184
+168 168 176
+136 136 144
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/wynaut/overworld.png b/graphics/pokemon/wynaut/overworld.png
new file mode 100644
index 000000000000..6d5aba3d3b41
Binary files /dev/null and b/graphics/pokemon/wynaut/overworld.png differ
diff --git a/graphics/pokemon/wynaut/overworld_normal.pal b/graphics/pokemon/wynaut/overworld_normal.pal
new file mode 100644
index 000000000000..471fe47f929c
--- /dev/null
+++ b/graphics/pokemon/wynaut/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+136 208 224
+104 176 192
+24 64 80
+48 104 120
+80 136 152
+40 40 48
+32 80 96
+192 56 56
+112 32 32
+64 64 80
+232 232 248
+96 96 120
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/wynaut/overworld_shiny.pal b/graphics/pokemon/wynaut/overworld_shiny.pal
new file mode 100644
index 000000000000..d79dfe5fdfde
--- /dev/null
+++ b/graphics/pokemon/wynaut/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+240 176 224
+208 144 200
+72 16 80
+136 80 136
+176 112 168
+40 40 48
+104 48 104
+192 56 56
+112 32 32
+64 64 80
+232 232 248
+96 96 120
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/wyrdeer/overworld.png b/graphics/pokemon/wyrdeer/overworld.png
new file mode 100644
index 000000000000..bb6f602c6f08
Binary files /dev/null and b/graphics/pokemon/wyrdeer/overworld.png differ
diff --git a/graphics/pokemon/wyrdeer/overworld_normal.pal b/graphics/pokemon/wyrdeer/overworld_normal.pal
new file mode 100644
index 000000000000..cce7305c9ac3
--- /dev/null
+++ b/graphics/pokemon/wyrdeer/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+32 24 24
+238 213 148
+164 139 115
+74 65 65
+0 0 0
+164 156 172
+65 49 74
+197 189 197
+131 131 131
+172 172 189
+246 246 255
+213 213 222
+65 16 8
+180 74 8
+98 90 106
diff --git a/graphics/pokemon/wyrdeer/overworld_shiny.pal b/graphics/pokemon/wyrdeer/overworld_shiny.pal
new file mode 100644
index 000000000000..39de1ba1ab17
--- /dev/null
+++ b/graphics/pokemon/wyrdeer/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+49 41 0
+238 197 131
+172 139 90
+90 82 49
+0 0 0
+180 180 106
+65 57 8
+205 205 139
+123 139 106
+164 189 148
+230 238 213
+205 222 189
+49 41 0
+148 90 90
+90 82 49
diff --git a/graphics/pokemon/xatu/overworld.png b/graphics/pokemon/xatu/overworld.png
new file mode 100644
index 000000000000..70b4c85391e8
Binary files /dev/null and b/graphics/pokemon/xatu/overworld.png differ
diff --git a/graphics/pokemon/xatu/overworld_normal.pal b/graphics/pokemon/xatu/overworld_normal.pal
new file mode 100644
index 000000000000..e163237491fa
--- /dev/null
+++ b/graphics/pokemon/xatu/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+56 80 32
+128 192 112
+0 0 0
+96 144 56
+232 232 248
+120 16 32
+96 80 0
+240 208 96
+184 200 224
+184 152 48
+176 40 56
+48 48 48
+216 72 88
+64 80 96
+112 128 152
diff --git a/graphics/pokemon/xatu/overworld_shiny.pal b/graphics/pokemon/xatu/overworld_shiny.pal
new file mode 100644
index 000000000000..060166738514
--- /dev/null
+++ b/graphics/pokemon/xatu/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+56 80 32
+160 200 112
+0 0 0
+136 160 48
+232 232 248
+120 64 16
+96 80 0
+240 208 96
+184 200 224
+184 152 48
+176 88 56
+48 48 48
+216 120 88
+64 80 96
+112 128 152
diff --git a/graphics/pokemon/xerneas/active/overworld.png b/graphics/pokemon/xerneas/active/overworld.png
new file mode 100644
index 000000000000..c5bf3867ee95
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 000000000000..cfa83f54653c
--- /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 000000000000..cfa83f54653c
--- /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
new file mode 100644
index 000000000000..ce548cd1ac85
Binary files /dev/null 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 000000000000..9d40b9ff59f4
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
new file mode 100644
index 000000000000..6ba56fe6c6b9
--- /dev/null
+++ b/graphics/pokemon/xerneas/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
+185 236 253
diff --git a/graphics/pokemon/xerneas/overworld_shiny.pal b/graphics/pokemon/xerneas/overworld_shiny.pal
new file mode 100644
index 000000000000..6ba56fe6c6b9
--- /dev/null
+++ b/graphics/pokemon/xerneas/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
+185 236 253
diff --git a/graphics/pokemon/xurkitree/overworld.png b/graphics/pokemon/xurkitree/overworld.png
new file mode 100644
index 000000000000..801ec0194155
Binary files /dev/null and b/graphics/pokemon/xurkitree/overworld.png differ
diff --git a/graphics/pokemon/xurkitree/overworld_normal.pal b/graphics/pokemon/xurkitree/overworld_normal.pal
new file mode 100644
index 000000000000..7cf96c13611f
--- /dev/null
+++ b/graphics/pokemon/xurkitree/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+241 251 241
+193 225 255
+252 180 0
+230 141 0
+171 104 0
+117 149 167
+102 117 125
+74 90 100
+58 74 83
+100 55 0
+43 54 57
+43 53 59
+30 38 43
+29 34 38
+0 0 0
diff --git a/graphics/pokemon/xurkitree/overworld_shiny.pal b/graphics/pokemon/xurkitree/overworld_shiny.pal
new file mode 100644
index 000000000000..f8c3ae934d03
--- /dev/null
+++ b/graphics/pokemon/xurkitree/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+241 251 241
+193 225 255
+252 180 0
+230 141 0
+171 104 0
+117 149 167
+40 136 184
+8 48 72
+58 74 83
+100 55 0
+24 88 128
+43 53 59
+30 38 43
+8 64 96
+0 0 0
diff --git a/graphics/pokemon/yamask/galarian/back.png b/graphics/pokemon/yamask/galarian/back.png
index 06f46eae0b55..ddc858a8d21d 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
new file mode 100644
index 000000000000..54276f9a0410
Binary files /dev/null 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
new file mode 100644
index 000000000000..af4005de75b0
--- /dev/null
+++ b/graphics/pokemon/yamask/galarian/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+140 78 78
+0 0 0
+24 24 24
+56 56 56
+159 83 188
+98 48 117
+77 71 72
+128 128 128
+235 93 91
+194 184 185
+136 126 127
+179 56 54
+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
new file mode 100644
index 000000000000..7cc24b4ab811
--- /dev/null
+++ b/graphics/pokemon/yamask/galarian/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+140 78 78
+0 0 0
+40 40 72
+72 72 128
+24 216 152
+24 128 88
+77 71 72
+128 128 128
+209 105 192
+194 184 185
+136 126 127
+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 7ab1ad8cb25e..276ff7ab1432 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/yamask/overworld.png b/graphics/pokemon/yamask/overworld.png
new file mode 100644
index 000000000000..68993cfca101
Binary files /dev/null and b/graphics/pokemon/yamask/overworld.png differ
diff --git a/graphics/pokemon/yamask/overworld_normal.pal b/graphics/pokemon/yamask/overworld_normal.pal
new file mode 100644
index 000000000000..2b661e533eb3
--- /dev/null
+++ b/graphics/pokemon/yamask/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+11 11 11
+71 71 71
+44 44 44
+255 0 0
+0 0 0
+40 40 40
+129 79 25
+172 154 220
+245 164 33
+199 121 11
+255 218 112
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/yamask/overworld_shiny.pal b/graphics/pokemon/yamask/overworld_shiny.pal
new file mode 100644
index 000000000000..65c3ee00ccff
--- /dev/null
+++ b/graphics/pokemon/yamask/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+11 11 11
+72 72 128
+40 40 72
+240 216 40
+0 0 0
+40 40 72
+96 96 96
+152 208 160
+192 192 192
+136 136 136
+208 208 208
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/yamper/overworld.png b/graphics/pokemon/yamper/overworld.png
new file mode 100644
index 000000000000..2f6432b6de8e
Binary files /dev/null and b/graphics/pokemon/yamper/overworld.png differ
diff --git a/graphics/pokemon/yamper/overworld_normal.pal b/graphics/pokemon/yamper/overworld_normal.pal
new file mode 100644
index 000000000000..5216291b749f
--- /dev/null
+++ b/graphics/pokemon/yamper/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 12 252
+132 120 12
+240 228 100
+104 76 40
+216 200 16
+204 168 120
+0 0 0
+188 140 76
+252 252 252
+68 52 28
+152 208 104
+76 116 36
+116 116 116
+220 220 220
+152 208 104
+0 0 0
diff --git a/graphics/pokemon/yamper/overworld_shiny.pal b/graphics/pokemon/yamper/overworld_shiny.pal
new file mode 100644
index 000000000000..c52e2bbddf1a
--- /dev/null
+++ b/graphics/pokemon/yamper/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 12 252
+131 123 8
+246 230 98
+139 115 123
+222 205 16
+255 213 222
+0 0 0
+230 189 197
+255 255 255
+65 49 24
+156 213 106
+74 115 32
+115 115 115
+222 222 222
+156 213 106
+0 0 0
diff --git a/graphics/pokemon/yanma/overworld.png b/graphics/pokemon/yanma/overworld.png
new file mode 100644
index 000000000000..4f9e45ea9579
Binary files /dev/null and b/graphics/pokemon/yanma/overworld.png differ
diff --git a/graphics/pokemon/yanma/overworld_normal.pal b/graphics/pokemon/yanma/overworld_normal.pal
new file mode 100644
index 000000000000..576f73c2f7bc
--- /dev/null
+++ b/graphics/pokemon/yanma/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+56 72 72
+0 0 0
+80 96 136
+184 200 224
+96 24 24
+240 104 80
+184 64 16
+232 232 248
+144 48 8
+216 72 48
+40 104 8
+232 120 48
+160 232 128
+112 192 80
+0 0 0
diff --git a/graphics/pokemon/yanma/overworld_shiny.pal b/graphics/pokemon/yanma/overworld_shiny.pal
new file mode 100644
index 000000000000..29807c87b350
--- /dev/null
+++ b/graphics/pokemon/yanma/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+248 160 176
+56 72 72
+0 0 0
+80 96 136
+184 200 224
+24 64 112
+120 200 248
+72 128 192
+232 232 248
+48 96 152
+96 160 216
+40 104 8
+120 216 248
+160 232 128
+112 192 80
+0 0 0
diff --git a/graphics/pokemon/yanmega/overworld.png b/graphics/pokemon/yanmega/overworld.png
new file mode 100644
index 000000000000..8ec817a0ea0e
Binary files /dev/null and b/graphics/pokemon/yanmega/overworld.png differ
diff --git a/graphics/pokemon/yanmega/overworld_normal.pal b/graphics/pokemon/yanmega/overworld_normal.pal
new file mode 100644
index 000000000000..32551f207d9d
--- /dev/null
+++ b/graphics/pokemon/yanmega/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+160 16 8
+64 64 64
+0 0 0
+248 72 48
+208 56 48
+32 48 24
+48 96 32
+56 128 24
+88 8 16
+72 96 112
+232 232 248
+184 184 184
+80 168 48
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/yanmega/overworld_shiny.pal b/graphics/pokemon/yanmega/overworld_shiny.pal
new file mode 100644
index 000000000000..d25d4b4759fa
--- /dev/null
+++ b/graphics/pokemon/yanmega/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+160 16 88
+64 64 64
+0 0 0
+248 72 120
+208 56 120
+32 48 24
+48 96 96
+56 128 128
+88 8 96
+72 96 112
+232 232 248
+184 184 184
+80 168 176
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/yungoos/overworld.png b/graphics/pokemon/yungoos/overworld.png
new file mode 100644
index 000000000000..7c8f82a2047b
Binary files /dev/null and b/graphics/pokemon/yungoos/overworld.png differ
diff --git a/graphics/pokemon/yungoos/overworld_normal.pal b/graphics/pokemon/yungoos/overworld_normal.pal
new file mode 100644
index 000000000000..a37df815b998
--- /dev/null
+++ b/graphics/pokemon/yungoos/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+232 232 248
+242 193 76
+216 149 54
+151 170 177
+184 126 34
+190 122 86
+227 101 142
+184 115 34
+128 93 38
+206 60 94
+153 84 75
+77 46 42
+16 16 16
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/yungoos/overworld_shiny.pal b/graphics/pokemon/yungoos/overworld_shiny.pal
new file mode 100644
index 000000000000..d2ece18b2796
--- /dev/null
+++ b/graphics/pokemon/yungoos/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+232 232 248
+224 160 224
+184 104 192
+151 170 177
+184 126 34
+192 128 120
+227 101 142
+136 64 128
+128 93 38
+206 60 94
+176 80 72
+77 46 42
+16 16 16
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/yveltal/overworld.png b/graphics/pokemon/yveltal/overworld.png
new file mode 100644
index 000000000000..0e6b2a19caf8
Binary files /dev/null and b/graphics/pokemon/yveltal/overworld.png differ
diff --git a/graphics/pokemon/yveltal/overworld_normal.pal b/graphics/pokemon/yveltal/overworld_normal.pal
new file mode 100644
index 000000000000..3b9046a01f10
--- /dev/null
+++ b/graphics/pokemon/yveltal/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+44 34 34
+96 78 80
+44 34 34
+76 60 61
+150 132 134
+191 173 175
+96 78 80
+155 37 42
+212 58 65
+94 192 192
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/yveltal/overworld_shiny.pal b/graphics/pokemon/yveltal/overworld_shiny.pal
new file mode 100644
index 000000000000..d766f39ebc2c
--- /dev/null
+++ b/graphics/pokemon/yveltal/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+111 111 111
+239 239 239
+46 41 56
+202 201 201
+83 77 92
+117 108 129
+68 62 80
+146 30 58
+196 40 78
+94 192 192
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/zacian/crowned_sword/overworld.png b/graphics/pokemon/zacian/crowned_sword/overworld.png
new file mode 100644
index 000000000000..887fa22ebd2b
Binary files /dev/null and b/graphics/pokemon/zacian/crowned_sword/overworld.png differ
diff --git a/graphics/pokemon/zacian/crowned_sword/overworld_normal.pal b/graphics/pokemon/zacian/crowned_sword/overworld_normal.pal
new file mode 100644
index 000000000000..906648fada31
--- /dev/null
+++ b/graphics/pokemon/zacian/crowned_sword/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+131 129 131
+57 109 164
+197 145 65
+98 93 24
+16 36 41
+213 210 98
+213 76 49
+164 56 32
+246 226 189
+0 0 0
+74 68 16
+74 133 197
+230 226 230
+90 85 24
+32 68 106
+222 109 90
diff --git a/graphics/pokemon/zacian/crowned_sword/overworld_shiny.pal b/graphics/pokemon/zacian/crowned_sword/overworld_shiny.pal
new file mode 100644
index 000000000000..ea9e618a26ca
--- /dev/null
+++ b/graphics/pokemon/zacian/crowned_sword/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+131 129 131
+40 136 160
+197 145 65
+48 88 176
+16 36 41
+224 208 152
+48 88 176
+32 64 136
+248 224 192
+0 0 0
+74 68 16
+102 193 209
+230 226 230
+120 78 20
+40 80 104
+64 112 240
diff --git a/graphics/pokemon/zacian/overworld.png b/graphics/pokemon/zacian/overworld.png
new file mode 100644
index 000000000000..ed0fb3e1cf7e
Binary files /dev/null and b/graphics/pokemon/zacian/overworld.png differ
diff --git a/graphics/pokemon/zacian/overworld_normal.pal b/graphics/pokemon/zacian/overworld_normal.pal
new file mode 100644
index 000000000000..e101fb2511ee
--- /dev/null
+++ b/graphics/pokemon/zacian/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 252 72
+12 24 36
+32 32 32
+160 56 32
+208 76 48
+216 108 88
+0 0 0
+208 196 48
+192 144 64
+248 232 208
+56 108 160
+72 132 192
+236 204 136
+244 216 164
+32 32 32
+248 232 208
diff --git a/graphics/pokemon/zacian/overworld_shiny.pal b/graphics/pokemon/zacian/overworld_shiny.pal
new file mode 100644
index 000000000000..23c75881b25e
--- /dev/null
+++ b/graphics/pokemon/zacian/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 32 41
+0 24 32
+0 24 32
+0 90 115
+0 131 172
+0 0 0
+213 205 49
+197 148 65
+230 230 230
+57 123 139
+106 197 222
+238 205 139
+246 222 164
+0 24 32
+255 238 213
diff --git a/graphics/pokemon/zamazenta/crowned_shield/overworld.png b/graphics/pokemon/zamazenta/crowned_shield/overworld.png
new file mode 100644
index 000000000000..930bfbcd5fe5
Binary files /dev/null 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
new file mode 100644
index 000000000000..0906c9bf9416
--- /dev/null
+++ b/graphics/pokemon/zamazenta/crowned_shield/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+131 129 131
+41 64 148
+16 28 57
+164 153 41
+148 28 32
+232 48 56
+205 44 57
+213 210 106
+74 72 16
+172 174 189
+24 44 98
+0 0 0
+32 48 115
+148 157 172
+213 214 222
+205 194 57
diff --git a/graphics/pokemon/zamazenta/crowned_shield/overworld_shiny.pal b/graphics/pokemon/zamazenta/crowned_shield/overworld_shiny.pal
new file mode 100644
index 000000000000..57e6bf2744d5
--- /dev/null
+++ b/graphics/pokemon/zamazenta/crowned_shield/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+131 129 131
+200 48 104
+16 28 57
+164 153 41
+168 48 144
+232 80 192
+232 80 192
+224 208 152
+107 67 47
+172 174 189
+200 48 104
+0 0 0
+160 40 64
+148 157 172
+213 214 222
+192 152 96
diff --git a/graphics/pokemon/zamazenta/overworld.png b/graphics/pokemon/zamazenta/overworld.png
new file mode 100644
index 000000000000..73ae7fbe8617
Binary files /dev/null and b/graphics/pokemon/zamazenta/overworld.png differ
diff --git a/graphics/pokemon/zamazenta/overworld_normal.pal b/graphics/pokemon/zamazenta/overworld_normal.pal
new file mode 100644
index 000000000000..dcb72ec73cea
--- /dev/null
+++ b/graphics/pokemon/zamazenta/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 252 252
+0 0 0
+88 12 20
+28 44 108
+20 32 76
+164 32 44
+204 44 56
+0 0 0
+32 32 32
+0 0 0
+216 208 32
+40 64 148
+208 208 208
+152 156 172
+236 204 136
+208 208 208
diff --git a/graphics/pokemon/zamazenta/overworld_shiny.pal b/graphics/pokemon/zamazenta/overworld_shiny.pal
new file mode 100644
index 000000000000..2587ed85acc6
--- /dev/null
+++ b/graphics/pokemon/zamazenta/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+57 16 41
+82 0 32
+32 0 8
+123 41 98
+180 74 139
+0 0 0
+32 0 8
+0 0 0
+222 213 32
+148 16 57
+230 230 230
+148 156 172
+238 205 139
+197 197 205
diff --git a/graphics/pokemon/zangoose/overworld.png b/graphics/pokemon/zangoose/overworld.png
new file mode 100644
index 000000000000..84fce3accb60
Binary files /dev/null and b/graphics/pokemon/zangoose/overworld.png differ
diff --git a/graphics/pokemon/zangoose/overworld_normal.pal b/graphics/pokemon/zangoose/overworld_normal.pal
new file mode 100644
index 000000000000..77e03fcc55a5
--- /dev/null
+++ b/graphics/pokemon/zangoose/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 48 64
+120 32 32
+72 80 96
+0 0 0
+232 232 248
+208 72 80
+112 120 136
+208 208 208
+160 48 56
+152 160 176
+224 112 128
+160 48 96
+240 112 184
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/zangoose/overworld_shiny.pal b/graphics/pokemon/zangoose/overworld_shiny.pal
new file mode 100644
index 000000000000..e7d5ad5f558f
--- /dev/null
+++ b/graphics/pokemon/zangoose/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 48 64
+72 120 144
+72 80 96
+0 0 0
+232 232 248
+96 168 184
+112 120 136
+208 208 208
+80 144 160
+152 160 176
+112 192 200
+160 48 56
+120 32 32
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/zapdos/galarian/overworld.png b/graphics/pokemon/zapdos/galarian/overworld.png
new file mode 100644
index 000000000000..47321a67f436
Binary files /dev/null and b/graphics/pokemon/zapdos/galarian/overworld.png differ
diff --git a/graphics/pokemon/zapdos/galarian/overworld_normal.pal b/graphics/pokemon/zapdos/galarian/overworld_normal.pal
new file mode 100644
index 000000000000..6dd0f253bdc3
--- /dev/null
+++ b/graphics/pokemon/zapdos/galarian/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+252 252 252
+40 16 0
+0 0 0
+220 104 28
+248 144 72
+144 64 12
+24 24 24
+56 56 56
+248 216 64
+248 216 64
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/zapdos/galarian/overworld_shiny.pal b/graphics/pokemon/zapdos/galarian/overworld_shiny.pal
new file mode 100644
index 000000000000..be66a806cfa9
--- /dev/null
+++ b/graphics/pokemon/zapdos/galarian/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+41 16 0
+0 0 0
+213 156 24
+238 213 57
+139 90 0
+16 16 16
+32 32 32
+255 255 255
+255 255 255
+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
new file mode 100644
index 000000000000..cac1899cdb48
Binary files /dev/null and b/graphics/pokemon/zapdos/overworld.png differ
diff --git a/graphics/pokemon/zapdos/overworld_normal.pal b/graphics/pokemon/zapdos/overworld_normal.pal
new file mode 100644
index 000000000000..33f5fe77565b
--- /dev/null
+++ b/graphics/pokemon/zapdos/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+56 40 24
+248 216 64
+248 208 0
+224 168 24
+88 80 64
+184 120 0
+64 64 64
+176 176 208
+232 232 248
+160 112 72
+224 144 72
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/zapdos/overworld_shiny.pal b/graphics/pokemon/zapdos/overworld_shiny.pal
new file mode 100644
index 000000000000..094c2a747450
--- /dev/null
+++ b/graphics/pokemon/zapdos/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+56 40 24
+248 200 96
+248 168 0
+216 136 16
+88 80 64
+160 96 0
+64 64 64
+176 176 208
+232 232 248
+160 112 72
+224 144 72
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/zarude/overworld.png b/graphics/pokemon/zarude/overworld.png
new file mode 100644
index 000000000000..2e7aa3c49c6f
Binary files /dev/null and b/graphics/pokemon/zarude/overworld.png differ
diff --git a/graphics/pokemon/zarude/overworld_normal.pal b/graphics/pokemon/zarude/overworld_normal.pal
new file mode 100644
index 000000000000..d8589e15c151
--- /dev/null
+++ b/graphics/pokemon/zarude/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+188 72 72
+0 0 0
+52 52 52
+60 64 60
+92 96 92
+44 60 40
+76 104 72
+108 148 88
+148 196 88
+172 172 172
+220 84 88
+136 144 148
+252 252 252
+172 172 172
+148 196 88
+136 148 144
diff --git a/graphics/pokemon/zarude/overworld_shiny.pal b/graphics/pokemon/zarude/overworld_shiny.pal
new file mode 100644
index 000000000000..882fbf12421f
--- /dev/null
+++ b/graphics/pokemon/zarude/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+188 72 72
+0 0 0
+49 49 49
+57 65 57
+90 98 90
+41 57 41
+74 106 74
+106 148 90
+148 197 90
+230 189 131
+222 82 90
+197 164 115
+255 255 255
+230 189 131
+148 197 90
+197 164 115
diff --git a/graphics/pokemon/zebstrika/overworld.png b/graphics/pokemon/zebstrika/overworld.png
new file mode 100644
index 000000000000..fbe6fa8f5664
Binary files /dev/null and b/graphics/pokemon/zebstrika/overworld.png differ
diff --git a/graphics/pokemon/zebstrika/overworld_normal.pal b/graphics/pokemon/zebstrika/overworld_normal.pal
new file mode 100644
index 000000000000..fa9c14b6c0e6
--- /dev/null
+++ b/graphics/pokemon/zebstrika/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+57 65 65
+57 65 65
+244 245 247
+204 204 204
+7 7 7
+24 32 32
+7 7 7
+164 164 164
+57 65 65
+112 112 112
+116 168 95
+7 7 7
+7 7 7
+7 7 7
+0 0 0
diff --git a/graphics/pokemon/zebstrika/overworld_shiny.pal b/graphics/pokemon/zebstrika/overworld_shiny.pal
new file mode 100644
index 000000000000..27178df2c18e
--- /dev/null
+++ b/graphics/pokemon/zebstrika/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+96 64 112
+56 40 64
+244 245 247
+204 204 204
+16 16 16
+30 38 38
+0 0 0
+164 164 164
+30 109 89
+116 116 116
+134 216 33
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/zekrom/overworld.png b/graphics/pokemon/zekrom/overworld.png
new file mode 100644
index 000000000000..1e509f1d7f24
Binary files /dev/null and b/graphics/pokemon/zekrom/overworld.png differ
diff --git a/graphics/pokemon/zekrom/overworld_normal.pal b/graphics/pokemon/zekrom/overworld_normal.pal
new file mode 100644
index 000000000000..fe20163c7dc7
--- /dev/null
+++ b/graphics/pokemon/zekrom/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+38 37 38
+18 32 11
+30 29 30
+99 99 99
+88 88 88
+62 62 66
+7 137 148
+52 52 56
+13 25 7
+131 40 41
+36 62 91
+204 39 86
+18 93 109
+32 151 194
+37 186 228
diff --git a/graphics/pokemon/zekrom/overworld_shiny.pal b/graphics/pokemon/zekrom/overworld_shiny.pal
new file mode 100644
index 000000000000..601b414e3056
--- /dev/null
+++ b/graphics/pokemon/zekrom/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+38 37 38
+18 32 11
+48 56 56
+56 112 128
+56 112 128
+56 88 96
+170 195 131
+56 88 96
+13 25 7
+78 78 80
+27 176 53
+78 78 80
+27 176 53
+170 195 131
+37 186 228
diff --git a/graphics/pokemon/zeraora/overworld.png b/graphics/pokemon/zeraora/overworld.png
new file mode 100644
index 000000000000..303d776e4321
Binary files /dev/null and b/graphics/pokemon/zeraora/overworld.png differ
diff --git a/graphics/pokemon/zeraora/overworld_normal.pal b/graphics/pokemon/zeraora/overworld_normal.pal
new file mode 100644
index 000000000000..b21c536126d7
--- /dev/null
+++ b/graphics/pokemon/zeraora/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+249 228 85
+218 169 54
+91 208 242
+47 151 198
+239 138 78
+104 108 110
+131 87 37
+26 94 124
+56 61 67
+28 31 34
+16 16 16
+15 15 16
+0 0 0
+32 144 216
+88 208 240
diff --git a/graphics/pokemon/zeraora/overworld_shiny.pal b/graphics/pokemon/zeraora/overworld_shiny.pal
new file mode 100644
index 000000000000..7e6fa612bb4b
--- /dev/null
+++ b/graphics/pokemon/zeraora/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+255 255 255
+248 248 248
+184 184 192
+248 216 32
+200 136 8
+216 0 0
+104 108 110
+88 88 96
+56 88 88
+56 61 67
+28 31 34
+16 16 16
+15 15 16
+0 0 0
+200 136 8
+248 216 32
diff --git a/graphics/pokemon/zigzagoon/galarian/overworld.png b/graphics/pokemon/zigzagoon/galarian/overworld.png
new file mode 100644
index 000000000000..d351cbdc90ed
Binary files /dev/null and b/graphics/pokemon/zigzagoon/galarian/overworld.png differ
diff --git a/graphics/pokemon/zigzagoon/galarian/overworld_normal.pal b/graphics/pokemon/zigzagoon/galarian/overworld_normal.pal
new file mode 100644
index 000000000000..6b74af8455e5
--- /dev/null
+++ b/graphics/pokemon/zigzagoon/galarian/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+52 87 191
+31 43 44
+36 36 36
+52 52 52
+96 101 106
+62 64 66
+163 164 163
+245 245 246
+0 0 0
+178 179 178
+113 119 125
+238 150 178
+217 74 127
+110 59 81
+64 72 80
+168 184 208
diff --git a/graphics/pokemon/zigzagoon/galarian/overworld_shiny.pal b/graphics/pokemon/zigzagoon/galarian/overworld_shiny.pal
new file mode 100644
index 000000000000..0277759a9e2a
--- /dev/null
+++ b/graphics/pokemon/zigzagoon/galarian/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+52 87 191
+31 43 44
+36 36 36
+82 9 36
+200 24 88
+144 8 48
+163 164 163
+245 245 246
+0 0 0
+178 179 178
+140 17 62
+152 248 240
+16 232 208
+46 79 75
+64 72 80
+168 184 208
diff --git a/graphics/pokemon/zigzagoon/overworld.png b/graphics/pokemon/zigzagoon/overworld.png
new file mode 100644
index 000000000000..a8b2449006db
Binary files /dev/null and b/graphics/pokemon/zigzagoon/overworld.png differ
diff --git a/graphics/pokemon/zigzagoon/overworld_normal.pal b/graphics/pokemon/zigzagoon/overworld_normal.pal
new file mode 100644
index 000000000000..def45b750917
--- /dev/null
+++ b/graphics/pokemon/zigzagoon/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 72 32
+216 208 152
+200 176 120
+72 48 24
+120 72 40
+176 128 88
+0 0 0
+152 136 88
+152 96 56
+40 32 24
+64 48 40
+232 232 248
+120 128 144
+168 184 208
+64 72 80
diff --git a/graphics/pokemon/zigzagoon/overworld_shiny.pal b/graphics/pokemon/zigzagoon/overworld_shiny.pal
new file mode 100644
index 000000000000..a73c33cd795f
--- /dev/null
+++ b/graphics/pokemon/zigzagoon/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+88 72 32
+216 208 152
+200 176 120
+80 40 8
+168 72 16
+216 120 56
+0 0 0
+152 136 88
+192 96 40
+40 32 24
+64 48 40
+232 232 248
+120 128 144
+168 184 208
+64 72 80
diff --git a/graphics/pokemon/zoroark/hisuian/overworld.png b/graphics/pokemon/zoroark/hisuian/overworld.png
new file mode 100644
index 000000000000..7c7b2ece4f8d
Binary files /dev/null and b/graphics/pokemon/zoroark/hisuian/overworld.png differ
diff --git a/graphics/pokemon/zoroark/hisuian/overworld_normal.pal b/graphics/pokemon/zoroark/hisuian/overworld_normal.pal
new file mode 100644
index 000000000000..2f1ce6dd4efc
--- /dev/null
+++ b/graphics/pokemon/zoroark/hisuian/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+131 32 32
+230 98 98
+238 131 131
+74 74 82
+180 57 57
+82 82 90
+246 180 180
+205 205 205
+172 172 172
+148 148 148
+255 255 255
+230 205 32
+238 238 255
+213 213 238
diff --git a/graphics/pokemon/zoroark/hisuian/overworld_shiny.pal b/graphics/pokemon/zoroark/hisuian/overworld_shiny.pal
new file mode 100644
index 000000000000..6790bfcc43ee
--- /dev/null
+++ b/graphics/pokemon/zoroark/hisuian/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+0 0 0
+57 16 82
+156 74 230
+189 123 238
+41 49 49
+123 65 197
+41 49 49
+222 172 246
+205 205 205
+115 115 115
+148 148 148
+255 255 255
+230 205 32
+238 238 255
+164 164 180
diff --git a/graphics/pokemon/zoroark/overworld.png b/graphics/pokemon/zoroark/overworld.png
new file mode 100644
index 000000000000..56d1cc381642
Binary files /dev/null and b/graphics/pokemon/zoroark/overworld.png differ
diff --git a/graphics/pokemon/zoroark/overworld_normal.pal b/graphics/pokemon/zoroark/overworld_normal.pal
new file mode 100644
index 000000000000..ee6eef09df38
--- /dev/null
+++ b/graphics/pokemon/zoroark/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+4 4 4
+55 58 68
+31 34 50
+112 33 55
+63 11 33
+120 40 64
+168 16 64
+72 16 40
+85 85 91
+164 11 55
+123 166 175
+41 111 114
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/zoroark/overworld_shiny.pal b/graphics/pokemon/zoroark/overworld_shiny.pal
new file mode 100644
index 000000000000..de3371e25361
--- /dev/null
+++ b/graphics/pokemon/zoroark/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 16 16
+4 4 4
+82 82 90
+31 34 50
+64 40 152
+41 42 64
+64 40 152
+112 48 192
+41 42 64
+120 120 128
+112 48 192
+124 182 191
+41 111 114
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/zorua/hisuian/overworld.png b/graphics/pokemon/zorua/hisuian/overworld.png
new file mode 100644
index 000000000000..1bc82dd88a3c
Binary files /dev/null and b/graphics/pokemon/zorua/hisuian/overworld.png differ
diff --git a/graphics/pokemon/zorua/hisuian/overworld_normal.pal b/graphics/pokemon/zorua/hisuian/overworld_normal.pal
new file mode 100644
index 000000000000..eeebf485ae83
--- /dev/null
+++ b/graphics/pokemon/zorua/hisuian/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+180 57 57
+0 0 0
+238 131 131
+32 32 49
+148 148 148
+82 82 90
+205 205 205
+255 255 255
+106 106 106
+131 32 32
+164 98 16
+230 98 98
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/zorua/hisuian/overworld_shiny.pal b/graphics/pokemon/zorua/hisuian/overworld_shiny.pal
new file mode 100644
index 000000000000..8dc5c397afbe
--- /dev/null
+++ b/graphics/pokemon/zorua/hisuian/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+49 115 230
+0 0 0
+148 222 230
+24 24 32
+115 115 115
+65 74 74
+156 156 164
+255 255 255
+74 74 74
+24 82 123
+222 189 0
+65 156 230
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/zorua/overworld.png b/graphics/pokemon/zorua/overworld.png
new file mode 100644
index 000000000000..1198b0526e6f
Binary files /dev/null and b/graphics/pokemon/zorua/overworld.png differ
diff --git a/graphics/pokemon/zorua/overworld_normal.pal b/graphics/pokemon/zorua/overworld_normal.pal
new file mode 100644
index 000000000000..55fb61c8600f
--- /dev/null
+++ b/graphics/pokemon/zorua/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+19 20 50
+151 49 76
+109 47 43
+0 0 0
+106 106 142
+81 81 128
+43 44 101
+43 44 101
+238 238 247
+81 81 128
+198 196 235
+16 70 96
+19 20 50
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/zorua/overworld_shiny.pal b/graphics/pokemon/zorua/overworld_shiny.pal
new file mode 100644
index 000000000000..a2c904905cda
--- /dev/null
+++ b/graphics/pokemon/zorua/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+32 32 48
+8 176 208
+0 112 192
+0 0 0
+96 72 72
+72 48 48
+49 32 32
+43 44 101
+238 238 247
+81 81 128
+198 196 235
+16 70 96
+19 20 50
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/zubat/overworld.png b/graphics/pokemon/zubat/overworld.png
new file mode 100644
index 000000000000..3b51b35c6ccd
Binary files /dev/null and b/graphics/pokemon/zubat/overworld.png differ
diff --git a/graphics/pokemon/zubat/overworld_normal.pal b/graphics/pokemon/zubat/overworld_normal.pal
new file mode 100644
index 000000000000..96f060973c8d
--- /dev/null
+++ b/graphics/pokemon/zubat/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+16 56 64
+64 112 120
+80 184 176
+0 0 0
+136 96 184
+184 184 192
+96 64 128
+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/zubat/overworld_shiny.pal b/graphics/pokemon/zubat/overworld_shiny.pal
new file mode 100644
index 000000000000..59cd81a4a9fa
--- /dev/null
+++ b/graphics/pokemon/zubat/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+40 56 24
+96 120 56
+160 184 88
+0 0 0
+216 144 184
+184 184 192
+184 112 136
+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/zweilous/overworld.png b/graphics/pokemon/zweilous/overworld.png
new file mode 100644
index 000000000000..d53b9b3538a6
Binary files /dev/null and b/graphics/pokemon/zweilous/overworld.png differ
diff --git a/graphics/pokemon/zweilous/overworld_normal.pal b/graphics/pokemon/zweilous/overworld_normal.pal
new file mode 100644
index 000000000000..3dc394b8ba3e
--- /dev/null
+++ b/graphics/pokemon/zweilous/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+33 25 33
+33 25 33
+55 47 55
+11 11 11
+71 71 71
+0 0 0
+47 87 155
+87 138 218
+18 40 95
+147 55 40
+71 71 71
+185 172 189
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/zweilous/overworld_shiny.pal b/graphics/pokemon/zweilous/overworld_shiny.pal
new file mode 100644
index 000000000000..a4a575882146
--- /dev/null
+++ b/graphics/pokemon/zweilous/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+152 208 160
+56 40 40
+33 25 33
+80 64 64
+11 11 11
+96 88 80
+0 0 0
+88 104 48
+112 152 72
+40 40 24
+147 55 40
+71 71 71
+185 172 189
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/zygarde/overworld.png b/graphics/pokemon/zygarde/overworld.png
new file mode 100644
index 000000000000..3df96aa87f24
Binary files /dev/null and b/graphics/pokemon/zygarde/overworld.png differ
diff --git a/graphics/pokemon/zygarde/overworld_normal.pal b/graphics/pokemon/zygarde/overworld_normal.pal
new file mode 100644
index 000000000000..19a4ee581e94
--- /dev/null
+++ b/graphics/pokemon/zygarde/overworld_normal.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+16 16 16
+60 67 57
+40 45 39
+147 188 62
+27 29 26
+82 129 59
+53 86 44
+142 150 126
+209 218 182
+21 52 10
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/pokemon/zygarde/overworld_shiny.pal b/graphics/pokemon/zygarde/overworld_shiny.pal
new file mode 100644
index 000000000000..93af7b25f0f7
--- /dev/null
+++ b/graphics/pokemon/zygarde/overworld_shiny.pal
@@ -0,0 +1,19 @@
+JASC-PAL
+0100
+16
+0 176 232
+16 16 16
+202 201 201
+164 163 163
+43 184 147
+27 29 26
+26 129 102
+10 78 59
+107 203 178
+136 229 205
+4 46 34
+0 0 0
+0 0 0
+0 0 0
+0 0 0
+0 0 0
diff --git a/graphics/types/none.png b/graphics/types/none.png
new file mode 100644
index 000000000000..a2ea01d556a3
Binary files /dev/null and b/graphics/types/none.png differ
diff --git a/graphics/types/stellar.png b/graphics/types/stellar.png
new file mode 100644
index 000000000000..ee18b997eae4
Binary files /dev/null and b/graphics/types/stellar.png differ
diff --git a/graphics/weather/fog.pal b/graphics/weather/fog.pal
index 6191b6692855..1f40dd4e74f5 100644
--- a/graphics/weather/fog.pal
+++ b/graphics/weather/fog.pal
@@ -10,7 +10,7 @@ JASC-PAL
213 213 213
222 222 222
164 164 164
-255 0 255
+0 0 0
255 0 255
255 0 255
180 180 180
diff --git a/graphics_file_rules.mk b/graphics_file_rules.mk
index 6a2728aff4a0..1b514b8ed3ed 100644
--- a/graphics_file_rules.mk
+++ b/graphics_file_rules.mk
@@ -22,7 +22,7 @@ STARTERGFXDIR := graphics/starter_choose
NAMINGGFXDIR := graphics/naming_screen
SPINDAGFXDIR := graphics/pokemon/spinda/spots
-types := normal fight flying poison ground rock bug ghost steel mystery fire water grass electric psychic ice dragon dark fairy
+types := none normal fight flying poison ground rock bug ghost steel mystery fire water grass electric psychic ice dragon dark fairy stellar
contest_types := cool beauty cute smart tough
### Tilesets ###
@@ -238,6 +238,15 @@ $(FONTGFXDIR)/narrow.latfont: $(FONTGFXDIR)/latin_narrow.png
$(FONTGFXDIR)/small_narrow.latfont: $(FONTGFXDIR)/latin_small_narrow.png
$(GFX) $< $@
+$(FONTGFXDIR)/narrower.latfont: $(FONTGFXDIR)/latin_narrower.png
+ $(GFX) $< $@
+
+$(FONTGFXDIR)/small_narrower.latfont: $(FONTGFXDIR)/latin_small_narrower.png
+ $(GFX) $< $@
+
+$(FONTGFXDIR)/short_narrow.latfont: $(FONTGFXDIR)/latin_short_narrow.png
+ $(GFX) $< $@
+
$(FONTGFXDIR)/small.hwjpnfont: $(FONTGFXDIR)/japanese_small.png
$(GFX) $< $@
diff --git a/include/battle.h b/include/battle.h
index 92da6ad05efb..0d54f2a614b7 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -15,8 +15,30 @@
#include "pokeball.h"
#include "battle_debug.h"
#include "battle_dynamax.h"
+#include "battle_terastal.h"
+#include "battle_gimmick.h"
#include "random.h" // for rng_value_t
+// Helper for accessing command arguments and advancing gBattlescriptCurrInstr.
+//
+// For example accuracycheck is defined as:
+//
+// .macro accuracycheck failInstr:req, move:req
+// .byte 0x1
+// .4byte \failInstr
+// .2byte \move
+// .endm
+//
+// Which corresponds to:
+//
+// CMD_ARGS(const u8 *failInstr, u16 move);
+//
+// The arguments can be accessed as cmd->failInstr and cmd->move.
+// gBattlescriptCurrInstr = cmd->nextInstr; advances to the next instruction.
+#define CMD_ARGS(...) const struct __attribute__((packed)) { u8 opcode; RECURSIVELY(R_FOR_EACH(APPEND_SEMICOLON, __VA_ARGS__)) const u8 nextInstr[0]; } *const cmd UNUSED = (const void *)gBattlescriptCurrInstr
+#define VARIOUS_ARGS(...) CMD_ARGS(u8 battler, u8 id, ##__VA_ARGS__)
+#define NATIVE_ARGS(...) CMD_ARGS(void (*func)(void), ##__VA_ARGS__)
+
// Used to exclude moves learned temporarily by Transform or Mimic
#define MOVE_IS_PERMANENT(battler, moveSlot) \
(!(gBattleMons[battler].status2 & STATUS2_TRANSFORMED) \
@@ -291,7 +313,8 @@ struct AI_SavedBattleMon
u16 ability;
u16 moves[MAX_MON_MOVES];
u16 heldItem;
- u16 species;
+ u16 species:15;
+ u16 saved:1;
u8 types[3];
};
@@ -322,6 +345,12 @@ struct SwitchinCandidate
bool8 hypotheticalStatus;
};
+struct SimulatedDamage
+{
+ s32 expected;
+ s32 minimum;
+};
+
// Ai Data used when deciding which move to use, computed only once before each turn's start.
struct AiLogicData
{
@@ -333,7 +362,7 @@ struct AiLogicData
u8 hpPercents[MAX_BATTLERS_COUNT];
u16 partnerMove;
u16 speedStats[MAX_BATTLERS_COUNT]; // Speed stats for all battles, calculated only once, same way as damages
- s32 simulatedDmg[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT][MAX_MON_MOVES]; // attacker, target, moveIndex
+ struct SimulatedDamage simulatedDmg[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT][MAX_MON_MOVES]; // attacker, target, moveIndex
u8 effectiveness[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT][MAX_MON_MOVES]; // attacker, target, moveIndex
u8 moveAccuracy[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT][MAX_MON_MOVES]; // attacker, target, moveIndex
u8 moveLimitations[MAX_BATTLERS_COUNT];
@@ -528,24 +557,6 @@ struct LinkBattlerHeader
struct BattleEnigmaBerry battleEnigmaBerry;
};
-struct MegaEvolutionData
-{
- u8 toEvolve; // As flags using gBitTable.
- bool8 alreadyEvolved[4]; // Array id is used for mon position.
- u8 battlerId;
- bool8 playerSelect;
- u8 triggerSpriteId;
-};
-
-struct UltraBurstData
-{
- u8 toBurst; // As flags using gBitTable.
- bool8 alreadyBursted[4]; // Array id is used for mon position.
- u8 battlerId;
- bool8 playerSelect;
- u8 triggerSpriteId;
-};
-
struct Illusion
{
u8 on;
@@ -557,39 +568,32 @@ struct Illusion
struct ZMoveData
{
- u8 viable:1; // current move can become a z move
+ u8 viable:1; // current move can become a z move
u8 viewing:1; // if player is viewing the z move name instead of regular moves
- u8 active:1; // is z move being used this turn
- u8 zStatusActive:1;
- u8 healReplacement:1;
- u8 activeCategory:2; // active z move category
- u8 zUnused:1;
- u8 triggerSpriteId;
+ u8 healReplacement:6;
u8 possibleZMoves[MAX_BATTLERS_COUNT];
- u16 chosenZMove; // z move of move cursor is on
- u8 effect;
- u8 used[MAX_BATTLERS_COUNT]; //one per bank for multi-battles
- u16 toBeUsed[MAX_BATTLERS_COUNT]; // z moves per battler to be used
u16 baseMoves[MAX_BATTLERS_COUNT];
- u8 categories[MAX_BATTLERS_COUNT];
};
struct DynamaxData
{
- bool8 playerSelect;
- u8 triggerSpriteId;
- u8 toDynamax; // flags using gBitTable
- bool8 alreadyDynamaxed[NUM_BATTLE_SIDES];
- bool8 dynamaxed[MAX_BATTLERS_COUNT];
u8 dynamaxTurns[MAX_BATTLERS_COUNT];
- u8 usingMaxMove[MAX_BATTLERS_COUNT];
- u8 activeCategory;
- u8 categories[MAX_BATTLERS_COUNT];
- u16 baseMove[MAX_BATTLERS_COUNT]; // base move of Max Move
+ u16 baseMoves[MAX_BATTLERS_COUNT]; // base move of Max Move
u16 lastUsedBaseMove;
u16 levelUpHP;
};
+struct BattleGimmickData
+{
+ u8 usableGimmick[MAX_BATTLERS_COUNT]; // first usable gimmick that can be selected for each battler
+ bool8 playerSelect; // used to toggle trigger and update battle UI
+ u8 triggerSpriteId;
+ u8 indicatorSpriteId[MAX_BATTLERS_COUNT];
+ u8 toActivate; // stores whether a battler should transform at start of turn as bitfield
+ u8 activeGimmick[NUM_BATTLE_SIDES][PARTY_SIZE]; // stores the active gimmick for each party member
+ bool8 activated[MAX_BATTLERS_COUNT][GIMMICKS_COUNT]; // stores whether a trainer has used gimmick
+};
+
struct LostItem
{
u16 originalItem:15;
@@ -628,7 +632,7 @@ struct BattleStruct
u8 moneyMultiplierItem:1;
u8 moneyMultiplierMove:1;
u8 savedTurnActionNumber;
- u8 switchInAbilitiesCounter;
+ u8 eventsBeforeFirstTurnState;
u8 faintedActionsState;
u8 faintedActionsBattlerId;
u8 scriptPartyIdx; // for printing the nickname
@@ -672,7 +676,8 @@ struct BattleStruct
u16 chosenItem[MAX_BATTLERS_COUNT];
u16 choicedMove[MAX_BATTLERS_COUNT];
u16 changedItems[MAX_BATTLERS_COUNT];
- u8 switchInItemsCounter;
+ u8 canPickupItem;
+ u8 switchInBattlerCounter;
u8 arenaTurnCounter;
u8 turnSideTracker;
u16 lastTakenMoveFrom[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT]; // a 2-D array [target][attacker]
@@ -687,6 +692,7 @@ struct BattleStruct
} multiBuffer;
u8 wishPerishSongState;
u8 wishPerishSongBattlerId;
+ u8 aiCalcInProgress:1;
u8 overworldWeatherDone:1;
u8 startingStatusDone:1;
u8 isAtkCancelerForCalledMove:1; // Certain cases in atk canceler should only be checked once, when the original move is called, however others need to be checked the twice.
@@ -707,15 +713,17 @@ struct BattleStruct
u8 magnitudeBasePower;
u8 presentBasePower;
u8 roostTypes[MAX_BATTLERS_COUNT][2];
- u8 savedBattlerTarget;
+ u8 savedBattlerTarget[5];
+ u8 savedBattlerAttacker[5];
+ u8 savedTargetCount:4;
+ u8 savedAttackerCount:4;
bool8 ateBoost[MAX_BATTLERS_COUNT];
u8 activeAbilityPopUps; // as bits for each battler
u8 abilityPopUpSpriteIds[MAX_BATTLERS_COUNT][2]; // two per battler
bool8 throwingPokeBall;
- struct MegaEvolutionData mega;
- struct UltraBurstData burst;
struct ZMoveData zmove;
struct DynamaxData dynamax;
+ struct BattleGimmickData gimmick;
const u8 *trainerSlideMsg;
bool8 trainerSlideLowHpMsgDone;
u8 introState;
@@ -743,6 +751,9 @@ struct BattleStruct
u8 blunderPolicy:1; // should blunder policy activate
u8 swapDamageCategory:1; // Photon Geyser, Shell Side Arm, Light That Burns the Sky
u8 bouncedMoveIsUsed:1;
+ u8 descriptionSubmenu:1; // For Move Description window in move selection screen
+ u8 ackBallUseBtn:1; // Used for the last used ball feature
+ u8 ballSwapped:1; // Used for the last used ball feature
u8 ballSpriteIds[2]; // item gfx, window gfx
u8 appearedInBattle; // Bitfield to track which Pokemon appeared in battle. Used for Burmy's form change
u8 skyDropTargets[MAX_BATTLERS_COUNT]; // For Sky Drop, to account for if multiple Pokemon use Sky Drop in a double battle.
@@ -753,7 +764,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.
@@ -771,6 +781,7 @@ struct BattleStruct
u8 trainerSlideDynamaxMsgDone:1;
u8 pledgeMove:1;
u8 isSkyBattle:1;
+ u8 poisonPuppeteerConfusion:1;
u32 aiDelayTimer; // Counts number of frames AI takes to choose an action.
u32 aiDelayFrames; // Number of frames it took to choose an action.
u8 timesGotHit[NUM_BATTLE_SIDES][PARTY_SIZE];
@@ -784,6 +795,12 @@ struct BattleStruct
u8 quickClawRandom[MAX_BATTLERS_COUNT];
u8 quickDrawRandom[MAX_BATTLERS_COUNT];
u8 shellSideArmCategory[MAX_BATTLERS_COUNT][MAX_BATTLERS_COUNT];
+ u8 speedTieBreaks; // MAX_BATTLERS_COUNT! values.
+ u8 boosterEnergyActivates;
+ u8 distortedTypeMatchups;
+ u8 categoryOverride; // for Z-Moves and Max Moves
+ u32 stellarBoostFlags[NUM_BATTLE_SIDES]; // stored as a bitfield of flags for all types for each side
+ u8 fickleBeamBoosted:1;
};
// The palaceFlags member of struct BattleStruct contains 1 flag per move to indicate which moves the AI should consider,
@@ -795,13 +812,12 @@ STATIC_ASSERT(sizeof(((struct BattleStruct *)0)->palaceFlags) * 8 >= MAX_BATTLER
#define F_DYNAMIC_TYPE_IGNORE_PHYSICALITY (1 << 6) // If set, the dynamic type's physicality won't be used for certain move effects.
#define F_DYNAMIC_TYPE_SET (1 << 7) // Set for all dynamic types to distinguish a dynamic type of Normal (0) from no dynamic type.
-#define GET_MOVE_TYPE(move, typeArg) \
-{ \
+#define GET_MOVE_TYPE(move, typeArg) do { \
if (gBattleStruct->dynamicMoveType) \
typeArg = gBattleStruct->dynamicMoveType & DYNAMIC_TYPE_MASK; \
else \
- typeArg = gMovesInfo[move].type; \
-}
+ typeArg = gMovesInfo[move].type; \
+} while(0)
#define IS_MOVE_PHYSICAL(move)(GetBattleMoveCategory(move) == DAMAGE_CATEGORY_PHYSICAL)
#define IS_MOVE_SPECIAL(move)(GetBattleMoveCategory(move) == DAMAGE_CATEGORY_SPECIAL)
@@ -813,22 +829,22 @@ STATIC_ASSERT(sizeof(((struct BattleStruct *)0)->palaceFlags) * 8 >= MAX_BATTLER
#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 IS_BATTLER_OF_TYPE(battlerId, type)((GetBattlerType(battlerId, 0) == type || GetBattlerType(battlerId, 1) == type || (GetBattlerType(battlerId, 2) != TYPE_MYSTERY && GetBattlerType(battlerId, 2) == type)))
-
-#define IS_BATTLER_TYPELESS(battlerId)(GetBattlerType(battlerId, 0) == TYPE_MYSTERY && GetBattlerType(battlerId, 1) == TYPE_MYSTERY && GetBattlerType(battlerId, 2) == TYPE_MYSTERY)
+#define 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 \
@@ -1111,6 +1127,7 @@ extern u16 gLastThrownBall;
extern u16 gBallToDisplay;
extern bool8 gLastUsedBallMenuPresent;
extern u8 gPartyCriticalHits[PARTY_SIZE];
+extern u8 gCategoryIconSpriteId;
static inline u32 GetBattlerPosition(u32 battler)
{
diff --git a/include/battle_ai_main.h b/include/battle_ai_main.h
index e2c78040918c..431ed3569898 100644
--- a/include/battle_ai_main.h
+++ b/include/battle_ai_main.h
@@ -1,6 +1,9 @@
#ifndef GUARD_BATTLE_AI_MAIN_H
#define GUARD_BATTLE_AI_MAIN_H
+
+typedef s32 (*AiScoreFunc)(u32, u32, u32, s32);
+
#define UNKNOWN_NO_OF_HITS UINT32_MAX
// return vals for BattleAI_ChooseMoveOrAction
@@ -29,26 +32,26 @@
#define STAT_CHANGE_ACC 10
#define STAT_CHANGE_EVASION 11
-#define BEST_DAMAGE_MOVE 1 // Move with the most amount of hits with the best accuracy/effect
-#define POWERFUL_STATUS_MOVE 10 // Moves with this score will be chosen over a move that faints target
+#define BEST_DAMAGE_MOVE 1 // Move with the most amount of hits with the best accuracy/effect
+#define POWERFUL_STATUS_MOVE 10 // Moves with this score will be chosen over a move that faints target
+#define NO_DAMAGE_OR_FAILS -20 // Move fails or does no damage
-// Temporary scores that are added together to determine a final score at the at of AI_CalcMoveEffectScore
+// Scores given in AI_CalcMoveEffectScore
+#define NO_INCREASE 0
#define WEAK_EFFECT 1
#define DECENT_EFFECT 2
-#define GOOD_EFFECT 4
-#define BEST_EFFECT 6
-
-// AI_CalcMoveEffectScore final score
-#define NOT_GOOD_ENOUGH 0 // Not worth using over a damaging move
-#define GOOD_MOVE_EFFECTS 2 // Worth using over a damaging move
-#define PREFERRED_MOVE_EFFECTS 3 // Worth using over a damagin move and is better then DECENT_EFFECT
-#define BEST_MOVE_EFFECTS 4 // Best possible move effects. E.g. stat boosting moves that boost multiply moves
+#define GOOD_EFFECT 3
+#define BEST_EFFECT 4
// AI_TryToFaint
#define FAST_KILL 6 // AI is faster and faints target
#define SLOW_KILL 4 // AI is slower and faints target
#define LAST_CHANCE 2 // AI faints to target. It should try and do damage with a priority move
+// AI_Risky
+#define STRONG_RISKY_EFFECT 3
+#define AVERAGE_RISKY_EFFECT 2
+
#include "test_runner.h"
// Logs for debugging AI tests.
@@ -66,6 +69,14 @@
score += val; \
} while (0) \
+#define ADJUST_AND_RETURN_SCORE(val) \
+ do \
+ { \
+ TestRunner_Battle_AIAdjustScore(__FILE__, __LINE__, sBattler_AI, AI_THINKING_STRUCT->movesetIndex, val); \
+ score += val; \
+ return score; \
+ } while (0) \
+
#define ADJUST_SCORE_PTR(val) \
do \
{ \
@@ -94,6 +105,7 @@ void Ai_InitPartyStruct(void);
void Ai_UpdateSwitchInData(u32 battler);
void Ai_UpdateFaintData(u32 battler);
void SetAiLogicDataForTurn(struct AiLogicData *aiData);
+void ResetDynamicAiFunc(void);
extern u8 sBattler_AI;
diff --git a/include/battle_ai_switch_items.h b/include/battle_ai_switch_items.h
index 16f6468757c1..b52e792612e9 100644
--- a/include/battle_ai_switch_items.h
+++ b/include/battle_ai_switch_items.h
@@ -3,7 +3,7 @@
void GetAIPartyIndexes(u32 battlerId, s32 *firstId, s32 *lastId);
void AI_TrySwitchOrUseItem(u32 battler);
-u8 GetMostSuitableMonToSwitchInto(u32 battler, bool32 switchAfterMonKOd);
+u32 GetMostSuitableMonToSwitchInto(u32 battler, bool32 switchAfterMonKOd);
bool32 ShouldSwitch(u32 battler, bool32 emitResult);
#endif // GUARD_BATTLE_AI_SWITCH_ITEMS_H
diff --git a/include/battle_ai_util.h b/include/battle_ai_util.h
index 8ea2141aee12..94d895e8fd08 100644
--- a/include/battle_ai_util.h
+++ b/include/battle_ai_util.h
@@ -3,8 +3,20 @@
#define FOE(battler) ((BATTLE_OPPOSITE(battler)) & BIT_SIDE)
-#define AI_STRIKES_FIRST(battlerAi, battlerDef, move)((AI_WhoStrikesFirst(battlerAi, battlerDef, move) == AI_IS_FASTER))
+// Roll boundaries used by AI when scoring. Doesn't affect actual damage dealt.
+#define MAX_ROLL_PERCENTAGE DMG_ROLL_PERCENT_HI
+#define MIN_ROLL_PERCENTAGE DMG_ROLL_PERCENT_LO
+#define DMG_ROLL_PERCENTAGE ((MAX_ROLL_PERCENTAGE + MIN_ROLL_PERCENTAGE + 1) / 2) // Controls the damage roll the AI sees for the default roll. By default the 9th roll is seen
+enum DamageRollType
+{
+ DMG_ROLL_LOWEST,
+ DMG_ROLL_DEFAULT,
+ DMG_ROLL_HIGHEST,
+};
+
+bool32 AI_IsFaster(u32 battlerAi, u32 battlerDef, u32 move);
+bool32 AI_IsSlower(u32 battlerAi, u32 battlerDef, u32 move);
bool32 AI_RandLessThan(u32 val);
bool32 IsAiVsAiBattle(void);
bool32 BattlerHasAi(u32 battlerId);
@@ -30,6 +42,7 @@ s32 AI_WhoStrikesFirst(u32 battlerAI, u32 battler2, u32 moveConsidered);
bool32 CanTargetFaintAi(u32 battlerDef, u32 battlerAtk);
u32 NoOfHitsForTargetToFaintAI(u32 battlerDef, u32 battlerAtk);
u32 GetBestDmgMoveFromBattler(u32 battlerAtk, u32 battlerDef);
+u32 GetBestDmgFromBattler(u32 battler, u32 battlerTarget);
bool32 CanTargetMoveFaintAi(u32 move, u32 battlerDef, u32 battlerAtk, u32 nHits);
bool32 CanTargetFaintAiWithMod(u32 battlerDef, u32 battlerAtk, s32 hpMod, s32 dmgMod);
s32 AI_DecideKnownAbilityForTurn(u32 battlerId);
@@ -82,8 +95,8 @@ bool32 ShouldLowerEvasion(u32 battlerAtk, u32 battlerDef, u32 defAbility);
bool32 IsAffectedByPowder(u32 battler, u32 ability, u32 holdEffect);
bool32 MovesWithCategoryUnusable(u32 attacker, u32 target, u32 category);
s32 AI_WhichMoveBetter(u32 move1, u32 move2, u32 battlerAtk, u32 battlerDef, s32 noOfHitsToKo);
-s32 AI_CalcDamageSaveBattlers(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectiveness, bool32 considerZPower);
-s32 AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectiveness, bool32 considerZPower, u32 weather);
+struct SimulatedDamage AI_CalcDamageSaveBattlers(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectiveness, bool32 considerZPower, enum DamageRollType rollType);
+struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectiveness, bool32 considerZPower, u32 weather, enum DamageRollType rollType);
bool32 AI_IsDamagedByRecoil(u32 battler);
u32 GetNoOfHitsToKO(u32 dmg, s32 hp);
u32 GetNoOfHitsToKOBattlerDmg(u32 dmg, u32 battlerDef);
@@ -103,6 +116,7 @@ bool32 HasMoveWithAdditionalEffect(u32 battlerId, u32 moveEffect);
bool32 HasMoveWithCriticalHitChance(u32 battlerId);
bool32 HasMoveWithMoveEffectExcept(u32 battlerId, u32 moveEffect, u32 exception);
bool32 HasMoveWithLowAccuracy(u32 battlerAtk, u32 battlerDef, u32 accCheck, bool32 ignoreStatus, u32 atkAbility, u32 defAbility, u32 atkHoldEffect, u32 defHoldEffect);
+bool32 HasAnyKnownMove(u32 battlerId);
bool32 IsAromaVeilProtectedMove(u32 move);
bool32 IsNonVolatileStatusMoveEffect(u32 moveEffect);
bool32 IsStatLoweringMoveEffect(u32 moveEffect);
@@ -176,8 +190,8 @@ bool32 PartyHasMoveCategory(u32 battlerId, u32 category);
bool32 SideHasMoveCategory(u32 battlerId, u32 category);
// score increases
-void IncreaseStatUpScore(u32 battlerAtk, u32 battlerDef, u32 statId, s32 *score);
-void IncreaseStatUpScoreContrary(u32 battlerAtk, u32 battlerDef, u32 statId, s32 *score);
+u32 IncreaseStatUpScore(u32 battlerAtk, u32 battlerDef, u32 statId);
+u32 IncreaseStatUpScoreContrary(u32 battlerAtk, u32 battlerDef, u32 statId);
void IncreasePoisonScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score);
void IncreaseBurnScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score);
void IncreaseParalyzeScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score);
@@ -185,11 +199,11 @@ void IncreaseSleepScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score);
void IncreaseConfusionScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score);
void IncreaseFrostbiteScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score);
-s32 AI_CalcPartyMonDamage(u32 move, u32 battlerAtk, u32 battlerDef, struct BattlePokemon switchinCandidate, bool8 isPartyMonAttacker);
-s32 AI_CheckMoveEffects(u32 battlerAtk, u32 battlerDef, u32 move, s32 score, struct AiLogicData *aiData, u32 predictedMove, bool32 isDoubleBattle);
+s32 AI_CalcPartyMonDamage(u32 move, u32 battlerAtk, u32 battlerDef, struct BattlePokemon switchinCandidate, bool32 isPartyMonAttacker, enum DamageRollType rollType);
s32 AI_TryToClearStats(u32 battlerAtk, u32 battlerDef, bool32 isDoubleBattle);
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);
#endif //GUARD_BATTLE_AI_UTIL_H
diff --git a/include/battle_anim.h b/include/battle_anim.h
index 14b03ecbdd2c..9280a5735af8 100644
--- a/include/battle_anim.h
+++ b/include/battle_anim.h
@@ -253,6 +253,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);
@@ -536,6 +537,9 @@ extern const union AnimCmd *const gAnims_WillOWispOrb[];
extern const union AnimCmd *const gAnims_FirePlume[];
// battle_anim_dragon.c
+extern const union AnimCmd *const gAnims_DreepyMissilePlayer[];
+extern const union AnimCmd *const gAnims_DreepyMissileOpponent[];
+extern const union AnimCmd *const gAnims_DreepyMissileOpponentNotDrag[];
extern const union AnimCmd *const gAnims_DragonBreathFire[];
extern const union AnimCmd *const gAnims_DragonRageFirePlume[];
extern const union AffineAnimCmd *const gAffineAnims_DragonRageFire[];
diff --git a/include/battle_anim_scripts.h b/include/battle_anim_scripts.h
new file mode 100644
index 000000000000..d97aaa421df6
--- /dev/null
+++ b/include/battle_anim_scripts.h
@@ -0,0 +1,940 @@
+#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[];
+
+#endif // GUARD_BATTLE_ANIM_SCRIPTS_H
diff --git a/include/battle_controllers.h b/include/battle_controllers.h
index 5f3bd8316e48..71a769144882 100644
--- a/include/battle_controllers.h
+++ b/include/battle_controllers.h
@@ -98,9 +98,7 @@ enum {
// Special return values in gBattleBufferB from Battle Controller functions.
#define RET_VALUE_LEVELED_UP 11
-#define RET_MEGA_EVOLUTION (1 << 7)
-#define RET_ULTRA_BURST (1 << 6)
-#define RET_DYNAMAX (1 << 5)
+#define RET_GIMMICK (1 << 7)
struct UnusedControllerStruct
{
@@ -127,11 +125,7 @@ struct ChooseMoveStruct
u8 currentPp[MAX_MON_MOVES];
u8 maxPp[MAX_MON_MOVES];
u16 species;
- u8 monType1;
- u8 monType2;
- u8 monType3;
- struct MegaEvolutionData mega;
- struct UltraBurstData burst;
+ u8 monTypes[3];
struct ZMoveData zmove;
};
@@ -261,7 +255,7 @@ void BattleControllerComplete(u32 battler); // Can be used for all the controlle
void BtlController_Empty(u32 battler); // Empty command, does nothing, only completes the execution.
void BtlController_TerminatorNop(u32 battler); // Dummy function at the end of the table.
void BattleControllerDummy(u32 battler);
-void StartSendOutAnim(u32 battler, bool32 dontClearSubstituteBit);
+void StartSendOutAnim(u32 battler, bool32 dontClearSubstituteBit, bool32 doSlideIn);
void Controller_WaitForString(u32 battler);
void Controller_WaitForHealthBar(u32 battler);
diff --git a/include/battle_dynamax.h b/include/battle_dynamax.h
index 1e3f3265b741..20cd4d5e79ee 100644
--- a/include/battle_dynamax.h
+++ b/include/battle_dynamax.h
@@ -56,21 +56,19 @@ enum MaxMoveEffect
MAX_EFFECT_BYPASS_PROTECT,
};
-bool32 IsDynamaxed(u16 battlerId);
-bool32 CanDynamax(u16 battlerId);
-bool32 IsGigantamaxed(u16 battlerId);
+bool32 CanDynamax(u32 battler);
+bool32 IsGigantamaxed(u32 battler);
void ApplyDynamaxHPMultiplier(u32 battler, struct Pokemon* mon);
-void PrepareBattlerForDynamax(u16 battlerId);
-u16 GetNonDynamaxHP(u16 battlerId);
-u16 GetNonDynamaxMaxHP(u32 battlerId);
-void UndoDynamax(u16 battlerId);
-bool32 IsMoveBlockedByMaxGuard(u16 move);
-bool32 IsMoveBlockedByDynamax(u16 move);
+void ActivateDynamax(u32 battler);
+u16 GetNonDynamaxHP(u32 battler);
+u16 GetNonDynamaxMaxHP(u32 battler);
+void UndoDynamax(u32 battler);
+bool32 IsMoveBlockedByMaxGuard(u32 move);
+bool32 IsMoveBlockedByDynamax(u32 move);
-bool32 ShouldUseMaxMove(u16 battlerId, u16 baseMove);
-u16 GetMaxMove(u16 battlerId, u16 baseMove);
-u8 GetMaxMovePower(u16 move);
-bool32 IsMaxMove(u16 move);
+u16 GetMaxMove(u32 battler, u32 baseMove);
+u8 GetMaxMovePower(u32 move);
+bool32 IsMaxMove(u32 move);
void ChooseDamageNonTypesString(u8 type);
void BS_UpdateDynamax(void);
@@ -78,15 +76,8 @@ void BS_SetMaxMoveEffect(void);
void BS_SetSteelsurge(void);
void BS_TrySetStatus1(void);
void BS_TrySetStatus2(void);
-void BS_DamageNonTypes(void);
void BS_HealOneSixth(void);
void BS_TryRecycleBerry(void);
void BS_JumpIfDynamaxed(void);
-void ChangeDynamaxTriggerSprite(u8 spriteId, u8 animId);
-void CreateDynamaxTriggerSprite(u8, bool8);
-void HideDynamaxTriggerSprite(void);
-bool32 IsDynamaxTriggerSpriteActive(void);
-void DestroyDynamaxTriggerSprite(void);
-
#endif
diff --git a/include/battle_gfx_sfx_util.h b/include/battle_gfx_sfx_util.h
index 95c97cabaa23..968f8d48dccd 100644
--- a/include/battle_gfx_sfx_util.h
+++ b/include/battle_gfx_sfx_util.h
@@ -31,6 +31,7 @@ void BattleStopLowHpSound(void);
u8 GetMonHPBarLevel(struct Pokemon *mon);
void HandleBattleLowHpMusicChange(void);
void SetBattlerSpriteAffineMode(u8 affineMode);
+void CreateEnemyShadowSprite(u32 battler);
void LoadAndCreateEnemyShadowSprites(void);
void SpriteCB_SetInvisible(struct Sprite *sprite);
void SetBattlerShadowSpriteCallback(u8 battler, u16 species);
diff --git a/include/battle_gimmick.h b/include/battle_gimmick.h
new file mode 100644
index 000000000000..de1352a611e1
--- /dev/null
+++ b/include/battle_gimmick.h
@@ -0,0 +1,51 @@
+#ifndef GUARD_BATTLE_GIMMICK_H
+#define GUARD_BATTLE_GIMMICK_H
+
+enum Gimmick
+{
+ GIMMICK_NONE,
+ GIMMICK_MEGA,
+ GIMMICK_ULTRA_BURST,
+ GIMMICK_Z_MOVE,
+ GIMMICK_DYNAMAX,
+ GIMMICK_TERA,
+ GIMMICKS_COUNT,
+};
+
+struct GimmickInfo
+{
+ const struct SpritePalette *triggerPal; // trigger gfx data
+ const struct SpriteSheet *triggerSheet;
+ const struct SpriteTemplate *triggerTemplate;
+ const struct SpritePalette *indicatorPal; // indicator gfx data
+ const struct SpriteSheet *indicatorSheet;
+ bool32 (*CanActivate)(u32 battler);
+ void (*ActivateGimmick)(u32 battler);
+};
+
+void AssignUsableGimmicks(void);
+bool32 CanActivateGimmick(u32 battler, enum Gimmick gimmick);
+bool32 IsGimmickSelected(u32 battler, enum Gimmick gimmick);
+void SetActiveGimmick(u32 battler, enum Gimmick gimmick);
+enum Gimmick GetActiveGimmick(u32 battler);
+bool32 ShouldTrainerBattlerUseGimmick(u32 battler, enum Gimmick gimmick);
+bool32 HasTrainerUsedGimmick(u32 battler, enum Gimmick gimmick);
+void SetGimmickAsActivated(u32 battler, enum Gimmick gimmick);
+
+void ChangeGimmickTriggerSprite(u32 spriteId, u32 animId);
+void CreateGimmickTriggerSprite(u32 battler);
+bool32 IsGimmickTriggerSpriteActive(void);
+void HideGimmickTriggerSprite(void);
+void DestroyGimmickTriggerSprite(void);
+
+void LoadIndicatorSpritesGfx(void);
+u32 GetIndicatorTileTag(u32 battler);
+u32 GetIndicatorPalTag(u32 battler);
+void UpdateIndicatorVisibilityAndType(u32 healthboxId, bool32 invisible);
+void UpdateIndicatorOamPriority(u32 healthboxId, u32 oamPriority);
+void UpdateIndicatorLevelData(u32 healthboxId, u32 level);
+void CreateIndicatorSprite(u32 battler);
+
+extern const struct GimmickInfo gGimmicksInfo[];
+
+#endif
diff --git a/include/battle_interface.h b/include/battle_interface.h
index b26205d8102d..6635298dc102 100644
--- a/include/battle_interface.h
+++ b/include/battle_interface.h
@@ -48,21 +48,38 @@ enum
#define TAG_HEALTHBAR_PAL TAG_HEALTHBAR_PLAYER1_TILE
#define TAG_HEALTHBOX_PAL TAG_HEALTHBOX_PLAYER1_TILE
-#define TAG_MEGA_TRIGGER_TILE 0xD777
+#define TAG_GIMMICK_TRIGGER_TILE 0xD777
#define TAG_MEGA_INDICATOR_TILE 0xD778
#define TAG_ALPHA_INDICATOR_TILE 0xD779
#define TAG_OMEGA_INDICATOR_TILE 0xD77A
-#define TAG_ZMOVE_TRIGGER_TILE 0xD77B
-#define TAG_BURST_TRIGGER_TILE 0xD77C
-#define TAG_DYNAMAX_TRIGGER_TILE 0xD77D
-#define TAG_DYNAMAX_INDICATOR_TILE 0xD77E
+#define TAG_DYNAMAX_INDICATOR_TILE 0xD77B
-#define TAG_MEGA_TRIGGER_PAL 0xD777
+#define TAG_NORMAL_INDICATOR_TILE 0xD77C
+#define TAG_FIGHTING_INDICATOR_TILE 0xD77D
+#define TAG_FLYING_INDICATOR_TILE 0xD77E
+#define TAG_POISON_INDICATOR_TILE 0xD77F
+#define TAG_GROUND_INDICATOR_TILE 0xD780
+#define TAG_ROCK_INDICATOR_TILE 0xD781
+#define TAG_BUG_INDICATOR_TILE 0xD782
+#define TAG_GHOST_INDICATOR_TILE 0xD783
+#define TAG_STEEL_INDICATOR_TILE 0xD784
+// empty spot for TYPE_MYSTERY
+#define TAG_FIRE_INDICATOR_TILE 0xD786
+#define TAG_WATER_INDICATOR_TILE 0xD787
+#define TAG_GRASS_INDICATOR_TILE 0xD788
+#define TAG_ELECTRIC_INDICATOR_TILE 0xD789
+#define TAG_PSYCHIC_INDICATOR_TILE 0xD78A
+#define TAG_ICE_INDICATOR_TILE 0xD78B
+#define TAG_DRAGON_INDICATOR_TILE 0xD78C
+#define TAG_DARK_INDICATOR_TILE 0xD78D
+#define TAG_FAIRY_INDICATOR_TILE 0xD78E
+#define TAG_STELLAR_INDICATOR_TILE 0xD78F
+#define TAG_TERA_TRIGGER_TILE 0xD790
+
+#define TAG_GIMMICK_TRIGGER_PAL 0xD777
#define TAG_MEGA_INDICATOR_PAL 0xD778
#define TAG_MISC_INDICATOR_PAL 0xD779 // Alpha, Omega, and Dynamax indicators use the same palette as each of them only uses 4 different colors.
-#define TAG_ZMOVE_TRIGGER_PAL 0xD77B
-#define TAG_BURST_TRIGGER_PAL 0xD77C
-#define TAG_DYNAMAX_TRIGGER_PAL 0xD77D
+#define TAG_TERA_INDICATOR_PAL 0xD77A
enum
{
@@ -92,18 +109,6 @@ void InitBattlerHealthboxCoords(u8 battler);
void GetBattlerHealthboxCoords(u8 battler, s16 *x, s16 *y);
void UpdateHpTextInHealthbox(u32 healthboxSpriteId, u32 maxOrCurrent, s16 currHp, s16 maxHp);
void SwapHpBarsWithHpText(void);
-void ChangeMegaTriggerSprite(u8 spriteId, u8 animId);
-void CreateMegaTriggerSprite(u8 battlerId, u8 palId);
-bool32 IsMegaTriggerSpriteActive(void);
-void HideMegaTriggerSprite(void);
-void DestroyMegaTriggerSprite(void);
-void ChangeBurstTriggerSprite(u8 spriteId, u8 animId);
-void CreateBurstTriggerSprite(u8 battlerId, u8 palId);
-bool32 IsBurstTriggerSpriteActive(void);
-void HideBurstTriggerSprite(void);
-void DestroyBurstTriggerSprite(void);
-void MegaIndicator_LoadSpritesGfx(void);
-void MegaIndicator_SetVisibilities(u32 healthboxId, bool32 invisible);
u8 CreatePartyStatusSummarySprites(u8 battler, struct HpAndStatus *partyInfo, bool8 skipPlayer, bool8 isBattleStart);
void Task_HidePartyStatusSummary(u8 taskId);
void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elementId);
@@ -112,7 +117,6 @@ u8 GetScaledHPFraction(s16 hp, s16 maxhp, u8 scale);
u8 GetHPBarLevel(s16 hp, s16 maxhp);
void CreateAbilityPopUp(u8 battlerId, u32 ability, bool32 isDoubleBattle);
void DestroyAbilityPopUp(u8 battlerId);
-void HideTriggerSprites(void);
bool32 CanThrowLastUsedBall(void);
void TryHideLastUsedBall(void);
void TryRestoreLastUsedBall(void);
@@ -120,5 +124,6 @@ void TryAddLastUsedBallItemSprites(void);
void SwapBallToDisplay(bool32 sameBall);
void ArrowsChangeColorLastBallCycle(bool32 showArrows);
void UpdateAbilityPopup(u8 battlerId);
+void CategoryIcons_LoadSpritesGfx(void);
#endif // GUARD_BATTLE_INTERFACE_H
diff --git a/include/battle_main.h b/include/battle_main.h
index 9469e63efe6d..eb0af5aa776a 100644
--- a/include/battle_main.h
+++ b/include/battle_main.h
@@ -23,6 +23,20 @@ struct MultiPartnerMenuPokemon
#define BOUNCE_MON 0x0
#define BOUNCE_HEALTHBOX 0x1
+enum {
+ FIRST_TURN_EVENTS_START,
+ FIRST_TURN_EVENTS_OVERWORLD_WEATHER,
+ FIRST_TURN_EVENTS_TERRAIN,
+ FIRST_TURN_EVENTS_STARTING_STATUS,
+ FIRST_TURN_EVENTS_TOTEM_BOOST,
+ FIRST_TURN_EVENTS_NEUTRALIZING_GAS,
+ FIRST_TURN_EVENTS_SWITCH_IN_ABILITIES,
+ FIRST_TURN_EVENTS_OPPORTUNIST_1,
+ FIRST_TURN_EVENTS_ITEM_EFFECTS,
+ FIRST_TURN_EVENTS_OPPORTUNIST_2,
+ FIRST_TURN_EVENTS_END,
+};
+
void CB2_InitBattle(void);
void BattleMainCB2(void);
void CB2_QuitRecordedBattle(void);
@@ -43,6 +57,7 @@ void SpriteCB_FaintSlideAnim(struct Sprite *sprite);
void DoBounceEffect(u8 battler, u8 which, s8 delta, s8 amplitude);
void EndBounceEffect(u8 battler, u8 which);
void SpriteCB_PlayerMonFromBall(struct Sprite *sprite);
+void SpriteCB_PlayerMonSlideIn(struct Sprite *sprite);
void SpriteCB_TrainerThrowObject(struct Sprite *sprite);
void AnimSetCenterToCornerVecX(struct Sprite *sprite);
void BeginBattleIntroDummy(void);
@@ -60,6 +75,7 @@ s8 GetChosenMovePriority(u32 battlerId);
s8 GetMovePriority(u32 battlerId, u16 move);
s32 GetWhichBattlerFasterArgs(u32 battler1, u32 battler2, bool32 ignoreChosenMoves, u32 ability1, u32 ability2,
u32 holdEffectBattler1, u32 holdEffectBattler2, u32 speedBattler1, u32 speedBattler2, s32 priority1, s32 priority2);
+s32 GetWhichBattlerFasterOrTies(u32 battler1, u32 battler2, bool32 ignoreChosenMoves);
s32 GetWhichBattlerFaster(u32 battler1, u32 battler2, bool32 ignoreChosenMoves);
void RunBattleScriptCommands_PopCallbacksStack(void);
void RunBattleScriptCommands(void);
@@ -77,6 +93,7 @@ extern const struct SpriteTemplate gUnusedBattleInitSprite;
extern const struct OamData gOamData_BattleSpriteOpponentSide;
extern const struct OamData gOamData_BattleSpritePlayerSide;
extern const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES];
+extern const uq4_12_t gTypeEffectivenessTable[NUMBER_OF_MON_TYPES][NUMBER_OF_MON_TYPES];
extern const u8 gStatusConditionString_PoisonJpn[8];
extern const u8 gStatusConditionString_SleepJpn[8];
diff --git a/include/battle_script_commands.h b/include/battle_script_commands.h
index 5075d52be735..4f1593d4d821 100644
--- a/include/battle_script_commands.h
+++ b/include/battle_script_commands.h
@@ -47,18 +47,18 @@ bool32 IsShieldsDownProtected(u32 battler);
u32 IsAbilityStatusProtected(u32 battler);
bool32 TryResetBattlerStatChanges(u8 battler);
bool32 CanCamouflage(u8 battlerId);
-u16 GetNaturePowerMove(void);
+u32 GetNaturePowerMove(u32 battler);
void StealTargetItem(u8 battlerStealer, u8 battlerItem);
u8 GetCatchingBattler(void);
u32 GetHighestStatId(u32 battlerId);
bool32 ProteanTryChangeType(u32 battler, u32 ability, u32 move, u32 moveType);
+bool32 ShouldTeraShellDistortTypeMatchups(u32 move, u32 battlerDef);
bool32 IsMoveNotAllowedInSkyBattles(u32 move);
bool32 DoSwitchInAbilities(u32 battlerId);
u8 GetFirstFaintedPartyIndex(u8 battlerId);
bool32 IsMoveAffectedByParentalBond(u32 move, u32 battler);
extern void (* const gBattleScriptingCommandsTable[])(void);
-extern const u8 gBattlePalaceNatureToMoveGroupLikelihood[NUM_NATURES][4];
extern const struct StatFractions gAccuracyStageRatios[];
#endif // GUARD_BATTLE_SCRIPT_COMMANDS_H
diff --git a/include/battle_scripts.h b/include/battle_scripts.h
index 148a91783b50..cd35e1de8218 100644
--- a/include/battle_scripts.h
+++ b/include/battle_scripts.h
@@ -51,9 +51,14 @@ extern const u8 BattleScript_LevelUp[];
extern const u8 BattleScript_RainContinuesOrEnds[];
extern const u8 BattleScript_SnowContinuesOrEnds[];
extern const u8 BattleScript_DamagingWeatherContinues[];
+extern const u8 BattleScript_DamagingWeather[];
+extern const u8 BattleScript_IceBodyHeal[];
extern const u8 BattleScript_SandStormHailSnowEnds[];
extern const u8 BattleScript_SunlightContinues[];
extern const u8 BattleScript_SunlightFaded[];
+extern const u8 BattleScript_FogContinues[];
+extern const u8 BattleScript_FogEnded_Ret[];
+extern const u8 BattleScript_FogEnded[];
extern const u8 BattleScript_OverworldStatusStarts[];
extern const u8 BattleScript_OverworldWeatherStarts[];
extern const u8 BattleScript_OverworldTerrain[];
@@ -81,6 +86,7 @@ extern const u8 BattleScript_DmgHazardsOnBattlerScripting[];
extern const u8 BattleScript_DmgHazardsOnFaintedBattler[];
extern const u8 BattleScript_PerishSongTakesLife[];
extern const u8 BattleScript_PerishSongCountGoesDown[];
+extern const u8 BattleScript_AllStatsUpZMove[];
extern const u8 BattleScript_AllStatsUp[];
extern const u8 BattleScript_RapidSpinAway[];
extern const u8 BattleScript_WrapFree[];
@@ -110,7 +116,6 @@ extern const u8 BattleScript_MagicCoatBouncePrankster[];
extern const u8 BattleScript_SnatchedMove[];
extern const u8 BattleScript_EnduredMsg[];
extern const u8 BattleScript_OneHitKOMsg[];
-extern const u8 BattleScript_SAtkDown2[];
extern const u8 BattleScript_FocusPunchSetUp[];
extern const u8 BattleScript_MoveUsedIsAsleep[];
extern const u8 BattleScript_MoveUsedWokeUp[];
@@ -178,6 +183,7 @@ extern const u8 BattleScript_FlashFireBoost_PPLoss[];
extern const u8 BattleScript_FlashFireBoost[];
extern const u8 BattleScript_AbilityNoStatLoss[];
extern const u8 BattleScript_ItemNoStatLoss[];
+extern const u8 BattleScript_ItemNoStatLossSpicyExtract[];
extern const u8 BattleScript_BRNPrevention[];
extern const u8 BattleScript_PRLZPrevention[];
extern const u8 BattleScript_PSNPrevention[];
@@ -289,6 +295,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[];
@@ -366,6 +373,8 @@ extern const u8 BattleScript_DancerActivates[];
extern const u8 BattleScript_AftermathDmg[];
extern const u8 BattleScript_AttackerFormChange[];
extern const u8 BattleScript_AttackerFormChangeEnd3[];
+extern const u8 BattleScript_AttackerFormChangeWithString[];
+extern const u8 BattleScript_AttackerFormChangeWithStringEnd3[];
extern const u8 BattleScript_TargetFormChange[];
extern const u8 BattleScript_AnticipationActivates[];
extern const u8 BattleScript_SlowStartEnds[];
@@ -384,6 +393,7 @@ extern const u8 BattleScript_CheekPouchActivates[];
extern const u8 BattleScript_TotemVar[];
extern const u8 BattleScript_TotemFlaredToLife[];
extern const u8 BattleScript_AnnounceAirLockCloudNine[];
+extern const u8 BattleScript_ActivateTeraformZero[];
extern const u8 BattleScript_BattlerAbilityStatRaiseOnSwitchIn[];
extern const u8 BattleScript_CottonDownActivates[];
extern const u8 BattleScript_BallFetch[];
@@ -438,6 +448,7 @@ extern const u8 BattleScript_PastelVeilActivates[];
extern const u8 BattleScript_MimicryActivatesEnd3[];
extern const u8 BattleScript_ApplyMimicry[];
extern const u8 BattleScript_AttackerFormChangeEnd3NoPopup[];
+extern const u8 BattleScript_AttackerFormChangeWithStringEnd3NoPopup[];
extern const u8 BattleScript_AttackerFormChangeMoveEffect[];
extern const u8 BattleScript_BothCanNoLongerEscape[];
extern const u8 BattleScript_OctolockEndTurn[];
@@ -500,6 +511,11 @@ extern const u8 BattleScript_TheSeaOfFireDisappeared[];
extern const u8 BattleScript_TheSwampDisappeared[];
extern const u8 BattleScript_EffectPsychicNoise[];
extern const u8 BattleScript_AromaVeilProtectsRet[];
+extern const u8 BattleScript_LowerAtkSpAtk[];
+extern const u8 BattleScript_Terastallization[];
+extern const u8 BattleScript_BoosterEnergyEnd2[];
+extern const u8 BattleScript_TeraShellDistortingTypeMatchups[];
+extern const u8 BattleScript_TeraFormChange[];
// zmoves
extern const u8 BattleScript_ZMoveActivateDamaging[];
@@ -826,5 +842,9 @@ extern const u8 BattleScript_EffectFilletAway[];
extern const u8 BattleScript_EffectShedTail[];
extern const u8 BattleScript_EffectUpperHand[];
extern const u8 BattleScript_EffectTidyUp[];
+extern const u8 BattleScript_EffectSpicyExtract[];
+extern const u8 BattleScript_DamageToQuarterTargetHP[];
+extern const u8 BattleScript_EffectFickleBeam[];
+extern const u8 BattleScript_FickleBeamDoubled[];
#endif // GUARD_BATTLE_SCRIPTS_H
diff --git a/include/battle_terastal.h b/include/battle_terastal.h
new file mode 100644
index 000000000000..6b5c38546346
--- /dev/null
+++ b/include/battle_terastal.h
@@ -0,0 +1,14 @@
+#ifndef GUARD_BATTLE_TERASTAL_H
+#define GUARD_BATTLE_TERASTAL_H
+
+void ActivateTera(u32 battler);
+void ApplyBattlerVisualsForTeraAnim(u32 battler);
+bool32 CanTerastallize(u32 battler);
+u32 GetBattlerTeraType(u32 battler);
+void ExpendTypeStellarBoost(u32 battler, u32 type);
+bool32 IsTypeStellarBoosted(u32 battler, u32 type);
+uq4_12_t GetTeraMultiplier(u32 battler, u32 type);
+
+u16 GetTeraTypeRGB(u32 type);
+
+#endif
diff --git a/include/battle_tower.h b/include/battle_tower.h
index a80314592726..45c9d683ff7b 100644
--- a/include/battle_tower.h
+++ b/include/battle_tower.h
@@ -1,6 +1,8 @@
#ifndef GUARD_BATTLE_TOWER_H
#define GUARD_BATTLE_TOWER_H
+#include "data.h"
+
struct RSBattleTowerRecord
{
/*0x00*/ u8 lvlMode; // 0 = level 50, 1 = level 100
@@ -24,23 +26,13 @@ struct BattleFrontierTrainer
const u16 *monSet;
};
-struct FacilityMon
-{
- u16 species;
- u16 moves[MAX_MON_MOVES];
- u8 itemTableId;
- u8 evSpread;
- u8 nature;
-};
-
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 gBattleFrontierHeldItems[];
-extern const struct FacilityMon gBattleFrontierMons[];
+extern const u16 gTowerFemaleTrainerGfxIds[20];
+extern const struct TrainerMon gBattleFrontierMons[];
extern const struct BattleFrontierTrainer gBattleFrontierTrainers[];
-extern const struct FacilityMon gSlateportBattleTentMons[];
+extern const struct TrainerMon gSlateportBattleTentMons[];
extern const struct BattleFrontierTrainer gSlateportBattleTentTrainers[];
// Temporary storage for monIds of the opponent team
@@ -48,13 +40,13 @@ extern const struct BattleFrontierTrainer gSlateportBattleTentTrainers[];
extern u16 gFrontierTempParty[];
extern const struct BattleFrontierTrainer *gFacilityTrainers;
-extern const struct FacilityMon *gFacilityTrainerMons;
+extern const struct TrainerMon *gFacilityTrainerMons;
void CallBattleTowerFunc(void);
u16 GetRandomScaledFrontierTrainerId(u8 challengeNum, u8 battleNum);
void SetBattleFacilityTrainerGfxId(u16 trainerId, u8 tempVarId);
void SetEReaderTrainerGfxId(void);
-u8 GetBattleFacilityTrainerGfxId(u16 trainerId);
+u16 GetBattleFacilityTrainerGfxId(u16 trainerId);
void PutNewBattleTowerRecord(struct EmeraldBattleTowerRecord *newRecordEm);
u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
u8 GetFrontierOpponentClass(u16 trainerId);
@@ -81,8 +73,9 @@ void GetBattleTowerTrainerLanguage(u8 *dst, u16 trainerId);
u8 SetFacilityPtrsGetLevel(void);
u8 GetFrontierEnemyMonLevel(u8 lvlMode);
s32 GetHighestLevelInPlayerParty(void);
-u8 FacilityClassToGraphicsId(u8 facilityClass);
+u16 FacilityClassToGraphicsId(u8 facilityClass);
bool32 ValidateBattleTowerRecord(u8 recordId); // unused
void TrySetLinkBattleTowerEnemyPartyLevel(void);
+void CreateFacilityMon(const struct TrainerMon *fmon, u16 level, u8 fixedIV, u32 otID, u32 flags, struct Pokemon *dst);
#endif //GUARD_BATTLE_TOWER_H
diff --git a/include/battle_util.h b/include/battle_util.h
index 644a112d7dab..de05242902d6 100644
--- a/include/battle_util.h
+++ b/include/battle_util.h
@@ -20,24 +20,29 @@
#define MOVE_LIMITATION_PLACEHOLDER (1 << 15)
#define MOVE_LIMITATIONS_ALL 0xFFFF
-#define ABILITYEFFECT_ON_SWITCHIN 0
-#define ABILITYEFFECT_ENDTURN 1
-#define ABILITYEFFECT_MOVES_BLOCK 2
-#define ABILITYEFFECT_ABSORBING 3
-#define ABILITYEFFECT_MOVE_END_ATTACKER 4
-#define ABILITYEFFECT_MOVE_END 5
-#define ABILITYEFFECT_IMMUNITY 6
-#define ABILITYEFFECT_SYNCHRONIZE 7
-#define ABILITYEFFECT_ATK_SYNCHRONIZE 8
-#define ABILITYEFFECT_MOVE_END_OTHER 9
-#define ABILITYEFFECT_NEUTRALIZINGGAS 10
-#define ABILITYEFFECT_FIELD_SPORT 11 // Only used if B_SPORT_TURNS >= GEN_6
-#define ABILITYEFFECT_ON_WEATHER 12
-#define ABILITYEFFECT_ON_TERRAIN 13
-#define ABILITYEFFECT_SWITCH_IN_TERRAIN 14
-#define ABILITYEFFECT_SWITCH_IN_WEATHER 15
-#define ABILITYEFFECT_OPPORTUNIST 16
-#define ABILITYEFFECT_SWITCH_IN_STATUSES 17
+enum {
+ ABILITYEFFECT_ON_SWITCHIN,
+ ABILITYEFFECT_ENDTURN,
+ ABILITYEFFECT_MOVES_BLOCK,
+ ABILITYEFFECT_WOULD_BLOCK, // Checks immunity without triggering a script
+ ABILITYEFFECT_ABSORBING,
+ ABILITYEFFECT_WOULD_ABSORB, // Checks immunity without triggering a script
+ ABILITYEFFECT_MOVE_END_ATTACKER,
+ ABILITYEFFECT_MOVE_END,
+ ABILITYEFFECT_IMMUNITY,
+ ABILITYEFFECT_SYNCHRONIZE,
+ ABILITYEFFECT_ATK_SYNCHRONIZE,
+ ABILITYEFFECT_MOVE_END_OTHER,
+ ABILITYEFFECT_NEUTRALIZINGGAS,
+ ABILITYEFFECT_FIELD_SPORT, // Only used if B_SPORT_TURNS >= GEN_6
+ ABILITYEFFECT_ON_WEATHER,
+ ABILITYEFFECT_ON_TERRAIN,
+ ABILITYEFFECT_SWITCH_IN_TERRAIN,
+ ABILITYEFFECT_SWITCH_IN_WEATHER,
+ ABILITYEFFECT_OPPORTUNIST,
+ ABILITYEFFECT_SWITCH_IN_STATUSES,
+};
+
// Special cases
#define ABILITYEFFECT_MUD_SPORT 252 // Only used if B_SPORT_TURNS >= GEN_6
#define ABILITYEFFECT_WATER_SPORT 253 // Only used if B_SPORT_TURNS >= GEN_6
@@ -59,6 +64,10 @@
#define IS_WHOLE_SIDE_ALIVE(battler) ((IsBattlerAlive(battler) && IsBattlerAlive(BATTLE_PARTNER(battler))))
#define IS_ALIVE_AND_PRESENT(battler) (IsBattlerAlive(battler) && IsBattlerSpritePresent(battler))
+// Lowest and highest percentages used for damage roll calculations
+#define DMG_ROLL_PERCENT_LO 85
+#define DMG_ROLL_PERCENT_HI 100
+
// for Natural Gift and Fling
struct TypePower
{
@@ -146,7 +155,7 @@ bool32 TryChangeBattleWeather(u32 battler, u32 weatherEnumId, bool32 viaAbility)
u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32 moveArg);
bool32 TryPrimalReversion(u32 battler);
bool32 IsNeutralizingGasOnField(void);
-bool32 IsMoldBreakerTypeAbility(u32 ability);
+bool32 IsMoldBreakerTypeAbility(u32 battler, u32 ability);
u32 GetBattlerAbility(u32 battler);
u32 IsAbilityOnSide(u32 battler, u32 ability);
u32 IsAbilityOnOpposingSide(u32 battler, u32 ability);
@@ -180,10 +189,13 @@ s32 CalculateMoveDamageVars(u32 move, u32 battlerAtk, u32 battlerDef, u32 moveTy
uq4_12_t CalcTypeEffectivenessMultiplier(u32 move, u32 moveType, u32 battlerAtk, u32 battlerDef, u32 defAbility, bool32 recordAbilities);
uq4_12_t CalcPartyMonTypeEffectivenessMultiplier(u16 move, u16 speciesDef, u16 abilityDef);
uq4_12_t GetTypeModifier(u32 atkType, u32 defType);
+uq4_12_t GetTypeEffectiveness(struct Pokemon *mon, u8 moveType);
s32 GetStealthHazardDamage(u8 hazardType, u32 battler);
s32 GetStealthHazardDamageByTypesAndHP(u8 hazardType, u8 type1, u8 type2, u32 maxHp);
bool32 CanMegaEvolve(u32 battler);
bool32 CanUltraBurst(u32 battler);
+void ActivateMegaEvolution(u32 battler);
+void ActivateUltraBurst(u32 battler);
bool32 IsBattlerMegaEvolved(u32 battler);
bool32 IsBattlerPrimalReverted(u32 battler);
bool32 IsBattlerUltraBursted(u32 battler);
@@ -219,6 +231,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);
@@ -232,6 +246,8 @@ bool32 MoveHasAdditionalEffectWithChance(u32 move, u32 moveEffect, u32 chance);
bool32 MoveHasAdditionalEffectSelf(u32 move, u32 moveEffect);
bool32 MoveHasAdditionalEffectSelfArg(u32 move, u32 moveEffect, u32 argument);
bool32 MoveHasChargeTurnAdditionalEffect(u32 move);
+bool32 CanTargetPartner(u32 battlerAtk, u32 battlerDef);
+bool32 TargetFullyImmuneToCurrMove(u32 BattlerAtk, u32 battlerDef);
bool32 CanBeSlept(u32 battler, u32 ability);
bool32 CanBePoisoned(u32 battlerAtk, u32 battlerDef, u32 defAbility);
@@ -250,7 +266,7 @@ bool32 AreBattlersOfOppositeGender(u32 battler1, u32 battler2);
bool32 AreBattlersOfSameGender(u32 battler1, u32 battler2);
u32 CalcSecondaryEffectChance(u32 battler, u32 battlerAbility, const struct AdditionalEffect *additionalEffect);
bool32 MoveEffectIsGuaranteed(u32 battler, u32 battlerAbility, const struct AdditionalEffect *additionalEffect);
-u8 GetBattlerType(u32 battler, u8 typeIndex);
+u8 GetBattlerType(u32 battler, u8 typeIndex, bool32 ignoreTera);
bool8 CanMonParticipateInSkyBattle(struct Pokemon *mon);
bool8 IsMonBannedFromSkyBattles(u16 species);
void RemoveBattlerType(u32 battler, u8 type);
diff --git a/include/battle_z_move.h b/include/battle_z_move.h
index 92fb685b2f19..bfa4c8495af3 100644
--- a/include/battle_z_move.h
+++ b/include/battle_z_move.h
@@ -13,19 +13,17 @@ struct SignatureZMove
u16 zmove;
};
-bool8 IsZMove(u16 move);
-void QueueZMove(u8 battler, u16 baseMove);
-bool32 IsViableZMove(u8 battler, u16 move);
-bool32 TryChangeZIndicator(u8 battler, u8 moveIndex);
-void CreateZMoveTriggerSprite(u8, bool8);
-void HideZMoveTriggerSprite(void);
-bool32 IsZMoveTriggerSpriteActive(void);
-void DestroyZMoveTriggerSprite(void);
-u16 GetTypeBasedZMove(u16 move, u8 battler);
+bool32 IsZMove(u32 move);
+bool32 CanUseZMove(u32 battler);
+u32 GetUsableZMove(u32 battler, u32 move);
+void ActivateZMove(u32 battler);
+bool32 IsViableZMove(u32 battler, u32 move);
+bool32 TryChangeZTrigger(u32 battler, u32 moveIndex);
+u32 GetTypeBasedZMove(u32 move);
+u32 GetSignatureZMove(u32 move, u32 species, u32 item);
bool32 MoveSelectionDisplayZMove(u16 zmove, u32 battler);
void SetZEffect(void);
-bool32 IsZMoveUsable(u8 battler, u16 moveIndex);
-void GetUsableZMoves(u8 battler, u16 *moves);
-u16 GetZMovePower(u16 move);
+void AssignUsableZMoves(u32 battler, u16 *moves);
+u32 GetZMovePower(u32 move);
#endif // GUARD_BATTLE_Z_MOVE_H
diff --git a/include/config/battle.h b/include/config/battle.h
index c85697f73835..1cb4a4a6ce0e 100644
--- a/include/config/battle.h
+++ b/include/config/battle.h
@@ -25,7 +25,7 @@
#define B_RECALCULATE_STATS GEN_LATEST // In Gen5+, the stats of the Pokémon who participate in battle are recalculated at the end of each battle.
// Damage settings
-#define B_BURN_DAMAGE FALSE // In Gen7+, burn damage is 1/16th of max HP instead of 1/8th. Also applies to Frostbite.
+#define B_BURN_DAMAGE GEN_LATEST // In Gen7+, burn damage is 1/16th of max HP instead of 1/8th. Also applies to Frostbite.
#define B_BURN_FACADE_DMG GEN_LATEST // In Gen6+, burn's effect of lowering the Attack stat no longer applies to Facade.
#define B_BINDING_DAMAGE GEN_LATEST // In Gen6+, binding damage is 1/8 of max HP instead of 1/16. (With Binding Band, 1/6 and 1/8 respectively.)
#define B_PSYWAVE_DMG GEN_LATEST // Psywave's damage formula. See Cmd_psywavedamageeffect.
@@ -36,13 +36,14 @@
#define B_SPORT_DMG_REDUCTION GEN_LATEST // In Gen5+, Water/Mud Sport reduce Fire/Electric Damage by 67% instead of 50%.
#define B_EXPLOSION_DEFENSE GEN_LATEST // In Gen5+, Self-Destruct and Explosion don't halve the targets' defense.
#define B_PARENTAL_BOND_DMG GEN_LATEST // In Gen7+, Parental Bond's second hit does 25% of the initial hits damage. Before, it did 50%.
-#define B_MULTIPLE_TARGETS_DMG GEN_3 // In Gen4+, damage dealt by moves that hit multiple targets at once is reduced to 75%. Before, it was 50%.
+#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.
-#define B_STEEL_RESISTANCES GEN_LATEST // In Gen6+, Steel-type Pokémon are no longer resistant to Dark-type and Ghost-type moves.
+#define B_UPDATED_TYPE_MATCHUPS GEN_LATEST // Updates Type matchups. src/data/types_info.h for details.
#define B_PRANKSTER_DARK_TYPES GEN_LATEST // In Gen7+, Prankster-elevated status moves do not affect Dark type Pokémon.
#define B_SHEER_COLD_IMMUNITY GEN_LATEST // In Gen7+, Ice-types are immune to Sheer Cold
#define B_ROOST_PURE_FLYING GEN_LATEST // In Gen5+, Roost makes pure Flying-types into Normal-type.
@@ -118,6 +119,8 @@
#define B_IMPRISON GEN_LATEST // In Gen5+, Imprison doesn't fail if opposing pokemon don't have any moves the user knows.
#define B_ALLY_SWITCH_FAIL_CHANCE GEN_LATEST // In Gen9, using Ally Switch consecutively decreases the chance of success for each consecutive use.
#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.
// Ability settings
#define B_EXPANDED_ABILITY_NAMES TRUE // If TRUE, ability names are increased from 12 characters to 16 characters.
@@ -145,6 +148,9 @@
#define B_INTREPID_SWORD GEN_LATEST // In Gen9+, Intrepid Sword raises Attack by one stage only once per Battle.
#define B_DAUNTLESS_SHIELD GEN_LATEST // In Gen9+, Dauntless Shield raises Defense by one stage only once per Battle.
#define B_DISGUISE_HP_LOSS GEN_LATEST // In Gen8+, when a Disguised Mimikyu's Disguise is busted, upon changing to its Busted Form it loses HP equal to 1/8 of its maximum HP.
+#define B_ABILITY_TRIGGER_CHANCE GEN_LATEST // In Gen3, Shed Skin, Cute Charm, Flame Body, Static and Poison Point have a 1/3 chance to trigger. In Gen 4+ it's 30%.
+ // In Gen3, Effect Spore has a 10% chance to sleep, poison or paralyze, with an equal chance.
+ // In Gen4, it's 30%. In Gen5+ it has 11% to sleep, 9% chance to poison and 10% chance to paralyze.
// Item settings
#define B_HP_BERRIES GEN_LATEST // In Gen4+, berries which restore HP activate immediately after HP drops to half. In Gen3, the effect occurs at the end of the turn.
@@ -153,8 +159,9 @@
#define B_X_ITEMS_BUFF GEN_LATEST // In Gen7+, the X Items raise a stat by 2 stages instead of 1.
#define B_MENTAL_HERB GEN_LATEST // In Gen5+, the Mental Herb cures Taunt, Encore, Torment, Heal Block, and Disable in addition to Infatuation from before.
#define B_TRAINERS_KNOCK_OFF_ITEMS TRUE // If TRUE, trainers can steal/swap your items (non-berries are restored after battle). In vanilla games trainers cannot steal items.
+#define B_RETURN_STOLEN_NPC_ITEMS GEN_LATEST // In Gen5+, Thief and Covet no longer steal items from NPCs.
#define B_RESTORE_HELD_BATTLE_ITEMS GEN_LATEST // In Gen9, all non-berry items are restored after battle.
-#define B_SOUL_DEW_BOOST GEN_6 // In Gens3-6, Soul Dew boosts Latis' Sp. Atk and Sp. Def. In Gen7+ it boosts the power of their Psychic and Dragon type moves instead.
+#define B_SOUL_DEW_BOOST GEN_LATEST // In Gens3-6, Soul Dew boosts Latis' Sp. Atk and Sp. Def. In Gen7+ it boosts the power of their Psychic and Dragon type moves instead.
#define B_NET_BALL_MODIFIER GEN_LATEST // In Gen7+, Net Ball's catch multiplier is x5 instead of x3.
#define B_DIVE_BALL_MODIFIER GEN_LATEST // In Gen4+, Dive Ball's effectiveness increases by when Surfing or Fishing.
#define B_NEST_BALL_MODIFIER GEN_LATEST // Nest Ball's formula varies depending on the Gen. See Cmd_handleballthrow.
@@ -174,11 +181,13 @@
// Eg: Replace with FLAG_UNUSED_0x264 so you can use that flag to toggle the feature.
#define B_FLAG_INVERSE_BATTLE 0 // If this flag is set, the battle's type effectiveness are inversed. For example, fire is super effective against water.
#define B_FLAG_FORCE_DOUBLE_WILD 0 // If this flag is set, all land and surfing wild battles will be double battles.
-#define B_SMART_WILD_AI_FLAG 0x495 // If not 0, you can set this flag in a script to enable smart wild pokemon
+#define B_SMART_WILD_AI_FLAG 0 // If not 0, you can set this flag in a script to enable smart wild pokemon
#define B_FLAG_NO_BAG_USE 0 // If this flag is set, the ability to use the bag in battle is disabled.
#define B_FLAG_NO_CATCHING 0 // If this flag is set, the ability to catch wild Pokémon is disabled.
#define B_FLAG_AI_VS_AI_BATTLE 0 // If this flag is set, the player's mons will be controlled by the ai next battles.
#define B_FLAG_DYNAMAX_BATTLE 0 // If this flag is set, the ability to Dynamax in battle is enabled for all trainers.
+#define B_FLAG_TERA_ORB_CHARGED 0 // If this flag is set, the Tera Orb is charged. It is automatically set upon healing and cleared upon Terastallizing once configured.
+#define B_FLAG_TERA_ORB_NO_COST 0 // If this flag is set, the Tera Orb does not use up its charge upon Terastallization. In S/V, this occurs after an event with Terapagos.
// Var Settings
// To use the following features in scripting, replace the 0s with the var ID you're assigning it to.
@@ -198,7 +207,6 @@
// 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.
-#define B_FOG_TERRAIN TRUE // If TRUE, overworld Fog generates Misty Terrain as in Gen 8.
#define B_TERRAIN_TYPE_BOOST GEN_LATEST // In Gen8, damage is boosted by 30% instead of 50%.
#define B_SECRET_POWER_EFFECT GEN_LATEST // Secret Power's effects change depending on terrain and generation. See MOVE_EFFECT_SECRET_POWER's case in `SetMoveEffect`.
#define B_SECRET_POWER_ANIMATION GEN_LATEST // Secret Power's animations change depending on terrain and generation.
@@ -208,13 +216,15 @@
// Interface settings
#define B_ABILITY_POP_UP TRUE // In Gen5+, the Pokémon abilities are displayed in a pop-up, when they activate in battle.
#define B_FAST_INTRO TRUE // If set to TRUE, battle intro texts print at the same time as animation of a Pokémon, as opposing to waiting for the animation to end.
-#define B_FAST_HP_DRAIN TRUE // If set to TRUE, HP bars will move faster to accomodate higher max HP amounts.
+#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 TRUE, move names are increased from 12 characters to 16 characters.
-#define B_WAIT_TIME_MULTIPLIER 10 // 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 TRUE // If set to TRUE, pushing B in the battle options against a wild encounter will move the cursor to the run option
+#define B_EXPANDED_MOVE_NAMES TRUE // If set to FALSE, move names are decreased from 16 characters to 12 characters.
+#define B_WAIT_TIME_MULTIPLIER 16 // This determines how long text pauses in battle last. Vanilla is 16. Lower values result in faster battles.
+#define B_QUICK_MOVE_CURSOR_TO_RUN FALSE // If set to TRUE, pushing B in the battle options against a wild encounter will move the cursor to the run option
+#define B_MOVE_DESCRIPTION_BUTTON L_BUTTON // If set to a button other than B_LAST_USED_BALL_BUTTON, pressing this button will open the move description menu
// Catching settings
#define B_SEMI_INVULNERABLE_CATCH GEN_LATEST // In Gen4+, you cannot throw a ball against a Pokemon that is in a semi-invulnerable state (dig/fly/etc)
@@ -225,7 +235,7 @@
#define B_LAST_USED_BALL_CYCLE TRUE // If TRUE, then holding B_LAST_USED_BALL_BUTTON while pressing the D-Pad cycles through the balls
// Other settings
-#define B_DOUBLE_WILD_CHANCE 10 // % chance of encountering two Pokémon in a Wild Encounter.
+#define B_DOUBLE_WILD_CHANCE 0 // % chance of encountering two Pokémon in a Wild Encounter.
#define B_DOUBLE_WILD_REQUIRE_2_MONS FALSE // If set to TRUE, Wild Double Battles will default to Single Battles when the player only has 1 usable Pokémon, ignoring B_DOUBLE_WILD_CHANCE and B_FLAG_FORCE_DOUBLE_WILD.
#define B_MULTI_BATTLE_WHITEOUT GEN_LATEST // In Gen4+, multi battles end when the Player and also their Partner don't have any more Pokémon to fight.
#define B_EVOLUTION_AFTER_WHITEOUT GEN_LATEST // In Gen6+, Pokemon that qualify for evolution after battle will evolve even if the player loses.
@@ -235,26 +245,32 @@
#define B_TRAINER_MON_RANDOM_ABILITY FALSE // If this is set to TRUE a random legal ability will be generated for a trainer mon
#define B_OBEDIENCE_MECHANICS GEN_LATEST // In PLA+ (here Gen8+), obedience restrictions also apply to non-outsider Pokémon, albeit based on their level met rather than actual level
#define B_USE_FROSTBITE FALSE // In PLA, Frostbite replaces Freeze. Enabling this flag does the same here. Moves can still be cherry-picked to either Freeze or Frostbite. Freeze-Dry, Secret Power & Tri Attack depend on this config.
-#define B_OVERWORLD_SNOW GEN_LATEST // In Gen9+, overworld Snow will summon snow instead of hail.
+#define B_OVERWORLD_SNOW GEN_LATEST // In Gen9+, overworld Snow will summon snow instead of hail in battle.
+#define B_OVERWORLD_FOG GEN_LATEST // In Gen8+, overworld Fog summons Misty Terrain in battle. In Gen4 only, overworld Fog summons the unique fog weather condition in battle.
#define B_TOXIC_REVERSAL GEN_LATEST // In Gen5+, bad poison will change to regular poison at the end of battles.
#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.
#endif // GUARD_CONFIG_BATTLE_H
diff --git a/include/config/debug.h b/include/config/debug.h
index 84d38e4fd0eb..52810628dfd0 100644
--- a/include/config/debug.h
+++ b/include/config/debug.h
@@ -12,6 +12,6 @@
#define DEBUG_AI_DELAY_TIMER FALSE // If set to TRUE, displays the number of frames it takes for the AI to choose a move. Replaces the "What will PKMN do" text. Useful for devs or anyone who modifies the AI code and wants to see if it doesn't take too long to run.
// Pokémon Debug
-#define DEBUG_POKEMON_MENU TRUE // Enables a debug menu for pokemon sprites and icons, accessed by pressing SELECT in the summary screen.
+#define DEBUG_POKEMON_SPRITE_VISUALIZER TRUE // Enables a debug menu for Pokémon sprites and icons, accessed by pressing Select in the summary screen.
#endif // GUARD_CONFIG_DEBUG_H
diff --git a/include/config.h b/include/config/general.h
similarity index 84%
rename from include/config.h
rename to include/config/general.h
index 41695a77b4ee..dc39f4919a3f 100644
--- a/include/config.h
+++ b/include/config/general.h
@@ -1,5 +1,5 @@
-#ifndef GUARD_CONFIG_H
-#define GUARD_CONFIG_H
+#ifndef GUARD_CONFIG_GENERAL_H
+#define GUARD_CONFIG_GENERAL_H
// In the Generation 3 games, Asserts were used in various debug builds.
// Ruby/Sapphire and Emerald do not have these asserts while Fire Red
@@ -53,7 +53,7 @@
#define POKEMON_EXPANSION
#define ITEM_EXPANSION
-// Generation constants used in configs to define behavior
+// Generation constants used in configs to define behavior.
#define GEN_1 0
#define GEN_2 1
#define GEN_3 2
@@ -63,6 +63,7 @@
#define GEN_7 6
#define GEN_8 7
#define GEN_9 8
+// Changing GEN_LATEST's value to a different Generation will change every default setting that uses it at once.
#define GEN_LATEST GEN_9
// General settings
@@ -70,6 +71,7 @@
#define POKEDEX_PLUS_HGSS FALSE // If TRUE, enables the custom HGSS style Pokedex.
#define SUMMARY_SCREEN_NATURE_COLORS TRUE // If TRUE, nature-based stat boosts and reductions will be red and blue in the summary screen.
#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".
// Measurement system constants to be used for UNITS
#define UNITS_IMPERIAL 0 // Inches, feet, pounds
@@ -78,4 +80,7 @@
#define UNITS UNITS_IMPERIAL
#define CHAR_DEC_SEPARATOR CHAR_PERIOD // CHAR_PERIOD is used as a decimal separator only in the UK and the US. The rest of the world uses CHAR_COMMA.
-#endif // GUARD_CONFIG_H
+// Naming Screen
+#define AUTO_LOWERCASE_KEYBOARD GEN_LATEST // Starting in GEN_6, after entering the first uppercase character, the keyboard switches to lowercase letters.
+
+#endif // GUARD_CONFIG_GENERAL_H
diff --git a/include/config/item.h b/include/config/item.h
index 461c20e94828..9dfe8d902ced 100644
--- a/include/config/item.h
+++ b/include/config/item.h
@@ -2,6 +2,7 @@
#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.
@@ -36,4 +37,9 @@
// Vs. Seeker
#define I_VS_SEEKER_CHARGING VS_SEEKER_CHARGING // If this flag is assigned, the Vs Seeker functionality will be enabled. When the player has the Vs. Seeker, Match Call rematch functions will stop working.
+//Fishing
+#define I_FISHING_CHAIN FALSE // Introduced in XY, hooking the same Pokémon repeatedly will increase the odds of that mon being shiny. NOTE: This implementation is an approximation of the actual feature, as XY have not been throughoutly documented or datamined.
+#define I_FISHING_MINIGAME GEN_3 // Each generation uses a variation of reeling in Pokémon once they have been hooked.
+#define I_FISHING_PROXIMITY FALSE // Introduced in XY, fishing away from other people in enclosed areas will increase the chances of a Pokémon being hooked. NOTE: This implementation is an approximation of the actual feature, as XY have not been throughoutly documented or datamined.
+
#endif // GUARD_CONFIG_ITEM_H
diff --git a/include/config/overworld.h b/include/config/overworld.h
index 06a396d4ddd6..b6664269960c 100644
--- a/include/config/overworld.h
+++ b/include/config/overworld.h
@@ -6,18 +6,19 @@
// Other settings
#define OW_POISON_DAMAGE GEN_LATEST // In Gen4, Pokémon no longer faint from Poison in the overworld. In Gen5+, they no longer take damage at all.
-#define OW_TIMES_OF_DAY GEN_LATEST // Different generations have the times of day change at different times.
#define OW_DOUBLE_APPROACH_WITH_ONE_MON FALSE // If enabled, you can be spotted by two trainers at the same time even if you only have one eligible Pokémon in your party.
+#define OW_HIDE_REPEAT_MAP_POPUP FALSE // If enabled, map popups will not appear if entering a map with the same Map Section Id as the last.
+
+// 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
// PC settings
#define OW_PC_PRESS_B GEN_LATEST // In Gen4, pressing B when holding a Pokémon is equivalent to placing it. In Gen3, it gives the "You're holding a Pokémon!" error.
#define OW_PC_JAPAN_WALDA_ICONS TRUE // In the US release of Emerald, the Cross, Bolt, and Plusle icons for Walda's wallpapers were left blank from the Japan release. Setting this to TRUE will restore them.
#define OW_PC_HEAL GEN_LATEST // In Gen8+, Pokémon are not healed when deposited in the PC.
-
-// Berry settings
-// These generational defines only make a distinction for Berries!
-#define GEN_6_XY GEN_6
-#define GEN_6_ORAS GEN_LATEST + 1
+#define OW_PC_MOVE_ORDER GEN_LATEST // Starting in Gen4, the order of options in the PC menu change.
+#define OW_PC_RELEASE_ITEM GEN_LATEST // In Gen8+, Pokémon that get released with a held item return it to the bag.
#define OW_BERRY_MUTATIONS FALSE // If enabled, Berry plants can mutate based on berries planted next to them.
#define OW_BERRY_MUTATION_CHANCE 25 // Determines the % chance of a mutation.
@@ -32,27 +33,68 @@
#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.
+// 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))
+#define OW_SUBSTITUTE_PLACEHOLDER TRUE // Use a substitute OW for Pokémon that are missing overworld sprites
+#define OW_LARGE_OW_SUPPORT TRUE // If true, adds a small amount of overhead to OW code so that large (48x48, 64x64) OWs will display correctly under bridges, etc.
+#define OW_PKMN_OBJECTS_SHARE_PALETTES FALSE // [WIP!! NOT ALL PALETTES HAVE BEEN ADJUSTED FOR THIS!!] If TRUE, follower palettes are taken from battle sprites.
+#define OW_GFX_COMPRESS TRUE // Adds support for compressed OW graphics, (Also compresses pokemon follower graphics).
+ // Compressed gfx are incompatible with non-power-of-two sprite sizes:
+ // (You should not use 48x48 sprites/tables for compressed gfx)
+ // 16x32, 32x32, 64x64 etc are fine
+// Follower Pokémon
+#define OW_FOLLOWERS_ENABLED FALSE // Enables follower Pokémon, HGSS style. Requires OW_POKEMON_OBJECT_EVENTS. Note that additional scripting may be required for them to be fully supported!
+#define OW_FOLLOWERS_BOBBING TRUE // If true, follower pokemon will bob up and down during their idle & walking animations
+#define OW_FOLLOWERS_POKEBALLS TRUE // Followers will emerge from the pokeball they are stored in, instead of a normal pokeball
+
// Out-of-battle Ability effects
-#define OW_SYNCHRONIZE_NATURE GEN_LATEST // In Gen8, if a Pokémon with Synchronize is leading the party, it's 100% guaranteed that wild Pokémon will have the same Nature, as opposed to 50% previously. Stationary Pokémon are excluded in Gen3. In Gen6, all No Eggs Discovered gift Pokémon will have the same Nature, while in Gen7 all gift Pokémon will, regardless of Egg Group - In Gen 8, no gift Pokémon are affected. In Gen9, this ability has no out-of-battle effect.
-#define OW_COMPOUND_EYES GEN_LATEST // Prior to Gen9, if a Pokémon with Compound Eyes is leading the party, the wild held item rate is increased to 60%/20%.
-#define OW_SUPER_LUCK GEN_LATEST // In Gen8, if a Pokémon with Super Luck is leading the party, the wild held item rate is increased to 60%/20%.
-#define OW_CUTE_CHARM GEN_LATEST // Prior to Gen9, if a Pokémon with Cute Charm is leading the party, wild encounters have a 66.7% chance to be forced to be of the opposite gender.
-#define OW_ILLUMINATE GEN_LATEST // Prior to Gen9, if a Pokémon with Illuminate is leading the party, the wild encounter rate is doubled.
-#define OW_INFILTRATOR GEN_LATEST // In Gen8, if a Pokémon with Infiltrator is leading the party, the wild encounter rate is halved.
-#define OW_HARVEST GEN_LATEST // In Gen8, if a Pokémon with Harvest is leading the party, there is a 50% chance to encounter a Grass-type Pokémon.
-#define OW_LIGHTNING_ROD GEN_LATEST // In Gen8, if a Pokémon with Lightning Rod is leading the party, there is a 50% chance to encounter an Electric-type Pokémon.
-#define OW_STORM_DRAIN GEN_LATEST // In Gen8, if a Pokémon with Storm Drain is leading the party, there is a 50% chance to encounter a Water-type Pokémon.
-#define OW_FLASH_FIRE GEN_LATEST // In Gen8, if a Pokémon with Flash Fire is leading the party, there is a 50% chance to encounter a Fire-type Pokémon.
-#define OW_MAGNET_PULL GEN_LATEST // Prior to Gen9, if a Pokémon with Magnet Pull is leading the party, there is a 50% chance to encounter a Steel-type Pokémon.
-#define OW_STATIC GEN_LATEST // Prior to Gen9, if a Pokémon with Static is leading the party, there is a 50% chance to encounter an Electric-type Pokémon.
+#define OW_SYNCHRONIZE_NATURE GEN_LATEST // In Gen8+, if a Pokémon with Synchronize leads the party, wild Pokémon will always have their same Nature as opposed to the 50% chance in previous games. Gift Pokémon excluded.
+ // In USUM (here GEN_7), if a Pokémon with Synchronize leads the party, gift Pokémon will always have their same Nature regardless of their Egg Group.
+ // In ORAS (here GEN_6), if a Pokémon with Synchronize leads the party, gift Pokémon from the No Eggs Discovered Egg Group will always have their same Nature.
+#define OW_SUPER_LUCK GEN_LATEST // In Gen8+, if a Pokémon with Super Luck is leading the party, the wild held item rate is increased to 60%/20%.
+#define OW_INFILTRATOR GEN_LATEST // In Gen8+, if a Pokémon with Infiltrator is leading the party, the wild encounter rate is halved.
+#define OW_HARVEST GEN_LATEST // In Gen8+, if a Pokémon with Harvest is leading the party, there is a 50% chance to encounter a Grass-type Pokémon.
+#define OW_LIGHTNING_ROD GEN_LATEST // In Gen8+, if a Pokémon with Lightning Rod is leading the party, there is a 50% chance to encounter an Electric-type Pokémon.
+#define OW_STORM_DRAIN GEN_LATEST // In Gen8+, if a Pokémon with Storm Drain is leading the party, there is a 50% chance to encounter a Water-type Pokémon.
+#define OW_FLASH_FIRE GEN_LATEST // In Gen8+, if a Pokémon with Flash Fire is leading the party, there is a 50% chance to encounter a Fire-type Pokémon.
+
+// These generational defines only make a distinction for OW_ALTERED_TIME_RATIO
+#define GEN_8_PLA GEN_LATEST + 2
+
+//Time
+#define OW_TIMES_OF_DAY GEN_LATEST // Different generations have the times of day change at different times.
+#define OW_USE_FAKE_RTC FALSE // When TRUE, seconds on the in-game clock will only advance once every 60 playTimeVBlanks (every 60 frames).
+#define OW_ALTERED_TIME_RATIO GEN_LATEST // In GEN_8_PLA, the time in game moves forward 60 seconds for every second in the RTC. In GEN_9, it is 20 seconds. This has no effect if OW_USE_FAKE_RTC is FALSE.
// Overworld flags
// To use the following features in scripting, replace the 0s with the flag ID you're assigning it to.
// Eg: Replace with FLAG_UNUSED_0x264 so you can use that flag to toggle the feature.
+#define OW_FLAG_PAUSE_TIME 0 // If this flag is set and OW_USE_FAKE_RTC is enabled, seconds on the in-game clock will not advance.
#define OW_FLAG_NO_ENCOUNTER 0 // If this flag is set, wild encounters will be disabled.
#define OW_FLAG_NO_TRAINER_SEE 0 // If this flag is set, trainers will not battle the player unless they're talked to.
#define OW_FLAG_NO_COLLISION 0 // If this flag is set, the player will be able to walk over tiles with collision. Mainly intended for debugging purposes.
#define BATTLE_PYRAMID_RANDOM_ENCOUNTERS FALSE // If set to TRUE, battle pyramid Pokemon will be generated randomly based on the round's challenge instead of hardcoded in src/data/battle_frontier/battle_pyramid_level_50_wild_mons.h (or open_level_wild_mons.h)
+// Map pop-up config
+#define OW_POPUP_GENERATION GEN_3 // Different generations display location names in overworld pop-ups differently.
+ // Only choies are currently GEN_3 and GEN_5, all others will default to Gen3 pop-ups.
+
+// Gen5 map pop-up config
+// Constants
+#define OW_POPUP_BW_TIME_NONE 0 // Don't show the time
+#define OW_POPUP_BW_TIME_12_HR 1 // Use 12 hour (AM/PM) time
+#define OW_POPUP_BW_TIME_24_HR 2 // Use 24 hour time
+
+#define OW_POPUP_BW_COLOR_BLACK 0 // Black pop-up from B2
+#define OW_POPUP_BW_COLOR_WHITE 1 // White pop-up from W2
+
+// Configuration
+#define OW_POPUP_BW_COLOR OW_POPUP_BW_COLOR_BLACK // B2W2 use different colors for their map pop-ups.
+#define OW_POPUP_BW_TIME_MODE OW_POPUP_BW_TIME_NONE // Determines what type of time is shown.
+#define OW_POPUP_BW_ALPHA_BLEND FALSE // Enables alpha blending/transparency for the pop-ups. Mainly intended to be used with the black color option.
+
+// Pokémon Center
+#define OW_IGNORE_EGGS_ON_HEAL GEN_LATEST // In Gen 4+, the nurse in the Pokémon Center does not heal Eggs on healing machine.
+
#endif // GUARD_CONFIG_OVERWORLD_H
diff --git a/include/config/pokemon.h b/include/config/pokemon.h
index 5c5df6f939ab..81a809bd1bdd 100644
--- a/include/config/pokemon.h
+++ b/include/config/pokemon.h
@@ -36,14 +36,21 @@
#define P_SHEDINJA_BALL GEN_LATEST // Since Gen 4, Shedinja requires a Poké Ball for its evolution. In Gen 3, Shedinja inherits Nincada's Ball.
#define P_KADABRA_EVERSTONE GEN_LATEST // Since Gen 4, Kadabra can evolve even when holding an Everstone.
#define P_SHUCKLE_BERRY_JUICE GEN_LATEST // In Gen 2, Shuckle had a 1/16 chance of converting Berry that it's holding into Berry Juice. Enabling this will allow Shuckle to do this with an Oran Berry, which is the spiritual succesor of the Berry item.
+#define P_ARCEUS_UNIQUE_FORM_ICONS GEN_LATEST // Since Gen 9, Arceus additionally changes its icon to reflect its current form.
// Other settings
-#define P_CUSTOM_GENDER_DIFF_ICONS TRUE // If TRUE, will give more Pokémon custom icons for their female forms, i.e. Hippopotas and Hippowdon
-#define P_FOOTPRINTS TRUE // If TRUE, Pokémon will have footprints (as was the case up to Gen 5 and in BDSP). Disabling this saves some ROM space.
-#define P_LEGENDARY_PERFECT_IVS GEN_LATEST // Since Gen 6, Legendaries, Mythicals and Ultra Beasts found in the wild or given through gifts have at least 3 perfect IVs.
-#define P_EV_CAP GEN_LATEST // Since Gen 6, the max EVs per stat is 252 instead of 255.
-#define P_SHOW_TERA_TYPE GEN_8 // Since Gen 9, the Tera Type is shown on the summary screen.
-#define P_TM_LITERACY GEN_LATEST // Since Gen 6, TM illiterate Pokémon can learn TMs that teach moves that are in their level-up learnsets.
+#define P_CUSTOM_GENDER_DIFF_ICONS TRUE // If TRUE, will give more Pokémon custom icons for their female forms, i.e. Hippopotas and Hippowdon
+#define P_FOOTPRINTS TRUE // If TRUE, Pokémon will have footprints (as was the case up to Gen 5 and in BDSP). Disabling this saves some ROM space.
+#define P_CRIES_ENABLED TRUE // If TRUE, Pokémon will have cries. Disabling this saves around a LOT of ROM space (over 25%!), but instead we recommend disabling individual unused Pokémon families in include/config/species_enabled.h.
+#define P_LEGENDARY_PERFECT_IVS GEN_LATEST // Since Gen 6, Legendaries, Mythicals and Ultra Beasts found in the wild or given through gifts have at least 3 perfect IVs.
+#define P_EV_CAP GEN_LATEST // Since Gen 6, the max EVs per stat is 252 instead of 255.
+#define P_SHOW_TERA_TYPE GEN_8 // Since Gen 9, the Tera Type is shown on the summary screen.
+#define P_TM_LITERACY GEN_LATEST // Since Gen 6, TM illiterate Pokémon can learn TMs that teach moves that are in their level-up learnsets.
+#define P_CAN_FORGET_HIDDEN_MOVE FALSE // If TRUE, Pokémon can forget any move, even if it is a Hidden Move.
+#define P_EGG_CYCLE_LENGTH GEN_LATEST // Since Gen 8, egg cycles take half as many steps as before.
+#define P_TWO_FRAME_FRONT_SPRITES TRUE // In Pokémon Emerald, Pokémon front sprites always consist of two frames. This config can revert it to only use the first frame, as is the case in the other Gen 3 games.
+#define P_ONLY_OBTAINABLE_SHINIES FALSE // If TRUE, Pokémon encountered in the Battle Pyramid won't be shiny.
+#define P_NO_SHINIES_WITHOUT_POKEBALLS FALSE // If TRUE, Pokémon encountered when the player is out of Poké Balls won't be shiny
// Learnset helper toggles
#define P_LEARNSET_HELPER_TEACHABLE TRUE // If TRUE, teachable_learnsets.h will be populated by tools/learnset_helpers/teachable.py using the included JSON files based on available TMs and tutors.
diff --git a/include/config/test.h b/include/config/test.h
new file mode 100644
index 000000000000..bd721beb9d60
--- /dev/null
+++ b/include/config/test.h
@@ -0,0 +1,1138 @@
+#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
+#undef P_PRIMAL_REVERSIONS
+#define P_PRIMAL_REVERSIONS TRUE
+#undef P_ULTRA_BURST_FORMS
+#define P_ULTRA_BURST_FORMS TRUE
+#undef P_GIGANTAMAX_FORMS
+#define P_GIGANTAMAX_FORMS TRUE
+#undef P_TERA_FORMS
+#define P_TERA_FORMS TRUE
+#undef P_FUSION_FORMS
+#define P_FUSION_FORMS TRUE
+#undef P_ALOLAN_FORMS
+#define P_ALOLAN_FORMS TRUE
+#undef P_GALARIAN_FORMS
+#define P_GALARIAN_FORMS TRUE
+#undef P_HISUIAN_FORMS
+#define P_HISUIAN_FORMS TRUE
+#undef P_PALDEAN_FORMS
+#define P_PALDEAN_FORMS TRUE
+#undef P_PIKACHU_EXTRA_FORMS
+#define P_PIKACHU_EXTRA_FORMS TRUE
+#undef P_COSPLAY_PIKACHU_FORMS
+#define P_COSPLAY_PIKACHU_FORMS TRUE
+#undef P_CAP_PIKACHU_FORMS
+#define P_CAP_PIKACHU_FORMS TRUE
+#undef P_GEN_2_CROSS_EVOS
+#define P_GEN_2_CROSS_EVOS TRUE
+#undef P_GEN_3_CROSS_EVOS
+#define P_GEN_3_CROSS_EVOS TRUE
+#undef P_GEN_4_CROSS_EVOS
+#define P_GEN_4_CROSS_EVOS TRUE
+#undef P_GEN_6_CROSS_EVOS
+#define P_GEN_6_CROSS_EVOS TRUE
+#undef P_GEN_8_CROSS_EVOS
+#define P_GEN_8_CROSS_EVOS TRUE
+#undef P_GEN_9_CROSS_EVOS
+#define P_GEN_9_CROSS_EVOS TRUE
+
+#undef P_FAMILY_BULBASAUR
+#define P_FAMILY_BULBASAUR TRUE
+#undef P_FAMILY_CHARMANDER
+#define P_FAMILY_CHARMANDER TRUE
+#undef P_FAMILY_SQUIRTLE
+#define P_FAMILY_SQUIRTLE TRUE
+#undef P_FAMILY_CATERPIE
+#define P_FAMILY_CATERPIE TRUE
+#undef P_FAMILY_WEEDLE
+#define P_FAMILY_WEEDLE TRUE
+#undef P_FAMILY_PIDGEY
+#define P_FAMILY_PIDGEY TRUE
+#undef P_FAMILY_RATTATA
+#define P_FAMILY_RATTATA TRUE
+#undef P_FAMILY_SPEAROW
+#define P_FAMILY_SPEAROW TRUE
+#undef P_FAMILY_EKANS
+#define P_FAMILY_EKANS TRUE
+#undef P_FAMILY_PIKACHU
+#define P_FAMILY_PIKACHU TRUE
+#undef P_FAMILY_SANDSHREW
+#define P_FAMILY_SANDSHREW TRUE
+#undef P_FAMILY_NIDORAN
+#define P_FAMILY_NIDORAN TRUE
+#undef P_FAMILY_CLEFAIRY
+#define P_FAMILY_CLEFAIRY TRUE
+#undef P_FAMILY_VULPIX
+#define P_FAMILY_VULPIX TRUE
+#undef P_FAMILY_JIGGLYPUFF
+#define P_FAMILY_JIGGLYPUFF TRUE
+#undef P_FAMILY_ZUBAT
+#define P_FAMILY_ZUBAT TRUE
+#undef P_FAMILY_ODDISH
+#define P_FAMILY_ODDISH TRUE
+#undef P_FAMILY_PARAS
+#define P_FAMILY_PARAS TRUE
+#undef P_FAMILY_VENONAT
+#define P_FAMILY_VENONAT TRUE
+#undef P_FAMILY_DIGLETT
+#define P_FAMILY_DIGLETT TRUE
+#undef P_FAMILY_MEOWTH
+#define P_FAMILY_MEOWTH TRUE
+#undef P_FAMILY_PSYDUCK
+#define P_FAMILY_PSYDUCK TRUE
+#undef P_FAMILY_MANKEY
+#define P_FAMILY_MANKEY TRUE
+#undef P_FAMILY_GROWLITHE
+#define P_FAMILY_GROWLITHE TRUE
+#undef P_FAMILY_POLIWAG
+#define P_FAMILY_POLIWAG TRUE
+#undef P_FAMILY_ABRA
+#define P_FAMILY_ABRA TRUE
+#undef P_FAMILY_MACHOP
+#define P_FAMILY_MACHOP TRUE
+#undef P_FAMILY_BELLSPROUT
+#define P_FAMILY_BELLSPROUT TRUE
+#undef P_FAMILY_TENTACOOL
+#define P_FAMILY_TENTACOOL TRUE
+#undef P_FAMILY_GEODUDE
+#define P_FAMILY_GEODUDE TRUE
+#undef P_FAMILY_PONYTA
+#define P_FAMILY_PONYTA TRUE
+#undef P_FAMILY_SLOWPOKE
+#define P_FAMILY_SLOWPOKE TRUE
+#undef P_FAMILY_MAGNEMITE
+#define P_FAMILY_MAGNEMITE TRUE
+#undef P_FAMILY_FARFETCHD
+#define P_FAMILY_FARFETCHD TRUE
+#undef P_FAMILY_DODUO
+#define P_FAMILY_DODUO TRUE
+#undef P_FAMILY_SEEL
+#define P_FAMILY_SEEL TRUE
+#undef P_FAMILY_GRIMER
+#define P_FAMILY_GRIMER TRUE
+#undef P_FAMILY_SHELLDER
+#define P_FAMILY_SHELLDER TRUE
+#undef P_FAMILY_GASTLY
+#define P_FAMILY_GASTLY TRUE
+#undef P_FAMILY_ONIX
+#define P_FAMILY_ONIX TRUE
+#undef P_FAMILY_DROWZEE
+#define P_FAMILY_DROWZEE TRUE
+#undef P_FAMILY_KRABBY
+#define P_FAMILY_KRABBY TRUE
+#undef P_FAMILY_VOLTORB
+#define P_FAMILY_VOLTORB TRUE
+#undef P_FAMILY_EXEGGCUTE
+#define P_FAMILY_EXEGGCUTE TRUE
+#undef P_FAMILY_CUBONE
+#define P_FAMILY_CUBONE TRUE
+#undef P_FAMILY_HITMONS
+#define P_FAMILY_HITMONS TRUE
+#undef P_FAMILY_LICKITUNG
+#define P_FAMILY_LICKITUNG TRUE
+#undef P_FAMILY_KOFFING
+#define P_FAMILY_KOFFING TRUE
+#undef P_FAMILY_RHYHORN
+#define P_FAMILY_RHYHORN TRUE
+#undef P_FAMILY_CHANSEY
+#define P_FAMILY_CHANSEY TRUE
+#undef P_FAMILY_TANGELA
+#define P_FAMILY_TANGELA TRUE
+#undef P_FAMILY_KANGASKHAN
+#define P_FAMILY_KANGASKHAN TRUE
+#undef P_FAMILY_HORSEA
+#define P_FAMILY_HORSEA TRUE
+#undef P_FAMILY_GOLDEEN
+#define P_FAMILY_GOLDEEN TRUE
+#undef P_FAMILY_STARYU
+#define P_FAMILY_STARYU TRUE
+#undef P_FAMILY_MR_MIME
+#define P_FAMILY_MR_MIME TRUE
+#undef P_FAMILY_SCYTHER
+#define P_FAMILY_SCYTHER TRUE
+#undef P_FAMILY_JYNX
+#define P_FAMILY_JYNX TRUE
+#undef P_FAMILY_ELECTABUZZ
+#define P_FAMILY_ELECTABUZZ TRUE
+#undef P_FAMILY_MAGMAR
+#define P_FAMILY_MAGMAR TRUE
+#undef P_FAMILY_PINSIR
+#define P_FAMILY_PINSIR TRUE
+#undef P_FAMILY_TAUROS
+#define P_FAMILY_TAUROS TRUE
+#undef P_FAMILY_MAGIKARP
+#define P_FAMILY_MAGIKARP TRUE
+#undef P_FAMILY_LAPRAS
+#define P_FAMILY_LAPRAS TRUE
+#undef P_FAMILY_DITTO
+#define P_FAMILY_DITTO TRUE
+#undef P_FAMILY_EEVEE
+#define P_FAMILY_EEVEE TRUE
+#undef P_FAMILY_PORYGON
+#define P_FAMILY_PORYGON TRUE
+#undef P_FAMILY_OMANYTE
+#define P_FAMILY_OMANYTE TRUE
+#undef P_FAMILY_KABUTO
+#define P_FAMILY_KABUTO TRUE
+#undef P_FAMILY_AERODACTYL
+#define P_FAMILY_AERODACTYL TRUE
+#undef P_FAMILY_SNORLAX
+#define P_FAMILY_SNORLAX TRUE
+#undef P_FAMILY_ARTICUNO
+#define P_FAMILY_ARTICUNO TRUE
+#undef P_FAMILY_ZAPDOS
+#define P_FAMILY_ZAPDOS TRUE
+#undef P_FAMILY_MOLTRES
+#define P_FAMILY_MOLTRES TRUE
+#undef P_FAMILY_DRATINI
+#define P_FAMILY_DRATINI TRUE
+#undef P_FAMILY_MEWTWO
+#define P_FAMILY_MEWTWO TRUE
+#undef P_FAMILY_MEW
+#define P_FAMILY_MEW TRUE
+
+#undef P_FAMILY_CHIKORITA
+#define P_FAMILY_CHIKORITA TRUE
+#undef P_FAMILY_CYNDAQUIL
+#define P_FAMILY_CYNDAQUIL TRUE
+#undef P_FAMILY_TOTODILE
+#define P_FAMILY_TOTODILE TRUE
+#undef P_FAMILY_SENTRET
+#define P_FAMILY_SENTRET TRUE
+#undef P_FAMILY_HOOTHOOT
+#define P_FAMILY_HOOTHOOT TRUE
+#undef P_FAMILY_LEDYBA
+#define P_FAMILY_LEDYBA TRUE
+#undef P_FAMILY_SPINARAK
+#define P_FAMILY_SPINARAK TRUE
+#undef P_FAMILY_CHINCHOU
+#define P_FAMILY_CHINCHOU TRUE
+#undef P_FAMILY_TOGEPI
+#define P_FAMILY_TOGEPI TRUE
+#undef P_FAMILY_NATU
+#define P_FAMILY_NATU TRUE
+#undef P_FAMILY_MAREEP
+#define P_FAMILY_MAREEP TRUE
+#undef P_FAMILY_MARILL
+#define P_FAMILY_MARILL TRUE
+#undef P_FAMILY_SUDOWOODO
+#define P_FAMILY_SUDOWOODO TRUE
+#undef P_FAMILY_HOPPIP
+#define P_FAMILY_HOPPIP TRUE
+#undef P_FAMILY_AIPOM
+#define P_FAMILY_AIPOM TRUE
+#undef P_FAMILY_SUNKERN
+#define P_FAMILY_SUNKERN TRUE
+#undef P_FAMILY_YANMA
+#define P_FAMILY_YANMA TRUE
+#undef P_FAMILY_WOOPER
+#define P_FAMILY_WOOPER TRUE
+#undef P_FAMILY_MURKROW
+#define P_FAMILY_MURKROW TRUE
+#undef P_FAMILY_MISDREAVUS
+#define P_FAMILY_MISDREAVUS TRUE
+#undef P_FAMILY_UNOWN
+#define P_FAMILY_UNOWN TRUE
+#undef P_FAMILY_WOBBUFFET
+#define P_FAMILY_WOBBUFFET TRUE
+#undef P_FAMILY_GIRAFARIG
+#define P_FAMILY_GIRAFARIG TRUE
+#undef P_FAMILY_PINECO
+#define P_FAMILY_PINECO TRUE
+#undef P_FAMILY_DUNSPARCE
+#define P_FAMILY_DUNSPARCE TRUE
+#undef P_FAMILY_GLIGAR
+#define P_FAMILY_GLIGAR TRUE
+#undef P_FAMILY_SNUBBULL
+#define P_FAMILY_SNUBBULL TRUE
+#undef P_FAMILY_QWILFISH
+#define P_FAMILY_QWILFISH TRUE
+#undef P_FAMILY_SHUCKLE
+#define P_FAMILY_SHUCKLE TRUE
+#undef P_FAMILY_HERACROSS
+#define P_FAMILY_HERACROSS TRUE
+#undef P_FAMILY_SNEASEL
+#define P_FAMILY_SNEASEL TRUE
+#undef P_FAMILY_TEDDIURSA
+#define P_FAMILY_TEDDIURSA TRUE
+#undef P_FAMILY_SLUGMA
+#define P_FAMILY_SLUGMA TRUE
+#undef P_FAMILY_SWINUB
+#define P_FAMILY_SWINUB TRUE
+#undef P_FAMILY_CORSOLA
+#define P_FAMILY_CORSOLA TRUE
+#undef P_FAMILY_REMORAID
+#define P_FAMILY_REMORAID TRUE
+#undef P_FAMILY_DELIBIRD
+#define P_FAMILY_DELIBIRD TRUE
+#undef P_FAMILY_MANTINE
+#define P_FAMILY_MANTINE TRUE
+#undef P_FAMILY_SKARMORY
+#define P_FAMILY_SKARMORY TRUE
+#undef P_FAMILY_HOUNDOUR
+#define P_FAMILY_HOUNDOUR TRUE
+#undef P_FAMILY_PHANPY
+#define P_FAMILY_PHANPY TRUE
+#undef P_FAMILY_STANTLER
+#define P_FAMILY_STANTLER TRUE
+#undef P_FAMILY_SMEARGLE
+#define P_FAMILY_SMEARGLE TRUE
+#undef P_FAMILY_MILTANK
+#define P_FAMILY_MILTANK TRUE
+#undef P_FAMILY_RAIKOU
+#define P_FAMILY_RAIKOU TRUE
+#undef P_FAMILY_ENTEI
+#define P_FAMILY_ENTEI TRUE
+#undef P_FAMILY_SUICUNE
+#define P_FAMILY_SUICUNE TRUE
+#undef P_FAMILY_LARVITAR
+#define P_FAMILY_LARVITAR TRUE
+#undef P_FAMILY_LUGIA
+#define P_FAMILY_LUGIA TRUE
+#undef P_FAMILY_HO_OH
+#define P_FAMILY_HO_OH TRUE
+#undef P_FAMILY_CELEBI
+#define P_FAMILY_CELEBI TRUE
+
+#undef P_FAMILY_TREECKO
+#define P_FAMILY_TREECKO TRUE
+#undef P_FAMILY_TORCHIC
+#define P_FAMILY_TORCHIC TRUE
+#undef P_FAMILY_MUDKIP
+#define P_FAMILY_MUDKIP TRUE
+#undef P_FAMILY_POOCHYENA
+#define P_FAMILY_POOCHYENA TRUE
+#undef P_FAMILY_ZIGZAGOON
+#define P_FAMILY_ZIGZAGOON TRUE
+#undef P_FAMILY_WURMPLE
+#define P_FAMILY_WURMPLE TRUE
+#undef P_FAMILY_LOTAD
+#define P_FAMILY_LOTAD TRUE
+#undef P_FAMILY_SEEDOT
+#define P_FAMILY_SEEDOT TRUE
+#undef P_FAMILY_TAILLOW
+#define P_FAMILY_TAILLOW TRUE
+#undef P_FAMILY_WINGULL
+#define P_FAMILY_WINGULL TRUE
+#undef P_FAMILY_RALTS
+#define P_FAMILY_RALTS TRUE
+#undef P_FAMILY_SURSKIT
+#define P_FAMILY_SURSKIT TRUE
+#undef P_FAMILY_SHROOMISH
+#define P_FAMILY_SHROOMISH TRUE
+#undef P_FAMILY_SLAKOTH
+#define P_FAMILY_SLAKOTH TRUE
+#undef P_FAMILY_NINCADA
+#define P_FAMILY_NINCADA TRUE
+#undef P_FAMILY_WHISMUR
+#define P_FAMILY_WHISMUR TRUE
+#undef P_FAMILY_MAKUHITA
+#define P_FAMILY_MAKUHITA TRUE
+#undef P_FAMILY_NOSEPASS
+#define P_FAMILY_NOSEPASS TRUE
+#undef P_FAMILY_SKITTY
+#define P_FAMILY_SKITTY TRUE
+#undef P_FAMILY_SABLEYE
+#define P_FAMILY_SABLEYE TRUE
+#undef P_FAMILY_MAWILE
+#define P_FAMILY_MAWILE TRUE
+#undef P_FAMILY_ARON
+#define P_FAMILY_ARON TRUE
+#undef P_FAMILY_MEDITITE
+#define P_FAMILY_MEDITITE TRUE
+#undef P_FAMILY_ELECTRIKE
+#define P_FAMILY_ELECTRIKE TRUE
+#undef P_FAMILY_PLUSLE
+#define P_FAMILY_PLUSLE TRUE
+#undef P_FAMILY_MINUN
+#define P_FAMILY_MINUN TRUE
+#undef P_FAMILY_VOLBEAT_ILLUMISE
+#define P_FAMILY_VOLBEAT_ILLUMISE TRUE
+#undef P_FAMILY_ROSELIA
+#define P_FAMILY_ROSELIA TRUE
+#undef P_FAMILY_GULPIN
+#define P_FAMILY_GULPIN TRUE
+#undef P_FAMILY_CARVANHA
+#define P_FAMILY_CARVANHA TRUE
+#undef P_FAMILY_WAILMER
+#define P_FAMILY_WAILMER TRUE
+#undef P_FAMILY_NUMEL
+#define P_FAMILY_NUMEL TRUE
+#undef P_FAMILY_TORKOAL
+#define P_FAMILY_TORKOAL TRUE
+#undef P_FAMILY_SPOINK
+#define P_FAMILY_SPOINK TRUE
+#undef P_FAMILY_SPINDA
+#define P_FAMILY_SPINDA TRUE
+#undef P_FAMILY_TRAPINCH
+#define P_FAMILY_TRAPINCH TRUE
+#undef P_FAMILY_CACNEA
+#define P_FAMILY_CACNEA TRUE
+#undef P_FAMILY_SWABLU
+#define P_FAMILY_SWABLU TRUE
+#undef P_FAMILY_ZANGOOSE
+#define P_FAMILY_ZANGOOSE TRUE
+#undef P_FAMILY_SEVIPER
+#define P_FAMILY_SEVIPER TRUE
+#undef P_FAMILY_LUNATONE
+#define P_FAMILY_LUNATONE TRUE
+#undef P_FAMILY_SOLROCK
+#define P_FAMILY_SOLROCK TRUE
+#undef P_FAMILY_BARBOACH
+#define P_FAMILY_BARBOACH TRUE
+#undef P_FAMILY_CORPHISH
+#define P_FAMILY_CORPHISH TRUE
+#undef P_FAMILY_BALTOY
+#define P_FAMILY_BALTOY TRUE
+#undef P_FAMILY_LILEEP
+#define P_FAMILY_LILEEP TRUE
+#undef P_FAMILY_ANORITH
+#define P_FAMILY_ANORITH TRUE
+#undef P_FAMILY_FEEBAS
+#define P_FAMILY_FEEBAS TRUE
+#undef P_FAMILY_CASTFORM
+#define P_FAMILY_CASTFORM TRUE
+#undef P_FAMILY_KECLEON
+#define P_FAMILY_KECLEON TRUE
+#undef P_FAMILY_SHUPPET
+#define P_FAMILY_SHUPPET TRUE
+#undef P_FAMILY_DUSKULL
+#define P_FAMILY_DUSKULL TRUE
+#undef P_FAMILY_TROPIUS
+#define P_FAMILY_TROPIUS TRUE
+#undef P_FAMILY_CHIMECHO
+#define P_FAMILY_CHIMECHO TRUE
+#undef P_FAMILY_ABSOL
+#define P_FAMILY_ABSOL TRUE
+#undef P_FAMILY_SNORUNT
+#define P_FAMILY_SNORUNT TRUE
+#undef P_FAMILY_SPHEAL
+#define P_FAMILY_SPHEAL TRUE
+#undef P_FAMILY_CLAMPERL
+#define P_FAMILY_CLAMPERL TRUE
+#undef P_FAMILY_RELICANTH
+#define P_FAMILY_RELICANTH TRUE
+#undef P_FAMILY_LUVDISC
+#define P_FAMILY_LUVDISC TRUE
+#undef P_FAMILY_BAGON
+#define P_FAMILY_BAGON TRUE
+#undef P_FAMILY_BELDUM
+#define P_FAMILY_BELDUM TRUE
+#undef P_FAMILY_REGIROCK
+#define P_FAMILY_REGIROCK TRUE
+#undef P_FAMILY_REGICE
+#define P_FAMILY_REGICE TRUE
+#undef P_FAMILY_REGISTEEL
+#define P_FAMILY_REGISTEEL TRUE
+#undef P_FAMILY_LATIAS
+#define P_FAMILY_LATIAS TRUE
+#undef P_FAMILY_LATIOS
+#define P_FAMILY_LATIOS TRUE
+#undef P_FAMILY_KYOGRE
+#define P_FAMILY_KYOGRE TRUE
+#undef P_FAMILY_GROUDON
+#define P_FAMILY_GROUDON TRUE
+#undef P_FAMILY_RAYQUAZA
+#define P_FAMILY_RAYQUAZA TRUE
+#undef P_FAMILY_JIRACHI
+#define P_FAMILY_JIRACHI TRUE
+#undef P_FAMILY_DEOXYS
+#define P_FAMILY_DEOXYS TRUE
+
+#undef P_FAMILY_TURTWIG
+#define P_FAMILY_TURTWIG TRUE
+#undef P_FAMILY_CHIMCHAR
+#define P_FAMILY_CHIMCHAR TRUE
+#undef P_FAMILY_PIPLUP
+#define P_FAMILY_PIPLUP TRUE
+#undef P_FAMILY_STARLY
+#define P_FAMILY_STARLY TRUE
+#undef P_FAMILY_BIDOOF
+#define P_FAMILY_BIDOOF TRUE
+#undef P_FAMILY_KRICKETOT
+#define P_FAMILY_KRICKETOT TRUE
+#undef P_FAMILY_SHINX
+#define P_FAMILY_SHINX TRUE
+#undef P_FAMILY_CRANIDOS
+#define P_FAMILY_CRANIDOS TRUE
+#undef P_FAMILY_SHIELDON
+#define P_FAMILY_SHIELDON TRUE
+#undef P_FAMILY_BURMY
+#define P_FAMILY_BURMY TRUE
+#undef P_FAMILY_COMBEE
+#define P_FAMILY_COMBEE TRUE
+#undef P_FAMILY_PACHIRISU
+#define P_FAMILY_PACHIRISU TRUE
+#undef P_FAMILY_BUIZEL
+#define P_FAMILY_BUIZEL TRUE
+#undef P_FAMILY_CHERUBI
+#define P_FAMILY_CHERUBI TRUE
+#undef P_FAMILY_SHELLOS
+#define P_FAMILY_SHELLOS TRUE
+#undef P_FAMILY_DRIFLOON
+#define P_FAMILY_DRIFLOON TRUE
+#undef P_FAMILY_BUNEARY
+#define P_FAMILY_BUNEARY TRUE
+#undef P_FAMILY_GLAMEOW
+#define P_FAMILY_GLAMEOW TRUE
+#undef P_FAMILY_STUNKY
+#define P_FAMILY_STUNKY TRUE
+#undef P_FAMILY_BRONZOR
+#define P_FAMILY_BRONZOR TRUE
+#undef P_FAMILY_CHATOT
+#define P_FAMILY_CHATOT TRUE
+#undef P_FAMILY_SPIRITOMB
+#define P_FAMILY_SPIRITOMB TRUE
+#undef P_FAMILY_GIBLE
+#define P_FAMILY_GIBLE TRUE
+#undef P_FAMILY_RIOLU
+#define P_FAMILY_RIOLU TRUE
+#undef P_FAMILY_HIPPOPOTAS
+#define P_FAMILY_HIPPOPOTAS TRUE
+#undef P_FAMILY_SKORUPI
+#define P_FAMILY_SKORUPI TRUE
+#undef P_FAMILY_CROAGUNK
+#define P_FAMILY_CROAGUNK TRUE
+#undef P_FAMILY_CARNIVINE
+#define P_FAMILY_CARNIVINE TRUE
+#undef P_FAMILY_FINNEON
+#define P_FAMILY_FINNEON TRUE
+#undef P_FAMILY_SNOVER
+#define P_FAMILY_SNOVER TRUE
+#undef P_FAMILY_ROTOM
+#define P_FAMILY_ROTOM TRUE
+#undef P_FAMILY_UXIE
+#define P_FAMILY_UXIE TRUE
+#undef P_FAMILY_MESPRIT
+#define P_FAMILY_MESPRIT TRUE
+#undef P_FAMILY_AZELF
+#define P_FAMILY_AZELF TRUE
+#undef P_FAMILY_DIALGA
+#define P_FAMILY_DIALGA TRUE
+#undef P_FAMILY_PALKIA
+#define P_FAMILY_PALKIA TRUE
+#undef P_FAMILY_HEATRAN
+#define P_FAMILY_HEATRAN TRUE
+#undef P_FAMILY_REGIGIGAS
+#define P_FAMILY_REGIGIGAS TRUE
+#undef P_FAMILY_GIRATINA
+#define P_FAMILY_GIRATINA TRUE
+#undef P_FAMILY_CRESSELIA
+#define P_FAMILY_CRESSELIA TRUE
+#undef P_FAMILY_MANAPHY
+#define P_FAMILY_MANAPHY TRUE
+#undef P_FAMILY_DARKRAI
+#define P_FAMILY_DARKRAI TRUE
+#undef P_FAMILY_SHAYMIN
+#define P_FAMILY_SHAYMIN TRUE
+#undef P_FAMILY_ARCEUS
+#define P_FAMILY_ARCEUS TRUE
+#undef P_FAMILY_VICTINI
+#define P_FAMILY_VICTINI TRUE
+#undef P_FAMILY_SNIVY
+#define P_FAMILY_SNIVY TRUE
+#undef P_FAMILY_TEPIG
+#define P_FAMILY_TEPIG TRUE
+#undef P_FAMILY_OSHAWOTT
+#define P_FAMILY_OSHAWOTT TRUE
+#undef P_FAMILY_PATRAT
+#define P_FAMILY_PATRAT TRUE
+#undef P_FAMILY_LILLIPUP
+#define P_FAMILY_LILLIPUP TRUE
+#undef P_FAMILY_PURRLOIN
+#define P_FAMILY_PURRLOIN TRUE
+#undef P_FAMILY_PANSAGE
+#define P_FAMILY_PANSAGE TRUE
+#undef P_FAMILY_PANSEAR
+#define P_FAMILY_PANSEAR TRUE
+#undef P_FAMILY_PANPOUR
+#define P_FAMILY_PANPOUR TRUE
+#undef P_FAMILY_MUNNA
+#define P_FAMILY_MUNNA TRUE
+#undef P_FAMILY_PIDOVE
+#define P_FAMILY_PIDOVE TRUE
+#undef P_FAMILY_BLITZLE
+#define P_FAMILY_BLITZLE TRUE
+#undef P_FAMILY_ROGGENROLA
+#define P_FAMILY_ROGGENROLA TRUE
+#undef P_FAMILY_WOOBAT
+#define P_FAMILY_WOOBAT TRUE
+#undef P_FAMILY_DRILBUR
+#define P_FAMILY_DRILBUR TRUE
+#undef P_FAMILY_AUDINO
+#define P_FAMILY_AUDINO TRUE
+#undef P_FAMILY_TIMBURR
+#define P_FAMILY_TIMBURR TRUE
+#undef P_FAMILY_TYMPOLE
+#define P_FAMILY_TYMPOLE TRUE
+#undef P_FAMILY_THROH
+#define P_FAMILY_THROH TRUE
+#undef P_FAMILY_SAWK
+#define P_FAMILY_SAWK TRUE
+#undef P_FAMILY_SEWADDLE
+#define P_FAMILY_SEWADDLE TRUE
+#undef P_FAMILY_VENIPEDE
+#define P_FAMILY_VENIPEDE TRUE
+#undef P_FAMILY_COTTONEE
+#define P_FAMILY_COTTONEE TRUE
+#undef P_FAMILY_PETILIL
+#define P_FAMILY_PETILIL TRUE
+#undef P_FAMILY_BASCULIN
+#define P_FAMILY_BASCULIN TRUE
+#undef P_FAMILY_SANDILE
+#define P_FAMILY_SANDILE TRUE
+#undef P_FAMILY_DARUMAKA
+#define P_FAMILY_DARUMAKA TRUE
+#undef P_FAMILY_MARACTUS
+#define P_FAMILY_MARACTUS TRUE
+#undef P_FAMILY_DWEBBLE
+#define P_FAMILY_DWEBBLE TRUE
+#undef P_FAMILY_SCRAGGY
+#define P_FAMILY_SCRAGGY TRUE
+#undef P_FAMILY_SIGILYPH
+#define P_FAMILY_SIGILYPH TRUE
+#undef P_FAMILY_YAMASK
+#define P_FAMILY_YAMASK TRUE
+#undef P_FAMILY_TIRTOUGA
+#define P_FAMILY_TIRTOUGA TRUE
+#undef P_FAMILY_ARCHEN
+#define P_FAMILY_ARCHEN TRUE
+#undef P_FAMILY_TRUBBISH
+#define P_FAMILY_TRUBBISH TRUE
+#undef P_FAMILY_ZORUA
+#define P_FAMILY_ZORUA TRUE
+#undef P_FAMILY_MINCCINO
+#define P_FAMILY_MINCCINO TRUE
+#undef P_FAMILY_GOTHITA
+#define P_FAMILY_GOTHITA TRUE
+#undef P_FAMILY_SOLOSIS
+#define P_FAMILY_SOLOSIS TRUE
+#undef P_FAMILY_DUCKLETT
+#define P_FAMILY_DUCKLETT TRUE
+#undef P_FAMILY_VANILLITE
+#define P_FAMILY_VANILLITE TRUE
+#undef P_FAMILY_DEERLING
+#define P_FAMILY_DEERLING TRUE
+#undef P_FAMILY_EMOLGA
+#define P_FAMILY_EMOLGA TRUE
+#undef P_FAMILY_KARRABLAST
+#define P_FAMILY_KARRABLAST TRUE
+#undef P_FAMILY_FOONGUS
+#define P_FAMILY_FOONGUS TRUE
+#undef P_FAMILY_FRILLISH
+#define P_FAMILY_FRILLISH TRUE
+#undef P_FAMILY_ALOMOMOLA
+#define P_FAMILY_ALOMOMOLA TRUE
+#undef P_FAMILY_JOLTIK
+#define P_FAMILY_JOLTIK TRUE
+#undef P_FAMILY_FERROSEED
+#define P_FAMILY_FERROSEED TRUE
+#undef P_FAMILY_KLINK
+#define P_FAMILY_KLINK TRUE
+#undef P_FAMILY_TYNAMO
+#define P_FAMILY_TYNAMO TRUE
+#undef P_FAMILY_ELGYEM
+#define P_FAMILY_ELGYEM TRUE
+#undef P_FAMILY_LITWICK
+#define P_FAMILY_LITWICK TRUE
+#undef P_FAMILY_AXEW
+#define P_FAMILY_AXEW TRUE
+#undef P_FAMILY_CUBCHOO
+#define P_FAMILY_CUBCHOO TRUE
+#undef P_FAMILY_CRYOGONAL
+#define P_FAMILY_CRYOGONAL TRUE
+#undef P_FAMILY_SHELMET
+#define P_FAMILY_SHELMET TRUE
+#undef P_FAMILY_STUNFISK
+#define P_FAMILY_STUNFISK TRUE
+#undef P_FAMILY_MIENFOO
+#define P_FAMILY_MIENFOO TRUE
+#undef P_FAMILY_DRUDDIGON
+#define P_FAMILY_DRUDDIGON TRUE
+#undef P_FAMILY_GOLETT
+#define P_FAMILY_GOLETT TRUE
+#undef P_FAMILY_PAWNIARD
+#define P_FAMILY_PAWNIARD TRUE
+#undef P_FAMILY_BOUFFALANT
+#define P_FAMILY_BOUFFALANT TRUE
+#undef P_FAMILY_RUFFLET
+#define P_FAMILY_RUFFLET TRUE
+#undef P_FAMILY_VULLABY
+#define P_FAMILY_VULLABY TRUE
+#undef P_FAMILY_HEATMOR
+#define P_FAMILY_HEATMOR TRUE
+#undef P_FAMILY_DURANT
+#define P_FAMILY_DURANT TRUE
+#undef P_FAMILY_DEINO
+#define P_FAMILY_DEINO TRUE
+#undef P_FAMILY_LARVESTA
+#define P_FAMILY_LARVESTA TRUE
+#undef P_FAMILY_COBALION
+#define P_FAMILY_COBALION TRUE
+#undef P_FAMILY_TERRAKION
+#define P_FAMILY_TERRAKION TRUE
+#undef P_FAMILY_VIRIZION
+#define P_FAMILY_VIRIZION TRUE
+#undef P_FAMILY_TORNADUS
+#define P_FAMILY_TORNADUS TRUE
+#undef P_FAMILY_THUNDURUS
+#define P_FAMILY_THUNDURUS TRUE
+#undef P_FAMILY_RESHIRAM
+#define P_FAMILY_RESHIRAM TRUE
+#undef P_FAMILY_ZEKROM
+#define P_FAMILY_ZEKROM TRUE
+#undef P_FAMILY_LANDORUS
+#define P_FAMILY_LANDORUS TRUE
+#undef P_FAMILY_KYUREM
+#define P_FAMILY_KYUREM TRUE
+#undef P_FAMILY_KELDEO
+#define P_FAMILY_KELDEO TRUE
+#undef P_FAMILY_MELOETTA
+#define P_FAMILY_MELOETTA TRUE
+#undef P_FAMILY_GENESECT
+#define P_FAMILY_GENESECT TRUE
+
+#undef P_FAMILY_CHESPIN
+#define P_FAMILY_CHESPIN TRUE
+#undef P_FAMILY_FENNEKIN
+#define P_FAMILY_FENNEKIN TRUE
+#undef P_FAMILY_FROAKIE
+#define P_FAMILY_FROAKIE TRUE
+#undef P_FAMILY_BUNNELBY
+#define P_FAMILY_BUNNELBY TRUE
+#undef P_FAMILY_FLETCHLING
+#define P_FAMILY_FLETCHLING TRUE
+#undef P_FAMILY_SCATTERBUG
+#define P_FAMILY_SCATTERBUG TRUE
+#undef P_FAMILY_LITLEO
+#define P_FAMILY_LITLEO TRUE
+#undef P_FAMILY_FLABEBE
+#define P_FAMILY_FLABEBE TRUE
+#undef P_FAMILY_SKIDDO
+#define P_FAMILY_SKIDDO TRUE
+#undef P_FAMILY_PANCHAM
+#define P_FAMILY_PANCHAM TRUE
+#undef P_FAMILY_FURFROU
+#define P_FAMILY_FURFROU TRUE
+#undef P_FAMILY_ESPURR
+#define P_FAMILY_ESPURR TRUE
+#undef P_FAMILY_HONEDGE
+#define P_FAMILY_HONEDGE TRUE
+#undef P_FAMILY_SPRITZEE
+#define P_FAMILY_SPRITZEE TRUE
+#undef P_FAMILY_SWIRLIX
+#define P_FAMILY_SWIRLIX TRUE
+#undef P_FAMILY_INKAY
+#define P_FAMILY_INKAY TRUE
+#undef P_FAMILY_BINACLE
+#define P_FAMILY_BINACLE TRUE
+#undef P_FAMILY_SKRELP
+#define P_FAMILY_SKRELP TRUE
+#undef P_FAMILY_CLAUNCHER
+#define P_FAMILY_CLAUNCHER TRUE
+#undef P_FAMILY_HELIOPTILE
+#define P_FAMILY_HELIOPTILE TRUE
+#undef P_FAMILY_TYRUNT
+#define P_FAMILY_TYRUNT TRUE
+#undef P_FAMILY_AMAURA
+#define P_FAMILY_AMAURA TRUE
+#undef P_FAMILY_HAWLUCHA
+#define P_FAMILY_HAWLUCHA TRUE
+#undef P_FAMILY_DEDENNE
+#define P_FAMILY_DEDENNE TRUE
+#undef P_FAMILY_CARBINK
+#define P_FAMILY_CARBINK TRUE
+#undef P_FAMILY_GOOMY
+#define P_FAMILY_GOOMY TRUE
+#undef P_FAMILY_KLEFKI
+#define P_FAMILY_KLEFKI TRUE
+#undef P_FAMILY_PHANTUMP
+#define P_FAMILY_PHANTUMP TRUE
+#undef P_FAMILY_PUMPKABOO
+#define P_FAMILY_PUMPKABOO TRUE
+#undef P_FAMILY_BERGMITE
+#define P_FAMILY_BERGMITE TRUE
+#undef P_FAMILY_NOIBAT
+#define P_FAMILY_NOIBAT TRUE
+#undef P_FAMILY_XERNEAS
+#define P_FAMILY_XERNEAS TRUE
+#undef P_FAMILY_YVELTAL
+#define P_FAMILY_YVELTAL TRUE
+#undef P_FAMILY_ZYGARDE
+#define P_FAMILY_ZYGARDE TRUE
+#undef P_FAMILY_DIANCIE
+#define P_FAMILY_DIANCIE TRUE
+#undef P_FAMILY_HOOPA
+#define P_FAMILY_HOOPA TRUE
+#undef P_FAMILY_VOLCANION
+#define P_FAMILY_VOLCANION TRUE
+
+#undef P_FAMILY_ROWLET
+#define P_FAMILY_ROWLET TRUE
+#undef P_FAMILY_LITTEN
+#define P_FAMILY_LITTEN TRUE
+#undef P_FAMILY_POPPLIO
+#define P_FAMILY_POPPLIO TRUE
+#undef P_FAMILY_PIKIPEK
+#define P_FAMILY_PIKIPEK TRUE
+#undef P_FAMILY_YUNGOOS
+#define P_FAMILY_YUNGOOS TRUE
+#undef P_FAMILY_GRUBBIN
+#define P_FAMILY_GRUBBIN TRUE
+#undef P_FAMILY_CRABRAWLER
+#define P_FAMILY_CRABRAWLER TRUE
+#undef P_FAMILY_ORICORIO
+#define P_FAMILY_ORICORIO TRUE
+#undef P_FAMILY_CUTIEFLY
+#define P_FAMILY_CUTIEFLY TRUE
+#undef P_FAMILY_ROCKRUFF
+#define P_FAMILY_ROCKRUFF TRUE
+#undef P_FAMILY_WISHIWASHI
+#define P_FAMILY_WISHIWASHI TRUE
+#undef P_FAMILY_MAREANIE
+#define P_FAMILY_MAREANIE TRUE
+#undef P_FAMILY_MUDBRAY
+#define P_FAMILY_MUDBRAY TRUE
+#undef P_FAMILY_DEWPIDER
+#define P_FAMILY_DEWPIDER TRUE
+#undef P_FAMILY_FOMANTIS
+#define P_FAMILY_FOMANTIS TRUE
+#undef P_FAMILY_MORELULL
+#define P_FAMILY_MORELULL TRUE
+#undef P_FAMILY_SALANDIT
+#define P_FAMILY_SALANDIT TRUE
+#undef P_FAMILY_STUFFUL
+#define P_FAMILY_STUFFUL TRUE
+#undef P_FAMILY_BOUNSWEET
+#define P_FAMILY_BOUNSWEET TRUE
+#undef P_FAMILY_COMFEY
+#define P_FAMILY_COMFEY TRUE
+#undef P_FAMILY_ORANGURU
+#define P_FAMILY_ORANGURU TRUE
+#undef P_FAMILY_PASSIMIAN
+#define P_FAMILY_PASSIMIAN TRUE
+#undef P_FAMILY_WIMPOD
+#define P_FAMILY_WIMPOD TRUE
+#undef P_FAMILY_SANDYGAST
+#define P_FAMILY_SANDYGAST TRUE
+#undef P_FAMILY_PYUKUMUKU
+#define P_FAMILY_PYUKUMUKU TRUE
+#undef P_FAMILY_TYPE_NULL
+#define P_FAMILY_TYPE_NULL TRUE
+#undef P_FAMILY_MINIOR
+#define P_FAMILY_MINIOR TRUE
+#undef P_FAMILY_KOMALA
+#define P_FAMILY_KOMALA TRUE
+#undef P_FAMILY_TURTONATOR
+#define P_FAMILY_TURTONATOR TRUE
+#undef P_FAMILY_TOGEDEMARU
+#define P_FAMILY_TOGEDEMARU TRUE
+#undef P_FAMILY_MIMIKYU
+#define P_FAMILY_MIMIKYU TRUE
+#undef P_FAMILY_BRUXISH
+#define P_FAMILY_BRUXISH TRUE
+#undef P_FAMILY_DRAMPA
+#define P_FAMILY_DRAMPA TRUE
+#undef P_FAMILY_DHELMISE
+#define P_FAMILY_DHELMISE TRUE
+#undef P_FAMILY_JANGMO_O
+#define P_FAMILY_JANGMO_O TRUE
+#undef P_FAMILY_TAPU_KOKO
+#define P_FAMILY_TAPU_KOKO TRUE
+#undef P_FAMILY_TAPU_LELE
+#define P_FAMILY_TAPU_LELE TRUE
+#undef P_FAMILY_TAPU_BULU
+#define P_FAMILY_TAPU_BULU TRUE
+#undef P_FAMILY_TAPU_FINI
+#define P_FAMILY_TAPU_FINI TRUE
+#undef P_FAMILY_COSMOG
+#define P_FAMILY_COSMOG TRUE
+#undef P_FAMILY_NIHILEGO
+#define P_FAMILY_NIHILEGO TRUE
+#undef P_FAMILY_BUZZWOLE
+#define P_FAMILY_BUZZWOLE TRUE
+#undef P_FAMILY_PHEROMOSA
+#define P_FAMILY_PHEROMOSA TRUE
+#undef P_FAMILY_XURKITREE
+#define P_FAMILY_XURKITREE TRUE
+#undef P_FAMILY_CELESTEELA
+#define P_FAMILY_CELESTEELA TRUE
+#undef P_FAMILY_KARTANA
+#define P_FAMILY_KARTANA TRUE
+#undef P_FAMILY_GUZZLORD
+#define P_FAMILY_GUZZLORD TRUE
+#undef P_FAMILY_NECROZMA
+#define P_FAMILY_NECROZMA TRUE
+#undef P_FAMILY_MAGEARNA
+#define P_FAMILY_MAGEARNA TRUE
+#undef P_FAMILY_MARSHADOW
+#define P_FAMILY_MARSHADOW TRUE
+#undef P_FAMILY_POIPOLE
+#define P_FAMILY_POIPOLE TRUE
+#undef P_FAMILY_STAKATAKA
+#define P_FAMILY_STAKATAKA TRUE
+#undef P_FAMILY_BLACEPHALON
+#define P_FAMILY_BLACEPHALON TRUE
+#undef P_FAMILY_ZERAORA
+#define P_FAMILY_ZERAORA TRUE
+#undef P_FAMILY_MELTAN
+#define P_FAMILY_MELTAN TRUE
+
+#undef P_FAMILY_GROOKEY
+#define P_FAMILY_GROOKEY TRUE
+#undef P_FAMILY_SCORBUNNY
+#define P_FAMILY_SCORBUNNY TRUE
+#undef P_FAMILY_SOBBLE
+#define P_FAMILY_SOBBLE TRUE
+#undef P_FAMILY_SKWOVET
+#define P_FAMILY_SKWOVET TRUE
+#undef P_FAMILY_ROOKIDEE
+#define P_FAMILY_ROOKIDEE TRUE
+#undef P_FAMILY_BLIPBUG
+#define P_FAMILY_BLIPBUG TRUE
+#undef P_FAMILY_NICKIT
+#define P_FAMILY_NICKIT TRUE
+#undef P_FAMILY_GOSSIFLEUR
+#define P_FAMILY_GOSSIFLEUR TRUE
+#undef P_FAMILY_WOOLOO
+#define P_FAMILY_WOOLOO TRUE
+#undef P_FAMILY_CHEWTLE
+#define P_FAMILY_CHEWTLE TRUE
+#undef P_FAMILY_YAMPER
+#define P_FAMILY_YAMPER TRUE
+#undef P_FAMILY_ROLYCOLY
+#define P_FAMILY_ROLYCOLY TRUE
+#undef P_FAMILY_APPLIN
+#define P_FAMILY_APPLIN TRUE
+#undef P_FAMILY_SILICOBRA
+#define P_FAMILY_SILICOBRA TRUE
+#undef P_FAMILY_CRAMORANT
+#define P_FAMILY_CRAMORANT TRUE
+#undef P_FAMILY_ARROKUDA
+#define P_FAMILY_ARROKUDA TRUE
+#undef P_FAMILY_TOXEL
+#define P_FAMILY_TOXEL TRUE
+#undef P_FAMILY_SIZZLIPEDE
+#define P_FAMILY_SIZZLIPEDE TRUE
+#undef P_FAMILY_CLOBBOPUS
+#define P_FAMILY_CLOBBOPUS TRUE
+#undef P_FAMILY_SINISTEA
+#define P_FAMILY_SINISTEA TRUE
+#undef P_FAMILY_HATENNA
+#define P_FAMILY_HATENNA TRUE
+#undef P_FAMILY_IMPIDIMP
+#define P_FAMILY_IMPIDIMP TRUE
+#undef P_FAMILY_MILCERY
+#define P_FAMILY_MILCERY TRUE
+#undef P_FAMILY_FALINKS
+#define P_FAMILY_FALINKS TRUE
+#undef P_FAMILY_PINCURCHIN
+#define P_FAMILY_PINCURCHIN TRUE
+#undef P_FAMILY_SNOM
+#define P_FAMILY_SNOM TRUE
+#undef P_FAMILY_STONJOURNER
+#define P_FAMILY_STONJOURNER TRUE
+#undef P_FAMILY_EISCUE
+#define P_FAMILY_EISCUE TRUE
+#undef P_FAMILY_INDEEDEE
+#define P_FAMILY_INDEEDEE TRUE
+#undef P_FAMILY_MORPEKO
+#define P_FAMILY_MORPEKO TRUE
+#undef P_FAMILY_CUFANT
+#define P_FAMILY_CUFANT TRUE
+#undef P_FAMILY_DRACOZOLT
+#define P_FAMILY_DRACOZOLT TRUE
+#undef P_FAMILY_ARCTOZOLT
+#define P_FAMILY_ARCTOZOLT TRUE
+#undef P_FAMILY_DRACOVISH
+#define P_FAMILY_DRACOVISH TRUE
+#undef P_FAMILY_ARCTOVISH
+#define P_FAMILY_ARCTOVISH TRUE
+#undef P_FAMILY_DURALUDON
+#define P_FAMILY_DURALUDON TRUE
+#undef P_FAMILY_DREEPY
+#define P_FAMILY_DREEPY TRUE
+#undef P_FAMILY_ZACIAN
+#define P_FAMILY_ZACIAN TRUE
+#undef P_FAMILY_ZAMAZENTA
+#define P_FAMILY_ZAMAZENTA TRUE
+#undef P_FAMILY_ETERNATUS
+#define P_FAMILY_ETERNATUS TRUE
+#undef P_FAMILY_KUBFU
+#define P_FAMILY_KUBFU TRUE
+#undef P_FAMILY_ZARUDE
+#define P_FAMILY_ZARUDE TRUE
+#undef P_FAMILY_REGIELEKI
+#define P_FAMILY_REGIELEKI TRUE
+#undef P_FAMILY_REGIDRAGO
+#define P_FAMILY_REGIDRAGO TRUE
+#undef P_FAMILY_GLASTRIER
+#define P_FAMILY_GLASTRIER TRUE
+#undef P_FAMILY_SPECTRIER
+#define P_FAMILY_SPECTRIER TRUE
+#undef P_FAMILY_CALYREX
+#define P_FAMILY_CALYREX TRUE
+#undef P_FAMILY_ENAMORUS
+#define P_FAMILY_ENAMORUS TRUE
+
+#undef P_FAMILY_SPRIGATITO
+#define P_FAMILY_SPRIGATITO TRUE
+#undef P_FAMILY_FUECOCO
+#define P_FAMILY_FUECOCO TRUE
+#undef P_FAMILY_QUAXLY
+#define P_FAMILY_QUAXLY TRUE
+#undef P_FAMILY_LECHONK
+#define P_FAMILY_LECHONK TRUE
+#undef P_FAMILY_TAROUNTULA
+#define P_FAMILY_TAROUNTULA TRUE
+#undef P_FAMILY_NYMBLE
+#define P_FAMILY_NYMBLE TRUE
+#undef P_FAMILY_PAWMI
+#define P_FAMILY_PAWMI TRUE
+#undef P_FAMILY_TANDEMAUS
+#define P_FAMILY_TANDEMAUS TRUE
+#undef P_FAMILY_FIDOUGH
+#define P_FAMILY_FIDOUGH TRUE
+#undef P_FAMILY_SMOLIV
+#define P_FAMILY_SMOLIV TRUE
+#undef P_FAMILY_SQUAWKABILLY
+#define P_FAMILY_SQUAWKABILLY TRUE
+#undef P_FAMILY_NACLI
+#define P_FAMILY_NACLI TRUE
+#undef P_FAMILY_CHARCADET
+#define P_FAMILY_CHARCADET TRUE
+#undef P_FAMILY_TADBULB
+#define P_FAMILY_TADBULB TRUE
+#undef P_FAMILY_WATTREL
+#define P_FAMILY_WATTREL TRUE
+#undef P_FAMILY_MASCHIFF
+#define P_FAMILY_MASCHIFF TRUE
+#undef P_FAMILY_SHROODLE
+#define P_FAMILY_SHROODLE TRUE
+#undef P_FAMILY_BRAMBLIN
+#define P_FAMILY_BRAMBLIN TRUE
+#undef P_FAMILY_TOEDSCOOL
+#define P_FAMILY_TOEDSCOOL TRUE
+#undef P_FAMILY_KLAWF
+#define P_FAMILY_KLAWF TRUE
+#undef P_FAMILY_CAPSAKID
+#define P_FAMILY_CAPSAKID TRUE
+#undef P_FAMILY_RELLOR
+#define P_FAMILY_RELLOR TRUE
+#undef P_FAMILY_FLITTLE
+#define P_FAMILY_FLITTLE TRUE
+#undef P_FAMILY_TINKATINK
+#define P_FAMILY_TINKATINK TRUE
+#undef P_FAMILY_WIGLETT
+#define P_FAMILY_WIGLETT TRUE
+#undef P_FAMILY_BOMBIRDIER
+#define P_FAMILY_BOMBIRDIER TRUE
+#undef P_FAMILY_FINIZEN
+#define P_FAMILY_FINIZEN TRUE
+#undef P_FAMILY_VAROOM
+#define P_FAMILY_VAROOM TRUE
+#undef P_FAMILY_CYCLIZAR
+#define P_FAMILY_CYCLIZAR TRUE
+#undef P_FAMILY_ORTHWORM
+#define P_FAMILY_ORTHWORM TRUE
+#undef P_FAMILY_GLIMMET
+#define P_FAMILY_GLIMMET TRUE
+#undef P_FAMILY_GREAVARD
+#define P_FAMILY_GREAVARD TRUE
+#undef P_FAMILY_FLAMIGO
+#define P_FAMILY_FLAMIGO TRUE
+#undef P_FAMILY_CETODDLE
+#define P_FAMILY_CETODDLE TRUE
+#undef P_FAMILY_VELUZA
+#define P_FAMILY_VELUZA TRUE
+#undef P_FAMILY_DONDOZO
+#define P_FAMILY_DONDOZO TRUE
+#undef P_FAMILY_TATSUGIRI
+#define P_FAMILY_TATSUGIRI TRUE
+#undef P_FAMILY_GREAT_TUSK
+#define P_FAMILY_GREAT_TUSK TRUE
+#undef P_FAMILY_SCREAM_TAIL
+#define P_FAMILY_SCREAM_TAIL TRUE
+#undef P_FAMILY_BRUTE_BONNET
+#define P_FAMILY_BRUTE_BONNET TRUE
+#undef P_FAMILY_FLUTTER_MANE
+#define P_FAMILY_FLUTTER_MANE TRUE
+#undef P_FAMILY_SLITHER_WING
+#define P_FAMILY_SLITHER_WING TRUE
+#undef P_FAMILY_SANDY_SHOCKS
+#define P_FAMILY_SANDY_SHOCKS TRUE
+#undef P_FAMILY_IRON_TREADS
+#define P_FAMILY_IRON_TREADS TRUE
+#undef P_FAMILY_IRON_BUNDLE
+#define P_FAMILY_IRON_BUNDLE TRUE
+#undef P_FAMILY_IRON_HANDS
+#define P_FAMILY_IRON_HANDS TRUE
+#undef P_FAMILY_IRON_JUGULIS
+#define P_FAMILY_IRON_JUGULIS TRUE
+#undef P_FAMILY_IRON_MOTH
+#define P_FAMILY_IRON_MOTH TRUE
+#undef P_FAMILY_IRON_THORNS
+#define P_FAMILY_IRON_THORNS TRUE
+#undef P_FAMILY_FRIGIBAX
+#define P_FAMILY_FRIGIBAX TRUE
+#undef P_FAMILY_GIMMIGHOUL
+#define P_FAMILY_GIMMIGHOUL TRUE
+#undef P_FAMILY_WO_CHIEN
+#define P_FAMILY_WO_CHIEN TRUE
+#undef P_FAMILY_CHIEN_PAO
+#define P_FAMILY_CHIEN_PAO TRUE
+#undef P_FAMILY_TING_LU
+#define P_FAMILY_TING_LU TRUE
+#undef P_FAMILY_CHI_YU
+#define P_FAMILY_CHI_YU TRUE
+#undef P_FAMILY_ROARING_MOON
+#define P_FAMILY_ROARING_MOON TRUE
+#undef P_FAMILY_IRON_VALIANT
+#define P_FAMILY_IRON_VALIANT TRUE
+#undef P_FAMILY_KORAIDON
+#define P_FAMILY_KORAIDON TRUE
+#undef P_FAMILY_MIRAIDON
+#define P_FAMILY_MIRAIDON TRUE
+#undef P_FAMILY_WALKING_WAKE
+#define P_FAMILY_WALKING_WAKE TRUE
+#undef P_FAMILY_IRON_LEAVES
+#define P_FAMILY_IRON_LEAVES TRUE
+#undef P_FAMILY_POLTCHAGEIST
+#define P_FAMILY_POLTCHAGEIST TRUE
+#undef P_FAMILY_SINISTCHA
+#define P_FAMILY_SINISTCHA TRUE
+#undef P_FAMILY_OKIDOGI
+#define P_FAMILY_OKIDOGI TRUE
+#undef P_FAMILY_MUNKIDORI
+#define P_FAMILY_MUNKIDORI TRUE
+#undef P_FAMILY_FEZANDIPITI
+#define P_FAMILY_FEZANDIPITI TRUE
+#undef P_FAMILY_OGERPON
+#define P_FAMILY_OGERPON TRUE
+#undef P_FAMILY_GOUGING_FIRE
+#define P_FAMILY_GOUGING_FIRE TRUE
+#undef P_FAMILY_RAGING_BOLT
+#define P_FAMILY_RAGING_BOLT TRUE
+#undef P_FAMILY_IRON_BOULDER
+#define P_FAMILY_IRON_BOULDER TRUE
+#undef P_FAMILY_IRON_CROWN
+#define P_FAMILY_IRON_CROWN TRUE
+#undef P_FAMILY_TERAPAGOS
+#define P_FAMILY_TERAPAGOS TRUE
+#undef P_FAMILY_PECHARUNT
+#define P_FAMILY_PECHARUNT TRUE
+
+#endif // GUARD_CONFIG_TEST_H
diff --git a/include/constants/battle.h b/include/constants/battle.h
index 17606586afcb..1f11adbd5f4e 100644
--- a/include/constants/battle.h
+++ b/include/constants/battle.h
@@ -299,11 +299,14 @@
#define B_WEATHER_HAIL_PERMANENT (1 << 10)
#define B_WEATHER_HAIL (B_WEATHER_HAIL_TEMPORARY | B_WEATHER_HAIL_PERMANENT)
#define B_WEATHER_STRONG_WINDS (1 << 11)
-#define B_WEATHER_ANY (B_WEATHER_RAIN | B_WEATHER_SANDSTORM | B_WEATHER_SUN | B_WEATHER_HAIL | B_WEATHER_STRONG_WINDS | B_WEATHER_SNOW)
+#define B_WEATHER_ANY (B_WEATHER_RAIN | B_WEATHER_SANDSTORM | B_WEATHER_SUN | B_WEATHER_HAIL | B_WEATHER_STRONG_WINDS | B_WEATHER_SNOW | B_WEATHER_FOG)
#define B_WEATHER_PRIMAL_ANY (B_WEATHER_RAIN_PRIMAL | B_WEATHER_SUN_PRIMAL | B_WEATHER_STRONG_WINDS)
#define B_WEATHER_SNOW_TEMPORARY (1 << 12)
#define B_WEATHER_SNOW_PERMANENT (1 << 13)
#define B_WEATHER_SNOW (B_WEATHER_SNOW_TEMPORARY | B_WEATHER_SNOW_PERMANENT)
+#define B_WEATHER_FOG_TEMPORARY (1 << 14)
+#define B_WEATHER_FOG_PERMANENT (1 << 15)
+#define B_WEATHER_FOG (B_WEATHER_FOG_TEMPORARY | B_WEATHER_FOG_PERMANENT)
// Battle Weather as enum
#define ENUM_WEATHER_NONE 0
@@ -315,6 +318,7 @@
#define ENUM_WEATHER_RAIN_PRIMAL 6
#define ENUM_WEATHER_STRONG_WINDS 7
#define ENUM_WEATHER_SNOW 8
+#define ENUM_WEATHER_FOG 9
// Move Effects
#define MOVE_EFFECT_SLEEP 1
@@ -376,28 +380,28 @@
#define MOVE_EFFECT_KNOCK_OFF 55
#define MOVE_EFFECT_DEF_SPDEF_DOWN 56
#define MOVE_EFFECT_CLEAR_SMOG 57
-#define MOVE_EFFECT_SP_ATK_TWO_DOWN 58
-#define MOVE_EFFECT_SMACK_DOWN 59
-#define MOVE_EFFECT_FLAME_BURST 60
-#define MOVE_EFFECT_FEINT 61
-#define MOVE_EFFECT_SPECTRAL_THIEF 62
-#define MOVE_EFFECT_V_CREATE 63
-#define MOVE_EFFECT_HAPPY_HOUR 64
-#define MOVE_EFFECT_CORE_ENFORCER 65
-#define MOVE_EFFECT_THROAT_CHOP 66
-#define MOVE_EFFECT_INCINERATE 67
-#define MOVE_EFFECT_BUG_BITE 68
-#define MOVE_EFFECT_RECOIL_HP_25 69
-#define MOVE_EFFECT_TRAP_BOTH 70
-#define MOVE_EFFECT_ROUND 71
-#define MOVE_EFFECT_STOCKPILE_WORE_OFF 72
-#define MOVE_EFFECT_DIRE_CLAW 73
-#define MOVE_EFFECT_STEALTH_ROCK 74
-#define MOVE_EFFECT_SPIKES 75
-#define MOVE_EFFECT_SYRUP_BOMB 76
-#define MOVE_EFFECT_FLORAL_HEALING 77
-#define MOVE_EFFECT_SECRET_POWER 78
-#define MOVE_EFFECT_PSYCHIC_NOISE 79
+#define MOVE_EFFECT_SMACK_DOWN 58
+#define MOVE_EFFECT_FLAME_BURST 59
+#define MOVE_EFFECT_FEINT 60
+#define MOVE_EFFECT_SPECTRAL_THIEF 61
+#define MOVE_EFFECT_V_CREATE 62
+#define MOVE_EFFECT_HAPPY_HOUR 63
+#define MOVE_EFFECT_CORE_ENFORCER 64
+#define MOVE_EFFECT_THROAT_CHOP 65
+#define MOVE_EFFECT_INCINERATE 66
+#define MOVE_EFFECT_BUG_BITE 67
+#define MOVE_EFFECT_RECOIL_HP_25 68
+#define MOVE_EFFECT_TRAP_BOTH 69
+#define MOVE_EFFECT_ROUND 70
+#define MOVE_EFFECT_STOCKPILE_WORE_OFF 71
+#define MOVE_EFFECT_DIRE_CLAW 72
+#define MOVE_EFFECT_STEALTH_ROCK 73
+#define MOVE_EFFECT_SPIKES 74
+#define MOVE_EFFECT_SYRUP_BOMB 75
+#define MOVE_EFFECT_FLORAL_HEALING 76
+#define MOVE_EFFECT_SECRET_POWER 77
+#define MOVE_EFFECT_PSYCHIC_NOISE 78
+#define MOVE_EFFECT_TERA_BLAST 79
#define NUM_MOVE_EFFECTS 80
@@ -473,6 +477,7 @@
#define B_WIN_VS_OUTCOME_DRAW 21
#define B_WIN_VS_OUTCOME_LEFT 22
#define B_WIN_VS_OUTCOME_RIGHT 23
+#define B_WIN_MOVE_DESCRIPTION 24
// The following are duplicate id values for windows that Battle Arena uses differently.
#define ARENA_WIN_PLAYER_NAME 15
diff --git a/include/constants/battle_ai.h b/include/constants/battle_ai.h
index e42403e16ace..38d058a8cb9b 100644
--- a/include/constants/battle_ai.h
+++ b/include/constants/battle_ai.h
@@ -32,24 +32,26 @@
#define AI_FLAG_RISKY (1 << 4)
#define AI_FLAG_PREFER_STRONGEST_MOVE (1 << 5)
#define AI_FLAG_PREFER_BATON_PASS (1 << 6)
-#define AI_FLAG_DOUBLE_BATTLE (1 << 7) // removed, split between AI_FLAG_CHECK_BAD_MOVE & AI_FLAG_CHECK_GOOD_MOVE
+#define AI_FLAG_DOUBLE_BATTLE (1 << 7) // Automatically set for double battles, handles AI behaviour with partner
#define AI_FLAG_HP_AWARE (1 << 8)
#define AI_FLAG_POWERFUL_STATUS (1 << 9) // AI prefers moves that set up field effects or side statuses, even if the user can faint the target
// New, Trainer Handicap Flags
#define AI_FLAG_NEGATE_UNAWARE (1 << 10) // AI is NOT aware of negating effects like wonder room, mold breaker, etc
#define AI_FLAG_WILL_SUICIDE (1 << 11) // AI will use explosion / self destruct / final gambit / etc
// New, Trainer Strategy Flags
-#define AI_FLAG_HELP_PARTNER (1 << 12) // AI can try to help partner. If not set, will tend not to target partner
-#define AI_FLAG_PREFER_STATUS_MOVES (1 << 13) // AI gets a score bonus for status moves. Should be combined with AI_FLAG_CHECK_BAD_MOVE to prevent using only status moves
-#define AI_FLAG_STALL (1 << 14) // AI stalls battle and prefers secondary damage/trapping/etc. TODO not finished
-#define AI_FLAG_SMART_SWITCHING (1 << 15) // AI includes a lot more switching checks. Automatically includes AI_FLAG_SMART_MON_CHOICES.
-#define AI_FLAG_ACE_POKEMON (1 << 16) // AI has an Ace Pokemon. The last Pokemon in the party will not be used until it's the last one remaining.
-#define AI_FLAG_OMNISCIENT (1 << 17) // AI has full knowledge of player moves, abilities, hold items
-#define AI_FLAG_SMART_MON_CHOICES (1 << 18) // AI will make smarter decisions when choosing which mon to send out mid-battle and after a KO, which are separate decisions. Automatically included by AI_FLAG_SMART_SWITCHING.
+#define AI_FLAG_PREFER_STATUS_MOVES (1 << 12) // AI gets a score bonus for status moves. Should be combined with AI_FLAG_CHECK_BAD_MOVE to prevent using only status moves
+#define AI_FLAG_STALL (1 << 13) // AI stalls battle and prefers secondary damage/trapping/etc. TODO not finished
+#define AI_FLAG_SMART_SWITCHING (1 << 14) // AI includes a lot more switching checks. Automatically includes AI_FLAG_SMART_MON_CHOICES.
+#define AI_FLAG_ACE_POKEMON (1 << 15) // AI has an Ace Pokemon. The last Pokemon in the party will not be used until it's the last one remaining.
+#define AI_FLAG_OMNISCIENT (1 << 16) // AI has full knowledge of player moves, abilities, hold items
+#define AI_FLAG_SMART_MON_CHOICES (1 << 17) // AI will make smarter decisions when choosing which mon to send out mid-battle and after a KO, which are separate decisions. Automatically included by AI_FLAG_SMART_SWITCHING.
+#define AI_FLAG_CONSERVATIVE (1 << 18) // AI assumes all moves will low roll damage
+#define AI_FLAG_SEQUENCE_SWITCHING (1 << 19) // AI switches in mons in exactly party order, and never switches mid-battle
-#define AI_FLAG_COUNT 19
+#define AI_FLAG_COUNT 20
// 'other' ai logic flags
+#define AI_FLAG_DYNAMIC_FUNC (1 << 28) // Create custom AI functions for specific battles via "setdynamicaifunc" cmd
#define AI_FLAG_ROAMING (1 << 29)
#define AI_FLAG_SAFARI (1 << 30)
#define AI_FLAG_FIRST_BATTLE (1 << 31)
diff --git a/include/constants/battle_anim.h b/include/constants/battle_anim.h
index 8bc09ba530db..54573a4868bc 100644
--- a/include/constants/battle_anim.h
+++ b/include/constants/battle_anim.h
@@ -405,6 +405,17 @@
#define ANIM_TAG_SYRUP_SHELL_YELLOW (ANIM_SPRITES_START + 391)
#define ANIM_TAG_SYRUP_SPLAT_RED (ANIM_SPRITES_START + 392)
#define ANIM_TAG_SYRUP_SPLAT_YELLOW (ANIM_SPRITES_START + 393)
+#define ANIM_TAG_IVY_CUDGEL_GRASS (ANIM_SPRITES_START + 394)
+#define ANIM_TAG_IVY_CUDGEL_FIRE (ANIM_SPRITES_START + 395)
+#define ANIM_TAG_IVY_CUDGEL_ROCK (ANIM_SPRITES_START + 396)
+#define ANIM_TAG_IVY_CUDGEL_WATER (ANIM_SPRITES_START + 397)
+#define ANIM_TAG_TERA_CRYSTAL (ANIM_SPRITES_START + 398)
+#define ANIM_TAG_TERA_SHATTER (ANIM_SPRITES_START + 399)
+#define ANIM_TAG_DREEPY_SHINY (ANIM_SPRITES_START + 400)
+#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
@@ -567,6 +578,10 @@
#define B_ANIM_WONDER_ROOM 46
#define B_ANIM_MAGIC_ROOM 47
#define B_ANIM_TAILWIND 48
+#define B_ANIM_FOG_CONTINUES 49
+#define B_ANIM_TERA_CHARGE 50
+#define B_ANIM_TERA_ACTIVATE 51
+#define B_ANIM_SIMPLE_HEAL 52
// special animations table (gBattleAnims_Special)
#define B_ANIM_LVL_UP 0
@@ -615,6 +630,7 @@
#define ANIM_WEATHER_SANDSTORM 3
#define ANIM_WEATHER_HAIL 4
#define ANIM_WEATHER_SNOW 5
+#define ANIM_WEATHER_FOG 6
// horseshoe/fist frames
#define ANIM_RIGHT_FIST 0
diff --git a/include/constants/battle_frontier.h b/include/constants/battle_frontier.h
index e4a56b15d147..7b3c77cc8fc1 100644
--- a/include/constants/battle_frontier.h
+++ b/include/constants/battle_frontier.h
@@ -116,6 +116,7 @@
#define EXCHANGE_CORNER_VITAMIN_CLERK 2
#define EXCHANGE_CORNER_HOLD_ITEM_CLERK 3
+// unused
#define F_EV_SPREAD_HP (1 << 0)
#define F_EV_SPREAD_ATTACK (1 << 1)
#define F_EV_SPREAD_DEFENSE (1 << 2)
@@ -123,68 +124,7 @@
#define F_EV_SPREAD_SP_ATTACK (1 << 4)
#define F_EV_SPREAD_SP_DEFENSE (1 << 5)
-#define BATTLE_FRONTIER_ITEM_NONE 0
-#define BATTLE_FRONTIER_ITEM_KINGS_ROCK 1
-#define BATTLE_FRONTIER_ITEM_SITRUS_BERRY 2
-#define BATTLE_FRONTIER_ITEM_ORAN_BERRY 3
-#define BATTLE_FRONTIER_ITEM_CHESTO_BERRY 4
-#define BATTLE_FRONTIER_ITEM_HARD_STONE 5
-#define BATTLE_FRONTIER_ITEM_FOCUS_BAND 6
-#define BATTLE_FRONTIER_ITEM_PERSIM_BERRY 7
-#define BATTLE_FRONTIER_ITEM_MIRACLE_SEED 8
-#define BATTLE_FRONTIER_ITEM_BERRY_JUICE 9
-#define BATTLE_FRONTIER_ITEM_MACHO_BRACE 10
-#define BATTLE_FRONTIER_ITEM_SILVER_POWDER 11
-#define BATTLE_FRONTIER_ITEM_CHERI_BERRY 12
-#define BATTLE_FRONTIER_ITEM_BLACK_GLASSES 13
-#define BATTLE_FRONTIER_ITEM_BLACK_BELT 14
-#define BATTLE_FRONTIER_ITEM_SOUL_DEW 15
-#define BATTLE_FRONTIER_ITEM_CHOICE_BAND 16
-#define BATTLE_FRONTIER_ITEM_MAGNET 17
-#define BATTLE_FRONTIER_ITEM_SILK_SCARF 18
-#define BATTLE_FRONTIER_ITEM_WHITE_HERB 19
-#define BATTLE_FRONTIER_ITEM_DEEP_SEA_SCALE 20
-#define BATTLE_FRONTIER_ITEM_DEEP_SEA_TOOTH 21
-#define BATTLE_FRONTIER_ITEM_MYSTIC_WATER 22
-#define BATTLE_FRONTIER_ITEM_SHARP_BEAK 23
-#define BATTLE_FRONTIER_ITEM_QUICK_CLAW 24
-#define BATTLE_FRONTIER_ITEM_LEFTOVERS 25
-#define BATTLE_FRONTIER_ITEM_RAWST_BERRY 26
-#define BATTLE_FRONTIER_ITEM_LIGHT_BALL 27
-#define BATTLE_FRONTIER_ITEM_POISON_BARB 28
-#define BATTLE_FRONTIER_ITEM_NEVER_MELT_ICE 29
-#define BATTLE_FRONTIER_ITEM_ASPEAR_BERRY 30
-#define BATTLE_FRONTIER_ITEM_SPELL_TAG 31
-#define BATTLE_FRONTIER_ITEM_BRIGHT_POWDER 32
-#define BATTLE_FRONTIER_ITEM_LEPPA_BERRY 33
-#define BATTLE_FRONTIER_ITEM_SCOPE_LENS 34
-#define BATTLE_FRONTIER_ITEM_TWISTED_SPOON 35
-#define BATTLE_FRONTIER_ITEM_METAL_COAT 36
-#define BATTLE_FRONTIER_ITEM_MENTAL_HERB 37
-#define BATTLE_FRONTIER_ITEM_CHARCOAL 38
-#define BATTLE_FRONTIER_ITEM_PECHA_BERRY 39
-#define BATTLE_FRONTIER_ITEM_SOFT_SAND 40
-#define BATTLE_FRONTIER_ITEM_LUM_BERRY 41
-#define BATTLE_FRONTIER_ITEM_DRAGON_SCALE 42
-#define BATTLE_FRONTIER_ITEM_DRAGON_FANG 43
-#define BATTLE_FRONTIER_ITEM_IAPAPA_BERRY 44
-#define BATTLE_FRONTIER_ITEM_WIKI_BERRY 45
-#define BATTLE_FRONTIER_ITEM_SEA_INCENSE 46
-#define BATTLE_FRONTIER_ITEM_SHELL_BELL 47
-#define BATTLE_FRONTIER_ITEM_SALAC_BERRY 48
-#define BATTLE_FRONTIER_ITEM_LANSAT_BERRY 49
-#define BATTLE_FRONTIER_ITEM_APICOT_BERRY 50
-#define BATTLE_FRONTIER_ITEM_STARF_BERRY 51
-#define BATTLE_FRONTIER_ITEM_LIECHI_BERRY 52
-#define BATTLE_FRONTIER_ITEM_LEEK 53
-#define BATTLE_FRONTIER_ITEM_LAX_INCENSE 54
-#define BATTLE_FRONTIER_ITEM_AGUAV_BERRY 55
-#define BATTLE_FRONTIER_ITEM_FIGY_BERRY 56
-#define BATTLE_FRONTIER_ITEM_THICK_CLUB 57
-#define BATTLE_FRONTIER_ITEM_MAGO_BERRY 58
-#define BATTLE_FRONTIER_ITEM_METAL_POWDER 59
-#define BATTLE_FRONTIER_ITEM_PETAYA_BERRY 60
-#define BATTLE_FRONTIER_ITEM_LUCKY_PUNCH 61
-#define BATTLE_FRONTIER_ITEM_GANLON_BERRY 62
+// CreateFacilityMonFlags
+#define FLAG_FRONTIER_MON_FACTORY (1 << 0)
#endif // GUARD_CONSTANTS_BATTLE_FRONTIER_H
diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h
index 13a300f064fd..5da278110f2c 100644
--- a/include/constants/battle_move_effects.h
+++ b/include/constants/battle_move_effects.h
@@ -221,7 +221,7 @@ enum {
EFFECT_HEAL_PULSE,
EFFECT_QUASH,
EFFECT_ION_DELUGE,
- EFFECT_FREEZE_DRY,
+ EFFECT_SUPER_EFFECTIVE_ON_ARG,
EFFECT_TOPSY_TURVY,
EFFECT_MISTY_TERRAIN,
EFFECT_GRASSY_TERRAIN,
@@ -348,6 +348,12 @@ enum {
EFFECT_DRAGON_CHEER,
EFFECT_LAST_RESPECTS,
EFFECT_TIDY_UP,
+ EFFECT_SPICY_EXTRACT,
+ EFFECT_TERA_BLAST,
+ EFFECT_TERA_STARSTORM,
+ EFFECT_DRAGON_DARTS,
+ EFFECT_GUARDIAN_OF_ALOLA,
+ EFFECT_SHELL_SIDE_ARM,
NUM_BATTLE_MOVE_EFFECTS,
};
diff --git a/include/constants/battle_palace.h b/include/constants/battle_palace.h
index 1d8c2f2ddad5..a594fcd5e2e2 100644
--- a/include/constants/battle_palace.h
+++ b/include/constants/battle_palace.h
@@ -21,9 +21,4 @@
#define PALACE_MOVE_GROUP_DEFENSE 1
#define PALACE_MOVE_GROUP_SUPPORT 2
-// In palace doubles battles Pokémon have a target preference depending on nature
-#define PALACE_TARGET_STRONGER 0
-#define PALACE_TARGET_WEAKER 1
-#define PALACE_TARGET_RANDOM 2
-
#endif //GUARD_CONSTANTS_BATTLE_PALACE_H
diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h
index 10e7dfea5136..03173c43cf8b 100644
--- a/include/constants/battle_script_commands.h
+++ b/include/constants/battle_script_commands.h
@@ -118,124 +118,122 @@
#define VARIOUS_PLAY_TRAINER_DEFEATED_MUSIC 26
#define VARIOUS_STAT_TEXT_BUFFER 27
#define VARIOUS_SWITCHIN_ABILITIES 28
-#define VARIOUS_SAVE_TARGET 29
-#define VARIOUS_RESTORE_TARGET 30
-#define VARIOUS_INSTANT_HP_DROP 31
-#define VARIOUS_CLEAR_STATUS 32
-#define VARIOUS_RESTORE_PP 33
-#define VARIOUS_TRY_ACTIVATE_MOXIE 34
-#define VARIOUS_TRY_ACTIVATE_FELL_STINGER 35
-#define VARIOUS_PLAY_MOVE_ANIMATION 36
-#define VARIOUS_SET_LUCKY_CHANT 37
-#define VARIOUS_SUCKER_PUNCH_CHECK 38
-#define VARIOUS_SET_SIMPLE_BEAM 39
-#define VARIOUS_TRY_ENTRAINMENT 40
-#define VARIOUS_SET_LAST_USED_ABILITY 41
-#define VARIOUS_INVERT_STAT_STAGES 42
-#define VARIOUS_TRY_ME_FIRST 43
-#define VARIOUS_JUMP_IF_BATTLE_END 44
-#define VARIOUS_TRY_ELECTRIFY 45
-#define VARIOUS_TRY_REFLECT_TYPE 46
-#define VARIOUS_TRY_SOAK 47
-#define VARIOUS_HANDLE_MEGA_EVO 48
-#define VARIOUS_TRY_LAST_RESORT 49
-#define VARIOUS_SET_ARG_TO_BATTLE_DAMAGE 50
-#define VARIOUS_TRY_HIT_SWITCH_TARGET 51
-#define VARIOUS_TRY_AUTOTOMIZE 52
-#define VARIOUS_ABILITY_POPUP 53
-#define VARIOUS_JUMP_IF_TARGET_ALLY 54
-#define VARIOUS_TRY_SYNCHRONOISE 55
-#define VARIOUS_PSYCHO_SHIFT 56
-#define VARIOUS_CURE_STATUS 57
-#define VARIOUS_POWER_TRICK 58
-#define VARIOUS_AFTER_YOU 59
-#define VARIOUS_BESTOW 60
-#define VARIOUS_JUMP_IF_NOT_GROUNDED 61
-#define VARIOUS_HANDLE_TRAINER_SLIDE_MSG 62
-#define VARIOUS_TRY_TRAINER_SLIDE_MSG_FIRST_OFF 63
-#define VARIOUS_TRY_TRAINER_SLIDE_MSG_LAST_ON 64
-#define VARIOUS_SET_AURORA_VEIL 65
-#define VARIOUS_TRY_THIRD_TYPE 66
-#define VARIOUS_ACUPRESSURE 67
-#define VARIOUS_SET_POWDER 68
-#define VARIOUS_SPECTRAL_THIEF 69
-#define VARIOUS_GRAVITY_ON_AIRBORNE_MONS 70
-#define VARIOUS_CHECK_IF_GRASSY_TERRAIN_HEALS 71
-#define VARIOUS_JUMP_IF_ROAR_FAILS 72
-#define VARIOUS_TRY_INSTRUCT 73
-#define VARIOUS_JUMP_IF_NOT_BERRY 74
-#define VARIOUS_TRACE_ABILITY 75
-#define VARIOUS_UPDATE_NICK 76
-#define VARIOUS_TRY_ILLUSION_OFF 77
-#define VARIOUS_SET_SPRITEIGNORE0HP 78
-#define VARIOUS_HANDLE_FORM_CHANGE 79
-#define VARIOUS_GET_STAT_VALUE 80
-#define VARIOUS_JUMP_IF_FULL_HP 81
-#define VARIOUS_LOSE_TYPE 82
-#define VARIOUS_TRY_ACTIVATE_SOULHEART 83
-#define VARIOUS_TRY_ACTIVATE_RECEIVER 84
-#define VARIOUS_TRY_ACTIVATE_BEAST_BOOST 85
-#define VARIOUS_TRY_FRISK 86
-#define VARIOUS_JUMP_IF_SHIELDS_DOWN_PROTECTED 87
-#define VARIOUS_TRY_FAIRY_LOCK 88
-#define VARIOUS_JUMP_IF_NO_ALLY 89
-#define VARIOUS_POISON_TYPE_IMMUNITY 90
-#define VARIOUS_JUMP_IF_HOLD_EFFECT 91
-#define VARIOUS_INFATUATE_WITH_BATTLER 92
-#define VARIOUS_SET_LAST_USED_ITEM 93
-#define VARIOUS_PARALYZE_TYPE_IMMUNITY 94
-#define VARIOUS_JUMP_IF_ABSENT 95
-#define VARIOUS_DESTROY_ABILITY_POPUP 96
-#define VARIOUS_TOTEM_BOOST 97
-#define VARIOUS_TRY_ACTIVATE_GRIM_NEIGH 98
-#define VARIOUS_MOVEEND_ITEM_EFFECTS 99
-#define VARIOUS_TERRAIN_SEED 100
-#define VARIOUS_MAKE_INVISIBLE 101
-#define VARIOUS_ROOM_SERVICE 102
-#define VARIOUS_EERIE_SPELL_PP_REDUCE 103
-#define VARIOUS_JUMP_IF_TEAM_HEALTHY 104
-#define VARIOUS_TRY_HEAL_QUARTER_HP 105
-#define VARIOUS_REMOVE_TERRAIN 106
-#define VARIOUS_JUMP_IF_PRANKSTER_BLOCKED 107
-#define VARIOUS_TRY_TO_CLEAR_PRIMAL_WEATHER 108
-#define VARIOUS_GET_ROTOTILLER_TARGETS 109
-#define VARIOUS_JUMP_IF_NOT_ROTOTILLER_AFFECTED 110
-#define VARIOUS_TRY_ACTIVATE_BATTLE_BOND 111
-#define VARIOUS_CONSUME_BERRY 112
-#define VARIOUS_JUMP_IF_CANT_REVERT_TO_PRIMAL 113
-#define VARIOUS_JUMP_IF_SPECIES 114
-#define VARIOUS_UPDATE_ABILITY_POPUP 115
-#define VARIOUS_JUMP_IF_WEATHER_AFFECTED 116
-#define VARIOUS_JUMP_IF_LEAF_GUARD_PROTECTED 117
-#define VARIOUS_SET_ATTACKER_STICKY_WEB_USER 118
-#define VARIOUS_TRY_NO_RETREAT 119
-#define VARIOUS_TRY_TAR_SHOT 120
-#define VARIOUS_CAN_TAR_SHOT_WORK 121
-#define VARIOUS_CHECK_POLTERGEIST 122
-#define VARIOUS_CUT_1_3_HP_RAISE_STATS 123
-#define VARIOUS_TRY_END_NEUTRALIZING_GAS 124
-#define VARIOUS_JUMP_IF_UNDER_200 125
-#define VARIOUS_SET_SKY_DROP 126
-#define VARIOUS_CLEAR_SKY_DROP 127
-#define VARIOUS_SKY_DROP_YAWN 128
-#define VARIOUS_CURE_CERTAIN_STATUSES 129
-#define VARIOUS_TRY_RESET_NEGATIVE_STAT_STAGES 130
-#define VARIOUS_JUMP_IF_LAST_USED_ITEM_BERRY 131
-#define VARIOUS_JUMP_IF_LAST_USED_ITEM_HOLD_EFFECT 132
-#define VARIOUS_SAVE_BATTLER_ITEM 133
-#define VARIOUS_RESTORE_BATTLER_ITEM 134
-#define VARIOUS_BATTLER_ITEM_TO_LAST_USED_ITEM 135
-#define VARIOUS_SET_BEAK_BLAST 136
-#define VARIOUS_SWAP_SIDE_STATUSES 137
-#define VARIOUS_SWAP_STATS 138
-#define VARIOUS_TEATIME_INVUL 139
-#define VARIOUS_TEATIME_TARGETS 140
-#define VARIOUS_TRY_WIND_RIDER_POWER 141
-#define VARIOUS_ACTIVATE_WEATHER_CHANGE_ABILITIES 142
-#define VARIOUS_ACTIVATE_TERRAIN_CHANGE_ABILITIES 143
-#define VARIOUS_STORE_HEALING_WISH 144
-#define VARIOUS_HIT_SWITCH_TARGET_FAILED 145
-#define VARIOUS_TRY_REVIVAL_BLESSING 146
+#define VARIOUS_INSTANT_HP_DROP 29
+#define VARIOUS_CLEAR_STATUS 30
+#define VARIOUS_RESTORE_PP 31
+#define VARIOUS_TRY_ACTIVATE_MOXIE 32
+#define VARIOUS_TRY_ACTIVATE_FELL_STINGER 33
+#define VARIOUS_PLAY_MOVE_ANIMATION 34
+#define VARIOUS_SET_LUCKY_CHANT 35
+#define VARIOUS_SUCKER_PUNCH_CHECK 36
+#define VARIOUS_SET_SIMPLE_BEAM 37
+#define VARIOUS_TRY_ENTRAINMENT 38
+#define VARIOUS_SET_LAST_USED_ABILITY 39
+#define VARIOUS_INVERT_STAT_STAGES 40
+#define VARIOUS_TRY_ME_FIRST 41
+#define VARIOUS_JUMP_IF_BATTLE_END 42
+#define VARIOUS_TRY_ELECTRIFY 43
+#define VARIOUS_TRY_REFLECT_TYPE 44
+#define VARIOUS_TRY_SOAK 45
+#define VARIOUS_HANDLE_MEGA_EVO 46
+#define VARIOUS_TRY_LAST_RESORT 47
+#define VARIOUS_SET_ARG_TO_BATTLE_DAMAGE 48
+#define VARIOUS_TRY_HIT_SWITCH_TARGET 49
+#define VARIOUS_TRY_AUTOTOMIZE 50
+#define VARIOUS_ABILITY_POPUP 51
+#define VARIOUS_JUMP_IF_TARGET_ALLY 52
+#define VARIOUS_TRY_SYNCHRONOISE 53
+#define VARIOUS_PSYCHO_SHIFT 54
+#define VARIOUS_CURE_STATUS 55
+#define VARIOUS_POWER_TRICK 56
+#define VARIOUS_AFTER_YOU 57
+#define VARIOUS_BESTOW 58
+#define VARIOUS_JUMP_IF_NOT_GROUNDED 59
+#define VARIOUS_HANDLE_TRAINER_SLIDE_MSG 60
+#define VARIOUS_TRY_TRAINER_SLIDE_MSG_FIRST_OFF 61
+#define VARIOUS_TRY_TRAINER_SLIDE_MSG_LAST_ON 62
+#define VARIOUS_SET_AURORA_VEIL 63
+#define VARIOUS_TRY_THIRD_TYPE 64
+#define VARIOUS_ACUPRESSURE 65
+#define VARIOUS_SET_POWDER 66
+#define VARIOUS_SPECTRAL_THIEF 67
+#define VARIOUS_GRAVITY_ON_AIRBORNE_MONS 68
+#define VARIOUS_CHECK_IF_GRASSY_TERRAIN_HEALS 69
+#define VARIOUS_JUMP_IF_ROAR_FAILS 70
+#define VARIOUS_TRY_INSTRUCT 71
+#define VARIOUS_JUMP_IF_NOT_BERRY 72
+#define VARIOUS_TRACE_ABILITY 73
+#define VARIOUS_UPDATE_NICK 74
+#define VARIOUS_TRY_ILLUSION_OFF 75
+#define VARIOUS_SET_SPRITEIGNORE0HP 76
+#define VARIOUS_HANDLE_FORM_CHANGE 77
+#define VARIOUS_GET_STAT_VALUE 78
+#define VARIOUS_JUMP_IF_FULL_HP 79
+#define VARIOUS_LOSE_TYPE 80
+#define VARIOUS_TRY_ACTIVATE_SOULHEART 81
+#define VARIOUS_TRY_ACTIVATE_RECEIVER 82
+#define VARIOUS_TRY_ACTIVATE_BEAST_BOOST 83
+#define VARIOUS_TRY_FRISK 84
+#define VARIOUS_JUMP_IF_SHIELDS_DOWN_PROTECTED 85
+#define VARIOUS_TRY_FAIRY_LOCK 86
+#define VARIOUS_JUMP_IF_NO_ALLY 87
+#define VARIOUS_POISON_TYPE_IMMUNITY 88
+#define VARIOUS_JUMP_IF_HOLD_EFFECT 89
+#define VARIOUS_INFATUATE_WITH_BATTLER 90
+#define VARIOUS_SET_LAST_USED_ITEM 91
+#define VARIOUS_PARALYZE_TYPE_IMMUNITY 92
+#define VARIOUS_JUMP_IF_ABSENT 93
+#define VARIOUS_DESTROY_ABILITY_POPUP 94
+#define VARIOUS_TOTEM_BOOST 95
+#define VARIOUS_TRY_ACTIVATE_GRIM_NEIGH 96
+#define VARIOUS_MOVEEND_ITEM_EFFECTS 97
+#define VARIOUS_TERRAIN_SEED 98
+#define VARIOUS_MAKE_INVISIBLE 99
+#define VARIOUS_ROOM_SERVICE 100
+#define VARIOUS_EERIE_SPELL_PP_REDUCE 101
+#define VARIOUS_JUMP_IF_TEAM_HEALTHY 102
+#define VARIOUS_TRY_HEAL_QUARTER_HP 103
+#define VARIOUS_REMOVE_TERRAIN 104
+#define VARIOUS_JUMP_IF_PRANKSTER_BLOCKED 105
+#define VARIOUS_TRY_TO_CLEAR_PRIMAL_WEATHER 106
+#define VARIOUS_GET_ROTOTILLER_TARGETS 107
+#define VARIOUS_JUMP_IF_NOT_ROTOTILLER_AFFECTED 108
+#define VARIOUS_TRY_ACTIVATE_BATTLE_BOND 109
+#define VARIOUS_CONSUME_BERRY 110
+#define VARIOUS_JUMP_IF_CANT_REVERT_TO_PRIMAL 111
+#define VARIOUS_JUMP_IF_SPECIES 112
+#define VARIOUS_UPDATE_ABILITY_POPUP 113
+#define VARIOUS_JUMP_IF_WEATHER_AFFECTED 114
+#define VARIOUS_JUMP_IF_LEAF_GUARD_PROTECTED 115
+#define VARIOUS_SET_ATTACKER_STICKY_WEB_USER 116
+#define VARIOUS_TRY_NO_RETREAT 117
+#define VARIOUS_TRY_TAR_SHOT 118
+#define VARIOUS_CAN_TAR_SHOT_WORK 119
+#define VARIOUS_CHECK_POLTERGEIST 120
+#define VARIOUS_CUT_1_3_HP_RAISE_STATS 121
+#define VARIOUS_TRY_END_NEUTRALIZING_GAS 122
+#define VARIOUS_JUMP_IF_UNDER_200 123
+#define VARIOUS_SET_SKY_DROP 124
+#define VARIOUS_CLEAR_SKY_DROP 125
+#define VARIOUS_SKY_DROP_YAWN 126
+#define VARIOUS_CURE_CERTAIN_STATUSES 127
+#define VARIOUS_TRY_RESET_NEGATIVE_STAT_STAGES 128
+#define VARIOUS_JUMP_IF_LAST_USED_ITEM_BERRY 129
+#define VARIOUS_JUMP_IF_LAST_USED_ITEM_HOLD_EFFECT 130
+#define VARIOUS_SAVE_BATTLER_ITEM 131
+#define VARIOUS_RESTORE_BATTLER_ITEM 132
+#define VARIOUS_BATTLER_ITEM_TO_LAST_USED_ITEM 133
+#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_setup.h b/include/constants/battle_setup.h
index d825c88bc314..bb7f9adefaf5 100644
--- a/include/constants/battle_setup.h
+++ b/include/constants/battle_setup.h
@@ -14,5 +14,6 @@
#define TRAINER_BATTLE_SET_TRAINER_A 10
#define TRAINER_BATTLE_SET_TRAINER_B 11
#define TRAINER_BATTLE_HILL 12
+#define TRAINER_BATTLE_TWO_TRAINERS_NO_INTRO 13
#endif // GUARD_CONSTANTS_BATTLE_SETUP_H
diff --git a/include/constants/battle_string_ids.h b/include/constants/battle_string_ids.h
index 6f5b0db9efe1..9529e026c11b 100644
--- a/include/constants/battle_string_ids.h
+++ b/include/constants/battle_string_ids.h
@@ -670,45 +670,51 @@
#define STRINGID_CURRENTMOVECANTSELECT 668
#define STRINGID_TARGETISBEINGSALTCURED 669
#define STRINGID_TARGETISHURTBYSALTCURE 670
-#define STRINGID_OPPORTUNISTCOPIED 671
-#define STRINGID_TARGETCOVEREDINSTICKYCANDYSYRUP 672
-#define STRINGID_SHARPSTEELFLOATS 673
-#define STRINGID_SHARPSTEELDMG 674
-#define STRINGID_PKMNBLEWAWAYSHARPSTEEL 675
-#define STRINGID_SHARPSTEELDISAPPEAREDFROMTEAM 676
-#define STRINGID_TEAMTRAPPEDWITHVINES 677
-#define STRINGID_PKMNHURTBYVINES 678
-#define STRINGID_TEAMCAUGHTINVORTEX 679
-#define STRINGID_PKMNHURTBYVORTEX 680
-#define STRINGID_TEAMSURROUNDEDBYFIRE 681
-#define STRINGID_PKMNBURNINGUP 682
-#define STRINGID_TEAMSURROUNDEDBYROCKS 683
-#define STRINGID_PKMNHURTBYROCKSTHROWN 684
-#define STRINGID_MOVEBLOCKEDBYDYNAMAX 685
-#define STRINGID_ZEROTOHEROTRANSFORMATION 686
-#define STRINGID_THETWOMOVESBECOMEONE 687
-#define STRINGID_ARAINBOWAPPEAREDONSIDE 688
-#define STRINGID_THERAINBOWDISAPPEARED 689
-#define STRINGID_WAITINGFORPARTNERSMOVE 690
-#define STRINGID_SEAOFFIREENVELOPEDSIDE 691
-#define STRINGID_HURTBYTHESEAOFFIRE 692
-#define STRINGID_THESEAOFFIREDISAPPEARED 693
-#define STRINGID_SWAMPENVELOPEDSIDE 694
-#define STRINGID_THESWAMPDISAPPEARED 695
-#define STRINGID_PKMNTELLCHILLINGRECEPTIONJOKE 696
-#define STRINGID_HOSPITALITYRESTORATION 697
-#define STRINGID_ELECTROSHOTCHARGING 698
-#define STRINGID_ITEMWASUSEDUP 699
-#define STRINGID_ATTACKERLOSTITSTYPE 700
-#define STRINGID_SHEDITSTAIL 701
-#define STRINGID_CLOAKEDINAHARSHLIGHT 702
-#define STRINGID_SUPERSWEETAROMAWAFTS 703
-#define STRINGID_DIMENSIONSWERETWISTED 704
-#define STRINGID_BIZARREARENACREATED 705
-#define STRINGID_BIZARREAREACREATED 706
-#define STRINGID_TIDYINGUPCOMPLETE 707
+#define STRINGID_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_FICKLEBEAMDOUBLED 713
-#define BATTLESTRINGS_COUNT 708
+#define BATTLESTRINGS_COUNT 714
// This is the string id that gBattleStringsTable starts with.
// String ids before this (e.g. STRINGID_INTROMSG) are not in the table,
@@ -760,6 +766,17 @@
#define B_MSG_STARTED_SUNLIGHT 4
#define B_MSG_STARTED_HAIL 5
#define B_MSG_STARTED_SNOW 6
+#define B_MSG_STARTED_FOG 7
+
+// gWeatherEndsStringIds
+#define B_MSG_WEATHER_END_RAIN 0
+#define B_MSG_WEATHER_END_SANDSTORM 1
+#define B_MSG_WEATHER_END_SUN 2
+#define B_MSG_WEATHER_END_HAIL 3
+#define B_MSG_WEATHER_END_STRONG_WINDS 4
+#define B_MSG_WEATHER_END_SNOW 5
+#define B_MSG_WEATHER_END_FOG 6
+#define B_MSG_WEATHER_END_COUNT 7
// gRainContinuesStringIds
#define B_MSG_RAIN_CONTINUES 0
diff --git a/include/constants/event_object_movement.h b/include/constants/event_object_movement.h
index cd971efddfd4..e7641f982602 100755
--- a/include/constants/event_object_movement.h
+++ b/include/constants/event_object_movement.h
@@ -82,7 +82,8 @@
#define MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_UP 0x4E
#define MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_LEFT 0x4F
#define MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_RIGHT 0x50
-#define NUM_MOVEMENT_TYPES 0x51
+#define MOVEMENT_TYPE_FOLLOW_PLAYER 0x51
+#define NUM_MOVEMENT_TYPES 0x52
#define MOVEMENT_ACTION_FACE_DOWN 0x0
#define MOVEMENT_ACTION_FACE_UP 0x1
@@ -244,6 +245,8 @@
#define MOVEMENT_ACTION_FLY_DOWN 0x9D
#define MOVEMENT_ACTION_EMOTE_X 0x9E
#define MOVEMENT_ACTION_EMOTE_DOUBLE_EXCL_MARK 0x9F
+#define MOVEMENT_ACTION_EXIT_POKEBALL 0xA0
+#define MOVEMENT_ACTION_ENTER_POKEBALL 0xA1
#define MOVEMENT_ACTION_STEP_END 0xFE
#define MOVEMENT_ACTION_NONE 0xFF
@@ -275,6 +278,11 @@
#define ANIM_RUN_WEST (ANIM_STD_COUNT + 2)
#define ANIM_RUN_EAST (ANIM_STD_COUNT + 3)
+#define ANIM_EXIT_POKEBALL_FAST_SOUTH (ANIM_STD_COUNT + 0)
+#define ANIM_EXIT_POKEBALL_FAST_NORTH (ANIM_STD_COUNT + 1)
+#define ANIM_EXIT_POKEBALL_FAST_WEST (ANIM_STD_COUNT + 2)
+#define ANIM_EXIT_POKEBALL_FAST_EAST (ANIM_STD_COUNT + 3)
+
#define ANIM_BUNNY_HOP_BACK_WHEEL_SOUTH (ANIM_STD_COUNT + 0)
#define ANIM_BUNNY_HOP_BACK_WHEEL_NORTH (ANIM_STD_COUNT + 1)
#define ANIM_BUNNY_HOP_BACK_WHEEL_WEST (ANIM_STD_COUNT + 2)
diff --git a/include/constants/event_objects.h b/include/constants/event_objects.h
index c8fa942655a6..fccc206638ad 100644
--- a/include/constants/event_objects.h
+++ b/include/constants/event_objects.h
@@ -240,24 +240,20 @@
#define OBJ_EVENT_GFX_LINK_RS_MAY 236
#define OBJ_EVENT_GFX_LUGIA 237
#define OBJ_EVENT_GFX_HOOH 238
+#define OBJ_EVENT_GFX_POKE_BALL 239
+#define OBJ_EVENT_GFX_OW_MON 240
-// NOTE: By default, the max value for NUM_OBJ_EVENT_GFX is 239.
-//
-// Object event graphics ids are 1 byte in size (max value of 255), and the dynamic
-// graphics ids that start after NUM_OBJ_EVENT_GFX reach this limit. No graphics id
-// uses the value 239 itself, so removing the "+ 1" in OBJ_EVENT_GFX_VARS would
-// allow increasing NUM_OBJ_EVENT_GFX to 240. There are also a handful of unused
-// object graphics that can be removed. If more graphics are needed, anything that
-// stores graphics ids will need to be increased in size. See wiki entry below:
-// https://github.com/pret/pokeemerald/wiki/Feature-Branches#overworld-expansion
-#define NUM_OBJ_EVENT_GFX 239
+// NOTE: The maximum amount of object events has been expanded from 255 to 65535.
+// Since dynamic graphics ids still require at least 16 free values, the actual limit
+// is 65519, but even considering follower Pokémon, this should be more than enough :)
+#define NUM_OBJ_EVENT_GFX 241
// These are dynamic object gfx ids.
// They correspond with the values of the VAR_OBJ_GFX_ID_X vars.
// More info about them in include/constants/vars.h
#define OBJ_EVENT_GFX_VARS (NUM_OBJ_EVENT_GFX + 1)
-#define OBJ_EVENT_GFX_VAR_0 (OBJ_EVENT_GFX_VARS + 0x0) // 240
+#define OBJ_EVENT_GFX_VAR_0 (OBJ_EVENT_GFX_VARS + 0x0)
#define OBJ_EVENT_GFX_VAR_1 (OBJ_EVENT_GFX_VARS + 0x1)
#define OBJ_EVENT_GFX_VAR_2 (OBJ_EVENT_GFX_VARS + 0x2)
#define OBJ_EVENT_GFX_VAR_3 (OBJ_EVENT_GFX_VARS + 0x3)
@@ -272,12 +268,23 @@
#define OBJ_EVENT_GFX_VAR_C (OBJ_EVENT_GFX_VARS + 0xC)
#define OBJ_EVENT_GFX_VAR_D (OBJ_EVENT_GFX_VARS + 0xD)
#define OBJ_EVENT_GFX_VAR_E (OBJ_EVENT_GFX_VARS + 0xE)
-#define OBJ_EVENT_GFX_VAR_F (OBJ_EVENT_GFX_VARS + 0xF) // 255
+#define OBJ_EVENT_GFX_VAR_F (OBJ_EVENT_GFX_VARS + 0xF)
-#define SHADOW_SIZE_S 0
-#define SHADOW_SIZE_M 1
-#define SHADOW_SIZE_L 2
-#define SHADOW_SIZE_XL 3
+#define OBJ_EVENT_GFX_MON_BASE 0x200 // 512
+#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.
+#define OBJ_EVENT_GFX_SPECIES(name) (SPECIES_##name + OBJ_EVENT_GFX_MON_BASE)
+#define OBJ_EVENT_GFX_SPECIES_SHINY(name) (SPECIES_##name + OBJ_EVENT_GFX_MON_BASE + SPECIES_SHINY_TAG)
+
+#define OW_SPECIES(x) (((x)->graphicsId & OBJ_EVENT_GFX_SPECIES_MASK) - OBJ_EVENT_GFX_MON_BASE)
+#define OW_FORM(x) ((x)->graphicsId >> OBJ_EVENT_GFX_SPECIES_BITS)
+
+#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 F_INANIMATE (1 << 6)
#define F_DISABLE_REFLECTION_PALETTE_LOAD (1 << 7)
@@ -285,6 +292,9 @@
#define TRACKS_NONE 0
#define TRACKS_FOOT 1
#define TRACKS_BIKE_TIRE 2
+#define TRACKS_SLITHER 3
+#define TRACKS_SPOT 4
+#define TRACKS_BUG 5
#define FIRST_DECORATION_SPRITE_GFX OBJ_EVENT_GFX_PICHU_DOLL
@@ -294,6 +304,7 @@
// Special object event local ids
#define OBJ_EVENT_ID_PLAYER 0xFF
#define OBJ_EVENT_ID_CAMERA 0x7F
+#define OBJ_EVENT_ID_FOLLOWER 0xFE
// Object event local ids referenced in C files
#define LOCALID_ROUTE111_PLAYER_FALLING 45
@@ -325,4 +336,90 @@
#define LOCALID_BATTLE_FRONTIER_MART_CLERK 1
#define LOCALID_SLATEPORT_ENERGY_GURU 25
+// Moved from src/event_object_movement.c so that they're accesible from other files.
+#define OBJ_EVENT_PAL_TAG_BRENDAN 0x1100
+#define OBJ_EVENT_PAL_TAG_BRENDAN_REFLECTION 0x1101
+#define OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION 0x1102
+#define OBJ_EVENT_PAL_TAG_NPC_1 0x1103
+#define OBJ_EVENT_PAL_TAG_NPC_2 0x1104
+#define OBJ_EVENT_PAL_TAG_NPC_3 0x1105
+#define OBJ_EVENT_PAL_TAG_NPC_4 0x1106
+#define OBJ_EVENT_PAL_TAG_NPC_1_REFLECTION 0x1107
+#define OBJ_EVENT_PAL_TAG_NPC_2_REFLECTION 0x1108
+#define OBJ_EVENT_PAL_TAG_NPC_3_REFLECTION 0x1109
+#define OBJ_EVENT_PAL_TAG_NPC_4_REFLECTION 0x110A
+#define OBJ_EVENT_PAL_TAG_QUINTY_PLUMP 0x110B
+#define OBJ_EVENT_PAL_TAG_QUINTY_PLUMP_REFLECTION 0x110C
+#define OBJ_EVENT_PAL_TAG_TRUCK 0x110D
+#define OBJ_EVENT_PAL_TAG_VIGOROTH 0x110E
+#define OBJ_EVENT_PAL_TAG_ZIGZAGOON 0x110F
+#define OBJ_EVENT_PAL_TAG_MAY 0x1110
+#define OBJ_EVENT_PAL_TAG_MAY_REFLECTION 0x1111
+#define OBJ_EVENT_PAL_TAG_MOVING_BOX 0x1112
+#define OBJ_EVENT_PAL_TAG_CABLE_CAR 0x1113
+#define OBJ_EVENT_PAL_TAG_SSTIDAL 0x1114
+#define OBJ_EVENT_PAL_TAG_PLAYER_UNDERWATER 0x1115
+#define OBJ_EVENT_PAL_TAG_KYOGRE 0x1116
+#define OBJ_EVENT_PAL_TAG_KYOGRE_REFLECTION 0x1117
+#define OBJ_EVENT_PAL_TAG_GROUDON 0x1118
+#define OBJ_EVENT_PAL_TAG_GROUDON_REFLECTION 0x1119
+#define OBJ_EVENT_PAL_TAG_UNUSED 0x111A
+#define OBJ_EVENT_PAL_TAG_SUBMARINE_SHADOW 0x111B
+#define OBJ_EVENT_PAL_TAG_POOCHYENA 0x111C
+#define OBJ_EVENT_PAL_TAG_RED_LEAF 0x111D
+#define OBJ_EVENT_PAL_TAG_DEOXYS 0x111E
+#define OBJ_EVENT_PAL_TAG_BIRTH_ISLAND_STONE 0x111F
+#define OBJ_EVENT_PAL_TAG_HO_OH 0x1120
+#define OBJ_EVENT_PAL_TAG_LUGIA 0x1121
+#define OBJ_EVENT_PAL_TAG_RS_BRENDAN 0x1122
+#define OBJ_EVENT_PAL_TAG_RS_MAY 0x1123
+#define OBJ_EVENT_PAL_TAG_DYNAMIC 0x1124
+
+#if OW_FOLLOWERS_POKEBALLS
+// Vanilla
+#define OBJ_EVENT_PAL_TAG_BALL_MASTER 0x1150
+#define OBJ_EVENT_PAL_TAG_BALL_ULTRA 0x1151
+#define OBJ_EVENT_PAL_TAG_BALL_GREAT 0x1152
+#define OBJ_EVENT_PAL_TAG_BALL_SAFARI 0x1153
+#define OBJ_EVENT_PAL_TAG_BALL_NET 0x1154
+#define OBJ_EVENT_PAL_TAG_BALL_DIVE 0x1155
+#define OBJ_EVENT_PAL_TAG_BALL_NEST 0x1156
+#define OBJ_EVENT_PAL_TAG_BALL_REPEAT 0x1157
+#define OBJ_EVENT_PAL_TAG_BALL_TIMER 0x1158
+#define OBJ_EVENT_PAL_TAG_BALL_LUXURY 0x1159
+#define OBJ_EVENT_PAL_TAG_BALL_PREMIER 0x115A
+// Gen IV/Sinnoh
+#define OBJ_EVENT_PAL_TAG_BALL_DUSK 0x115B
+#define OBJ_EVENT_PAL_TAG_BALL_HEAL 0x115C
+#define OBJ_EVENT_PAL_TAG_BALL_QUICK 0x115D
+#define OBJ_EVENT_PAL_TAG_BALL_CHERISH 0x115E
+#define OBJ_EVENT_PAL_TAG_BALL_PARK 0x115F
+// Gen II/Johto Apricorns
+#define OBJ_EVENT_PAL_TAG_BALL_FAST 0x1160
+#define OBJ_EVENT_PAL_TAG_BALL_LEVEL 0x1161
+#define OBJ_EVENT_PAL_TAG_BALL_LURE 0x1162
+#define OBJ_EVENT_PAL_TAG_BALL_HEAVY 0x1163
+#define OBJ_EVENT_PAL_TAG_BALL_LOVE 0x1164
+#define OBJ_EVENT_PAL_TAG_BALL_FRIEND 0x1165
+#define OBJ_EVENT_PAL_TAG_BALL_MOON 0x1166
+#define OBJ_EVENT_PAL_TAG_BALL_SPORT 0x1167
+// Gen V
+#define OBJ_EVENT_PAL_TAG_BALL_DREAM 0x1168
+// Gen VII
+#define OBJ_EVENT_PAL_TAG_BALL_BEAST 0x1169
+// Gen VIII
+#define OBJ_EVENT_PAL_TAG_BALL_STRANGE 0x116A
+#endif //OW_FOLLOWERS_POKEBALLS
+// Used as a placeholder follower graphic
+#define OBJ_EVENT_PAL_TAG_SUBSTITUTE 0x7611
+#define OBJ_EVENT_PAL_TAG_EMOTES 0x8002
+// Not a real OW palette tag; used for the white flash applied to followers
+#define OBJ_EVENT_PAL_TAG_WHITE (OBJ_EVENT_PAL_TAG_NONE - 1)
+#define OBJ_EVENT_PAL_TAG_NONE 0x11FF
+
+// This + localId is used as the tileTag
+// for compressed graphicsInfos
+// '(C)ompressed (E)vent'
+#define COMP_OW_TILE_TAG_BASE 0xCE00
+
#endif // GUARD_CONSTANTS_EVENT_OBJECTS_H
diff --git a/include/constants/expansion.h b/include/constants/expansion.h
index bf54ade9fcdf..caf7e4ddab2d 100644
--- a/include/constants/expansion.h
+++ b/include/constants/expansion.h
@@ -1,10 +1,10 @@
#ifndef GUARD_CONSTANTS_EXPANSION_H
#define GUARD_CONSTANTS_EXPANSION_H
-// 1.8.5
+// 1.9.1
#define EXPANSION_VERSION_MAJOR 1
-#define EXPANSION_VERSION_MINOR 8
-#define EXPANSION_VERSION_PATCH 5
+#define EXPANSION_VERSION_MINOR 9
+#define EXPANSION_VERSION_PATCH 2
// FALSE if this this version of Expansion is not a tagged commit, i.e.
// it contains unreleased changes.
diff --git a/include/constants/field_effects.h b/include/constants/field_effects.h
index 4459dcfaff7d..f6e6106d90a3 100644
--- a/include/constants/field_effects.h
+++ b/include/constants/field_effects.h
@@ -35,6 +35,7 @@
#define FLDEFF_USE_FLY 31
#define FLDEFF_FLY_IN 32
#define FLDEFF_QUESTION_MARK_ICON 33
+#define FLDEFF_EMOTE 33 // shares a slot with FLDEFF_QUESTION_MARK_ICON
#define FLDEFF_FEET_IN_FLOWING_WATER 34
#define FLDEFF_BIKE_TIRE_TRACKS 35
#define FLDEFF_SAND_DISGUISE 36
@@ -71,6 +72,10 @@
#define FLDEFF_USE_VS_SEEKER 67
#define FLDEFF_X_ICON 68
#define FLDEFF_DOUBLE_EXCL_MARK_ICON 69
+#define FLDEFF_TRACKS_SLITHER 70
+#define FLDEFF_TRACKS_SPOT 71
+#define FLDEFF_TRACKS_BUG 72
+
#define FLDEFFOBJ_SHADOW_S 0
#define FLDEFFOBJ_SHADOW_M 1
#define FLDEFFOBJ_SHADOW_L 2
@@ -108,6 +113,9 @@
#define FLDEFFOBJ_BUBBLES 34
#define FLDEFFOBJ_SMALL_SPARKLE 35
#define FLDEFFOBJ_RAYQUAZA 36
+#define FLDEFFOBJ_TRACKS_SLITHER 37
+#define FLDEFFOBJ_TRACKS_SPOT 38
+#define FLDEFFOBJ_TRACKS_BUG 39
#define FLDEFF_PAL_TAG_CUT_GRASS 0x1000
#define FLDEFF_PAL_TAG_SECRET_POWER_TREE 0x1003
diff --git a/include/constants/field_weather.h b/include/constants/field_weather.h
index e84dbc48c4dd..fe7eb6a1ae7c 100644
--- a/include/constants/field_weather.h
+++ b/include/constants/field_weather.h
@@ -8,6 +8,7 @@
#define NUM_FOG_DIAGONAL_SPRITES 20
#define NUM_SANDSTORM_SPRITES 20
#define NUM_SWIRL_SANDSTORM_SPRITES 5
+#define NUM_SNOWFLAKE_SPRITES 16
// Controls how the weather should be changing the screen palettes.
#define WEATHER_PAL_STATE_CHANGING_WEATHER 0
diff --git a/include/constants/flags.h b/include/constants/flags.h
index 587d3b637c02..4c58c57a937f 100644
--- a/include/constants/flags.h
+++ b/include/constants/flags.h
@@ -21,7 +21,7 @@
#define FLAG_TEMP_B (TEMP_FLAGS_START + 0xB) // Unused Flag
#define FLAG_TEMP_C (TEMP_FLAGS_START + 0xC) // Unused Flag
#define FLAG_TEMP_D (TEMP_FLAGS_START + 0xD) // Unused Flag
-#define FLAG_TEMP_E (TEMP_FLAGS_START + 0xE) // Unused Flag
+#define FLAG_TEMP_E (TEMP_FLAGS_START + 0xE) // When set, follower pokemon won't be spawned
#define FLAG_TEMP_F (TEMP_FLAGS_START + 0xF) // Unused Flag
#define FLAG_TEMP_10 (TEMP_FLAGS_START + 0x10) // Unused Flag
#define FLAG_TEMP_11 (TEMP_FLAGS_START + 0x11)
@@ -1638,6 +1638,7 @@
#define FLAG_ENABLE_MULTI_CORRIDOR_DOOR (SPECIAL_FLAGS_START + 0x2)
#define FLAG_SPECIAL_FLAG_UNUSED_0x4003 (SPECIAL_FLAGS_START + 0x3) // Unused Flag
#define FLAG_STORING_ITEMS_IN_PYRAMID_BAG (SPECIAL_FLAGS_START + 0x4)
+#define FLAG_SAFE_FOLLOWER_MOVEMENT (SPECIAL_FLAGS_START + 0x5) // When set, applymovement does not put the follower inside a pokeball
// FLAG_SPECIAL_FLAG_0x4005 - 0x407F also exist and are unused
#define SPECIAL_FLAGS_END (SPECIAL_FLAGS_START + 0x7F)
#define NUM_SPECIAL_FLAGS (SPECIAL_FLAGS_END - SPECIAL_FLAGS_START + 1)
@@ -1646,6 +1647,7 @@
#define FLAG_TEMP_SKIP_GABBY_INTERVIEW FLAG_TEMP_1
#define FLAG_TEMP_REGICE_PUZZLE_STARTED FLAG_TEMP_2
#define FLAG_TEMP_REGICE_PUZZLE_FAILED FLAG_TEMP_3
+#define FLAG_TEMP_HIDE_FOLLOWER FLAG_TEMP_E
#define FLAG_TEMP_HIDE_MIRAGE_ISLAND_BERRY_TREE FLAG_TEMP_11
#endif // GUARD_CONSTANTS_FLAGS_H
diff --git a/include/constants/followers.h b/include/constants/followers.h
new file mode 100644
index 000000000000..aef8161cf765
--- /dev/null
+++ b/include/constants/followers.h
@@ -0,0 +1,16 @@
+#ifndef GUARD_CONSTANTS_FOLLOWERS_H
+#define GUARD_CONSTANTS_FOLLOWERS_H
+
+#define FOLLOWER_HAPPY_MESSAGE_COUNT 31
+#define FOLLOWER_NEUTRAL_MESSAGE_COUNT 14
+#define FOLLOWER_SAD_MESSAGE_COUNT 3
+#define FOLLOWER_UPSET_MESSAGE_COUNT 3
+#define FOLLOWER_ANGRY_MESSAGE_COUNT 5
+#define FOLLOWER_PENSIVE_MESSAGE_COUNT 20
+#define FOLLOWER_LOVE_MESSAGE_COUNT 10
+#define FOLLOWER_SURPRISE_MESSAGE_COUNT 20
+#define FOLLOWER_CURIOUS_MESSAGE_COUNT 7
+#define FOLLOWER_MUSIC_MESSAGE_COUNT 14
+#define FOLLOWER_POISONED_MESSAGE_COUNT 1
+
+#endif //GUARD_CONSTANTS_FOLLOWERS_H
diff --git a/include/constants/form_change_types.h b/include/constants/form_change_types.h
index 94f97639f807..74bc16cf2f5c 100644
--- a/include/constants/form_change_types.h
+++ b/include/constants/form_change_types.h
@@ -63,7 +63,7 @@
#define FORM_CHANGE_END_BATTLE_TERRAIN 8
// Form change that activates when the Pokémon is switched out in battle.
-// - No parameters.
+// param1: ability to check, optional
#define FORM_CHANGE_BATTLE_SWITCH 9
// Form change that activates when the Pokémon's HP % passes a certain threshold.
@@ -123,6 +123,15 @@
#define FORM_CHANGE_STATUS 20
// Form change that activates after move is used. Currently only used for activating Gulp Missile.
-#define FORM_CHANGE_HIT_BY_MOVE 21
+#define FORM_CHANGE_HIT_BY_MOVE 21
+
+// Form change that activates when terastallized as as a specific type
+// param1: tera type
+#define FORM_CHANGE_BATTLE_TERASTALLIZATION 22
+
+// Form change that activates at midnight after a certain amount of days has passed.
+// Adding this form change will automatically make the countdown start as soon the Pokémon changes into a species other than the one specified for this form change.
+// param1: amount of days
+#define FORM_CHANGE_DAYS_PASSED 23
#endif // GUARD_CONSTANTS_FORM_CHANGE_TYPES_H
diff --git a/include/constants/global.h b/include/constants/global.h
index ad13c11baee4..fc607a87ee8d 100644
--- a/include/constants/global.h
+++ b/include/constants/global.h
@@ -1,6 +1,7 @@
#ifndef GUARD_CONSTANTS_GLOBAL_H
#define GUARD_CONSTANTS_GLOBAL_H
+#include "config/general.h"
#include "config/battle.h"
#include "config/debug.h"
#include "config/item.h"
@@ -74,6 +75,7 @@
#define GIFT_RIBBONS_COUNT 11
#define SAVED_TRENDS_COUNT 5
#define PYRAMID_BAG_ITEMS_COUNT 10
+#define ROAMER_COUNT 1 // Number of maximum concurrent active roamers
// Number of facilities for Ranking Hall.
// 7 facilities for single mode + tower double mode + tower multi mode.
@@ -101,9 +103,10 @@
#define CONTEST_CATEGORIES_COUNT 5
// string lengths
-#define ITEM_NAME_LENGTH 14
+#define ITEM_NAME_LENGTH ((I_EXPANDED_ITEM_NAMES == TRUE) ? 20 : 14)
#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 10
+#define POKEMON_NAME_LENGTH 12
+#define VANILLA_POKEMON_NAME_LENGTH 10
#define POKEMON_NAME_BUFFER_SIZE max(20, POKEMON_NAME_LENGTH + 1) // Frequently used buffer size. Larger than necessary
#define PLAYER_NAME_LENGTH 7
#define MAIL_WORDS_COUNT 9
@@ -115,7 +118,7 @@
#define WONDER_NEWS_TEXT_LENGTH 40
#define WONDER_CARD_BODY_TEXT_LINES 4
#define WONDER_NEWS_BODY_TEXT_LINES 10
-#define TYPE_NAME_LENGTH 6
+#define TYPE_NAME_LENGTH ((B_EXPANDED_TYPE_NAMES == TRUE) ? 8 : 6)
#define ABILITY_NAME_LENGTH ((B_EXPANDED_ABILITY_NAMES == TRUE) ? 16 : 12)
#define TRAINER_NAME_LENGTH 10
@@ -154,6 +157,11 @@
#define DIR_SOUTHEAST 6
#define DIR_NORTHWEST 7
#define DIR_NORTHEAST 8
+#define CARDINAL_DIRECTION_COUNT DIR_SOUTHWEST
+
+#define AXIS_X 0
+#define AXIS_Y 1
+#define AXIS_COUNT 2
#define CONNECTION_INVALID -1
#define CONNECTION_NONE 0
@@ -164,4 +172,8 @@
#define CONNECTION_DIVE 5
#define CONNECTION_EMERGE 6
+#if TESTING
+#include "config/test.h"
+#endif
+
#endif // GUARD_CONSTANTS_GLOBAL_H
diff --git a/include/constants/moves.h b/include/constants/moves.h
index 907cf6901b35..b6a0711b9bd2 100644
--- a/include/constants/moves.h
+++ b/include/constants/moves.h
@@ -935,6 +935,7 @@
// Signature Z Moves
#define MOVE_CATASTROPIKA (MOVES_COUNT + 18)
#define MOVE_10000000_VOLT_THUNDERBOLT (MOVES_COUNT + 19)
+#define MOVE_10_000_000_VOLT_THUNDERBOLT MOVE_10000000_VOLT_THUNDERBOLT
#define MOVE_STOKED_SPARKSURFER (MOVES_COUNT + 20)
#define MOVE_EXTREME_EVOBOOST (MOVES_COUNT + 21)
#define MOVE_PULVERIZING_PANCAKE (MOVES_COUNT + 22)
diff --git a/include/constants/pokemon.h b/include/constants/pokemon.h
index 9bfdec6bf1fb..588caec47f11 100644
--- a/include/constants/pokemon.h
+++ b/include/constants/pokemon.h
@@ -2,27 +2,28 @@
#define GUARD_CONSTANTS_POKEMON_H
// Pokémon types
-#define TYPE_NONE 255
-#define TYPE_NORMAL 0
-#define TYPE_FIGHTING 1
-#define TYPE_FLYING 2
-#define TYPE_POISON 3
-#define TYPE_GROUND 4
-#define TYPE_ROCK 5
-#define TYPE_BUG 6
-#define TYPE_GHOST 7
-#define TYPE_STEEL 8
-#define TYPE_MYSTERY 9
-#define TYPE_FIRE 10
-#define TYPE_WATER 11
-#define TYPE_GRASS 12
-#define TYPE_ELECTRIC 13
-#define TYPE_PSYCHIC 14
-#define TYPE_ICE 15
-#define TYPE_DRAGON 16
-#define TYPE_DARK 17
-#define TYPE_FAIRY 18
-#define NUMBER_OF_MON_TYPES 19
+#define TYPE_NONE 0
+#define TYPE_NORMAL 1
+#define TYPE_FIGHTING 2
+#define TYPE_FLYING 3
+#define TYPE_POISON 4
+#define TYPE_GROUND 5
+#define TYPE_ROCK 6
+#define TYPE_BUG 7
+#define TYPE_GHOST 8
+#define TYPE_STEEL 9
+#define TYPE_MYSTERY 10
+#define TYPE_FIRE 11
+#define TYPE_WATER 12
+#define TYPE_GRASS 13
+#define TYPE_ELECTRIC 14
+#define TYPE_PSYCHIC 15
+#define TYPE_ICE 16
+#define TYPE_DRAGON 17
+#define TYPE_DARK 18
+#define TYPE_FAIRY 19
+#define TYPE_STELLAR 20
+#define NUMBER_OF_MON_TYPES 21
// Pokémon egg groups
#define EGG_GROUP_NONE 0
@@ -291,18 +292,22 @@
#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_LEVEL_MOVE_TWENTY_TIMES 47 // Pokémon levels up after having used a move for at least 20 times
-#define EVO_LEVEL_RECOIL_DAMAGE_MALE 48 // Pokémon levels up after having suffered specified amount of non-fainting recoil damage as a male
-#define EVO_LEVEL_RECOIL_DAMAGE_FEMALE 49 // Pokémon levels up after having suffered specified amount of non-fainting recoil damage as a female
+#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_TRADE 1
-#define EVO_MODE_ITEM_USE 2
-#define EVO_MODE_ITEM_CHECK 3 // If an Everstone is being held, still want to show that the stone *could* be used on that Pokémon to evolve
-#define EVO_MODE_BATTLE_SPECIAL 4
-#define EVO_MODE_OVERWORLD_SPECIAL 5
-#define EVO_MODE_BATTLE_ONLY 6 // This mode is only used in battles to support Tandemaus' unique requirement
+#define 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
#define MON_PIC_WIDTH 64
#define MON_PIC_HEIGHT 64
diff --git a/include/constants/pokemon_debug.h b/include/constants/pokemon_sprite_visualizer.h
similarity index 75%
rename from include/constants/pokemon_debug.h
rename to include/constants/pokemon_sprite_visualizer.h
index c75392bf2202..36afdb5b87b4 100644
--- a/include/constants/pokemon_debug.h
+++ b/include/constants/pokemon_sprite_visualizer.h
@@ -1,13 +1,13 @@
-#ifndef GUARD_CONSTANTS_POKEMON_DEBUG_H
-#define GUARD_CONSTANTS_POKEMON_DEBUG_H
+#ifndef GUARD_CONSTANTS_POKEMON_SPRITE_VISUALIZER_H
+#define GUARD_CONSTANTS_POKEMON_SPRITE_VISUALIZER_H
//Defines
-#define DEBUG_MON_BACK_X 62
-#define DEBUG_MON_BACK_Y 80
-#define DEBUG_ICON_X 220
-#define DEBUG_ICON_Y 140
-#define DEBUG_MON_SHINY 0
-#define DEBUG_MON_NORMAL 9
+#define VISUALIZER_MON_BACK_X 62
+#define VISUALIZER_MON_BACK_Y 80
+#define VISUALIZER_ICON_X 224
+#define VISUALIZER_ICON_Y 144
+#define VISUALIZER_FOLLOWER_X 176
+#define VISUALIZER_FOLLOWER_Y 128
#define MODIFY_DIGITS_MAX 4
#define MODIFY_DIGITS_ARROW_X 129
@@ -50,4 +50,4 @@
#define MAP_BATTLE_SCENE_KYOGRE 12
#define MAP_BATTLE_SCENE_RAYQUAZA 13
-#endif // GUARD_CONSTANTS_POKEMON_DEBUG_H
\ No newline at end of file
+#endif // GUARD_CONSTANTS_POKEMON_SPRITE_VISUALIZER_H
diff --git a/include/constants/species.h b/include/constants/species.h
index 73455131247f..895e444d51d2 100644
--- a/include/constants/species.h
+++ b/include/constants/species.h
@@ -1633,4 +1633,144 @@
#define NUM_SPECIES SPECIES_EGG
+#define SPECIES_SHINY_TAG 5000
+
+// Competitive format aliases
+#define SPECIES_ALCREMIE_GMAX SPECIES_ALCREMIE_GIGANTAMAX
+#define SPECIES_APPLETUN_GMAX SPECIES_APPLETUN_GIGANTAMAX
+#define SPECIES_ARCANINE_HISUI SPECIES_ARCANINE_HISUIAN
+#define SPECIES_ARTICUNO_GALAR SPECIES_ARTICUNO_GALARIAN
+#define SPECIES_AVALUGG_HISUI SPECIES_AVALUGG_HISUIAN
+#define SPECIES_BLASTOISE_GMAX SPECIES_BLASTOISE_GIGANTAMAX
+#define SPECIES_BRAVIARY_HISUI SPECIES_BRAVIARY_HISUIAN
+#define SPECIES_BURMY_SANDY SPECIES_BURMY_SANDY_CLOAK
+#define SPECIES_BURMY_TRASH SPECIES_BURMY_TRASH_CLOAK
+#define SPECIES_BUTTERFREE_GMAX SPECIES_BUTTERFREE_GIGANTAMAX
+#define SPECIES_CALYREX_ICE SPECIES_CALYREX_ICE_RIDER
+#define SPECIES_CALYREX_SHADOW SPECIES_CALYREX_SHADOW_RIDER
+#define SPECIES_CENTISKORCH_GMAX SPECIES_CENTISKORCH_GIGANTAMAX
+#define SPECIES_CHARIZARD_GMAX SPECIES_CHARIZARD_GIGANTAMAX
+#define SPECIES_CINDERACE_GMAX SPECIES_CINDERACE_GIGANTAMAX
+#define SPECIES_COALOSSAL_GMAX SPECIES_COALOSSAL_GIGANTAMAX
+#define SPECIES_COPPERAJAH_GMAX SPECIES_COPPERAJAH_GIGANTAMAX
+#define SPECIES_CORSOLA_GALAR SPECIES_CORSOLA_GALARIAN
+#define SPECIES_CORVIKNIGHT_GMAX SPECIES_CORVIKNIGHT_GIGANTAMAX
+#define SPECIES_DARMANITAN_GALAR SPECIES_DARMANITAN_GALARIAN_STANDARD_MODE
+#define SPECIES_DARMANITAN_GALAR_ZEN SPECIES_DARMANITAN_GALARIAN_ZEN_MODE
+#define SPECIES_DARMANITAN_ZEN SPECIES_DARMANITAN_ZEN_MODE
+#define SPECIES_DARUMAKA_GALAR SPECIES_DARUMAKA_GALARIAN
+#define SPECIES_DECIDUEYE_HISUI SPECIES_DECIDUEYE_HISUIAN
+#define SPECIES_DIGLETT_ALOLA SPECIES_DIGLETT_ALOLAN
+#define SPECIES_DREDNAW_GMAX SPECIES_DREDNAW_GIGANTAMAX
+#define SPECIES_DUGTRIO_ALOLA SPECIES_DUGTRIO_ALOLAN
+#define SPECIES_DURALUDON_GMAX SPECIES_DURALUDON_GIGANTAMAX
+#define SPECIES_EEVEE_GMAX SPECIES_EEVEE_GIGANTAMAX
+#define SPECIES_EEVEE_STARTER SPECIES_EEVEE_PARTNER
+#define SPECIES_EISCUE_NOICE SPECIES_EISCUE_NOICE_FACE
+#define SPECIES_ELECTRODE_HISUI SPECIES_ELECTRODE_HISUIAN
+#define SPECIES_EXEGGUTOR_ALOLA SPECIES_EXEGGUTOR_ALOLAN
+#define SPECIES_FARFETCHD_GALAR SPECIES_FARFETCHD_GALARIAN
+#define SPECIES_FLAPPLE_GMAX SPECIES_FLAPPLE_GIGANTAMAX
+#define SPECIES_FLOETTE_ETERNAL SPECIES_FLOETTE_ETERNAL_FLOWER
+#define SPECIES_GARBODOR_GMAX SPECIES_GARBODOR_GIGANTAMAX
+#define SPECIES_GASTRODON_EAST SPECIES_GASTRODON_EAST_SEA
+#define SPECIES_GENESECT_BURN SPECIES_GENESECT_BURN_DRIVE
+#define SPECIES_GENESECT_CHILL SPECIES_GENESECT_CHILL_DRIVE
+#define SPECIES_GENESECT_DOUSE SPECIES_GENESECT_DOUSE_DRIVE
+#define SPECIES_GENESECT_SHOCK SPECIES_GENESECT_SHOCK_DRIVE
+#define SPECIES_GENGAR_GMAX SPECIES_GENGAR_GIGANTAMAX
+#define SPECIES_GEODUDE_ALOLA SPECIES_GEODUDE_ALOLAN
+#define SPECIES_GOLEM_ALOLA SPECIES_GOLEM_ALOLAN
+#define SPECIES_GOODRA_HISUI SPECIES_GOODRA_HISUIAN
+#define SPECIES_GRAVELER_ALOLA SPECIES_GRAVELER_ALOLAN
+#define SPECIES_GRENINJA_BOND SPECIES_GRENINJA_BATTLE_BOND
+#define SPECIES_GRIMER_ALOLA SPECIES_GRIMER_ALOLAN
+#define SPECIES_GRIMMSNARL_GMAX SPECIES_GRIMMSNARL_GIGANTAMAX
+#define SPECIES_GROWLITHE_HISUI SPECIES_GROWLITHE_HISUIAN
+#define SPECIES_HATTERENE_GMAX SPECIES_HATTERENE_GIGANTAMAX
+#define SPECIES_INTELEON_GMAX SPECIES_INTELEON_GIGANTAMAX
+#define SPECIES_KINGLER_GMAX SPECIES_KINGLER_GIGANTAMAX
+#define SPECIES_LAPRAS_GMAX SPECIES_LAPRAS_GIGANTAMAX
+#define SPECIES_LILLIGANT_HISUI SPECIES_LILLIGANT_HISUIAN
+#define SPECIES_LINOONE_GALAR SPECIES_LINOONE_GALARIAN
+#define SPECIES_MACHAMP_GMAX SPECIES_MACHAMP_GIGANTAMAX
+#define SPECIES_MAGEARNA_ORIGINAL SPECIES_MAGEARNA_ORIGINAL_COLOR
+#define SPECIES_MAROWAK_ALOLA SPECIES_MAROWAK_ALOLAN
+#define SPECIES_MAROWAK_ALOLA_TOTEM SPECIES_MAROWAK_ALOLAN_TOTEM
+#define SPECIES_MAUSHOLD_FOUR SPECIES_MAUSHOLD_FAMILY_OF_FOUR
+#define SPECIES_MELMETAL_GMAX SPECIES_MELMETAL_GIGANTAMAX
+#define SPECIES_MEOWTH_ALOLA SPECIES_MEOWTH_ALOLAN
+#define SPECIES_MEOWTH_GALAR SPECIES_MEOWTH_GALARIAN
+#define SPECIES_MEOWTH_GMAX SPECIES_MEOWTH_GIGANTAMAX
+#define SPECIES_MOLTRES_GALAR SPECIES_MOLTRES_GALARIAN
+#define SPECIES_MR_MIME_GALAR SPECIES_MR_MIME_GALARIAN
+#define SPECIES_MUK_ALOLA SPECIES_MUK_ALOLAN
+#define SPECIES_NINETALES_ALOLA SPECIES_NINETALES_ALOLAN
+#define SPECIES_OGERPON_TEAL SPECIES_OGERPON_TEAL_MASK
+#define SPECIES_OGERPON_WELLSPRING SPECIES_OGERPON_WELLSPRING_MASK
+#define SPECIES_OGERPON_HEARTHFLAME SPECIES_OGERPON_HEARTHFLAME_MASK
+#define SPECIES_OGERPON_CORNERSTONE SPECIES_OGERPON_CORNERSTONE_MASK
+#define SPECIES_ORBEETLE_GMAX SPECIES_ORBEETLE_GIGANTAMAX
+#define SPECIES_PERSIAN_ALOLA SPECIES_PERSIAN_ALOLAN
+#define SPECIES_PIKACHU_ALOLA SPECIES_PIKACHU_ALOLA_CAP
+#define SPECIES_PIKACHU_GMAX SPECIES_PIKACHU_GIGANTAMAX
+#define SPECIES_PIKACHU_HOENN SPECIES_PIKACHU_HOENN_CAP
+#define SPECIES_PIKACHU_KALOS SPECIES_PIKACHU_KALOS_CAP
+#define SPECIES_PIKACHU_ORIGINAL SPECIES_PIKACHU_ORIGINAL_CAP
+//#define SPECIES_PIKACHU_PARTNER SPECIES_PIKACHU_PARTNER_CAP
+#define SPECIES_PIKACHU_PHD SPECIES_PIKACHU_PH_D
+#define SPECIES_PIKACHU_SINNOH SPECIES_PIKACHU_SINNOH_CAP
+#define SPECIES_PIKACHU_STARTER SPECIES_PIKACHU_PARTNER
+#define SPECIES_PIKACHU_UNOVA SPECIES_PIKACHU_UNOVA_CAP
+#define SPECIES_PIKACHU_WORLD SPECIES_PIKACHU_WORLD_CAP
+#define SPECIES_PONYTA_GALAR SPECIES_PONYTA_GALARIAN
+#define SPECIES_QWILFISH_HISUI SPECIES_QWILFISH_HISUIAN
+#define SPECIES_RAICHU_ALOLA SPECIES_RAICHU_ALOLAN
+#define SPECIES_RAPIDASH_GALAR SPECIES_RAPIDASH_GALARIAN
+#define SPECIES_RATICATE_ALOLA SPECIES_RATICATE_ALOLAN
+#define SPECIES_RATICATE_ALOLA_TOTEM SPECIES_RATICATE_ALOLAN_TOTEM
+#define SPECIES_RATTATA_ALOLA SPECIES_RATTATA_ALOLAN
+#define SPECIES_RILLABOOM_GMAX SPECIES_RILLABOOM_GIGANTAMAX
+#define SPECIES_SAMUROTT_HISUI SPECIES_SAMUROTT_HISUIAN
+#define SPECIES_SANDACONDA_GMAX SPECIES_SANDACONDA_GIGANTAMAX
+#define SPECIES_SANDSHREW_ALOLA SPECIES_SANDSHREW_ALOLAN
+#define SPECIES_SANDSLASH_ALOLA SPECIES_SANDSLASH_ALOLAN
+#define SPECIES_SHELLOS_EAST SPECIES_SHELLOS_EAST_SEA
+#define SPECIES_SLIGGOO_HISUI SPECIES_SLIGGOO_HISUIAN
+#define SPECIES_SLOWBRO_GALAR SPECIES_SLOWBRO_GALARIAN
+#define SPECIES_SLOWKING_GALAR SPECIES_SLOWKING_GALARIAN
+#define SPECIES_SLOWPOKE_GALAR SPECIES_SLOWPOKE_GALARIAN
+#define SPECIES_SNEASEL_HISUI SPECIES_SNEASEL_HISUIAN
+#define SPECIES_SNORLAX_GMAX SPECIES_SNORLAX_GIGANTAMAX
+#define SPECIES_SQUAWKABILLY_BLUE SPECIES_SQUAWKABILLY_BLUE_PLUMAGE
+#define SPECIES_SQUAWKABILLY_WHITE SPECIES_SQUAWKABILLY_WHITE_PLUMAGE
+#define SPECIES_SQUAWKABILLY_YELLOW SPECIES_SQUAWKABILLY_YELLOW_PLUMAGE
+#define SPECIES_STUNFISK_GALAR SPECIES_STUNFISK_GALARIAN
+#define SPECIES_TAUROS_PALDEA_AQUA SPECIES_TAUROS_PALDEAN_AQUA_BREED
+#define SPECIES_TAUROS_PALDEA_BLAZE SPECIES_TAUROS_PALDEAN_BLAZE_BREED
+#define SPECIES_TAUROS_PALDEA_COMBAT SPECIES_TAUROS_PALDEAN_COMBAT_BREED
+#define SPECIES_TOXTRICITY_AMPED_GMAX SPECIES_TOXTRICITY_AMPED_GIGANTAMAX
+#define SPECIES_TOXTRICITY_LOW_KEY_GMAX SPECIES_TOXTRICITY_LOW_KEY_GIGANTAMAX
+#define SPECIES_TYPHLOSION_HISUI SPECIES_TYPHLOSION_HISUIAN
+#define SPECIES_UNOWN_EXCLAMATION SPECIES_UNOWN_EMARK
+#define SPECIES_UNOWN_QUESTION SPECIES_UNOWN_QMARK
+#define SPECIES_URSHIFU_GMAX SPECIES_URSHIFU_SINGLE_STRIKE_STYLE_GIGANTAMAX
+#define SPECIES_URSHIFU_RAPID_STRIKE SPECIES_URSHIFU_RAPID_STRIKE_STYLE
+#define SPECIES_URSHIFU_RAPID_STRIKE_GMAX SPECIES_URSHIFU_RAPID_STRIKE_STYLE_GIGANTAMAX
+#define SPECIES_VENUSAUR_GMAX SPECIES_VENUSAUR_GIGANTAMAX
+#define SPECIES_VIVILLON_POKEBALL SPECIES_VIVILLON_POKE_BALL
+#define SPECIES_VOLTORB_HISUI SPECIES_VOLTORB_HISUIAN
+#define SPECIES_VULPIX_ALOLA SPECIES_VULPIX_ALOLAN
+#define SPECIES_WEEZING_GALAR SPECIES_WEEZING_GALARIAN
+#define SPECIES_WOOPER_PALDEA SPECIES_WOOPER_PALDEAN
+#define SPECIES_WORMADAM_SANDY SPECIES_WORMADAM_SANDY_CLOAK
+#define SPECIES_WORMADAM_TRASH SPECIES_WORMADAM_TRASH_CLOAK
+#define SPECIES_YAMASK_GALAR SPECIES_YAMASK_GALARIAN
+#define SPECIES_ZACIAN_CROWNED SPECIES_ZACIAN_CROWNED_SWORD
+#define SPECIES_ZAMAZENTA_CROWNED SPECIES_ZAMAZENTA_CROWNED_SHIELD
+#define SPECIES_ZAPDOS_GALAR SPECIES_ZAPDOS_GALARIAN
+#define SPECIES_ZIGZAGOON_GALAR SPECIES_ZIGZAGOON_GALARIAN
+#define SPECIES_ZOROARK_HISUI SPECIES_ZOROARK_HISUIAN
+#define SPECIES_ZORUA_HISUI SPECIES_ZORUA_HISUIAN
+
#endif // GUARD_CONSTANTS_SPECIES_H
diff --git a/include/constants/trainers.h b/include/constants/trainers.h
index 8ebfd49cab5f..ebfc18eef0d5 100644
--- a/include/constants/trainers.h
+++ b/include/constants/trainers.h
@@ -371,7 +371,8 @@
#define F_TRAINER_FEMALE (1 << 7)
// Trainer party defines
-#define TRAINER_MON_MALE 1
-#define TRAINER_MON_FEMALE 2
+#define TRAINER_MON_MALE 1
+#define TRAINER_MON_FEMALE 2
+#define TRAINER_MON_RANDOM_GENDER 3
#endif // GUARD_TRAINERS_H
diff --git a/include/constants/wild_encounter.h b/include/constants/wild_encounter.h
index a78cd126f33d..ae669a2c35a2 100644
--- a/include/constants/wild_encounter.h
+++ b/include/constants/wild_encounter.h
@@ -8,4 +8,7 @@
#define NUM_ALTERING_CAVE_TABLES 9
+#define FISHING_CHAIN_LENGTH_MAX 200
+#define FISHING_CHAIN_SHINY_STREAK_MAX 20
+
#endif // GUARD_CONSTANTS_WILD_ENCOUNTER_H
diff --git a/include/data.h b/include/data.h
index 652f396c03fd..69c1a19a3c49 100644
--- a/include/data.h
+++ b/include/data.h
@@ -4,8 +4,6 @@
#include "constants/moves.h"
#include "constants/trainers.h"
-#define SPECIES_SHINY_TAG 5000
-
#define MAX_TRAINER_ITEMS 4
#define TRAINER_PIC_WIDTH 64
@@ -53,6 +51,8 @@ struct TrainerBacksprite
#define TRAINER_PARTY_IVS(hp, atk, def, speed, spatk, spdef) (hp | (atk << 5) | (def << 10) | (speed << 15) | (spatk << 20) | (spdef << 25))
#define TRAINER_PARTY_EVS(hp, atk, def, speed, spatk, spdef) ((const u8[6]){hp,atk,def,spatk,spdef,speed})
+// Shared by both trainer and frontier mons
+// See CreateNPCTrainerPartyFromTrainer and CreateFacilityMon
struct TrainerMon
{
const u8 *nickname;
@@ -68,10 +68,12 @@ struct TrainerMon
u8 nature:5;
bool8 gender:2;
bool8 isShiny:1;
- u8 dynamaxLevel:4;
+ u8 teraType:5;
bool8 gigantamaxFactor:1;
- bool8 shouldDynamax:1;
- bool8 shouldTerastal:1;
+ u8 shouldUseDynamax:1;
+ u8 padding1:1;
+ u8 dynamaxLevel:4;
+ u8 padding2:4;
};
#define TRAINER_PARTY(partyArray) partyArray, .partySize = ARRAY_COUNT(partyArray)
@@ -106,6 +108,10 @@ struct TypeInfo
u8 palette;
u16 zMove;
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;
+ const u32 *const paletteTMHM;
//u16 enhanceItem;
//u16 berry;
//u16 gem;
@@ -116,6 +122,19 @@ struct TypeInfo
//u16 arceusForm;
};
+struct FollowerMsgInfo
+{
+ const u8 *text;
+ const u8 *script;
+};
+
+struct FollowerMessagePool
+{
+ const struct FollowerMsgInfo *messages;
+ const u8 *script;
+ u16 length;
+};
+
extern const u16 gMinigameDigits_Pal[];
extern const u32 gMinigameDigits_Gfx[];
@@ -148,6 +167,19 @@ extern const struct Trainer gBattlePartners[];
extern const struct TrainerClass gTrainerClasses[TRAINER_CLASS_COUNT];
+// Follower text messages
+extern const struct FollowerMsgInfo gFollowerHappyMessages[];
+extern const struct FollowerMsgInfo gFollowerNeutralMessages[];
+extern const struct FollowerMsgInfo gFollowerSadMessages[];
+extern const struct FollowerMsgInfo gFollowerUpsetMessages[];
+extern const struct FollowerMsgInfo gFollowerAngryMessages[];
+extern const struct FollowerMsgInfo gFollowerPensiveMessages[];
+extern const struct FollowerMsgInfo gFollowerLoveMessages[];
+extern const struct FollowerMsgInfo gFollowerSurpriseMessages[];
+extern const struct FollowerMsgInfo gFollowerCuriousMessages[];
+extern const struct FollowerMsgInfo gFollowerMusicMessages[];
+extern const struct FollowerMsgInfo gFollowerPoisonedMessages[];
+
static inline u16 SanitizeTrainerId(u16 trainerId)
{
if (trainerId >= TRAINERS_COUNT)
diff --git a/include/daycare.h b/include/daycare.h
index 81e613b07c0d..4d5b470f8b3e 100644
--- a/include/daycare.h
+++ b/include/daycare.h
@@ -10,7 +10,7 @@ struct RecordMixingDaycareMail
bool16 cantHoldItem[DAYCARE_MON_COUNT];
};
-u8 *GetMonNickname2(struct Pokemon *mon, u8 *dest);
+u8 *GetMonNicknameVanilla(struct Pokemon *mon, u8 *dest);
u8 *GetBoxMonNickname(struct BoxPokemon *mon, u8 *dest);
u8 CountPokemonInDaycare(struct DayCare *daycare);
void InitDaycareMailRecordMixing(struct DayCare *daycare, struct RecordMixingDaycareMail *mixMail);
diff --git a/include/decompress.h b/include/decompress.h
index 9c99d09044ba..178ab9a6ebc3 100644
--- a/include/decompress.h
+++ b/include/decompress.h
@@ -8,7 +8,10 @@ extern u8 ALIGNED(4) gDecompressionBuffer[0x4000];
void LZDecompressWram(const u32 *src, void *dest);
void LZDecompressVram(const u32 *src, void *dest);
+u32 IsLZ77Data(const void *ptr, u32 minSize, u32 maxSize);
+
u16 LoadCompressedSpriteSheet(const struct CompressedSpriteSheet *src);
+u16 LoadCompressedSpriteSheetByTemplate(const struct SpriteTemplate *template, s32 offset);
void LoadCompressedSpriteSheetOverrideBuffer(const struct CompressedSpriteSheet *src, void *buffer);
bool8 LoadCompressedSpriteSheetUsingHeap(const struct CompressedSpriteSheet *src);
diff --git a/include/event_data.h b/include/event_data.h
index 51875ec5a4a2..04287b7ed665 100644
--- a/include/event_data.h
+++ b/include/event_data.h
@@ -22,7 +22,7 @@ u16 *GetVarPointer(u16 id);
u16 VarGet(u16 id);
u16 VarGetIfExist(u16 id);
bool8 VarSet(u16 id, u16 value);
-u8 VarGetObjectEventGraphicsId(u8 id);
+u16 VarGetObjectEventGraphicsId(u8 id);
u8 *GetFlagPointer(u16 id);
u8 FlagSet(u16 id);
u8 FlagToggle(u16 id);
diff --git a/include/event_object_movement.h b/include/event_object_movement.h
index d2ae9bc0c59a..2906789b3754 100644
--- a/include/event_object_movement.h
+++ b/include/event_object_movement.h
@@ -3,6 +3,10 @@
#include "constants/event_object_movement.h"
+#if OW_POKEMON_OBJECT_EVENTS == FALSE && OW_FOLLOWERS_ENABLED == TRUE
+#error "OW_POKEMON_OBJECT_EVENTS needs to be TRUE in order for OW_FOLLOWERS_ENABLED to work."
+#endif
+
// Palette slots for overworld NPCs.
// The same standard set of palettes for overworld objects are normally always loaded at the same
// time while walking around the overworld. The only exceptions are the palettes for the player and
@@ -48,6 +52,14 @@ enum ReflectionTypes
NUM_REFLECTION_TYPES
};
+enum FollowerTransformTypes
+{
+ TRANSFORM_TYPE_NONE,
+ TRANSFORM_TYPE_PERMANENT,
+ TRANSFORM_TYPE_RANDOM_WILD,
+ TRANSFORM_TYPE_WEATHER,
+};
+
#define FIGURE_8_LENGTH 72
#define GROUND_EFFECT_FLAG_TALL_GRASS_ON_SPAWN (1 << 0)
@@ -97,6 +109,10 @@ struct LockedAnimObjectEvents
extern const struct OamData gObjectEventBaseOam_32x8;
extern const struct OamData gObjectEventBaseOam_32x32;
+extern const struct OamData gObjectEventBaseOam_64x64;
+extern const struct SubspriteTable sOamTables_32x32[];
+extern const struct SubspriteTable sOamTables_64x64[];
+extern const union AnimCmd *const sAnimTable_Following[];
extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[];
extern const u8 gReflectionEffectPaletteMap[];
@@ -111,7 +127,6 @@ u8 GetObjectEventIdByXY(s16 x, s16 y);
void SetObjectEventDirection(struct ObjectEvent *objectEvent, u8 direction);
u8 GetFirstInactiveObjectEventId(void);
void RemoveObjectEventByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup);
-void LoadPlayerObjectReflectionPalette(u16 tag, u8 slot);
void LoadSpecialObjectReflectionPalette(u16 tag, u8 slot);
void TryMoveObjectEventToMapCoords(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y);
void PatchObjectPalette(u16 paletteTag, u8 paletteSlot);
@@ -120,21 +135,29 @@ void OverrideSecretBaseDecorationSpriteScript(u8 localId, u8 mapNum, u8 mapGroup
void GetMapCoordsFromSpritePos(s16 x, s16 y, s16 *destX, s16 *destY);
u8 GetFaceDirectionAnimNum(u8 direction);
void SetSpritePosToOffsetMapCoords(s16 *x, s16 *y, s16 dx, s16 dy);
+void ClearObjectEventMovement(struct ObjectEvent *objectEvent, struct Sprite *sprite);
void ObjectEventClearHeldMovement(struct ObjectEvent *);
void ObjectEventClearHeldMovementIfActive(struct ObjectEvent *);
+struct Pokemon *GetFirstLiveMon(void);
+void UpdateFollowingPokemon(void);
+void RemoveFollowingPokemon(void);
+struct ObjectEvent *GetFollowerObject(void);
void TrySpawnObjectEvents(s16 cameraX, s16 cameraY);
u8 CreateObjectGraphicsSprite(u16, void (*)(struct Sprite *), s16 x, s16 y, u8 subpriority);
u8 TrySpawnObjectEvent(u8 localId, u8 mapNum, u8 mapGroup);
-u8 SpawnSpecialObjectEventParameterized(u8 graphicsId, u8 movementBehavior, u8 localId, s16 x, s16 y, u8 elevation);
+u8 SpawnSpecialObjectEventParameterized(u16 graphicsId, u8 movementBehavior, u8 localId, s16 x, s16 y, u8 elevation);
u8 SpawnSpecialObjectEvent(struct ObjectEventTemplate *);
void SetSpritePosToMapCoords(s16 mapX, s16 mapY, s16 *destX, s16 *destY);
void CameraObjectReset(void);
-void ObjectEventSetGraphicsId(struct ObjectEvent *, u8 graphicsId);
+u8 UpdateSpritePaletteByTemplate(const struct SpriteTemplate *, struct Sprite *);
+void ObjectEventSetGraphicsId(struct ObjectEvent *, u16 graphicsId);
void ObjectEventTurn(struct ObjectEvent *, u8 direction);
void ObjectEventTurnByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup, u8 direction);
-const struct ObjectEventGraphicsInfo *GetObjectEventGraphicsInfo(u8 graphicsId);
+const struct ObjectEventGraphicsInfo *GetObjectEventGraphicsInfo(u16 graphicsId);
void SetObjectInvisibility(u8 localId, u8 mapNum, u8 mapGroup, bool8 invisible);
void FreeAndReserveObjectSpritePalettes(void);
+u8 LoadObjectEventPalette(u16 paletteTag);
+u8 LoadPlayerObjectEventPalette(u8 gender);
void SetObjectEventSpritePosByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y);
void ResetObjectSubpriority(u8 localId, u8 mapNum, u8 mapGroup);
void SetObjectSubpriority(u8 localId, u8 mapNum, u8 mapGroup, u8 subpriority);
@@ -196,7 +219,7 @@ void UpdateObjectEventsForCameraUpdate(s16 x, s16 y);
u8 GetWalkSlowMovementAction(u32);
u8 GetJumpMovementAction(u32);
u8 ElevationToPriority(u8 elevation);
-void ObjectEventUpdateElevation(struct ObjectEvent *objEvent);
+void ObjectEventUpdateElevation(struct ObjectEvent *objEvent, struct Sprite *);
void SetObjectSubpriorityByElevation(u8 elevation, struct Sprite *, u8 subpriority);
void UnfreezeObjectEvent(struct ObjectEvent *);
u8 FindLockedObjectEventIndex(struct ObjectEvent *);
@@ -276,9 +299,11 @@ void MovementType_JogInPlace(struct Sprite *);
void MovementType_RunInPlace(struct Sprite *);
void MovementType_Invisible(struct Sprite *);
void MovementType_WalkSlowlyInPlace(struct Sprite *);
+void MovementType_FollowPlayer(struct Sprite *);
u8 GetSlideMovementAction(u32);
u8 GetJumpMovementAction(u32);
u8 GetJump2MovementAction(u32);
+u8 CopySprite(struct Sprite *sprite, s16 x, s16 y, u8 subpriority);
u8 CreateCopySpriteAt(struct Sprite *sprite, s16 x, s16 y, u8 subpriority);
u8 MovementType_WanderAround_Step0(struct ObjectEvent *, struct Sprite *);
@@ -425,6 +450,21 @@ bool8 CopyablePlayerMovement_WalkFaster(struct ObjectEvent *, struct Sprite *, u
bool8 CopyablePlayerMovement_Slide(struct ObjectEvent *, struct Sprite *, u8, bool8(u8));
bool8 CopyablePlayerMovement_JumpInPlace(struct ObjectEvent *, struct Sprite *, u8, bool8(u8));
bool8 CopyablePlayerMovement_Jump(struct ObjectEvent *, struct Sprite *, u8, bool8(u8));
+
+u8 MovementType_FollowPlayer_Shadow(struct ObjectEvent *, struct Sprite *);
+u8 MovementType_FollowPlayer_Active(struct ObjectEvent *, struct Sprite *);
+u8 MovementType_FollowPlayer_Moving(struct ObjectEvent *, struct Sprite *);
+void StartSpriteAnimInDirection(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 direction, u8 animNum);
+
+bool8 FollowablePlayerMovement_Idle(struct ObjectEvent *, struct Sprite *, u8, bool8(u8));
+bool8 FollowablePlayerMovement_FaceDirection(struct ObjectEvent *, struct Sprite *, u8, bool8(u8));
+bool8 FollowablePlayerMovement_Step(struct ObjectEvent *, struct Sprite *, u8, bool8(u8));
+bool8 FollowablePlayerMovement_GoSpeed1(struct ObjectEvent *, struct Sprite *, u8, bool8(u8));
+bool8 FollowablePlayerMovement_GoSpeed2(struct ObjectEvent *, struct Sprite *, u8, bool8(u8));
+bool8 FollowablePlayerMovement_Slide(struct ObjectEvent *, struct Sprite *, u8, bool8(u8));
+bool8 FollowablePlayerMovement_JumpInPlace(struct ObjectEvent *, struct Sprite *, u8, bool8(u8));
+bool8 FollowablePlayerMovement_GoSpeed4(struct ObjectEvent *, struct Sprite *, u8, bool8(u8));
+bool8 FollowablePlayerMovement_Jump(struct ObjectEvent *, struct Sprite *, u8, bool8(u8));
bool8 CopyablePlayerMovement_Jump2(struct ObjectEvent *, struct Sprite *, u8, bool8(u8));
u8 MovementType_CopyPlayerInGrass_Step1(struct ObjectEvent *, struct Sprite *);
u8 MovementType_Buried_Step0(struct ObjectEvent *, struct Sprite *);
@@ -437,9 +477,9 @@ u8 MovementType_Invisible_Step0(struct ObjectEvent *, struct Sprite *);
u8 MovementType_Invisible_Step1(struct ObjectEvent *, struct Sprite *);
u8 MovementType_Invisible_Step2(struct ObjectEvent *, struct Sprite *);
-u8 CreateVirtualObject(u8 graphicsId, u8 virtualObjId, s16 x, s16 y, u8 elevation, u8 direction);
+u8 CreateVirtualObject(u16 graphicsId, u8 virtualObjId, s16 x, s16 y, u8 elevation, u8 direction);
void TurnVirtualObject(u8 virtualObjId, u8 direction);
-void SetVirtualObjectGraphics(u8 virtualObjId, u8 graphicsId);
+void SetVirtualObjectGraphics(u8 virtualObjId, u16 graphicsId);
void SetVirtualObjectInvisibility(u8 virtualObjId, bool32 invisible);
bool32 IsVirtualObjectInvisible(u8 virtualObjId);
void SetVirtualObjectSpriteAnim(u8 virtualObjId, u8 animNum);
diff --git a/include/event_scripts.h b/include/event_scripts.h
index 8df303ca335c..fa0bfe5c6ecd 100644
--- a/include/event_scripts.h
+++ b/include/event_scripts.h
@@ -1,6 +1,33 @@
#ifndef GUARD_EVENT_SCRIPTS_H
#define GUARD_EVENT_SCRIPTS_H
+extern const u8 EventScript_Follower[];
+extern const u8 EventScript_FollowerEnd[];
+extern const u8 EventScript_FollowerGeneric[];
+extern const u8 EventScript_FollowerLovesYou[];
+
+extern const u8 EventScript_FollowerIsShivering[];
+extern const u8 EventScript_FollowerNostalgia[];
+extern const u8 EventScript_FollowerHopping[];
+extern const u8 EventScript_FollowerJumpOnPlayer[];
+extern const u8 EventScript_FollowerCuddling[];
+extern const u8 EventScript_FollowerShiverCuddling[];
+extern const u8 EventScript_FollowerGetCloser[];
+extern const u8 EventScript_FollowerPokingPlayer[];
+extern const u8 EventScript_FollowerLookAround[];
+extern const u8 EventScript_FollowerLookAway[];
+extern const u8 EventScript_FollowerLookAwayBark[];
+extern const u8 EventScript_FollowerLookAwayPoke[];
+extern const u8 EventScript_FollowerPokeGround[];
+extern const u8 EventScript_FollowerStartled[];
+extern const u8 EventScript_FollowerFastHopping[];
+extern const u8 EventScript_FollowerDizzy[];
+extern const u8 EventScript_FollowerLookAroundScared[];
+extern const u8 EventScript_FollowerDance[];
+extern const u8 EventScript_FollowerFaceUp[];
+extern const u8 EventScript_FollowerFaceResult[];
+extern const u8 EnterPokeballMovement[];
+
extern const u8 EventScript_TestSignpostMsg[];
extern const u8 EventScript_TryGetTrainerScript[];
extern const u8 EventScript_StartTrainerApproach[];
@@ -617,4 +644,7 @@ extern const u8 VSSeeker_Text_NoTrainersWithinRange[];
extern const u8 VSSeeker_Text_TrainersNotReady[];
extern const u8 EventScript_VsSeekerChargingDone[];
+extern const u8 Common_Movement_FollowerSafeStart[];
+extern const u8 Common_Movement_FollowerSafeEnd[];
+
#endif // GUARD_EVENT_SCRIPTS_H
diff --git a/include/fake_rtc.h b/include/fake_rtc.h
new file mode 100644
index 000000000000..d74849614e9f
--- /dev/null
+++ b/include/fake_rtc.h
@@ -0,0 +1,13 @@
+#ifndef GUARD_FAKE_RTC_UTIL_H
+#define GUARD_FAKE_RTC_UTIL_H
+
+#include "siirtc.h"
+
+struct Time* FakeRtc_GetCurrentTime(void);
+void FakeRtc_GetRawInfo(struct SiiRtcInfo *rtc);
+void FakeRtc_AdvanceTimeBy(u32 hours, u32 minutes, u32 seconds);
+void FakeRtc_ManuallySetTime(u32 hour, u32 minute, u32 second);
+void FakeRtc_TickTimeForward(void);
+u32 FakeRtc_GetSecondsRatio(void);
+
+#endif // GUARD_FAKE_RTC_UTIL_H
diff --git a/include/field_effect.h b/include/field_effect.h
index 4cde29e8a3a7..93a74f1ba274 100644
--- a/include/field_effect.h
+++ b/include/field_effect.h
@@ -13,6 +13,7 @@ u32 FieldEffectStart(u8);
bool8 FieldEffectActiveListContains(u8 id);
void FieldEffectActiveListClear(void);
void ReturnToFieldFromFlyMapSelect(void);
+void FieldCallback_UseFly(void);
u8 AddNewGameBirchObject(s16, s16, u8);
void FieldEffectStop(struct Sprite *sprite, u8 id);
u8 CreateTrainerSprite(u8 trainerSpriteID, s16 x, s16 y, u8 subpriority, u8 *buffer);
@@ -24,6 +25,7 @@ void FieldEffectScript_LoadTiles(u8 **script);
void FieldEffectScript_LoadFadedPalette(u8 **script);
void FieldEffectScript_LoadPalette(u8 **script);
void FieldEffectScript_CallNative(u8 **script, u32 *val);
+void FieldEffectFreeGraphicsResources(struct Sprite *sprite);
void FieldEffectFreeTilesIfUnused(u16 tileStart);
void FieldEffectFreePaletteIfUnused(u8 paletteNum);
bool8 FieldEffectCmd_loadtiles(u8 **script, u32 *val);
diff --git a/include/field_effect_helpers.h b/include/field_effect_helpers.h
index 2ae5d79f7566..22dcb119a437 100644
--- a/include/field_effect_helpers.h
+++ b/include/field_effect_helpers.h
@@ -21,6 +21,7 @@ bool8 UpdateRevealDisguise(struct ObjectEvent *);
void StartRevealDisguise(struct ObjectEvent *);
void StartAshFieldEffect(s16, s16, u16, s16);
void SetUpReflection(struct ObjectEvent *, struct Sprite *, u8);
+void SetUpShadow(struct ObjectEvent *, struct Sprite *);
u32 StartFieldEffectForObjectEvent(u8, struct ObjectEvent *);
u8 FindTallGrassFieldEffectSpriteId(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y);
void UpdateRayquazaSpotlightEffect(struct Sprite *);
diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h
index 39fc886af8a4..caf28afb876a 100644
--- a/include/field_player_avatar.h
+++ b/include/field_player_avatar.h
@@ -3,8 +3,8 @@
void PlayerStep(u8 direction, u16 newKeys, u16 heldKeys);
void ClearPlayerAvatarInfo(void);
-void SetPlayerAvatarExtraStateTransition(u8, u8);
-u8 GetPlayerAvatarGenderByGraphicsId(u8);
+void SetPlayerAvatarExtraStateTransition(u16, u8);
+u8 GetPlayerAvatarGenderByGraphicsId(u16);
bool8 TestPlayerAvatarFlags(u8);
u8 GetPlayerAvatarSpriteId(void);
void PlayerGetDestCoords(s16 *, s16 *);
@@ -38,11 +38,11 @@ void PlayerFreeze(void);
void StopPlayerAvatar(void);
void SetSpinStartFacingDir(u8);
void GetXYCoordsOneStepInFrontOfPlayer(s16 *xPtr, s16 *yPtr);
-u8 GetRivalAvatarGraphicsIdByStateIdAndGender(u8 state, u8 gender);
+u16 GetRivalAvatarGraphicsIdByStateIdAndGender(u8 state, u8 gender);
void SetPlayerAvatarFieldMove(void);
-u8 GetPlayerAvatarGraphicsIdByCurrentState(void);
+u16 GetPlayerAvatarGraphicsIdByCurrentState(void);
void SetPlayerAvatarStateMask(u8 flags);
-u8 GetPlayerAvatarGraphicsIdByStateId(u8 state);
+u16 GetPlayerAvatarGraphicsIdByStateId(u8 state);
u8 GetJumpSpecialMovementAction(u32);
bool8 PartyHasMonWithSurf(void);
bool8 IsPlayerFacingSurfableFishableWater(void);
@@ -50,8 +50,8 @@ bool8 IsPlayerSurfingNorth(void);
void SetPlayerAvatarWatering(u8 direction);
u8 GetPlayerAvatarFlags(void);
void UpdatePlayerAvatarTransitionState(void);
-u8 GetFRLGAvatarGraphicsIdByGender(u8);
-u8 GetRSAvatarGraphicsIdByGender(u8);
+u16 GetFRLGAvatarGraphicsIdByGender(u8);
+u16 GetRSAvatarGraphicsIdByGender(u8);
void PlayerWheelieInPlace(u8 direction);
void PlayerWheelieMove(u8 direction);
void PlayerPopWheelieWhileMoving(u8 direction);
diff --git a/include/field_weather.h b/include/field_weather.h
index b354d500e306..9805dc491d35 100644
--- a/include/field_weather.h
+++ b/include/field_weather.h
@@ -170,6 +170,7 @@ void SetWeatherScreenFadeOut(void);
void SetWeatherPalStateIdle(void);
void PreservePaletteInWeather(u8 preservedPalIndex);
void ResetPreservedPalettesInWeather(void);
+bool32 IsWeatherAlphaBlend(void);
// field_weather_effect.c
void Clouds_InitVars(void);
diff --git a/include/fldeff.h b/include/fldeff.h
index bed235a1be8e..f676720edef7 100644
--- a/include/fldeff.h
+++ b/include/fldeff.h
@@ -46,7 +46,7 @@ bool8 SetUpFieldMove_Dig(void);
bool8 FldEff_UseDig(void);
// rock smash
-bool8 CheckObjectGraphicsInFrontOfPlayer(u8 graphicsId);
+bool8 CheckObjectGraphicsInFrontOfPlayer(u16 graphicsId);
u8 CreateFieldMoveTask(void);
bool8 SetUpFieldMove_RockSmash(void);
bool8 FldEff_UseRockSmash(void);
diff --git a/include/follower_helper.h b/include/follower_helper.h
new file mode 100644
index 000000000000..27bf1f700ef4
--- /dev/null
+++ b/include/follower_helper.h
@@ -0,0 +1,120 @@
+#ifndef GUARD_FOLLOWER_HELPER_H
+#define GUARD_FOLLOWER_HELPER_H
+
+enum {
+ FOLLOWER_EMOTION_HAPPY = 0,
+ FOLLOWER_EMOTION_NEUTRAL, // Also called "No emotion"
+ FOLLOWER_EMOTION_SAD,
+ FOLLOWER_EMOTION_UPSET,
+ FOLLOWER_EMOTION_ANGRY,
+ FOLLOWER_EMOTION_PENSIVE,
+ FOLLOWER_EMOTION_LOVE,
+ FOLLOWER_EMOTION_SURPRISE,
+ FOLLOWER_EMOTION_CURIOUS,
+ FOLLOWER_EMOTION_MUSIC,
+ FOLLOWER_EMOTION_POISONED,
+ FOLLOWER_EMOTION_LENGTH,
+};
+
+// Can be either 3 bytes, a u16 and a byte, or a 24-bit value
+union __attribute__((packed)) MsgConditionData
+{
+ u8 bytes[3];
+ struct __attribute__((packed))
+ {
+ u16 hw;
+ u8 b;
+ } split;
+ u32 raw:24;
+}; // size = 0x3
+
+struct __attribute__((packed)) MsgCondition
+{
+ u32 type:8;
+ union MsgConditionData data;
+}; // size = 0x4
+
+struct FollowerMsgInfoExtended
+{
+ const u8 *text;
+ const u8 *script;
+
+ u32 emotion:4;
+ u32 weight:3;
+ // if set, `text` is treated as an array of up to 4 texts instead
+ // which one is displayed is chosen at random
+ u32 textSpread:1;
+ u32 orFlag:1; // if set, *any* condition can match, rather than all
+
+ struct MsgCondition conditions[5];
+}; // size = 8 + 4 + 5*4 = 32, 0x20
+
+// Follower message conditions
+#define MSG_COND_NONE 0
+#define MSG_COND_SPECIES 1
+#define MSG_COND_TYPE 2
+#define MSG_COND_STATUS 3
+#define MSG_COND_MAPSEC 4
+#define MSG_COND_MAP 5
+#define MSG_COND_ON_MB 6
+#define MSG_COND_WEATHER 7
+#define MSG_COND_MUSIC 8
+#define MSG_COND_TIME_OF_DAY 9
+#define MSG_COND_NEAR_MB 10
+
+#define MATCH_U24(type, value) {type, {.raw = value}}
+#define MATCH_U16(type, value1, value2) {type, {.split = {.hw = value1, .b = value2}}}
+#define MATCH_U8(type, v1, v2, v3) {type, {.bytes = {v1, v2, v3}}}
+
+#define MATCH_SPECIES(species) MATCH_U24(MSG_COND_SPECIES, species)
+#define MATCH_TYPES(type1, type2) MATCH_U8(MSG_COND_TYPE, type1, type2, 0)
+// Checks that follower has *neither* of the two types
+#define MATCH_NOT_TYPES(type1, type2) MATCH_U8(MSG_COND_TYPE, type1, type2, TYPE_NONE | 1)
+#define MATCH_STATUS(status) MATCH_U24(MSG_COND_STATUS, status)
+#define MATCH_MAPSEC(mapsec) MATCH_U24(MSG_COND_MAPSEC, mapsec)
+#define MATCH_MAP_RAW(mapGroup, mapNum) MATCH_U8(MSG_COND_MAP, mapGroup, mapNum, 0)
+#define MATCH_MAP(map) MATCH_U8(MSG_COND_MAP, MAP_GROUP(map), MAP_NUM(map), 0)
+// Matches one of two metatile behaviors follower is standing on
+#define MATCH_ON_MB(mb1, mb2) MATCH_U8(MSG_COND_ON_MB, mb1, mb2, 0)
+#define MATCH_WEATHER(weather1, weather2) MATCH_U8(MSG_COND_WEATHER, weather1, weather2, 0)
+#define MATCH_MUSIC(song) MATCH_U24(MSG_COND_MUSIC, song)
+#define MATCH_TIME_OF_DAY(time) MATCH_U24(MSG_COND_TIME_OF_DAY, time)
+// Matches metatile behavior within a '+' shape of size `distance`
+#define MATCH_NEAR_MB(mb, distance) MATCH_U8(MSG_COND_NEAR_MB, mb, distance, 0)
+
+enum {
+ COND_MSG_CELEBI,
+ COND_MSG_FIRE,
+ COND_MSG_EVER_GRANDE,
+ COND_MSG_ROUTE_112,
+ COND_MSG_DAY_CARE,
+ COND_MSG_MART,
+ COND_MSG_VICTORY_ROAD,
+ COND_MSG_BIKE_SHOP,
+ COND_MSG_MACHINES,
+ COND_MSG_SAILING,
+ COND_MSG_PUDDLE,
+ COND_MSG_SAND,
+ COND_MSG_GRASS,
+ COND_MSG_FOOTPRINTS,
+ COND_MSG_ELEVATOR,
+ COND_MSG_ICE_ROOM,
+ COND_MSG_ROUTE_117,
+ COND_MSG_DRAGON_GROWL,
+ COND_MSG_FEAR,
+ COND_MSG_FIRE_RAIN,
+ COND_MSG_FROZEN,
+ COND_MSG_SEASIDE,
+ COND_MSG_WATERFALL,
+ COND_MSG_RAIN,
+ COND_MSG_REFLECTION,
+ COND_MSG_LEAVES,
+ COND_MSG_ICE,
+ COND_MSG_BURN,
+ COND_MSG_COUNT,
+};
+
+extern const struct FollowerMsgInfoExtended gFollowerConditionalMessages[COND_MSG_COUNT];
+extern const struct FollowerMessagePool gFollowerBasicMessages[FOLLOWER_EMOTION_LENGTH];
+
+#endif //GUARD_FOLLOWER_HELPER_H
diff --git a/include/fonts.h b/include/fonts.h
index c21c75942df5..a6be35db9820 100644
--- a/include/fonts.h
+++ b/include/fonts.h
@@ -15,5 +15,11 @@ extern const u16 gFontNarrowLatinGlyphs[];
extern const u8 gFontNarrowLatinGlyphWidths[];
extern const u16 gFontSmallNarrowLatinGlyphs[];
extern const u8 gFontSmallNarrowLatinGlyphWidths[];
+extern const u8 gFontNarrowerLatinGlyphWidths[];
+extern const u16 gFontNarrowerLatinGlyphs[];
+extern const u8 gFontSmallNarrowerLatinGlyphWidths[];
+extern const u16 gFontSmallNarrowerLatinGlyphs[];
+extern const u8 gFontShortNarrowLatinGlyphWidths[];
+extern const u16 gFontShortNarrowLatinGlyphs[];
#endif // GUARD_FONTS_H
diff --git a/include/frontier_util.h b/include/frontier_util.h
index f445949ef90c..637b7f91bb8e 100644
--- a/include/frontier_util.h
+++ b/include/frontier_util.h
@@ -25,6 +25,4 @@ u8 GetFrontierBrainMonNature(u8 monId);
u8 GetFrontierBrainMonEvs(u8 monId, u8 evStatId);
s32 GetFronterBrainSymbol(void);
-extern const u16 gFrontierBannedSpecies[];
-
#endif // GUARD_FRONTIER_UTIL_H
diff --git a/include/gba/macro.h b/include/gba/macro.h
index 5239cd4c8730..68dcd10d524e 100644
--- a/include/gba/macro.h
+++ b/include/gba/macro.h
@@ -40,6 +40,24 @@
#define CpuCopy16(src, dest, size) CPU_COPY(src, dest, size, 16)
#define CpuCopy32(src, dest, size) CPU_COPY(src, dest, size, 32)
+#define CpuSmartCopy16(src, dest, size) \
+{ \
+ if ((((size) & 0x1f) == 0) && ((((u32)(src)) & 3) == 0) && ((((u32)(dest)) & 3) == 0)) { \
+ CpuFastCopy((src), (dest), (size)); \
+ } else { \
+ CpuCopy16((src), (dest), (size)); \
+ } \
+}
+
+#define CpuSmartCopy32(src, dest, size) \
+{ \
+ if ((((size) & 0x1f) == 0) && ((((u32)(src)) & 3) == 0) && ((((u32)(dest)) & 3) == 0)) { \
+ CpuFastCopy((src), (dest), (size)); \
+ } else { \
+ CpuCopy32((src), (dest), (size)); \
+ } \
+}
+
#define CpuFastFill(value, dest, size) \
{ \
vu32 tmp = (vu32)(value); \
@@ -52,6 +70,24 @@
#define CpuFastFill8(value, dest, size) CpuFastFill(((value) << 24) | ((value) << 16) | ((value) << 8) | (value), (dest), (size))
+#define CpuSmartFill(value, dest, size) \
+{ \
+ if ((((size) & 0x1f) == 0) && ((((u32)(dest)) & 3) == 0)) { \
+ CpuFastFill((value), (dest), (size)); \
+ } else { \
+ CpuFill32((value), (dest), (size)); \
+ } \
+}
+
+#define CpuSmartFill16(value, dest, size) \
+{ \
+ if ((((size) & 0x1f) == 0) && ((((u32)(dest)) & 3) == 0)) { \
+ CpuFastFill16((value), (dest), (size)); \
+ } else { \
+ CpuFill16((value), (dest), (size)); \
+ } \
+}
+
#define CpuFastCopy(src, dest, size) CpuFastSet(src, dest, ((size)/(32/8) & 0x1FFFFF))
#define DmaSetUnchecked(dmaNum, src, dest, control) \
diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h
index b5bf29ca88c8..29249712b6e5 100644
--- a/include/global.fieldmap.h
+++ b/include/global.fieldmap.h
@@ -63,25 +63,24 @@ struct BackupMapLayout
u16 *map;
};
-struct ObjectEventTemplate
+struct __attribute__((packed, aligned(4))) ObjectEventTemplate
{
/*0x00*/ u8 localId;
- /*0x01*/ u8 graphicsId;
- /*0x02*/ u8 kind; // Always OBJ_KIND_NORMAL in Emerald.
- /*0x03*/ //u8 padding1;
+ /*0x01*/ u16 graphicsId;
+ /*0x03*/ u8 kind; // Always OBJ_KIND_NORMAL in Emerald.
/*0x04*/ s16 x;
/*0x06*/ s16 y;
/*0x08*/ u8 elevation;
/*0x09*/ u8 movementType;
/*0x0A*/ u16 movementRangeX:4;
u16 movementRangeY:4;
- //u16 padding2:8;
+ u16 unused:8;
/*0x0C*/ u16 trainerType;
/*0x0E*/ u16 trainerRange_berryTreeId;
/*0x10*/ const u8 *script;
/*0x14*/ u16 flagId;
- /*0x16*/ //u8 padding3[2];
-};
+ /*0x16*/ u16 filler;
+}; // size = 0x18
struct WarpEvent
{
@@ -131,7 +130,7 @@ struct MapEvents
struct MapConnection
{
u8 direction;
- u32 offset;
+ s32 offset;
u8 mapGroup;
u8 mapNum;
};
@@ -195,9 +194,9 @@ struct ObjectEvent
u32 disableJumpLandingGroundEffect:1;
u32 fixedPriority:1;
u32 hideReflection:1;
- //u32 padding:4;
- /*0x04*/ u8 spriteId;
- /*0x05*/ u8 graphicsId;
+ u32 shiny:1; // OW mon shininess
+ u32 padding:3;
+ /*0x04*/ u16 graphicsId; // 11 bits for species; high 5 bits for form
/*0x06*/ u8 movementType;
/*0x07*/ u8 trainerType;
/*0x08*/ u8 localId;
@@ -221,7 +220,7 @@ struct ObjectEvent
/*0x20*/ u8 previousMovementDirection;
/*0x21*/ u8 directionSequenceIndex;
/*0x22*/ u8 playerCopyableMovement; // COPY_MOVE_*
- /*0x23*/ //u8 padding2;
+ /*0x23*/ u8 spriteId;
/*size = 0x24*/
};
@@ -236,7 +235,7 @@ struct ObjectEventGraphicsInfo
/*0x0C*/ u8 paletteSlot:4;
u8 shadowSize:2;
u8 inanimate:1;
- u8 disableReflectionPaletteLoad:1;
+ u8 compressed:1;
/*0x0D*/ u8 tracks;
/*0x10*/ const struct OamData *oam;
/*0x14*/ const struct SubspriteTable *subspriteTables;
@@ -266,6 +265,11 @@ enum {
#define PLAYER_AVATAR_FLAG_FORCED_MOVE (1 << 6)
#define PLAYER_AVATAR_FLAG_DASH (1 << 7)
+#define PLAYER_AVATAR_FLAG_BIKE (PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE)
+// Player avatar flags for which follower Pokémon are hidden
+#define FOLLOWER_INVISIBLE_FLAGS (PLAYER_AVATAR_FLAG_SURFING | PLAYER_AVATAR_FLAG_UNDERWATER | \
+ PLAYER_AVATAR_FLAG_BIKE | PLAYER_AVATAR_FLAG_FORCED_MOVE)
+
enum
{
ACRO_BIKE_NORMAL,
diff --git a/include/global.h b/include/global.h
index faa6d177bd63..28d810b294da 100644
--- a/include/global.h
+++ b/include/global.h
@@ -3,7 +3,7 @@
#include
#include
-#include "config.h" // we need to define config before gba headers as print stuff needs the functions nulled before defines.
+#include "config/general.h" // we need to define config before gba headers as print stuff needs the functions nulled before defines.
#include "gba/gba.h"
#include "fpmath.h"
#include "metaprogram.h"
@@ -39,6 +39,7 @@
#define INCBIN_S8 INCBIN
#define INCBIN_S16 INCBIN
#define INCBIN_S32 INCBIN
+#define INCBIN_COMP INCBIN
#endif // IDE support
#define ARRAY_COUNT(array) (size_t)(sizeof(array) / sizeof((array)[0]))
@@ -69,6 +70,8 @@
#define SAFE_DIV(a, b) ((a) / (b))
#endif
+#define IS_POW_OF_TWO(n) (((n) & ((n)-1)) == 0)
+
// The below macro does a%n, but (to match) will switch to a&(n-1) if n is a power of 2.
// There are cases where GF does a&(n-1) where we would really like to have a%n, because
// if n is changed to a value that isn't a power of 2 then a&(n-1) is unlikely to work as
@@ -164,12 +167,6 @@ struct UCoords32
u32 y;
};
-struct SaveBlock3
-{
-};
-
-extern struct SaveBlock3 *gSaveBlock3Ptr;
-
struct Time
{
/*0x00*/ s16 days;
@@ -178,6 +175,16 @@ struct Time
/*0x04*/ s8 seconds;
};
+
+struct SaveBlock3
+{
+#if OW_USE_FAKE_RTC
+ struct Time fakeRTC;
+#endif
+};
+
+extern struct SaveBlock3 *gSaveBlock3Ptr;
+
struct Pokedex
{
/*0x00*/ u8 order;
@@ -282,7 +289,7 @@ struct BattleTowerPokemon
u32 gap:1;
u32 abilityNum:1;
u32 personality;
- u8 nickname[POKEMON_NAME_LENGTH + 1];
+ u8 nickname[VANILLA_POKEMON_NAME_LENGTH + 1];
u8 friendship;
};
@@ -307,7 +314,7 @@ struct BattleTowerInterview
u16 playerSpecies;
u16 opponentSpecies;
u8 opponentName[PLAYER_NAME_LENGTH + 1];
- u8 opponentMonNickname[POKEMON_NAME_LENGTH + 1];
+ u8 opponentMonNickname[VANILLA_POKEMON_NAME_LENGTH + 1];
u8 opponentLanguage;
};
@@ -742,7 +749,7 @@ struct ContestWinner
u32 trainerId;
u16 species;
u8 contestCategory;
- u8 monName[POKEMON_NAME_LENGTH + 1];
+ u8 monName[VANILLA_POKEMON_NAME_LENGTH + 1];
u8 trainerName[PLAYER_NAME_LENGTH + 1];
u8 contestRank:7;
bool8 isShiny:1;
@@ -762,7 +769,7 @@ struct DaycareMail
{
struct Mail message;
u8 otName[PLAYER_NAME_LENGTH + 1];
- u8 monName[POKEMON_NAME_LENGTH + 1];
+ u8 monName[VANILLA_POKEMON_NAME_LENGTH + 1];
u8 gameLanguage:4;
u8 monLanguage:4;
};
@@ -1055,7 +1062,7 @@ struct SaveBlock1
/*0x31A8*/ u8 giftRibbons[GIFT_RIBBONS_COUNT];
/*0x31B3*/ struct ExternalEventData externalEventData;
/*0x31C7*/ struct ExternalEventFlags externalEventFlags;
- /*0x31DC*/ struct Roamer roamer;
+ /*0x31DC*/ struct Roamer roamer[ROAMER_COUNT];
#if FREE_ENIGMA_BERRY == FALSE
/*0x31F8*/ struct EnigmaBerry enigmaBerry;
#endif //FREE_ENIGMA_BERRY
diff --git a/include/global.tv.h b/include/global.tv.h
index 9c3902e7cca4..6bc6d08f86f3 100644
--- a/include/global.tv.h
+++ b/include/global.tv.h
@@ -82,7 +82,7 @@ typedef union // size = 0x24
/*0x00*/ u8 kind;
/*0x01*/ bool8 active;
/*0x02*/ u16 species;
- /*0x04*/ u8 pokemonName[POKEMON_NAME_LENGTH + 1];
+ /*0x04*/ u8 pokemonName[VANILLA_POKEMON_NAME_LENGTH + 1];
/*0x0F*/ u8 trainerName[PLAYER_NAME_LENGTH + 1];
/*0x17*/ u8 unused[3];
/*0x1A*/ u8 random;
@@ -98,7 +98,7 @@ typedef union // size = 0x24
/*0x01*/ bool8 active;
/*0x02*/ u16 species;
/*0x04*/ u16 words[2];
- /*0x08*/ u8 pokemonNickname[POKEMON_NAME_LENGTH + 1];
+ /*0x08*/ u8 pokemonNickname[VANILLA_POKEMON_NAME_LENGTH + 1];
/*0x13*/ u8 contestCategory:3;
u8 contestRank:2;
u8 contestResult:2;
@@ -196,7 +196,7 @@ typedef union // size = 0x24
/*0x01*/ bool8 active;
/*0x02*/ u8 playerName[PLAYER_NAME_LENGTH + 1];
/*0x0A*/ u8 contestCategory;
- /*0x0B*/ u8 nickname[POKEMON_NAME_LENGTH + 1];
+ /*0x0B*/ u8 nickname[VANILLA_POKEMON_NAME_LENGTH + 1];
/*0x16*/ u8 pokeblockState;
/*0x17*/ u8 language;
/*0x18*/ u8 pokemonNameLanguage;
@@ -209,7 +209,7 @@ typedef union // size = 0x24
/*0x01*/ bool8 active;
/*0x02*/ u8 language;
/*0x03*/ u8 language2;
- /*0x04*/ u8 nickname[POKEMON_NAME_LENGTH + 1];
+ /*0x04*/ u8 nickname[VANILLA_POKEMON_NAME_LENGTH + 1];
/*0x0F*/ u8 ball;
/*0x10*/ u16 species;
/*0x12*/ u8 nBallsUsed;
@@ -409,7 +409,7 @@ typedef union // size = 0x24
/*0x01*/ bool8 active;
/*0x02*/ u8 nRibbons;
/*0x03*/ u8 selectedRibbon;
- /*0x04*/ u8 nickname[POKEMON_NAME_LENGTH + 1];
+ /*0x04*/ u8 nickname[VANILLA_POKEMON_NAME_LENGTH + 1];
/*0x0F*/ u8 language;
/*0x10*/ u8 pokemonNameLanguage;
/*0x11*/ u8 filler_12[2];
diff --git a/include/graphics.h b/include/graphics.h
index 2ec513bf910d..4cb944af8a72 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -1983,6 +1983,8 @@ extern const u32 gSummaryMoveSelect_Gfx[];
extern const u32 gSummaryMoveSelect_Pal[];
extern const u32 gStatusGfx_Icons[];
extern const u32 gStatusPal_Icons[];
+extern const u16 gCategoryIcons_Pal[];
+extern const u32 gCategoryIcons_Gfx[];
extern const u32 gShopMenu_Gfx[];
extern const u32 gShopMenu_Tilemap[];
@@ -2701,6 +2703,10 @@ extern const u32 gBattleAnimSpriteGfx_Punishment[];
extern const u32 gBattleAnimSpritePal_Punishment[];
extern const u32 gBattleAnimSpriteGfx_QuickGuard[];
extern const u32 gBattleAnimSpritePal_QuickGuard[];
+extern const u32 gBattleAnimSpriteGfx_TeraCrystal[];
+extern const u32 gBattleAnimSpritePal_TeraCrystal[];
+extern const u32 gBattleAnimSpriteGfx_TeraShatter[];
+extern const u32 gBattleAnimSpritePal_TeraShatter[];
// New Battle Anim Particles
extern const u32 gBattleAnimSpriteGfx_AlphaStone[];
@@ -2718,6 +2724,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[];
@@ -2726,6 +2734,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[];
@@ -2748,6 +2758,8 @@ extern const u32 gBattleAnimSpriteGfx_DragonPulseRing[];
extern const u32 gBattleAnimSpritePal_DragonPulseRing[];
extern const u32 gBattleAnimSpriteGfx_DreepyMissile[];
extern const u32 gBattleAnimSpritePal_DreepyMissile[];
+extern const u32 gBattleAnimSpriteGfx_DreepyMissileShiny[];
+extern const u32 gBattleAnimSpritePal_DreepyMissileShiny[];
extern const u32 gBattleAnimSpriteGfx_Drill[];
extern const u32 gBattleAnimSpritePal_Drill[];
extern const u32 gBattleAnimSpriteGfx_NewEmbers[];
@@ -2817,12 +2829,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[];
@@ -2865,6 +2881,11 @@ extern const u32 gBattleAnimSpriteGfx_SyrupShell[];
extern const u32 gBattleAnimSpriteGfx_SyrupSplat[];
extern const u32 gBattleAnimSpritePal_SyrupRed[];
extern const u32 gBattleAnimSpritePal_SyrupYellow[];
+extern const u32 gBattleAnimSpriteGfx_IvyCudgel[];
+extern const u32 gBattleAnimSpritePal_IvyCudgelGrass[];
+extern const u32 gBattleAnimSpritePal_IvyCudgelFire[];
+extern const u32 gBattleAnimSpritePal_IvyCudgelRock[];
+extern const u32 gBattleAnimSpritePal_IvyCudgelWater[];
extern const u32 gBattleAnimBgImage_Dark[];
extern const u32 gBattleAnimBgImage_Ghost[];
diff --git a/include/item.h b/include/item.h
index 53121d112781..dc1efc68a54f 100644
--- a/include/item.h
+++ b/include/item.h
@@ -23,6 +23,8 @@ struct Item
u8 type;
u8 battleUsage;
u8 flingPower;
+ const u32 *iconPic;
+ const u32 *iconPalette;
};
struct BagPocket
@@ -37,11 +39,12 @@ extern struct BagPocket gBagPockets[];
void ApplyNewEncryptionKeyToBagItems(u32 newKey);
void ApplyNewEncryptionKeyToBagItems_(u32 newKey);
void SetBagItemsPointers(void);
-void CopyItemName(u16 itemId, u8 *dst);
-void CopyItemNameHandlePlural(u16 itemId, u8 *dst, u32 quantity);
+u8 *CopyItemName(u16 itemId, u8 *dst);
+u8 *CopyItemNameHandlePlural(u16 itemId, u8 *dst, u32 quantity);
bool8 IsBagPocketNonEmpty(u8 pocket);
bool8 CheckBagHasItem(u16 itemId, u16 count);
bool8 HasAtLeastOneBerry(void);
+bool8 HasAtLeastOnePokeBall(void);
bool8 CheckBagHasSpace(u16 itemId, u16 count);
u32 GetFreeSpaceForItemInBag(u16 itemId);
bool8 AddBagItem(u16 itemId, u16 count);
diff --git a/include/item_icon.h b/include/item_icon.h
index c93a519bb472..e64c2ad34a05 100644
--- a/include/item_icon.h
+++ b/include/item_icon.h
@@ -11,6 +11,7 @@ void FreeItemIconTemporaryBuffers(void);
void CopyItemIconPicTo4x4Buffer(const void *src, void *dest);
u8 AddItemIconSprite(u16 tilesTag, u16 paletteTag, u16 itemId);
u8 AddCustomItemIconSprite(const struct SpriteTemplate *customSpriteTemplate, u16 tilesTag, u16 paletteTag, u16 itemId);
-const void *GetItemIconPicOrPalette(u16 itemId, u8 which);
+const void *GetItemIconPic(u16 itemId);
+const void *GetItemIconPalette(u16 itemId);
#endif //GUARD_ITEM_ICON_H
diff --git a/include/list_menu.h b/include/list_menu.h
index 23caaf4b4c75..413b97822721 100644
--- a/include/list_menu.h
+++ b/include/list_menu.h
@@ -40,8 +40,9 @@ struct ListMenuTemplate
const struct ListMenuItem *items;
void (* moveCursorFunc)(s32 itemIndex, bool8 onInit, struct ListMenu *list);
void (* itemPrintFunc)(u8 windowId, u32 itemId, u8 y);
- u16 totalItems;
- u16 maxShowed;
+ u32 totalItems:12;
+ u32 maxShowed:12;
+ u32 textNarrowWidth:8;
u8 windowId;
u8 header_X;
u8 item_X;
diff --git a/include/menu.h b/include/menu.h
index 0b0a42423d74..fac4ef1b65a5 100644
--- a/include/menu.h
+++ b/include/menu.h
@@ -41,6 +41,7 @@ struct MenuAction
};
extern const u16 gStandardMenuPalette[];
+extern EWRAM_DATA u8 gPopupTaskId;
void FreeAllOverworldWindowBuffers(void);
void InitStandardTextBoxWindows(void);
@@ -124,5 +125,9 @@ void AddTextPrinterWithCustomSpeedForMessage(bool8 allowSkippingDelayWithButtonP
void EraseYesNoWindow(void);
void PrintMenuActionTextsAtPos(u8 windowId, u8 fontId, u8 left, u8 top, u8 lineHeight, u8 itemCount, const struct MenuAction *strs);
void Menu_LoadStdPal(void);
+u8 AddSecondaryPopUpWindow(void);
+u8 GetSecondaryPopUpWindowId(void);
+void RemoveSecondaryPopUpWindow(void);
+void HBlankCB_DoublePopupWindow(void);
#endif // GUARD_MENU_H
diff --git a/include/metaprogram.h b/include/metaprogram.h
index 4bcc306b6f72..67736cfbc0a2 100644
--- a/include/metaprogram.h
+++ b/include/metaprogram.h
@@ -26,6 +26,9 @@
#define STR(...) STR_(__VA_ARGS__)
#define STR_(...) #__VA_ARGS__
+/* You'll never guess what this one does */
+#define APPEND_SEMICOLON(a) a;
+
/* Converts a string to a compound literal, essentially making it a pointer to const u8 */
#define COMPOUND_STRING(str) (const u8[]) _(str)
diff --git a/include/money.h b/include/money.h
index 211f9caa2ec6..5cffb9424268 100644
--- a/include/money.h
+++ b/include/money.h
@@ -1,7 +1,17 @@
#ifndef GUARD_MONEY_H
#define GUARD_MONEY_H
-#define MAX_MONEY 999999
+#define MAX_MONEY 999999 // Can be increased to INT_MAX
+
+#define MAX_MONEY_DIGITS ((MAX_MONEY > 999999999) ? 10 : \
+ (MAX_MONEY > 99999999) ? 9 : \
+ (MAX_MONEY > 9999999) ? 8 : \
+ (MAX_MONEY > 999999) ? 7 : \
+ (MAX_MONEY > 99999) ? 6 : \
+ (MAX_MONEY > 9999) ? 5 : \
+ (MAX_MONEY > 999) ? 4 : \
+ (MAX_MONEY > 99) ? 3 : \
+ (MAX_MONEY > 9) ? 2 : 1)
u32 GetMoney(u32 *moneyPtr);
void SetMoney(u32 *moneyPtr, u32 newValue);
@@ -18,5 +28,6 @@ void DrawMoneyBox(int amount, u8 x, u8 y);
void HideMoneyBox(void);
void AddMoneyLabelObject(u16 x, u16 y);
void RemoveMoneyLabelObject(void);
+u32 CalculateMoneyTextHorizontalPosition(u32 amount);
#endif // GUARD_MONEY_H
diff --git a/include/move_relearner.h b/include/move_relearner.h
index 51b476d25fd1..903c80ac7a5e 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/party_menu.h b/include/party_menu.h
index 7295bae0b9cb..b57b5b25e449 100644
--- a/include/party_menu.h
+++ b/include/party_menu.h
@@ -43,6 +43,7 @@ u8 GetAilmentFromStatus(u32 status);
u8 GetMonAilment(struct Pokemon *mon);
void DisplayPartyMenuStdMessage(u32 stringId);
bool8 FieldCallback_PrepareFadeInFromMenu(void);
+bool8 FieldCallback_PrepareFadeInForTeleport(void);
void CB2_ReturnToPartyMenuFromFlyMap(void);
void LoadHeldItemIcons(void);
void DrawHeldItemIconsForTrade(u8 *partyCounts, u8 *partySpriteIds, u8 whichParty);
diff --git a/include/pokeball.h b/include/pokeball.h
index 498fa4dd1c70..01d995a458e3 100644
--- a/include/pokeball.h
+++ b/include/pokeball.h
@@ -47,6 +47,7 @@ extern const struct SpriteTemplate gBallSpriteTemplates[];
#define POKEBALL_PLAYER_SENDOUT 0xFF
#define POKEBALL_OPPONENT_SENDOUT 0xFE
+#define POKEBALL_PLAYER_SLIDEIN 0xFD
u8 DoPokeballSendOutAnimation(u32 battler, s16 pan, u8 kindOfThrow);
void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 monPalNum, u8 x, u8 y, u8 oamPriority, u8 subpriority, u8 delay, u32 fadePalettes, u16 species);
diff --git a/include/pokemon.h b/include/pokemon.h
index a4a7ad47a006..22c465214c07 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -26,8 +26,10 @@ enum {
MON_DATA_IS_SHINY,
MON_DATA_HIDDEN_NATURE,
MON_DATA_HP_LOST,
+ MON_DATA_DAYS_SINCE_FORM_CHANGE,
MON_DATA_ENCRYPT_SEPARATOR,
MON_DATA_NICKNAME,
+ MON_DATA_NICKNAME10,
MON_DATA_SPECIES,
MON_DATA_HELD_ITEM,
MON_DATA_MOVE1,
@@ -137,8 +139,7 @@ struct PokemonSubstruct1
u16 move1:11; // 2047 moves.
u16 evolutionTracker1:5;
u16 move2:11; // 2047 moves.
- u16 evolutionTracker2:4;
- u16 unused_02:1;
+ u16 evolutionTracker2:5;
u16 move3:11; // 2047 moves.
u16 unused_04:5;
u16 move4:11; // 2047 moves.
@@ -246,7 +247,8 @@ struct BoxPokemon
u8 hasSpecies:1;
u8 isEgg:1;
u8 blockBoxRS:1; // Unused, but Pokémon Box Ruby & Sapphire will refuse to deposit a Pokémon with this flag set.
- u8 unused_13:4;
+ u8 daysSinceFormChange:3; // 7 days.
+ u8 unused_13:1;
u8 otName[PLAYER_NAME_LENGTH];
u8 markings:4;
u8 compressedStatus:4;
@@ -321,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;
@@ -349,7 +349,7 @@ struct Evolution
u16 targetSpecies;
};
-struct SpeciesInfo /*0x8C*/
+struct SpeciesInfo /*0xC4*/
{
/* 0x00 */ u8 baseHP;
/* 0x01 */ u8 baseAttack;
@@ -359,7 +359,7 @@ struct SpeciesInfo /*0x8C*/
/* 0x05 */ u8 baseSpDefense;
/* 0x06 */ u8 types[2];
/* 0x08 */ u8 catchRate;
- /* 0x09 */ u8 padding1;
+ /* 0x09 */ u8 forceTeraType;
/* 0x0A */ u16 expYield; // expYield was changed from u8 to u16 for the new Exp System.
/* 0x0C */ u16 evYield_HP:2;
u16 evYield_Attack:2;
@@ -377,6 +377,7 @@ struct SpeciesInfo /*0x8C*/
/* 0x16 */ u8 eggGroups[2];
/* 0x18 */ u16 abilities[NUM_ABILITY_SLOTS]; // 3 abilities, no longer u8 because we have over 255 abilities now.
/* 0x1E */ u8 safariZoneFleeRate;
+
// Pokédex data
/* 0x1F */ u8 categoryName[13];
/* 0x1F */ u8 speciesName[POKEMON_NAME_LENGTH + 1];
@@ -424,12 +425,13 @@ struct SpeciesInfo /*0x8C*/
/* 0x7A */ u32 isLegendary:1;
u32 isMythical:1;
u32 isUltraBeast:1;
+ u32 isParadox:1;
u32 isTotem:1;
- u32 isParadoxForm:1;
u32 isMegaEvolution:1;
u32 isPrimalReversion:1;
u32 isUltraBurst:1;
u32 isGigantamax:1;
+ u32 isTeraForm:1;
u32 isAlolanForm:1;
u32 isGalarianForm:1;
u32 isHisuianForm:1;
@@ -437,14 +439,23 @@ struct SpeciesInfo /*0x8C*/
u32 cannotBeTraded:1;
u32 allPerfectIVs:1;
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 padding4:15;
+ 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:13;
// Move Data
/* 0x80 */ const struct LevelUpMove *levelUpLearnset;
/* 0x84 */ const u16 *teachableLearnset;
- /* 0x88 */ const struct Evolution *evolutions;
- /* 0x84 */ const u16 *formSpeciesIdTable;
- /* 0x84 */ const struct FormChange *formChangeTable;
+ /* 0x88 */ const u16 *eggMoveLearnset;
+ /* 0x8C */ const struct Evolution *evolutions;
+ /* 0x90 */ const u16 *formSpeciesIdTable;
+ /* 0x94 */ const struct FormChange *formChangeTable;
+#if OW_POKEMON_OBJECT_EVENTS
+ /* 0x98 */ struct ObjectEventGraphicsInfo overworldData;
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ /* 0xBC */ const void* overworldPalette;
+ /* 0xC0 */ const void* overworldShinyPalette;
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
};
struct MoveInfo
@@ -526,6 +537,7 @@ struct MoveInfo
u8 contestCategory:3;
u8 contestComboStarterId;
u8 contestComboMoves[MAX_COMBO_MOVES];
+ const u8 *battleAnimScript;
};
#define EFFECTS_ARR(...) (const struct AdditionalEffect[]) {__VA_ARGS__}
@@ -557,6 +569,66 @@ struct Ability
u8 failsOnImposter:1; // doesn't work on an Imposter mon; when can we actually use this?
};
+enum {
+ AFFINE_NONE,
+ AFFINE_TURN_UP,
+ AFFINE_TURN_UP_AND_DOWN,
+ AFFINE_TURN_DOWN,
+ AFFINE_TURN_DOWN_SLOW,
+ AFFINE_TURN_DOWN_SLIGHT,
+ AFFINE_TURN_UP_HIGH,
+ AFFINE_UNUSED_1,
+ AFFINE_UNUSED_2,
+ AFFINE_UNUSED_3,
+ NUM_MON_AFFINES,
+};
+
+// The animation the Pokémon does during the feeding scene depends on their nature.
+// The below values are offsets into sMonPokeblockAnims of the animation data for that nature.
+#define ANIM_HARDY 0
+#define ANIM_LONELY (ANIM_HARDY + 3)
+#define ANIM_BRAVE (ANIM_LONELY + 1)
+#define ANIM_ADAMANT (ANIM_BRAVE + 1)
+#define ANIM_NAUGHTY (ANIM_ADAMANT + 5)
+#define ANIM_BOLD (ANIM_NAUGHTY + 3)
+#define ANIM_DOCILE (ANIM_BOLD + 2)
+#define ANIM_RELAXED (ANIM_DOCILE + 1)
+#define ANIM_IMPISH (ANIM_RELAXED + 2)
+#define ANIM_LAX (ANIM_IMPISH + 1)
+#define ANIM_TIMID (ANIM_LAX + 1)
+#define ANIM_HASTY (ANIM_TIMID + 5)
+#define ANIM_SERIOUS (ANIM_HASTY + 2)
+#define ANIM_JOLLY (ANIM_SERIOUS + 1)
+#define ANIM_NAIVE (ANIM_JOLLY + 1)
+#define ANIM_MODEST (ANIM_NAIVE + 4)
+#define ANIM_MILD (ANIM_MODEST + 3)
+#define ANIM_QUIET (ANIM_MILD + 1)
+#define ANIM_BASHFUL (ANIM_QUIET + 2)
+#define ANIM_RASH (ANIM_BASHFUL + 3)
+#define ANIM_CALM (ANIM_RASH + 3)
+#define ANIM_GENTLE (ANIM_CALM + 1)
+#define ANIM_SASSY (ANIM_GENTLE + 1)
+#define ANIM_CAREFUL (ANIM_SASSY + 1)
+#define ANIM_QUIRKY (ANIM_CAREFUL + 5)
+
+// In palace double battles, Pokémon have a target preference depending on nature
+#define PALACE_TARGET_STRONGER 0
+#define PALACE_TARGET_WEAKER 1
+#define PALACE_TARGET_RANDOM 2
+
+struct NatureInfo
+{
+ const u8 *name;
+ u8 statUp;
+ u8 statDown;
+ u8 backAnim;
+ u8 pokeBlockAnim[2];
+ u8 battlePalacePercents[4];
+ u8 battlePalaceFlavorText;
+ u8 battlePalaceSmokescreen;
+ const u8 *natureGirlMessage;
+};
+
#define SPINDA_SPOT_WIDTH 16
#define SPINDA_SPOT_HEIGHT 16
@@ -610,6 +682,7 @@ extern struct Pokemon gPlayerParty[PARTY_SIZE];
extern u8 gEnemyPartyCount;
extern struct Pokemon gEnemyParty[PARTY_SIZE];
extern struct SpriteTemplate gMultiuseSpriteTemplate;
+extern u16 gFollowerSteps;
extern const struct MoveInfo gMovesInfo[];
extern const u8 gFacilityClassToPicIndex[];
@@ -622,9 +695,9 @@ extern const u8 gPPUpAddValues[];
extern const u8 gStatStageRatios[MAX_STAT_STAGE + 1][2];
extern const u16 gUnionRoomFacilityClasses[];
extern const struct SpriteTemplate gBattlerSpriteTemplates[];
-extern const s8 gNatureStatTable[][5];
extern const u32 sExpCandyExperienceTable[];
extern const struct Ability gAbilitiesInfo[];
+extern const struct NatureInfo gNaturesInfo[];
void ZeroBoxMonData(struct BoxPokemon *boxMon);
void ZeroMonData(struct Pokemon *mon);
@@ -658,8 +731,6 @@ void SetMonMoveSlot(struct Pokemon *mon, u16 move, u8 slot);
void SetBattleMonMoveSlot(struct BattlePokemon *mon, u16 move, u8 slot);
void GiveMonInitialMoveset(struct Pokemon *mon);
void GiveBoxMonInitialMoveset(struct BoxPokemon *boxMon);
-void GiveMonInitialMoveset_Fast(struct Pokemon *mon);
-void GiveBoxMonInitialMoveset_Fast(struct BoxPokemon *boxMon);
u16 MonTryLearningNewMove(struct Pokemon *mon, bool8 firstMove);
void DeleteFirstMoveAndGiveMoveToMon(struct Pokemon *mon, u16 move);
void DeleteFirstMoveAndGiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move);
@@ -709,6 +780,7 @@ u16 GetSpeciesHeight(u16 species);
u16 GetSpeciesWeight(u16 species);
const struct LevelUpMove *GetSpeciesLevelUpLearnset(u16 species);
const u16 *GetSpeciesTeachableLearnset(u16 species);
+const u16 *GetSpeciesEggMoves(u16 species);
const struct Evolution *GetSpeciesEvolutions(u16 species);
const u16 *GetSpeciesFormTable(u16 species);
const struct FormChange *GetSpeciesFormChanges(u16 species);
@@ -759,6 +831,7 @@ void PlayMapChosenOrBattleBGM(u16 songId);
void CreateTask_PlayMapChosenOrBattleBGM(u16 songId);
const u32 *GetMonFrontSpritePal(struct Pokemon *mon);
const u32 *GetMonSpritePalFromSpeciesAndPersonality(u16 species, bool32 isShiny, u32 personality);
+const u32 *GetMonSpritePalFromSpecies(u16 species, bool32 isShiny, bool32 isFemale);
bool8 IsMoveHM(u16 move);
bool8 IsMonSpriteNotFlipped(u16 species);
s8 GetMonFlavorRelation(struct Pokemon *mon, u8 flavor);
@@ -804,5 +877,8 @@ u16 GetSpeciesPreEvolution(u16 species);
void HealPokemon(struct Pokemon *mon);
void HealBoxPokemon(struct BoxPokemon *boxMon);
const u8 *GetMoveName(u16 moveId);
+const u8 *GetMoveAnimationScript(u16 moveId);
+void UpdateDaysPassedSinceFormChange(u16 days);
+void TrySetDayLimitToFormChange(struct Pokemon *mon);
#endif // GUARD_POKEMON_H
diff --git a/include/pokemon_debug.h b/include/pokemon_sprite_visualizer.h
similarity index 62%
rename from include/pokemon_debug.h
rename to include/pokemon_sprite_visualizer.h
index e69b4a7c6b4f..946c2f37f625 100644
--- a/include/pokemon_debug.h
+++ b/include/pokemon_sprite_visualizer.h
@@ -1,10 +1,10 @@
-#ifndef GUARD_POKEMON_DEBUG_H
-#define GUARD_POKEMON_DEBUG_H
+#ifndef GUARD_POKEMON_SPRITE_VISUALIZER_H
+#define GUARD_POKEMON_SPRITE_VISUALIZER_H
-#include "constants/pokemon_debug.h"
+#include "constants/pokemon_sprite_visualizer.h"
//Structs
-struct PokemonDebugModifyArrows
+struct PokemonSpriteVisualizerModifyArrows
{
u8 arrowSpriteId[2];
u16 minValue;
@@ -17,13 +17,13 @@ struct PokemonDebugModifyArrows
u8 typeOfVal;
};
-struct PokemonDebugOptionArrows
+struct PokemonSpriteVisualizerOptionArrows
{
u8 arrowSpriteId[1];
u8 currentDigit;
};
-struct PokemonDebugYPosModifiyArrows
+struct PokemonSpriteVisualizerYPosModifiyArrows
{
u8 arrowSpriteId[1];
u8 currentDigit;
@@ -43,7 +43,7 @@ struct PokemonSpriteOffsets
s8 offset_front_elevation;
};
-struct PokemonDebugMenu
+struct PokemonSpriteVisualizer
{
u16 currentmonId;
u8 currentmonWindowId;
@@ -51,12 +51,13 @@ struct PokemonDebugMenu
u8 frontspriteId;
u8 backspriteId;
u8 iconspriteId;
+ u8 followerspriteId;
u8 frontShadowSpriteId;
bool8 isShiny;
bool8 isFemale;
- struct PokemonDebugModifyArrows modifyArrows;
- struct PokemonDebugOptionArrows optionArrows;
- struct PokemonDebugYPosModifiyArrows yPosModifyArrows;
+ struct PokemonSpriteVisualizerModifyArrows modifyArrows;
+ struct PokemonSpriteVisualizerOptionArrows optionArrows;
+ struct PokemonSpriteVisualizerYPosModifiyArrows yPosModifyArrows;
struct PokemonSpriteConstValues constSpriteValues;
struct PokemonSpriteOffsets offsetsSpriteValues;
u8 animIdBack;
@@ -67,7 +68,7 @@ struct PokemonDebugMenu
u8 submenuYpos[3];
};
-void CB2_Debug_Pokemon(void);
+void CB2_Pokemon_Sprite_Visualizer(void);
-#endif // GUARD_POKEMON_DEBUG_H
\ No newline at end of file
+#endif // GUARD_POKEMON_SPRITE_VISUALIZER_H
diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h
index 5ab1b4cb8f3e..c2825bf7797d 100644
--- a/include/pokemon_storage_system.h
+++ b/include/pokemon_storage_system.h
@@ -75,5 +75,6 @@ void SetWaldaPhrase(const u8 *src);
bool32 IsWaldaPhraseEmpty(void);
void EnterPokeStorage(u8 boxOption);
+u32 CountPartyNonEggMons(void);
#endif // GUARD_POKEMON_STORAGE_SYSTEM_H
diff --git a/include/pokemon_summary_screen.h b/include/pokemon_summary_screen.h
index f56c3aca64e5..924702baf920 100755
--- a/include/pokemon_summary_screen.h
+++ b/include/pokemon_summary_screen.h
@@ -5,11 +5,12 @@
extern u8 gLastViewedMonIndex;
-extern const u8 *const gMoveDescriptionPointers[];
extern const u8 gNotDoneYetDescription[];
-extern const u8 *const gNatureNamePointers[];
extern const struct SpriteTemplate gSpriteTemplate_MoveTypes;
extern const struct CompressedSpriteSheet gSpriteSheet_MoveTypes;
+extern const struct CompressedSpriteSheet gSpriteSheet_CategoryIcons;
+extern const struct SpritePalette gSpritePal_CategoryIcons;
+extern const struct SpriteTemplate gSpriteTemplate_CategoryIcons;
void ShowPokemonSummaryScreen(u8 mode, void *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void));
void ShowSelectMovePokemonSummaryScreen(struct Pokemon *mons, u8 monIndex, u8 maxMonIndex, void (*callback)(void), u16 newMove);
diff --git a/include/random.h b/include/random.h
index 1503814c0ec0..d254a08f0384 100644
--- a/include/random.h
+++ b/include/random.h
@@ -144,13 +144,16 @@ static inline void Shuffle(void *data, size_t n, size_t size)
* probability. The array must be known at compile-time (e.g. a global
* const array).
*
- * RandomPercentage(tag, t) returns FALSE with probability (1-t)/100,
+ * RandomPercentage(tag, t) returns FALSE with probability 1-t/100,
* and TRUE with probability t/100.
*
* RandomWeighted(tag, w0, w1, ... wN) returns a number from 0 to N
* inclusive. The return value is proportional to the weights, e.g.
* RandomWeighted(..., 1, 1) returns 50% 0s and 50% 1s.
- * RandomWeighted(..., 2, 1) returns 2/3 0s and 1/3 1s. */
+ * RandomWeighted(..., 2, 1) returns 2/3 0s and 1/3 1s.
+ *
+ * RandomChance(tag, successes, total) returns FALSE with probability
+ * 1-successes/total, and TRUE with probability successes/total. */
enum RandomTag
{
@@ -162,6 +165,7 @@ enum RandomTag
RNG_CUTE_CHARM,
RNG_DAMAGE_MODIFIER,
RNG_DIRE_CLAW,
+ RNG_EFFECT_SPORE,
RNG_FLAME_BODY,
RNG_FORCE_RANDOM_SWITCH,
RNG_FROZEN,
@@ -169,28 +173,33 @@ 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,
RNG_SECONDARY_EFFECT,
RNG_SECONDARY_EFFECT_2,
RNG_SECONDARY_EFFECT_3,
+ RNG_SHED_SKIN,
RNG_SLEEP_TURNS,
RNG_SPEED_TIE,
RNG_STATIC,
RNG_STENCH,
+ RNG_TOXIC_CHAIN,
RNG_TRI_ATTACK,
RNG_QUICK_DRAW,
RNG_QUICK_CLAW,
RNG_TRACE,
RNG_FICKLE_BEAM,
RNG_AI_ABILITY,
+ RNG_AI_HASBADODDS,
RNG_SHELL_SIDE_ARM,
};
@@ -203,6 +212,8 @@ enum RandomTag
RandomWeightedArray(tag, sum, ARRAY_COUNT(weights), weights); \
})
+#define RandomChance(tag, successes, total) (RandomWeighted(tag, total - successes, successes))
+
#define RandomPercentage(tag, t) \
({ \
u32 r; \
@@ -237,4 +248,6 @@ u32 RandomUniformExceptDefault(enum RandomTag, u32 lo, u32 hi, bool32 (*reject)(
u32 RandomWeightedArrayDefault(enum RandomTag, u32 sum, u32 n, const u8 *weights);
const void *RandomElementArrayDefault(enum RandomTag, const void *array, size_t size, size_t count);
+u8 RandomWeightedIndex(u8 *weights, u8 length);
+
#endif // GUARD_RANDOM_H
diff --git a/include/roamer.h b/include/roamer.h
index ba1b09b54dac..36e9f1400012 100644
--- a/include/roamer.h
+++ b/include/roamer.h
@@ -1,17 +1,21 @@
#ifndef GUARD_ROAMER_H
#define GUARD_ROAMER_H
-void ClearRoamerData(void);
-void ClearRoamerLocationData(void);
+void DeactivateAllRoamers(void);
void InitRoamer(void);
void UpdateLocationHistoryForRoamer(void);
-void RoamerMoveToOtherLocationSet(void);
-void RoamerMove(void);
-bool8 IsRoamerAt(u8 mapGroup, u8 mapNum);
-void CreateRoamerMonInstance(void);
+void RoamerMoveToOtherLocationSet(u32 roamerIndex);
+void RoamerMove(u32 roamerIndex);
+bool8 IsRoamerAt(u32 roamerIndex, u8 mapGroup, u8 mapNum);
+void CreateRoamerMonInstance(u32 roamerIndex);
u8 TryStartRoamerEncounter(void);
void UpdateRoamerHPStatus(struct Pokemon *mon);
-void SetRoamerInactive(void);
-void GetRoamerLocation(u8 *mapGroup, u8 *mapNum);
+void SetRoamerInactive(u32 roamerIndex);
+void GetRoamerLocation(u32 roamerIndex, u8 *mapGroup, u8 *mapNum);
+bool8 TryAddRoamer(u16 species, u8 level);
+void MoveAllRoamersToOtherLocationSets(void);
+void MoveAllRoamers(void);
+
+extern u8 gEncounteredRoamerIndex;
#endif // GUARD_ROAMER_H
diff --git a/include/rtc.h b/include/rtc.h
index 9882d702b6fb..bf8ff9aa936d 100644
--- a/include/rtc.h
+++ b/include/rtc.h
@@ -118,5 +118,6 @@ void RtcCalcLocalTimeOffset(s32 days, s32 hours, s32 minutes, s32 seconds);
void CalcTimeDifference(struct Time *result, struct Time *t1, struct Time *t2);
u32 RtcGetMinuteCount(void);
u32 RtcGetLocalDayCount(void);
+void FormatDecimalTimeWithoutSeconds(u8 *dest, s8 hour, s8 minute, bool32 is24Hour);
#endif // GUARD_RTC_UTIL_H
diff --git a/include/script_pokemon_util.h b/include/script_pokemon_util.h
index 2f7c2f5bd5ff..6508295a2dcd 100644
--- a/include/script_pokemon_util.h
+++ b/include/script_pokemon_util.h
@@ -2,7 +2,6 @@
#define GUARD_SCRIPT_POKEMON_UTIL_H
u32 ScriptGiveMon(u16, u8, u16);
-u32 ScriptGiveMonParameterized(u16, u8, u16, u8, u8, u8, u8, u8 *, u8 *, u16 *, bool8, bool8, u8);
u8 ScriptGiveEgg(u16);
void CreateScriptedWildMon(u16, u8, u16);
void CreateScriptedDoubleWildMon(u16, u8, u16, u16, u8, u16);
diff --git a/include/strings.h b/include/strings.h
index 6bf2fe65975c..ea01c54e5f60 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -2951,25 +2951,6 @@ extern const u8 gText_NeatnessRankings[];
extern const u8 gText_CoopRankings[];
extern const u8 gText_PressingPowerRankings[];
-// Lilycove Lady
-extern const u8 gText_ContestLady_Handsome[];
-extern const u8 gText_ContestLady_Vinny[];
-extern const u8 gText_ContestLady_Moreme[];
-extern const u8 gText_ContestLady_Ironhard[];
-extern const u8 gText_ContestLady_Muscle[];
-extern const u8 gText_ContestLady_Coolness[];
-extern const u8 gText_ContestLady_Beauty[];
-extern const u8 gText_ContestLady_Cuteness[];
-extern const u8 gText_ContestLady_Smartness[];
-extern const u8 gText_ContestLady_Toughness[];
-extern const u8 gText_QuizLady_Lady[];
-extern const u8 gText_FavorLady_Slippery[];
-extern const u8 gText_FavorLady_Roundish[];
-extern const u8 gText_FavorLady_Whamish[];
-extern const u8 gText_FavorLady_Shiny[];
-extern const u8 gText_FavorLady_Sticky[];
-extern const u8 gText_FavorLady_Pointy[];
-
extern const u8 gText_CoolnessContest[];
extern const u8 gText_BeautyContest[];
extern const u8 gText_CutenessContest[];
@@ -3062,4 +3043,8 @@ extern const u8 gText_BasePointsResetToZero[];
extern const u8 gText_Fertilize[];
extern const u8 gText_PlantBerry[];
+// Map name pop-up
+extern const u8 gText_AM[];
+extern const u8 gText_PM[];
+
#endif // GUARD_STRINGS_H
diff --git a/include/test/battle.h b/include/test/battle.h
index 514e3bca495c..865afe8e0b78 100644
--- a/include/test/battle.h
+++ b/include/test/battle.h
@@ -326,14 +326,14 @@
* The inference process is naive, if your test contains anything that
* modifies the speed of a battler you should specify them explicitly.
*
- * MOVE(battler, move | moveSlot:, [megaEvolve:], [hit:], [criticalHit:], [target:], [allowed:], [WITH_RNG(tag, value])
+ * MOVE(battler, move | moveSlot:, [gimmick:], [hit:], [criticalHit:], [target:], [allowed:], [WITH_RNG(tag, value])
* Used when the battler chooses Fight. Either the move ID or move slot
- * must be specified. megaEvolve: TRUE causes the battler to Mega Evolve
- * if able, hit: FALSE causes the move to miss, criticalHit: TRUE causes
- * the move to land a critical hit, target: is used in double battles to
- * choose the target (when necessary), and allowed: FALSE is used to
- * reject an illegal move e.g. a Disabled one. WITH_RNG allows the move
- * to specify an explicit outcome for an RNG tag.
+ * must be specified. gimmick: GIMMICK_MEGA causes the battler to Mega
+ * Evolve if able, hit: FALSE causes the move to miss, criticalHit: TRUE
+ * causes the move to land a critical hit, target: is used in double
+ * battles to choose the target (when necessary), and allowed: FALSE is
+ * used to reject an illegal move e.g. a Disabled one. WITH_RNG allows
+ * the move to specify an explicit outcome for an RNG tag.
* MOVE(playerLeft, MOVE_TACKLE, target: opponentRight);
* If the battler does not have an explicit Moves specified the moveset
* will be populated based on the MOVEs it uses.
@@ -507,7 +507,7 @@
// or loop.
#define BATTLE_TEST_STACK_SIZE 1024
#define MAX_TURNS 16
-#define MAX_QUEUED_EVENTS 25
+#define MAX_QUEUED_EVENTS 30
#define MAX_EXPECTED_ACTIONS 10
enum { BATTLE_TEST_SINGLES, BATTLE_TEST_DOUBLES, BATTLE_TEST_WILD, BATTLE_TEST_AI_SINGLES, BATTLE_TEST_AI_DOUBLES };
@@ -518,7 +518,6 @@ typedef void (*DoubleBattleTestFunction)(void *, const u32, struct BattlePokemon
struct BattleTest
{
u8 type;
- u16 sourceLine;
union
{
SingleBattleTestFunction singles;
@@ -662,6 +661,7 @@ struct BattleTestData
u8 gender;
u8 nature;
u16 forcedAbilities[NUM_BATTLE_SIDES][PARTY_SIZE];
+ u8 chosenGimmick[NUM_BATTLE_SIDES][PARTY_SIZE];
u8 currentMonIndexes[MAX_BATTLERS_COUNT];
u8 turnState;
@@ -724,27 +724,8 @@ struct BattleTestRunnerState
extern const struct TestRunner gBattleTestRunner;
extern struct BattleTestRunnerState *const gBattleTestRunnerState;
-#define MEMBERS(...) VARARG_8(MEMBERS_, __VA_ARGS__)
-#define MEMBERS_0()
-#define MEMBERS_1(a) a;
-#define MEMBERS_2(a, b) a; b;
-#define MEMBERS_3(a, b, c) a; b; c;
-#define MEMBERS_4(a, b, c, d) a; b; c; d;
-#define MEMBERS_5(a, b, c, d, e) a; b; c; d; e;
-#define MEMBERS_6(a, b, c, d, e, f) a; b; c; d; e; f;
-#define MEMBERS_7(a, b, c, d, e, f, g) a; b; c; d; e; f; g;
-#define MEMBERS_8(a, b, c, d, e, f, g, h) a; b; c; d; e; f; g; h;
-
-#define APPEND_TRUE(...) VARARG_8(APPEND_TRUE_, __VA_ARGS__)
-#define APPEND_TRUE_0()
-#define APPEND_TRUE_1(a) a, TRUE
-#define APPEND_TRUE_2(a, b) a, TRUE, b, TRUE
-#define APPEND_TRUE_3(a, b, c) a, TRUE, b, TRUE, c, TRUE
-#define APPEND_TRUE_4(a, b, c, d) a, TRUE, b, TRUE, c, TRUE, d, TRUE
-#define APPEND_TRUE_5(a, b, c, d, e) a, TRUE, b, TRUE, c, TRUE, d, TRUE, e, TRUE
-#define APPEND_TRUE_6(a, b, c, d, e, f) a, TRUE, b, TRUE, c, TRUE, d, TRUE, e, TRUE, f, TRUE
-#define APPEND_TRUE_7(a, b, c, d, e, f, g) a, TRUE, b, TRUE, c, TRUE, d, TRUE, e, TRUE, f, TRUE, g, TRUE
-#define APPEND_TRUE_8(a, b, c, d, e, f, g, h) a, TRUE, b, TRUE, c, TRUE, d, TRUE, e, TRUE, f, TRUE, g, TRUE, h, TRUE
+#define APPEND_COMMA_TRUE(a) , a, TRUE
+#define R_APPEND_TRUE(...) __VA_OPT__(FIRST(__VA_ARGS__), TRUE RECURSIVELY(R_FOR_EACH(APPEND_COMMA_TRUE, EXCEPT_1(__VA_ARGS__))))
/* Test */
@@ -755,17 +736,17 @@ extern struct BattleTestRunnerState *const gBattleTestRunnerState;
}
#define BATTLE_TEST_ARGS_SINGLE(_name, _type, ...) \
- struct CAT(Result, __LINE__) { MEMBERS(__VA_ARGS__) }; \
+ struct CAT(Result, __LINE__) { RECURSIVELY(R_FOR_EACH(APPEND_SEMICOLON, __VA_ARGS__)) }; \
static void CAT(Test, __LINE__)(struct CAT(Result, __LINE__) *, const u32, struct BattlePokemon *, struct BattlePokemon *); \
__attribute__((section(".tests"))) static const struct Test CAT(sTest, __LINE__) = \
{ \
.name = _name, \
.filename = __FILE__, \
.runner = &gBattleTestRunner, \
+ .sourceLine = __LINE__, \
.data = (void *)&(const struct BattleTest) \
{ \
.type = _type, \
- .sourceLine = __LINE__, \
.function = { .singles = (SingleBattleTestFunction)CAT(Test, __LINE__) }, \
.resultsSize = sizeof(struct CAT(Result, __LINE__)), \
}, \
@@ -773,17 +754,17 @@ extern struct BattleTestRunnerState *const gBattleTestRunnerState;
static void CAT(Test, __LINE__)(struct CAT(Result, __LINE__) *results, const u32 i, struct BattlePokemon *player, struct BattlePokemon *opponent)
#define BATTLE_TEST_ARGS_DOUBLE(_name, _type, ...) \
- struct CAT(Result, __LINE__) { MEMBERS(__VA_ARGS__) }; \
+ struct CAT(Result, __LINE__) { RECURSIVELY(R_FOR_EACH(APPEND_SEMICOLON, __VA_ARGS__)) }; \
static void CAT(Test, __LINE__)(struct CAT(Result, __LINE__) *, const u32, struct BattlePokemon *, struct BattlePokemon *, struct BattlePokemon *, struct BattlePokemon *); \
__attribute__((section(".tests"))) static const struct Test CAT(sTest, __LINE__) = \
{ \
.name = _name, \
.filename = __FILE__, \
.runner = &gBattleTestRunner, \
+ .sourceLine = __LINE__, \
.data = (void *)&(const struct BattleTest) \
{ \
.type = _type, \
- .sourceLine = __LINE__, \
.function = { .doubles = (DoubleBattleTestFunction)CAT(Test, __LINE__) }, \
.resultsSize = sizeof(struct CAT(Result, __LINE__)), \
}, \
@@ -844,6 +825,12 @@ struct moveWithPP {
#define SpAttack(spAttack) SpAttack_(__LINE__, spAttack)
#define SpDefense(spDefense) SpDefense_(__LINE__, spDefense)
#define Speed(speed) Speed_(__LINE__, speed)
+#define HPIV(hpIV) HPIV_(__LINE__, hpIV)
+#define AttackIV(attackIV) AttackIV_(__LINE__, attackIV)
+#define DefenseIV(defenseIV) DefenseIV_(__LINE__, defenseIV)
+#define SpAttackIV(spAttackIV) SpAttackIV_(__LINE__, spAttackIV)
+#define SpDefenseIV(spDefenseIV) SpDefenseIV_(__LINE__, spDefenseIV)
+#define SpeedIV(speedIV) SpeedIV_(__LINE__, speedIV)
#define Item(item) Item_(__LINE__, item)
#define Moves(move1, ...) do { u16 moves_[MAX_MON_MOVES] = {move1, __VA_ARGS__}; Moves_(__LINE__, moves_); } while(0)
#define MovesWithPP(movewithpp1, ...) MovesWithPP_(__LINE__, (struct moveWithPP[MAX_MON_MOVES]) {movewithpp1, __VA_ARGS__})
@@ -874,6 +861,12 @@ void Defense_(u32 sourceLine, u32 defense);
void SpAttack_(u32 sourceLine, u32 spAttack);
void SpDefense_(u32 sourceLine, u32 spDefense);
void Speed_(u32 sourceLine, u32 speed);
+void HPIV_(u32 sourceLine, u32 hpIV);
+void AttackIV_(u32 sourceLine, u32 attackIV);
+void DefenseIV_(u32 sourceLine, u32 defenseIV);
+void SpAttackIV_(u32 sourceLine, u32 spAttackIV);
+void SpDefenseIV_(u32 sourceLine, u32 spDefenseIV);
+void SpeedIV_(u32 sourceLine, u32 speedIV);
void Item_(u32 sourceLine, u32 item);
void Moves_(u32 sourceLine, u16 moves[MAX_MON_MOVES]);
void MovesWithPP_(u32 sourceLine, struct moveWithPP moveWithPP[MAX_MON_MOVES]);
@@ -912,28 +905,28 @@ enum { TURN_CLOSED, TURN_OPEN, TURN_CLOSING };
#define TURN for (OpenTurn(__LINE__); gBattleTestRunnerState->data.turnState == TURN_OPEN; CloseTurn(__LINE__))
-#define MOVE(battler, ...) Move(__LINE__, battler, (struct MoveContext) { APPEND_TRUE(__VA_ARGS__) })
+#define MOVE(battler, ...) Move(__LINE__, battler, (struct MoveContext) { R_APPEND_TRUE(__VA_ARGS__) })
-#define EXPECT_MOVE(battler, ...) ExpectMove(__LINE__, battler, (struct MoveContext) { APPEND_TRUE(__VA_ARGS__) })
+#define EXPECT_MOVE(battler, ...) ExpectMove(__LINE__, battler, (struct MoveContext) { R_APPEND_TRUE(__VA_ARGS__) })
#define NOT_EXPECT_MOVE(battler, _move) ExpectMove(__LINE__, battler, (struct MoveContext) { .move = _move, .explicitMove = TRUE, .notExpected = TRUE, .explicitNotExpected = TRUE, })
#define EXPECT_MOVES(battler, ...) ExpectMoves(__LINE__, battler, FALSE, (struct FourMoves) {{ __VA_ARGS__ }})
#define NOT_EXPECT_MOVES(battler, ...) ExpectMoves(__LINE__, battler, TRUE, (struct FourMoves) {{ __VA_ARGS__ }})
#define EXPECT_SEND_OUT(battler, partyIndex) ExpectSendOut(__LINE__, battler, partyIndex)
#define EXPECT_SWITCH(battler, partyIndex) ExpectSwitch(__LINE__, battler, partyIndex)
-#define SCORE_EQ(battler, ...) Score(__LINE__, battler, CMP_EQUAL, FALSE, (struct TestAIScoreStruct) { APPEND_TRUE(__VA_ARGS__) } )
-#define SCORE_NE(battler, ...) Score(__LINE__, battler, CMP_NOT_EQUAL, FALSE, (struct TestAIScoreStruct) { APPEND_TRUE(__VA_ARGS__) } )
-#define SCORE_GT(battler, ...) Score(__LINE__, battler, CMP_GREATER_THAN, FALSE, (struct TestAIScoreStruct) { APPEND_TRUE(__VA_ARGS__) } )
-#define SCORE_LT(battler, ...) Score(__LINE__, battler, CMP_LESS_THAN, FALSE, (struct TestAIScoreStruct) { APPEND_TRUE(__VA_ARGS__) } )
-#define SCORE_EQ_VAL(battler, ...) Score(__LINE__, battler, CMP_EQUAL, TRUE, (struct TestAIScoreStruct) { APPEND_TRUE(__VA_ARGS__) } )
-#define SCORE_NE_VAL(battler, ...) Score(__LINE__, battler, CMP_NOT_EQUAL, TRUE, (struct TestAIScoreStruct) { APPEND_TRUE(__VA_ARGS__) } )
-#define SCORE_GT_VAL(battler, ...) Score(__LINE__, battler, CMP_GREATER_THAN, TRUE, (struct TestAIScoreStruct) { APPEND_TRUE(__VA_ARGS__) } )
-#define SCORE_LT_VAL(battler, ...) Score(__LINE__, battler, CMP_LESS_THAN, TRUE, (struct TestAIScoreStruct) { APPEND_TRUE(__VA_ARGS__) } )
+#define SCORE_EQ(battler, ...) Score(__LINE__, battler, CMP_EQUAL, FALSE, (struct TestAIScoreStruct) { R_APPEND_TRUE(__VA_ARGS__) } )
+#define SCORE_NE(battler, ...) Score(__LINE__, battler, CMP_NOT_EQUAL, FALSE, (struct TestAIScoreStruct) { R_APPEND_TRUE(__VA_ARGS__) } )
+#define SCORE_GT(battler, ...) Score(__LINE__, battler, CMP_GREATER_THAN, FALSE, (struct TestAIScoreStruct) { R_APPEND_TRUE(__VA_ARGS__) } )
+#define SCORE_LT(battler, ...) Score(__LINE__, battler, CMP_LESS_THAN, FALSE, (struct TestAIScoreStruct) { R_APPEND_TRUE(__VA_ARGS__) } )
+#define SCORE_EQ_VAL(battler, ...) Score(__LINE__, battler, CMP_EQUAL, TRUE, (struct TestAIScoreStruct) { R_APPEND_TRUE(__VA_ARGS__) } )
+#define SCORE_NE_VAL(battler, ...) Score(__LINE__, battler, CMP_NOT_EQUAL, TRUE, (struct TestAIScoreStruct) { R_APPEND_TRUE(__VA_ARGS__) } )
+#define SCORE_GT_VAL(battler, ...) Score(__LINE__, battler, CMP_GREATER_THAN, TRUE, (struct TestAIScoreStruct) { R_APPEND_TRUE(__VA_ARGS__) } )
+#define SCORE_LT_VAL(battler, ...) Score(__LINE__, battler, CMP_LESS_THAN, TRUE, (struct TestAIScoreStruct) { R_APPEND_TRUE(__VA_ARGS__) } )
#define FORCED_MOVE(battler) ForcedMove(__LINE__, battler)
#define SWITCH(battler, partyIndex) Switch(__LINE__, battler, partyIndex)
#define SKIP_TURN(battler) SkipTurn(__LINE__, battler)
#define SEND_OUT(battler, partyIndex) SendOut(__LINE__, battler, partyIndex)
-#define USE_ITEM(battler, ...) UseItem(__LINE__, battler, (struct ItemContext) { APPEND_TRUE(__VA_ARGS__) })
+#define USE_ITEM(battler, ...) UseItem(__LINE__, battler, (struct ItemContext) { R_APPEND_TRUE(__VA_ARGS__) })
#define WITH_RNG(tag, value) rng: ((struct TurnRNG) { tag, value })
struct MoveContext
@@ -948,13 +941,8 @@ struct MoveContext
u16 explicitCriticalHit:1;
u16 secondaryEffect:1;
u16 explicitSecondaryEffect:1;
- u16 megaEvolve:1;
- u16 explicitMegaEvolve:1;
- u16 ultraBurst:1;
- u16 explicitUltraBurst:1;
- // TODO: u8 zMove:1;
- u16 dynamax:1;
- u16 explicitDynamax:1;
+ u16 gimmick:4;
+ u16 explicitGimmick:1;
u16 allowed:1;
u16 explicitAllowed:1;
u16 notExpected:1; // Has effect only with EXPECT_MOVE
@@ -1001,11 +989,27 @@ void SendOut(u32 sourceLine, struct BattlePokemon *, u32 partyIndex);
#define ABILITY_POPUP(battler, ...) QueueAbility(__LINE__, battler, (struct AbilityEventContext) { __VA_ARGS__ })
#define ANIMATION(type, id, ...) QueueAnimation(__LINE__, type, id, (struct AnimationEventContext) { __VA_ARGS__ })
-#define HP_BAR(battler, ...) QueueHP(__LINE__, battler, (struct HPEventContext) { APPEND_TRUE(__VA_ARGS__) })
-#define EXPERIENCE_BAR(battler, ...) QueueExp(__LINE__, battler, (struct ExpEventContext) { APPEND_TRUE(__VA_ARGS__) })
+#define HP_BAR(battler, ...) QueueHP(__LINE__, battler, (struct HPEventContext) { R_APPEND_TRUE(__VA_ARGS__) })
+#define EXPERIENCE_BAR(battler, ...) QueueExp(__LINE__, battler, (struct ExpEventContext) { R_APPEND_TRUE(__VA_ARGS__) })
// Static const is needed to make the modern compiler put the pattern variable in the .rodata section, instead of putting it on stack(which can break the game).
#define MESSAGE(pattern) do {static const u8 msg[] = _(pattern); QueueMessage(__LINE__, msg);} while (0)
#define STATUS_ICON(battler, status) QueueStatus(__LINE__, battler, (struct StatusEventContext) { status })
+#define FREEZE_OR_FROSTBURN_STATUS(battler, isFrostbite) \
+ (B_USE_FROSTBITE ? STATUS_ICON(battler, frostbite: isFrostbite) : STATUS_ICON(battler, freeze: isFrostbite))
+
+#define SWITCH_OUT_MESSAGE(name) ONE_OF { \
+ MESSAGE(name ", that's enough! Come back!"); \
+ MESSAGE(name ", come back!"); \
+ MESSAGE(name ", OK! Come back!"); \
+ MESSAGE(name ", good! Come back!"); \
+ }
+
+#define SEND_IN_MESSAGE(name) ONE_OF { \
+ MESSAGE("Go! " name "!"); \
+ MESSAGE("Do it! " name "!"); \
+ MESSAGE("Go for it, " name "!"); \
+ MESSAGE("Your foe's weak! Get 'em, " name "!"); \
+ }
enum QueueGroupType
{
@@ -1089,7 +1093,7 @@ void ValidateFinally(u32 sourceLine);
s32 _am = Q_4_12_TO_INT(_a * _m); \
s32 _t = max(Q_4_12_TO_INT(abs(_m) + Q_4_12_ROUND), 1); \
if (abs(_am-_b) > _t) \
- Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: EXPECT_MUL_EQ(%d, %q, %d) failed: %d not in [%d..%d]", gTestRunnerState.test->filename, __LINE__, _a, _m, _b, _am, _b-_t, _b+_t); \
+ Test_ExitWithResult(TEST_RESULT_FAIL, __LINE__, ":L%s:%d: EXPECT_MUL_EQ(%d, %q, %d) failed: %d not in [%d..%d]", gTestRunnerState.test->filename, __LINE__, _a, _m, _b, _am, _b-_t, _b+_t); \
} while (0)
#endif
diff --git a/include/test/test.h b/include/test/test.h
index 790563e77227..401c65ce9ef7 100644
--- a/include/test/test.h
+++ b/include/test/test.h
@@ -33,6 +33,7 @@ struct Test
const char *filename;
const struct TestRunner *runner;
void *data;
+ u16 sourceLine;
};
struct TestRunnerState
@@ -40,6 +41,7 @@ struct TestRunnerState
u8 state;
u8 exitCode;
const char *skipFilename;
+ u32 failedAssumptionsBlockLine;
const struct Test *test;
u32 processCosts[MAX_PROCESSES];
@@ -73,9 +75,11 @@ void CB2_TestRunner(void);
void Test_ExpectedResult(enum TestResult);
void Test_ExpectLeaks(bool32);
-void Test_ExitWithResult(enum TestResult, const char *fmt, ...);
+void Test_ExitWithResult(enum TestResult, u32 stopLine, const char *fmt, ...);
+u32 SourceLine(u32 sourceLineOffset);
+u32 SourceLineOffset(u32 sourceLine);
-s32 MgbaPrintf_(const char *fmt, ...);
+s32 Test_MgbaPrintf(const char *fmt, ...);
#define TEST(_name) \
static void CAT(Test, __LINE__)(void); \
@@ -84,6 +88,7 @@ s32 MgbaPrintf_(const char *fmt, ...);
.name = _name, \
.filename = __FILE__, \
.runner = &gFunctionTestRunner, \
+ .sourceLine = __LINE__, \
.data = (void *)CAT(Test, __LINE__), \
}; \
static void CAT(Test, __LINE__)(void)
@@ -95,6 +100,7 @@ s32 MgbaPrintf_(const char *fmt, ...);
.name = "ASSUMPTIONS: " __FILE__, \
.filename = __FILE__, \
.runner = &gAssumptionsRunner, \
+ .sourceLine = __LINE__, \
.data = Assumptions, \
}; \
static void Assumptions(void)
@@ -103,14 +109,14 @@ s32 MgbaPrintf_(const char *fmt, ...);
do \
{ \
if (!(c)) \
- Test_ExitWithResult(TEST_RESULT_ASSUMPTION_FAIL, "%s:%d: ASSUME failed", gTestRunnerState.test->filename, __LINE__); \
+ Test_ExitWithResult(TEST_RESULT_ASSUMPTION_FAIL, __LINE__, ":L%s:%d: ASSUME failed", gTestRunnerState.test->filename, __LINE__); \
} while (0)
#define EXPECT(c) \
do \
{ \
if (!(c)) \
- Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: EXPECT failed", gTestRunnerState.test->filename, __LINE__); \
+ Test_ExitWithResult(TEST_RESULT_FAIL, __LINE__, ":L%s:%d: EXPECT failed", gTestRunnerState.test->filename, __LINE__); \
} while (0)
#define EXPECT_EQ(a, b) \
@@ -118,7 +124,7 @@ s32 MgbaPrintf_(const char *fmt, ...);
{ \
typeof(a) _a = (a), _b = (b); \
if (_a != _b) \
- Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: EXPECT_EQ(%d, %d) failed", gTestRunnerState.test->filename, __LINE__, _a, _b); \
+ Test_ExitWithResult(TEST_RESULT_FAIL, __LINE__, ":L%s:%d: EXPECT_EQ(%d, %d) failed", gTestRunnerState.test->filename, __LINE__, _a, _b); \
} while (0)
#define EXPECT_NE(a, b) \
@@ -126,7 +132,7 @@ s32 MgbaPrintf_(const char *fmt, ...);
{ \
typeof(a) _a = (a), _b = (b); \
if (_a == _b) \
- Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: EXPECT_NE(%d, %d) failed", gTestRunnerState.test->filename, __LINE__, _a, _b); \
+ Test_ExitWithResult(TEST_RESULT_FAIL, __LINE__, ":L%s:%d: EXPECT_NE(%d, %d) failed", gTestRunnerState.test->filename, __LINE__, _a, _b); \
} while (0)
#define EXPECT_LT(a, b) \
@@ -134,7 +140,7 @@ s32 MgbaPrintf_(const char *fmt, ...);
{ \
typeof(a) _a = (a), _b = (b); \
if (_a >= _b) \
- Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: EXPECT_LT(%d, %d) failed", gTestRunnerState.test->filename, __LINE__, _a, _b); \
+ Test_ExitWithResult(TEST_RESULT_FAIL, __LINE__, ":L%s:%d: EXPECT_LT(%d, %d) failed", gTestRunnerState.test->filename, __LINE__, _a, _b); \
} while (0)
#define EXPECT_LE(a, b) \
@@ -142,7 +148,7 @@ s32 MgbaPrintf_(const char *fmt, ...);
{ \
typeof(a) _a = (a), _b = (b); \
if (_a > _b) \
- Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: EXPECT_LE(%d, %d) failed", gTestRunnerState.test->filename, __LINE__, _a, _b); \
+ Test_ExitWithResult(TEST_RESULT_FAIL, __LINE__, ":L%s:%d: EXPECT_LE(%d, %d) failed", gTestRunnerState.test->filename, __LINE__, _a, _b); \
} while (0)
#define EXPECT_GT(a, b) \
@@ -150,7 +156,7 @@ s32 MgbaPrintf_(const char *fmt, ...);
{ \
typeof(a) _a = (a), _b = (b); \
if (_a <= _b) \
- Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: EXPECT_GT(%d, %d) failed", gTestRunnerState.test->filename, __LINE__, _a, _b); \
+ Test_ExitWithResult(TEST_RESULT_FAIL, __LINE__, ":L%s:%d: EXPECT_GT(%d, %d) failed", gTestRunnerState.test->filename, __LINE__, _a, _b); \
} while (0)
#define EXPECT_GE(a, b) \
@@ -158,7 +164,7 @@ s32 MgbaPrintf_(const char *fmt, ...);
{ \
typeof(a) _a = (a), _b = (b); \
if (_a < _b) \
- Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: EXPECT_GE(%d, %d) failed", gTestRunnerState.test->filename, __LINE__, _a, _b); \
+ Test_ExitWithResult(TEST_RESULT_FAIL, __LINE__, ":L%s:%d: EXPECT_GE(%d, %d) failed", gTestRunnerState.test->filename, __LINE__, _a, _b); \
} while (0)
struct Benchmark { s32 ticks; };
@@ -193,18 +199,18 @@ static inline struct Benchmark BenchmarkStop(void)
do \
{ \
u32 a_ = (a).ticks; u32 b_ = (b).ticks; \
- MgbaPrintf_(#a ": %d ticks, " #b ": %d ticks", a_, b_); \
+ Test_MgbaPrintf(#a ": %d ticks, " #b ": %d ticks", a_, b_); \
if (((a_ - BENCHMARK_ABS) * BENCHMARK_REL) >= (b_ * 100)) \
- Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: EXPECT_FASTER(" #a ", " #b ") failed", gTestRunnerState.test->filename, __LINE__); \
+ Test_ExitWithResult(TEST_RESULT_FAIL, __LINE__, ":L%s:%d: EXPECT_FASTER(" #a ", " #b ") failed", gTestRunnerState.test->filename, __LINE__); \
} while (0)
#define EXPECT_SLOWER(a, b) \
do \
{ \
u32 a_ = (a).ticks; u32 b_ = (b).ticks; \
- MgbaPrintf_(#a ": %d ticks, " #b ": %d ticks", a_, b_); \
+ Test_MgbaPrintf(#a ": %d ticks, " #b ": %d ticks", a_, b_); \
if ((a_ * 100) <= ((b_ - BENCHMARK_ABS) * BENCHMARK_REL)) \
- Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: EXPECT_SLOWER(" #a ", " #b ") failed", gTestRunnerState.test->filename, __LINE__); \
+ Test_ExitWithResult(TEST_RESULT_FAIL, __LINE__, ":L%s:%d: EXPECT_SLOWER(" #a ", " #b ") failed", gTestRunnerState.test->filename, __LINE__); \
} while (0)
#define KNOWN_FAILING \
@@ -215,10 +221,12 @@ static inline struct Benchmark BenchmarkStop(void)
#define PARAMETRIZE if (gFunctionTestRunnerState->parameters++ == gFunctionTestRunnerState->runParameter)
+#define PARAMETRIZE_LABEL(f, label) if (gFunctionTestRunnerState->parameters++ == gFunctionTestRunnerState->runParameter && (Test_MgbaPrintf(":N%s: " f " (%d/%d)", gTestRunnerState.test->name, label, gFunctionTestRunnerState->runParameter + 1, gFunctionTestRunnerState->parameters), 1))
+
#define TO_DO \
do { \
Test_ExpectedResult(TEST_RESULT_TODO); \
- Test_ExitWithResult(TEST_RESULT_TODO, "%s:%d: EXPECT_TO_DO", gTestRunnerState.test->filename, __LINE__); \
+ Test_ExitWithResult(TEST_RESULT_TODO, __LINE__, ":L%s:%d: EXPECT_TO_DO", gTestRunnerState.test->filename, __LINE__); \
} while (0)
#endif
diff --git a/include/test_runner.h b/include/test_runner.h
index 248a0463e549..f61f26b66ea0 100644
--- a/include/test_runner.h
+++ b/include/test_runner.h
@@ -24,6 +24,7 @@ void TestRunner_Battle_InvalidNoHPMon(u32 battlerId, u32 partyIndex);
void TestRunner_Battle_CheckBattleRecordActionType(u32 battlerId, u32 recordIndex, u32 actionType);
u32 TestRunner_Battle_GetForcedAbility(u32 side, u32 partyIndex);
+u32 TestRunner_Battle_GetChosenGimmick(u32 side, u32 partyIndex);
#else
@@ -45,6 +46,8 @@ u32 TestRunner_Battle_GetForcedAbility(u32 side, u32 partyIndex);
#define TestRunner_Battle_GetForcedAbility(...) (u32)0
+#define TestRunner_Battle_GetChosenGimmick(...) (u32)0
+
#endif
#endif
diff --git a/include/tilesets.h b/include/tilesets.h
index c7cc8edac961..b495b6c52cb2 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/trainer_pokemon_sprites.h b/include/trainer_pokemon_sprites.h
index 7c83ca62eeb1..619fa91e7039 100644
--- a/include/trainer_pokemon_sprites.h
+++ b/include/trainer_pokemon_sprites.h
@@ -11,6 +11,7 @@ bool16 ResetAllPicSprites(void);
u16 CreateMonPicSprite_Affine(u16 species, bool8 isShiny, u32 personality, u8 flags, s16 x, s16 y, u8 paletteSlot, u16 paletteTag);
u16 CreateMonPicSprite(u16 species, bool8 isShiny, u32 personality, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag);
u16 FreeAndDestroyMonPicSprite(u16 spriteId);
+u16 FreeAndDestroyMonPicSpriteNoPalette(u16 spriteId);
u16 CreateTrainerPicSprite(u16 species, bool8 isFrontPic, s16 x, s16 y, u8 paletteSlot, u16 paletteTag);
u16 FreeAndDestroyTrainerPicSprite(u16 spriteId);
u16 CreateTrainerCardTrainerPicSprite(u16 species, bool8 isFrontPic, u16 destX, u16 destY, u8 paletteSlot, u8 windowId);
diff --git a/include/wild_encounter.h b/include/wild_encounter.h
index 13e760068463..63289f081ccc 100644
--- a/include/wild_encounter.h
+++ b/include/wild_encounter.h
@@ -29,6 +29,7 @@ struct WildPokemonHeader
extern const struct WildPokemonHeader gWildMonHeaders[];
extern bool8 gIsFishingEncounter;
extern bool8 gIsSurfingEncounter;
+extern u8 gChainFishingDexNavStreak;
void DisableWildEncounters(bool8 disabled);
u8 PickWildMonNature(void);
@@ -41,5 +42,6 @@ u16 GetLocalWaterMon(void);
bool8 UpdateRepelCounter(void);
bool8 TryDoDoubleWildBattle(void);
bool8 StandardWildEncounter_Debug(void);
+u32 CalculateChainFishingShinyRolls(void);
#endif // GUARD_WILD_ENCOUNTER_H
diff --git a/ld_script.ld b/ld_script.ld
index e9cbae895769..a0c069c96574 100644
--- a/ld_script.ld
+++ b/ld_script.ld
@@ -137,6 +137,7 @@ SECTIONS {
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);
@@ -357,7 +358,7 @@ SECTIONS {
src/gym_leader_rematch.o(.text);
src/battle_transition_frontier.o(.text);
src/international_string_util.o(.text);
- src/pokemon_debug.o(.text);
+ src/pokemon_sprite_visualizer.o(.text);
src/expansion_intro.o(.text);
} > ROM =0
@@ -527,6 +528,7 @@ SECTIONS {
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);
@@ -724,7 +726,7 @@ SECTIONS {
data/mystery_gift.o(.rodata);
src/m4a_tables.o(.rodata);
data/sound_data.o(.rodata);
- src/pokemon_debug.o(.rodata);
+ src/pokemon_sprite_visualizer.o(.rodata);
src/expansion_intro.o(.rodata);
} > ROM =0
diff --git a/map_data_rules.mk b/map_data_rules.mk
index 626cd4724080..a045d1d42061 100755
--- a/map_data_rules.mk
+++ b/map_data_rules.mk
@@ -23,6 +23,7 @@ $(MAPS_DIR)/groups.inc: $(MAPS_DIR)/map_groups.json
$(MAPS_DIR)/connections.inc: $(MAPS_DIR)/groups.inc ;
$(MAPS_DIR)/events.inc: $(MAPS_DIR)/connections.inc ;
$(MAPS_DIR)/headers.inc: $(MAPS_DIR)/events.inc ;
+$(DATA_SRC_SUBDIR)/map_group_count.h: $(MAPS_DIR)/headers.inc ;
include/constants/map_groups.h: $(MAPS_DIR)/headers.inc ;
$(LAYOUTS_DIR)/layouts.inc: $(LAYOUTS_DIR)/layouts.json
diff --git a/migration_scripts/item_ball_refactor.py b/migration_scripts/1.8/item_ball_refactor.py
similarity index 99%
rename from migration_scripts/item_ball_refactor.py
rename to migration_scripts/1.8/item_ball_refactor.py
index f121978ec85c..83d6f9f167cb 100755
--- a/migration_scripts/item_ball_refactor.py
+++ b/migration_scripts/1.8/item_ball_refactor.py
@@ -81,5 +81,5 @@
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
new file mode 100644
index 000000000000..a7adac98fffe
--- /dev/null
+++ b/migration_scripts/1.9/battle_anim_moves_refactor.py
@@ -0,0 +1,63 @@
+import re
+
+def IsCommaMissing(line: str):
+ sanitized_line = line.removesuffix('\n').strip()
+ if sanitized_line.endswith('{') or sanitized_line.endswith('(') or sanitized_line.endswith(','):
+ return False
+ if not re.search(r'\.[A-Za-z0-9_]+', sanitized_line):
+ return False
+ return True
+
+input_file = open('./src/data/moves_info.h', 'r')
+lines = input_file.readlines()
+input_file.close()
+
+
+battle_anim_lines = []
+moves_info_lines = []
+
+move = None
+bracketCount = 0
+for line in lines:
+ m = re.search(r'\[MOVE_([A-Za-z0-9_]+)\] =', line)
+ if m:
+ move = m.group(1)
+ bracketCount = 0
+ battle_anim_lines.append('extern const u8 Move_' + move + '[];\n')
+
+ if move and re.search(r'\{', line):
+ bracketCount = bracketCount + 1
+
+ if move and re.search(r'\}', line):
+ if (bracketCount == 1):
+ moves_info_lines.append(8 * ' ' + '.battleAnimScript = Move_' + move + ',\n')
+ move = None
+ bracketCount = bracketCount - 1
+
+ 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)
+
+output_file_mi = open('./src/data/moves_info.h', 'w')
+output_file_mi.writelines(moves_info_lines)
+output_file_mi.close()
+
+output_file_bas = open('./include/battle_anim_scripts.h', 'w')
+output_file_bas.writelines('#ifndef GUARD_BATTLE_ANIM_SCRIPTS_H\n')
+output_file_bas.writelines('#define GUARD_BATTLE_ANIM_SCRIPTS_H\n\n')
+output_file_bas.writelines(battle_anim_lines)
+output_file_bas.writelines('\n#endif // GUARD_BATTLE_ANIM_SCRIPTS_H\n')
+output_file_bas.close()
+
+b_anim_scripts_s = open('./data/battle_anim_scripts.s', 'r')
+lines = b_anim_scripts_s.read()
+b_anim_scripts_s.close()
+
+lines = re.sub(r'(Move_[A-Za-z0-9_]*)([:]+)', r'\1::', lines)
+
+b_anim_scripts_s = open('./data/battle_anim_scripts.s', 'w')
+b_anim_scripts_s.write(lines)
+b_anim_scripts_s.close()
diff --git a/migration_scripts/1.9/battle_frontier_convert_parties.py b/migration_scripts/1.9/battle_frontier_convert_parties.py
new file mode 100644
index 000000000000..83982bbe465d
--- /dev/null
+++ b/migration_scripts/1.9/battle_frontier_convert_parties.py
@@ -0,0 +1,62 @@
+import re
+
+def battle_frontier_mons(data):
+ data = re.sub(re.escape(".itemTableId = BATTLE_FRONTIER_"), ".heldItem = ", data)
+ data = re.sub(re.escape("FacilityMon"), "TrainerMon", data)
+ data = re.sub(re.escape(".evSpread = 0,"), ".ev = NULL,", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 0),", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,"), ".ev = TRAINER_PARTY_EVS(0, 170, 170, 170, 0, 0),", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_ATTACK,"), ".ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 0, 0),", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SPEED,"), ".ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 0, 0),", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(170, 170, 170, 0, 0, 0),", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,"), ".ev = TRAINER_PARTY_EVS(0, 170, 170, 0, 170, 0),", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(170, 0, 0, 170, 170, 0),", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(170, 0, 0, 170, 170, 0),", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 170, 0),", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE,"), ".ev = TRAINER_PARTY_EVS(0, 0, 170, 170, 170, 0),", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,"), ".ev = TRAINER_PARTY_EVS(0, 170, 0, 170, 170, 0),", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(170, 170, 0, 0, 170, 0),", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,"), ".ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,"), ".ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 252, 0),", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,"), ".ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(102, 102, 102, 102, 0, 102),", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,"), ".ev = TRAINER_PARTY_EVS(0, 128, 128, 0, 128, 128),", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,"), ".ev = TRAINER_PARTY_EVS(0, 0, 170, 0, 170, 170),", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(84, 84, 84, 84, 84, 84),", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,"), ".ev = TRAINER_PARTY_EVS(0, 128, 128, 128, 0, 128),", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,"), ".ev = TRAINER_PARTY_EVS(0, 170, 170, 0, 0, 170),", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(102, 0, 102, 102, 102, 102),", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,"), ".ev = TRAINER_PARTY_EVS(0, 170, 0, 0, 170, 170),", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(128, 0, 128, 0, 128, 128),", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(128, 128, 128, 0, 0, 128),", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(170, 0, 0, 170, 0, 170),", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,"), ".ev = TRAINER_PARTY_EVS(0, 170, 0, 170, 0, 170),", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE,"), ".ev = TRAINER_PARTY_EVS(0, 0, 170, 170, 0, 170),", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(128, 0, 128, 128, 0, 128),", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(170, 0, 0, 0, 170, 170),", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(170, 170, 0, 0, 0, 170),", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,"), ".ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 0, 252),", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK,"), ".ev = TRAINER_PARTY_EVS(0, 0, 0, 0, 252, 252),", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,"), ".ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(252, 0, 0, 252, 0, 0),", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(170, 0, 170, 170, 0, 0),", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(170, 170, 0, 170, 0, 0),", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,"), ".ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,"), ".ev = TRAINER_PARTY_EVS(252, 0, 252, 0, 0, 0),", data)
+ data = re.sub(re.escape(".evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,"), ".ev = TRAINER_PARTY_EVS(0, 252, 252, 0, 0, 0),", data)
+
+ return data
+
+with open('src/data/battle_frontier/battle_frontier_mons.h', 'r') as file:
+ data = file.read()
+with open('src/data/battle_frontier/battle_frontier_mons.h', 'w') as file:
+ file.write(battle_frontier_mons(data))
+
+with open('src/data/battle_frontier/battle_tent.h', 'r') as file:
+ data = file.read()
+with open('src/data/battle_frontier/battle_tent.h', 'w') as file:
+ file.write(battle_frontier_mons(data))
diff --git a/migration_scripts/1.9/convert_item_icons.py b/migration_scripts/1.9/convert_item_icons.py
new file mode 100644
index 000000000000..abd2070fd177
--- /dev/null
+++ b/migration_scripts/1.9/convert_item_icons.py
@@ -0,0 +1,45 @@
+import glob
+import re
+import os
+
+if not os.path.exists("Makefile"):
+ print("Please run this script from your root folder.")
+ quit()
+
+# Read item_icon_table.h and extract the icon and palette information
+for file in glob.glob('./src/data/item_icon_table.h'):
+ with open(file, 'r') as f:
+ icon_table_content = f.read()
+
+# Extract item icon and palette data from item_icon_table.h
+icon_table_pattern = re.compile(r'\[(ITEM_[A-Z_0-9]+)\]\s*=\s*\{([^,]+),\s*([^}]+)\}', re.MULTILINE)
+icon_table_data = {}
+for match in icon_table_pattern.findall(icon_table_content):
+ if len(match) == 3:
+ item_name, icon_pic, icon_palette = match
+ icon_table_data[item_name] = (icon_pic, icon_palette)
+
+# Read items.h content
+for file in glob.glob('./src/data/items.h'):
+ with open(file, 'r') as f:
+ items_content = f.read()
+
+# Modify items.h content
+def add_icon_data(match):
+ item_name = match.group(1)
+ item_content = match.group(2)
+ if item_name in icon_table_data:
+ icon_pic, icon_palette = icon_table_data[item_name]
+ print(f"Updating {item_name}: adding iconPic = {icon_pic}, iconPalette = {icon_palette}")
+ return f'[{item_name}] =\n {{{item_content} .iconPic = {icon_pic},\n .iconPalette = {icon_palette},\n }},'
+ else:
+ return match.group(0)
+
+item_pattern = re.compile(r'\[(ITEM_[A-Z_0-9]+)\]\s*=\s*\{([\s\S]*?)\},', re.DOTALL)
+modified_items_content = item_pattern.sub(add_icon_data, items_content)
+
+# Write the modified content back to items.h
+for file in glob.glob('./src/data/items.h'):
+ with open(file, 'w') as f:
+ f.write(modified_items_content)
+ print("items.h has been updated")
diff --git a/migration_scripts/1.9/convert_partner_parties.py b/migration_scripts/1.9/convert_partner_parties.py
new file mode 100644
index 000000000000..e726dcc7234d
--- /dev/null
+++ b/migration_scripts/1.9/convert_partner_parties.py
@@ -0,0 +1,319 @@
+# If you have extra members in 'TrainerMon':
+# 1. Add a regular expression which matches that member (e.g. 'shadow_definition').
+# 2. Match that regular expression in 'convert' and write into 'attributes' with the key that 'trainerproc' should parse.
+# 3. Add the key used in 'attributes' to 'pokemon_attribute_order'.
+# 4. Update 'trainerproc.c' to parse the new key.
+
+import re
+import sys
+
+is_blank = re.compile(r'^[ \t]*(//.*)?$')
+
+begin_party_definition = re.compile(r'struct TrainerMon (\w+)\[\] =')
+end_party_definition = re.compile(r'^};')
+begin_pokemon_definition = re.compile(r'^ { *$')
+end_pokemon_definition = re.compile(r'^ },? *$')
+level_definition = re.compile(r'\.lvl = (\d+)')
+species_definition = re.compile(r'\.species = SPECIES_(\w+)')
+gender_definition = re.compile(r'\.gender = TRAINER_MON_(\w+)')
+nickname_definition = re.compile(r'\.nickname = COMPOUND_STRING\("([^"]+)"\)')
+item_definition = re.compile(r'\.heldItem = ITEM_(\w+)')
+ball_definition = re.compile(r'\.ball = ITEM_(\w+)')
+ability_definition = re.compile(r'\.ability = ABILITY_(\w+)')
+friendship_definition = re.compile(r'\.friendship = (\d+)')
+shiny_definition = re.compile(r'\.isShiny = (\w+)')
+ivs_definition = re.compile(r'\.iv = TRAINER_PARTY_IVS\(([0-9 ]+),([0-9 ]+),([0-9 ]+),([0-9 ]+),([0-9 ]+),([0-9 ]+)\)')
+evs_definition = re.compile(r'\.ev = TRAINER_PARTY_EVS\(([0-9 ]+),([0-9 ]+),([0-9 ]+),([0-9 ]+),([0-9 ]+),([0-9 ]+)\)')
+moves_definition = re.compile(r'\.moves = \{([^}]+)\}')
+move_definition = re.compile(r'MOVE_(\w+)')
+nature_definition = re.compile(r'\.nature = NATURE_(\w+)')
+
+# NOTE: These are just for aesthetics, the Pokemon would still compile
+# without them.
+species_replacements = {
+ "CHIEN_PAO": "Chien-Pao",
+ "CHI_YU": "Chi-Yu",
+ "HAKAMO_O": "Hakamo-o",
+ "HO_OH": "Ho-Oh",
+ "JANGMO_O": "Jangmo-o",
+ "KOMMO_O": "Kommo-o",
+ "PORYGON_Z": "Porygon-Z",
+ "ROTOM_": "Rotom-",
+ "TING_LU": "Ting-Lu",
+ "TYPE_NULL": "Type: Null",
+ "WO_CHIEN": "Wo-Chien",
+
+ "_ALOLAN": "-Alola",
+ "_AQUA_BREED": "-Aqua",
+ "_BATTLE_BOND": "-Bond",
+ "_BLAZE_BREED": "-Blaze",
+ "_CAP": "",
+ "_CLOAK": "",
+ "_COMBAT_BREED": "-Combat",
+ "_CROWED_SHIELD": "-Crowned",
+ "_CROWED_SWORD": "-Crowned",
+ "_DRIVE": "",
+ "_EAST_SEA": "-East",
+ "_FAMILY_OF_FOUR": "-Four",
+ "_FEMALE": "-F",
+ "_FLOWER": "",
+ "_GALARIAN": "-Galar",
+ "_GIGANTAMAX": "-Gmax",
+ "_HISUIAN": "-Hisui",
+ "_ICE_RIDER": "-Ice",
+ "_NOICE_FACE": "-Noice",
+ "_ORIGIN": "-Origin",
+ "_ORIGINAL_COLOR": "-Original",
+ "_PALDEAN": "-Paldea",
+ "_PLUMAGE": "",
+ "_POKE_BALL": "-Pokeball",
+ "_SHADOW_RIDER": "-Shadow",
+ "_STRIKE_STYLE": "-Style",
+ "_TOTEM": "-Totem",
+ "_ZEN_MODE": "-Zen",
+}
+
+pokemon_attribute_order = ['Level', 'Ability', 'IVs', 'EVs', 'Happiness', 'Shiny', 'Ball']
+
+class Pokemon:
+ def __init__(self):
+ self.nickname = None
+ self.species = None
+ self.gender = None
+ self.item = None
+ self.nature = None
+ self.attributes = {}
+ self.attributes['IVs'] = "0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe"
+ self.moves = []
+
+def convert_parties(in_path, in_h):
+ party_identifier = None
+ party = None
+ pokemon = None
+ parties = {}
+
+ for line_no, line in enumerate(in_h, 1):
+ try:
+ line = line[:-1]
+ if m := begin_party_definition.search(line):
+ if party:
+ raise Exception(f"unexpected start of party")
+ [identifier] = m.groups()
+ party_identifier = identifier
+ party = []
+ elif end_party_definition.search(line):
+ if not party:
+ raise Exception(f"unexpected end of party")
+ parties[party_identifier] = party
+ party = None
+ elif begin_pokemon_definition.search(line):
+ if pokemon:
+ raise Exception(f"unexpected start of Pokemon")
+ pokemon = Pokemon()
+ elif end_pokemon_definition.search(line):
+ if not pokemon:
+ raise Exception(f"unexpected end of Pokemon")
+ else:
+ party.append(pokemon)
+ pokemon = None
+ elif m := level_definition.search(line):
+ [level] = m.groups()
+ pokemon.attributes['Level'] = level
+ elif m := species_definition.search(line):
+ [species_] = m.groups()
+ for match, replacement in species_replacements.items():
+ species_ = species_.replace(match, replacement)
+ pokemon.species = species_.replace("_", " ").title()
+ elif m := gender_definition.search(line):
+ [gender_] = m.groups()
+ if gender_ == 'MALE':
+ pokemon.gender = 'M'
+ elif gender_ == 'FEMALE':
+ pokemon.gender = 'F'
+ else:
+ raise Exception(f"unknown gender: '{gender_}'")
+ elif m := nickname_definition.search(line):
+ [nickname] = m.groups()
+ pokemon.nickname = nickname
+ elif m := item_definition.search(line):
+ [item_] = m.groups()
+ pokemon.item = item_.replace("_", " ").title()
+ elif m := ball_definition.search(line):
+ [ball] = m.groups()
+ pokemon.attributes['Ball'] = ball.replace("_", " ").title()
+ elif m := ability_definition.search(line):
+ [ability] = m.groups()
+ pokemon.attributes['Ability'] = ability.replace("_", " ").title()
+ elif m := friendship_definition.search(line):
+ [friendship] = m.groups()
+ pokemon.attributes['Happiness'] = friendship
+ elif m := shiny_definition.search(line):
+ [shiny] = m.groups()
+ if shiny == 'TRUE':
+ pokemon.attributes['Shiny'] = 'Yes'
+ elif shiny == 'FALSE':
+ pokemon.attributes['Shiny'] = 'No'
+ else:
+ raise Exception(f"unknown isShiny: '{shiny}'")
+ elif m := ivs_definition.search(line):
+ [hp, attack, defense, speed, special_attack, special_defense] = [stat.strip() for stat in m.groups()]
+ stats = {"HP": hp, "Atk": attack, "Def": defense, "SpA": special_attack, "SpD": special_defense, "Spe": speed}
+ pokemon.attributes['IVs'] = ' / '.join(f"{value} {key}" for key, value in stats.items())
+ elif m := evs_definition.search(line):
+ [hp, attack, defense, speed, special_attack, special_defense] = [stat.strip() for stat in m.groups()]
+ stats = {"HP": hp, "Atk": attack, "Def": defense, "SpA": special_attack, "SpD": special_defense, "Spe": speed}
+ pokemon.attributes['EVs'] = ' / '.join(f"{value} {key}" for key, value in stats.items() if value != '0')
+ elif m := moves_definition.search(line):
+ [moves_] = m.groups()
+ pokemon.moves = [move.replace("_", " ").title() for move in move_definition.findall(moves_) if move != "NONE"]
+ elif m := nature_definition.search(line):
+ [nature_] = m.groups()
+ pokemon.nature = nature_.replace("_", " ").title()
+ elif is_blank.search(line):
+ pass
+ else:
+ raise Exception(f"could not parse '{line.strip()}'")
+ except Exception as e:
+ print(f"{in_path}:{line_no}: {e}")
+ return parties
+
+is_trainer_skip = re.compile(r'(const struct Trainer gBattlePartners\[\] = \{)|(^ \{$)|(\.partySize =)|(\.party = NULL)|(\.mugshotEnabled = TRUE)|(\};)')
+
+begin_trainer_definition = re.compile(r' \[(PARTNER_\w+)\] =')
+end_trainer_definition = re.compile(r' }')
+trainer_class_definition = re.compile(r'\.trainerClass = TRAINER_CLASS_(\w+)')
+encounter_music_gender_definition = re.compile(r'\.encounterMusic_gender = (F_TRAINER_FEMALE \| )?TRAINER_ENCOUNTER_MUSIC_(\w+)')
+trainer_pic_definition = re.compile(r'\.trainerPic = TRAINER_BACK_PIC_(\w+)')
+trainer_name_definition = re.compile(r'\.trainerName = _\("([^"]*)"\)')
+trainer_items_definition = re.compile(r'\.items = \{([^}]*)\}')
+trainer_item_definition = re.compile(r'ITEM_(\w+)')
+trainer_ai_flags_definition = re.compile(r'\.aiFlags = (.*)')
+trainer_ai_flag_definition = re.compile(r'AI_FLAG_(\w+)')
+trainer_party_definition = re.compile(r'\.party = TRAINER_PARTY\((\w+)\)')
+trainer_mugshot_definition = re.compile(r'\.mugshotColor = MUGSHOT_COLOR_(\w+)')
+trainer_starting_status_definition = re.compile(r'\.startingStatus = STARTING_STATUS_(\w+)')
+
+class_fixups = {
+ "Rs": "RS",
+}
+
+pic_fixups = {
+ "Rs": "RS",
+}
+
+class Trainer:
+ def __init__(self, id_):
+ self.id = id_
+ self.class_ = None
+ self.encounter_music = None
+ self.gender = None
+ self.pic = None
+ self.name = None
+ self.items = []
+ self.ai_flags = None
+ self.mugshot = None
+ self.starting_status = None
+ self.party = None
+
+def convert_trainers(in_path, in_h, parties, out_party):
+ newlines = 0
+ trainer = None
+ for line_no, line in enumerate(in_h, 1):
+ try:
+ line = line[:-1]
+ if m := begin_trainer_definition.search(line):
+ if trainer:
+ raise Exception(f"unexpected start of trainer")
+ [id_] = m.groups()
+ trainer = Trainer(id_)
+ elif m := trainer_class_definition.search(line):
+ [class_] = m.groups()
+ class_ = class_.replace("_", " ").title()
+ for match, replacement in class_fixups.items():
+ class_ = class_.replace(match, replacement)
+ trainer.class_ = class_
+ elif m := encounter_music_gender_definition.search(line):
+ [is_female, music] = m.groups()
+ trainer.gender = 'Female' if is_female else 'Male'
+ trainer.encounter_music = music.replace("_", " ").title()
+ elif m := trainer_pic_definition.search(line):
+ [pic] = m.groups()
+ pic = pic.replace("_", " ").title()
+ for match, replacement in pic_fixups.items():
+ pic = pic.replace(match, replacement)
+ trainer.pic = pic
+ elif m := trainer_name_definition.search(line):
+ [name] = m.groups()
+ trainer.name = name
+ elif m := trainer_items_definition.search(line):
+ [items] = m.groups()
+ trainer.items = " / ".join(item.replace("_", " ").title() for item in trainer_item_definition.findall(items) if item != "NONE")
+ elif m := trainer_ai_flags_definition.search(line):
+ [ai_flags] = m.groups()
+ trainer.ai_flags = " / ".join(ai_flag.replace("_", " ").title() for ai_flag in trainer_ai_flag_definition.findall(ai_flags))
+ elif m := trainer_mugshot_definition.search(line):
+ [color] = m.groups()
+ trainer.mugshot = color.title()
+ elif m := trainer_starting_status_definition.search(line):
+ [starting_status] = m.groups()
+ trainer.starting_status = starting_status.replace("_", " ").title()
+ elif m := trainer_party_definition.search(line):
+ [party] = m.groups()
+ trainer.party = parties[party]
+ elif end_trainer_definition.search(line):
+ if not trainer:
+ raise Exception(f"unexpected end of trainer")
+ while newlines > 0:
+ out_party.write(f"\n")
+ newlines -= 1
+ newlines = 1
+ out_party.write(f"=== {trainer.id} ===\n")
+ out_party.write(f"Name: {trainer.name}\n")
+ out_party.write(f"Class: {trainer.class_}\n")
+ out_party.write(f"Pic: {trainer.pic}\n")
+ out_party.write(f"Gender: {trainer.gender}\n")
+ out_party.write(f"Music: {trainer.encounter_music}\n")
+ if trainer.items:
+ out_party.write(f"Items: {trainer.items}\n")
+ if trainer.ai_flags:
+ out_party.write(f"AI: {trainer.ai_flags}\n")
+ if trainer.mugshot:
+ out_party.write(f"Mugshot: {trainer.mugshot}\n")
+ if trainer.starting_status:
+ out_party.write(f"Starting Status: {trainer.starting_status}\n")
+ if trainer.party:
+ for i, pokemon in enumerate(trainer.party):
+ out_party.write(f"\n")
+ if pokemon.nickname:
+ out_party.write(f"{pokemon.nickname} ({pokemon.species})")
+ else:
+ out_party.write(f"{pokemon.species}")
+ if pokemon.gender:
+ out_party.write(f" ({pokemon.gender})")
+ if pokemon.item and pokemon.item != 'None':
+ out_party.write(f" @ {pokemon.item}")
+ out_party.write(f"\n")
+ if pokemon.nature:
+ out_party.write(f"{pokemon.nature} Nature\n")
+ for key in pokemon_attribute_order:
+ if key in pokemon.attributes:
+ out_party.write(f"{key}: {pokemon.attributes[key]}\n")
+ for move in pokemon.moves:
+ out_party.write(f"- {move}\n")
+ trainer = None
+ elif is_blank.search(line) or is_trainer_skip.search(line):
+ pass
+ else:
+ raise Exception(f"could not parse '{line.strip()}'")
+ except Exception as e:
+ print(f"{in_path}:{line_no}: {e}")
+
+if __name__ == '__main__':
+ try:
+ [argv0, trainers_in_path, parties_in_path, out_path] = sys.argv
+ except:
+ print(f"usage: python3 {sys.argv[0]} ")
+ else:
+ with open(trainers_in_path, "r") as trainers_in_h, open(parties_in_path, "r") as parties_in_h, open(out_path, "w") as out_party:
+ parties = convert_parties(parties_in_path, parties_in_h)
+ trainers = convert_trainers(trainers_in_path, trainers_in_h, parties, out_party)
diff --git a/migration_scripts/1.9/convert_trainer_parties.py b/migration_scripts/1.9/convert_trainer_parties.py
new file mode 100644
index 000000000000..463816c021b1
--- /dev/null
+++ b/migration_scripts/1.9/convert_trainer_parties.py
@@ -0,0 +1,330 @@
+# If you have extra members in 'TrainerMon':
+# 1. Add a regular expression which matches that member (e.g. 'shadow_definition').
+# 2. Match that regular expression in 'convert' and write into 'attributes' with the key that 'trainerproc' should parse.
+# 3. Add the key used in 'attributes' to 'pokemon_attribute_order'.
+# 4. Update 'trainerproc.c' to parse the new key.
+
+import re
+import sys
+
+is_blank = re.compile(r'^[ \t]*(//.*)?$')
+
+begin_party_definition = re.compile(r'struct TrainerMon (\w+)\[\] =')
+end_party_definition = re.compile(r'^};')
+begin_pokemon_definition = re.compile(r'^ { *$')
+end_pokemon_definition = re.compile(r'^ },? *$')
+level_definition = re.compile(r'\.lvl = (\d+)')
+species_definition = re.compile(r'\.species = SPECIES_(\w+)')
+gender_definition = re.compile(r'\.gender = TRAINER_MON_(\w+)')
+nickname_definition = re.compile(r'\.nickname = COMPOUND_STRING\("([^"]+)"\)')
+item_definition = re.compile(r'\.heldItem = ITEM_(\w+)')
+ball_definition = re.compile(r'\.ball = ITEM_(\w+)')
+ability_definition = re.compile(r'\.ability = ABILITY_(\w+)')
+friendship_definition = re.compile(r'\.friendship = (\d+)')
+shiny_definition = re.compile(r'\.isShiny = (\w+)')
+ivs_definition = re.compile(r'\.iv = TRAINER_PARTY_IVS\(([0-9 ]+),([0-9 ]+),([0-9 ]+),([0-9 ]+),([0-9 ]+),([0-9 ]+)\)')
+evs_definition = re.compile(r'\.ev = TRAINER_PARTY_EVS\(([0-9 ]+),([0-9 ]+),([0-9 ]+),([0-9 ]+),([0-9 ]+),([0-9 ]+)\)')
+moves_definition = re.compile(r'\.moves = \{([^}]+)\}')
+move_definition = re.compile(r'MOVE_(\w+)')
+nature_definition = re.compile(r'\.nature = NATURE_(\w+)')
+
+# NOTE: These are just for aesthetics, the Pokemon would still compile
+# without them.
+species_replacements = {
+ "CHIEN_PAO": "Chien-Pao",
+ "CHI_YU": "Chi-Yu",
+ "HAKAMO_O": "Hakamo-o",
+ "HO_OH": "Ho-Oh",
+ "JANGMO_O": "Jangmo-o",
+ "KOMMO_O": "Kommo-o",
+ "PORYGON_Z": "Porygon-Z",
+ "ROTOM_": "Rotom-",
+ "TING_LU": "Ting-Lu",
+ "TYPE_NULL": "Type: Null",
+ "WO_CHIEN": "Wo-Chien",
+
+ "_ALOLAN": "-Alola",
+ "_AQUA_BREED": "-Aqua",
+ "_BATTLE_BOND": "-Bond",
+ "_BLAZE_BREED": "-Blaze",
+ "_CAP": "",
+ "_CLOAK": "",
+ "_COMBAT_BREED": "-Combat",
+ "_CROWED_SHIELD": "-Crowned",
+ "_CROWED_SWORD": "-Crowned",
+ "_DRIVE": "",
+ "_EAST_SEA": "-East",
+ "_FAMILY_OF_FOUR": "-Four",
+ "_FEMALE": "-F",
+ "_FLOWER": "",
+ "_GALARIAN": "-Galar",
+ "_GIGANTAMAX": "-Gmax",
+ "_HISUIAN": "-Hisui",
+ "_ICE_RIDER": "-Ice",
+ "_NOICE_FACE": "-Noice",
+ "_ORIGIN": "-Origin",
+ "_ORIGINAL_COLOR": "-Original",
+ "_PALDEAN": "-Paldea",
+ "_PLUMAGE": "",
+ "_POKE_BALL": "-Pokeball",
+ "_SHADOW_RIDER": "-Shadow",
+ "_STRIKE_STYLE": "-Style",
+ "_TOTEM": "-Totem",
+ "_ZEN_MODE": "-Zen",
+}
+
+pokemon_attribute_order = ['Level', 'Ability', 'IVs', 'EVs', 'Happiness', 'Shiny', 'Ball']
+
+class Pokemon:
+ def __init__(self):
+ self.nickname = None
+ self.species = None
+ self.gender = None
+ self.item = None
+ self.nature = None
+ self.attributes = {}
+ self.attributes['IVs'] = "0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe"
+ self.moves = []
+
+def convert_parties(in_path, in_h):
+ party_identifier = None
+ party = None
+ pokemon = None
+ parties = {}
+
+ for line_no, line in enumerate(in_h, 1):
+ try:
+ line = line[:-1]
+ if m := begin_party_definition.search(line):
+ if party:
+ raise Exception(f"unexpected start of party")
+ [identifier] = m.groups()
+ party_identifier = identifier
+ party = []
+ elif end_party_definition.search(line):
+ if not party:
+ raise Exception(f"unexpected end of party")
+ parties[party_identifier] = party
+ party = None
+ elif begin_pokemon_definition.search(line):
+ if pokemon:
+ raise Exception(f"unexpected start of Pokemon")
+ pokemon = Pokemon()
+ elif end_pokemon_definition.search(line):
+ if not pokemon:
+ raise Exception(f"unexpected end of Pokemon")
+ else:
+ party.append(pokemon)
+ pokemon = None
+ elif m := level_definition.search(line):
+ [level] = m.groups()
+ pokemon.attributes['Level'] = level
+ elif m := species_definition.search(line):
+ [species_] = m.groups()
+ for match, replacement in species_replacements.items():
+ species_ = species_.replace(match, replacement)
+ pokemon.species = species_.replace("_", " ").title()
+ elif m := gender_definition.search(line):
+ [gender_] = m.groups()
+ if gender_ == 'MALE':
+ pokemon.gender = 'M'
+ elif gender_ == 'FEMALE':
+ pokemon.gender = 'F'
+ else:
+ raise Exception(f"unknown gender: '{gender_}'")
+ elif m := nickname_definition.search(line):
+ [nickname] = m.groups()
+ pokemon.nickname = nickname
+ elif m := item_definition.search(line):
+ [item_] = m.groups()
+ pokemon.item = item_.replace("_", " ").title()
+ elif m := ball_definition.search(line):
+ [ball] = m.groups()
+ pokemon.attributes['Ball'] = ball.replace("_", " ").title()
+ elif m := ability_definition.search(line):
+ [ability] = m.groups()
+ pokemon.attributes['Ability'] = ability.replace("_", " ").title()
+ elif m := friendship_definition.search(line):
+ [friendship] = m.groups()
+ pokemon.attributes['Happiness'] = friendship
+ elif m := shiny_definition.search(line):
+ [shiny] = m.groups()
+ if shiny == 'TRUE':
+ pokemon.attributes['Shiny'] = 'Yes'
+ elif shiny == 'FALSE':
+ pokemon.attributes['Shiny'] = 'No'
+ else:
+ raise Exception(f"unknown isShiny: '{shiny}'")
+ elif m := ivs_definition.search(line):
+ [hp, attack, defense, speed, special_attack, special_defense] = [stat.strip() for stat in m.groups()]
+ stats = {"HP": hp, "Atk": attack, "Def": defense, "SpA": special_attack, "SpD": special_defense, "Spe": speed}
+ pokemon.attributes['IVs'] = ' / '.join(f"{value} {key}" for key, value in stats.items())
+ elif m := evs_definition.search(line):
+ [hp, attack, defense, speed, special_attack, special_defense] = [stat.strip() for stat in m.groups()]
+ stats = {"HP": hp, "Atk": attack, "Def": defense, "SpA": special_attack, "SpD": special_defense, "Spe": speed}
+ pokemon.attributes['EVs'] = ' / '.join(f"{value} {key}" for key, value in stats.items() if value != '0')
+ elif m := moves_definition.search(line):
+ [moves_] = m.groups()
+ pokemon.moves = [move.replace("_", " ").title() for move in move_definition.findall(moves_) if move != "NONE"]
+ elif m := nature_definition.search(line):
+ [nature_] = m.groups()
+ pokemon.nature = nature_.replace("_", " ").title()
+ elif is_blank.search(line):
+ pass
+ else:
+ raise Exception(f"could not parse '{line.strip()}'")
+ except Exception as e:
+ print(f"{in_path}:{line_no}: {e}")
+ return parties
+
+is_trainer_skip = re.compile(r'(const struct Trainer gTrainers\[\] = \{)|(^ \{$)|(\.partySize =)|(\.party = NULL)|(\.mugshotEnabled = TRUE)|(\};)')
+
+begin_trainer_definition = re.compile(r' \[(TRAINER_\w+)\] =')
+end_trainer_definition = re.compile(r' }')
+trainer_class_definition = re.compile(r'\.trainerClass = TRAINER_CLASS_(\w+)')
+encounter_music_gender_definition = re.compile(r'\.encounterMusic_gender = (F_TRAINER_FEMALE \| )?TRAINER_ENCOUNTER_MUSIC_(\w+)')
+trainer_pic_definition = re.compile(r'\.trainerPic = TRAINER_PIC_(\w+)')
+trainer_name_definition = re.compile(r'\.trainerName = _\("([^"]*)"\)')
+trainer_items_definition = re.compile(r'\.items = \{([^}]*)\}')
+trainer_item_definition = re.compile(r'ITEM_(\w+)')
+trainer_double_battle_definition = re.compile(r'\.doubleBattle = (\w+)')
+trainer_ai_flags_definition = re.compile(r'\.aiFlags = (.*)')
+trainer_ai_flag_definition = re.compile(r'AI_FLAG_(\w+)')
+trainer_party_definition = re.compile(r'\.party = TRAINER_PARTY\((\w+)\)')
+trainer_mugshot_definition = re.compile(r'\.mugshotColor = MUGSHOT_COLOR_(\w+)')
+trainer_starting_status_definition = re.compile(r'\.startingStatus = STARTING_STATUS_(\w+)')
+
+class_fixups = {
+ "Rs": "RS",
+}
+
+pic_fixups = {
+ "Rs": "RS",
+}
+
+class Trainer:
+ def __init__(self, id_):
+ self.id = id_
+ self.class_ = None
+ self.encounter_music = None
+ self.gender = None
+ self.pic = None
+ self.name = None
+ self.items = []
+ self.double_battle = None
+ self.ai_flags = None
+ self.mugshot = None
+ self.starting_status = None
+ self.party = None
+
+def convert_trainers(in_path, in_h, parties, out_party):
+ newlines = 0
+ trainer = None
+ for line_no, line in enumerate(in_h, 1):
+ try:
+ line = line[:-1]
+ if m := begin_trainer_definition.search(line):
+ if trainer:
+ raise Exception(f"unexpected start of trainer")
+ [id_] = m.groups()
+ trainer = Trainer(id_)
+ elif m := trainer_class_definition.search(line):
+ [class_] = m.groups()
+ class_ = class_.replace("_", " ").title()
+ for match, replacement in class_fixups.items():
+ class_ = class_.replace(match, replacement)
+ trainer.class_ = class_
+ elif m := encounter_music_gender_definition.search(line):
+ [is_female, music] = m.groups()
+ trainer.gender = 'Female' if is_female else 'Male'
+ trainer.encounter_music = music.replace("_", " ").title()
+ elif m := trainer_pic_definition.search(line):
+ [pic] = m.groups()
+ pic = pic.replace("_", " ").title()
+ for match, replacement in pic_fixups.items():
+ pic = pic.replace(match, replacement)
+ trainer.pic = pic
+ elif m := trainer_name_definition.search(line):
+ [name] = m.groups()
+ trainer.name = name
+ elif m := trainer_items_definition.search(line):
+ [items] = m.groups()
+ trainer.items = " / ".join(item.replace("_", " ").title() for item in trainer_item_definition.findall(items) if item != "NONE")
+ elif m := trainer_double_battle_definition.search(line):
+ [double_battle] = m.groups()
+ if double_battle == 'TRUE':
+ trainer.double_battle = "Yes"
+ elif double_battle == 'FALSE':
+ trainer.double_battle = "No"
+ else:
+ raise Exception(f"unknown doubleBattle: '{double_battle}'")
+ elif m := trainer_ai_flags_definition.search(line):
+ [ai_flags] = m.groups()
+ trainer.ai_flags = " / ".join(ai_flag.replace("_", " ").title() for ai_flag in trainer_ai_flag_definition.findall(ai_flags))
+ elif m := trainer_mugshot_definition.search(line):
+ [color] = m.groups()
+ trainer.mugshot = color.title()
+ elif m := trainer_starting_status_definition.search(line):
+ [starting_status] = m.groups()
+ trainer.starting_status = starting_status.replace("_", " ").title()
+ elif m := trainer_party_definition.search(line):
+ [party] = m.groups()
+ trainer.party = parties[party]
+ elif end_trainer_definition.search(line):
+ if not trainer:
+ raise Exception(f"unexpected end of trainer")
+ while newlines > 0:
+ out_party.write(f"\n")
+ newlines -= 1
+ newlines = 1
+ out_party.write(f"=== {trainer.id} ===\n")
+ out_party.write(f"Name: {trainer.name}\n")
+ out_party.write(f"Class: {trainer.class_}\n")
+ out_party.write(f"Pic: {trainer.pic}\n")
+ out_party.write(f"Gender: {trainer.gender}\n")
+ out_party.write(f"Music: {trainer.encounter_music}\n")
+ if trainer.items:
+ out_party.write(f"Items: {trainer.items}\n")
+ out_party.write(f"Double Battle: {trainer.double_battle}\n")
+ if trainer.ai_flags:
+ out_party.write(f"AI: {trainer.ai_flags}\n")
+ if trainer.mugshot:
+ out_party.write(f"Mugshot: {trainer.mugshot}\n")
+ if trainer.starting_status:
+ out_party.write(f"Starting Status: {trainer.starting_status}\n")
+ if trainer.party:
+ for i, pokemon in enumerate(trainer.party):
+ out_party.write(f"\n")
+ if pokemon.nickname:
+ out_party.write(f"{pokemon.nickname} ({pokemon.species})")
+ else:
+ out_party.write(f"{pokemon.species}")
+ if pokemon.gender:
+ out_party.write(f" ({pokemon.gender})")
+ if pokemon.item and pokemon.item != 'None':
+ out_party.write(f" @ {pokemon.item}")
+ out_party.write(f"\n")
+ if pokemon.nature:
+ out_party.write(f"{pokemon.nature} Nature\n")
+ for key in pokemon_attribute_order:
+ if key in pokemon.attributes:
+ out_party.write(f"{key}: {pokemon.attributes[key]}\n")
+ for move in pokemon.moves:
+ out_party.write(f"- {move}\n")
+ trainer = None
+ elif is_blank.search(line) or is_trainer_skip.search(line):
+ pass
+ else:
+ raise Exception(f"could not parse '{line.strip()}'")
+ except Exception as e:
+ print(f"{in_path}:{line_no}: {e}")
+
+if __name__ == '__main__':
+ try:
+ [argv0, trainers_in_path, parties_in_path, out_path] = sys.argv
+ except:
+ print(f"usage: python3 {sys.argv[0]} ")
+ else:
+ with open(trainers_in_path, "r") as trainers_in_h, open(parties_in_path, "r") as parties_in_h, open(out_path, "w") as out_party:
+ parties = convert_parties(parties_in_path, parties_in_h)
+ trainers = convert_trainers(trainers_in_path, trainers_in_h, parties, out_party)
diff --git a/migration_scripts/1.9/egg_move_refactor.py b/migration_scripts/1.9/egg_move_refactor.py
new file mode 100644
index 000000000000..498fa5da61e7
--- /dev/null
+++ b/migration_scripts/1.9/egg_move_refactor.py
@@ -0,0 +1,51 @@
+import re
+import glob
+
+eggMoveSpecies = []
+
+exceptions = [ # the following exceptions are hardcoded to streamline the process. you may need to manually check what happens in case you have added forms that work similar to these below
+ ["ShellosWestSea", "Shellos"],
+ ["OricorioBaile", "Oricorio"]
+]
+
+# convert egg_moves.h to the new format
+with open("src/data/pokemon/egg_moves.h", "r") as f:
+ data = f.read()
+
+data = re.sub(r"#define(.|\n)*const u16 gEggMoves\[\] = {", "static const u16 sNoneEggMoveLearnset[] = {\n MOVE_UNAVAILABLE,\n};\n", data) # remove and replace header
+data = re.sub(r"\n EGG_MOVES_TERMINATOR\n};\n\n", "", data) # remove footer
+
+for mon in re.findall(r"egg_moves\((.*),", data):
+ monname = re.sub(r"_", " ", mon).title().replace(" ", "")
+ for x in exceptions:
+ if monname == x[0]:
+ monname = x[1]
+ # add it to the list for later
+ eggMoveSpecies.append(monname)
+ # regex the egg_moves.h file
+ data = re.sub(r" egg_moves\(" + mon + r",", "static const u16 s%sEggMoveLearnset[] = {" % monname, data)
+
+data = re.sub(r"\),\n", ",\n MOVE_UNAVAILABLE,\n};\n", data) # add terminator to each old macro
+
+data = re.sub(r" MOVE_", " MOVE_", data) # fix indentation
+
+with open("src/data/pokemon/egg_moves.h", "w") as f:
+ f.write(data)
+
+# update gBaseStats
+
+for file in glob.glob('./src/data/pokemon/species_info/gen_*_families.h'):
+ with open(file, "r") as f:
+ data = f.read()
+
+ # go through all Pokemon with teachable learnsets that are also in the list, then assign egg moves to them
+ for mon in eggMoveSpecies:
+ # first do the plain replacements outside of macros
+ data = re.sub(r"\.teachableLearnset = s" + mon + r"sTeachableLearnset,\n", ".teachableLearnset = s%sTeachableLearnset,\n .eggMoveLearnset = s%sEggMoveLearnset,\n" % (mon, mon), data)
+ # check for macros (since they require \ at the end of the line and do those manually)
+ macrocheck = re.findall(r"\.teachableLearnset = s" + mon + r"TeachableLearnset,( *)\\\\", data)
+ if len(macrocheck) > 0:
+ data = re.sub(r"\.teachableLearnset = s" + mon + r"TeachableLearnset," + macrocheck[0] + r"\\\\", ".teachableLearnset = s%sTeachableLearnset,%s\\\\\n .eggMoveLearnset = s%sEggMoveLearnset,%s\\\\" % (mon, macrocheck[0], mon, " " * (len(macrocheck[0]) + 4)), data)
+
+ with open(file, "w") as f:
+ f.write(data)
diff --git a/migration_scripts/README.md b/migration_scripts/README.md
index 5845348cdfa1..5ae26c1c0afc 100644
--- a/migration_scripts/README.md
+++ b/migration_scripts/README.md
@@ -17,9 +17,293 @@ python3 migration_scripts/*.py ; #run the migration script
`*` will need to be replaced with the name of the appropriate script.
+## 1.8.x to 1.9.x+
+
+### Battle Anim Moves
+
+* Filepath [`migration_scripts/1.9/battle_anim_moves_refactor.py`](1.9/battle_anim_moves_refactor.py)
+* Introduced in [Refactor move animations #4683](https://github.com/rh-hideout/pokeemerald-expansion/pull/4683)
+
+Refactors all battle animation move scripts, removing the list from `data/battle_anim_scripts.s` and linking them to the moves in `gMovesInfo` for easier maintaining. Only necessary if new moves have been added.
+
+#### [data/battle_anim_scripts.h](../data/battle_anim_scripts.s)
+```diff
+- .4byte Move_POUND
+```
+
+#### [include/battle_anim_scripts.h](../include/battle_anim_scripts.h)
+```diff
++ extern const u8 Move_POUND[];
+```
+
+#### [src/data/moves_info.h](../src/data/moves_info.h)
+```diff
+ [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,
+ .makesContact = TRUE,
+ .ignoresKingsRock = B_UPDATED_MOVE_FLAGS == GEN_4,
+ .contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING,
+ .contestCategory = CONTEST_CATEGORY_TOUGH,
+ .contestComboStarterId = COMBO_STARTER_POUND,
+- .contestComboMoves = {0}
++ .contestComboMoves = {0},
++ .battleAnimScript = Move_POUND,
+ },
+```
+
+### Item Icons
+
+* Filepath [`migration_scripts/1.9/convert_item_icons.py`](1.9/convert_item_icons.py)
+* Introduced in [Get rid of gItemIconTable #4579](https://github.com/rh-hideout/pokeemerald-expansion/pull/4579)
+
+Moves all information from `gItemIconTable` to `gItemsInfo`.
+
+#### [src/data/item_icon_table.h](..src/data/item_icon_table.h)
+```diff
+- [ITEM_POKE_BALL] = {gItemIcon_PokeBall, gItemIconPalette_PokeBall},
+```
+
+#### [src/data/items.h](..src/data/items.h)
+```diff
+ [ITEM_POKE_BALL] =
+ {
+ .name = _("Poké Ball"),
+ .price = 200,
+ .description = COMPOUND_STRING(
+ "A tool used for\n"
+ "catching wild\n"
+ "Pokémon."),
+ .pocket = POCKET_POKE_BALLS,
+ .type = ITEM_USE_BAG_MENU,
+ .battleUsage = EFFECT_ITEM_THROW_BALL,
+ .secondaryId = ITEM_POKE_BALL - FIRST_BALL,
++ .iconSprite = gItemIcon_PokeBall,
++ .iconPalette = gItemIconPalette_PokeBall,
+ },
+```
+
+### Partner & Trainer Parties
+
+* Filepaths [`migration_scripts/1.9/convert_trainer_parties.py`](1.9/convert_trainer_parties.py) and [`migration_scripts/1.9/convert_partner_parties.py`](1.9/convert_trainer_parties.py)
+* Introduced in [Competitive-formatted parties #3545](https://github.com/rh-hideout/pokeemerald-expansion/pull/3545) and [Make trainerproc compatible with partners #4421](https://github.com/rh-hideout/pokeemerald-expansion/pull/4421)
+
+Converts trainer data (for `convert_trainer_parties.py`) and partner data (for `convert_partner_data.py`) to the new `.party` format. Not necessary if `COMPETITIVE_PARTY_SYNTAX` is turned off.
+
+#### [src/data/trainer_parties.h](..src/data/trainer_parties.h)
+```diff
+-static const struct TrainerMon sParty_Sawyer1[] = {
+- {
+- .lvl = 21,
+- .species = SPECIES_GEODUDE,
+- }
+-};
+```
+
+#### [src/data/trainers.party](..src/data/trainers.party)
+```diff
++=== TRAINER_SAWYER_1 ===
++Name: SAWYER
++Class: Hiker
++Pic: Hiker
++Gender: Male
++Music: Hiker
++Double Battle: No
++AI: Check Bad Move / Try To Faint / Check Viability
++
++Geodude
++Level: 21
++IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+```
+
+#### [src/data/partner_parties.h](..src/data/partner_parties.h)
+```diff
+-static const struct TrainerMon sParty_StevenPartner[] = {
+- {
+- .species = SPECIES_METANG,
+- .lvl = 42,
+- .nature = NATURE_BRAVE,
+- .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31),
+- .ev = TRAINER_PARTY_EVS(0, 252, 252, 0, 6, 0),
+- .moves = {MOVE_LIGHT_SCREEN, MOVE_PSYCHIC, MOVE_REFLECT, MOVE_METAL_CLAW},
+- },
+- {
+- .species = SPECIES_SKARMORY,
+- .lvl = 43,
+- .nature = NATURE_IMPISH,
+- .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31),
+- .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 6, 252),
+- .moves = {MOVE_TOXIC, MOVE_AERIAL_ACE, MOVE_PROTECT, MOVE_STEEL_WING},
+- },
+- {
+- .species = SPECIES_AGGRON,
+- .lvl = 44,
+- .nature = NATURE_ADAMANT,
+- .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31),
+- .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 6),
+- .moves = {MOVE_THUNDER, MOVE_PROTECT, MOVE_SOLAR_BEAM, MOVE_DRAGON_CLAW},
+- }
+-};
+```
+
+#### [src/data/battle_partners.party](..src/data/battle_partners.party)
+```diff
++=== PARTNER_STEVEN ===
++Name: STEVEN
++Class: Rival
++Pic: Steven
++Gender: Male
++Music: Male
++
++Metang
++Brave Nature
++Level: 42
++IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
++EVs: 252 Atk / 252 Def / 6 SpA
++- Light Screen
++- Psychic
++- Reflect
++- Metal Claw
++
++Skarmory
++Impish Nature
++Level: 43
++IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
++EVs: 252 HP / 6 SpA / 252 SpD
++- Toxic
++- Aerial Ace
++- Protect
++- Steel Wing
++
++Aggron
++Adamant Nature
++Level: 44
++IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
++EVs: 252 Atk / 252 SpA / 6 SpD
++- Thunder
++- Protect
++- Solar Beam
++- Dragon Claw
+```
+
+### Egg Move Refactor
+
+* Filepaths [`migration_scripts/1.9/egg_move_refactor.py`](1.9/egg_move_refactor.py)
+* Introduced in [Egg Move Refactor #4534](https://github.com/rh-hideout/pokeemerald-expansion/pull/4534)
+
+Updates egg moves to the refactored format. Only necessary if new species have been added or if egg moves of an existing species was altered.
+
+#### [src/data/pokemon/egg_moves.h](..src/data/pokemon/egg_moves.h)
+```diff
+- egg_moves(BULBASAUR,
+- MOVE_SKULL_BASH,
+- MOVE_CHARM,
+- MOVE_PETAL_DANCE,
+- MOVE_MAGICAL_LEAF,
+- MOVE_GRASS_WHISTLE,
+- MOVE_CURSE,
+- MOVE_INGRAIN,
+- MOVE_NATURE_POWER,
+- MOVE_AMNESIA,
+- MOVE_LEAF_STORM,
+- MOVE_POWER_WHIP,
+- MOVE_SLUDGE,
+- MOVE_ENDURE,
+- MOVE_GIGA_DRAIN,
+- MOVE_GRASSY_TERRAIN),
++static const u16 sBulbasaurEggMoveLearnset[] = {
++ MOVE_SKULL_BASH,
++ MOVE_CHARM,
++ MOVE_PETAL_DANCE,
++ MOVE_MAGICAL_LEAF,
++ MOVE_GRASS_WHISTLE,
++ MOVE_CURSE,
++ MOVE_INGRAIN,
++ MOVE_NATURE_POWER,
++ MOVE_AMNESIA,
++ MOVE_LEAF_STORM,
++ MOVE_POWER_WHIP,
++ MOVE_SLUDGE,
++ MOVE_ENDURE,
++ MOVE_GIGA_DRAIN,
++ MOVE_GRASSY_TERRAIN,
++ MOVE_UNAVAILABLE,
+};
+```
+
+#### [src/data/pokemon/species_info/gen_1_families.h](..src/data/pokemon/species_info/gen_1_families.h)
+```diff
+ [SPECIES_BULBASAUR] =
+ {
+ .baseHP = 45,
+ .baseAttack = 49,
+ .baseDefense = 49,
+ .baseSpeed = 45,
+ .baseSpAttack = 65,
+ .baseSpDefense = 65,
+ .types = MON_TYPES(TYPE_GRASS, TYPE_POISON),
+ .catchRate = 45,
+ .expYield = 64,
+ .evYield_SpAttack = 1,
+ .genderRatio = PERCENT_FEMALE(12.5),
+ .eggCycles = 20,
+ .friendship = STANDARD_FRIENDSHIP,
+ .growthRate = GROWTH_MEDIUM_SLOW,
+ .eggGroups = MON_EGG_GROUPS(EGG_GROUP_MONSTER, EGG_GROUP_GRASS),
+ .abilities = { ABILITY_OVERGROW, ABILITY_NONE, ABILITY_CHLOROPHYLL },
+ .bodyColor = BODY_COLOR_GREEN,
+ .speciesName = _("Bulbasaur"),
+ .cryId = CRY_BULBASAUR,
+ .natDexNum = NATIONAL_DEX_BULBASAUR,
+ .categoryName = _("Seed"),
+ .height = 7,
+ .weight = 69,
+ .description = COMPOUND_STRING(
+ "Bulbasaur can be seen napping in bright\n"
+ "sunlight. There is a seed on its back.\n"
+ "By soaking up the sun's rays, the seed\n"
+ "grows progressively larger."),
+ .pokemonScale = 356,
+ .pokemonOffset = 17,
+ .trainerScale = 256,
+ .trainerOffset = 0,
+ .frontPic = gMonFrontPic_Bulbasaur,
+ .frontPicSize = MON_COORDS_SIZE(40, 40),
+ .frontPicYOffset = 13,
+ .frontAnimFrames = sAnims_Bulbasaur,
+ .frontAnimId = ANIM_V_JUMPS_H_JUMPS,
+ .backPic = gMonBackPic_Bulbasaur,
+ .backPicSize = MON_COORDS_SIZE(56, 40),
+ .backPicYOffset = 13,
+ .backAnimId = BACK_ANIM_DIP_RIGHT_SIDE,
+ .palette = gMonPalette_Bulbasaur,
+ .shinyPalette = gMonShinyPalette_Bulbasaur,
+ .iconSprite = gMonIcon_Bulbasaur,
+ .iconPalIndex = 4,
+ FOOTPRINT(Bulbasaur)
+ .levelUpLearnset = sBulbasaurLevelUpLearnset,
+ .teachableLearnset = sBulbasaurTeachableLearnset,
++ .eggMoveLearnset = sBulbasaurEggMoveLearnset,
+ .evolutions = EVOLUTION({EVO_LEVEL, 16, SPECIES_IVYSAUR}),
+ },
+```
+
+## 1.7.x to 1.8.x+
+
### Item Balls
-* Filepath [`migration_scripts/item_ball_refactor.py`](item_ball_refactor.py)
+* Filepath [`migration_scripts/1.8/item_ball_refactor.py`](1.8/item_ball_refactor.py)
* Introduced in [Item Ball refactor / Pluralize item names for giveitem and finditem #3942](https://github.com/rh-hideout/pokeemerald-expansion/pull/3942)
Modifies all item ball scripts defined using to original Game Freak method to the new refactored method.
@@ -52,3 +336,24 @@ Modifies all item ball scripts defined using to original Game Freak method to th
"flag": "FLAG_ITEM_ROUTE_102_POTION"
},
```
+
+### Facility Mons
+
+* Filepath [`migration_scripts/1.9/battle_frontier_convert_parties.py`](1.8/battle_frontier_convert_parties.py)
+* Introduced in [Adds battle frontier conversion script #5040](https://github.com/rh-hideout/pokeemerald-expansion/pull/5040)
+* Original refactor in [Customizable FrontierMon Sets #4313](https://github.com/rh-hideout/pokeemerald-expansion/pull/4313)
+
+Replaces itemTableId with heldItem and evSpread with ev.
+
+#### [src/data/battle_frontier/battle_frontier_mons.h](../src/data/battle_frontier/battle_frontier_mons.h)
+```diff
+ [FRONTIER_MON_SUNKERN] = {
+ .species = SPECIES_SUNKERN,
+ .moves = {MOVE_MEGA_DRAIN, MOVE_HELPING_HAND, MOVE_SUNNY_DAY, MOVE_LIGHT_SCREEN},
+- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
++ .heldItem = ITEM_LAX_INCENSE,
+- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
++ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
+ .nature = NATURE_RELAXED
+ },
+```
\ No newline at end of file
diff --git a/sound/cry_tables.inc b/sound/cry_tables.inc
index 13cb51f53c6b..a6533157ff49 100644
--- a/sound/cry_tables.inc
+++ b/sound/cry_tables.inc
@@ -1,5 +1,6 @@
.align 2
gCryTable::
+.if P_CRIES_ENABLED == TRUE
.if P_FAMILY_BULBASAUR == TRUE
cry Cry_Bulbasaur
cry Cry_Ivysaur
@@ -2423,9 +2424,11 @@ gCryTable::
.if P_FAMILY_PECHARUNT == TRUE
cry Cry_Pecharunt
.endif @ P_FAMILY_PECHARUNT
+.endif @ P_CRIES_ENABLED
.align 2
gCryTable_Reverse::
+.if P_CRIES_ENABLED == TRUE
.if P_FAMILY_BULBASAUR == TRUE
cry_reverse Cry_Bulbasaur
cry_reverse Cry_Ivysaur
@@ -4849,3 +4852,4 @@ gCryTable_Reverse::
.if P_FAMILY_PECHARUNT == TRUE
cry_reverse Cry_Pecharunt
.endif @ P_FAMILY_PECHARUNT
+.endif @ P_CRIES_ENABLED
diff --git a/sound/direct_sound_data.inc b/sound/direct_sound_data.inc
index cfe5a3b9bb2d..b1cf174150ae 100644
--- a/sound/direct_sound_data.inc
+++ b/sound/direct_sound_data.inc
@@ -386,6 +386,7 @@ DirectSoundWaveData_unknown_16::
DirectSoundWaveData_unknown_17::
.incbin "sound/direct_sound_samples/unknown_17.bin"
+.if P_CRIES_ENABLED == TRUE
.if P_FAMILY_BULBASAUR == TRUE
.align 2
Cry_Bulbasaur::
@@ -6153,6 +6154,7 @@ Cry_Terapagos::
Cry_Pecharunt::
.incbin "sound/direct_sound_samples/cries/pecharunt.bin"
.endif @ P_FAMILY_PECHARUNT
+.endif @ P_CRIES_ENABLED
.align 2
DirectSoundWaveData_register_noise::
diff --git a/spritesheet_rules.mk b/spritesheet_rules.mk
index c89d6e81cded..c10c9081f4b0 100644
--- a/spritesheet_rules.mk
+++ b/spritesheet_rules.mk
@@ -1,5 +1,7 @@
+POKEMONGFXDIR := graphics/pokemon
OBJEVENTGFXDIR := graphics/object_events/pics
FLDEFFGFXDIR := graphics/field_effects/pics
+MISCGFXDIR := graphics/misc
$(OBJEVENTGFXDIR)/people/brendan/walking.4bpp: %.4bpp: %.png
$(GFX) $< $@ -mwidth 2 -mheight 4
@@ -405,70 +407,71 @@ $(OBJEVENTGFXDIR)/people/youngster.4bpp: %.4bpp: %.png
-$(OBJEVENTGFXDIR)/pokemon/azumarill.4bpp: %.4bpp: %.png
+$(OBJEVENTGFXDIR)/pokemon_old/azumarill.4bpp: %.4bpp: %.png
$(GFX) $< $@ -mwidth 2 -mheight 2
-$(OBJEVENTGFXDIR)/pokemon/azurill.4bpp: %.4bpp: %.png
+$(OBJEVENTGFXDIR)/pokemon_old/azurill.4bpp: %.4bpp: %.png
$(GFX) $< $@ -mwidth 2 -mheight 2
-$(OBJEVENTGFXDIR)/pokemon/deoxys.4bpp: %.4bpp: %.png
+$(OBJEVENTGFXDIR)/pokemon_old/deoxys.4bpp: %.4bpp: %.png
$(GFX) $< $@ -mwidth 4 -mheight 4
-$(OBJEVENTGFXDIR)/pokemon/dusclops.4bpp: %.4bpp: %.png
+$(OBJEVENTGFXDIR)/pokemon_old/dusclops.4bpp: %.4bpp: %.png
$(GFX) $< $@ -mwidth 2 -mheight 4
-$(OBJEVENTGFXDIR)/pokemon/enemy_zigzagoon.4bpp: %.4bpp: %.png
+$(OBJEVENTGFXDIR)/pokemon_old/enemy_zigzagoon.4bpp: %.4bpp: %.png
$(GFX) $< $@ -mwidth 4 -mheight 4
-$(OBJEVENTGFXDIR)/pokemon/groudon.4bpp: %.4bpp: %.png
+$(OBJEVENTGFXDIR)/pokemon_old/groudon.4bpp: %.4bpp: %.png
$(GFX) $< $@ -mwidth 4 -mheight 4
-$(OBJEVENTGFXDIR)/pokemon/ho_oh.4bpp: %.4bpp: %.png
+$(OBJEVENTGFXDIR)/pokemon_old/ho_oh.4bpp: %.4bpp: %.png
$(GFX) $< $@ -mwidth 4 -mheight 4
-$(OBJEVENTGFXDIR)/pokemon/kecleon.4bpp: %.4bpp: %.png
+$(OBJEVENTGFXDIR)/pokemon_old/kecleon.4bpp: %.4bpp: %.png
$(GFX) $< $@ -mwidth 2 -mheight 2
-$(OBJEVENTGFXDIR)/pokemon/kirlia.4bpp: %.4bpp: %.png
+$(OBJEVENTGFXDIR)/pokemon_old/kirlia.4bpp: %.4bpp: %.png
$(GFX) $< $@ -mwidth 2 -mheight 4
-$(OBJEVENTGFXDIR)/pokemon/kyogre.4bpp: %.4bpp: %.png
+$(OBJEVENTGFXDIR)/pokemon_old/kyogre.4bpp: %.4bpp: %.png
$(GFX) $< $@ -mwidth 4 -mheight 4
-$(OBJEVENTGFXDIR)/pokemon/latias_latios.4bpp: %.4bpp: %.png
+$(OBJEVENTGFXDIR)/pokemon_old/latias_latios.4bpp: %.4bpp: %.png
$(GFX) $< $@ -mwidth 4 -mheight 4
-$(OBJEVENTGFXDIR)/pokemon/lugia.4bpp: %.4bpp: %.png
+$(OBJEVENTGFXDIR)/pokemon_old/lugia.4bpp: %.4bpp: %.png
$(GFX) $< $@ -mwidth 4 -mheight 4
-$(OBJEVENTGFXDIR)/pokemon/mew.4bpp: %.4bpp: %.png
+$(OBJEVENTGFXDIR)/pokemon_old/mew.4bpp: %.4bpp: %.png
$(GFX) $< $@ -mwidth 2 -mheight 4
-$(OBJEVENTGFXDIR)/pokemon/pikachu.4bpp: %.4bpp: %.png
+$(OBJEVENTGFXDIR)/pokemon_old/pikachu.4bpp: %.4bpp: %.png
$(GFX) $< $@ -mwidth 2 -mheight 2
-$(OBJEVENTGFXDIR)/pokemon/poochyena.4bpp: %.4bpp: %.png
+$(OBJEVENTGFXDIR)/pokemon_old/poochyena.4bpp: %.4bpp: %.png
$(GFX) $< $@ -mwidth 4 -mheight 4
-$(OBJEVENTGFXDIR)/pokemon/rayquaza.4bpp: %.4bpp: %.png
+$(OBJEVENTGFXDIR)/pokemon_old/rayquaza_cutscene.4bpp: %.4bpp: %.png
$(GFX) $< $@ -mwidth 8 -mheight 8
-$(OBJEVENTGFXDIR)/pokemon/skitty.4bpp: %.4bpp: %.png
+$(OBJEVENTGFXDIR)/pokemon_old/skitty.4bpp: %.4bpp: %.png
$(GFX) $< $@ -mwidth 2 -mheight 2
-$(OBJEVENTGFXDIR)/pokemon/sudowoodo.4bpp: %.4bpp: %.png
+$(OBJEVENTGFXDIR)/pokemon_old/sudowoodo_tree.4bpp: %.4bpp: %.png
$(GFX) $< $@ -mwidth 2 -mheight 4
-$(OBJEVENTGFXDIR)/pokemon/vigoroth.4bpp: %.4bpp: %.png
+$(OBJEVENTGFXDIR)/pokemon_old/vigoroth_mover.4bpp: %.4bpp: %.png
$(GFX) $< $@ -mwidth 4 -mheight 4
-$(OBJEVENTGFXDIR)/pokemon/wingull.4bpp: %.4bpp: %.png
+$(OBJEVENTGFXDIR)/pokemon_old/wingull.4bpp: %.4bpp: %.png
$(GFX) $< $@ -mwidth 2 -mheight 2
-$(OBJEVENTGFXDIR)/pokemon/zigzagoon.4bpp: %.4bpp: %.png
+$(OBJEVENTGFXDIR)/pokemon_old/zigzagoon.4bpp: %.4bpp: %.png
$(GFX) $< $@ -mwidth 2 -mheight 2
-
+$(OBJEVENTGFXDIR)/misc/ball_poke.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 2 -mheight 4
$(OBJEVENTGFXDIR)/berry_trees/aguav.4bpp: %.4bpp: %.png
$(GFX) $< $@ -mwidth 2 -mheight 4
@@ -641,6 +644,16 @@ $(FLDEFFGFXDIR)/jump_tall_grass.4bpp: %.4bpp: %.png
$(FLDEFFGFXDIR)/bike_tire_tracks.4bpp: %.4bpp: %.png
$(GFX) $< $@ -mwidth 2 -mheight 2
+
+$(FLDEFFGFXDIR)/slither_tracks.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 2 -mheight 2
+
+$(FLDEFFGFXDIR)/bug_tracks.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 2 -mheight 2
+
+$(FLDEFFGFXDIR)/spot_tracks.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 2 -mheight 2
+
$(FLDEFFGFXDIR)/bubbles.4bpp: %.4bpp: %.png
$(GFX) $< $@ -mwidth 2 -mheight 4
@@ -719,5 +732,3275 @@ $(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
+
+$(POKEMONGFXDIR)/bulbasaur/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/ivysaur/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/venusaur/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/charmander/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/charmeleon/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/charizard/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/squirtle/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/wartortle/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/blastoise/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/caterpie/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/metapod/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/butterfree/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/weedle/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/kakuna/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/beedrill/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/pidgey/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/pidgeotto/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/pidgeot/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/rattata/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/raticate/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/spearow/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/fearow/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/ekans/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/arbok/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/pikachu/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/raichu/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/sandshrew/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/sandslash/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/nidoran_f/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/nidorina/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/nidoqueen/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/nidoran_m/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/nidorino/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/nidoking/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/clefairy/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/clefable/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/vulpix/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/ninetales/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/jigglypuff/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/wigglytuff/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/zubat/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/golbat/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/oddish/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/gloom/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/vileplume/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/paras/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/parasect/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/venonat/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/venomoth/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/diglett/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/dugtrio/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/meowth/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/persian/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/psyduck/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/golduck/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/mankey/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/primeape/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/growlithe/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/arcanine/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/poliwag/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/poliwhirl/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/poliwrath/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/abra/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/kadabra/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/alakazam/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/machop/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/machoke/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/machamp/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/bellsprout/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/weepinbell/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/victreebel/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/tentacool/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/tentacruel/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/geodude/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/graveler/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/golem/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/ponyta/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/rapidash/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/slowpoke/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/slowbro/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/magnemite/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/magneton/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/farfetchd/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/doduo/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/dodrio/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/seel/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/dewgong/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/grimer/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/muk/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/shellder/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/cloyster/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/gastly/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/haunter/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/gengar/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/onix/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/drowzee/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/hypno/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/krabby/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/kingler/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/voltorb/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/electrode/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/exeggcute/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/exeggutor/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/cubone/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/marowak/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/hitmonlee/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/hitmonchan/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/lickitung/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/koffing/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/weezing/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/rhyhorn/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/rhydon/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/chansey/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/tangela/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/kangaskhan/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/horsea/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/seadra/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/goldeen/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/seaking/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/staryu/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/starmie/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/mr_mime/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/scyther/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/jynx/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/electabuzz/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/magmar/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/pinsir/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/tauros/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/magikarp/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/gyarados/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/lapras/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/ditto/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/eevee/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/vaporeon/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/jolteon/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/flareon/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/porygon/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/omanyte/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/omastar/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/kabuto/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/kabutops/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/aerodactyl/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/snorlax/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/articuno/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/zapdos/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/moltres/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/dratini/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/dragonair/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/dragonite/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/mewtwo/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/mew/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/chikorita/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/bayleef/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/meganium/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/cyndaquil/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/quilava/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/typhlosion/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/totodile/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/croconaw/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/feraligatr/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/sentret/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/furret/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/hoothoot/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/noctowl/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/ledyba/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/ledian/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/spinarak/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/ariados/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/crobat/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/chinchou/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/lanturn/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/pichu/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/cleffa/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/igglybuff/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/togepi/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/togetic/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/natu/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/xatu/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/mareep/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/flaaffy/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/ampharos/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/bellossom/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/marill/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/azumarill/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/sudowoodo/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/politoed/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/hoppip/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/skiploom/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/jumpluff/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/aipom/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/sunkern/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/sunflora/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/yanma/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/wooper/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/quagsire/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/espeon/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/umbreon/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/murkrow/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/slowking/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/misdreavus/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/unown/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/unown/b/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/unown/c/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/unown/d/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/unown/e/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/unown/f/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/unown/g/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/unown/h/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/unown/i/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/unown/j/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/unown/k/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/unown/l/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/unown/m/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/unown/n/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/unown/o/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/unown/p/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/unown/q/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/unown/r/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/unown/s/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/unown/t/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/unown/u/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/unown/v/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/unown/w/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/unown/x/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/unown/y/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/unown/z/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/unown/exclamation_mark/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/unown/question_mark/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/wobbuffet/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/girafarig/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/pineco/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/forretress/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/dunsparce/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/gligar/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/steelix/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 8 -mheight 8
+
+$(POKEMONGFXDIR)/snubbull/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/granbull/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/qwilfish/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/scizor/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/shuckle/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/heracross/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/sneasel/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/teddiursa/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/ursaring/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/slugma/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/magcargo/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/swinub/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/piloswine/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/corsola/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/remoraid/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/octillery/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/delibird/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/mantine/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/skarmory/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/houndour/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/houndoom/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/kingdra/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/phanpy/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/donphan/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/porygon2/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/stantler/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/smeargle/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/tyrogue/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/hitmontop/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/smoochum/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/elekid/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/magby/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/miltank/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/blissey/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/raikou/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/entei/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/suicune/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/larvitar/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/pupitar/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/tyranitar/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/lugia/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 8 -mheight 8
+
+$(POKEMONGFXDIR)/ho_oh/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 8 -mheight 8
+
+$(POKEMONGFXDIR)/celebi/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/treecko/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/grovyle/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/sceptile/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/torchic/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/combusken/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/blaziken/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/mudkip/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/marshtomp/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/swampert/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/poochyena/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/mightyena/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/zigzagoon/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/linoone/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/wurmple/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/silcoon/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/beautifly/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/cascoon/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/dustox/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/lotad/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/lombre/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/ludicolo/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/seedot/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/nuzleaf/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/shiftry/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/taillow/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/swellow/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/wingull/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/pelipper/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/ralts/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/kirlia/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/gardevoir/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/surskit/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/masquerain/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/shroomish/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/breloom/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/slakoth/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/vigoroth/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/slaking/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/nincada/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/ninjask/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/shedinja/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/whismur/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/loudred/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/exploud/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/makuhita/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/hariyama/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/azurill/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/nosepass/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/skitty/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/delcatty/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/sableye/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/mawile/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/aron/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/lairon/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/aggron/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/meditite/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/medicham/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/electrike/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/manectric/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/plusle/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/minun/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/volbeat/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/illumise/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/roselia/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/gulpin/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/swalot/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/carvanha/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/sharpedo/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/wailmer/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/wailord/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 8 -mheight 8
+
+$(POKEMONGFXDIR)/numel/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/camerupt/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/torkoal/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/spoink/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/grumpig/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/spinda/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/trapinch/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/vibrava/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/flygon/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/cacnea/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/cacturne/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/swablu/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/altaria/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/zangoose/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/seviper/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/lunatone/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/solrock/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/barboach/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/whiscash/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/corphish/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/crawdaunt/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/baltoy/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/claydol/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/lileep/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/cradily/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/anorith/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/armaldo/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/feebas/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/milotic/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/castform/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/castform/sunny/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/castform/rainy/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/castform/snowy/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/kecleon/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/shuppet/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/banette/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/duskull/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/dusclops/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/tropius/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/chimecho/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/absol/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/wynaut/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/snorunt/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/glalie/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/spheal/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/sealeo/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/walrein/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/clamperl/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/huntail/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/gorebyss/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/relicanth/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/luvdisc/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/bagon/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/shelgon/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/salamence/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/beldum/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/metang/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/metagross/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/regirock/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/regice/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/registeel/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/latias/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/latios/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/kyogre/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 8 -mheight 8
+
+$(POKEMONGFXDIR)/groudon/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 8 -mheight 8
+
+$(POKEMONGFXDIR)/rayquaza/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 8 -mheight 8
+
+$(POKEMONGFXDIR)/jirachi/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/deoxys/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/turtwig/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/grotle/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/torterra/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/chimchar/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/monferno/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/infernape/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/piplup/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/prinplup/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/empoleon/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/starly/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/staravia/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/staraptor/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/bidoof/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/bibarel/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/kricketot/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/kricketune/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/shinx/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/luxio/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/luxray/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/budew/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/roserade/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/cranidos/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/rampardos/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/shieldon/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/bastiodon/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/burmy/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/wormadam/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/mothim/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/combee/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/vespiquen/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/pachirisu/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/buizel/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/floatzel/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/cherubi/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/cherrim/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/shellos/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/gastrodon/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/ambipom/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/drifloon/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/drifblim/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/buneary/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/lopunny/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/mismagius/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/honchkrow/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/glameow/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/purugly/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/chingling/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/stunky/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/skuntank/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/bronzor/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/bronzong/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/bonsly/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/mime_jr/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/happiny/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/chatot/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/spiritomb/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/gible/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/gabite/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/garchomp/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/munchlax/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/riolu/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/lucario/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/hippopotas/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/hippowdon/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/skorupi/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/drapion/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/croagunk/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/toxicroak/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/carnivine/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/finneon/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/lumineon/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/mantyke/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/snover/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/abomasnow/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/weavile/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/magnezone/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/lickilicky/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/rhyperior/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/tangrowth/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/electivire/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/magmortar/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/togekiss/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/yanmega/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/leafeon/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/glaceon/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/gliscor/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/mamoswine/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/porygon_z/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/gallade/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/probopass/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/dusknoir/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/froslass/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/rotom/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/uxie/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/mesprit/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/azelf/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/dialga/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 8 -mheight 8
+
+$(POKEMONGFXDIR)/palkia/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 8 -mheight 8
+
+$(POKEMONGFXDIR)/heatran/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/regigigas/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 8 -mheight 8
+
+$(POKEMONGFXDIR)/giratina/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 8 -mheight 8
+
+$(POKEMONGFXDIR)/cresselia/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/phione/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/manaphy/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/darkrai/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/shaymin/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/arceus/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 8 -mheight 8
+
+$(POKEMONGFXDIR)/victini/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/snivy/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/servine/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/serperior/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/tepig/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/pignite/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/emboar/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/oshawott/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/dewott/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/samurott/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/patrat/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/watchog/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/lillipup/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/herdier/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/stoutland/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/purrloin/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/liepard/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/pansage/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/simisage/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/pansear/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/simisear/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/panpour/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/simipour/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/munna/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/musharna/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/pidove/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/tranquill/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/unfezant/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/blitzle/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/zebstrika/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/roggenrola/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/boldore/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/gigalith/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/woobat/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/swoobat/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/drilbur/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/excadrill/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/audino/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/timburr/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/gurdurr/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/conkeldurr/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/tympole/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/palpitoad/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/seismitoad/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/throh/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/sawk/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/sewaddle/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/swadloon/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/leavanny/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/venipede/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/whirlipede/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/scolipede/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/cottonee/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/whimsicott/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/petilil/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/lilligant/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/basculin/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/sandile/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/krokorok/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/krookodile/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/darumaka/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/darmanitan/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/maractus/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/dwebble/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/crustle/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/scraggy/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/scrafty/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/sigilyph/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/yamask/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/cofagrigus/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/tirtouga/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/carracosta/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/archen/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/archeops/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/trubbish/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/garbodor/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/zorua/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/zoroark/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/minccino/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/cinccino/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/gothita/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/gothorita/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/gothitelle/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/solosis/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/duosion/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/reuniclus/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/ducklett/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/swanna/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/vanillite/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/vanillish/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/vanilluxe/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/deerling/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/sawsbuck/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/emolga/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/karrablast/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/escavalier/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/foongus/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/amoonguss/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/frillish/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/jellicent/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/alomomola/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/joltik/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/galvantula/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/ferroseed/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/ferrothorn/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/klink/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/klang/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/klinklang/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/tynamo/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/eelektrik/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/eelektross/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/elgyem/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/beheeyem/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/litwick/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/lampent/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/chandelure/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/axew/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/fraxure/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/haxorus/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/cubchoo/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/beartic/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/cryogonal/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/shelmet/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/accelgor/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/stunfisk/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/mienfoo/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/mienshao/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/druddigon/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/golett/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/golurk/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/pawniard/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/bisharp/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/bouffalant/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/rufflet/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/braviary/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/vullaby/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/mandibuzz/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/heatmor/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/durant/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/deino/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/zweilous/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/hydreigon/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/larvesta/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/volcarona/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/cobalion/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/terrakion/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/virizion/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/tornadus/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/thundurus/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/reshiram/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 8 -mheight 8
+
+$(POKEMONGFXDIR)/zekrom/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 8 -mheight 8
+
+$(POKEMONGFXDIR)/landorus/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/kyurem/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 8 -mheight 8
+
+$(POKEMONGFXDIR)/keldeo/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/meloetta/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/genesect/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/chespin/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/quilladin/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/chesnaught/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/fennekin/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/braixen/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/delphox/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/froakie/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/frogadier/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/greninja/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/bunnelby/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/diggersby/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/fletchling/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/fletchinder/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/talonflame/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/scatterbug/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/spewpa/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/vivillon/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/litleo/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/pyroar/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/flabebe/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/floette/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/florges/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/skiddo/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/gogoat/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/pancham/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/pangoro/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/furfrou/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/espurr/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/meowstic/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/meowstic/female/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/honedge/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/doublade/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/aegislash/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/spritzee/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/aromatisse/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/swirlix/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/slurpuff/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/inkay/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/malamar/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/binacle/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/barbaracle/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/skrelp/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/dragalge/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/clauncher/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/clawitzer/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/helioptile/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/heliolisk/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/tyrunt/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/tyrantrum/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/amaura/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/aurorus/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/sylveon/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/hawlucha/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/dedenne/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/carbink/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/goomy/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/sliggoo/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/goodra/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/klefki/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/phantump/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/trevenant/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/pumpkaboo/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/gourgeist/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/bergmite/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/avalugg/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/noibat/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/noivern/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(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
+
+$(POKEMONGFXDIR)/zygarde/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 8 -mheight 8
+
+$(POKEMONGFXDIR)/diancie/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/hoopa/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/volcanion/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/rowlet/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/dartrix/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/decidueye/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/litten/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/torracat/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/incineroar/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/popplio/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/brionne/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/primarina/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/pikipek/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/trumbeak/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/toucannon/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/yungoos/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/gumshoos/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/grubbin/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/charjabug/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/vikavolt/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/crabrawler/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/crabominable/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/oricorio/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/cutiefly/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/ribombee/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/rockruff/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/lycanroc/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/lycanroc/dusk/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/lycanroc/midnight/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/wishiwashi/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/mareanie/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/toxapex/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/mudbray/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/mudsdale/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/dewpider/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/araquanid/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/fomantis/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/lurantis/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/morelull/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/shiinotic/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/salandit/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/salazzle/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/stufful/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/bewear/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/bounsweet/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/steenee/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/tsareena/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/comfey/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/oranguru/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/passimian/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/wimpod/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/golisopod/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/sandygast/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/palossand/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/pyukumuku/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/type_null/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/silvally/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/minior/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/komala/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/turtonator/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/togedemaru/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/mimikyu/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/bruxish/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/drampa/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/dhelmise/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/jangmo_o/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/hakamo_o/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/kommo_o/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/tapu_koko/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/tapu_lele/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/tapu_bulu/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/tapu_fini/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/cosmog/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/cosmoem/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/solgaleo/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/lunala/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/nihilego/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/buzzwole/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/pheromosa/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/xurkitree/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/celesteela/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/kartana/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/guzzlord/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/necrozma/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/necrozma/dawn_wings/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/necrozma/dusk_mane/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/magearna/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/marshadow/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/poipole/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/naganadel/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/stakataka/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/blacephalon/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/zeraora/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/meltan/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/melmetal/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/grookey/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/thwackey/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/rillaboom/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/scorbunny/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/raboot/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/cinderace/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/sobble/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/drizzile/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/inteleon/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/skwovet/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/greedent/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/rookidee/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/corvisquire/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/corviknight/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/blipbug/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/dottler/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/orbeetle/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/nickit/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/thievul/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/gossifleur/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/eldegoss/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/wooloo/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/dubwool/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/chewtle/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/drednaw/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/yamper/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/boltund/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/rolycoly/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/carkol/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/coalossal/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/applin/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/flapple/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/appletun/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/silicobra/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/sandaconda/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/cramorant/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/arrokuda/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/barraskewda/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/toxel/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/toxtricity/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/toxtricity/low_key/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/sizzlipede/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/centiskorch/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/clobbopus/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/grapploct/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/sinistea/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/polteageist/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/hatenna/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/hattrem/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/hatterene/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/impidimp/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/morgrem/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/grimmsnarl/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/obstagoon/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/perrserker/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/cursola/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/sirfetchd/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/mr_rime/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/runerigus/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/milcery/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/alcremie/strawberry/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/falinks/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/pincurchin/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/snom/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/frosmoth/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/stonjourner/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/eiscue/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/indeedee/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/morpeko/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/cufant/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/copperajah/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/dracozolt/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/arctozolt/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/dracovish/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/arctovish/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/duraludon/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/dreepy/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/drakloak/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/dragapult/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/zacian/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/zacian/crowned_sword/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/zamazenta/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/zamazenta/crowned_shield/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/eternatus/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/kubfu/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/urshifu/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/zarude/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/regieleki/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/regidrago/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/glastrier/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/spectrier/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/calyrex/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/calyrex/shadow_rider/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/calyrex/ice_rider/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/zapdos/galarian/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/meowth/galarian/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/ponyta/galarian/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/rapidash/galarian/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/slowpoke/galarian/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/slowbro/galarian/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/farfetchd/galarian/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/weezing/galarian/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/mr_mime/galarian/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/articuno/galarian/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/moltres/galarian/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/slowking/galarian/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/corsola/galarian/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/zigzagoon/galarian/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/linoone/galarian/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/darumaka/galarian/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/darmanitan/galarian/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/yamask/galarian/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/stunfisk/galarian/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/growlithe/hisuian/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/arcanine/hisuian/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/voltorb/hisuian/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/electrode/hisuian/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/braviary/hisuian/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/qwilfish/hisuian/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/sneasel/hisuian/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/zorua/hisuian/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/zoroark/hisuian/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/samurott/hisuian/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/lilligant/hisuian/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/sliggoo/hisuian/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/goodra/hisuian/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/avalugg/hisuian/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/decidueye/hisuian/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/typhlosion/hisuian/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/dialga/origin/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 8 -mheight 8
+
+$(POKEMONGFXDIR)/palkia/origin/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 8 -mheight 8
+
+$(POKEMONGFXDIR)/wyrdeer/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/kleavor/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/basculin/white_striped/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/basculegion/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/basculegion/female/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/ursaluna/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/sneasler/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/overqwil/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/enamorus/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 8 -mheight 8
+
+$(POKEMONGFXDIR)/enamorus/therian/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 8 -mheight 8
+
+$(POKEMONGFXDIR)/pichu/spiky_eared/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/deoxys/attack/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/deoxys/defense/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/deoxys/speed/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/burmy/sandy_cloak/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/burmy/trash_cloak/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/wormadam/sandy_cloak/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/wormadam/trash_cloak/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/shellos/east_sea/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/gastrodon/east_sea/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/rotom/heat/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/rotom/wash/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/rotom/frost/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/rotom/fan/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/rotom/mow/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/giratina/origin/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 8 -mheight 8
+
+$(POKEMONGFXDIR)/arceus/fighting/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 8 -mheight 8
+
+$(POKEMONGFXDIR)/arceus/flying/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 8 -mheight 8
+
+$(POKEMONGFXDIR)/arceus/poison/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 8 -mheight 8
+
+$(POKEMONGFXDIR)/arceus/ground/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 8 -mheight 8
+
+$(POKEMONGFXDIR)/arceus/rock/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 8 -mheight 8
+
+$(POKEMONGFXDIR)/arceus/bug/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 8 -mheight 8
+
+$(POKEMONGFXDIR)/arceus/ghost/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 8 -mheight 8
+
+$(POKEMONGFXDIR)/arceus/steel/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 8 -mheight 8
+
+$(POKEMONGFXDIR)/arceus/fire/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 8 -mheight 8
+
+$(POKEMONGFXDIR)/arceus/water/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 8 -mheight 8
+
+$(POKEMONGFXDIR)/arceus/grass/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 8 -mheight 8
+
+$(POKEMONGFXDIR)/arceus/electric/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 8 -mheight 8
+
+$(POKEMONGFXDIR)/arceus/psychic/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 8 -mheight 8
+
+$(POKEMONGFXDIR)/arceus/ice/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 8 -mheight 8
+
+$(POKEMONGFXDIR)/arceus/dragon/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 8 -mheight 8
+
+$(POKEMONGFXDIR)/arceus/dark/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 8 -mheight 8
+
+$(POKEMONGFXDIR)/arceus/fairy/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 8 -mheight 8
+
+$(POKEMONGFXDIR)/basculin/blue_striped/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/deerling/autumn/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/deerling/summer/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/deerling/winter/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/sawsbuck/autumn/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/sawsbuck/summer/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/sawsbuck/winter/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/meloetta/pirouette/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/vivillon/polar/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/vivillon/tundra/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/vivillon/continental/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/vivillon/garden/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/vivillon/elegant/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/vivillon/modern/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/vivillon/marine/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/vivillon/archipelago/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/vivillon/high_plains/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/vivillon/sandstorm/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/vivillon/river/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/vivillon/monsoon/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/vivillon/savanna/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/vivillon/sun/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/vivillon/ocean/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/vivillon/jungle/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/vivillon/fancy/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/vivillon/poke_ball/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/vivillon/meadow/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/flabebe/yellow_flower/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/flabebe/blue_flower/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/flabebe/orange_flower/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/flabebe/white_flower/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/floette/yellow_flower/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/floette/blue_flower/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/floette/orange_flower/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/floette/white_flower/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/floette/eternal_flower/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/florges/yellow_flower/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/florges/blue_flower/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/florges/orange_flower/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/florges/white_flower/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/furfrou/heart_trim/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/furfrou/star_trim/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/furfrou/diamond_trim/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/furfrou/debutante_trim/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/furfrou/matron_trim/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/furfrou/dandy_trim/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/furfrou/la_reine_trim/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/furfrou/kabuki_trim/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/furfrou/pharaoh_trim/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/hoopa/unbound/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 8 -mheight 8
+
+$(POKEMONGFXDIR)/rattata/alolan/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/raticate/alolan/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/raichu/alolan/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/sandshrew/alolan/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/sandslash/alolan/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/vulpix/alolan/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/ninetales/alolan/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/diglett/alolan/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/dugtrio/alolan/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/meowth/alolan/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/persian/alolan/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/geodude/alolan/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/graveler/alolan/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/golem/alolan/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/grimer/alolan/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/muk/alolan/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(POKEMONGFXDIR)/exeggutor/alolan/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 8 -mheight 8
+
+$(POKEMONGFXDIR)/marowak/alolan/overworld.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 4 -mheight 4
+
+$(MISCGFXDIR)/emotes.4bpp: %.4bpp: %.png
+ $(GFX) $< $@ -mwidth 2 -mheight 2
+
+# All pokeballs are 16x32
+$(OBJEVENTGFXDIR)/misc/ball_%.4bpp: $(OBJEVENTGFXDIR)/misc/ball_%.png ; $(GFX) $< $@ -mwidth 2 -mheight 4
+
graphics/door_anims/battle_tower_multi_corridor.4bpp: %.4bpp: %.png
$(GFX) $< $@ -mwidth 2 -mheight 4
diff --git a/src/battle_ai_main.c b/src/battle_ai_main.c
index 493724244f2f..7c3d86251f9b 100644
--- a/src/battle_ai_main.c
+++ b/src/battle_ai_main.c
@@ -9,6 +9,7 @@
#include "battle_factory.h"
#include "battle_setup.h"
#include "battle_z_move.h"
+#include "battle_terastal.h"
#include "data.h"
#include "debug.h"
#include "event_data.h"
@@ -17,6 +18,7 @@
#include "random.h"
#include "recorded_battle.h"
#include "util.h"
+#include "script.h"
#include "constants/abilities.h"
#include "constants/battle_ai.h"
#include "constants/battle_move_effects.h"
@@ -38,6 +40,7 @@ static bool32 IsPinchBerryItemEffect(u32 holdEffect);
// ewram
EWRAM_DATA const u8 *gAIScriptPtr = NULL; // Still used in contests
EWRAM_DATA u8 sBattler_AI = 0;
+EWRAM_DATA AiScoreFunc sDynamicAiFunc = NULL;
// const rom data
static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score);
@@ -53,6 +56,7 @@ static s32 AI_Safari(u32 battlerAtk, u32 battlerDef, u32 move, s32 score);
static s32 AI_FirstBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score);
static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score);
static s32 AI_PowerfulStatus(u32 battlerAtk, u32 battlerDef, u32 move, s32 score);
+static s32 AI_DynamicFunc(u32 battlerAtk, u32 battlerDef, u32 move, s32 score);
static s32 (*const sBattleAiFuncTable[])(u32, u32, u32, s32) =
@@ -69,7 +73,7 @@ static s32 (*const sBattleAiFuncTable[])(u32, u32, u32, s32) =
[9] = AI_PowerfulStatus, // AI_FLAG_POWERFUL_STATUS
[10] = NULL, // AI_FLAG_NEGATE_UNAWARE
[11] = NULL, // AI_FLAG_WILL_SUICIDE
- [12] = NULL, // AI_FLAG_HELP_PARTNER
+ [12] = NULL, // Unused
[13] = NULL, // Unused
[14] = NULL, // Unused
[15] = NULL, // Unused
@@ -85,7 +89,7 @@ static s32 (*const sBattleAiFuncTable[])(u32, u32, u32, s32) =
[25] = NULL, // Unused
[26] = NULL, // Unused
[27] = NULL, // Unused
- [28] = NULL, // Unused
+ [28] = AI_DynamicFunc, // AI_FLAG_DYNAMIC_FUNC
[29] = AI_Roaming, // AI_FLAG_ROAMING
[30] = AI_Safari, // AI_FLAG_SAFARI
[31] = AI_FirstBattle, // AI_FLAG_FIRST_BATTLE
@@ -179,6 +183,9 @@ static u32 GetAiFlags(u16 trainerId)
if (flags & AI_FLAG_SMART_SWITCHING)
flags |= AI_FLAG_SMART_MON_CHOICES;
+ if (sDynamicAiFunc != NULL)
+ flags |= AI_FLAG_DYNAMIC_FUNC;
+
return flags;
}
@@ -402,7 +409,7 @@ static u32 Ai_SetMoveAccuracy(struct AiLogicData *aiData, u32 battlerAtk, u32 ba
{
u32 accuracy;
u32 abilityAtk = aiData->abilities[battlerAtk];
- u32 abilityDef = aiData->abilities[battlerAtk];
+ u32 abilityDef = aiData->abilities[battlerDef];
if (abilityAtk == ABILITY_NO_GUARD || abilityDef == ABILITY_NO_GUARD || gMovesInfo[move].accuracy == 0) // Moves with accuracy 0 or no guard ability always hit.
accuracy = 100;
else
@@ -420,6 +427,8 @@ static void SetBattlerAiMovesData(struct AiLogicData *aiData, u32 battlerAtk, u3
moves = GetMovesArray(battlerAtk);
weather = AI_GetWeather(aiData);
+ SetBattlerData(battlerAtk);
+
// Simulate dmg for both ai controlled mons and for player controlled mons.
for (battlerDef = 0; battlerDef < battlersCount; battlerDef++)
{
@@ -427,9 +436,10 @@ static void SetBattlerAiMovesData(struct AiLogicData *aiData, u32 battlerAtk, u3
continue;
SaveBattlerData(battlerDef);
+ SetBattlerData(battlerDef);
for (i = 0; i < MAX_MON_MOVES; i++)
{
- s32 dmg = 0;
+ struct SimulatedDamage dmg = {0};
u8 effectiveness = AI_EFFECTIVENESS_x0;
u32 move = moves[i];
@@ -438,13 +448,20 @@ static void SetBattlerAiMovesData(struct AiLogicData *aiData, u32 battlerAtk, u3
//&& gMovesInfo[move].power != 0 /* we want to get effectiveness and accuracy of status moves */
&& !(aiData->moveLimitations[battlerAtk] & gBitTable[i]))
{
- dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness, TRUE, weather);
+ if (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_RISKY)
+ dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness, TRUE, weather, DMG_ROLL_HIGHEST);
+ else if (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_CONSERVATIVE)
+ dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness, TRUE, weather, DMG_ROLL_LOWEST);
+ else
+ dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness, TRUE, weather, DMG_ROLL_DEFAULT);
aiData->moveAccuracy[battlerAtk][battlerDef][i] = Ai_SetMoveAccuracy(aiData, battlerAtk, battlerDef, move);
}
aiData->simulatedDmg[battlerAtk][battlerDef][i] = dmg;
aiData->effectiveness[battlerAtk][battlerDef][i] = effectiveness;
}
+ RestoreBattlerData(battlerDef);
}
+ RestoreBattlerData(battlerAtk);
}
void SetAiLogicDataForTurn(struct AiLogicData *aiData)
@@ -461,12 +478,20 @@ void SetAiLogicDataForTurn(struct AiLogicData *aiData)
aiData->weatherHasEffect = WEATHER_HAS_EFFECT;
// get/assume all battler data and simulate AI damage
battlersCount = gBattlersCount;
+
for (battlerAtk = 0; battlerAtk < battlersCount; battlerAtk++)
{
if (!IsBattlerAlive(battlerAtk))
continue;
SetBattlerAiData(battlerAtk, aiData);
+ }
+
+ for (battlerAtk = 0; battlerAtk < battlersCount; battlerAtk++)
+ {
+ if (!IsBattlerAlive(battlerAtk))
+ continue;
+
SetBattlerAiMovesData(aiData, battlerAtk, battlersCount);
}
}
@@ -500,7 +525,8 @@ static bool32 AI_ShouldSwitchIfBadMoves(u32 battler, bool32 doubleBattle)
if (CountUsablePartyMons(battler) > 0
&& !IsBattlerTrapped(battler, TRUE)
&& !(gBattleTypeFlags & (BATTLE_TYPE_ARENA | BATTLE_TYPE_PALACE))
- && AI_THINKING_STRUCT->aiFlags[battler] & (AI_FLAG_CHECK_VIABILITY | AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_PREFER_BATON_PASS))
+ && AI_THINKING_STRUCT->aiFlags[battler] & (AI_FLAG_CHECK_VIABILITY | AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_TRY_TO_FAINT | AI_FLAG_PREFER_BATON_PASS)
+ && !(AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_SEQUENCE_SWITCHING))
{
// Consider switching if all moves are worthless to use.
if (GetTotalBaseStat(gBattleMons[battler].species) >= 310 // Mon is not weak.
@@ -541,7 +567,7 @@ static bool32 AI_ShouldSwitchIfBadMoves(u32 battler, bool32 doubleBattle)
// Consider switching if your mon with truant is bodied by Protect spam.
// Or is using a double turn semi invulnerable move(such as Fly) and is faster.
- if (GetBattlerAbility(battler) == ABILITY_TRUANT
+ if (AI_DATA->abilities[battler] == ABILITY_TRUANT
&& IsTruantMonVulnerable(battler, gBattlerTarget)
&& gDisableStructs[battler].truantCounter
&& gBattleMons[battler].hp >= gBattleMons[battler].maxHP / 2
@@ -805,7 +831,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
if (gMovesInfo[move].powderMove && !IsAffectedByPowder(battlerDef, aiData->abilities[battlerDef], aiData->holdEffects[battlerDef]))
RETURN_SCORE_MINUS(10);
- if (IsSemiInvulnerable(battlerDef, move) && moveEffect != EFFECT_SEMI_INVULNERABLE && AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER)
+ if (IsSemiInvulnerable(battlerDef, move) && moveEffect != EFFECT_SEMI_INVULNERABLE && AI_IsFaster(battlerAtk, battlerDef, move))
RETURN_SCORE_MINUS(10);
if (IsTwoTurnNotSemiInvulnerableMove(battlerAtk, move) && CanTargetFaintAi(battlerDef, battlerAtk))
@@ -1076,7 +1102,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
switch (moveEffect)
{
case EFFECT_HIT: // only applies to Vital Throw
- if (gMovesInfo[move].priority < 0 && AI_STRIKES_FIRST(battlerAtk, battlerDef, move) && aiData->hpPercents[battlerAtk] < 40)
+ if (gMovesInfo[move].priority < 0 && AI_IsFaster(battlerAtk, battlerDef, move) && aiData->hpPercents[battlerAtk] < 40)
ADJUST_SCORE(-2); // don't want to move last
break;
default:
@@ -1369,9 +1395,6 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
break;
case EFFECT_EVASION_DOWN:
case EFFECT_EVASION_DOWN_2:
- if (!ShouldLowerStat(battlerDef, aiData->abilities[battlerDef], STAT_EVASION))
- ADJUST_SCORE(-10);
- break;
case EFFECT_TICKLE:
if (!ShouldLowerStat(battlerDef, aiData->abilities[battlerDef], STAT_ATK))
ADJUST_SCORE(-10);
@@ -1434,8 +1457,9 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
case EFFECT_MIRROR_COAT:
if (IsBattlerIncapacitated(battlerDef, aiData->abilities[battlerDef]) || gBattleMons[battlerDef].status2 & (STATUS2_INFATUATION | STATUS2_CONFUSION))
ADJUST_SCORE(-1);
- if (predictedMove == MOVE_NONE || GetBattleMoveCategory(predictedMove) == DAMAGE_CATEGORY_STATUS
+ if ((predictedMove == MOVE_NONE || GetBattleMoveCategory(predictedMove) == DAMAGE_CATEGORY_STATUS
|| DoesSubstituteBlockMove(battlerAtk, BATTLE_PARTNER(battlerDef), predictedMove))
+ && !(predictedMove == MOVE_NONE && (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_RISKY))) // Let Risky AI predict blindly based on stats
ADJUST_SCORE(-10);
break;
@@ -1444,7 +1468,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
ADJUST_SCORE(-10);
else if (aiData->abilities[battlerDef] == ABILITY_SUCTION_CUPS)
ADJUST_SCORE(-10);
- else if (IsDynamaxed(battlerDef))
+ else if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX)
ADJUST_SCORE(-10);
break;
case EFFECT_TOXIC_THREAD:
@@ -1477,7 +1501,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
return 0;
if (!ShouldTryOHKO(battlerAtk, battlerDef, aiData->abilities[battlerAtk], aiData->abilities[battlerDef], move))
ADJUST_SCORE(-10);
- else if (IsDynamaxed(battlerDef))
+ else if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX)
ADJUST_SCORE(-10);
break;
case EFFECT_MIST:
@@ -1516,13 +1540,13 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
ADJUST_SCORE(-3);
break;
case EFFECT_DISABLE:
- if (IsDynamaxed(battlerDef))
+ if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX)
ADJUST_SCORE(-10);
else if (gDisableStructs[battlerDef].disableTimer == 0
&& (B_MENTAL_HERB < GEN_5 || aiData->holdEffects[battlerDef] != HOLD_EFFECT_MENTAL_HERB)
&& !PartnerHasSameMoveEffectWithoutTarget(BATTLE_PARTNER(battlerAtk), move, aiData->partnerMove))
{
- if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) // Attacker should go first
+ if (AI_IsFaster(battlerAtk, battlerDef, move)) // Attacker should go first
{
if (gLastMoves[battlerDef] == MOVE_NONE || gLastMoves[battlerDef] == 0xFFFF)
ADJUST_SCORE(-10); // no anticipated move to disable
@@ -1538,13 +1562,13 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
}
break;
case EFFECT_ENCORE:
- if (IsDynamaxed(battlerDef))
+ if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX)
ADJUST_SCORE(-10);
else if (gDisableStructs[battlerDef].encoreTimer == 0
&& (B_MENTAL_HERB < GEN_5 || aiData->holdEffects[battlerDef] != HOLD_EFFECT_MENTAL_HERB)
&& !DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove))
{
- if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) // Attacker should go first
+ if (AI_IsFaster(battlerAtk, battlerDef, move)) // Attacker should go first
{
if (gLastMoves[battlerDef] == MOVE_NONE || gLastMoves[battlerDef] == 0xFFFF)
ADJUST_SCORE(-10); // no anticipated move to encore
@@ -1754,7 +1778,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
}
break;
case EFFECT_TORMENT:
- if (IsDynamaxed(battlerDef))
+ if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX)
ADJUST_SCORE(-10);
else if (gBattleMons[battlerDef].status2 & STATUS2_TORMENT
|| DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove))
@@ -1893,7 +1917,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
case EFFECT_MORNING_SUN:
case EFFECT_SYNTHESIS:
case EFFECT_MOONLIGHT:
- if ((AI_GetWeather(aiData) & (B_WEATHER_RAIN | B_WEATHER_SANDSTORM | B_WEATHER_HAIL)))
+ if ((AI_GetWeather(aiData) & (B_WEATHER_RAIN | B_WEATHER_SANDSTORM | B_WEATHER_HAIL | B_WEATHER_SNOW | B_WEATHER_FOG)))
ADJUST_SCORE(-3);
else if (AtMaxHp(battlerAtk))
ADJUST_SCORE(-10);
@@ -1911,7 +1935,8 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
ADJUST_SCORE(-8); //No point in healing, but should at least do it if nothing better
break;
case EFFECT_RECOIL_IF_MISS:
- if (aiData->abilities[battlerAtk] != ABILITY_MAGIC_GUARD && AI_DATA->moveAccuracy[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex] < 75)
+ if (aiData->abilities[battlerAtk] != ABILITY_MAGIC_GUARD && AI_DATA->moveAccuracy[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex] < 75
+ && !(AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_RISKY))
ADJUST_SCORE(-6);
break;
case EFFECT_TRANSFORM:
@@ -1921,7 +1946,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
break;
case EFFECT_SPITE:
case EFFECT_MIMIC:
- if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) // Attacker should go first
+ if (AI_IsFaster(battlerAtk, battlerDef, move)) // Attacker should go first
{
if (gLastMoves[battlerDef] == MOVE_NONE
|| gLastMoves[battlerDef] == 0xFFFF)
@@ -1959,7 +1984,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
case EFFECT_DESTINY_BOND:
if (gBattleMons[battlerDef].status2 & STATUS2_DESTINY_BOND)
ADJUST_SCORE(-10);
- else if (IsDynamaxed(battlerDef))
+ else if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX)
ADJUST_SCORE(-10);
break;
case EFFECT_HEAL_BELL:
@@ -2067,7 +2092,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
if (isDoubleBattle)
{
if (IsHazardMoveEffect(gMovesInfo[aiData->partnerMove].effect) // partner is going to set up hazards
- && AI_WhoStrikesFirst(BATTLE_PARTNER(battlerAtk), battlerAtk, aiData->partnerMove) == AI_IS_FASTER) // partner is going to set up before the potential Defog
+ && AI_IsFaster(BATTLE_PARTNER(battlerAtk), battlerAtk, aiData->partnerMove)) // partner is going to set up before the potential Defog
{
ADJUST_SCORE(-10);
break; // Don't use Defog if partner is going to set up hazards
@@ -2095,7 +2120,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
break;
case EFFECT_SEMI_INVULNERABLE:
if (predictedMove != MOVE_NONE
- && AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER
+ && AI_IsSlower(battlerAtk, battlerDef, move)
&& gMovesInfo[predictedMove].effect == EFFECT_SEMI_INVULNERABLE)
ADJUST_SCORE(-10); // Don't Fly/dig/etc if opponent is going to fly/dig/etc after you
@@ -2114,7 +2139,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
ADJUST_SCORE(-10);
break;
case EFFECT_NATURE_POWER:
- return AI_CheckBadMove(battlerAtk, battlerDef, GetNaturePowerMove(), score);
+ return AI_CheckBadMove(battlerAtk, battlerDef, GetNaturePowerMove(battlerAtk), score);
case EFFECT_TAUNT:
if (gDisableStructs[battlerDef].tauntTimer > 0
|| DoesPartnerHaveSameMoveEffect(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove))
@@ -2158,7 +2183,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|| gAbilitiesInfo[aiData->abilities[battlerDef]].cantBeSwapped
|| aiData->holdEffects[battlerDef] == HOLD_EFFECT_ABILITY_SHIELD)
ADJUST_SCORE(-10);
- else if (IsDynamaxed(battlerDef))
+ else if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX)
ADJUST_SCORE(-10);
break;
case EFFECT_WORRY_SEED:
@@ -2178,7 +2203,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|| gAbilitiesInfo[aiData->abilities[battlerDef]].cantBeOverwritten
|| aiData->holdEffects[battlerAtk] == HOLD_EFFECT_ABILITY_SHIELD)
ADJUST_SCORE(-10);
- else if (IsDynamaxed(battlerDef))
+ else if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX)
ADJUST_SCORE(-10);
break;
case EFFECT_SIMPLE_BEAM:
@@ -2279,7 +2304,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
case EFFECT_ME_FIRST:
if (predictedMove != MOVE_NONE)
{
- if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER)
+ if (AI_IsSlower(battlerAtk, battlerDef, move))
ADJUST_SCORE(-10); // Target is predicted to go first, Me First will fail
else
return AI_CheckBadMove(battlerAtk, battlerDef, predictedMove, score);
@@ -2425,20 +2450,20 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
break;
case EFFECT_SOAK:
if (PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove)
- || (GetBattlerType(battlerDef, 0) == TYPE_WATER
- && GetBattlerType(battlerDef, 1) == TYPE_WATER
- && GetBattlerType(battlerDef, 2) == TYPE_MYSTERY))
+ || (GetBattlerType(battlerDef, 0, FALSE) == TYPE_WATER
+ && GetBattlerType(battlerDef, 1, FALSE) == TYPE_WATER
+ && GetBattlerType(battlerDef, 2, FALSE) == TYPE_MYSTERY))
ADJUST_SCORE(-10); // target is already water-only
break;
case EFFECT_THIRD_TYPE:
switch (move)
{
case MOVE_TRICK_OR_TREAT:
- if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_GHOST) || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove))
+ if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_GHOST) || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove) || GetActiveGimmick(battlerDef) == GIMMICK_TERA)
ADJUST_SCORE(-10);
break;
case MOVE_FORESTS_CURSE:
- if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_GRASS) || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove))
+ if (IS_BATTLER_OF_TYPE(battlerDef, TYPE_GRASS) || PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove) || GetActiveGimmick(battlerDef) == GIMMICK_TERA)
ADJUST_SCORE(-10);
break;
}
@@ -2462,7 +2487,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
}
break;
case EFFECT_ELECTRIFY:
- if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER
+ if (AI_IsSlower(battlerAtk, battlerDef, move)
//|| GetMoveTypeSpecial(battlerDef, predictedMove) == TYPE_ELECTRIC // Move will already be electric type
|| PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove))
ADJUST_SCORE(-10);
@@ -2491,7 +2516,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
case EFFECT_INSTRUCT:
{
u16 instructedMove;
- if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER)
+ if (AI_IsSlower(battlerAtk, battlerDef, move))
instructedMove = predictedMove;
else
instructedMove = gLastMoves[battlerDef];
@@ -2506,7 +2531,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
{
ADJUST_SCORE(-10);
}
- else if (IsDynamaxed(battlerDef))
+ else if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX)
ADJUST_SCORE(-10);
else if (isDoubleBattle)
{
@@ -2530,21 +2555,21 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
break;
case EFFECT_QUASH:
if (!isDoubleBattle
- || AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER
+ || AI_IsSlower(battlerAtk, battlerDef, move)
|| PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove))
ADJUST_SCORE(-10);
break;
case EFFECT_AFTER_YOU:
if (!IS_TARGETING_PARTNER(battlerAtk, battlerDef)
|| !isDoubleBattle
- || AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER
+ || AI_IsSlower(battlerAtk, battlerDef, move)
|| PartnerMoveIsSameAsAttacker(BATTLE_PARTNER(battlerAtk), battlerDef, move, aiData->partnerMove))
ADJUST_SCORE(-10);
break;
case EFFECT_SUCKER_PUNCH:
if (predictedMove != MOVE_NONE)
{
- if (IS_MOVE_STATUS(predictedMove) || AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER) // Opponent going first
+ if (IS_MOVE_STATUS(predictedMove) || AI_IsSlower(battlerAtk, battlerDef, move)) // Opponent going first
ADJUST_SCORE(-10);
}
break;
@@ -2574,9 +2599,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
case EFFECT_SYNCHRONOISE:
//Check holding ring target or is of same type
if (aiData->holdEffects[battlerDef] == HOLD_EFFECT_RING_TARGET
- || IS_BATTLER_OF_TYPE(battlerDef, GetBattlerType(battlerAtk, 0))
- || IS_BATTLER_OF_TYPE(battlerDef, GetBattlerType(battlerAtk, 1))
- || IS_BATTLER_OF_TYPE(battlerDef, GetBattlerType(battlerAtk, 2)))
+ || DoBattlersShareType(battlerAtk, battlerDef))
break;
else
ADJUST_SCORE(-10);
@@ -2588,8 +2611,8 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
ADJUST_SCORE(-1);
break;
case EFFECT_FLAIL:
- if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER // Opponent should go first
- || aiData->hpPercents[battlerAtk] > 50)
+ if (AI_IsSlower(battlerAtk, battlerDef, move) // Opponent should go first
+ || aiData->hpPercents[battlerAtk] > 50)
ADJUST_SCORE(-4);
break;
//TODO
@@ -2625,7 +2648,7 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
else if (CanAIFaintTarget(battlerAtk, battlerDef, 0))
ADJUST_SCORE(-10);
else if (CanTargetFaintAi(battlerDef, battlerAtk)
- && AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER)
+ && AI_IsSlower(battlerAtk, battlerDef, move))
ADJUST_SCORE(-10);
break;
case EFFECT_JUNGLE_HEALING:
@@ -2644,14 +2667,38 @@ static s32 AI_CheckBadMove(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
&& !BattlerStatCanRise(battlerAtk, aiData->abilities[battlerAtk], STAT_SPDEF))
ADJUST_SCORE(-10);
break;
+ case EFFECT_SPICY_EXTRACT:
+ if (battlerAtk != BATTLE_PARTNER(battlerDef)
+ && (HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_PHYSICAL)
+ || aiData->abilities[battlerDef] == ABILITY_CLEAR_BODY
+ || aiData->abilities[battlerDef] == ABILITY_GOOD_AS_GOLD
+ || aiData->holdEffects[battlerDef] == HOLD_EFFECT_CLEAR_AMULET))
+ ADJUST_SCORE(-10);
+ break;
case EFFECT_UPPER_HAND:
- if (predictedMove == MOVE_NONE || IS_MOVE_STATUS(predictedMove) || AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER || GetMovePriority(battlerDef, move) < 1 || GetMovePriority(battlerDef, move) > 3) // Opponent going first or not using priority move
+ if (predictedMove == MOVE_NONE || IS_MOVE_STATUS(predictedMove) || AI_IsSlower(battlerAtk, battlerDef, move) || GetMovePriority(battlerDef, predictedMove) < 1 || GetMovePriority(battlerDef, predictedMove) > 3) // Opponent going first or not using priority move
ADJUST_SCORE(-10);
break;
case EFFECT_PLACEHOLDER:
return 0; // cannot even select
} // move effect checks
+ // Choice items
+ if (HOLD_EFFECT_CHOICE(aiData->holdEffects[battlerAtk]) && gBattleMons[battlerAtk].ability != ABILITY_KLUTZ)
+ {
+ // Don't use user-target moves ie. Swords Dance, with exceptions
+ if ((moveTarget & MOVE_TARGET_USER)
+ && moveEffect != EFFECT_DESTINY_BOND && moveEffect != EFFECT_WISH && moveEffect != EFFECT_HEALING_WISH
+ && !(moveEffect == EFFECT_AURORA_VEIL && (AI_GetWeather(aiData) & (B_WEATHER_SNOW | B_WEATHER_HAIL))))
+ ADJUST_SCORE(-30);
+ // Don't use a status move if the mon is the last one in the party, has no good switchin, or is trapped
+ else if (GetBattleMoveCategory(move) == DAMAGE_CATEGORY_STATUS
+ && (CountUsablePartyMons(battlerAtk) < 1
+ || AI_DATA->mostSuitableMonId[battlerAtk] == PARTY_SIZE
+ || IsBattlerTrapped(battlerAtk, TRUE)))
+ ADJUST_SCORE(-30);
+ }
+
if (score < 0)
score = 0;
@@ -2670,13 +2717,13 @@ static s32 AI_TryToFaint(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
if (CanIndexMoveFaintTarget(battlerAtk, battlerDef, movesetIndex, 0) && gMovesInfo[move].effect != EFFECT_EXPLOSION)
{
- if (AI_STRIKES_FIRST(battlerAtk, battlerDef, move))
+ if (AI_IsFaster(battlerAtk, battlerDef, move))
ADJUST_SCORE(FAST_KILL);
else
ADJUST_SCORE(SLOW_KILL);
}
else if (CanTargetFaintAi(battlerDef, battlerAtk)
- && GetWhichBattlerFaster(battlerAtk, battlerDef, TRUE) != AI_IS_FASTER
+ && GetWhichBattlerFasterOrTies(battlerAtk, battlerDef, TRUE) != AI_IS_FASTER
&& GetMovePriority(battlerAtk, move) > 0)
{
ADJUST_SCORE(LAST_CHANCE);
@@ -2736,7 +2783,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
// Adjust for always crit moves
if (gMovesInfo[aiData->partnerMove].alwaysCriticalHit && aiData->abilities[battlerAtk] == ABILITY_ANGER_POINT)
{
- if (AI_WhoStrikesFirst(battlerAtk, battlerAtkPartner, move) == AI_IS_SLOWER) // Partner moving first
+ if (AI_IsSlower(battlerAtk, battlerAtkPartner, move)) // Partner moving first
{
// discourage raising our attack since it's about to be maxed out
if (IsAttackBoostMoveEffect(effect))
@@ -2774,6 +2821,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
|| gMovesInfo[aiData->partnerMove].criticalHitStage > 0
|| HasMoveWithCriticalHitChance(battlerAtkPartner))
ADJUST_SCORE(GOOD_EFFECT);
+ break;
} // our effect relative to partner
// consider global move effects
@@ -2915,6 +2963,12 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
{
switch (effect)
{
+ case EFFECT_SPICY_EXTRACT:
+ if (AI_ShouldSpicyExtract(battlerAtk, battlerAtkPartner, move, aiData))
+ {
+ RETURN_SCORE_PLUS(GOOD_EFFECT);
+ }
+ break;
case EFFECT_PURIFY:
if (gBattleMons[battlerAtkPartner].status1 & STATUS1_ANY)
{
@@ -2988,9 +3042,8 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
break;
case EFFECT_SOAK:
if (atkPartnerAbility == ABILITY_WONDER_GUARD
- && (GetBattlerType(battlerAtkPartner, 0) != TYPE_WATER
- || GetBattlerType(battlerAtkPartner, 1) != TYPE_WATER
- || GetBattlerType(battlerAtkPartner, 2) != TYPE_WATER))
+ && !IS_BATTLER_OF_TYPE(battlerAtkPartner, TYPE_WATER)
+ && GetActiveGimmick(battlerAtkPartner) != GIMMICK_TERA)
{
RETURN_SCORE_PLUS(WEAK_EFFECT);
}
@@ -2998,7 +3051,7 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
case EFFECT_INSTRUCT:
{
u16 instructedMove;
- if (AI_WhoStrikesFirst(battlerAtk, battlerAtkPartner, move) == AI_IS_FASTER)
+ if (AI_IsFaster(battlerAtk, battlerAtkPartner, move))
instructedMove = aiData->partnerMove;
else
instructedMove = gLastMoves[battlerAtkPartner];
@@ -3012,8 +3065,8 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
}
break;
case EFFECT_AFTER_YOU:
- if (AI_WhoStrikesFirst(battlerAtkPartner, FOE(battlerAtkPartner), aiData->partnerMove) == AI_IS_SLOWER // Opponent mon 1 goes before partner
- || AI_WhoStrikesFirst(battlerAtkPartner, BATTLE_PARTNER(FOE(battlerAtkPartner)), aiData->partnerMove) == AI_IS_SLOWER) // Opponent mon 2 goes before partner
+ if (AI_IsSlower(battlerAtkPartner, FOE(battlerAtkPartner), aiData->partnerMove) // Opponent mon 1 goes before partner
+ || AI_IsSlower(battlerAtkPartner, BATTLE_PARTNER(FOE(battlerAtkPartner)), aiData->partnerMove)) // Opponent mon 2 goes before partner
{
if (gMovesInfo[aiData->partnerMove].effect == EFFECT_COUNTER || gMovesInfo[aiData->partnerMove].effect == EFFECT_MIRROR_COAT)
break; // These moves need to go last
@@ -3022,9 +3075,9 @@ static s32 AI_DoubleBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
break;
case EFFECT_HEAL_PULSE:
case EFFECT_HIT_ENEMY_HEAL_ALLY:
- if (AI_WhoStrikesFirst(battlerAtk, FOE(battlerAtk), move) == AI_IS_FASTER
- && AI_WhoStrikesFirst(battlerAtk, BATTLE_PARTNER(FOE(battlerAtk)), move) == AI_IS_FASTER
- && gBattleMons[battlerAtkPartner].hp < gBattleMons[battlerAtkPartner].maxHP / 2)
+ if (AI_IsFaster(battlerAtk, FOE(battlerAtk), move)
+ && AI_IsFaster(battlerAtk, BATTLE_PARTNER(FOE(battlerAtk)), move)
+ && gBattleMons[battlerAtkPartner].hp < gBattleMons[battlerAtkPartner].maxHP / 2)
RETURN_SCORE_PLUS(WEAK_EFFECT);
break;
} // attacker move effects
@@ -3131,7 +3184,7 @@ static s32 AI_CompareDamagingMoves(u32 battlerAtk, u32 battlerDef, u32 currId)
isTwoTurnNotSemiInvulnerableMove[i] = FALSE;
}
/*
- MgbaPrintf_("%S: required hits: %d Dmg: %d", gMoveNames[moves[i]], noOfHits[i], AI_DATA->simulatedDmg[battlerAtk][battlerDef][i]);
+ Test_MgbaPrintf("%S: required hits: %d Dmg: %d", gMoveNames[moves[i]], noOfHits[i], AI_DATA->simulatedDmg[battlerAtk][battlerDef][i]);
*/
}
@@ -3212,7 +3265,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
u32 i;
// The AI should understand that while Dynamaxed, status moves function like Protect.
- if (IsDynamaxed(battlerAtk) && gMovesInfo[move].category == DAMAGE_CATEGORY_STATUS)
+ if (GetActiveGimmick(battlerAtk) == GIMMICK_DYNAMAX && gMovesInfo[move].category == DAMAGE_CATEGORY_STATUS)
moveEffect = EFFECT_PROTECT;
// check status move preference
@@ -3249,50 +3302,54 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
ADJUST_SCORE(DECENT_EFFECT);
}
break;
+ case EFFECT_FINAL_GAMBIT:
+ if (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_WILL_SUICIDE)
+ ADJUST_SCORE(DECENT_EFFECT);
+ break;
case EFFECT_MIRROR_MOVE:
if (predictedMove != MOVE_NONE)
return AI_CheckViability(battlerAtk, battlerDef, gLastMoves[battlerDef], score);
break;
case EFFECT_ATTACK_UP:
case EFFECT_ATTACK_UP_USER_ALLY:
- IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK, &score);
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK));
break;
case EFFECT_ATTACK_UP_2:
- IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK_2, &score);
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK_2));
break;
case EFFECT_DEFENSE_UP:
case EFFECT_DEFENSE_UP_3:
- IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF, &score);
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF));
break;
case EFFECT_DEFENSE_UP_2:
- IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF_2, &score);
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF_2));
break;
case EFFECT_SPEED_UP:
- IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED, &score);
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED));
break;
case EFFECT_SPEED_UP_2:
- IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED_2, &score);
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED_2));
break;
case EFFECT_SPECIAL_ATTACK_UP:
- IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPATK, &score);
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPATK));
break;
case EFFECT_SPECIAL_ATTACK_UP_2:
case EFFECT_SPECIAL_ATTACK_UP_3:
- IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPATK_2, &score);
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPATK_2));
break;
case EFFECT_SPECIAL_DEFENSE_UP:
- IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPDEF, &score);
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPDEF));
break;
case EFFECT_SPECIAL_DEFENSE_UP_2:
- IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPDEF_2, &score);
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPDEF_2));
break;
case EFFECT_ACCURACY_UP:
case EFFECT_ACCURACY_UP_2:
- IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ACC, &score);
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ACC));
break;
case EFFECT_EVASION_UP:
case EFFECT_EVASION_UP_2:
- IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_EVASION, &score);
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_EVASION));
break;
case EFFECT_ATTACK_DOWN:
case EFFECT_ATTACK_DOWN_2:
@@ -3318,7 +3375,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
break;
case EFFECT_SPEED_DOWN:
case EFFECT_SPEED_DOWN_2:
- if (AI_STRIKES_FIRST(battlerAtk, battlerDef, move))
+ if (AI_IsFaster(battlerAtk, battlerDef, move))
ADJUST_SCORE(-3);
else if (!AI_RandLessThan(70))
ADJUST_SCORE(DECENT_EFFECT);
@@ -3380,19 +3437,22 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
if (gBattleMons[battlerDef].statStages[STAT_EVASION] < 7 || aiData->abilities[battlerAtk] == ABILITY_NO_GUARD)
ADJUST_SCORE(-2);
break;
+ case EFFECT_SPICY_EXTRACT:
+ // TODO: Make IncreaseStatDownScore function, just like IncreaseStatUpScore
+ break;
case EFFECT_BIDE:
if (aiData->hpPercents[battlerAtk] < 90)
ADJUST_SCORE(-2); // Should be either removed or turned into increasing score
case EFFECT_ACUPRESSURE:
break;
case EFFECT_ATTACK_ACCURACY_UP: // hone claws
- IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK, &score);
- IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ACC, &score);
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK));
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ACC));
break;
case EFFECT_GROWTH:
case EFFECT_ATTACK_SPATK_UP: // work up
- IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK, &score);
- IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPATK, &score);
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK));
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPATK));
break;
case EFFECT_HAZE:
if (AnyStatIsRaised(BATTLE_PARTNER(battlerAtk))
@@ -3404,7 +3464,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
if ((gMovesInfo[move].soundMove && aiData->abilities[battlerDef] == ABILITY_SOUNDPROOF)
|| aiData->abilities[battlerDef] == ABILITY_SUCTION_CUPS)
break;
- else if (IsDynamaxed(battlerDef))
+ else if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX)
break;
score += AI_TryToClearStats(battlerAtk, battlerDef, isDoubleBattle);
break;
@@ -3489,7 +3549,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
}
break;
case EFFECT_OHKO:
- if (IsDynamaxed(battlerDef))
+ if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX)
break;
else if (gStatuses3[battlerAtk] & STATUS3_ALWAYS_HITS)
ADJUST_SCORE(BEST_EFFECT);
@@ -3513,11 +3573,17 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
IncreaseParalyzeScore(battlerAtk, battlerDef, move, &score);
break;
case EFFECT_SUBSTITUTE:
- ADJUST_SCORE(GOOD_EFFECT);
+ if (HasAnyKnownMove(battlerDef) && GetBestDmgFromBattler(battlerDef, battlerAtk) < gBattleMons[battlerAtk].maxHP / 4)
+ ADJUST_SCORE(GOOD_EFFECT);
if (gStatuses3[battlerDef] & STATUS3_PERISH_SONG)
ADJUST_SCORE(GOOD_EFFECT);
- if (gBattleMons[battlerDef].status1 & (STATUS1_BURN | STATUS1_PSN_ANY | STATUS1_FROSTBITE))
+ if (gBattleMons[battlerDef].status1 & STATUS1_SLEEP)
+ ADJUST_SCORE(GOOD_EFFECT);
+ else if (gBattleMons[battlerDef].status1 & (STATUS1_BURN | STATUS1_PSN_ANY | STATUS1_FROSTBITE))
ADJUST_SCORE(DECENT_EFFECT);
+ // TODO:
+ // if (IsPredictedToSwitch(battlerDef, battlerAtk)
+ // ADJUST_SCORE(DECENT_EFFECT);
if (HasMoveEffect(battlerDef, EFFECT_SLEEP)
|| HasMoveEffect(battlerDef, EFFECT_TOXIC)
|| HasMoveEffect(battlerDef, EFFECT_POISON)
@@ -3530,7 +3596,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
ADJUST_SCORE(WEAK_EFFECT);
break;
case EFFECT_MIMIC:
- if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER)
+ if (AI_IsFaster(battlerAtk, battlerDef, move))
{
if (gLastMoves[battlerDef] != MOVE_NONE && gLastMoves[battlerDef] != 0xFFFF)
return AI_CheckViability(battlerAtk, battlerDef, gLastMoves[battlerDef], score);
@@ -3586,20 +3652,20 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
ADJUST_SCORE(BEST_EFFECT);
break;
case EFFECT_DISABLE:
- if (IsDynamaxed(battlerDef))
+ if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX)
break;
else if (gDisableStructs[battlerDef].disableTimer == 0
&& (gLastMoves[battlerDef] != MOVE_NONE)
&& (gLastMoves[battlerDef] != 0xFFFF)
&& (B_MENTAL_HERB < GEN_5 || aiData->holdEffects[battlerDef] != HOLD_EFFECT_MENTAL_HERB)
- && (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER))
+ && (AI_IsFaster(battlerAtk, battlerDef, move)))
{
if (CanTargetMoveFaintAi(gLastMoves[battlerDef], battlerDef, battlerAtk, 1))
ADJUST_SCORE(GOOD_EFFECT); // Disable move that can kill attacker
}
break;
case EFFECT_ENCORE:
- if (IsDynamaxed(battlerDef))
+ if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX)
break;
else if (gDisableStructs[battlerDef].encoreTimer == 0
&& (B_MENTAL_HERB < GEN_5 || aiData->holdEffects[battlerDef] != HOLD_EFFECT_MENTAL_HERB)
@@ -3618,9 +3684,9 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
ADJUST_SCORE(GOOD_EFFECT);
break;
case EFFECT_DESTINY_BOND:
- if (IsDynamaxed(battlerDef))
+ if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX)
break;
- else if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER && CanTargetFaintAi(battlerDef, battlerAtk))
+ else if (AI_IsFaster(battlerAtk, battlerDef, move) && CanTargetFaintAi(battlerDef, battlerAtk))
ADJUST_SCORE(GOOD_EFFECT);
break;
case EFFECT_SPITE:
@@ -3641,8 +3707,8 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
}
else
{
- IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK, &score);
- IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF, &score);
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK));
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF));
}
break;
case EFFECT_PROTECT:
@@ -3820,7 +3886,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
case EFFECT_SEMI_INVULNERABLE:
if (predictedMove != MOVE_NONE && !isDoubleBattle)
{
- if ((AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER)
+ if ((AI_IsFaster(battlerAtk, battlerDef, move))
&& (gMovesInfo[predictedMove].effect == EFFECT_EXPLOSION || gMovesInfo[predictedMove].effect == EFFECT_PROTECT))
ADJUST_SCORE(GOOD_EFFECT);
else if (gMovesInfo[predictedMove].effect == EFFECT_SEMI_INVULNERABLE && !(gStatuses3[battlerDef] & STATUS3_SEMI_INVULNERABLE))
@@ -3830,7 +3896,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
case EFFECT_DEFENSE_CURL:
if (HasMoveEffect(battlerAtk, EFFECT_ROLLOUT) && !(gBattleMons[battlerAtk].status2 & STATUS2_DEFENSE_CURL))
ADJUST_SCORE(DECENT_EFFECT);
- IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF, &score);
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF));
break;
case EFFECT_FIRST_TURN_ONLY:
if (ShouldFakeOut(battlerAtk, battlerDef, move) && MoveHasAdditionalEffectWithChance(move, MOVE_EFFECT_FLINCH, 100))
@@ -3843,8 +3909,8 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
break;
if (HasMoveEffect(battlerAtk, EFFECT_SWALLOW) || HasMoveEffect(battlerAtk, EFFECT_SPIT_UP))
ADJUST_SCORE(DECENT_EFFECT);
- IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF, &score);
- IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPDEF, &score);
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF));
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPDEF));
break;
case EFFECT_SWAGGER:
case EFFECT_FLATTER:
@@ -3862,7 +3928,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
break;
case EFFECT_ATTRACT:
if (!isDoubleBattle
- && (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER)
+ && (AI_IsSlower(battlerAtk, battlerDef, move))
&& BattlerWillFaintFromSecondaryDamage(battlerDef, aiData->abilities[battlerDef]))
break; // Don't use if the attract won't have a change to activate
if (gBattleMons[battlerDef].status1 & STATUS1_ANY
@@ -3896,7 +3962,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
if (isDoubleBattle)
{
if (IsHazardMoveEffect(gMovesInfo[aiData->partnerMove].effect) // Partner is going to set up hazards
- && AI_WhoStrikesFirst(battlerAtk, BATTLE_PARTNER(battlerAtk), move) == AI_IS_SLOWER) // Partner going first
+ && AI_IsSlower(battlerAtk, BATTLE_PARTNER(battlerAtk), move)) // Partner going first
break; // Don't use Defog if partner is going to set up hazards
}
if (ShouldLowerEvasion(battlerAtk, battlerDef, aiData->abilities[battlerDef]))
@@ -3924,7 +3990,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
if (HasDamagingMoveOfType(battlerAtk, TYPE_ELECTRIC))
ADJUST_SCORE(DECENT_EFFECT);
if (B_CHARGE_SPDEF_RAISE >= GEN_5)
- IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPDEF, &score);
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPDEF));
break;
case EFFECT_TAUNT:
if (IS_MOVE_STATUS(predictedMove))
@@ -3985,7 +4051,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
}
break;
case HOLD_EFFECT_EJECT_BUTTON:
- //if (!IsRaidBattle() && IsDynamaxed(battlerDef) && gNewBS->dynamaxData.timer[battlerDef] > 1 &&
+ //if (!IsRaidBattle() && GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX && gNewBS->dynamaxData.timer[battlerDef] > 1 &&
if (HasDamagingMove(battlerAtk)
|| (isDoubleBattle && IsBattlerAlive(BATTLE_PARTNER(battlerAtk)) && HasDamagingMove(BATTLE_PARTNER(battlerAtk))))
ADJUST_SCORE(DECENT_EFFECT); // Force 'em out next turn
@@ -4052,7 +4118,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
if (IsStatBoostingBerry(item) && aiData->hpPercents[battlerAtk] > 60)
ADJUST_SCORE(WEAK_EFFECT);
else if (ShouldRestoreHpBerry(battlerAtk, item) && !CanAIFaintTarget(battlerAtk, battlerDef, 0)
- && ((GetWhichBattlerFaster(battlerAtk, battlerDef, TRUE) == 1 && CanTargetFaintAiWithMod(battlerDef, battlerAtk, 0, 0))
+ && ((GetWhichBattlerFasterOrTies(battlerAtk, battlerDef, TRUE) == 1 && CanTargetFaintAiWithMod(battlerDef, battlerAtk, 0, 0))
|| !CanTargetFaintAiWithMod(battlerDef, battlerAtk, toHeal, 0)))
ADJUST_SCORE(WEAK_EFFECT); // Recycle healing berry if we can't otherwise faint the target and the target wont kill us after we activate the berry
}
@@ -4067,7 +4133,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
ADJUST_SCORE(DECENT_EFFECT);
break;
case EFFECT_SKILL_SWAP:
- if (IsDynamaxed(battlerDef))
+ if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX)
break;
else if (gAbilitiesInfo[aiData->abilities[battlerDef]].aiRating > gAbilitiesInfo[aiData->abilities[battlerAtk]].aiRating)
ADJUST_SCORE(DECENT_EFFECT);
@@ -4079,7 +4145,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
ADJUST_SCORE(DECENT_EFFECT);
break;
case EFFECT_ENTRAINMENT:
- if (IsDynamaxed(battlerDef))
+ if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX)
break;
else if ((IsAbilityOfRating(aiData->abilities[battlerDef], 5) || gAbilitiesInfo[aiData->abilities[battlerAtk]].aiRating <= 0)
&& (aiData->abilities[battlerDef] != aiData->abilities[battlerAtk] && !(gStatuses3[battlerDef] & STATUS3_GASTRO_ACID)))
@@ -4135,44 +4201,44 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
ADJUST_SCORE(DECENT_EFFECT);
break;
case EFFECT_COSMIC_POWER:
- IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF, &score);
- IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPDEF, &score);
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF));
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPDEF));
break;
case EFFECT_BULK_UP:
- IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK, &score);
- IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF, &score);
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK));
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF));
break;
case EFFECT_CALM_MIND:
- IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPATK, &score);
- IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPDEF, &score);
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPATK));
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPDEF));
break;
case EFFECT_GEOMANCY:
if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_POWER_HERB)
ADJUST_SCORE(GOOD_EFFECT);
case EFFECT_QUIVER_DANCE:
- IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED, &score);
- IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPATK, &score);
- IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPDEF, &score);
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED));
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPATK));
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPDEF));
break;
case EFFECT_VICTORY_DANCE:
- IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED, &score);
- IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK, &score);
- IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF, &score);
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED));
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK));
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_DEF));
break;
case EFFECT_SHELL_SMASH:
if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_RESTORE_STATS)
ADJUST_SCORE(WEAK_EFFECT);
- IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED, &score);
- IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPATK, &score);
- IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK, &score);
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED));
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPATK));
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK));
break;
case EFFECT_TIDY_UP:
IncreaseTidyUpScore(battlerAtk, battlerDef, move, &score);
case EFFECT_DRAGON_DANCE:
case EFFECT_SHIFT_GEAR:
- IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED, &score);
- IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK, &score);
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED));
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ATK));
break;
case EFFECT_GUARD_SWAP:
if (gBattleMons[battlerDef].statStages[STAT_DEF] > gBattleMons[battlerAtk].statStages[STAT_DEF]
@@ -4323,14 +4389,14 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
ADJUST_SCORE(DECENT_EFFECT);
break;
case EFFECT_HEAL_BLOCK:
- if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER && predictedMove != MOVE_NONE && IsHealingMove(predictedMove))
+ if (AI_IsFaster(battlerAtk, battlerDef, move) && predictedMove != MOVE_NONE && IsHealingMove(predictedMove))
ADJUST_SCORE(DECENT_EFFECT); // Try to cancel healing move
else if (HasHealingEffect(battlerDef) || aiData->holdEffects[battlerDef] == HOLD_EFFECT_LEFTOVERS
|| (aiData->holdEffects[battlerDef] == HOLD_EFFECT_BLACK_SLUDGE && IS_BATTLER_OF_TYPE(battlerDef, TYPE_POISON)))
ADJUST_SCORE(DECENT_EFFECT);
break;
case EFFECT_SOAK:
- if (HasMoveWithType(battlerAtk, TYPE_ELECTRIC) || HasMoveWithType(battlerAtk, TYPE_GRASS) || HasMoveEffect(battlerAtk, EFFECT_FREEZE_DRY))
+ if (HasMoveWithType(battlerAtk, TYPE_ELECTRIC) || HasMoveWithType(battlerAtk, TYPE_GRASS) || (HasMoveEffect(battlerAtk, EFFECT_SUPER_EFFECTIVE_ON_ARG) && gMovesInfo[move].argument == TYPE_WATER) )
ADJUST_SCORE(DECENT_EFFECT); // Get some super effective moves
break;
case EFFECT_THIRD_TYPE:
@@ -4355,7 +4421,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
ADJUST_SCORE(BEST_EFFECT);
break;
case EFFECT_QUASH:
- if (isDoubleBattle && AI_WhoStrikesFirst(BATTLE_PARTNER(battlerAtk), battlerDef, aiData->partnerMove) == AI_IS_SLOWER)
+ if (isDoubleBattle && AI_IsSlower(BATTLE_PARTNER(battlerAtk), battlerDef, aiData->partnerMove))
ADJUST_SCORE(DECENT_EFFECT); // Attacker partner wouldn't go before target
break;
case EFFECT_TAILWIND:
@@ -4370,7 +4436,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
if (IsBattlerGrounded(battlerAtk) && HasDamagingMoveOfType(battlerDef, TYPE_ELECTRIC)
&& !(AI_GetTypeEffectiveness(MOVE_EARTHQUAKE, battlerDef, battlerAtk) == AI_EFFECTIVENESS_x0)) // Doesn't resist ground move
{
- if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) // Attacker goes first
+ if (AI_IsFaster(battlerAtk, battlerDef, move)) // Attacker goes first
{
if (gMovesInfo[predictedMove].type == TYPE_GROUND)
ADJUST_SCORE(GOOD_EFFECT); // Cause the enemy's move to fail
@@ -4385,13 +4451,13 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
}
break;
case EFFECT_CAMOUFLAGE:
- if (predictedMove != MOVE_NONE && AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER // Attacker goes first
+ if (predictedMove != MOVE_NONE && AI_IsFaster(battlerAtk, battlerDef, move) // Attacker goes first
&& !IS_MOVE_STATUS(move) && AI_GetTypeEffectiveness(predictedMove, battlerDef, battlerAtk) != AI_EFFECTIVENESS_x0)
ADJUST_SCORE(DECENT_EFFECT);
break;
case EFFECT_TOXIC_THREAD:
IncreasePoisonScore(battlerAtk, battlerDef, move, &score);
- IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED, &score);
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_SPEED));
break;
case EFFECT_COUNTER:
if ((!IsBattlerIncapacitated(battlerDef, aiData->abilities[battlerDef]) && predictedMove != MOVE_NONE)
@@ -4411,17 +4477,8 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
else if (ShouldRecover(battlerAtk, battlerDef, move, 50))
ADJUST_SCORE(DECENT_EFFECT);
break;
- case EFFECT_FOCUS_PUNCH:
- if (!isDoubleBattle && effectiveness > AI_EFFECTIVENESS_x0_5)
- {
- if (IsBattlerIncapacitated(battlerDef, aiData->abilities[battlerDef]))
- ADJUST_SCORE(DECENT_EFFECT);
- if (gBattleMons[battlerDef].status2 & (STATUS2_INFATUATION | STATUS2_CONFUSION))
- ADJUST_SCORE(DECENT_EFFECT);
- }
- break;
case EFFECT_ENDEAVOR:
- if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER && !CanTargetFaintAi(battlerDef, battlerAtk))
+ if (AI_IsSlower(battlerAtk, battlerDef, move) && !CanTargetFaintAi(battlerDef, battlerAtk))
ADJUST_SCORE(DECENT_EFFECT);
break;
case EFFECT_REVIVAL_BLESSING:
@@ -4471,7 +4528,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
case MOVE_EFFECT_SP_ATK_PLUS_1:
case MOVE_EFFECT_SP_DEF_PLUS_1:
StageStatId = STAT_CHANGE_ATK + gMovesInfo[move].additionalEffects[i].moveEffect - MOVE_EFFECT_ATK_PLUS_1;
- IncreaseStatUpScore(battlerAtk, battlerDef, StageStatId, &score);
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, StageStatId));
break;
case MOVE_EFFECT_ATK_PLUS_2:
case MOVE_EFFECT_DEF_PLUS_2:
@@ -4479,15 +4536,15 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
case MOVE_EFFECT_SP_ATK_PLUS_2:
case MOVE_EFFECT_SP_DEF_PLUS_2:
StageStatId = STAT_CHANGE_ATK_2 + gMovesInfo[move].additionalEffects[i].moveEffect - MOVE_EFFECT_ATK_PLUS_1;
- IncreaseStatUpScore(battlerAtk, battlerDef, StageStatId, &score);
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, StageStatId));
break;
case MOVE_EFFECT_ACC_PLUS_1:
case MOVE_EFFECT_ACC_PLUS_2:
- IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ACC, &score);
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_ACC));
break;
case MOVE_EFFECT_EVS_PLUS_1:
case MOVE_EFFECT_EVS_PLUS_2:
- IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_EVASION, &score);
+ ADJUST_SCORE(IncreaseStatUpScore(battlerAtk, battlerDef, STAT_CHANGE_EVASION));
break;
case MOVE_EFFECT_RAPID_SPIN:
if ((gSideStatuses[GetBattlerSide(battlerAtk)] & SIDE_STATUS_HAZARDS_ANY && CountUsablePartyMons(battlerAtk) != 0)
@@ -4506,7 +4563,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
case MOVE_EFFECT_SP_ATK_MINUS_1:
case MOVE_EFFECT_SP_DEF_MINUS_1:
StageStatId = STAT_CHANGE_ATK + gMovesInfo[move].additionalEffects[i].moveEffect - MOVE_EFFECT_ATK_MINUS_1;
- IncreaseStatUpScoreContrary(battlerAtk, battlerDef, StageStatId, &score);
+ ADJUST_SCORE(IncreaseStatUpScoreContrary(battlerAtk, battlerDef, StageStatId));
break;
case MOVE_EFFECT_ATK_MINUS_2:
case MOVE_EFFECT_DEF_MINUS_2:
@@ -4514,31 +4571,28 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
case MOVE_EFFECT_SP_ATK_MINUS_2:
case MOVE_EFFECT_SP_DEF_MINUS_2:
StageStatId = STAT_CHANGE_ATK + gMovesInfo[move].additionalEffects[i].moveEffect - MOVE_EFFECT_ATK_MINUS_2;
- IncreaseStatUpScoreContrary(battlerAtk, battlerDef, StageStatId, &score);
+ ADJUST_SCORE(IncreaseStatUpScoreContrary(battlerAtk, battlerDef, StageStatId));
break;
case MOVE_EFFECT_ACC_MINUS_1:
case MOVE_EFFECT_ACC_MINUS_2:
- IncreaseStatUpScoreContrary(battlerAtk, battlerDef, STAT_CHANGE_ACC, &score);
+ ADJUST_SCORE(IncreaseStatUpScoreContrary(battlerAtk, battlerDef, STAT_CHANGE_ACC));
break;
case MOVE_EFFECT_EVS_MINUS_1:
case MOVE_EFFECT_EVS_MINUS_2:
- IncreaseStatUpScoreContrary(battlerAtk, battlerDef, STAT_CHANGE_EVASION, &score);
+ ADJUST_SCORE(IncreaseStatUpScoreContrary(battlerAtk, battlerDef, STAT_CHANGE_EVASION));
break;
case MOVE_EFFECT_DEF_SPDEF_DOWN:
- IncreaseStatUpScoreContrary(battlerAtk, battlerDef, STAT_CHANGE_DEF, &score);
- IncreaseStatUpScoreContrary(battlerAtk, battlerDef, STAT_CHANGE_SPDEF, &score);
+ ADJUST_SCORE(IncreaseStatUpScoreContrary(battlerAtk, battlerDef, STAT_CHANGE_DEF));
+ ADJUST_SCORE(IncreaseStatUpScoreContrary(battlerAtk, battlerDef, STAT_CHANGE_SPDEF));
break;
case MOVE_EFFECT_ATK_DEF_DOWN:
- IncreaseStatUpScoreContrary(battlerAtk, battlerDef, STAT_CHANGE_ATK, &score);
- IncreaseStatUpScoreContrary(battlerAtk, battlerDef, STAT_CHANGE_DEF, &score);
- break;
- case MOVE_EFFECT_SP_ATK_TWO_DOWN:
- IncreaseStatUpScoreContrary(battlerAtk, battlerDef, STAT_CHANGE_SPATK_2, &score);
+ ADJUST_SCORE(IncreaseStatUpScoreContrary(battlerAtk, battlerDef, STAT_CHANGE_ATK));
+ ADJUST_SCORE(IncreaseStatUpScoreContrary(battlerAtk, battlerDef, STAT_CHANGE_DEF));
break;
case MOVE_EFFECT_V_CREATE:
- IncreaseStatUpScoreContrary(battlerAtk, battlerDef, STAT_CHANGE_DEF, &score);
- IncreaseStatUpScoreContrary(battlerAtk, battlerDef, STAT_CHANGE_SPEED, &score);
- IncreaseStatUpScoreContrary(battlerAtk, battlerDef, STAT_CHANGE_SPDEF, &score);
+ ADJUST_SCORE(IncreaseStatUpScoreContrary(battlerAtk, battlerDef, STAT_CHANGE_DEF));
+ ADJUST_SCORE(IncreaseStatUpScoreContrary(battlerAtk, battlerDef, STAT_CHANGE_SPEED));
+ ADJUST_SCORE(IncreaseStatUpScoreContrary(battlerAtk, battlerDef, STAT_CHANGE_SPDEF));
break;
}
}
@@ -4684,7 +4738,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
case MOVE_EFFECT_THROAT_CHOP:
if (gMovesInfo[GetBestDmgMoveFromBattler(battlerDef, battlerAtk)].soundMove)
{
- if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER)
+ if (AI_IsFaster(battlerAtk, battlerDef, move))
ADJUST_SCORE(GOOD_EFFECT);
else
ADJUST_SCORE(DECENT_EFFECT);
@@ -4698,14 +4752,7 @@ static u32 AI_CalcMoveEffectScore(u32 battlerAtk, u32 battlerDef, u32 move)
}
}
- if (score <= 1)
- return NOT_GOOD_ENOUGH;
- else if (score <= 3)
- return GOOD_MOVE_EFFECTS;
- else if (score <= 5)
- return PREFERRED_MOVE_EFFECTS;
- else
- return BEST_MOVE_EFFECTS;
+ return score;
}
// AI_FLAG_CHECK_VIABILITY - Chooses best possible move to hit player
@@ -4718,12 +4765,17 @@ static s32 AI_CheckViability(u32 battlerAtk, u32 battlerDef, u32 move, s32 score
if (gMovesInfo[move].power)
{
if (GetNoOfHitsToKOBattler(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex) == 0)
- ADJUST_SCORE(-20);
+ ADJUST_AND_RETURN_SCORE(NO_DAMAGE_OR_FAILS); // No point in checking the move further so return early
else
- score += AI_CompareDamagingMoves(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex);
+ {
+ if ((AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_RISKY) && GetBestDmgMoveFromBattler(battlerAtk, battlerDef) == move)
+ ADJUST_SCORE(BEST_DAMAGE_MOVE);
+ else
+ ADJUST_SCORE(AI_CompareDamagingMoves(battlerAtk, battlerDef, AI_THINKING_STRUCT->movesetIndex));
+ }
}
- score += AI_CalcMoveEffectScore(battlerAtk, battlerDef, move);
+ ADJUST_SCORE(AI_CalcMoveEffectScore(battlerAtk, battlerDef, move));
return score;
}
@@ -4737,7 +4789,7 @@ static s32 AI_SetupFirstTurn(u32 battlerAtk, u32 battlerDef, u32 move, s32 score
return score;
if (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_SMART_SWITCHING
- && AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER
+ && AI_IsSlower(battlerAtk, battlerDef, move)
&& CanTargetFaintAi(battlerDef, battlerAtk)
&& GetMovePriority(battlerAtk, move) == 0)
{
@@ -4860,33 +4912,49 @@ static s32 AI_SetupFirstTurn(u32 battlerAtk, u32 battlerDef, u32 move, s32 score
static s32 AI_Risky(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
{
u8 i;
+ struct AiLogicData *aiData = AI_DATA;
+
if (IS_TARGETING_PARTNER(battlerAtk, battlerDef))
return score;
if (gMovesInfo[move].criticalHitStage > 0)
ADJUST_SCORE(DECENT_EFFECT);
+ // +3 Score
switch (gMovesInfo[move].effect)
{
- case EFFECT_SLEEP:
- case EFFECT_EXPLOSION:
- case EFFECT_MIRROR_MOVE:
- case EFFECT_OHKO:
- case EFFECT_CONFUSE:
- case EFFECT_METRONOME:
- case EFFECT_PSYWAVE:
case EFFECT_COUNTER:
- case EFFECT_DESTINY_BOND:
- case EFFECT_SWAGGER:
- case EFFECT_ATTRACT:
- case EFFECT_PRESENT:
- case EFFECT_BELLY_DRUM:
+ if (gSpeciesInfo[gBattleMons[battlerDef].species].baseAttack >= gSpeciesInfo[gBattleMons[battlerDef].species].baseSpAttack + 10)
+ ADJUST_SCORE(STRONG_RISKY_EFFECT);
+ break;
case EFFECT_MIRROR_COAT:
- case EFFECT_FOCUS_PUNCH:
+ if (gSpeciesInfo[gBattleMons[battlerDef].species].baseSpAttack >= gSpeciesInfo[gBattleMons[battlerDef].species].baseAttack + 10)
+ ADJUST_SCORE(STRONG_RISKY_EFFECT);
+ break;
+ case EFFECT_EXPLOSION:
+ ADJUST_SCORE(STRONG_RISKY_EFFECT);
+ break;
+
+ // +2 Score
+ case EFFECT_MEMENTO:
+ if (aiData->hpPercents[battlerAtk] < 50 && AI_RandLessThan(128))
+ ADJUST_SCORE(AVERAGE_RISKY_EFFECT);
+ break;
case EFFECT_REVENGE:
- case EFFECT_FILLET_AWAY:
- if (Random() & 1)
- ADJUST_SCORE(DECENT_EFFECT);
+ if (gSpeciesInfo[gBattleMons[battlerDef].species].baseSpeed >= gSpeciesInfo[gBattleMons[battlerAtk].species].baseSpeed + 10)
+ ADJUST_SCORE(AVERAGE_RISKY_EFFECT);
+ break;
+ case EFFECT_BELLY_DRUM:
+ if (aiData->hpPercents[battlerAtk] >= 90)
+ ADJUST_SCORE(AVERAGE_RISKY_EFFECT);
+ break;
+ case EFFECT_MAX_HP_50_RECOIL:
+ case EFFECT_MIND_BLOWN:
+ case EFFECT_SWAGGER:
+ case EFFECT_FLATTER:
+ case EFFECT_ATTRACT:
+ case EFFECT_OHKO:
+ ADJUST_SCORE(AVERAGE_RISKY_EFFECT);
break;
case EFFECT_HIT:
{
@@ -4898,7 +4966,7 @@ static s32 AI_Risky(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
{
case MOVE_EFFECT_ALL_STATS_UP:
if (Random() & 1)
- ADJUST_SCORE(DECENT_EFFECT);
+ ADJUST_SCORE(AVERAGE_RISKY_EFFECT);
break;
default:
break;
@@ -4964,11 +5032,11 @@ static s32 AI_PreferBatonPass(u32 battlerAtk, u32 battlerDef, u32 move, s32 scor
ADJUST_SCORE(DECENT_EFFECT);
break;
case EFFECT_BATON_PASS:
- // TODO: Increase Score based on current stats.
if (gStatuses3[battlerAtk] & (STATUS3_ROOTED | STATUS3_AQUA_RING))
ADJUST_SCORE(DECENT_EFFECT);
if (gStatuses3[battlerAtk] & STATUS3_LEECHSEED)
ADJUST_SCORE(-3);
+ ADJUST_SCORE(CountPositiveStatStages(battlerAtk) - CountNegativeStatStages(battlerAtk));
break;
default:
break;
@@ -5043,6 +5111,7 @@ static s32 AI_HPAware(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
case EFFECT_BIDE:
case EFFECT_CONVERSION:
case EFFECT_LIGHT_SCREEN:
+ case EFFECT_REFLECT:
case EFFECT_MIST:
case EFFECT_FOCUS_ENERGY:
case EFFECT_CONVERSION_2:
@@ -5068,7 +5137,6 @@ static s32 AI_HPAware(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
case EFFECT_CONVERSION:
case EFFECT_REFLECT:
case EFFECT_LIGHT_SCREEN:
- case EFFECT_AURORA_VEIL:
case EFFECT_MIST:
case EFFECT_FOCUS_ENERGY:
case EFFECT_RAGE:
@@ -5300,3 +5368,47 @@ static s32 AI_FirstBattle(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
return score;
}
+
+
+// Dynamic AI Functions
+// For specific battle scenarios
+
+// Example - prefer attacking opposite foe in a tag battle
+s32 AI_TagBattlePreferFoe(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
+{
+ if (!(gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER))
+ {
+ /* not a partner battle */
+ return score;
+ }
+ else if (!IsBattlerAlive(BATTLE_OPPOSITE(battlerAtk)) || !IsBattlerAlive(BATTLE_PARTNER(BATTLE_OPPOSITE(battlerAtk))))
+ {
+ /* partner is defeated so attack normally */
+ return score;
+ }
+ else if (battlerDef == BATTLE_OPPOSITE(battlerAtk))
+ {
+ /* attacking along the diagonal */
+ ADJUST_SCORE(-20);
+ }
+
+ return score;
+}
+
+static s32 AI_DynamicFunc(u32 battlerAtk, u32 battlerDef, u32 move, s32 score)
+{
+ if (sDynamicAiFunc != NULL)
+ score = sDynamicAiFunc(battlerAtk, battlerDef, move, score);
+ return score;
+}
+
+void ScriptSetDynamicAiFunc(struct ScriptContext *ctx)
+{
+ AiScoreFunc func = (AiScoreFunc)ScriptReadWord(ctx);
+ sDynamicAiFunc = func;
+}
+
+void ResetDynamicAiFunc(void)
+{
+ sDynamicAiFunc = NULL;
+}
diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c
index bde6f9234843..27d4cbb6ec38 100644
--- a/src/battle_ai_switch_items.c
+++ b/src/battle_ai_switch_items.c
@@ -29,6 +29,7 @@ static bool32 AiExpectsToFaintPlayer(u32 battler);
static bool32 AI_ShouldHeal(u32 battler, u32 healAmount);
static bool32 AI_OpponentCanFaintAiWithMod(u32 battler, u32 healAmount);
static u32 GetSwitchinHazardsDamage(u32 battler, struct BattlePokemon *battleMon);
+static bool32 CanAbilityTrapOpponent(u16 ability, u32 opponent);
static void InitializeSwitchinCandidate(struct Pokemon *mon)
{
@@ -72,7 +73,7 @@ static bool32 HasBadOdds(u32 battler, bool32 emitResult)
//Variable initialization
u8 opposingPosition, atkType1, atkType2, defType1, defType2, effectiveness;
s32 i, damageDealt = 0, maxDamageDealt = 0, damageTaken = 0, maxDamageTaken = 0;
- u32 aiMove, playerMove, aiBestMove = MOVE_NONE, aiAbility = GetBattlerAbility(battler), opposingBattler, weather = AI_GetWeather(AI_DATA);
+ 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
@@ -88,10 +89,10 @@ static bool32 HasBadOdds(u32 battler, bool32 emitResult)
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++)
@@ -119,7 +120,7 @@ static bool32 HasBadOdds(u32 battler, bool32 emitResult)
hasSuperEffectiveMove = TRUE;
// Get maximum damage mon can deal
- damageDealt = AI_DATA->simulatedDmg[battler][opposingBattler][i];
+ damageDealt = AI_DATA->simulatedDmg[battler][opposingBattler][i].expected;
if(damageDealt > maxDamageDealt)
{
maxDamageDealt = damageDealt;
@@ -147,7 +148,7 @@ static bool32 HasBadOdds(u32 battler, bool32 emitResult)
playerMove = gBattleMons[opposingBattler].moves[i];
if (playerMove != MOVE_NONE && gMovesInfo[playerMove].power != 0)
{
- damageTaken = AI_CalcDamage(playerMove, opposingBattler, battler, &effectiveness, FALSE, weather);
+ damageTaken = AI_CalcDamage(playerMove, opposingBattler, battler, &effectiveness, FALSE, weather, DMG_ROLL_HIGHEST).expected;
if (damageTaken > maxDamageTaken)
maxDamageTaken = damageTaken;
}
@@ -162,7 +163,7 @@ static bool32 HasBadOdds(u32 battler, bool32 emitResult)
// Check if current mon can outspeed and KO in spite of bad matchup, and don't switch out if it can
if(damageDealt > gBattleMons[opposingBattler].hp)
{
- if (AI_WhoStrikesFirst(battler, opposingBattler, aiBestMove) == AI_IS_FASTER)
+ if (AI_IsFaster(battler, opposingBattler, aiBestMove))
return FALSE;
}
@@ -171,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
@@ -179,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
@@ -202,7 +203,7 @@ static bool32 HasBadOdds(u32 battler, bool32 emitResult)
return FALSE;
// 50% chance to stay in regardless
- if (Random() % 2 == 0)
+ if (!RandomPercentage(RNG_AI_HASBADODDS, 50))
return FALSE;
// Switch mon out
@@ -246,7 +247,7 @@ static bool32 ShouldSwitchIfWonderGuard(u32 battler, bool32 emitResult)
opposingPosition = BATTLE_OPPOSITE(GetBattlerPosition(battler));
- if (GetBattlerAbility(GetBattlerAtPosition(opposingPosition)) != ABILITY_WONDER_GUARD)
+ if (AI_DATA->abilities[GetBattlerAtPosition(opposingPosition)] != ABILITY_WONDER_GUARD)
return FALSE;
// Check if Pokémon has a super effective move.
@@ -416,6 +417,48 @@ static bool32 FindMonThatAbsorbsOpponentsMove(u32 battler, bool32 emitResult)
return FALSE;
}
+static bool32 FindMonThatTrapsOpponent(u32 battler, bool32 emitResult)
+{
+ s32 firstId;
+ s32 lastId;
+ struct Pokemon *party;
+ s32 i;
+ u16 monAbility;
+ s32 opposingBattler = GetBattlerAtPosition(BATTLE_OPPOSITE(GetBattlerPosition(battler)));
+
+ // 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;
+
+ // Check if current mon has an ability that traps opponent
+ if (CanAbilityTrapOpponent(gBattleMons[battler].ability, opposingBattler))
+ return FALSE;
+
+ // Check party for mon with ability that traps opponent
+ GetAIPartyIndexes(battler, &firstId, &lastId);
+
+ if (GetBattlerSide(battler) == B_SIDE_PLAYER)
+ party = gPlayerParty;
+ else
+ party = gEnemyParty;
+
+ for (i = firstId; i < lastId; i++)
+ {
+ monAbility = GetMonAbility(&party[i]);
+ if (CanAbilityTrapOpponent(monAbility, opposingBattler))
+ {
+ if (i == AI_DATA->mostSuitableMonId[battler]) // If mon in slot i is the most suitable switchin candidate, then it's a trapper than wins 1v1
+ {
+ gBattleStruct->AI_monToSwitchIntoId[battler] = i;
+ if (emitResult)
+ BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0);
+ return TRUE;
+ }
+ }
+ }
+ return FALSE;
+}
+
static bool32 ShouldSwitchIfGameStatePrompt(u32 battler, bool32 emitResult)
{
bool32 switchMon = FALSE;
@@ -571,7 +614,7 @@ static bool32 ShouldSwitchIfGameStatePrompt(u32 battler, bool32 emitResult)
&& AnyStatIsRaised(battler))
switchMon = FALSE;
if (AiExpectsToFaintPlayer(battler)
- && !AI_STRIKES_FIRST(battler, opposingBattler, 0)
+ && AI_IsSlower(battler, opposingBattler, 0)
&& !AI_OpponentCanFaintAiWithMod(battler, 0))
switchMon = FALSE;
}
@@ -796,7 +839,7 @@ static bool32 CanMonSurviveHazardSwitchin(u32 battler)
{
u32 battlerIn1, battlerIn2;
u32 hazardDamage = 0, battlerHp = gBattleMons[battler].hp;
- u32 ability = GetBattlerAbility(battler), aiMove;
+ u32 ability = AI_DATA->abilities[battler], aiMove;
s32 firstId, lastId, i, j;
struct Pokemon *party;
@@ -878,6 +921,24 @@ static bool32 ShouldSwitchIfEncored(u32 battler, bool32 emitResult)
return FALSE;
}
+static bool32 ShouldSwitchIfBadChoiceLock(u32 battler, bool32 emitResult)
+{
+ u32 holdEffect = GetBattlerHoldEffect(battler, FALSE);
+
+ if (HOLD_EFFECT_CHOICE(holdEffect) && gBattleMons[battler].ability != ABILITY_KLUTZ)
+ {
+ if (gMovesInfo[gLastUsedMove].category == DAMAGE_CATEGORY_STATUS)
+ {
+ gBattleStruct->AI_monToSwitchIntoId[battler] = PARTY_SIZE;
+ if (emitResult)
+ BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0);
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
// AI should switch if it's become setup fodder and has something better to switch to
static bool32 AreAttackingStatsLowered(u32 battler, bool32 emitResult)
{
@@ -900,7 +961,8 @@ static bool32 AreAttackingStatsLowered(u32 battler, bool32 emitResult)
if (AI_DATA->mostSuitableMonId[battler] != PARTY_SIZE && (Random() & 1))
{
gBattleStruct->AI_monToSwitchIntoId[battler] = PARTY_SIZE;
- BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0);
+ if (emitResult)
+ BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0);
return TRUE;
}
}
@@ -908,7 +970,8 @@ static bool32 AreAttackingStatsLowered(u32 battler, bool32 emitResult)
else if (attackingStage < DEFAULT_STAT_STAGE - 2)
{
gBattleStruct->AI_monToSwitchIntoId[battler] = PARTY_SIZE;
- BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0);
+ if (emitResult)
+ BtlController_EmitTwoReturnValues(battler, 1, B_ACTION_SWITCH, 0);
return TRUE;
}
}
@@ -959,6 +1022,10 @@ bool32 ShouldSwitch(u32 battler, bool32 emitResult)
if (gBattleTypeFlags & BATTLE_TYPE_ARENA)
return FALSE;
+ // Sequence Switching AI never switches mid-battle
+ if (AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_SEQUENCE_SWITCHING)
+ return FALSE;
+
availableToSwitch = 0;
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
@@ -1019,6 +1086,8 @@ bool32 ShouldSwitch(u32 battler, bool32 emitResult)
return TRUE;
if (ShouldSwitchIfGameStatePrompt(battler, emitResult))
return TRUE;
+ if (FindMonThatTrapsOpponent(battler, emitResult))
+ return TRUE;
if (FindMonThatAbsorbsOpponentsMove(battler, emitResult))
return TRUE;
@@ -1033,6 +1102,8 @@ bool32 ShouldSwitch(u32 battler, bool32 emitResult)
return TRUE;
if (ShouldSwitchIfEncored(battler, emitResult))
return TRUE;
+ if (ShouldSwitchIfBadChoiceLock(battler, emitResult))
+ return TRUE;
if (AreAttackingStatsLowered(battler, emitResult))
return TRUE;
@@ -1170,8 +1241,8 @@ static u32 GetBestMonTypeMatchup(struct Pokemon *party, int firstId, int lastId,
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];
@@ -1236,7 +1307,10 @@ static u32 GetBestMonDmg(struct Pokemon *party, int firstId, int lastId, u8 inva
if (aiMove != MOVE_NONE && gMovesInfo[aiMove].power != 0)
{
aiMove = GetMonData(&party[i], MON_DATA_MOVE1 + j);
- dmg = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, AI_DATA->switchinCandidate.battleMon, TRUE);
+ if (AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_CONSERVATIVE)
+ dmg = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, AI_DATA->switchinCandidate.battleMon, TRUE, DMG_ROLL_LOWEST);
+ else
+ dmg = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, AI_DATA->switchinCandidate.battleMon, TRUE, DMG_ROLL_DEFAULT);
if (bestDmg < dmg)
{
bestDmg = dmg;
@@ -1268,8 +1342,8 @@ 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;
- u16 heldItemEffect = gItemsInfo[battleMon->item].holdEffect;
+ 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;
u32 hazardFlags = gSideStatuses[GetBattlerSide(battler)] & (SIDE_STATUS_SPIKES | SIDE_STATUS_STEALTH_ROCK | SIDE_STATUS_STICKY_WEB | SIDE_STATUS_TOXIC_SPIKES | SIDE_STATUS_SAFEGUARD);
@@ -1327,7 +1401,7 @@ static u32 GetSwitchinHazardsDamage(u32 battler, struct BattlePokemon *battleMon
static s32 GetSwitchinWeatherImpact(void)
{
s32 weatherImpact = 0, maxHP = AI_DATA->switchinCandidate.battleMon.maxHP, ability = AI_DATA->switchinCandidate.battleMon.ability;
- u32 holdEffect = gItemsInfo[AI_DATA->switchinCandidate.battleMon.item].holdEffect;
+ u32 holdEffect = ItemId_GetHoldEffect(AI_DATA->switchinCandidate.battleMon.item);
if (WEATHER_HAS_EFFECT)
{
@@ -1335,7 +1409,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;
@@ -1343,9 +1417,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;
@@ -1391,12 +1465,12 @@ static s32 GetSwitchinWeatherImpact(void)
static u32 GetSwitchinRecurringHealing(void)
{
u32 recurringHealing = 0, maxHP = AI_DATA->switchinCandidate.battleMon.maxHP, ability = AI_DATA->switchinCandidate.battleMon.ability;
- u32 holdEffect = gItemsInfo[AI_DATA->switchinCandidate.battleMon.item].holdEffect;
+ u32 holdEffect = ItemId_GetHoldEffect(AI_DATA->switchinCandidate.battleMon.item);
// Items
if (ability != ABILITY_KLUTZ)
{
- 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)
@@ -1425,12 +1499,12 @@ static u32 GetSwitchinRecurringHealing(void)
static u32 GetSwitchinRecurringDamage(void)
{
u32 passiveDamage = 0, maxHP = AI_DATA->switchinCandidate.battleMon.maxHP, ability = AI_DATA->switchinCandidate.battleMon.ability;
- u32 holdEffect = gItemsInfo[AI_DATA->switchinCandidate.battleMon.item].holdEffect;
+ u32 holdEffect = ItemId_GetHoldEffect(AI_DATA->switchinCandidate.battleMon.item);
// Items
if (ability != ABILITY_MAGIC_GUARD && ability != ABILITY_KLUTZ)
{
- 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)
@@ -1455,9 +1529,9 @@ 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 = gItemsInfo[AI_DATA->switchinCandidate.battleMon.item].holdEffect;
+ u16 heldItemEffect = ItemId_GetHoldEffect(AI_DATA->switchinCandidate.battleMon.item);
u32 status = AI_DATA->switchinCandidate.battleMon.status1, ability = AI_DATA->switchinCandidate.battleMon.ability, maxHP = AI_DATA->switchinCandidate.battleMon.maxHP;
u32 statusDamage = 0;
@@ -1495,9 +1569,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;
}
}
@@ -1535,8 +1609,8 @@ static u32 GetSwitchinHitsToKO(s32 damageTaken, u32 battler)
u32 recurringHealing = GetSwitchinRecurringHealing();
u32 statusDamage = GetSwitchinStatusDamage(battler);
u32 hitsToKO = 0, singleUseItemHeal = 0;
- u16 maxHP = AI_DATA->switchinCandidate.battleMon.maxHP, item = AI_DATA->switchinCandidate.battleMon.item, heldItemEffect = gItemsInfo[item].holdEffect;
- u8 weatherDuration = gWishFutureKnock.weatherDuration, holdEffectParam = gItemsInfo[item].holdEffectParam;
+ u16 maxHP = AI_DATA->switchinCandidate.battleMon.maxHP, item = AI_DATA->switchinCandidate.battleMon.item, heldItemEffect = ItemId_GetHoldEffect(item);
+ u8 weatherDuration = gWishFutureKnock.weatherDuration, holdEffectParam = ItemId_GetHoldEffectParam(item);
u32 opposingBattler = GetBattlerAtPosition(BATTLE_OPPOSITE(GetBattlerPosition(battler)));
u32 opposingAbility = gBattleMons[opposingBattler].ability;
bool32 usedSingleUseHealingItem = FALSE;
@@ -1637,7 +1711,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)));
@@ -1683,7 +1757,7 @@ static s32 GetMaxDamagePlayerCouldDealToSwitchin(u32 battler, u32 opposingBattle
playerMove = gBattleMons[opposingBattler].moves[i];
if (playerMove != MOVE_NONE && gMovesInfo[playerMove].power != 0)
{
- damageTaken = AI_CalcPartyMonDamage(playerMove, opposingBattler, battler, battleMon, FALSE);
+ damageTaken = AI_CalcPartyMonDamage(playerMove, opposingBattler, battler, battleMon, FALSE, DMG_ROLL_HIGHEST);
if (damageTaken > maxDamageTaken)
maxDamageTaken = damageTaken;
}
@@ -1691,6 +1765,25 @@ static s32 GetMaxDamagePlayerCouldDealToSwitchin(u32 battler, u32 opposingBattle
return maxDamageTaken;
}
+static bool32 CanAbilityTrapOpponent(u16 ability, u32 opponent)
+{
+ if ((B_GHOSTS_ESCAPE >= GEN_6 && IS_BATTLER_OF_TYPE(opponent, TYPE_GHOST)))
+ return FALSE;
+ else if (ability == ABILITY_SHADOW_TAG)
+ {
+ if (B_SHADOW_TAG_ESCAPE >= GEN_4 && AI_DATA->abilities[opponent] == ABILITY_SHADOW_TAG) // Check if ability exists in species
+ return FALSE;
+ else
+ return TRUE;
+ }
+ else if (ability == ABILITY_ARENA_TRAP && IsBattlerGrounded(opponent))
+ return TRUE;
+ else if (ability == ABILITY_MAGNET_PULL && IS_BATTLER_OF_TYPE(opponent, TYPE_STEEL))
+ return TRUE;
+ else
+ return FALSE;
+}
+
// This function splits switching behaviour mid-battle from after a KO.
// Mid battle, it integrates GetBestMonTypeMatchup (vanilla with modifications), GetBestMonDefensive (custom), and GetBestMonBatonPass (vanilla with modifications)
// After a KO, integrates GetBestMonRevengeKiller (custom), GetBestMonTypeMatchup (vanilla with modifications), GetBestMonBatonPass (vanilla with modifications), and GetBestMonDmg (vanilla)
@@ -1701,20 +1794,20 @@ static s32 GetMaxDamagePlayerCouldDealToSwitchin(u32 battler, u32 opposingBattle
// the Most Damage code will prioritize switching into whatever mon deals the most damage, which is generally not as good as having a good Type Matchup
// Everything runs in the same loop to minimize computation time. This makes it harder to read, but hopefully the comments can guide you!
-static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, u32 battler, u32 opposingBattler, u8 battlerIn1, u8 battlerIn2, bool32 isSwitchAfterKO)
+static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId, u32 battler, u32 opposingBattler, u32 battlerIn1, u32 battlerIn2, bool32 isSwitchAfterKO)
{
int revengeKillerId = PARTY_SIZE, slowRevengeKillerId = PARTY_SIZE, fastThreatenId = PARTY_SIZE, slowThreatenId = PARTY_SIZE, damageMonId = PARTY_SIZE;
- int batonPassId = PARTY_SIZE, typeMatchupId = PARTY_SIZE, typeMatchupEffectiveId = PARTY_SIZE, defensiveMonId = PARTY_SIZE, aceMonId = PARTY_SIZE;
+ int batonPassId = PARTY_SIZE, typeMatchupId = PARTY_SIZE, typeMatchupEffectiveId = PARTY_SIZE, defensiveMonId = PARTY_SIZE, aceMonId = PARTY_SIZE, trapperId = PARTY_SIZE;
int i, j, aliveCount = 0, bits = 0;
s32 defensiveMonHitKOThreshold = 3; // 3HKO threshold that candidate defensive mons must exceed
- u32 aiMove, hitsToKO, hitsToKOThreshold, maxHitsToKO = 0;
- s32 playerMonSpeed = gBattleMons[opposingBattler].speed, playerMonHP = gBattleMons[opposingBattler].hp, aiMonSpeed, maxDamageDealt = 0, damageDealt = 0;
+ u32 aiMove, hitsToKOAI, hitsToKOPlayer, hitsToKOAIThreshold, maxHitsToKO = 0;
+ s32 playerMonSpeed = gBattleMons[opposingBattler].speed, playerMonHP = gBattleMons[opposingBattler].hp, aiMonSpeed, aiMovePriority = 0, maxDamageDealt = 0, damageDealt = 0;
u16 bestResist = UQ_4_12(1.0), bestResistEffective = UQ_4_12(1.0), typeMatchup;
if (isSwitchAfterKO)
- hitsToKOThreshold = 1; // After a KO, mons at minimum need to not be 1-shot, as they switch in for free
+ hitsToKOAIThreshold = 1; // After a KO, mons at minimum need to not be 1-shot, as they switch in for free
else
- hitsToKOThreshold = 2; // When switching in otherwise need to not be 2-shot, as they do not switch in for free
+ hitsToKOAIThreshold = 2; // When switching in otherwise need to not be 2-shot, as they do not switch in for free
// Iterate through mons
for (i = firstId; i < lastId; i++)
@@ -1739,17 +1832,17 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId,
InitializeSwitchinCandidate(&party[i]);
- // While not really invalid per say, not really wise to switch into this mon
+ // While not really invalid per se, not really wise to switch into this mon
if (AI_DATA->switchinCandidate.battleMon.ability == ABILITY_TRUANT && IsTruantMonVulnerable(battler, opposingBattler))
continue;
// Get max number of hits for player to KO AI mon
- hitsToKO = GetSwitchinHitsToKO(GetMaxDamagePlayerCouldDealToSwitchin(battler, opposingBattler, AI_DATA->switchinCandidate.battleMon), battler);
+ hitsToKOAI = GetSwitchinHitsToKO(GetMaxDamagePlayerCouldDealToSwitchin(battler, opposingBattler, AI_DATA->switchinCandidate.battleMon), battler);
// Track max hits to KO and set GetBestMonDefensive if applicable
- if(hitsToKO > maxHitsToKO)
+ if(hitsToKOAI > maxHitsToKO)
{
- maxHitsToKO = hitsToKO;
+ maxHitsToKO = hitsToKOAI;
if(maxHitsToKO > defensiveMonHitKOThreshold)
defensiveMonId = i;
}
@@ -1759,7 +1852,7 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId,
// Check that good type matchups gets at least two turns and set GetBestMonTypeMatchup if applicable
if (typeMatchup < bestResist)
{
- if ((hitsToKO > hitsToKOThreshold && AI_DATA->switchinCandidate.battleMon.speed > playerMonSpeed) || hitsToKO > hitsToKOThreshold + 1) // Need to take an extra hit if slower
+ if ((hitsToKOAI > hitsToKOAIThreshold && AI_DATA->switchinCandidate.battleMon.speed > playerMonSpeed) || hitsToKOAI > hitsToKOAIThreshold + 1) // Need to take an extra hit if slower
{
bestResist = typeMatchup;
typeMatchupId = i;
@@ -1772,13 +1865,19 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId,
for (j = 0; j < MAX_MON_MOVES; j++)
{
aiMove = AI_DATA->switchinCandidate.battleMon.moves[j];
+ aiMovePriority = gMovesInfo[aiMove].priority;
// Only do damage calc if switching after KO, don't need it otherwise and saves ~0.02s per turn
if (isSwitchAfterKO && aiMove != MOVE_NONE && gMovesInfo[aiMove].power != 0)
- damageDealt = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, AI_DATA->switchinCandidate.battleMon, TRUE);
+ {
+ if (AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_CONSERVATIVE)
+ damageDealt = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, AI_DATA->switchinCandidate.battleMon, TRUE, DMG_ROLL_LOWEST);
+ else
+ damageDealt = AI_CalcPartyMonDamage(aiMove, battler, opposingBattler, AI_DATA->switchinCandidate.battleMon, TRUE, DMG_ROLL_DEFAULT);
+ }
// Check for Baton Pass; hitsToKO requirements mean mon can boost and BP without dying whether it's slower or not
- if (aiMove == MOVE_BATON_PASS && ((hitsToKO > hitsToKOThreshold + 1 && AI_DATA->switchinCandidate.battleMon.speed < playerMonSpeed) || (hitsToKO > hitsToKOThreshold && AI_DATA->switchinCandidate.battleMon.speed > playerMonSpeed)))
+ 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];
// Check for mon with resistance and super effective move for GetBestMonTypeMatchup
@@ -1789,7 +1888,7 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId,
if (AI_GetTypeEffectiveness(aiMove, battler, opposingBattler) >= UQ_4_12(2.0))
{
// Assuming a super effective move would do significant damage or scare the player out, so not being as conservative here
- if (hitsToKO > hitsToKOThreshold)
+ if (hitsToKOAI > hitsToKOAIThreshold)
{
bestResistEffective = typeMatchup;
typeMatchupEffectiveId = i;
@@ -1804,7 +1903,7 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId,
// Check that mon isn't one shot and set GetBestMonDmg if applicable
if (damageDealt > maxDamageDealt)
{
- if(hitsToKO > hitsToKOThreshold)
+ if(hitsToKOAI > hitsToKOAIThreshold)
{
maxDamageDealt = damageDealt;
damageMonId = i;
@@ -1815,18 +1914,21 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId,
// If AI mon can one shot
if (damageDealt > playerMonHP)
{
- // If AI mon is faster and doesn't die to hazards
- if ((aiMonSpeed > playerMonSpeed || gMovesInfo[aiMove].priority > 0) && AI_DATA->switchinCandidate.battleMon.hp > GetSwitchinHazardsDamage(battler, &AI_DATA->switchinCandidate.battleMon))
+ // If AI mon outspeeds and doesn't die to hazards
+ if ((((aiMonSpeed > playerMonSpeed && !(gFieldStatuses & STATUS_FIELD_TRICK_ROOM)) || aiMovePriority > 0) // Outspeed if not Trick Room
+ || ((gFieldStatuses & STATUS_FIELD_TRICK_ROOM) // Trick Room
+ && (aiMonSpeed < playerMonSpeed || (ItemId_GetHoldEffect(AI_DATA->switchinCandidate.battleMon.item) == HOLD_EFFECT_ROOM_SERVICE && aiMonSpeed * 2 / 3 < playerMonSpeed)))) // Trick Room speeds
+ && AI_DATA->switchinCandidate.battleMon.hp > GetSwitchinHazardsDamage(battler, &AI_DATA->switchinCandidate.battleMon)) // Hazards
{
// We have a revenge killer
revengeKillerId = i;
}
- // If AI mon is slower
+ // If AI mon is outsped
else
{
// If AI mon can't be OHKO'd
- if (hitsToKO > hitsToKOThreshold)
+ if (hitsToKOAI > hitsToKOAIThreshold)
{
// We have a slow revenge killer
slowRevengeKillerId = i;
@@ -1837,27 +1939,41 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId,
// If AI mon can two shot
if (damageDealt > playerMonHP / 2)
{
- // If AI mon is faster
- if (aiMonSpeed > playerMonSpeed || gMovesInfo[aiMove].priority > 0)
+ // If AI mon outspeeds
+ if (((aiMonSpeed > playerMonSpeed && !(gFieldStatuses & STATUS_FIELD_TRICK_ROOM)) || aiMovePriority > 0) // Outspeed if not Trick Room
+ || (((gFieldStatuses & STATUS_FIELD_TRICK_ROOM) && gFieldTimers.trickRoomTimer > 1) // Trick Room has at least 2 turns left
+ && (aiMonSpeed < playerMonSpeed || (ItemId_GetHoldEffect(AI_DATA->switchinCandidate.battleMon.item) == HOLD_EFFECT_ROOM_SERVICE && aiMonSpeed * 2/ 3 < playerMonSpeed)))) // Trick Room speeds
{
// If AI mon can't be OHKO'd
- if (hitsToKO > hitsToKOThreshold)
+ if (hitsToKOAI > hitsToKOAIThreshold)
{
// We have a fast threaten
fastThreatenId = i;
}
}
- // If AI mon is slower
+ // If AI mon is outsped
else
{
// If AI mon can't be 2HKO'd
- if (hitsToKO > hitsToKOThreshold + 1)
+ if (hitsToKOAI > hitsToKOAIThreshold + 1)
{
// We have a slow threaten
slowThreatenId = i;
}
}
}
+
+ // If mon can trap
+ if (CanAbilityTrapOpponent(AI_DATA->switchinCandidate.battleMon.ability, opposingBattler))
+ {
+ hitsToKOPlayer = GetNoOfHitsToKOBattlerDmg(damageDealt, opposingBattler);
+ if (CountUsablePartyMons(opposingBattler) > 0
+ && (((hitsToKOAI > hitsToKOPlayer && isSwitchAfterKO) // If can 1v1 after a KO
+ || (hitsToKOAI == hitsToKOPlayer && isSwitchAfterKO && (aiMonSpeed > playerMonSpeed || aiMovePriority > 0)))
+ || ((hitsToKOAI > hitsToKOPlayer + 1 && !isSwitchAfterKO) // If can 1v1 after mid battle
+ || (hitsToKOAI == hitsToKOPlayer + 1 && !isSwitchAfterKO && (aiMonSpeed > playerMonSpeed || aiMovePriority > 0)))))
+ trapperId = i;
+ }
}
}
}
@@ -1867,59 +1983,59 @@ static u32 GetBestMonIntegrated(struct Pokemon *party, int firstId, int lastId,
// Different switching priorities depending on switching mid battle vs switching after a KO
if (isSwitchAfterKO)
{
- // Return GetBestMonRevengeKiller > GetBestMonTypeMatchup > GetBestMonBatonPass > GetBestMonDmg
- if (revengeKillerId != PARTY_SIZE)
- return revengeKillerId;
-
- else if (slowRevengeKillerId != PARTY_SIZE)
- return slowRevengeKillerId;
-
- else if (fastThreatenId != PARTY_SIZE)
- return fastThreatenId;
-
- else if (slowThreatenId != PARTY_SIZE)
- return slowThreatenId;
-
- else if (typeMatchupEffectiveId != PARTY_SIZE)
- return typeMatchupEffectiveId;
-
- else if (typeMatchupId != PARTY_SIZE)
- return typeMatchupId;
-
- else if (batonPassId != PARTY_SIZE)
- return batonPassId;
-
- else if (damageMonId != PARTY_SIZE)
- return damageMonId;
+ // Return Trapper > Revenge Killer > Type Matchup > Baton Pass > Best Damage
+ if (trapperId != PARTY_SIZE) return trapperId;
+ else if (revengeKillerId != PARTY_SIZE) return revengeKillerId;
+ else if (slowRevengeKillerId != PARTY_SIZE) return slowRevengeKillerId;
+ else if (fastThreatenId != PARTY_SIZE) return fastThreatenId;
+ else if (slowThreatenId != PARTY_SIZE) return slowThreatenId;
+ else if (typeMatchupEffectiveId != PARTY_SIZE) return typeMatchupEffectiveId;
+ else if (typeMatchupId != PARTY_SIZE) return typeMatchupId;
+ else if (batonPassId != PARTY_SIZE) return batonPassId;
+ else if (damageMonId != PARTY_SIZE) return damageMonId;
}
else
{
- // Return GetBestMonTypeMatchup > GetBestMonDefensive > GetBestMonBatonPass
- if (typeMatchupEffectiveId != PARTY_SIZE)
- return typeMatchupEffectiveId;
-
- else if (typeMatchupId != PARTY_SIZE)
- return typeMatchupId;
-
- else if (defensiveMonId != PARTY_SIZE)
- return defensiveMonId;
+ // Return Trapper > Type Matchup > Best Defensive > Baton Pass
+ if (trapperId != PARTY_SIZE) return trapperId;
+ else if (typeMatchupEffectiveId != PARTY_SIZE) return typeMatchupEffectiveId;
+ else if (typeMatchupId != PARTY_SIZE) return typeMatchupId;
+ else if (defensiveMonId != PARTY_SIZE) return defensiveMonId;
+ else if (batonPassId != PARTY_SIZE) return batonPassId;
+ }
+ // If ace mon is the last available Pokemon and U-Turn/Volt Switch was used - switch to the mon.
+ if (aceMonId != PARTY_SIZE
+ && (gMovesInfo[gLastUsedMove].effect == EFFECT_HIT_ESCAPE || gMovesInfo[gLastUsedMove].effect == EFFECT_PARTING_SHOT || gMovesInfo[gLastUsedMove].effect == EFFECT_BATON_PASS))
+ return aceMonId;
- else if (batonPassId != PARTY_SIZE)
- return batonPassId;
+ return PARTY_SIZE;
+}
- // If ace mon is the last available Pokemon and U-Turn/Volt Switch was used - switch to the mon.
- else if (aceMonId != PARTY_SIZE
- && (gMovesInfo[gLastUsedMove].effect == EFFECT_HIT_ESCAPE || gMovesInfo[gLastUsedMove].effect == EFFECT_PARTING_SHOT))
- return aceMonId;
+static u32 GetNextMonInParty(struct Pokemon *party, int firstId, int lastId, u32 battlerIn1, u32 battlerIn2)
+{
+ u32 i;
+ // Iterate through mons
+ for (i = firstId; i < lastId; i++)
+ {
+ // Check mon validity
+ if (!IsValidForBattle(&party[i])
+ || gBattlerPartyIndexes[battlerIn1] == i
+ || gBattlerPartyIndexes[battlerIn2] == i
+ || i == gBattleStruct->monToSwitchIntoId[battlerIn1]
+ || i == gBattleStruct->monToSwitchIntoId[battlerIn2])
+ {
+ continue;
+ }
+ return i;
}
return PARTY_SIZE;
}
-u8 GetMostSuitableMonToSwitchInto(u32 battler, bool32 switchAfterMonKOd)
+u32 GetMostSuitableMonToSwitchInto(u32 battler, bool32 switchAfterMonKOd)
{
u32 opposingBattler = 0;
u32 bestMonId = PARTY_SIZE;
- u8 battlerIn1 = 0, battlerIn2 = 0;
+ u32 battlerIn1 = 0, battlerIn2 = 0;
s32 firstId = 0;
s32 lastId = 0; // + 1
struct Pokemon *party;
@@ -1955,6 +2071,12 @@ u8 GetMostSuitableMonToSwitchInto(u32 battler, bool32 switchAfterMonKOd)
else
party = gEnemyParty;
+ if (AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_SEQUENCE_SWITCHING)
+ {
+ bestMonId = GetNextMonInParty(party, firstId, lastId, battlerIn1, battlerIn2);
+ return bestMonId;
+ }
+
// Split ideal mon decision between after previous mon KO'd (prioritize offensive options) and after switching active mon out (prioritize defensive options), and expand the scope of both.
// Only use better mon selection if AI_FLAG_SMART_MON_CHOICES is set for the trainer.
if (AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_SMART_MON_CHOICES && !(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) // Double Battles aren't included in AI_FLAG_SMART_MON_CHOICE. Defaults to regular switch in logic
@@ -1976,7 +2098,7 @@ u8 GetMostSuitableMonToSwitchInto(u32 battler, bool32 switchAfterMonKOd)
|| gBattlerPartyIndexes[battlerIn2] == i
|| i == gBattleStruct->monToSwitchIntoId[battlerIn1]
|| i == gBattleStruct->monToSwitchIntoId[battlerIn2]
- || (GetMonAbility(&party[i]) == ABILITY_TRUANT && IsTruantMonVulnerable(battler, opposingBattler))) // While not really invalid per say, not really wise to switch into this mon.)
+ || (GetMonAbility(&party[i]) == ABILITY_TRUANT && IsTruantMonVulnerable(battler, opposingBattler))) // While not really invalid per se, not really wise to switch into this mon.)
{
invalidMons |= gBitTable[i];
}
@@ -2019,7 +2141,7 @@ static bool32 AiExpectsToFaintPlayer(u32 battler)
if (GetBattlerSide(target) != GetBattlerSide(battler)
&& CanIndexMoveFaintTarget(battler, target, gBattleStruct->aiMoveOrAction[battler], 0)
- && AI_WhoStrikesFirst(battler, target, GetAIChosenMove(battler)) == AI_IS_FASTER)
+ && AI_IsFaster(battler, target, GetAIChosenMove(battler)))
{
// We expect to faint the target and move first -> dont use an item
return TRUE;
diff --git a/src/battle_ai_util.c b/src/battle_ai_util.c
index b57d474bb8ed..08e05e02c1de 100644
--- a/src/battle_ai_util.c
+++ b/src/battle_ai_util.c
@@ -35,6 +35,16 @@
static u32 AI_GetEffectiveness(uq4_12_t multiplier);
// Functions
+bool32 AI_IsFaster(u32 battlerAi, u32 battlerDef, u32 move)
+{
+ return (AI_WhoStrikesFirst(battlerAi, battlerDef, move) == AI_IS_FASTER);
+}
+
+bool32 AI_IsSlower(u32 battlerAi, u32 battlerDef, u32 move)
+{
+ return (AI_WhoStrikesFirst(battlerAi, battlerDef, move) == AI_IS_SLOWER);
+}
+
u32 GetAIChosenMove(u32 battlerId)
{
return (gBattleMons[battlerId].moves[gBattleStruct->aiMoveOrAction[battlerId]]);
@@ -143,10 +153,11 @@ void ClearBattlerItemEffectHistory(u32 battlerId)
void SaveBattlerData(u32 battlerId)
{
- if (!BattlerHasAi(battlerId))
+ if (!BattlerHasAi(battlerId) && !AI_THINKING_STRUCT->saved[battlerId].saved)
{
u32 i;
+ AI_THINKING_STRUCT->saved[battlerId].saved = TRUE;
AI_THINKING_STRUCT->saved[battlerId].ability = gBattleMons[battlerId].ability;
AI_THINKING_STRUCT->saved[battlerId].heldItem = gBattleMons[battlerId].item;
AI_THINKING_STRUCT->saved[battlerId].species = gBattleMons[battlerId].species;
@@ -154,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)
@@ -196,7 +207,7 @@ static bool32 ShouldFailForIllusion(u32 illusionSpecies, u32 battlerId)
void SetBattlerData(u32 battlerId)
{
- if (!BattlerHasAi(battlerId))
+ if (!BattlerHasAi(battlerId) && AI_THINKING_STRUCT->saved[battlerId].saved)
{
u32 i, species, illusionSpecies, side;
side = GetBattlerSide(battlerId);
@@ -207,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;
}
@@ -240,18 +251,19 @@ void SetBattlerData(u32 battlerId)
void RestoreBattlerData(u32 battlerId)
{
- if (!BattlerHasAi(battlerId))
+ if (!BattlerHasAi(battlerId) && AI_THINKING_STRUCT->saved[battlerId].saved)
{
u32 i;
+ AI_THINKING_STRUCT->saved[battlerId].saved = FALSE;
gBattleMons[battlerId].ability = AI_THINKING_STRUCT->saved[battlerId].ability;
gBattleMons[battlerId].item = AI_THINKING_STRUCT->saved[battlerId].heldItem;
gBattleMons[battlerId].species = AI_THINKING_STRUCT->saved[battlerId].species;
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)
@@ -274,7 +286,7 @@ bool32 IsBattlerTrapped(u32 battler, bool32 checkSwitch)
return FALSE;
if (checkSwitch && holdEffect == HOLD_EFFECT_SHED_SHELL)
return FALSE;
- else if (!checkSwitch && GetBattlerAbility(battler) == ABILITY_RUN_AWAY)
+ else if (!checkSwitch && AI_DATA->abilities[battler] == ABILITY_RUN_AWAY)
return FALSE;
else if (!checkSwitch && holdEffect == HOLD_EFFECT_CAN_ALWAYS_RUN)
return FALSE;
@@ -309,7 +321,7 @@ bool32 IsTruantMonVulnerable(u32 battlerAI, u32 opposingBattler)
u32 move = gBattleResources->battleHistory->usedMoves[opposingBattler][i];
if (gMovesInfo[move].effect == EFFECT_PROTECT && move != MOVE_ENDURE)
return TRUE;
- if (gMovesInfo[move].effect == EFFECT_SEMI_INVULNERABLE && AI_WhoStrikesFirst(battlerAI, opposingBattler, GetAIChosenMove(battlerAI)) == AI_IS_SLOWER)
+ if (gMovesInfo[move].effect == EFFECT_SEMI_INVULNERABLE && AI_IsSlower(battlerAI, opposingBattler, GetAIChosenMove(battlerAI)))
return TRUE;
}
return FALSE;
@@ -352,16 +364,36 @@ bool32 MovesWithCategoryUnusable(u32 attacker, u32 target, u32 category)
}
// To save computation time this function has 2 variants. One saves, sets and restores battlers, while the other doesn't.
-s32 AI_CalcDamageSaveBattlers(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectiveness, bool32 considerZPower)
+struct SimulatedDamage AI_CalcDamageSaveBattlers(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectiveness, bool32 considerZPower, enum DamageRollType rollType)
{
+ struct SimulatedDamage dmg;
SaveBattlerData(battlerAtk);
SaveBattlerData(battlerDef);
- return AI_CalcDamage(move, battlerAtk, battlerDef, typeEffectiveness, considerZPower, AI_GetWeather(AI_DATA));
+ SetBattlerData(battlerAtk);
+ SetBattlerData(battlerDef);
+ dmg = AI_CalcDamage(move, battlerAtk, battlerDef, typeEffectiveness, considerZPower, AI_GetWeather(AI_DATA), rollType);
+ RestoreBattlerData(battlerAtk);
+ RestoreBattlerData(battlerDef);
+ return dmg;
}
static inline s32 LowestRollDmg(s32 dmg)
{
- dmg *= 100 - 15;
+ dmg *= MIN_ROLL_PERCENTAGE;
+ dmg /= 100;
+ return dmg;
+}
+
+static inline s32 HighestRollDmg(s32 dmg)
+{
+ dmg *= MAX_ROLL_PERCENTAGE;
+ dmg /= 100;
+ return dmg;
+}
+
+static inline s32 DmgRoll(s32 dmg)
+{
+ dmg *= DMG_ROLL_PERCENTAGE;
dmg /= 100;
return dmg;
}
@@ -378,10 +410,8 @@ bool32 IsDamageMoveUnusable(u32 move, u32 battlerAtk, u32 battlerDef)
else
battlerDefAbility = aiData->abilities[battlerDef];
- // Battler doesn't see partners Ability for some reason.
- // This is a small hack to avoid the issue but should be investigated
if (battlerDef == BATTLE_PARTNER(battlerAtk))
- battlerDefAbility = GetBattlerAbility(battlerDef);
+ battlerDefAbility = aiData->abilities[battlerDef];
switch (battlerDefAbility)
{
@@ -441,7 +471,7 @@ bool32 IsDamageMoveUnusable(u32 move, u32 battlerAtk, u32 battlerDef)
break;
case EFFECT_LOW_KICK:
case EFFECT_HEAT_CRASH:
- if (IsDynamaxed(battlerDef))
+ if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX)
return TRUE;
break;
case EFFECT_FAIL_IF_NOT_ARG_TYPE:
@@ -453,40 +483,66 @@ 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:
if (!gDisableStructs[battlerAtk].isFirstTurn)
return TRUE;
break;
+ case EFFECT_FOCUS_PUNCH:
+ if (HasDamagingMove(battlerDef) && !((gBattleMons[battlerAtk].status2 & STATUS2_SUBSTITUTE)
+ || IsBattlerIncapacitated(battlerDef, aiData->abilities[battlerDef])
+ || gBattleMons[battlerDef].status2 & (STATUS2_INFATUATION | STATUS2_CONFUSION)))
+ // TODO: || IsPredictedToSwitch(battlerDef, battlerAtk)
+ return TRUE;
+ // If AI could Sub and doesn't have a Sub, don't Punch yet
+ if (HasMoveEffect(battlerAtk, EFFECT_SUBSTITUTE) && !(gBattleMons[battlerAtk].status2 & STATUS2_SUBSTITUTE))
+ return TRUE;
+ break;
}
return FALSE;
}
-s32 AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectiveness, bool32 considerZPower, u32 weather)
+static inline s32 GetDamageByRollType(s32 dmg, enum DamageRollType rollType)
{
- s32 dmg, moveType;
+ if (rollType == DMG_ROLL_LOWEST)
+ return LowestRollDmg(dmg);
+ else if (rollType == DMG_ROLL_HIGHEST)
+ return HighestRollDmg(dmg);
+ else
+ return DmgRoll(dmg);
+}
+
+struct SimulatedDamage AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectiveness, bool32 considerZPower, u32 weather, enum DamageRollType rollType)
+{
+ struct SimulatedDamage simDamage;
+ s32 moveType;
uq4_12_t effectivenessMultiplier;
bool32 isDamageMoveUnusable = FALSE;
+ bool32 toggledGimmick = FALSE;
struct AiLogicData *aiData = AI_DATA;
+ gBattleStruct->aiCalcInProgress = TRUE;
- SetBattlerData(battlerAtk);
- SetBattlerData(battlerDef);
-
- if (considerZPower && IsViableZMove(battlerAtk, move))
+ // Temporarily enable gimmicks for damage calcs if planned
+ if (gBattleStruct->gimmick.usableGimmick[battlerAtk] && GetActiveGimmick(battlerAtk) == GIMMICK_NONE
+ && !(gBattleStruct->gimmick.usableGimmick[battlerAtk] == GIMMICK_Z_MOVE && !considerZPower))
{
- //temporarily enable z moves for damage calcs
- gBattleStruct->zmove.baseMoves[battlerAtk] = move;
- gBattleStruct->zmove.active = TRUE;
+ // Set Z-Move variables if needed
+ if (gBattleStruct->gimmick.usableGimmick[battlerAtk] == GIMMICK_Z_MOVE && IsViableZMove(battlerAtk, move))
+ gBattleStruct->zmove.baseMoves[battlerAtk] = move;
+
+ toggledGimmick = TRUE;
+ SetActiveGimmick(battlerAtk, gBattleStruct->gimmick.usableGimmick[battlerAtk]);
}
- else if (gMovesInfo[move].effect == EFFECT_PHOTON_GEYSER)
- gBattleStruct->swapDamageCategory = (GetCategoryBasedOnStats(gBattlerAttacker) == DAMAGE_CATEGORY_PHYSICAL);
- else if (move == MOVE_SHELL_SIDE_ARM && gBattleStruct->shellSideArmCategory[battlerAtk][battlerDef] == DAMAGE_CATEGORY_PHYSICAL)
- gBattleStruct->swapDamageCategory = TRUE;
+
+ 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();
+ move = GetNaturePowerMove(battlerAtk);
gBattleStruct->dynamicMoveType = 0;
@@ -499,7 +555,7 @@ s32 AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectivenes
if (gMovesInfo[move].power && !isDamageMoveUnusable)
{
- s32 critChanceIndex, normalDmg, fixedBasePower, n;
+ s32 critChanceIndex, fixedBasePower, n;
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.
@@ -516,63 +572,110 @@ s32 AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectivenes
fixedBasePower = 0;
break;
}
- normalDmg = CalculateMoveDamageVars(move, battlerAtk, battlerDef, moveType, fixedBasePower,
- effectivenessMultiplier, weather, FALSE,
- aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef],
- aiData->abilities[battlerAtk], aiData->abilities[battlerDef]);
critChanceIndex = CalcCritChanceStageArgs(battlerAtk, battlerDef, move, FALSE, aiData->abilities[battlerAtk], aiData->abilities[battlerDef], aiData->holdEffects[battlerAtk]);
if (critChanceIndex > 1) // Consider crit damage only if a move has at least +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]);
s32 critDmg = CalculateMoveDamageVars(move, battlerAtk, battlerDef, moveType, fixedBasePower,
- effectivenessMultiplier, weather, TRUE,
- aiData->holdEffects[battlerAtk], aiData->holdEffects[battlerDef],
- aiData->abilities[battlerAtk], aiData->abilities[battlerDef]);
- u32 critOdds = GetCritHitOdds(critChanceIndex); // Crit chance is 1/critOdds
+ 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.
- dmg = LowestRollDmg((critDmg + normalDmg * (critOdds - 1)) / (critOdds));
+ simDamage.expected = GetDamageByRollType((critDmg + nonCritDmg * (critOdds - 1)) / critOdds, rollType);
+ if (critOdds == 1)
+ simDamage.minimum = LowestRollDmg(critDmg);
+ else
+ simDamage.minimum = LowestRollDmg(nonCritDmg);
}
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]);
- dmg = LowestRollDmg(critDmg);
+ 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
{
- dmg = LowestRollDmg(normalDmg);
+ s32 nonCritDmg = 0;
+ if (gMovesInfo[move].effect == 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);
}
- if (!gBattleStruct->zmove.active)
+ if (GetActiveGimmick(battlerAtk) != GIMMICK_Z_MOVE)
{
// Handle dynamic move damage
switch (gMovesInfo[move].effect)
{
case EFFECT_LEVEL_DAMAGE:
+ simDamage.expected = simDamage.minimum = gBattleMons[battlerAtk].level * (aiData->abilities[battlerAtk] == ABILITY_PARENTAL_BOND ? 2 : 1);
+ break;
case EFFECT_PSYWAVE:
- dmg = gBattleMons[battlerAtk].level * (aiData->abilities[battlerAtk] == ABILITY_PARENTAL_BOND ? 2 : 1);
+ simDamage.expected = gBattleMons[battlerAtk].level * (aiData->abilities[battlerAtk] == ABILITY_PARENTAL_BOND ? 2 : 1);
+ simDamage.minimum = simDamage.expected / 2;
break;
case EFFECT_FIXED_DAMAGE_ARG:
- dmg = gMovesInfo[move].argument * (aiData->abilities[battlerAtk] == ABILITY_PARENTAL_BOND ? 2 : 1);
+ simDamage.expected = simDamage.minimum = gMovesInfo[move].argument * (aiData->abilities[battlerAtk] == ABILITY_PARENTAL_BOND ? 2 : 1);
break;
case EFFECT_MULTI_HIT:
- dmg *= (aiData->abilities[battlerAtk] == ABILITY_SKILL_LINK
- && !(move == MOVE_WATER_SHURIKEN && gBattleMons[battlerAtk].species == SPECIES_GRENINJA_ASH)
- ? 5 : 3);
+ if (move == MOVE_WATER_SHURIKEN && gBattleMons[battlerAtk].species == SPECIES_GRENINJA_ASH)
+ {
+ simDamage.expected *= 3;
+ simDamage.minimum *= 3;
+ }
+ else if (aiData->abilities[battlerAtk] == ABILITY_SKILL_LINK)
+ {
+ simDamage.expected *= 5;
+ simDamage.minimum *= 5;
+ }
+ else if (aiData->holdEffects[battlerAtk] == HOLD_EFFECT_LOADED_DICE)
+ {
+ simDamage.expected *= 9;
+ simDamage.expected /= 2;
+ simDamage.minimum *= 4;
+ }
+ else
+ {
+ simDamage.expected *= 3;
+ simDamage.minimum *= 2;
+ }
break;
case EFFECT_ENDEAVOR:
// If target has less HP than user, Endeavor does no damage
- dmg = max(0, gBattleMons[battlerDef].hp - gBattleMons[battlerAtk].hp);
+ simDamage.expected = simDamage.minimum = max(0, gBattleMons[battlerDef].hp - gBattleMons[battlerAtk].hp);
break;
case EFFECT_SUPER_FANG:
- dmg = (aiData->abilities[battlerAtk] == ABILITY_PARENTAL_BOND
+ simDamage.expected = simDamage.minimum = (aiData->abilities[battlerAtk] == ABILITY_PARENTAL_BOND
? max(2, gBattleMons[battlerDef].hp * 3 / 4)
: max(1, gBattleMons[battlerDef].hp / 2));
break;
case EFFECT_FINAL_GAMBIT:
- dmg = gBattleMons[battlerAtk].hp;
+ simDamage.expected = simDamage.minimum = gBattleMons[battlerAtk].hp;
break;
case EFFECT_BEAT_UP:
if (B_BEAT_UP >= GEN_5)
@@ -580,11 +683,12 @@ s32 AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectivenes
u32 partyCount = CalculatePartyCount(GetBattlerParty(battlerAtk));
u32 i;
gBattleStruct->beatUpSlot = 0;
- dmg = 0;
+ simDamage.expected = 0;
for (i = 0; i < partyCount; i++)
{
- dmg += CalculateMoveDamage(move, battlerAtk, battlerDef, moveType, 0, FALSE, FALSE, FALSE);
+ simDamage.expected += CalculateMoveDamage(move, battlerAtk, battlerDef, moveType, 0, FALSE, FALSE, FALSE);
}
+ simDamage.minimum = simDamage.expected;
gBattleStruct->beatUpSlot = 0;
}
break;
@@ -592,28 +696,34 @@ s32 AI_CalcDamage(u32 move, u32 battlerAtk, u32 battlerDef, u8 *typeEffectivenes
// Handle other multi-strike moves
if (gMovesInfo[move].strikeCount > 1 && gMovesInfo[move].effect != EFFECT_TRIPLE_KICK)
- dmg *= gMovesInfo[move].strikeCount;
+ {
+ simDamage.expected *= gMovesInfo[move].strikeCount;
+ simDamage.minimum *= gMovesInfo[move].strikeCount;
+ }
- if (dmg == 0)
- dmg = 1;
+ if (simDamage.expected == 0)
+ simDamage.expected = 1;
+ if (simDamage.minimum == 0)
+ simDamage.minimum = 1;
}
}
else
{
- dmg = 0;
+ simDamage.expected = 0;
+ simDamage.minimum = 0;
}
- RestoreBattlerData(battlerAtk);
- RestoreBattlerData(battlerDef);
-
// convert multiper to AI_EFFECTIVENESS_xX
*typeEffectiveness = AI_GetEffectiveness(effectivenessMultiplier);
+ // Undo temporary settings
+ gBattleStruct->aiCalcInProgress = FALSE;
gBattleStruct->swapDamageCategory = FALSE;
- gBattleStruct->zmove.active = FALSE;
gBattleStruct->zmove.baseMoves[battlerAtk] = MOVE_NONE;
+ if (toggledGimmick)
+ SetActiveGimmick(battlerAtk, GIMMICK_NONE);
- return dmg;
+ return simDamage;
}
bool32 AI_IsDamagedByRecoil(u32 battler)
@@ -760,6 +870,8 @@ static bool32 AI_IsMoveEffectInMinus(u32 battlerAtk, u32 battlerDef, u32 move, s
{
case EFFECT_MAX_HP_50_RECOIL:
case EFFECT_MIND_BLOWN:
+ case EFFECT_EXPLOSION:
+ case EFFECT_FINAL_GAMBIT:
return TRUE;
case EFFECT_RECOIL_IF_MISS:
if (AI_IsDamagedByRecoil(battlerAtk))
@@ -785,7 +897,6 @@ static bool32 AI_IsMoveEffectInMinus(u32 battlerAtk, u32 battlerDef, u32 move, s
case MOVE_EFFECT_SP_DEF_MINUS_2:
case MOVE_EFFECT_EVS_MINUS_2:
case MOVE_EFFECT_ACC_MINUS_2:
- case MOVE_EFFECT_SP_ATK_TWO_DOWN:
case MOVE_EFFECT_V_CREATE:
case MOVE_EFFECT_ATK_DEF_DOWN:
case MOVE_EFFECT_DEF_SPDEF_DOWN:
@@ -872,12 +983,12 @@ u32 GetNoOfHitsToKOBattlerDmg(u32 dmg, u32 battlerDef)
u32 GetNoOfHitsToKOBattler(u32 battlerAtk, u32 battlerDef, u32 moveIndex)
{
- return GetNoOfHitsToKOBattlerDmg(AI_DATA->simulatedDmg[battlerAtk][battlerDef][moveIndex], battlerDef);
+ return GetNoOfHitsToKOBattlerDmg(AI_DATA->simulatedDmg[battlerAtk][battlerDef][moveIndex].expected, battlerDef);
}
u32 GetCurrDamageHpPercent(u32 battlerAtk, u32 battlerDef)
{
- int bestDmg = AI_DATA->simulatedDmg[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex];
+ int bestDmg = AI_DATA->simulatedDmg[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex].expected;
return (bestDmg * 100) / gBattleMons[battlerDef].maxHP;
}
@@ -935,27 +1046,55 @@ static u32 AI_GetEffectiveness(uq4_12_t multiplier)
}
/* Checks to see if AI will move ahead of another battler
+ * The function uses a stripped down version of the checks from GetWhichBattlerFasterArgs
* Output:
* AI_IS_FASTER: is user(ai) faster
* AI_IS_SLOWER: is target faster
*/
-s32 AI_WhoStrikesFirst(u32 battlerAI, u32 battler2, u32 moveConsidered)
+s32 AI_WhoStrikesFirst(u32 battlerAI, u32 battler, u32 moveConsidered)
{
- s8 prioAI = 0;
- s8 prioBattler2 = 0;
- prioAI = GetMovePriority(battlerAI, moveConsidered);
+ u32 speedBattlerAI, speedBattler;
+ u32 holdEffectAI = AI_DATA->holdEffects[battlerAI];
+ u32 holdEffectPlayer = AI_DATA->holdEffects[battler];
+ u32 abilityAI = AI_DATA->abilities[battlerAI];
+ u32 abilityPlayer = AI_DATA->abilities[battler];
- if (prioAI > prioBattler2)
+ if (GetMovePriority(battlerAI, moveConsidered) > 0)
return AI_IS_FASTER;
- if (GetWhichBattlerFasterArgs(battlerAI, battler2, TRUE,
- AI_DATA->abilities[battlerAI], AI_DATA->abilities[battler2],
- AI_DATA->holdEffects[battlerAI], AI_DATA->holdEffects[battler2],
- AI_DATA->speedStats[battlerAI], AI_DATA->speedStats[battler2],
- prioAI, prioBattler2) == 1)
+ speedBattlerAI = GetBattlerTotalSpeedStatArgs(battlerAI, abilityAI, holdEffectAI);
+ speedBattler = GetBattlerTotalSpeedStatArgs(battler, abilityPlayer, holdEffectPlayer);
+
+ if (holdEffectAI == HOLD_EFFECT_LAGGING_TAIL && holdEffectPlayer != HOLD_EFFECT_LAGGING_TAIL)
+ return AI_IS_SLOWER;
+ else if (holdEffectAI != HOLD_EFFECT_LAGGING_TAIL && holdEffectPlayer == HOLD_EFFECT_LAGGING_TAIL)
return AI_IS_FASTER;
- else
+
+ if (abilityAI == ABILITY_STALL && abilityPlayer != ABILITY_STALL)
return AI_IS_SLOWER;
+ else if (abilityAI != ABILITY_STALL && abilityPlayer == ABILITY_STALL)
+ return AI_IS_FASTER;
+
+ if (speedBattlerAI > speedBattler)
+ {
+ if (gFieldStatuses & STATUS_FIELD_TRICK_ROOM)
+ return AI_IS_SLOWER;
+ else
+ return AI_IS_FASTER;
+ }
+ else if (speedBattlerAI == speedBattler)
+ {
+ return AI_IS_FASTER;
+ }
+ else
+ {
+ if (gFieldStatuses & STATUS_FIELD_TRICK_ROOM)
+ return AI_IS_FASTER;
+ else
+ return AI_IS_SLOWER;
+ }
+
+ return AI_IS_SLOWER;
}
// Check if target has means to faint ai mon.
@@ -968,7 +1107,7 @@ 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] >= gBattleMons[battlerAtk].hp)
+ && AI_DATA->simulatedDmg[battlerDef][battlerAtk][i].expected >= gBattleMons[battlerAtk].hp)
{
return TRUE;
}
@@ -1006,15 +1145,36 @@ 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])
- && bestDmg < AI_DATA->simulatedDmg[battlerAtk][battlerDef][i])
+ && bestDmg < AI_DATA->simulatedDmg[battlerAtk][battlerDef][i].expected)
{
- bestDmg = AI_DATA->simulatedDmg[battlerAtk][battlerDef][i];
+ bestDmg = AI_DATA->simulatedDmg[battlerAtk][battlerDef][i].expected;
move = moves[i];
}
}
return move;
}
+u32 GetBestDmgFromBattler(u32 battler, u32 battlerTarget)
+{
+ u32 i;
+ u32 bestDmg = 0;
+ u32 unusable = AI_DATA->moveLimitations[battler];
+ u16 *moves = GetMovesArray(battler);
+
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ if (moves[i] != MOVE_NONE
+ && moves[i] != MOVE_UNAVAILABLE
+ && !(unusable & gBitTable[i])
+ && bestDmg < AI_DATA->simulatedDmg[battler][battlerTarget][i].expected)
+ {
+ bestDmg = AI_DATA->simulatedDmg[battler][battlerTarget][i].expected;
+ }
+ }
+
+ return bestDmg;
+}
+
// Check if AI mon has the means to faint the target with any of its moves.
// If numHits > 1, check if the target will be KO'ed by that number of hits (ignoring healing effects)
bool32 CanAIFaintTarget(u32 battlerAtk, u32 battlerDef, u32 numHits)
@@ -1028,7 +1188,7 @@ bool32 CanAIFaintTarget(u32 battlerAtk, u32 battlerDef, u32 numHits)
if (moves[i] != MOVE_NONE && moves[i] != MOVE_UNAVAILABLE && !(moveLimitations & gBitTable[i]))
{
// Use the pre-calculated value in simulatedDmg instead of re-calculating it
- dmg = AI_DATA->simulatedDmg[battlerAtk][battlerDef][i];
+ dmg = AI_DATA->simulatedDmg[battlerAtk][battlerDef][i].expected;
if (numHits)
dmg *= numHits;
@@ -1046,7 +1206,7 @@ bool32 CanTargetMoveFaintAi(u32 move, u32 battlerDef, u32 battlerAtk, u32 nHits)
u32 indexSlot = GetMoveSlot(GetMovesArray(battlerDef), move);
if (indexSlot < MAX_MON_MOVES)
{
- if (GetNoOfHitsToKO(AI_DATA->simulatedDmg[battlerDef][battlerAtk][indexSlot], gBattleMons[battlerAtk].hp) <= nHits)
+ if (GetNoOfHitsToKO(AI_DATA->simulatedDmg[battlerDef][battlerAtk][indexSlot].expected, gBattleMons[battlerAtk].hp) <= nHits)
return TRUE;
}
return FALSE;
@@ -1066,7 +1226,7 @@ bool32 CanTargetFaintAiWithMod(u32 battlerDef, u32 battlerAtk, s32 hpMod, s32 dm
for (i = 0; i < MAX_MON_MOVES; i++)
{
- dmg = AI_DATA->simulatedDmg[battlerAtk][battlerDef][i];
+ dmg = AI_DATA->simulatedDmg[battlerAtk][battlerDef][i].expected;
if (dmgMod)
dmg *= dmgMod;
@@ -1089,12 +1249,28 @@ bool32 AI_IsAbilityOnSide(u32 battlerId, u32 ability)
return FALSE;
}
+u32 AI_GetBattlerAbility(u32 battler)
+{
+ if (gAbilitiesInfo[gBattleMons[battler].ability].cantBeSuppressed)
+ return gBattleMons[battler].ability;
+
+ if (gStatuses3[battler] & STATUS3_GASTRO_ACID)
+ return ABILITY_NONE;
+
+ if (IsNeutralizingGasOnField()
+ && gBattleMons[battler].ability != ABILITY_NEUTRALIZING_GAS
+ && GetBattlerHoldEffectIgnoreAbility(battler, TRUE) != HOLD_EFFECT_ABILITY_SHIELD)
+ return ABILITY_NONE;
+
+ return gBattleMons[battler].ability;
+}
+
// does NOT include ability suppression checks
s32 AI_DecideKnownAbilityForTurn(u32 battlerId)
{
u32 validAbilities[NUM_ABILITY_SLOTS];
u8 i, numValidAbilities = 0;
- u32 knownAbility = GetBattlerAbility(battlerId);
+ u32 knownAbility = AI_GetBattlerAbility(battlerId);
// We've had ability overwritten by e.g. Worry Seed. It is not part of AI_PARTY in case of switching
if (gBattleStruct->overwrittenAbilities[battlerId])
@@ -1190,7 +1366,7 @@ bool32 DoesBattlerIgnoreAbilityChecks(u32 atkAbility, u32 move)
if (AI_THINKING_STRUCT->aiFlags[sBattler_AI] & AI_FLAG_NEGATE_UNAWARE)
return FALSE; // AI handicap flag: doesn't understand ability suppression concept
- if (IsMoldBreakerTypeAbility(atkAbility) || gMovesInfo[move].ignoresTargetAbility)
+ if (IsMoldBreakerTypeAbility(sBattler_AI, atkAbility) || gMovesInfo[move].ignoresTargetAbility)
return TRUE;
return FALSE;
@@ -1546,7 +1722,7 @@ bool32 ShouldLowerStat(u32 battler, u32 battlerAbility, u32 stat)
return !(battlerAbility == ABILITY_BIG_PECKS);
case STAT_SPEED:
// If AI is faster and doesn't have any mons left, lowering speed doesn't give any
- return !(AI_WhoStrikesFirst(sBattler_AI, battler, AI_THINKING_STRUCT->moveConsidered) == AI_IS_FASTER
+ return !(AI_IsFaster(sBattler_AI, battler, AI_THINKING_STRUCT->moveConsidered)
&& CountUsablePartyMons(sBattler_AI) == 0
&& !HasMoveEffect(sBattler_AI, EFFECT_ELECTRO_BALL));
case STAT_ACC:
@@ -1615,7 +1791,7 @@ u32 CountNegativeStatStages(u32 battlerId)
bool32 ShouldLowerAttack(u32 battlerAtk, u32 battlerDef, u32 defAbility)
{
- if (AI_STRIKES_FIRST(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered)
+ if (AI_IsFaster(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered)
&& (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_TRY_TO_FAINT)
&& CanAIFaintTarget(battlerAtk, battlerDef, 0))
return FALSE; // Don't bother lowering stats if can kill enemy.
@@ -1634,7 +1810,7 @@ bool32 ShouldLowerAttack(u32 battlerAtk, u32 battlerDef, u32 defAbility)
bool32 ShouldLowerDefense(u32 battlerAtk, u32 battlerDef, u32 defAbility)
{
- if (AI_STRIKES_FIRST(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered)
+ if (AI_IsFaster(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered)
&& (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_TRY_TO_FAINT)
&& CanAIFaintTarget(battlerAtk, battlerDef, 0))
return FALSE; // Don't bother lowering stats if can kill enemy.
@@ -1660,12 +1836,12 @@ bool32 ShouldLowerSpeed(u32 battlerAtk, u32 battlerDef, u32 defAbility)
|| AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_CLEAR_AMULET)
return FALSE;
- return (!AI_STRIKES_FIRST(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered));
+ return (AI_IsSlower(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered));
}
bool32 ShouldLowerSpAtk(u32 battlerAtk, u32 battlerDef, u32 defAbility)
{
- if (AI_STRIKES_FIRST(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered)
+ if (AI_IsFaster(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered)
&& (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_TRY_TO_FAINT)
&& CanAIFaintTarget(battlerAtk, battlerDef, 0))
return FALSE; // Don't bother lowering stats if can kill enemy.
@@ -1683,7 +1859,7 @@ bool32 ShouldLowerSpAtk(u32 battlerAtk, u32 battlerDef, u32 defAbility)
bool32 ShouldLowerSpDef(u32 battlerAtk, u32 battlerDef, u32 defAbility)
{
- if (AI_STRIKES_FIRST(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered)
+ if (AI_IsFaster(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered)
&& (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_TRY_TO_FAINT)
&& CanAIFaintTarget(battlerAtk, battlerDef, 0))
return FALSE; // Don't bother lowering stats if can kill enemy.
@@ -1701,7 +1877,7 @@ bool32 ShouldLowerSpDef(u32 battlerAtk, u32 battlerDef, u32 defAbility)
bool32 ShouldLowerAccuracy(u32 battlerAtk, u32 battlerDef, u32 defAbility)
{
- if (AI_STRIKES_FIRST(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered)
+ if (AI_IsFaster(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered)
&& (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_TRY_TO_FAINT)
&& CanAIFaintTarget(battlerAtk, battlerDef, 0))
return FALSE; // Don't bother lowering stats if can kill enemy.
@@ -1720,7 +1896,7 @@ bool32 ShouldLowerAccuracy(u32 battlerAtk, u32 battlerDef, u32 defAbility)
bool32 ShouldLowerEvasion(u32 battlerAtk, u32 battlerDef, u32 defAbility)
{
- if (AI_STRIKES_FIRST(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered)
+ if (AI_IsFaster(battlerAtk, battlerDef, AI_THINKING_STRUCT->moveConsidered)
&& (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_TRY_TO_FAINT)
&& CanAIFaintTarget(battlerAtk, battlerDef, 0))
return FALSE; // Don't bother lowering stats if can kill enemy.
@@ -1737,10 +1913,12 @@ bool32 ShouldLowerEvasion(u32 battlerAtk, u32 battlerDef, u32 defAbility)
bool32 CanIndexMoveFaintTarget(u32 battlerAtk, u32 battlerDef, u32 index, u32 numHits)
{
- s32 dmg = AI_DATA->simulatedDmg[battlerAtk][battlerDef][index];
+ s32 dmg;
if (numHits)
- dmg *= numHits;
+ dmg = AI_DATA->simulatedDmg[battlerAtk][battlerDef][index].expected * numHits;
+ else
+ dmg = AI_DATA->simulatedDmg[battlerAtk][battlerDef][index].minimum;
if (gBattleMons[battlerDef].hp <= dmg)
return TRUE;
@@ -1889,6 +2067,20 @@ bool32 HasMove(u32 battlerId, u32 move)
return FALSE;
}
+bool32 HasAnyKnownMove(u32 battlerId)
+{
+ s32 i;
+ u16 *moves = GetMovesArray(battlerId);
+
+ for (i = 0; i < MAX_MON_MOVES; i++)
+ {
+ if (moves[i] != MOVE_NONE)
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
bool32 HasMoveWithLowAccuracy(u32 battlerAtk, u32 battlerDef, u32 accCheck, bool32 ignoreStatus, u32 atkAbility, u32 defAbility, u32 atkHoldEffect, u32 defHoldEffect)
{
s32 i;
@@ -2322,7 +2514,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;
@@ -2331,7 +2523,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;
}
@@ -2441,7 +2633,7 @@ bool32 ShouldPivot(u32 battlerAtk, u32 battlerDef, u32 defAbility, u32 move, u32
/*if (IsPredictedToSwitch(battlerDef, battlerAtk) && !hasStatBoost)
return PIVOT; // Try pivoting so you can switch to a better matchup to counter your new opponent*/
- if (AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) // Attacker goes first
+ if (AI_IsFaster(battlerAtk, battlerDef, move)) // Attacker goes first
{
if (!CanAIFaintTarget(battlerAtk, battlerDef, 0)) // Can't KO foe otherwise
{
@@ -2768,10 +2960,10 @@ bool32 AI_CanBeInfatuated(u32 battlerAtk, u32 battlerDef, u32 defAbility)
u32 ShouldTryToFlinch(u32 battlerAtk, u32 battlerDef, u32 atkAbility, u32 defAbility, u32 move)
{
- if (((!IsMoldBreakerTypeAbility(AI_DATA->abilities[battlerAtk]) && (defAbility == ABILITY_SHIELD_DUST || defAbility == ABILITY_INNER_FOCUS))
+ if (((!IsMoldBreakerTypeAbility(battlerAtk, AI_DATA->abilities[battlerAtk]) && (defAbility == ABILITY_SHIELD_DUST || defAbility == ABILITY_INNER_FOCUS))
|| AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_COVERT_CLOAK
|| DoesSubstituteBlockMove(battlerAtk, battlerDef, move)
- || AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_SLOWER)) // Opponent goes first
+ || AI_IsSlower(battlerAtk, battlerDef, move))) // Opponent goes first
{
return 0;
}
@@ -2779,7 +2971,7 @@ u32 ShouldTryToFlinch(u32 battlerAtk, u32 battlerDef, u32 atkAbility, u32 defAbi
|| gBattleMons[battlerDef].status1 & STATUS1_PARALYSIS
|| gBattleMons[battlerDef].status2 & STATUS2_INFATUATION
|| gBattleMons[battlerDef].status2 & STATUS2_CONFUSION)
- || ((AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER) && CanTargetFaintAi(battlerDef, battlerAtk)))
+ || ((AI_IsFaster(battlerAtk, battlerDef, move)) && CanTargetFaintAi(battlerDef, battlerAtk)))
{
return 2; // good idea to flinch
}
@@ -2811,7 +3003,7 @@ bool32 ShouldFakeOut(u32 battlerAtk, u32 battlerDef, u32 move)
|| AI_DATA->holdEffects[battlerAtk] == HOLD_EFFECT_CHOICE_BAND
|| AI_DATA->holdEffects[battlerDef] == HOLD_EFFECT_COVERT_CLOAK
|| DoesSubstituteBlockMove(battlerAtk, battlerDef, move)
- || (!IsMoldBreakerTypeAbility(AI_DATA->abilities[battlerAtk])
+ || (!IsMoldBreakerTypeAbility(battlerAtk, AI_DATA->abilities[battlerAtk])
&& (AI_DATA->abilities[battlerDef] == ABILITY_SHIELD_DUST || AI_DATA->abilities[battlerDef] == ABILITY_INNER_FOCUS)))
return FALSE;
@@ -2841,18 +3033,41 @@ bool32 IsWakeupTurn(u32 battler)
bool32 AnyPartyMemberStatused(u32 battlerId, bool32 checkSoundproof)
{
struct Pokemon *party;
- u32 i;
+ u32 i, battlerOnField1, battlerOnField2;
if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
party = gPlayerParty;
else
party = gEnemyParty;
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ {
+ battlerOnField1 = gBattlerPartyIndexes[battlerId];
+ battlerOnField2 = gBattlerPartyIndexes[GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battlerId)))];
+ // Check partner's status
+ if ((B_HEAL_BELL_SOUNDPROOF == GEN_5 || AI_DATA->abilities[BATTLE_PARTNER(battlerId)] != ABILITY_SOUNDPROOF || !checkSoundproof)
+ && GetMonData(&party[battlerOnField2], MON_DATA_STATUS) != STATUS1_NONE)
+ return TRUE;
+ }
+ else // In singles there's only one battlerId by side.
+ {
+ battlerOnField1 = gBattlerPartyIndexes[battlerId];
+ battlerOnField2 = gBattlerPartyIndexes[battlerId];
+ }
+
+ // Check attacker's status
+ if ((B_HEAL_BELL_SOUNDPROOF == GEN_5 || B_HEAL_BELL_SOUNDPROOF >= GEN_8
+ || AI_DATA->abilities[battlerId] != ABILITY_SOUNDPROOF || !checkSoundproof)
+ && GetMonData(&party[battlerOnField1], MON_DATA_STATUS) != STATUS1_NONE)
+ return TRUE;
+
+ // Check inactive party mons' status
for (i = 0; i < PARTY_SIZE; i++)
{
- if (checkSoundproof && GetMonAbility(&party[i]) == ABILITY_SOUNDPROOF)
+ if (i == battlerOnField1 || i == battlerOnField2)
+ continue;
+ if (B_HEAL_BELL_SOUNDPROOF < GEN_5 && checkSoundproof && GetMonAbility(&party[i]) == ABILITY_SOUNDPROOF)
continue;
-
if (GetMonData(&party[i], MON_DATA_STATUS) != STATUS1_NONE)
return TRUE;
}
@@ -2897,7 +3112,7 @@ bool32 ShouldUseRecoilMove(u32 battlerAtk, u32 battlerDef, u32 recoilDmg, u32 mo
bool32 ShouldAbsorb(u32 battlerAtk, u32 battlerDef, u32 move, s32 damage)
{
- if (move == 0xFFFF || AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER)
+ if (move == 0xFFFF || AI_IsFaster(battlerAtk, battlerDef, move))
{
// using item or user goes first
u32 healPercent = (gMovesInfo[move].argument == 0) ? 50 : gMovesInfo[move].argument;
@@ -2924,10 +3139,10 @@ bool32 ShouldAbsorb(u32 battlerAtk, u32 battlerDef, u32 move, s32 damage)
bool32 ShouldRecover(u32 battlerAtk, u32 battlerDef, u32 move, u32 healPercent)
{
- if (move == 0xFFFF || AI_WhoStrikesFirst(battlerAtk, battlerDef, move) == AI_IS_FASTER)
+ if (move == 0xFFFF || AI_IsFaster(battlerAtk, battlerDef, move))
{
// using item or user going first
- s32 damage = AI_DATA->simulatedDmg[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex];
+ s32 damage = AI_DATA->simulatedDmg[battlerAtk][battlerDef][AI_THINKING_STRUCT->movesetIndex].expected;
s32 healAmount = (healPercent * damage) / 100;
if (gStatuses3[battlerAtk] & STATUS3_HEAL_BLOCK)
healAmount = 0;
@@ -3106,7 +3321,7 @@ bool32 ShouldUseWishAromatherapy(u32 battlerAtk, u32 battlerDef, u32 move)
u32 i;
s32 firstId, lastId;
struct Pokemon* party;
- bool32 hasStatus = FALSE;
+ bool32 hasStatus = AnyPartyMemberStatused(battlerAtk, gMovesInfo[move].soundMove);
bool32 needHealing = FALSE;
GetAIPartyIndexes(battlerAtk, &firstId, &lastId);
@@ -3132,12 +3347,6 @@ bool32 ShouldUseWishAromatherapy(u32 battlerAtk, u32 battlerDef, u32 move)
{
needHealing = TRUE;
}
-
- if (GetMonData(&party[i], MON_DATA_STATUS, NULL) != STATUS1_NONE)
- {
- if (move != MOVE_HEAL_BELL || GetMonAbility(&party[i]) != ABILITY_SOUNDPROOF)
- hasStatus = TRUE;
- }
}
}
@@ -3185,18 +3394,31 @@ void FreeRestoreBattleMons(struct BattlePokemon *savedBattleMons)
}
// party logic
-s32 AI_CalcPartyMonDamage(u32 move, u32 battlerAtk, u32 battlerDef, struct BattlePokemon switchinCandidate, bool8 isPartyMonAttacker)
+s32 AI_CalcPartyMonDamage(u32 move, u32 battlerAtk, u32 battlerDef, struct BattlePokemon switchinCandidate, bool32 isPartyMonAttacker, enum DamageRollType rollType)
{
- s32 dmg;
+ struct SimulatedDamage dmg;
u8 effectiveness;
struct BattlePokemon *savedBattleMons = AllocSaveBattleMons();
- if(isPartyMonAttacker)
+
+ if (isPartyMonAttacker)
+ {
gBattleMons[battlerAtk] = switchinCandidate;
+ AI_THINKING_STRUCT->saved[battlerDef].saved = TRUE;
+ SetBattlerData(battlerDef); // set known opposing battler data
+ AI_THINKING_STRUCT->saved[battlerDef].saved = FALSE;
+ }
else
+ {
gBattleMons[battlerDef] = switchinCandidate;
- dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness, FALSE, AI_GetWeather(AI_DATA));
+ AI_THINKING_STRUCT->saved[battlerAtk].saved = TRUE;
+ SetBattlerData(battlerAtk); // set known opposing battler data
+ AI_THINKING_STRUCT->saved[battlerAtk].saved = FALSE;
+ }
+
+ dmg = AI_CalcDamage(move, battlerAtk, battlerDef, &effectiveness, FALSE, AI_GetWeather(AI_DATA), rollType);
+ // restores original gBattleMon struct
FreeRestoreBattleMons(savedBattleMons);
- return dmg;
+ return dmg.expected;
}
s32 CountUsablePartyMons(u32 battlerId)
@@ -3369,114 +3591,117 @@ bool32 IsRecycleEncouragedItem(u32 item)
return FALSE;
}
-static void IncreaseStatUpScoreInternal(u32 battlerAtk, u32 battlerDef, u32 statId, s32 *score, bool32 considerContrary)
+static u32 IncreaseStatUpScoreInternal(u32 battlerAtk, u32 battlerDef, u32 statId, bool32 considerContrary)
{
+ u32 tempScore = NO_INCREASE;
u32 noOfHitsToFaint = NoOfHitsForTargetToFaintAI(battlerDef, battlerAtk);
- u32 aiIsFaster = GetWhichBattlerFaster(battlerAtk, battlerDef, TRUE) == AI_IS_FASTER;
+ u32 aiIsFaster = AI_IsFaster(battlerAtk, battlerDef, TRUE);
u32 shouldSetUp = ((noOfHitsToFaint >= 2 && aiIsFaster) || (noOfHitsToFaint >= 3 && !aiIsFaster) || noOfHitsToFaint == UNKNOWN_NO_OF_HITS);
if (considerContrary && AI_DATA->abilities[battlerAtk] == ABILITY_CONTRARY)
- return;
+ return NO_INCREASE;
// Don't increase stat if AI is at +4
if (gBattleMons[battlerAtk].statStages[statId] >= MAX_STAT_STAGE - 2)
- return;
+ return NO_INCREASE;
// Don't increase stat if AI has less then 70% HP and number of hits isn't known
if (AI_DATA->hpPercents[battlerAtk] < 70 && noOfHitsToFaint == UNKNOWN_NO_OF_HITS)
- return;
+ return NO_INCREASE;
// Don't set up if AI is dead to residual damage from weather
if (GetBattlerSecondaryDamage(battlerAtk) >= gBattleMons[battlerAtk].hp)
- return;
+ return NO_INCREASE;
// Don't increase stats if opposing battler has Opportunist
if (AI_DATA->abilities[battlerDef] == ABILITY_OPPORTUNIST)
- return;
+ return NO_INCREASE;
switch (statId)
{
case STAT_CHANGE_ATK:
if (HasMoveWithCategory(battlerAtk, DAMAGE_CATEGORY_PHYSICAL) && shouldSetUp)
- ADJUST_SCORE_PTR(DECENT_EFFECT);
+ tempScore += DECENT_EFFECT;
break;
case STAT_CHANGE_DEF:
if (HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_PHYSICAL) || !HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_SPECIAL))
{
if (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_STALL)
- ADJUST_SCORE_PTR(DECENT_EFFECT);
+ tempScore += DECENT_EFFECT;
else
- ADJUST_SCORE_PTR(WEAK_EFFECT);
+ tempScore += WEAK_EFFECT;
}
break;
case STAT_CHANGE_SPEED:
if ((noOfHitsToFaint >= 3 && !aiIsFaster) || noOfHitsToFaint == UNKNOWN_NO_OF_HITS)
- ADJUST_SCORE_PTR(DECENT_EFFECT);
+ tempScore += DECENT_EFFECT;
break;
case STAT_CHANGE_SPATK:
if (HasMoveWithCategory(battlerAtk, DAMAGE_CATEGORY_SPECIAL) && shouldSetUp)
- ADJUST_SCORE_PTR(DECENT_EFFECT);
+ tempScore += DECENT_EFFECT;
break;
case STAT_CHANGE_SPDEF:
if (HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_SPECIAL) || !HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_PHYSICAL))
{
if (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_STALL)
- ADJUST_SCORE_PTR(DECENT_EFFECT);
+ tempScore += DECENT_EFFECT;
else
- ADJUST_SCORE_PTR(WEAK_EFFECT);
+ tempScore += WEAK_EFFECT;
}
break;
case STAT_CHANGE_ATK_2:
if (HasMoveWithCategory(battlerAtk, DAMAGE_CATEGORY_PHYSICAL) && shouldSetUp)
- ADJUST_SCORE_PTR(GOOD_EFFECT);
+ tempScore += GOOD_EFFECT;
break;
case STAT_CHANGE_DEF_2:
if (HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_PHYSICAL) || !HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_SPECIAL))
{
if (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_STALL)
- ADJUST_SCORE_PTR(GOOD_EFFECT);
+ tempScore += GOOD_EFFECT;
else
- ADJUST_SCORE_PTR(DECENT_EFFECT);
+ tempScore += DECENT_EFFECT;
}
break;
case STAT_CHANGE_SPEED_2:
if ((noOfHitsToFaint >= 3 && !aiIsFaster) || noOfHitsToFaint == UNKNOWN_NO_OF_HITS)
- ADJUST_SCORE_PTR(GOOD_EFFECT);
+ tempScore += GOOD_EFFECT;
break;
case STAT_CHANGE_SPATK_2:
if (HasMoveWithCategory(battlerAtk, DAMAGE_CATEGORY_SPECIAL) && shouldSetUp)
- ADJUST_SCORE_PTR(GOOD_EFFECT);
+ tempScore += GOOD_EFFECT;
break;
case STAT_CHANGE_SPDEF_2:
if (HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_SPECIAL) || !HasMoveWithCategory(battlerDef, DAMAGE_CATEGORY_PHYSICAL))
{
if (AI_THINKING_STRUCT->aiFlags[battlerAtk] & AI_FLAG_STALL)
- ADJUST_SCORE_PTR(GOOD_EFFECT);
+ tempScore += GOOD_EFFECT;
else
- ADJUST_SCORE_PTR(DECENT_EFFECT);
+ tempScore += DECENT_EFFECT;
}
break;
case STAT_CHANGE_ACC:
if (gBattleMons[battlerAtk].statStages[STAT_ACC] <= 3) // Increase only if necessary
- ADJUST_SCORE_PTR(DECENT_EFFECT);
+ tempScore += DECENT_EFFECT;
break;
case STAT_CHANGE_EVASION:
if (noOfHitsToFaint > 3 || noOfHitsToFaint == UNKNOWN_NO_OF_HITS)
- ADJUST_SCORE_PTR(GOOD_EFFECT);
+ tempScore += GOOD_EFFECT;
else
- ADJUST_SCORE_PTR(DECENT_EFFECT);
+ tempScore += DECENT_EFFECT;
break;
}
+
+ return tempScore;
}
-void IncreaseStatUpScore(u32 battlerAtk, u32 battlerDef, u32 statId, s32 *score)
+u32 IncreaseStatUpScore(u32 battlerAtk, u32 battlerDef, u32 statId)
{
- IncreaseStatUpScoreInternal(battlerAtk, battlerDef, statId, score, TRUE);
+ return IncreaseStatUpScoreInternal(battlerAtk, battlerDef, statId, TRUE);
}
-void IncreaseStatUpScoreContrary(u32 battlerAtk, u32 battlerDef, u32 statId, s32 *score)
+u32 IncreaseStatUpScoreContrary(u32 battlerAtk, u32 battlerDef, u32 statId)
{
- IncreaseStatUpScoreInternal(battlerAtk, battlerDef, statId, score, FALSE);
+ return IncreaseStatUpScoreInternal(battlerAtk, battlerDef, statId, FALSE);
}
void IncreasePoisonScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score)
@@ -3618,26 +3843,33 @@ bool32 ShouldUseZMove(u32 battlerAtk, u32 battlerDef, u32 chosenMove)
{
// simple logic. just upgrades chosen move to z move if possible, unless regular move would kill opponent
if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && battlerDef == BATTLE_PARTNER(battlerAtk))
- return FALSE; //don't use z move on partner
- if (gBattleStruct->zmove.used[battlerAtk])
- return FALSE; //cant use z move twice
+ return FALSE; // don't use z move on partner
+ if (HasTrainerUsedGimmick(battlerAtk, GIMMICK_Z_MOVE))
+ return FALSE; // can't use z move twice
if (IsViableZMove(battlerAtk, chosenMove))
{
u8 effectiveness;
+ u32 zMove = GetUsableZMove(battlerAtk, chosenMove);
+ struct SimulatedDamage dmg;
if (gBattleMons[battlerDef].ability == ABILITY_DISGUISE
+ && !gMovesInfo[zMove].ignoresTargetAbility
&& (gBattleMons[battlerDef].species == SPECIES_MIMIKYU_DISGUISED || gBattleMons[battlerDef].species == SPECIES_MIMIKYU_TOTEM_DISGUISED))
return FALSE; // Don't waste a Z-Move busting disguise
- if (gBattleMons[battlerDef].ability == ABILITY_ICE_FACE && gBattleMons[battlerDef].species == SPECIES_EISCUE_ICE_FACE && IS_MOVE_PHYSICAL(chosenMove))
+ if (gBattleMons[battlerDef].ability == ABILITY_ICE_FACE
+ && !gMovesInfo[zMove].ignoresTargetAbility
+ && gBattleMons[battlerDef].species == SPECIES_EISCUE_ICE_FACE && IS_MOVE_PHYSICAL(chosenMove))
return FALSE; // Don't waste a Z-Move busting Ice Face
- if (IS_MOVE_STATUS(chosenMove) && !IS_MOVE_STATUS(gBattleStruct->zmove.chosenZMove))
+ if (IS_MOVE_STATUS(chosenMove) && !IS_MOVE_STATUS(zMove))
return FALSE;
- else if (!IS_MOVE_STATUS(chosenMove) && IS_MOVE_STATUS(gBattleStruct->zmove.chosenZMove))
+ else if (!IS_MOVE_STATUS(chosenMove) && IS_MOVE_STATUS(zMove))
return FALSE;
- if (!IS_MOVE_STATUS(chosenMove) && AI_CalcDamageSaveBattlers(chosenMove, battlerAtk, battlerDef, &effectiveness, FALSE) >= gBattleMons[battlerDef].hp)
+ dmg = AI_CalcDamageSaveBattlers(chosenMove, battlerAtk, battlerDef, &effectiveness, FALSE, DMG_ROLL_DEFAULT);
+
+ if (!IS_MOVE_STATUS(chosenMove) && dmg.minimum >= gBattleMons[battlerDef].hp)
return FALSE; // don't waste damaging z move if can otherwise faint target
return TRUE;
@@ -3706,7 +3938,7 @@ void IncreaseTidyUpScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score)
if (gSideStatuses[GetBattlerSide(battlerDef)] & SIDE_STATUS_HAZARDS_ANY && CountUsablePartyMons(battlerDef) != 0)
ADJUST_SCORE_PTR(-2);
- if (gBattleMons[battlerAtk].status2 & STATUS2_SUBSTITUTE && AI_STRIKES_FIRST(battlerAtk, battlerDef, move))
+ if (gBattleMons[battlerAtk].status2 & STATUS2_SUBSTITUTE && AI_IsFaster(battlerAtk, battlerDef, move))
ADJUST_SCORE_PTR(-10);
if (gBattleMons[battlerDef].status2 & STATUS2_SUBSTITUTE)
ADJUST_SCORE_PTR(GOOD_EFFECT);
@@ -3716,3 +3948,42 @@ void IncreaseTidyUpScore(u32 battlerAtk, u32 battlerDef, u32 move, s32 *score)
if (gStatuses3[battlerDef] & STATUS3_LEECHSEED)
ADJUST_SCORE_PTR(-2);
}
+
+bool32 AI_ShouldSpicyExtract(u32 battlerAtk, u32 battlerAtkPartner, u32 move, struct AiLogicData *aiData)
+{
+ u32 preventsStatLoss;
+ u32 partnerAbility;
+ u32 partnerHoldEffect = aiData->holdEffects[battlerAtkPartner];
+
+ if (DoesBattlerIgnoreAbilityChecks(aiData->abilities[battlerAtk], move))
+ partnerAbility = ABILITY_NONE;
+ else
+ partnerAbility = aiData->abilities[battlerAtkPartner];
+
+ if (gBattleMons[battlerAtkPartner].statStages[STAT_ATK] == MAX_STAT_STAGE
+ || partnerAbility == ABILITY_CONTRARY
+ || partnerAbility == ABILITY_GOOD_AS_GOLD
+ || HasMoveEffect(BATTLE_OPPOSITE(battlerAtk), EFFECT_FOUL_PLAY)
+ || HasMoveEffect(BATTLE_OPPOSITE(battlerAtkPartner), EFFECT_FOUL_PLAY))
+ return FALSE;
+
+ preventsStatLoss = (partnerAbility == ABILITY_CLEAR_BODY
+ || partnerAbility == ABILITY_FULL_METAL_BODY
+ || partnerAbility == ABILITY_WHITE_SMOKE
+ || partnerHoldEffect == HOLD_EFFECT_CLEAR_AMULET);
+
+ switch (gMovesInfo[aiData->partnerMove].effect)
+ {
+ case EFFECT_DEFENSE_UP:
+ case EFFECT_DEFENSE_UP_2:
+ case EFFECT_DEFENSE_UP_3:
+ case EFFECT_BULK_UP:
+ case EFFECT_STOCKPILE:
+ if (!preventsStatLoss)
+ return FALSE;
+ }
+
+ return (preventsStatLoss
+ && AI_IsFaster(battlerAtk, battlerAtkPartner, TRUE)
+ && HasMoveWithCategory(battlerAtkPartner, DAMAGE_CATEGORY_PHYSICAL));
+}
diff --git a/src/battle_anim.c b/src/battle_anim.c
index c1bd15c8384a..a13ca50dcef8 100644
--- a/src/battle_anim.c
+++ b/src/battle_anim.c
@@ -31,7 +31,6 @@
extern const u16 gMovesWithQuietBGM[];
extern const u8 *const gBattleAnims_General[];
-extern const u8 *const gBattleAnims_Moves[];
extern const u8 *const gBattleAnims_Special[];
extern const u8 *const gBattleAnims_StatusConditions[];
@@ -86,6 +85,8 @@ static void Cmd_stopsound(void);
static void Cmd_createvisualtaskontargets(void);
static void Cmd_createspriteontargets(void);
static void Cmd_createspriteontargets_onpos(void);
+static void Cmd_jumpifmovetypeequal(void);
+static void Cmd_createdragondartsprite(void);
static void RunAnimScriptCommand(void);
static void Task_UpdateMonBg(u8 taskId);
static void FlipBattlerBgTiles(void);
@@ -177,6 +178,8 @@ static void (* const sScriptCmdTable[])(void) =
Cmd_createvisualtaskontargets, // 0x30
Cmd_createspriteontargets, // 0x31
Cmd_createspriteontargets_onpos, // 0x32
+ Cmd_jumpifmovetypeequal, // 0x33
+ Cmd_createdragondartsprite, // 0x34
};
void ClearBattleAnimationVars(void)
@@ -233,7 +236,6 @@ static void Nop(void)
void LaunchBattleAnimation(u32 animType, u32 animId)
{
s32 i;
- const u8 *const *animsTable;
if (gTestRunnerEnabled)
{
@@ -251,23 +253,6 @@ void LaunchBattleAnimation(u32 animType, u32 animId)
}
}
- switch (animType)
- {
- case ANIM_TYPE_GENERAL:
- default:
- animsTable = gBattleAnims_General;
- break;
- case ANIM_TYPE_MOVE:
- animsTable = gBattleAnims_Moves;
- break;
- case ANIM_TYPE_STATUS:
- animsTable = gBattleAnims_StatusConditions;
- break;
- case ANIM_TYPE_SPECIAL:
- animsTable = gBattleAnims_Special;
- break;
- }
-
sAnimHideHpBoxes = !(animType == ANIM_TYPE_MOVE && animId == MOVE_TRANSFORM);
if (animType != ANIM_TYPE_MOVE)
{
@@ -287,6 +272,7 @@ void LaunchBattleAnimation(u32 animType, u32 animId)
case B_ANIM_RAINBOW:
case B_ANIM_SEA_OF_FIRE:
case B_ANIM_SWAMP:
+ case B_ANIM_TERA_CHARGE:
sAnimHideHpBoxes = TRUE;
break;
default:
@@ -323,7 +309,23 @@ void LaunchBattleAnimation(u32 animType, u32 animId)
sMonAnimTaskIdArray[0] = TASK_NONE;
sMonAnimTaskIdArray[1] = TASK_NONE;
- sBattleAnimScriptPtr = animsTable[animId];
+
+ switch (animType)
+ {
+ case ANIM_TYPE_GENERAL:
+ default:
+ sBattleAnimScriptPtr = gBattleAnims_General[animId];
+ break;
+ case ANIM_TYPE_MOVE:
+ sBattleAnimScriptPtr = GetMoveAnimationScript(animId);
+ break;
+ case ANIM_TYPE_STATUS:
+ sBattleAnimScriptPtr = gBattleAnims_StatusConditions[animId];
+ break;
+ case ANIM_TYPE_SPECIAL:
+ sBattleAnimScriptPtr = gBattleAnims_Special[animId];
+ break;
+ }
gAnimScriptActive = TRUE;
sAnimFramesToWait = 0;
gAnimScriptCallback = RunAnimScriptCommand;
@@ -791,6 +793,10 @@ static void Cmd_end(void)
if (!continuousAnim) // May have been used for debug?
{
+ // Debugging - ensure no hanging mon bg tasks
+ if (FuncIsActiveTask(Task_UpdateMonBg))
+ DebugPrintf("Move %d animation still has Task_UpdateMonBg active at the end!", gAnimMoveIndex);
+
m4aMPlayVolumeControl(&gMPlayInfo_BGM, TRACKS_ALL, 256);
if (!IsContest())
{
@@ -2134,3 +2140,75 @@ static void Cmd_stopsound(void)
m4aMPlayStop(&gMPlayInfo_SE2);
sBattleAnimScriptPtr++;
}
+
+static void Cmd_jumpifmovetypeequal(void)
+{
+ u8 moveType;
+ const u8 *type = sBattleAnimScriptPtr + 1;
+ sBattleAnimScriptPtr += 2;
+ GET_MOVE_TYPE(gCurrentMove, moveType);
+
+ if (*type != moveType)
+ sBattleAnimScriptPtr += 4;
+ else
+ sBattleAnimScriptPtr = T2_READ_PTR(sBattleAnimScriptPtr);
+}
+
+static void Cmd_createdragondartsprite(void)
+{
+ s32 i;
+ struct SpriteTemplate template;
+ u8 argVar;
+ u8 argsCount;
+ s16 subpriority;
+ struct Pokemon *party = GetBattlerParty(gBattleAnimAttacker);
+
+ sBattleAnimScriptPtr++;
+
+ argVar = sBattleAnimScriptPtr[0];
+ sBattleAnimScriptPtr++;
+ argsCount = sBattleAnimScriptPtr[0];
+ sBattleAnimScriptPtr++;
+
+ for (i = 0; i < argsCount; i++)
+ {
+ gBattleAnimArgs[i] = T1_READ_16(sBattleAnimScriptPtr);
+ sBattleAnimScriptPtr += 2;
+ }
+
+ subpriority = GetSubpriorityForMoveAnim(argVar);
+
+ if (GetMonData(&party[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES) == SPECIES_DRAGAPULT)
+ {
+ template.tileTag = ANIM_TAG_DREEPY;
+ if (IsMonShiny(&party[gBattlerPartyIndexes[gBattleAnimAttacker]]) == TRUE)
+ template.paletteTag = ANIM_TAG_DREEPY_SHINY;
+ else
+ template.paletteTag = ANIM_TAG_DREEPY;
+ template.oam = &gOamData_AffineOff_ObjNormal_32x32;
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
+ template.anims = gAnims_DreepyMissileOpponent;
+ else
+ template.anims = gAnims_DreepyMissilePlayer;
+ }
+ else
+ {
+ template.tileTag = ANIM_TAG_AIR_WAVE;
+ template.paletteTag = ANIM_TAG_DREEPY;
+ template.oam = &gOamData_AffineOff_ObjNormal_32x16;
+ if (GetBattlerSide(gBattleAnimAttacker) == B_SIDE_OPPONENT)
+ template.anims = gAnims_DreepyMissileOpponentNotDrag;
+ else
+ template.anims = gAnims_DreepyMissilePlayer;
+ }
+
+ template.images = NULL;
+ template.affineAnims = gDummySpriteAffineAnimTable;
+ template.callback = AnimShadowBall;
+
+ if (CreateSpriteAndAnimate(&template,
+ GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X_2),
+ GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y_PIC_OFFSET),
+ subpriority) != MAX_SPRITES) // Don't increment the task count if the sprite couldn't be created(i.e. there are too many created sprites atm).
+ gAnimVisualTaskCount++;
+}
diff --git a/src/battle_anim_dragon.c b/src/battle_anim_dragon.c
index 1398d899b3b8..862c0ad06908 100644
--- a/src/battle_anim_dragon.c
+++ b/src/battle_anim_dragon.c
@@ -42,6 +42,39 @@ const struct SpriteTemplate gOutrageFlameSpriteTemplate =
.callback = AnimOutrageFlame,
};
+static const union AnimCmd sAnim_DreepyMissileOpponent_0[] =
+{
+ ANIMCMD_FRAME(0, 0, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gAnims_DreepyMissileOpponent[] =
+{
+ sAnim_DreepyMissileOpponent_0,
+};
+
+static const union AnimCmd sAnim_DreepyMissilePlayer_0[] =
+{
+ ANIMCMD_FRAME(0, 0),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gAnims_DreepyMissilePlayer[] =
+{
+ sAnim_DreepyMissilePlayer_0,
+};
+
+static const union AnimCmd sAnim_DreepyMissileNotDrag_0[] =
+{
+ ANIMCMD_FRAME(0, 0, .hFlip = TRUE, .vFlip = TRUE),
+ ANIMCMD_END,
+};
+
+const union AnimCmd *const gAnims_DreepyMissileOpponentNotDrag[] =
+{
+ sAnim_DreepyMissileNotDrag_0,
+};
+
static const union AnimCmd sAnim_DragonBreathFire_0[] =
{
ANIMCMD_FRAME(16, 3),
diff --git a/src/battle_anim_effects_1.c b/src/battle_anim_effects_1.c
index abcdd44c357d..b29d9b2b94ee 100644
--- a/src/battle_anim_effects_1.c
+++ b/src/battle_anim_effects_1.c
@@ -2958,6 +2958,50 @@ const struct SpriteTemplate gWoodHammerHammerSpriteTemplate =
.callback = AnimWoodHammerHammer,
};
+const struct SpriteTemplate gIvyCudgelSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_IVY_CUDGEL_GRASS,
+ .paletteTag = ANIM_TAG_IVY_CUDGEL_GRASS,
+ .oam = &gOamData_AffineDouble_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gWoodHammerHammerAffineAnims,
+ .callback = AnimWoodHammerHammer,
+};
+
+const struct SpriteTemplate gIvyCudgelFireSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_IVY_CUDGEL_GRASS,
+ .paletteTag = ANIM_TAG_IVY_CUDGEL_FIRE,
+ .oam = &gOamData_AffineDouble_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gWoodHammerHammerAffineAnims,
+ .callback = AnimWoodHammerHammer,
+};
+
+const struct SpriteTemplate gIvyCudgelRockSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_IVY_CUDGEL_GRASS,
+ .paletteTag = ANIM_TAG_IVY_CUDGEL_ROCK,
+ .oam = &gOamData_AffineDouble_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gWoodHammerHammerAffineAnims,
+ .callback = AnimWoodHammerHammer,
+};
+
+const struct SpriteTemplate gIvyCudgelWaterSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_IVY_CUDGEL_GRASS,
+ .paletteTag = ANIM_TAG_IVY_CUDGEL_WATER,
+ .oam = &gOamData_AffineDouble_ObjNormal_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gWoodHammerHammerAffineAnims,
+ .callback = AnimWoodHammerHammer,
+};
+
const struct SpriteTemplate gJudgmentGrayOutwardSpikesTemplate =
{
.tileTag = ANIM_TAG_GREEN_SPIKE,
@@ -3057,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)
{
@@ -6523,6 +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++;
}
@@ -6548,11 +6608,21 @@ static inline void SwapStructData(void *s1, void *s2, void *data, u32 size)
static void ReloadBattlerSprites(u32 battler, struct Pokemon *party)
{
- BattleLoadMonSpriteGfx(&party[gBattlerPartyIndexes[battler]], battler);
+ struct Pokemon *mon = &party[gBattlerPartyIndexes[battler]];
+ BattleLoadMonSpriteGfx(mon, battler);
CreateBattlerSprite(battler);
- UpdateHealthboxAttribute(gHealthboxSpriteIds[battler], &party[gBattlerPartyIndexes[battler]], HEALTHBOX_ALL);
- // If battler is mega evolved / primal reversed, hide the sprite until the move animation finishes.
- MegaIndicator_SetVisibilities(gHealthboxSpriteIds[battler], TRUE);
+ 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)
+ {
+ DestroySprite(&gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteId]);
+ gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteId = MAX_SPRITES;
+ CreateEnemyShadowSprite(battler);
+ SetBattlerShadowSpriteCallback(battler, GetMonData(mon, MON_DATA_SPECIES));
+ }
}
static void AnimTask_AllySwitchDataSwap(u8 taskId)
@@ -7170,6 +7240,14 @@ static const union AffineAnimCmd sCompressTargetHorizontallyAffineAnimCmds[] =
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];
@@ -7186,6 +7264,14 @@ void AnimTask_CompressTargetHorizontally(u8 taskId)
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)
{
if (--gTasks[taskId].data[0] == -1)
diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c
index ffba3429eb4b..ed2e7457f62e 100644
--- a/src/battle_anim_effects_3.c
+++ b/src/battle_anim_effects_3.c
@@ -112,6 +112,8 @@ static void AnimTask_OdorSleuthMovementWaitFinish(u8);
static void MoveOdorSleuthClone(struct Sprite *);
static void AnimTask_TeeterDanceMovement_Step(u8);
static void AnimTask_SlackOffSquish_Step(u8);
+static void AnimTask_TeraCrystalShatter(struct Sprite *);
+static void AnimTask_TeraCrystalShatter_Step(struct Sprite *);
const union AnimCmd gScratchAnimCmds[] =
{
@@ -1257,6 +1259,57 @@ const struct SpriteTemplate gOmegaSymbolSpriteTemplate =
.callback = AnimGhostStatusSprite,
};
+const struct SpriteTemplate gTeraCrystalSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_TERA_CRYSTAL,
+ .paletteTag = ANIM_TAG_TERA_CRYSTAL,
+ .oam = &gOamData_AffineDouble_ObjBlend_64x64,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gAffineAnims_LusterPurgeCircle,
+ .callback = AnimSpriteOnMonPos,
+};
+
+const struct SpriteTemplate gTeraCrystalSpreadSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_TERA_SHATTER,
+ .paletteTag = ANIM_TAG_TERA_SHATTER,
+ .oam = &gOamData_AffineOff_ObjNormal_16x16,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimTask_TeraCrystalShatter,
+};
+
+// Task data for AnimTask_TeraCrystalShatter
+#define tCounter data[0]
+#define tDX data[6]
+#define tDY data[7]
+
+static void AnimTask_TeraCrystalShatter(struct Sprite *sprite)
+{
+ sprite->x = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X);
+ sprite->y = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y);
+ sprite->oam.tileNum += gBattleAnimArgs[0] * 4;
+
+ sprite->tCounter = 0;
+ sprite->tDX = gBattleAnimArgs[1];
+ sprite->tDY = gBattleAnimArgs[2];
+
+ sprite->callback = AnimTask_TeraCrystalShatter_Step;
+}
+
+static void AnimTask_TeraCrystalShatter_Step(struct Sprite *sprite)
+{
+ sprite->x += sprite->tDX;
+ sprite->y += sprite->tDY;
+
+ if (++sprite->tCounter > 15)
+ DestroyAnimSprite(sprite);
+}
+
+#undef tCounter
+
void AnimBlackSmoke(struct Sprite *sprite)
{
sprite->x += gBattleAnimArgs[0];
@@ -5580,6 +5633,8 @@ void AnimTask_GetWeather(u8 taskId)
gBattleAnimArgs[ARG_RET_ID] = ANIM_WEATHER_HAIL;
else if (gWeatherMoveAnim & B_WEATHER_SNOW)
gBattleAnimArgs[ARG_RET_ID] = ANIM_WEATHER_SNOW;
+ else if (gWeatherMoveAnim & B_WEATHER_FOG)
+ gBattleAnimArgs[ARG_RET_ID] = ANIM_WEATHER_FOG;
DestroyAnimVisualTask(taskId);
}
diff --git a/src/battle_anim_flying.c b/src/battle_anim_flying.c
index f58aa97ee282..6afe1e9f369a 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,
diff --git a/src/battle_anim_new.c b/src/battle_anim_new.c
index fed928e747af..cd89b6aab705 100644
--- a/src/battle_anim_new.c
+++ b/src/battle_anim_new.c
@@ -99,6 +99,7 @@ static void SpriteCB_GlacialLance_Step1(struct Sprite* sprite);
static void SpriteCB_GlacialLance_Step2(struct Sprite* sprite);
static void SpriteCB_GlacialLance(struct Sprite* sprite);
static void SpriteCB_TripleArrowKick(struct Sprite* sprite);
+static void AnimMakingItRain(struct Sprite *sprite);
// const data
// general
@@ -110,6 +111,14 @@ static const union AffineAnimCmd sSquishTargetAffineAnimCmds[] =
AFFINEANIMCMD_END,
};
+static const union AffineAnimCmd sSquishTargetShortAffineAnimCmds[] =
+{
+ AFFINEANIMCMD_FRAME(0, 64, 0, 4), //Flatten
+ AFFINEANIMCMD_FRAME(0, 0, 0, 16),
+ AFFINEANIMCMD_FRAME(0, -64, 0, 4),
+ AFFINEANIMCMD_END,
+};
+
// GEN 4
// shadow sneak
const struct SpriteTemplate gShadowSneakImpactSpriteTemplate =
@@ -3712,12 +3721,42 @@ const struct SpriteTemplate gMagicPowderBluePowderTemplate =
};
//dreepy missile
-const struct SpriteTemplate gDreepyMissileTemplate =
+const struct SpriteTemplate gDreepyMissilePlayerTemplate =
{
.tileTag = ANIM_TAG_DREEPY,
.paletteTag = ANIM_TAG_DREEPY,
.oam = &gOamData_AffineOff_ObjNormal_32x32,
- .anims = gDummySpriteAnimTable,
+ .anims = gAnims_DreepyMissilePlayer,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimShadowBall
+};
+const struct SpriteTemplate gDreepyMissileOpponentTemplate =
+{
+ .tileTag = ANIM_TAG_DREEPY,
+ .paletteTag = ANIM_TAG_DREEPY,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gAnims_DreepyMissileOpponent,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimShadowBall
+};
+const struct SpriteTemplate gDreepyMissilePlayerShinyTemplate =
+{
+ .tileTag = ANIM_TAG_DREEPY,
+ .paletteTag = ANIM_TAG_DREEPY_SHINY,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gAnims_DreepyMissilePlayer,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimShadowBall
+};
+const struct SpriteTemplate gDreepyMissileOpponentShinyTemplate =
+{
+ .tileTag = ANIM_TAG_DREEPY,
+ .paletteTag = ANIM_TAG_DREEPY_SHINY,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = gAnims_DreepyMissileOpponent,
.images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
.callback = AnimShadowBall
@@ -4771,6 +4810,17 @@ const struct SpriteTemplate gUltraBurstSymbolSpriteTemplate =
.callback = AnimSpriteOnMonPos
};
+const struct SpriteTemplate gAxeKickSpriteTemplate =
+{
+ .tileTag = ANIM_TAG_HANDS_AND_FEET,
+ .paletteTag = ANIM_TAG_HANDS_AND_FEET,
+ .oam = &gOamData_AffineOff_ObjNormal_32x32,
+ .anims = &gAnims_HandsAndFeet[2],
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimBounceBallLand,
+};
+
// Z MOVES
//activate
const struct SpriteTemplate gZMoveSymbolSpriteTemplate =
@@ -7185,6 +7235,51 @@ const struct SpriteTemplate gBitterBladeImpactTemplate =
.callback = AnimClawSlash
};
+// Make It Rain
+const struct SpriteTemplate gMakingItRainTemplate =
+{
+ .tileTag = ANIM_TAG_COIN,
+ .paletteTag = ANIM_TAG_COIN,
+ .oam = &gOamData_AffineNormal_ObjNormal_16x16,
+ .anims = gCoinAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = AnimMakingItRain,
+};
+
+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,
+};
+
// functions
//general
void AnimTask_IsTargetPartner(u8 taskId)
@@ -8514,6 +8609,15 @@ void AnimTask_SquishTarget(u8 taskId)
task->func = AnimTask_WaitAffineAnim;
}
+void AnimTask_SquishTargetShort(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+ u8 spriteId = GetAnimBattlerSpriteId(ANIM_TARGET);
+
+ PrepareAffineAnimInTaskData(task, spriteId, sSquishTargetShortAffineAnimCmds);
+ task->func = AnimTask_WaitAffineAnim;
+}
+
void CoreEnforcerLoadBeamTarget(struct Sprite *sprite)
{
sprite->data[0] = gBattleAnimArgs[2];
@@ -9161,3 +9265,23 @@ void AnimTask_StickySyrup(u8 taskId)
gBattleAnimArgs[0] = gAnimDisableStructPtr->syrupBombIsShiny;
DestroyAnimVisualTask(taskId);
}
+
+static void AnimMakingItRain(struct Sprite *sprite)
+{
+ if (gBattleAnimArgs[3] != 0)
+ SetAverageBattlerPositions(gBattleAnimTarget, FALSE, &sprite->x, &sprite->y); //coin shower on target
+
+ sprite->x += gBattleAnimArgs[0];
+ sprite->y += 14;
+ StartSpriteAnim(sprite, gBattleAnimArgs[1]);
+ AnimateSprite(sprite);
+ sprite->data[0] = 0;
+ sprite->data[1] = 0;
+ sprite->data[2] = 4;
+ sprite->data[3] = 16;
+ sprite->data[4] = -70;
+ sprite->data[5] = gBattleAnimArgs[2];
+ StoreSpriteCallbackInData6(sprite, AnimFallingRock_Step);
+ sprite->callback = TranslateSpriteInEllipse;
+ sprite->callback(sprite);
+}
diff --git a/src/battle_anim_normal.c b/src/battle_anim_normal.c
index 6333cc8183c9..759c410946ce 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);
}
diff --git a/src/battle_anim_smokescreen.c b/src/battle_anim_smokescreen.c
index e395be5f8411..3b05ef6280b9 100644
--- a/src/battle_anim_smokescreen.c
+++ b/src/battle_anim_smokescreen.c
@@ -17,35 +17,6 @@ static void SpriteCB_SmokescreenImpact(struct Sprite *);
// The below data for smokescreen starts and ends with some data that belongs to battle_gfx_sfx_util.c
-const u8 gBattlePalaceNatureToMoveTarget[NUM_NATURES] =
-{
- [NATURE_HARDY] = PALACE_TARGET_STRONGER,
- [NATURE_LONELY] = PALACE_TARGET_STRONGER,
- [NATURE_BRAVE] = PALACE_TARGET_WEAKER,
- [NATURE_ADAMANT] = PALACE_TARGET_STRONGER,
- [NATURE_NAUGHTY] = PALACE_TARGET_WEAKER,
- [NATURE_BOLD] = PALACE_TARGET_WEAKER,
- [NATURE_DOCILE] = PALACE_TARGET_RANDOM,
- [NATURE_RELAXED] = PALACE_TARGET_STRONGER,
- [NATURE_IMPISH] = PALACE_TARGET_STRONGER,
- [NATURE_LAX] = PALACE_TARGET_STRONGER,
- [NATURE_TIMID] = PALACE_TARGET_WEAKER,
- [NATURE_HASTY] = PALACE_TARGET_WEAKER,
- [NATURE_SERIOUS] = PALACE_TARGET_WEAKER,
- [NATURE_JOLLY] = PALACE_TARGET_STRONGER,
- [NATURE_NAIVE] = PALACE_TARGET_RANDOM,
- [NATURE_MODEST] = PALACE_TARGET_WEAKER,
- [NATURE_MILD] = PALACE_TARGET_STRONGER,
- [NATURE_QUIET] = PALACE_TARGET_WEAKER,
- [NATURE_BASHFUL] = PALACE_TARGET_WEAKER,
- [NATURE_RASH] = PALACE_TARGET_STRONGER,
- [NATURE_CALM] = PALACE_TARGET_STRONGER,
- [NATURE_GENTLE] = PALACE_TARGET_STRONGER,
- [NATURE_SASSY] = PALACE_TARGET_WEAKER,
- [NATURE_CAREFUL] = PALACE_TARGET_WEAKER,
- [NATURE_QUIRKY] = PALACE_TARGET_STRONGER,
-};
-
static const struct CompressedSpriteSheet sSmokescreenImpactSpriteSheet =
{
.data = gSmokescreenImpactTiles, .size = 0x180, .tag = TAG_SMOKESCREEN
diff --git a/src/battle_bg.c b/src/battle_bg.c
index 0f802d52de77..328f990653e0 100644
--- a/src/battle_bg.c
+++ b/src/battle_bg.c
@@ -371,6 +371,15 @@ static const struct WindowTemplate sStandardBattleWindowTemplates[] =
.paletteNum = 0,
.baseBlock = 0x00b0,
},
+ [B_WIN_MOVE_DESCRIPTION] = {
+ .bg = 0,
+ .tilemapLeft = 1,
+ .tilemapTop = 47,
+ .width = 18,
+ .height = 6,
+ .paletteNum = 5,
+ .baseBlock = 0x0350,
+ },
DUMMY_WIN_TEMPLATE
};
@@ -583,6 +592,15 @@ static const struct WindowTemplate sBattleArenaWindowTemplates[] =
.paletteNum = 7,
.baseBlock = 0x0090,
},
+ [B_WIN_MOVE_DESCRIPTION] = {
+ .bg = 0,
+ .tilemapLeft = 1,
+ .tilemapTop = 47,
+ .width = 18,
+ .height = 6,
+ .paletteNum = 5,
+ .baseBlock = 0x0350,
+ },
DUMMY_WIN_TEMPLATE
};
diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c
index 597d0b7c5f43..a5dc6f3af137 100644
--- a/src/battle_controller_opponent.c
+++ b/src/battle_controller_opponent.c
@@ -544,13 +544,6 @@ static void OpponentHandleChooseMove(u32 battler)
default:
{
u16 chosenMove = moveInfo->moves[chosenMoveId];
- bool32 isSecondTrainer = (GetBattlerPosition(battler) == B_POSITION_OPPONENT_RIGHT) && (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) && !BATTLE_TWO_VS_ONE_OPPONENT;
- u16 trainerId = isSecondTrainer ? gTrainerBattleOpponent_B : gTrainerBattleOpponent_A;
- const struct TrainerMon *party = GetTrainerPartyFromId(trainerId);
- bool32 shouldDynamax = FALSE;
- if (party != NULL)
- shouldDynamax = party[isSecondTrainer ? gBattlerPartyIndexes[battler] - MULTI_PARTY_SIZE : gBattlerPartyIndexes[battler]].shouldDynamax;
-
if (GetBattlerMoveTargetType(battler, chosenMove) & (MOVE_TARGET_USER_OR_SELECTED | MOVE_TARGET_USER))
gBattlerTarget = battler;
if (GetBattlerMoveTargetType(battler, chosenMove) & MOVE_TARGET_BOTH)
@@ -559,19 +552,17 @@ static void OpponentHandleChooseMove(u32 battler)
if (gAbsentBattlerFlags & gBitTable[gBattlerTarget])
gBattlerTarget = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
}
- if (ShouldUseZMove(battler, gBattlerTarget, chosenMove))
- QueueZMove(battler, chosenMove);
- // If opponent can Mega Evolve, do it.
- if (CanMegaEvolve(battler))
- BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, (chosenMoveId) | (RET_MEGA_EVOLUTION) | (gBattlerTarget << 8));
- // If opponent can Ultra Burst, do it.
- else if (CanUltraBurst(battler))
- BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, (chosenMoveId) | (RET_ULTRA_BURST) | (gBattlerTarget << 8));
- // If opponent can Dynamax and is allowed in the partydata, do it.
- else if (CanDynamax(battler) && shouldDynamax)
- BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, (chosenMoveId) | (RET_DYNAMAX) | (gBattlerTarget << 8));
+ // If opponent can and should use a gimmick (considering trainer data), do it
+ if (gBattleStruct->gimmick.usableGimmick[battler] != GIMMICK_NONE
+ && !(gBattleStruct->gimmick.usableGimmick[battler] == GIMMICK_Z_MOVE
+ && !ShouldUseZMove(battler, gBattlerTarget, moveInfo->moves[chosenMoveId])))
+ {
+ BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, (chosenMoveId) | (RET_GIMMICK) | (gBattlerTarget << 8));
+ }
else
+ {
BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, (chosenMoveId) | (gBattlerTarget << 8));
+ }
}
break;
}
diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c
index c9778f898e46..20993066b22c 100644
--- a/src/battle_controller_player.c
+++ b/src/battle_controller_player.c
@@ -9,6 +9,7 @@
#include "battle_setup.h"
#include "battle_tv.h"
#include "battle_z_move.h"
+#include "battle_gimmick.h"
#include "bg.h"
#include "data.h"
#include "item.h"
@@ -31,6 +32,7 @@
#include "util.h"
#include "window.h"
#include "constants/battle_anim.h"
+#include "constants/battle_move_effects.h"
#include "constants/battle_partner.h"
#include "constants/hold_effects.h"
#include "constants/items.h"
@@ -40,6 +42,8 @@
#include "constants/trainers.h"
#include "constants/rgb.h"
#include "level_caps.h"
+#include "menu.h"
+#include "pokemon_summary_screen.h"
static void PlayerBufferExecCompleted(u32 battler);
static void PlayerHandleLoadMonSprite(u32 battler);
@@ -83,6 +87,7 @@ 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);
@@ -158,9 +163,6 @@ static void (*const sPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(u32 battler) =
[CONTROLLER_TERMINATOR_NOP] = BtlController_TerminatorNop
};
-static EWRAM_DATA bool8 sAckBallUseBtn = FALSE;
-static EWRAM_DATA bool8 sBallSwapped = FALSE;
-
void SetControllerToPlayer(u32 battler)
{
gBattlerControllerEndFuncs[battler] = PlayerBufferExecCompleted;
@@ -258,61 +260,63 @@ static void HandleInputChooseAction(u32 battler)
else
gPlayerDpadHoldFrames = 0;
-#if B_LAST_USED_BALL == TRUE && B_LAST_USED_BALL_CYCLE == TRUE
- if (!gLastUsedBallMenuPresent)
- {
- sAckBallUseBtn = FALSE;
- }
- else if (JOY_NEW(B_LAST_USED_BALL_BUTTON))
+ if (B_LAST_USED_BALL == TRUE && B_LAST_USED_BALL_CYCLE == TRUE)
{
- sAckBallUseBtn = TRUE;
- sBallSwapped = FALSE;
- ArrowsChangeColorLastBallCycle(TRUE);
- }
- if (sAckBallUseBtn)
- {
- if (JOY_HELD(B_LAST_USED_BALL_BUTTON) && (JOY_NEW(DPAD_DOWN) || JOY_NEW(DPAD_RIGHT)))
- {
- bool8 sameBall = FALSE;
- u16 nextBall = GetNextBall(gBallToDisplay);
- sBallSwapped = TRUE;
- if (gBallToDisplay == nextBall)
- sameBall = TRUE;
- else
- gBallToDisplay = nextBall;
- SwapBallToDisplay(sameBall);
- PlaySE(SE_SELECT);
- }
- else if (JOY_HELD(B_LAST_USED_BALL_BUTTON) && (JOY_NEW(DPAD_UP) || JOY_NEW(DPAD_LEFT)))
+ if (!gLastUsedBallMenuPresent)
{
- bool8 sameBall = FALSE;
- u16 prevBall = GetPrevBall(gBallToDisplay);
- sBallSwapped = TRUE;
- if (gBallToDisplay == prevBall)
- sameBall = TRUE;
- else
- gBallToDisplay = prevBall;
- SwapBallToDisplay(sameBall);
- PlaySE(SE_SELECT);
+ gBattleStruct->ackBallUseBtn = FALSE;
}
- else if (JOY_NEW(B_BUTTON) || (!JOY_HELD(B_LAST_USED_BALL_BUTTON) && sBallSwapped))
+ else if (JOY_NEW(B_LAST_USED_BALL_BUTTON))
{
- sAckBallUseBtn = FALSE;
- sBallSwapped = FALSE;
- ArrowsChangeColorLastBallCycle(FALSE);
+ gBattleStruct->ackBallUseBtn = TRUE;
+ gBattleStruct->ballSwapped = FALSE;
+ ArrowsChangeColorLastBallCycle(TRUE);
}
- else if (!JOY_HELD(B_LAST_USED_BALL_BUTTON) && CanThrowLastUsedBall())
+
+ if (gBattleStruct->ackBallUseBtn)
{
- sAckBallUseBtn = FALSE;
- PlaySE(SE_SELECT);
- ArrowsChangeColorLastBallCycle(FALSE);
- TryHideLastUsedBall();
- BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_THROW_BALL, 0);
- PlayerBufferExecCompleted(battler);
+ if (JOY_HELD(B_LAST_USED_BALL_BUTTON) && (JOY_NEW(DPAD_DOWN) || JOY_NEW(DPAD_RIGHT)))
+ {
+ bool32 sameBall = FALSE;
+ u32 nextBall = GetNextBall(gBallToDisplay);
+ gBattleStruct->ballSwapped = TRUE;
+ if (gBallToDisplay == nextBall)
+ sameBall = TRUE;
+ else
+ gBallToDisplay = nextBall;
+ SwapBallToDisplay(sameBall);
+ PlaySE(SE_SELECT);
+ }
+ else if (JOY_HELD(B_LAST_USED_BALL_BUTTON) && (JOY_NEW(DPAD_UP) || JOY_NEW(DPAD_LEFT)))
+ {
+ bool32 sameBall = FALSE;
+ u32 prevBall = GetPrevBall(gBallToDisplay);
+ gBattleStruct->ballSwapped = TRUE;
+ if (gBallToDisplay == prevBall)
+ sameBall = TRUE;
+ else
+ gBallToDisplay = prevBall;
+ SwapBallToDisplay(sameBall);
+ PlaySE(SE_SELECT);
+ }
+ else if (JOY_NEW(B_BUTTON) || (!JOY_HELD(B_LAST_USED_BALL_BUTTON) && gBattleStruct->ballSwapped))
+ {
+ gBattleStruct->ackBallUseBtn = FALSE;
+ gBattleStruct->ballSwapped = FALSE;
+ ArrowsChangeColorLastBallCycle(FALSE);
+ }
+ else if (!JOY_HELD(B_LAST_USED_BALL_BUTTON) && CanThrowLastUsedBall())
+ {
+ gBattleStruct->ackBallUseBtn = FALSE;
+ PlaySE(SE_SELECT);
+ ArrowsChangeColorLastBallCycle(FALSE);
+ TryHideLastUsedBall();
+ BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_THROW_BALL, 0);
+ PlayerBufferExecCompleted(battler);
+ }
+ return;
}
- return;
}
-#endif
if (JOY_NEW(A_BUTTON))
{
@@ -407,22 +411,19 @@ static void HandleInputChooseAction(u32 battler)
{
SwapHpBarsWithHpText();
}
-#if DEBUG_BATTLE_MENU == TRUE
- else if (JOY_NEW(SELECT_BUTTON))
+ else if (DEBUG_BATTLE_MENU == TRUE && JOY_NEW(SELECT_BUTTON))
{
BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_DEBUG, 0);
PlayerBufferExecCompleted(battler);
}
-#endif
-#if B_LAST_USED_BALL == TRUE && B_LAST_USED_BALL_CYCLE == FALSE
- else if (JOY_NEW(B_LAST_USED_BALL_BUTTON) && CanThrowLastUsedBall())
+ else if (B_LAST_USED_BALL == TRUE && B_LAST_USED_BALL_CYCLE == FALSE
+ && JOY_NEW(B_LAST_USED_BALL_BUTTON) && CanThrowLastUsedBall())
{
PlaySE(SE_SELECT);
TryHideLastUsedBall();
BtlController_EmitTwoReturnValues(battler, BUFFER_B, B_ACTION_THROW_BALL, 0);
PlayerBufferExecCompleted(battler);
}
-#endif
}
static void HandleInputChooseTarget(u32 battler)
@@ -448,17 +449,13 @@ static void HandleInputChooseTarget(u32 battler)
{
PlaySE(SE_SELECT);
gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCB_HideAsMoveTarget;
- if (gBattleStruct->mega.playerSelect)
- BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_MEGA_EVOLUTION | (gMultiUsePlayerCursor << 8));
- else if (gBattleStruct->burst.playerSelect)
- BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_ULTRA_BURST | (gMultiUsePlayerCursor << 8));
- else if (gBattleStruct->dynamax.playerSelect)
- BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_DYNAMAX | (gMultiUsePlayerCursor << 8));
+ if (gBattleStruct->gimmick.playerSelect)
+ BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_GIMMICK | (gMultiUsePlayerCursor << 8));
else
BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | (gMultiUsePlayerCursor << 8));
EndBounceEffect(gMultiUsePlayerCursor, BOUNCE_HEALTHBOX);
TryHideLastUsedBall();
- HideTriggerSprites();
+ HideGimmickTriggerSprite();
PlayerBufferExecCompleted(battler);
}
else if (JOY_NEW(B_BUTTON) || gPlayerDpadHoldFrames > 59)
@@ -610,15 +607,11 @@ static void HandleInputShowEntireFieldTargets(u32 battler)
{
PlaySE(SE_SELECT);
HideAllTargets();
- if (gBattleStruct->mega.playerSelect)
- BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_MEGA_EVOLUTION | (gMultiUsePlayerCursor << 8));
- else if (gBattleStruct->burst.playerSelect)
- BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_ULTRA_BURST | (gMultiUsePlayerCursor << 8));
- else if (gBattleStruct->dynamax.playerSelect)
- BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_DYNAMAX | (gMultiUsePlayerCursor << 8));
+ if (gBattleStruct->gimmick.playerSelect)
+ BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_GIMMICK | (gMultiUsePlayerCursor << 8));
else
BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | (gMultiUsePlayerCursor << 8));
- HideTriggerSprites();
+ HideGimmickTriggerSprite();
PlayerBufferExecCompleted(battler);
}
else if (JOY_NEW(B_BUTTON) || gPlayerDpadHoldFrames > 59)
@@ -642,15 +635,11 @@ static void HandleInputShowTargets(u32 battler)
{
PlaySE(SE_SELECT);
HideShownTargets(battler);
- if (gBattleStruct->mega.playerSelect)
- BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_MEGA_EVOLUTION | (gMultiUsePlayerCursor << 8));
- else if (gBattleStruct->burst.playerSelect)
- BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_ULTRA_BURST | (gMultiUsePlayerCursor << 8));
- else if (gBattleStruct->dynamax.playerSelect)
- BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_DYNAMAX | (gMultiUsePlayerCursor << 8));
+ if (gBattleStruct->gimmick.playerSelect)
+ BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_GIMMICK | (gMultiUsePlayerCursor << 8));
else
BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | (gMultiUsePlayerCursor << 8));
- HideTriggerSprites();
+ HideGimmickTriggerSprite();
TryHideLastUsedBall();
PlayerBufferExecCompleted(battler);
}
@@ -684,33 +673,21 @@ static void HandleInputChooseMove(u32 battler)
else
gPlayerDpadHoldFrames = 0;
- if (JOY_NEW(A_BUTTON))
+ if (JOY_NEW(A_BUTTON) && !gBattleStruct->descriptionSubmenu)
{
PlaySE(SE_SELECT);
- if (moveInfo->moves[gMoveSelectionCursor[battler]] == MOVE_CURSE)
- {
- if (moveInfo->monType1 != TYPE_GHOST && moveInfo->monType2 != TYPE_GHOST && moveInfo->monType3 != TYPE_GHOST)
- moveTarget = MOVE_TARGET_USER;
- else
- moveTarget = MOVE_TARGET_SELECTED;
- }
- else
- {
- moveTarget = GetBattlerMoveTargetType(battler, moveInfo->moves[gMoveSelectionCursor[battler]]);
- }
+
+ moveTarget = GetBattlerMoveTargetType(battler, moveInfo->moves[gMoveSelectionCursor[battler]]);
if (gBattleStruct->zmove.viewing)
{
- u16 chosenMove = moveInfo->moves[gMoveSelectionCursor[battler]];
-
- QueueZMove(battler, chosenMove);
gBattleStruct->zmove.viewing = FALSE;
if (gMovesInfo[moveInfo->moves[gMoveSelectionCursor[battler]]].category != DAMAGE_CATEGORY_STATUS)
moveTarget = MOVE_TARGET_SELECTED; //damaging z moves always have selected target
}
// Status moves turn into Max Guard when Dynamaxed, targets user.
- if ((IsDynamaxed(battler) || gBattleStruct->dynamax.playerSelect))
+ if (GetActiveGimmick(battler) == GIMMICK_DYNAMAX || IsGimmickSelected(battler, GIMMICK_DYNAMAX))
moveTarget = gMovesInfo[GetMaxMove(battler, moveInfo->moves[gMoveSelectionCursor[battler]])].target;
if (moveTarget & MOVE_TARGET_USER)
@@ -766,15 +743,11 @@ static void HandleInputChooseMove(u32 battler)
{
case 0:
default:
- if (gBattleStruct->mega.playerSelect)
- BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_MEGA_EVOLUTION | (gMultiUsePlayerCursor << 8));
- else if (gBattleStruct->burst.playerSelect)
- BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_ULTRA_BURST | (gMultiUsePlayerCursor << 8));
- else if (gBattleStruct->dynamax.playerSelect)
- BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_DYNAMAX | (gMultiUsePlayerCursor << 8));
+ if (gBattleStruct->gimmick.playerSelect)
+ BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | RET_GIMMICK | (gMultiUsePlayerCursor << 8));
else
BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, gMoveSelectionCursor[battler] | (gMultiUsePlayerCursor << 8));
- HideTriggerSprites();
+ HideGimmickTriggerSprite();
TryHideLastUsedBall();
PlayerBufferExecCompleted(battler);
break;
@@ -798,21 +771,18 @@ static void HandleInputChooseMove(u32 battler)
break;
}
}
- else if (JOY_NEW(B_BUTTON) || gPlayerDpadHoldFrames > 59)
+ else if ((JOY_NEW(B_BUTTON) || gPlayerDpadHoldFrames > 59) && !gBattleStruct->descriptionSubmenu)
{
PlaySE(SE_SELECT);
+ gBattleStruct->gimmick.playerSelect = FALSE;
if (gBattleStruct->zmove.viewing)
{
ReloadMoveNames(battler);
}
else
{
- gBattleStruct->mega.playerSelect = FALSE;
- gBattleStruct->burst.playerSelect = FALSE;
- gBattleStruct->dynamax.playerSelect = FALSE;
- gBattleStruct->zmove.viable = FALSE;
BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, 0xFFFF);
- HideTriggerSprites();
+ HideGimmickTriggerSprite();
PlayerBufferExecCompleted(battler);
}
}
@@ -826,7 +796,9 @@ static void HandleInputChooseMove(u32 battler)
MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0);
MoveSelectionDisplayPpNumber(battler);
MoveSelectionDisplayMoveType(battler);
- TryChangeZIndicator(battler, gMoveSelectionCursor[battler]);
+ if (gBattleStruct->descriptionSubmenu)
+ MoveSelectionDisplayMoveDescription(battler);
+ TryChangeZTrigger(battler, gMoveSelectionCursor[battler]);
}
}
else if (JOY_NEW(DPAD_RIGHT) && !gBattleStruct->zmove.viewing)
@@ -840,7 +812,9 @@ static void HandleInputChooseMove(u32 battler)
MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0);
MoveSelectionDisplayPpNumber(battler);
MoveSelectionDisplayMoveType(battler);
- TryChangeZIndicator(battler, gMoveSelectionCursor[battler]);
+ if (gBattleStruct->descriptionSubmenu)
+ MoveSelectionDisplayMoveDescription(battler);
+ TryChangeZTrigger(battler, gMoveSelectionCursor[battler]);
}
}
else if (JOY_NEW(DPAD_UP) && !gBattleStruct->zmove.viewing)
@@ -853,7 +827,9 @@ static void HandleInputChooseMove(u32 battler)
MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0);
MoveSelectionDisplayPpNumber(battler);
MoveSelectionDisplayMoveType(battler);
- TryChangeZIndicator(battler, gMoveSelectionCursor[battler]);
+ if (gBattleStruct->descriptionSubmenu)
+ MoveSelectionDisplayMoveDescription(battler);
+ TryChangeZTrigger(battler, gMoveSelectionCursor[battler]);
}
}
else if (JOY_NEW(DPAD_DOWN) && !gBattleStruct->zmove.viewing)
@@ -867,10 +843,12 @@ static void HandleInputChooseMove(u32 battler)
MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0);
MoveSelectionDisplayPpNumber(battler);
MoveSelectionDisplayMoveType(battler);
- TryChangeZIndicator(battler, gMoveSelectionCursor[battler]);
+ if (gBattleStruct->descriptionSubmenu)
+ MoveSelectionDisplayMoveDescription(battler);
+ TryChangeZTrigger(battler, gMoveSelectionCursor[battler]);
}
}
- else if (JOY_NEW(SELECT_BUTTON) && !gBattleStruct->zmove.viewing)
+ else if (JOY_NEW(SELECT_BUTTON) && !gBattleStruct->zmove.viewing && !gBattleStruct->descriptionSubmenu)
{
if (gNumberOfMovesToChoose > 1 && !(gBattleTypeFlags & BATTLE_TYPE_LINK))
{
@@ -886,36 +864,37 @@ static void HandleInputChooseMove(u32 battler)
gBattlerControllerFuncs[battler] = HandleMoveSwitching;
}
}
- else if (JOY_NEW(START_BUTTON))
+ else if (gBattleStruct->descriptionSubmenu)
{
- if (CanMegaEvolve(battler))
+ if (JOY_NEW(B_MOVE_DESCRIPTION_BUTTON) || JOY_NEW(A_BUTTON) || JOY_NEW(B_BUTTON))
{
- gBattleStruct->mega.playerSelect ^= 1;
- ChangeMegaTriggerSprite(gBattleStruct->mega.triggerSpriteId, gBattleStruct->mega.playerSelect);
- PlaySE(SE_SELECT);
- }
- else if (CanUltraBurst(battler))
- {
- gBattleStruct->burst.playerSelect ^= 1;
- ChangeBurstTriggerSprite(gBattleStruct->burst.triggerSpriteId, gBattleStruct->burst.playerSelect);
- PlaySE(SE_SELECT);
- }
- else if (gBattleStruct->zmove.viable)
- {
- // show z move name / info
- //TODO: brighten z move symbol
+ gBattleStruct->descriptionSubmenu = FALSE;
+ if (gCategoryIconSpriteId != 0xFF)
+ {
+ DestroySprite(&gSprites[gCategoryIconSpriteId]);
+ gCategoryIconSpriteId = 0xFF;
+ }
+
+ FillWindowPixelBuffer(B_WIN_MOVE_DESCRIPTION, PIXEL_FILL(0));
+ ClearStdWindowAndFrame(B_WIN_MOVE_DESCRIPTION, FALSE);
+ CopyWindowToVram(B_WIN_MOVE_DESCRIPTION, COPYWIN_GFX);
PlaySE(SE_SELECT);
- if (!gBattleStruct->zmove.viewing)
- MoveSelectionDisplayZMove(gBattleStruct->zmove.chosenZMove, battler);
- else
- ReloadMoveNames(battler);
+ MoveSelectionDisplayPpNumber(battler);
+ MoveSelectionDisplayMoveType(battler);
}
- else if (CanDynamax(battler))
+ }
+ else if (JOY_NEW(B_MOVE_DESCRIPTION_BUTTON) && B_MOVE_DESCRIPTION_BUTTON != B_LAST_USED_BALL_BUTTON)
+ {
+ gBattleStruct->descriptionSubmenu = TRUE;
+ MoveSelectionDisplayMoveDescription(battler);
+ }
+ else if (JOY_NEW(START_BUTTON))
+ {
+ if (gBattleStruct->gimmick.usableGimmick[battler] != GIMMICK_NONE)
{
- gBattleStruct->dynamax.playerSelect ^= 1;
- MoveSelectionDisplayMoveNames(battler);
- MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0);
- ChangeDynamaxTriggerSprite(gBattleStruct->dynamax.triggerSpriteId, gBattleStruct->dynamax.playerSelect);
+ gBattleStruct->gimmick.playerSelect ^= 1;
+ ReloadMoveNames(battler);
+ ChangeGimmickTriggerSprite(gBattleStruct->gimmick.triggerSpriteId, gBattleStruct->gimmick.playerSelect);
PlaySE(SE_SELECT);
}
}
@@ -923,15 +902,20 @@ static void HandleInputChooseMove(u32 battler)
static void ReloadMoveNames(u32 battler)
{
- gBattleStruct->mega.playerSelect = FALSE;
- gBattleStruct->burst.playerSelect = FALSE;
- gBattleStruct->dynamax.playerSelect = FALSE;
- gBattleStruct->zmove.viewing = FALSE;
- MoveSelectionDestroyCursorAt(battler);
- MoveSelectionDisplayMoveNames(battler);
- MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0);
- MoveSelectionDisplayPpNumber(battler);
- MoveSelectionDisplayMoveType(battler);
+ if (gBattleStruct->zmove.viable && !gBattleStruct->zmove.viewing)
+ {
+ struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[battler][4]);
+ MoveSelectionDisplayZMove(GetUsableZMove(battler, moveInfo->moves[gMoveSelectionCursor[battler]]), battler);
+ }
+ else
+ {
+ gBattleStruct->zmove.viewing = FALSE;
+ MoveSelectionDestroyCursorAt(battler);
+ MoveSelectionDisplayMoveNames(battler);
+ MoveSelectionCreateCursorAt(gMoveSelectionCursor[battler], 0);
+ MoveSelectionDisplayPpNumber(battler);
+ MoveSelectionDisplayMoveType(battler);
+ }
}
static u32 UNUSED HandleMoveInputUnused(u32 battler)
@@ -1084,7 +1068,7 @@ static void HandleMoveSwitching(u32 battler)
MoveSelectionDisplayPpString(battler);
MoveSelectionDisplayPpNumber(battler);
MoveSelectionDisplayMoveType(battler);
- GetUsableZMoves(battler, moveInfo->moves);
+ AssignUsableZMoves(battler, moveInfo->moves);
}
else if (JOY_NEW(B_BUTTON | SELECT_BUTTON))
{
@@ -1455,7 +1439,7 @@ static void Task_GiveExpToMon(u8 taskId)
CalculateMonStats(mon);
// Reapply Dynamax HP multiplier after stats are recalculated.
- if (IsDynamaxed(battler) && monId == gBattlerPartyIndexes[battler])
+ if (GetActiveGimmick(battler) == GIMMICK_DYNAMAX && monId == gBattlerPartyIndexes[battler])
{
ApplyDynamaxHPMultiplier(battler, mon);
gBattleMons[battler].hp = gBattleStruct->dynamax.levelUpHP;
@@ -1539,7 +1523,7 @@ static void Task_GiveExpWithExpBar(u8 taskId)
CalculateMonStats(&gPlayerParty[monId]);
// Reapply Dynamax HP multiplier after stats are recalculated.
- if (IsDynamaxed(battler) && monId == gBattlerPartyIndexes[battler])
+ if (GetActiveGimmick(battler) == GIMMICK_DYNAMAX && monId == gBattlerPartyIndexes[battler])
{
ApplyDynamaxHPMultiplier(battler, &gPlayerParty[monId]);
gBattleMons[battler].hp = gBattleStruct->dynamax.levelUpHP;
@@ -1692,8 +1676,7 @@ static void MoveSelectionDisplayMoveNames(u32 battler)
for (i = 0; i < MAX_MON_MOVES; i++)
{
MoveSelectionDestroyCursorAt(i);
- if ((gBattleStruct->dynamax.playerSelect && CanDynamax(battler))
- || IsDynamaxed(battler))
+ if (IsGimmickSelected(battler, GIMMICK_DYNAMAX) || GetActiveGimmick(battler) == GIMMICK_DYNAMAX)
StringCopy(gDisplayedStringBattle, GetMoveName(GetMaxMove(battler, moveInfo->moves[i])));
else
StringCopy(gDisplayedStringBattle, GetMoveName(moveInfo->moves[i]));
@@ -1729,36 +1712,95 @@ static void MoveSelectionDisplayPpNumber(u32 battler)
static void MoveSelectionDisplayMoveType(u32 battler)
{
- u8 *txtPtr;
+ u8 *txtPtr, *end;
u8 type;
u32 speciesId;
- struct Pokemon *mon;
struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[battler][4]);
txtPtr = StringCopy(gDisplayedStringBattle, gText_MoveInterfaceType);
- *(txtPtr)++ = EXT_CTRL_CODE_BEGIN;
- *(txtPtr)++ = EXT_CTRL_CODE_FONT;
- *(txtPtr)++ = FONT_NORMAL;
- if (moveInfo->moves[gMoveSelectionCursor[battler]] == MOVE_IVY_CUDGEL)
+ type = gMovesInfo[moveInfo->moves[gMoveSelectionCursor[battler]]].type;
+
+ if (moveInfo->moves[gMoveSelectionCursor[battler]] == MOVE_TERA_BLAST)
+ {
+ if (IsGimmickSelected(battler, GIMMICK_TERA) || GetActiveGimmick(battler) == GIMMICK_TERA)
+ type = GetBattlerTeraType(battler);
+ }
+ else if (moveInfo->moves[gMoveSelectionCursor[battler]] == MOVE_IVY_CUDGEL)
{
- mon = &GetSideParty(GetBattlerSide(battler))[gBattlerPartyIndexes[battler]];
- speciesId = GetMonData(mon, MON_DATA_SPECIES);
+ speciesId = gBattleMons[battler].species;
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;
- else
- type = gMovesInfo[MOVE_IVY_CUDGEL].type;
+ 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;
+ }
+ else if (moveInfo->moves[gMoveSelectionCursor[battler]] == MOVE_TERA_STARSTORM)
+ {
+ if (gBattleMons[battler].species == SPECIES_TERAPAGOS_STELLAR
+ || (IsGimmickSelected(battler, GIMMICK_TERA) && gBattleMons[battler].species == SPECIES_TERAPAGOS_TERASTAL))
+ type = TYPE_STELLAR;
}
- else
- type = gMovesInfo[moveInfo->moves[gMoveSelectionCursor[battler]]].type;
- StringCopy(txtPtr, gTypesInfo[type].name);
+ end = StringCopy(txtPtr, gTypesInfo[type].name);
+ PrependFontIdToFit(txtPtr, end, FONT_NORMAL, WindowWidthPx(B_WIN_MOVE_TYPE) - 25);
BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MOVE_TYPE);
}
+static void MoveSelectionDisplayMoveDescription(u32 battler)
+{
+ struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct*)(&gBattleResources->bufferA[battler][4]);
+ u16 move = moveInfo->moves[gMoveSelectionCursor[battler]];
+ u16 pwr = gMovesInfo[move].power;
+ u16 acc = gMovesInfo[move].accuracy;
+ u8 cat = gMovesInfo[move].category;
+
+ u8 pwr_num[3], acc_num[3];
+ u8 cat_desc[7] = _("CAT: ");
+ u8 pwr_desc[7] = _("PWR: ");
+ u8 acc_desc[7] = _("ACC: ");
+ u8 cat_start[] = _("{CLEAR_TO 0x03}");
+ u8 pwr_start[] = _("{CLEAR_TO 0x38}");
+ u8 acc_start[] = _("{CLEAR_TO 0x6D}");
+ LoadMessageBoxAndBorderGfx();
+ DrawStdWindowFrame(B_WIN_MOVE_DESCRIPTION, FALSE);
+ if (pwr < 2)
+ StringCopy(pwr_num, gText_BattleSwitchWhich5);
+ else
+ ConvertIntToDecimalStringN(pwr_num, pwr, STR_CONV_MODE_LEFT_ALIGN, 3);
+ if (acc < 2)
+ StringCopy(acc_num, gText_BattleSwitchWhich5);
+ else
+ ConvertIntToDecimalStringN(acc_num, acc, STR_CONV_MODE_LEFT_ALIGN, 3);
+ StringCopy(gDisplayedStringBattle, cat_start);
+ StringAppend(gDisplayedStringBattle, cat_desc);
+ StringAppend(gDisplayedStringBattle, pwr_start);
+ StringAppend(gDisplayedStringBattle, pwr_desc);
+ StringAppend(gDisplayedStringBattle, pwr_num);
+ StringAppend(gDisplayedStringBattle, acc_start);
+ StringAppend(gDisplayedStringBattle, acc_desc);
+ StringAppend(gDisplayedStringBattle, acc_num);
+ StringAppend(gDisplayedStringBattle, gText_NewLine);
+ if (gMovesInfo[move].effect == EFFECT_PLACEHOLDER)
+ StringAppend(gDisplayedStringBattle, gNotDoneYetDescription);
+ else
+ StringAppend(gDisplayedStringBattle, gMovesInfo[move].description);
+ BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MOVE_DESCRIPTION);
+
+ if (gCategoryIconSpriteId == 0xFF)
+ gCategoryIconSpriteId = CreateSprite(&gSpriteTemplate_CategoryIcons, 38, 64, 1);
+
+ StartSpriteAnim(&gSprites[gCategoryIconSpriteId], cat);
+
+ CopyWindowToVram(B_WIN_MOVE_DESCRIPTION, COPYWIN_FULL);
+}
+
void MoveSelectionCreateCursorAt(u8 cursorPosition, u8 baseTileNum)
{
u16 src[2];
@@ -2056,27 +2098,16 @@ static void PlayerHandleChooseMove(u32 battler)
struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleResources->bufferA[battler][4]);
InitMoveSelectionsVarsAndStrings(battler);
- gBattleStruct->mega.playerSelect = FALSE;
- gBattleStruct->burst.playerSelect = FALSE;
- gBattleStruct->dynamax.playerSelect = FALSE;
- if (!IsMegaTriggerSpriteActive())
- gBattleStruct->mega.triggerSpriteId = 0xFF;
- if (CanMegaEvolve(battler))
- CreateMegaTriggerSprite(battler, 0);
- if (!IsBurstTriggerSpriteActive())
- gBattleStruct->burst.triggerSpriteId = 0xFF;
- if (CanUltraBurst(battler))
- CreateBurstTriggerSprite(battler, 0);
- if (!IsDynamaxTriggerSpriteActive())
- gBattleStruct->dynamax.triggerSpriteId = 0xFF;
- if (CanDynamax(battler))
- CreateDynamaxTriggerSprite(battler, 0);
- if (!IsZMoveTriggerSpriteActive())
- gBattleStruct->zmove.triggerSpriteId = 0xFF;
-
- GetUsableZMoves(battler, moveInfo->moves);
- gBattleStruct->zmove.viable = IsZMoveUsable(battler, gMoveSelectionCursor[battler]);
- CreateZMoveTriggerSprite(battler, gBattleStruct->zmove.viable);
+ gBattleStruct->gimmick.playerSelect = FALSE;
+
+ AssignUsableZMoves(battler, moveInfo->moves);
+ gBattleStruct->zmove.viable = (gBattleStruct->zmove.possibleZMoves[battler] & gBitTable[gMoveSelectionCursor[battler]]) != 0;
+
+ if (!IsGimmickTriggerSpriteActive())
+ gBattleStruct->gimmick.triggerSpriteId = 0xFF;
+ if (!(gBattleStruct->gimmick.usableGimmick[battler] == GIMMICK_Z_MOVE && !gBattleStruct->zmove.viable))
+ CreateGimmickTriggerSprite(battler);
+
gBattlerControllerFuncs[battler] = HandleChooseMoveAfterDma3;
}
}
diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c
index b817adf09754..2dffd4f70288 100644
--- a/src/battle_controller_player_partner.c
+++ b/src/battle_controller_player_partner.c
@@ -368,17 +368,17 @@ static void PlayerPartnerHandleChooseMove(u32 battler)
if (gAbsentBattlerFlags & gBitTable[gBattlerTarget])
gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
}
-
- if (ShouldUseZMove(battler, gBattlerTarget, moveInfo->moves[chosenMoveId]))
- QueueZMove(battler, moveInfo->moves[chosenMoveId]);
-
- // If partner can mega evolve, do it.
- if (CanMegaEvolve(battler))
- BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, (chosenMoveId) | (RET_MEGA_EVOLUTION) | (gBattlerTarget << 8));
- else if (CanUltraBurst(battler))
- BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, (chosenMoveId) | (RET_ULTRA_BURST) | (gBattlerTarget << 8));
+ // If partner can and should use a gimmick (considering trainer data), do it
+ if (gBattleStruct->gimmick.usableGimmick[battler] != GIMMICK_NONE
+ && !(gBattleStruct->gimmick.usableGimmick[battler] == GIMMICK_Z_MOVE
+ && !ShouldUseZMove(battler, gBattlerTarget, moveInfo->moves[chosenMoveId])))
+ {
+ BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, (chosenMoveId) | (RET_GIMMICK) | (gBattlerTarget << 8));
+ }
else
+ {
BtlController_EmitTwoReturnValues(battler, BUFFER_B, 10, (chosenMoveId) | (gBattlerTarget << 8));
+ }
}
PlayerPartnerBufferExecCompleted(battler);
diff --git a/src/battle_controllers.c b/src/battle_controllers.c
index c4acc1691a0c..d6b2fbdc3a95 100644
--- a/src/battle_controllers.c
+++ b/src/battle_controllers.c
@@ -11,6 +11,7 @@
#include "battle_setup.h"
#include "battle_tv.h"
#include "cable_club.h"
+#include "event_object_movement.h"
#include "link.h"
#include "link_rfu.h"
#include "palette.h"
@@ -609,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)
@@ -1608,6 +1610,15 @@ static u32 GetBattlerMonData(u32 battler, struct Pokemon *party, u32 monId, u8 *
src = (u8 *)&battleMon;
for (size = 0; size < sizeof(battleMon); size++)
dst[size] = src[size];
+ #if TESTING
+ if (gTestRunnerEnabled)
+ {
+ u32 side = GetBattlerSide(battler);
+ u32 partyIndex = gBattlerPartyIndexes[battler];
+ if (TestRunner_Battle_GetForcedAbility(side, partyIndex))
+ gBattleMons[battler].ability = gBattleStruct->overwrittenAbilities[battler] = TestRunner_Battle_GetForcedAbility(side, partyIndex);
+ }
+ #endif
break;
case REQUEST_SPECIES_BATTLE:
data16 = GetMonData(&party[monId], MON_DATA_SPECIES);
@@ -2085,7 +2096,22 @@ static void SetBattlerMonData(u32 battler, struct Pokemon *party, u32 monId)
HandleLowHpMusicChange(&party[gBattlerPartyIndexes[battler]], battler);
}
-void StartSendOutAnim(u32 battler, bool32 dontClearSubstituteBit)
+// In normal singles, if follower pokemon is out, have it slide in instead of being thrown
+static bool8 ShouldDoSlideInAnim(void)
+{
+ struct ObjectEvent *followerObj = GetFollowerObject();
+ if (!followerObj || followerObj->invisible)
+ return FALSE;
+ if (gBattleTypeFlags & (
+ BATTLE_TYPE_LINK | BATTLE_TYPE_DOUBLE | BATTLE_TYPE_FRONTIER | BATTLE_TYPE_FIRST_BATTLE |
+ BATTLE_TYPE_SAFARI | BATTLE_TYPE_WALLY_TUTORIAL | BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_TWO_OPPONENTS |
+ BATTLE_TYPE_INGAME_PARTNER | BATTLE_TYPE_RECORDED | BATTLE_TYPE_TRAINER_HILL)
+ )
+ return FALSE;
+ return TRUE;
+}
+
+void StartSendOutAnim(u32 battler, bool32 dontClearSubstituteBit, bool32 doSlideIn)
{
u16 species;
u32 side = GetBattlerSide(battler);
@@ -2116,7 +2142,7 @@ void StartSendOutAnim(u32 battler, bool32 dontClearSubstituteBit)
gSprites[gBattleControllerData[battler]].data[1] = gBattlerSpriteIds[battler];
gSprites[gBattleControllerData[battler]].data[2] = battler;
- gSprites[gBattleControllerData[battler]].data[0] = DoPokeballSendOutAnimation(battler, 0, (side == B_SIDE_OPPONENT) ? POKEBALL_OPPONENT_SENDOUT : POKEBALL_PLAYER_SENDOUT);
+ gSprites[gBattleControllerData[battler]].data[0] = DoPokeballSendOutAnimation(battler, 0, (side == B_SIDE_OPPONENT) ? POKEBALL_OPPONENT_SENDOUT : (doSlideIn ? POKEBALL_PLAYER_SLIDEIN : POKEBALL_PLAYER_SENDOUT));
}
static void FreeMonSprite(u32 battler)
@@ -2440,7 +2466,7 @@ void BtlController_HandleSwitchInAnim(u32 battler, bool32 isPlayerSide, void (*c
gBattlerPartyIndexes[battler] = gBattleResources->bufferA[battler][1];
if (isPlayerSide)
BattleLoadMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battler]], battler);
- StartSendOutAnim(battler, gBattleResources->bufferA[battler][2]);
+ StartSendOutAnim(battler, gBattleResources->bufferA[battler][2], FALSE);
gBattlerControllerFuncs[battler] = controllerCallback;
}
@@ -2936,17 +2962,17 @@ static void Task_StartSendOutAnim(u8 taskId)
if (TwoMonsAtSendOut(battler))
{
gBattleResources->bufferA[battler][1] = gBattlerPartyIndexes[battler];
- StartSendOutAnim(battler, FALSE);
+ StartSendOutAnim(battler, FALSE, ShouldDoSlideInAnim());
battlerPartner = battler ^ BIT_FLANK;
gBattleResources->bufferA[battlerPartner][1] = gBattlerPartyIndexes[battlerPartner];
BattleLoadMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battlerPartner]], battlerPartner);
- StartSendOutAnim(battlerPartner, FALSE);
+ StartSendOutAnim(battlerPartner, FALSE, ShouldDoSlideInAnim());
}
else
{
gBattleResources->bufferA[battler][1] = gBattlerPartyIndexes[battler];
- StartSendOutAnim(battler, FALSE);
+ StartSendOutAnim(battler, FALSE, ShouldDoSlideInAnim());
}
gBattlerControllerFuncs[battler] = (void*)(GetWordTaskArg(taskId, tControllerFunc_1));
DestroyTask(taskId);
diff --git a/src/battle_debug.c b/src/battle_debug.c
index 4e9d5ecf297a..b088aa73ba8a 100644
--- a/src/battle_debug.c
+++ b/src/battle_debug.c
@@ -118,42 +118,125 @@ enum
enum
{
- ACTIVE_WIN_MAIN,
- ACTIVE_WIN_SECONDARY,
- ACTIVE_WIN_MODIFY
+ LIST_STAT_HP_CURRENT,
+ LIST_STAT_HP_MAX,
+ LIST_STAT_ATTACK,
+ LIST_STAT_DEFENSE,
+ LIST_STAT_SPEED,
+ LIST_STAT_SP_ATK,
+ LIST_STAT_SP_DEF,
};
enum
{
- VAL_U8,
- VAL_U16,
- VAL_U32,
- VAL_BITFIELD_8,
- VAL_BITFIELD_16,
- VAL_BITFIELD_32,
- VAR_SIDE_STATUS,
- VAR_SHOW_HP,
- VAR_SUBSTITUTE,
- VAR_IN_LOVE,
- VAR_U16_4_ENTRIES,
- VAL_S8,
- VAL_ALL_STAT_STAGES,
+ LIST_STATUS1_SLEEP,
+ LIST_STATUS1_POISON,
+ LIST_STATUS1_BURN,
+ LIST_STATUS1_FREEZE,
+ LIST_STATUS1_PARALYSIS,
+ LIST_STATUS1_TOXIC_POISON,
+ LIST_STATUS1_TOXIC_COUNTER,
+ LIST_STATUS1_FROSTBITE,
+};
+
+enum
+{
+ LIST_STATUS2_CONFUSION,
+ LIST_STATUS2_FLINCHED,
+ LIST_STATUS2_TORMENT,
+ LIST_STATUS2_POWDER,
+ LIST_STATUS2_DEFENSE_CURL,
+ LIST_STATUS2_RECHARGE,
+ LIST_STATUS2_RAGE,
+ LIST_STATUS2_DESTINY_BOND,
+ LIST_STATUS2_ESCAPE_PREVENTION,
+ LIST_STATUS2_CURSED,
+ LIST_STATUS2_FORESIGHT,
+ LIST_STATUS2_DRAGON_CHEER,
+ LIST_STATUS2_FOCUS_ENERGY
+};
+
+enum
+{
+ LIST_STATUS3_LEECH_SEED_HEALER,
+ LIST_STATUS3_LEECH_SEEDED,
+ LIST_STATUS3_ALWAYS_HITS,
+ LIST_STATUS3_PERISH_SONG,
+ LIST_STATUS3_ON_AIR,
+ LIST_STATUS3_UNDERGROUND,
+ LIST_STATUS3_MINIMIZED,
+ LIST_STATUS3_CHARGED_UP,
+ LIST_STATUS3_ROOTED,
+ LIST_STATUS3_YAWN,
+ LIST_STATUS3_IMPRISONED_OTHERS,
+ LIST_STATUS3_GRUDGE,
+ LIST_STATUS3_GASTRO_ACID,
+ LIST_STATUS3_EMBARGO,
+ LIST_STATUS3_UNDERWATER,
+ LIST_STATUS3_SMACKED_DOWN,
+ LIST_STATUS3_TELEKINESIS,
+ LIST_STATUS3_MIRACLE_EYED,
+ LIST_STATUS3_MAGNET_RISE,
+ LIST_STATUS3_HEAL_BLOCK,
+ LIST_STATUS3_AQUA_RING,
+ LIST_STATUS3_LASER_FOCUS,
+ LIST_STATUS3_POWER_TRICK,
+};
+
+enum
+{
+ LIST_STATUS4_ELECTRIFIED,
+ LIST_STATUS4_MUD_SPORT,
+ LIST_STATUS4_WATER_SPORT,
+ LIST_STATUS4_SALT_CURE,
+ LIST_STATUS4_SYRUP_BOMB,
+ LIST_STATUS4_GLAIVE_RUSH,
};
enum
{
LIST_SIDE_REFLECT,
LIST_SIDE_LIGHTSCREEN,
+ LIST_SIDE_STICKY_WEB,
LIST_SIDE_SPIKES,
LIST_SIDE_SAFEGUARD,
LIST_SIDE_MIST,
+ LIST_SIDE_TAILWIND,
LIST_SIDE_AURORA_VEIL,
LIST_SIDE_LUCKY_CHANT,
- LIST_SIDE_TAILWIND,
- LIST_SIDE_STEALTH_ROCK,
LIST_SIDE_TOXIC_SPIKES,
- LIST_SIDE_STICKY_WEB,
+ LIST_SIDE_STEALTH_ROCK,
LIST_SIDE_STEELSURGE,
+ LIST_SIDE_DAMAGE_NON_TYPES,
+ LIST_SIDE_RAINBOW,
+ LIST_SIDE_SEA_OF_FIRE,
+ LIST_SIDE_SWAMP,
+};
+
+enum
+{
+ LIST_AI_CHECK_BAD_MOVE,
+ LIST_AI_TRY_TO_FAINT,
+ LIST_AI_CHECK_VIABILITY,
+ LIST_AI_SETUP_FIRST_TURN,
+ LIST_AI_RISKY,
+ LIST_AI_PREFER_STRONGEST_MOVE,
+ LIST_AI_PREFER_BATON_PASS,
+ LIST_AI_DOUBLE_BATTLE,
+ LIST_AI_HP_AWARE,
+ LIST_AI_POWERFUL_STATUS,
+ LIST_AI_NEGATE_UNAWARE,
+ LIST_AI_WILL_SUICIDE,
+ LIST_AI_HELP_PARTNER,
+ LIST_AI_PREFER_STATUS_MOVES,
+ LIST_AI_STALL,
+ LIST_AI_SMART_SWITCHING,
+ LIST_AI_ACE_POKEMON,
+ LIST_AI_OMNISCIENT,
+ LIST_AI_SMART_MON_CHOICES,
+ LIST_AI_ROAMING,
+ LIST_AI_SAFARI,
+ LIST_AI_FIRST_BATTLE,
};
enum
@@ -163,91 +246,166 @@ enum
VARIOUS_IN_LOVE,
};
+enum
+{
+ ACTIVE_WIN_MAIN,
+ ACTIVE_WIN_SECONDARY,
+ ACTIVE_WIN_MODIFY
+};
+
+enum
+{
+ VAL_U8,
+ VAL_U16,
+ VAL_U32,
+ VAL_BITFIELD_8,
+ VAL_BITFIELD_16,
+ VAL_BITFIELD_32,
+ VAR_SIDE_STATUS,
+ VAR_SHOW_HP,
+ VAR_SUBSTITUTE,
+ VAR_IN_LOVE,
+ VAR_U16_4_ENTRIES,
+ VAL_S8,
+ VAL_ALL_STAT_STAGES,
+};
+
// Static Declarations
static const u8 *GetHoldEffectName(u16 holdEffect);
// const rom data
-static const u8 sText_HoldEffect[] = _("Hold Effect");
-static const u8 sText_Ability[] = _("Ability");
static const u8 sText_Moves[] = _("Moves");
+static const u8 sText_Ability[] = _("Ability");
+static const u8 sText_HeldItem[] = _("Held Item");
+static const u8 sText_HoldEffect[] = _("Hold Effect");
+static const u8 sText_PP[] = _("PP");
+static const u8 sText_Types[] = _("Types");
static const u8 sText_Stats[] = _("Stats");
static const u8 sText_StatStages[] = _("Stat Stages");
static const u8 sText_Status1[] = _("Status1");
static const u8 sText_Status2[] = _("Status2");
static const u8 sText_Status3[] = _("Status3");
static const u8 sText_Status4[] = _("Status4");
-static const u8 sText_HeldItem[] = _("Held Item");
static const u8 sText_SideStatus[] = _("Side Status");
-static const u8 sText_MaxHp[] = _("HP Max");
+static const u8 sText_AI[] = _("AI");
+static const u8 sText_AIMovePts[] = _("AI Pts/Dmg");
+static const u8 sText_AiKnowledge[] = _("AI Info");
+static const u8 sText_AiParty[] = _("AI Party");
+static const u8 sText_Various[] = _("Various");
static const u8 sText_CurrHp[] = _("HP Current");
+static const u8 sText_MaxHp[] = _("HP Max");
+static const u8 sText_Attack[] = _("Attack");
+static const u8 sText_Defense[] = _("Defense");
+static const u8 sText_Speed[] = _("Speed");
+static const u8 sText_SpAtk[] = _("Sp. Atk");
+static const u8 sText_SpDef[] = _("Sp. Def");
+static const u8 sText_Sleep[] = _("Sleep");
+static const u8 sText_Poison[] = _("Poison");
+static const u8 sText_Burn[] = _("Burn");
static const u8 sText_Freeze[] = _("Freeze");
-static const u8 sText_Frostbite[] = _("Frostbite");
+static const u8 sText_Paralysis[] = _("Paralysis");
static const u8 sText_ToxicPoison[] = _("Toxic Poison");
static const u8 sText_ToxicCounter[] = _("Toxic Counter");
-static const u8 sText_Flinch[] = _("Flinch");
+static const u8 sText_Frostbite[] = _("Frostbite");
+static const u8 sText_Confusion[] = _("Confusion");
+static const u8 sText_Flinched[] = _("Flinched");
static const u8 sText_Uproar[] = _("Uproar");
+static const u8 sText_Torment[] = _("Torment");
static const u8 sText_Bide[] = _("Bide");
static const u8 sText_LockConfuse[] = _("Lock Confuse");
-static const u8 sText_MultipleTurns[] = _("MultipleTurns");
-static const u8 sText_FocusEnergy[] = _("Focus Energy");
+static const u8 sText_MultipleTurns[] = _("Multiple Turns");
+static const u8 sText_Wrapped[] = _("Wrapped");
+static const u8 sText_Powder[] = _("Powder");
+static const u8 sText_Infatuation[] = _("Infatuation");
+static const u8 sText_DefenseCurl[] = _("Defense Curl");
static const u8 sText_Transformed[] = _("Transformed");
static const u8 sText_Recharge[] = _("Recharge");
static const u8 sText_Rage[] = _("Rage");
static const u8 sText_Substitute[] = _("Substitute");
-static const u8 sText_SubstituteHp[] = _("Substitute HP");
static const u8 sText_DestinyBond[] = _("Destiny Bond");
-static const u8 sText_CantEscape[] = _("Cant Escape");
+static const u8 sText_EscapePrevention[] = _("Escape Prevention");
static const u8 sText_Nightmare[] = _("Nightmare");
static const u8 sText_Cursed[] = _("Cursed");
-static const u8 sText_Foresight[] = _("Foresighted");
-static const u8 sText_DefenseCurl[] = _("Def Curled");
-static const u8 sText_Tormented[] = _("Tormented");
-static const u8 sText_AlwaysHits[] = _("Sure Hit");
+static const u8 sText_Foresight[] = _("Foresight");
+static const u8 sText_DragonCheer[] = _("Dragon Cheer");
+static const u8 sText_FocusEnergy[] = _("Focus Energy");
+static const u8 sText_LeechSeedHealer[] = _("Leech Seed Healer");
+static const u8 sText_LeechSeeded[] = _("Leech Seeded");
+static const u8 sText_AlwaysHits[] = _("Always Hits");
+static const u8 sText_PerishSong[] = _("Perish Song");
+static const u8 sText_OnAir[] = _("On Air");
+static const u8 sText_Underground[] = _("Underground");
+static const u8 sText_Minimized[] = _("Minimized");
static const u8 sText_ChargedUp[] = _("Charged Up");
static const u8 sText_Rooted[] = _("Rooted");
-static const u8 sText_Yawned[] = _("Yawned");
-static const u8 sText_Minimized[] = _("Minimized");
-static const u8 sText_NoCrit[] = _("No Crit");
-static const u8 sText_Imprisoned[] = _("Imprison");
+static const u8 sText_Yawn[] = _("Yawn");
+static const u8 sText_ImprisonedOthers[] = _("Imprisoned Others");
+static const u8 sText_Grudge[] = _("Grudge");
+static const u8 sText_GastroAcid[] = _("Gastro Acid");
+static const u8 sText_Embargo[] = _("Embargo");
+static const u8 sText_Underwater[] = _("Underwater");
+static const u8 sText_Trace[] = _("Trace");
+static const u8 sText_SmackedDown[] = _("Smacked Down");
+static const u8 sText_MeFirst[] = _("Me First");
+static const u8 sText_Telekinesis[] = _("Telekinesis");
+static const u8 sText_PhantomForce[] = _("Phantom Force");
+static const u8 sText_MiracleEyed[] = _("Miracle Eyed");
+static const u8 sText_MagnetRise[] = _("Magnet Rise");
+static const u8 sText_HealBlock[] = _("Heal Block");
+static const u8 sText_AquaRing[] = _("Aqua Ring");
+static const u8 sText_LaserFocus[] = _("Laser Focus");
+static const u8 sText_PowerTrick[] = _("Power Trick");
+static const u8 sText_SkyDropped[] = _("Sky Dropped");
+static const u8 sText_Electrified[] = _("Electrified");
+static const u8 sText_MudSport[] = _("Mud Sport");
+static const u8 sText_WaterSport[] = _("Water Sport");
+static const u8 sText_InfiniteConfusion[] = _("Infinite Confusion");
+static const u8 sText_SaltCure[] = _("Salt Cure");
+static const u8 sText_SyrupBomb[] = _("Syrup Bomb");
+static const u8 sText_GlaiveRush[] = _("Glaive Rush");
static const u8 sText_Reflect[] = _("Reflect");
static const u8 sText_LightScreen[] = _("Light Screen");
+static const u8 sText_StickyWeb[] = _("Sticky Web");
static const u8 sText_Spikes[] = _("Spikes");
static const u8 sText_Safeguard[] = _("Safeguard");
+static const u8 sText_FutureAttack[] = _("Future Attack");
static const u8 sText_Mist[] = _("Mist");
-static const u8 sText_ShowOpponentHP[] = _("Opponent Hp");
-static const u8 sText_Types[] = _("Types");
-static const u8 sText_GastroAcid[] = _("Gastro Acid");
-static const u8 sText_SmackDown[] = _("Smacked Down");
-static const u8 sText_MiracleEye[] = _("Miracle Eye");
-static const u8 sText_AquaRing[] = _("Aqua Ring");
-static const u8 sText_LaserFocus[] = _("Laser Focused");
-static const u8 sText_Electrified[] = _("Electrified");
+static const u8 sText_Tailwind[] = _("Tailwind");
static const u8 sText_AuroraVeil[] = _("Aurora Veil");
static const u8 sText_LuckyChant[] = _("Lucky Chant");
-static const u8 sText_Tailwind[] = _("Tailwind");
-static const u8 sText_PP[] = _("PP");
-static const u8 sText_StealthRock[] = _("Stealth Rock");
static const u8 sText_ToxicSpikes[] = _("Toxic Spikes");
-static const u8 sText_StickyWeb[] = _("Sticky Web");
+static const u8 sText_StealthRock[] = _("Stealth Rock");
static const u8 sText_Steelsurge[] = _("Steelsurge");
-static const u8 sText_AI[] = _("AI");
-static const u8 sText_NoBadMoves[] = _("No Bad Moves");
-static const u8 sText_Viability[] = _("Viability");
-static const u8 sText_TryFaint[] = _("Try Faint");
-static const u8 sText_SetUpFirstTurn[] = _("Setup 1 turn");
+static const u8 sText_DamageNonTypes[] = _("Damage Non-Types");
+static const u8 sText_Rainbow[] = _("Rainbow");
+static const u8 sText_SeaOfFire[] = _("Sea of Fire");
+static const u8 sText_Swamp[] = _("Swamp");
+static const u8 sText_CheckBadMove[] = _("Check Bad Move");
+static const u8 sText_TryToFaint[] = _("Try to Faint");
+static const u8 sText_CheckViability[] = _("Check Viability");
+static const u8 sText_SetUpFirstTurn[] = _("Setup First Turn");
static const u8 sText_Risky[] = _("Risky");
-static const u8 sText_StrongestMove[] = _("Most dmg move");
-static const u8 sText_Various[] = _("Various");
+static const u8 sText_PreferStrongestMove[] = _("Prefer Strongest Move");
+static const u8 sText_PreferBatonPass[] = _("Prefer Baton Pass");
+static const u8 sText_DoubleBattle[] = _("Double Battle");
+static const u8 sText_HpAware[] = _("HP Aware");
+static const u8 sText_PowerfulStatus[] = _("Powerful Status");
+static const u8 sText_NegateUnaware[] = _("Negate Unaware");
+static const u8 sText_WillSuicide[] = _("Will Suicide");
+static const u8 sText_HelpPartner[] = _("Help Partner");
+static const u8 sText_PreferStatusMoves[] = _("Prefer Status Moves");
+static const u8 sText_Stall[] = _("Stall");
+static const u8 sText_SmartSwitching[] = _("Smart Switching");
+static const u8 sText_AcePokemon[] = _("Ace Pokemon");
+static const u8 sText_Omniscient[] = _("Omniscient");
+static const u8 sText_SmartMonChoices[] = _("Smart Mon Choices");
+static const u8 sText_Roaming[] = _("Roaming");
+static const u8 sText_Safari[] = _("Safari");
+static const u8 sText_FirstBattle[] = _("First Battle");
static const u8 sText_ShowHP[] = _("Show HP");
-static const u8 sText_PreferBatonPass[] = _("Baton Pass");
-static const u8 sText_InDoubles[] = _("In Doubles");
-static const u8 sText_HpAware[] = _("HP aware");
-static const u8 sText_Unknown[] = _("Unknown");
+static const u8 sText_SubstituteHp[] = _("Substitute HP");
static const u8 sText_InLove[] = _("In Love");
-static const u8 sText_AIMovePts[] = _("AI Pts/Dmg");
-static const u8 sText_AiKnowledge[] = _("AI Info");
-static const u8 sText_AiParty[] = _("AI Party");
-
+static const u8 sText_Unknown[] = _("Unknown");
static const u8 sText_EmptyString[] = _("");
static const struct BitfieldInfo sStatus1Bitfield[] =
@@ -265,78 +423,86 @@ static const struct BitfieldInfo sStatus1Bitfield[] =
static const struct BitfieldInfo sStatus2Bitfield[] =
{
{/*Confusion*/ 3, 0},
- {/*Flinch*/ 1, 3},
- {/*Uproar*/ 3, 4},
- // Bit 7 is unused.
- {/*Bide*/ 2, 8},
- {/*Lock Confuse*/ 2, 10},
- {/*Multiple Turns*/ 1, 12},
- // Wrap bits are omitted. Done in various.
- // In Love bits are omitted. Done in various.
- {/*(Focus Energy*/ 1, 20},
- {/*Transformed*/ 1, 21},
+ {/*Flinched*/ 1, 3},
+ {/*Torment*/ 1, 7},
+ {/*Powder*/ 1, 14},
+ {/*Defense Curl*/ 1, 20},
{/*Recharge*/ 1, 22},
{/*Rage*/ 1, 23},
- {/*Substitute*/ 1, 24},
- {/*Destiny bond*/ 1, 25},
- {/*Can't escape*/ 1, 26},
- {/*Nightmares*/ 1, 27},
+ {/*Destiny Bond*/ 1, 25},
+ {/*Escape Prevention*/ 1, 26},
{/*Cursed*/ 1, 28},
- {/*Foresighted*/ 1, 29},
- {/*Defense Curled*/ 1, 30},
- {/*Tormented*/ 1, 31},
+ {/*Foresight*/ 1, 29},
+ {/*Dragon Cheer*/ 1, 30},
+ {/*Focus Energy*/ 1, 31},
};
static const struct BitfieldInfo sStatus3Bitfield[] =
{
- {/*Always hits*/ 2, 4},
- //*Perish Song*/ 1, 5},
- // On Air 1, 6,
- // Underground 1, 7,
+ {/*Leech Seed Battler*/ 2, 0},
+ {/*Leech Seed*/ 1, 2},
+ {/*Always Hits*/ 2, 3},
+ {/*Perish Song*/ 1, 5},
+ {/*On Air*/ 1, 6},
+ {/*Underground*/ 1, 7},
{/*Minimized*/ 1, 8},
{/*Charged Up*/ 1, 9},
{/*Rooted*/ 1, 10},
{/*Yawn*/ 2, 11},
- {/*Imprison*/ 1, 13},
- // Grudge 1, 14,
- {/*No Crit*/ 1, 15},
+ {/*Imprisoned Others*/ 1, 13},
+ {/*Grudge*/ 1, 14},
{/*Gastro Acid*/ 1, 16},
- // Embargo 1, 17,
- // Underwater 1, 18,
- // Intimidated Mons 1, 19,
- // Traced 1, 20,
+ {/*Embargo*/ 1, 17},
+ {/*Underwater*/ 1, 18},
{/*Smacked Down*/ 1, 21},
- // Me First 1, 22,
- // Telekinesis 1, 23,
- // Phantom Force 1, 24},
+ {/*Telekinesis*/ 1, 23},
{/*Miracle Eyed*/ 1, 25},
- // Magnet Rise 1, 26,
- // Heal Block 1, 27,
+ {/*Magnet Rise*/ 1, 26},
+ {/*Heal Blocked*/ 1, 27},
{/*Aqua Ring*/ 1, 28},
{/*Laser Focus*/ 1, 29},
- // Power Trick 1, 30,
+ {/*Power Trick*/ 1, 30},
};
static const struct BitfieldInfo sStatus4Bitfield[] =
{
- {/*Electrified*/ 1, 0,}
+ {/*Electrified*/ 1, 0},
+ {/*Mud Sport*/ 1, 1},
+ {/*Water Sport*/ 1, 2},
+ {/*Salt Cure*/ 1, 4},
+ {/*Syrup Bomb*/ 1, 5},
+ {/*Glaive Rush*/ 1, 6},
};
static const struct BitfieldInfo sAIBitfield[] =
{
- {/*Check bad move*/ 1, 0},
- {/*Try To Faint*/ 1, 1},
- {/*Viability*/ 1, 2},
- {/*Set up first turn*/ 1, 3},
+ {/*Check Bad Move*/ 1, 0},
+ {/*Try to Faint*/ 1, 1},
+ {/*Check Viability*/ 1, 2},
+ {/*Setup First Turn*/ 1, 3},
{/*Risky*/ 1, 4},
{/*Prefer Strongest Move*/ 1, 5},
{/*Prefer Baton Pass*/ 1, 6},
- {/*In Doubles*/ 1, 7},
- {/*Hp aware*/ 1, 8},
- {/*Unknown*/ 1, 9},
+ {/*Double Battle*/ 1, 7},
+ {/*HP Aware*/ 1, 8},
+ {/*Powerful Status*/ 1, 9},
+ {/*Negate Unaware*/ 1, 10},
+ {/*Will Suicide*/ 1, 11},
+ {/*Help Partner*/ 1, 12},
+ {/*Prefer Status Moves*/ 1, 13},
+ {/*Stall*/ 1, 14},
+ {/*Smart Switching*/ 1, 15},
+ {/*Ace Pokemon*/ 1, 16},
+ {/*Omniscient*/ 1, 17},
+ {/*Smart Mon Choices*/ 1, 18},
+ {/*Ace Pokemon*/ 1, 16},
+ {/*Omniscient*/ 1, 17},
+ {/*Smart Mon Choices*/ 1, 18},
+ {/*Roaming*/ 1, 29},
+ {/*Safari*/ 1, 30},
+ {/*First Battle*/ 1, 31},
};
-
static const struct ListMenuItem sMainListItems[] =
{
{sText_Moves, LIST_ITEM_MOVES},
@@ -358,106 +524,134 @@ static const struct ListMenuItem sMainListItems[] =
{sText_Various, LIST_ITEM_VARIOUS},
};
-static const struct ListMenuItem sVariousListItems[] =
-{
- {sText_ShowHP, VARIOUS_SHOW_HP},
- {sText_SubstituteHp, VARIOUS_SUBSTITUTE_HP},
- {sText_InLove, VARIOUS_IN_LOVE},
-};
-
-static const struct ListMenuItem sAIListItems[] =
-{
- {sText_NoBadMoves, 0},
- {sText_TryFaint, 1},
- {sText_Viability, 2},
- {sText_SetUpFirstTurn, 3},
- {sText_Risky, 4},
- {sText_StrongestMove, 5},
- {sText_PreferBatonPass, 6},
- {sText_InDoubles, 7},
- {sText_HpAware, 8},
- // {sText_Unknown, 9},
-};
-
static const struct ListMenuItem sStatsListItems[] =
{
- {sText_CurrHp, 0},
- {sText_MaxHp, 1},
- {gText_Attack, 2},
- {gText_Defense, 3},
- {gText_Speed, 4},
- {gText_SpAtk, 5},
- {gText_SpDef, 6},
+ {sText_CurrHp, LIST_STAT_HP_CURRENT},
+ {sText_MaxHp, LIST_STAT_HP_MAX},
+ {sText_Attack, LIST_STAT_ATTACK},
+ {sText_Defense, LIST_STAT_DEFENSE},
+ {sText_Speed, LIST_STAT_SPEED},
+ {sText_SpAtk, LIST_STAT_SP_ATK},
+ {sText_SpDef, LIST_STAT_SP_DEF},
};
static const struct ListMenuItem sStatus1ListItems[] =
{
- {gText_Sleep, 0},
- {gText_Poison, 1},
- {gText_Burn, 2},
- {sText_Freeze, 3},
- {gText_Paralysis, 4},
- {sText_ToxicPoison, 5},
- {sText_ToxicCounter, 6},
- {sText_Frostbite, 7},
+ {sText_Sleep, LIST_STATUS1_SLEEP},
+ {sText_Poison, LIST_STATUS1_POISON},
+ {sText_Burn, LIST_STATUS1_BURN},
+ {sText_Freeze, LIST_STATUS1_FREEZE},
+ {sText_Paralysis, LIST_STATUS1_PARALYSIS},
+ {sText_ToxicPoison, LIST_STATUS1_TOXIC_POISON},
+ {sText_ToxicCounter, LIST_STATUS1_TOXIC_COUNTER},
+ {sText_Frostbite, LIST_STATUS1_FROSTBITE},
};
static const struct ListMenuItem sStatus2ListItems[] =
{
- {gText_Confusion, 0},
- {sText_Flinch, 1},
- {sText_Uproar, 2},
- {sText_Bide, 3},
- {sText_LockConfuse, 4},
- {sText_MultipleTurns, 5},
- {sText_FocusEnergy, 6},
- {sText_Recharge, 7},
- {sText_Rage, 8},
- {sText_Substitute, 9},
- {sText_DestinyBond, 10},
- {sText_CantEscape, 11},
- {sText_Nightmare, 12},
- {sText_Cursed, 13},
- {sText_Foresight, 14},
- {sText_DefenseCurl, 15},
- {sText_Tormented, 16},
+ {sText_Confusion, LIST_STATUS2_CONFUSION},
+ {sText_Flinched, LIST_STATUS2_FLINCHED},
+ {sText_Torment, LIST_STATUS2_TORMENT},
+ {sText_Powder, LIST_STATUS2_POWDER},
+ {sText_DefenseCurl, LIST_STATUS2_DEFENSE_CURL},
+ {sText_Recharge, LIST_STATUS2_RECHARGE},
+ {sText_Rage, LIST_STATUS2_RAGE},
+ {sText_DestinyBond, LIST_STATUS2_DESTINY_BOND},
+ {sText_EscapePrevention, LIST_STATUS2_ESCAPE_PREVENTION},
+ {sText_Cursed, LIST_STATUS2_CURSED},
+ {sText_Foresight, LIST_STATUS2_FORESIGHT},
+ {sText_DragonCheer, LIST_STATUS2_DRAGON_CHEER},
+ {sText_FocusEnergy, LIST_STATUS2_FOCUS_ENERGY},
};
static const struct ListMenuItem sStatus3ListItems[] =
{
- {sText_AlwaysHits, 0},
- {sText_Minimized, 1},
- {sText_ChargedUp, 2},
- {sText_Rooted, 3},
- {sText_Yawned, 4},
- {sText_Imprisoned, 5},
- {sText_NoCrit, 6},
- {sText_GastroAcid, 7},
- {sText_SmackDown, 8},
- {sText_MiracleEye, 9},
- {sText_AquaRing, 10},
- {sText_LaserFocus, 11},
+ {sText_LeechSeedHealer, LIST_STATUS3_LEECH_SEED_HEALER},
+ {sText_LeechSeeded, LIST_STATUS3_LEECH_SEEDED},
+ {sText_AlwaysHits, LIST_STATUS3_ALWAYS_HITS},
+ {sText_PerishSong, LIST_STATUS3_PERISH_SONG},
+ {sText_OnAir, LIST_STATUS3_ON_AIR},
+ {sText_Underground, LIST_STATUS3_UNDERGROUND},
+ {sText_Minimized, LIST_STATUS3_MINIMIZED},
+ {sText_ChargedUp, LIST_STATUS3_CHARGED_UP},
+ {sText_Rooted, LIST_STATUS3_ROOTED},
+ {sText_Yawn, LIST_STATUS3_YAWN},
+ {sText_ImprisonedOthers, LIST_STATUS3_IMPRISONED_OTHERS},
+ {sText_Grudge, LIST_STATUS3_GRUDGE},
+ {sText_GastroAcid, LIST_STATUS3_GASTRO_ACID},
+ {sText_Embargo, LIST_STATUS3_EMBARGO},
+ {sText_Underwater, LIST_STATUS3_UNDERWATER},
+ {sText_SmackedDown, LIST_STATUS3_SMACKED_DOWN},
+ {sText_Telekinesis, LIST_STATUS3_TELEKINESIS},
+ {sText_MiracleEyed, LIST_STATUS3_MIRACLE_EYED},
+ {sText_MagnetRise, LIST_STATUS3_MAGNET_RISE},
+ {sText_HealBlock, LIST_STATUS3_HEAL_BLOCK},
+ {sText_AquaRing, LIST_STATUS3_AQUA_RING},
+ {sText_LaserFocus, LIST_STATUS3_LASER_FOCUS},
+ {sText_PowerTrick, LIST_STATUS3_POWER_TRICK},
};
static const struct ListMenuItem sStatus4ListItems[] =
{
- {sText_Electrified, 0},
+ {sText_Electrified, LIST_STATUS4_ELECTRIFIED},
+ {sText_MudSport, LIST_STATUS4_MUD_SPORT},
+ {sText_WaterSport, LIST_STATUS4_WATER_SPORT},
+ {sText_SaltCure, LIST_STATUS4_SALT_CURE},
+ {sText_SyrupBomb, LIST_STATUS4_SYRUP_BOMB},
+ {sText_GlaiveRush, LIST_STATUS4_GLAIVE_RUSH},
};
static const struct ListMenuItem sSideStatusListItems[] =
{
{sText_Reflect, LIST_SIDE_REFLECT},
{sText_LightScreen, LIST_SIDE_LIGHTSCREEN},
+ {sText_StickyWeb, LIST_SIDE_STICKY_WEB},
{sText_Spikes, LIST_SIDE_SPIKES},
{sText_Safeguard, LIST_SIDE_SAFEGUARD},
{sText_Mist, LIST_SIDE_MIST},
+ {sText_Tailwind, LIST_SIDE_TAILWIND},
{sText_AuroraVeil, LIST_SIDE_AURORA_VEIL},
{sText_LuckyChant, LIST_SIDE_LUCKY_CHANT},
- {sText_Tailwind, LIST_SIDE_TAILWIND},
- {sText_StealthRock, LIST_SIDE_STEALTH_ROCK},
{sText_ToxicSpikes, LIST_SIDE_TOXIC_SPIKES},
- {sText_StickyWeb, LIST_SIDE_STICKY_WEB},
+ {sText_StealthRock, LIST_SIDE_STEALTH_ROCK},
{sText_Steelsurge, LIST_SIDE_STEELSURGE},
+ {sText_DamageNonTypes, LIST_SIDE_DAMAGE_NON_TYPES},
+ {sText_Rainbow, LIST_SIDE_RAINBOW},
+ {sText_SeaOfFire, LIST_SIDE_SEA_OF_FIRE},
+ {sText_Swamp, LIST_SIDE_SWAMP},
+};
+
+static const struct ListMenuItem sAIListItems[] =
+{
+ {sText_CheckBadMove, LIST_AI_CHECK_BAD_MOVE},
+ {sText_TryToFaint, LIST_AI_TRY_TO_FAINT},
+ {sText_CheckViability, LIST_AI_CHECK_VIABILITY},
+ {sText_SetUpFirstTurn, LIST_AI_SETUP_FIRST_TURN},
+ {sText_Risky, LIST_AI_RISKY},
+ {sText_PreferStrongestMove, LIST_AI_PREFER_STRONGEST_MOVE},
+ {sText_PreferBatonPass, LIST_AI_PREFER_BATON_PASS},
+ {sText_DoubleBattle, LIST_AI_DOUBLE_BATTLE},
+ {sText_HpAware, LIST_AI_HP_AWARE},
+ {sText_PowerfulStatus, LIST_AI_POWERFUL_STATUS},
+ {sText_NegateUnaware, LIST_AI_NEGATE_UNAWARE},
+ {sText_WillSuicide, LIST_AI_WILL_SUICIDE},
+ {sText_HelpPartner, LIST_AI_HELP_PARTNER},
+ {sText_PreferStatusMoves, LIST_AI_PREFER_STATUS_MOVES},
+ {sText_Stall, LIST_AI_STALL},
+ {sText_SmartSwitching, LIST_AI_SMART_SWITCHING},
+ {sText_AcePokemon, LIST_AI_ACE_POKEMON},
+ {sText_Omniscient, LIST_AI_OMNISCIENT},
+ {sText_SmartMonChoices, LIST_AI_SMART_MON_CHOICES},
+ {sText_Roaming, LIST_AI_ROAMING},
+ {sText_Safari, LIST_AI_SAFARI},
+ {sText_FirstBattle, LIST_AI_FIRST_BATTLE},
+};
+
+static const struct ListMenuItem sVariousListItems[] =
+{
+ {sText_ShowHP, VARIOUS_SHOW_HP},
+ {sText_SubstituteHp, VARIOUS_SUBSTITUTE_HP},
+ {sText_InLove, VARIOUS_IN_LOVE},
};
static const struct ListMenuItem sSecondaryListItems[] =
@@ -527,7 +721,7 @@ static const struct WindowTemplate sMainListWindowTemplate =
.width = 9,
.height = 12,
.paletteNum = 0xF,
- .baseBlock = 0x2
+ .baseBlock = 0x1
};
static const struct WindowTemplate sSecondaryListWindowTemplate =
@@ -535,10 +729,10 @@ static const struct WindowTemplate sSecondaryListWindowTemplate =
.bg = 0,
.tilemapLeft = 12,
.tilemapTop = 3,
- .width = 10,
- .height = 2,
+ .width = 20,
+ .height = 16,
.paletteNum = 0xF,
- .baseBlock = 0xA0
+ .baseBlock = 0x6D
};
static const struct WindowTemplate sModifyWindowTemplate =
@@ -549,7 +743,7 @@ static const struct WindowTemplate sModifyWindowTemplate =
.width = 4,
.height = 2,
.paletteNum = 0xF,
- .baseBlock = 0x200
+ .baseBlock = 0x1AD
};
static const struct WindowTemplate sBattlerWindowTemplate =
@@ -560,7 +754,7 @@ static const struct WindowTemplate sBattlerWindowTemplate =
.width = 14,
.height = 2,
.paletteNum = 0xF,
- .baseBlock = 0x300
+ .baseBlock = 0x1B5
};
static const struct BgTemplate sBgTemplates[] =
@@ -752,7 +946,7 @@ static void PutMovesPointsText(struct BattleDebugMenu *data)
AddTextPrinterParameterized(data->aiMovesWindowId, FONT_NORMAL, text, 83 + count * 54, i * 15, 0, NULL);
ConvertIntToDecimalStringN(text,
- AI_DATA->simulatedDmg[data->aiBattlerId][battlerDef][i],
+ AI_DATA->simulatedDmg[data->aiBattlerId][battlerDef][i].expected,
STR_CONV_MODE_RIGHT_ALIGN, 3);
AddTextPrinterParameterized(data->aiMovesWindowId, FONT_NORMAL, text, 110 + count * 54, i * 15, 0, NULL);
@@ -1363,7 +1557,6 @@ static void CreateSecondaryListMenu(struct BattleDebugMenu *data)
listTemplate.items = sStatus2ListItems;
itemsCount = ARRAY_COUNT(sStatus2ListItems);
data->bitfield = sStatus2Bitfield;
- winTemplate.height = 1;
break;
case LIST_ITEM_STATUS3:
listTemplate.items = sStatus3ListItems;
@@ -1394,7 +1587,6 @@ static void CreateSecondaryListMenu(struct BattleDebugMenu *data)
}
data->secondaryListItemCount = itemsCount;
- winTemplate.height *= itemsCount;
data->secondaryListWindowId = AddWindow(&winTemplate);
listTemplate.totalItems = itemsCount;
@@ -1411,10 +1603,10 @@ static void PadString(const u8 *src, u8 *dst)
{
u32 i;
- for (i = 0; i < 17 && src[i] != EOS; i++)
+ for (i = 0; i < 19 && src[i] != EOS; i++)
dst[i] = src[i];
- for (; i < 17; i++)
+ for (; i < 19; i++)
dst[i] = CHAR_SPACE;
dst[i] = EOS;
@@ -1478,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;
@@ -1516,11 +1708,10 @@ static void PrintSecondaryEntries(struct BattleDebugMenu *data)
static void DestroyModifyArrows(struct BattleDebugMenu *data)
{
- FreeSpritePaletteByTag(gSpritePalette_Arrow.tag);
if (data->modifyArrows.arrowSpriteId[0] != 0xFF)
- DestroySprite(&gSprites[data->modifyArrows.arrowSpriteId[0]]);
+ DestroySpriteAndFreeResources(&gSprites[data->modifyArrows.arrowSpriteId[0]]);
if (data->modifyArrows.arrowSpriteId[1] != 0xFF)
- DestroySprite(&gSprites[data->modifyArrows.arrowSpriteId[1]]);
+ DestroySpriteAndFreeResources(&gSprites[data->modifyArrows.arrowSpriteId[1]]);
}
static void PrintDigitChars(struct BattleDebugMenu *data)
@@ -1533,6 +1724,7 @@ static void PrintDigitChars(struct BattleDebugMenu *data)
text[i] = EOS;
+ FillWindowPixelBuffer(data->modifyWindowId, 0x11);
AddTextPrinterParameterized(data->modifyWindowId, FONT_NORMAL, text, 3, 0, 0, NULL);
}
@@ -1686,6 +1878,17 @@ static u8 *GetSideStatusValue(struct BattleDebugMenu *data, bool32 changeStatus,
sideTimer->lightscreenBattlerId = data->battlerId;
}
return &sideTimer->lightscreenTimer;
+ case LIST_SIDE_STICKY_WEB:
+ if (changeStatus)
+ {
+ if (statusTrue)
+ *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_STICKY_WEB;
+ else
+ *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_STICKY_WEB;
+ sideTimer->stickyWebBattlerId = data->battlerId;
+ sideTimer->stickyWebBattlerSide = GetBattlerSide(data->battlerId);
+ }
+ return &sideTimer->stickyWebAmount;
case LIST_SIDE_SPIKES:
if (changeStatus)
{
@@ -1715,6 +1918,16 @@ static u8 *GetSideStatusValue(struct BattleDebugMenu *data, bool32 changeStatus,
sideTimer->mistBattlerId = data->battlerId;
}
return &sideTimer->mistTimer;
+ case LIST_SIDE_TAILWIND:
+ if (changeStatus)
+ {
+ if (statusTrue)
+ *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_TAILWIND;
+ else
+ *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_TAILWIND;
+ sideTimer->tailwindBattlerId = data->battlerId;
+ }
+ return &sideTimer->tailwindTimer;
case LIST_SIDE_AURORA_VEIL:
if (changeStatus)
{
@@ -1735,16 +1948,15 @@ static u8 *GetSideStatusValue(struct BattleDebugMenu *data, bool32 changeStatus,
sideTimer->luckyChantBattlerId = data->battlerId;
}
return &sideTimer->luckyChantTimer;
- case LIST_SIDE_TAILWIND:
+ case LIST_SIDE_TOXIC_SPIKES:
if (changeStatus)
{
if (statusTrue)
- *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_TAILWIND;
+ *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_TOXIC_SPIKES;
else
- *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_TAILWIND;
- sideTimer->tailwindBattlerId = data->battlerId;
+ *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_TOXIC_SPIKES;
}
- return &sideTimer->tailwindTimer;
+ return &sideTimer->toxicSpikesAmount;
case LIST_SIDE_STEALTH_ROCK:
if (changeStatus)
{
@@ -1754,33 +1966,52 @@ static u8 *GetSideStatusValue(struct BattleDebugMenu *data, bool32 changeStatus,
*(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_STEALTH_ROCK;
}
return &sideTimer->stealthRockAmount;
- case LIST_SIDE_TOXIC_SPIKES:
+ case LIST_SIDE_STEELSURGE:
if (changeStatus)
{
if (statusTrue)
- *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_TOXIC_SPIKES;
+ *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_STEELSURGE;
else
- *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_TOXIC_SPIKES;
+ *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_STEELSURGE;
}
- return &sideTimer->toxicSpikesAmount;
- case LIST_SIDE_STICKY_WEB:
+ return &sideTimer->steelsurgeAmount;
+ case LIST_SIDE_DAMAGE_NON_TYPES:
if (changeStatus)
{
if (statusTrue)
- *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_STICKY_WEB;
+ *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_DAMAGE_NON_TYPES;
else
- *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_STICKY_WEB;
+ *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_DAMAGE_NON_TYPES;
+ sideTimer->damageNonTypesType = gMovesInfo[gCurrentMove].type;
}
- return &sideTimer->stickyWebAmount;
- case LIST_SIDE_STEELSURGE:
+ return &sideTimer->damageNonTypesTimer;
+ case LIST_SIDE_RAINBOW:
if (changeStatus)
{
if (statusTrue)
- *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_STEELSURGE;
+ *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_RAINBOW;
else
- *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_STEELSURGE;
+ *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_RAINBOW;
}
- return &sideTimer->steelsurgeAmount;
+ return &sideTimer->rainbowTimer;
+ case LIST_SIDE_SEA_OF_FIRE:
+ if (changeStatus)
+ {
+ if (statusTrue)
+ *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_SEA_OF_FIRE;
+ else
+ *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_SEA_OF_FIRE;
+ }
+ return &sideTimer->seaOfFireTimer;
+ case LIST_SIDE_SWAMP:
+ if (changeStatus)
+ {
+ if (statusTrue)
+ *(u32 *)(data->modifyArrows.modifiedValPtr) |= SIDE_STATUS_SWAMP;
+ else
+ *(u32 *)(data->modifyArrows.modifiedValPtr) &= ~SIDE_STATUS_SWAMP;
+ }
+ return &sideTimer->swampTimer;
default:
return NULL;
}
@@ -1839,22 +2070,23 @@ 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;
data->modifyArrows.maxValue = 9999;
data->modifyArrows.maxDigits = 4;
- if (data->currentSecondaryListItemId == 0)
+ data->modifyArrows.typeOfVal = VAL_U16;
+ if (data->currentSecondaryListItemId == LIST_STAT_HP_CURRENT)
{
data->modifyArrows.modifiedValPtr = &gBattleMons[data->battlerId].hp;
data->modifyArrows.currValue = gBattleMons[data->battlerId].hp;
data->modifyArrows.minValue = 1;
data->modifyArrows.maxValue = gBattleMons[data->battlerId].maxHP;
}
- else if (data->currentSecondaryListItemId == 1)
+ else if (data->currentSecondaryListItemId == LIST_STAT_HP_MAX)
{
data->modifyArrows.modifiedValPtr = &gBattleMons[data->battlerId].maxHP;
data->modifyArrows.minValue = gBattleMons[data->battlerId].hp;
@@ -1865,7 +2097,6 @@ static void SetUpModifyArrows(struct BattleDebugMenu *data)
data->modifyArrows.modifiedValPtr = (u16 *)((&gBattleMons[data->battlerId].attack) + (data->currentSecondaryListItemId - 2));
data->modifyArrows.currValue = *(u16 *)((&gBattleMons[data->battlerId].attack) + (data->currentSecondaryListItemId - 2));
}
- data->modifyArrows.typeOfVal = VAL_U16;
break;
case LIST_ITEM_STAT_STAGES:
data->modifyArrows.minValue = 0;
@@ -2196,6 +2427,14 @@ static const u8 sText_HoldEffectRoomService[] = _("Room Service");
static const u8 sText_HoldEffectBlunderPolicy[] = _("Blunder Policy");
static const u8 sText_HoldEffectHeavyDutyBoots[] = _("Heavy Duty Boots");
static const u8 sText_HoldEffectThroatSpray[] = _("Throat Spray");
+static const u8 sText_HoldEffectAbilityShield[] = _("Ability Shield");
+static const u8 sText_HoldEffectClearAmulet[] = _("Clear Amulet");
+static const u8 sText_HoldEffectMirrorHerb[] = _("Mirror Herb");
+static const u8 sText_HoldEffectPunchingGlove[] = _("Punching Glove");
+static const u8 sText_HoldEffectCovertCloak[] = _("Covert Cloak");
+static const u8 sText_HoldEffectLoadedDice[] = _("Loaded Dice");
+static const u8 sText_HoldEffectBoosterEnergy[] = _("Booster Energy");
+static const u8 sText_HoldEffectBerserkGene[] = _("Berserk Gene");
static const u8 *const sHoldEffectNames[] =
{
[HOLD_EFFECT_NONE] = sText_HoldEffectNone,
@@ -2338,6 +2577,14 @@ static const u8 *const sHoldEffectNames[] =
[HOLD_EFFECT_BLUNDER_POLICY] = sText_HoldEffectBlunderPolicy,
[HOLD_EFFECT_HEAVY_DUTY_BOOTS] = sText_HoldEffectHeavyDutyBoots,
[HOLD_EFFECT_THROAT_SPRAY] = sText_HoldEffectThroatSpray,
+ [HOLD_EFFECT_ABILITY_SHIELD] = sText_HoldEffectAbilityShield,
+ [HOLD_EFFECT_CLEAR_AMULET] = sText_HoldEffectClearAmulet,
+ [HOLD_EFFECT_MIRROR_HERB] = sText_HoldEffectMirrorHerb,
+ [HOLD_EFFECT_PUNCHING_GLOVE] = sText_HoldEffectPunchingGlove,
+ [HOLD_EFFECT_COVERT_CLOAK] = sText_HoldEffectCovertCloak,
+ [HOLD_EFFECT_LOADED_DICE] = sText_HoldEffectLoadedDice,
+ [HOLD_EFFECT_BOOSTER_ENERGY] = sText_HoldEffectBoosterEnergy,
+ [HOLD_EFFECT_BERSERK_GENE] = sText_HoldEffectBerserkGene,
};
static const u8 *GetHoldEffectName(u16 holdEffect)
{
diff --git a/src/battle_dome.c b/src/battle_dome.c
index 0978ae488887..06acf6e2f2e1 100644
--- a/src/battle_dome.c
+++ b/src/battle_dome.c
@@ -107,7 +107,7 @@ enum {
static u8 GetDomeTrainerMonIvs(u16);
static void SwapDomeTrainers(int, int, u16 *);
-static void CalcDomeMonStats(u16, int, int, u8, u8, int *);
+static void CalcDomeMonStats(const struct TrainerMon *fmon, int level, u8 ivs, int *stats);
static void CreateDomeOpponentMons(u16);
static int SelectOpponentMons_Good(u16, bool8);
static int SelectOpponentMons_Bad(u16, bool8);
@@ -2000,7 +2000,7 @@ static void InitDomeTrainers(void)
if (alreadySelectedMonId == monId
|| species[0] == gFacilityTrainerMons[monId].species
|| species[1] == gFacilityTrainerMons[monId].species
- || gFacilityTrainerMons[alreadySelectedMonId].itemTableId == gFacilityTrainerMons[monId].itemTableId)
+ || gFacilityTrainerMons[alreadySelectedMonId].heldItem == gFacilityTrainerMons[monId].heldItem)
break;
}
} while (k != j);
@@ -2053,11 +2053,8 @@ static void InitDomeTrainers(void)
ivs = GetDomeTrainerMonIvs(DOME_TRAINERS[i].trainerId);
for (j = 0; j < FRONTIER_PARTY_SIZE; j++)
{
- CalcDomeMonStats(gFacilityTrainerMons[DOME_MONS[i][j]].species,
- monLevel, ivs,
- gFacilityTrainerMons[DOME_MONS[i][j]].evSpread,
- gFacilityTrainerMons[DOME_MONS[i][j]].nature,
- statValues);
+ CalcDomeMonStats(&gFacilityTrainerMons[DOME_MONS[i][j]],
+ monLevel, ivs, statValues);
rankingScores[i] += statValues[STAT_ATK];
rankingScores[i] += statValues[STAT_DEF];
@@ -2130,40 +2127,31 @@ static void InitDomeTrainers(void)
#define CALC_STAT(base, statIndex) \
{ \
- u8 baseStat = gSpeciesInfo[species].base; \
+ u8 baseStat = gSpeciesInfo[fmon->species].base; \
stats[statIndex] = (((2 * baseStat + ivs + evs[statIndex] / 4) * level) / 100) + 5; \
- stats[statIndex] = (u8) ModifyStatByNature(nature, stats[statIndex], statIndex); \
+ stats[statIndex] = (u8) ModifyStatByNature(fmon->nature, stats[statIndex], statIndex); \
}
-static void CalcDomeMonStats(u16 species, int level, int ivs, u8 evBits, u8 nature, int *stats)
+static void CalcDomeMonStats(const struct TrainerMon *fmon, int level, u8 ivs, int *stats)
{
- int i, count;
- u8 bits;
- u16 resultingEvs;
int evs[NUM_STATS];
+ int i;
- count = 0, bits = evBits;
- for (i = 0; i < NUM_STATS; bits >>= 1, i++)
- {
- if (bits & 1)
- count++;
- }
-
- resultingEvs = MAX_TOTAL_EVS / count;
- for (i = 0; i < NUM_STATS; bits <<= 1, i++)
+ for (i = 0; i < NUM_STATS; i++)
{
- evs[i] = 0;
- if (evBits & bits)
- evs[i] = resultingEvs;
+ if (fmon->ev != NULL)
+ evs[i] = fmon->ev[i];
+ else
+ evs[i] = 0;
}
- if (species == SPECIES_SHEDINJA)
+ if (fmon->species == SPECIES_SHEDINJA)
{
stats[STAT_HP] = 1;
}
else
{
- int n = 2 * gSpeciesInfo[species].baseHP;
+ int n = 2 * gSpeciesInfo[fmon->species].baseHP;
stats[STAT_HP] = (((n + ivs + evs[STAT_HP] / 4) * level) / 100) + level + 10;
}
@@ -2205,33 +2193,15 @@ static void InitDomeOpponentParty(void)
static void CreateDomeOpponentMon(u8 monPartyId, u16 tournamentTrainerId, u8 tournamentMonId, u32 otId)
{
- int i;
- u8 friendship = MAX_FRIENDSHIP;
#ifdef BUGFIX
u8 fixedIv = GetDomeTrainerMonIvs(DOME_TRAINERS[tournamentTrainerId].trainerId);
#else
u8 fixedIv = GetDomeTrainerMonIvs(tournamentTrainerId); // BUG: Using the wrong ID. As a result, all Pokémon have ivs of 3.
#endif
u8 level = SetFacilityPtrsGetLevel();
- CreateMonWithEVSpreadNatureOTID(&gEnemyParty[monPartyId],
- gFacilityTrainerMons[DOME_MONS[tournamentTrainerId][tournamentMonId]].species,
- level,
- gFacilityTrainerMons[DOME_MONS[tournamentTrainerId][tournamentMonId]].nature,
- fixedIv,
- gFacilityTrainerMons[DOME_MONS[tournamentTrainerId][tournamentMonId]].evSpread, otId);
-
- friendship = MAX_FRIENDSHIP;
- for (i = 0; i < MAX_MON_MOVES; i++)
- {
- SetMonMoveSlot(&gEnemyParty[monPartyId],
- gFacilityTrainerMons[DOME_MONS[tournamentTrainerId][tournamentMonId]].moves[i], i);
- if (gMovesInfo[gFacilityTrainerMons[DOME_MONS[tournamentTrainerId][tournamentMonId]].moves[i]].effect == EFFECT_FRUSTRATION)
- friendship = 0;
- }
- SetMonData(&gEnemyParty[monPartyId], MON_DATA_FRIENDSHIP, &friendship);
- SetMonData(&gEnemyParty[monPartyId], MON_DATA_HELD_ITEM,
- &gBattleFrontierHeldItems[gFacilityTrainerMons[DOME_MONS[tournamentTrainerId][tournamentMonId]].itemTableId]);
+ CreateFacilityMon(&gFacilityTrainerMons[DOME_MONS[tournamentTrainerId][tournamentMonId]],
+ level, fixedIv, otId, 0, &gEnemyParty[monPartyId]);
}
static void CreateDomeOpponentMons(u16 tournamentTrainerId)
@@ -4286,6 +4256,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId)
textPrinter.currentChar = GetSpeciesName(DOME_MONS[trainerTourneyId][i]);
else
textPrinter.currentChar = GetSpeciesName(gFacilityTrainerMons[DOME_MONS[trainerTourneyId][i]].species);
+ textPrinter.fontId = GetFontIdToFit(textPrinter.currentChar, FONT_SHORT, 0, 60);
textPrinter.windowId = WIN_TRAINER_MON1_NAME + i + windowId;
if (i == 1)
@@ -4297,6 +4268,7 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId)
CopyWindowToVram(WIN_TRAINER_MON1_NAME + i + windowId, COPYWIN_FULL);
AddTextPrinter(&textPrinter, 0, NULL);
}
+ textPrinter.fontId = FONT_SHORT;
PutWindowTilemap(windowId + WIN_TRAINER_FLAVOR_TEXT);
CopyWindowToVram(windowId + WIN_TRAINER_FLAVOR_TEXT, COPYWIN_FULL);
@@ -4438,11 +4410,15 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId)
else
nature = gSaveBlock2Ptr->frontier.domePlayerPartyData[i].nature;
- if (gNatureStatTable[nature][j] > 0)
+ if (gNaturesInfo[nature].statUp == gNaturesInfo[nature].statDown)
+ {
+ allocatedArray[j + NUM_STATS + 1] += allocatedArray[j + 1];
+ }
+ else if (gNaturesInfo[nature].statUp == j + 1)
{
allocatedArray[j + NUM_STATS + 1] += (allocatedArray[j + 1] * 110) / 100;
}
- else if (gNatureStatTable[nature][j] < 0)
+ else if (gNaturesInfo[nature].statDown == j + 1)
{
allocatedArray[j + NUM_STATS + 1] += (allocatedArray[j + 1] * 90) / 100;
allocatedArray[j + NUM_STATS + NUM_NATURE_STATS + 2]++;
@@ -4463,32 +4439,28 @@ static void DisplayTrainerInfoOnCard(u8 flags, u8 trainerTourneyId)
{
for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
{
- int evBits = gFacilityTrainerMons[DOME_MONS[trainerTourneyId][i]].evSpread;
- for (k = 0, j = 0; j < NUM_STATS; j++)
- {
- allocatedArray[j] = 0;
- if (evBits & 1)
- k++;
- evBits >>= 1;
- }
- k = MAX_TOTAL_EVS / k;
- evBits = gFacilityTrainerMons[DOME_MONS[trainerTourneyId][i]].evSpread;
for (j = 0; j < NUM_STATS; j++)
{
- if (evBits & 1)
- allocatedArray[j] = k;
- evBits >>= 1;
+ if (gFacilityTrainerMons[DOME_MONS[trainerTourneyId][i]].ev != NULL)
+ allocatedArray[j] = gFacilityTrainerMons[DOME_MONS[trainerTourneyId][i]].ev[j];
+ else
+ allocatedArray[j] = 0;
}
allocatedArray[NUM_STATS] += allocatedArray[STAT_HP];
for (j = 0; j < NUM_NATURE_STATS; j++)
{
nature = gFacilityTrainerMons[DOME_MONS[trainerTourneyId][i]].nature;
- if (gNatureStatTable[nature][j] > 0)
+
+ if (gNaturesInfo[nature].statUp == gNaturesInfo[nature].statDown)
+ {
+ allocatedArray[j + NUM_STATS + 1] += allocatedArray[j + 1];
+ }
+ else if (gNaturesInfo[nature].statUp == j + 1)
{
allocatedArray[j + NUM_STATS + 1] += (allocatedArray[j + 1] * 110) / 100;
}
- else if (gNatureStatTable[nature][j] < 0)
+ else if (gNaturesInfo[nature].statDown == j + 1)
{
allocatedArray[j + NUM_STATS + 1] += (allocatedArray[j + 1] * 90) / 100;
allocatedArray[j + NUM_STATS + NUM_NATURE_STATS + 2]++;
@@ -5800,7 +5772,7 @@ static void InitRandomTourneyTreeResults(void)
if (alreadySelectedMonId == monId
|| species[0] == gFacilityTrainerMons[monId].species
|| species[1] == gFacilityTrainerMons[monId].species
- || gFacilityTrainerMons[alreadySelectedMonId].itemTableId == gFacilityTrainerMons[monId].itemTableId)
+ || gFacilityTrainerMons[alreadySelectedMonId].heldItem == gFacilityTrainerMons[monId].heldItem)
break;
}
} while (k != j);
@@ -5821,11 +5793,8 @@ static void InitRandomTourneyTreeResults(void)
ivs = GetDomeTrainerMonIvs(DOME_TRAINERS[i].trainerId);
for (j = 0; j < FRONTIER_PARTY_SIZE; j++)
{
- CalcDomeMonStats(gFacilityTrainerMons[DOME_MONS[i][j]].species,
- monLevel, ivs,
- gFacilityTrainerMons[DOME_MONS[i][j]].evSpread,
- gFacilityTrainerMons[DOME_MONS[i][j]].nature,
- statValues);
+ CalcDomeMonStats(&gFacilityTrainerMons[DOME_MONS[i][j]],
+ monLevel, ivs, statValues);
statSums[i] += statValues[STAT_ATK];
statSums[i] += statValues[STAT_DEF];
diff --git a/src/battle_dynamax.c b/src/battle_dynamax.c
index 8dbde6d82133..cdcf05f7dba7 100644
--- a/src/battle_dynamax.c
+++ b/src/battle_dynamax.c
@@ -5,6 +5,7 @@
#include "battle_interface.h"
#include "battle_scripts.h"
#include "battle_script_commands.h"
+#include "battle_gimmick.h"
#include "data.h"
#include "event_data.h"
#include "graphics.h"
@@ -22,7 +23,7 @@
#include "constants/items.h"
#include "constants/moves.h"
-static u8 GetMaxPowerTier(u16 move);
+static u8 GetMaxPowerTier(u32 move);
struct GMaxMove
{
@@ -69,35 +70,25 @@ static const struct GMaxMove sGMaxMoveTable[] =
{SPECIES_URSHIFU_RAPID_STRIKE_STYLE_GIGANTAMAX, TYPE_WATER, MOVE_G_MAX_RAPID_FLOW},
};
-// forward declarations
-static void SpriteCb_DynamaxTrigger(struct Sprite *);
-
-// Returns whether a battler is Dynamaxed.
-bool32 IsDynamaxed(u16 battlerId)
-{
- if (gBattleStruct->dynamax.dynamaxed[battlerId]
- /*|| IsRaidBoss(battlerId)*/)
- return TRUE;
- return FALSE;
-}
-
// Returns whether a battler can Dynamax.
-bool32 CanDynamax(u16 battlerId)
+bool32 CanDynamax(u32 battler)
{
- u16 species = gBattleMons[battlerId].species;
- u16 holdEffect = ItemId_GetHoldEffect(gBattleMons[battlerId].item);
+ u16 species = gBattleMons[battler].species;
+ u16 holdEffect = GetBattlerHoldEffect(battler, FALSE);
- // Check if Dynamax battle flag is set. This needs to be defined in include/config/battle.h
- #if B_FLAG_DYNAMAX_BATTLE != 0
- if (!FlagGet(B_FLAG_DYNAMAX_BATTLE))
- #endif
+ // 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 ((GetBattlerPosition(battlerId) == B_POSITION_PLAYER_LEFT || (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && GetBattlerPosition(battlerId) == B_POSITION_PLAYER_RIGHT))
- && !CheckBagHasItem(ITEM_DYNAMAX_BAND, 1))
- return FALSE;
+ if (!TESTING && (GetBattlerPosition(battler) == B_POSITION_PLAYER_LEFT
+ || (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && GetBattlerPosition(battler) == B_POSITION_PLAYER_RIGHT)))
+ {
+ if (!CheckBagHasItem(ITEM_DYNAMAX_BAND, 1))
+ return FALSE;
+ if (B_FLAG_DYNAMAX_BATTLE == 0 || (B_FLAG_DYNAMAX_BATTLE != 0 && !FlagGet(B_FLAG_DYNAMAX_BATTLE)))
+ return FALSE;
+ }
// Check if species isn't allowed to Dynamax.
if (GET_BASE_SPECIES_ID(species) == SPECIES_ZACIAN
@@ -105,18 +96,24 @@ bool32 CanDynamax(u16 battlerId)
|| GET_BASE_SPECIES_ID(species) == SPECIES_ETERNATUS)
return FALSE;
- // Cannot Dynamax if you can Mega Evolve or use a Z-Move
- if (holdEffect == HOLD_EFFECT_MEGA_STONE || holdEffect == HOLD_EFFECT_Z_CRYSTAL)
+ // Check if Trainer has already Dynamaxed.
+ if (HasTrainerUsedGimmick(battler, GIMMICK_DYNAMAX))
return FALSE;
- // Cannot Dynamax if your side has already or will Dynamax.
- if (gBattleStruct->dynamax.alreadyDynamaxed[GetBattlerSide(battlerId)]
- || gBattleStruct->dynamax.dynamaxed[BATTLE_PARTNER(battlerId)]
- || gBattleStruct->dynamax.toDynamax & gBitTable[BATTLE_PARTNER(battlerId)])
+ // Check if AI battler is intended to Dynamaxed.
+ if (!ShouldTrainerBattlerUseGimmick(battler, GIMMICK_DYNAMAX))
+ return FALSE;
+
+ // Check if battler has another gimmick active.
+ if (GetActiveGimmick(battler) != GIMMICK_NONE)
+ return FALSE;
+
+ // Check if battler is holding a Z-Crystal or Mega Stone.
+ if (!TESTING && (holdEffect == HOLD_EFFECT_Z_CRYSTAL || holdEffect == HOLD_EFFECT_MEGA_STONE)) // tests make this check already
return FALSE;
// TODO: Cannot Dynamax in a Max Raid if you don't have Dynamax Energy.
- // if (gBattleTypeFlags & BATTLE_TYPE_RAID && gBattleStruct->raid.dynamaxEnergy != battlerId)
+ // if (gBattleTypeFlags & BATTLE_TYPE_RAID && gBattleStruct->raid.dynamaxEnergy != battler)
// return FALSE;
// No checks failed, all set!
@@ -124,10 +121,10 @@ bool32 CanDynamax(u16 battlerId)
}
// Returns whether a battler is transformed into a Gigantamax form.
-bool32 IsGigantamaxed(u16 battlerId)
+bool32 IsGigantamaxed(u32 battler)
{
- struct Pokemon *mon = &GetSideParty(GetBattlerSide(battlerId))[gBattlerPartyIndexes[battlerId]];
- if ((gSpeciesInfo[gBattleMons[battlerId].species].isGigantamax) && GetMonData(mon, MON_DATA_GIGANTAMAX_FACTOR))
+ struct Pokemon *mon = &GetSideParty(GetBattlerSide(battler))[gBattlerPartyIndexes[battler]];
+ if ((gSpeciesInfo[gBattleMons[battler].species].isGigantamax) && GetMonData(mon, MON_DATA_GIGANTAMAX_FACTOR))
return TRUE;
return FALSE;
}
@@ -148,79 +145,80 @@ void ApplyDynamaxHPMultiplier(u32 battler, struct Pokemon* mon)
}
// Returns the non-Dynamax HP of a Pokemon.
-u16 GetNonDynamaxHP(u16 battlerId)
+u16 GetNonDynamaxHP(u32 battler)
{
- if (!IsDynamaxed(battlerId) || gBattleMons[battlerId].species == SPECIES_SHEDINJA)
- return gBattleMons[battlerId].hp;
+ if (GetActiveGimmick(battler) != GIMMICK_DYNAMAX || gBattleMons[battler].species == SPECIES_SHEDINJA)
+ return gBattleMons[battler].hp;
else
{
u16 mult = UQ_4_12(1.0/1.5); // placeholder
- u16 hp = UQ_4_12_TO_INT((gBattleMons[battlerId].hp * mult) + UQ_4_12_ROUND);
+ u16 hp = UQ_4_12_TO_INT((gBattleMons[battler].hp * mult) + UQ_4_12_ROUND);
return hp;
}
}
// Returns the non-Dynamax Max HP of a Pokemon.
-u16 GetNonDynamaxMaxHP(u32 battlerId)
+u16 GetNonDynamaxMaxHP(u32 battler)
{
- if (!IsDynamaxed(battlerId) || gBattleMons[battlerId].species == SPECIES_SHEDINJA)
- return gBattleMons[battlerId].maxHP;
+ if (GetActiveGimmick(battler) != GIMMICK_DYNAMAX || gBattleMons[battler].species == SPECIES_SHEDINJA)
+ return gBattleMons[battler].maxHP;
else
{
u16 mult = UQ_4_12(1.0/1.5); // placeholder
- u16 maxHP = UQ_4_12_TO_INT((gBattleMons[battlerId].maxHP * mult) + UQ_4_12_ROUND);
+ u16 maxHP = UQ_4_12_TO_INT((gBattleMons[battler].maxHP * mult) + UQ_4_12_ROUND);
return maxHP;
}
}
// Sets flags used for Dynamaxing and checks Gigantamax forms.
-void PrepareBattlerForDynamax(u16 battlerId)
+void ActivateDynamax(u32 battler)
{
- u8 side = GetBattlerSide(battlerId);
-
- gBattleStruct->dynamax.alreadyDynamaxed[side] = TRUE;
- gBattleStruct->dynamax.dynamaxed[battlerId] = TRUE;
- gBattleStruct->dynamax.dynamaxTurns[battlerId] = DYNAMAX_TURNS_COUNT;
+ // Set appropriate use flags.
+ SetActiveGimmick(battler, GIMMICK_DYNAMAX);
+ SetGimmickAsActivated(battler, GIMMICK_DYNAMAX);
+ gBattleStruct->dynamax.dynamaxTurns[battler] = DYNAMAX_TURNS_COUNT;
// Substitute is removed upon Dynamaxing.
- gBattleMons[battlerId].status2 &= ~STATUS2_SUBSTITUTE;
- ClearBehindSubstituteBit(battlerId);
+ gBattleMons[battler].status2 &= ~STATUS2_SUBSTITUTE;
+ ClearBehindSubstituteBit(battler);
// Choiced Moves are reset upon Dynamaxing.
- gBattleStruct->choicedMove[battlerId] = MOVE_NONE;
+ gBattleStruct->choicedMove[battler] = MOVE_NONE;
// Try Gigantamax form change.
- if (!(gBattleMons[battlerId].status2 & STATUS2_TRANSFORMED)) // Ditto cannot Gigantamax.
- TryBattleFormChange(battlerId, FORM_CHANGE_BATTLE_GIGANTAMAX);
+ if (!(gBattleMons[battler].status2 & STATUS2_TRANSFORMED)) // Ditto cannot Gigantamax.
+ TryBattleFormChange(battler, FORM_CHANGE_BATTLE_GIGANTAMAX);
+
+ BattleScriptExecute(BattleScript_DynamaxBegins);
}
// Unsets the flags used for Dynamaxing and reverts max HP if needed.
-void UndoDynamax(u16 battlerId)
+void UndoDynamax(u32 battler)
{
- u8 side = GetBattlerSide(battlerId);
- u8 monId = gBattlerPartyIndexes[battlerId];
+ u8 side = GetBattlerSide(battler);
+ u8 monId = gBattlerPartyIndexes[battler];
// Revert HP if battler is still Dynamaxed.
- if (IsDynamaxed(battlerId))
+ if (GetActiveGimmick(battler) == GIMMICK_DYNAMAX)
{
struct Pokemon *mon = (side == B_SIDE_PLAYER) ? &gPlayerParty[monId] : &gEnemyParty[monId];
u16 mult = UQ_4_12(1.0/1.5); // placeholder
- gBattleMons[battlerId].hp = UQ_4_12_TO_INT((GetMonData(mon, MON_DATA_HP) * mult + 1) + UQ_4_12_ROUND); // round up
- SetMonData(mon, MON_DATA_HP, &gBattleMons[battlerId].hp);
+ gBattleMons[battler].hp = UQ_4_12_TO_INT((GetMonData(mon, MON_DATA_HP) * mult + 1) + UQ_4_12_ROUND); // round up
+ SetMonData(mon, MON_DATA_HP, &gBattleMons[battler].hp);
CalculateMonStats(mon);
}
// Makes sure there are no Dynamax flags set, including on switch / faint.
- gBattleStruct->dynamax.dynamaxed[battlerId] = FALSE;
- gBattleStruct->dynamax.dynamaxTurns[battlerId] = 0;
+ SetActiveGimmick(battler, GIMMICK_NONE);
+ gBattleStruct->dynamax.dynamaxTurns[battler] = 0;
// Undo form change if needed.
- if (IsGigantamaxed(battlerId))
- TryBattleFormChange(battlerId, FORM_CHANGE_END_BATTLE);
+ if (IsGigantamaxed(battler))
+ TryBattleFormChange(battler, FORM_CHANGE_END_BATTLE);
}
// Certain moves are blocked by Max Guard that normally ignore protection.
-bool32 IsMoveBlockedByMaxGuard(u16 move)
+bool32 IsMoveBlockedByMaxGuard(u32 move)
{
switch (move)
{
@@ -239,7 +237,7 @@ bool32 IsMoveBlockedByMaxGuard(u16 move)
}
// Weight-based moves (and some other moves in Raids) are blocked by Dynamax.
-bool32 IsMoveBlockedByDynamax(u16 move)
+bool32 IsMoveBlockedByDynamax(u32 move)
{
// TODO: Certain moves are banned in raids.
switch (gMovesInfo[move].effect)
@@ -251,24 +249,15 @@ bool32 IsMoveBlockedByDynamax(u16 move)
return FALSE;
}
-// Returns whether a move should be converted into a Max Move.
-bool32 ShouldUseMaxMove(u16 battlerId, u16 baseMove)
-{
- // TODO: Raid bosses do not always use Max Moves.
- // if (IsRaidBoss(battlerId))
- // return !IsRaidBossUsingRegularMove(battlerId, baseMove);
- return IsDynamaxed(battlerId) || gBattleStruct->dynamax.toDynamax & gBitTable[battlerId];
-}
-
-static u16 GetTypeBasedMaxMove(u16 battlerId, u16 type)
+static u16 GetTypeBasedMaxMove(u32 battler, u32 type)
{
// Gigantamax check
u32 i;
- u16 species = gBattleMons[battlerId].species;
- u16 targetSpecies = SPECIES_NONE;
+ u32 species = gBattleMons[battler].species;
+ u32 targetSpecies = SPECIES_NONE;
if (!gSpeciesInfo[species].isGigantamax)
- targetSpecies = GetBattleFormChangeTargetSpecies(battlerId, FORM_CHANGE_BATTLE_GIGANTAMAX);
+ targetSpecies = GetBattleFormChangeTargetSpecies(battler, FORM_CHANGE_BATTLE_GIGANTAMAX);
if (targetSpecies != SPECIES_NONE)
species = targetSpecies;
@@ -289,9 +278,9 @@ static u16 GetTypeBasedMaxMove(u16 battlerId, u16 type)
}
// Returns the appropriate Max Move or G-Max Move for a battler to use.
-u16 GetMaxMove(u16 battlerId, u16 baseMove)
+u16 GetMaxMove(u32 battler, u32 baseMove)
{
- u16 move = baseMove;
+ u32 move = baseMove;
if (baseMove == MOVE_NONE) // for move display
{
return MOVE_NONE;
@@ -306,13 +295,11 @@ u16 GetMaxMove(u16 battlerId, u16 baseMove)
}
else if (gBattleStruct->dynamicMoveType)
{
- move = GetTypeBasedMaxMove(battlerId, gBattleStruct->dynamicMoveType & DYNAMIC_TYPE_MASK);
- gBattleStruct->dynamax.categories[battlerId] = gMovesInfo[baseMove].category;
+ move = GetTypeBasedMaxMove(battler, gBattleStruct->dynamicMoveType & DYNAMIC_TYPE_MASK);
}
else
{
- move = GetTypeBasedMaxMove(battlerId, gMovesInfo[baseMove].type);
- gBattleStruct->dynamax.categories[battlerId] = gMovesInfo[baseMove].category;
+ move = GetTypeBasedMaxMove(battler, gMovesInfo[baseMove].type);
}
return move;
@@ -332,7 +319,7 @@ enum
};
// Gets the base power of a Max Move.
-u8 GetMaxMovePower(u16 move)
+u8 GetMaxMovePower(u32 move)
{
u8 tier;
// G-Max Drum Solo, G-Max Hydrosnipe, and G-Max Fireball always have 160 base power.
@@ -383,7 +370,7 @@ u8 GetMaxMovePower(u16 move)
}
}
-static u8 GetMaxPowerTier(u16 move)
+static u8 GetMaxPowerTier(u32 move)
{
if (gMovesInfo[move].strikeCount >= 2 && gMovesInfo[move].strikeCount <= 5)
{
@@ -459,7 +446,7 @@ static u8 GetMaxPowerTier(u16 move)
}
// Returns whether a move is a Max Move or not.
-bool32 IsMaxMove(u16 move)
+bool32 IsMaxMove(u32 move)
{
return move >= FIRST_MAX_MOVE && move <= LAST_MAX_MOVE;
}
@@ -485,7 +472,7 @@ void ChooseDamageNonTypesString(u8 type)
}
// Returns the status effect that should be applied by a G-Max Move.
-static u32 GetMaxMoveStatusEffect(u16 move)
+static u32 GetMaxMoveStatusEffect(u32 move)
{
u8 maxEffect = gMovesInfo[move].argument;
switch (maxEffect)
@@ -520,26 +507,11 @@ static u32 GetMaxMoveStatusEffect(u16 move)
}
}
-// CALLNATIVE FUNCTIONS
-#define CMD_ARGS(...) const struct __attribute__((packed)) { u8 opcode; MEMBERS(__VA_ARGS__) const u8 nextInstr[0]; } *const cmd = (const void *)gBattlescriptCurrInstr
-#define NATIVE_ARGS(...) CMD_ARGS(void (*func)(void), ##__VA_ARGS__)
-
-#define MEMBERS(...) VARARG_8(MEMBERS_, __VA_ARGS__)
-#define MEMBERS_0()
-#define MEMBERS_1(a) a;
-#define MEMBERS_2(a, b) a; b;
-#define MEMBERS_3(a, b, c) a; b; c;
-#define MEMBERS_4(a, b, c, d) a; b; c; d;
-#define MEMBERS_5(a, b, c, d, e) a; b; c; d; e;
-#define MEMBERS_6(a, b, c, d, e, f) a; b; c; d; e; f;
-#define MEMBERS_7(a, b, c, d, e, f, g) a; b; c; d; e; f; g;
-#define MEMBERS_8(a, b, c, d, e, f, g, h) a; b; c; d; e; f; g; h;
-
// Updates Dynamax HP multipliers and healthboxes.
void BS_UpdateDynamax(void)
{
NATIVE_ARGS();
- u16 battler = gBattleScripting.battler;
+ u32 battler = gBattleScripting.battler;
struct Pokemon *mon = &GetSideParty(GetBattlerSide(battler))[gBattlerPartyIndexes[battler]];
if (!IsGigantamaxed(battler)) // RecalcBattlerStats will get called on form change.
@@ -1003,24 +975,6 @@ void BS_TrySetStatus2(void)
}
}
-// Applies the endturn damage effect associated with the "Damage Non-" G-Max moves.
-void BS_DamageNonTypes(void)
-{
- NATIVE_ARGS();
- u8 side = GetBattlerSide(gBattlerAttacker);
- gBattleMoveDamage = 0;
- if (gSideTimers[side].damageNonTypesTimer
- && !IS_BATTLER_OF_TYPE(gBattlerAttacker, gSideTimers[side].damageNonTypesType)
- && IsBattlerAlive(gBattlerAttacker)
- && GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD)
- {
- gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / 6;
- if (gBattleMoveDamage == 0)
- gBattleMoveDamage = 1;
- }
- gBattlescriptCurrInstr = cmd->nextInstr;
-}
-
// Heals one-sixth of the target's HP, including for Dynamaxed targets.
void BS_HealOneSixth(void)
{
@@ -1064,201 +1018,8 @@ void BS_TryRecycleBerry(void)
void BS_JumpIfDynamaxed(void)
{
NATIVE_ARGS(const u8 *jumpInstr);
- if (IsDynamaxed(gBattlerTarget))
+ if ((GetActiveGimmick(gBattlerTarget) == GIMMICK_DYNAMAX))
gBattlescriptCurrInstr = cmd->jumpInstr;
else
gBattlescriptCurrInstr = cmd->nextInstr;
}
-
-// DYNAMAX TRIGGER:
-static const u8 ALIGNED(4) sDynamaxTriggerGfx[] = INCBIN_U8("graphics/battle_interface/dynamax_trigger.4bpp");
-static const u16 sDynamaxTriggerPal[] = INCBIN_U16("graphics/battle_interface/dynamax_trigger.gbapal");
-
-static const struct SpriteSheet sSpriteSheet_DynamaxTrigger =
-{
- sDynamaxTriggerGfx, sizeof(sDynamaxTriggerGfx), TAG_DYNAMAX_TRIGGER_TILE
-};
-static const struct SpritePalette sSpritePalette_DynamaxTrigger =
-{
- sDynamaxTriggerPal, TAG_DYNAMAX_TRIGGER_PAL
-};
-
-static const struct OamData sOamData_DynamaxTrigger =
-{
- .y = 0,
- .affineMode = 0,
- .objMode = 0,
- .mosaic = 0,
- .bpp = 0,
- .shape = ST_OAM_SQUARE,
- .x = 0,
- .matrixNum = 0,
- .size = 2,
- .tileNum = 0,
- .priority = 1,
- .paletteNum = 0,
- .affineParam = 0,
-};
-
-static const union AnimCmd sSpriteAnim_DynamaxTriggerOff[] =
-{
- ANIMCMD_FRAME(0, 0),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_DynamaxTriggerOn[] =
-{
- ANIMCMD_FRAME(16, 0),
- ANIMCMD_END
-};
-
-static const union AnimCmd *const sSpriteAnimTable_DynamaxTrigger[] =
-{
- sSpriteAnim_DynamaxTriggerOff,
- sSpriteAnim_DynamaxTriggerOn,
-};
-
-static const struct SpriteTemplate sSpriteTemplate_DynamaxTrigger =
-{
- .tileTag = TAG_DYNAMAX_TRIGGER_TILE,
- .paletteTag = TAG_DYNAMAX_TRIGGER_PAL,
- .oam = &sOamData_DynamaxTrigger,
- .anims = sSpriteAnimTable_DynamaxTrigger,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCb_DynamaxTrigger
-};
-
-// Dynamax Evolution Trigger icon functions.
-void ChangeDynamaxTriggerSprite(u8 spriteId, u8 animId)
-{
- StartSpriteAnim(&gSprites[spriteId], animId);
-}
-
-#define SINGLES_DYNAMAX_TRIGGER_POS_X_OPTIMAL (30)
-#define SINGLES_DYNAMAX_TRIGGER_POS_X_PRIORITY (31)
-#define SINGLES_DYNAMAX_TRIGGER_POS_X_SLIDE (15)
-#define SINGLES_DYNAMAX_TRIGGER_POS_Y_DIFF (-11)
-
-#define DOUBLES_DYNAMAX_TRIGGER_POS_X_OPTIMAL (30)
-#define DOUBLES_DYNAMAX_TRIGGER_POS_X_PRIORITY (31)
-#define DOUBLES_DYNAMAX_TRIGGER_POS_X_SLIDE (15)
-#define DOUBLES_DYNAMAX_TRIGGER_POS_Y_DIFF (-4)
-
-#define tBattler data[0]
-#define tHide data[1]
-
-void CreateDynamaxTriggerSprite(u8 battlerId, u8 palId)
-{
- LoadSpritePalette(&sSpritePalette_DynamaxTrigger);
- if (GetSpriteTileStartByTag(TAG_DYNAMAX_TRIGGER_TILE) == 0xFFFF)
- LoadSpriteSheet(&sSpriteSheet_DynamaxTrigger);
- if (gBattleStruct->dynamax.triggerSpriteId == 0xFF)
- {
- if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
- gBattleStruct->dynamax.triggerSpriteId = CreateSprite(&sSpriteTemplate_DynamaxTrigger,
- gSprites[gHealthboxSpriteIds[battlerId]].x - DOUBLES_DYNAMAX_TRIGGER_POS_X_SLIDE,
- gSprites[gHealthboxSpriteIds[battlerId]].y - DOUBLES_DYNAMAX_TRIGGER_POS_Y_DIFF, 0);
- else
- gBattleStruct->dynamax.triggerSpriteId = CreateSprite(&sSpriteTemplate_DynamaxTrigger,
- gSprites[gHealthboxSpriteIds[battlerId]].x - SINGLES_DYNAMAX_TRIGGER_POS_X_SLIDE,
- gSprites[gHealthboxSpriteIds[battlerId]].y - SINGLES_DYNAMAX_TRIGGER_POS_Y_DIFF, 0);
- }
- gSprites[gBattleStruct->dynamax.triggerSpriteId].tBattler = battlerId;
- gSprites[gBattleStruct->dynamax.triggerSpriteId].tHide = FALSE;
-
- ChangeDynamaxTriggerSprite(gBattleStruct->dynamax.triggerSpriteId, palId);
-}
-
-static void SpriteCb_DynamaxTrigger(struct Sprite *sprite)
-{
- s32 xSlide, xPriority, xOptimal;
- s32 yDiff;
-
- if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
- {
- xSlide = DOUBLES_DYNAMAX_TRIGGER_POS_X_SLIDE;
- xPriority = DOUBLES_DYNAMAX_TRIGGER_POS_X_PRIORITY;
- xOptimal = DOUBLES_DYNAMAX_TRIGGER_POS_X_OPTIMAL;
- yDiff = DOUBLES_DYNAMAX_TRIGGER_POS_Y_DIFF;
- }
- else
- {
- xSlide = SINGLES_DYNAMAX_TRIGGER_POS_X_SLIDE;
- xPriority = SINGLES_DYNAMAX_TRIGGER_POS_X_PRIORITY;
- xOptimal = SINGLES_DYNAMAX_TRIGGER_POS_X_OPTIMAL;
- yDiff = SINGLES_DYNAMAX_TRIGGER_POS_Y_DIFF;
- }
-
- if (sprite->tHide)
- {
- if (sprite->x != gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xSlide)
- sprite->x++;
-
- if (sprite->x >= gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xPriority)
- sprite->oam.priority = 2;
- else
- sprite->oam.priority = 1;
-
- sprite->y = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y - yDiff;
- sprite->y2 = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y2 - yDiff;
- if (sprite->x == gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xSlide)
- DestroyDynamaxTriggerSprite();
- }
- else
- {
- if (sprite->x != gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xOptimal)
- sprite->x--;
-
- if (sprite->x >= gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xPriority)
- sprite->oam.priority = 2;
- else
- sprite->oam.priority = 1;
-
- sprite->y = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y - yDiff;
- sprite->y2 = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y2 - yDiff;
- }
-}
-
-bool32 IsDynamaxTriggerSpriteActive(void)
-{
- if (GetSpriteTileStartByTag(TAG_DYNAMAX_TRIGGER_TILE) == 0xFFFF)
- return FALSE;
- else if (IndexOfSpritePaletteTag(TAG_DYNAMAX_TRIGGER_PAL) != 0xFF)
- return TRUE;
- else
- return FALSE;
-}
-
-void HideDynamaxTriggerSprite(void)
-{
- if (gBattleStruct->dynamax.triggerSpriteId >= MAX_SPRITES)
- return;
- ChangeDynamaxTriggerSprite(gBattleStruct->dynamax.triggerSpriteId, 0);
- gSprites[gBattleStruct->dynamax.triggerSpriteId].tHide = TRUE;
-}
-
-void DestroyDynamaxTriggerSprite(void)
-{
- FreeSpritePaletteByTag(TAG_DYNAMAX_TRIGGER_PAL);
- FreeSpriteTilesByTag(TAG_DYNAMAX_TRIGGER_TILE);
- if (gBattleStruct->dynamax.triggerSpriteId != 0xFF)
- DestroySprite(&gSprites[gBattleStruct->dynamax.triggerSpriteId]);
- gBattleStruct->dynamax.triggerSpriteId = 0xFF;
-}
-
-#undef tBattler
-#undef tHide
-
-// data fields for healthboxMain
-// oam.affineParam holds healthboxRight spriteId
-#define hMain_DynamaxIndicatorId data[3]
-#define hMain_HealthBarSpriteId data[5]
-#define hMain_Battler data[6]
-#define hMain_Data7 data[7]
-
-// data fields for healthboxRight
-#define hOther_HealthBoxSpriteId data[5]
-
-// data fields for healthbar
-#define hBar_HealthBoxSpriteId data[5]
diff --git a/src/battle_factory.c b/src/battle_factory.c
index 8e3f84b359d7..b5645368c2de 100644
--- a/src/battle_factory.c
+++ b/src/battle_factory.c
@@ -362,7 +362,7 @@ static void GenerateOpponentMons(void)
// Ensure held items don't repeat on the opponent's team
for (k = firstMonId; k < firstMonId + i; k++)
{
- if (heldItems[k] != ITEM_NONE && heldItems[k] == gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId])
+ if (heldItems[k] != ITEM_NONE && heldItems[k] == gFacilityTrainerMons[monId].heldItem)
break;
}
if (k != firstMonId + i)
@@ -370,7 +370,7 @@ static void GenerateOpponentMons(void)
// Successful selection
species[i] = gFacilityTrainerMons[monId].species;
- heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId];
+ heldItems[i] = gFacilityTrainerMons[monId].heldItem;
gFrontierTempParty[i] = monId;
i++;
}
@@ -396,20 +396,16 @@ static void SetRentalsToOpponentParty(void)
gSaveBlock2Ptr->frontier.rentalMons[i + FRONTIER_PARTY_SIZE].ivs = GetBoxMonData(&gEnemyParty[i].box, MON_DATA_ATK_IV, NULL);
gSaveBlock2Ptr->frontier.rentalMons[i + FRONTIER_PARTY_SIZE].personality = GetMonData(&gEnemyParty[i], MON_DATA_PERSONALITY, NULL);
gSaveBlock2Ptr->frontier.rentalMons[i + FRONTIER_PARTY_SIZE].abilityNum = GetBoxMonData(&gEnemyParty[i].box, MON_DATA_ABILITY_NUM, NULL);
- SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[gFrontierTempParty[i]].itemTableId]);
+ SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gFacilityTrainerMons[gFrontierTempParty[i]].heldItem);
}
}
static void SetPlayerAndOpponentParties(void)
{
- int i, j, k;
- int count = 0;
- u8 bits = 0;
+ int i;
u8 monLevel;
u16 monId;
- u16 evs;
u8 ivs;
- u8 friendship;
if (gSaveBlock2Ptr->frontier.lvlMode == FRONTIER_LVL_TENT)
{
@@ -432,36 +428,11 @@ static void SetPlayerAndOpponentParties(void)
{
monId = gSaveBlock2Ptr->frontier.rentalMons[i].monId;
ivs = gSaveBlock2Ptr->frontier.rentalMons[i].ivs;
- CreateMon(&gPlayerParty[i],
- gFacilityTrainerMons[monId].species,
- monLevel,
- ivs,
- TRUE, gSaveBlock2Ptr->frontier.rentalMons[i].personality,
- OT_ID_PLAYER_ID, 0);
-
- count = 0;
- bits = gFacilityTrainerMons[monId].evSpread;
- for (j = 0; j < NUM_STATS; bits >>= 1, j++)
- {
- if (bits & 1)
- count++;
- }
-
- evs = MAX_TOTAL_EVS / count;
- bits = 1;
- for (j = 0; j < NUM_STATS; bits <<= 1, j++)
- {
- if (gFacilityTrainerMons[monId].evSpread & bits)
- SetMonData(&gPlayerParty[i], MON_DATA_HP_EV + j, &evs);
- }
+ 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]);
- friendship = 0;
- for (k = 0; k < MAX_MON_MOVES; k++)
- SetMonMoveAvoidReturn(&gPlayerParty[i], gFacilityTrainerMons[monId].moves[k], k);
- SetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP, &friendship);
- SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]);
- SetMonData(&gPlayerParty[i], MON_DATA_ABILITY_NUM, &gSaveBlock2Ptr->frontier.rentalMons[i].abilityNum);
}
}
@@ -473,34 +444,12 @@ static void SetPlayerAndOpponentParties(void)
{
monId = gSaveBlock2Ptr->frontier.rentalMons[i + FRONTIER_PARTY_SIZE].monId;
ivs = gSaveBlock2Ptr->frontier.rentalMons[i + FRONTIER_PARTY_SIZE].ivs;
- CreateMon(&gEnemyParty[i],
- gFacilityTrainerMons[monId].species,
- monLevel,
- ivs,
- TRUE, gSaveBlock2Ptr->frontier.rentalMons[i + FRONTIER_PARTY_SIZE].personality,
- OT_ID_PLAYER_ID, 0);
-
- count = 0;
- bits = gFacilityTrainerMons[monId].evSpread;
- for (j = 0; j < NUM_STATS; bits >>= 1, j++)
- {
- if (bits & 1)
- count++;
- }
-
- evs = MAX_TOTAL_EVS / count;
- bits = 1;
- for (j = 0; j < NUM_STATS; bits <<= 1, j++)
- {
- if (gFacilityTrainerMons[monId].evSpread & bits)
- SetMonData(&gEnemyParty[i], MON_DATA_HP_EV + j, &evs);
- }
-
- CalculateMonStats(&gEnemyParty[i]);
- for (k = 0; k < MAX_MON_MOVES; k++)
- SetMonMoveAvoidReturn(&gEnemyParty[i], gFacilityTrainerMons[monId].moves[k], k);
- SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]);
- SetMonData(&gEnemyParty[i], MON_DATA_ABILITY_NUM, &gSaveBlock2Ptr->frontier.rentalMons[i + FRONTIER_PARTY_SIZE].abilityNum);
+ 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]);
}
break;
}
@@ -582,7 +531,7 @@ static void GenerateInitialRentalMons(void)
// Cannot have two same held items.
for (j = firstMonId; j < firstMonId + i; j++)
{
- if (heldItems[j] != ITEM_NONE && heldItems[j] == gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId])
+ if (heldItems[j] != ITEM_NONE && heldItems[j] == gFacilityTrainerMons[monId].heldItem)
{
if (gFacilityTrainerMons[monId].species == currSpecies)
currSpecies = SPECIES_NONE;
@@ -594,7 +543,7 @@ static void GenerateInitialRentalMons(void)
gSaveBlock2Ptr->frontier.rentalMons[i].monId = monId;
species[i] = gFacilityTrainerMons[monId].species;
- heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId];
+ heldItems[i] = gFacilityTrainerMons[monId].heldItem;
monIds[i] = monId;
i++;
}
@@ -724,7 +673,7 @@ static void RestorePlayerPartyHeldItems(void)
{
SetMonData(&gPlayerParty[i],
MON_DATA_HELD_ITEM,
- &gBattleFrontierHeldItems[gFacilityTrainerMons[gSaveBlock2Ptr->frontier.rentalMons[i].monId].itemTableId]);
+ &gFacilityTrainerMons[gSaveBlock2Ptr->frontier.rentalMons[i].monId].heldItem);
}
}
@@ -761,7 +710,6 @@ void FillFactoryBrainParty(void)
int i, j, k;
u16 species[FRONTIER_PARTY_SIZE];
u16 heldItems[FRONTIER_PARTY_SIZE];
- u8 friendship;
int monLevel;
u8 fixedIV;
u32 otId;
@@ -801,27 +749,17 @@ void FillFactoryBrainParty(void)
for (k = 0; k < i; k++)
{
- if (heldItems[k] != ITEM_NONE && heldItems[k] == gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId])
+ if (heldItems[k] != ITEM_NONE && heldItems[k] == gFacilityTrainerMons[monId].heldItem)
break;
}
if (k != i)
continue;
species[i] = gFacilityTrainerMons[monId].species;
- heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId];
- CreateMonWithEVSpreadNatureOTID(&gEnemyParty[i],
- gFacilityTrainerMons[monId].species,
- monLevel,
- gFacilityTrainerMons[monId].nature,
- fixedIV,
- gFacilityTrainerMons[monId].evSpread,
- otId);
-
- friendship = 0;
- for (k = 0; k < MAX_MON_MOVES; k++)
- SetMonMoveAvoidReturn(&gEnemyParty[i], gFacilityTrainerMons[monId].moves[k], k);
- SetMonData(&gEnemyParty[i], MON_DATA_FRIENDSHIP, &friendship);
- SetMonData(&gEnemyParty[i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]);
+ heldItems[i] = gFacilityTrainerMons[monId].heldItem;
+ CreateFacilityMon(&gFacilityTrainerMons[monId],
+ monLevel, fixedIV, otId, FLAG_FRONTIER_MON_FACTORY,
+ &gEnemyParty[i]);
i++;
}
}
diff --git a/src/battle_factory_screen.c b/src/battle_factory_screen.c
index e945361f338b..f76c6a2fc830 100644
--- a/src/battle_factory_screen.c
+++ b/src/battle_factory_screen.c
@@ -1735,10 +1735,9 @@ static void Select_Task_HandleChooseMons(u8 taskId)
static void CreateFrontierFactorySelectableMons(u8 firstMonId)
{
- u8 i, j = 0;
+ u8 i = 0;
u8 ivs = 0;
u8 level = 0;
- u8 friendship = 0;
u32 otId = 0;
u8 battleMode = VarGet(VAR_FRONTIER_BATTLE_MODE);
u8 lvlMode = gSaveBlock2Ptr->frontier.lvlMode;
@@ -1762,27 +1761,18 @@ static void CreateFrontierFactorySelectableMons(u8 firstMonId)
ivs = GetFactoryMonFixedIV(challengeNum + 1, FALSE);
else
ivs = GetFactoryMonFixedIV(challengeNum, FALSE);
- CreateMonWithEVSpreadNatureOTID(&sFactorySelectScreen->mons[i + firstMonId].monData,
- gFacilityTrainerMons[monId].species,
- level,
- gFacilityTrainerMons[monId].nature,
- ivs,
- gFacilityTrainerMons[monId].evSpread,
- otId);
- friendship = 0;
- for (j = 0; j < MAX_MON_MOVES; j++)
- SetMonMoveAvoidReturn(&sFactorySelectScreen->mons[i + firstMonId].monData, gFacilityTrainerMons[monId].moves[j], j);
- SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_FRIENDSHIP, &friendship);
- SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]);
+
+ CreateFacilityMon(&gFacilityTrainerMons[monId],
+ level, ivs, otId, FLAG_FRONTIER_MON_FACTORY,
+ &sFactorySelectScreen->mons[i + firstMonId].monData);
}
}
static void CreateSlateportTentSelectableMons(u8 firstMonId)
{
- u8 i, j;
+ u8 i;
u8 ivs = 0;
u8 level = TENT_MIN_LEVEL;
- u8 friendship = 0;
u32 otId = 0;
gFacilityTrainerMons = gSlateportBattleTentMons;
@@ -1792,18 +1782,7 @@ static void CreateSlateportTentSelectableMons(u8 firstMonId)
{
u16 monId = gSaveBlock2Ptr->frontier.rentalMons[i].monId;
sFactorySelectScreen->mons[i + firstMonId].monId = monId;
- CreateMonWithEVSpreadNatureOTID(&sFactorySelectScreen->mons[i + firstMonId].monData,
- gFacilityTrainerMons[monId].species,
- level,
- gFacilityTrainerMons[monId].nature,
- ivs,
- gFacilityTrainerMons[monId].evSpread,
- otId);
- friendship = 0;
- for (j = 0; j < MAX_MON_MOVES; j++)
- SetMonMoveAvoidReturn(&sFactorySelectScreen->mons[i + firstMonId].monData, gFacilityTrainerMons[monId].moves[j], j);
- SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_FRIENDSHIP, &friendship);
- SetMonData(&sFactorySelectScreen->mons[i + firstMonId].monData, MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]);
+ CreateFacilityMon(&gFacilityTrainerMons[monId], level, ivs, otId, 0, &sFactorySelectScreen->mons[i + firstMonId].monData);
}
}
diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c
index 9970be2e659c..cb3349ee3256 100644
--- a/src/battle_gfx_sfx_util.c
+++ b/src/battle_gfx_sfx_util.c
@@ -28,7 +28,6 @@
#include "constants/battle_move_effects.h"
-extern const u8 gBattlePalaceNatureToMoveTarget[];
extern const struct CompressedSpriteSheet gSpriteSheet_EnemyShadow;
extern const struct SpriteTemplate gSpriteTemplate_EnemyShadow;
@@ -138,7 +137,7 @@ u16 ChooseMoveAndTargetInBattlePalace(u32 battler)
// Otherwise use move from "Support" group
for (; i < maxGroupNum; i++)
{
- if (gBattlePalaceNatureToMoveGroupLikelihood[GetNatureFromPersonality(gBattleMons[battler].personality)][i] > percent)
+ if (gNaturesInfo[GetNatureFromPersonality(gBattleMons[battler].personality)].battlePalacePercents[i] > percent)
break;
}
selectedGroup = i - minGroupNum;
@@ -263,17 +262,7 @@ u16 ChooseMoveAndTargetInBattlePalace(u32 battler)
}
}
- if (moveInfo->moves[chosenMoveId] == MOVE_CURSE)
- {
- if (moveInfo->monType1 != TYPE_GHOST && moveInfo->monType2 != TYPE_GHOST && moveInfo->monType3 != TYPE_GHOST)
- moveTarget = MOVE_TARGET_USER;
- else
- moveTarget = MOVE_TARGET_SELECTED;
- }
- else
- {
- moveTarget = GetBattlerMoveTargetType(battler, moveInfo->moves[chosenMoveId]);
- }
+ moveTarget = GetBattlerMoveTargetType(battler, moveInfo->moves[chosenMoveId]);
if (moveTarget & MOVE_TARGET_USER)
chosenMoveId |= (battler << 8);
@@ -338,7 +327,7 @@ static u16 GetBattlePalaceTarget(u32 battler)
if (gBattleMons[opposing1].hp == gBattleMons[opposing2].hp)
return (BATTLE_OPPOSITE(battler & BIT_SIDE) + (Random() & 2)) << 8;
- switch (gBattlePalaceNatureToMoveTarget[GetNatureFromPersonality(gBattleMons[battler].personality)])
+ switch (gNaturesInfo[GetNatureFromPersonality(gBattleMons[battler].personality)].battlePalaceSmokescreen)
{
case PALACE_TARGET_STRONGER:
if (gBattleMons[opposing1].hp > gBattleMons[opposing2].hp)
@@ -513,6 +502,7 @@ static bool8 ShouldAnimBeDoneRegardlessOfSubstitute(u8 animId)
case B_ANIM_SANDSTORM_CONTINUES:
case B_ANIM_HAIL_CONTINUES:
case B_ANIM_SNOW_CONTINUES:
+ case B_ANIM_FOG_CONTINUES:
case B_ANIM_SNATCH_MOVE:
return TRUE;
default:
@@ -636,7 +626,7 @@ void BattleLoadMonSpriteGfx(struct Pokemon *mon, u32 battler)
}
// dynamax tint
- if (IsDynamaxed(battler))
+ if (GetActiveGimmick(battler) == GIMMICK_DYNAMAX)
{
// Calyrex and its forms have a blue dynamax aura instead of red.
if (GET_BASE_SPECIES_ID(species) == SPECIES_CALYREX)
@@ -645,6 +635,13 @@ void BattleLoadMonSpriteGfx(struct Pokemon *mon, u32 battler)
BlendPalette(paletteOffset, 16, 4, RGB(31, 0, 12));
CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, PLTT_SIZEOF(16));
}
+
+ // Terastallization's tint
+ if (GetActiveGimmick(battler) == GIMMICK_TERA)
+ {
+ BlendPalette(paletteOffset, 16, 8, GetTeraTypeRGB(GetBattlerTeraType(battler)));
+ CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, PLTT_SIZEOF(16));
+ }
}
void BattleGfxSfxDummy2(u16 species)
@@ -709,7 +706,8 @@ bool8 BattleLoadAllHealthBoxesGfx(u8 state)
{
LoadSpritePalette(&sSpritePalettes_HealthBoxHealthBar[0]);
LoadSpritePalette(&sSpritePalettes_HealthBoxHealthBar[1]);
- MegaIndicator_LoadSpritesGfx();
+ LoadIndicatorSpritesGfx();
+ CategoryIcons_LoadSpritesGfx();
}
else if (!IsDoubleBattle())
{
@@ -913,7 +911,7 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool32 megaEvo, bo
HandleLoadSpecialPokePic(FALSE,
gMonSpritesGfxPtr->spritesGfx[position],
targetSpecies,
- gTransformedPersonalities[battlerAtk]);
+ personalityValue);
}
else
{
@@ -931,7 +929,7 @@ void HandleSpeciesGfxDataChange(u8 battlerAtk, u8 battlerDef, bool32 megaEvo, bo
HandleLoadSpecialPokePic(TRUE,
gMonSpritesGfxPtr->spritesGfx[position],
targetSpecies,
- gTransformedPersonalities[battlerAtk]);
+ personalityValue);
}
}
src = gMonSpritesGfxPtr->spritesGfx[position];
@@ -1100,27 +1098,36 @@ void SetBattlerSpriteAffineMode(u8 affineMode)
#define tBattlerId data[0]
+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;
+}
+
void LoadAndCreateEnemyShadowSprites(void)
{
u8 battler;
+ u32 i;
LoadCompressedSpriteSheet(&gSpriteSheet_EnemyShadow);
+ // initialize shadow sprite ids
+ for (i = 0; i < gBattlersCount; i++)
+ {
+ gBattleSpritesDataPtr->healthBoxesData[i].shadowSpriteId = MAX_SPRITES;
+ }
+
battler = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
- gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteId = CreateSprite(&gSpriteTemplate_EnemyShadow,
- GetBattlerSpriteCoord(battler, BATTLER_COORD_X),
- GetBattlerSpriteCoord(battler, BATTLER_COORD_Y) + 29,
- 0xC8);
- gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteId].data[0] = battler;
+ CreateEnemyShadowSprite(battler);
if (IsDoubleBattle())
{
battler = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
- gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteId = CreateSprite(&gSpriteTemplate_EnemyShadow,
- GetBattlerSpriteCoord(battler, BATTLER_COORD_X),
- GetBattlerSpriteCoord(battler, BATTLER_COORD_Y) + 29,
- 0xC8);
- gSprites[gBattleSpritesDataPtr->healthBoxesData[battler].shadowSpriteId].data[0] = battler;
+ CreateEnemyShadowSprite(battler);
}
}
@@ -1161,6 +1168,8 @@ 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 (gBattleSpritesDataPtr->battlerData[battler].transformSpecies != SPECIES_NONE)
species = gBattleSpritesDataPtr->battlerData[battler].transformSpecies;
diff --git a/src/battle_gimmick.c b/src/battle_gimmick.c
new file mode 100644
index 000000000000..c8ee93221862
--- /dev/null
+++ b/src/battle_gimmick.c
@@ -0,0 +1,401 @@
+#include "global.h"
+#include "battle.h"
+#include "battle_anim.h"
+#include "battle_controllers.h"
+#include "battle_interface.h"
+#include "battle_gimmick.h"
+#include "battle_z_move.h"
+#include "battle_setup.h"
+#include "battle_util.h"
+#include "item.h"
+#include "palette.h"
+#include "pokemon.h"
+#include "sprite.h"
+#include "util.h"
+#include "test_runner.h"
+
+#include "data/gimmicks.h"
+
+// Populates gBattleStruct->gimmick.usableGimmick for each battler.
+void AssignUsableGimmicks(void)
+{
+ u32 battler, gimmick;
+ for (battler = 0; battler < gBattlersCount; ++battler)
+ {
+ gBattleStruct->gimmick.usableGimmick[battler] = GIMMICK_NONE;
+ for (gimmick = 0; gimmick < GIMMICKS_COUNT; ++gimmick)
+ {
+ if (CanActivateGimmick(battler, gimmick))
+ {
+ gBattleStruct->gimmick.usableGimmick[battler] = gimmick;
+ break;
+ }
+ }
+ }
+}
+
+// Returns whether a battler is able to use a gimmick. Checks consumption and gimmick specific functions.
+bool32 CanActivateGimmick(u32 battler, enum Gimmick gimmick)
+{
+ return gGimmicksInfo[gimmick].CanActivate != NULL && gGimmicksInfo[gimmick].CanActivate(battler);
+}
+
+// Returns whether the player has a gimmick selected while in the move selection menu.
+bool32 IsGimmickSelected(u32 battler, enum Gimmick gimmick)
+{
+ // There's no player select in tests, but some gimmicks need to test choice before they are fully activated.
+ if (TESTING)
+ return (gBattleStruct->gimmick.toActivate & gBitTable[battler]) && gBattleStruct->gimmick.usableGimmick[battler] == gimmick;
+ else
+ return gBattleStruct->gimmick.usableGimmick[battler] == gimmick && gBattleStruct->gimmick.playerSelect;
+}
+
+// Sets a battler as having a gimmick active using their party index.
+void SetActiveGimmick(u32 battler, enum Gimmick gimmick)
+{
+ gBattleStruct->gimmick.activeGimmick[GetBattlerSide(battler)][gBattlerPartyIndexes[battler]] = gimmick;
+}
+
+// Returns a battler's active gimmick, if any.
+enum Gimmick GetActiveGimmick(u32 battler)
+{
+ return gBattleStruct->gimmick.activeGimmick[GetBattlerSide(battler)][gBattlerPartyIndexes[battler]];
+}
+
+// Returns whether a trainer mon is intended to use an unrestrictive gimmick via .useGimmick (i.e Tera).
+bool32 ShouldTrainerBattlerUseGimmick(u32 battler, enum Gimmick gimmick)
+{
+ // There are no trainer party settings in battles, but the AI needs to know which gimmick to use.
+ if (TESTING)
+ {
+ return gimmick == TestRunner_Battle_GetChosenGimmick(GetBattlerSide(battler), gBattlerPartyIndexes[battler]);
+ }
+ // The player can bypass these checks because they can choose through the controller.
+ else if (GetBattlerSide(battler) == B_SIDE_PLAYER
+ && !((gBattleTypeFlags & BATTLE_TYPE_MULTI) && battler == B_POSITION_PLAYER_RIGHT))
+ {
+ return TRUE;
+ }
+ // Check the trainer party data to see if a gimmick is intended.
+ else
+ {
+ bool32 isSecondTrainer = (GetBattlerPosition(battler) == B_POSITION_OPPONENT_RIGHT) && (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) && !BATTLE_TWO_VS_ONE_OPPONENT;
+ u16 trainerId = isSecondTrainer ? gTrainerBattleOpponent_B : gTrainerBattleOpponent_A;
+ const struct TrainerMon *mon = &GetTrainerPartyFromId(trainerId)[isSecondTrainer ? gBattlerPartyIndexes[battler] - MULTI_PARTY_SIZE : gBattlerPartyIndexes[battler]];
+
+ if (gimmick == GIMMICK_TERA && mon->teraType != TYPE_NONE)
+ return TRUE;
+ if (gimmick == GIMMICK_DYNAMAX && mon->shouldUseDynamax)
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+// Returns whether a trainer has used a gimmick during a battle.
+bool32 HasTrainerUsedGimmick(u32 battler, enum Gimmick gimmick)
+{
+ // Check whether partner battler has used gimmick or plans to during turn.
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE
+ && IsPartnerMonFromSameTrainer(battler)
+ && (gBattleStruct->gimmick.activated[BATTLE_PARTNER(battler)][gimmick]
+ || ((gBattleStruct->gimmick.toActivate & gBitTable[BATTLE_PARTNER(battler)]
+ && gBattleStruct->gimmick.usableGimmick[BATTLE_PARTNER(battler)] == gimmick))))
+ {
+ return TRUE;
+ }
+ // Otherwise, return whether current battler has used gimmick.
+ else
+ {
+ return gBattleStruct->gimmick.activated[battler][gimmick];
+ }
+}
+
+// Sets a gimmick as used by a trainer with checks for Multi Battles.
+void SetGimmickAsActivated(u32 battler, enum Gimmick gimmick)
+{
+ gBattleStruct->gimmick.activated[battler][gimmick] = TRUE;
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && IsPartnerMonFromSameTrainer(battler))
+ gBattleStruct->gimmick.activated[BATTLE_PARTNER(battler)][gimmick] = TRUE;
+}
+
+#define SINGLES_GIMMICK_TRIGGER_POS_X_OPTIMAL (30)
+#define SINGLES_GIMMICK_TRIGGER_POS_X_PRIORITY (31)
+#define SINGLES_GIMMICK_TRIGGER_POS_X_SLIDE (15)
+#define SINGLES_GIMMICK_TRIGGER_POS_Y_DIFF (-11)
+
+#define DOUBLES_GIMMICK_TRIGGER_POS_X_OPTIMAL (30)
+#define DOUBLES_GIMMICK_TRIGGER_POS_X_PRIORITY (31)
+#define DOUBLES_GIMMICK_TRIGGER_POS_X_SLIDE (15)
+#define DOUBLES_GIMMICK_TRIGGER_POS_Y_DIFF (-4)
+
+#define tBattler data[0]
+#define tHide data[1]
+
+void ChangeGimmickTriggerSprite(u32 spriteId, u32 animId)
+{
+ StartSpriteAnim(&gSprites[spriteId], animId);
+}
+
+void CreateGimmickTriggerSprite(u32 battler)
+{
+ const struct GimmickInfo * gimmick = &gGimmicksInfo[gBattleStruct->gimmick.usableGimmick[battler]];
+
+ // Exit if there shouldn't be a sprite produced.
+ if (GetBattlerSide(battler) == B_SIDE_OPPONENT
+ || gBattleStruct->gimmick.usableGimmick[battler] == GIMMICK_NONE
+ || gimmick->triggerSheet == NULL)
+ {
+ return;
+ }
+
+ LoadSpritePalette(gimmick->triggerPal);
+ if (GetSpriteTileStartByTag(TAG_GIMMICK_TRIGGER_TILE) == 0xFFFF)
+ LoadSpriteSheet(gimmick->triggerSheet);
+
+ if (gBattleStruct->gimmick.triggerSpriteId == 0xFF)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ gBattleStruct->gimmick.triggerSpriteId = CreateSprite(gimmick->triggerTemplate,
+ gSprites[gHealthboxSpriteIds[battler]].x - DOUBLES_GIMMICK_TRIGGER_POS_X_SLIDE,
+ gSprites[gHealthboxSpriteIds[battler]].y - DOUBLES_GIMMICK_TRIGGER_POS_Y_DIFF, 0);
+ else
+ gBattleStruct->gimmick.triggerSpriteId = CreateSprite(gimmick->triggerTemplate,
+ gSprites[gHealthboxSpriteIds[battler]].x - SINGLES_GIMMICK_TRIGGER_POS_X_SLIDE,
+ gSprites[gHealthboxSpriteIds[battler]].y - SINGLES_GIMMICK_TRIGGER_POS_Y_DIFF, 0);
+ }
+
+ gSprites[gBattleStruct->gimmick.triggerSpriteId].tBattler = battler;
+ gSprites[gBattleStruct->gimmick.triggerSpriteId].tHide = FALSE;
+
+ ChangeGimmickTriggerSprite(gBattleStruct->gimmick.triggerSpriteId, 0);
+}
+
+bool32 IsGimmickTriggerSpriteActive(void)
+{
+ if (GetSpriteTileStartByTag(TAG_GIMMICK_TRIGGER_TILE) == 0xFFFF)
+ return FALSE;
+ else if (IndexOfSpritePaletteTag(TAG_GIMMICK_TRIGGER_PAL) != 0xFF)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+void HideGimmickTriggerSprite(void)
+{
+ if (gBattleStruct->gimmick.triggerSpriteId != 0xFF)
+ {
+ ChangeGimmickTriggerSprite(gBattleStruct->gimmick.triggerSpriteId, 0);
+ gSprites[gBattleStruct->gimmick.triggerSpriteId].tHide = TRUE;
+ }
+}
+
+void DestroyGimmickTriggerSprite(void)
+{
+ FreeSpritePaletteByTag(TAG_GIMMICK_TRIGGER_PAL);
+ FreeSpriteTilesByTag(TAG_GIMMICK_TRIGGER_TILE);
+ if (gBattleStruct->gimmick.triggerSpriteId != 0xFF)
+ DestroySprite(&gSprites[gBattleStruct->gimmick.triggerSpriteId]);
+ gBattleStruct->gimmick.triggerSpriteId = 0xFF;
+}
+
+static void SpriteCb_GimmickTrigger(struct Sprite *sprite)
+{
+ s32 xSlide, xPriority, xOptimal;
+ s32 yDiff;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ {
+ xSlide = DOUBLES_GIMMICK_TRIGGER_POS_X_SLIDE;
+ xPriority = DOUBLES_GIMMICK_TRIGGER_POS_X_PRIORITY;
+ xOptimal = DOUBLES_GIMMICK_TRIGGER_POS_X_OPTIMAL;
+ yDiff = DOUBLES_GIMMICK_TRIGGER_POS_Y_DIFF;
+ }
+ else
+ {
+ xSlide = SINGLES_GIMMICK_TRIGGER_POS_X_SLIDE;
+ xPriority = SINGLES_GIMMICK_TRIGGER_POS_X_PRIORITY;
+ xOptimal = SINGLES_GIMMICK_TRIGGER_POS_X_OPTIMAL;
+ yDiff = SINGLES_GIMMICK_TRIGGER_POS_Y_DIFF;
+ }
+
+ if (sprite->tHide)
+ {
+ if (sprite->x != gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xSlide)
+ sprite->x++;
+
+ if (sprite->x >= gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xPriority)
+ sprite->oam.priority = 2;
+ else
+ sprite->oam.priority = 1;
+
+ sprite->y = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y - yDiff;
+ sprite->y2 = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y2 - yDiff;
+ if (sprite->x == gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xSlide)
+ DestroyGimmickTriggerSprite();
+ }
+ else
+ {
+ if (sprite->x != gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xOptimal)
+ sprite->x--;
+
+ if (sprite->x >= gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xPriority)
+ sprite->oam.priority = 2;
+ else
+ sprite->oam.priority = 1;
+
+ sprite->y = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y - yDiff;
+ sprite->y2 = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y2 - yDiff;
+ }
+}
+
+#undef tBattler
+#undef tHide
+
+// for sprite data fields
+#define tBattler data[0]
+#define tPosX data[2]
+#define tLevelXDelta data[3] // X position depends whether level has 3, 2 or 1 digit
+
+// data fields for healthboxMain
+// oam.affineParam holds healthboxRight spriteId
+#define hMain_Battler data[6]
+
+void LoadIndicatorSpritesGfx(void)
+{
+ u32 gimmick;
+ for (gimmick = 0; gimmick < GIMMICKS_COUNT; ++gimmick)
+ {
+ if (gimmick == GIMMICK_TERA) // special case
+ LoadSpriteSheets(sTeraIndicatorSpriteSheets);
+ else if (gGimmicksInfo[gimmick].indicatorSheet != NULL)
+ LoadSpriteSheet(gGimmicksInfo[gimmick].indicatorSheet);
+
+ if (gGimmicksInfo[gimmick].indicatorPal != NULL)
+ LoadSpritePalette(gGimmicksInfo[gimmick].indicatorPal);
+ }
+ // Primal reversion graphics aren't loaded as part of gimmick data
+ LoadSpriteSheet(&sSpriteSheet_AlphaIndicator);
+ LoadSpriteSheet(&sSpriteSheet_OmegaIndicator);
+}
+
+static void SpriteCb_GimmickIndicator(struct Sprite *sprite)
+{
+ u32 battler = sprite->tBattler;
+
+ sprite->x = gSprites[gHealthboxSpriteIds[battler]].x + sprite->tPosX + sprite->tLevelXDelta;
+ sprite->x2 = gSprites[gHealthboxSpriteIds[battler]].x2;
+ sprite->y2 = gSprites[gHealthboxSpriteIds[battler]].y2;
+}
+
+static inline u32 GetIndicatorSpriteId(u32 healthboxId)
+{
+ return gBattleStruct->gimmick.indicatorSpriteId[gSprites[healthboxId].hMain_Battler];
+}
+
+u32 GetIndicatorTileTag(u32 battler)
+{
+ u32 gimmick = GetActiveGimmick(battler);
+
+ if (IsBattlerPrimalReverted(battler))
+ {
+ if (gBattleMons[battler].species == SPECIES_GROUDON_PRIMAL)
+ return TAG_OMEGA_INDICATOR_TILE;
+ else
+ return TAG_ALPHA_INDICATOR_TILE;
+ }
+ else if (gimmick == GIMMICK_TERA) // special case
+ {
+ return sTeraIndicatorSpriteSheets[GetBattlerTeraType(battler)].tag;
+ }
+ else if (gGimmicksInfo[gimmick].indicatorSheet != NULL)
+ {
+ return gGimmicksInfo[gimmick].indicatorSheet->tag;
+ }
+ else
+ {
+ return TAG_NONE;
+ }
+}
+
+u32 GetIndicatorPalTag(u32 battler)
+{
+ u32 gimmick = GetActiveGimmick(battler);
+ if (IsBattlerPrimalReverted(battler))
+ return TAG_MISC_INDICATOR_PAL;
+ else if (gGimmicksInfo[gimmick].indicatorPal != NULL)
+ return gGimmicksInfo[gimmick].indicatorPal->tag;
+ else
+ return TAG_NONE;
+}
+
+void UpdateIndicatorVisibilityAndType(u32 healthboxId, bool32 invisible)
+{
+ u32 battler = gSprites[healthboxId].hMain_Battler;
+ u32 tileTag = GetIndicatorTileTag(battler);
+ u32 palTag = GetIndicatorPalTag(battler);
+ struct Sprite *sprite = &gSprites[GetIndicatorSpriteId(healthboxId)];
+
+ if (GetIndicatorSpriteId(healthboxId) == 0) // safari zone means the player doesn't have an indicator sprite id
+ return;
+
+ if (tileTag != TAG_NONE && palTag != TAG_NONE)
+ {
+ sprite->oam.tileNum = GetSpriteTileStartByTag(tileTag);
+ sprite->oam.paletteNum = IndexOfSpritePaletteTag(palTag);
+ sprite->invisible = invisible;
+ }
+ else // in case of error
+ {
+ sprite->invisible = TRUE;
+ }
+}
+
+void UpdateIndicatorOamPriority(u32 healthboxId, u32 oamPriority)
+{
+ gSprites[GetIndicatorSpriteId(healthboxId)].oam.priority = oamPriority;
+}
+
+void UpdateIndicatorLevelData(u32 healthboxId, u32 level)
+{
+ s32 xDelta = 0;
+
+ if (level >= 100)
+ xDelta -= 4;
+ else if (level < 10)
+ xDelta += 5;
+
+ gSprites[GetIndicatorSpriteId(healthboxId)].tLevelXDelta = xDelta;
+}
+
+static const s8 sIndicatorPositions[][2] =
+{
+ [B_POSITION_PLAYER_LEFT] = {53, -9},
+ [B_POSITION_OPPONENT_LEFT] = {44, -9},
+ [B_POSITION_PLAYER_RIGHT] = {52, -9},
+ [B_POSITION_OPPONENT_RIGHT] = {44, -9},
+};
+
+void CreateIndicatorSprite(u32 battler)
+{
+ u32 position, spriteId;
+ s16 xHealthbox = 0, x = 0, y = 0;
+
+ position = GetBattlerPosition(battler);
+ GetBattlerHealthboxCoords(battler, &xHealthbox, &y);
+
+ x = sIndicatorPositions[position][0];
+ y += sIndicatorPositions[position][1];
+
+ spriteId = CreateSpriteAtEnd(&sSpriteTemplate_GimmickIndicator, 0, y, 0);
+ gBattleStruct->gimmick.indicatorSpriteId[battler] = spriteId;
+ gSprites[spriteId].tBattler = battler;
+ gSprites[spriteId].tPosX = x;
+ gSprites[spriteId].invisible = FALSE;
+}
+
+#undef tBattler
+#undef tPosX
+#undef tLevelXDelta
+
+#undef hMain_Battler
diff --git a/src/battle_interface.c b/src/battle_interface.c
index 4e32fcf5a61b..8d50bf95c3eb 100644
--- a/src/battle_interface.c
+++ b/src/battle_interface.c
@@ -172,6 +172,7 @@ enum
static const u8 *GetHealthboxElementGfxPtr(u8);
static u8 *AddTextPrinterAndCreateWindowOnHealthbox(const u8 *, u32, u32, u32, u32 *);
+static u8 *AddTextPrinterAndCreateWindowOnHealthboxToFit(const u8 *, u32, u32, u32, u32 *, u32);
static void RemoveWindowOnHealthbox(u32 windowId);
static void UpdateHpTextInHealthboxInDoubles(u32 healthboxSpriteId, u32 maxOrCurrent, s16 currHp, s16 maxHp);
@@ -194,13 +195,6 @@ static void SpriteCB_StatusSummaryBalls_Enter(struct Sprite *);
static void SpriteCB_StatusSummaryBalls_Exit(struct Sprite *);
static void SpriteCB_StatusSummaryBalls_OnSwitchout(struct Sprite *);
-static void SpriteCb_MegaTrigger(struct Sprite *);
-static void SpriteCb_BurstTrigger(struct Sprite *);
-static void MegaIndicator_UpdateLevel(u32 healthboxId, u32 level);
-static void MegaIndicator_CreateSprite(u32 battlerId, u32 healthboxSpriteId);
-static void MegaIndicator_UpdateOamPriority(u32 healthboxId, u32 oamPriority);
-static void SpriteCb_MegaIndicator(struct Sprite *);
-
static u8 GetStatusIconForBattlerId(u8, u8);
static s32 CalcNewBarValue(s32, s32, s32, s32 *, u8, u16);
static u8 GetScaledExpFraction(s32, s32, s32, u8);
@@ -619,122 +613,6 @@ static const struct WindowTemplate sHealthboxWindowTemplate = {
.baseBlock = 0
};
-static const u8 ALIGNED(4) sMegaTriggerGfx[] = INCBIN_U8("graphics/battle_interface/mega_trigger.4bpp");
-static const u16 sMegaTriggerPal[] = INCBIN_U16("graphics/battle_interface/mega_trigger.gbapal");
-
-static const struct SpriteSheet sSpriteSheet_MegaTrigger =
-{
- sMegaTriggerGfx, sizeof(sMegaTriggerGfx), TAG_MEGA_TRIGGER_TILE
-};
-static const struct SpritePalette sSpritePalette_MegaTrigger =
-{
- sMegaTriggerPal, TAG_MEGA_TRIGGER_PAL
-};
-
-static const struct OamData sOamData_MegaTrigger =
-{
- .y = 0,
- .affineMode = 0,
- .objMode = 0,
- .mosaic = 0,
- .bpp = 0,
- .shape = ST_OAM_SQUARE,
- .x = 0,
- .matrixNum = 0,
- .size = 2,
- .tileNum = 0,
- .priority = 1,
- .paletteNum = 0,
- .affineParam = 0,
-};
-
-static const union AnimCmd sSpriteAnim_MegaTriggerOff[] =
-{
- ANIMCMD_FRAME(0, 0),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_MegaTriggerOn[] =
-{
- ANIMCMD_FRAME(16, 0),
- ANIMCMD_END
-};
-
-static const union AnimCmd *const sSpriteAnimTable_MegaTrigger[] =
-{
- sSpriteAnim_MegaTriggerOff,
- sSpriteAnim_MegaTriggerOn,
-};
-
-static const struct SpriteTemplate sSpriteTemplate_MegaTrigger =
-{
- .tileTag = TAG_MEGA_TRIGGER_TILE,
- .paletteTag = TAG_MEGA_TRIGGER_PAL,
- .oam = &sOamData_MegaTrigger,
- .anims = sSpriteAnimTable_MegaTrigger,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCb_MegaTrigger
-};
-
-static const u8 ALIGNED(4) sBurstTriggerGfx[] = INCBIN_U8("graphics/battle_interface/burst_trigger.4bpp");
-static const u16 sBurstTriggerPal[] = INCBIN_U16("graphics/battle_interface/burst_trigger.gbapal");
-
-static const struct SpriteSheet sSpriteSheet_BurstTrigger =
-{
- sBurstTriggerGfx, sizeof(sBurstTriggerGfx), TAG_BURST_TRIGGER_TILE
-};
-static const struct SpritePalette sSpritePalette_BurstTrigger =
-{
- sBurstTriggerPal, TAG_BURST_TRIGGER_PAL
-};
-
-static const struct OamData sOamData_BurstTrigger =
-{
- .y = 0,
- .affineMode = 0,
- .objMode = 0,
- .mosaic = 0,
- .bpp = 0,
- .shape = ST_OAM_SQUARE,
- .x = 0,
- .matrixNum = 0,
- .size = 2,
- .tileNum = 0,
- .priority = 1,
- .paletteNum = 0,
- .affineParam = 0,
-};
-
-static const union AnimCmd sSpriteAnim_BurstTriggerOff[] =
-{
- ANIMCMD_FRAME(0, 0),
- ANIMCMD_END
-};
-
-static const union AnimCmd sSpriteAnim_BurstTriggerOn[] =
-{
- ANIMCMD_FRAME(16, 0),
- ANIMCMD_END
-};
-
-static const union AnimCmd *const sSpriteAnimTable_BurstTrigger[] =
-{
- sSpriteAnim_BurstTriggerOff,
- sSpriteAnim_BurstTriggerOn,
-};
-
-static const struct SpriteTemplate sSpriteTemplate_BurstTrigger =
-{
- .tileTag = TAG_BURST_TRIGGER_TILE,
- .paletteTag = TAG_BURST_TRIGGER_PAL,
- .oam = &sOamData_BurstTrigger,
- .anims = sSpriteAnimTable_BurstTrigger,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCb_BurstTrigger
-};
-
// Because the healthbox is too large to fit into one sprite, it is divided into two sprites.
// healthboxLeft or healthboxMain is the left part that is used as the 'main' sprite.
// healthboxRight or healthboxOther is the right part of the healthbox.
@@ -742,7 +620,6 @@ static const struct SpriteTemplate sSpriteTemplate_BurstTrigger =
// data fields for healthboxMain
// oam.affineParam holds healthboxRight spriteId
-#define hMain_MegaIndicatorId data[3]
#define hMain_HealthBarSpriteId data[5]
#define hMain_Battler data[6]
#define hMain_Data7 data[7]
@@ -851,8 +728,7 @@ u8 CreateBattlerHealthboxSprites(u8 battlerId)
healthBarSpritePtr->hBar_Data6 = data6;
healthBarSpritePtr->invisible = TRUE;
- // Create mega indicator sprite.
- MegaIndicator_CreateSprite(battlerId, healthboxLeftSpriteId);
+ CreateIndicatorSprite(battlerId);
gBattleStruct->ballSpriteIds[0] = MAX_SPRITES;
gBattleStruct->ballSpriteIds[1] = MAX_SPRITES;
@@ -936,7 +812,7 @@ void SetHealthboxSpriteInvisible(u8 healthboxSpriteId)
gSprites[healthboxSpriteId].invisible = TRUE;
gSprites[gSprites[healthboxSpriteId].hMain_HealthBarSpriteId].invisible = TRUE;
gSprites[gSprites[healthboxSpriteId].oam.affineParam].invisible = TRUE;
- MegaIndicator_SetVisibilities(healthboxSpriteId, TRUE);
+ UpdateIndicatorVisibilityAndType(healthboxSpriteId, TRUE);
}
void SetHealthboxSpriteVisible(u8 healthboxSpriteId)
@@ -944,7 +820,7 @@ void SetHealthboxSpriteVisible(u8 healthboxSpriteId)
gSprites[healthboxSpriteId].invisible = FALSE;
gSprites[gSprites[healthboxSpriteId].hMain_HealthBarSpriteId].invisible = FALSE;
gSprites[gSprites[healthboxSpriteId].oam.affineParam].invisible = FALSE;
- MegaIndicator_SetVisibilities(healthboxSpriteId, FALSE);
+ UpdateIndicatorVisibilityAndType(healthboxSpriteId, FALSE);
}
static void UpdateSpritePos(u8 spriteId, s16 x, s16 y)
@@ -970,7 +846,8 @@ static void TryToggleHealboxVisibility(u32 priority, u32 healthboxLeftSpriteId,
gSprites[healthboxLeftSpriteId].invisible = invisible;
gSprites[healthboxRightSpriteId].invisible = invisible;
gSprites[healthbarSpriteId].invisible = invisible;
- MegaIndicator_SetVisibilities(healthboxLeftSpriteId, invisible);
+
+ UpdateIndicatorVisibilityAndType(healthboxLeftSpriteId, invisible);
}
void UpdateOamPriorityInAllHealthboxes(u8 priority, bool32 hideHPBoxes)
@@ -987,7 +864,7 @@ void UpdateOamPriorityInAllHealthboxes(u8 priority, bool32 hideHPBoxes)
gSprites[healthboxRightSpriteId].oam.priority = priority;
gSprites[healthbarSpriteId].oam.priority = priority;
- MegaIndicator_UpdateOamPriority(healthboxLeftSpriteId, priority);
+ UpdateIndicatorOamPriority(healthboxLeftSpriteId, priority);
if (B_HIDE_HEALTHBOX_IN_ANIMS == TRUE && hideHPBoxes && IsBattlerAlive(i))
TryToggleHealboxVisibility(priority, healthboxLeftSpriteId, healthboxRightSpriteId, healthbarSpriteId);
@@ -1042,13 +919,13 @@ static void UpdateLvlInHealthbox(u8 healthboxSpriteId, u8 lvl)
u8 *objVram;
u8 battler = gSprites[healthboxSpriteId].hMain_Battler;
- // Don't print Lv char if mon is mega evolved or primal reverted or Dynamaxed.
- if (IsBattlerMegaEvolved(battler) || IsBattlerPrimalReverted(battler) || IsDynamaxed(battler))
+ // Don't print Lv char if mon has a gimmick with an indicator active.
+ if (GetIndicatorTileTag(battler) != TAG_NONE)
{
objVram = ConvertIntToDecimalStringN(text, lvl, STR_CONV_MODE_LEFT_ALIGN, 3);
xPos = 5 * (3 - (objVram - (text + 2))) - 1;
- MegaIndicator_UpdateLevel(healthboxSpriteId, lvl);
- MegaIndicator_SetVisibilities(healthboxSpriteId, FALSE);
+ UpdateIndicatorLevelData(healthboxSpriteId, lvl);
+ UpdateIndicatorVisibilityAndType(healthboxSpriteId, FALSE);
}
else
{
@@ -1057,7 +934,7 @@ static void UpdateLvlInHealthbox(u8 healthboxSpriteId, u8 lvl)
objVram = ConvertIntToDecimalStringN(text + 2, lvl, STR_CONV_MODE_LEFT_ALIGN, 3);
xPos = 5 * (3 - (objVram - (text + 2)));
- MegaIndicator_SetVisibilities(healthboxSpriteId, TRUE);
+ UpdateIndicatorVisibilityAndType(healthboxSpriteId, TRUE);
}
windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(text, xPos, 3, 2, &windowId);
@@ -1238,7 +1115,7 @@ static void PrintSafariMonInfo(u8 healthboxSpriteId, struct Pokemon *mon)
barFontGfx = &gMonSpritesGfxPtr->barFontGfx[0x520 + (GetBattlerPosition(gSprites[healthboxSpriteId].hMain_Battler) * 384)];
var = 5;
nature = GetNature(mon);
- StringCopy(&text[6], gNatureNamePointers[nature]);
+ StringCopy(&text[6], gNaturesInfo[nature].name);
RenderTextHandleBold(barFontGfx, FONT_BOLD, text);
for (j = 6, i = 0; i < var; i++, j++)
@@ -1358,434 +1235,6 @@ void SwapHpBarsWithHpText(void)
}
}
-// Mega Evolution Trigger icon functions.
-void ChangeMegaTriggerSprite(u8 spriteId, u8 animId)
-{
- StartSpriteAnim(&gSprites[spriteId], animId);
-}
-
-#define SINGLES_MEGA_TRIGGER_POS_X_OPTIMAL (30)
-#define SINGLES_MEGA_TRIGGER_POS_X_PRIORITY (31)
-#define SINGLES_MEGA_TRIGGER_POS_X_SLIDE (15)
-#define SINGLES_MEGA_TRIGGER_POS_Y_DIFF (-11)
-
-#define DOUBLES_MEGA_TRIGGER_POS_X_OPTIMAL (30)
-#define DOUBLES_MEGA_TRIGGER_POS_X_PRIORITY (31)
-#define DOUBLES_MEGA_TRIGGER_POS_X_SLIDE (15)
-#define DOUBLES_MEGA_TRIGGER_POS_Y_DIFF (-4)
-
-#define tBattler data[0]
-#define tHide data[1]
-
-void CreateMegaTriggerSprite(u8 battlerId, u8 palId)
-{
- LoadSpritePalette(&sSpritePalette_MegaTrigger);
- if (GetSpriteTileStartByTag(TAG_MEGA_TRIGGER_TILE) == 0xFFFF)
- LoadSpriteSheet(&sSpriteSheet_MegaTrigger);
- if (gBattleStruct->mega.triggerSpriteId == 0xFF)
- {
- if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
- gBattleStruct->mega.triggerSpriteId = CreateSprite(&sSpriteTemplate_MegaTrigger,
- gSprites[gHealthboxSpriteIds[battlerId]].x - DOUBLES_MEGA_TRIGGER_POS_X_SLIDE,
- gSprites[gHealthboxSpriteIds[battlerId]].y - DOUBLES_MEGA_TRIGGER_POS_Y_DIFF, 0);
- else
- gBattleStruct->mega.triggerSpriteId = CreateSprite(&sSpriteTemplate_MegaTrigger,
- gSprites[gHealthboxSpriteIds[battlerId]].x - SINGLES_MEGA_TRIGGER_POS_X_SLIDE,
- gSprites[gHealthboxSpriteIds[battlerId]].y - SINGLES_MEGA_TRIGGER_POS_Y_DIFF, 0);
- }
- gSprites[gBattleStruct->mega.triggerSpriteId].tBattler = battlerId;
- gSprites[gBattleStruct->mega.triggerSpriteId].tHide = FALSE;
-
- ChangeMegaTriggerSprite(gBattleStruct->mega.triggerSpriteId, palId);
-}
-
-static void SpriteCb_MegaTrigger(struct Sprite *sprite)
-{
- s32 xSlide, xPriority, xOptimal;
- s32 yDiff;
-
- if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
- {
- xSlide = DOUBLES_MEGA_TRIGGER_POS_X_SLIDE;
- xPriority = DOUBLES_MEGA_TRIGGER_POS_X_PRIORITY;
- xOptimal = DOUBLES_MEGA_TRIGGER_POS_X_OPTIMAL;
- yDiff = DOUBLES_MEGA_TRIGGER_POS_Y_DIFF;
- }
- else
- {
- xSlide = SINGLES_MEGA_TRIGGER_POS_X_SLIDE;
- xPriority = SINGLES_MEGA_TRIGGER_POS_X_PRIORITY;
- xOptimal = SINGLES_MEGA_TRIGGER_POS_X_OPTIMAL;
- yDiff = SINGLES_MEGA_TRIGGER_POS_Y_DIFF;
- }
-
- if (sprite->tHide)
- {
- if (sprite->x != gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xSlide)
- sprite->x++;
-
- if (sprite->x >= gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xPriority)
- sprite->oam.priority = 2;
- else
- sprite->oam.priority = 1;
-
- sprite->y = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y - yDiff;
- sprite->y2 = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y2 - yDiff;
- if (sprite->x == gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xSlide)
- DestroyMegaTriggerSprite();
- }
- else
- {
- if (sprite->x != gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xOptimal)
- sprite->x--;
-
- if (sprite->x >= gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xPriority)
- sprite->oam.priority = 2;
- else
- sprite->oam.priority = 1;
-
- sprite->y = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y - yDiff;
- sprite->y2 = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y2 - yDiff;
- }
-}
-
-bool32 IsMegaTriggerSpriteActive(void)
-{
- if (GetSpriteTileStartByTag(TAG_MEGA_TRIGGER_TILE) == 0xFFFF)
- return FALSE;
- else if (IndexOfSpritePaletteTag(TAG_MEGA_TRIGGER_PAL) != 0xFF)
- return TRUE;
- else
- return FALSE;
-}
-
-void HideMegaTriggerSprite(void)
-{
- if (gBattleStruct->mega.triggerSpriteId >= MAX_SPRITES)
- return;
- ChangeMegaTriggerSprite(gBattleStruct->mega.triggerSpriteId, 0);
- gSprites[gBattleStruct->mega.triggerSpriteId].tHide = TRUE;
-}
-
-void HideTriggerSprites(void)
-{
- HideMegaTriggerSprite();
- HideBurstTriggerSprite();
- HideZMoveTriggerSprite();
- HideDynamaxTriggerSprite();
-}
-
-void DestroyMegaTriggerSprite(void)
-{
- FreeSpritePaletteByTag(TAG_MEGA_TRIGGER_PAL);
- FreeSpriteTilesByTag(TAG_MEGA_TRIGGER_TILE);
- if (gBattleStruct->mega.triggerSpriteId != 0xFF)
- DestroySprite(&gSprites[gBattleStruct->mega.triggerSpriteId]);
- gBattleStruct->mega.triggerSpriteId = 0xFF;
-}
-
-#undef tBattler
-#undef tHide
-
-// Ultra Burst Trigger icon functions.
-void ChangeBurstTriggerSprite(u8 spriteId, u8 animId)
-{
- StartSpriteAnim(&gSprites[spriteId], animId);
-}
-
-#define SINGLES_BURST_TRIGGER_POS_X_OPTIMAL (30)
-#define SINGLES_BURST_TRIGGER_POS_X_PRIORITY (31)
-#define SINGLES_BURST_TRIGGER_POS_X_SLIDE (15)
-#define SINGLES_BURST_TRIGGER_POS_Y_DIFF (-11)
-
-#define DOUBLES_BURST_TRIGGER_POS_X_OPTIMAL (30)
-#define DOUBLES_BURST_TRIGGER_POS_X_PRIORITY (31)
-#define DOUBLES_BURST_TRIGGER_POS_X_SLIDE (15)
-#define DOUBLES_BURST_TRIGGER_POS_Y_DIFF (-4)
-
-#define tBattler data[0]
-#define tHide data[1]
-
-void CreateBurstTriggerSprite(u8 battlerId, u8 palId)
-{
- LoadSpritePalette(&sSpritePalette_BurstTrigger);
- if (GetSpriteTileStartByTag(TAG_BURST_TRIGGER_TILE) == 0xFFFF)
- LoadSpriteSheet(&sSpriteSheet_BurstTrigger);
- if (gBattleStruct->burst.triggerSpriteId == 0xFF)
- {
- if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
- gBattleStruct->burst.triggerSpriteId = CreateSprite(&sSpriteTemplate_BurstTrigger,
- gSprites[gHealthboxSpriteIds[battlerId]].x - DOUBLES_BURST_TRIGGER_POS_X_SLIDE,
- gSprites[gHealthboxSpriteIds[battlerId]].y - DOUBLES_BURST_TRIGGER_POS_Y_DIFF, 0);
- else
- gBattleStruct->burst.triggerSpriteId = CreateSprite(&sSpriteTemplate_BurstTrigger,
- gSprites[gHealthboxSpriteIds[battlerId]].x - SINGLES_BURST_TRIGGER_POS_X_SLIDE,
- gSprites[gHealthboxSpriteIds[battlerId]].y - SINGLES_BURST_TRIGGER_POS_Y_DIFF, 0);
- }
- gSprites[gBattleStruct->burst.triggerSpriteId].tBattler = battlerId;
- gSprites[gBattleStruct->burst.triggerSpriteId].tHide = FALSE;
-
- ChangeBurstTriggerSprite(gBattleStruct->burst.triggerSpriteId, palId);
-}
-
-static void SpriteCb_BurstTrigger(struct Sprite *sprite)
-{
- s32 xSlide, xPriority, xOptimal;
- s32 yDiff;
-
- if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
- {
- xSlide = DOUBLES_BURST_TRIGGER_POS_X_SLIDE;
- xPriority = DOUBLES_BURST_TRIGGER_POS_X_PRIORITY;
- xOptimal = DOUBLES_BURST_TRIGGER_POS_X_OPTIMAL;
- yDiff = DOUBLES_BURST_TRIGGER_POS_Y_DIFF;
- }
- else
- {
- xSlide = SINGLES_BURST_TRIGGER_POS_X_SLIDE;
- xPriority = SINGLES_BURST_TRIGGER_POS_X_PRIORITY;
- xOptimal = SINGLES_BURST_TRIGGER_POS_X_OPTIMAL;
- yDiff = SINGLES_BURST_TRIGGER_POS_Y_DIFF;
- }
-
- if (sprite->tHide)
- {
- if (sprite->x != gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xSlide)
- sprite->x++;
-
- if (sprite->x >= gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xPriority)
- sprite->oam.priority = 2;
- else
- sprite->oam.priority = 1;
-
- sprite->y = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y - yDiff;
- sprite->y2 = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y2 - yDiff;
- if (sprite->x == gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xSlide)
- DestroyBurstTriggerSprite();
- }
- else
- {
- if (sprite->x != gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xOptimal)
- sprite->x--;
-
- if (sprite->x >= gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xPriority)
- sprite->oam.priority = 2;
- else
- sprite->oam.priority = 1;
-
- sprite->y = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y - yDiff;
- sprite->y2 = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y2 - yDiff;
- }
-}
-
-bool32 IsBurstTriggerSpriteActive(void)
-{
- if (GetSpriteTileStartByTag(TAG_BURST_TRIGGER_TILE) == 0xFFFF)
- return FALSE;
- else if (IndexOfSpritePaletteTag(TAG_BURST_TRIGGER_PAL) != 0xFF)
- return TRUE;
- else
- return FALSE;
-}
-
-void HideBurstTriggerSprite(void)
-{
- if (gBattleStruct->burst.triggerSpriteId >= MAX_SPRITES)
- return;
- ChangeBurstTriggerSprite(gBattleStruct->burst.triggerSpriteId, 0);
- gSprites[gBattleStruct->burst.triggerSpriteId].tHide = TRUE;
-}
-
-void DestroyBurstTriggerSprite(void)
-{
- FreeSpritePaletteByTag(TAG_BURST_TRIGGER_PAL);
- FreeSpriteTilesByTag(TAG_BURST_TRIGGER_TILE);
- if (gBattleStruct->burst.triggerSpriteId != 0xFF)
- DestroySprite(&gSprites[gBattleStruct->burst.triggerSpriteId]);
- gBattleStruct->burst.triggerSpriteId = 0xFF;
-}
-
-#undef tBattler
-#undef tHide
-
-
-// Code for Mega Evolution (And Alpha/Omega) Trigger icon visible on the battler's healthbox.
-enum
-{
- INDICATOR_MEGA,
- INDICATOR_ALPHA,
- INDICATOR_OMEGA,
- INDICATOR_DYNAMAX,
- INDICATOR_COUNT,
-};
-
-static const u8 ALIGNED(4) sMegaIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/mega_indicator.4bpp");
-static const u16 sMegaIndicatorPal[] = INCBIN_U16("graphics/battle_interface/mega_indicator.gbapal");
-static const u8 ALIGNED(4) sAlphaIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/alpha_indicator.4bpp");
-static const u8 ALIGNED(4) sOmegaIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/omega_indicator.4bpp");
-static const u16 sAlphaOmegaIndicatorPal[] = INCBIN_U16("graphics/battle_interface/misc_indicator.gbapal");
-static const u8 ALIGNED(4) sDynamaxIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/dynamax_indicator.4bpp");
-static const u16 sDynamaxIndicatorPal[] = INCBIN_U16("graphics/battle_interface/misc_indicator.gbapal");
-
-static const struct SpriteSheet sMegaIndicator_SpriteSheets[] =
-{
- [INDICATOR_MEGA] = {sMegaIndicatorGfx, sizeof(sMegaIndicatorGfx), TAG_MEGA_INDICATOR_TILE},
- [INDICATOR_ALPHA] = {sAlphaIndicatorGfx, sizeof(sAlphaIndicatorGfx), TAG_ALPHA_INDICATOR_TILE},
- [INDICATOR_OMEGA] = {sOmegaIndicatorGfx, sizeof(sOmegaIndicatorGfx), TAG_OMEGA_INDICATOR_TILE},
- [INDICATOR_DYNAMAX] = {sDynamaxIndicatorGfx, sizeof(sDynamaxIndicatorGfx), TAG_DYNAMAX_INDICATOR_TILE},
- [INDICATOR_COUNT] = {0}
-};
-static const struct SpritePalette sMegaIndicator_SpritePalettes[] =
-{
- [INDICATOR_MEGA] = {sMegaIndicatorPal, TAG_MEGA_INDICATOR_PAL},
- [INDICATOR_ALPHA] = {sAlphaOmegaIndicatorPal, TAG_MISC_INDICATOR_PAL},
- [INDICATOR_OMEGA] = {sAlphaOmegaIndicatorPal, TAG_MISC_INDICATOR_PAL},
- [INDICATOR_DYNAMAX] = {sDynamaxIndicatorPal, TAG_MISC_INDICATOR_PAL},
- [INDICATOR_COUNT] = {0}
-};
-
-static const struct OamData sOamData_MegaIndicator =
-{
- .shape = SPRITE_SHAPE(16x16),
- .size = SPRITE_SIZE(16x16),
- .priority = 1,
-};
-
-static const struct SpriteTemplate sSpriteTemplate_MegaIndicator =
-{
- .tileTag = TAG_MEGA_INDICATOR_TILE,
- .paletteTag = TAG_MEGA_INDICATOR_PAL,
- .oam = &sOamData_MegaIndicator,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCb_MegaIndicator,
-};
-
-static const u16 sMegaIndicatorTags[][2] =
-{
- [INDICATOR_MEGA] = {TAG_MEGA_INDICATOR_TILE, TAG_MEGA_INDICATOR_PAL},
- [INDICATOR_ALPHA] = {TAG_ALPHA_INDICATOR_TILE, TAG_MISC_INDICATOR_PAL},
- [INDICATOR_OMEGA] = {TAG_OMEGA_INDICATOR_TILE, TAG_MISC_INDICATOR_PAL},
- [INDICATOR_DYNAMAX] = {TAG_DYNAMAX_INDICATOR_TILE, TAG_MISC_INDICATOR_PAL},
-};
-
-static const s8 sIndicatorPositions[][2] =
-{
- [B_POSITION_PLAYER_LEFT] = {52, -9},
- [B_POSITION_OPPONENT_LEFT] = {44, -9},
- [B_POSITION_PLAYER_RIGHT] = {52, -9},
- [B_POSITION_OPPONENT_RIGHT] = {44, -9},
-};
-
-// for sprite data fields
-#define tBattler data[0]
-#define tType data[1] // Indicator type: mega, alpha, omega
-#define tPosX data[2]
-#define tLevelXDelta data[3] // X position depends whether level has 3, 2 or 1 digit
-
-void MegaIndicator_LoadSpritesGfx(void)
-{
- LoadSpriteSheets(sMegaIndicator_SpriteSheets);
- LoadSpritePalettes(sMegaIndicator_SpritePalettes);
-}
-
-static bool32 MegaIndicator_ShouldBeInvisible(u32 battlerId, struct Sprite *sprite)
-{
- bool32 megaEvolved = IsBattlerMegaEvolved(battlerId);
- bool32 primalReverted = IsBattlerPrimalReverted(battlerId);
- bool32 dynamaxed = IsDynamaxed(battlerId);
-
- if (!megaEvolved && !primalReverted && !dynamaxed)
- return TRUE;
-
- if (megaEvolved)
- sprite->tType = INDICATOR_MEGA;
- else if (primalReverted && gBattleMons[battlerId].species == SPECIES_KYOGRE_PRIMAL)
- sprite->tType = INDICATOR_ALPHA;
- else if (primalReverted && gBattleMons[battlerId].species == SPECIES_GROUDON_PRIMAL)
- sprite->tType = INDICATOR_OMEGA;
- else if (dynamaxed)
- sprite->tType = INDICATOR_DYNAMAX;
-
- sprite->oam.tileNum = GetSpriteTileStartByTag(sMegaIndicatorTags[sprite->tType][0]);
- sprite->oam.paletteNum = IndexOfSpritePaletteTag(sMegaIndicatorTags[sprite->tType][1]);
- return FALSE;
-}
-
-static u8 *MegaIndicator_GetSpriteId(u32 healthboxSpriteId)
-{
- u8 *spriteId = (u8 *)(&gSprites[healthboxSpriteId].hMain_MegaIndicatorId);
- return spriteId;
-}
-
-void MegaIndicator_SetVisibilities(u32 healthboxId, bool32 invisible)
-{
- u8 *spriteId = MegaIndicator_GetSpriteId(healthboxId);
- u32 battlerId = gSprites[healthboxId].hMain_Battler;
-
- if (GetSafariZoneFlag())
- return;
-
- if (invisible == TRUE)
- gSprites[*spriteId].invisible = TRUE;
- else // Try visible.
- gSprites[*spriteId].invisible = MegaIndicator_ShouldBeInvisible(battlerId, &gSprites[*spriteId]);
-}
-
-static void MegaIndicator_UpdateOamPriority(u32 healthboxId, u32 oamPriority)
-{
- u8 *spriteId = MegaIndicator_GetSpriteId(healthboxId);
- gSprites[*spriteId].oam.priority = oamPriority;
-}
-
-static void MegaIndicator_UpdateLevel(u32 healthboxId, u32 level)
-{
- s16 xDelta = 0;
- u8 *spriteId = MegaIndicator_GetSpriteId(healthboxId);
-
- if (level >= 100)
- xDelta -= 4;
- else if (level < 10)
- xDelta += 5;
-
- gSprites[*spriteId].tLevelXDelta = xDelta;
-}
-
-static void MegaIndicator_CreateSprite(u32 battlerId, u32 healthboxSpriteId)
-{
- struct SpriteTemplate sprTemplate;
- u32 position;
- u8 *spriteId;
- s16 xHealthbox = 0, y = 0;
- s32 x = 0;
-
- position = GetBattlerPosition(battlerId);
- GetBattlerHealthboxCoords(battlerId, &xHealthbox, &y);
-
- x = sIndicatorPositions[position][0];
- y += sIndicatorPositions[position][1];
-
- spriteId = MegaIndicator_GetSpriteId(healthboxSpriteId);
- sprTemplate = sSpriteTemplate_MegaIndicator;
- sprTemplate.tileTag = sMegaIndicatorTags[INDICATOR_MEGA][0];
- sprTemplate.paletteTag = sMegaIndicatorTags[INDICATOR_MEGA][1];
- *spriteId = CreateSpriteAtEnd(&sprTemplate, 0, y, 0);
- gSprites[*spriteId].tType = INDICATOR_MEGA;
- gSprites[*spriteId].tBattler = battlerId;
- gSprites[*spriteId].tPosX = x;
- gSprites[*spriteId].invisible = TRUE;
-}
-
-static void SpriteCb_MegaIndicator(struct Sprite *sprite)
-{
- u32 battlerId = sprite->tBattler;
-
- sprite->x = gSprites[gHealthboxSpriteIds[battlerId]].x + sprite->tPosX + sprite->tLevelXDelta;
- sprite->x2 = gSprites[gHealthboxSpriteIds[battlerId]].x2;
- sprite->y2 = gSprites[gHealthboxSpriteIds[battlerId]].y2;
-}
-
#undef tBattler
#undef tType
#undef tPosX
@@ -2281,24 +1730,21 @@ static void UpdateNickInHealthbox(u8 healthboxSpriteId, struct Pokemon *mon)
if ((species == SPECIES_NIDORAN_F || species == SPECIES_NIDORAN_M) && StringCompare(nickname, GetSpeciesName(species)) == 0)
gender = 100;
- // AddTextPrinterAndCreateWindowOnHealthbox's arguments are the same in all 3 cases.
- // It's possible they may have been different in early development phases.
switch (gender)
{
default:
StringCopy(ptr, gText_HealthboxGender_None);
- windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(gDisplayedStringBattle, 0, 3, 2, &windowId);
break;
case MON_MALE:
StringCopy(ptr, gText_HealthboxGender_Male);
- windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(gDisplayedStringBattle, 0, 3, 2, &windowId);
break;
case MON_FEMALE:
StringCopy(ptr, gText_HealthboxGender_Female);
- windowTileData = AddTextPrinterAndCreateWindowOnHealthbox(gDisplayedStringBattle, 0, 3, 2, &windowId);
break;
}
+ windowTileData = AddTextPrinterAndCreateWindowOnHealthboxToFit(gDisplayedStringBattle, 0, 3, 2, &windowId, 55);
+
spriteTileNum = gSprites[healthboxSpriteId].oam.tileNum * TILE_SIZE_4BPP;
if (GetBattlerSide(gSprites[healthboxSpriteId].data[6]) == B_SIDE_PLAYER)
@@ -2615,7 +2061,7 @@ s32 MoveBattleBar(u8 battlerId, u8 healthboxSpriteId, u8 whichBar, u8 unused)
if (whichBar == HEALTH_BAR) // health bar
{
- u16 hpFraction = B_FAST_HP_DRAIN == FALSE ? 1 : max(gBattleSpritesDataPtr->battleBars[battlerId].maxValue / B_HEALTHBAR_PIXELS, 1);
+ u16 hpFraction = B_FAST_HP_DRAIN == FALSE ? 1 : max(gBattleSpritesDataPtr->battleBars[battlerId].maxValue / (B_HEALTHBAR_PIXELS / 2), 1);
currentBarValue = CalcNewBarValue(gBattleSpritesDataPtr->battleBars[battlerId].maxValue,
gBattleSpritesDataPtr->battleBars[battlerId].oldValue,
gBattleSpritesDataPtr->battleBars[battlerId].receivedValue,
@@ -2838,7 +2284,7 @@ static u8 GetScaledExpFraction(s32 oldValue, s32 receivedValue, s32 maxValue, u8
s32 newVal, result;
s8 oldToMax, newToMax;
- scale *= 8;
+ scale *= (B_FAST_EXP_GROW) ? 2 : 8;
newVal = oldValue - receivedValue;
if (newVal < 0)
@@ -2887,7 +2333,7 @@ u8 GetHPBarLevel(s16 hp, s16 maxhp)
return result;
}
-static u8 *AddTextPrinterAndCreateWindowOnHealthbox(const u8 *str, u32 x, u32 y, u32 bgColor, u32 *windowId)
+static u8 *AddTextPrinterAndCreateWindowOnHealthboxWithFont(const u8 *str, u32 x, u32 y, u32 bgColor, u32 *windowId, u32 fontId)
{
u16 winId;
u8 color[3];
@@ -2900,12 +2346,23 @@ static u8 *AddTextPrinterAndCreateWindowOnHealthbox(const u8 *str, u32 x, u32 y,
color[1] = 1;
color[2] = 3;
- AddTextPrinterParameterized4(winId, FONT_SMALL, x, y, 0, 0, color, TEXT_SKIP_DRAW, str);
+ AddTextPrinterParameterized4(winId, fontId, x, y, 0, 0, color, TEXT_SKIP_DRAW, str);
*windowId = winId;
return (u8 *)(GetWindowAttribute(winId, WINDOW_TILE_DATA));
}
+static u8 *AddTextPrinterAndCreateWindowOnHealthbox(const u8 *str, u32 x, u32 y, u32 bgColor, u32 *windowId)
+{
+ return AddTextPrinterAndCreateWindowOnHealthboxWithFont(str, x, y, bgColor, windowId, FONT_SMALL);
+}
+
+static u8 *AddTextPrinterAndCreateWindowOnHealthboxToFit(const u8 *str, u32 x, u32 y, u32 bgColor, u32 *windowId, u32 width)
+{
+ u32 fontId = GetFontIdToFit(str, FONT_SMALL, 0, width);
+ return AddTextPrinterAndCreateWindowOnHealthboxWithFont(str, x, y, bgColor, windowId, fontId);
+}
+
static void RemoveWindowOnHealthbox(u32 windowId)
{
RemoveWindow(windowId);
@@ -3010,6 +2467,7 @@ static const s16 sAbilityPopUpCoordsSingles[MAX_BATTLERS_COUNT][2] =
static u8* AddTextPrinterAndCreateWindowOnAbilityPopUp(const u8 *str, u32 x, u32 y, u32 color1, u32 color2, u32 color3, u32 *windowId)
{
+ u32 fontId;
u8 color[3] = {color1, color2, color3};
struct WindowTemplate winTemplate = {0};
winTemplate.width = POPUP_WINDOW_WIDTH;
@@ -3018,7 +2476,8 @@ static u8* AddTextPrinterAndCreateWindowOnAbilityPopUp(const u8 *str, u32 x, u32
*windowId = AddWindow(&winTemplate);
FillWindowPixelBuffer(*windowId, PIXEL_FILL(color1));
- AddTextPrinterParameterized4(*windowId, FONT_SMALL, x, y, 0, 0, color, TEXT_SKIP_DRAW, str);
+ fontId = GetFontIdToFit(str, FONT_SMALL, 0, 76);
+ AddTextPrinterParameterized4(*windowId, fontId, x, y, 0, 0, color, TEXT_SKIP_DRAW, str);
return (u8 *)(GetWindowAttribute(*windowId, WINDOW_TILE_DATA));
}
@@ -3723,3 +3182,9 @@ void ArrowsChangeColorLastBallCycle(bool32 showArrows)
}
#endif
}
+
+void CategoryIcons_LoadSpritesGfx(void)
+{
+ LoadCompressedSpriteSheet(&gSpriteSheet_CategoryIcons);
+ LoadSpritePalette(&gSpritePal_CategoryIcons);
+}
diff --git a/src/battle_main.c b/src/battle_main.c
index f0ced9e50f96..c3f8e61bbbd8 100644
--- a/src/battle_main.c
+++ b/src/battle_main.c
@@ -13,6 +13,8 @@
#include "battle_setup.h"
#include "battle_tower.h"
#include "battle_util.h"
+#include "battle_z_move.h"
+#include "battle_gimmick.h"
#include "berry.h"
#include "bg.h"
#include "data.h"
@@ -54,6 +56,7 @@
#include "wild_encounter.h"
#include "window.h"
#include "constants/abilities.h"
+#include "constants/battle_ai.h"
#include "constants/battle_move_effects.h"
#include "constants/battle_string_ids.h"
#include "constants/battle_partner.h"
@@ -118,6 +121,7 @@ static void SpriteCB_UnusedBattleInit(struct Sprite *sprite);
static void SpriteCB_UnusedBattleInit_Main(struct Sprite *sprite);
static u32 Crc32B (const u8 *data, u32 size);
static u32 GeneratePartyHash(const struct Trainer *trainer, u32 i);
+static s32 Factorial(s32);
EWRAM_DATA u16 gBattle_BG0_X = 0;
EWRAM_DATA u16 gBattle_BG0_Y = 0;
@@ -229,6 +233,7 @@ EWRAM_DATA u16 gBallToDisplay = 0;
EWRAM_DATA bool8 gLastUsedBallMenuPresent = FALSE;
EWRAM_DATA u8 gPartyCriticalHits[PARTY_SIZE] = {0};
EWRAM_DATA static u8 sTriedEvolving = 0;
+EWRAM_DATA u8 gCategoryIconSpriteId = 0;
void (*gPreBattleCallback1)(void);
void (*gBattleMainFunc)(void);
@@ -294,309 +299,7 @@ const struct OamData gOamData_BattleSpritePlayerSide =
static const s8 sCenterToCornerVecXs[8] ={-32, -16, -16, -32, -32};
-// .generic is large enough that the text for TYPE_ELECTRIC will exceed TEXT_BUFF_ARRAY_COUNT.
-const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] =
-{
- [TYPE_NORMAL] =
- {
- .name = _("Normal"),
- .generic = _("a NORMAL move"),
- .palette = 13,
- .zMove = MOVE_BREAKNECK_BLITZ,
- .maxMove = MOVE_MAX_STRIKE,
- //.enhanceItem = ITEM_SILK_SCARF,
- //.berry = ITEM_CHILAN_BERRY,
- //.gem = ITEM_NORMAL_GEM,
- //.zCrystal = ITEM_NORMALIUM_Z,
- //.teraShard = ITEM_NORMAL_TERA_SHARD,
- //.arceusForm = SPECIES_ARCEUS_NORMAL,
- },
- [TYPE_FIGHTING] =
- {
- .name = _("Fight"),
- .generic = _("a FIGHTING move"),
- .palette = 13,
- .zMove = MOVE_ALL_OUT_PUMMELING,
- .maxMove = MOVE_MAX_KNUCKLE,
- //.enhanceItem = ITEM_BLACK_BELT,
- //.berry = ITEM_CHOPLE_BERRY,
- //.gem = ITEM_FIGHTING_GEM,
- //.zCrystal = ITEM_FIGHTINIUM_Z,
- //.plate = ITEM_FIST_PLATE,
- //.memory = ITEM_FIGHTING_MEMORY,
- //.teraShard = ITEM_FIGHTING_TERA_SHARD,
- //.arceusForm = SPECIES_ARCEUS_FIGHTING,
- },
- [TYPE_FLYING] =
- {
- .name = _("Flying"),
- .generic = _("a FLYING move"),
- .palette = 14,
- .zMove = MOVE_SUPERSONIC_SKYSTRIKE,
- .maxMove = MOVE_MAX_AIRSTREAM,
- //.enhanceItem = ITEM_SHARP_BEAK,
- //.berry = ITEM_COBA_BERRY,
- //.gem = ITEM_FLYING_GEM,
- //.zCrystal = ITEM_FLYINIUM_Z,
- //.plate = ITEM_SKY_PLATE,
- //.memory = ITEM_FLYING_MEMORY,
- //.teraShard = ITEM_FLYING_TERA_SHARD,
- //.arceusForm = SPECIES_ARCEUS_FLYING,
- },
- [TYPE_POISON] =
- {
- .name = _("Poison"),
- .generic = _("a POISON move"),
- .palette = 14,
- .zMove = MOVE_ACID_DOWNPOUR,
- .maxMove = MOVE_MAX_OOZE,
- //.enhanceItem = ITEM_POISON_BARB,
- //.berry = ITEM_KEBIA_BERRY,
- //.gem = ITEM_POISON_GEM,
- //.zCrystal = ITEM_POISONIUM_Z,
- //.plate = ITEM_TOXIC_PLATE,
- //.memory = ITEM_POISON_MEMORY,
- //.teraShard = ITEM_POISON_TERA_SHARD,
- //.arceusForm = SPECIES_ARCEUS_POISON,
- },
- [TYPE_GROUND] =
- {
- .name = _("Ground"),
- .generic = _("a GROUND move"),
- .palette = 13,
- .zMove = MOVE_TECTONIC_RAGE,
- .maxMove = MOVE_MAX_QUAKE,
- //.enhanceItem = ITEM_SOFT_SAND,
- //.berry = ITEM_SHUCA_BERRY,
- //.gem = ITEM_GROUND_GEM,
- //.zCrystal = ITEM_GROUNDIUM_Z,
- //.plate = ITEM_EARTH_PLATE,
- //.memory = ITEM_GROUND_MEMORY,
- //.teraShard = ITEM_GROUND_TERA_SHARD,
- //.arceusForm = SPECIES_ARCEUS_GROUND,
- },
- [TYPE_ROCK] =
- {
- .name = _("Rock"),
- .generic = _("a ROCK move"),
- .palette = 13,
- .zMove = MOVE_CONTINENTAL_CRUSH,
- .maxMove = MOVE_MAX_ROCKFALL,
- //.enhanceItem = ITEM_HARD_STONE,
- //.berry = ITEM_CHARTI_BERRY,
- //.gem = ITEM_ROCK_GEM,
- //.zCrystal = ITEM_ROCKIUM_Z,
- //.plate = ITEM_STONE_PLATE,
- //.memory = ITEM_ROCK_MEMORY,
- //.teraShard = ITEM_ROCK_TERA_SHARD,
- //.arceusForm = SPECIES_ARCEUS_ROCK,
- },
- [TYPE_BUG] =
- {
- .name = _("Bug"),
- .generic = _("a BUG move"),
- .palette = 15,
- .zMove = MOVE_SAVAGE_SPIN_OUT,
- .maxMove = MOVE_MAX_FLUTTERBY,
- //.enhanceItem = ITEM_SILVER_POWDER,
- //.berry = ITEM_TANGA_BERRY,
- //.gem = ITEM_BUG_GEM,
- //.zCrystal = ITEM_BUGINIUM_Z,
- //.plate = ITEM_INSECT_PLATE,
- //.memory = ITEM_BUG_MEMORY,
- //.teraShard = ITEM_BUG_TERA_SHARD,
- //.arceusForm = SPECIES_ARCEUS_BUG,
- },
- [TYPE_GHOST] =
- {
- .name = _("Ghost"),
- .generic = _("a GHOST move"),
- .palette = 14,
- .zMove = MOVE_NEVER_ENDING_NIGHTMARE,
- .maxMove = MOVE_MAX_PHANTASM,
- //.enhanceItem = ITEM_SPELL_TAG,
- //.berry = ITEM_KASIB_BERRY,
- //.gem = ITEM_GHOST_GEM,
- //.zCrystal = ITEM_GHOSTIUM_Z,
- //.plate = ITEM_SPOOKY_PLATE,
- //.memory = ITEM_GHOST_MEMORY,
- //.teraShard = ITEM_GHOST_TERA_SHARD,
- //.arceusForm = SPECIES_ARCEUS_GHOST,
- },
- [TYPE_STEEL] =
- {
- .name = _("Steel"),
- .generic = _("a STEEL move"),
- .palette = 13,
- .zMove = MOVE_CORKSCREW_CRASH,
- .maxMove = MOVE_MAX_STEELSPIKE,
- //.enhanceItem = ITEM_METAL_COAT,
- //.berry = ITEM_BABIRI_BERRY,
- //.gem = ITEM_STEEL_GEM,
- //.zCrystal = ITEM_STEELIUM_Z,
- //.plate = ITEM_IRON_PLATE,
- //.memory = ITEM_STEEL_MEMORY,
- //.teraShard = ITEM_STEEL_TERA_SHARD,
- //.arceusForm = SPECIES_ARCEUS_STEEL,
- },
- [TYPE_MYSTERY] =
- {
- .name = _("???"),
- .generic = _("a ??? move"),
- .palette = 15,
- },
- [TYPE_FIRE] =
- {
- .name = _("Fire"),
- .generic = _("a FIRE move"),
- .palette = 13,
- .zMove = MOVE_INFERNO_OVERDRIVE,
- .maxMove = MOVE_MAX_FLARE,
- //.enhanceItem = ITEM_CHARCOAL,
- //.berry = ITEM_OCCA_BERRY,
- //.gem = ITEM_FIRE_GEM,
- //.zCrystal = ITEM_FIRIUM_Z,
- //.plate = ITEM_FLAME_PLATE,
- //.memory = ITEM_FIRE_MEMORY,
- //.teraShard = ITEM_FIRE_TERA_SHARD,
- //.arceusForm = SPECIES_ARCEUS_FIRE,
- },
- [TYPE_WATER] =
- {
- .name = _("Water"),
- .generic = _("a WATER move"),
- .palette = 14,
- .zMove = MOVE_HYDRO_VORTEX,
- .maxMove = MOVE_MAX_GEYSER,
- //.enhanceItem = ITEM_MYSTIC_WATER,
- //.berry = ITEM_PASSHO_BERRY,
- //.gem = ITEM_WATER_GEM,
- //.zCrystal = ITEM_WATERIUM_Z,
- //.plate = ITEM_SPLASH_PLATE,
- //.memory = ITEM_WATER_MEMORY,
- //.teraShard = ITEM_WATER_TERA_SHARD,
- //.arceusForm = SPECIES_ARCEUS_WATER,
- },
- [TYPE_GRASS] =
- {
- .name = _("Grass"),
- .generic = _("a GRASS move"),
- .palette = 15,
- .zMove = MOVE_BLOOM_DOOM,
- .maxMove = MOVE_MAX_OVERGROWTH,
- //.enhanceItem = ITEM_MIRACLE_SEED,
- //.berry = ITEM_RINDO_BERRY,
- //.gem = ITEM_GRASS_GEM,
- //.zCrystal = ITEM_GRASSIUM_Z,
- //.plate = ITEM_MEADOW_PLATE,
- //.memory = ITEM_GRASS_MEMORY,
- //.teraShard = ITEM_GRASS_TERA_SHARD,
- //.arceusForm = SPECIES_ARCEUS_GRASS,
- },
- [TYPE_ELECTRIC] =
- {
- .name = _("Electr"),
- .generic = _("an ELECTRIC move"),
- .palette = 13,
- .zMove = MOVE_GIGAVOLT_HAVOC,
- .maxMove = MOVE_MAX_LIGHTNING,
- //.enhanceItem = ITEM_MAGNET,
- //.berry = ITEM_WACAN_BERRY,
- //.gem = ITEM_ELECTRIC_GEM,
- //.zCrystal = ITEM_ELECTRIUM_Z,
- //.plate = ITEM_ZAP_PLATE,
- //.memory = ITEM_ELECTRIC_MEMORY,
- //.teraShard = ITEM_ELECTRIC_TERA_SHARD,
- //.arceusForm = SPECIES_ARCEUS_ELECTRIC,
- },
- [TYPE_PSYCHIC] =
- {
- .name = _("Psychc"),
- .generic = _("a PSYCHIC move"),
- .palette = 14,
- .zMove = MOVE_SHATTERED_PSYCHE,
- .maxMove = MOVE_MAX_MINDSTORM,
- //.enhanceItem = ITEM_TWISTED_SPOON,
- //.berry = ITEM_PAYAPA_BERRY,
- //.gem = ITEM_PSYCHIC_GEM,
- //.zCrystal = ITEM_PSYCHIUM_Z,
- //.plate = ITEM_MIND_PLATE,
- //.memory = ITEM_PSYCHIC_MEMORY,
- //.teraShard = ITEM_PSYCHIC_TERA_SHARD,
- //.arceusForm = SPECIES_ARCEUS_PSYCHIC,
- },
- [TYPE_ICE] =
- {
- .name = _("Ice"),
- .generic = _("an ICE move"),
- .palette = 14,
- .zMove = MOVE_SUBZERO_SLAMMER,
- .maxMove = MOVE_MAX_HAILSTORM,
- //.enhanceItem = ITEM_NEVER_MELT_ICE,
- //.berry = ITEM_YACHE_BERRY,
- //.gem = ITEM_ICE_GEM,
- //.zCrystal = ITEM_ICIUM_Z,
- //.plate = ITEM_ICICLE_PLATE,
- //.memory = ITEM_ICE_MEMORY,
- //.teraShard = ITEM_ICE_TERA_SHARD,
- //.arceusForm = SPECIES_ARCEUS_ICE,
- },
- [TYPE_DRAGON] =
- {
- .name = _("Dragon"),
- .generic = _("a DRAGON move"),
- .palette = 15,
- .zMove = MOVE_DEVASTATING_DRAKE,
- .maxMove = MOVE_MAX_WYRMWIND,
- //.enhanceItem = ITEM_DRAGON_FANG,
- //.berry = ITEM_HABAN_BERRY,
- //.gem = ITEM_DRAGON_GEM,
- //.zCrystal = ITEM_DRAGONIUM_Z,
- //.plate = ITEM_DRACO_PLATE,
- //.memory = ITEM_DRAGON_MEMORY,
- //.teraShard = ITEM_DRAGON_TERA_SHARD,
- //.arceusForm = SPECIES_ARCEUS_DRAGON,
- },
- [TYPE_DARK] =
- {
- .name = _("Dark"),
- .generic = _("a DARK move"),
- .palette = 13,
- .zMove = MOVE_BLACK_HOLE_ECLIPSE,
- .maxMove = MOVE_MAX_DARKNESS,
- //.enhanceItem = ITEM_BLACK_GLASSES,
- //.berry = ITEM_COLBUR_BERRY,
- //.gem = ITEM_DARK_GEM,
- //.zCrystal = ITEM_DARKINIUM_Z,
- //.plate = ITEM_DREAD_PLATE,
- //.memory = ITEM_DARK_MEMORY,
- //.teraShard = ITEM_DARK_TERA_SHARD,
- //.arceusForm = SPECIES_ARCEUS_DARK,
- },
- [TYPE_FAIRY] =
- {
- .name = _("Fairy"),
- .generic = _("a FAIRY move"),
- .palette = 14,
- .zMove = MOVE_TWINKLE_TACKLE,
- .maxMove = MOVE_MAX_STARFALL,
- //.enhanceItem = ITEM_FAIRY_FEATHER,
- //.berry = ITEM_ROSELI_BERRY,
- //.gem = ITEM_FAIRY_GEM,
- //.zCrystal = ITEM_FAIRIUM_Z,
- //.plate = ITEM_PIXIE_PLATE,
- //.memory = ITEM_FAIRY_MEMORY,
- //.teraShard = ITEM_FAIRY_TERA_SHARD,
- //.arceusForm = SPECIES_ARCEUS_FAIRY,
- },
- /*
- [TYPE_STELLAR] =
- {
- .name = _("Stellar"),
- .teraShard = ITEM_STELLAR_TERA_SHARD,
- },
- */
-};
+#include "data/types_info.h"
// extra args are money and ball
#define TRAINER_CLASS(trainerClass, trainerName, ...) \
@@ -2065,6 +1768,7 @@ static void FreeRestoreBattleData(void)
FreeMonSpritesGfx();
FreeBattleSpritesData();
FreeBattleResources();
+ ResetDynamicAiFunc();
}
void CB2_QuitRecordedBattle(void)
@@ -2179,7 +1883,9 @@ void ModifyPersonalityForNature(u32 *personality, u32 newNature)
u32 GeneratePersonalityForGender(u32 gender, u32 species)
{
const struct SpeciesInfo *speciesInfo = &gSpeciesInfo[species];
- if (gender == MON_MALE)
+ if (gender == MON_GENDERLESS)
+ return 0;
+ else if (gender == MON_MALE)
return ((255 - speciesInfo->genderRatio) / 2) + speciesInfo->genderRatio;
else
return speciesInfo->genderRatio / 2;
@@ -2253,6 +1959,8 @@ u8 CreateNPCTrainerPartyFromTrainer(struct Pokemon *party, const struct Trainer
personalityValue = (personalityValue & 0xFFFFFF00) | GeneratePersonalityForGender(MON_MALE, partyData[i].species);
else if (partyData[i].gender == TRAINER_MON_FEMALE)
personalityValue = (personalityValue & 0xFFFFFF00) | GeneratePersonalityForGender(MON_FEMALE, partyData[i].species);
+ else if (partyData[i].gender == TRAINER_MON_RANDOM_GENDER)
+ personalityValue = (personalityValue & 0xFFFFFF00) | GeneratePersonalityForGender(Random() & 1 ? MON_MALE : MON_FEMALE, partyData[i].species);
ModifyPersonalityForNature(&personalityValue, partyData[i].nature);
if (partyData[i].isShiny)
{
@@ -2325,6 +2033,11 @@ u8 CreateNPCTrainerPartyFromTrainer(struct Pokemon *party, const struct Trainer
u32 data = partyData[i].gigantamaxFactor;
SetMonData(&party[i], MON_DATA_GIGANTAMAX_FACTOR, &data);
}
+ if (partyData[i].teraType > 0)
+ {
+ u32 data = partyData[i].teraType;
+ SetMonData(&party[i], MON_DATA_TERA_TYPE, &data);
+ }
CalculateMonStats(&party[i]);
if (B_TRAINER_CLASS_POKE_BALLS >= GEN_7 && ball == -1)
@@ -3211,6 +2924,37 @@ void SpriteCB_PlayerMonFromBall(struct Sprite *sprite)
BattleAnimateBackSprite(sprite, sprite->sSpeciesId);
}
+void SpriteCB_PlayerMonSlideIn(struct Sprite *sprite)
+{
+ if (sprite->data[3] == 0)
+ {
+ PlaySE(SE_BALL_TRAY_ENTER);
+ sprite->data[3]++;
+ }
+ else if (sprite->data[3] == 1)
+ {
+ if (sprite->animEnded)
+ return;
+ sprite->data[4] = sprite->x;
+ sprite->x = -33;
+ sprite->invisible = FALSE;
+ sprite->data[3]++;
+ }
+ else if (sprite->data[3] < 27)
+ {
+ sprite->x += 4;
+ sprite->data[3]++;
+ }
+ else
+ {
+ sprite->data[3] = 0;
+ sprite->x = sprite->data[4];
+ sprite->data[4] = 0;
+ sprite->callback = SpriteCB_PlayerMonFromBall;
+ PlayCry_ByMode(sprite->sSpeciesId, -25, CRY_MODE_NORMAL);
+ }
+}
+
static void SpriteCB_TrainerThrowObject_Main(struct Sprite *sprite)
{
AnimSetCenterToCornerVecX(sprite);
@@ -3362,9 +3106,6 @@ static void BattleStartClearSetData(void)
gBattleStruct->arenaLostPlayerMons = 0;
gBattleStruct->arenaLostOpponentMons = 0;
- gBattleStruct->mega.triggerSpriteId = 0xFF;
- gBattleStruct->burst.triggerSpriteId = 0xFF;
-
for (i = 0; i < ARRAY_COUNT(gSideTimers); i++)
{
gSideTimers[i].stickyWebBattlerId = 0xFF;
@@ -3379,12 +3120,13 @@ 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
+ gBattleStruct->categoryOverride = FALSE; // used for Z-Moves and Max Moves
+
gSelectedMonPartyId = PARTY_SIZE; // Revival Blessing
+ gCategoryIconSpriteId = 0xFF;
}
void SwitchInClearSetData(u32 battler)
@@ -3482,6 +3224,8 @@ void SwitchInClearSetData(u32 battler)
gBattleStruct->lastTakenMoveFrom[battler][3] = 0;
gBattleStruct->lastMoveFailed &= ~(gBitTable[battler]);
gBattleStruct->palaceFlags &= ~(gBitTable[battler]);
+ gBattleStruct->boosterEnergyActivates &= ~(gBitTable[battler]);
+ gBattleStruct->canPickupItem &= ~(1u << battler);
for (i = 0; i < ARRAY_COUNT(gSideTimers); i++)
{
@@ -3511,9 +3255,6 @@ void SwitchInClearSetData(u32 battler)
// Reset G-Max Chi Strike boosts.
gBattleStruct->bonusCritStages[battler] = 0;
- // Reset Dynamax flags.
- UndoDynamax(battler);
-
gBattleStruct->overwrittenAbilities[battler] = ABILITY_NONE;
// Clear selected party ID so Revival Blessing doesn't get confused.
@@ -3613,6 +3354,7 @@ const u8* FaintClearSetData(u32 battler)
gBattleStruct->lastTakenMoveFrom[battler][3] = 0;
gBattleStruct->palaceFlags &= ~(gBitTable[battler]);
+ gBattleStruct->boosterEnergyActivates &= ~(gBitTable[battler]);
for (i = 0; i < ARRAY_COUNT(gSideTimers); i++)
{
@@ -3631,9 +3373,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);
@@ -3679,10 +3421,6 @@ const u8* FaintClearSetData(u32 battler)
}
}
- // Clear Z-Move data
- gBattleStruct->zmove.active = FALSE;
- gBattleStruct->zmove.toBeUsed[battler] = MOVE_NONE;
- gBattleStruct->zmove.effect = EFFECT_HIT;
// Clear Dynamax data
UndoDynamax(battler);
@@ -3737,14 +3475,23 @@ 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;
for (i = 0; i < NUM_BATTLE_STATS; i++)
gBattleMons[battler].statStages[i] = DEFAULT_STAT_STAGE;
+ #if TESTING
+ if (gTestRunnerEnabled)
+ {
+ u32 side = GetBattlerSide(battler);
+ u32 partyIndex = gBattlerPartyIndexes[battler];
+ if (TestRunner_Battle_GetForcedAbility(side, partyIndex))
+ gBattleMons[battler].ability = gBattleStruct->overwrittenAbilities[battler] = TestRunner_Battle_GetForcedAbility(side, partyIndex);
+ }
+ #endif
}
// Draw sprite.
@@ -4001,8 +3748,8 @@ static void DoBattleIntro(void)
}
}
- gBattleStruct->switchInAbilitiesCounter = 0;
- gBattleStruct->switchInItemsCounter = 0;
+ gBattleStruct->eventsBeforeFirstTurnState = 0;
+ gBattleStruct->switchInBattlerCounter = 0;
gBattleStruct->overworldWeatherDone = FALSE;
SetAiLogicDataForTurn(AI_DATA); // get assumed abilities, hold effects, etc of all battlers
Ai_InitPartyStruct(); // Save mons party counts, and first 2/4 mons on the battlefield.
@@ -4037,34 +3784,37 @@ static void TryDoEventsBeforeFirstTurn(void)
if (gBattleControllerExecFlags)
return;
- // Set invalid mons as absent(for example when starting a double battle with only one pokemon).
- if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI))
+ switch (gBattleStruct->eventsBeforeFirstTurnState)
{
- for (i = 0; i < gBattlersCount; i++)
+ case FIRST_TURN_EVENTS_START:
+ // Set invalid mons as absent(for example when starting a double battle with only one pokemon).
+ if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI))
{
- struct Pokemon *party = GetBattlerParty(i);
- struct Pokemon *mon = &party[gBattlerPartyIndexes[i]];
- if (gBattleMons[i].hp == 0 || gBattleMons[i].species == SPECIES_NONE || GetMonData(mon, MON_DATA_IS_EGG))
- gAbsentBattlerFlags |= gBitTable[i];
+ for (i = 0; i < gBattlersCount; i++)
+ {
+ struct Pokemon *party = GetBattlerParty(i);
+ struct Pokemon *mon = &party[gBattlerPartyIndexes[i]];
+ if (!IsBattlerAlive(i) || gBattleMons[i].species == SPECIES_NONE || GetMonData(mon, MON_DATA_IS_EGG))
+ gAbsentBattlerFlags |= gBitTable[i];
+ }
}
- }
- // Allow for illegal abilities within tests.
- #if TESTING
- if (gTestRunnerEnabled && gBattleStruct->switchInAbilitiesCounter == 0)
- {
- for (i = 0; i < gBattlersCount; ++i)
+ // Allow for illegal abilities within tests.
+ #if TESTING
+ if (gTestRunnerEnabled)
{
- u32 side = GetBattlerSide(i);
- u32 partyIndex = gBattlerPartyIndexes[i];
- if (TestRunner_Battle_GetForcedAbility(side, partyIndex))
- gBattleMons[i].ability = gBattleStruct->overwrittenAbilities[i] = TestRunner_Battle_GetForcedAbility(side, partyIndex);
+ for (i = 0; i < gBattlersCount; ++i)
+ {
+ u32 side = GetBattlerSide(i);
+ u32 partyIndex = gBattlerPartyIndexes[i];
+ if (TestRunner_Battle_GetForcedAbility(side, partyIndex))
+ gBattleMons[i].ability = gBattleStruct->overwrittenAbilities[i] = TestRunner_Battle_GetForcedAbility(side, partyIndex);
+ }
}
- }
- #endif // TESTING
+ #endif // TESTING
+
+ gBattleStruct->speedTieBreaks = RandomUniform(RNG_SPEED_TIE, 0, Factorial(MAX_BATTLERS_COUNT) - 1);
- if (gBattleStruct->switchInAbilitiesCounter == 0)
- {
for (i = 0; i < gBattlersCount; i++)
gBattlerByTurnOrder[i] = i;
for (i = 0; i < gBattlersCount - 1; i++)
@@ -4075,109 +3825,136 @@ static void TryDoEventsBeforeFirstTurn(void)
SwapTurnOrder(i, j);
}
}
- }
- if (!gBattleStruct->overworldWeatherDone
- && AbilityBattleEffects(ABILITYEFFECT_SWITCH_IN_WEATHER, 0, 0, ABILITYEFFECT_SWITCH_IN_WEATHER, 0) != 0)
- {
- gBattleStruct->overworldWeatherDone = TRUE;
- return;
- }
-
- if (!gBattleStruct->terrainDone && AbilityBattleEffects(ABILITYEFFECT_SWITCH_IN_TERRAIN, 0, 0, ABILITYEFFECT_SWITCH_IN_TERRAIN, 0) != 0)
- {
- gBattleStruct->terrainDone = TRUE;
- return;
- }
-
- if (!gBattleStruct->startingStatusDone
- && gBattleStruct->startingStatus
- && AbilityBattleEffects(ABILITYEFFECT_SWITCH_IN_STATUSES, 0, 0, ABILITYEFFECT_SWITCH_IN_STATUSES, 0) != 0)
- {
- gBattleStruct->startingStatusDone = TRUE;
- return;
- }
-
- // Totem boosts
- for (i = 0; i < gBattlersCount; i++)
- {
- if (gQueuedStatBoosts[i].stats != 0 && !gProtectStructs[i].eatMirrorHerb && gProtectStructs[i].activateOpportunist == 0)
+ gBattleStruct->eventsBeforeFirstTurnState++;
+ break;
+ case FIRST_TURN_EVENTS_OVERWORLD_WEATHER:
+ if (!gBattleStruct->overworldWeatherDone
+ && AbilityBattleEffects(ABILITYEFFECT_SWITCH_IN_WEATHER, 0, 0, ABILITYEFFECT_SWITCH_IN_WEATHER, 0) != 0)
{
- gBattlerAttacker = i;
- BattleScriptExecute(BattleScript_TotemVar);
+ gBattleStruct->overworldWeatherDone = TRUE;
return;
}
- }
-
- // Check neutralizing gas
- if (AbilityBattleEffects(ABILITYEFFECT_NEUTRALIZINGGAS, 0, 0, 0, 0) != 0)
- return;
-
- // Check all switch in abilities happening from the fastest mon to slowest.
- while (gBattleStruct->switchInAbilitiesCounter < gBattlersCount)
- {
- gBattlerAttacker = gBattlerByTurnOrder[gBattleStruct->switchInAbilitiesCounter++];
-
- if (TryPrimalReversion(gBattlerAttacker))
+ gBattleStruct->eventsBeforeFirstTurnState++;
+ break;
+ case FIRST_TURN_EVENTS_TERRAIN:
+ if (!gBattleStruct->terrainDone
+ && AbilityBattleEffects(ABILITYEFFECT_SWITCH_IN_TERRAIN, 0, 0, ABILITYEFFECT_SWITCH_IN_TERRAIN, 0) != 0)
+ {
+ gBattleStruct->terrainDone = TRUE;
return;
- if (AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, gBattlerAttacker, 0, 0, 0) != 0)
+ }
+ gBattleStruct->eventsBeforeFirstTurnState++;
+ break;
+ case FIRST_TURN_EVENTS_STARTING_STATUS:
+ if (!gBattleStruct->startingStatusDone
+ && gBattleStruct->startingStatus
+ && AbilityBattleEffects(ABILITYEFFECT_SWITCH_IN_STATUSES, 0, 0, ABILITYEFFECT_SWITCH_IN_STATUSES, 0) != 0)
+ {
+ gBattleStruct->startingStatusDone = TRUE;
return;
- }
- // Check all switch in items having effect from the fastest mon to slowest.
- while (gBattleStruct->switchInItemsCounter < gBattlersCount)
- {
- if (ItemBattleEffects(ITEMEFFECT_ON_SWITCH_IN, gBattlerByTurnOrder[gBattleStruct->switchInItemsCounter++], FALSE))
+ }
+ gBattleStruct->eventsBeforeFirstTurnState++;
+ break;
+ case FIRST_TURN_EVENTS_TOTEM_BOOST:
+ for (i = 0; i < gBattlersCount; i++)
+ {
+ if (gQueuedStatBoosts[i].stats != 0 && !gProtectStructs[i].eatMirrorHerb && gProtectStructs[i].activateOpportunist == 0)
+ {
+ gBattlerAttacker = i;
+ BattleScriptExecute(BattleScript_TotemVar);
+ return;
+ }
+ }
+ memset(gQueuedStatBoosts, 0, sizeof(gQueuedStatBoosts)); // erase all totem boosts for Mirror Herb and Opportunist
+ gBattleStruct->eventsBeforeFirstTurnState++;
+ break;
+ case FIRST_TURN_EVENTS_NEUTRALIZING_GAS:
+ if (AbilityBattleEffects(ABILITYEFFECT_NEUTRALIZINGGAS, 0, 0, 0, 0) != 0)
return;
- }
-
- if (AbilityBattleEffects(ABILITYEFFECT_OPPORTUNIST, 0, 0, 0, 0))
- return;
+ gBattleStruct->eventsBeforeFirstTurnState++;
+ break;
+ case FIRST_TURN_EVENTS_SWITCH_IN_ABILITIES:
+ while (gBattleStruct->switchInBattlerCounter < gBattlersCount) // From fastest to slowest
+ {
+ gBattlerAttacker = gBattlerByTurnOrder[gBattleStruct->switchInBattlerCounter++];
- for (i = 0; i < MAX_BATTLERS_COUNT; i++)
- {
- *(gBattleStruct->monToSwitchIntoId + i) = PARTY_SIZE;
- gChosenActionByBattler[i] = B_ACTION_NONE;
- gChosenMoveByBattler[i] = MOVE_NONE;
- }
- TurnValuesCleanUp(FALSE);
- SpecialStatusesClear();
- *(&gBattleStruct->absentBattlerFlags) = gAbsentBattlerFlags;
- BattlePutTextOnWindow(gText_EmptyString3, B_WIN_MSG);
- gBattleMainFunc = HandleTurnActionSelectionState;
- ResetSentPokesToOpponentValue();
+ if (TryPrimalReversion(gBattlerAttacker))
+ return;
+ if (AbilityBattleEffects(ABILITYEFFECT_ON_SWITCHIN, gBattlerAttacker, 0, 0, 0) != 0)
+ return;
+ }
+ gBattleStruct->switchInBattlerCounter = 0;
+ gBattleStruct->eventsBeforeFirstTurnState++;
+ break;
+ case FIRST_TURN_EVENTS_OPPORTUNIST_1:
+ if (AbilityBattleEffects(ABILITYEFFECT_OPPORTUNIST, 0, 0, 0, 0))
+ return;
+ gBattleStruct->eventsBeforeFirstTurnState++;
+ break;
+ case FIRST_TURN_EVENTS_ITEM_EFFECTS:
+ while (gBattleStruct->switchInBattlerCounter < gBattlersCount) // From fastest to slowest
+ {
+ if (ItemBattleEffects(ITEMEFFECT_ON_SWITCH_IN, gBattlerByTurnOrder[gBattleStruct->switchInBattlerCounter++], FALSE))
+ return;
+ }
+ gBattleStruct->switchInBattlerCounter = 0;
+ gBattleStruct->eventsBeforeFirstTurnState++;
+ break;
+ case FIRST_TURN_EVENTS_OPPORTUNIST_2:
+ if (AbilityBattleEffects(ABILITYEFFECT_OPPORTUNIST, 0, 0, 0, 0))
+ return;
+ gBattleStruct->eventsBeforeFirstTurnState++;
+ break;
+ case FIRST_TURN_EVENTS_END:
+ for (i = 0; i < MAX_BATTLERS_COUNT; i++)
+ {
+ *(gBattleStruct->monToSwitchIntoId + i) = PARTY_SIZE;
+ gChosenActionByBattler[i] = B_ACTION_NONE;
+ gChosenMoveByBattler[i] = MOVE_NONE;
+ }
+ TurnValuesCleanUp(FALSE);
+ SpecialStatusesClear();
+ *(&gBattleStruct->absentBattlerFlags) = gAbsentBattlerFlags;
+ BattlePutTextOnWindow(gText_EmptyString3, B_WIN_MSG);
+ AssignUsableGimmicks();
+ gBattleMainFunc = HandleTurnActionSelectionState;
+ ResetSentPokesToOpponentValue();
- for (i = 0; i < BATTLE_COMMUNICATION_ENTRIES_COUNT; i++)
- gBattleCommunication[i] = 0;
+ for (i = 0; i < BATTLE_COMMUNICATION_ENTRIES_COUNT; i++)
+ gBattleCommunication[i] = 0;
- for (i = 0; i < gBattlersCount; i++)
- {
- gBattleMons[i].status2 &= ~STATUS2_FLINCHED;
- // Record party slots of player's mons that appeared in battle
- if (!BattlerHasAi(i))
- gBattleStruct->appearedInBattle |= gBitTable[gBattlerPartyIndexes[i]];
- }
+ for (i = 0; i < gBattlersCount; i++)
+ {
+ gBattleMons[i].status2 &= ~STATUS2_FLINCHED;
+ // Record party slots of player's mons that appeared in battle
+ if (!BattlerHasAi(i))
+ gBattleStruct->appearedInBattle |= gBitTable[gBattlerPartyIndexes[i]];
+ }
- *(&gBattleStruct->turnEffectsTracker) = 0;
- *(&gBattleStruct->turnEffectsBattlerId) = 0;
- *(&gBattleStruct->wishPerishSongState) = 0;
- *(&gBattleStruct->wishPerishSongBattlerId) = 0;
- gBattleScripting.moveendState = 0;
- gBattleStruct->faintedActionsState = 0;
- gBattleStruct->turnCountersTracker = 0;
- gMoveResultFlags = 0;
+ *(&gBattleStruct->turnEffectsTracker) = 0;
+ *(&gBattleStruct->turnEffectsBattlerId) = 0;
+ *(&gBattleStruct->wishPerishSongState) = 0;
+ *(&gBattleStruct->wishPerishSongBattlerId) = 0;
+ gBattleScripting.moveendState = 0;
+ gBattleStruct->faintedActionsState = 0;
+ gBattleStruct->turnCountersTracker = 0;
+ gMoveResultFlags = 0;
- memset(gQueuedStatBoosts, 0, sizeof(gQueuedStatBoosts)); // erase all totem boosts just to be safe
+ memset(gQueuedStatBoosts, 0, sizeof(gQueuedStatBoosts));
+ SetShellSideArmCategory();
+ SetAiLogicDataForTurn(AI_DATA); // get assumed abilities, hold effects, etc of all battlers
- SetShellSideArmCategory();
- SetAiLogicDataForTurn(AI_DATA); // get assumed abilities, hold effects, etc of all battlers
+ if (gBattleTypeFlags & BATTLE_TYPE_ARENA)
+ {
+ StopCryAndClearCrySongs();
+ BattleScriptExecute(BattleScript_ArenaTurnBeginning);
+ }
- if (gBattleTypeFlags & BATTLE_TYPE_ARENA)
- {
- StopCryAndClearCrySongs();
- BattleScriptExecute(BattleScript_ArenaTurnBeginning);
+ if ((i = ShouldDoTrainerSlide(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), TRAINER_SLIDE_BEFORE_FIRST_TURN)))
+ BattleScriptExecute(i == 1 ? BattleScript_TrainerASlideMsgEnd2 : BattleScript_TrainerBSlideMsgEnd2);
+ gBattleStruct->eventsBeforeFirstTurnState = 0;
+ break;
}
-
- if ((i = ShouldDoTrainerSlide(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), TRAINER_SLIDE_BEFORE_FIRST_TURN)))
- BattleScriptExecute(i == 1 ? BattleScript_TrainerASlideMsgEnd2 : BattleScript_TrainerBSlideMsgEnd2);
}
static void HandleEndTurn_ContinueBattle(void)
@@ -4208,6 +3985,8 @@ void BattleTurnPassed(void)
{
s32 i;
+ gBattleStruct->speedTieBreaks = RandomUniform(RNG_SPEED_TIE, 0, Factorial(MAX_BATTLERS_COUNT) - 1);
+
TurnValuesCleanUp(TRUE);
if (gBattleOutcome == 0)
{
@@ -4260,10 +4039,16 @@ void BattleTurnPassed(void)
*(&gBattleStruct->absentBattlerFlags) = gAbsentBattlerFlags;
BattlePutTextOnWindow(gText_EmptyString3, B_WIN_MSG);
+ AssignUsableGimmicks();
SetShellSideArmCategory();
SetAiLogicDataForTurn(AI_DATA); // get assumed abilities, hold effects, etc of all battlers
gBattleMainFunc = HandleTurnActionSelectionState;
+ 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)
@@ -4409,7 +4194,10 @@ static void HandleTurnActionSelectionState(void)
if ((gBattleTypeFlags & BATTLE_TYPE_HAS_AI || IsWildMonSmart())
&& (BattlerHasAi(battler) && !(gBattleTypeFlags & BATTLE_TYPE_PALACE)))
{
- AI_DATA->mostSuitableMonId[battler] = GetMostSuitableMonToSwitchInto(battler, FALSE);
+ if (AI_THINKING_STRUCT->aiFlags[battler] & AI_FLAG_RISKY) // Risky AI switches aggressively even mid battle
+ AI_DATA->mostSuitableMonId[battler] = GetMostSuitableMonToSwitchInto(battler, TRUE);
+ else
+ AI_DATA->mostSuitableMonId[battler] = GetMostSuitableMonToSwitchInto(battler, FALSE);
gBattleStruct->aiMoveOrAction[battler] = ComputeBattleAiScores(battler);
}
// fallthrough
@@ -4484,11 +4272,10 @@ static void HandleTurnActionSelectionState(void)
struct ChooseMoveStruct moveInfo;
moveInfo.zmove = gBattleStruct->zmove;
- moveInfo.mega = gBattleStruct->mega;
moveInfo.species = gBattleMons[battler].species;
- moveInfo.monType1 = gBattleMons[battler].type1;
- moveInfo.monType2 = gBattleMons[battler].type2;
- 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++)
{
@@ -4609,11 +4396,7 @@ static void HandleTurnActionSelectionState(void)
RecordedBattle_ClearBattlerAction(GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(battler))), 3);
}
- gBattleStruct->mega.toEvolve &= ~(gBitTable[BATTLE_PARTNER(GetBattlerPosition(battler))]);
- gBattleStruct->burst.toBurst &= ~(gBitTable[BATTLE_PARTNER(GetBattlerPosition(battler))]);
- gBattleStruct->dynamax.toDynamax &= ~(gBitTable[BATTLE_PARTNER(GetBattlerPosition(battler))]);
- gBattleStruct->dynamax.usingMaxMove[BATTLE_PARTNER(GetBattlerPosition(battler))] = FALSE;
- gBattleStruct->zmove.toBeUsed[BATTLE_PARTNER(GetBattlerPosition(battler))] = MOVE_NONE;
+ gBattleStruct->gimmick.toActivate &= ~(gBitTable[BATTLE_PARTNER(GetBattlerPosition(battler))]);
BtlController_EmitEndBounceEffect(battler, BUFFER_A);
MarkBattlerForControllerExec(battler);
return;
@@ -4701,23 +4484,18 @@ static void HandleTurnActionSelectionState(void)
}
// Get the chosen move position (and thus the chosen move) and target from the returned buffer.
- gBattleStruct->chosenMovePositions[battler] = gBattleResources->bufferB[battler][2] & ~(RET_MEGA_EVOLUTION | RET_ULTRA_BURST | RET_DYNAMAX);
+ gBattleStruct->chosenMovePositions[battler] = gBattleResources->bufferB[battler][2] & ~RET_GIMMICK;
gChosenMoveByBattler[battler] = gBattleMons[battler].moves[gBattleStruct->chosenMovePositions[battler]];
gBattleStruct->moveTarget[battler] = gBattleResources->bufferB[battler][3];
// Check to see if any gimmicks need to be prepared.
- if (gBattleResources->bufferB[battler][2] & RET_MEGA_EVOLUTION)
- gBattleStruct->mega.toEvolve |= gBitTable[battler];
- else if (gBattleResources->bufferB[battler][2] & RET_ULTRA_BURST)
- gBattleStruct->burst.toBurst |= gBitTable[battler];
- else if (gBattleResources->bufferB[battler][2] & RET_DYNAMAX)
- gBattleStruct->dynamax.toDynamax |= gBitTable[battler];
+ if (gBattleResources->bufferB[battler][2] & RET_GIMMICK)
+ gBattleStruct->gimmick.toActivate |= gBitTable[battler];
// Max Move check
- if (ShouldUseMaxMove(battler, gChosenMoveByBattler[battler]))
+ if (GetActiveGimmick(battler) == GIMMICK_DYNAMAX || IsGimmickSelected(battler, GIMMICK_DYNAMAX))
{
- gBattleStruct->dynamax.baseMove[battler] = gBattleMons[battler].moves[gBattleStruct->chosenMovePositions[battler]];
- gBattleStruct->dynamax.usingMaxMove[battler] = TRUE;
+ gBattleStruct->dynamax.baseMoves[battler] = gBattleMons[battler].moves[gBattleStruct->chosenMovePositions[battler]];
}
gBattleCommunication[battler]++;
@@ -4949,7 +4727,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)
@@ -4971,10 +4748,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 & gBitTable[battler]))
+ speed = (GetHighestStatId(battler) == STAT_SPEED) ? (speed * 150) / 100 : speed;
+ else if (ability == ABILITY_QUARK_DRIVE && (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN || gBattleStruct->boosterEnergyActivates & gBitTable[battler]))
+ speed = (GetHighestStatId(battler) == STAT_SPEED) ? (speed * 150) / 100 : speed;
// stat stages
speed *= gStatStageRatios[gBattleMons[battler].statStages[STAT_SPEED]][0];
@@ -4993,7 +4770,7 @@ u32 GetBattlerTotalSpeedStatArgs(u32 battler, u32 ability, u32 holdEffect)
speed /= 2;
else if (holdEffect == HOLD_EFFECT_IRON_BALL)
speed /= 2;
- else if (holdEffect == HOLD_EFFECT_CHOICE_SCARF && !IsDynamaxed(battler))
+ else if (holdEffect == HOLD_EFFECT_CHOICE_SCARF && GetActiveGimmick(battler) != GIMMICK_DYNAMAX)
speed = (speed * 150) / 100;
else if (holdEffect == HOLD_EFFECT_QUICK_POWDER && gBattleMons[battler].species == SPECIES_DITTO && !(gBattleMons[battler].status2 & STATUS2_TRANSFORMED))
speed *= 2;
@@ -5039,13 +4816,13 @@ s8 GetMovePriority(u32 battler, u16 move)
s8 priority;
u16 ability = GetBattlerAbility(battler);
- if (gBattleStruct->zmove.toBeUsed[battler] && gMovesInfo[move].power != 0)
- move = gBattleStruct->zmove.toBeUsed[battler];
+ if (GetActiveGimmick(battler) == GIMMICK_Z_MOVE && gMovesInfo[move].power != 0)
+ move = GetUsableZMove(battler, move);
priority = gMovesInfo[move].priority;
// Max Guard check
- if (gBattleStruct->dynamax.usingMaxMove[battler] && gMovesInfo[move].category == DAMAGE_CATEGORY_STATUS)
+ if (GetActiveGimmick(battler) == GIMMICK_DYNAMAX && gMovesInfo[move].category == DAMAGE_CATEGORY_STATUS)
return gMovesInfo[MOVE_MAX_GUARD].priority;
if (ability == ABILITY_GALE_WINGS
@@ -5059,7 +4836,7 @@ s8 GetMovePriority(u32 battler, u16 move)
gProtectStructs[battler].pranksterElevated = 1;
priority++;
}
- else if (gMovesInfo[move].effect == EFFECT_GRASSY_GLIDE && gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN && IsBattlerGrounded(battler) && !IsDynamaxed(battler) && !(gBattleStruct->dynamax.toDynamax & gBitTable[battler]))
+ else if (gMovesInfo[move].effect == EFFECT_GRASSY_GLIDE && gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN && IsBattlerGrounded(battler) && GetActiveGimmick(gBattlerAttacker) != GIMMICK_DYNAMAX && !IsGimmickSelected(battler, GIMMICK_DYNAMAX))
{
priority++;
}
@@ -5102,9 +4879,10 @@ s32 GetWhichBattlerFasterArgs(u32 battler1, u32 battler2, bool32 ignoreChosenMov
strikesFirst = 1;
else
{
- if (speedBattler1 == speedBattler2 && Random() & 1)
+ if (speedBattler1 == speedBattler2)
{
- strikesFirst = 0; // same speeds, same priorities
+ // same speeds, same priorities
+ strikesFirst = 0;
}
else if (speedBattler1 < speedBattler2)
{
@@ -5135,7 +4913,7 @@ s32 GetWhichBattlerFasterArgs(u32 battler1, u32 battler2, bool32 ignoreChosenMov
return strikesFirst;
}
-s32 GetWhichBattlerFaster(u32 battler1, u32 battler2, bool32 ignoreChosenMoves)
+s32 GetWhichBattlerFasterOrTies(u32 battler1, u32 battler2, bool32 ignoreChosenMoves)
{
s32 priority1 = 0, priority2 = 0;
u32 ability1 = GetBattlerAbility(battler1);
@@ -5153,8 +4931,60 @@ s32 GetWhichBattlerFaster(u32 battler1, u32 battler2, bool32 ignoreChosenMoves)
priority2 = GetChosenMovePriority(battler2);
}
- return GetWhichBattlerFasterArgs(battler1, battler2, ignoreChosenMoves, ability1, ability2,
- holdEffectBattler1, holdEffectBattler2, speedBattler1, speedBattler2, priority1, priority2);
+ return GetWhichBattlerFasterArgs(
+ battler1, battler2,
+ ignoreChosenMoves,
+ ability1, ability2,
+ holdEffectBattler1, holdEffectBattler2,
+ speedBattler1, speedBattler2,
+ priority1, priority2
+ );
+}
+
+// 24 == MAX_BATTLERS_COUNT!.
+// These are the possible orders if all the battlers speed tie. An order
+// is chosen at the start of the turn.
+static const u8 sBattlerOrders[24][4] =
+{
+ { 0, 1, 2, 3 },
+ { 0, 1, 3, 2 },
+ { 0, 2, 1, 3 },
+ { 0, 2, 3, 1 },
+ { 0, 3, 1, 2 },
+ { 0, 3, 2, 1 },
+ { 1, 0, 2, 3 },
+ { 1, 0, 3, 2 },
+ { 1, 2, 0, 3 },
+ { 1, 2, 3, 0 },
+ { 1, 3, 0, 2 },
+ { 1, 3, 2, 0 },
+ { 2, 0, 1, 3 },
+ { 2, 0, 3, 1 },
+ { 2, 1, 0, 3 },
+ { 2, 1, 3, 0 },
+ { 2, 3, 0, 1 },
+ { 2, 3, 1, 0 },
+ { 3, 0, 1, 2 },
+ { 3, 0, 2, 1 },
+ { 3, 1, 0, 2 },
+ { 3, 1, 2, 0 },
+ { 3, 2, 0, 1 },
+ { 3, 2, 1, 0 },
+};
+
+s32 GetWhichBattlerFaster(u32 battler1, u32 battler2, bool32 ignoreChosenMoves)
+{
+ s32 strikesFirst = GetWhichBattlerFasterOrTies(battler1, battler2, ignoreChosenMoves);
+ if (strikesFirst == 0)
+ {
+ s32 order1 = sBattlerOrders[gBattleStruct->speedTieBreaks][battler1];
+ s32 order2 = sBattlerOrders[gBattleStruct->speedTieBreaks][battler2];
+ if (order1 < order2)
+ strikesFirst = 1;
+ else
+ strikesFirst = -1;
+ }
+ return strikesFirst;
}
static void SetActionsAndBattlersTurnOrder(void)
@@ -5294,6 +5124,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)
@@ -5324,8 +5155,7 @@ static void PopulateArrayWithBattlers(u8 *battlers)
static bool32 TryDoGimmicksBeforeMoves(void)
{
- if (!(gHitMarker & HITMARKER_RUN)
- && (gBattleStruct->mega.toEvolve || gBattleStruct->burst.toBurst || gBattleStruct->dynamax.toDynamax))
+ if (!(gHitMarker & HITMARKER_RUN) && gBattleStruct->gimmick.toActivate)
{
u32 i, battler;
u8 order[MAX_BATTLERS_COUNT];
@@ -5334,38 +5164,16 @@ static bool32 TryDoGimmicksBeforeMoves(void)
SortBattlersBySpeed(order, FALSE);
for (i = 0; i < gBattlersCount; i++)
{
- // Dynamax Check
- if (gBattleStruct->dynamax.toDynamax & gBitTable[order[i]])
- {
- gBattlerAttacker = order[i];
- gBattleScripting.battler = gBattlerAttacker;
- gBattleStruct->dynamax.toDynamax &= ~(gBitTable[gBattlerAttacker]);
- PrepareBattlerForDynamax(gBattlerAttacker);
- BattleScriptExecute(BattleScript_DynamaxBegins);
- return TRUE;
- }
- // Mega Evo Check
- if (gBattleStruct->mega.toEvolve & gBitTable[order[i]]
- && !(gProtectStructs[order[i]].noValidMoves))
- {
- gBattlerAttacker = order[i];
- gBattleStruct->mega.toEvolve &= ~(gBitTable[gBattlerAttacker]);
- gLastUsedItem = gBattleMons[gBattlerAttacker].item;
- if (GetBattleFormChangeTargetSpecies(gBattlerAttacker, FORM_CHANGE_BATTLE_MEGA_EVOLUTION_MOVE) != SPECIES_NONE)
- BattleScriptExecute(BattleScript_WishMegaEvolution);
- else
- BattleScriptExecute(BattleScript_MegaEvolution);
- return TRUE;
- }
- // Ultra Burst Check
- if (gBattleStruct->burst.toBurst & gBitTable[order[i]]
- && !(gProtectStructs[order[i]].noValidMoves))
+ // Search through each battler and activate their gimmick if they have one prepared.
+ if ((gBattleStruct->gimmick.toActivate & gBitTable[order[i]]) && !(gProtectStructs[order[i]].noValidMoves))
{
- battler = gBattlerAttacker = order[i];
- gBattleStruct->burst.toBurst &= ~(gBitTable[battler]);
- gLastUsedItem = gBattleMons[battler].item;
- BattleScriptExecute(BattleScript_UltraBurst);
- return TRUE;
+ battler = gBattlerAttacker = gBattleScripting.battler = order[i];
+ gBattleStruct->gimmick.toActivate &= ~(gBitTable[battler]);
+ if (gGimmicksInfo[gBattleStruct->gimmick.usableGimmick[battler]].ActivateGimmick != NULL)
+ {
+ gGimmicksInfo[gBattleStruct->gimmick.usableGimmick[battler]].ActivateGimmick(battler);
+ return TRUE;
+ }
}
}
}
@@ -5752,10 +5560,10 @@ static void HandleEndTurn_FinishBattle(void)
TryRestoreHeldItems();
// Undo Dynamax HP multiplier before recalculating stats.
- for (i = 0; i < gBattlersCount; ++i)
+ for (battler = 0; battler < gBattlersCount; ++battler)
{
- if (IsDynamaxed(i))
- UndoDynamax(i);
+ if (GetActiveGimmick(battler) == GIMMICK_DYNAMAX)
+ UndoDynamax(battler);
}
for (i = 0; i < PARTY_SIZE; i++)
@@ -5822,8 +5630,10 @@ static void FreeResetData_ReturnToOvOrDoEvolutions(void)
}
FreeAllWindowBuffers();
- if (!(gBattleTypeFlags & BATTLE_TYPE_LINK))
+ if (gBattleStruct != NULL && !(gBattleTypeFlags & BATTLE_TYPE_LINK))
{
+ ZeroEnemyPartyMons();
+ ResetDynamicAiFunc();
FreeMonSpritesGfx();
FreeBattleResources();
FreeBattleSpritesData();
@@ -5839,6 +5649,7 @@ static void TryEvolvePokemon(void)
if (!(sTriedEvolving & gBitTable[i]))
{
u16 species = GetEvolutionTargetSpecies(&gPlayerParty[i], EVO_MODE_BATTLE_SPECIAL, i, NULL);
+ bool32 evoModeNormal = TRUE;
sTriedEvolving |= gBitTable[i];
if (species == SPECIES_NONE && (gLeveledUpInBattle & gBitTable[i]))
@@ -5847,11 +5658,17 @@ static void TryEvolvePokemon(void)
species = GetEvolutionTargetSpecies(&gPlayerParty[i], EVO_MODE_BATTLE_ONLY, gLeveledUpInBattle, NULL);
}
+ if (species == SPECIES_NONE)
+ {
+ species = GetEvolutionTargetSpecies(&gPlayerParty[i], EVO_MODE_CANT_STOP, ITEM_NONE, NULL);
+ evoModeNormal = FALSE;
+ }
+
if (species != SPECIES_NONE)
{
FreeAllWindowBuffers();
gBattleMainFunc = WaitForEvoSceneToFinish;
- EvolutionScene(&gPlayerParty[i], species, TRUE, i);
+ EvolutionScene(&gPlayerParty[i], species, evoModeNormal, i);
return;
}
}
@@ -5891,7 +5708,7 @@ static void ReturnFromBattleToOverworld(void)
#else
if ((gBattleOutcome == B_OUTCOME_WON) || gBattleOutcome == B_OUTCOME_CAUGHT) // Bug: When Roar is used by roamer, gBattleOutcome is B_OUTCOME_PLAYER_TELEPORTED (5).
#endif // & with B_OUTCOME_WON (1) will return TRUE and deactivates the roamer.
- SetRoamerInactive();
+ SetRoamerInactive(gEncounteredRoamerIndex);
}
m4aSongNumStop(SE_LOW_HEALTH);
@@ -5919,9 +5736,59 @@ void RunBattleScriptCommands(void)
gBattleScriptingCommandsTable[gBattlescriptCurrInstr[0]]();
}
+bool32 TrySetAteType(u32 move, u32 battlerAtk, u32 attackerAbility)
+{
+ u32 ateType;
+
+ switch (gMovesInfo[move].effect)
+ {
+ case EFFECT_TERA_BLAST:
+ if (GetActiveGimmick(battlerAtk) == GIMMICK_TERA)
+ return FALSE;
+ break;
+ case EFFECT_TERA_STARSTORM:
+ if (gBattleMons[battlerAtk].species == SPECIES_TERAPAGOS_STELLAR)
+ return FALSE;
+ break;
+ case EFFECT_HIDDEN_POWER:
+ case EFFECT_WEATHER_BALL:
+ case EFFECT_CHANGE_TYPE_ON_ITEM:
+ case EFFECT_NATURAL_GIFT:
+ return FALSE;
+ }
+
+ ateType = TYPE_NONE;
+ switch (attackerAbility)
+ {
+ case ABILITY_PIXILATE:
+ ateType = TYPE_FAIRY;
+ break;
+ case ABILITY_REFRIGERATE:
+ ateType = TYPE_ICE;
+ break;
+ case ABILITY_AERILATE:
+ ateType = TYPE_FLYING;
+ break;
+ case ABILITY_GALVANIZE:
+ ateType = TYPE_ELECTRIC;
+ break;
+ default:
+ ateType = TYPE_NONE;
+ break;
+ }
+
+ if (ateType != TYPE_NONE && GetActiveGimmick(battlerAtk) != GIMMICK_Z_MOVE)
+ {
+ gBattleStruct->dynamicMoveType = ateType | F_DYNAMIC_TYPE_SET;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
void SetTypeBeforeUsingMove(u32 move, u32 battlerAtk)
{
- u32 moveType, ateType, attackerAbility;
+ u32 moveType, attackerAbility;
u16 holdEffect = GetBattlerHoldEffect(battlerAtk, TRUE);
if (move == MOVE_STRUGGLE)
@@ -5941,7 +5808,7 @@ void SetTypeBeforeUsingMove(u32 move, u32 battlerAtk)
gBattleStruct->dynamicMoveType = TYPE_ROCK | F_DYNAMIC_TYPE_SET;
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))
+ else if (gBattleWeather & (B_WEATHER_HAIL | B_WEATHER_SNOW))
gBattleStruct->dynamicMoveType = TYPE_ICE | F_DYNAMIC_TYPE_SET;
else
gBattleStruct->dynamicMoveType = TYPE_NORMAL | F_DYNAMIC_TYPE_SET;
@@ -5956,9 +5823,9 @@ void SetTypeBeforeUsingMove(u32 move, u32 battlerAtk)
| ((gBattleMons[battlerAtk].spAttackIV & 1) << 4)
| ((gBattleMons[battlerAtk].spDefenseIV & 1) << 5);
- // Subtract 4 instead of 1 below because 3 types are excluded (TYPE_NORMAL and TYPE_MYSTERY and TYPE_FAIRY)
- // The final + 1 skips past Normal, and the following conditional skips TYPE_MYSTERY
- gBattleStruct->dynamicMoveType = ((NUMBER_OF_MON_TYPES - 4) * typeBits) / 63 + 1;
+ // 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;
@@ -5967,28 +5834,34 @@ void SetTypeBeforeUsingMove(u32 move, u32 battlerAtk)
{
gBattleStruct->dynamicMoveType = ItemId_GetSecondaryId(gBattleMons[battlerAtk].item) | F_DYNAMIC_TYPE_SET;
}
- else if (gMovesInfo[move].effect == EFFECT_REVELATION_DANCE)
- {
- 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;
+ else if (gMovesInfo[move].effect == EFFECT_REVELATION_DANCE && GetActiveGimmick(battlerAtk) != GIMMICK_Z_MOVE)
+ {
+ if (GetActiveGimmick(battlerAtk) == GIMMICK_TERA && GetBattlerTeraType(battlerAtk) != TYPE_STELLAR)
+ gBattleStruct->dynamicMoveType = GetBattlerTeraType(battlerAtk);
+ else if (gBattleMons[battlerAtk].types[0] != TYPE_MYSTERY && !(gBattleResources->flags->flags[battlerAtk] & RESOURCE_FLAG_ROOST && gBattleMons[battlerAtk].types[0] == TYPE_FLYING))
+ gBattleStruct->dynamicMoveType = gBattleMons[battlerAtk].types[0] | F_DYNAMIC_TYPE_SET;
+ else if (gBattleMons[battlerAtk].types[1] != TYPE_MYSTERY && !(gBattleResources->flags->flags[battlerAtk] & RESOURCE_FLAG_ROOST && gBattleMons[battlerAtk].types[1] == TYPE_FLYING))
+ gBattleStruct->dynamicMoveType = gBattleMons[battlerAtk].types[1] | F_DYNAMIC_TYPE_SET;
+ else if (gBattleResources->flags->flags[battlerAtk] & RESOURCE_FLAG_ROOST)
+ gBattleStruct->dynamicMoveType = (B_ROOST_PURE_FLYING >= GEN_5 ? TYPE_NORMAL : TYPE_MYSTERY) | F_DYNAMIC_TYPE_SET;
+ else if (gBattleMons[battlerAtk].types[2] != TYPE_MYSTERY)
+ gBattleStruct->dynamicMoveType = gBattleMons[battlerAtk].types[2] | F_DYNAMIC_TYPE_SET;
+ else
+ gBattleStruct->dynamicMoveType = TYPE_MYSTERY | F_DYNAMIC_TYPE_SET;
}
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))
{
- gBattleStruct->dynamicMoveType = gBattleMons[battlerAtk].type2 | F_DYNAMIC_TYPE_SET;
+ gBattleStruct->dynamicMoveType = gBattleMons[battlerAtk].types[1] | F_DYNAMIC_TYPE_SET;
}
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 ))
{
- gBattleStruct->dynamicMoveType = gBattleMons[battlerAtk].type2 | F_DYNAMIC_TYPE_SET;
+ gBattleStruct->dynamicMoveType = gBattleMons[battlerAtk].types[1] | F_DYNAMIC_TYPE_SET;
}
else if (gMovesInfo[move].effect == EFFECT_NATURAL_GIFT)
{
@@ -6011,32 +5884,30 @@ void SetTypeBeforeUsingMove(u32 move, u32 battlerAtk)
gBattleStruct->dynamicMoveType = TYPE_NORMAL | F_DYNAMIC_TYPE_SET;
}
}
+ else if (gMovesInfo[move].effect == EFFECT_TERA_BLAST && GetActiveGimmick(battlerAtk) == GIMMICK_TERA)
+ {
+ gBattleStruct->dynamicMoveType = GetBattlerTeraType(battlerAtk) | F_DYNAMIC_TYPE_SET;
+ }
+ else if (gMovesInfo[move].effect == EFFECT_TERA_STARSTORM && gBattleMons[battlerAtk].species == SPECIES_TERAPAGOS_STELLAR)
+ {
+ gBattleStruct->dynamicMoveType = TYPE_STELLAR | F_DYNAMIC_TYPE_SET;
+ }
attackerAbility = GetBattlerAbility(battlerAtk);
-
if (gMovesInfo[move].type == TYPE_NORMAL
- && gMovesInfo[move].effect != EFFECT_HIDDEN_POWER
- && gMovesInfo[move].effect != EFFECT_WEATHER_BALL
- && gMovesInfo[move].effect != EFFECT_CHANGE_TYPE_ON_ITEM
- && gMovesInfo[move].effect != EFFECT_NATURAL_GIFT
- && ((attackerAbility == ABILITY_PIXILATE && (ateType = TYPE_FAIRY))
- || (attackerAbility == ABILITY_REFRIGERATE && (ateType = TYPE_ICE))
- || (attackerAbility == ABILITY_AERILATE && (ateType = TYPE_FLYING))
- || ((attackerAbility == ABILITY_GALVANIZE) && (ateType = TYPE_ELECTRIC))
- )
- )
+ && TrySetAteType(move, battlerAtk, attackerAbility)
+ && GetActiveGimmick(battlerAtk) != GIMMICK_DYNAMAX)
{
- gBattleStruct->dynamicMoveType = ateType | F_DYNAMIC_TYPE_SET;
- if (!IsDynamaxed(battlerAtk))
gBattleStruct->ateBoost[battlerAtk] = 1;
}
else if (gMovesInfo[move].type != TYPE_NORMAL
- && gMovesInfo[move].effect != EFFECT_HIDDEN_POWER
- && gMovesInfo[move].effect != EFFECT_WEATHER_BALL
- && attackerAbility == ABILITY_NORMALIZE)
+ && gMovesInfo[move].effect != EFFECT_HIDDEN_POWER
+ && gMovesInfo[move].effect != EFFECT_WEATHER_BALL
+ && attackerAbility == ABILITY_NORMALIZE
+ && GetActiveGimmick(battlerAtk) != GIMMICK_Z_MOVE)
{
gBattleStruct->dynamicMoveType = TYPE_NORMAL | F_DYNAMIC_TYPE_SET;
- if (!IsDynamaxed(battlerAtk))
+ if (GetActiveGimmick(battlerAtk) != GIMMICK_DYNAMAX)
gBattleStruct->ateBoost[battlerAtk] = 1;
}
else if (gMovesInfo[move].soundMove && attackerAbility == ABILITY_LIQUID_VOICE)
@@ -6091,3 +5962,11 @@ bool32 IsWildMonSmart(void)
return FALSE;
#endif
}
+
+static s32 Factorial(s32 n)
+{
+ s32 f = 1, i;
+ for (i = 2; i <= n; i++)
+ f *= i;
+ return f;
+}
diff --git a/src/battle_message.c b/src/battle_message.c
index eecec7d2a4e2..497e617601c9 100644
--- a/src/battle_message.c
+++ b/src/battle_message.c
@@ -370,6 +370,9 @@ static const u8 sText_HailStopped[] = _("The hail stopped.");
static const u8 sText_StartedSnow[] = _("It started to snow!");
static const u8 sText_SnowContinues[] = _("Snow continues to fall.");
static const u8 sText_SnowStopped[] = _("The snow stopped.");
+static const u8 sText_FogCreptUp[] = _("Fog crept up as thick as soup!");
+static const u8 sText_FogIsDeep[] = _("The fog is deep…");
+static const u8 sText_FogLifted[] = _("The fog lifted.");
static const u8 sText_FailedToSpitUp[] = _("But it failed to spit up\na thing!");
static const u8 sText_FailedToSwallow[] = _("But it failed to swallow\na thing!");
static const u8 sText_WindBecameHeatWave[] = _("The wind turned into a\nHEAT WAVE!");
@@ -721,6 +724,7 @@ static const u8 sText_ASandstormKickedUp[] = _("A sandstorm kicked up!");
static const u8 sText_PkmnsWillPerishIn3Turns[] = _("Both Pokémon will perish\nin three turns!");
static const u8 sText_AbilityRaisedStatDrastically[] = _("{B_DEF_ABILITY} raised {B_DEF_NAME_WITH_PREFIX}'s\n{B_BUFF1} drastically!");
static const u8 sText_AsOneEnters[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} has two Abilities!");
+static const u8 sText_PkmnMadeShellGleam[] = _("{B_DEF_NAME_WITH_PREFIX} made its shell gleam!\nIt's distorting type matchups!");
static const u8 sText_CuriousMedicineEnters[] = _("{B_EFF_NAME_WITH_PREFIX}'s\nstat changes were reset!");
static const u8 sText_CanActFaster[] = _("{B_ATK_NAME_WITH_PREFIX} can act faster,\nthanks to {B_BUFF1}!");
static const u8 sText_MicleBerryActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} boosted the accuracy of its\nnext move using {B_LAST_ITEM}!");
@@ -790,7 +794,8 @@ static const u8 sText_AttackerLostElectricType[] = _("{B_ATK_NAME_WITH_PREFIX} u
static const u8 sText_AttackerSwitchedStatWithTarget[] = _("{B_ATK_NAME_WITH_PREFIX} switched {B_BUFF1}\nwith its target!");
static const u8 sText_BeingHitChargedPkmnWithPower[] = _("Being hit by {B_CURRENT_MOVE}\ncharged {B_DEF_NAME_WITH_PREFIX} with power!");
static const u8 sText_SunlightActivatedAbility[] = _("The harsh sunlight activated\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ABILITY}!");
-static const u8 sText_StatWasHeightened[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1} was heightened!");
+static const u8 sText_StatWasHeightened[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_BUFF1}\nwas heightened!");
+static const u8 sText_BoosterEnergyActivates[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} used its\n{B_LAST_ITEM} to activate\l{B_SCR_ACTIVE_ABILITY}!");
static const u8 sText_ElectricTerrainActivatedAbility[] = _("The Electric Terrain activated\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_LAST_ABILITY}!");
static const u8 sText_AbilityWeakenedSurroundingMonsStat[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}'s {B_SCR_ACTIVE_ABILITY}\nweakened the {B_BUFF1} of\lall surrounding Pokémon!\p");
static const u8 sText_AttackerGainedStrengthFromTheFallen[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} gained strength\nfrom the fallen!");
@@ -824,7 +829,6 @@ static const u8 sText_TeamGainedEXP[] = _("The rest of your team gained EXP.\nPo
static const u8 sText_CurrentMoveCantSelect[] = _("{B_BUFF1} cannot be used!\p");
static const u8 sText_TargetIsBeingSaltCured[] = _("{B_DEF_NAME_WITH_PREFIX} is being salt cured!");
static const u8 sText_TargetIsHurtBySaltCure[] = _("{B_DEF_NAME_WITH_PREFIX} is hurt by {B_BUFF1}!");
-static const u8 sText_OpportunistCopied[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} copied its\nopponent's stat changes!");
static const u8 sText_TargetCoveredInStickyCandySyrup[] = _("{B_DEF_NAME_WITH_PREFIX} got covered\nin sticky syrup!");
static const u8 sText_PkmnTellChillingReceptionJoke[] = _("{B_ATK_NAME_WITH_PREFIX} is preparing to tell a\nchillingly bad joke!");
static const u8 sText_ZeroToHeroTransformation[] = _("{B_ATK_NAME_WITH_PREFIX} underwent a heroic\ntransformation!");
@@ -842,11 +846,15 @@ static const u8 sText_ElectroShotCharging[] = _("{B_ATK_NAME_WITH_PREFIX} absorb
static const u8 sText_ItemWasUsedUp[] = _("The {B_LAST_ITEM}\nwas used up...");
static const u8 sText_AttackerLostItsType[] = _("{B_ATK_NAME_WITH_PREFIX} lost\nits {B_BUFF1} type!");
static const u8 sText_ShedItsTail[] = _("{B_ATK_NAME_WITH_PREFIX} shed its tail\nto create a decoy!");
+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,
[STRINGID_SHEDITSTAIL - BATTLESTRINGS_TABLE_START] = sText_ShedItsTail,
@@ -864,7 +872,6 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] =
[STRINGID_ZEROTOHEROTRANSFORMATION - BATTLESTRINGS_TABLE_START] = sText_ZeroToHeroTransformation,
[STRINGID_PKMNTELLCHILLINGRECEPTIONJOKE - BATTLESTRINGS_TABLE_START] = sText_PkmnTellChillingReceptionJoke,
[STRINGID_MOVEBLOCKEDBYDYNAMAX - BATTLESTRINGS_TABLE_START] = sText_MoveBlockedByDynamax,
- [STRINGID_OPPORTUNISTCOPIED - BATTLESTRINGS_TABLE_START] = sText_OpportunistCopied,
[STRINGID_TARGETISHURTBYSALTCURE - BATTLESTRINGS_TABLE_START] = sText_TargetIsHurtBySaltCure,
[STRINGID_TARGETISBEINGSALTCURED - BATTLESTRINGS_TABLE_START] = sText_TargetIsBeingSaltCured,
[STRINGID_CURRENTMOVECANTSELECT - BATTLESTRINGS_TABLE_START] = sText_CurrentMoveCantSelect,
@@ -892,6 +899,7 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] =
[STRINGID_ABILITYWEAKENEDSURROUNDINGMONSSTAT - BATTLESTRINGS_TABLE_START] = sText_AbilityWeakenedSurroundingMonsStat,
[STRINGID_ELECTRICTERRAINACTIVATEDABILITY - BATTLESTRINGS_TABLE_START] = sText_ElectricTerrainActivatedAbility,
[STRINGID_STATWASHEIGHTENED - BATTLESTRINGS_TABLE_START] = sText_StatWasHeightened,
+ [STRINGID_BOOSTERENERGYACTIVATES - BATTLESTRINGS_TABLE_START] = sText_BoosterEnergyActivates,
[STRINGID_SUNLIGHTACTIVATEDABILITY - BATTLESTRINGS_TABLE_START] = sText_SunlightActivatedAbility,
[STRINGID_BEINGHITCHARGEDPKMNWITHPOWER - BATTLESTRINGS_TABLE_START] = sText_BeingHitChargedPkmnWithPower,
[STRINGID_ATTACKERSWITCHEDSTATWITHTARGET - BATTLESTRINGS_TABLE_START] = sText_AttackerSwitchedStatWithTarget,
@@ -957,6 +965,7 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] =
[STRINGID_CANACTFASTERTHANKSTO - BATTLESTRINGS_TABLE_START] = sText_CanActFaster,
[STRINGID_CURIOUSMEDICINEENTERS - BATTLESTRINGS_TABLE_START] = sText_CuriousMedicineEnters,
[STRINGID_ASONEENTERS - BATTLESTRINGS_TABLE_START] = sText_AsOneEnters,
+ [STRINGID_PKMNMADESHELLGLEAM - BATTLESTRINGS_TABLE_START] = sText_PkmnMadeShellGleam,
[STRINGID_ABILITYRAISEDSTATDRASTICALLY - BATTLESTRINGS_TABLE_START] = sText_AbilityRaisedStatDrastically,
[STRINGID_PKMNSWILLPERISHIN3TURNS - BATTLESTRINGS_TABLE_START] = sText_PkmnsWillPerishIn3Turns,
[STRINGID_ASANDSTORMKICKEDUP - BATTLESTRINGS_TABLE_START] = sText_ASandstormKickedUp,
@@ -1228,6 +1237,9 @@ const u8 *const gBattleStringsTable[BATTLESTRINGS_COUNT] =
[STRINGID_STARTEDSNOW - BATTLESTRINGS_TABLE_START] = sText_StartedSnow,
[STRINGID_SNOWCONTINUES -BATTLESTRINGS_TABLE_START] = sText_SnowContinues,
[STRINGID_SNOWSTOPPED - BATTLESTRINGS_TABLE_START] = sText_SnowStopped,
+ [STRINGID_FOGCREPTUP - BATTLESTRINGS_TABLE_START] = sText_FogCreptUp,
+ [STRINGID_FOGISDEEP - BATTLESTRINGS_TABLE_START] = sText_FogIsDeep,
+ [STRINGID_FOGLIFTED - BATTLESTRINGS_TABLE_START] = sText_FogLifted,
[STRINGID_FAILEDTOSPITUP - BATTLESTRINGS_TABLE_START] = sText_FailedToSpitUp,
[STRINGID_FAILEDTOSWALLOW - BATTLESTRINGS_TABLE_START] = sText_FailedToSwallow,
[STRINGID_WINDBECAMEHEATWAVE - BATTLESTRINGS_TABLE_START] = sText_WindBecameHeatWave,
@@ -1671,6 +1683,18 @@ const u16 gMoveWeatherChangeStringIds[] =
[B_MSG_STARTED_SUNLIGHT] = STRINGID_SUNLIGHTGOTBRIGHT,
[B_MSG_STARTED_HAIL] = STRINGID_STARTEDHAIL,
[B_MSG_STARTED_SNOW] = STRINGID_STARTEDSNOW,
+ [B_MSG_STARTED_FOG] = STRINGID_FOGCREPTUP, // Unused, can use for custom moves that set fog
+};
+
+const u16 gWeatherEndsStringIds[B_MSG_WEATHER_END_COUNT] =
+{
+ [B_MSG_WEATHER_END_RAIN] = STRINGID_RAINSTOPPED,
+ [B_MSG_WEATHER_END_SANDSTORM] = STRINGID_SANDSTORMSUBSIDED,
+ [B_MSG_WEATHER_END_SUN] = STRINGID_SUNLIGHTFADED,
+ [B_MSG_WEATHER_END_HAIL] = STRINGID_HAILSTOPPED,
+ [B_MSG_WEATHER_END_STRONG_WINDS] = STRINGID_STRONGWINDSDISSIPATED,
+ [B_MSG_WEATHER_END_SNOW] = STRINGID_SNOWSTOPPED,
+ [B_MSG_WEATHER_END_FOG] = STRINGID_FOGLIFTED,
};
const u16 gSandStormHailSnowContinuesStringIds[] =
@@ -1923,10 +1947,10 @@ const u16 gWeatherStartsStringIds[] =
[WEATHER_RAIN] = STRINGID_ITISRAINING,
[WEATHER_SNOW] = (B_OVERWORLD_SNOW >= GEN_9 ? STRINGID_STARTEDSNOW : STRINGID_STARTEDHAIL),
[WEATHER_RAIN_THUNDERSTORM] = STRINGID_ITISRAINING,
- [WEATHER_FOG_HORIZONTAL] = STRINGID_ITISRAINING,
+ [WEATHER_FOG_HORIZONTAL] = STRINGID_FOGISDEEP,
[WEATHER_VOLCANIC_ASH] = STRINGID_ITISRAINING,
[WEATHER_SANDSTORM] = STRINGID_SANDSTORMISRAGING,
- [WEATHER_FOG_DIAGONAL] = STRINGID_ITISRAINING,
+ [WEATHER_FOG_DIAGONAL] = STRINGID_FOGISDEEP,
[WEATHER_UNDERWATER] = STRINGID_ITISRAINING,
[WEATHER_SHADE] = STRINGID_ITISRAINING,
[WEATHER_DROUGHT] = STRINGID_SUNLIGHTSTRONG,
@@ -2468,6 +2492,18 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] =
.fgColor = 1,
.shadowColor = 6,
},
+ [B_WIN_MOVE_DESCRIPTION] = {
+ .fillValue = PIXEL_FILL(0xE),
+ .fontId = FONT_NARROW,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = TEXT_DYNAMIC_COLOR_4,
+ .bgColor = TEXT_DYNAMIC_COLOR_5,
+ .shadowColor = TEXT_DYNAMIC_COLOR_6,
+ },
};
static const struct BattleWindowText sTextOnWindowsInfo_Arena[] =
@@ -2701,6 +2737,18 @@ static const struct BattleWindowText sTextOnWindowsInfo_Arena[] =
.bgColor = 1,
.shadowColor = 3,
},
+ [B_WIN_MOVE_DESCRIPTION] = {
+ .fillValue = PIXEL_FILL(0xE),
+ .fontId = FONT_NARROW,
+ .x = 0,
+ .y = 1,
+ .letterSpacing = 0,
+ .lineSpacing = 0,
+ .speed = 0,
+ .fgColor = TEXT_DYNAMIC_COLOR_4,
+ .bgColor = TEXT_DYNAMIC_COLOR_5,
+ .shadowColor = TEXT_DYNAMIC_COLOR_6,
+ },
};
static const struct BattleWindowText *const sBattleTextOnWindowsInfo[] =
@@ -3914,6 +3962,17 @@ void BattlePutTextOnWindow(const u8 *text, u8 windowId)
printerTemplate.bgColor = textInfo[windowId].bgColor;
printerTemplate.shadowColor = textInfo[windowId].shadowColor;
+ if (B_WIN_MOVE_NAME_1 <= windowId && windowId <= B_WIN_MOVE_NAME_4)
+ {
+ // We cannot check the actual width of the window because
+ // B_WIN_MOVE_NAME_1 and B_WIN_MOVE_NAME_3 are 16 wide for
+ // Z-move details.
+ if (gBattleStruct->zmove.viewing && windowId == B_WIN_MOVE_NAME_1)
+ printerTemplate.fontId = GetFontIdToFit(text, printerTemplate.fontId, printerTemplate.letterSpacing, 16 * TILE_WIDTH);
+ else
+ printerTemplate.fontId = GetFontIdToFit(text, printerTemplate.fontId, printerTemplate.letterSpacing, 8 * TILE_WIDTH);
+ }
+
if (printerTemplate.x == 0xFF)
{
u32 width = GetBattleWindowTemplatePixelWidth(gBattleScripting.windowsType, windowId);
@@ -3967,7 +4026,7 @@ void SetPpNumbersPaletteInMoveSelection(u32 battler)
var = GetCurrentPpToMaxPpState(chooseMoveStruct->currentPp[gMoveSelectionCursor[battler]],
chooseMoveStruct->maxPp[gMoveSelectionCursor[battler]]);
else
- var = GetCurrentPpToMaxPpState(chooseMoveStruct->currentPp[gMoveSelectionCursor[battler]], gMovesInfo[gMoveSelectionCursor[battler]].pp);
+ var = 3;
gPlttBufferUnfaded[BG_PLTT_ID(5) + 12] = palPtr[(var * 2) + 0];
gPlttBufferUnfaded[BG_PLTT_ID(5) + 11] = palPtr[(var * 2) + 1];
diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c
index 0b9aa2146f7b..4206a8237f41 100644
--- a/src/battle_script_commands.c
+++ b/src/battle_script_commands.c
@@ -66,37 +66,6 @@
#include "config/battle.h"
#include "data/battle_move_effects.h"
-// Helper for accessing command arguments and advancing gBattlescriptCurrInstr.
-//
-// For example accuracycheck is defined as:
-//
-// .macro accuracycheck failInstr:req, move:req
-// .byte 0x1
-// .4byte \failInstr
-// .2byte \move
-// .endm
-//
-// Which corresponds to:
-//
-// CMD_ARGS(const u8 *failInstr, u16 move);
-//
-// The arguments can be accessed as cmd->failInstr and cmd->move.
-// gBattlescriptCurrInstr = cmd->nextInstr; advances to the next instruction.
-#define CMD_ARGS(...) const struct __attribute__((packed)) { u8 opcode; MEMBERS(__VA_ARGS__) const u8 nextInstr[0]; } *const cmd UNUSED = (const void *)gBattlescriptCurrInstr
-#define VARIOUS_ARGS(...) CMD_ARGS(u8 battler, u8 id, ##__VA_ARGS__)
-#define NATIVE_ARGS(...) CMD_ARGS(void (*func)(void), ##__VA_ARGS__)
-
-#define MEMBERS(...) VARARG_8(MEMBERS_, __VA_ARGS__)
-#define MEMBERS_0()
-#define MEMBERS_1(a) a;
-#define MEMBERS_2(a, b) a; b;
-#define MEMBERS_3(a, b, c) a; b; c;
-#define MEMBERS_4(a, b, c, d) a; b; c; d;
-#define MEMBERS_5(a, b, c, d, e) a; b; c; d; e;
-#define MEMBERS_6(a, b, c, d, e, f) a; b; c; d; e; f;
-#define MEMBERS_7(a, b, c, d, e, f, g) a; b; c; d; e; f; g;
-#define MEMBERS_8(a, b, c, d, e, f, g, h) a; b; c; d; e; f; g; h;
-
// table to avoid ugly powing on gba (courtesy of doesnt)
// this returns (i^2.5)/4
// the quarters cancel so no need to re-quadruple them in actual calculation
@@ -361,11 +330,15 @@ static bool8 IsFinalStrikeEffect(u32 moveEffect);
static void TryUpdateRoundTurnOrder(void);
static bool32 ChangeOrderTargetAfterAttacker(void);
void ApplyExperienceMultipliers(s32 *expAmount, u8 expGetterMonId, u8 faintedBattler);
+static void RemoveAllWeather(void);
static void RemoveAllTerrains(void);
static bool8 CanAbilityPreventStatLoss(u16 abilityDef);
static bool8 CanBurnHitThaw(u16 move);
static u32 GetNextTarget(u32 moveTarget, bool32 excludeCurrent);
static void TryUpdateEvolutionTracker(u32 evolutionMethod, u32 upAmount, u16 usedMove);
+static void AccuracyCheck(bool32 recalcDragonDarts, const u8 *nextInstr, const u8 *failInstr, u16 move);
+static void SaveBattlerAttacker(u32 battler);
+static void SaveBattlerTarget(u32 battler);
static void Cmd_attackcanceler(void);
static void Cmd_accuracycheck(void);
@@ -492,7 +465,7 @@ static void Cmd_setatkhptozero(void);
static void Cmd_jumpifnexttargetvalid(void);
static void Cmd_tryhealhalfhealth(void);
static void Cmd_trymirrormove(void);
-static void Cmd_setrain(void);
+static void Cmd_setfieldweather(void);
static void Cmd_setreflect(void);
static void Cmd_setseeded(void);
static void Cmd_manipulatedamage(void);
@@ -516,8 +489,8 @@ static void Cmd_givepaydaymoney(void);
static void Cmd_setlightscreen(void);
static void Cmd_tryKO(void);
static void Cmd_damagetohalftargethp(void);
-static void Cmd_setsandstorm(void);
-static void Cmd_weatherdamage(void);
+static void Cmd_unused_95(void);
+static void Cmd_unused_96(void);
static void Cmd_tryinfatuating(void);
static void Cmd_updatestatusicon(void);
static void Cmd_setmist(void);
@@ -554,7 +527,7 @@ static void Cmd_presentdamagecalculation(void);
static void Cmd_setsafeguard(void);
static void Cmd_magnitudedamagecalculation(void);
static void Cmd_jumpifnopursuitswitchdmg(void);
-static void Cmd_setsunny(void);
+static void Cmd_unused_bb(void);
static void Cmd_halvehp(void);
static void Cmd_copyfoestats(void);
static void Cmd_rapidspinfree(void);
@@ -567,7 +540,7 @@ static void Cmd_trydobeatup(void);
static void Cmd_setsemiinvulnerablebit(void);
static void Cmd_tryfiretwoturnmovenowbyeffect(void);
static void Cmd_setminimize(void);
-static void Cmd_sethail(void);
+static void Cmd_unused_c8(void);
static void Cmd_trymemento(void);
static void Cmd_setforcedtarget(void);
static void Cmd_setcharge(void);
@@ -690,7 +663,7 @@ void (* const gBattleScriptingCommandsTable[])(void) =
Cmd_end, //0x3D
Cmd_end2, //0x3E
Cmd_end3, //0x3F
- Cmd_unused5, //0x40
+ Cmd_unused5, //0x40
Cmd_call, //0x41
Cmd_setroost, //0x42
Cmd_jumpifabilitypresent, //0x43
@@ -751,7 +724,7 @@ void (* const gBattleScriptingCommandsTable[])(void) =
Cmd_jumpifnexttargetvalid, //0x7A
Cmd_tryhealhalfhealth, //0x7B
Cmd_trymirrormove, //0x7C
- Cmd_setrain, //0x7D
+ Cmd_setfieldweather, //0x7D
Cmd_setreflect, //0x7E
Cmd_setseeded, //0x7F
Cmd_manipulatedamage, //0x80
@@ -775,8 +748,8 @@ void (* const gBattleScriptingCommandsTable[])(void) =
Cmd_setlightscreen, //0x92
Cmd_tryKO, //0x93
Cmd_damagetohalftargethp, //0x94
- Cmd_setsandstorm, //0x95
- Cmd_weatherdamage, //0x96
+ Cmd_unused_95, //0x95
+ Cmd_unused_96, //0x96
Cmd_tryinfatuating, //0x97
Cmd_updatestatusicon, //0x98
Cmd_setmist, //0x99
@@ -813,7 +786,7 @@ void (* const gBattleScriptingCommandsTable[])(void) =
Cmd_setsafeguard, //0xB8
Cmd_magnitudedamagecalculation, //0xB9
Cmd_jumpifnopursuitswitchdmg, //0xBA
- Cmd_setsunny, //0xBB
+ Cmd_unused_bb, //0xBB
Cmd_halvehp, //0xBC
Cmd_copyfoestats, //0xBD
Cmd_rapidspinfree, //0xBE
@@ -826,7 +799,7 @@ void (* const gBattleScriptingCommandsTable[])(void) =
Cmd_setsemiinvulnerablebit, //0xC5
Cmd_tryfiretwoturnmovenowbyeffect, //0xC6
Cmd_setminimize, //0xC7
- Cmd_sethail, //0xC8
+ Cmd_unused_c8, //0xC8
Cmd_trymemento, //0xC9
Cmd_setforcedtarget, //0xCA
Cmd_setcharge, //0xCB
@@ -1128,72 +1101,6 @@ static const u8 sTerrainToType[BATTLE_TERRAIN_COUNT] =
[BATTLE_TERRAIN_PLAIN] = (B_CAMOUFLAGE_TYPES >= GEN_4 ? TYPE_GROUND : TYPE_NORMAL),
};
-// In Battle Palace, moves are chosen based on the pokemons nature rather than by the player
-// Moves are grouped into "Attack", "Defense", or "Support" (see PALACE_MOVE_GROUP_*)
-// Each nature has a certain percent chance of selecting a move from a particular group
-// and a separate percent chance for each group when at or below 50% HP
-// The table below doesn't list percentages for Support because you can subtract the other two
-// Support percentages are listed in comments off to the side instead
-#define PALACE_STYLE(atk, def, atkLow, defLow) {atk, atk + def, atkLow, atkLow + defLow}
-
-const ALIGNED(4) u8 gBattlePalaceNatureToMoveGroupLikelihood[NUM_NATURES][4] =
-{
- [NATURE_HARDY] = PALACE_STYLE(61, 7, 61, 7), // 32% support >= 50% HP, 32% support < 50% HP
- [NATURE_LONELY] = PALACE_STYLE(20, 25, 84, 8), // 55%, 8%
- [NATURE_BRAVE] = PALACE_STYLE(70, 15, 32, 60), // 15%, 8%
- [NATURE_ADAMANT] = PALACE_STYLE(38, 31, 70, 15), // 31%, 15%
- [NATURE_NAUGHTY] = PALACE_STYLE(20, 70, 70, 22), // 10%, 8%
- [NATURE_BOLD] = PALACE_STYLE(30, 20, 32, 58), // 50%, 10%
- [NATURE_DOCILE] = PALACE_STYLE(56, 22, 56, 22), // 22%, 22%
- [NATURE_RELAXED] = PALACE_STYLE(25, 15, 75, 15), // 60%, 10%
- [NATURE_IMPISH] = PALACE_STYLE(69, 6, 28, 55), // 25%, 17%
- [NATURE_LAX] = PALACE_STYLE(35, 10, 29, 6), // 55%, 65%
- [NATURE_TIMID] = PALACE_STYLE(62, 10, 30, 20), // 28%, 50%
- [NATURE_HASTY] = PALACE_STYLE(58, 37, 88, 6), // 5%, 6%
- [NATURE_SERIOUS] = PALACE_STYLE(34, 11, 29, 11), // 55%, 60%
- [NATURE_JOLLY] = PALACE_STYLE(35, 5, 35, 60), // 60%, 5%
- [NATURE_NAIVE] = PALACE_STYLE(56, 22, 56, 22), // 22%, 22%
- [NATURE_MODEST] = PALACE_STYLE(35, 45, 34, 60), // 20%, 6%
- [NATURE_MILD] = PALACE_STYLE(44, 50, 34, 6), // 6%, 60%
- [NATURE_QUIET] = PALACE_STYLE(56, 22, 56, 22), // 22%, 22%
- [NATURE_BASHFUL] = PALACE_STYLE(30, 58, 30, 58), // 12%, 12%
- [NATURE_RASH] = PALACE_STYLE(30, 13, 27, 6), // 57%, 67%
- [NATURE_CALM] = PALACE_STYLE(40, 50, 25, 62), // 10%, 13%
- [NATURE_GENTLE] = PALACE_STYLE(18, 70, 90, 5), // 12%, 5%
- [NATURE_SASSY] = PALACE_STYLE(88, 6, 22, 20), // 6%, 58%
- [NATURE_CAREFUL] = PALACE_STYLE(42, 50, 42, 5), // 8%, 53%
- [NATURE_QUIRKY] = PALACE_STYLE(56, 22, 56, 22) // 22%, 22%
-};
-
-static const u8 sBattlePalaceNatureToFlavorTextId[NUM_NATURES] =
-{
- [NATURE_HARDY] = B_MSG_EAGER_FOR_MORE,
- [NATURE_LONELY] = B_MSG_GLINT_IN_EYE,
- [NATURE_BRAVE] = B_MSG_GETTING_IN_POS,
- [NATURE_ADAMANT] = B_MSG_GLINT_IN_EYE,
- [NATURE_NAUGHTY] = B_MSG_GLINT_IN_EYE,
- [NATURE_BOLD] = B_MSG_GETTING_IN_POS,
- [NATURE_DOCILE] = B_MSG_EAGER_FOR_MORE,
- [NATURE_RELAXED] = B_MSG_GLINT_IN_EYE,
- [NATURE_IMPISH] = B_MSG_GETTING_IN_POS,
- [NATURE_LAX] = B_MSG_GROWL_DEEPLY,
- [NATURE_TIMID] = B_MSG_GROWL_DEEPLY,
- [NATURE_HASTY] = B_MSG_GLINT_IN_EYE,
- [NATURE_SERIOUS] = B_MSG_EAGER_FOR_MORE,
- [NATURE_JOLLY] = B_MSG_GETTING_IN_POS,
- [NATURE_NAIVE] = B_MSG_EAGER_FOR_MORE,
- [NATURE_MODEST] = B_MSG_GETTING_IN_POS,
- [NATURE_MILD] = B_MSG_GROWL_DEEPLY,
- [NATURE_QUIET] = B_MSG_EAGER_FOR_MORE,
- [NATURE_BASHFUL] = B_MSG_EAGER_FOR_MORE,
- [NATURE_RASH] = B_MSG_GROWL_DEEPLY,
- [NATURE_CALM] = B_MSG_GETTING_IN_POS,
- [NATURE_GENTLE] = B_MSG_GLINT_IN_EYE,
- [NATURE_SASSY] = B_MSG_GROWL_DEEPLY,
- [NATURE_CAREFUL] = B_MSG_GROWL_DEEPLY,
- [NATURE_QUIRKY] = B_MSG_EAGER_FOR_MORE,
-};
-
static bool32 NoTargetPresent(u8 battler, u32 move)
{
if (!IsBattlerAlive(gBattlerTarget))
@@ -1253,9 +1160,10 @@ 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))
- && move != MOVE_STRUGGLE)
+ && (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)
{
SET_BATTLER_TYPE(battler, moveType);
return TRUE;
@@ -1263,6 +1171,19 @@ bool32 ProteanTryChangeType(u32 battler, u32 ability, u32 move, u32 moveType)
return FALSE;
}
+bool32 ShouldTeraShellDistortTypeMatchups(u32 move, u32 battlerDef)
+{
+ if (!(gBattleStruct->distortedTypeMatchups & gBitTable[battlerDef])
+ && GetBattlerAbility(battlerDef) == ABILITY_TERA_SHELL
+ && gBattleMons[battlerDef].species == SPECIES_TERAPAGOS_TERASTAL
+ && !IS_MOVE_STATUS(move)
+ && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && gBattleMons[battlerDef].hp == gBattleMons[battlerDef].maxHP)
+ return TRUE;
+
+ return FALSE;
+}
+
bool32 IsMoveNotAllowedInSkyBattles(u32 move)
{
return ((gBattleStruct->isSkyBattle) && (gMovesInfo[gCurrentMove].skyBattleBanned));
@@ -1277,7 +1198,7 @@ static void Cmd_attackcanceler(void)
GET_MOVE_TYPE(gCurrentMove, moveType);
// Weight-based moves are blocked by Dynamax.
- if (IsDynamaxed(gBattlerTarget) && IsMoveBlockedByDynamax(gCurrentMove))
+ if ((GetActiveGimmick(gBattlerTarget) == GIMMICK_DYNAMAX) && IsMoveBlockedByDynamax(gCurrentMove))
{
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_MoveBlockedByDynamax;
@@ -1289,7 +1210,7 @@ static void Cmd_attackcanceler(void)
gCurrentActionFuncId = B_ACTION_FINISHED;
return;
}
- if (gBattleMons[gBattlerAttacker].hp == 0 && gMovesInfo[gCurrentMove].effect != EFFECT_EXPLOSION && !(gHitMarker & HITMARKER_NO_ATTACKSTRING))
+ if (!IsBattlerAlive(gBattlerAttacker) && gMovesInfo[gCurrentMove].effect != EFFECT_EXPLOSION && !(gHitMarker & HITMARKER_NO_ATTACKSTRING))
{
gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE;
gBattlescriptCurrInstr = BattleScript_MoveEnd;
@@ -1322,7 +1243,7 @@ static void Cmd_attackcanceler(void)
&& GetBattlerAbility(gBattlerAttacker) == ABILITY_PARENTAL_BOND
&& IsMoveAffectedByParentalBond(gCurrentMove, gBattlerAttacker)
&& !(gAbsentBattlerFlags & gBitTable[gBattlerTarget])
- && gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE)
+ && GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE)
{
gSpecialStatuses[gBattlerAttacker].parentalBondState = PARENTAL_BOND_1ST_HIT;
gMultiHitCounter = 2;
@@ -1443,8 +1364,8 @@ static void Cmd_attackcanceler(void)
}
// Z-moves and Max Moves bypass protection, but deal reduced damage (factored in AccumulateOtherModifiers)
- if ((gBattleStruct->zmove.active || IsMaxMove(gCurrentMove))
- && IS_BATTLER_PROTECTED(gBattlerTarget))
+ if ((IsZMove(gCurrentMove) || IsMaxMove(gCurrentMove))
+ && IS_BATTLER_PROTECTED(gBattlerTarget))
{
BattleScriptPush(cmd->nextInstr);
gBattlescriptCurrInstr = BattleScript_CouldntFullyProtect;
@@ -1592,7 +1513,7 @@ static bool32 AccuracyCalcHelper(u16 move)
return TRUE;
}
- if (gBattleStruct->zmove.active && !(gStatuses3[gBattlerTarget] & STATUS3_SEMI_INVULNERABLE))
+ if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_Z_MOVE && !(gStatuses3[gBattlerTarget] & STATUS3_SEMI_INVULNERABLE))
{
JumpIfMoveFailed(7, move);
return TRUE;
@@ -1759,14 +1680,15 @@ u32 GetTotalAccuracy(u32 battlerAtk, u32 battlerDef, u32 move, u32 atkAbility, u
if (B_AFFECTION_MECHANICS == TRUE && GetBattlerAffectionHearts(battlerDef) == AFFECTION_FIVE_HEARTS)
calc = (calc * 90) / 100;
+ if (WEATHER_HAS_EFFECT && gBattleWeather & B_WEATHER_FOG)
+ calc = (calc * 60) / 100; // modified by 3/5
+
return calc;
}
-static void Cmd_accuracycheck(void)
+static void AccuracyCheck(bool32 recalcDragonDarts, const u8 *nextInstr, const u8 *failInstr, u16 move)
{
- CMD_ARGS(const u8 *failInstr, u16 move);
-
- u32 type, move = cmd->move;
+ u32 type;
u32 moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, move);
u32 abilityAtk = GetBattlerAbility(gBattlerAttacker);
u32 abilityDef = GetBattlerAbility(gBattlerTarget);
@@ -1778,11 +1700,11 @@ static void Cmd_accuracycheck(void)
if (move == NO_ACC_CALC_CHECK_LOCK_ON)
{
if (gStatuses3[gBattlerTarget] & STATUS3_ALWAYS_HITS && gDisableStructs[gBattlerTarget].battlerWithSureHit == gBattlerAttacker)
- gBattlescriptCurrInstr = cmd->nextInstr;
+ gBattlescriptCurrInstr = nextInstr;
else if (gStatuses3[gBattlerTarget] & (STATUS3_SEMI_INVULNERABLE))
- gBattlescriptCurrInstr = cmd->failInstr;
+ gBattlescriptCurrInstr = failInstr;
else if (!JumpIfMoveAffectedByProtect(gCurrentMove))
- gBattlescriptCurrInstr = cmd->nextInstr;
+ gBattlescriptCurrInstr = nextInstr;
}
else if (gSpecialStatuses[gBattlerAttacker].parentalBondState == PARENTAL_BOND_2ND_HIT
|| (gSpecialStatuses[gBattlerAttacker].multiHitOn
@@ -1790,7 +1712,7 @@ static void Cmd_accuracycheck(void)
|| !(gMovesInfo[move].effect == EFFECT_TRIPLE_KICK || gMovesInfo[move].effect == EFFECT_POPULATION_BOMB))))
{
// No acc checks for second hit of Parental Bond or multi hit moves, except Triple Kick/Triple Axel/Population Bomb
- gBattlescriptCurrInstr = cmd->nextInstr;
+ gBattlescriptCurrInstr = nextInstr;
}
else
{
@@ -1818,6 +1740,18 @@ static void Cmd_accuracycheck(void)
if (holdEffectAtk == HOLD_EFFECT_BLUNDER_POLICY)
gBattleStruct->blunderPolicy = TRUE; // Only activates from missing through acc/evasion checks
+ if (gMovesInfo[gCurrentMove].effect == EFFECT_DRAGON_DARTS
+ && !recalcDragonDarts // So we don't jump back and forth between targets
+ && CanTargetPartner(gBattlerAttacker, gBattlerTarget)
+ && !TargetFullyImmuneToCurrMove(gBattlerAttacker, BATTLE_PARTNER(gBattlerTarget)))
+ {
+ // Smart target to partner if miss
+ gBattlerTarget = BATTLE_PARTNER(gBattlerTarget);
+ gMoveResultFlags &= ~MOVE_RESULT_MISSED;
+ AccuracyCheck(TRUE, nextInstr, failInstr, move);
+ return;
+ }
+
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE &&
(moveTarget == MOVE_TARGET_BOTH || moveTarget == MOVE_TARGET_FOES_AND_ALLY))
gBattleCommunication[MISS_TYPE] = B_MSG_AVOIDED_ATK;
@@ -1831,6 +1765,16 @@ static void Cmd_accuracycheck(void)
}
}
+static void Cmd_accuracycheck(void)
+{
+ CMD_ARGS(const u8 *failInstr, u16 move);
+
+ // The main body of this function has been moved to AccuracyCheck() to accomodate
+ // Dragon Darts' multiple accuracy checks on a single attack;
+ // each dart can try to re-target once after missing.
+ AccuracyCheck(FALSE, cmd->nextInstr, cmd->failInstr, cmd->move);
+}
+
static void Cmd_attackstring(void)
{
CMD_ARGS();
@@ -1901,6 +1845,14 @@ static void Cmd_ppreduce(void)
gHitMarker &= ~HITMARKER_NO_PPDEDUCT;
gBattlescriptCurrInstr = cmd->nextInstr;
+
+ if (ShouldTeraShellDistortTypeMatchups(gCurrentMove, gBattlerTarget))
+ {
+ gBattleStruct->distortedTypeMatchups |= gBitTable[gBattlerTarget];
+ gBattlerAbility = gBattlerTarget;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_TeraShellDistortingTypeMatchups;
+ }
}
// The chance is 1/N for each stage.
@@ -1991,7 +1943,7 @@ static void Cmd_critcalc(void)
else if (critChance == -2)
gIsCriticalHit = TRUE;
else
- gIsCriticalHit = RandomWeighted(RNG_CRITICAL_HIT, sCriticalHitOdds[critChance] - 1, 1);
+ gIsCriticalHit = RandomChance(RNG_CRITICAL_HIT, 1, sCriticalHitOdds[critChance]);
// Counter for EVO_CRITICAL_HITS.
partySlot = gBattlerPartyIndexes[gBattlerAttacker];
@@ -2009,8 +1961,8 @@ static void Cmd_damagecalc(void)
u8 moveType;
GET_MOVE_TYPE(gCurrentMove, moveType);
- if (gBattleStruct->shellSideArmCategory[gBattlerAttacker][gBattlerTarget] == DAMAGE_CATEGORY_PHYSICAL && gCurrentMove == MOVE_SHELL_SIDE_ARM)
- gBattleStruct->swapDamageCategory = TRUE;
+ if (gMovesInfo[gCurrentMove].effect == EFFECT_SHELL_SIDE_ARM)
+ gBattleStruct->swapDamageCategory = (gBattleStruct->shellSideArmCategory[gBattlerAttacker][gBattlerTarget] != gMovesInfo[gCurrentMove].category);
gBattleMoveDamage = CalculateMoveDamage(gCurrentMove, gBattlerAttacker, gBattlerTarget, moveType, 0, gIsCriticalHit, TRUE, TRUE);
gBattlescriptCurrInstr = cmd->nextInstr;
}
@@ -2150,12 +2102,12 @@ static void Cmd_adjustdamage(void)
// of a move that is Super Effective against a Flying-type Pokémon.
if (gBattleWeather & B_WEATHER_STRONG_WINDS)
{
- if ((GetBattlerType(gBattlerTarget, 0) == TYPE_FLYING
- && GetTypeModifier(moveType, GetBattlerType(gBattlerTarget, 0)) >= UQ_4_12(2.0))
- || (GetBattlerType(gBattlerTarget, 1) == TYPE_FLYING
- && GetTypeModifier(moveType, GetBattlerType(gBattlerTarget, 1)) >= UQ_4_12(2.0))
- || (GetBattlerType(gBattlerTarget, 2) == TYPE_FLYING
- && GetTypeModifier(moveType, GetBattlerType(gBattlerTarget, 2)) >= UQ_4_12(2.0)))
+ if ((GetBattlerType(gBattlerTarget, 0, FALSE) == TYPE_FLYING
+ && GetTypeModifier(moveType, GetBattlerType(gBattlerTarget, 0, FALSE)) >= UQ_4_12(2.0))
+ || (GetBattlerType(gBattlerTarget, 1, FALSE) == TYPE_FLYING
+ && GetTypeModifier(moveType, GetBattlerType(gBattlerTarget, 1, FALSE)) >= UQ_4_12(2.0))
+ || (GetBattlerType(gBattlerTarget, 2, FALSE) == TYPE_FLYING
+ && GetTypeModifier(moveType, GetBattlerType(gBattlerTarget, 2, FALSE)) >= UQ_4_12(2.0)))
{
gBattlerAbility = gBattlerTarget;
BattleScriptPushCursor();
@@ -2818,7 +2770,7 @@ void SetMoveEffect(bool32 primary, bool32 certain)
return;
if (gSpecialStatuses[gBattlerAttacker].parentalBondState == PARENTAL_BOND_1ST_HIT
- && gBattleMons[gBattlerTarget].hp != 0
+ && IsBattlerAlive(gBattlerTarget)
&& IsFinalStrikeEffect(gBattleScripting.moveEffect))
{
gBattlescriptCurrInstr++;
@@ -2882,7 +2834,7 @@ void SetMoveEffect(bool32 primary, bool32 certain)
&& gBattleScripting.moveEffect != MOVE_EFFECT_CHARGING)
INCREMENT_RESET_RETURN
- if (gBattleMons[gEffectBattler].hp == 0 && !activateAfterFaint)
+ if (!IsBattlerAlive(gEffectBattler) && !activateAfterFaint)
INCREMENT_RESET_RETURN
if (DoesSubstituteBlockMove(gBattlerAttacker, gEffectBattler, gCurrentMove) && affectsUser != MOVE_EFFECT_AFFECTS_USER)
@@ -3152,7 +3104,6 @@ void SetMoveEffect(bool32 primary, bool32 certain)
}
// for synchronize
-
if (gBattleScripting.moveEffect == MOVE_EFFECT_POISON
|| gBattleScripting.moveEffect == MOVE_EFFECT_TOXIC
|| gBattleScripting.moveEffect == MOVE_EFFECT_PARALYSIS
@@ -3161,6 +3112,10 @@ void SetMoveEffect(bool32 primary, bool32 certain)
gBattleStruct->synchronizeMoveEffect = gBattleScripting.moveEffect;
gHitMarker |= HITMARKER_SYNCHRONISE_EFFECT;
}
+
+ if (gBattleScripting.moveEffect == MOVE_EFFECT_POISON || gBattleScripting.moveEffect == MOVE_EFFECT_TOXIC)
+ gBattleStruct->poisonPuppeteerConfusion = TRUE;
+
return;
}
else if (statusChanged == FALSE)
@@ -3223,7 +3178,7 @@ void SetMoveEffect(bool32 primary, bool32 certain)
}
}
else if (GetBattlerTurnOrderNum(gEffectBattler) > gCurrentTurnActionNumber
- && !IsDynamaxed(gEffectBattler))
+ && !(GetActiveGimmick(gEffectBattler) == GIMMICK_DYNAMAX))
{
gBattleMons[gEffectBattler].status2 |= sStatusFlagsForMoveEffects[gBattleScripting.moveEffect];
gBattlescriptCurrInstr++;
@@ -3341,7 +3296,7 @@ void SetMoveEffect(bool32 primary, bool32 certain)
if (NoAliveMonsForEitherParty()
|| ChangeStatBuffs(SET_STAT_BUFF_VALUE(1),
gBattleScripting.moveEffect - MOVE_EFFECT_ATK_PLUS_1 + 1,
- affectsUser | STAT_CHANGE_UPDATE_MOVE_EFFECT, 0))
+ affectsUser | STAT_CHANGE_UPDATE_MOVE_EFFECT, 0) == STAT_CHANGE_DIDNT_WORK)
{
gBattlescriptCurrInstr++;
}
@@ -3371,7 +3326,7 @@ void SetMoveEffect(bool32 primary, bool32 certain)
if (ChangeStatBuffs(SET_STAT_BUFF_VALUE(1) | STAT_BUFF_NEGATIVE,
gBattleScripting.moveEffect - MOVE_EFFECT_ATK_MINUS_1 + 1,
- flags, gBattlescriptCurrInstr + 1))
+ flags, gBattlescriptCurrInstr + 1) == STAT_CHANGE_DIDNT_WORK)
{
if (!mirrorArmorReflected)
gBattlescriptCurrInstr++;
@@ -3394,7 +3349,7 @@ void SetMoveEffect(bool32 primary, bool32 certain)
if (NoAliveMonsForEitherParty()
|| ChangeStatBuffs(SET_STAT_BUFF_VALUE(2),
gBattleScripting.moveEffect - MOVE_EFFECT_ATK_PLUS_2 + 1,
- affectsUser | STAT_CHANGE_UPDATE_MOVE_EFFECT, 0))
+ affectsUser | STAT_CHANGE_UPDATE_MOVE_EFFECT, 0) == STAT_CHANGE_DIDNT_WORK)
{
gBattlescriptCurrInstr++;
}
@@ -3421,7 +3376,7 @@ void SetMoveEffect(bool32 primary, bool32 certain)
flags |= STAT_CHANGE_ALLOW_PTR;
if (ChangeStatBuffs(SET_STAT_BUFF_VALUE(2) | STAT_BUFF_NEGATIVE,
gBattleScripting.moveEffect - MOVE_EFFECT_ATK_MINUS_2 + 1,
- flags | STAT_CHANGE_UPDATE_MOVE_EFFECT, gBattlescriptCurrInstr + 1))
+ flags | STAT_CHANGE_UPDATE_MOVE_EFFECT, gBattlescriptCurrInstr + 1) == STAT_CHANGE_DIDNT_WORK)
{
if (!mirrorArmorReflected)
gBattlescriptCurrInstr++;
@@ -3527,13 +3482,6 @@ void SetMoveEffect(bool32 primary, bool32 certain)
gBattleMons[gEffectBattler].status2 |= STATUS2_LOCK_CONFUSE_TURN(RandomUniform(RNG_RAMPAGE_TURNS, 2, 3));
}
break;
- case MOVE_EFFECT_SP_ATK_TWO_DOWN: // Overheat
- if (!NoAliveMonsForEitherParty())
- {
- BattleScriptPush(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = BattleScript_SAtkDown2;
- }
- break;
case MOVE_EFFECT_CLEAR_SMOG:
for (i = 0; i < NUM_BATTLE_STATS; i++)
{
@@ -3554,7 +3502,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;
@@ -3852,6 +3800,15 @@ void SetMoveEffect(bool32 primary, bool32 certain)
gBattlescriptCurrInstr = BattleScript_EffectPsychicNoise;
}
break;
+ case MOVE_EFFECT_TERA_BLAST:
+ if (GetActiveGimmick(gEffectBattler) == GIMMICK_TERA
+ && GetBattlerTeraType(gEffectBattler) == TYPE_STELLAR
+ && !NoAliveMonsForEitherParty())
+ {
+ BattleScriptPush(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = BattleScript_LowerAtkSpAtk;
+ }
+ break;
}
}
}
@@ -4000,7 +3957,7 @@ static void Cmd_tryfaintmon(void)
faintScript = BattleScript_FaintTarget;
}
if (!(gAbsentBattlerFlags & gBitTable[battler])
- && gBattleMons[battler].hp == 0)
+ && !IsBattlerAlive(battler))
{
gHitMarker |= HITMARKER_FAINTED(battler);
BattleScriptPush(cmd->nextInstr);
@@ -4020,8 +3977,8 @@ static void Cmd_tryfaintmon(void)
gBattleResults.lastOpponentSpecies = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battler]], MON_DATA_SPECIES, NULL);
gSideTimers[B_SIDE_OPPONENT].retaliateTimer = 2;
}
- if ((gHitMarker & HITMARKER_DESTINYBOND) && gBattleMons[gBattlerAttacker].hp != 0
- && !IsDynamaxed(gBattlerAttacker))
+ if ((gHitMarker & HITMARKER_DESTINYBOND) && IsBattlerAlive(gBattlerAttacker)
+ && !(GetActiveGimmick(gBattlerAttacker) == GIMMICK_DYNAMAX))
{
gHitMarker &= ~HITMARKER_DESTINYBOND;
BattleScriptPush(gBattlescriptCurrInstr);
@@ -4031,7 +3988,7 @@ static void Cmd_tryfaintmon(void)
if ((gStatuses3[gBattlerTarget] & STATUS3_GRUDGE)
&& !(gHitMarker & HITMARKER_GRUDGE)
&& GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)
- && gBattleMons[gBattlerAttacker].hp != 0
+ && IsBattlerAlive(gBattlerAttacker)
&& gCurrentMove != MOVE_STRUGGLE)
{
u8 moveIndex = *(gBattleStruct->chosenMovePositions + gBattlerAttacker);
@@ -4073,7 +4030,7 @@ static void Cmd_cleareffectsonfaint(void)
{
u32 battler = GetBattlerForBattleScript(cmd->battler);
const u8 *clearDataResult = NULL;
- if (!(gBattleTypeFlags & BATTLE_TYPE_ARENA) || gBattleMons[battler].hp == 0)
+ if (!(gBattleTypeFlags & BATTLE_TYPE_ARENA) || !IsBattlerAlive(battler))
{
gBattleMons[battler].status1 = 0;
BtlController_EmitSetMonData(battler, BUFFER_A, REQUEST_STATUS_BATTLE, 0, sizeof(gBattleMons[battler].status1), &gBattleMons[battler].status1);
@@ -4096,7 +4053,7 @@ static void Cmd_jumpifstatus(void)
u32 flags = cmd->flags;
const u8 *jumpInstr = cmd->jumpInstr;
- if (gBattleMons[battler].status1 & flags && gBattleMons[battler].hp != 0)
+ if (gBattleMons[battler].status1 & flags && IsBattlerAlive(battler))
gBattlescriptCurrInstr = jumpInstr;
else
gBattlescriptCurrInstr = cmd->nextInstr;
@@ -4110,7 +4067,7 @@ static void Cmd_jumpifstatus2(void)
u32 flags = cmd->flags;
const u8 *jumpInstr = cmd->jumpInstr;
- if (gBattleMons[battler].status2 & flags && gBattleMons[battler].hp != 0)
+ if (gBattleMons[battler].status2 & flags && IsBattlerAlive(battler))
gBattlescriptCurrInstr = jumpInstr;
else
gBattlescriptCurrInstr = cmd->nextInstr;
@@ -5109,8 +5066,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;
}
@@ -5155,7 +5112,9 @@ static void PlayAnimation(u32 battler, u8 animId, const u16 *argPtr, const u8 *n
|| animId == B_ANIM_FORM_CHANGE
|| animId == B_ANIM_SUBSTITUTE_FADE
|| animId == B_ANIM_PRIMAL_REVERSION
- || animId == B_ANIM_ULTRA_BURST)
+ || animId == B_ANIM_ULTRA_BURST
+ || animId == B_ANIM_TERA_CHARGE
+ || animId == B_ANIM_TERA_ACTIVATE)
{
BtlController_EmitBattleAnimation(battler, BUFFER_A, animId, &gDisableStructs[battler], *argPtr);
MarkBattlerForControllerExec(battler);
@@ -5170,7 +5129,8 @@ static void PlayAnimation(u32 battler, u8 animId, const u16 *argPtr, const u8 *n
|| animId == B_ANIM_SUN_CONTINUES
|| animId == B_ANIM_SANDSTORM_CONTINUES
|| animId == B_ANIM_HAIL_CONTINUES
- || animId == B_ANIM_SNOW_CONTINUES)
+ || animId == B_ANIM_SNOW_CONTINUES
+ || animId == B_ANIM_FOG_CONTINUES)
{
BtlController_EmitBattleAnimation(battler, BUFFER_A, animId, &gDisableStructs[battler], *argPtr);
MarkBattlerForControllerExec(battler);
@@ -5379,9 +5339,19 @@ static bool32 TryKnockOffBattleScript(u32 battlerDef)
gBattleMons[battlerDef].item = 0;
if (gBattleMons[battlerDef].ability != ABILITY_GORILLA_TACTICS)
gBattleStruct->choicedMove[battlerDef] = 0;
- gWishFutureKnock.knockedOffMons[side] |= gBitTable[gBattlerPartyIndexes[battlerDef]];
CheckSetUnburden(battlerDef);
+ // In Gen 5+, Knock Off removes the target's item rather than rendering it unusable.
+ if (B_KNOCK_OFF_REMOVAL >= GEN_5)
+ {
+ BtlController_EmitSetMonData(battlerDef, BUFFER_A, REQUEST_HELDITEM_BATTLE, 0, sizeof(gBattleMons[battlerDef].item), &gBattleMons[battlerDef].item);
+ MarkBattlerForControllerExec(battlerDef);
+ }
+ else
+ {
+ gWishFutureKnock.knockedOffMons[side] |= gBitTable[gBattlerPartyIndexes[battlerDef]];
+ }
+
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_KnockedOff;
}
@@ -5390,14 +5360,14 @@ static bool32 TryKnockOffBattleScript(u32 battlerDef)
return FALSE;
}
-#define SYMBIOSIS_CHECK(battler, ally) \
+#define SYMBIOSIS_CHECK(battler, ally) \
GetBattlerAbility(ally) == ABILITY_SYMBIOSIS \
&& gBattleMons[battler].item == ITEM_NONE \
&& gBattleMons[ally].item != ITEM_NONE \
&& CanBattlerGetOrLoseItem(battler, gBattleMons[ally].item) \
&& CanBattlerGetOrLoseItem(ally, gBattleMons[ally].item) \
- && gBattleMons[battler].hp != 0 \
- && gBattleMons[ally].hp != 0
+ && IsBattlerAlive(battler) \
+ && IsBattlerAlive(ally)
static u32 GetNextTarget(u32 moveTarget, bool32 excludeCurrent)
{
@@ -5530,7 +5500,7 @@ static void Cmd_moveend(void)
break;
case MOVEEND_RAGE: // rage check
if (gBattleMons[gBattlerTarget].status2 & STATUS2_RAGE
- && gBattleMons[gBattlerTarget].hp != 0
+ && IsBattlerAlive(gBattlerTarget)
&& gBattlerAttacker != gBattlerTarget
&& GetBattlerSide(gBattlerAttacker) != GetBattlerSide(gBattlerTarget)
&& !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
@@ -5547,7 +5517,7 @@ static void Cmd_moveend(void)
break;
case MOVEEND_DEFROST: // defrosting check
if (gBattleMons[gBattlerTarget].status1 & STATUS1_FREEZE
- && gBattleMons[gBattlerTarget].hp != 0
+ && IsBattlerAlive(gBattlerTarget)
&& gBattlerAttacker != gBattlerTarget
&& (moveType == TYPE_FIRE || CanBurnHitThaw(gCurrentMove))
&& !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT))
@@ -5560,7 +5530,7 @@ static void Cmd_moveend(void)
effect = TRUE;
}
if (gBattleMons[gBattlerTarget].status1 & STATUS1_FROSTBITE
- && gBattleMons[gBattlerTarget].hp != 0
+ && IsBattlerAlive(gBattlerTarget)
&& gBattlerAttacker != gBattlerTarget
&& gMovesInfo[originallyUsedMove].thawsUser
&& !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT))
@@ -5741,10 +5711,10 @@ static void Cmd_moveend(void)
gBattlescriptCurrInstr = BattleScript_TargetBurnHeal;
break;
case STATUS1_FREEZE:
- gBattlescriptCurrInstr = BattleScript_FrostbiteHealedViaFireMove;
+ gBattlescriptCurrInstr = BattleScript_DefrostedViaFireMove;
break;
case STATUS1_FROSTBITE:
- gBattlescriptCurrInstr = BattleScript_DefrostedViaFireMove;
+ gBattlescriptCurrInstr = BattleScript_FrostbiteHealedViaFireMove;
break;
case STATUS1_POISON:
case STATUS1_TOXIC_POISON:
@@ -5854,7 +5824,9 @@ static void Cmd_moveend(void)
gBattleScripting.moveendState++;
break;
case MOVEEND_UPDATE_LAST_MOVES:
- if (gMoveResultFlags & (MOVE_RESULT_FAILED | MOVE_RESULT_DOESNT_AFFECT_FOE))
+ if ((gMoveResultFlags & (MOVE_RESULT_FAILED | MOVE_RESULT_DOESNT_AFFECT_FOE))
+ || (gBattleMons[gBattlerAttacker].status2 & (STATUS2_FLINCHED))
+ || gProtectStructs[gBattlerAttacker].prlzImmobility)
gBattleStruct->lastMoveFailed |= gBitTable[gBattlerAttacker];
else
gBattleStruct->lastMoveFailed &= ~(gBitTable[gBattlerAttacker]);
@@ -5890,7 +5862,7 @@ static void Cmd_moveend(void)
gLastPrintedMoves[gBattlerAttacker] = gChosenMove;
gLastUsedMove = gCurrentMove;
if (IsMaxMove(gCurrentMove))
- gBattleStruct->dynamax.lastUsedBaseMove = gBattleStruct->dynamax.baseMove[gBattlerAttacker];
+ gBattleStruct->dynamax.lastUsedBaseMove = gBattleStruct->dynamax.baseMoves[gBattlerAttacker];
}
}
if (!(gAbsentBattlerFlags & gBitTable[gBattlerAttacker])
@@ -6035,10 +6007,11 @@ static void Cmd_moveend(void)
}
else
{
- if (gCurrentMove == MOVE_DRAGON_DARTS)
- {
- // TODO
- }
+ if (gMovesInfo[gCurrentMove].effect == EFFECT_DRAGON_DARTS
+ && gBattleStruct->moveTarget[gBattlerAttacker] == gBattlerTarget // Haven't already changed targets
+ && CanTargetPartner(gBattlerAttacker, gBattlerTarget)
+ && !TargetFullyImmuneToCurrMove(gBattlerAttacker, BATTLE_PARTNER(gBattlerTarget)))
+ gBattlerTarget = BATTLE_PARTNER(gBattlerTarget); // Target the partner in doubles for second hit.
if (gBattleMons[gBattlerAttacker].hp
&& gBattleMons[gBattlerTarget].hp
@@ -6221,7 +6194,8 @@ static void Cmd_moveend(void)
&& CanBattlerSwitch(gBattlerAttacker))
{
gLastUsedItem = gBattleMons[battler].item;
- gBattleStruct->savedBattlerTarget = gBattleScripting.battler = battler; // Battler with red card
+ SaveBattlerTarget(battler); // save battler with red card
+ gBattleScripting.battler = battler;
gEffectBattler = gBattlerAttacker;
if (gMovesInfo[gCurrentMove].effect == EFFECT_HIT_ESCAPE)
gBattlescriptCurrInstr = BattleScript_MoveEnd; // Prevent user switch-in selection
@@ -6284,7 +6258,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)
{
@@ -6294,9 +6268,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)
@@ -6305,7 +6278,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)
{
@@ -6377,7 +6350,7 @@ static void Cmd_moveend(void)
case MOVEEND_SET_EVOLUTION_TRACKER:
// If the Pokémon needs to keep track of move usage for its evolutions, do it
if (originallyUsedMove != MOVE_NONE)
- TryUpdateEvolutionTracker(EVO_LEVEL_MOVE_TWENTY_TIMES, 1, originallyUsedMove);
+ TryUpdateEvolutionTracker(EVO_USE_MOVE_TWENTY_TIMES, 1, originallyUsedMove);
gBattleScripting.moveendState++;
break;
case MOVEEND_CLEAR_BITS: // Clear/Set bits for things like using a move for all targets and all hits.
@@ -6392,6 +6365,25 @@ static void Cmd_moveend(void)
&& (gBattleMons[gBattlerAttacker].status2 & STATUS2_LOCK_CONFUSE) != STATUS2_LOCK_CONFUSE_TURN(1)) // And won't end this turn
CancelMultiTurnMoves(gBattlerAttacker); // Cancel it
+
+
+ if (gBattleStruct->savedAttackerCount > 0)
+ {
+ // #if TESTING
+ // Test_ExitWithResult(TEST_RESULT_ERROR, "savedAttackerCount is greater than 0! More calls to SaveBattlerAttacker than RestoreBattlerAttacker!");
+ // #else
+ DebugPrintfLevel(MGBA_LOG_WARN, "savedAttackerCount is greater than 0! More calls to SaveBattlerAttacker than RestoreBattlerAttacker!");
+ // #endif
+ }
+ if (gBattleStruct->savedTargetCount > 0)
+ {
+ // #if TESTING
+ // Test_ExitWithResult(TEST_RESULT_ERROR, "savedTargetCount is greater than 0! More calls to SaveBattlerTarget than RestoreBattlerTarget!");
+ // #else
+ DebugPrintfLevel(MGBA_LOG_WARN, "savedTargetCount is greater than 0! More calls to SaveBattlerTarget than RestoreBattlerTarget!");
+ // #endif
+ }
+
gBattleStruct->targetsDone[gBattlerAttacker] = 0;
gProtectStructs[gBattlerAttacker].targetAffected = FALSE;
gProtectStructs[gBattlerAttacker].shellTrap = FALSE;
@@ -6402,16 +6394,19 @@ static void Cmd_moveend(void)
gSpecialStatuses[gBattlerAttacker].preventLifeOrbDamage = 0;
gSpecialStatuses[gBattlerTarget].berryReduced = FALSE;
gBattleScripting.moveEffect = 0;
- // clear attacker z move data
- gBattleStruct->zmove.active = FALSE;
- gBattleStruct->zmove.toBeUsed[gBattlerAttacker] = MOVE_NONE;
- gBattleStruct->zmove.effect = EFFECT_HIT;
gBattleStruct->hitSwitchTargetFailed = FALSE;
gBattleStruct->isAtkCancelerForCalledMove = FALSE;
gBattleStruct->swapDamageCategory = FALSE;
+ gBattleStruct->categoryOverride = FALSE;
gBattleStruct->bouncedMoveIsUsed = FALSE;
gBattleStruct->enduredDamage = 0;
gBattleStruct->additionalEffectsCounter = 0;
+ gBattleStruct->poisonPuppeteerConfusion = FALSE;
+ gBattleStruct->fickleBeamBoosted = FALSE;
+ if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_Z_MOVE)
+ SetActiveGimmick(gBattlerAttacker, GIMMICK_NONE);
+ gBattleStruct->distortedTypeMatchups = 0;
+ memset(gQueuedStatBoosts, 0, sizeof(gQueuedStatBoosts));
gBattleScripting.moveendState++;
break;
case MOVEEND_COUNT:
@@ -6492,7 +6487,7 @@ static void Cmd_switchindataupdate(void)
monData[i] = gBattleResources->bufferB[battler][4 + i];
// Edge case: the sent out pokemon has 0 HP. This should never happen.
- if (gBattleMons[battler].hp == 0)
+ if (!IsBattlerAlive(battler))
{
// If it's a test, mark it as invalid.
if (gTestRunnerEnabled)
@@ -6520,10 +6515,19 @@ static void Cmd_switchindataupdate(void)
}
}
- 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)
+ {
+ u32 side = GetBattlerSide(battler);
+ u32 partyIndex = gBattlerPartyIndexes[battler];
+ if (TestRunner_Battle_GetForcedAbility(side, partyIndex))
+ gBattleMons[battler].ability = gBattleStruct->overwrittenAbilities[battler] = TestRunner_Battle_GetForcedAbility(side, partyIndex);
+ }
+ #endif
// check knocked off item
i = GetBattlerSide(battler);
@@ -6545,7 +6549,7 @@ static void Cmd_switchindataupdate(void)
if (gBattleTypeFlags & BATTLE_TYPE_PALACE
&& gBattleMons[battler].maxHP / 2 >= gBattleMons[battler].hp
- && gBattleMons[battler].hp != 0
+ && IsBattlerAlive(battler)
&& !(gBattleMons[battler].status1 & STATUS1_SLEEP))
{
gBattleStruct->palaceFlags |= gBitTable[battler];
@@ -7288,19 +7292,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;
@@ -8067,6 +8084,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);
@@ -8442,7 +8460,7 @@ static void Cmd_hpthresholds(void)
if (result == 0)
result = 1;
- if (result > 69 || gBattleMons[opposingBattler].hp == 0)
+ if (result > 69 || !IsBattlerAlive(opposingBattler))
gBattleStruct->hpScale = 0;
else if (result > 39)
gBattleStruct->hpScale = 1;
@@ -8529,6 +8547,30 @@ bool32 CanUseLastResort(u8 battler)
return (knownMovesCount >= 2 && usedMovesCount >= knownMovesCount - 1);
}
+static void RemoveAllWeather(void)
+{
+ gWishFutureKnock.weatherDuration = 0;
+
+ if (gBattleWeather & B_WEATHER_RAIN)
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEATHER_END_RAIN;
+ else if(gBattleWeather & B_WEATHER_SANDSTORM)
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEATHER_END_SANDSTORM;
+ else if(gBattleWeather & B_WEATHER_SUN)
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEATHER_END_SUN;
+ else if(gBattleWeather & B_WEATHER_HAIL)
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEATHER_END_HAIL;
+ else if(gBattleWeather & B_WEATHER_STRONG_WINDS)
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEATHER_END_STRONG_WINDS;
+ else if(gBattleWeather & B_WEATHER_SNOW)
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEATHER_END_SNOW;
+ else if(gBattleWeather & B_WEATHER_FOG)
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEATHER_END_FOG;
+ else
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEATHER_END_COUNT; // failsafe
+
+ gBattleWeather = 0; // remove the weather
+}
+
static void RemoveAllTerrains(void)
{
gFieldTimers.terrainTimer = 0;
@@ -8594,6 +8636,13 @@ static bool32 TryDefogClear(u32 battlerAtk, bool32 clear)
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;
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_FogEnded_Ret;
+ return TRUE;
+ }
if (B_DEFOG_CLEARS_TERRAIN >= GEN_8 && (gFieldStatuses & STATUS_FIELD_TERRAIN_ANY))
{
RemoveAllTerrains();
@@ -8803,7 +8852,6 @@ static void HandleScriptMegaPrimalBurst(u32 caseId, u32 battler, u32 type)
{
struct Pokemon *party = GetBattlerParty(battler);
struct Pokemon *mon = &party[gBattlerPartyIndexes[battler]];
- u32 position = GetBattlerPosition(battler);
u32 side = GetBattlerSide(battler);
// Change species.
@@ -8831,9 +8879,9 @@ static void HandleScriptMegaPrimalBurst(u32 caseId, u32 battler, u32 type)
if (side == B_SIDE_OPPONENT)
SetBattlerShadowSpriteCallback(battler, gBattleMons[battler].species);
if (type == HANDLE_TYPE_MEGA_EVOLUTION)
- gBattleStruct->mega.alreadyEvolved[position] = TRUE;
+ SetGimmickAsActivated(battler, GIMMICK_MEGA);
if (type == HANDLE_TYPE_ULTRA_BURST)
- gBattleStruct->burst.alreadyBursted[position] = TRUE;
+ SetGimmickAsActivated(battler, GIMMICK_ULTRA_BURST);
}
}
@@ -9261,8 +9309,8 @@ static void Cmd_various(void)
VARIOUS_ARGS();
if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_DOUBLE))
&& gBattleTypeFlags & BATTLE_TYPE_TRAINER
- && gBattleMons[0].hp != 0
- && gBattleMons[1].hp != 0)
+ && IsBattlerAlive(B_POSITION_PLAYER_LEFT)
+ && IsBattlerAlive(B_POSITION_OPPONENT_LEFT))
{
gHitMarker &= ~HITMARKER_PLAYER_FAINTED;
}
@@ -9276,12 +9324,12 @@ static void Cmd_various(void)
gBattleScripting.battler = battler = gBattleCommunication[1];
if (!(gBattleStruct->palaceFlags & gBitTable[battler])
&& gBattleMons[battler].maxHP / 2 >= gBattleMons[battler].hp
- && gBattleMons[battler].hp != 0
+ && IsBattlerAlive(battler)
&& !(gBattleMons[battler].status1 & STATUS1_SLEEP))
{
gBattleStruct->palaceFlags |= gBitTable[battler];
gBattleCommunication[0] = TRUE;
- gBattleCommunication[MULTISTRING_CHOOSER] = sBattlePalaceNatureToFlavorTextId[GetNatureFromPersonality(gBattleMons[battler].personality)];
+ gBattleCommunication[MULTISTRING_CHOOSER] = gNaturesInfo[GetNatureFromPersonality(gBattleMons[battler].personality)].battlePalaceFlavorText;
}
break;
}
@@ -9376,7 +9424,7 @@ static void Cmd_various(void)
{
VARIOUS_ARGS();
battler = 1;
- if (gBattleMons[battler].hp != 0)
+ if (IsBattlerAlive(battler))
{
BtlController_EmitReturnMonToBall(battler, BUFFER_A, FALSE);
MarkBattlerForControllerExec(battler);
@@ -9389,7 +9437,7 @@ static void Cmd_various(void)
if (gBattlersCount > 3)
{
battler = 3;
- if (gBattleMons[battler].hp != 0)
+ if (IsBattlerAlive(battler))
{
BtlController_EmitReturnMonToBall(battler, BUFFER_A, FALSE);
MarkBattlerForControllerExec(battler);
@@ -9468,18 +9516,6 @@ static void Cmd_various(void)
AbilityBattleEffects(ABILITYEFFECT_OPPORTUNIST, battler, 0, 0, 0);
return;
}
- case VARIOUS_SAVE_TARGET:
- {
- VARIOUS_ARGS();
- gBattleStruct->savedBattlerTarget = gBattlerTarget;
- break;
- }
- case VARIOUS_RESTORE_TARGET:
- {
- VARIOUS_ARGS();
- gBattlerTarget = gBattleStruct->savedBattlerTarget;
- break;
- }
case VARIOUS_INSTANT_HP_DROP:
{
VARIOUS_ARGS();
@@ -9707,7 +9743,7 @@ static void Cmd_various(void)
else
{
if (gBattleMons[gBattlerTarget].ability == gBattleMons[gBattlerAttacker].ability
- || IsDynamaxed(gBattlerTarget))
+ || (GetActiveGimmick(gBattlerTarget) == GIMMICK_DYNAMAX))
{
gBattlescriptCurrInstr = cmd->failInstr;
}
@@ -9746,7 +9782,15 @@ static void Cmd_various(void)
gBattlescriptCurrInstr = cmd->failInstr;
else
{
- gCalledMove = move;
+ if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_Z_MOVE && !IS_MOVE_STATUS(move))
+ {
+ gBattleStruct->zmove.baseMoves[gBattlerAttacker] = move;
+ gCalledMove = GetTypeBasedZMove(move);
+ }
+ else
+ {
+ gCalledMove = move;
+ }
gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED;
gBattlerTarget = GetMoveTarget(gCalledMove, NO_TARGET_OVERRIDE);
gStatuses3[gBattlerAttacker] |= STATUS3_ME_FIRST;
@@ -9780,8 +9824,9 @@ static void Cmd_various(void)
case VARIOUS_TRY_SOAK:
{
VARIOUS_ARGS(const u8 *failInstr);
- if (GetBattlerType(gBattlerTarget, 0) == gMovesInfo[gCurrentMove].type
- && GetBattlerType(gBattlerTarget, 1) == gMovesInfo[gCurrentMove].type)
+ if ((GetBattlerType(gBattlerTarget, 0, FALSE) == gMovesInfo[gCurrentMove].type
+ && GetBattlerType(gBattlerTarget, 1, FALSE) == gMovesInfo[gCurrentMove].type)
+ || GetActiveGimmick(gBattlerTarget) == GIMMICK_TERA)
{
gBattlescriptCurrInstr = cmd->failInstr;
}
@@ -9878,7 +9923,9 @@ static void Cmd_various(void)
if (move == MOVE_NONE || move == MOVE_UNAVAILABLE || MoveHasAdditionalEffectSelf(move, MOVE_EFFECT_RECHARGE)
|| gMovesInfo[move].instructBanned
|| gBattleMoveEffects[gMovesInfo[move].effect].twoTurnEffect
- || IsDynamaxed(gBattlerTarget))
+ || (GetActiveGimmick(gBattlerTarget) == GIMMICK_DYNAMAX)
+ || IsZMove(move)
+ || IsMaxMove(move))
{
gBattlescriptCurrInstr = cmd->failInstr;
}
@@ -9960,7 +10007,7 @@ static void Cmd_various(void)
gBattleCommunication[MULTISTRING_CHOOSER] = 3;
else if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_SLEEP) && CanBeSlept(gBattlerTarget, targetAbility))
gBattleCommunication[MULTISTRING_CHOOSER] = 4;
- else if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_FROSTBITE) && CanBeFrozen(gBattlerTarget))
+ else if ((gBattleMons[gBattlerAttacker].status1 & STATUS1_FROSTBITE) && CanGetFrostbite(gBattlerTarget))
gBattleCommunication[MULTISTRING_CHOOSER] = 5;
else
{
@@ -10115,13 +10162,13 @@ static void Cmd_various(void)
case VARIOUS_TRY_THIRD_TYPE:
{
VARIOUS_ARGS(const u8 *failInstr);
- if (IS_BATTLER_OF_TYPE(battler, gMovesInfo[gCurrentMove].argument))
+ if (IS_BATTLER_OF_TYPE(battler, gMovesInfo[gCurrentMove].argument) || GetActiveGimmick(battler) == GIMMICK_TERA)
{
gBattlescriptCurrInstr = cmd->failInstr;
}
else
{
- gBattleMons[battler].type3 = gMovesInfo[gCurrentMove].argument;
+ gBattleMons[battler].types[2] = gMovesInfo[gCurrentMove].argument;
PREPARE_TYPE_BUFFER(gBattleTextBuff1, gMovesInfo[gCurrentMove].argument);
gBattlescriptCurrInstr = cmd->nextInstr;
}
@@ -11108,10 +11155,10 @@ static void SetMoveForMirrorMove(u32 move)
{
gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED;
// Edge case, we used Z Mirror Move, got the stat boost and now need to use the Z-move
- if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] && !IS_MOVE_STATUS(move))
+ if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_Z_MOVE && !IS_MOVE_STATUS(move))
{
- gCurrentMove = gBattleStruct->zmove.chosenZMove = GetTypeBasedZMove(move, gBattlerAttacker);
- QueueZMove(gBattlerAttacker, move);
+ gBattleStruct->zmove.baseMoves[gBattlerAttacker] = move;
+ gCurrentMove = GetTypeBasedZMove(move);
}
else
{
@@ -11159,19 +11206,39 @@ static void Cmd_trymirrormove(void)
}
}
-static void Cmd_setrain(void)
+static void Cmd_setfieldweather(void)
{
- CMD_ARGS();
+ CMD_ARGS(u8 weather);
+
+ u8 weather = cmd->weather;
- if (!TryChangeBattleWeather(gBattlerAttacker, ENUM_WEATHER_RAIN, FALSE))
+ if (!TryChangeBattleWeather(gBattlerAttacker, weather, FALSE))
{
gMoveResultFlags |= MOVE_RESULT_MISSED;
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEATHER_FAILED;
+ gBattlescriptCurrInstr = cmd->nextInstr;
+ return;
}
- else
+
+ switch (weather)
{
+ case ENUM_WEATHER_RAIN:
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_RAIN;
+ break;
+ case ENUM_WEATHER_SUN:
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_SUNLIGHT;
+ break;
+ case ENUM_WEATHER_SANDSTORM:
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_SANDSTORM;
+ break;
+ case ENUM_WEATHER_HAIL:
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_HAIL;
+ break;
+ case ENUM_WEATHER_SNOW:
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_SNOW;
+ break;
}
+
gBattlescriptCurrInstr = cmd->nextInstr;
}
@@ -11421,7 +11488,7 @@ static void Cmd_stockpiletobasedamage(void)
if (gBattleCommunication[MISS_TYPE] != B_MSG_PROTECTED)
gBattleScripting.animTurn = gDisableStructs[gBattlerAttacker].stockpileCounter;
- if (!(gSpecialStatuses[gBattlerAttacker].parentalBondState == PARENTAL_BOND_1ST_HIT && gBattleMons[gBattlerTarget].hp != 0))
+ if (!(gSpecialStatuses[gBattlerAttacker].parentalBondState == PARENTAL_BOND_1ST_HIT && IsBattlerAlive(gBattlerTarget)))
{
gBattleStruct->moveEffect2 = MOVE_EFFECT_STOCKPILE_WORE_OFF;
}
@@ -11634,17 +11701,18 @@ static u32 ChangeStatBuffs(s8 statValue, u32 statId, u32 flags, const u8 *BS_ptr
}
else
{
- BattleScriptPush(BS_ptr);
gBattleScripting.battler = battler;
if (battlerHoldEffect == HOLD_EFFECT_CLEAR_AMULET)
{
gLastUsedItem = gBattleMons[battler].item;
+ BattleScriptPush(BS_ptr);
gBattlescriptCurrInstr = BattleScript_ItemNoStatLoss;
RecordItemEffectBattle(battler, HOLD_EFFECT_CLEAR_AMULET);
}
else
{
gBattlerAbility = battler;
+ BattleScriptPush(BS_ptr);
gBattlescriptCurrInstr = BattleScript_AbilityNoStatLoss;
gLastUsedAbility = battlerAbility;
RecordAbilityBattle(battler, gLastUsedAbility);
@@ -11704,16 +11772,6 @@ static u32 ChangeStatBuffs(s8 statValue, u32 statId, u32 flags, const u8 *BS_ptr
}
return STAT_CHANGE_DIDNT_WORK;
}
- else if (battlerAbility == ABILITY_SHIELD_DUST && flags == 0)
- {
- RecordAbilityBattle(battler, ABILITY_SHIELD_DUST);
- return STAT_CHANGE_DIDNT_WORK;
- }
- else if (flags == 0 && battlerHoldEffect == HOLD_EFFECT_COVERT_CLOAK)
- {
- RecordItemEffectBattle(battler, HOLD_EFFECT_COVERT_CLOAK);
- return STAT_CHANGE_DIDNT_WORK;
- }
else // try to decrease
{
statValue = -GET_STAT_BUFF_VALUE(statValue);
@@ -11787,27 +11845,35 @@ static u32 ChangeStatBuffs(s8 statValue, u32 statId, u32 flags, const u8 *BS_ptr
}
else
{
+ u32 statIncrease;
+ if ((statValue + gBattleMons[battler].statStages[statId]) > MAX_STAT_STAGE)
+ statIncrease = MAX_STAT_STAGE - gBattleMons[battler].statStages[statId];
+ else
+ statIncrease = statValue;
+
gBattleCommunication[MULTISTRING_CHOOSER] = (gBattlerTarget == battler);
gProtectStructs[battler].statRaised = TRUE;
- // check mirror herb
+ // Check Mirror Herb / Opportunist
for (index = 0; index < gBattlersCount; index++)
{
if (GetBattlerSide(index) == GetBattlerSide(battler))
continue; // Only triggers on opposing side
+
if (GetBattlerAbility(index) == ABILITY_OPPORTUNIST
- && gProtectStructs[battler].activateOpportunist == 0) // don't activate opportunist on other mon's opportunist raises
+ && gProtectStructs[battler].activateOpportunist == 0) // don't activate opportunist on other mon's opportunist raises
{
gProtectStructs[index].activateOpportunist = 2; // set stats to copy
- gQueuedStatBoosts[index].stats |= (1 << (statId - 1)); // -1 to start at atk
- gQueuedStatBoosts[index].statChanges[statId - 1] += statValue; // cumulative in case of multiple opponent boosts
}
- else if (GetBattlerHoldEffect(index, TRUE) == HOLD_EFFECT_MIRROR_HERB
- && gBattleMons[index].statStages[statId] < MAX_STAT_STAGE)
+ if (GetBattlerHoldEffect(index, TRUE) == HOLD_EFFECT_MIRROR_HERB)
{
gProtectStructs[index].eatMirrorHerb = 1;
+ }
+
+ if (gProtectStructs[index].activateOpportunist == 2 || gProtectStructs[index].eatMirrorHerb == 1)
+ {
gQueuedStatBoosts[index].stats |= (1 << (statId - 1)); // -1 to start at atk
- gQueuedStatBoosts[index].statChanges[statId - 1] = statValue;
+ gQueuedStatBoosts[index].statChanges[statId - 1] += statIncrease;
}
}
}
@@ -12130,6 +12196,12 @@ static void Cmd_tryconversiontypechange(void)
u8 moveChecked = 0;
u8 moveType = 0;
+ if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_TERA)
+ {
+ gBattlescriptCurrInstr = cmd->failInstr;
+ return;
+ }
+
if (B_UPDATED_CONVERSION >= GEN_6)
{
// Changes user's type to its first move's type
@@ -12174,9 +12246,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;
}
@@ -12202,7 +12274,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);
@@ -12268,7 +12340,7 @@ static void Cmd_tryKO(void)
u16 targetAbility = GetBattlerAbility(gBattlerTarget);
// Dynamaxed Pokemon cannot be hit by OHKO moves.
- if (IsDynamaxed(gBattlerTarget))
+ if ((GetActiveGimmick(gBattlerTarget) == GIMMICK_DYNAMAX))
{
gMoveResultFlags |= MOVE_RESULT_MISSED;
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_KO_UNAFFECTED;
@@ -12364,90 +12436,12 @@ static void Cmd_damagetohalftargethp(void)
gBattlescriptCurrInstr = cmd->nextInstr;
}
-static void Cmd_setsandstorm(void)
+static void Cmd_unused_95(void)
{
- CMD_ARGS();
-
- if (!TryChangeBattleWeather(gBattlerAttacker, ENUM_WEATHER_SANDSTORM, FALSE))
- {
- gMoveResultFlags |= MOVE_RESULT_MISSED;
- gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEATHER_FAILED;
- }
- else
- {
- gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_SANDSTORM;
- }
- gBattlescriptCurrInstr = cmd->nextInstr;
}
-static void Cmd_weatherdamage(void)
+static void Cmd_unused_96(void)
{
- CMD_ARGS();
-
- u32 ability = GetBattlerAbility(gBattlerAttacker);
-
- gBattleMoveDamage = 0;
- if (IsBattlerAlive(gBattlerAttacker) && WEATHER_HAS_EFFECT && ability != ABILITY_MAGIC_GUARD)
- {
- if (gBattleWeather & B_WEATHER_SANDSTORM)
- {
- if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_ROCK)
- && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GROUND)
- && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_STEEL)
- && ability != ABILITY_SAND_VEIL
- && ability != ABILITY_SAND_FORCE
- && ability != ABILITY_SAND_RUSH
- && ability != ABILITY_OVERCOAT
- && !(gStatuses3[gBattlerAttacker] & (STATUS3_UNDERGROUND | STATUS3_UNDERWATER))
- && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_SAFETY_GOGGLES)
- {
- gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / 16;
- if (gBattleMoveDamage == 0)
- gBattleMoveDamage = 1;
- }
- }
- if (gBattleWeather & B_WEATHER_HAIL)
- {
- if (ability == ABILITY_ICE_BODY
- && !(gStatuses3[gBattlerAttacker] & (STATUS3_UNDERGROUND | STATUS3_UNDERWATER))
- && !BATTLER_MAX_HP(gBattlerAttacker)
- && !(gStatuses3[gBattlerAttacker] & STATUS3_HEAL_BLOCK))
- {
- gBattlerAbility = gBattlerAttacker;
- gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / 16;
- if (gBattleMoveDamage == 0)
- gBattleMoveDamage = 1;
- gBattleMoveDamage *= -1;
- }
- else if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_ICE)
- && ability != ABILITY_SNOW_CLOAK
- && ability != ABILITY_OVERCOAT
- && ability != ABILITY_ICE_BODY
- && !(gStatuses3[gBattlerAttacker] & (STATUS3_UNDERGROUND | STATUS3_UNDERWATER))
- && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_SAFETY_GOGGLES)
- {
- gBattleMoveDamage = GetNonDynamaxMaxHP(gBattlerAttacker) / 16;
- if (gBattleMoveDamage == 0)
- gBattleMoveDamage = 1;
- }
- }
- if (gBattleWeather & B_WEATHER_SNOW)
- {
- if (ability == ABILITY_ICE_BODY
- && !(gStatuses3[gBattlerAttacker] & (STATUS3_UNDERGROUND | STATUS3_UNDERWATER))
- && !BATTLER_MAX_HP(gBattlerAttacker)
- && !(gStatuses3[gBattlerAttacker] & STATUS3_HEAL_BLOCK))
- {
- gBattlerAbility = gBattlerAttacker;
- gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 16;
- if (gBattleMoveDamage == 0)
- gBattleMoveDamage = 1;
- gBattleMoveDamage *= -1;
- }
- }
- }
-
- gBattlescriptCurrInstr = cmd->nextInstr;
}
static void Cmd_tryinfatuating(void)
@@ -12833,11 +12827,11 @@ static void Cmd_trysetencore(void)
s32 i;
- if (IsMaxMove(gLastMoves[gBattlerTarget]) && !IsDynamaxed(gBattlerTarget))
+ if (IsMaxMove(gLastMoves[gBattlerTarget]) && !(GetActiveGimmick(gBattlerTarget) == GIMMICK_DYNAMAX))
{
for (i = 0; i < MAX_MON_MOVES; i++)
{
- if (gBattleMons[gBattlerTarget].moves[i] == gBattleStruct->dynamax.baseMove[gBattlerTarget])
+ if (gBattleMons[gBattlerTarget].moves[i] == gBattleStruct->dynamax.baseMoves[gBattlerTarget])
break;
}
}
@@ -12916,6 +12910,14 @@ static void Cmd_settypetorandomresistance(void)
{
gBattlescriptCurrInstr = cmd->failInstr;
}
+ else if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_TERA)
+ {
+ gBattlescriptCurrInstr = cmd->failInstr;
+ }
+ else if (gLastHitByType[gBattlerAttacker] == TYPE_STELLAR || gLastHitByType[gBattlerAttacker] == TYPE_MYSTERY)
+ {
+ gBattlescriptCurrInstr = cmd->failInstr;
+ }
else
{
u32 i, resistTypes = 0;
@@ -13033,7 +13035,7 @@ static void Cmd_trychoosesleeptalkmove(void)
}
}
- unusableMovesBits = CheckMoveLimitations(gBattlerAttacker, unusableMovesBits, ~MOVE_LIMITATION_PP);
+ unusableMovesBits = CheckMoveLimitations(gBattlerAttacker, unusableMovesBits, ~(MOVE_LIMITATION_PP | MOVE_LIMITATION_CHOICE_ITEM));
if (unusableMovesBits == ALL_MOVES_MASK) // all 4 moves cannot be chosen
{
gBattlescriptCurrInstr = cmd->nextInstr;
@@ -13047,7 +13049,15 @@ static void Cmd_trychoosesleeptalkmove(void)
movePosition = MOD(Random(), MAX_MON_MOVES);
} while ((gBitTable[movePosition] & unusableMovesBits));
- gCalledMove = gBattleMons[gBattlerAttacker].moves[movePosition];
+ if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_Z_MOVE && !IS_MOVE_STATUS(gBattleMons[gBattlerAttacker].moves[movePosition]))
+ {
+ gBattleStruct->zmove.baseMoves[gBattlerAttacker] = gBattleMons[gBattlerAttacker].moves[movePosition];
+ gCalledMove = GetTypeBasedZMove(gBattleMons[gBattlerAttacker].moves[movePosition]);
+ }
+ else
+ {
+ gCalledMove = gBattleMons[gBattlerAttacker].moves[movePosition];
+ }
gCurrMovePos = movePosition;
gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED;
gBattlerTarget = GetMoveTarget(gCalledMove, NO_TARGET_OVERRIDE);
@@ -13116,7 +13126,7 @@ static void Cmd_tryspiteppreduce(void)
{
for (i = 0; i < MAX_MON_MOVES; i++)
{
- if (gBattleStruct->dynamax.baseMove[gBattlerTarget] == gBattleMons[gBattlerTarget].moves[i])
+ if (gBattleStruct->dynamax.baseMoves[gBattlerTarget] == gBattleMons[gBattlerTarget].moves[i])
break;
}
}
@@ -13177,7 +13187,7 @@ static void Cmd_healpartystatus(void)
CMD_ARGS();
u32 zero = 0;
- u32 battler;
+ u32 partner = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerAttacker)));
u8 toHeal = 0;
if (gCurrentMove == MOVE_HEAL_BELL)
@@ -13187,7 +13197,8 @@ static void Cmd_healpartystatus(void)
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_BELL;
- if (GetBattlerAbility(gBattlerAttacker) != ABILITY_SOUNDPROOF)
+ if (GetBattlerAbility(gBattlerAttacker) != ABILITY_SOUNDPROOF
+ || B_HEAL_BELL_SOUNDPROOF == GEN_5 || B_HEAL_BELL_SOUNDPROOF >= GEN_8)
{
gBattleMons[gBattlerAttacker].status1 = 0;
gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_NIGHTMARE;
@@ -13198,19 +13209,18 @@ static void Cmd_healpartystatus(void)
gBattleCommunication[MULTISTRING_CHOOSER] |= B_MSG_BELL_SOUNDPROOF_ATTACKER;
}
- battler = gBattleScripting.battler = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerAttacker)));
+ gBattleScripting.battler = partner;
- if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE
- && !(gAbsentBattlerFlags & gBitTable[battler]))
+ if (IsBattlerAlive(partner))
{
- if (GetBattlerAbility(battler) != ABILITY_SOUNDPROOF)
+ if (GetBattlerAbility(partner) != ABILITY_SOUNDPROOF || B_HEAL_BELL_SOUNDPROOF == GEN_5)
{
- gBattleMons[battler].status1 = 0;
- gBattleMons[battler].status2 &= ~STATUS2_NIGHTMARE;
+ gBattleMons[partner].status1 = 0;
+ gBattleMons[partner].status2 &= ~STATUS2_NIGHTMARE;
}
else
{
- RecordAbilityBattle(battler, gBattleMons[battler].ability);
+ RecordAbilityBattle(partner, gBattleMons[partner].ability);
gBattleCommunication[MULTISTRING_CHOOSER] |= B_MSG_BELL_SOUNDPROOF_PARTNER;
}
}
@@ -13225,15 +13235,29 @@ static void Cmd_healpartystatus(void)
if (species != SPECIES_NONE && species != SPECIES_EGG)
{
u16 ability;
-
- if (gBattlerPartyIndexes[gBattlerAttacker] == i)
+ bool32 isAttacker = gBattlerPartyIndexes[gBattlerAttacker] == i;
+ bool32 isDoublesPartner = gBattlerPartyIndexes[partner] == i && IsBattlerAlive(partner);
+
+ if (B_HEAL_BELL_SOUNDPROOF == GEN_5 || (isAttacker && B_HEAL_BELL_SOUNDPROOF >= GEN_8))
+ ability = ABILITY_NONE;
+ else if (B_HEAL_BELL_SOUNDPROOF > GEN_5 && !isAttacker && !isDoublesPartner)
+ ability = ABILITY_NONE;
+ else if (isAttacker)
ability = GetBattlerAbility(gBattlerAttacker);
- else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE
- && gBattlerPartyIndexes[battler] == i
- && !(gAbsentBattlerFlags & gBitTable[battler]))
- ability = GetBattlerAbility(battler);
+ else if (isDoublesPartner)
+ ability = GetBattlerAbility(partner);
else
+ {
ability = GetAbilityBySpecies(species, abilityNum);
+ #if TESTING
+ if (gTestRunnerEnabled)
+ {
+ u32 side = GetBattlerSide(gBattlerAttacker);
+ if (TestRunner_Battle_GetForcedAbility(side, i))
+ ability = TestRunner_Battle_GetForcedAbility(side, i);
+ }
+ #endif
+ }
if (ability != ABILITY_SOUNDPROOF)
toHeal |= (1 << i);
@@ -13248,12 +13272,11 @@ static void Cmd_healpartystatus(void)
gBattleMons[gBattlerAttacker].status1 = 0;
gBattleMons[gBattlerAttacker].status2 &= ~STATUS2_NIGHTMARE;
- battler = GetBattlerAtPosition(BATTLE_PARTNER(GetBattlerPosition(gBattlerAttacker)));
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE
- && !(gAbsentBattlerFlags & gBitTable[battler]))
+ && !(gAbsentBattlerFlags & gBitTable[partner]))
{
- gBattleMons[battler].status1 = 0;
- gBattleMons[battler].status2 &= ~STATUS2_NIGHTMARE;
+ gBattleMons[partner].status1 = 0;
+ gBattleMons[partner].status2 &= ~STATUS2_NIGHTMARE;
}
}
@@ -13399,7 +13422,7 @@ static void Cmd_handlefurycutter(void)
max = 5;
if (gDisableStructs[gBattlerAttacker].furyCutterCounter < max
- && gSpecialStatuses[gBattlerAttacker].parentalBondState != PARENTAL_BOND_1ST_HIT) // Don't increment counter on first hit
+ && gSpecialStatuses[gBattlerAttacker].parentalBondState != PARENTAL_BOND_2ND_HIT) // Don't increment counter on second hit
gDisableStructs[gBattlerAttacker].furyCutterCounter++;
gBattlescriptCurrInstr = cmd->nextInstr;
@@ -13594,21 +13617,8 @@ static void Cmd_jumpifnopursuitswitchdmg(void)
}
}
-static void Cmd_setsunny(void)
+static void Cmd_unused_bb(void)
{
- CMD_ARGS();
-
- if (!TryChangeBattleWeather(gBattlerAttacker, ENUM_WEATHER_SUN, FALSE))
- {
- gMoveResultFlags |= MOVE_RESULT_MISSED;
- gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEATHER_FAILED;
- }
- else
- {
- gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_SUNLIGHT;
- }
-
- gBattlescriptCurrInstr = cmd->nextInstr;
}
// Belly Drum, Fillet Away
@@ -13827,7 +13837,7 @@ static void Cmd_trydobeatup(void)
CMD_ARGS(const u8 *endInstr, const u8 *failInstr);
struct Pokemon *party = GetBattlerParty(gBattlerAttacker);
- if (gBattleMons[gBattlerTarget].hp == 0)
+ if (!IsBattlerAlive(gBattlerTarget))
{
gBattlescriptCurrInstr = cmd->endInstr;
}
@@ -13925,21 +13935,8 @@ static void Cmd_setminimize(void)
gBattlescriptCurrInstr = cmd->nextInstr;
}
-static void Cmd_sethail(void)
+static void Cmd_unused_c8(void)
{
- CMD_ARGS();
-
- if (!TryChangeBattleWeather(gBattlerAttacker, ENUM_WEATHER_HAIL, FALSE))
- {
- gMoveResultFlags |= MOVE_RESULT_MISSED;
- gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEATHER_FAILED;
- }
- else
- {
- gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_HAIL;
- }
-
- gBattlescriptCurrInstr = cmd->nextInstr;
}
static void Cmd_trymemento(void)
@@ -14001,25 +13998,33 @@ static void Cmd_callterrainattack(void)
CMD_ARGS();
gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED;
- gCurrentMove = GetNaturePowerMove();
+ gCurrentMove = GetNaturePowerMove(gBattlerAttacker);
gBattlerTarget = GetMoveTarget(gCurrentMove, NO_TARGET_OVERRIDE);
BattleScriptPush(GET_MOVE_BATTLESCRIPT(gCurrentMove));
gBattlescriptCurrInstr = cmd->nextInstr;
}
-u16 GetNaturePowerMove(void)
+u32 GetNaturePowerMove(u32 battler)
{
+ u32 move = sNaturePowerMoves[gBattleTerrain];
if (gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN)
- return MOVE_MOONBLAST;
+ move = MOVE_MOONBLAST;
else if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN)
- return MOVE_THUNDERBOLT;
+ move = MOVE_THUNDERBOLT;
else if (gFieldStatuses & STATUS_FIELD_GRASSY_TERRAIN)
- return MOVE_ENERGY_BALL;
+ move = MOVE_ENERGY_BALL;
else if (gFieldStatuses & STATUS_FIELD_PSYCHIC_TERRAIN)
- return MOVE_PSYCHIC;
+ move = MOVE_PSYCHIC;
else if (sNaturePowerMoves[gBattleTerrain] == MOVE_NONE)
- return MOVE_TRI_ATTACK;
- return sNaturePowerMoves[gBattleTerrain];
+ move = MOVE_TRI_ATTACK;
+
+ if (GetActiveGimmick(battler) == GIMMICK_Z_MOVE)
+ {
+ gBattleStruct->zmove.baseMoves[gBattlerAttacker] = move;
+ move = GetTypeBasedZMove(move);
+ }
+
+ return move;
}
// Refresh
@@ -14045,7 +14050,7 @@ static void Cmd_settorment(void)
CMD_ARGS(const u8 *failInstr);
if (gBattleMons[gBattlerTarget].status2 & STATUS2_TORMENT
- || IsDynamaxed(gBattlerTarget))
+ || (GetActiveGimmick(gBattlerTarget) == GIMMICK_DYNAMAX))
{
gBattlescriptCurrInstr = cmd->failInstr;
}
@@ -14434,7 +14439,7 @@ static void Cmd_tryswapabilities(void)
}
else
{
- if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT || IsDynamaxed(gBattlerTarget))
+ if (gMoveResultFlags & MOVE_RESULT_NO_EFFECT || (GetActiveGimmick(gBattlerTarget) == GIMMICK_DYNAMAX))
{
gBattlescriptCurrInstr = cmd->failInstr;
}
@@ -14665,7 +14670,7 @@ static void Cmd_jumpifhasnohp(void)
u32 battler = GetBattlerForBattleScript(cmd->battler);
- if (gBattleMons[battler].hp == 0)
+ if (!IsBattlerAlive(battler))
gBattlescriptCurrInstr = cmd->jumpInstr;
else
gBattlescriptCurrInstr = cmd->nextInstr;
@@ -14863,7 +14868,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;
@@ -14912,7 +14920,7 @@ static void Cmd_settypetoterrain(void)
break;
}
- if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, terrainType))
+ if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, terrainType) && GetActiveGimmick(gBattlerAttacker) != GIMMICK_TERA)
{
SET_BATTLER_TYPE(gBattlerAttacker, terrainType);
PREPARE_TYPE_BUFFER(gBattleTextBuff1, terrainType);
@@ -15675,17 +15683,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;
}
@@ -15735,6 +15752,75 @@ static void Cmd_callnative(void)
}
// Callnative Funcs
+
+static void SaveBattlerTarget(u32 battler)
+{
+ if (gBattleStruct->savedTargetCount < NELEMS(gBattleStruct->savedBattlerTarget))
+ gBattleStruct->savedBattlerTarget[gBattleStruct->savedTargetCount++] = battler;
+ else
+ DebugPrintfLevel(MGBA_LOG_WARN, "Attempting to exceed savedBattlerTarget array size!");
+}
+
+static void SaveBattlerAttacker(u32 battler)
+{
+ if (gBattleStruct->savedAttackerCount < NELEMS(gBattleStruct->savedBattlerAttacker))
+ gBattleStruct->savedBattlerAttacker[gBattleStruct->savedAttackerCount++] = battler;
+ else
+ DebugPrintfLevel(MGBA_LOG_WARN, "Attempting to exceed savedBattlerAttacker array size!");
+}
+
+void BS_SaveTarget(void)
+{
+ NATIVE_ARGS();
+ SaveBattlerTarget(gBattlerTarget);
+ gBattlescriptCurrInstr = cmd->nextInstr;
+}
+
+void BS_RestoreTarget(void)
+{
+ NATIVE_ARGS();
+ if (gBattleStruct->savedTargetCount > 0)
+ {
+ gBattleStruct->savedTargetCount--;
+ gBattlerTarget = gBattleStruct->savedBattlerTarget[gBattleStruct->savedTargetCount];
+ }
+ else
+ {
+ // #if TESTING
+ // Test_ExitWithResult(TEST_RESULT_ERROR, "BS_RestoreTarget attempting to restore an empty target!");
+ // #else
+ DebugPrintfLevel(MGBA_LOG_WARN, "BS_RestoreTarget attempting to restore an empty target!");
+ // #endif
+ }
+ gBattlescriptCurrInstr = cmd->nextInstr;
+}
+
+void BS_SaveAttacker(void)
+{
+ NATIVE_ARGS();
+ SaveBattlerAttacker(gBattlerAttacker);
+ gBattlescriptCurrInstr = cmd->nextInstr;
+}
+
+void BS_RestoreAttacker(void)
+{
+ NATIVE_ARGS();
+ if (gBattleStruct->savedAttackerCount > 0)
+ {
+ gBattleStruct->savedAttackerCount--;
+ gBattlerAttacker = gBattleStruct->savedBattlerAttacker[gBattleStruct->savedAttackerCount];
+ }
+ else
+ {
+ // #if TESTING
+ // Test_ExitWithResult(TEST_RESULT_ERROR, "BS_RestoreAttacker attempting to restore an empty attacker!");
+ // #else
+ DebugPrintfLevel(MGBA_LOG_WARN, "BS_RestoreAttacker attempting to restore an empty attacker!");
+ // #endif
+ }
+ gBattlescriptCurrInstr = cmd->nextInstr;
+}
+
void BS_CalcMetalBurstDmg(void)
{
NATIVE_ARGS(const u8 *failInstr);
@@ -15928,7 +16014,7 @@ void BS_CheckParentalBondCounter(void)
NATIVE_ARGS(u8 counter, const u8 *jumpInstr);
// Some effects should only happen on the first or second strike of Parental Bond,
// so a way to check this in battle scripts is useful
- if (gSpecialStatuses[gBattlerAttacker].parentalBondState == cmd->counter && gBattleMons[gBattlerTarget].hp != 0)
+ if (gSpecialStatuses[gBattlerAttacker].parentalBondState == cmd->counter && IsBattlerAlive(gBattlerTarget))
gBattlescriptCurrInstr = cmd->jumpInstr;
else
gBattlescriptCurrInstr = cmd->nextInstr;
@@ -16289,23 +16375,6 @@ void BS_TryRevertWeatherForm(void)
gBattlescriptCurrInstr = cmd->nextInstr;
}
-void BS_SetSnow(void)
-{
- NATIVE_ARGS();
-
- if (!TryChangeBattleWeather(gBattlerAttacker, ENUM_WEATHER_SNOW, FALSE))
- {
- gMoveResultFlags |= MOVE_RESULT_MISSED;
- gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_WEATHER_FAILED;
-
- }
- else
- {
- gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_STARTED_SNOW;
- }
- gBattlescriptCurrInstr = cmd->nextInstr;
-}
-
void BS_HandleMegaEvolution(void)
{
NATIVE_ARGS(u8 battler, u8 caseId);
@@ -16464,44 +16533,48 @@ void BS_TryReflectType(void)
{
NATIVE_ARGS(const u8 *failInstr);
u16 targetBaseSpecies = GET_BASE_SPECIES_ID(gBattleMons[gBattlerTarget].species);
- u8 targetType1 = GetBattlerType(gBattlerTarget, 0);
- u8 targetType2 = GetBattlerType(gBattlerTarget, 1);
- u8 targetType3 = GetBattlerType(gBattlerTarget, 2);
+ u8 targetType1 = GetBattlerType(gBattlerTarget, 0, FALSE);
+ u8 targetType2 = GetBattlerType(gBattlerTarget, 1, FALSE);
+ u8 targetType3 = GetBattlerType(gBattlerTarget, 2, FALSE);
if (targetBaseSpecies == SPECIES_ARCEUS || targetBaseSpecies == SPECIES_SILVALLY)
{
gBattlescriptCurrInstr = cmd->failInstr;
}
+ else if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_TERA)
+ {
+ gBattlescriptCurrInstr = cmd->failInstr;
+ }
else if (IS_BATTLER_TYPELESS(gBattlerTarget))
{
gBattlescriptCurrInstr = cmd->failInstr;
}
else if (targetType1 == TYPE_MYSTERY && targetType2 == TYPE_MYSTERY && targetType3 != TYPE_MYSTERY)
{
- gBattleMons[gBattlerAttacker].type1 = TYPE_NORMAL;
- gBattleMons[gBattlerAttacker].type2 = TYPE_NORMAL;
- gBattleMons[gBattlerAttacker].type3 = targetType3;
+ 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;
}
}
@@ -16699,9 +16772,8 @@ void BS_TryTrainerSlideDynamaxMsg(void)
NATIVE_ARGS();
s32 shouldSlide;
- if ((shouldSlide = ShouldDoTrainerSlide(gBattlerAttacker, TRAINER_SLIDE_DYNAMAX)))
+ if ((shouldSlide = ShouldDoTrainerSlide(gBattleScripting.battler, TRAINER_SLIDE_DYNAMAX)))
{
- gBattleScripting.battler = gBattlerAttacker;
BattleScriptPush(cmd->nextInstr);
gBattlescriptCurrInstr = (shouldSlide == 1 ? BattleScript_TrainerASlideMsgRet : BattleScript_TrainerBSlideMsgRet);
}
@@ -16742,10 +16814,19 @@ void BS_TryCopycat(void)
}
else
{
- if (IsMaxMove(gLastUsedMove))
+ if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_Z_MOVE && !IS_MOVE_STATUS(gLastUsedMove))
+ {
+ gBattleStruct->zmove.baseMoves[gBattlerAttacker] = gLastUsedMove;
+ gCalledMove = GetTypeBasedZMove(gLastUsedMove);
+ }
+ else if (IsMaxMove(gLastUsedMove))
+ {
gCalledMove = gBattleStruct->dynamax.lastUsedBaseMove;
+ }
else
+ {
gCalledMove = gLastUsedMove;
+ }
gHitMarker &= ~HITMARKER_ATTACKSTRING_PRINTED;
gBattlerTarget = GetMoveTarget(gCalledMove, NO_TARGET_OVERRIDE);
@@ -16833,7 +16914,9 @@ void BS_AllySwitchFailChance(void)
void BS_SetPhotonGeyserCategory(void)
{
NATIVE_ARGS();
- gBattleStruct->swapDamageCategory = (GetCategoryBasedOnStats(gBattlerAttacker) == DAMAGE_CATEGORY_PHYSICAL);
+ if (!((gMovesInfo[gCurrentMove].effect == EFFECT_TERA_BLAST && GetActiveGimmick(gBattlerAttacker) != GIMMICK_TERA)
+ || (gMovesInfo[gCurrentMove].effect == EFFECT_TERA_STARSTORM && GetActiveGimmick(gBattlerAttacker) != GIMMICK_TERA && gBattleMons[gBattlerAttacker].species == SPECIES_TERAPAGOS_STELLAR)))
+ gBattleStruct->swapDamageCategory = (GetCategoryBasedOnStats(gBattlerAttacker) != gMovesInfo[gCurrentMove].category);
gBattlescriptCurrInstr = cmd->nextInstr;
}
@@ -16868,21 +16951,26 @@ static void TryUpdateEvolutionTracker(u32 evolutionMethod, u32 upAmount, u16 use
if (evolutions[i].method == evolutionMethod)
{
- // We only have 9 bits to use
- u16 val = min(511, GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattlerAttacker]], MON_DATA_EVOLUTION_TRACKER) + upAmount);
+ // We only have 10 bits to use
+ u16 val = min(1023, GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattlerAttacker]], MON_DATA_EVOLUTION_TRACKER) + upAmount);
// Reset progress if you faint for the recoil method.
switch (evolutionMethod)
{
- case EVO_LEVEL_MOVE_TWENTY_TIMES:
+ case EVO_USE_MOVE_TWENTY_TIMES:
if (evolutions[i].param == usedMove)
SetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattlerAttacker]], MON_DATA_EVOLUTION_TRACKER, &val);
break;
- case EVO_LEVEL_RECOIL_DAMAGE_MALE:
- case EVO_LEVEL_RECOIL_DAMAGE_FEMALE:
+ case EVO_RECOIL_DAMAGE_MALE:
+ case EVO_RECOIL_DAMAGE_FEMALE:
if (gBattleMons[gBattlerAttacker].hp == 0)
val = 0;
SetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattlerAttacker]], MON_DATA_EVOLUTION_TRACKER, &val);
break;
+ case EVO_DEFEAT_THREE_WITH_ITEM:
+ if (GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_SPECIES) == GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattlerAttacker]], MON_DATA_SPECIES)
+ && GetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_HELD_ITEM) == evolutions[i].param)
+ SetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattlerAttacker]], MON_DATA_EVOLUTION_TRACKER, &val);
+ break;
}
return;
}
@@ -16898,16 +16986,23 @@ void BS_TryUpdateRecoilTracker(void)
switch(gender)
{
case MON_MALE:
- TryUpdateEvolutionTracker(EVO_LEVEL_RECOIL_DAMAGE_MALE, gBattleMoveDamage, MOVE_NONE);
+ TryUpdateEvolutionTracker(EVO_RECOIL_DAMAGE_MALE, gBattleMoveDamage, MOVE_NONE);
break;
case MON_FEMALE:
- TryUpdateEvolutionTracker(EVO_LEVEL_RECOIL_DAMAGE_FEMALE, gBattleMoveDamage, MOVE_NONE);
+ TryUpdateEvolutionTracker(EVO_RECOIL_DAMAGE_FEMALE, gBattleMoveDamage, MOVE_NONE);
break;
}
gBattlescriptCurrInstr = cmd->nextInstr;
}
+void BS_TryUpdateLeadersCrestTracker(void)
+{
+ NATIVE_ARGS();
+ TryUpdateEvolutionTracker(EVO_DEFEAT_THREE_WITH_ITEM, 1, MOVE_NONE);
+ gBattlescriptCurrInstr = cmd->nextInstr;
+}
+
void BS_TryTidyUp(void)
{
NATIVE_ARGS(u8 clear, const u8 *jumpInstr);
@@ -17006,3 +17101,78 @@ void BS_TryQuash(void)
}
gBattlescriptCurrInstr = cmd->nextInstr;
}
+
+void BS_CopyFoesStatIncrease(void)
+{
+ NATIVE_ARGS(u8 battler, const u8 *jumpInstr);
+ u32 stat = 0;
+ u32 battler = GetBattlerForBattleScript(cmd->battler);
+
+ if (gQueuedStatBoosts[battler].stats == 0)
+ {
+ for (stat = 0; stat < (NUM_BATTLE_STATS - 1); stat++)
+ {
+ if (gQueuedStatBoosts[battler].statChanges[stat] != 0)
+ gQueuedStatBoosts[battler].stats |= (1 << stat);
+ }
+ gBattlescriptCurrInstr = cmd->jumpInstr;
+ return;
+ }
+
+ for (stat = 0; stat < (NUM_BATTLE_STATS - 1); stat++)
+ {
+ if (gQueuedStatBoosts[battler].stats & (1 << stat))
+ {
+ if (gQueuedStatBoosts[battler].statChanges[stat] <= -1)
+ SET_STATCHANGER(stat + 1, abs(gQueuedStatBoosts[battler].statChanges[stat]), TRUE);
+ else
+ SET_STATCHANGER(stat + 1, gQueuedStatBoosts[battler].statChanges[stat], FALSE);
+
+ gQueuedStatBoosts[battler].stats &= ~(1 << stat);
+ gBattlerTarget = battler;
+ gBattlescriptCurrInstr = cmd->nextInstr;
+ return;
+ }
+ }
+ gBattlescriptCurrInstr = cmd->jumpInstr;
+}
+
+void BS_RemoveWeather(void)
+{
+ NATIVE_ARGS();
+ RemoveAllWeather();
+ gBattlescriptCurrInstr = cmd->nextInstr;
+}
+
+void BS_ApplyTerastallization(void)
+{
+ NATIVE_ARGS();
+ ApplyBattlerVisualsForTeraAnim(gBattlerAttacker);
+ gBattlescriptCurrInstr = cmd->nextInstr;
+}
+
+void BS_DamageToQuarterTargetHP(void)
+{
+ NATIVE_ARGS();
+ gBattleMoveDamage = (3 * GetNonDynamaxHP(gBattlerTarget)) / 4;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+
+ 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;
+ }
+}
diff --git a/src/battle_setup.c b/src/battle_setup.c
index e29264967db5..2852dbfb818c 100644
--- a/src/battle_setup.c
+++ b/src/battle_setup.c
@@ -254,6 +254,23 @@ static const struct TrainerBattleParameter sTrainerBContinueScriptBattleParams[]
{&sTrainerBattleEndScript, TRAINER_PARAM_LOAD_SCRIPT_RET_ADDR},
};
+// two trainers, each with a defeat speech
+static const struct TrainerBattleParameter sTrainerTwoTrainerBattleParams[] =
+{
+ {&sTrainerBattleMode, TRAINER_PARAM_LOAD_VAL_8BIT},
+ {&sTrainerObjectEventLocalId, TRAINER_PARAM_CLEAR_VAL_16BIT},
+ {&gTrainerBattleOpponent_A, TRAINER_PARAM_LOAD_VAL_16BIT},
+ {&sTrainerAIntroSpeech, TRAINER_PARAM_CLEAR_VAL_32BIT},
+ {&sTrainerADefeatSpeech, TRAINER_PARAM_LOAD_VAL_32BIT},
+ {&gTrainerBattleOpponent_B, TRAINER_PARAM_LOAD_VAL_16BIT},
+ {&sTrainerBIntroSpeech, TRAINER_PARAM_CLEAR_VAL_32BIT},
+ {&sTrainerBDefeatSpeech, TRAINER_PARAM_LOAD_VAL_32BIT},
+ {&sTrainerVictorySpeech, TRAINER_PARAM_CLEAR_VAL_32BIT},
+ {&sTrainerCannotBattleSpeech, TRAINER_PARAM_CLEAR_VAL_32BIT},
+ {&sTrainerBBattleScriptRetAddr, TRAINER_PARAM_CLEAR_VAL_32BIT},
+ {&sTrainerBattleEndScript, TRAINER_PARAM_LOAD_SCRIPT_RET_ADDR},
+};
+
#define REMATCH(trainer1, trainer2, trainer3, trainer4, trainer5, map) \
{ \
.trainerIds = {trainer1, trainer2, trainer3, trainer4, trainer5}, \
@@ -1233,6 +1250,11 @@ const u8 *BattleSetup_ConfigureTrainerBattle(const u8 *data)
gTrainerBattleOpponent_B = LocalIdToHillTrainerId(gSpecialVar_LastTalked);
}
return EventScript_TryDoNormalTrainerBattle;
+ case TRAINER_BATTLE_TWO_TRAINERS_NO_INTRO:
+ gNoOfApproachingTrainers = 2; // set TWO_OPPONENTS gBattleTypeFlags
+ gApproachingTrainerId = 1; // prevent trainer approach
+ TrainerBattleLoadArgs(sTrainerTwoTrainerBattleParams, data);
+ return EventScript_DoNoIntroTrainerBattle;
default:
if (gApproachingTrainerId == 0)
{
@@ -1921,7 +1943,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 c003affebe9f..8c6a94509a67 100644
--- a/src/battle_tent.c
+++ b/src/battle_tent.c
@@ -329,7 +329,7 @@ static void GenerateInitialRentalMons(void)
// Cannot have two same held items.
for (j = firstMonId; j < i + firstMonId; j++)
{
- if (heldItems[j] != 0 && heldItems[j] == gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId])
+ if (heldItems[j] != 0 && heldItems[j] == gFacilityTrainerMons[monSetId].heldItem)
{
if (gFacilityTrainerMons[monSetId].species == currSpecies)
currSpecies = SPECIES_NONE;
@@ -341,7 +341,7 @@ static void GenerateInitialRentalMons(void)
gSaveBlock2Ptr->frontier.rentalMons[i].monId = monSetId;
species[i] = gFacilityTrainerMons[monSetId].species;
- heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[monSetId].itemTableId];
+ heldItems[i] = gFacilityTrainerMons[monSetId].heldItem;
monIds[i] = monSetId;
i++;
}
@@ -411,7 +411,7 @@ static void GenerateOpponentMons(void)
// Ensure held items don't repeat on the opponent's team
for (k = 0; k < i; k++)
{
- if (heldItems[k] != ITEM_NONE && heldItems[k] == gBattleFrontierHeldItems[gFacilityTrainerMons[sRandMonId].itemTableId])
+ if (heldItems[k] != ITEM_NONE && heldItems[k] == gFacilityTrainerMons[sRandMonId].heldItem)
break;
}
if (k != i)
@@ -419,7 +419,7 @@ static void GenerateOpponentMons(void)
// Successful selection
species[i] = gFacilityTrainerMons[sRandMonId].species;
- heldItems[i] = gBattleFrontierHeldItems[gFacilityTrainerMons[sRandMonId].itemTableId];
+ heldItems[i] = gFacilityTrainerMons[sRandMonId].heldItem;
gFrontierTempParty[i] = sRandMonId;
i++;
}
diff --git a/src/battle_terastal.c b/src/battle_terastal.c
new file mode 100644
index 000000000000..a0580a73d210
--- /dev/null
+++ b/src/battle_terastal.c
@@ -0,0 +1,183 @@
+#include "global.h"
+#include "battle.h"
+#include "battle_anim.h"
+#include "battle_controllers.h"
+#include "battle_interface.h"
+#include "battle_terastal.h"
+#include "battle_gimmick.h"
+#include "battle_scripts.h"
+#include "event_data.h"
+#include "item.h"
+#include "palette.h"
+#include "pokemon.h"
+#include "safari_zone.h"
+#include "sprite.h"
+#include "util.h"
+#include "constants/abilities.h"
+#include "constants/hold_effects.h"
+#include "constants/rgb.h"
+
+// Sets flags and variables upon a battler's Terastallization.
+void ActivateTera(u32 battler)
+{
+ u32 side = GetBattlerSide(battler);
+
+ // Set appropriate flags.
+ SetActiveGimmick(battler, GIMMICK_TERA);
+ SetGimmickAsActivated(battler, GIMMICK_TERA);
+
+ // Remove Tera Orb charge.
+ 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)))
+ {
+ FlagClear(B_FLAG_TERA_ORB_CHARGED);
+ }
+
+ // Execute battle script.
+ PREPARE_TYPE_BUFFER(gBattleTextBuff1, GetBattlerTeraType(battler));
+ if (TryBattleFormChange(gBattlerAttacker, FORM_CHANGE_BATTLE_TERASTALLIZATION))
+ BattleScriptExecute(BattleScript_TeraFormChange);
+ else
+ BattleScriptExecute(BattleScript_Terastallization);
+}
+
+// Applies palette blend and enables UI indicator after animation has played
+void ApplyBattlerVisualsForTeraAnim(u32 battler)
+{
+ struct Pokemon *party = GetBattlerParty(battler);
+ u32 index = gBattlerPartyIndexes[battler];
+
+ // Show indicator and do palette blend.
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[battler], &party[index], HEALTHBOX_ALL);
+ BlendPalette(OBJ_PLTT_ID(battler), 16, 8, GetTeraTypeRGB(GetBattlerTeraType(battler)));
+ CpuCopy32(gPlttBufferFaded + OBJ_PLTT_ID(battler), gPlttBufferUnfaded + OBJ_PLTT_ID(battler), PLTT_SIZEOF(16));
+
+ // We apply the animation behind a white screen, so restore the blended color here to avoid a pop
+ BlendPalette(OBJ_PLTT_ID(battler), 16, 16, RGB_WHITEALPHA);
+}
+
+// Returns whether a battler can Terastallize.
+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
+ }
+ else if (!CheckBagHasItem(ITEM_TERA_ORB, 1))
+ {
+ return FALSE;
+ }
+ else if (FlagGet(B_FLAG_TERA_ORB_NO_COST))
+ {
+ // Tera Orb is not depleted, go to HasTrainerUsedGimmick
+ }
+ else if (!FlagGet(B_FLAG_TERA_ORB_CHARGED))
+ {
+ return FALSE;
+ }
+
+ // Check if Trainer has already Terastallized.
+ if (HasTrainerUsedGimmick(battler, GIMMICK_TERA))
+ return FALSE;
+
+ // Check if AI battler is intended to Terastallize.
+ if (!ShouldTrainerBattlerUseGimmick(battler, GIMMICK_TERA))
+ return FALSE;
+
+ // Check if battler has another gimmick active.
+ if (GetActiveGimmick(battler) != GIMMICK_NONE)
+ return FALSE;
+
+ // Check if battler is holding a Z-Crystal or Mega Stone.
+ if (!TESTING && (holdEffect == HOLD_EFFECT_Z_CRYSTAL || holdEffect == HOLD_EFFECT_MEGA_STONE)) // tests make this check already
+ return FALSE;
+
+ // Every check passed!
+ return TRUE;
+}
+
+// Returns a battler's Tera type.
+u32 GetBattlerTeraType(u32 battler)
+{
+ return GetMonData(&GetBattlerParty(battler)[gBattlerPartyIndexes[battler]], MON_DATA_TERA_TYPE);
+}
+
+// Uses up a type's Stellar boost.
+void ExpendTypeStellarBoost(u32 battler, u32 type)
+{
+ if (type < 32 && gBattleMons[battler].species != SPECIES_TERAPAGOS_STELLAR) // avoid OOB access
+ gBattleStruct->stellarBoostFlags[GetBattlerSide(battler)] |= gBitTable[type];
+}
+
+// Checks whether a type's Stellar boost has been expended.
+bool32 IsTypeStellarBoosted(u32 battler, u32 type)
+{
+ if (type < 32) // avoid OOB access
+ return !(gBattleStruct->stellarBoostFlags[GetBattlerSide(battler)] & gBitTable[type]);
+ else
+ return FALSE;
+}
+
+// Returns the STAB power multiplier to use when Terastallized.
+// Power multipliers from Smogon Research thread.
+uq4_12_t GetTeraMultiplier(u32 battler, u32 type)
+{
+ u32 teraType = GetBattlerTeraType(battler);
+ bool32 hasAdaptability = (GetBattlerAbility(battler) == ABILITY_ADAPTABILITY);
+
+ // Safety check.
+ if (GetActiveGimmick(battler) != GIMMICK_TERA)
+ return UQ_4_12(1.0);
+
+ // Stellar-type checks.
+ if (teraType == TYPE_STELLAR)
+ {
+ bool32 shouldBoost = IsTypeStellarBoosted(battler, type);
+ if (IS_BATTLER_OF_BASE_TYPE(battler, type))
+ {
+ if (shouldBoost)
+ return UQ_4_12(2.0);
+ else
+ return UQ_4_12(1.5);
+ }
+ else if (shouldBoost)
+ return UQ_4_12(1.2);
+ else
+ return UQ_4_12(1.0);
+ }
+ // Base and Tera type.
+ if (type == teraType && IS_BATTLER_OF_BASE_TYPE(battler, type))
+ {
+ if (hasAdaptability)
+ return UQ_4_12(2.25);
+ else
+ return UQ_4_12(2.0);
+ }
+ // Base or Tera type only.
+ else if ((type == teraType && !IS_BATTLER_OF_BASE_TYPE(battler, type))
+ || (type != teraType && IS_BATTLER_OF_BASE_TYPE(battler, type)))
+ {
+ if (hasAdaptability)
+ return UQ_4_12(2.0);
+ else
+ return UQ_4_12(1.5);
+ }
+ // Neither base or Tera type.
+ else
+ {
+ return UQ_4_12(1.0);
+ }
+}
+
+u16 GetTeraTypeRGB(u32 type)
+{
+ return gTypesInfo[type].teraTypeRGBValue;
+}
diff --git a/src/battle_tower.c b/src/battle_tower.c
index 79c9de5c0458..51200512f14d 100644
--- a/src/battle_tower.c
+++ b/src/battle_tower.c
@@ -42,7 +42,7 @@
// EWRAM vars.
EWRAM_DATA const struct BattleFrontierTrainer *gFacilityTrainers = NULL;
-EWRAM_DATA const struct FacilityMon *gFacilityTrainerMons = NULL;
+EWRAM_DATA const struct TrainerMon *gFacilityTrainerMons = NULL;
// IWRAM common
u16 gFrontierTempParty[MAX_FRONTIER_PARTY_SIZE];
@@ -81,73 +81,6 @@ static void SetEReaderTrainerChecksum(struct BattleTowerEReaderTrainer *ereaderT
#endif //FREE_BATTLE_TOWER_E_READER
static u8 SetTentPtrsGetLevel(void);
-const u16 gBattleFrontierHeldItems[] =
-{
- [BATTLE_FRONTIER_ITEM_NONE] = ITEM_NONE,
- [BATTLE_FRONTIER_ITEM_KINGS_ROCK] = ITEM_KINGS_ROCK,
- [BATTLE_FRONTIER_ITEM_SITRUS_BERRY] = ITEM_SITRUS_BERRY,
- [BATTLE_FRONTIER_ITEM_ORAN_BERRY] = ITEM_ORAN_BERRY,
- [BATTLE_FRONTIER_ITEM_CHESTO_BERRY] = ITEM_CHESTO_BERRY,
- [BATTLE_FRONTIER_ITEM_HARD_STONE] = ITEM_HARD_STONE,
- [BATTLE_FRONTIER_ITEM_FOCUS_BAND] = ITEM_FOCUS_BAND,
- [BATTLE_FRONTIER_ITEM_PERSIM_BERRY] = ITEM_PERSIM_BERRY,
- [BATTLE_FRONTIER_ITEM_MIRACLE_SEED] = ITEM_MIRACLE_SEED,
- [BATTLE_FRONTIER_ITEM_BERRY_JUICE] = ITEM_BERRY_JUICE,
- [BATTLE_FRONTIER_ITEM_MACHO_BRACE] = ITEM_MACHO_BRACE,
- [BATTLE_FRONTIER_ITEM_SILVER_POWDER] = ITEM_SILVER_POWDER,
- [BATTLE_FRONTIER_ITEM_CHERI_BERRY] = ITEM_CHERI_BERRY,
- [BATTLE_FRONTIER_ITEM_BLACK_GLASSES] = ITEM_BLACK_GLASSES,
- [BATTLE_FRONTIER_ITEM_BLACK_BELT] = ITEM_BLACK_BELT,
- [BATTLE_FRONTIER_ITEM_SOUL_DEW] = ITEM_SOUL_DEW,
- [BATTLE_FRONTIER_ITEM_CHOICE_BAND] = ITEM_CHOICE_BAND,
- [BATTLE_FRONTIER_ITEM_MAGNET] = ITEM_MAGNET,
- [BATTLE_FRONTIER_ITEM_SILK_SCARF] = ITEM_SILK_SCARF,
- [BATTLE_FRONTIER_ITEM_WHITE_HERB] = ITEM_WHITE_HERB,
- [BATTLE_FRONTIER_ITEM_DEEP_SEA_SCALE] = ITEM_DEEP_SEA_SCALE,
- [BATTLE_FRONTIER_ITEM_DEEP_SEA_TOOTH] = ITEM_DEEP_SEA_TOOTH,
- [BATTLE_FRONTIER_ITEM_MYSTIC_WATER] = ITEM_MYSTIC_WATER,
- [BATTLE_FRONTIER_ITEM_SHARP_BEAK] = ITEM_SHARP_BEAK,
- [BATTLE_FRONTIER_ITEM_QUICK_CLAW] = ITEM_QUICK_CLAW,
- [BATTLE_FRONTIER_ITEM_LEFTOVERS] = ITEM_LEFTOVERS,
- [BATTLE_FRONTIER_ITEM_RAWST_BERRY] = ITEM_RAWST_BERRY,
- [BATTLE_FRONTIER_ITEM_LIGHT_BALL] = ITEM_LIGHT_BALL,
- [BATTLE_FRONTIER_ITEM_POISON_BARB] = ITEM_POISON_BARB,
- [BATTLE_FRONTIER_ITEM_NEVER_MELT_ICE] = ITEM_NEVER_MELT_ICE,
- [BATTLE_FRONTIER_ITEM_ASPEAR_BERRY] = ITEM_ASPEAR_BERRY,
- [BATTLE_FRONTIER_ITEM_SPELL_TAG] = ITEM_SPELL_TAG,
- [BATTLE_FRONTIER_ITEM_BRIGHT_POWDER] = ITEM_BRIGHT_POWDER,
- [BATTLE_FRONTIER_ITEM_LEPPA_BERRY] = ITEM_LEPPA_BERRY,
- [BATTLE_FRONTIER_ITEM_SCOPE_LENS] = ITEM_SCOPE_LENS,
- [BATTLE_FRONTIER_ITEM_TWISTED_SPOON] = ITEM_TWISTED_SPOON,
- [BATTLE_FRONTIER_ITEM_METAL_COAT] = ITEM_METAL_COAT,
- [BATTLE_FRONTIER_ITEM_MENTAL_HERB] = ITEM_MENTAL_HERB,
- [BATTLE_FRONTIER_ITEM_CHARCOAL] = ITEM_CHARCOAL,
- [BATTLE_FRONTIER_ITEM_PECHA_BERRY] = ITEM_PECHA_BERRY,
- [BATTLE_FRONTIER_ITEM_SOFT_SAND] = ITEM_SOFT_SAND,
- [BATTLE_FRONTIER_ITEM_LUM_BERRY] = ITEM_LUM_BERRY,
- [BATTLE_FRONTIER_ITEM_DRAGON_SCALE] = ITEM_DRAGON_SCALE,
- [BATTLE_FRONTIER_ITEM_DRAGON_FANG] = ITEM_DRAGON_FANG,
- [BATTLE_FRONTIER_ITEM_IAPAPA_BERRY] = ITEM_IAPAPA_BERRY,
- [BATTLE_FRONTIER_ITEM_WIKI_BERRY] = ITEM_WIKI_BERRY,
- [BATTLE_FRONTIER_ITEM_SEA_INCENSE] = ITEM_SEA_INCENSE,
- [BATTLE_FRONTIER_ITEM_SHELL_BELL] = ITEM_SHELL_BELL,
- [BATTLE_FRONTIER_ITEM_SALAC_BERRY] = ITEM_SALAC_BERRY,
- [BATTLE_FRONTIER_ITEM_LANSAT_BERRY] = ITEM_LANSAT_BERRY,
- [BATTLE_FRONTIER_ITEM_APICOT_BERRY] = ITEM_APICOT_BERRY,
- [BATTLE_FRONTIER_ITEM_STARF_BERRY] = ITEM_STARF_BERRY,
- [BATTLE_FRONTIER_ITEM_LIECHI_BERRY] = ITEM_LIECHI_BERRY,
- [BATTLE_FRONTIER_ITEM_LEEK] = ITEM_LEEK,
- [BATTLE_FRONTIER_ITEM_LAX_INCENSE] = ITEM_LAX_INCENSE,
- [BATTLE_FRONTIER_ITEM_AGUAV_BERRY] = ITEM_AGUAV_BERRY,
- [BATTLE_FRONTIER_ITEM_FIGY_BERRY] = ITEM_FIGY_BERRY,
- [BATTLE_FRONTIER_ITEM_THICK_CLUB] = ITEM_THICK_CLUB,
- [BATTLE_FRONTIER_ITEM_MAGO_BERRY] = ITEM_MAGO_BERRY,
- [BATTLE_FRONTIER_ITEM_METAL_POWDER] = ITEM_METAL_POWDER,
- [BATTLE_FRONTIER_ITEM_PETAYA_BERRY] = ITEM_PETAYA_BERRY,
- [BATTLE_FRONTIER_ITEM_LUCKY_PUNCH] = ITEM_LUCKY_PUNCH,
- [BATTLE_FRONTIER_ITEM_GANLON_BERRY] = ITEM_GANLON_BERRY,
-};
-
#include "data/battle_frontier/battle_frontier_trainer_mons.h"
#include "data/battle_frontier/battle_frontier_trainers.h"
#include "data/battle_frontier/battle_frontier_mons.h"
@@ -210,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,
@@ -244,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,
@@ -766,7 +699,10 @@ static const u8 *const *const sPartnerApprenticeTextTables[NUM_APPRENTICES] =
#include "data/battle_frontier/battle_tent.h"
#include "data/partner_parties.h"
+const struct Trainer gBattlePartners[] =
+{
#include "data/battle_partners.h"
+};
static void (* const sBattleTowerFuncs[])(void) =
{
@@ -1230,11 +1166,11 @@ void SetEReaderTrainerGfxId(void)
SetBattleFacilityTrainerGfxId(TRAINER_EREADER, 0);
}
-u8 GetBattleFacilityTrainerGfxId(u16 trainerId)
+u16 GetBattleFacilityTrainerGfxId(u16 trainerId)
{
u32 i;
u8 facilityClass;
- u8 trainerObjectGfxId;
+ u16 trainerObjectGfxId;
SetFacilityPtrsGetLevel();
#if FREE_BATTLE_TOWER_E_READER == FALSE
@@ -1627,11 +1563,98 @@ static void FillTentTrainerParty(u8 monsCount)
FillTentTrainerParty_(gTrainerBattleOpponent_A, 0, monsCount);
}
+void CreateFacilityMon(const struct TrainerMon *fmon, u16 level, u8 fixedIV, u32 otID, u32 flags, struct Pokemon *dst)
+{
+ u8 ball = (fmon->ball == 0xFF) ? Random() % POKEBALL_COUNT : fmon->ball;
+ u16 move;
+ u32 personality, ability, friendship, j;
+
+ if (fmon->gender == TRAINER_MON_MALE)
+ {
+ personality = GeneratePersonalityForGender(MON_MALE, fmon->species);
+ }
+ else if (fmon->gender == TRAINER_MON_FEMALE)
+ {
+ personality = GeneratePersonalityForGender(MON_FEMALE, fmon->species);
+ }
+
+ ModifyPersonalityForNature(&personality, fmon->nature);
+ CreateMon(dst, fmon->species, level, fixedIV, TRUE, personality, otID, OT_ID_PRESET);
+
+ friendship = MAX_FRIENDSHIP;
+ // Give the chosen Pokémon its specified moves.
+ for (j = 0; j < MAX_MON_MOVES; j++)
+ {
+ move = fmon->moves[j];
+ if (flags & FLAG_FRONTIER_MON_FACTORY && move == MOVE_RETURN)
+ move = MOVE_FRUSTRATION;
+
+ SetMonMoveSlot(dst, move, j);
+ if (gMovesInfo[move].effect == EFFECT_FRUSTRATION)
+ friendship = 0; // Frustration is more powerful the lower the pokemon's friendship is.
+ }
+
+ SetMonData(dst, MON_DATA_FRIENDSHIP, &friendship);
+ SetMonData(dst, MON_DATA_HELD_ITEM, &fmon->heldItem);
+
+ // try to set ability. Otherwise, random of non-hidden as per vanilla
+ if (fmon->ability != ABILITY_NONE)
+ {
+ const struct SpeciesInfo *speciesInfo = &gSpeciesInfo[fmon->species];
+ u32 maxAbilities = ARRAY_COUNT(speciesInfo->abilities);
+ for (ability = 0; ability < maxAbilities; ++ability)
+ {
+ if (speciesInfo->abilities[ability] == fmon->ability)
+ break;
+ }
+ if (ability >= maxAbilities)
+ ability = 0;
+ SetMonData(dst, MON_DATA_ABILITY_NUM, &ability);
+ }
+
+ if (fmon->ev != NULL)
+ {
+ SetMonData(dst, MON_DATA_HP_EV, &(fmon->ev[0]));
+ SetMonData(dst, MON_DATA_ATK_EV, &(fmon->ev[1]));
+ SetMonData(dst, MON_DATA_DEF_EV, &(fmon->ev[2]));
+ SetMonData(dst, MON_DATA_SPATK_EV, &(fmon->ev[3]));
+ SetMonData(dst, MON_DATA_SPDEF_EV, &(fmon->ev[4]));
+ SetMonData(dst, MON_DATA_SPEED_EV, &(fmon->ev[5]));
+ }
+
+ if (fmon->iv)
+ SetMonData(dst, MON_DATA_IVS, &(fmon->iv));
+
+ if (fmon->isShiny)
+ {
+ u32 data = TRUE;
+ SetMonData(dst, MON_DATA_IS_SHINY, &data);
+ }
+ if (fmon->dynamaxLevel > 0)
+ {
+ u32 data = fmon->dynamaxLevel;
+ SetMonData(dst, MON_DATA_DYNAMAX_LEVEL, &data);
+ }
+ if (fmon->gigantamaxFactor)
+ {
+ u32 data = fmon->gigantamaxFactor;
+ SetMonData(dst, MON_DATA_GIGANTAMAX_FACTOR, &data);
+ }
+ if (fmon->teraType)
+ {
+ u32 data = fmon->teraType;
+ SetMonData(dst, MON_DATA_TERA_TYPE, &data);
+ }
+
+
+ SetMonData(dst, MON_DATA_POKEBALL, &ball);
+ CalculateMonStats(dst);
+}
+
static void FillTrainerParty(u16 trainerId, u8 firstMonId, u8 monCount)
{
s32 i, j;
u16 chosenMonIndices[MAX_FRONTIER_PARTY_SIZE];
- u8 friendship = MAX_FRIENDSHIP;
u8 level = SetFacilityPtrsGetLevel();
u8 fixedIV = 0;
u8 bfMonCount;
@@ -1708,7 +1731,7 @@ static void FillTrainerParty(u16 trainerId, u8 firstMonId, u8 monCount)
for (j = 0; j < i + firstMonId; j++)
{
if (GetMonData(&gEnemyParty[j], MON_DATA_HELD_ITEM, NULL) != ITEM_NONE
- && GetMonData(&gEnemyParty[j], MON_DATA_HELD_ITEM, NULL) == gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId])
+ && GetMonData(&gEnemyParty[j], MON_DATA_HELD_ITEM, NULL) == gFacilityTrainerMons[monId].heldItem)
break;
}
if (j != i + firstMonId)
@@ -1727,25 +1750,7 @@ static void FillTrainerParty(u16 trainerId, u8 firstMonId, u8 monCount)
chosenMonIndices[i] = monId;
// Place the chosen Pokémon into the trainer's party.
- CreateMonWithEVSpreadNatureOTID(&gEnemyParty[i + firstMonId],
- gFacilityTrainerMons[monId].species,
- level,
- gFacilityTrainerMons[monId].nature,
- fixedIV,
- gFacilityTrainerMons[monId].evSpread,
- otID);
-
- friendship = MAX_FRIENDSHIP;
- // Give the chosen Pokémon its specified moves.
- for (j = 0; j < MAX_MON_MOVES; j++)
- {
- SetMonMoveSlot(&gEnemyParty[i + firstMonId], gFacilityTrainerMons[monId].moves[j], j);
- if (gMovesInfo[gFacilityTrainerMons[monId].moves[j]].effect == EFFECT_FRUSTRATION)
- friendship = 0; // Frustration is more powerful the lower the pokemon's friendship is.
- }
-
- SetMonData(&gEnemyParty[i + firstMonId], MON_DATA_FRIENDSHIP, &friendship);
- SetMonData(&gEnemyParty[i + firstMonId], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]);
+ CreateFacilityMon(&gFacilityTrainerMons[monId], level, fixedIV, otID, 0, &gEnemyParty[i + firstMonId]);
// The Pokémon was successfully added to the trainer's party, so it's safe to move on to
// the next party slot.
@@ -1822,8 +1827,7 @@ static void FillFactoryTrainerParty(void)
static void FillFactoryFrontierTrainerParty(u16 trainerId, u8 firstMonId)
{
- u8 i, j;
- u8 friendship;
+ u8 i;
u8 level;
u8 fixedIV;
u32 otID;
@@ -1868,27 +1872,15 @@ static void FillFactoryFrontierTrainerParty(u16 trainerId, u8 firstMonId)
for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
{
u16 monId = gFrontierTempParty[i];
- CreateMonWithEVSpreadNatureOTID(&gEnemyParty[firstMonId + i],
- gFacilityTrainerMons[monId].species,
- level,
- gFacilityTrainerMons[monId].nature,
- fixedIV,
- gFacilityTrainerMons[monId].evSpread,
- otID);
-
- friendship = 0;
- for (j = 0; j < MAX_MON_MOVES; j++)
- SetMonMoveAvoidReturn(&gEnemyParty[firstMonId + i], gFacilityTrainerMons[monId].moves[j], j);
-
- SetMonData(&gEnemyParty[firstMonId + i], MON_DATA_FRIENDSHIP, &friendship);
- SetMonData(&gEnemyParty[firstMonId + i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]);
+ CreateFacilityMon(&gFacilityTrainerMons[monId],
+ level, fixedIV, otID, FLAG_FRONTIER_MON_FACTORY,
+ &gEnemyParty[firstMonId + i]);
}
}
static void FillFactoryTentTrainerParty(u16 trainerId, u8 firstMonId)
{
- u8 i, j;
- u8 friendship;
+ u8 i;
u8 level = TENT_MIN_LEVEL;
u8 fixedIV = 0;
u32 otID = T1_READ_32(gSaveBlock2Ptr->playerTrainerId);
@@ -1896,24 +1888,9 @@ static void FillFactoryTentTrainerParty(u16 trainerId, u8 firstMonId)
for (i = 0; i < FRONTIER_PARTY_SIZE; i++)
{
u16 monId = gFrontierTempParty[i];
- CreateMonWithEVSpreadNatureOTID(&gEnemyParty[firstMonId + i],
- gFacilityTrainerMons[monId].species,
- level,
- gFacilityTrainerMons[monId].nature,
- fixedIV,
- gFacilityTrainerMons[monId].evSpread,
- otID);
-
- friendship = 0;
- for (j = 0; j < MAX_MON_MOVES; j++)
- {
- SetMonMoveAvoidReturn(&gEnemyParty[firstMonId + i], gFacilityTrainerMons[monId].moves[j], j);
- if (gMovesInfo[gFacilityTrainerMons[monId].moves[j]].effect == EFFECT_FRUSTRATION)
- friendship = 0;
- }
-
- SetMonData(&gEnemyParty[firstMonId + i], MON_DATA_FRIENDSHIP, &friendship);
- SetMonData(&gEnemyParty[firstMonId + i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]);
+ CreateFacilityMon(&gFacilityTrainerMons[monId],
+ level, fixedIV, otID, 0,
+ &gEnemyParty[firstMonId + i]);
}
}
@@ -2347,7 +2324,7 @@ static void LoadMultiPartnerCandidatesData(void)
while (1)
{
monId = GetRandomFrontierMonFromSet(trainerId);
- if (j % 2 != 0 && gFacilityTrainerMons[gSaveBlock2Ptr->frontier.trainerIds[r10 - 1]].itemTableId == gFacilityTrainerMons[monId].itemTableId)
+ if (j % 2 != 0 && gFacilityTrainerMons[gSaveBlock2Ptr->frontier.trainerIds[r10 - 1]].heldItem == gFacilityTrainerMons[monId].heldItem)
continue;
for (k = 8; k < r10; k++)
@@ -2711,7 +2688,7 @@ static void SetTowerInterviewData(void)
GetBattleTowerTrainerLanguage(&gSaveBlock2Ptr->frontier.towerInterview.opponentLanguage, gTrainerBattleOpponent_A);
gSaveBlock2Ptr->frontier.towerInterview.opponentSpecies = GetMonData(&gEnemyParty[gBattlerPartyIndexes[1]], MON_DATA_SPECIES, NULL);
gSaveBlock2Ptr->frontier.towerInterview.playerSpecies = GetMonData(&gPlayerParty[gBattlerPartyIndexes[0]], MON_DATA_SPECIES, NULL);
- for (i = 0; i < POKEMON_NAME_LENGTH + 1; i++)
+ for (i = 0; i < VANILLA_POKEMON_NAME_LENGTH + 1; i++)
gSaveBlock2Ptr->frontier.towerInterview.opponentMonNickname[i] = gBattleMons[0].nickname[i];
gSaveBlock2Ptr->frontier.towerBattleOutcome = gBattleOutcome;
}
@@ -3016,7 +2993,6 @@ static void FillPartnerParty(u16 trainerId)
s32 i, j, k;
u32 firstIdPart = 0, secondIdPart = 0, thirdIdPart = 0;
u32 ivs, level, personality;
- u32 friendship;
u16 monId;
u32 otID;
u8 trainerName[(PLAYER_NAME_LENGTH * 3) + 1];
@@ -3121,22 +3097,7 @@ static void FillPartnerParty(u16 trainerId)
for (i = 0; i < FRONTIER_MULTI_PARTY_SIZE; i++)
{
monId = gSaveBlock2Ptr->frontier.trainerIds[i + 18];
- CreateMonWithEVSpreadNatureOTID(&gPlayerParty[MULTI_PARTY_SIZE + i],
- gFacilityTrainerMons[monId].species,
- level,
- gFacilityTrainerMons[monId].nature,
- ivs,
- gFacilityTrainerMons[monId].evSpread,
- otID);
- friendship = MAX_FRIENDSHIP;
- for (j = 0; j < MAX_MON_MOVES; j++)
- {
- SetMonMoveSlot(&gPlayerParty[MULTI_PARTY_SIZE + i], gFacilityTrainerMons[monId].moves[j], j);
- if (gMovesInfo[gFacilityTrainerMons[monId].moves[j]].effect == EFFECT_FRUSTRATION)
- friendship = 0;
- }
- SetMonData(&gPlayerParty[MULTI_PARTY_SIZE + i], MON_DATA_FRIENDSHIP, &friendship);
- SetMonData(&gPlayerParty[MULTI_PARTY_SIZE + i], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]);
+ CreateFacilityMon(&gFacilityTrainerMons[monId], level, ivs, otID, 0, &gPlayerParty[MULTI_PARTY_SIZE + i]);
for (j = 0; j < PLAYER_NAME_LENGTH + 1; j++)
trainerName[j] = gFacilityTrainers[trainerId].trainerName[j];
SetMonData(&gPlayerParty[MULTI_PARTY_SIZE + i], MON_DATA_OT_NAME, &trainerName);
@@ -3496,7 +3457,6 @@ static void FillTentTrainerParty_(u16 trainerId, u8 firstMonId, u8 monCount)
{
s32 i, j;
u16 chosenMonIndices[MAX_FRONTIER_PARTY_SIZE];
- u8 friendship;
u8 level = SetTentPtrsGetLevel();
u8 fixedIV = 0;
u8 bfMonCount;
@@ -3535,7 +3495,7 @@ static void FillTentTrainerParty_(u16 trainerId, u8 firstMonId, u8 monCount)
for (j = 0; j < i + firstMonId; j++)
{
if (GetMonData(&gEnemyParty[j], MON_DATA_HELD_ITEM, NULL) != ITEM_NONE
- && GetMonData(&gEnemyParty[j], MON_DATA_HELD_ITEM, NULL) == gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId])
+ && GetMonData(&gEnemyParty[j], MON_DATA_HELD_ITEM, NULL) == gFacilityTrainerMons[monId].heldItem)
break;
}
if (j != i + firstMonId)
@@ -3552,27 +3512,9 @@ static void FillTentTrainerParty_(u16 trainerId, u8 firstMonId, u8 monCount)
continue;
chosenMonIndices[i] = monId;
-
- // Place the chosen Pokémon into the trainer's party.
- CreateMonWithEVSpreadNatureOTID(&gEnemyParty[i + firstMonId],
- gFacilityTrainerMons[monId].species,
- level,
- gFacilityTrainerMons[monId].nature,
- fixedIV,
- gFacilityTrainerMons[monId].evSpread,
- otID);
-
- friendship = MAX_FRIENDSHIP;
- // Give the chosen Pokémon its specified moves.
- for (j = 0; j < MAX_MON_MOVES; j++)
- {
- SetMonMoveSlot(&gEnemyParty[i + firstMonId], gFacilityTrainerMons[monId].moves[j], j);
- if (gMovesInfo[gFacilityTrainerMons[monId].moves[j]].effect == EFFECT_FRUSTRATION)
- friendship = 0; // Frustration is more powerful the lower the pokemon's friendship is.
- }
-
- SetMonData(&gEnemyParty[i + firstMonId], MON_DATA_FRIENDSHIP, &friendship);
- SetMonData(&gEnemyParty[i + firstMonId], MON_DATA_HELD_ITEM, &gBattleFrontierHeldItems[gFacilityTrainerMons[monId].itemTableId]);
+ CreateFacilityMon(&gFacilityTrainerMons[monId],
+ level, fixedIV, otID, 0,
+ &gEnemyParty[i + firstMonId]);
// The Pokémon was successfully added to the trainer's party, so it's safe to move on to
// the next party slot.
@@ -3580,9 +3522,9 @@ static void FillTentTrainerParty_(u16 trainerId, u8 firstMonId, u8 monCount)
}
}
-u8 FacilityClassToGraphicsId(u8 facilityClass)
+u16 FacilityClassToGraphicsId(u8 facilityClass)
{
- u8 trainerObjectGfxId;
+ u16 trainerObjectGfxId;
u8 i;
// Search male classes.
diff --git a/src/battle_transition.c b/src/battle_transition.c
index 3e11ccb43e47..b2b295e16e71 100644
--- a/src/battle_transition.c
+++ b/src/battle_transition.c
@@ -212,7 +212,6 @@ static bool8 AngledWipes_TryEnd(struct Task *);
static bool8 AngledWipes_StartNext(struct Task *);
static bool8 ShredSplit_Init(struct Task *);
static bool8 ShredSplit_Main(struct Task *);
-static bool8 ShredSplit_BrokenCheck(struct Task *);
static bool8 ShredSplit_End(struct Task *);
static bool8 Blackhole_Init(struct Task *);
static bool8 Blackhole_Vibrate(struct Task *);
@@ -561,7 +560,6 @@ static const TransitionStateFunc sShredSplit_Funcs[] =
{
ShredSplit_Init,
ShredSplit_Main,
- ShredSplit_BrokenCheck,
ShredSplit_End
};
@@ -2928,29 +2926,6 @@ static bool8 ShredSplit_Main(struct Task *task)
return FALSE;
}
-// This function never increments the state counter, because the loop condition
-// is always false, resulting in the game being stuck in an infinite loop.
-// It's possible this transition is only partially
-// done and the second part was left out.
-// In any case removing or bypassing this state allows the transition to finish.
-static bool8 ShredSplit_BrokenCheck(struct Task *task)
-{
- u16 i;
- bool32 done = TRUE;
- u16 checkVar2 = 0xFF10;
-
- for (i = 0; i < DISPLAY_HEIGHT; i++)
- {
- if (gScanlineEffectRegBuffers[1][i] != DISPLAY_WIDTH && gScanlineEffectRegBuffers[1][i] != checkVar2)
- done = FALSE;
- }
-
- if (done == TRUE)
- task->tState++;
-
- return FALSE;
-}
-
static bool8 ShredSplit_End(struct Task *task)
{
DmaStop(0);
diff --git a/src/battle_tv.c b/src/battle_tv.c
index a2b370aa5598..bba14054c9c8 100644
--- a/src/battle_tv.c
+++ b/src/battle_tv.c
@@ -944,7 +944,7 @@ static void AddMovePoints(u8 caseId, u16 arg1, u8 arg2, u8 arg3)
baseFromEffect++; // Recoil moves
if (MoveHasAdditionalEffect(arg2, MOVE_EFFECT_RAPID_SPIN))
baseFromEffect++;
- if (MoveHasAdditionalEffect(arg2, MOVE_EFFECT_SP_ATK_TWO_DOWN) || MoveHasAdditionalEffect(arg2, MOVE_EFFECT_ATK_DEF_DOWN))
+ if (MoveHasAdditionalEffect(arg2, MOVE_EFFECT_SP_ATK_MINUS_2) || MoveHasAdditionalEffect(arg2, MOVE_EFFECT_ATK_DEF_DOWN))
baseFromEffect += 2; // Overheat, Superpower, etc.
if (MoveHasAdditionalEffect(arg2, MOVE_EFFECT_STEAL_ITEM))
baseFromEffect += 3;
diff --git a/src/battle_util.c b/src/battle_util.c
index 24ec4c0f99fa..f370256f30b0 100644
--- a/src/battle_util.c
+++ b/src/battle_util.c
@@ -8,6 +8,7 @@
#include "battle_interface.h"
#include "battle_setup.h"
#include "battle_z_move.h"
+#include "battle_gimmick.h"
#include "party_menu.h"
#include "pokemon.h"
#include "international_string_util.h"
@@ -110,7 +111,7 @@ bool32 IsAffectedByFollowMe(u32 battlerAtk, u32 defSide, u32 move)
u32 ability = GetBattlerAbility(battlerAtk);
if (gSideTimers[defSide].followmeTimer == 0
- || gBattleMons[gSideTimers[defSide].followmeTarget].hp == 0
+ || !IsBattlerAlive(gSideTimers[defSide].followmeTarget)
|| gMovesInfo[move].effect == EFFECT_SNIPE_SHOT
|| gMovesInfo[move].effect == EFFECT_SKY_DROP
|| ability == ABILITY_PROPELLER_TAIL || ability == ABILITY_STALWART)
@@ -157,7 +158,7 @@ void HandleAction_UseMove(void)
gCurrentMove = gChosenMove = gLockedMoves[gBattlerAttacker];
}
// encore forces you to use the same move
- else if (!gBattleStruct->zmove.active && gDisableStructs[gBattlerAttacker].encoredMove != MOVE_NONE
+ else if (GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && gDisableStructs[gBattlerAttacker].encoredMove != MOVE_NONE
&& gDisableStructs[gBattlerAttacker].encoredMove == gBattleMons[gBattlerAttacker].moves[gDisableStructs[gBattlerAttacker].encoredMovePos])
{
gCurrentMove = gChosenMove = gDisableStructs[gBattlerAttacker].encoredMove;
@@ -165,7 +166,7 @@ void HandleAction_UseMove(void)
*(gBattleStruct->moveTarget + gBattlerAttacker) = GetMoveTarget(gCurrentMove, NO_TARGET_OVERRIDE);
}
// check if the encored move wasn't overwritten
- else if (!gBattleStruct->zmove.active && gDisableStructs[gBattlerAttacker].encoredMove != MOVE_NONE
+ else if (GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && gDisableStructs[gBattlerAttacker].encoredMove != MOVE_NONE
&& gDisableStructs[gBattlerAttacker].encoredMove != gBattleMons[gBattlerAttacker].moves[gDisableStructs[gBattlerAttacker].encoredMovePos])
{
gCurrMovePos = gChosenMovePos = gDisableStructs[gBattlerAttacker].encoredMovePos;
@@ -185,13 +186,7 @@ void HandleAction_UseMove(void)
gCurrentMove = gChosenMove = gBattleMons[gBattlerAttacker].moves[gCurrMovePos];
}
- // check z move used
- if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] != MOVE_NONE && !IS_MOVE_STATUS(gCurrentMove))
- {
- gCurrentMove = gBattleStruct->zmove.toBeUsed[gBattlerAttacker];
- }
-
- if (gBattleMons[gBattlerAttacker].hp != 0)
+ if (IsBattlerAlive(gBattlerAttacker))
{
if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
gBattleResults.lastUsedMovePlayer = gCurrentMove;
@@ -203,11 +198,17 @@ void HandleAction_UseMove(void)
SetTypeBeforeUsingMove(gChosenMove, gBattlerAttacker);
GET_MOVE_TYPE(gChosenMove, moveType);
- // check max move used
- if (gBattleStruct->dynamax.usingMaxMove[gBattlerAttacker])
+ // check Z-Move used
+ if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_Z_MOVE && !IS_MOVE_STATUS(gCurrentMove) && !IsZMove(gCurrentMove))
{
+ gBattleStruct->categoryOverride = gMovesInfo[gCurrentMove].category;
+ gCurrentMove = gChosenMove = GetUsableZMove(gBattlerAttacker, gCurrentMove);
+ }
+ // check Max Move used
+ else if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_DYNAMAX)
+ {
+ gBattleStruct->categoryOverride = gMovesInfo[gCurrentMove].category;
gCurrentMove = gChosenMove = GetMaxMove(gBattlerAttacker, gCurrentMove);
- gBattleStruct->dynamax.activeCategory = gBattleStruct->dynamax.categories[gBattlerAttacker];
}
moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, gCurrentMove);
@@ -236,8 +237,8 @@ void HandleAction_UseMove(void)
&& GetBattlerTurnOrderNum(battler) < var
&& gMovesInfo[gCurrentMove].effect != EFFECT_SNIPE_SHOT
&& gMovesInfo[gCurrentMove].effect != EFFECT_PLEDGE
- && (GetBattlerAbility(gBattlerAttacker) != ABILITY_PROPELLER_TAIL
- || GetBattlerAbility(gBattlerAttacker) != ABILITY_STALWART))
+ && GetBattlerAbility(gBattlerAttacker) != ABILITY_PROPELLER_TAIL
+ && GetBattlerAbility(gBattlerAttacker) != ABILITY_STALWART)
{
var = GetBattlerTurnOrderNum(battler);
}
@@ -367,7 +368,7 @@ void HandleAction_UseMove(void)
if (gBattleTypeFlags & BATTLE_TYPE_PALACE && gProtectStructs[gBattlerAttacker].palaceUnableToUseMove)
{
// Battle Palace, select battle script for failure to use move
- if (gBattleMons[gBattlerAttacker].hp == 0)
+ if (!IsBattlerAlive(gBattlerAttacker))
{
gCurrentActionFuncId = B_ACTION_FINISHED;
return;
@@ -423,6 +424,8 @@ void HandleAction_Switch(void)
if (gBattleResults.playerSwitchesCounter < 255)
gBattleResults.playerSwitchesCounter++;
+ if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_DYNAMAX)
+ UndoDynamax(gBattlerAttacker); // this is better performed here instead of SwitchInClearSetData
TryBattleFormChange(gBattlerAttacker, FORM_CHANGE_BATTLE_SWITCH);
}
@@ -707,7 +710,7 @@ void HandleAction_NothingIsFainted(void)
void HandleAction_ActionFinished(void)
{
- u32 i, j;
+ u32 i, j, moveType;
bool32 afterYouActive = gSpecialStatuses[gBattlerByTurnOrder[gCurrentTurnActionNumber + 1]].afterYou;
*(gBattleStruct->monToSwitchIntoId + gBattlerByTurnOrder[gCurrentTurnActionNumber]) = gSelectedMonPartyId = PARTY_SIZE;
gCurrentTurnActionNumber++;
@@ -718,6 +721,16 @@ void HandleAction_ActionFinished(void)
| HITMARKER_OBEYS | HITMARKER_WAKE_UP_CLEAR | HITMARKER_SYNCHRONISE_EFFECT
| HITMARKER_CHARGING | HITMARKER_NEVER_SET | HITMARKER_IGNORE_DISGUISE);
+ // check if Stellar type boost should be used up
+ GET_MOVE_TYPE(gCurrentMove, moveType);
+ if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_TERA
+ && GetBattlerTeraType(gBattlerAttacker) == TYPE_STELLAR
+ && gMovesInfo[gCurrentMove].category != DAMAGE_CATEGORY_STATUS
+ && IsTypeStellarBoosted(gBattlerAttacker, moveType))
+ {
+ ExpendTypeStellarBoost(gBattlerAttacker, moveType);
+ }
+
gCurrentMove = 0;
gBattleMoveDamage = 0;
gMoveResultFlags = 0;
@@ -731,7 +744,6 @@ void HandleAction_ActionFinished(void)
gBattleCommunication[4] = 0;
gBattleScripting.multihitMoveEffect = 0;
gBattleResources->battleScriptsStack->size = 0;
- gBattleStruct->dynamax.usingMaxMove[gBattlerAttacker] = 0;
if (B_RECALC_TURN_AFTER_ACTIONS >= GEN_8 && !afterYouActive && !gBattleStruct->pledgeMove)
{
@@ -893,44 +905,6 @@ static const uq4_12_t sPercentToModifier[] =
UQ_4_12(1.00), // 100
};
-#define X UQ_4_12
-#define ______ X(1.0) // Regular effectiveness.
-
-static const uq4_12_t sTypeEffectivenessTable[NUMBER_OF_MON_TYPES][NUMBER_OF_MON_TYPES] =
-{// Defender -->
- // Attacker Normal Fighting Flying Poison Ground Rock Bug Ghost Steel Mystery Fire Water Grass Electric Psychic Ice Dragon Dark Fairy
- [TYPE_NORMAL] = {______, ______, ______, ______, ______, X(0.5), ______, X(0.0), X(0.5), ______, ______, ______, ______, ______, ______, ______, ______, ______, ______},
- [TYPE_FIGHTING] = {X(2.0), ______, X(0.5), X(0.5), ______, X(2.0), X(0.5), X(0.0), X(2.0), ______, ______, ______, ______, ______, X(0.5), X(2.0), ______, X(2.0), X(0.5)},
- [TYPE_FLYING] = {______, X(2.0), ______, ______, ______, X(0.5), X(2.0), ______, X(0.5), ______, ______, ______, X(2.0), X(0.5), ______, ______, ______, ______, ______},
- [TYPE_POISON] = {______, ______, ______, X(0.5), X(0.5), X(0.5), ______, X(0.5), X(0.0), ______, ______, ______, X(2.0), ______, ______, ______, ______, ______, X(2.0)},
- [TYPE_GROUND] = {______, ______, X(0.0), X(2.0), ______, X(2.0), X(0.5), ______, X(2.0), ______, X(2.0), ______, X(0.5), X(2.0), ______, ______, ______, ______, ______},
- [TYPE_ROCK] = {______, X(0.5), X(2.0), ______, X(0.5), ______, X(2.0), ______, X(0.5), ______, X(2.0), ______, ______, ______, ______, X(2.0), ______, ______, ______},
- [TYPE_BUG] = {______, X(0.5), X(0.5), X(0.5), ______, ______, ______, X(0.5), X(0.5), ______, X(0.5), ______, X(2.0), ______, X(2.0), ______, ______, X(2.0), X(0.5)},
-#if B_STEEL_RESISTANCES >= GEN_6
- [TYPE_GHOST] = {X(0.0), ______, ______, ______, ______, ______, ______, X(2.0), ______, ______, ______, ______, ______, ______, X(2.0), ______, ______, X(0.5), ______},
-#else
- [TYPE_GHOST] = {X(0.0), ______, ______, ______, ______, ______, ______, X(2.0), X(0.5), ______, ______, ______, ______, ______, X(2.0), ______, ______, X(0.5), ______},
-#endif
- [TYPE_STEEL] = {______, ______, ______, ______, ______, X(2.0), ______, ______, X(0.5), ______, X(0.5), X(0.5), ______, X(0.5), ______, X(2.0), ______, ______, X(2.0)},
- [TYPE_MYSTERY] = {______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______},
- [TYPE_FIRE] = {______, ______, ______, ______, ______, X(0.5), X(2.0), ______, X(2.0), ______, X(0.5), X(0.5), X(2.0), ______, ______, X(2.0), X(0.5), ______, ______},
- [TYPE_WATER] = {______, ______, ______, ______, X(2.0), X(2.0), ______, ______, ______, ______, X(2.0), X(0.5), X(0.5), ______, ______, ______, X(0.5), ______, ______},
- [TYPE_GRASS] = {______, ______, X(0.5), X(0.5), X(2.0), X(2.0), X(0.5), ______, X(0.5), ______, X(0.5), X(2.0), X(0.5), ______, ______, ______, X(0.5), ______, ______},
- [TYPE_ELECTRIC] = {______, ______, X(2.0), ______, X(0.0), ______, ______, ______, ______, ______, ______, X(2.0), X(0.5), X(0.5), ______, ______, X(0.5), ______, ______},
- [TYPE_PSYCHIC] = {______, X(2.0), ______, X(2.0), ______, ______, ______, ______, X(0.5), ______, ______, ______, ______, ______, X(0.5), ______, ______, X(0.0), ______},
- [TYPE_ICE] = {______, ______, X(2.0), ______, X(2.0), ______, ______, ______, X(0.5), ______, X(0.5), X(0.5), X(2.0), ______, ______, X(0.5), X(2.0), ______, ______},
- [TYPE_DRAGON] = {______, ______, ______, ______, ______, ______, ______, ______, X(0.5), ______, ______, ______, ______, ______, ______, ______, X(2.0), ______, X(0.0)},
-#if B_STEEL_RESISTANCES >= GEN_6
- [TYPE_DARK] = {______, X(0.5), ______, ______, ______, ______, ______, X(2.0), ______, ______, ______, ______, ______, ______, X(2.0), ______, ______, X(0.5), X(0.5)},
-#else
- [TYPE_DARK] = {______, X(0.5), ______, ______, ______, ______, ______, X(2.0), X(0.5), ______, ______, ______, ______, ______, X(2.0), ______, ______, X(0.5), X(0.5)},
-#endif
- [TYPE_FAIRY] = {______, X(2.0), ______, X(0.5), ______, ______, ______, ______, X(0.5), ______, X(0.5), ______, ______, ______, ______, ______, X(2.0), X(2.0), ______},
-};
-
-#undef ______
-#undef X
-
// code
u8 GetBattlerForBattleScript(u8 caseId)
{
@@ -1163,7 +1137,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;
@@ -1280,17 +1253,17 @@ bool32 IsBelchPreventingMove(u32 battler, u32 move)
}
// Dynamax bypasses all selection prevention except Taunt and Assault Vest.
-#define DYNAMAX_BYPASS_CHECK !gBattleStruct->dynamax.playerSelect && !IsDynamaxed(gBattlerAttacker)
+#define DYNAMAX_BYPASS_CHECK (!IsGimmickSelected(gBattlerAttacker, GIMMICK_DYNAMAX) && GetActiveGimmick(gBattlerAttacker) != GIMMICK_DYNAMAX)
u32 TrySetCantSelectMoveBattleScript(u32 battler)
{
u32 limitations = 0;
- u8 moveId = gBattleResources->bufferB[battler][2] & ~(RET_MEGA_EVOLUTION | RET_ULTRA_BURST | RET_DYNAMAX);
+ u8 moveId = gBattleResources->bufferB[battler][2] & ~RET_GIMMICK;
u32 move = gBattleMons[battler].moves[moveId];
u32 holdEffect = GetBattlerHoldEffect(battler, TRUE);
u16 *choicedMove = &gBattleStruct->choicedMove[battler];
- if (DYNAMAX_BYPASS_CHECK && gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && gDisableStructs[battler].disabledMove == move && move != MOVE_NONE)
+ if (DYNAMAX_BYPASS_CHECK && GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && gDisableStructs[battler].disabledMove == move && move != MOVE_NONE)
{
gBattleScripting.battler = battler;
gCurrentMove = move;
@@ -1306,7 +1279,7 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler)
}
}
- if (DYNAMAX_BYPASS_CHECK && gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && move == gLastMoves[battler] && move != MOVE_STRUGGLE && (gBattleMons[battler].status2 & STATUS2_TORMENT))
+ if (DYNAMAX_BYPASS_CHECK && GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && move == gLastMoves[battler] && move != MOVE_STRUGGLE && (gBattleMons[battler].status2 & STATUS2_TORMENT))
{
CancelMultiTurnMoves(battler);
if (gBattleTypeFlags & BATTLE_TYPE_PALACE)
@@ -1321,9 +1294,9 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler)
}
}
- if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && gDisableStructs[battler].tauntTimer != 0 && IS_MOVE_STATUS(move))
+ if (GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && gDisableStructs[battler].tauntTimer != 0 && IS_MOVE_STATUS(move))
{
- if (IsDynamaxed(gBattlerAttacker))
+ if ((GetActiveGimmick(gBattlerAttacker) == GIMMICK_DYNAMAX))
gCurrentMove = MOVE_MAX_GUARD;
else
gCurrentMove = move;
@@ -1339,7 +1312,7 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler)
}
}
- if (DYNAMAX_BYPASS_CHECK && gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && gDisableStructs[battler].throatChopTimer != 0 && gMovesInfo[move].soundMove)
+ if (DYNAMAX_BYPASS_CHECK && GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && gDisableStructs[battler].throatChopTimer != 0 && gMovesInfo[move].soundMove)
{
gCurrentMove = move;
if (gBattleTypeFlags & BATTLE_TYPE_PALACE)
@@ -1354,7 +1327,7 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler)
}
}
- if (DYNAMAX_BYPASS_CHECK && gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && GetImprisonedMovesCount(battler, move))
+ if (DYNAMAX_BYPASS_CHECK && GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && GetImprisonedMovesCount(battler, move))
{
gCurrentMove = move;
if (gBattleTypeFlags & BATTLE_TYPE_PALACE)
@@ -1369,7 +1342,7 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler)
}
}
- if (DYNAMAX_BYPASS_CHECK && gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && IsGravityPreventingMove(move))
+ if (DYNAMAX_BYPASS_CHECK && GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && IsGravityPreventingMove(move))
{
gCurrentMove = move;
if (gBattleTypeFlags & BATTLE_TYPE_PALACE)
@@ -1384,7 +1357,7 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler)
}
}
- if (DYNAMAX_BYPASS_CHECK && gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && IsHealBlockPreventingMove(battler, move))
+ if (DYNAMAX_BYPASS_CHECK && GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && IsHealBlockPreventingMove(battler, move))
{
gCurrentMove = move;
if (gBattleTypeFlags & BATTLE_TYPE_PALACE)
@@ -1399,7 +1372,7 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler)
}
}
- if (DYNAMAX_BYPASS_CHECK && gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && IsBelchPreventingMove(battler, move))
+ if (DYNAMAX_BYPASS_CHECK && GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && IsBelchPreventingMove(battler, move))
{
gCurrentMove = move;
if (gBattleTypeFlags & BATTLE_TYPE_PALACE)
@@ -1463,7 +1436,7 @@ u32 TrySetCantSelectMoveBattleScript(u32 battler)
}
else if (holdEffect == HOLD_EFFECT_ASSAULT_VEST && IS_MOVE_STATUS(move) && gMovesInfo[move].effect != EFFECT_ME_FIRST)
{
- if (IsDynamaxed(gBattlerAttacker))
+ if ((GetActiveGimmick(gBattlerAttacker) == GIMMICK_DYNAMAX))
gCurrentMove = MOVE_MAX_GUARD;
else
gCurrentMove = move;
@@ -1683,6 +1656,7 @@ enum
ENDTURN_SUN,
ENDTURN_HAIL,
ENDTURN_SNOW,
+ ENDTURN_FOG,
ENDTURN_DAMAGE_NON_TYPES,
ENDTURN_GRAVITY,
ENDTURN_WATER_SPORT,
@@ -1696,8 +1670,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,
@@ -1740,7 +1712,7 @@ u8 DoFieldEndTurnEffects(void)
do
{
s32 i;
- u8 side;
+ u32 side;
switch (gBattleStruct->turnCountersTracker)
{
@@ -1942,7 +1914,7 @@ u8 DoFieldEndTurnEffects(void)
u32 battler = gBattlerByTurnOrder[gBattleStruct->turnSideTracker];
if (gWishFutureKnock.wishCounter[battler] != 0
&& --gWishFutureKnock.wishCounter[battler] == 0
- && gBattleMons[battler].hp != 0)
+ && IsBattlerAlive(battler))
{
gBattlerTarget = battler;
BattleScriptExecute(BattleScript_WishComesTrue);
@@ -2071,23 +2043,33 @@ u8 DoFieldEndTurnEffects(void)
}
gBattleStruct->turnCountersTracker++;
break;
+ case ENDTURN_FOG:
+ if (gBattleWeather & B_WEATHER_FOG)
+ {
+ if (!(gBattleWeather & B_WEATHER_FOG_PERMANENT) && --gWishFutureKnock.weatherDuration == 0)
+ {
+ gBattleWeather &= ~B_WEATHER_FOG_TEMPORARY;
+ gBattlescriptCurrInstr = BattleScript_FogEnded;
+ }
+ else
+ {
+ gBattlescriptCurrInstr = BattleScript_FogContinues;
+ }
+
+ BattleScriptExecute(gBattlescriptCurrInstr);
+ effect++;
+ }
+ gBattleStruct->turnCountersTracker++;
+ break;
case ENDTURN_DAMAGE_NON_TYPES:
while (gBattleStruct->turnSideTracker < 2)
{
side = gBattleStruct->turnSideTracker;
- if (gSideStatuses[side] & SIDE_STATUS_DAMAGE_NON_TYPES)
+ if (gSideStatuses[side] & SIDE_STATUS_DAMAGE_NON_TYPES && --gSideTimers[side].damageNonTypesTimer == 0)
{
- if (--gSideTimers[side].damageNonTypesTimer == 0)
- {
- // There is no in-game message when this side status ends.
- gSideStatuses[side] &= ~SIDE_STATUS_DAMAGE_NON_TYPES;
- effect++;
- }
- else
- {
- ChooseDamageNonTypesString(gSideTimers[side].damageNonTypesType);
- BattleScriptExecute(BattleScript_DamageNonTypesContinues);
- }
+ // There is no in-game message when this side status ends.
+ gSideStatuses[side] &= ~SIDE_STATUS_DAMAGE_NON_TYPES;
+ effect++;
}
gBattleStruct->turnSideTracker++;
if (effect != 0)
@@ -2180,25 +2162,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++)
{
@@ -2314,6 +2277,7 @@ u8 DoFieldEndTurnEffects(void)
enum
{
+ ENDTURN_WEATHER_DAMAGE,
ENDTURN_INGRAIN,
ENDTURN_AQUA_RING,
ENDTURN_ABILITIES,
@@ -2353,6 +2317,7 @@ enum
ENDTURN_SALT_CURE,
ENDTURN_SYRUP_BOMB,
ENDTURN_DYNAMAX,
+ ENDTURN_GMAX_MOVE_RESIDUAL_DAMAGE,
ENDTURN_SEA_OF_FIRE_DAMAGE,
ENDTURN_BATTLER_COUNT
};
@@ -2394,11 +2359,64 @@ u8 DoBattlerEndTurnEffects(void)
ability = GetBattlerAbility(battler);
switch (gBattleStruct->turnEffectsTracker)
{
+ case ENDTURN_WEATHER_DAMAGE:
+ ability = GetBattlerAbility(battler);
+ if (!IsBattlerAlive(battler) || !WEATHER_HAS_EFFECT || ability == ABILITY_MAGIC_GUARD)
+ {
+ gBattleStruct->turnEffectsTracker++;
+ break;
+ }
+ else if (gBattleWeather & B_WEATHER_SANDSTORM
+ && ability != ABILITY_SAND_VEIL
+ && ability != ABILITY_SAND_FORCE
+ && ability != ABILITY_SAND_RUSH
+ && ability != ABILITY_OVERCOAT
+ && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_ROCK)
+ && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GROUND)
+ && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_STEEL)
+ && !(gStatuses3[gBattlerAttacker] & (STATUS3_UNDERGROUND | STATUS3_UNDERWATER))
+ && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_SAFETY_GOGGLES)
+ {
+ gBattleScripting.battler = battler;
+ gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / 16;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ BattleScriptExecute(BattleScript_DamagingWeather);
+ effect++;
+ }
+ else if (gBattleWeather & (B_WEATHER_HAIL | B_WEATHER_SNOW)
+ && ability == ABILITY_ICE_BODY
+ && !(gStatuses3[battler] & (STATUS3_UNDERGROUND | STATUS3_UNDERWATER))
+ && !BATTLER_MAX_HP(battler)
+ && !(gStatuses3[battler] & STATUS3_HEAL_BLOCK))
+ {
+ gBattleScripting.battler = battler;
+ gBattleMoveDamage = -1 * max(1, GetNonDynamaxMaxHP(battler) / 16);
+ BattleScriptExecute(BattleScript_IceBodyHeal);
+ effect++;
+ }
+ else if (gBattleWeather & B_WEATHER_HAIL
+ && !IS_BATTLER_OF_TYPE(battler, TYPE_ICE)
+ && ability != ABILITY_SNOW_CLOAK
+ && ability != ABILITY_OVERCOAT
+ && ability != ABILITY_ICE_BODY
+ && !(gStatuses3[battler] & (STATUS3_UNDERGROUND | STATUS3_UNDERWATER))
+ && GetBattlerHoldEffect(battler, TRUE) != HOLD_EFFECT_SAFETY_GOGGLES)
+ {
+ gBattleScripting.battler = battler;
+ gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / 16;
+ if (gBattleMoveDamage == 0)
+ gBattleMoveDamage = 1;
+ BattleScriptExecute(BattleScript_DamagingWeather);
+ effect++;
+ }
+ gBattleStruct->turnEffectsTracker++;
+ break;
case ENDTURN_INGRAIN: // ingrain
if ((gStatuses3[battler] & STATUS3_ROOTED)
&& !BATTLER_MAX_HP(battler)
&& !(gStatuses3[battler] & STATUS3_HEAL_BLOCK)
- && gBattleMons[battler].hp != 0)
+ && IsBattlerAlive(battler))
{
gBattleMoveDamage = GetDrainedBigRootHp(battler, GetNonDynamaxMaxHP(battler) / 16);
BattleScriptExecute(BattleScript_IngrainTurnHeal);
@@ -2410,7 +2428,7 @@ u8 DoBattlerEndTurnEffects(void)
if ((gStatuses3[battler] & STATUS3_AQUA_RING)
&& !BATTLER_MAX_HP(battler)
&& !(gStatuses3[battler] & STATUS3_HEAL_BLOCK)
- && gBattleMons[battler].hp != 0)
+ && IsBattlerAlive(battler))
{
gBattleMoveDamage = GetDrainedBigRootHp(battler, GetNonDynamaxMaxHP(battler) / 16);
BattleScriptExecute(BattleScript_AquaRingHeal);
@@ -2440,8 +2458,8 @@ u8 DoBattlerEndTurnEffects(void)
break;
case ENDTURN_LEECH_SEED: // leech seed
if ((gStatuses3[battler] & STATUS3_LEECHSEED)
- && gBattleMons[gStatuses3[battler] & STATUS3_LEECHSEED_BATTLER].hp != 0
- && gBattleMons[battler].hp != 0)
+ && IsBattlerAlive(gStatuses3[battler] & STATUS3_LEECHSEED_BATTLER)
+ && IsBattlerAlive(battler))
{
MAGIC_GUARD_CHECK;
@@ -2458,7 +2476,7 @@ u8 DoBattlerEndTurnEffects(void)
break;
case ENDTURN_POISON: // poison
if ((gBattleMons[battler].status1 & STATUS1_POISON)
- && gBattleMons[battler].hp != 0)
+ && IsBattlerAlive(battler))
{
MAGIC_GUARD_CHECK;
@@ -2487,7 +2505,7 @@ u8 DoBattlerEndTurnEffects(void)
break;
case ENDTURN_BAD_POISON: // toxic poison
if ((gBattleMons[battler].status1 & STATUS1_TOXIC_POISON)
- && gBattleMons[battler].hp != 0)
+ && IsBattlerAlive(battler))
{
MAGIC_GUARD_CHECK;
@@ -2519,7 +2537,7 @@ u8 DoBattlerEndTurnEffects(void)
break;
case ENDTURN_BURN: // burn
if ((gBattleMons[battler].status1 & STATUS1_BURN)
- && gBattleMons[battler].hp != 0)
+ && IsBattlerAlive(battler))
{
MAGIC_GUARD_CHECK;
gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / (B_BURN_DAMAGE >= GEN_7 ? 16 : 8);
@@ -2538,7 +2556,7 @@ u8 DoBattlerEndTurnEffects(void)
break;
case ENDTURN_FROSTBITE: // burn
if ((gBattleMons[battler].status1 & STATUS1_FROSTBITE)
- && gBattleMons[battler].hp != 0)
+ && IsBattlerAlive(battler))
{
MAGIC_GUARD_CHECK;
gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / (B_BURN_DAMAGE >= GEN_7 ? 16 : 8);
@@ -2551,7 +2569,7 @@ u8 DoBattlerEndTurnEffects(void)
break;
case ENDTURN_NIGHTMARES: // spooky nightmares
if ((gBattleMons[battler].status2 & STATUS2_NIGHTMARE)
- && gBattleMons[battler].hp != 0)
+ && IsBattlerAlive(battler))
{
MAGIC_GUARD_CHECK;
// R/S does not perform this sleep check, which causes the nightmare effect to
@@ -2573,7 +2591,7 @@ u8 DoBattlerEndTurnEffects(void)
break;
case ENDTURN_CURSE: // curse
if ((gBattleMons[battler].status2 & STATUS2_CURSED)
- && gBattleMons[battler].hp != 0)
+ && IsBattlerAlive(battler))
{
MAGIC_GUARD_CHECK;
gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / 4;
@@ -2585,7 +2603,7 @@ u8 DoBattlerEndTurnEffects(void)
gBattleStruct->turnEffectsTracker++;
break;
case ENDTURN_WRAP: // wrap
- if ((gBattleMons[battler].status2 & STATUS2_WRAPPED) && gBattleMons[battler].hp != 0)
+ if ((gBattleMons[battler].status2 & STATUS2_WRAPPED) && IsBattlerAlive(battler))
{
if (--gDisableStructs[battler].wrapTurns != 0) // damaged by wrap
{
@@ -2891,7 +2909,7 @@ u8 DoBattlerEndTurnEffects(void)
gBattleStruct->turnEffectsTracker++;
break;
case ENDTURN_SALT_CURE:
- if (gStatuses4[battler] & STATUS4_SALT_CURE && gBattleMons[battler].hp != 0)
+ if (gStatuses4[battler] & STATUS4_SALT_CURE && IsBattlerAlive(battler))
{
gBattlerTarget = battler;
if (IS_BATTLER_OF_TYPE(gBattlerTarget, TYPE_STEEL) || IS_BATTLER_OF_TYPE(gBattlerTarget, TYPE_WATER))
@@ -2907,7 +2925,7 @@ u8 DoBattlerEndTurnEffects(void)
gBattleStruct->turnEffectsTracker++;
break;
case ENDTURN_SYRUP_BOMB:
- if ((gStatuses4[battler] & STATUS4_SYRUP_BOMB) && (gBattleMons[battler].hp != 0))
+ if ((gStatuses4[battler] & STATUS4_SYRUP_BOMB) && (IsBattlerAlive(battler)))
{
if (gDisableStructs[battler].syrupBombTimer > 0 && --gDisableStructs[battler].syrupBombTimer == 0)
gStatuses4[battler] &= ~STATUS4_SYRUP_BOMB;
@@ -2930,7 +2948,7 @@ u8 DoBattlerEndTurnEffects(void)
gBattleStruct->turnEffectsTracker++;
break;
case ENDTURN_DYNAMAX:
- if (IsDynamaxed(battler)
+ if (GetActiveGimmick(battler) == GIMMICK_DYNAMAX
&& --gBattleStruct->dynamax.dynamaxTurns[battler] == 0)
{
gBattleScripting.battler = battler;
@@ -2940,10 +2958,27 @@ u8 DoBattlerEndTurnEffects(void)
}
gBattleStruct->turnEffectsTracker++;
break;
+ case ENDTURN_GMAX_MOVE_RESIDUAL_DAMAGE:
+ {
+ u32 side = GetBattlerSide(gBattlerAttacker);
+ if (gSideTimers[side].damageNonTypesTimer
+ && !IS_BATTLER_OF_TYPE(gBattlerAttacker, gSideTimers[side].damageNonTypesType)
+ && IsBattlerAlive(gBattlerAttacker)
+ && GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD)
+ {
+ gBattleScripting.battler = battler;
+ gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / 6;
+ ChooseDamageNonTypesString(gSideTimers[side].damageNonTypesType);
+ BattleScriptExecute(BattleScript_DamageNonTypesContinues);
+ effect++;
+ }
+ gBattleStruct->turnEffectsTracker++;
+ break;
+ }
case ENDTURN_SEA_OF_FIRE_DAMAGE:
if (IsBattlerAlive(battler) && gSideStatuses[GetBattlerSide(battler)] & SIDE_STATUS_SEA_OF_FIRE)
{
- gBattleMoveDamage = gBattleMons[battler].maxHP / 8;
+ gBattleMoveDamage = GetNonDynamaxMaxHP(battler) / 8;
BtlController_EmitStatusAnimation(battler, BUFFER_A, FALSE, STATUS1_BURN);
MarkBattlerForControllerExec(battler);
BattleScriptExecute(BattleScript_HurtByTheSeaOfFire);
@@ -3052,7 +3087,7 @@ bool32 HandleWishPerishSongOnTurnEnd(void)
case 2:
if ((gBattleTypeFlags & BATTLE_TYPE_ARENA)
&& gBattleStruct->arenaTurnCounter == 2
- && gBattleMons[0].hp != 0 && gBattleMons[1].hp != 0)
+ && IsBattlerAlive(B_POSITION_PLAYER_LEFT) && IsBattlerAlive(B_POSITION_OPPONENT_LEFT))
{
s32 i;
@@ -3309,7 +3344,7 @@ u8 AtkCanceller_UnableToUseMove(u32 moveType)
gBattleStruct->atkCancellerTracker++;
break;
case CANCELLER_DISABLED: // disabled move
- if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && gDisableStructs[gBattlerAttacker].disabledMove == gCurrentMove && gDisableStructs[gBattlerAttacker].disabledMove != MOVE_NONE)
+ if (GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && gDisableStructs[gBattlerAttacker].disabledMove == gCurrentMove && gDisableStructs[gBattlerAttacker].disabledMove != MOVE_NONE)
{
gProtectStructs[gBattlerAttacker].usedDisabledMove = TRUE;
gBattleScripting.battler = gBattlerAttacker;
@@ -3321,7 +3356,7 @@ u8 AtkCanceller_UnableToUseMove(u32 moveType)
gBattleStruct->atkCancellerTracker++;
break;
case CANCELLER_HEAL_BLOCKED:
- if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && gStatuses3[gBattlerAttacker] & STATUS3_HEAL_BLOCK && IsHealBlockPreventingMove(gBattlerAttacker, gCurrentMove))
+ if (GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && gStatuses3[gBattlerAttacker] & STATUS3_HEAL_BLOCK && IsHealBlockPreventingMove(gBattlerAttacker, gCurrentMove))
{
gProtectStructs[gBattlerAttacker].usedHealBlockedMove = TRUE;
gBattleScripting.battler = gBattlerAttacker;
@@ -3345,7 +3380,7 @@ u8 AtkCanceller_UnableToUseMove(u32 moveType)
gBattleStruct->atkCancellerTracker++;
break;
case CANCELLER_TAUNTED: // taunt
- if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && gDisableStructs[gBattlerAttacker].tauntTimer && IS_MOVE_STATUS(gCurrentMove))
+ if (GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && gDisableStructs[gBattlerAttacker].tauntTimer && IS_MOVE_STATUS(gCurrentMove))
{
gProtectStructs[gBattlerAttacker].usedTauntedMove = TRUE;
CancelMultiTurnMoves(gBattlerAttacker);
@@ -3356,7 +3391,7 @@ u8 AtkCanceller_UnableToUseMove(u32 moveType)
gBattleStruct->atkCancellerTracker++;
break;
case CANCELLER_IMPRISONED: // imprisoned
- if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && GetImprisonedMovesCount(gBattlerAttacker, gCurrentMove))
+ if (GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && GetImprisonedMovesCount(gBattlerAttacker, gCurrentMove))
{
gProtectStructs[gBattlerAttacker].usedImprisonedMove = TRUE;
CancelMultiTurnMoves(gBattlerAttacker);
@@ -3520,7 +3555,7 @@ u8 AtkCanceller_UnableToUseMove(u32 moveType)
gBattleStruct->atkCancellerTracker++;
break;
case CANCELLER_THROAT_CHOP:
- if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] == MOVE_NONE && gDisableStructs[gBattlerAttacker].throatChopTimer && gMovesInfo[gCurrentMove].soundMove)
+ if (GetActiveGimmick(gBattlerAttacker) != GIMMICK_Z_MOVE && gDisableStructs[gBattlerAttacker].throatChopTimer && gMovesInfo[gCurrentMove].soundMove)
{
gProtectStructs[gBattlerAttacker].usedThroatChopPreventedMove = TRUE;
CancelMultiTurnMoves(gBattlerAttacker);
@@ -3531,23 +3566,18 @@ u8 AtkCanceller_UnableToUseMove(u32 moveType)
gBattleStruct->atkCancellerTracker++;
break;
case CANCELLER_Z_MOVES:
- if (gBattleStruct->zmove.toBeUsed[gBattlerAttacker] != MOVE_NONE)
+ if (GetActiveGimmick(gBattlerAttacker) == GIMMICK_Z_MOVE)
{
// For Z-Mirror Move, so it doesn't play the animation twice.
- bool32 alreadyUsed = (gBattleStruct->zmove.used[gBattlerAttacker] == TRUE);
+ bool32 alreadyUsed = HasTrainerUsedGimmick(gBattlerAttacker, GIMMICK_Z_MOVE);
- //attacker has a queued z move
- gBattleStruct->zmove.active = TRUE;
- gBattleStruct->zmove.activeCategory = gBattleStruct->zmove.categories[gBattlerAttacker];
+ // attacker has a queued z move
RecordItemEffectBattle(gBattlerAttacker, HOLD_EFFECT_Z_CRYSTAL);
- gBattleStruct->zmove.used[gBattlerAttacker] = TRUE;
- if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && IsPartnerMonFromSameTrainer(gBattlerAttacker))
- gBattleStruct->zmove.used[BATTLE_PARTNER(gBattlerAttacker)] = TRUE; //if 1v1 double, set partner used flag as well
+ SetGimmickAsActivated(gBattlerAttacker, GIMMICK_Z_MOVE);
gBattleScripting.battler = gBattlerAttacker;
- if (gBattleStruct->zmove.activeCategory == DAMAGE_CATEGORY_STATUS)
+ if (gMovesInfo[gCurrentMove].category == DAMAGE_CATEGORY_STATUS)
{
- gBattleStruct->zmove.effect = gMovesInfo[gBattleStruct->zmove.baseMoves[gBattlerAttacker]].zMove.effect;
if (!alreadyUsed)
{
BattleScriptPushCursor();
@@ -3611,8 +3641,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)
{
@@ -3835,23 +3871,9 @@ static const u16 sWeatherFlagsInfo[][3] =
[ENUM_WEATHER_HAIL] = {B_WEATHER_HAIL_TEMPORARY, B_WEATHER_HAIL_PERMANENT, HOLD_EFFECT_ICY_ROCK},
[ENUM_WEATHER_STRONG_WINDS] = {B_WEATHER_STRONG_WINDS, B_WEATHER_STRONG_WINDS, HOLD_EFFECT_NONE},
[ENUM_WEATHER_SNOW] = {B_WEATHER_SNOW_TEMPORARY, B_WEATHER_SNOW_PERMANENT, HOLD_EFFECT_ICY_ROCK},
+ [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);
@@ -3865,7 +3887,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])))
@@ -3875,7 +3896,6 @@ bool32 TryChangeBattleWeather(u32 battler, u32 weatherEnumId, bool32 viaAbility)
gWishFutureKnock.weatherDuration = 8;
else
gWishFutureKnock.weatherDuration = 5;
- ShouldChangeFormInWeather(battler);
return TRUE;
}
return FALSE;
@@ -4003,6 +4023,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;
@@ -4173,7 +4241,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
BattleScriptPushCursorAndCallback(BattleScript_OverworldTerrain);
effect++;
}
- else if (B_FOG_TERRAIN == TRUE
+ else if (B_OVERWORLD_FOG >= GEN_8
&& (GetCurrentWeather() == WEATHER_FOG_HORIZONTAL || GetCurrentWeather() == WEATHER_FOG_DIAGONAL)
&& !(gFieldStatuses & STATUS_FIELD_MISTY_TERRAIN))
{
@@ -4231,6 +4299,18 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
effect++;
}
break;
+ case WEATHER_FOG_DIAGONAL:
+ case WEATHER_FOG_HORIZONTAL:
+ if (B_OVERWORLD_FOG == GEN_4)
+ {
+ if (!(gBattleWeather & B_WEATHER_FOG))
+ {
+ gBattleWeather = B_WEATHER_FOG;
+ gBattleScripting.animArg1 = B_ANIM_FOG_CONTINUES;
+ effect++;
+ }
+ break;
+ }
}
}
if (effect != 0)
@@ -4239,7 +4319,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
BattleScriptPushCursorAndCallback(BattleScript_OverworldWeatherStarts);
}
break;
- case ABILITYEFFECT_ON_SWITCHIN: // 0
+ case ABILITYEFFECT_ON_SWITCHIN:
gBattleScripting.battler = battler;
switch (gLastUsedAbility)
{
@@ -4411,7 +4491,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
if (!gSpecialStatuses[battler].switchInAbilityDone)
{
gSpecialStatuses[battler].switchInAbilityDone = TRUE;
- gBattlerAttacker = battler;
+ gBattleScripting.battler = battler;
BattleScriptPushCursorAndCallback(BattleScript_FriskActivates); // Try activate
effect++;
}
@@ -4633,6 +4713,14 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
effect++;
}
break;
+ case ABILITY_TERAFORM_ZERO:
+ if (!gSpecialStatuses[battler].switchInAbilityDone
+ && gBattleMons[battler].species == SPECIES_TERAPAGOS_STELLAR)
+ {
+ gSpecialStatuses[battler].switchInAbilityDone = TRUE;
+ BattleScriptPushCursorAndCallback(BattleScript_ActivateTeraformZero);
+ effect++;
+ }
case ABILITY_SCHOOLING:
if (gBattleMons[battler].level < 20)
break;
@@ -4674,6 +4762,19 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
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))
{
@@ -4824,16 +4925,50 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
effect++;
}
break;
+ case ABILITY_TERA_SHIFT:
+ if (!gSpecialStatuses[battler].switchInAbilityDone
+ && gBattleMons[battler].species == SPECIES_TERAPAGOS_NORMAL
+ && TryBattleFormChange(battler, FORM_CHANGE_BATTLE_SWITCH))
+ {
+ gBattlerAttacker = battler;
+ gBattleScripting.abilityPopupOverwrite = gLastUsedAbility = ABILITY_TERA_SHIFT;
+ gSpecialStatuses[battler].switchInAbilityDone = TRUE;
+ BattleScriptPushCursorAndCallback(BattleScript_AttackerFormChangeWithStringEnd3);
+ 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: // 1
- if (gBattleMons[battler].hp != 0)
+ case ABILITYEFFECT_ENDTURN:
+ if (IsBattlerAlive(battler))
{
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)
@@ -4868,7 +5003,8 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
}
break;
case ABILITY_SHED_SKIN:
- if ((gBattleMons[battler].status1 & STATUS1_ANY) && (Random() % 3) == 0)
+ if ((gBattleMons[battler].status1 & STATUS1_ANY)
+ && (B_ABILITY_TRIGGER_CHANCE >= GEN_4 ? RandomPercentage(RNG_SHED_SKIN, 30) : RandomChance(RNG_SHED_SKIN, 1, 3)))
{
ABILITY_HEAL_MON_STATUS:
if (gBattleMons[battler].status1 & (STATUS1_POISON | STATUS1_TOXIC_POISON))
@@ -5017,9 +5153,11 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
}
}
break;
- case ABILITYEFFECT_MOVES_BLOCK: // 2
+ case ABILITYEFFECT_MOVES_BLOCK:
+ case ABILITYEFFECT_WOULD_BLOCK:
{
u16 moveTarget = GetBattlerMoveTargetType(battler, move);
+ const u8 * battleScriptBlocksMove = NULL;
switch (gLastUsedAbility)
{
@@ -5063,7 +5201,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
{
if (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS)
gHitMarker |= HITMARKER_NO_PPDEDUCT;
- gBattlescriptCurrInstr = BattleScript_SoundproofProtected;
+ battleScriptBlocksMove = BattleScript_SoundproofProtected;
}
else if (effect == 2 || effect == 4)
{
@@ -5074,11 +5212,11 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
if (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS)
gHitMarker |= HITMARKER_NO_PPDEDUCT;
- gBattlescriptCurrInstr = BattleScript_DazzlingProtected;
+ battleScriptBlocksMove = BattleScript_DazzlingProtected;
}
else if (effect == 3)
{
- gBattlescriptCurrInstr = BattleScript_GoodAsGoldActivates;
+ battleScriptBlocksMove = BattleScript_GoodAsGoldActivates;
}
else if (GetChosenMovePriority(gBattlerAttacker) > 0
&& BlocksPrankster(move, gBattlerAttacker, gBattlerTarget, TRUE)
@@ -5087,12 +5225,24 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE) || !(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;
- gBattlescriptCurrInstr = BattleScript_DarkTypePreventsPrankster;
+ battleScriptBlocksMove = BattleScript_DarkTypePreventsPrankster;
effect = 1;
}
+ if (caseID == ABILITYEFFECT_WOULD_BLOCK)
+ {
+ if (effect && gLastUsedAbility != 0xFFFF)
+ RecordAbilityBattle(battler, gLastUsedAbility);
+
+ return effect;
+ }
+ else if (effect)
+ {
+ gBattlescriptCurrInstr = battleScriptBlocksMove;
+ }
break;
}
- case ABILITYEFFECT_ABSORBING: // 3
+ case ABILITYEFFECT_ABSORBING:
+ case ABILITYEFFECT_WOULD_ABSORB:
if (move != MOVE_NONE)
{
u8 statId = 0;
@@ -5125,31 +5275,8 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
effect = 2, statId = STAT_ATK;
break;
case ABILITY_FLASH_FIRE:
- if (moveType == TYPE_FIRE
- && (B_FLASH_FIRE_FROZEN >= GEN_5 || !(gBattleMons[battler].status1 & STATUS1_FREEZE)))
- {
- if (!(gBattleResources->flags->flags[battler] & RESOURCE_FLAG_FLASH_FIRE))
- {
- gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_FLASH_FIRE_BOOST;
- if (gProtectStructs[gBattlerAttacker].notFirstStrike)
- gBattlescriptCurrInstr = BattleScript_FlashFireBoost;
- else
- gBattlescriptCurrInstr = BattleScript_FlashFireBoost_PPLoss;
-
- gBattleResources->flags->flags[battler] |= RESOURCE_FLAG_FLASH_FIRE;
- effect = 3;
- }
- else
- {
- gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_FLASH_FIRE_NO_BOOST;
- if (gProtectStructs[gBattlerAttacker].notFirstStrike)
- gBattlescriptCurrInstr = BattleScript_FlashFireBoost;
- else
- gBattlescriptCurrInstr = BattleScript_FlashFireBoost_PPLoss;
-
- effect = 3;
- }
- }
+ if (moveType == TYPE_FIRE && (B_FLASH_FIRE_FROZEN >= GEN_5 || !(gBattleMons[battler].status1 & STATUS1_FREEZE)))
+ effect = 3;
break;
case ABILITY_WELL_BAKED_BODY:
if (moveType == TYPE_FIRE)
@@ -5164,8 +5291,14 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
effect = 1;
break;
}
+ if (caseID == ABILITYEFFECT_WOULD_ABSORB)
+ {
+ if (effect && gLastUsedAbility != 0xFFFF)
+ RecordAbilityBattle(battler, gLastUsedAbility);
- if (effect == 1) // Drain Hp ability.
+ return effect;
+ }
+ else if (effect == 1) // Drain Hp ability.
{
if (BATTLER_MAX_HP(battler) || (B_HEAL_BLOCKING >= GEN_5 && gStatuses3[battler] & STATUS3_HEAL_BLOCK))
{
@@ -5208,6 +5341,26 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
PREPARE_STAT_BUFFER(gBattleTextBuff1, statId);
}
}
+ else if (effect == 3)
+ {
+ if (!(gBattleResources->flags->flags[battler] & RESOURCE_FLAG_FLASH_FIRE))
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_FLASH_FIRE_BOOST;
+ if (gProtectStructs[gBattlerAttacker].notFirstStrike)
+ gBattlescriptCurrInstr = BattleScript_FlashFireBoost;
+ else
+ gBattlescriptCurrInstr = BattleScript_FlashFireBoost_PPLoss;
+ gBattleResources->flags->flags[battler] |= RESOURCE_FLAG_FLASH_FIRE;
+ }
+ else
+ {
+ gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_FLASH_FIRE_NO_BOOST;
+ if (gProtectStructs[gBattlerAttacker].notFirstStrike)
+ gBattlescriptCurrInstr = BattleScript_FlashFireBoost;
+ else
+ gBattlescriptCurrInstr = BattleScript_FlashFireBoost_PPLoss;
+ }
+ }
if (effect)
gMultiHitCounter = 0; // Prevent multi-hit moves from hitting more than once after move has been absorbed.
@@ -5330,7 +5483,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
&& IsBattlerAlive(gBattlerAttacker)
&& !IsAbilityOnSide(gBattlerAttacker, ABILITY_AROMA_VEIL)
&& gBattleMons[gBattlerAttacker].pp[gChosenMovePos] != 0
- && !IsDynamaxed(gBattlerAttacker) // TODO: Max Moves don't make contact, useless?
+ && !(GetActiveGimmick(gBattlerAttacker) == GIMMICK_DYNAMAX) // TODO: Max Moves don't make contact, useless?
&& RandomPercentage(RNG_CURSED_BODY, 30))
{
gDisableStructs[gBattlerAttacker].disabledMove = gChosenMove;
@@ -5372,7 +5525,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
&& TARGET_TURN_DAMAGED
&& GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS
&& IsMoveMakingContact(move, gBattlerAttacker)
- && !IsDynamaxed(gBattlerTarget)
+ && !(GetActiveGimmick(gBattlerTarget) == GIMMICK_DYNAMAX)
&& !gAbilitiesInfo[gBattleMons[gBattlerAttacker].ability].cantBeSwapped)
{
if (GetBattlerHoldEffect(gBattlerAttacker, TRUE) == HOLD_EFFECT_ABILITY_SHIELD)
@@ -5409,7 +5562,9 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
&& gMovesInfo[move].power != 0
&& TARGET_TURN_DAMAGED
&& !IS_BATTLER_OF_TYPE(battler, moveType)
- && gBattleMons[battler].hp != 0)
+ && moveType != TYPE_STELLAR
+ && moveType != TYPE_MYSTERY
+ && IsBattlerAlive(battler))
{
SET_BATTLER_TYPE(battler, moveType);
PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType);
@@ -5421,7 +5576,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
case ABILITY_GOOEY:
case ABILITY_TANGLING_HAIR:
if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
- && gBattleMons[gBattlerAttacker].hp != 0
+ && IsBattlerAlive(gBattlerAttacker)
&& (CompareStat(gBattlerAttacker, STAT_SPEED, MIN_STAT_STAGE, CMP_GREATER_THAN) || GetBattlerAbility(gBattlerAttacker) == ABILITY_MIRROR_ARMOR)
&& !gProtectStructs[gBattlerAttacker].confusionSelfDmg
&& TARGET_TURN_DAMAGED
@@ -5439,7 +5594,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
case ABILITY_ROUGH_SKIN:
case ABILITY_IRON_BARBS:
if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
- && gBattleMons[gBattlerAttacker].hp != 0
+ && IsBattlerAlive(gBattlerAttacker)
&& !gProtectStructs[gBattlerAttacker].confusionSelfDmg
&& TARGET_TURN_DAMAGED
&& GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS
@@ -5456,7 +5611,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
break;
case ABILITY_AFTERMATH:
if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
- && gBattleMons[gBattlerTarget].hp == 0
+ && !IsBattlerAlive(gBattlerTarget)
&& IsBattlerAlive(gBattlerAttacker)
&& GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS
&& IsMoveMakingContact(move, gBattlerAttacker))
@@ -5481,7 +5636,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
break;
case ABILITY_INNARDS_OUT:
if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
- && gBattleMons[gBattlerTarget].hp == 0
+ && !IsBattlerAlive(gBattlerTarget)
&& IsBattlerAlive(gBattlerAttacker))
{
gBattleMoveDamage = gSpecialStatuses[gBattlerTarget].shellBellDmg;
@@ -5493,24 +5648,38 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
case ABILITY_EFFECT_SPORE:
{
u32 ability = GetBattlerAbility(gBattlerAttacker);
- if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GRASS)
+ if ((!IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GRASS) || B_POWDER_GRASS < GEN_6)
&& ability != ABILITY_OVERCOAT
&& GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_SAFETY_GOGGLES)
{
- i = Random() % 3;
- if (i == 0)
+ u32 poison, paralysis, sleep;
+
+ if (B_ABILITY_TRIGGER_CHANCE >= GEN_5)
+ {
+ poison = 9;
+ paralysis = 19;
+ }
+ else
+ {
+ poison = 10;
+ paralysis = 20;
+ }
+ sleep = 30;
+
+ i = RandomUniform(RNG_EFFECT_SPORE, 0, B_ABILITY_TRIGGER_CHANCE >= GEN_4 ? 99 : 299);
+ if (i < poison)
goto POISON_POINT;
- if (i == 1)
+ if (i < paralysis)
goto STATIC;
// Sleep
- if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
- && gBattleMons[gBattlerAttacker].hp != 0
+ if (i < sleep
+ && !(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && IsBattlerAlive(gBattlerAttacker)
&& !gProtectStructs[gBattlerAttacker].confusionSelfDmg
&& TARGET_TURN_DAMAGED
&& CanBeSlept(gBattlerAttacker, ability)
&& GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS
- && IsMoveMakingContact(move, gBattlerAttacker)
- && (Random() % 3) == 0)
+ && IsMoveMakingContact(move, gBattlerAttacker))
{
gBattleScripting.moveEffect = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_SLEEP;
PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility);
@@ -5522,53 +5691,57 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
}
}
break;
- POISON_POINT:
case ABILITY_POISON_POINT:
- if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
- && gBattleMons[gBattlerAttacker].hp != 0
- && !gProtectStructs[gBattlerAttacker].confusionSelfDmg
- && TARGET_TURN_DAMAGED
- && CanBePoisoned(gBattlerTarget, gBattlerAttacker, GetBattlerAbility(gBattlerAttacker))
- && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS
- && IsMoveMakingContact(move, gBattlerAttacker)
- && RandomWeighted(RNG_POISON_POINT, 2, 1))
+ if (B_ABILITY_TRIGGER_CHANCE >= GEN_4 ? RandomPercentage(RNG_POISON_POINT, 30) : RandomChance(RNG_POISON_POINT, 1, 3))
{
- gBattleScripting.moveEffect = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_POISON;
- PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility);
- BattleScriptPushCursor();
- gBattlescriptCurrInstr = BattleScript_AbilityStatusEffect;
- gHitMarker |= HITMARKER_STATUS_ABILITY_EFFECT;
- effect++;
+ POISON_POINT:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && IsBattlerAlive(gBattlerAttacker)
+ && !gProtectStructs[gBattlerAttacker].confusionSelfDmg
+ && TARGET_TURN_DAMAGED
+ && CanBePoisoned(gBattlerTarget, gBattlerAttacker, GetBattlerAbility(gBattlerAttacker))
+ && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS
+ && IsMoveMakingContact(move, gBattlerAttacker))
+ {
+ gBattleScripting.moveEffect = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_POISON;
+ PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_AbilityStatusEffect;
+ gHitMarker |= HITMARKER_STATUS_ABILITY_EFFECT;
+ effect++;
+ }
}
break;
- STATIC:
case ABILITY_STATIC:
- if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
- && gBattleMons[gBattlerAttacker].hp != 0
- && !gProtectStructs[gBattlerAttacker].confusionSelfDmg
- && TARGET_TURN_DAMAGED
- && CanBeParalyzed(gBattlerAttacker, GetBattlerAbility(gBattlerAttacker))
- && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS
- && IsMoveMakingContact(move, gBattlerAttacker)
- && RandomWeighted(RNG_STATIC, 2, 1))
+ if (B_ABILITY_TRIGGER_CHANCE >= GEN_4 ? RandomPercentage(RNG_STATIC, 30) : RandomChance(RNG_STATIC, 1, 3))
{
- gBattleScripting.moveEffect = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_PARALYSIS;
- PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility);
- BattleScriptPushCursor();
- gBattlescriptCurrInstr = BattleScript_AbilityStatusEffect;
- gHitMarker |= HITMARKER_STATUS_ABILITY_EFFECT;
- effect++;
+ STATIC:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && IsBattlerAlive(gBattlerAttacker)
+ && !gProtectStructs[gBattlerAttacker].confusionSelfDmg
+ && TARGET_TURN_DAMAGED
+ && CanBeParalyzed(gBattlerAttacker, GetBattlerAbility(gBattlerAttacker))
+ && GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS
+ && IsMoveMakingContact(move, gBattlerAttacker))
+ {
+ gBattleScripting.moveEffect = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_PARALYSIS;
+ PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_AbilityStatusEffect;
+ gHitMarker |= HITMARKER_STATUS_ABILITY_EFFECT;
+ effect++;
+ }
}
break;
case ABILITY_FLAME_BODY:
if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
- && gBattleMons[gBattlerAttacker].hp != 0
+ && IsBattlerAlive(gBattlerAttacker)
&& !gProtectStructs[gBattlerAttacker].confusionSelfDmg
&& GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS
&& (IsMoveMakingContact(move, gBattlerAttacker))
&& TARGET_TURN_DAMAGED
&& CanBeBurned(gBattlerAttacker, GetBattlerAbility(gBattlerAttacker))
- && RandomWeighted(RNG_FLAME_BODY, 2, 1))
+ && (B_ABILITY_TRIGGER_CHANCE >= GEN_4 ? RandomPercentage(RNG_FLAME_BODY, 30) : RandomChance(RNG_FLAME_BODY, 1, 3)))
{
gBattleScripting.moveEffect = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_BURN;
PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility);
@@ -5580,11 +5753,11 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
break;
case ABILITY_CUTE_CHARM:
if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
- && gBattleMons[gBattlerAttacker].hp != 0
+ && IsBattlerAlive(gBattlerAttacker)
&& !gProtectStructs[gBattlerAttacker].confusionSelfDmg
&& TARGET_TURN_DAMAGED
- && gBattleMons[gBattlerTarget].hp != 0
- && RandomWeighted(RNG_CUTE_CHARM, 2, 1)
+ && IsBattlerAlive(gBattlerTarget)
+ && (B_ABILITY_TRIGGER_CHANCE >= GEN_4 ? RandomPercentage(RNG_CUTE_CHARM, 30) : RandomChance(RNG_CUTE_CHARM, 1, 3))
&& !(gBattleMons[gBattlerAttacker].status2 & STATUS2_INFATUATION)
&& AreBattlersOfOppositeGender(gBattlerAttacker, gBattlerTarget)
&& GetBattlerAbility(gBattlerAttacker) != ABILITY_OBLIVIOUS
@@ -5608,7 +5781,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
break;
case ABILITY_COTTON_DOWN:
if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
- && gBattleMons[gBattlerAttacker].hp != 0
+ && IsBattlerAlive(gBattlerAttacker)
&& !gProtectStructs[gBattlerAttacker].confusionSelfDmg
&& TARGET_TURN_DAMAGED)
{
@@ -5767,7 +5940,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
&& !gProtectStructs[gBattlerAttacker].confusionSelfDmg
&& IS_MOVE_PHYSICAL(gCurrentMove)
&& TARGET_TURN_DAMAGED
- && (gSideTimers[gBattlerAttacker].toxicSpikesAmount != 2))
+ && (gSideTimers[GetBattlerSide(gBattlerAttacker)].toxicSpikesAmount != 2))
{
SWAP(gBattlerAttacker, gBattlerTarget, i);
BattleScriptPushCursor();
@@ -5782,7 +5955,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
{
case ABILITY_POISON_TOUCH:
if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
- && gBattleMons[gBattlerTarget].hp != 0
+ && IsBattlerAlive(gBattlerTarget)
&& !gProtectStructs[gBattlerAttacker].confusionSelfDmg
&& CanBePoisoned(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerTarget))
&& GetBattlerHoldEffect(gBattlerAttacker, TRUE) != HOLD_EFFECT_PROTECTIVE_PADS
@@ -5798,11 +5971,27 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
effect++;
}
break;
+ case ABILITY_TOXIC_CHAIN:
+ if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
+ && IsBattlerAlive(gBattlerTarget)
+ && !gProtectStructs[gBattlerAttacker].confusionSelfDmg
+ && CanBePoisoned(gBattlerAttacker, gBattlerTarget, GetBattlerAbility(gBattlerTarget))
+ && TARGET_TURN_DAMAGED // Need to actually hit the target
+ && RandomWeighted(RNG_TOXIC_CHAIN, 7, 3))
+ {
+ gBattleScripting.moveEffect = MOVE_EFFECT_TOXIC;
+ PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_AbilityStatusEffect;
+ gHitMarker |= HITMARKER_STATUS_ABILITY_EFFECT;
+ effect++;
+ }
+ break;
case ABILITY_STENCH:
if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
- && gBattleMons[gBattlerTarget].hp != 0
+ && IsBattlerAlive(gBattlerTarget)
&& !gProtectStructs[gBattlerAttacker].confusionSelfDmg
- && RandomWeighted(RNG_STENCH, 9, 1)
+ && RandomChance(RNG_STENCH, 1, 10)
&& TARGET_TURN_DAMAGED
&& !MoveHasAdditionalEffect(gCurrentMove, MOVE_EFFECT_FLINCH))
{
@@ -5823,6 +6012,18 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
effect++;
}
break;
+ case ABILITY_POISON_PUPPETEER:
+ if (gBattleMons[gBattlerAttacker].species == SPECIES_PECHARUNT
+ && gBattleStruct->poisonPuppeteerConfusion == TRUE
+ && CanBeConfused(gBattlerTarget))
+ {
+ gBattleStruct->poisonPuppeteerConfusion = FALSE;
+ gBattleScripting.moveEffect = MOVE_EFFECT_CONFUSION;
+ PREPARE_ABILITY_BUFFER(gBattleTextBuff1, gLastUsedAbility);
+ BattleScriptPushCursor();
+ gBattlescriptCurrInstr = BattleScript_AbilityStatusEffect;
+ effect++;
+ }
}
break;
case ABILITYEFFECT_MOVE_END_OTHER: // Abilities that activate on *another* battler's moveend: Dancer, Soul-Heart, Receiver, Symbiosis
@@ -5847,6 +6048,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))
@@ -5870,9 +6072,10 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
case ABILITY_OPPORTUNIST:
if (gProtectStructs[battler].activateOpportunist == 2)
{
- gBattleScripting.savedBattler = gBattlerAttacker;
- gBattleScripting.battler = gBattlerAttacker = gBattlerAbility = battler;
+ gBattleScripting.animArg1 = 0;
+ gBattleScripting.battler = battler;
gProtectStructs[battler].activateOpportunist--;
+ ChooseStatBoostAnimation(battler);
BattleScriptPushCursorAndCallback(BattleScript_OpportunistCopyStatChange);
effect = 1;
}
@@ -5880,7 +6083,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
}
}
break;
- case ABILITYEFFECT_IMMUNITY: // 5
+ case ABILITYEFFECT_IMMUNITY:
for (battler = 0; battler < gBattlersCount; battler++)
{
switch (GetBattlerAbility(battler))
@@ -5993,7 +6196,7 @@ u32 AbilityBattleEffects(u32 caseID, u32 battler, u32 ability, u32 special, u32
}
}
break;
- case ABILITYEFFECT_ATK_SYNCHRONIZE: // 8
+ case ABILITYEFFECT_ATK_SYNCHRONIZE:
if (gLastUsedAbility == ABILITY_SYNCHRONIZE && (gHitMarker & HITMARKER_SYNCHRONISE_EFFECT))
{
gHitMarker &= ~HITMARKER_SYNCHRONISE_EFFECT;
@@ -6061,17 +6264,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++;
}
@@ -6079,11 +6282,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++;
@@ -6094,7 +6296,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++;
}
@@ -6171,23 +6373,41 @@ bool32 IsNeutralizingGasOnField(void)
return FALSE;
}
-bool32 IsMoldBreakerTypeAbility(u32 ability)
+bool32 IsMoldBreakerTypeAbility(u32 battler, u32 ability)
{
+ if (gStatuses3[battler] & STATUS3_GASTRO_ACID)
+ return FALSE;
+
return (ability == ABILITY_MOLD_BREAKER || ability == ABILITY_TERAVOLT || ability == ABILITY_TURBOBLAZE
|| (ability == ABILITY_MYCELIUM_MIGHT && IS_MOVE_STATUS(gCurrentMove)));
}
+static inline bool32 CanBreakThroughAbility(u32 battlerAtk, u32 battlerDef, u32 ability)
+{
+ return ((IsMoldBreakerTypeAbility(battlerAtk, ability) || gMovesInfo[gCurrentMove].ignoresTargetAbility)
+ && battlerDef != battlerAtk
+ && gAbilitiesInfo[gBattleMons[battlerDef].ability].breakable
+ && gBattlerByTurnOrder[gCurrentTurnActionNumber] == battlerAtk
+ && gActionsByTurnOrder[gCurrentTurnActionNumber] == B_ACTION_USE_MOVE
+ && gCurrentTurnActionNumber < gBattlersCount);
+}
+
u32 GetBattlerAbility(u32 battler)
{
bool32 noAbilityShield = GetBattlerHoldEffectIgnoreAbility(battler, TRUE) != HOLD_EFFECT_ABILITY_SHIELD;
+ bool32 abilityCantBeSuppressed = gAbilitiesInfo[gBattleMons[battler].ability].cantBeSuppressed;
- if (gAbilitiesInfo[gBattleMons[battler].ability].cantBeSuppressed)
+ if (abilityCantBeSuppressed)
{
// Edge case: pokemon under the effect of gastro acid transforms into a pokemon with Comatose (Todo: verify how other unsuppressable abilities behave)
if (gBattleMons[battler].status2 & STATUS2_TRANSFORMED
&& gStatuses3[battler] & STATUS3_GASTRO_ACID
&& gBattleMons[battler].ability == ABILITY_COMATOSE)
return ABILITY_NONE;
+
+ if (noAbilityShield && CanBreakThroughAbility(gBattlerAttacker, battler, gBattleMons[gBattlerAttacker].ability))
+ return ABILITY_NONE;
+
return gBattleMons[battler].ability;
}
@@ -6199,15 +6419,7 @@ u32 GetBattlerAbility(u32 battler)
&& noAbilityShield)
return ABILITY_NONE;
- if (((IsMoldBreakerTypeAbility(gBattleMons[gBattlerAttacker].ability)
- && !(gStatuses3[gBattlerAttacker] & STATUS3_GASTRO_ACID))
- || gMovesInfo[gCurrentMove].ignoresTargetAbility)
- && battler != gBattlerAttacker
- && gAbilitiesInfo[gBattleMons[battler].ability].breakable
- && noAbilityShield
- && gBattlerByTurnOrder[gCurrentTurnActionNumber] == gBattlerAttacker
- && gActionsByTurnOrder[gBattlerByTurnOrder[gBattlerAttacker]] == B_ACTION_USE_MOVE
- && gCurrentTurnActionNumber < gBattlersCount)
+ if (noAbilityShield && CanBreakThroughAbility(gBattlerAttacker, battler, gBattleMons[gBattlerAttacker].ability))
return ABILITY_NONE;
return gBattleMons[battler].ability;
@@ -6429,7 +6641,7 @@ bool32 HasEnoughHpToEatBerry(u32 battler, u32 hpFraction, u32 itemId)
{
bool32 isBerry = (ItemId_GetPocket(itemId) == POCKET_BERRIES);
- if (gBattleMons[battler].hp == 0)
+ if (!IsBattlerAlive(battler))
return FALSE;
if (gBattleScripting.overrideBerryRequirements)
return TRUE;
@@ -6810,10 +7022,11 @@ static u8 TryConsumeMirrorHerb(u32 battler, bool32 execute)
if (gProtectStructs[battler].eatMirrorHerb)
{
+
gLastUsedItem = gBattleMons[battler].item;
- gBattleScripting.savedBattler = gBattlerAttacker;
- gBattleScripting.battler = gBattlerAttacker = battler;
+ gBattleScripting.battler = battler;
gProtectStructs[battler].eatMirrorHerb = 0;
+ ChooseStatBoostAnimation(battler);
if (execute)
{
BattleScriptExecute(BattleScript_MirrorHerbCopyStatChangeEnd2);
@@ -7340,6 +7553,21 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn)
BattleScriptPushCursorAndCallback(BattleScript_BerserkGeneRet);
effect = ITEM_STATS_CHANGE;
break;
+ case HOLD_EFFECT_MIRROR_HERB:
+ effect = TryConsumeMirrorHerb(battler, TRUE);
+ break;
+ case HOLD_EFFECT_BOOSTER_ENERGY:
+ if (!(gBattleStruct->boosterEnergyActivates & gBitTable[battler])
+ && (((GetBattlerAbility(battler) == ABILITY_PROTOSYNTHESIS) && !(gBattleWeather & B_WEATHER_SUN))
+ || ((GetBattlerAbility(battler) == ABILITY_QUARK_DRIVE) && !(gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN))))
+ {
+ PREPARE_STAT_BUFFER(gBattleTextBuff1, GetHighestStatId(battler));
+ gBattleScripting.battler = battler;
+ gBattleStruct->boosterEnergyActivates |= gBitTable[battler];
+ BattleScriptExecute(BattleScript_BoosterEnergyEnd2);
+ effect = ITEM_EFFECT_OTHER;
+ }
+ break;
}
if (effect != 0)
{
@@ -7595,6 +7823,18 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn)
case HOLD_EFFECT_MIRROR_HERB:
effect = TryConsumeMirrorHerb(battler, TRUE);
break;
+ case HOLD_EFFECT_BOOSTER_ENERGY:
+ if (!(gBattleStruct->boosterEnergyActivates & gBitTable[battler])
+ && (((GetBattlerAbility(battler) == ABILITY_PROTOSYNTHESIS) && !(gBattleWeather & B_WEATHER_SUN))
+ || ((GetBattlerAbility(battler) == ABILITY_QUARK_DRIVE) && !(gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN))))
+ {
+ PREPARE_STAT_BUFFER(gBattleTextBuff1, GetHighestStatId(battler));
+ gBattlerAbility = gBattleScripting.battler = battler;
+ gBattleStruct->boosterEnergyActivates |= gBitTable[battler];
+ BattleScriptExecute(BattleScript_BoosterEnergyEnd2);
+ effect = ITEM_EFFECT_OTHER;
+ }
+ break;
}
if (effect != 0)
@@ -7669,7 +7909,7 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn)
break;
case HOLD_EFFECT_BLUNDER_POLICY:
if (gBattleStruct->blunderPolicy
- && gBattleMons[gBattlerAttacker].hp != 0
+ && IsBattlerAlive(gBattlerAttacker)
&& CompareStat(gBattlerAttacker, STAT_SPEED, MAX_STAT_STAGE, CMP_LESS_THAN))
{
gBattleStruct->blunderPolicy = FALSE;
@@ -7690,7 +7930,7 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn)
if (gSpecialStatuses[gBattlerAttacker].damagedMons // Need to have done damage
&& gBattlerAttacker != gBattlerTarget
&& gBattleMons[gBattlerAttacker].hp != gBattleMons[gBattlerAttacker].maxHP
- && gBattleMons[gBattlerAttacker].hp != 0
+ && IsBattlerAlive(gBattlerAttacker)
&& (B_HEAL_BLOCKING < GEN_5 || !(gStatuses3[battler] & STATUS3_HEAL_BLOCK)))
{
gLastUsedItem = atkItem;
@@ -7709,6 +7949,7 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn)
if (IsBattlerAlive(gBattlerAttacker)
&& !(TestIfSheerForceAffected(gBattlerAttacker, gCurrentMove))
&& GetBattlerAbility(gBattlerAttacker) != ABILITY_MAGIC_GUARD
+ && !gProtectStructs[gBattlerAttacker].confusionSelfDmg
&& !gSpecialStatuses[gBattlerAttacker].preventLifeOrbDamage
&& gSpecialStatuses[gBattlerAttacker].damagedMons)
{
@@ -7723,7 +7964,7 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn)
break;
case HOLD_EFFECT_THROAT_SPRAY: // Does NOT need to be a damaging move
if (gProtectStructs[gBattlerAttacker].targetAffected
- && gBattleMons[gBattlerAttacker].hp != 0
+ && IsBattlerAlive(gBattlerAttacker)
&& gMovesInfo[gCurrentMove].soundMove
&& CompareStat(gBattlerAttacker, STAT_SPATK, MAX_STAT_STAGE, CMP_LESS_THAN)
&& !NoAliveMonsForEitherParty()) // Don't activate if battle will end
@@ -7843,7 +8084,7 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn)
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_JabocaRowapBerryActivates;
PREPARE_ITEM_BUFFER(gBattleTextBuff1, gLastUsedItem);
- RecordItemEffectBattle(battler, HOLD_EFFECT_ROCKY_HELMET);
+ RecordItemEffectBattle(battler, HOLD_EFFECT_JABOCA_BERRY);
}
break;
case HOLD_EFFECT_ROWAP_BERRY: // consume and damage attacker if used special move
@@ -7863,7 +8104,7 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn)
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_JabocaRowapBerryActivates;
PREPARE_ITEM_BUFFER(gBattleTextBuff1, gLastUsedItem);
- RecordItemEffectBattle(battler, HOLD_EFFECT_ROCKY_HELMET);
+ RecordItemEffectBattle(battler, HOLD_EFFECT_ROWAP_BERRY);
}
break;
case HOLD_EFFECT_KEE_BERRY: // consume and boost defense if used physical move
@@ -7872,6 +8113,18 @@ u8 ItemBattleEffects(u8 caseID, u32 battler, bool32 moveTurn)
case HOLD_EFFECT_MARANGA_BERRY: // consume and boost sp. defense if used special move
effect = DamagedStatBoostBerryEffect(battler, STAT_SPDEF, DAMAGE_CATEGORY_SPECIAL);
break;
+ case HOLD_EFFECT_CURE_STATUS: // only Toxic Chain's interaction with Knock Off
+ case HOLD_EFFECT_CURE_PSN:
+ if (gBattleMons[battler].status1 & STATUS1_PSN_ANY && !UnnerveOn(battler, gLastUsedItem) && GetBattlerAbility(gBattlerAttacker) == ABILITY_TOXIC_CHAIN && gMovesInfo[gCurrentMove].effect == EFFECT_KNOCK_OFF)
+ {
+ gBattleScripting.battler = battler;
+ gBattleMons[battler].status1 &= ~(STATUS1_PSN_ANY | STATUS1_TOXIC_COUNTER);
+ BattleScriptExecute(BattleScript_BerryCurePsnEnd2);
+ BtlController_EmitSetMonData(battler, 0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[battler].status1);
+ MarkBattlerForControllerExec(battler);
+ effect = ITEM_STATUS_CHANGE;
+ }
+ break;
case HOLD_EFFECT_STICKY_BARB:
if (TARGET_TURN_DAMAGED
&& (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT))
@@ -8000,16 +8253,14 @@ u32 GetMoveTarget(u16 move, u8 setTarget)
{
u8 targetBattler = 0;
u32 moveTarget, side;
+ u32 moveType;
+ GET_MOVE_TYPE(move, moveType);
if (setTarget != NO_TARGET_OVERRIDE)
moveTarget = setTarget - 1;
else
moveTarget = GetBattlerMoveTargetType(gBattlerAttacker, move);
- // Special cases
- if (move == MOVE_CURSE && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GHOST))
- moveTarget = MOVE_TARGET_USER;
-
switch (moveTarget)
{
case MOVE_TARGET_SELECTED:
@@ -8021,7 +8272,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)
{
@@ -8029,7 +8280,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)
{
@@ -8263,7 +8514,7 @@ bool32 IsMoveMakingContact(u32 move, u32 battlerAtk)
if (!gMovesInfo[move].makesContact)
{
- if (move == MOVE_SHELL_SIDE_ARM && gBattleStruct->shellSideArmCategory[battlerAtk][gBattlerTarget] == DAMAGE_CATEGORY_PHYSICAL)
+ if (gMovesInfo[move].effect == EFFECT_SHELL_SIDE_ARM && gBattleStruct->shellSideArmCategory[battlerAtk][gBattlerTarget] == DAMAGE_CATEGORY_PHYSICAL)
return TRUE;
else
return FALSE;
@@ -8291,7 +8542,7 @@ bool32 IsBattlerProtected(u32 battlerAtk, u32 battlerDef, u32 move)
}
// Z-Moves and Max Moves bypass protection (except Max Guard).
- if ((IsMaxMove(move) || gBattleStruct->zmove.active)
+ if ((IsZMove(move) || IsMaxMove(move))
&& (!gProtectStructs[battlerDef].maxGuarded
|| gMovesInfo[move].argument == MAX_EFFECT_BYPASS_PROTECT))
return FALSE;
@@ -8303,15 +8554,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 || (move == MOVE_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;
@@ -8328,11 +8584,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;
@@ -8450,12 +8703,12 @@ u32 GetMoveTargetCount(u32 move, u32 battlerAtk, u32 battlerDef)
switch (GetBattlerMoveTargetType(gBattlerAttacker, move))
{
case MOVE_TARGET_BOTH:
- return IsBattlerAlive(battlerDef)
- + IsBattlerAlive(BATTLE_PARTNER(battlerDef));
+ return !(gAbsentBattlerFlags & gBitTable[battlerDef])
+ + !(gAbsentBattlerFlags & gBitTable[BATTLE_PARTNER(battlerDef)]);
case MOVE_TARGET_FOES_AND_ALLY:
- return IsBattlerAlive(battlerDef)
- + IsBattlerAlive(BATTLE_PARTNER(battlerDef))
- + IsBattlerAlive(BATTLE_PARTNER(battlerAtk));
+ return !(gAbsentBattlerFlags & gBitTable[battlerDef])
+ + !(gAbsentBattlerFlags & gBitTable[BATTLE_PARTNER(battlerDef)])
+ + !(gAbsentBattlerFlags & gBitTable[BATTLE_PARTNER(battlerAtk)]);
case MOVE_TARGET_OPPONENTS_FIELD:
return 1;
case MOVE_TARGET_DEPENDS:
@@ -8590,7 +8843,7 @@ static inline u32 CalcMoveBasePower(u32 move, u32 battlerAtk, u32 battlerDef, u3
u32 basePower = gMovesInfo[move].power;
u32 weight, hpFraction, speed;
- if (gBattleStruct->zmove.active)
+ if (GetActiveGimmick(battlerAtk) == GIMMICK_Z_MOVE)
return GetZMovePower(gBattleStruct->zmove.baseMoves[battlerAtk]);
switch (gMovesInfo[move].effect)
@@ -8633,10 +8886,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 *= (4 - gMultiHitCounter);
+ basePower *= 1 + gMovesInfo[move].strikeCount - gMultiHitCounter;
break;
case EFFECT_SPIT_UP:
basePower = 100 * gDisableStructs[battlerAtk].stockpileCounter;
@@ -8770,7 +9020,7 @@ static inline u32 CalcMoveBasePower(u32 move, u32 battlerAtk, u32 battlerDef, u3
basePower = uq4_12_multiply(basePower, UQ_4_12(1.5));
break;
case EFFECT_DYNAMAX_DOUBLE_DMG:
- if (IsDynamaxed(battlerDef))
+ if (GetActiveGimmick(battlerDef) == GIMMICK_DYNAMAX)
basePower *= 2;
break;
case EFFECT_HIDDEN_POWER:
@@ -8821,9 +9071,13 @@ 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:
+ if (GetActiveGimmick(battlerAtk) == GIMMICK_TERA && GetBattlerTeraType(battlerAtk) == TYPE_STELLAR)
+ basePower = 100;
+ break;
case EFFECT_LAST_RESPECTS:
basePower += (basePower * min(100, GetBattlerSideFaintCounter(battlerAtk)));
break;
@@ -8868,7 +9122,7 @@ static inline u32 CalcMoveBasePowerAfterModifiers(u32 move, u32 battlerAtk, u32
modifier = uq4_12_multiply(modifier, UQ_4_12(2.0));
break;
case EFFECT_SOLAR_BEAM:
- if (IsBattlerWeatherAffected(battlerAtk, (B_WEATHER_HAIL | B_WEATHER_SANDSTORM | B_WEATHER_RAIN | B_WEATHER_SNOW)))
+ if (IsBattlerWeatherAffected(battlerAtk, (B_WEATHER_HAIL | B_WEATHER_SANDSTORM | B_WEATHER_RAIN | B_WEATHER_SNOW | B_WEATHER_FOG)))
modifier = uq4_12_multiply(modifier, UQ_4_12(0.5));
break;
case EFFECT_STOMPING_TANTRUM:
@@ -8905,12 +9159,13 @@ static inline u32 CalcMoveBasePowerAfterModifiers(u32 move, u32 battlerAtk, u32
modifier = uq4_12_multiply(modifier, (B_TERRAIN_TYPE_BOOST >= GEN_8 ? UQ_4_12(1.3) : UQ_4_12(1.5)));
if (IsBattlerTerrainAffected(battlerAtk, STATUS_FIELD_PSYCHIC_TERRAIN) && moveType == TYPE_PSYCHIC)
modifier = uq4_12_multiply(modifier, (B_TERRAIN_TYPE_BOOST >= GEN_8 ? UQ_4_12(1.3) : UQ_4_12(1.5)));
+
if (moveType == TYPE_ELECTRIC && ((gFieldStatuses & STATUS_FIELD_MUDSPORT)
|| AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, 0, ABILITYEFFECT_MUD_SPORT, 0)))
- modifier = uq4_12_multiply(modifier, UQ_4_12(B_SPORT_DMG_REDUCTION >= GEN_5 ? 0.23 : 0.5));
+ modifier = uq4_12_multiply(modifier, UQ_4_12(B_SPORT_DMG_REDUCTION >= GEN_5 ? 0.33 : 0.5));
if (moveType == TYPE_FIRE && ((gFieldStatuses & STATUS_FIELD_WATERSPORT)
|| AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, 0, ABILITYEFFECT_WATER_SPORT, 0)))
- modifier = uq4_12_multiply(modifier, UQ_4_12(B_SPORT_DMG_REDUCTION >= GEN_5 ? 0.23 : 0.5));
+ modifier = uq4_12_multiply(modifier, UQ_4_12(B_SPORT_DMG_REDUCTION >= GEN_5 ? 0.33 : 0.5));
// attacker's abilities
switch (atkAbility)
@@ -9034,7 +9289,7 @@ static inline u32 CalcMoveBasePowerAfterModifiers(u32 move, u32 battlerAtk, u32
case ABILITY_PROTOSYNTHESIS:
{
u8 atkHighestStat = GetHighestStatId(battlerAtk);
- if (weather & B_WEATHER_SUN
+ if ((weather & B_WEATHER_SUN || gBattleStruct->boosterEnergyActivates & gBitTable[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));
}
@@ -9042,7 +9297,7 @@ static inline u32 CalcMoveBasePowerAfterModifiers(u32 move, u32 battlerAtk, u32
case ABILITY_QUARK_DRIVE:
{
u8 atkHighestStat = GetHighestStatId(battlerAtk);
- if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN
+ if ((gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN || gBattleStruct->boosterEnergyActivates & gBitTable[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));
}
@@ -9112,7 +9367,7 @@ static inline u32 CalcMoveBasePowerAfterModifiers(u32 move, u32 battlerAtk, u32
case ABILITY_PROTOSYNTHESIS:
{
u8 defHighestStat = GetHighestStatId(battlerDef);
- if (weather & B_WEATHER_SUN
+ if ((weather & B_WEATHER_SUN || gBattleStruct->boosterEnergyActivates & gBitTable[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));
}
@@ -9120,7 +9375,7 @@ static inline u32 CalcMoveBasePowerAfterModifiers(u32 move, u32 battlerAtk, u32
case ABILITY_QUARK_DRIVE:
{
u8 defHighestStat = GetHighestStatId(battlerDef);
- if (gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN
+ if ((gFieldStatuses & STATUS_FIELD_ELECTRIC_TERRAIN || gBattleStruct->boosterEnergyActivates & gBitTable[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));
}
@@ -9199,6 +9454,19 @@ static inline u32 CalcMoveBasePowerAfterModifiers(u32 move, u32 battlerAtk, u32
modifier = uq4_12_multiply(modifier, UQ_4_12(1.1));
break;
}
+
+ // Terastallization boosts weak, non-priority, non-multi hit moves after modifiers to 60 BP.
+ if (GetActiveGimmick(battlerAtk) == GIMMICK_TERA
+ && (moveType == GetBattlerTeraType(battlerAtk)
+ || (GetBattlerTeraType(battlerAtk) == TYPE_STELLAR && IsTypeStellarBoosted(battlerAtk, moveType)))
+ && uq4_12_multiply_by_int_half_down(modifier, basePower) < 60
+ && gMovesInfo[move].strikeCount < 2
+ && gMovesInfo[move].effect != EFFECT_MULTI_HIT
+ && gMovesInfo[move].priority == 0)
+ {
+ return 60;
+ }
+
return uq4_12_multiply_by_int_half_down(modifier, basePower);
}
@@ -9226,12 +9494,20 @@ static inline u32 CalcAttackStat(u32 move, u32 battlerAtk, u32 battlerDef, u32 m
}
else if (gMovesInfo[move].effect == EFFECT_BODY_PRESS)
{
- atkStat = gBattleMons[battlerAtk].defense;
- // Edge case: Body Press used during Wonder Room. For some reason, it still uses Defense over Sp.Def, but uses Sp.Def stat changes
- if (gFieldStatuses & STATUS_FIELD_WONDER_ROOM)
- atkStage = gBattleMons[battlerAtk].statStages[STAT_SPDEF];
+ if (IS_MOVE_PHYSICAL(move))
+ {
+ atkStat = gBattleMons[battlerAtk].defense;
+ // Edge case: Body Press used during Wonder Room. For some reason, it still uses Defense over Sp.Def, but uses Sp.Def stat changes
+ if (gFieldStatuses & STATUS_FIELD_WONDER_ROOM)
+ atkStage = gBattleMons[battlerAtk].statStages[STAT_SPDEF];
+ else
+ atkStage = gBattleMons[battlerAtk].statStages[STAT_DEF];
+ }
else
- atkStage = gBattleMons[battlerAtk].statStages[STAT_DEF];
+ {
+ atkStat = gBattleMons[battlerAtk].spDefense;
+ atkStage = gBattleMons[battlerAtk].statStages[STAT_SPDEF];
+ }
}
else
{
@@ -9384,11 +9660,11 @@ static inline u32 CalcAttackStat(u32 move, u32 battlerAtk, u32 battlerDef, u32 m
modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(2.0));
break;
case HOLD_EFFECT_CHOICE_BAND:
- if (IS_MOVE_PHYSICAL(move) && !IsDynamaxed(battlerAtk))
+ if (IS_MOVE_PHYSICAL(move) && GetActiveGimmick(battlerAtk) != GIMMICK_DYNAMAX)
modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5));
break;
case HOLD_EFFECT_CHOICE_SPECS:
- if (IS_MOVE_SPECIAL(move) && !IsDynamaxed(battlerAtk))
+ if (IS_MOVE_SPECIAL(move) && GetActiveGimmick(battlerAtk) != GIMMICK_DYNAMAX)
modifier = uq4_12_multiply_half_down(modifier, UQ_4_12(1.5));
break;
}
@@ -9503,7 +9779,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;
}
@@ -9580,7 +9856,7 @@ static inline s32 CalculateBaseDamage(u32 power, u32 userFinalAttack, u32 level,
static inline uq4_12_t GetTargetDamageModifier(u32 move, u32 battlerAtk, u32 battlerDef)
{
- if (GetMoveTargetCount(move, battlerAtk, battlerDef) >= 2)
+ if (IsDoubleBattle() && GetMoveTargetCount(move, battlerAtk, battlerDef) >= 2)
return B_MULTIPLE_TARGETS_DMG >= GEN_4 ? UQ_4_12(0.75) : UQ_4_12(0.5);
return UQ_4_12(1.0);
}
@@ -9594,7 +9870,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);
@@ -9656,7 +9934,7 @@ static inline uq4_12_t GetGlaiveRushModifier(u32 battlerDef)
static inline uq4_12_t GetZMaxMoveAgainstProtectionModifier(u32 battlerDef, u32 move)
{
- if ((gBattleStruct->zmove.active || IsMaxMove(move)) && IS_BATTLER_PROTECTED(battlerDef))
+ if ((IsZMove(move) || IsMaxMove(move)) && IS_BATTLER_PROTECTED(battlerDef))
return UQ_4_12(0.25);
return UQ_4_12(1.0);
}
@@ -9893,11 +10171,14 @@ static inline s32 DoMoveDamageCalcVars(u32 move, u32 battlerAtk, u32 battlerDef,
if (randomFactor)
{
- dmg *= 100 - RandomUniform(RNG_DAMAGE_MODIFIER, 0, 15);
+ dmg *= DMG_ROLL_PERCENT_HI - RandomUniform(RNG_DAMAGE_MODIFIER, 0, DMG_ROLL_PERCENT_HI - DMG_ROLL_PERCENT_LO);
dmg /= 100;
}
- DAMAGE_APPLY_MODIFIER(GetSameTypeAttackBonusModifier(battlerAtk, moveType, move, abilityAtk));
+ if (GetActiveGimmick(battlerAtk) == GIMMICK_TERA)
+ DAMAGE_APPLY_MODIFIER(GetTeraMultiplier(battlerAtk, moveType));
+ else
+ DAMAGE_APPLY_MODIFIER(GetSameTypeAttackBonusModifier(battlerAtk, moveType, move, abilityAtk));
DAMAGE_APPLY_MODIFIER(typeEffectivenessModifier);
DAMAGE_APPLY_MODIFIER(GetBurnOrFrostBiteModifier(battlerAtk, move, abilityAtk));
DAMAGE_APPLY_MODIFIER(GetZMaxMoveAgainstProtectionModifier(battlerDef, move));
@@ -9951,7 +10232,7 @@ static inline s32 DoFutureSightAttackDamageCalcVars(u32 move, u32 battlerAtk, u3
if (randomFactor)
{
- dmg *= 100 - RandomUniform(RNG_DAMAGE_MODIFIER, 0, 15);
+ dmg *= DMG_ROLL_PERCENT_HI - RandomUniform(RNG_DAMAGE_MODIFIER, 0, DMG_ROLL_PERCENT_HI - DMG_ROLL_PERCENT_LO);
dmg /= 100;
}
@@ -10048,10 +10329,12 @@ static inline void MulByTypeEffectiveness(uq4_12_t *modifier, u32 move, u32 move
if (moveType == TYPE_PSYCHIC && defType == TYPE_DARK && gStatuses3[battlerDef] & STATUS3_MIRACLE_EYED && mod == UQ_4_12(0.0))
mod = UQ_4_12(1.0);
- if (gMovesInfo[move].effect == EFFECT_FREEZE_DRY && defType == TYPE_WATER)
+ if (gMovesInfo[move].effect == EFFECT_SUPER_EFFECTIVE_ON_ARG && defType == gMovesInfo[move].argument)
mod = UQ_4_12(2.0);
if (moveType == TYPE_GROUND && defType == TYPE_FLYING && IsBattlerGrounded(battlerDef) && mod == UQ_4_12(0.0))
mod = UQ_4_12(1.0);
+ if (moveType == TYPE_STELLAR && GetActiveGimmick(battlerDef) == GIMMICK_TERA)
+ mod = UQ_4_12(2.0);
// B_WEATHER_STRONG_WINDS weakens Super Effective moves against Flying-type Pokémon
if (gBattleWeather & B_WEATHER_STRONG_WINDS && WEATHER_HAS_EFFECT)
@@ -10060,6 +10343,13 @@ 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)))
+ {
+ mod = UQ_4_12(0.5);
+ if (recordAbilities)
+ RecordAbilityBattle(battlerDef, GetBattlerAbility(battlerDef));
+ }
+
*modifier = uq4_12_multiply(*modifier, mod);
}
@@ -10102,12 +10392,12 @@ static inline uq4_12_t CalcTypeEffectivenessMultiplierInternal(u32 move, u32 mov
{
u32 illusionSpecies;
- MulByTypeEffectiveness(&modifier, move, moveType, battlerDef, GetBattlerType(battlerDef, 0), battlerAtk, recordAbilities);
- if (GetBattlerType(battlerDef, 1) != GetBattlerType(battlerDef, 0))
- MulByTypeEffectiveness(&modifier, move, moveType, battlerDef, GetBattlerType(battlerDef, 1), battlerAtk, recordAbilities);
- if (GetBattlerType(battlerDef, 2) != TYPE_MYSTERY && GetBattlerType(battlerDef, 2) != GetBattlerType(battlerDef, 1)
- && GetBattlerType(battlerDef, 2) != GetBattlerType(battlerDef, 0))
- MulByTypeEffectiveness(&modifier, move, moveType, battlerDef, GetBattlerType(battlerDef, 2), battlerAtk, recordAbilities);
+ MulByTypeEffectiveness(&modifier, move, moveType, battlerDef, GetBattlerType(battlerDef, 0, FALSE), battlerAtk, recordAbilities);
+ if (GetBattlerType(battlerDef, 1, FALSE) != GetBattlerType(battlerDef, 0, FALSE))
+ MulByTypeEffectiveness(&modifier, move, moveType, battlerDef, GetBattlerType(battlerDef, 1, FALSE), battlerAtk, recordAbilities);
+ if (GetBattlerType(battlerDef, 2, FALSE) != TYPE_MYSTERY && GetBattlerType(battlerDef, 2, FALSE) != GetBattlerType(battlerDef, 1, FALSE)
+ && GetBattlerType(battlerDef, 2, FALSE) != GetBattlerType(battlerDef, 0, FALSE))
+ MulByTypeEffectiveness(&modifier, move, moveType, battlerDef, GetBattlerType(battlerDef, 2, FALSE), battlerAtk, recordAbilities);
if (moveType == TYPE_FIRE && gDisableStructs[battlerDef].tarShot)
modifier = uq4_12_multiply(modifier, UQ_4_12(2.0));
@@ -10151,7 +10441,7 @@ static inline uq4_12_t CalcTypeEffectivenessMultiplierInternal(u32 move, u32 mov
// Thousand Arrows ignores type modifiers for flying mons
if (!IsBattlerGrounded(battlerDef) && (gMovesInfo[move].ignoreTypeIfFlyingAndUngrounded)
- && (gBattleMons[battlerDef].type1 == TYPE_FLYING || gBattleMons[battlerDef].type2 == TYPE_FLYING || gBattleMons[battlerDef].type3 == TYPE_FLYING))
+ && (GetBattlerType(battlerDef, 0, FALSE) == TYPE_FLYING || GetBattlerType(battlerDef, 1, FALSE) == TYPE_FLYING || GetBattlerType(battlerDef, 2, FALSE) == TYPE_FLYING))
{
modifier = UQ_4_12(1.0);
}
@@ -10197,7 +10487,8 @@ 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;
+ GET_MOVE_TYPE(move, moveType);
if (move != MOVE_STRUGGLE && moveType != TYPE_MYSTERY)
{
@@ -10232,11 +10523,43 @@ static uq4_12_t GetInverseTypeMultiplier(uq4_12_t multiplier)
}
}
+uq4_12_t GetTypeEffectiveness(struct Pokemon *mon, u8 moveType)
+{
+ uq4_12_t modifier = UQ_4_12(1.0);
+ u16 abilityDef = GetMonAbility(mon);
+ u16 speciesDef = GetMonData(mon, MON_DATA_SPECIES);
+ u8 type1 = gSpeciesInfo[speciesDef].types[0];
+ u8 type2 = gSpeciesInfo[speciesDef].types[1];
+
+ if (moveType != TYPE_MYSTERY)
+ {
+ MulByTypeEffectiveness(&modifier, MOVE_POUND, moveType, 0, type1, 0, FALSE);
+ if (type2 != type1)
+ MulByTypeEffectiveness(&modifier, MOVE_POUND, moveType, 0, type2, 0, FALSE);
+
+ if ((modifier <= UQ_4_12(1.0) && abilityDef == ABILITY_WONDER_GUARD)
+ || (moveType == TYPE_FIRE && abilityDef == ABILITY_FLASH_FIRE)
+ || (moveType == TYPE_GRASS && abilityDef == ABILITY_SAP_SIPPER)
+ || (moveType == TYPE_GROUND && (abilityDef == ABILITY_LEVITATE
+ || abilityDef == ABILITY_EARTH_EATER))
+ || (moveType == TYPE_WATER && (abilityDef == ABILITY_WATER_ABSORB
+ || abilityDef == ABILITY_DRY_SKIN
+ || abilityDef == ABILITY_STORM_DRAIN))
+ || (moveType == TYPE_ELECTRIC && (abilityDef == ABILITY_LIGHTNING_ROD // TODO: Add Gen 3/4 config check
+ || abilityDef == ABILITY_VOLT_ABSORB
+ || abilityDef == ABILITY_MOTOR_DRIVE)))
+ {
+ modifier = UQ_4_12(0.0);
+ }
+ }
+ return modifier;
+}
+
uq4_12_t GetTypeModifier(u32 atkType, u32 defType)
{
if (B_FLAG_INVERSE_BATTLE != 0 && FlagGet(B_FLAG_INVERSE_BATTLE))
- return GetInverseTypeMultiplier(sTypeEffectivenessTable[atkType][defType]);
- return sTypeEffectivenessTable[atkType][defType];
+ return GetInverseTypeMultiplier(gTypeEffectivenessTable[atkType][defType]);
+ return gTypeEffectivenessTable[atkType][defType];
}
s32 GetStealthHazardDamageByTypesAndHP(u8 hazardType, u8 type1, u8 type2, u32 maxHp)
@@ -10285,8 +10608,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);
@@ -10330,62 +10653,37 @@ bool32 DoesSpeciesUseHoldItemToChangeForm(u16 species, u16 heldItemId)
bool32 CanMegaEvolve(u32 battler)
{
- u32 itemId, holdEffect;
- struct Pokemon *mon;
- u32 battlerPosition = GetBattlerPosition(battler);
- u8 partnerPosition = GetBattlerPosition(BATTLE_PARTNER(battler));
- struct MegaEvolutionData *mega = &(((struct ChooseMoveStruct *)(&gBattleResources->bufferA[battler][4]))->mega);
+ u32 holdEffect = GetBattlerHoldEffect(battler, FALSE);
- // Check if Player has a Mega Ring
- if ((GetBattlerPosition(battler) == B_POSITION_PLAYER_LEFT || (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && GetBattlerPosition(battler) == B_POSITION_PLAYER_RIGHT))
- && !CheckBagHasItem(ITEM_MEGA_RING, 1))
+ // Check if Player has a Mega Ring.
+ if (!TESTING
+ && (GetBattlerPosition(battler) == B_POSITION_PLAYER_LEFT || (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && GetBattlerPosition(battler) == B_POSITION_PLAYER_RIGHT))
+ && !CheckBagHasItem(ITEM_MEGA_RING, 1))
return FALSE;
- // Check if trainer already mega evolved a pokemon.
- if (mega->alreadyEvolved[battlerPosition])
+ // Check if Trainer has already Mega Evolved.
+ if (HasTrainerUsedGimmick(battler, GIMMICK_MEGA))
return FALSE;
- // Cannot use z move and mega evolve on same turn
- if (gBattleStruct->zmove.toBeUsed[battler])
+ // Check if battler has another gimmick active.
+ if (GetActiveGimmick(battler) != GIMMICK_NONE)
return FALSE;
- if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE
- && IsPartnerMonFromSameTrainer(battler)
- && (mega->alreadyEvolved[partnerPosition] || (mega->toEvolve & gBitTable[BATTLE_PARTNER(battler)])))
- return FALSE;
-
- // Check if mon is currently held by Sky Drop
+ // Check if battler is currently held by Sky Drop.
if (gStatuses3[battler] & STATUS3_SKY_DROPPED)
return FALSE;
- // Gets mon data.
- if (GetBattlerSide(battler) == B_SIDE_OPPONENT)
- mon = &gEnemyParty[gBattlerPartyIndexes[battler]];
- else
- mon = &gPlayerParty[gBattlerPartyIndexes[battler]];
-
- itemId = GetMonData(mon, MON_DATA_HELD_ITEM);
-
- if (itemId == ITEM_ENIGMA_BERRY_E_READER)
- holdEffect = gEnigmaBerries[battler].holdEffect;
- else
- holdEffect = ItemId_GetHoldEffect(itemId);
+ // Check if battler is holding a Z-Crystal.
+ if (holdEffect == HOLD_EFFECT_Z_CRYSTAL)
+ return FALSE;
- // Check if there is an entry in the evolution table for regular Mega Evolution.
- if (GetBattleFormChangeTargetSpecies(battler, FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM) != SPECIES_NONE)
- {
- // Can Mega Evolve via Mega Stone.
- if (holdEffect == HOLD_EFFECT_MEGA_STONE)
- return TRUE;
- }
+ // Check if there is an entry in the form change table for regular Mega Evolution and battler is holding Mega Stone.
+ if (GetBattleFormChangeTargetSpecies(battler, FORM_CHANGE_BATTLE_MEGA_EVOLUTION_ITEM) != SPECIES_NONE && holdEffect == HOLD_EFFECT_MEGA_STONE)
+ return TRUE;
- // Check if there is an entry in the evolution table for Wish Mega Evolution.
+ // Check if there is an entry in the form change table for Wish Mega Evolution.
if (GetBattleFormChangeTargetSpecies(battler, FORM_CHANGE_BATTLE_MEGA_EVOLUTION_MOVE) != SPECIES_NONE)
- {
- // Can't Wish Mega Evolve if holding a Z Crystal.
- if (holdEffect != HOLD_EFFECT_Z_CRYSTAL)
- return TRUE;
- }
+ return TRUE;
// No checks passed, the mon CAN'T mega evolve.
return FALSE;
@@ -10393,58 +10691,51 @@ bool32 CanMegaEvolve(u32 battler)
bool32 CanUltraBurst(u32 battler)
{
- u32 itemId, holdEffect;
- struct Pokemon *mon;
- u32 battlerPosition = GetBattlerPosition(battler);
- u8 partnerPosition = GetBattlerPosition(BATTLE_PARTNER(battler));
-
- // Check if Player has a Z Ring
- if ((GetBattlerPosition(battler) == B_POSITION_PLAYER_LEFT || (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && GetBattlerPosition(battler) == B_POSITION_PLAYER_RIGHT))
- && !CheckBagHasItem(ITEM_Z_POWER_RING, 1))
- return FALSE;
+ u32 holdEffect = GetBattlerHoldEffect(battler, FALSE);
- // Check if trainer already ultra bursted a pokemon.
- if (gBattleStruct->burst.alreadyBursted[battlerPosition])
+ // Check if Player has a Z-Ring
+ if (!TESTING && (GetBattlerPosition(battler) == B_POSITION_PLAYER_LEFT
+ || (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && GetBattlerPosition(battler) == B_POSITION_PLAYER_RIGHT))
+ && !CheckBagHasItem(ITEM_Z_POWER_RING, 1))
return FALSE;
- // Cannot use z move and ultra burst on same turn
- if (gBattleStruct->zmove.toBeUsed[battler])
+ // Check if Trainer has already Ultra Bursted.
+ if (HasTrainerUsedGimmick(battler, GIMMICK_ULTRA_BURST))
return FALSE;
- if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE
- && IsPartnerMonFromSameTrainer(battler)
- && (gBattleStruct->burst.alreadyBursted[partnerPosition] || (gBattleStruct->burst.toBurst & gBitTable[BATTLE_PARTNER(battler)])))
+ // Check if battler has another gimmick active.
+ if (GetActiveGimmick(battler) != GIMMICK_NONE)
return FALSE;
// Check if mon is currently held by Sky Drop
if (gStatuses3[battler] & STATUS3_SKY_DROPPED)
return FALSE;
- // Gets mon data.
- if (GetBattlerSide(battler) == B_SIDE_OPPONENT)
- mon = &gEnemyParty[gBattlerPartyIndexes[battler]];
- else
- mon = &gPlayerParty[gBattlerPartyIndexes[battler]];
-
- itemId = GetMonData(mon, MON_DATA_HELD_ITEM);
-
- // Check if there is an entry in the evolution table for Ultra Burst.
- if (GetBattleFormChangeTargetSpecies(battler, FORM_CHANGE_BATTLE_ULTRA_BURST) != SPECIES_NONE)
- {
- if (itemId == ITEM_ENIGMA_BERRY_E_READER)
- holdEffect = gEnigmaBerries[battler].holdEffect;
- else
- holdEffect = ItemId_GetHoldEffect(itemId);
-
- // Can Ultra Burst via Z Crystal.
- if (holdEffect == HOLD_EFFECT_Z_CRYSTAL)
- return TRUE;
- }
+ // Check if there is an entry in the form change table for Ultra Burst and battler is holding a Z-Crystal.
+ if (GetBattleFormChangeTargetSpecies(battler, FORM_CHANGE_BATTLE_ULTRA_BURST) != SPECIES_NONE && holdEffect == HOLD_EFFECT_Z_CRYSTAL)
+ return TRUE;
// No checks passed, the mon CAN'T ultra burst.
return FALSE;
}
+void ActivateMegaEvolution(u32 battler)
+{
+ gLastUsedItem = gBattleMons[battler].item;
+ SetActiveGimmick(battler, GIMMICK_MEGA);
+ if (GetBattleFormChangeTargetSpecies(battler, FORM_CHANGE_BATTLE_MEGA_EVOLUTION_MOVE) != SPECIES_NONE)
+ BattleScriptExecute(BattleScript_WishMegaEvolution);
+ else
+ BattleScriptExecute(BattleScript_MegaEvolution);
+}
+
+void ActivateUltraBurst(u32 battler)
+{
+ gLastUsedItem = gBattleMons[battler].item;
+ SetActiveGimmick(battler, GIMMICK_ULTRA_BURST);
+ BattleScriptExecute(BattleScript_UltraBurst);
+}
+
bool32 IsBattlerMegaEvolved(u32 battler)
{
// While Transform does copy stats and visuals, it shouldn't be counted as true Mega Evolution.
@@ -10469,6 +10760,14 @@ bool32 IsBattlerUltraBursted(u32 battler)
return (gSpeciesInfo[gBattleMons[battler].species].isUltraBurst);
}
+bool32 IsBattlerInTeraForm(u32 battler)
+{
+ // While Transform does copy stats and visuals, it shouldn't be counted as a true Tera Form.
+ if (gBattleMons[battler].status2 & STATUS2_TRANSFORMED)
+ return FALSE;
+ return (gSpeciesInfo[gBattleMons[battler].species].isTeraForm);
+}
+
// Returns SPECIES_NONE if no form change is possible
u16 GetBattleFormChangeTargetSpecies(u32 battler, u16 method)
{
@@ -10503,7 +10802,8 @@ u16 GetBattleFormChangeTargetSpecies(u32 battler, u16 method)
targetSpecies = formChanges[i].targetSpecies;
break;
case FORM_CHANGE_BATTLE_SWITCH:
- targetSpecies = formChanges[i].targetSpecies;
+ if (formChanges[i].param1 == GetBattlerAbility(battler) || formChanges[i].param1 == ABILITY_NONE)
+ targetSpecies = formChanges[i].targetSpecies;
break;
case FORM_CHANGE_BATTLE_HP_PERCENT:
if (formChanges[i].param1 == GetBattlerAbility(battler))
@@ -10558,6 +10858,10 @@ u16 GetBattleFormChangeTargetSpecies(u32 battler, u16 method)
if (gBattleMons[battler].status1 & formChanges[i].param1)
targetSpecies = formChanges[i].targetSpecies;
break;
+ case FORM_CHANGE_BATTLE_TERASTALLIZATION:
+ if (GetBattlerTeraType(battler) == formChanges[i].param1)
+ targetSpecies = formChanges[i].targetSpecies;
+ break;
}
}
}
@@ -10573,7 +10877,7 @@ bool32 CanBattlerFormChange(u32 battler, u16 method)
&& B_TRANSFORM_FORM_CHANGES >= GEN_5)
return FALSE;
// Mega Evolved and Ultra Bursted Pokémon should always revert to normal upon fainting or ending the battle.
- if ((IsBattlerMegaEvolved(battler) || IsBattlerUltraBursted(battler)) && (method == FORM_CHANGE_FAINT || method == FORM_CHANGE_END_BATTLE))
+ if ((IsBattlerMegaEvolved(battler) || IsBattlerUltraBursted(battler) || IsBattlerInTeraForm(battler)) && (method == FORM_CHANGE_FAINT || method == FORM_CHANGE_END_BATTLE))
return TRUE;
else if (IsBattlerPrimalReverted(battler) && (method == FORM_CHANGE_END_BATTLE))
return TRUE;
@@ -10613,7 +10917,7 @@ bool32 TryBattleFormChange(u32 battler, u32 method)
bool32 restoreSpecies = FALSE;
// Mega Evolved and Ultra Bursted Pokémon should always revert to normal upon fainting or ending the battle, so no need to add it to the form change tables.
- if ((IsBattlerMegaEvolved(battler) || IsBattlerUltraBursted(battler)) && (method == FORM_CHANGE_FAINT || method == FORM_CHANGE_END_BATTLE))
+ if ((IsBattlerMegaEvolved(battler) || IsBattlerUltraBursted(battler) || IsBattlerInTeraForm(battler)) && (method == FORM_CHANGE_FAINT || method == FORM_CHANGE_END_BATTLE))
restoreSpecies = TRUE;
// Unlike Megas, Primal Reversion isn't canceled on fainting.
@@ -10644,8 +10948,8 @@ bool32 TryBattleFormChange(u32 battler, u32 method)
bool32 DoBattlersShareType(u32 battler1, u32 battler2)
{
s32 i;
- u8 types1[3] = {GetBattlerType(battler1, 0), GetBattlerType(battler1, 1), GetBattlerType(battler1, 2)};
- u8 types2[3] = {GetBattlerType(battler2, 0), GetBattlerType(battler2, 1), GetBattlerType(battler2, 2)};
+ u8 types1[3] = {GetBattlerType(battler1, 0, FALSE), GetBattlerType(battler1, 1, FALSE), GetBattlerType(battler1, 2, FALSE)};
+ u8 types2[3] = {GetBattlerType(battler2, 0, FALSE), GetBattlerType(battler2, 1, FALSE), GetBattlerType(battler2, 2, FALSE)};
if (types1[2] == TYPE_MYSTERY)
types1[2] = types1[0];
@@ -10673,6 +10977,9 @@ bool32 CanBattlerGetOrLoseItem(u32 battler, u16 itemId)
return FALSE;
else if (holdEffect == HOLD_EFFECT_Z_CRYSTAL)
return FALSE;
+ else if (holdEffect == HOLD_EFFECT_BOOSTER_ENERGY
+ && (gSpeciesInfo[gBattleMons[gBattlerAttacker].species].isParadox || gSpeciesInfo[gBattleMons[gBattlerTarget].species].isParadox))
+ return FALSE;
else
return TRUE;
}
@@ -10767,23 +11074,30 @@ bool32 ShouldGetStatBadgeBoost(u16 badgeFlag, u32 battler)
return FALSE;
}
+static u32 SwapMoveDamageCategory(u32 move)
+{
+ if (gMovesInfo[move].category == DAMAGE_CATEGORY_PHYSICAL)
+ return DAMAGE_CATEGORY_SPECIAL;
+ return DAMAGE_CATEGORY_PHYSICAL;
+}
+
u8 GetBattleMoveCategory(u32 moveId)
{
- if (gBattleStruct != NULL && gBattleStruct->zmove.active && !IS_MOVE_STATUS(moveId))
- return gBattleStruct->zmove.activeCategory;
- if (gBattleStruct != NULL && IsMaxMove(moveId)) // TODO: Might be buggy depending on when this is called.
- return gBattleStruct->dynamax.activeCategory;
- if (gBattleStruct != NULL && gBattleStruct->swapDamageCategory) // Photon Geyser, Shell Side Arm, Light That Burns the Sky
- return DAMAGE_CATEGORY_PHYSICAL;
+ u8 moveType;
+ if (gBattleStruct != NULL && gBattleStruct->swapDamageCategory) // Photon Geyser, Shell Side Arm, Light That Burns the Sky, Tera Blast
+ return SwapMoveDamageCategory(moveId);
+ if (gBattleStruct != NULL && (IsZMove(moveId) || IsMaxMove(moveId))) // TODO: Might be buggy depending on when this is called.
+ return gBattleStruct->categoryOverride;
if (B_PHYSICAL_SPECIAL_SPLIT >= GEN_4)
return gMovesInfo[moveId].category;
if (IS_MOVE_STATUS(moveId))
return DAMAGE_CATEGORY_STATUS;
- else if (gMovesInfo[moveId].type < TYPE_MYSTERY)
- return DAMAGE_CATEGORY_PHYSICAL;
+ else if (gMain.inBattle)
+ GET_MOVE_TYPE(moveId, moveType);
else
- return DAMAGE_CATEGORY_SPECIAL;
+ moveType = gMovesInfo[moveId].type;
+ return gTypesInfo[moveType].damageCategory;
}
static bool32 TryRemoveScreens(u32 battler)
@@ -10824,7 +11138,7 @@ static bool32 IsUnnerveAbilityOnOpposingSide(u32 battler)
return FALSE;
}
-// Photon geyser & light that burns the sky
+// Photon Geyser, Light That Burns the Sky, Tera Blast
u8 GetCategoryBasedOnStats(u32 battler)
{
u32 attack = gBattleMons[battler].attack;
@@ -10913,15 +11227,22 @@ void SortBattlersBySpeed(u8 *battlers, bool32 slowToFast)
void TryRestoreHeldItems(void)
{
u32 i;
- u16 lostItem = ITEM_NONE;
+ bool32 returnNPCItems = B_RETURN_STOLEN_NPC_ITEMS >= GEN_5 && gBattleTypeFlags & BATTLE_TYPE_TRAINER;
for (i = 0; i < PARTY_SIZE; i++)
{
- if (B_RESTORE_HELD_BATTLE_ITEMS >= GEN_9 || gBattleStruct->itemLost[B_SIDE_PLAYER][i].stolen)
+ // Check if held items should be restored after battle based on generation
+ if (B_RESTORE_HELD_BATTLE_ITEMS >= GEN_9 || gBattleStruct->itemLost[B_SIDE_PLAYER][i].stolen || returnNPCItems)
{
- lostItem = gBattleStruct->itemLost[B_SIDE_PLAYER][i].originalItem;
- if (lostItem != ITEM_NONE && ItemId_GetPocket(lostItem) != POCKET_BERRIES)
- SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &lostItem); // Restore stolen non-berry items
+ u16 lostItem = gBattleStruct->itemLost[B_SIDE_PLAYER][i].originalItem;
+
+ // Check if the lost item is a berry and the mon is not holding it
+ if (ItemId_GetPocket(lostItem) == POCKET_BERRIES && GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM) != lostItem)
+ lostItem = ITEM_NONE;
+
+ // Check if the lost item should be restored
+ if ((lostItem != ITEM_NONE || returnNPCItems) && ItemId_GetPocket(lostItem) != POCKET_BERRIES)
+ SetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM, &lostItem);
}
}
}
@@ -11118,6 +11439,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)
@@ -11135,11 +11475,17 @@ 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 (gMovesInfo[move].effect == EFFECT_EXPANDING_FORCE
+ 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))
return MOVE_TARGET_BOTH;
- else
- return gMovesInfo[move].target;
+ else if (gMovesInfo[move].effect == EFFECT_TERA_STARSTORM
+ && gBattleMons[battler].species == SPECIES_TERAPAGOS_STELLAR)
+ return MOVE_TARGET_BOTH;
+
+ return gMovesInfo[move].target;
}
bool32 CanTargetBattler(u32 battlerAtk, u32 battlerDef, u16 move)
@@ -11148,7 +11494,7 @@ bool32 CanTargetBattler(u32 battlerAtk, u32 battlerDef, u16 move)
&& GetBattlerSide(battlerAtk) == GetBattlerSide(battlerDef)
&& gStatuses3[battlerAtk] & STATUS3_HEAL_BLOCK)
return FALSE; // Pokémon affected by Heal Block cannot target allies with Pollen Puff
- if ((IsDynamaxed(battlerAtk) || gBattleStruct->dynamax.playerSelect)
+ if ((GetActiveGimmick(battlerAtk) == GIMMICK_DYNAMAX || IsGimmickSelected(battlerAtk, GIMMICK_DYNAMAX))
&& GetBattlerSide(battlerAtk) == GetBattlerSide(battlerDef))
return FALSE;
return TRUE;
@@ -11179,15 +11525,15 @@ 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)
{
CalculateMonStats(mon);
- if (IsDynamaxed(battler) && gChosenActionByBattler[battler] != B_ACTION_SWITCH)
+ if (GetActiveGimmick(battler) == GIMMICK_DYNAMAX && gChosenActionByBattler[battler] != B_ACTION_SWITCH)
ApplyDynamaxHPMultiplier(battler, mon);
CopyMonLevelAndBaseStatsToBattleMon(battler, mon);
CopyMonAbilityAndTypesToBattleMon(battler, mon);
@@ -11383,17 +11729,23 @@ bool8 IsMonBannedFromSkyBattles(u16 species)
}
}
-u8 GetBattlerType(u32 battler, u8 typeIndex)
+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)
+ return GetBattlerTeraType(battler);
// Handle Roost's Flying-type suppression
if (typeIndex == 0 || typeIndex == 1)
{
- if (gBattleResources->flags->flags[battler] & RESOURCE_FLAG_ROOST)
+ if (gBattleResources->flags->flags[battler] & RESOURCE_FLAG_ROOST
+ && GetActiveGimmick(battler) != GIMMICK_TERA)
{
if (types[0] == TYPE_FLYING && types[1] == TYPE_FLYING)
return B_ROOST_PURE_FLYING >= GEN_5 ? TYPE_NORMAL : TYPE_MYSTERY;
@@ -11408,10 +11760,12 @@ u8 GetBattlerType(u32 battler, u8 typeIndex)
void RemoveBattlerType(u32 battler, u8 type)
{
u32 i;
+ if (GetActiveGimmick(battler) == GIMMICK_TERA) // don't remove type if Terastallized
+ 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;
}
}
@@ -11464,3 +11818,27 @@ void SetShellSideArmCategory(void)
}
}
}
+
+bool32 CanTargetPartner(u32 battlerAtk, u32 battlerDef)
+{
+ return (gBattleTypeFlags & BATTLE_TYPE_DOUBLE
+ && IsBattlerAlive(BATTLE_PARTNER(battlerDef))
+ && battlerDef != BATTLE_PARTNER(battlerAtk));
+}
+
+static inline bool32 DoesCurrentTargetHaveAbilityImmunity(void)
+{
+ return (AbilityBattleEffects(ABILITYEFFECT_WOULD_BLOCK, gBattlerTarget, 0, 0, 0)
+ || AbilityBattleEffects(ABILITYEFFECT_WOULD_ABSORB, gBattlerTarget, 0, 0, 0));
+}
+
+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))
+ || IsBattlerProtected(BattlerAtk, battlerDef, gCurrentMove)
+ || IsSemiInvulnerable(battlerDef, gCurrentMove)
+ || DoesCurrentTargetHaveAbilityImmunity());
+}
diff --git a/src/battle_z_move.c b/src/battle_z_move.c
index 203185cfdc85..89514336a728 100644
--- a/src/battle_z_move.c
+++ b/src/battle_z_move.c
@@ -45,12 +45,8 @@
#define STAT_STAGE(battler, stat) (gBattleMons[battler].statStages[stat - 1])
// Function Declarations
-static void SpriteCB_ZMoveTrigger(struct Sprite *sprite);
-static u16 GetSignatureZMove(u16 move, u16 species, u16 item);
static void ZMoveSelectionDisplayPpNumber(u32 battler);
static void ZMoveSelectionDisplayPower(u16 move, u16 zMove);
-static void ShowZMoveTriggerSprite(u8 battleId);
-static bool32 AreStatsMaxed(u8 battler, u8 n);
static void ZMoveSelectionDisplayMoveType(u16 zMove, u32 battler);
// Const Data
@@ -108,260 +104,130 @@ static const u8 sText_RecoverHP[] = _("Recover HP");
static const u8 sText_HealAllyHP[] = _("Heal Replacement HP");
static const u8 sText_PowerColon[] = _("Power: ");
-static const u32 sZMoveTriggerGfx[] = INCBIN_U32("graphics/battle_interface/z_move_trigger.4bpp.lz");
-static const u16 sZMoveTriggerPal[] = INCBIN_U16("graphics/battle_interface/z_move_trigger.gbapal");
+// Functions
+bool32 IsZMove(u32 move)
+{
+ return move >= FIRST_Z_MOVE && move <= LAST_Z_MOVE;
+}
-static const struct CompressedSpriteSheet sSpriteSheet_ZMoveTrigger = {
- sZMoveTriggerGfx, (32 * 32) / 2, TAG_ZMOVE_TRIGGER_TILE
-};
+bool32 CanUseZMove(u32 battler)
+{
+ u32 holdEffect = GetBattlerHoldEffect(battler, FALSE);
-static const struct SpritePalette sSpritePalette_ZMoveTrigger = {
- sZMoveTriggerPal, TAG_ZMOVE_TRIGGER_PAL
-};
+ // Check if Player has Z-Power Ring.
+ if (!TESTING && (battler == B_POSITION_PLAYER_LEFT
+ || (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && battler == B_POSITION_PLAYER_RIGHT))
+ && !CheckBagHasItem(ITEM_Z_POWER_RING, 1))
+ return FALSE;
-static const struct OamData sOamData_ZMoveTrigger =
-{
- .affineMode = ST_OAM_AFFINE_OFF,
- .objMode = ST_OAM_OBJ_NORMAL,
- .shape = SPRITE_SHAPE(32x32),
- .size = SPRITE_SIZE(32x32),
- .priority = 1,
-};
+ // Add '| BATTLE_TYPE_FRONTIER' to below if issues occur
+ if (gBattleTypeFlags & (BATTLE_TYPE_SAFARI | BATTLE_TYPE_WALLY_TUTORIAL))
+ return FALSE;
-static const struct SpriteTemplate sSpriteTemplate_ZMoveTrigger =
-{
- .tileTag = TAG_ZMOVE_TRIGGER_TILE,
- .paletteTag = TAG_ZMOVE_TRIGGER_PAL,
- .oam = &sOamData_ZMoveTrigger,
- .anims = gDummySpriteAnimTable,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCB_ZMoveTrigger
-};
+ // Check if Trainer has already used a Z-Move.
+ if (HasTrainerUsedGimmick(battler, GIMMICK_Z_MOVE))
+ return FALSE;
-// Functions
-bool8 IsZMove(u16 move)
+ // Check if battler has another gimmick active.
+ if (GetActiveGimmick(battler) != GIMMICK_NONE && GetActiveGimmick(battler) != GIMMICK_ULTRA_BURST)
+ return FALSE;
+
+ // Check if battler isn't holding a Z-Crystal.
+ if (holdEffect != HOLD_EFFECT_Z_CRYSTAL)
+ return FALSE;
+
+ // All checks passed!
+ return TRUE;
+}
+
+u32 GetUsableZMove(u32 battler, u32 move)
{
- return move >= FIRST_Z_MOVE && move <= LAST_Z_MOVE;
+ u32 item = gBattleMons[battler].item;
+ u32 holdEffect = GetBattlerHoldEffect(battler, FALSE);
+
+ if (holdEffect == HOLD_EFFECT_Z_CRYSTAL)
+ {
+ u16 zMove = GetSignatureZMove(move, gBattleMons[battler].species, item);
+ if (zMove != MOVE_NONE)
+ return zMove; // Signature z move exists
+
+ if (move != MOVE_NONE && zMove != MOVE_Z_STATUS && gMovesInfo[move].type == ItemId_GetSecondaryId(item))
+ return GetTypeBasedZMove(move);
+ }
+
+ return MOVE_NONE;
}
-void QueueZMove(u8 battler, u16 baseMove)
+void ActivateZMove(u32 battler)
{
- gBattleStruct->zmove.toBeUsed[battler] = gBattleStruct->zmove.chosenZMove;
- gBattleStruct->zmove.baseMoves[battler] = baseMove;
- if (gBattleStruct->zmove.chosenZMove == MOVE_LIGHT_THAT_BURNS_THE_SKY)
- gBattleStruct->zmove.categories[battler] = GetCategoryBasedOnStats(battler);
- else
- gBattleStruct->zmove.categories[battler] = gMovesInfo[baseMove].category;
+ gBattleStruct->zmove.baseMoves[battler] = gBattleMons[battler].moves[gBattleStruct->chosenMovePositions[battler]];
+ SetActiveGimmick(battler, GIMMICK_Z_MOVE);
}
-bool32 IsViableZMove(u8 battler, u16 move)
+bool32 IsViableZMove(u32 battler, u32 move)
{
u32 item;
- u16 holdEffect;
+ u32 holdEffect = GetBattlerHoldEffect(battler, FALSE);
int moveSlotIndex;
item = gBattleMons[battler].item;
+ if (gBattleStruct->gimmick.usableGimmick[battler] != GIMMICK_Z_MOVE)
+ return FALSE;
+
for (moveSlotIndex = 0; moveSlotIndex < MAX_MON_MOVES; moveSlotIndex++)
{
if (gBattleMons[battler].moves[moveSlotIndex] == move && gBattleMons[battler].pp[moveSlotIndex] == 0)
return FALSE;
}
- if (gBattleStruct->zmove.used[battler])
- return FALSE;
-
- // Add '| BATTLE_TYPE_FRONTIER' to below if issues occur
- if (gBattleTypeFlags & (BATTLE_TYPE_SAFARI | BATTLE_TYPE_WALLY_TUTORIAL))
- return FALSE;
-
- if ((GetBattlerPosition(battler) == B_POSITION_PLAYER_LEFT || (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && GetBattlerPosition(battler) == B_POSITION_PLAYER_RIGHT)) && !CheckBagHasItem(ITEM_Z_POWER_RING, 1))
+ // Check if Player has Z-Power Ring.
+ if ((battler == B_POSITION_PLAYER_LEFT || (!(gBattleTypeFlags & BATTLE_TYPE_MULTI) && battler == B_POSITION_PLAYER_RIGHT))
+ && !CheckBagHasItem(ITEM_Z_POWER_RING, 1))
+ {
return FALSE;
+ }
- if (item == ITEM_ENIGMA_BERRY_E_READER)
- return FALSE; // HoldEffect = gEnigmaBerries[battler].holdEffect;
- else
- holdEffect = ItemId_GetHoldEffect(item);
-
+ // Check for signature Z-Move or type-based Z-Move.
if (holdEffect == HOLD_EFFECT_Z_CRYSTAL)
{
u16 zMove = GetSignatureZMove(move, gBattleMons[battler].species, item);
if (zMove != MOVE_NONE)
- {
- gBattleStruct->zmove.chosenZMove = zMove; // Signature z move exists
return TRUE;
- }
- if (move != MOVE_NONE && zMove != MOVE_Z_STATUS && gMovesInfo[move].type == ItemId_GetSecondaryId(item))
- {
- gBattleStruct->zmove.chosenZMove = GetTypeBasedZMove(move, battler);
+ if (move != MOVE_NONE && gMovesInfo[move].type == ItemId_GetSecondaryId(item))
return TRUE;
- }
}
return FALSE;
}
-void GetUsableZMoves(u8 battler, u16 *moves)
+void AssignUsableZMoves(u32 battler, u16 *moves)
{
u32 i;
gBattleStruct->zmove.possibleZMoves[battler] = 0;
for (i = 0; i < MAX_MON_MOVES; i++)
{
if (moves[i] != MOVE_NONE && IsViableZMove(battler, moves[i]))
- gBattleStruct->zmove.possibleZMoves[battler] |= (1 << i);
+ gBattleStruct->zmove.possibleZMoves[battler] |= gBitTable[i];
}
}
-bool32 IsZMoveUsable(u8 battler, u16 moveIndex)
-{
- if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && IsPartnerMonFromSameTrainer(battler) && gBattleStruct->zmove.toBeUsed[BATTLE_PARTNER(battler)] != MOVE_NONE)
- return FALSE; // Player's other mon has a z move queued up already
- if (gBattleStruct->zmove.possibleZMoves[battler] & (1 << moveIndex))
- return TRUE;
- return FALSE;
-}
-
-bool32 TryChangeZIndicator(u8 battler, u8 moveIndex)
+bool32 TryChangeZTrigger(u32 battler, u32 moveIndex)
{
- bool32 viableZMove = IsZMoveUsable(battler, moveIndex);
+ bool32 viableZMove = (gBattleStruct->zmove.possibleZMoves[battler] & gBitTable[moveIndex]) != 0;
if (gBattleStruct->zmove.viable && !viableZMove)
- HideZMoveTriggerSprite(); // Was a viable z move, now is not -> slide out
+ HideGimmickTriggerSprite(); // Was a viable z move, now is not -> slide out
else if (!gBattleStruct->zmove.viable && viableZMove)
- ShowZMoveTriggerSprite(battler); // Was not a viable z move, now is -> slide back in
-
- return viableZMove;
-}
-
-#define SINGLES_Z_TRIGGER_POS_X_OPTIMAL (29)
-#define SINGLES_Z_TRIGGER_POS_X_PRIORITY (29)
-#define SINGLES_Z_TRIGGER_POS_X_SLIDE (15)
-#define SINGLES_Z_TRIGGER_POS_Y_DIFF (-10)
-
-#define DOUBLES_Z_TRIGGER_POS_X_OPTIMAL SINGLES_Z_TRIGGER_POS_X_OPTIMAL
-#define DOUBLES_Z_TRIGGER_POS_X_PRIORITY SINGLES_Z_TRIGGER_POS_X_PRIORITY
-#define DOUBLES_Z_TRIGGER_POS_X_SLIDE SINGLES_Z_TRIGGER_POS_X_SLIDE
-#define DOUBLES_Z_TRIGGER_POS_Y_DIFF (-4)
-
-#define tBattler data[0]
-#define tHide data[1]
-
-void CreateZMoveTriggerSprite(u8 battler, bool8 viable)
-{
- s16 x, y;
+ CreateGimmickTriggerSprite(battler); // Was not a viable z move, now is -> slide back in
- LoadSpritePalette(&sSpritePalette_ZMoveTrigger);
- if (GetSpriteTileStartByTag(TAG_ZMOVE_TRIGGER_TILE) == 0xFFFF)
- LoadCompressedSpriteSheetUsingHeap(&sSpriteSheet_ZMoveTrigger);
+ gBattleStruct->zmove.viable = viableZMove;
- if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
- {
- x = gSprites[gHealthboxSpriteIds[battler]].x - DOUBLES_Z_TRIGGER_POS_X_SLIDE;
- y = gSprites[gHealthboxSpriteIds[battler]].y - DOUBLES_Z_TRIGGER_POS_Y_DIFF;
- }
- else
- {
- x = gSprites[gHealthboxSpriteIds[battler]].x - SINGLES_Z_TRIGGER_POS_X_SLIDE;
- y = gSprites[gHealthboxSpriteIds[battler]].y - SINGLES_Z_TRIGGER_POS_Y_DIFF;
- }
-
- if (gBattleStruct->zmove.triggerSpriteId == 0xFF)
- gBattleStruct->zmove.triggerSpriteId = CreateSprite(&sSpriteTemplate_ZMoveTrigger, x, y, 0);
-
- gSprites[gBattleStruct->zmove.triggerSpriteId].tBattler = battler;
- gSprites[gBattleStruct->zmove.triggerSpriteId].tHide = (viable == TRUE) ? FALSE : TRUE;
-}
-
-static void SpriteCB_ZMoveTrigger(struct Sprite *sprite)
-{
- s32 xSlide, xPriority, xOptimal;
- s32 yDiff;
-
- if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
- {
- xSlide = DOUBLES_Z_TRIGGER_POS_X_SLIDE;
- xPriority = DOUBLES_Z_TRIGGER_POS_X_PRIORITY;
- xOptimal = DOUBLES_Z_TRIGGER_POS_X_OPTIMAL;
- yDiff = DOUBLES_Z_TRIGGER_POS_Y_DIFF;
- }
- else
- {
- xSlide = SINGLES_Z_TRIGGER_POS_X_SLIDE;
- xPriority = SINGLES_Z_TRIGGER_POS_X_PRIORITY;
- xOptimal = SINGLES_Z_TRIGGER_POS_X_OPTIMAL;
- yDiff = SINGLES_Z_TRIGGER_POS_Y_DIFF;
- }
-
- if (sprite->tHide)
- {
- if (sprite->x != gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xSlide)
- sprite->x++;
-
- if (sprite->x >= gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xPriority)
- sprite->oam.priority = 2;
- else
- sprite->oam.priority = 1;
-
- sprite->y = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y - yDiff;
- sprite->y2 = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y2 - yDiff;
- if (sprite->x == gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xSlide)
- DestroyZMoveTriggerSprite();
- }
- else
- {
- if (sprite->x != gSprites[gHealthboxSpriteIds[sprite->tBattler]].x - xOptimal)
- {
- sprite->x--;
- sprite->oam.priority = 2;
- }
- else
- {
- sprite->oam.priority = 1;
- }
- sprite->y = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y - yDiff;
- sprite->y2 = gSprites[gHealthboxSpriteIds[sprite->tBattler]].y2 - yDiff;
- }
-}
-
-bool32 IsZMoveTriggerSpriteActive(void)
-{
- if (GetSpriteTileStartByTag(TAG_ZMOVE_TRIGGER_TILE) == 0xFFFF)
- return FALSE;
- else if (IndexOfSpritePaletteTag(TAG_ZMOVE_TRIGGER_PAL) != 0xFF)
- return TRUE;
- else
- return FALSE;
-}
-
-void HideZMoveTriggerSprite(void)
-{
- struct Sprite *sprite;
- gBattleStruct->zmove.viable = FALSE;
- if (gBattleStruct->zmove.triggerSpriteId >= MAX_SPRITES)
- return;
- sprite = &gSprites[gBattleStruct->zmove.triggerSpriteId];
- sprite->tHide = TRUE;
-}
-
-static void ShowZMoveTriggerSprite(u8 battler)
-{
- gBattleStruct->zmove.viable = TRUE;
- CreateZMoveTriggerSprite(battler, TRUE);
-}
-
-void DestroyZMoveTriggerSprite(void)
-{
- FreeSpritePaletteByTag(TAG_ZMOVE_TRIGGER_PAL);
- FreeSpriteTilesByTag(TAG_ZMOVE_TRIGGER_TILE);
- if (gBattleStruct->zmove.triggerSpriteId != 0xFF)
- DestroySprite(&gSprites[gBattleStruct->zmove.triggerSpriteId]);
-
- gBattleStruct->zmove.triggerSpriteId = 0xFF;
+ return viableZMove;
}
-static u16 GetSignatureZMove(u16 move, u16 species, u16 item)
+u32 GetSignatureZMove(u32 move, u32 species, u32 item)
{
u32 i;
@@ -375,13 +241,17 @@ static u16 GetSignatureZMove(u16 move, u16 species, u16 item)
return MOVE_NONE;
}
-u16 GetTypeBasedZMove(u16 move, u8 battler)
+u32 GetTypeBasedZMove(u32 move)
{
- u8 moveType = gMovesInfo[move].type;
+ u32 moveType = gMovesInfo[move].type;
if (moveType >= NUMBER_OF_MON_TYPES)
moveType = TYPE_MYSTERY;
+ // Z-Weather Ball changes types, however Revelation Dance, -ate ability affected moves, and Hidden Power do not
+ if (gBattleStruct->dynamicMoveType && gMovesInfo[move].effect == EFFECT_WEATHER_BALL)
+ moveType = gBattleStruct->dynamicMoveType & DYNAMIC_TYPE_MASK;
+
// Get Z-Move from type
if (gTypesInfo[moveType].zMove == MOVE_NONE) // failsafe
return gTypesInfo[0].zMove;
@@ -414,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;
@@ -544,7 +414,7 @@ static void ZMoveSelectionDisplayPpNumber(u32 battler)
static void ZMoveSelectionDisplayMoveType(u16 zMove, u32 battler)
{
- u8 *txtPtr;
+ u8 *txtPtr, *end;
u8 zMoveType;
GET_MOVE_TYPE(zMove, zMoveType);
@@ -554,7 +424,8 @@ static void ZMoveSelectionDisplayMoveType(u16 zMove, u32 battler)
*(txtPtr)++ = EXT_CTRL_CODE_FONT;
*(txtPtr)++ = FONT_NORMAL;
- StringCopy(txtPtr, gTypesInfo[zMoveType].name);
+ end = StringCopy(txtPtr, gTypesInfo[zMoveType].name);
+ PrependFontIdToFit(txtPtr, end, FONT_NORMAL, WindowWidthPx(B_WIN_MOVE_TYPE) - 25);
BattlePutTextOnWindow(gDisplayedStringBattle, B_WIN_MOVE_TYPE);
}
@@ -564,20 +435,20 @@ static void ZMoveSelectionDisplayMoveType(u16 zMove, u32 battler)
void SetZEffect(void)
{
u32 i;
+ u32 effect = gMovesInfo[gBattleStruct->zmove.baseMoves[gBattlerAttacker]].zMove.effect;
- gBattleStruct->zmove.zStatusActive = TRUE;
- if (gBattleStruct->zmove.effect == Z_EFFECT_CURSE)
+ if (effect == Z_EFFECT_CURSE)
{
if (IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GHOST))
- gBattleStruct->zmove.effect = Z_EFFECT_RECOVER_HP;
+ effect = Z_EFFECT_RECOVER_HP;
else
- gBattleStruct->zmove.effect = Z_EFFECT_ATK_UP_1;
+ effect = Z_EFFECT_ATK_UP_1;
}
gBattleScripting.savedStatChanger = gBattleScripting.statChanger; // Save used move's stat changer (e.g. for Z-Growl)
gBattleScripting.battler = gBattlerAttacker;
- switch (gBattleStruct->zmove.effect)
+ switch (effect)
{
case Z_EFFECT_RESET_STATS:
for (i = 0; i < NUM_BATTLE_STATS - 1; i++)
@@ -590,22 +461,27 @@ void SetZEffect(void)
gBattlescriptCurrInstr = BattleScript_ZEffectPrintString;
break;
case Z_EFFECT_ALL_STATS_UP_1:
- if (!AreStatsMaxed(gBattlerAttacker, STAT_SPDEF))
+ {
+ bool32 canBoost = FALSE;
+ for (i = STAT_ATK; i < NUM_STATS; i++) // Doesn't increase Acc or Evsn
{
- for (i = 0; i < STAT_ACC - 1; i++) // Doesn't increase Acc or Evsn
+ if (STAT_STAGE(gBattlerAttacker, i) < 12)
{
- if (gBattleMons[gBattlerAttacker].statStages[i] < 12)
- ++gBattleMons[gBattlerAttacker].statStages[i];
+ canBoost = TRUE;
}
+ }
+ if (canBoost)
+ {
gBattleCommunication[MULTISTRING_CHOOSER] = B_MSG_Z_ALL_STATS_UP;
BattleScriptPush(gBattlescriptCurrInstr + Z_EFFECT_BS_LENGTH);
- gBattlescriptCurrInstr = BattleScript_ZEffectPrintString;
+ gBattlescriptCurrInstr = BattleScript_AllStatsUpZMove;
}
else
{
gBattlescriptCurrInstr += Z_EFFECT_BS_LENGTH;
}
break;
+ }
case Z_EFFECT_BOOST_CRITS:
if (!(gBattleMons[gBattlerAttacker].status2 & STATUS2_FOCUS_ENERGY_ANY))
{
@@ -646,17 +522,17 @@ void SetZEffect(void)
gBattlescriptCurrInstr = BattleScript_ZEffectPrintString;
break;
case Z_EFFECT_ATK_UP_1 ... Z_EFFECT_EVSN_UP_1:
- SET_STATCHANGER(gBattleStruct->zmove.effect - Z_EFFECT_ATK_UP_1 + 1, 1, FALSE);
+ SET_STATCHANGER(effect - Z_EFFECT_ATK_UP_1 + 1, 1, FALSE);
BattleScriptPush(gBattlescriptCurrInstr + Z_EFFECT_BS_LENGTH);
gBattlescriptCurrInstr = BattleScript_StatUpZMove;
break;
case Z_EFFECT_ATK_UP_2 ... Z_EFFECT_EVSN_UP_2:
- SET_STATCHANGER(gBattleStruct->zmove.effect - Z_EFFECT_ATK_UP_2 + 1, 2, FALSE);
+ SET_STATCHANGER(effect - Z_EFFECT_ATK_UP_2 + 1, 2, FALSE);
BattleScriptPush(gBattlescriptCurrInstr + Z_EFFECT_BS_LENGTH);
gBattlescriptCurrInstr = BattleScript_StatUpZMove;
break;
case Z_EFFECT_ATK_UP_3 ... Z_EFFECT_EVSN_UP_3:
- SET_STATCHANGER(gBattleStruct->zmove.effect - Z_EFFECT_ATK_UP_3 + 1, 3, FALSE);
+ SET_STATCHANGER(effect - Z_EFFECT_ATK_UP_3 + 1, 3, FALSE);
BattleScriptPush(gBattlescriptCurrInstr + Z_EFFECT_BS_LENGTH);
gBattlescriptCurrInstr = BattleScript_StatUpZMove;
break;
@@ -664,22 +540,9 @@ void SetZEffect(void)
gBattlescriptCurrInstr += Z_EFFECT_BS_LENGTH;
break;
}
-
- gBattleStruct->zmove.zStatusActive = FALSE;
-}
-
-static bool32 AreStatsMaxed(u8 battler, u8 n)
-{
- u32 i;
- for (i = STAT_ATK; i <= n; i++)
- {
- if (STAT_STAGE(battler, i) < MAX_STAT_STAGE)
- return FALSE;
- }
- return TRUE;
}
-u16 GetZMovePower(u16 move)
+u32 GetZMovePower(u32 move)
{
if (gMovesInfo[move].category == DAMAGE_CATEGORY_STATUS)
return 0;
diff --git a/src/braille_puzzles.c b/src/braille_puzzles.c
index 7863f3cc116c..ab0f610fd705 100644
--- a/src/braille_puzzles.c
+++ b/src/braille_puzzles.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "event_data.h"
+#include "event_object_movement.h"
#include "field_camera.h"
#include "field_effect.h"
#include "script.h"
@@ -214,6 +215,7 @@ static void DoBrailleRegirockEffect(void)
PlaySE(SE_BANG);
FlagSet(FLAG_SYS_REGIROCK_PUZZLE_COMPLETED);
UnlockPlayerFieldControls();
+ UnfreezeObjectEvents();
}
bool8 ShouldDoBrailleRegisteelEffect(void)
@@ -253,6 +255,7 @@ static void DoBrailleRegisteelEffect(void)
PlaySE(SE_BANG);
FlagSet(FLAG_SYS_REGISTEEL_PUZZLE_COMPLETED);
UnlockPlayerFieldControls();
+ UnfreezeObjectEvents();
}
// theory: another commented out DoBrailleWait and Task_BrailleWait.
diff --git a/src/cable_car.c b/src/cable_car.c
index 8a666a536e46..347f4e87e85f 100644
--- a/src/cable_car.c
+++ b/src/cable_car.c
@@ -790,12 +790,12 @@ static void CreateCableCarSprites(void)
u8 spriteId;
u8 i;
- u8 playerGraphicsIds[2] = {
+ u16 playerGraphicsIds[2] = {
[MALE] = OBJ_EVENT_GFX_RIVAL_BRENDAN_NORMAL,
[FEMALE] = OBJ_EVENT_GFX_RIVAL_MAY_NORMAL
};
u16 rval = Random();
- u8 hikerGraphicsIds[4] = {
+ u16 hikerGraphicsIds[4] = {
OBJ_EVENT_GFX_HIKER,
OBJ_EVENT_GFX_CAMPER,
OBJ_EVENT_GFX_PICNICKER,
@@ -1058,4 +1058,3 @@ static void InitGroundTilemapData(bool8 goingDown)
sCableCar->groundTimer = 0;
}
-
diff --git a/src/clock.c b/src/clock.c
index 825ccc4448bb..54c9422bbe47 100644
--- a/src/clock.c
+++ b/src/clock.c
@@ -54,6 +54,7 @@ static void UpdatePerDay(struct Time *localTime)
UpdateFrontierGambler(daysSince);
SetShoalItemFlag(daysSince);
SetRandomLotteryNumber(daysSince);
+ UpdateDaysPassedSinceFormChange(daysSince);
*days = localTime->days;
}
}
@@ -83,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/contest.c b/src/contest.c
index f0d0d527ed37..be8bb3e92b3a 100644
--- a/src/contest.c
+++ b/src/contest.c
@@ -1085,6 +1085,18 @@ static const s8 sContestExcitementTable[CONTEST_CATEGORIES_COUNT][CONTEST_CATEGO
}
};
+static void CopyNicknameToFit(u8 *dest, u32 contestant)
+{
+ u8 *end = StringCopy(dest, gContestMons[contestant].nickname);
+ WrapFontIdToFit(dest, end, FONT_NORMAL, 60);
+}
+
+static void CopyMoveNameToFit(u8 *dest, u32 move)
+{
+ u8 *end = StringCopy(dest, GetMoveName(move));
+ WrapFontIdToFit(dest, end, FONT_NORMAL, 84);
+}
+
static void TaskDummy1(u8 taskId)
{
}
@@ -1636,7 +1648,7 @@ static void Task_ShowMoveSelectScreen(u8 taskId)
moveNameBuffer = StringCopy(moveNameBuffer, GetMoveName(move));
FillWindowPixelBuffer(i + MOVE_WINDOWS_START, PIXEL_FILL(0));
- Contest_PrintTextToBg0WindowAt(i + MOVE_WINDOWS_START, moveName, 5, 1, FONT_NARROW);
+ Contest_PrintTextToBg0WindowAt(i + MOVE_WINDOWS_START, moveName, 5, 1, GetFontIdToFit(moveName, FONT_NARROW, 0, WindowWidthPx(i + MOVE_WINDOWS_START) - 11));
}
DrawMoveSelectArrow(eContest.playerMoveChoice);
@@ -1899,7 +1911,7 @@ static void Task_DoAppeals(u8 taskId)
else
{
ContestClearGeneralTextWindow();
- StringCopy(gStringVar1, gContestMons[contestant].nickname);
+ CopyNicknameToFit(gStringVar1, contestant);
if (eContestantStatus[contestant].currMove < MOVES_COUNT)
StringCopy(gStringVar2, GetMoveName(eContestantStatus[contestant].currMove));
else
@@ -2165,7 +2177,7 @@ static void Task_DoAppeals(u8 taskId)
|| eContestantStatus[contestant].turnSkipped)
{
ContestClearGeneralTextWindow();
- StringCopy(gStringVar1, gContestMons[contestant].nickname);
+ CopyNicknameToFit(gStringVar1, contestant);
StringExpandPlaceholders(gStringVar4, gText_MonCantAppealNextTurn);
Contest_StartTextPrinter(gStringVar4, TRUE);
}
@@ -2207,7 +2219,7 @@ static void Task_DoAppeals(u8 taskId)
{
// Started combo
ContestClearGeneralTextWindow();
- StringCopy(gStringVar1, gContestMons[contestant].nickname);
+ CopyNicknameToFit(gStringVar1, contestant);
StringExpandPlaceholders(gStringVar4, gText_JudgeLookedAtMonExpectantly);
Contest_StartTextPrinter(gStringVar4, TRUE);
DoJudgeSpeechBubble(JUDGE_SYMBOL_ONE_EXCLAMATION);
@@ -2251,7 +2263,7 @@ static void Task_DoAppeals(u8 taskId)
if (eContestantStatus[contestant].repeatedMove)
{
ContestClearGeneralTextWindow();
- StringCopy(gStringVar1, gContestMons[contestant].nickname);
+ CopyNicknameToFit(gStringVar1, contestant);
StringExpandPlaceholders(gStringVar4, gText_RepeatedAppeal);
Contest_StartTextPrinter(gStringVar4, TRUE);
gTasks[taskId].tCounter = 0;
@@ -2295,7 +2307,7 @@ static void Task_DoAppeals(u8 taskId)
if (eContestantStatus[contestant].overrideCategoryExcitementMod)
{
r3 = 1;
- StringCopy(gStringVar3, GetMoveName(eContestantStatus[contestant].currMove));
+ CopyMoveNameToFit(gStringVar3, eContestantStatus[contestant].currMove);
}
else
{
@@ -2306,7 +2318,7 @@ static void Task_DoAppeals(u8 taskId)
r3 = 0;
ContestClearGeneralTextWindow();
- StringCopy(gStringVar1, gContestMons[contestant].nickname);
+ CopyNicknameToFit(gStringVar1, contestant);
eContest.applauseLevel += r3;
if (eContest.applauseLevel < 0)
eContest.applauseLevel = 0;
@@ -2428,9 +2440,9 @@ static void Task_DoAppeals(u8 taskId)
return;
case APPEALSTATE_PRINT_CROWD_WATCHES_MSG:
ContestClearGeneralTextWindow();
- StringCopy(gStringVar3, gContestMons[eContestExcitement.freezer].nickname);
- StringCopy(gStringVar1, gContestMons[contestant].nickname);
- StringCopy(gStringVar2, GetMoveName(eContestantStatus[contestant].currMove));
+ CopyNicknameToFit(gStringVar3, eContestExcitement.freezer);
+ CopyNicknameToFit(gStringVar1, contestant);
+ CopyMoveNameToFit(gStringVar2, eContestantStatus[contestant].currMove);
StringExpandPlaceholders(gStringVar4, gText_CrowdContinuesToWatchMon);
Contest_StartTextPrinter(gStringVar4, TRUE);
gTasks[taskId].tState = APPEALSTATE_PRINT_MON_MOVE_IGNORED_MSG;
@@ -2455,8 +2467,8 @@ static void Task_DoAppeals(u8 taskId)
if (eContestantStatus[contestant].hasJudgesAttention)
eContestantStatus[contestant].hasJudgesAttention = FALSE;
StartStopFlashJudgeAttentionEye(contestant);
- StringCopy(gStringVar1, gContestMons[contestant].nickname);
- StringCopy(gStringVar2, GetMoveName(eContestantStatus[contestant].currMove));
+ CopyNicknameToFit(gStringVar1, contestant);
+ CopyMoveNameToFit(gStringVar2, eContestantStatus[contestant].currMove);
StringExpandPlaceholders(gStringVar4, gText_MonWasTooNervousToMove);
Contest_StartTextPrinter(gStringVar4, TRUE);
gTasks[taskId].tState = APPEALSTATE_WAIT_TOO_NERVOUS_MSG;
@@ -2500,7 +2512,7 @@ static void Task_DoAppeals(u8 taskId)
return;
case APPEALSTATE_PRINT_SKIP_TURN_MSG:
ContestClearGeneralTextWindow();
- StringCopy(gStringVar1, gContestMons[contestant].nickname);
+ CopyNicknameToFit(gStringVar1, contestant);
StringExpandPlaceholders(gStringVar4, gText_MonWasWatchingOthers);
Contest_StartTextPrinter(gStringVar4, TRUE);
gTasks[taskId].tState = APPEALSTATE_WAIT_SKIP_TURN_MSG;
@@ -3133,7 +3145,7 @@ static void PrintContestantMonName(u8 contestant)
static void PrintContestantMonNameWithColor(u8 contestant, u8 color)
{
Contest_CopyStringWithColor(gContestMons[contestant].nickname, color);
- Contest_PrintTextToBg0WindowAt(gContestantTurnOrder[contestant], gDisplayedStringBattle, 5, 1, FONT_NARROW);
+ Contest_PrintTextToBg0WindowAt(gContestantTurnOrder[contestant], gDisplayedStringBattle, 5, 1, GetFontIdToFit(gContestMons[contestant].nickname, FONT_NARROW, 0, 50));
}
static u16 CalculateContestantRound1Points(u8 who, u8 contestCategory)
@@ -5642,7 +5654,7 @@ bool8 SaveContestWinner(u8 rank)
gSaveBlock1Ptr->contestWinners[id].personality = gContestMons[i].personality;
gSaveBlock1Ptr->contestWinners[id].species = gContestMons[i].species;
gSaveBlock1Ptr->contestWinners[id].trainerId = gContestMons[i].otId;
- StringCopy(gSaveBlock1Ptr->contestWinners[id].monName, gContestMons[i].nickname);
+ StringCopyN(gSaveBlock1Ptr->contestWinners[id].monName, gContestMons[i].nickname, VANILLA_POKEMON_NAME_LENGTH);
StringCopy(gSaveBlock1Ptr->contestWinners[id].trainerName, gContestMons[i].trainerName);
if(gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
gSaveBlock1Ptr->contestWinners[id].contestRank = CONTEST_RANK_LINK;
@@ -5661,7 +5673,7 @@ bool8 SaveContestWinner(u8 rank)
gCurContestWinner.isShiny = gContestMons[i].isShiny;
gCurContestWinner.trainerId = gContestMons[i].otId;
gCurContestWinner.species = gContestMons[i].species;
- StringCopy(gCurContestWinner.monName, gContestMons[i].nickname);
+ StringCopyN(gCurContestWinner.monName, gContestMons[i].nickname, VANILLA_POKEMON_NAME_LENGTH);
StringCopy(gCurContestWinner.trainerName, gContestMons[i].trainerName);
gCurContestWinner.contestCategory = captionId;
}
diff --git a/src/contest_util.c b/src/contest_util.c
index 7977f373c165..3938fcd382da 100644
--- a/src/contest_util.c
+++ b/src/contest_util.c
@@ -130,6 +130,7 @@ static void LoadContestResultsTitleBarTilemaps(void);
static u8 GetNumPreliminaryPoints(u8, bool8);
static s8 GetNumRound2Points(u8, bool8);
static void AddContestTextPrinter(int, u8 *, int);
+static void AddContestTextPrinterFitWidth(int, u8 *, int, int);
static void AllocContestResults(void);
static void FreeContestResults(void);
static void LoadAllContestMonIcons(u8, u8);
@@ -504,7 +505,7 @@ static void LoadContestMonName(u8 monIndex)
str = StringCopy(gDisplayedStringBattle, gText_ColorDarkGray);
StringCopy(str, mon->nickname);
- AddContestTextPrinter(monIndex, gDisplayedStringBattle, 0);
+ AddContestTextPrinterFitWidth(monIndex, gDisplayedStringBattle, 0, 49);
StringCopy(str, gText_Slash);
StringAppend(str, mon->trainerName);
AddContestTextPrinter(monIndex, gDisplayedStringBattle, 50);
@@ -1916,12 +1917,12 @@ static void FreeContestResults(void)
FreeMonSpritesGfx();
}
-static void AddContestTextPrinter(int windowId, u8 *str, int x)
+static void AddContestTextPrinterFitWidth(int windowId, u8 *str, int x, int widthPx)
{
struct TextPrinterTemplate textPrinter;
textPrinter.currentChar = str;
textPrinter.windowId = windowId;
- textPrinter.fontId = FONT_NARROW;
+ textPrinter.fontId = GetFontIdToFit(str, FONT_NARROW, 0, widthPx);
textPrinter.x = x;
textPrinter.y = 2;
textPrinter.currentX = x;
@@ -1936,6 +1937,11 @@ static void AddContestTextPrinter(int windowId, u8 *str, int x)
PutWindowTilemap(windowId);
}
+static void AddContestTextPrinter(int windowId, u8 *str, int x)
+{
+ AddContestTextPrinterFitWidth(windowId, str, x, DISPLAY_WIDTH);
+}
+
void TryEnterContestMon(void)
{
u8 eligibility = GetContestEntryEligibility(&gPlayerParty[gContestMonPartyIndex]);
@@ -2495,28 +2501,28 @@ void LoadLinkContestPlayerPalettes(void)
struct Sprite *sprite;
static const u8 sContestantLocalIds[CONTESTANT_COUNT] = { 3, 4, 5, 14 };
- gReservedSpritePaletteCount = 12;
+ // gReservedSpritePaletteCount = 12;
+ // TODO: Does dynamically allocating link player palettes break link contests?
if (gLinkContestFlags & LINK_CONTEST_FLAG_IS_LINK)
{
for (i = 0; i < gNumLinkContestPlayers; i++)
{
objectEventId = GetObjectEventIdByLocalIdAndMap(sContestantLocalIds[i], gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup);
sprite = &gSprites[gObjectEvents[objectEventId].spriteId];
- sprite->oam.paletteNum = 6 + i;
version = (u8)gLinkPlayers[i].version;
if (version == VERSION_RUBY || version == VERSION_SAPPHIRE)
{
if (gLinkPlayers[i].gender == MALE)
- LoadPalette(gObjectEventPal_RubySapphireBrendan, OBJ_PLTT_ID(6 + i), PLTT_SIZE_4BPP);
+ sprite->oam.paletteNum = LoadObjectEventPalette(OBJ_EVENT_PAL_TAG_RS_BRENDAN);
else
- LoadPalette(gObjectEventPal_RubySapphireMay, OBJ_PLTT_ID(6 + i), PLTT_SIZE_4BPP);
+ sprite->oam.paletteNum = LoadObjectEventPalette(OBJ_EVENT_PAL_TAG_RS_MAY);
}
else
{
if (gLinkPlayers[i].gender == MALE)
- LoadPalette(gObjectEventPal_Brendan, OBJ_PLTT_ID(6 + i), PLTT_SIZE_4BPP);
+ sprite->oam.paletteNum = LoadObjectEventPalette(OBJ_EVENT_PAL_TAG_BRENDAN);
else
- LoadPalette(gObjectEventPal_May, OBJ_PLTT_ID(6 + i), PLTT_SIZE_4BPP);
+ sprite->oam.paletteNum = LoadObjectEventPalette(OBJ_EVENT_PAL_TAG_MAY);
}
}
}
diff --git a/src/data.c b/src/data.c
index 3f516d3a7ff9..ccb6b4c62324 100644
--- a/src/data.c
+++ b/src/data.c
@@ -226,4 +226,10 @@ const union AnimCmd *const sAnims_Trainer[] ={
};
#include "data/trainer_parties.h"
+
+const struct Trainer gTrainers[] =
+{
#include "data/trainers.h"
+};
+
+#include "data/text/follower_messages.h"
diff --git a/src/data/abilities.h b/src/data/abilities.h
index 8fc7d699e1ce..ccb27ffe35ff 100644
--- a/src/data/abilities.h
+++ b/src/data/abilities.h
@@ -881,7 +881,11 @@ const struct Ability gAbilitiesInfo[ABILITIES_COUNT] =
[ABILITY_SNOW_WARNING] =
{
.name = _("Snow Warning"),
- .description = COMPOUND_STRING("Summons a Hailstorm."),
+ #if B_SNOW_WARNING >= GEN_9
+ .description = COMPOUND_STRING("Summons snow in battle."),
+ #else
+ .description = COMPOUND_STRING("Summons hail in battle."),
+ #endif
.aiRating = 8,
},
diff --git a/src/data/battle_anim.h b/src/data/battle_anim.h
index 77b61584cad8..72a3c7121bda 100644
--- a/src/data/battle_anim.h
+++ b/src/data/battle_anim.h
@@ -1454,6 +1454,17 @@ const struct CompressedSpriteSheet gBattleAnimPicTable[] =
{gBattleAnimSpriteGfx_SyrupShell, 0x2000, ANIM_TAG_SYRUP_SHELL_YELLOW},
{gBattleAnimSpriteGfx_SyrupSplat, 0x400, ANIM_TAG_SYRUP_SPLAT_RED},
{gBattleAnimSpriteGfx_SyrupSplat, 0x400, ANIM_TAG_SYRUP_SPLAT_YELLOW},
+ {gBattleAnimSpriteGfx_IvyCudgel, 0x800, ANIM_TAG_IVY_CUDGEL_GRASS},
+ {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[] =
@@ -1909,6 +1920,17 @@ const struct CompressedSpritePalette gBattleAnimPaletteTable[] =
{gBattleAnimSpritePal_SyrupYellow, ANIM_TAG_SYRUP_SHELL_YELLOW},
{gBattleAnimSpritePal_SyrupRed, ANIM_TAG_SYRUP_SPLAT_RED},
{gBattleAnimSpritePal_SyrupYellow, ANIM_TAG_SYRUP_SPLAT_YELLOW},
+ {gBattleAnimSpritePal_IvyCudgelGrass, ANIM_TAG_IVY_CUDGEL_GRASS},
+ {gBattleAnimSpritePal_IvyCudgelFire, ANIM_TAG_IVY_CUDGEL_FIRE},
+ {gBattleAnimSpritePal_IvyCudgelRock, ANIM_TAG_IVY_CUDGEL_ROCK},
+ {gBattleAnimSpritePal_IvyCudgelWater, ANIM_TAG_IVY_CUDGEL_WATER},
+ {gBattleAnimSpritePal_TeraCrystal, ANIM_TAG_TERA_CRYSTAL},
+ {gBattleAnimSpritePal_TeraShatter, ANIM_TAG_TERA_SHATTER},
+ {gBattleAnimSpritePal_DreepyMissileShiny, ANIM_TAG_DREEPY_SHINY},
+ {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[] =
diff --git a/src/data/battle_frontier/battle_frontier_mons.h b/src/data/battle_frontier/battle_frontier_mons.h
index 1147ab908089..e83a25e82998 100644
--- a/src/data/battle_frontier/battle_frontier_mons.h
+++ b/src/data/battle_frontier/battle_frontier_mons.h
@@ -1,6177 +1,6177 @@
-const struct FacilityMon gBattleFrontierMons[NUM_FRONTIER_MONS] =
+const struct TrainerMon gBattleFrontierMons[NUM_FRONTIER_MONS] =
{
[FRONTIER_MON_SUNKERN] = {
.species = SPECIES_SUNKERN,
.moves = {MOVE_MEGA_DRAIN, MOVE_HELPING_HAND, MOVE_SUNNY_DAY, MOVE_LIGHT_SCREEN},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_AZURILL] = {
.species = SPECIES_AZURILL,
.moves = {MOVE_WATER_PULSE, MOVE_ATTRACT, MOVE_SING, MOVE_CHARM},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHERI_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_RASH
},
[FRONTIER_MON_CATERPIE] = {
.species = SPECIES_CATERPIE,
.moves = {MOVE_TACKLE, MOVE_STRING_SHOT, MOVE_NONE, MOVE_NONE},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_WEEDLE] = {
.species = SPECIES_WEEDLE,
.moves = {MOVE_POISON_STING, MOVE_STRING_SHOT, MOVE_NONE, MOVE_NONE},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_WURMPLE] = {
.species = SPECIES_WURMPLE,
.moves = {MOVE_TACKLE, MOVE_STRING_SHOT, MOVE_POISON_STING, MOVE_NONE},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_RALTS] = {
.species = SPECIES_RALTS,
.moves = {MOVE_CONFUSION, MOVE_IMPRISON, MOVE_DOUBLE_TEAM, MOVE_LIGHT_SCREEN},
- .itemTableId = BATTLE_FRONTIER_ITEM_TWISTED_SPOON,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_TWISTED_SPOON,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_MAGIKARP] = {
.species = SPECIES_MAGIKARP,
.moves = {MOVE_FLAIL, MOVE_NONE, MOVE_NONE, MOVE_NONE},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_FEEBAS] = {
.species = SPECIES_FEEBAS,
.moves = {MOVE_FLAIL, MOVE_MIRROR_COAT, MOVE_NONE, MOVE_NONE},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_LONELY
},
[FRONTIER_MON_METAPOD] = {
.species = SPECIES_METAPOD,
.moves = {MOVE_HARDEN, MOVE_NONE, MOVE_NONE, MOVE_NONE},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_BASHFUL
},
[FRONTIER_MON_KAKUNA] = {
.species = SPECIES_KAKUNA,
.moves = {MOVE_HARDEN, MOVE_NONE, MOVE_NONE, MOVE_NONE},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_BASHFUL
},
[FRONTIER_MON_PICHU] = {
.species = SPECIES_PICHU,
.moves = {MOVE_SWEET_KISS, MOVE_THUNDER_WAVE, MOVE_ATTRACT, MOVE_SHOCK_WAVE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_RASH
},
[FRONTIER_MON_SILCOON] = {
.species = SPECIES_SILCOON,
.moves = {MOVE_HARDEN, MOVE_NONE, MOVE_NONE, MOVE_NONE},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_BASHFUL
},
[FRONTIER_MON_CASCOON] = {
.species = SPECIES_CASCOON,
.moves = {MOVE_HARDEN, MOVE_NONE, MOVE_NONE, MOVE_NONE},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_BASHFUL
},
[FRONTIER_MON_IGGLYBUFF] = {
.species = SPECIES_IGGLYBUFF,
.moves = {MOVE_SWEET_KISS, MOVE_SING, MOVE_ATTRACT, MOVE_SEISMIC_TOSS},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_WOOPER] = {
.species = SPECIES_WOOPER,
.moves = {MOVE_YAWN, MOVE_DIG, MOVE_WATER_PULSE, MOVE_RAIN_DANCE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_TYROGUE] = {
.species = SPECIES_TYROGUE,
.moves = {MOVE_MACH_PUNCH, MOVE_PROTECT, MOVE_DOUBLE_TEAM, MOVE_FACADE},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_SENTRET] = {
.species = SPECIES_SENTRET,
.moves = {MOVE_QUICK_ATTACK, MOVE_FOLLOW_ME, MOVE_HELPING_HAND, MOVE_ASSIST},
- .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_KINGS_ROCK,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_CLEFFA] = {
.species = SPECIES_CLEFFA,
.moves = {MOVE_SWEET_KISS, MOVE_SING, MOVE_ATTRACT, MOVE_METRONOME},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_SERIOUS
},
[FRONTIER_MON_SEEDOT] = {
.species = SPECIES_SEEDOT,
.moves = {MOVE_BULLET_SEED, MOVE_BIDE, MOVE_DEFENSE_CURL, MOVE_ROLLOUT},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_LOTAD] = {
.species = SPECIES_LOTAD,
.moves = {MOVE_RAIN_DANCE, MOVE_WATER_PULSE, MOVE_SUNNY_DAY, MOVE_MEGA_DRAIN},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_POOCHYENA] = {
.species = SPECIES_POOCHYENA,
.moves = {MOVE_CRUNCH, MOVE_SWAGGER, MOVE_ROAR, MOVE_SAND_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PETAYA_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_SHEDINJA] = {
.species = SPECIES_SHEDINJA,
.moves = {MOVE_SHADOW_BALL, MOVE_CONFUSE_RAY, MOVE_SILVER_WIND, MOVE_GRUDGE},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 252, 0, 0),
.nature = NATURE_NAIVE
},
[FRONTIER_MON_MAKUHITA] = {
.species = SPECIES_MAKUHITA,
.moves = {MOVE_FAKE_OUT, MOVE_SEISMIC_TOSS, MOVE_DETECT, MOVE_WHIRLWIND},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_WHISMUR] = {
.species = SPECIES_WHISMUR,
.moves = {MOVE_UPROAR, MOVE_SWAGGER, MOVE_BODY_SLAM, MOVE_SMELLING_SALTS},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHERI_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_ZIGZAGOON] = {
.species = SPECIES_ZIGZAGOON,
.moves = {MOVE_HEADBUTT, MOVE_PIN_MISSILE, MOVE_SWIFT, MOVE_SAND_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_SILK_SCARF,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SILK_SCARF,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_TIMID
},
[FRONTIER_MON_ZUBAT] = {
.species = SPECIES_ZUBAT,
.moves = {MOVE_POISON_FANG, MOVE_WHIRLWIND, MOVE_CONFUSE_RAY, MOVE_AERIAL_ACE},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHERI_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_SASSY
},
[FRONTIER_MON_TOGEPI] = {
.species = SPECIES_TOGEPI,
.moves = {MOVE_RETURN, MOVE_YAWN, MOVE_WISH, MOVE_SWEET_KISS},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_SPINARAK] = {
.species = SPECIES_SPINARAK,
.moves = {MOVE_SIGNAL_BEAM, MOVE_NIGHT_SHADE, MOVE_SPIDER_WEB, MOVE_SCARY_FACE},
- .itemTableId = BATTLE_FRONTIER_ITEM_LIECHI_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LIECHI_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_MARILL] = {
.species = SPECIES_MARILL,
.moves = {MOVE_WATER_PULSE, MOVE_RAIN_DANCE, MOVE_LIGHT_SCREEN, MOVE_RETURN},
- .itemTableId = BATTLE_FRONTIER_ITEM_MYSTIC_WATER,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_MYSTIC_WATER,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_GENTLE
},
[FRONTIER_MON_HOPPIP] = {
.species = SPECIES_HOPPIP,
.moves = {MOVE_MEGA_DRAIN, MOVE_LEECH_SEED, MOVE_SLEEP_POWDER, MOVE_STUN_SPORE},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_LAX
},
[FRONTIER_MON_SLUGMA] = {
.species = SPECIES_SLUGMA,
.moves = {MOVE_EMBER, MOVE_ROCK_SLIDE, MOVE_YAWN, MOVE_BODY_SLAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_SASSY
},
[FRONTIER_MON_SWINUB] = {
.species = SPECIES_SWINUB,
.moves = {MOVE_ICY_WIND, MOVE_DIG, MOVE_ROCK_TOMB, MOVE_ENDURE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_GENTLE
},
[FRONTIER_MON_SMEARGLE] = {
.species = SPECIES_SMEARGLE,
.moves = {MOVE_EXTREME_SPEED, MOVE_FAKE_OUT, MOVE_QUICK_ATTACK, MOVE_MACH_PUNCH},
- .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_KINGS_ROCK,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_PIDGEY] = {
.species = SPECIES_PIDGEY,
.moves = {MOVE_GUST, MOVE_SAND_ATTACK, MOVE_WHIRLWIND, MOVE_QUICK_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHARP_BEAK,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SHARP_BEAK,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_LONELY
},
[FRONTIER_MON_RATTATA] = {
.species = SPECIES_RATTATA,
.moves = {MOVE_HYPER_FANG, MOVE_PURSUIT, MOVE_QUICK_ATTACK, MOVE_SWAGGER},
- .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_KINGS_ROCK,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_WYNAUT] = {
.species = SPECIES_WYNAUT,
.moves = {MOVE_ENCORE, MOVE_COUNTER, MOVE_MIRROR_COAT, MOVE_CHARM},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_JOLLY
},
[FRONTIER_MON_SKITTY] = {
.species = SPECIES_SKITTY,
.moves = {MOVE_SING, MOVE_ATTRACT, MOVE_CHARM, MOVE_DOUBLE_SLAP},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_SPEAROW] = {
.species = SPECIES_SPEAROW,
.moves = {MOVE_FURY_ATTACK, MOVE_PURSUIT, MOVE_MIRROR_MOVE, MOVE_PROTECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_LIECHI_BERRY,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LIECHI_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 252, 0, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_HOOTHOOT] = {
.species = SPECIES_HOOTHOOT,
.moves = {MOVE_CONFUSION, MOVE_HYPNOSIS, MOVE_SUPERSONIC, MOVE_REFLECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PERSIM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_DIGLETT] = {
.species = SPECIES_DIGLETT,
.moves = {MOVE_MAGNITUDE, MOVE_SLASH, MOVE_ROCK_TOMB, MOVE_SAND_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_KINGS_ROCK,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_NAIVE
},
[FRONTIER_MON_LEDYBA] = {
.species = SPECIES_LEDYBA,
.moves = {MOVE_PSYBEAM, MOVE_AGILITY, MOVE_BATON_PASS, MOVE_LIGHT_SCREEN},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_BASHFUL
},
[FRONTIER_MON_NINCADA] = {
.species = SPECIES_NINCADA,
.moves = {MOVE_MUD_SLAP, MOVE_DIG, MOVE_TOXIC, MOVE_PROTECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_PECHA_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PECHA_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_CALM
},
[FRONTIER_MON_SURSKIT] = {
.species = SPECIES_SURSKIT,
.moves = {MOVE_BUBBLE_BEAM, MOVE_RAIN_DANCE, MOVE_SWEET_SCENT, MOVE_QUICK_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_MYSTIC_WATER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_MYSTIC_WATER,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_JIGGLYPUFF] = {
.species = SPECIES_JIGGLYPUFF,
.moves = {MOVE_SING, MOVE_WISH, MOVE_MIMIC, MOVE_DOUBLE_SLAP},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_TAILLOW] = {
.species = SPECIES_TAILLOW,
.moves = {MOVE_FLY, MOVE_QUICK_ATTACK, MOVE_ENDEAVOR, MOVE_FOCUS_ENERGY},
- .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SALAC_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 170, 0, 0),
.nature = NATURE_GENTLE
},
[FRONTIER_MON_WINGULL] = {
.species = SPECIES_WINGULL,
.moves = {MOVE_WATER_PULSE, MOVE_FLY, MOVE_QUICK_ATTACK, MOVE_STEEL_WING},
- .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PERSIM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_NIDORAN_M] = {
.species = SPECIES_NIDORAN_M,
.moves = {MOVE_DOUBLE_KICK, MOVE_POISON_STING, MOVE_DISABLE, MOVE_HELPING_HAND},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_NIDORAN_F] = {
.species = SPECIES_NIDORAN_F,
.moves = {MOVE_CRUNCH, MOVE_DOUBLE_KICK, MOVE_FLATTER, MOVE_HELPING_HAND},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_KIRLIA] = {
.species = SPECIES_KIRLIA,
.moves = {MOVE_CONFUSION, MOVE_WILL_O_WISP, MOVE_FUTURE_SIGHT, MOVE_LIGHT_SCREEN},
- .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .heldItem = ITEM_WHITE_HERB,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 252, 0, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_MAREEP] = {
.species = SPECIES_MAREEP,
.moves = {MOVE_SHOCK_WAVE, MOVE_FLASH, MOVE_REFLECT, MOVE_COTTON_SPORE},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHERI_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_MEDITITE] = {
.species = SPECIES_MEDITITE,
.moves = {MOVE_HIGH_JUMP_KICK, MOVE_MEDITATE, MOVE_SWAGGER, MOVE_PSYCH_UP},
- .itemTableId = BATTLE_FRONTIER_ITEM_MENTAL_HERB,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_MENTAL_HERB,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_NAUGHTY
},
[FRONTIER_MON_SLAKOTH] = {
.species = SPECIES_SLAKOTH,
.moves = {MOVE_YAWN, MOVE_SCRATCH, MOVE_ENCORE, MOVE_COUNTER},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_PARAS] = {
.species = SPECIES_PARAS,
.moves = {MOVE_SPORE, MOVE_LEECH_LIFE, MOVE_SLASH, MOVE_LIGHT_SCREEN},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_EKANS] = {
.species = SPECIES_EKANS,
.moves = {MOVE_ACID, MOVE_DIG, MOVE_SCREECH, MOVE_TORMENT},
- .itemTableId = BATTLE_FRONTIER_ITEM_POISON_BARB,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_POISON_BARB,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_DITTO] = {
.species = SPECIES_DITTO,
.moves = {MOVE_TRANSFORM, MOVE_NONE, MOVE_NONE, MOVE_NONE},
- .itemTableId = BATTLE_FRONTIER_ITEM_METAL_POWDER,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .heldItem = ITEM_METAL_POWDER,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 252, 0, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_BARBOACH] = {
.species = SPECIES_BARBOACH,
.moves = {MOVE_MAGNITUDE, MOVE_WATER_PULSE, MOVE_SPARK, MOVE_FUTURE_SIGHT},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_BASHFUL
},
[FRONTIER_MON_MEOWTH] = {
.species = SPECIES_MEOWTH,
.moves = {MOVE_SLASH, MOVE_BITE, MOVE_SCREECH, MOVE_FAKE_OUT},
- .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PERSIM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_PINECO] = {
.species = SPECIES_PINECO,
.moves = {MOVE_SELF_DESTRUCT, MOVE_TAKE_DOWN, MOVE_REFLECT, MOVE_LIGHT_SCREEN},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_TRAPINCH] = {
.species = SPECIES_TRAPINCH,
.moves = {MOVE_TOXIC, MOVE_DIG, MOVE_SANDSTORM, MOVE_SAND_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_SERIOUS
},
[FRONTIER_MON_SPHEAL] = {
.species = SPECIES_SPHEAL,
.moves = {MOVE_ICE_BALL, MOVE_WATER_PULSE, MOVE_HAIL, MOVE_MUD_SLAP},
- .itemTableId = BATTLE_FRONTIER_ITEM_NEVER_MELT_ICE,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_NEVER_MELT_ICE,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_HORSEA] = {
.species = SPECIES_HORSEA,
.moves = {MOVE_WATER_GUN, MOVE_AGILITY, MOVE_ICY_WIND, MOVE_TWISTER},
- .itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PETAYA_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_SHROOMISH] = {
.species = SPECIES_SHROOMISH,
.moves = {MOVE_SPORE, MOVE_BULLET_SEED, MOVE_LEECH_SEED, MOVE_HEADBUTT},
- .itemTableId = BATTLE_FRONTIER_ITEM_MIRACLE_SEED,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_MIRACLE_SEED,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_SHUPPET] = {
.species = SPECIES_SHUPPET,
.moves = {MOVE_WILL_O_WISP, MOVE_NIGHT_SHADE, MOVE_GRUDGE, MOVE_KNOCK_OFF},
- .itemTableId = BATTLE_FRONTIER_ITEM_RAWST_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_RAWST_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_RASH
},
[FRONTIER_MON_DUSKULL] = {
.species = SPECIES_DUSKULL,
.moves = {MOVE_SKILL_SWAP, MOVE_NIGHT_SHADE, MOVE_DISABLE, MOVE_CONFUSE_RAY},
- .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PERSIM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 252, 0, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_ELECTRIKE] = {
.species = SPECIES_ELECTRIKE,
.moves = {MOVE_SPARK, MOVE_THUNDER_WAVE, MOVE_ROAR, MOVE_QUICK_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHERI_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 252, 0, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_VULPIX] = {
.species = SPECIES_VULPIX,
.moves = {MOVE_WILL_O_WISP, MOVE_CONFUSE_RAY, MOVE_FIRE_SPIN, MOVE_QUICK_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_RAWST_BERRY,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .heldItem = ITEM_RAWST_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 252, 0, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_PIKACHU] = {
.species = SPECIES_PIKACHU,
.moves = {MOVE_THUNDER_PUNCH, MOVE_THUNDER_WAVE, MOVE_DOUBLE_TEAM, MOVE_QUICK_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_LIGHT_BALL,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LIGHT_BALL,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 252, 0, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_SANDSHREW] = {
.species = SPECIES_SANDSHREW,
.moves = {MOVE_DIG, MOVE_ROCK_TOMB, MOVE_SANDSTORM, MOVE_SAND_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_SOFT_SAND,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SOFT_SAND,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_POLIWAG] = {
.species = SPECIES_POLIWAG,
.moves = {MOVE_HYPNOSIS, MOVE_ICY_WIND, MOVE_WATER_GUN, MOVE_RAIN_DANCE},
- .itemTableId = BATTLE_FRONTIER_ITEM_MYSTIC_WATER,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .heldItem = ITEM_MYSTIC_WATER,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 252, 0, 0),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_BELLSPROUT] = {
.species = SPECIES_BELLSPROUT,
.moves = {MOVE_RAZOR_LEAF, MOVE_ACID, MOVE_STUN_SPORE, MOVE_WRAP},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_LAX
},
[FRONTIER_MON_GEODUDE] = {
.species = SPECIES_GEODUDE,
.moves = {MOVE_MAGNITUDE, MOVE_ROCK_BLAST, MOVE_STRENGTH, MOVE_PROTECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_BRAVE
},
[FRONTIER_MON_DRATINI] = {
.species = SPECIES_DRATINI,
.moves = {MOVE_OUTRAGE, MOVE_THUNDER_WAVE, MOVE_SUPERSONIC, MOVE_WATER_PULSE},
- .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PERSIM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_SNUBBULL] = {
.species = SPECIES_SNUBBULL,
.moves = {MOVE_BITE, MOVE_CHARM, MOVE_SWAGGER, MOVE_SCARY_FACE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_REMORAID] = {
.species = SPECIES_REMORAID,
.moves = {MOVE_BUBBLE_BEAM, MOVE_AURORA_BEAM, MOVE_PSYBEAM, MOVE_PROTECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_PETAYA_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_LARVITAR] = {
.species = SPECIES_LARVITAR,
.moves = {MOVE_THRASH, MOVE_ROCK_SLIDE, MOVE_DIG, MOVE_DRAGON_DANCE},
- .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PERSIM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_NAUGHTY
},
[FRONTIER_MON_BALTOY] = {
.species = SPECIES_BALTOY,
.moves = {MOVE_PSYBEAM, MOVE_ANCIENT_POWER, MOVE_LIGHT_SCREEN, MOVE_MUD_SLAP},
- .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_PERSIM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_NAUGHTY
},
[FRONTIER_MON_SNORUNT] = {
.species = SPECIES_SNORUNT,
.moves = {MOVE_ICY_WIND, MOVE_HEADBUTT, MOVE_LEER, MOVE_BITE},
- .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PERSIM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_BRAVE
},
[FRONTIER_MON_BAGON] = {
.species = SPECIES_BAGON,
.moves = {MOVE_DRAGON_BREATH, MOVE_HEADBUTT, MOVE_BRICK_BREAK, MOVE_SCARY_FACE},
- .itemTableId = BATTLE_FRONTIER_ITEM_LIECHI_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LIECHI_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_NAUGHTY
},
[FRONTIER_MON_BELDUM] = {
.species = SPECIES_BELDUM,
.moves = {MOVE_TAKE_DOWN, MOVE_NONE, MOVE_NONE, MOVE_NONE},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHOICE_BAND,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHOICE_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_GULPIN] = {
.species = SPECIES_GULPIN,
.moves = {MOVE_TOXIC, MOVE_YAWN, MOVE_PAIN_SPLIT, MOVE_ATTRACT},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_SERIOUS
},
[FRONTIER_MON_VENONAT] = {
.species = SPECIES_VENONAT,
.moves = {MOVE_PSYBEAM, MOVE_SUPERSONIC, MOVE_STUN_SPORE, MOVE_SKILL_SWAP},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_MANKEY] = {
.species = SPECIES_MANKEY,
.moves = {MOVE_KARATE_CHOP, MOVE_LOW_KICK, MOVE_SCREECH, MOVE_SWAGGER},
- .itemTableId = BATTLE_FRONTIER_ITEM_BLACK_BELT,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BLACK_BELT,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_NAUGHTY
},
[FRONTIER_MON_MACHOP] = {
.species = SPECIES_MACHOP,
.moves = {MOVE_SEISMIC_TOSS, MOVE_REVENGE, MOVE_ROCK_TOMB, MOVE_SCARY_FACE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_SHELLDER] = {
.species = SPECIES_SHELLDER,
.moves = {MOVE_ICICLE_SPEAR, MOVE_SUPERSONIC, MOVE_CLAMP, MOVE_WITHDRAW},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHERI_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_SMOOCHUM] = {
.species = SPECIES_SMOOCHUM,
.moves = {MOVE_SWEET_KISS, MOVE_SING, MOVE_MUD_SLAP, MOVE_FAKE_OUT},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_NUMEL] = {
.species = SPECIES_NUMEL,
.moves = {MOVE_EMBER, MOVE_MAGNITUDE, MOVE_ROCK_TOMB, MOVE_SANDSTORM},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_CARVANHA] = {
.species = SPECIES_CARVANHA,
.moves = {MOVE_BITE, MOVE_SCREECH, MOVE_SCARY_FACE, MOVE_SWAGGER},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_QUIET
},
[FRONTIER_MON_CORPHISH] = {
.species = SPECIES_CORPHISH,
.moves = {MOVE_CRABHAMMER, MOVE_WATER_PULSE, MOVE_MUD_SLAP, MOVE_PROTECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_MYSTIC_WATER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_MYSTIC_WATER,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_BRAVE
},
[FRONTIER_MON_CHARMANDER] = {
.species = SPECIES_CHARMANDER,
.moves = {MOVE_FIRE_SPIN, MOVE_METAL_CLAW, MOVE_SMOKESCREEN, MOVE_SCARY_FACE},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_CYNDAQUIL] = {
.species = SPECIES_CYNDAQUIL,
.moves = {MOVE_EMBER, MOVE_SWIFT, MOVE_QUICK_ATTACK, MOVE_SMOKESCREEN},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_ABRA] = {
.species = SPECIES_ABRA,
.moves = {MOVE_MIMIC, MOVE_METRONOME, MOVE_FLASH, MOVE_SEISMIC_TOSS},
- .itemTableId = BATTLE_FRONTIER_ITEM_TWISTED_SPOON,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .heldItem = ITEM_TWISTED_SPOON,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 252, 0, 0),
.nature = NATURE_LONELY
},
[FRONTIER_MON_DODUO] = {
.species = SPECIES_DODUO,
.moves = {MOVE_FURY_ATTACK, MOVE_UPROAR, MOVE_MUD_SLAP, MOVE_FEINT_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_LIECHI_BERRY,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LIECHI_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 252, 0, 0),
.nature = NATURE_LONELY
},
[FRONTIER_MON_GASTLY] = {
.species = SPECIES_GASTLY,
.moves = {MOVE_DREAM_EATER, MOVE_HYPNOSIS, MOVE_NIGHT_SHADE, MOVE_CONFUSE_RAY},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 252, 0, 0),
.nature = NATURE_LONELY
},
[FRONTIER_MON_SWABLU] = {
.species = SPECIES_SWABLU,
.moves = {MOVE_TAKE_DOWN, MOVE_DREAM_EATER, MOVE_SING, MOVE_ATTRACT},
- .itemTableId = BATTLE_FRONTIER_ITEM_MENTAL_HERB,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_MENTAL_HERB,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_LONELY
},
[FRONTIER_MON_TREECKO] = {
.species = SPECIES_TREECKO,
.moves = {MOVE_BULLET_SEED, MOVE_AERIAL_ACE, MOVE_QUICK_ATTACK, MOVE_DOUBLE_TEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_LONELY
},
[FRONTIER_MON_TORCHIC] = {
.species = SPECIES_TORCHIC,
.moves = {MOVE_FIRE_SPIN, MOVE_QUICK_ATTACK, MOVE_SAND_ATTACK, MOVE_DOUBLE_TEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_LONELY
},
[FRONTIER_MON_MUDKIP] = {
.species = SPECIES_MUDKIP,
.moves = {MOVE_WHIRLPOOL, MOVE_ENDEAVOR, MOVE_MUD_SPORT, MOVE_MUD_SLAP},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_SQUIRTLE] = {
.species = SPECIES_SQUIRTLE,
.moves = {MOVE_WATER_PULSE, MOVE_BITE, MOVE_WITHDRAW, MOVE_PROTECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_TOTODILE] = {
.species = SPECIES_TOTODILE,
.moves = {MOVE_SLASH, MOVE_WATER_PULSE, MOVE_SCREECH, MOVE_ICY_WIND},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_SLOWPOKE] = {
.species = SPECIES_SLOWPOKE,
.moves = {MOVE_CONFUSION, MOVE_DISABLE, MOVE_WATER_PULSE, MOVE_YAWN},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_BRAVE
},
[FRONTIER_MON_BULBASAUR] = {
.species = SPECIES_BULBASAUR,
.moves = {MOVE_RAZOR_LEAF, MOVE_SWEET_SCENT, MOVE_SLEEP_POWDER, MOVE_LIGHT_SCREEN},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_CHIKORITA] = {
.species = SPECIES_CHIKORITA,
.moves = {MOVE_SECRET_POWER, MOVE_BULLET_SEED, MOVE_MUD_SLAP, MOVE_LIGHT_SCREEN},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_ODDISH] = {
.species = SPECIES_ODDISH,
.moves = {MOVE_ACID, MOVE_STUN_SPORE, MOVE_SWEET_SCENT, MOVE_MOONLIGHT},
- .itemTableId = BATTLE_FRONTIER_ITEM_PECHA_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PECHA_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_PSYDUCK] = {
.species = SPECIES_PSYDUCK,
.moves = {MOVE_CONFUSION, MOVE_FURY_SWIPES, MOVE_AERIAL_ACE, MOVE_DISABLE},
- .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_PERSIM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_HASTY
},
[FRONTIER_MON_CUBONE] = {
.species = SPECIES_CUBONE,
.moves = {MOVE_BONE_CLUB, MOVE_HEADBUTT, MOVE_BRICK_BREAK, MOVE_AERIAL_ACE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SOFT_SAND,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SOFT_SAND,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_GOLDEEN] = {
.species = SPECIES_GOLDEEN,
.moves = {MOVE_WATERFALL, MOVE_FURY_ATTACK, MOVE_AGILITY, MOVE_PSYBEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PETAYA_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_NATU] = {
.species = SPECIES_NATU,
.moves = {MOVE_NIGHT_SHADE, MOVE_FUTURE_SIGHT, MOVE_CONFUSE_RAY, MOVE_FLASH},
- .itemTableId = BATTLE_FRONTIER_ITEM_TWISTED_SPOON,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_TWISTED_SPOON,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_CLEFAIRY] = {
.species = SPECIES_CLEFAIRY,
.moves = {MOVE_FOLLOW_ME, MOVE_RETURN, MOVE_ENCORE, MOVE_SING},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_LONELY
},
[FRONTIER_MON_MAGNEMITE] = {
.species = SPECIES_MAGNEMITE,
.moves = {MOVE_SHOCK_WAVE, MOVE_SUPERSONIC, MOVE_METAL_SOUND, MOVE_REFLECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_RAWST_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_RAWST_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_GENTLE
},
[FRONTIER_MON_SEEL] = {
.species = SPECIES_SEEL,
.moves = {MOVE_AURORA_BEAM, MOVE_DIVE, MOVE_BODY_SLAM, MOVE_FAKE_OUT},
- .itemTableId = BATTLE_FRONTIER_ITEM_ASPEAR_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_ASPEAR_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_GRIMER] = {
.species = SPECIES_GRIMER,
.moves = {MOVE_SLUDGE, MOVE_ROCK_TOMB, MOVE_ACID_ARMOR, MOVE_MINIMIZE},
- .itemTableId = BATTLE_FRONTIER_ITEM_PECHA_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PECHA_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_KRABBY] = {
.species = SPECIES_KRABBY,
.moves = {MOVE_CRABHAMMER, MOVE_MUD_SHOT, MOVE_FLAIL, MOVE_KNOCK_OFF},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_EXEGGCUTE] = {
.species = SPECIES_EXEGGCUTE,
.moves = {MOVE_CONFUSION, MOVE_ANCIENT_POWER, MOVE_LEECH_SEED, MOVE_LIGHT_SCREEN},
- .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PERSIM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_NAUGHTY
},
[FRONTIER_MON_EEVEE] = {
.species = SPECIES_EEVEE,
.moves = {MOVE_CHARM, MOVE_ATTRACT, MOVE_FLAIL, MOVE_ENDURE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SALAC_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 252, 0, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_DROWZEE] = {
.species = SPECIES_DROWZEE,
.moves = {MOVE_CONFUSION, MOVE_HEADBUTT, MOVE_DISABLE, MOVE_BARRIER},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 0, 170, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_VOLTORB] = {
.species = SPECIES_VOLTORB,
.moves = {MOVE_SPARK, MOVE_SCREECH, MOVE_ROLLOUT, MOVE_LIGHT_SCREEN},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_CHINCHOU] = {
.species = SPECIES_CHINCHOU,
.moves = {MOVE_SPARK, MOVE_DIVE, MOVE_CONFUSE_RAY, MOVE_TAKE_DOWN},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_TEDDIURSA] = {
.species = SPECIES_TEDDIURSA,
.moves = {MOVE_SECRET_POWER, MOVE_FAKE_TEARS, MOVE_FEINT_ATTACK, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_DELIBIRD] = {
.species = SPECIES_DELIBIRD,
.moves = {MOVE_PRESENT, MOVE_ICE_BALL, MOVE_AERIAL_ACE, MOVE_HAIL},
- .itemTableId = BATTLE_FRONTIER_ITEM_NEVER_MELT_ICE,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_NEVER_MELT_ICE,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_HOUNDOUR] = {
.species = SPECIES_HOUNDOUR,
.moves = {MOVE_CRUNCH, MOVE_EMBER, MOVE_ROAR, MOVE_PROTECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHARCOAL,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHARCOAL,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_PHANPY] = {
.species = SPECIES_PHANPY,
.moves = {MOVE_ROLLOUT, MOVE_DEFENSE_CURL, MOVE_ROCK_TOMB, MOVE_SANDSTORM},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_NAUGHTY
},
[FRONTIER_MON_SPOINK] = {
.species = SPECIES_SPOINK,
.moves = {MOVE_PSYWAVE, MOVE_BOUNCE, MOVE_MAGIC_COAT, MOVE_CONFUSE_RAY},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_ARON] = {
.species = SPECIES_ARON,
.moves = {MOVE_METAL_CLAW, MOVE_AERIAL_ACE, MOVE_METAL_SOUND, MOVE_ROAR},
- .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PERSIM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_LUVDISC] = {
.species = SPECIES_LUVDISC,
.moves = {MOVE_SWEET_KISS, MOVE_ATTRACT, MOVE_DIVE, MOVE_RAIN_DANCE},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_TENTACOOL] = {
.species = SPECIES_TENTACOOL,
.moves = {MOVE_BUBBLE_BEAM, MOVE_ACID, MOVE_BARRIER, MOVE_WRAP},
- .itemTableId = BATTLE_FRONTIER_ITEM_PECHA_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PECHA_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 0, 170, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_CACNEA] = {
.species = SPECIES_CACNEA,
.moves = {MOVE_NEEDLE_ARM, MOVE_FEINT_ATTACK, MOVE_COTTON_SPORE, MOVE_SAND_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_UNOWN] = {
.species = SPECIES_UNOWN,
.moves = {MOVE_HIDDEN_POWER, MOVE_NONE, MOVE_NONE, MOVE_NONE},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 0, 170, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_KOFFING] = {
.species = SPECIES_KOFFING,
.moves = {MOVE_SLUDGE, MOVE_SMOKESCREEN, MOVE_TORMENT, MOVE_HAZE},
- .itemTableId = BATTLE_FRONTIER_ITEM_POISON_BARB,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_POISON_BARB,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_STARYU] = {
.species = SPECIES_STARYU,
.moves = {MOVE_BUBBLE_BEAM, MOVE_MINIMIZE, MOVE_SWIFT, MOVE_LIGHT_SCREEN},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_SKIPLOOM] = {
.species = SPECIES_SKIPLOOM,
.moves = {MOVE_MEGA_DRAIN, MOVE_CONFUSION, MOVE_COTTON_SPORE, MOVE_SYNTHESIS},
- .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PERSIM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_NUZLEAF] = {
.species = SPECIES_NUZLEAF,
.moves = {MOVE_EXTRASENSORY, MOVE_FAKE_OUT, MOVE_RAZOR_WIND, MOVE_FEINT_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_LOMBRE] = {
.species = SPECIES_LOMBRE,
.moves = {MOVE_WATER_PULSE, MOVE_FAKE_OUT, MOVE_BRICK_BREAK, MOVE_ABSORB},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_VIBRAVA] = {
.species = SPECIES_VIBRAVA,
.moves = {MOVE_DRAGON_BREATH, MOVE_DIG, MOVE_SCREECH, MOVE_ROCK_TOMB},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHERI_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_RHYHORN] = {
.species = SPECIES_RHYHORN,
.moves = {MOVE_ROCK_BLAST, MOVE_DIG, MOVE_SCARY_FACE, MOVE_ROAR},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_CLAMPERL] = {
.species = SPECIES_CLAMPERL,
.moves = {MOVE_DIVE, MOVE_TOXIC, MOVE_IRON_DEFENSE, MOVE_DOUBLE_TEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_DEEP_SEA_SCALE,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_DEEP_SEA_SCALE,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_PIDGEOTTO] = {
.species = SPECIES_PIDGEOTTO,
.moves = {MOVE_AERIAL_ACE, MOVE_QUICK_ATTACK, MOVE_FEATHER_DANCE, MOVE_SAND_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_WHITE_HERB,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_GROWLITHE] = {
.species = SPECIES_GROWLITHE,
.moves = {MOVE_FLAME_WHEEL, MOVE_BITE, MOVE_ROAR, MOVE_AGILITY},
- .itemTableId = BATTLE_FRONTIER_ITEM_RAWST_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_RAWST_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_FARFETCHD] = {
.species = SPECIES_FARFETCHD,
.moves = {MOVE_SLASH, MOVE_KNOCK_OFF, MOVE_SWORDS_DANCE, MOVE_AGILITY},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEEK,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEEK,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_OMANYTE] = {
.species = SPECIES_OMANYTE,
.moves = {MOVE_MUD_SHOT, MOVE_WATER_GUN, MOVE_ANCIENT_POWER, MOVE_TICKLE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 0, 170, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_KABUTO] = {
.species = SPECIES_KABUTO,
.moves = {MOVE_MEGA_DRAIN, MOVE_ANCIENT_POWER, MOVE_SAND_ATTACK, MOVE_PROTECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_LILEEP] = {
.species = SPECIES_LILEEP,
.moves = {MOVE_ANCIENT_POWER, MOVE_ACID, MOVE_INGRAIN, MOVE_CONFUSE_RAY},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_ANORITH] = {
.species = SPECIES_ANORITH,
.moves = {MOVE_METAL_CLAW, MOVE_FURY_CUTTER, MOVE_ANCIENT_POWER, MOVE_WATER_GUN},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_AIPOM] = {
.species = SPECIES_AIPOM,
.moves = {MOVE_FURY_SWIPES, MOVE_SAND_ATTACK, MOVE_BATON_PASS, MOVE_AGILITY},
- .itemTableId = BATTLE_FRONTIER_ITEM_SILK_SCARF,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SILK_SCARF,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_ELEKID] = {
.species = SPECIES_ELEKID,
.moves = {MOVE_THUNDER_PUNCH, MOVE_QUICK_ATTACK, MOVE_SWIFT, MOVE_LIGHT_SCREEN},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHERI_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_NAIVE
},
[FRONTIER_MON_LOUDRED] = {
.species = SPECIES_LOUDRED,
.moves = {MOVE_STOMP, MOVE_HOWL, MOVE_ASTONISH, MOVE_SUPERSONIC},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_SPINDA] = {
.species = SPECIES_SPINDA,
.moves = {MOVE_DIZZY_PUNCH, MOVE_TEETER_DANCE, MOVE_PSYBEAM, MOVE_FEINT_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_NIDORINA] = {
.species = SPECIES_NIDORINA,
.moves = {MOVE_DOUBLE_KICK, MOVE_BITE, MOVE_AERIAL_ACE, MOVE_FLATTER},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_NIDORINO] = {
.species = SPECIES_NIDORINO,
.moves = {MOVE_DOUBLE_KICK, MOVE_WATER_PULSE, MOVE_MUD_SLAP, MOVE_FLATTER},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_FLAAFFY] = {
.species = SPECIES_FLAAFFY,
.moves = {MOVE_SHOCK_WAVE, MOVE_THUNDER_WAVE, MOVE_COTTON_SPORE, MOVE_LIGHT_SCREEN},
- .itemTableId = BATTLE_FRONTIER_ITEM_MAGNET,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_MAGNET,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_MILD
},
[FRONTIER_MON_MAGBY] = {
.species = SPECIES_MAGBY,
.moves = {MOVE_FIRE_PUNCH, MOVE_SMOKESCREEN, MOVE_CONFUSE_RAY, MOVE_SMOG},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_NOSEPASS] = {
.species = SPECIES_NOSEPASS,
.moves = {MOVE_ROCK_SLIDE, MOVE_SHOCK_WAVE, MOVE_THUNDER_WAVE, MOVE_SANDSTORM},
- .itemTableId = BATTLE_FRONTIER_ITEM_HARD_STONE,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_HARD_STONE,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_SASSY
},
[FRONTIER_MON_CORSOLA] = {
.species = SPECIES_CORSOLA,
.moves = {MOVE_BUBBLE_BEAM, MOVE_MIRROR_COAT, MOVE_ATTRACT, MOVE_ANCIENT_POWER},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_IMPISH
},
[FRONTIER_MON_MAWILE] = {
.species = SPECIES_MAWILE,
.moves = {MOVE_CRUNCH, MOVE_FAKE_TEARS, MOVE_IRON_DEFENSE, MOVE_BATON_PASS},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_BUTTERFREE] = {
.species = SPECIES_BUTTERFREE,
.moves = {MOVE_SILVER_WIND, MOVE_PSYBEAM, MOVE_TOXIC, MOVE_WHIRLWIND},
- .itemTableId = BATTLE_FRONTIER_ITEM_PECHA_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PECHA_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_BEEDRILL] = {
.species = SPECIES_BEEDRILL,
.moves = {MOVE_TWINEEDLE, MOVE_PURSUIT, MOVE_ENDEAVOR, MOVE_AGILITY},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_NAUGHTY
},
[FRONTIER_MON_POLIWHIRL] = {
.species = SPECIES_POLIWHIRL,
.moves = {MOVE_WATER_PULSE, MOVE_DOUBLE_SLAP, MOVE_ICY_WIND, MOVE_RAIN_DANCE},
- .itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PETAYA_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_ONIX] = {
.species = SPECIES_ONIX,
.moves = {MOVE_ROCK_SLIDE, MOVE_BIND, MOVE_DRAGON_BREATH, MOVE_SANDSTORM},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_HARDY
},
[FRONTIER_MON_BEAUTIFLY] = {
.species = SPECIES_BEAUTIFLY,
.moves = {MOVE_SILVER_WIND, MOVE_MEGA_DRAIN, MOVE_ATTRACT, MOVE_WHIRLWIND},
- .itemTableId = BATTLE_FRONTIER_ITEM_MENTAL_HERB,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .heldItem = ITEM_MENTAL_HERB,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 252, 0, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_DUSTOX] = {
.species = SPECIES_DUSTOX,
.moves = {MOVE_SILVER_WIND, MOVE_TOXIC, MOVE_PSYBEAM, MOVE_WHIRLWIND},
- .itemTableId = BATTLE_FRONTIER_ITEM_SILVER_POWDER,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SILVER_POWDER,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 252, 0, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_LEDIAN] = {
.species = SPECIES_LEDIAN,
.moves = {MOVE_COMET_PUNCH, MOVE_BATON_PASS, MOVE_SWORDS_DANCE, MOVE_AGILITY},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_BASHFUL
},
[FRONTIER_MON_ARIADOS] = {
.species = SPECIES_ARIADOS,
.moves = {MOVE_SIGNAL_BEAM, MOVE_SPIDER_WEB, MOVE_NIGHT_SHADE, MOVE_TOXIC},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_SERIOUS
},
[FRONTIER_MON_YANMA] = {
.species = SPECIES_YANMA,
.moves = {MOVE_SIGNAL_BEAM, MOVE_AERIAL_ACE, MOVE_DOUBLE_TEAM, MOVE_DETECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_DELCATTY_1] = {
.species = SPECIES_DELCATTY,
.moves = {MOVE_SECRET_POWER, MOVE_FEINT_ATTACK, MOVE_DOUBLE_TEAM, MOVE_HEAL_BELL},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_LONELY
},
[FRONTIER_MON_SABLEYE_1] = {
.species = SPECIES_SABLEYE,
.moves = {MOVE_FEINT_ATTACK, MOVE_CONFUSE_RAY, MOVE_KNOCK_OFF, MOVE_FAKE_OUT},
- .itemTableId = BATTLE_FRONTIER_ITEM_BLACK_GLASSES,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BLACK_GLASSES,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_LONELY
},
[FRONTIER_MON_LICKITUNG_1] = {
.species = SPECIES_LICKITUNG,
.moves = {MOVE_SLAM, MOVE_BRICK_BREAK, MOVE_LICK, MOVE_MUD_SLAP},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_WEEPINBELL_1] = {
.species = SPECIES_WEEPINBELL,
.moves = {MOVE_RAZOR_LEAF, MOVE_ACID, MOVE_WRAP, MOVE_SWEET_SCENT},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_QUIET
},
[FRONTIER_MON_GRAVELER_1] = {
.species = SPECIES_GRAVELER,
.moves = {MOVE_MAGNITUDE, MOVE_ROCK_THROW, MOVE_DEFENSE_CURL, MOVE_BRICK_BREAK},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 0, 0, 170),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_GLOOM_1] = {
.species = SPECIES_GLOOM,
.moves = {MOVE_PETAL_DANCE, MOVE_ACID, MOVE_STUN_SPORE, MOVE_MOONLIGHT},
- .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PERSIM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_PORYGON_1] = {
.species = SPECIES_PORYGON,
.moves = {MOVE_PSYBEAM, MOVE_ICY_WIND, MOVE_RECYCLE, MOVE_AGILITY},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_KADABRA_1] = {
.species = SPECIES_KADABRA,
.moves = {MOVE_CONFUSION, MOVE_ROLE_PLAY, MOVE_FUTURE_SIGHT, MOVE_DISABLE},
- .itemTableId = BATTLE_FRONTIER_ITEM_TWISTED_SPOON,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_TWISTED_SPOON,
+ .ev = TRAINER_PARTY_EVS(252, 0, 252, 0, 0, 0),
.nature = NATURE_IMPISH
},
[FRONTIER_MON_WAILMER_1] = {
.species = SPECIES_WAILMER,
.moves = {MOVE_WHIRLPOOL, MOVE_ROAR, MOVE_DEFENSE_CURL, MOVE_ROLLOUT},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_ROSELIA_1] = {
.species = SPECIES_ROSELIA,
.moves = {MOVE_MAGICAL_LEAF, MOVE_TOXIC, MOVE_GRASS_WHISTLE, MOVE_COTTON_SPORE},
- .itemTableId = BATTLE_FRONTIER_ITEM_PECHA_BERRY,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PECHA_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 252, 0, 0, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_VOLBEAT_1] = {
.species = SPECIES_VOLBEAT,
.moves = {MOVE_SILVER_WIND, MOVE_CONFUSE_RAY, MOVE_QUICK_ATTACK, MOVE_HELPING_HAND},
- .itemTableId = BATTLE_FRONTIER_ITEM_LIECHI_BERRY,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_LIECHI_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_ILLUMISE_1] = {
.species = SPECIES_ILLUMISE,
.moves = {MOVE_SILVER_WIND, MOVE_WISH, MOVE_QUICK_ATTACK, MOVE_HELPING_HAND},
- .itemTableId = BATTLE_FRONTIER_ITEM_LIECHI_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LIECHI_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_IVYSAUR_1] = {
.species = SPECIES_IVYSAUR,
.moves = {MOVE_PETAL_DANCE, MOVE_GROWTH, MOVE_SWEET_SCENT, MOVE_FURY_CUTTER},
- .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PERSIM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_GENTLE
},
[FRONTIER_MON_CHARMELEON_1] = {
.species = SPECIES_CHARMELEON,
.moves = {MOVE_SLASH, MOVE_FIRE_SPIN, MOVE_SWORDS_DANCE, MOVE_AERIAL_ACE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_NAUGHTY
},
[FRONTIER_MON_WARTORTLE_1] = {
.species = SPECIES_WARTORTLE,
.moves = {MOVE_WATER_PULSE, MOVE_BITE, MOVE_MUD_SLAP, MOVE_YAWN},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_PARASECT_1] = {
.species = SPECIES_PARASECT,
.moves = {MOVE_SLASH, MOVE_PSYBEAM, MOVE_STUN_SPORE, MOVE_FLASH},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_RASH
},
[FRONTIER_MON_MACHOKE_1] = {
.species = SPECIES_MACHOKE,
.moves = {MOVE_LOW_KICK, MOVE_ROCK_TOMB, MOVE_FORESIGHT, MOVE_SCARY_FACE},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_HAUNTER_1] = {
.species = SPECIES_HAUNTER,
.moves = {MOVE_SHADOW_PUNCH, MOVE_CONFUSE_RAY, MOVE_SPITE, MOVE_GRUDGE},
- .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PERSIM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_RASH
},
[FRONTIER_MON_BAYLEEF_1] = {
.species = SPECIES_BAYLEEF,
.moves = {MOVE_RAZOR_LEAF, MOVE_TOXIC, MOVE_SAFEGUARD, MOVE_LIGHT_SCREEN},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_QUILAVA_1] = {
.species = SPECIES_QUILAVA,
.moves = {MOVE_FLAME_WHEEL, MOVE_FURY_SWIPES, MOVE_SWIFT, MOVE_SMOKESCREEN},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_CROCONAW_1] = {
.species = SPECIES_CROCONAW,
.moves = {MOVE_SLASH, MOVE_WATER_PULSE, MOVE_BITE, MOVE_SCARY_FACE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_TOGETIC_1] = {
.species = SPECIES_TOGETIC,
.moves = {MOVE_AERIAL_ACE, MOVE_MAGICAL_LEAF, MOVE_WISH, MOVE_FOLLOW_ME},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(252, 0, 252, 0, 0, 0),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_MURKROW_1] = {
.species = SPECIES_MURKROW,
.moves = {MOVE_FEINT_ATTACK, MOVE_FLY, MOVE_TORMENT, MOVE_TAUNT},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_WOBBUFFET_1] = {
.species = SPECIES_WOBBUFFET,
.moves = {MOVE_COUNTER, MOVE_MIRROR_COAT, MOVE_CHARM, MOVE_SAFEGUARD},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_CAREFUL
},
[FRONTIER_MON_PLUSLE_1] = {
.species = SPECIES_PLUSLE,
.moves = {MOVE_SPARK, MOVE_FAKE_TEARS, MOVE_QUICK_ATTACK, MOVE_HELPING_HAND},
- .itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PETAYA_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 252, 0, 0, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_MINUN_1] = {
.species = SPECIES_MINUN,
.moves = {MOVE_SPARK, MOVE_CHARM, MOVE_ENCORE, MOVE_HELPING_HAND},
- .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SALAC_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 252, 0, 0, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_GROVYLE_1] = {
.species = SPECIES_GROVYLE,
.moves = {MOVE_FURY_CUTTER, MOVE_ENDEAVOR, MOVE_BRICK_BREAK, MOVE_DOUBLE_TEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_COMBUSKEN_1] = {
.species = SPECIES_COMBUSKEN,
.moves = {MOVE_EMBER, MOVE_DOUBLE_KICK, MOVE_QUICK_ATTACK, MOVE_SAND_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_MARSHTOMP_1] = {
.species = SPECIES_MARSHTOMP,
.moves = {MOVE_MUD_SHOT, MOVE_WATER_GUN, MOVE_ROCK_TOMB, MOVE_MUD_SLAP},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_PONYTA_1] = {
.species = SPECIES_PONYTA,
.moves = {MOVE_FIRE_SPIN, MOVE_BOUNCE, MOVE_QUICK_ATTACK, MOVE_TAIL_WHIP},
- .itemTableId = BATTLE_FRONTIER_ITEM_RAWST_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_RAWST_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_AZUMARILL_1] = {
.species = SPECIES_AZUMARILL,
.moves = {MOVE_BUBBLE_BEAM, MOVE_FACADE, MOVE_DIG, MOVE_PROTECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_SUDOWOODO_1] = {
.species = SPECIES_SUDOWOODO,
.moves = {MOVE_ROCK_SLIDE, MOVE_FEINT_ATTACK, MOVE_SANDSTORM, MOVE_BLOCK},
- .itemTableId = BATTLE_FRONTIER_ITEM_HARD_STONE,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_HARD_STONE,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_HARDY
},
[FRONTIER_MON_MAGCARGO_1] = {
.species = SPECIES_MAGCARGO,
.moves = {MOVE_ROCK_SLIDE, MOVE_EMBER, MOVE_ACID_ARMOR, MOVE_SANDSTORM},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_GENTLE
},
[FRONTIER_MON_PUPITAR_1] = {
.species = SPECIES_PUPITAR,
.moves = {MOVE_DIG, MOVE_BITE, MOVE_SCARY_FACE, MOVE_SANDSTORM},
- .itemTableId = BATTLE_FRONTIER_ITEM_SOFT_SAND,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SOFT_SAND,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 252, 0, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_SEALEO_1] = {
.species = SPECIES_SEALEO,
.moves = {MOVE_ICE_BALL, MOVE_HAIL, MOVE_SNORE, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PERSIM_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_RATICATE_1] = {
.species = SPECIES_RATICATE,
.moves = {MOVE_ENDEAVOR, MOVE_PURSUIT, MOVE_SCARY_FACE, MOVE_QUICK_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_SILK_SCARF,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SILK_SCARF,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 170, 0, 0),
.nature = NATURE_NAIVE
},
[FRONTIER_MON_MASQUERAIN_1] = {
.species = SPECIES_MASQUERAIN,
.moves = {MOVE_SILVER_WIND, MOVE_AERIAL_ACE, MOVE_ICY_WIND, MOVE_STUN_SPORE},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_CHERI_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 252, 0, 0, 0),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_FURRET_1] = {
.species = SPECIES_FURRET,
.moves = {MOVE_SLAM, MOVE_PROTECT, MOVE_HELPING_HAND, MOVE_FOLLOW_ME},
- .itemTableId = BATTLE_FRONTIER_ITEM_LIECHI_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_LIECHI_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_SERIOUS
},
[FRONTIER_MON_DUNSPARCE_1] = {
.species = SPECIES_DUNSPARCE,
.moves = {MOVE_HEADBUTT, MOVE_GLARE, MOVE_DEFENSE_CURL, MOVE_ROLLOUT},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_DRAGONAIR_1] = {
.species = SPECIES_DRAGONAIR,
.moves = {MOVE_DRAGON_BREATH, MOVE_LEER, MOVE_WRAP, MOVE_SAFEGUARD},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHERI_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_MIGHTYENA_1] = {
.species = SPECIES_MIGHTYENA,
.moves = {MOVE_BITE, MOVE_POISON_FANG, MOVE_TAUNT, MOVE_ROAR},
- .itemTableId = BATTLE_FRONTIER_ITEM_MENTAL_HERB,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_MENTAL_HERB,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_TIMID
},
[FRONTIER_MON_LINOONE_1] = {
.species = SPECIES_LINOONE,
.moves = {MOVE_SECRET_POWER, MOVE_SAND_ATTACK, MOVE_COVET, MOVE_TICKLE},
- .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_WHITE_HERB,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_CASTFORM_1] = {
.species = SPECIES_CASTFORM_NORMAL,
.moves = {MOVE_EMBER, MOVE_WATER_PULSE, MOVE_SHOCK_WAVE, MOVE_ICY_WIND},
- .itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PETAYA_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_HASTY
},
[FRONTIER_MON_SHELGON_1] = {
.species = SPECIES_SHELGON,
.moves = {MOVE_HEADBUTT, MOVE_DRAGON_BREATH, MOVE_PROTECT, MOVE_SCARY_FACE},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHERI_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 0, 0, 170),
.nature = NATURE_HARDY
},
[FRONTIER_MON_METANG_1] = {
.species = SPECIES_METANG,
.moves = {MOVE_METAL_CLAW, MOVE_CONFUSION, MOVE_PURSUIT, MOVE_SCARY_FACE},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 0, 252),
.nature = NATURE_HARDY
},
[FRONTIER_MON_WIGGLYTUFF_1] = {
.species = SPECIES_WIGGLYTUFF,
.moves = {MOVE_SING, MOVE_DISABLE, MOVE_WISH, MOVE_SECRET_POWER},
- .itemTableId = BATTLE_FRONTIER_ITEM_SILK_SCARF,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_SILK_SCARF,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_SUNFLORA_1] = {
.species = SPECIES_SUNFLORA,
.moves = {MOVE_PETAL_DANCE, MOVE_INGRAIN, MOVE_LEECH_SEED, MOVE_LIGHT_SCREEN},
- .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PERSIM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 252, 0, 0, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_CHIMECHO_1] = {
.species = SPECIES_CHIMECHO,
.moves = {MOVE_PSYWAVE, MOVE_TAKE_DOWN, MOVE_HEAL_BELL, MOVE_SAFEGUARD},
- .itemTableId = BATTLE_FRONTIER_ITEM_TWISTED_SPOON,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_TWISTED_SPOON,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_SASSY
},
[FRONTIER_MON_GLIGAR_1] = {
.species = SPECIES_GLIGAR,
.moves = {MOVE_METAL_CLAW, MOVE_DIG, MOVE_AERIAL_ACE, MOVE_QUICK_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_HASTY
},
[FRONTIER_MON_QWILFISH_1] = {
.species = SPECIES_QWILFISH,
.moves = {MOVE_BUBBLE_BEAM, MOVE_PIN_MISSILE, MOVE_SPIKES, MOVE_MINIMIZE},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK,
+ .heldItem = ITEM_CHERI_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 0, 252, 252),
.nature = NATURE_IMPISH
},
[FRONTIER_MON_SNEASEL_1] = {
.species = SPECIES_SNEASEL,
.moves = {MOVE_FEINT_ATTACK, MOVE_FAKE_OUT, MOVE_ICY_WIND, MOVE_QUICK_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PERSIM_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_PELIPPER_1] = {
.species = SPECIES_PELIPPER,
.moves = {MOVE_WATER_PULSE, MOVE_AERIAL_ACE, MOVE_STOCKPILE, MOVE_SWALLOW},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_QUIET
},
[FRONTIER_MON_SWELLOW_1] = {
.species = SPECIES_SWELLOW,
.moves = {MOVE_FLY, MOVE_ENDEAVOR, MOVE_FACADE, MOVE_QUICK_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_KINGS_ROCK,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_LAIRON_1] = {
.species = SPECIES_LAIRON,
.moves = {MOVE_METAL_CLAW, MOVE_ROCK_TOMB, MOVE_IRON_DEFENSE, MOVE_PROTECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_METAL_COAT,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_METAL_COAT,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_SASSY
},
[FRONTIER_MON_TANGELA_1] = {
.species = SPECIES_TANGELA,
.moves = {MOVE_MEGA_DRAIN, MOVE_SLAM, MOVE_TOXIC, MOVE_BIND},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_HARDY
},
[FRONTIER_MON_ARBOK_1] = {
.species = SPECIES_ARBOK,
.moves = {MOVE_POISON_FANG, MOVE_DIG, MOVE_BITE, MOVE_GLARE},
- .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PERSIM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_PERSIAN_1] = {
.species = SPECIES_PERSIAN,
.moves = {MOVE_FAKE_OUT, MOVE_SLASH, MOVE_TORMENT, MOVE_SWAGGER},
- .itemTableId = BATTLE_FRONTIER_ITEM_SILK_SCARF,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SILK_SCARF,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_SEADRA_1] = {
.species = SPECIES_SEADRA,
.moves = {MOVE_AURORA_BEAM, MOVE_SMOKESCREEN, MOVE_WATER_GUN, MOVE_RAIN_DANCE},
- .itemTableId = BATTLE_FRONTIER_ITEM_MYSTIC_WATER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_MYSTIC_WATER,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_SASSY
},
[FRONTIER_MON_KECLEON_1] = {
.species = SPECIES_KECLEON,
.moves = {MOVE_SECRET_POWER, MOVE_PSYBEAM, MOVE_MAGIC_COAT, MOVE_SEISMIC_TOSS},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(170, 170, 170, 0, 0, 0),
.nature = NATURE_NAIVE
},
[FRONTIER_MON_VIGOROTH_1] = {
.species = SPECIES_VIGOROTH,
.moves = {MOVE_SLASH, MOVE_COUNTER, MOVE_ENCORE, MOVE_UPROAR},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_LONELY
},
[FRONTIER_MON_LUNATONE_1] = {
.species = SPECIES_LUNATONE,
.moves = {MOVE_CONFUSION, MOVE_COSMIC_POWER, MOVE_LIGHT_SCREEN, MOVE_SANDSTORM},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 252, 0, 0, 0),
.nature = NATURE_QUIET
},
[FRONTIER_MON_SOLROCK_1] = {
.species = SPECIES_SOLROCK,
.moves = {MOVE_CONFUSION, MOVE_FIRE_SPIN, MOVE_LIGHT_SCREEN, MOVE_SANDSTORM},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_QUIET
},
[FRONTIER_MON_NOCTOWL_1] = {
.species = SPECIES_NOCTOWL,
.moves = {MOVE_CONFUSION, MOVE_AERIAL_ACE, MOVE_FEINT_ATTACK, MOVE_REFLECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PERSIM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 252, 0, 0, 0),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_SANDSLASH_1] = {
.species = SPECIES_SANDSLASH,
.moves = {MOVE_CRUSH_CLAW, MOVE_ROCK_SLIDE, MOVE_SWIFT, MOVE_SANDSTORM},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_VENOMOTH_1] = {
.species = SPECIES_VENOMOTH,
.moves = {MOVE_SILVER_WIND, MOVE_PSYBEAM, MOVE_SLEEP_POWDER, MOVE_SKILL_SWAP},
- .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PERSIM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 252, 0, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_CHANSEY_1] = {
.species = SPECIES_CHANSEY,
.moves = {MOVE_METRONOME, MOVE_REFRESH, MOVE_DEFENSE_CURL, MOVE_MINIMIZE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_SEAKING_1] = {
.species = SPECIES_SEAKING,
.moves = {MOVE_WATER_PULSE, MOVE_PSYBEAM, MOVE_SWIFT, MOVE_AGILITY},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_JUMPLUFF_1] = {
.species = SPECIES_JUMPLUFF,
.moves = {MOVE_AERIAL_ACE, MOVE_SWAGGER, MOVE_PSYCH_UP, MOVE_SYNTHESIS},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 252, 0, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_PILOSWINE_1] = {
.species = SPECIES_PILOSWINE,
.moves = {MOVE_DIG, MOVE_ANCIENT_POWER, MOVE_HAIL, MOVE_LIGHT_SCREEN},
- .itemTableId = BATTLE_FRONTIER_ITEM_SOFT_SAND,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SOFT_SAND,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_GOLBAT_1] = {
.species = SPECIES_GOLBAT,
.moves = {MOVE_AIR_CUTTER, MOVE_CONFUSE_RAY, MOVE_TOXIC, MOVE_STEEL_WING},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_PRIMEAPE_1] = {
.species = SPECIES_PRIMEAPE,
.moves = {MOVE_KARATE_CHOP, MOVE_COUNTER, MOVE_SWAGGER, MOVE_SCREECH},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_HITMONLEE_1] = {
.species = SPECIES_HITMONLEE,
.moves = {MOVE_ROLLING_KICK, MOVE_BRICK_BREAK, MOVE_FOCUS_ENERGY, MOVE_FACADE},
- .itemTableId = BATTLE_FRONTIER_ITEM_BLACK_BELT,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BLACK_BELT,
+ .ev = TRAINER_PARTY_EVS(252, 0, 252, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_HITMONCHAN_1] = {
.species = SPECIES_HITMONCHAN,
.moves = {MOVE_MACH_PUNCH, MOVE_SKY_UPPERCUT, MOVE_DETECT, MOVE_COUNTER},
- .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_KINGS_ROCK,
+ .ev = TRAINER_PARTY_EVS(252, 0, 252, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_GIRAFARIG_1] = {
.species = SPECIES_GIRAFARIG,
.moves = {MOVE_PSYBEAM, MOVE_STOMP, MOVE_WISH, MOVE_SKILL_SWAP},
- .itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PETAYA_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_QUIET
},
[FRONTIER_MON_HITMONTOP_1] = {
.species = SPECIES_HITMONTOP,
.moves = {MOVE_TRIPLE_KICK, MOVE_DIG, MOVE_MACH_PUNCH, MOVE_QUICK_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_LIECHI_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LIECHI_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_BANETTE_1] = {
.species = SPECIES_BANETTE,
.moves = {MOVE_NIGHT_SHADE, MOVE_WILL_O_WISP, MOVE_SPITE, MOVE_KNOCK_OFF},
- .itemTableId = BATTLE_FRONTIER_ITEM_RAWST_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_RAWST_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_SASSY
},
[FRONTIER_MON_NINJASK_1] = {
.species = SPECIES_NINJASK,
.moves = {MOVE_BATON_PASS, MOVE_SWORDS_DANCE, MOVE_ENDURE, MOVE_DIG},
- .itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PETAYA_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_MILD
},
[FRONTIER_MON_SEVIPER_1] = {
.species = SPECIES_SEVIPER,
.moves = {MOVE_POISON_TAIL, MOVE_BITE, MOVE_GLARE, MOVE_SCREECH},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_ZANGOOSE_1] = {
.species = SPECIES_ZANGOOSE,
.moves = {MOVE_SLASH, MOVE_DOUBLE_KICK, MOVE_ROAR, MOVE_QUICK_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PERSIM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_CAMERUPT_1] = {
.species = SPECIES_CAMERUPT,
.moves = {MOVE_MAGNITUDE, MOVE_PROTECT, MOVE_SANDSTORM, MOVE_ROCK_SLIDE},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_SHARPEDO_1] = {
.species = SPECIES_SHARPEDO,
.moves = {MOVE_SLASH, MOVE_BITE, MOVE_WATER_PULSE, MOVE_SCARY_FACE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 0, 252),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_TROPIUS_1] = {
.species = SPECIES_TROPIUS,
.moves = {MOVE_MAGICAL_LEAF, MOVE_WHIRLWIND, MOVE_AERIAL_ACE, MOVE_STEEL_WING},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_MAGNETON_1] = {
.species = SPECIES_MAGNETON,
.moves = {MOVE_SHOCK_WAVE, MOVE_SONIC_BOOM, MOVE_THUNDER_WAVE, MOVE_SUPERSONIC},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_CHERI_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_LONELY
},
[FRONTIER_MON_MANTINE_1] = {
.species = SPECIES_MANTINE,
.moves = {MOVE_BUBBLE_BEAM, MOVE_AERIAL_ACE, MOVE_RAIN_DANCE, MOVE_ICY_WIND},
- .itemTableId = BATTLE_FRONTIER_ITEM_MYSTIC_WATER,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_MYSTIC_WATER,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_STANTLER_1] = {
.species = SPECIES_STANTLER,
.moves = {MOVE_EXTRASENSORY, MOVE_CONFUSE_RAY, MOVE_STOMP, MOVE_SAND_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_TWISTED_SPOON,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_TWISTED_SPOON,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_GENTLE
},
[FRONTIER_MON_ABSOL_1] = {
.species = SPECIES_ABSOL,
.moves = {MOVE_BITE, MOVE_RAZOR_WIND, MOVE_FUTURE_SIGHT, MOVE_QUICK_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_SWALOT_1] = {
.species = SPECIES_SWALOT,
.moves = {MOVE_STOCKPILE, MOVE_SWALLOW, MOVE_SPIT_UP, MOVE_SLUDGE},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_CRAWDAUNT_1] = {
.species = SPECIES_CRAWDAUNT,
.moves = {MOVE_BUBBLE_BEAM, MOVE_VISE_GRIP, MOVE_KNOCK_OFF, MOVE_PROTECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PERSIM_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_PIDGEOT_1] = {
.species = SPECIES_PIDGEOT,
.moves = {MOVE_AERIAL_ACE, MOVE_FEATHER_DANCE, MOVE_MUD_SLAP, MOVE_FEINT_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHARP_BEAK,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SHARP_BEAK,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_GRUMPIG_1] = {
.species = SPECIES_GRUMPIG,
.moves = {MOVE_PSYBEAM, MOVE_CONFUSE_RAY, MOVE_FUTURE_SIGHT, MOVE_MAGIC_COAT},
- .itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PETAYA_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_TORKOAL_1] = {
.species = SPECIES_TORKOAL,
.moves = {MOVE_EMBER, MOVE_FIRE_SPIN, MOVE_SMOKESCREEN, MOVE_AMNESIA},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_KINGLER_1] = {
.species = SPECIES_KINGLER,
.moves = {MOVE_CRABHAMMER, MOVE_METAL_CLAW, MOVE_MUD_SHOT, MOVE_PROTECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_HARDY
},
[FRONTIER_MON_CACTURNE_1] = {
.species = SPECIES_CACTURNE,
.moves = {MOVE_NEEDLE_ARM, MOVE_FEINT_ATTACK, MOVE_ACID, MOVE_MEGA_PUNCH},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 252, 0, 0),
.nature = NATURE_HASTY
},
[FRONTIER_MON_BELLOSSOM_1] = {
.species = SPECIES_BELLOSSOM,
.moves = {MOVE_PETAL_DANCE, MOVE_SAFEGUARD, MOVE_SUNNY_DAY, MOVE_SYNTHESIS},
- .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PERSIM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_QUIET
},
[FRONTIER_MON_OCTILLERY_1] = {
.species = SPECIES_OCTILLERY,
.moves = {MOVE_OCTAZOOKA, MOVE_AURORA_BEAM, MOVE_PSYBEAM, MOVE_ROCK_BLAST},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_HUNTAIL_1] = {
.species = SPECIES_HUNTAIL,
.moves = {MOVE_WHIRLPOOL, MOVE_SCARY_FACE, MOVE_MUD_SLAP, MOVE_BITE},
- .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PERSIM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_QUIET
},
[FRONTIER_MON_GOREBYSS_1] = {
.species = SPECIES_GOREBYSS,
.moves = {MOVE_WHIRLPOOL, MOVE_AMNESIA, MOVE_ICY_WIND, MOVE_CONFUSION},
- .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PERSIM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_BRAVE
},
[FRONTIER_MON_RELICANTH_1] = {
.species = SPECIES_RELICANTH,
.moves = {MOVE_ANCIENT_POWER, MOVE_WATER_PULSE, MOVE_HARDEN, MOVE_AMNESIA},
- .itemTableId = BATTLE_FRONTIER_ITEM_LIECHI_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LIECHI_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 0, 0, 170, 170),
.nature = NATURE_SASSY
},
[FRONTIER_MON_OMASTAR_1] = {
.species = SPECIES_OMASTAR,
.moves = {MOVE_BUBBLE_BEAM, MOVE_SPIKE_CANNON, MOVE_TICKLE, MOVE_ANCIENT_POWER},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_KABUTOPS_1] = {
.species = SPECIES_KABUTOPS,
.moves = {MOVE_SLASH, MOVE_DIG, MOVE_FURY_CUTTER, MOVE_KNOCK_OFF},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_POLIWRATH_1] = {
.species = SPECIES_POLIWRATH,
.moves = {MOVE_SUBMISSION, MOVE_DIG, MOVE_ROCK_TOMB, MOVE_BUBBLE_BEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_BLACK_BELT,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BLACK_BELT,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_SCYTHER_1] = {
.species = SPECIES_SCYTHER,
.moves = {MOVE_FURY_CUTTER, MOVE_AERIAL_ACE, MOVE_LIGHT_SCREEN, MOVE_DOUBLE_TEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_LIECHI_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LIECHI_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_PINSIR_1] = {
.species = SPECIES_PINSIR,
.moves = {MOVE_SUBMISSION, MOVE_FOCUS_ENERGY, MOVE_SWORDS_DANCE, MOVE_REVENGE},
- .itemTableId = BATTLE_FRONTIER_ITEM_BLACK_BELT,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BLACK_BELT,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_NAUGHTY
},
[FRONTIER_MON_POLITOED_1] = {
.species = SPECIES_POLITOED,
.moves = {MOVE_DIVE, MOVE_DIG, MOVE_HYPNOSIS, MOVE_SWAGGER},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_CLOYSTER_1] = {
.species = SPECIES_CLOYSTER,
.moves = {MOVE_AURORA_BEAM, MOVE_SPIKE_CANNON, MOVE_SUPERSONIC, MOVE_PROTECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_NEVER_MELT_ICE,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_NEVER_MELT_ICE,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_SASSY
},
[FRONTIER_MON_DELCATTY_2] = {
.species = SPECIES_DELCATTY,
.moves = {MOVE_FAKE_TEARS, MOVE_SING, MOVE_THUNDERBOLT, MOVE_ICE_BEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_SABLEYE_2] = {
.species = SPECIES_SABLEYE,
.moves = {MOVE_SHADOW_BALL, MOVE_FEINT_ATTACK, MOVE_CONFUSE_RAY, MOVE_RECOVER},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 0, 170, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_LICKITUNG_2] = {
.species = SPECIES_LICKITUNG,
.moves = {MOVE_EARTHQUAKE, MOVE_BODY_SLAM, MOVE_SHADOW_BALL, MOVE_ROCK_SLIDE},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_CHERI_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 170, 170, 0, 0, 170),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_WEEPINBELL_2] = {
.species = SPECIES_WEEPINBELL,
.moves = {MOVE_SLUDGE_BOMB, MOVE_RAZOR_LEAF, MOVE_SLEEP_POWDER, MOVE_REFLECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_GRAVELER_2] = {
.species = SPECIES_GRAVELER,
.moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_BRICK_BREAK, MOVE_COUNTER},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_GLOOM_2] = {
.species = SPECIES_GLOOM,
.moves = {MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_SLUDGE_BOMB, MOVE_MOONLIGHT},
- .itemTableId = BATTLE_FRONTIER_ITEM_PECHA_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_PECHA_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_PORYGON_2] = {
.species = SPECIES_PORYGON,
.moves = {MOVE_TRI_ATTACK, MOVE_PSYCHIC, MOVE_THUNDER_WAVE, MOVE_RECOVER},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_CHERI_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_QUIET
},
[FRONTIER_MON_KADABRA_2] = {
.species = SPECIES_KADABRA,
.moves = {MOVE_PSYCHIC, MOVE_THUNDER_WAVE, MOVE_REFLECT, MOVE_RECOVER},
- .itemTableId = BATTLE_FRONTIER_ITEM_TWISTED_SPOON,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_TWISTED_SPOON,
+ .ev = TRAINER_PARTY_EVS(252, 0, 252, 0, 0, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_WAILMER_2] = {
.species = SPECIES_WAILMER,
.moves = {MOVE_WATER_SPOUT, MOVE_EARTHQUAKE, MOVE_BODY_SLAM, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_ROSELIA_2] = {
.species = SPECIES_ROSELIA,
.moves = {MOVE_GIGA_DRAIN, MOVE_SLUDGE_BOMB, MOVE_GRASS_WHISTLE, MOVE_SYNTHESIS},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(252, 0, 252, 0, 0, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_VOLBEAT_2] = {
.species = SPECIES_VOLBEAT,
.moves = {MOVE_SIGNAL_BEAM, MOVE_THUNDERBOLT, MOVE_ICE_PUNCH, MOVE_TAIL_GLOW},
- .itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_PETAYA_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_ILLUMISE_2] = {
.species = SPECIES_ILLUMISE,
.moves = {MOVE_SILVER_WIND, MOVE_THUNDERBOLT, MOVE_ICE_PUNCH, MOVE_GIGA_DRAIN},
- .itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_PETAYA_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_IVYSAUR_2] = {
.species = SPECIES_IVYSAUR,
.moves = {MOVE_GIGA_DRAIN, MOVE_SLUDGE_BOMB, MOVE_SLEEP_POWDER, MOVE_LEECH_SEED},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_CHARMELEON_2] = {
.species = SPECIES_CHARMELEON,
.moves = {MOVE_FLAMETHROWER, MOVE_SLASH, MOVE_ANCIENT_POWER, MOVE_DRAGON_RAGE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_WARTORTLE_2] = {
.species = SPECIES_WARTORTLE,
.moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_RAPID_SPIN, MOVE_PROTECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_PARASECT_2] = {
.species = SPECIES_PARASECT,
.moves = {MOVE_SPORE, MOVE_GIGA_DRAIN, MOVE_DIG, MOVE_DOUBLE_TEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_CALM
},
[FRONTIER_MON_MACHOKE_2] = {
.species = SPECIES_MACHOKE,
.moves = {MOVE_CROSS_CHOP, MOVE_ROCK_SLIDE, MOVE_FORESIGHT, MOVE_SCARY_FACE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_HAUNTER_2] = {
.species = SPECIES_HAUNTER,
.moves = {MOVE_PSYCHIC, MOVE_HYPNOSIS, MOVE_NIGHTMARE, MOVE_CONFUSE_RAY},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_BAYLEEF_2] = {
.species = SPECIES_BAYLEEF,
.moves = {MOVE_GIGA_DRAIN, MOVE_BODY_SLAM, MOVE_GRASS_WHISTLE, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_QUILAVA_2] = {
.species = SPECIES_QUILAVA,
.moves = {MOVE_FLAMETHROWER, MOVE_CRUSH_CLAW, MOVE_BODY_SLAM, MOVE_SMOKESCREEN},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_CROCONAW_2] = {
.species = SPECIES_CROCONAW,
.moves = {MOVE_MEGA_KICK, MOVE_AERIAL_ACE, MOVE_ROCK_SLIDE, MOVE_DIG},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_TOGETIC_2] = {
.species = SPECIES_TOGETIC,
.moves = {MOVE_RETURN, MOVE_SWEET_KISS, MOVE_AERIAL_ACE, MOVE_YAWN},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(252, 0, 252, 0, 0, 0),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_MURKROW_2] = {
.species = SPECIES_MURKROW,
.moves = {MOVE_PERISH_SONG, MOVE_MEAN_LOOK, MOVE_DOUBLE_TEAM, MOVE_THUNDER_WAVE},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_WOBBUFFET_2] = {
.species = SPECIES_WOBBUFFET,
.moves = {MOVE_COUNTER, MOVE_MIRROR_COAT, MOVE_ENCORE, MOVE_DESTINY_BOND},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_CAREFUL
},
[FRONTIER_MON_PLUSLE_2] = {
.species = SPECIES_PLUSLE,
.moves = {MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_SEISMIC_TOSS, MOVE_WISH},
- .itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_PETAYA_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_MINUN_2] = {
.species = SPECIES_MINUN,
.moves = {MOVE_THUNDERBOLT, MOVE_ATTRACT, MOVE_CHARM, MOVE_WISH},
- .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_SALAC_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_GROVYLE_2] = {
.species = SPECIES_GROVYLE,
.moves = {MOVE_GIGA_DRAIN, MOVE_CRUSH_CLAW, MOVE_SCREECH, MOVE_ROCK_TOMB},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_COMBUSKEN_2] = {
.species = SPECIES_COMBUSKEN,
.moves = {MOVE_FLAMETHROWER, MOVE_SKY_UPPERCUT, MOVE_SLASH, MOVE_SAND_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(0, 170, 0, 170, 170, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_MARSHTOMP_2] = {
.species = SPECIES_MARSHTOMP,
.moves = {MOVE_MUDDY_WATER, MOVE_EARTHQUAKE, MOVE_MUD_SLAP, MOVE_PROTECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_PONYTA_2] = {
.species = SPECIES_PONYTA,
.moves = {MOVE_FLAMETHROWER, MOVE_BODY_SLAM, MOVE_DOUBLE_KICK, MOVE_DOUBLE_TEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_AZUMARILL_2] = {
.species = SPECIES_AZUMARILL,
.moves = {MOVE_MEGA_KICK, MOVE_BRICK_BREAK, MOVE_IRON_TAIL, MOVE_DIG},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_SUDOWOODO_2] = {
.species = SPECIES_SUDOWOODO,
.moves = {MOVE_MEGA_KICK, MOVE_EARTHQUAKE, MOVE_LOW_KICK, MOVE_SELF_DESTRUCT},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_HARDY
},
[FRONTIER_MON_MAGCARGO_2] = {
.species = SPECIES_MAGCARGO,
.moves = {MOVE_OVERHEAT, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_BODY_SLAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_QUIET
},
[FRONTIER_MON_PUPITAR_2] = {
.species = SPECIES_PUPITAR,
.moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_CRUNCH, MOVE_SCARY_FACE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_SEALEO_2] = {
.species = SPECIES_SEALEO,
.moves = {MOVE_ICE_BEAM, MOVE_SURF, MOVE_BODY_SLAM, MOVE_HAIL},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_QUIET
},
[FRONTIER_MON_RATICATE_2] = {
.species = SPECIES_RATICATE,
.moves = {MOVE_SUPER_FANG, MOVE_HYPER_FANG, MOVE_SHADOW_BALL, MOVE_SCARY_FACE},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_MASQUERAIN_2] = {
.species = SPECIES_MASQUERAIN,
.moves = {MOVE_HYDRO_PUMP, MOVE_ICE_BEAM, MOVE_GIGA_DRAIN, MOVE_STUN_SPORE},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 252, 0),
.nature = NATURE_QUIET
},
[FRONTIER_MON_FURRET_2] = {
.species = SPECIES_FURRET,
.moves = {MOVE_TRICK, MOVE_FRUSTRATION, MOVE_SHADOW_BALL, MOVE_FOLLOW_ME},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHOICE_BAND,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_CHOICE_BAND,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_DUNSPARCE_2] = {
.species = SPECIES_DUNSPARCE,
.moves = {MOVE_ICE_BEAM, MOVE_ROCK_TOMB, MOVE_BITE, MOVE_SHADOW_BALL},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_QUIET
},
[FRONTIER_MON_DRAGONAIR_2] = {
.species = SPECIES_DRAGONAIR,
.moves = {MOVE_RETURN, MOVE_REST, MOVE_THUNDER_WAVE, MOVE_DRAGON_DANCE},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_MIGHTYENA_2] = {
.species = SPECIES_MIGHTYENA,
.moves = {MOVE_CRUNCH, MOVE_SHADOW_BALL, MOVE_FRUSTRATION, MOVE_SCARY_FACE},
- .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_KINGS_ROCK,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 252, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_LINOONE_2] = {
.species = SPECIES_LINOONE,
.moves = {MOVE_TRICK, MOVE_FRUSTRATION, MOVE_THUNDER_WAVE, MOVE_SAND_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHOICE_BAND,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_CHOICE_BAND,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_JOLLY
},
[FRONTIER_MON_CASTFORM_2] = {
.species = SPECIES_CASTFORM_NORMAL,
.moves = {MOVE_THUNDERBOLT, MOVE_FLAMETHROWER, MOVE_ICE_BEAM, MOVE_WATER_PULSE},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_SHELGON_2] = {
.species = SPECIES_SHELGON,
.moves = {MOVE_FRUSTRATION, MOVE_DRAGON_DANCE, MOVE_CRUNCH, MOVE_SCARY_FACE},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_HARDY
},
[FRONTIER_MON_METANG_2] = {
.species = SPECIES_METANG,
.moves = {MOVE_METEOR_MASH, MOVE_PSYCHIC, MOVE_BODY_SLAM, MOVE_SCARY_FACE},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_WIGGLYTUFF_2] = {
.species = SPECIES_WIGGLYTUFF,
.moves = {MOVE_FAKE_TEARS, MOVE_SING, MOVE_DREAM_EATER, MOVE_BRICK_BREAK},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_SUNFLORA_2] = {
.species = SPECIES_SUNFLORA,
.moves = {MOVE_GIGA_DRAIN, MOVE_GRASS_WHISTLE, MOVE_GROWTH, MOVE_DOUBLE_TEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(252, 0, 252, 0, 0, 0),
.nature = NATURE_QUIET
},
[FRONTIER_MON_CHIMECHO_2] = {
.species = SPECIES_CHIMECHO,
.moves = {MOVE_PSYCHIC, MOVE_HYPNOSIS, MOVE_DREAM_EATER, MOVE_HEAL_BELL},
- .itemTableId = BATTLE_FRONTIER_ITEM_TWISTED_SPOON,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_TWISTED_SPOON,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_QUIET
},
[FRONTIER_MON_GLIGAR_2] = {
.species = SPECIES_GLIGAR,
.moves = {MOVE_EARTHQUAKE, MOVE_AERIAL_ACE, MOVE_GUILLOTINE, MOVE_SCREECH},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_QWILFISH_2] = {
.species = SPECIES_QWILFISH,
.moves = {MOVE_REVENGE, MOVE_SLUDGE_BOMB, MOVE_SHADOW_BALL, MOVE_DESTINY_BOND},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_SNEASEL_2] = {
.species = SPECIES_SNEASEL,
.moves = {MOVE_CRUSH_CLAW, MOVE_BRICK_BREAK, MOVE_AERIAL_ACE, MOVE_SCREECH},
- .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_KINGS_ROCK,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 170, 0, 0),
.nature = NATURE_JOLLY
},
[FRONTIER_MON_PELIPPER_2] = {
.species = SPECIES_PELIPPER,
.moves = {MOVE_SURF, MOVE_BLIZZARD, MOVE_AERIAL_ACE, MOVE_PROTECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_QUIET
},
[FRONTIER_MON_SWELLOW_2] = {
.species = SPECIES_SWELLOW,
.moves = {MOVE_FACADE, MOVE_AERIAL_ACE, MOVE_PURSUIT, MOVE_DOUBLE_TEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_KINGS_ROCK,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_LAIRON_2] = {
.species = SPECIES_LAIRON,
.moves = {MOVE_EARTHQUAKE, MOVE_IRON_TAIL, MOVE_ROAR, MOVE_PROTECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_SASSY
},
[FRONTIER_MON_TANGELA_2] = {
.species = SPECIES_TANGELA,
.moves = {MOVE_GIGA_DRAIN, MOVE_STUN_SPORE, MOVE_REST, MOVE_AMNESIA},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_CALM
},
[FRONTIER_MON_ARBOK_2] = {
.species = SPECIES_ARBOK,
.moves = {MOVE_SLUDGE_BOMB, MOVE_EARTHQUAKE, MOVE_IRON_TAIL, MOVE_GLARE},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 252, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_PERSIAN_2] = {
.species = SPECIES_PERSIAN,
.moves = {MOVE_FRUSTRATION, MOVE_SHADOW_BALL, MOVE_ROAR, MOVE_FAKE_OUT},
- .itemTableId = BATTLE_FRONTIER_ITEM_SILK_SCARF,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SILK_SCARF,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_SEADRA_2] = {
.species = SPECIES_SEADRA,
.moves = {MOVE_HYDRO_PUMP, MOVE_FRUSTRATION, MOVE_DRAGON_BREATH, MOVE_DRAGON_DANCE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_KECLEON_2] = {
.species = SPECIES_KECLEON,
.moves = {MOVE_TRICK, MOVE_BRICK_BREAK, MOVE_SHADOW_BALL, MOVE_SKILL_SWAP},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHOICE_BAND,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHOICE_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 0, 252, 0, 0, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_VIGOROTH_2] = {
.species = SPECIES_VIGOROTH,
.moves = {MOVE_CRUSH_CLAW, MOVE_REVERSAL, MOVE_ENDURE, MOVE_SHADOW_BALL},
- .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SALAC_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 0, 252),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_LUNATONE_2] = {
.species = SPECIES_LUNATONE,
.moves = {MOVE_PSYCHIC, MOVE_ICE_BEAM, MOVE_COSMIC_POWER, MOVE_CALM_MIND},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(252, 0, 252, 0, 0, 0),
.nature = NATURE_QUIET
},
[FRONTIER_MON_SOLROCK_2] = {
.species = SPECIES_SOLROCK,
.moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_COSMIC_POWER, MOVE_OVERHEAT},
- .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_WHITE_HERB,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_HARDY
},
[FRONTIER_MON_NOCTOWL_2] = {
.species = SPECIES_NOCTOWL,
.moves = {MOVE_PSYCHIC, MOVE_FEINT_ATTACK, MOVE_AERIAL_ACE, MOVE_REFLECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_PERSIM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 252, 0),
.nature = NATURE_QUIET
},
[FRONTIER_MON_SANDSLASH_2] = {
.species = SPECIES_SANDSLASH,
.moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_CRUSH_CLAW, MOVE_SANDSTORM},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_VENOMOTH_2] = {
.species = SPECIES_VENOMOTH,
.moves = {MOVE_SIGNAL_BEAM, MOVE_PSYCHIC, MOVE_SLUDGE_BOMB, MOVE_GIGA_DRAIN},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 252, 0, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_CHANSEY_2] = {
.species = SPECIES_CHANSEY,
.moves = {MOVE_SEISMIC_TOSS, MOVE_SHADOW_BALL, MOVE_DOUBLE_TEAM, MOVE_SOFT_BOILED},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_SEAKING_2] = {
.species = SPECIES_SEAKING,
.moves = {MOVE_HORN_DRILL, MOVE_MEGAHORN, MOVE_SLEEP_TALK, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_IMPISH
},
[FRONTIER_MON_JUMPLUFF_2] = {
.species = SPECIES_JUMPLUFF,
.moves = {MOVE_LEECH_SEED, MOVE_SLEEP_POWDER, MOVE_GIGA_DRAIN, MOVE_DOUBLE_TEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_BOLD
},
[FRONTIER_MON_PILOSWINE_2] = {
.species = SPECIES_PILOSWINE,
.moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_BODY_SLAM, MOVE_ROAR},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_GOLBAT_2] = {
.species = SPECIES_GOLBAT,
.moves = {MOVE_SLUDGE_BOMB, MOVE_SHADOW_BALL, MOVE_CONFUSE_RAY, MOVE_AIR_CUTTER},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_PRIMEAPE_2] = {
.species = SPECIES_PRIMEAPE,
.moves = {MOVE_CROSS_CHOP, MOVE_ROCK_TOMB, MOVE_OVERHEAT, MOVE_BULK_UP},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_HITMONLEE_2] = {
.species = SPECIES_HITMONLEE,
.moves = {MOVE_MEGA_KICK, MOVE_BRICK_BREAK, MOVE_FORESIGHT, MOVE_ROCK_TOMB},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(252, 0, 252, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_HITMONCHAN_2] = {
.species = SPECIES_HITMONCHAN,
.moves = {MOVE_DYNAMIC_PUNCH, MOVE_MACH_PUNCH, MOVE_DETECT, MOVE_COUNTER},
- .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_KINGS_ROCK,
+ .ev = TRAINER_PARTY_EVS(252, 0, 252, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_GIRAFARIG_2] = {
.species = SPECIES_GIRAFARIG,
.moves = {MOVE_PSYCHIC, MOVE_CRUNCH, MOVE_BATON_PASS, MOVE_AGILITY},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_MODEST
},
[FRONTIER_MON_HITMONTOP_2] = {
.species = SPECIES_HITMONTOP,
.moves = {MOVE_DOUBLE_EDGE, MOVE_SEISMIC_TOSS, MOVE_ROCK_SLIDE, MOVE_COUNTER},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 0, 252, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_BANETTE_2] = {
.species = SPECIES_BANETTE,
.moves = {MOVE_SHADOW_BALL, MOVE_FRUSTRATION, MOVE_SCREECH, MOVE_WILL_O_WISP},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_NINJASK_2] = {
.species = SPECIES_NINJASK,
.moves = {MOVE_SLASH, MOVE_SHADOW_BALL, MOVE_SWORDS_DANCE, MOVE_BATON_PASS},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_SEVIPER_2] = {
.species = SPECIES_SEVIPER,
.moves = {MOVE_SLUDGE_BOMB, MOVE_EARTHQUAKE, MOVE_CRUNCH, MOVE_GIGA_DRAIN},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_ZANGOOSE_2] = {
.species = SPECIES_ZANGOOSE,
.moves = {MOVE_CRUSH_CLAW, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK, MOVE_AERIAL_ACE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_CAMERUPT_2] = {
.species = SPECIES_CAMERUPT,
.moves = {MOVE_EARTHQUAKE, MOVE_ERUPTION, MOVE_BODY_SLAM, MOVE_SCARY_FACE},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_SHARPEDO_2] = {
.species = SPECIES_SHARPEDO,
.moves = {MOVE_DOUBLE_EDGE, MOVE_CRUNCH, MOVE_EARTHQUAKE, MOVE_SURF},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(0, 170, 0, 170, 170, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_TROPIUS_2] = {
.species = SPECIES_TROPIUS,
.moves = {MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_SYNTHESIS, MOVE_BODY_SLAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_QUIET
},
[FRONTIER_MON_MAGNETON_2] = {
.species = SPECIES_MAGNETON,
.moves = {MOVE_THUNDER, MOVE_RAIN_DANCE, MOVE_THUNDER_WAVE, MOVE_METAL_SOUND},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_HARDY
},
[FRONTIER_MON_MANTINE_2] = {
.species = SPECIES_MANTINE,
.moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_RAIN_DANCE, MOVE_CONFUSE_RAY},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(252, 0, 252, 0, 0, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_STANTLER_2] = {
.species = SPECIES_STANTLER,
.moves = {MOVE_FRUSTRATION, MOVE_SHADOW_BALL, MOVE_THUNDER_WAVE, MOVE_CONFUSE_RAY},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_ABSOL_2] = {
.species = SPECIES_ABSOL,
.moves = {MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL, MOVE_AERIAL_ACE, MOVE_IRON_TAIL},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHOICE_BAND,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_CHOICE_BAND,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_SWALOT_2] = {
.species = SPECIES_SWALOT,
.moves = {MOVE_SLUDGE_BOMB, MOVE_SHADOW_BALL, MOVE_BODY_SLAM, MOVE_COUNTER},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_CRAWDAUNT_2] = {
.species = SPECIES_CRAWDAUNT,
.moves = {MOVE_GUILLOTINE, MOVE_FRUSTRATION, MOVE_ANCIENT_POWER, MOVE_AERIAL_ACE},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_PIDGEOT_2] = {
.species = SPECIES_PIDGEOT,
.moves = {MOVE_RETURN, MOVE_AERIAL_ACE, MOVE_STEEL_WING, MOVE_MUD_SLAP},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_GRUMPIG_2] = {
.species = SPECIES_GRUMPIG,
.moves = {MOVE_PSYCHIC, MOVE_ICE_PUNCH, MOVE_THUNDER_PUNCH, MOVE_FIRE_PUNCH},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_TORKOAL_2] = {
.species = SPECIES_TORKOAL,
.moves = {MOVE_OVERHEAT, MOVE_BODY_SLAM, MOVE_SMOKESCREEN, MOVE_PROTECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_WHITE_HERB,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_SASSY
},
[FRONTIER_MON_KINGLER_2] = {
.species = SPECIES_KINGLER,
.moves = {MOVE_GUILLOTINE, MOVE_ROCK_TOMB, MOVE_FLAIL, MOVE_ENDURE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SALAC_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_CACTURNE_2] = {
.species = SPECIES_CACTURNE,
.moves = {MOVE_MEGA_KICK, MOVE_TEETER_DANCE, MOVE_FEINT_ATTACK, MOVE_SANDSTORM},
- .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_PERSIM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_HARDY
},
[FRONTIER_MON_BELLOSSOM_2] = {
.species = SPECIES_BELLOSSOM,
.moves = {MOVE_SOLAR_BEAM, MOVE_ATTRACT, MOVE_SUNNY_DAY, MOVE_SYNTHESIS},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_OCTILLERY_2] = {
.species = SPECIES_OCTILLERY,
.moves = {MOVE_OCTAZOOKA, MOVE_FIRE_BLAST, MOVE_THUNDER_WAVE, MOVE_MUD_SLAP},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_HUNTAIL_2] = {
.species = SPECIES_HUNTAIL,
.moves = {MOVE_SURF, MOVE_RAIN_DANCE, MOVE_CRUNCH, MOVE_BODY_SLAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_QUIET
},
[FRONTIER_MON_GOREBYSS_2] = {
.species = SPECIES_GOREBYSS,
.moves = {MOVE_SURF, MOVE_RAIN_DANCE, MOVE_PSYCHIC, MOVE_BODY_SLAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_QUIET
},
[FRONTIER_MON_RELICANTH_2] = {
.species = SPECIES_RELICANTH,
.moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_AMNESIA, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_SASSY
},
[FRONTIER_MON_OMASTAR_2] = {
.species = SPECIES_OMASTAR,
.moves = {MOVE_HYDRO_PUMP, MOVE_RAIN_DANCE, MOVE_ICE_BEAM, MOVE_PROTECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_MODEST
},
[FRONTIER_MON_KABUTOPS_2] = {
.species = SPECIES_KABUTOPS,
.moves = {MOVE_SLASH, MOVE_ROCK_SLIDE, MOVE_FLAIL, MOVE_ENDURE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SALAC_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 0, 252),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_POLIWRATH_2] = {
.species = SPECIES_POLIWRATH,
.moves = {MOVE_BRICK_BREAK, MOVE_HYPNOSIS, MOVE_REST, MOVE_BELLY_DRUM},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_SCYTHER_2] = {
.species = SPECIES_SCYTHER,
.moves = {MOVE_SILVER_WIND, MOVE_AERIAL_ACE, MOVE_SWORDS_DANCE, MOVE_DOUBLE_TEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_PINSIR_2] = {
.species = SPECIES_PINSIR,
.moves = {MOVE_GUILLOTINE, MOVE_SWORDS_DANCE, MOVE_FLAIL, MOVE_ENDURE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SALAC_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 252, 0, 0),
.nature = NATURE_JOLLY
},
[FRONTIER_MON_POLITOED_2] = {
.species = SPECIES_POLITOED,
.moves = {MOVE_SURF, MOVE_PSYCHIC, MOVE_MUD_SLAP, MOVE_SWAGGER},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_CLOYSTER_2] = {
.species = SPECIES_CLOYSTER,
.moves = {MOVE_DIVE, MOVE_TOXIC, MOVE_DOUBLE_TEAM, MOVE_PROTECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_CAREFUL
},
[FRONTIER_MON_DUGTRIO_1] = {
.species = SPECIES_DUGTRIO,
.moves = {MOVE_EARTHQUAKE, MOVE_TRI_ATTACK, MOVE_SLASH, MOVE_SAND_TOMB},
- .itemTableId = BATTLE_FRONTIER_ITEM_SOFT_SAND,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SOFT_SAND,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_MEDICHAM_1] = {
.species = SPECIES_MEDICHAM,
.moves = {MOVE_PSYCHIC, MOVE_HIGH_JUMP_KICK, MOVE_CALM_MIND, MOVE_BATON_PASS},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_MISDREAVUS_1] = {
.species = SPECIES_MISDREAVUS,
.moves = {MOVE_PAIN_SPLIT, MOVE_SHADOW_BALL, MOVE_CONFUSE_RAY, MOVE_THUNDER_WAVE},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 0, 252, 0, 0, 0),
.nature = NATURE_IMPISH
},
[FRONTIER_MON_FEAROW_1] = {
.species = SPECIES_FEAROW,
.moves = {MOVE_DRILL_PECK, MOVE_TRI_ATTACK, MOVE_FACADE, MOVE_MUD_SLAP},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHARP_BEAK,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SHARP_BEAK,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_GRANBULL_1] = {
.species = SPECIES_GRANBULL,
.moves = {MOVE_MEGA_KICK, MOVE_SMELLING_SALTS, MOVE_THUNDER_WAVE, MOVE_ROAR},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHERI_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_JYNX_1] = {
.species = SPECIES_JYNX,
.moves = {MOVE_ICE_BEAM, MOVE_FAKE_OUT, MOVE_LOVELY_KISS, MOVE_ATTRACT},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_DUSCLOPS_1] = {
.species = SPECIES_DUSCLOPS,
.moves = {MOVE_WILL_O_WISP, MOVE_SEISMIC_TOSS, MOVE_PAIN_SPLIT, MOVE_CONFUSE_RAY},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_IMPISH
},
[FRONTIER_MON_DODRIO_1] = {
.species = SPECIES_DODRIO,
.moves = {MOVE_DRILL_PECK, MOVE_TRI_ATTACK, MOVE_SLEEP_TALK, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_MR_MIME_1] = {
.species = SPECIES_MR_MIME,
.moves = {MOVE_PSYCHIC, MOVE_MAGICAL_LEAF, MOVE_FAKE_OUT, MOVE_REFLECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(252, 0, 252, 0, 0, 0),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_LANTURN_1] = {
.species = SPECIES_LANTURN,
.moves = {MOVE_SURF, MOVE_CONFUSE_RAY, MOVE_ATTRACT, MOVE_THUNDER_WAVE},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_CHERI_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 252, 0),
.nature = NATURE_QUIET
},
[FRONTIER_MON_BRELOOM_1] = {
.species = SPECIES_BRELOOM,
.moves = {MOVE_SKY_UPPERCUT, MOVE_MACH_PUNCH, MOVE_HEADBUTT, MOVE_COUNTER},
- .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_KINGS_ROCK,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_JOLLY
},
[FRONTIER_MON_FORRETRESS_1] = {
.species = SPECIES_FORRETRESS,
.moves = {MOVE_DOUBLE_EDGE, MOVE_ROCK_SLIDE, MOVE_LIGHT_SCREEN, MOVE_SPIKES},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 0, 252),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_WHISCASH_1] = {
.species = SPECIES_WHISCASH,
.moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_AMNESIA, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_XATU_1] = {
.species = SPECIES_XATU,
.moves = {MOVE_DRILL_PECK, MOVE_NIGHT_SHADE, MOVE_WISH, MOVE_FUTURE_SIGHT},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHARP_BEAK,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SHARP_BEAK,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 0, 170, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_SKARMORY_1] = {
.species = SPECIES_SKARMORY,
.moves = {MOVE_STEEL_WING, MOVE_AIR_CUTTER, MOVE_COUNTER, MOVE_AGILITY},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 0, 0, 170),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_MAROWAK_1] = {
.species = SPECIES_MAROWAK,
.moves = {MOVE_BONEMERANG, MOVE_ROCK_SLIDE, MOVE_ICY_WIND, MOVE_HEADBUTT},
- .itemTableId = BATTLE_FRONTIER_ITEM_THICK_CLUB,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_THICK_CLUB,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_QUAGSIRE_1] = {
.species = SPECIES_QUAGSIRE,
.moves = {MOVE_EARTHQUAKE, MOVE_BRICK_BREAK, MOVE_COUNTER, MOVE_MUD_SLAP},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 0, 252),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_CLEFABLE_1] = {
.species = SPECIES_CLEFABLE,
.moves = {MOVE_METRONOME, MOVE_DOUBLE_TEAM, MOVE_REFLECT, MOVE_FOLLOW_ME},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_BRAVE
},
[FRONTIER_MON_HARIYAMA_1] = {
.species = SPECIES_HARIYAMA,
.moves = {MOVE_CROSS_CHOP, MOVE_ROCK_SLIDE, MOVE_COUNTER, MOVE_FAKE_OUT},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_RAICHU_1] = {
.species = SPECIES_RAICHU,
.moves = {MOVE_THUNDERBOLT, MOVE_QUICK_ATTACK, MOVE_LIGHT_SCREEN, MOVE_DOUBLE_TEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 0, 170, 170, 170, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_DEWGONG_1] = {
.species = SPECIES_DEWGONG,
.moves = {MOVE_ICE_BEAM, MOVE_ICY_WIND, MOVE_HEADBUTT, MOVE_FAKE_OUT},
- .itemTableId = BATTLE_FRONTIER_ITEM_NEVER_MELT_ICE,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_NEVER_MELT_ICE,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_QUIET
},
[FRONTIER_MON_MANECTRIC_1] = {
.species = SPECIES_MANECTRIC,
.moves = {MOVE_THUNDERBOLT, MOVE_FLASH, MOVE_QUICK_ATTACK, MOVE_ROAR},
- .itemTableId = BATTLE_FRONTIER_ITEM_MAGNET,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_MAGNET,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_VILEPLUME_1] = {
.species = SPECIES_VILEPLUME,
.moves = {MOVE_SLUDGE_BOMB, MOVE_PETAL_DANCE, MOVE_MOONLIGHT, MOVE_AROMATHERAPY},
- .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PERSIM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_IMPISH
},
[FRONTIER_MON_VICTREEBEL_1] = {
.species = SPECIES_VICTREEBEL,
.moves = {MOVE_GIGA_DRAIN, MOVE_SLEEP_POWDER, MOVE_SWEET_SCENT, MOVE_SYNTHESIS},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_QUIET
},
[FRONTIER_MON_ELECTRODE_1] = {
.species = SPECIES_ELECTRODE,
.moves = {MOVE_THUNDERBOLT, MOVE_SWIFT, MOVE_LIGHT_SCREEN, MOVE_PROTECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_QUIET
},
[FRONTIER_MON_EXPLOUD_1] = {
.species = SPECIES_EXPLOUD,
.moves = {MOVE_HYPER_VOICE, MOVE_SHADOW_BALL, MOVE_SLEEP_TALK, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_IMPISH
},
[FRONTIER_MON_SHIFTRY_1] = {
.species = SPECIES_SHIFTRY,
.moves = {MOVE_GIGA_DRAIN, MOVE_FEINT_ATTACK, MOVE_QUICK_ATTACK, MOVE_FAKE_OUT},
- .itemTableId = BATTLE_FRONTIER_ITEM_MIRACLE_SEED,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_MIRACLE_SEED,
+ .ev = TRAINER_PARTY_EVS(0, 0, 170, 0, 170, 170),
.nature = NATURE_QUIET
},
[FRONTIER_MON_GLALIE_1] = {
.species = SPECIES_GLALIE,
.moves = {MOVE_ICE_BEAM, MOVE_CRUNCH, MOVE_HAIL, MOVE_PROTECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PETAYA_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_LUDICOLO_1] = {
.species = SPECIES_LUDICOLO,
.moves = {MOVE_SURF, MOVE_RAIN_DANCE, MOVE_THUNDER_PUNCH, MOVE_FIRE_PUNCH},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 170, 0),
.nature = NATURE_QUIET
},
[FRONTIER_MON_HYPNO_1] = {
.species = SPECIES_HYPNO,
.moves = {MOVE_THUNDER_PUNCH, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_HYPNOSIS},
- .itemTableId = BATTLE_FRONTIER_ITEM_TWISTED_SPOON,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_TWISTED_SPOON,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 252, 0),
.nature = NATURE_QUIET
},
[FRONTIER_MON_GOLEM_1] = {
.species = SPECIES_GOLEM,
.moves = {MOVE_EARTHQUAKE, MOVE_BODY_SLAM, MOVE_COUNTER, MOVE_ROCK_TOMB},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 0, 252),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_RHYDON_1] = {
.species = SPECIES_RHYDON,
.moves = {MOVE_EARTHQUAKE, MOVE_ROCK_TOMB, MOVE_SCARY_FACE, MOVE_BRICK_BREAK},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 0, 0, 170),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_ALAKAZAM_1] = {
.species = SPECIES_ALAKAZAM,
.moves = {MOVE_THUNDER_PUNCH, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_THUNDER_WAVE},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_WEEZING_1] = {
.species = SPECIES_WEEZING,
.moves = {MOVE_SLUDGE_BOMB, MOVE_WILL_O_WISP, MOVE_SHADOW_BALL, MOVE_SMOKESCREEN},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_KANGASKHAN_1] = {
.species = SPECIES_KANGASKHAN,
.moves = {MOVE_DIZZY_PUNCH, MOVE_BRICK_BREAK, MOVE_COUNTER, MOVE_FAKE_OUT},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_ELECTABUZZ_1] = {
.species = SPECIES_ELECTABUZZ,
.moves = {MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_BRICK_BREAK, MOVE_LIGHT_SCREEN},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHERI_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 170, 0),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_TAUROS_1] = {
.species = SPECIES_TAUROS,
.moves = {MOVE_EARTHQUAKE, MOVE_THRASH, MOVE_SWAGGER, MOVE_FACADE},
- .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_PERSIM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_SLOWBRO_1] = {
.species = SPECIES_SLOWBRO,
.moves = {MOVE_SURF, MOVE_RAIN_DANCE, MOVE_HEADBUTT, MOVE_ICE_PUNCH},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_QUIET
},
[FRONTIER_MON_SLOWKING_1] = {
.species = SPECIES_SLOWKING,
.moves = {MOVE_PSYCHIC, MOVE_BRICK_BREAK, MOVE_AMNESIA, MOVE_ATTRACT},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(252, 0, 252, 0, 0, 0),
.nature = NATURE_QUIET
},
[FRONTIER_MON_MILTANK_1] = {
.species = SPECIES_MILTANK,
.moves = {MOVE_FACADE, MOVE_SHADOW_BALL, MOVE_COUNTER, MOVE_MILK_DRINK},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_CAREFUL
},
[FRONTIER_MON_ALTARIA_1] = {
.species = SPECIES_ALTARIA,
.moves = {MOVE_DRAGON_CLAW, MOVE_AERIAL_ACE, MOVE_REFRESH, MOVE_BODY_SLAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHERI_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_NIDOQUEEN_1] = {
.species = SPECIES_NIDOQUEEN,
.moves = {MOVE_SLUDGE_BOMB, MOVE_DOUBLE_KICK, MOVE_BODY_SLAM, MOVE_COUNTER},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_NIDOKING_1] = {
.species = SPECIES_NIDOKING,
.moves = {MOVE_HORN_DRILL, MOVE_DOUBLE_KICK, MOVE_BODY_SLAM, MOVE_COUNTER},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_MAGMAR_1] = {
.species = SPECIES_MAGMAR,
.moves = {MOVE_FLAMETHROWER, MOVE_SMOKESCREEN, MOVE_BRICK_BREAK, MOVE_BARRIER},
- .itemTableId = BATTLE_FRONTIER_ITEM_RAWST_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_RAWST_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 170, 0),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_CRADILY_1] = {
.species = SPECIES_CRADILY,
.moves = {MOVE_GIGA_DRAIN, MOVE_ROCK_SLIDE, MOVE_BARRIER, MOVE_CONFUSE_RAY},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_ARMALDO_1] = {
.species = SPECIES_ARMALDO,
.moves = {MOVE_SLASH, MOVE_AERIAL_ACE, MOVE_ANCIENT_POWER, MOVE_PROTECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_GOLDUCK_1] = {
.species = SPECIES_GOLDUCK,
.moves = {MOVE_HYDRO_PUMP, MOVE_DIG, MOVE_BRICK_BREAK, MOVE_LIGHT_SCREEN},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_QUIET
},
[FRONTIER_MON_RAPIDASH_1] = {
.species = SPECIES_RAPIDASH,
.moves = {MOVE_FLAMETHROWER, MOVE_DOUBLE_KICK, MOVE_QUICK_ATTACK, MOVE_PROTECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHARCOAL,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_CHARCOAL,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_QUIET
},
[FRONTIER_MON_MUK_1] = {
.species = SPECIES_MUK,
.moves = {MOVE_SLUDGE_BOMB, MOVE_BODY_SLAM, MOVE_SCREECH, MOVE_MINIMIZE},
- .itemTableId = BATTLE_FRONTIER_ITEM_POISON_BARB,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_POISON_BARB,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_GENGAR_1] = {
.species = SPECIES_GENGAR,
.moves = {MOVE_DREAM_EATER, MOVE_HYPNOSIS, MOVE_CONFUSE_RAY, MOVE_ATTRACT},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(170, 0, 0, 170, 170, 0),
.nature = NATURE_TIMID
},
[FRONTIER_MON_AMPHAROS_1] = {
.species = SPECIES_AMPHAROS,
.moves = {MOVE_THUNDER, MOVE_RAIN_DANCE, MOVE_THUNDER_WAVE, MOVE_ATTRACT},
- .itemTableId = BATTLE_FRONTIER_ITEM_MAGNET,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_MAGNET,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_SCIZOR_1] = {
.species = SPECIES_SCIZOR,
.moves = {MOVE_METAL_CLAW, MOVE_AERIAL_ACE, MOVE_COUNTER, MOVE_QUICK_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 0, 252),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_HERACROSS_1] = {
.species = SPECIES_HERACROSS,
.moves = {MOVE_MEGAHORN, MOVE_BRICK_BREAK, MOVE_ROCK_TOMB, MOVE_COUNTER},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(0, 252, 252, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_URSARING_1] = {
.species = SPECIES_URSARING,
.moves = {MOVE_MEGA_KICK, MOVE_CRUNCH, MOVE_AERIAL_ACE, MOVE_COUNTER},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 0, 170, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_HOUNDOOM_1] = {
.species = SPECIES_HOUNDOOM,
.moves = {MOVE_FLAMETHROWER, MOVE_SHADOW_BALL, MOVE_COUNTER, MOVE_WILL_O_WISP},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(0, 170, 0, 170, 170, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_DONPHAN_1] = {
.species = SPECIES_DONPHAN,
.moves = {MOVE_EARTHQUAKE, MOVE_ANCIENT_POWER, MOVE_SWAGGER, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_CLAYDOL_1] = {
.species = SPECIES_CLAYDOL,
.moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_SWAGGER, MOVE_PSYCH_UP},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_WAILORD_1] = {
.species = SPECIES_WAILORD,
.moves = {MOVE_SURF, MOVE_ICY_WIND, MOVE_BODY_SLAM, MOVE_ROAR},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_SASSY
},
[FRONTIER_MON_NINETALES_1] = {
.species = SPECIES_NINETALES,
.moves = {MOVE_FLAMETHROWER, MOVE_ROAR, MOVE_CONFUSE_RAY, MOVE_WILL_O_WISP},
- .itemTableId = BATTLE_FRONTIER_ITEM_RAWST_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_RAWST_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_MACHAMP_1] = {
.species = SPECIES_MACHAMP,
.moves = {MOVE_CROSS_CHOP, MOVE_ROCK_SLIDE, MOVE_COUNTER, MOVE_SCARY_FACE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_SHUCKLE_1] = {
.species = SPECIES_SHUCKLE,
.moves = {MOVE_ROLLOUT, MOVE_DEFENSE_CURL, MOVE_SLEEP_TALK, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_BRAVE
},
[FRONTIER_MON_STEELIX_1] = {
.species = SPECIES_STEELIX,
.moves = {MOVE_EARTHQUAKE, MOVE_DRAGON_BREATH, MOVE_ROCK_TOMB, MOVE_ROAR},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 0, 252),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_TENTACRUEL_1] = {
.species = SPECIES_TENTACRUEL,
.moves = {MOVE_SLUDGE_BOMB, MOVE_ICY_WIND, MOVE_BARRIER, MOVE_CONFUSE_RAY},
- .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_PERSIM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 252, 0, 0, 0),
.nature = NATURE_IMPISH
},
[FRONTIER_MON_AERODACTYL_1] = {
.species = SPECIES_AERODACTYL,
.moves = {MOVE_ANCIENT_POWER, MOVE_DRAGON_BREATH, MOVE_AERIAL_ACE, MOVE_ROAR},
- .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_KINGS_ROCK,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 170, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_PORYGON2_1] = {
.species = SPECIES_PORYGON2,
.moves = {MOVE_TRI_ATTACK, MOVE_AERIAL_ACE, MOVE_SHADOW_BALL, MOVE_RECOVER},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_GARDEVOIR_1] = {
.species = SPECIES_GARDEVOIR,
.moves = {MOVE_DREAM_EATER, MOVE_HYPNOSIS, MOVE_MAGICAL_LEAF, MOVE_REFLECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 170, 0, 0),
.nature = NATURE_TIMID
},
[FRONTIER_MON_EXEGGUTOR_1] = {
.species = SPECIES_EXEGGUTOR,
.moves = {MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_SYNTHESIS, MOVE_LIGHT_SCREEN},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_QUIET
},
[FRONTIER_MON_STARMIE_1] = {
.species = SPECIES_STARMIE,
.moves = {MOVE_PSYCHIC, MOVE_CONFUSE_RAY, MOVE_THUNDER_WAVE, MOVE_RECOVER},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_FLYGON_1] = {
.species = SPECIES_FLYGON,
.moves = {MOVE_EARTHQUAKE, MOVE_STEEL_WING, MOVE_FEINT_ATTACK, MOVE_FACADE},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_VENUSAUR_1] = {
.species = SPECIES_VENUSAUR,
.moves = {MOVE_GIGA_DRAIN, MOVE_SUNNY_DAY, MOVE_SYNTHESIS, MOVE_SLEEP_POWDER},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_QUIET
},
[FRONTIER_MON_VAPOREON_1] = {
.species = SPECIES_VAPOREON,
.moves = {MOVE_SURF, MOVE_ROAR, MOVE_BITE, MOVE_QUICK_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_MYSTIC_WATER,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_MYSTIC_WATER,
+ .ev = TRAINER_PARTY_EVS(0, 0, 170, 0, 170, 170),
.nature = NATURE_MODEST
},
[FRONTIER_MON_JOLTEON_1] = {
.species = SPECIES_JOLTEON,
.moves = {MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_ATTRACT, MOVE_PROTECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_CHERI_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_FLAREON_1] = {
.species = SPECIES_FLAREON,
.moves = {MOVE_FLAMETHROWER, MOVE_ROAR, MOVE_BITE, MOVE_SAND_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_MEGANIUM_1] = {
.species = SPECIES_MEGANIUM,
.moves = {MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_LIGHT_SCREEN, MOVE_SYNTHESIS},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_ESPEON_1] = {
.species = SPECIES_ESPEON,
.moves = {MOVE_PSYCHIC, MOVE_CHARM, MOVE_CALM_MIND, MOVE_BATON_PASS},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 170, 170, 0, 170),
.nature = NATURE_MODEST
},
[FRONTIER_MON_UMBREON_1] = {
.species = SPECIES_UMBREON,
.moves = {MOVE_CONFUSE_RAY, MOVE_FEINT_ATTACK, MOVE_DOUBLE_TEAM, MOVE_BATON_PASS},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_BOLD
},
[FRONTIER_MON_BLASTOISE_1] = {
.species = SPECIES_BLASTOISE,
.moves = {MOVE_HYDRO_PUMP, MOVE_RAIN_DANCE, MOVE_BITE, MOVE_SEISMIC_TOSS},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_FERALIGATR_1] = {
.species = SPECIES_FERALIGATR,
.moves = {MOVE_SURF, MOVE_RAIN_DANCE, MOVE_AERIAL_ACE, MOVE_ROAR},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 0, 0, 170, 170),
.nature = NATURE_QUIET
},
[FRONTIER_MON_AGGRON_1] = {
.species = SPECIES_AGGRON,
.moves = {MOVE_IRON_TAIL, MOVE_EARTHQUAKE, MOVE_AERIAL_ACE, MOVE_ROAR},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_BLAZIKEN_1] = {
.species = SPECIES_BLAZIKEN,
.moves = {MOVE_FLAMETHROWER, MOVE_SUNNY_DAY, MOVE_DOUBLE_KICK, MOVE_ROAR},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_WALREIN_1] = {
.species = SPECIES_WALREIN,
.moves = {MOVE_BLIZZARD, MOVE_HAIL, MOVE_YAWN, MOVE_PROTECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_QUIET
},
[FRONTIER_MON_SCEPTILE_1] = {
.species = SPECIES_SCEPTILE,
.moves = {MOVE_LEAF_BLADE, MOVE_LEECH_SEED, MOVE_AERIAL_ACE, MOVE_DETECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_CHARIZARD_1] = {
.species = SPECIES_CHARIZARD,
.moves = {MOVE_FIRE_BLAST, MOVE_SUNNY_DAY, MOVE_ROAR, MOVE_SCARY_FACE},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_TYPHLOSION_1] = {
.species = SPECIES_TYPHLOSION,
.moves = {MOVE_FIRE_BLAST, MOVE_SUNNY_DAY, MOVE_SMOKESCREEN, MOVE_ROAR},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_LAPRAS_1] = {
.species = SPECIES_LAPRAS,
.moves = {MOVE_SURF, MOVE_ATTRACT, MOVE_CONFUSE_RAY, MOVE_SING},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_BOLD
},
[FRONTIER_MON_CROBAT_1] = {
.species = SPECIES_CROBAT,
.moves = {MOVE_SLUDGE_BOMB, MOVE_BITE, MOVE_ASTONISH, MOVE_SCREECH},
- .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_KINGS_ROCK,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 0, 170, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_SWAMPERT_1] = {
.species = SPECIES_SWAMPERT,
.moves = {MOVE_EARTHQUAKE, MOVE_COUNTER, MOVE_REST, MOVE_CURSE},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_GYARADOS_1] = {
.species = SPECIES_GYARADOS,
.moves = {MOVE_RETURN, MOVE_BITE, MOVE_THUNDER_WAVE, MOVE_DRAGON_DANCE},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_CAREFUL
},
[FRONTIER_MON_SNORLAX_1] = {
.species = SPECIES_SNORLAX,
.moves = {MOVE_FACADE, MOVE_SHADOW_BALL, MOVE_ATTRACT, MOVE_DOUBLE_TEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(0, 252, 252, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_KINGDRA_1] = {
.species = SPECIES_KINGDRA,
.moves = {MOVE_HYDRO_PUMP, MOVE_DRAGON_BREATH, MOVE_ICY_WIND, MOVE_ATTRACT},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_BLISSEY_1] = {
.species = SPECIES_BLISSEY,
.moves = {MOVE_TOXIC, MOVE_DOUBLE_TEAM, MOVE_SING, MOVE_SOFT_BOILED},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_BOLD
},
[FRONTIER_MON_MILOTIC_1] = {
.species = SPECIES_MILOTIC,
.moves = {MOVE_HYDRO_PUMP, MOVE_ICY_WIND, MOVE_RECOVER, MOVE_MIRROR_COAT},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 170, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_ARCANINE_1] = {
.species = SPECIES_ARCANINE,
.moves = {MOVE_FLAMETHROWER, MOVE_EXTREME_SPEED, MOVE_CRUNCH, MOVE_BODY_SLAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_KINGS_ROCK,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_SALAMENCE_1] = {
.species = SPECIES_SALAMENCE,
.moves = {MOVE_DRAGON_CLAW, MOVE_AERIAL_ACE, MOVE_HEADBUTT, MOVE_ROCK_SLIDE},
- .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_KINGS_ROCK,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_METAGROSS_1] = {
.species = SPECIES_METAGROSS,
.moves = {MOVE_METEOR_MASH, MOVE_AERIAL_ACE, MOVE_FACADE, MOVE_LIGHT_SCREEN},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(0, 170, 0, 170, 0, 170),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_SLAKING_1] = {
.species = SPECIES_SLAKING,
.moves = {MOVE_YAWN, MOVE_BULK_UP, MOVE_SWAGGER, MOVE_AERIAL_ACE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_DUGTRIO_2] = {
.species = SPECIES_DUGTRIO,
.moves = {MOVE_EARTHQUAKE, MOVE_ANCIENT_POWER, MOVE_AERIAL_ACE, MOVE_TRI_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_KINGS_ROCK,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_MEDICHAM_2] = {
.species = SPECIES_MEDICHAM,
.moves = {MOVE_REVERSAL, MOVE_ENDURE, MOVE_PSYCHIC, MOVE_FAKE_OUT},
- .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SALAC_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_MAROWAK_2] = {
.species = SPECIES_MAROWAK,
.moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_SWORDS_DANCE, MOVE_ICY_WIND},
- .itemTableId = BATTLE_FRONTIER_ITEM_THICK_CLUB,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_THICK_CLUB,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_QUAGSIRE_2] = {
.species = SPECIES_QUAGSIRE,
.moves = {MOVE_CURSE, MOVE_ATTRACT, MOVE_YAWN, MOVE_ANCIENT_POWER},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_SASSY
},
[FRONTIER_MON_MISDREAVUS_2] = {
.species = SPECIES_MISDREAVUS,
.moves = {MOVE_PSYCHIC, MOVE_ATTRACT, MOVE_THUNDER_WAVE, MOVE_CONFUSE_RAY},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 252, 0),
.nature = NATURE_BOLD
},
[FRONTIER_MON_FEAROW_2] = {
.species = SPECIES_FEAROW,
.moves = {MOVE_DRILL_PECK, MOVE_TRI_ATTACK, MOVE_ATTRACT, MOVE_PURSUIT},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_GRANBULL_2] = {
.species = SPECIES_GRANBULL,
.moves = {MOVE_OVERHEAT, MOVE_THUNDERBOLT, MOVE_ICE_PUNCH, MOVE_FACADE},
- .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK,
+ .heldItem = ITEM_WHITE_HERB,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 0, 252, 252),
.nature = NATURE_QUIET
},
[FRONTIER_MON_JYNX_2] = {
.species = SPECIES_JYNX,
.moves = {MOVE_PERISH_SONG, MOVE_MEAN_LOOK, MOVE_LOVELY_KISS, MOVE_PROTECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(252, 0, 252, 0, 0, 0),
.nature = NATURE_IMPISH
},
[FRONTIER_MON_DUSCLOPS_2] = {
.species = SPECIES_DUSCLOPS,
.moves = {MOVE_TOXIC, MOVE_CONFUSE_RAY, MOVE_DOUBLE_TEAM, MOVE_PROTECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_IMPISH
},
[FRONTIER_MON_DODRIO_2] = {
.species = SPECIES_DODRIO,
.moves = {MOVE_DRILL_PECK, MOVE_DOUBLE_EDGE, MOVE_FEINT_ATTACK, MOVE_PROTECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_KINGS_ROCK,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_MR_MIME_2] = {
.species = SPECIES_MR_MIME,
.moves = {MOVE_BATON_PASS, MOVE_SWAGGER, MOVE_PSYCH_UP, MOVE_PSYCHIC},
- .itemTableId = BATTLE_FRONTIER_ITEM_LIECHI_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LIECHI_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_LANTURN_2] = {
.species = SPECIES_LANTURN,
.moves = {MOVE_FLAIL, MOVE_ENDURE, MOVE_THUNDERBOLT, MOVE_SURF},
- .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SALAC_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_BRELOOM_2] = {
.species = SPECIES_BRELOOM,
.moves = {MOVE_GIGA_DRAIN, MOVE_LEECH_SEED, MOVE_FOCUS_PUNCH, MOVE_SPORE},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_FORRETRESS_2] = {
.species = SPECIES_FORRETRESS,
.moves = {MOVE_EARTHQUAKE, MOVE_DOUBLE_EDGE, MOVE_COUNTER, MOVE_PROTECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 0, 252),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_SKARMORY_2] = {
.species = SPECIES_SKARMORY,
.moves = {MOVE_SPIKES, MOVE_ROAR, MOVE_DRILL_PECK, MOVE_TOXIC},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 0, 0, 170),
.nature = NATURE_CAREFUL
},
[FRONTIER_MON_WHISCASH_2] = {
.species = SPECIES_WHISCASH,
.moves = {MOVE_SURF, MOVE_EARTHQUAKE, MOVE_SPARK, MOVE_FUTURE_SIGHT},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_XATU_2] = {
.species = SPECIES_XATU,
.moves = {MOVE_FLY, MOVE_TOXIC, MOVE_CONFUSE_RAY, MOVE_ATTRACT},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_IMPISH
},
[FRONTIER_MON_CLEFABLE_2] = {
.species = SPECIES_CLEFABLE,
.moves = {MOVE_METEOR_MASH, MOVE_COSMIC_POWER, MOVE_DOUBLE_TEAM, MOVE_FOLLOW_ME},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(0, 252, 252, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_HARIYAMA_2] = {
.species = SPECIES_HARIYAMA,
.moves = {MOVE_CROSS_CHOP, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_THUNDER_PUNCH},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_QUIET
},
[FRONTIER_MON_RAICHU_2] = {
.species = SPECIES_RAICHU,
.moves = {MOVE_THUNDERBOLT, MOVE_REVERSAL, MOVE_ENDURE, MOVE_AGILITY},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_DEWGONG_2] = {
.species = SPECIES_DEWGONG,
.moves = {MOVE_BLIZZARD, MOVE_DOUBLE_EDGE, MOVE_ENCORE, MOVE_DISABLE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_MANECTRIC_2] = {
.species = SPECIES_MANECTRIC,
.moves = {MOVE_THUNDER, MOVE_RAIN_DANCE, MOVE_CRUNCH, MOVE_ROAR},
- .itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_PETAYA_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_VILEPLUME_2] = {
.species = SPECIES_VILEPLUME,
.moves = {MOVE_INGRAIN, MOVE_DOUBLE_TEAM, MOVE_TOXIC, MOVE_GIGA_DRAIN},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_BOLD
},
[FRONTIER_MON_VICTREEBEL_2] = {
.species = SPECIES_VICTREEBEL,
.moves = {MOVE_GIGA_DRAIN, MOVE_SLUDGE_BOMB, MOVE_SLEEP_POWDER, MOVE_ATTRACT},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_SERIOUS
},
[FRONTIER_MON_ELECTRODE_2] = {
.species = SPECIES_ELECTRODE,
.moves = {MOVE_THUNDER, MOVE_RAIN_DANCE, MOVE_DOUBLE_TEAM, MOVE_SWAGGER},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_MODEST
},
[FRONTIER_MON_EXPLOUD_2] = {
.species = SPECIES_EXPLOUD,
.moves = {MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_EARTHQUAKE, MOVE_COUNTER},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_SHIFTRY_2] = {
.species = SPECIES_SHIFTRY,
.moves = {MOVE_LEECH_SEED, MOVE_DIG, MOVE_DOUBLE_TEAM, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_IMPISH
},
[FRONTIER_MON_GLALIE_2] = {
.species = SPECIES_GLALIE,
.moves = {MOVE_EXPLOSION, MOVE_ENDURE, MOVE_BODY_SLAM, MOVE_ICY_WIND},
- .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SALAC_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_LUDICOLO_2] = {
.species = SPECIES_LUDICOLO,
.moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_THUNDER_PUNCH, MOVE_FIRE_PUNCH},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_HYPNO_2] = {
.species = SPECIES_HYPNO,
.moves = {MOVE_HYPNOSIS, MOVE_NIGHTMARE, MOVE_DREAM_EATER, MOVE_PSYCHIC},
- .itemTableId = BATTLE_FRONTIER_ITEM_TWISTED_SPOON,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_TWISTED_SPOON,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_MODEST
},
[FRONTIER_MON_GOLEM_2] = {
.species = SPECIES_GOLEM,
.moves = {MOVE_FOCUS_PUNCH, MOVE_SUBSTITUTE, MOVE_DOUBLE_TEAM, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_RHYDON_2] = {
.species = SPECIES_RHYDON,
.moves = {MOVE_EARTHQUAKE, MOVE_HORN_DRILL, MOVE_ROCK_SLIDE, MOVE_BRICK_BREAK},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 0, 252),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_ALAKAZAM_2] = {
.species = SPECIES_ALAKAZAM,
.moves = {MOVE_PSYCHIC, MOVE_CALM_MIND, MOVE_THUNDER_WAVE, MOVE_RECOVER},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_WEEZING_2] = {
.species = SPECIES_WEEZING,
.moves = {MOVE_MEMENTO, MOVE_SLUDGE_BOMB, MOVE_FACADE, MOVE_DESTINY_BOND},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_KANGASKHAN_2] = {
.species = SPECIES_KANGASKHAN,
.moves = {MOVE_CRUSH_CLAW, MOVE_SHADOW_BALL, MOVE_ATTRACT, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_ELECTABUZZ_2] = {
.species = SPECIES_ELECTABUZZ,
.moves = {MOVE_THUNDER, MOVE_RAIN_DANCE, MOVE_ATTRACT, MOVE_FOCUS_PUNCH},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(0, 170, 0, 170, 170, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_TAUROS_2] = {
.species = SPECIES_TAUROS,
.moves = {MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, MOVE_DOUBLE_TEAM, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_SLOWBRO_2] = {
.species = SPECIES_SLOWBRO,
.moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_CALM_MIND, MOVE_YAWN},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 0, 252),
.nature = NATURE_MODEST
},
[FRONTIER_MON_SLOWKING_2] = {
.species = SPECIES_SLOWKING,
.moves = {MOVE_YAWN, MOVE_THUNDER_WAVE, MOVE_SURF, MOVE_PSYCHIC},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_MILTANK_2] = {
.species = SPECIES_MILTANK,
.moves = {MOVE_FOCUS_PUNCH, MOVE_SHADOW_BALL, MOVE_ATTRACT, MOVE_THUNDER_WAVE},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 0, 0, 170),
.nature = NATURE_CAREFUL
},
[FRONTIER_MON_ALTARIA_2] = {
.species = SPECIES_ALTARIA,
.moves = {MOVE_PERISH_SONG, MOVE_DRAGON_BREATH, MOVE_PURSUIT, MOVE_ATTRACT},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_BOLD
},
[FRONTIER_MON_NIDOQUEEN_2] = {
.species = SPECIES_NIDOQUEEN,
.moves = {MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, MOVE_AERIAL_ACE, MOVE_ROCK_SLIDE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_NIDOKING_2] = {
.species = SPECIES_NIDOKING,
.moves = {MOVE_MEGA_KICK, MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_MAGMAR_2] = {
.species = SPECIES_MAGMAR,
.moves = {MOVE_FIRE_BLAST, MOVE_SMOKESCREEN, MOVE_THUNDER_PUNCH, MOVE_CONFUSE_RAY},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_CRADILY_2] = {
.species = SPECIES_CRADILY,
.moves = {MOVE_EARTHQUAKE, MOVE_ANCIENT_POWER, MOVE_SWAGGER, MOVE_PSYCH_UP},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_ARMALDO_2] = {
.species = SPECIES_ARMALDO,
.moves = {MOVE_IRON_TAIL, MOVE_ANCIENT_POWER, MOVE_BRICK_BREAK, MOVE_KNOCK_OFF},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_GOLDUCK_2] = {
.species = SPECIES_GOLDUCK,
.moves = {MOVE_CROSS_CHOP, MOVE_SURF, MOVE_SWAGGER, MOVE_PSYCH_UP},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 170, 0, 170, 170, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_RAPIDASH_2] = {
.species = SPECIES_RAPIDASH,
.moves = {MOVE_FIRE_BLAST, MOVE_BOUNCE, MOVE_DOUBLE_TEAM, MOVE_ATTRACT},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(0, 170, 0, 170, 170, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_MUK_2] = {
.species = SPECIES_MUK,
.moves = {MOVE_CURSE, MOVE_REST, MOVE_SLUDGE_BOMB, MOVE_DYNAMIC_PUNCH},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 252, 0, 0, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_GENGAR_2] = {
.species = SPECIES_GENGAR,
.moves = {MOVE_SLUDGE_BOMB, MOVE_SHADOW_BALL, MOVE_CONFUSE_RAY, MOVE_WILL_O_WISP},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_AMPHAROS_2] = {
.species = SPECIES_AMPHAROS,
.moves = {MOVE_THUNDER_PUNCH, MOVE_FIRE_PUNCH, MOVE_FOCUS_PUNCH, MOVE_THUNDER_WAVE},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_SCIZOR_2] = {
.species = SPECIES_SCIZOR,
.moves = {MOVE_SILVER_WIND, MOVE_STEEL_WING, MOVE_SWORDS_DANCE, MOVE_LIGHT_SCREEN},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 0, 252),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_HERACROSS_2] = {
.species = SPECIES_HERACROSS,
.moves = {MOVE_MEGAHORN, MOVE_EARTHQUAKE, MOVE_ATTRACT, MOVE_BULK_UP},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 252, 0, 0),
.nature = NATURE_JOLLY
},
[FRONTIER_MON_URSARING_2] = {
.species = SPECIES_URSARING,
.moves = {MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, MOVE_BRICK_BREAK, MOVE_COUNTER},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_HOUNDOOM_2] = {
.species = SPECIES_HOUNDOOM,
.moves = {MOVE_FIRE_BLAST, MOVE_CRUNCH, MOVE_ROAR, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_DONPHAN_2] = {
.species = SPECIES_DONPHAN,
.moves = {MOVE_FLAIL, MOVE_ENDURE, MOVE_EARTHQUAKE, MOVE_ROCK_TOMB},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_JOLLY
},
[FRONTIER_MON_CLAYDOL_2] = {
.species = SPECIES_CLAYDOL,
.moves = {MOVE_PSYCHIC, MOVE_EARTHQUAKE, MOVE_DOUBLE_TEAM, MOVE_COSMIC_POWER},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_CALM
},
[FRONTIER_MON_WAILORD_2] = {
.species = SPECIES_WAILORD,
.moves = {MOVE_DOUBLE_EDGE, MOVE_REST, MOVE_CURSE, MOVE_AMNESIA},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_NINETALES_2] = {
.species = SPECIES_NINETALES,
.moves = {MOVE_HEAT_WAVE, MOVE_BODY_SLAM, MOVE_GRUDGE, MOVE_SUNNY_DAY},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_MACHAMP_2] = {
.species = SPECIES_MACHAMP,
.moves = {MOVE_CROSS_CHOP, MOVE_EARTHQUAKE, MOVE_BULK_UP, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_SHUCKLE_2] = {
.species = SPECIES_SHUCKLE,
.moves = {MOVE_SANDSTORM, MOVE_DIG, MOVE_FLASH, MOVE_DOUBLE_TEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_CAREFUL
},
[FRONTIER_MON_STEELIX_2] = {
.species = SPECIES_STEELIX,
.moves = {MOVE_EARTHQUAKE, MOVE_DRAGON_BREATH, MOVE_SANDSTORM, MOVE_BLOCK},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 0, 252),
.nature = NATURE_HARDY
},
[FRONTIER_MON_TENTACRUEL_2] = {
.species = SPECIES_TENTACRUEL,
.moves = {MOVE_TOXIC, MOVE_GIGA_DRAIN, MOVE_CONFUSE_RAY, MOVE_SURF},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 170, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_AERODACTYL_2] = {
.species = SPECIES_AERODACTYL,
.moves = {MOVE_HYPER_BEAM, MOVE_EARTHQUAKE, MOVE_AERIAL_ACE, MOVE_ANCIENT_POWER},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHOICE_BAND,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHOICE_BAND,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 170, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_PORYGON2_2] = {
.species = SPECIES_PORYGON2,
.moves = {MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_THUNDER_WAVE, MOVE_RECOVER},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_GARDEVOIR_2] = {
.species = SPECIES_GARDEVOIR,
.moves = {MOVE_PSYCHIC, MOVE_CALM_MIND, MOVE_DOUBLE_TEAM, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 252, 0, 0, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_EXEGGUTOR_2] = {
.species = SPECIES_EXEGGUTOR,
.moves = {MOVE_RETURN, MOVE_CURSE, MOVE_SLEEP_POWDER, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 0, 252),
.nature = NATURE_HARDY
},
[FRONTIER_MON_STARMIE_2] = {
.species = SPECIES_STARMIE,
.moves = {MOVE_HYDRO_PUMP, MOVE_THUNDER, MOVE_RAIN_DANCE, MOVE_RECOVER},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_MODEST
},
[FRONTIER_MON_FLYGON_2] = {
.species = SPECIES_FLYGON,
.moves = {MOVE_SOLAR_BEAM, MOVE_FIRE_BLAST, MOVE_CRUNCH, MOVE_SUNNY_DAY},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_VENUSAUR_2] = {
.species = SPECIES_VENUSAUR,
.moves = {MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, MOVE_DOUBLE_TEAM, MOVE_LIGHT_SCREEN},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_BOLD
},
[FRONTIER_MON_VAPOREON_2] = {
.species = SPECIES_VAPOREON,
.moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_BODY_SLAM, MOVE_SHADOW_BALL},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_JOLTEON_2] = {
.species = SPECIES_JOLTEON,
.moves = {MOVE_THUNDERBOLT, MOVE_DIG, MOVE_DOUBLE_KICK, MOVE_ROAR},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_FLAREON_2] = {
.species = SPECIES_FLAREON,
.moves = {MOVE_CURSE, MOVE_ATTRACT, MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_RELAXED
},
[FRONTIER_MON_MEGANIUM_2] = {
.species = SPECIES_MEGANIUM,
.moves = {MOVE_LEECH_SEED, MOVE_SUBSTITUTE, MOVE_DOUBLE_TEAM, MOVE_GRASS_WHISTLE},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_CALM
},
[FRONTIER_MON_ESPEON_2] = {
.species = SPECIES_ESPEON,
.moves = {MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_CALM_MIND, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_UMBREON_2] = {
.species = SPECIES_UMBREON,
.moves = {MOVE_CURSE, MOVE_SCREECH, MOVE_DOUBLE_TEAM, MOVE_DOUBLE_EDGE},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 0, 0, 170),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_BLASTOISE_2] = {
.species = SPECIES_BLASTOISE,
.moves = {MOVE_HYDRO_PUMP, MOVE_MEGA_KICK, MOVE_BRICK_BREAK, MOVE_MIRROR_COAT},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 0, 170, 0),
.nature = NATURE_BRAVE
},
[FRONTIER_MON_FERALIGATR_2] = {
.species = SPECIES_FERALIGATR,
.moves = {MOVE_SURF, MOVE_DRAGON_CLAW, MOVE_BRICK_BREAK, MOVE_SCARY_FACE},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(170, 0, 0, 0, 170, 170),
.nature = NATURE_SASSY
},
[FRONTIER_MON_AGGRON_2] = {
.species = SPECIES_AGGRON,
.moves = {MOVE_FOCUS_PUNCH, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_THUNDER_WAVE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_BLAZIKEN_2] = {
.species = SPECIES_BLAZIKEN,
.moves = {MOVE_BLAZE_KICK, MOVE_MEGA_KICK, MOVE_THUNDER_PUNCH, MOVE_BRICK_BREAK},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_WALREIN_2] = {
.species = SPECIES_WALREIN,
.moves = {MOVE_EARTHQUAKE, MOVE_ICE_BEAM, MOVE_CURSE, MOVE_DOUBLE_TEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_SCEPTILE_2] = {
.species = SPECIES_SCEPTILE,
.moves = {MOVE_LEAF_BLADE, MOVE_THUNDER_PUNCH, MOVE_ATTRACT, MOVE_DOUBLE_TEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_CHARIZARD_2] = {
.species = SPECIES_CHARIZARD,
.moves = {MOVE_EARTHQUAKE, MOVE_AERIAL_ACE, MOVE_DRAGON_DANCE, MOVE_SMOKESCREEN},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_TYPHLOSION_2] = {
.species = SPECIES_TYPHLOSION,
.moves = {MOVE_FLAMETHROWER, MOVE_THUNDER_PUNCH, MOVE_AERIAL_ACE, MOVE_ROCK_SLIDE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(0, 170, 0, 170, 170, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_LAPRAS_2] = {
.species = SPECIES_LAPRAS,
.moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_BODY_SLAM, MOVE_ROAR},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_TIMID
},
[FRONTIER_MON_CROBAT_2] = {
.species = SPECIES_CROBAT,
.moves = {MOVE_TOXIC, MOVE_GIGA_DRAIN, MOVE_CONFUSE_RAY, MOVE_DOUBLE_TEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_CALM
},
[FRONTIER_MON_SWAMPERT_2] = {
.species = SPECIES_SWAMPERT,
.moves = {MOVE_SURF, MOVE_EARTHQUAKE, MOVE_COUNTER, MOVE_MIRROR_COAT},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_GYARADOS_2] = {
.species = SPECIES_GYARADOS,
.moves = {MOVE_HYDRO_PUMP, MOVE_THUNDERBOLT, MOVE_FIRE_BLAST, MOVE_BLIZZARD},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_SNORLAX_2] = {
.species = SPECIES_SNORLAX,
.moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_CURSE, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_KINGDRA_2] = {
.species = SPECIES_KINGDRA,
.moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_DRAGON_BREATH, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_MODEST
},
[FRONTIER_MON_BLISSEY_2] = {
.species = SPECIES_BLISSEY,
.moves = {MOVE_SEISMIC_TOSS, MOVE_SING, MOVE_ATTRACT, MOVE_SUBSTITUTE},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_BOLD
},
[FRONTIER_MON_MILOTIC_2] = {
.species = SPECIES_MILOTIC,
.moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_SAFEGUARD, MOVE_MIRROR_COAT},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_ARCANINE_2] = {
.species = SPECIES_ARCANINE,
.moves = {MOVE_FIRE_BLAST, MOVE_SUNNY_DAY, MOVE_CRUNCH, MOVE_ROAR},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_SALAMENCE_2] = {
.species = SPECIES_SALAMENCE,
.moves = {MOVE_DOUBLE_EDGE, MOVE_CRUNCH, MOVE_SWAGGER, MOVE_PROTECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(0, 170, 0, 170, 170, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_METAGROSS_2] = {
.species = SPECIES_METAGROSS,
.moves = {MOVE_EARTHQUAKE, MOVE_METEOR_MASH, MOVE_PSYCH_UP, MOVE_SWAGGER},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 0, 170, 0, 170),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_SLAKING_2] = {
.species = SPECIES_SLAKING,
.moves = {MOVE_MEGA_KICK, MOVE_SHADOW_BALL, MOVE_YAWN, MOVE_AMNESIA},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_DUGTRIO_3] = {
.species = SPECIES_DUGTRIO,
.moves = {MOVE_EARTHQUAKE, MOVE_DOUBLE_EDGE, MOVE_SLUDGE_BOMB, MOVE_FISSURE},
- .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_KINGS_ROCK,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_MEDICHAM_3] = {
.species = SPECIES_MEDICHAM,
.moves = {MOVE_DYNAMIC_PUNCH, MOVE_THUNDER_PUNCH, MOVE_ICE_PUNCH, MOVE_FIRE_PUNCH},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_MISDREAVUS_3] = {
.species = SPECIES_MISDREAVUS,
.moves = {MOVE_PERISH_SONG, MOVE_MEAN_LOOK, MOVE_THUNDER_WAVE, MOVE_CONFUSE_RAY},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(252, 0, 252, 0, 0, 0),
.nature = NATURE_BOLD
},
[FRONTIER_MON_FEAROW_3] = {
.species = SPECIES_FEAROW,
.moves = {MOVE_DRILL_PECK, MOVE_RETURN, MOVE_STEEL_WING, MOVE_FEINT_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_GRANBULL_3] = {
.species = SPECIES_GRANBULL,
.moves = {MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, MOVE_SLUDGE_BOMB, MOVE_ROCK_SLIDE},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_JYNX_3] = {
.species = SPECIES_JYNX,
.moves = {MOVE_DREAM_EATER, MOVE_LOVELY_KISS, MOVE_ATTRACT, MOVE_SUBSTITUTE},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(252, 0, 252, 0, 0, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_DUSCLOPS_3] = {
.species = SPECIES_DUSCLOPS,
.moves = {MOVE_PSYCH_UP, MOVE_SWAGGER, MOVE_SHADOW_BALL, MOVE_EARTHQUAKE},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_DODRIO_3] = {
.species = SPECIES_DODRIO,
.moves = {MOVE_DOUBLE_EDGE, MOVE_DRILL_PECK, MOVE_STEEL_WING, MOVE_FEINT_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_MR_MIME_3] = {
.species = SPECIES_MR_MIME,
.moves = {MOVE_TRICK, MOVE_TORMENT, MOVE_PSYCHIC, MOVE_THUNDERBOLT},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHOICE_BAND,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHOICE_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_LANTURN_3] = {
.species = SPECIES_LANTURN,
.moves = {MOVE_HYDRO_PUMP, MOVE_THUNDER, MOVE_CONFUSE_RAY, MOVE_RAIN_DANCE},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_BRELOOM_3] = {
.species = SPECIES_BRELOOM,
.moves = {MOVE_IRON_TAIL, MOVE_FOCUS_PUNCH, MOVE_ATTRACT, MOVE_SPORE},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_FORRETRESS_3] = {
.species = SPECIES_FORRETRESS,
.moves = {MOVE_EXPLOSION, MOVE_EARTHQUAKE, MOVE_GIGA_DRAIN, MOVE_ZAP_CANNON},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(0, 170, 0, 0, 170, 170),
.nature = NATURE_QUIET
},
[FRONTIER_MON_WHISCASH_3] = {
.species = SPECIES_WHISCASH,
.moves = {MOVE_SLEEP_TALK, MOVE_REST, MOVE_SURF, MOVE_FISSURE},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_HARDY
},
[FRONTIER_MON_XATU_3] = {
.species = SPECIES_XATU,
.moves = {MOVE_DRILL_PECK, MOVE_PSYCHIC, MOVE_GIGA_DRAIN, MOVE_STEEL_WING},
- .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_KINGS_ROCK,
+ .ev = TRAINER_PARTY_EVS(0, 170, 0, 170, 170, 0),
.nature = NATURE_JOLLY
},
[FRONTIER_MON_SKARMORY_3] = {
.species = SPECIES_SKARMORY,
.moves = {MOVE_TOXIC, MOVE_CURSE, MOVE_REST, MOVE_FLY},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_CAREFUL
},
[FRONTIER_MON_MAROWAK_3] = {
.species = SPECIES_MAROWAK,
.moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_SWORDS_DANCE, MOVE_BRICK_BREAK},
- .itemTableId = BATTLE_FRONTIER_ITEM_THICK_CLUB,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_THICK_CLUB,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_QUAGSIRE_3] = {
.species = SPECIES_QUAGSIRE,
.moves = {MOVE_EARTHQUAKE, MOVE_SLUDGE_BOMB, MOVE_DOUBLE_EDGE, MOVE_CURSE},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 0, 252),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_CLEFABLE_3] = {
.species = SPECIES_CLEFABLE,
.moves = {MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_FLAMETHROWER, MOVE_MAGICAL_LEAF},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_HARIYAMA_3] = {
.species = SPECIES_HARIYAMA,
.moves = {MOVE_CROSS_CHOP, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_FACADE},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_RAICHU_3] = {
.species = SPECIES_RAICHU,
.moves = {MOVE_THUNDER, MOVE_RAIN_DANCE, MOVE_IRON_TAIL, MOVE_ATTRACT},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_CHERI_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_DEWGONG_3] = {
.species = SPECIES_DEWGONG,
.moves = {MOVE_HORN_DRILL, MOVE_SHEER_COLD, MOVE_SLEEP_TALK, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 252, 0, 0, 0),
.nature = NATURE_BOLD
},
[FRONTIER_MON_MANECTRIC_3] = {
.species = SPECIES_MANECTRIC,
.moves = {MOVE_THUNDERBOLT, MOVE_IRON_TAIL, MOVE_THUNDER_WAVE, MOVE_ROAR},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_VILEPLUME_3] = {
.species = SPECIES_VILEPLUME,
.moves = {MOVE_ATTRACT, MOVE_STUN_SPORE, MOVE_SLUDGE_BOMB, MOVE_GIGA_DRAIN},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_VICTREEBEL_3] = {
.species = SPECIES_VICTREEBEL,
.moves = {MOVE_STUN_SPORE, MOVE_INGRAIN, MOVE_GIGA_DRAIN, MOVE_SLUDGE_BOMB},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_ELECTRODE_3] = {
.species = SPECIES_ELECTRODE,
.moves = {MOVE_EXPLOSION, MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_ENDURE},
- .itemTableId = BATTLE_FRONTIER_ITEM_LIECHI_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_LIECHI_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_NAUGHTY
},
[FRONTIER_MON_EXPLOUD_3] = {
.species = SPECIES_EXPLOUD,
.moves = {MOVE_OVERHEAT, MOVE_ICE_BEAM, MOVE_THUNDER_PUNCH, MOVE_EXTRASENSORY},
- .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_WHITE_HERB,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_SHIFTRY_3] = {
.species = SPECIES_SHIFTRY,
.moves = {MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_EXPLOSION, MOVE_SYNTHESIS},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_GLALIE_3] = {
.species = SPECIES_GLALIE,
.moves = {MOVE_BLIZZARD, MOVE_EARTHQUAKE, MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(0, 170, 0, 170, 170, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_LUDICOLO_3] = {
.species = SPECIES_LUDICOLO,
.moves = {MOVE_LEECH_SEED, MOVE_RAIN_DANCE, MOVE_DOUBLE_TEAM, MOVE_GIGA_DRAIN},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_BOLD
},
[FRONTIER_MON_HYPNO_3] = {
.species = SPECIES_HYPNO,
.moves = {MOVE_PSYCH_UP, MOVE_SWAGGER, MOVE_MEGA_KICK, MOVE_SHADOW_BALL},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_GOLEM_3] = {
.species = SPECIES_GOLEM,
.moves = {MOVE_EXPLOSION, MOVE_EARTHQUAKE, MOVE_FLAMETHROWER, MOVE_BRICK_BREAK},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 0, 252),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_RHYDON_3] = {
.species = SPECIES_RHYDON,
.moves = {MOVE_MEGAHORN, MOVE_CRUSH_CLAW, MOVE_EARTHQUAKE, MOVE_HORN_DRILL},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_ALAKAZAM_3] = {
.species = SPECIES_ALAKAZAM,
.moves = {MOVE_TRICK, MOVE_DISABLE, MOVE_PSYCHIC, MOVE_SKILL_SWAP},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHOICE_BAND,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_CHOICE_BAND,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_WEEZING_3] = {
.species = SPECIES_WEEZING,
.moves = {MOVE_EXPLOSION, MOVE_SLUDGE_BOMB, MOVE_FLAMETHROWER, MOVE_THUNDERBOLT},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_KANGASKHAN_3] = {
.species = SPECIES_KANGASKHAN,
.moves = {MOVE_REVERSAL, MOVE_ENDURE, MOVE_THUNDERBOLT, MOVE_EARTHQUAKE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SALAC_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_JOLLY
},
[FRONTIER_MON_ELECTABUZZ_3] = {
.species = SPECIES_ELECTABUZZ,
.moves = {MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_THUNDERBOLT, MOVE_CROSS_CHOP},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_TAUROS_3] = {
.species = SPECIES_TAUROS,
.moves = {MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, MOVE_FLAMETHROWER, MOVE_ICE_BEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_SLOWBRO_3] = {
.species = SPECIES_SLOWBRO,
.moves = {MOVE_SURF, MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_ATTRACT},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 0, 252, 252),
.nature = NATURE_QUIET
},
[FRONTIER_MON_SLOWKING_3] = {
.species = SPECIES_SLOWKING,
.moves = {MOVE_PSYCHIC, MOVE_SURF, MOVE_ICE_BEAM, MOVE_EARTHQUAKE},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(0, 170, 170, 0, 170, 0),
.nature = NATURE_QUIET
},
[FRONTIER_MON_MILTANK_3] = {
.species = SPECIES_MILTANK,
.moves = {MOVE_REVERSAL, MOVE_ENDURE, MOVE_EARTHQUAKE, MOVE_SHADOW_BALL},
- .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SALAC_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 0, 252),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_ALTARIA_3] = {
.species = SPECIES_ALTARIA,
.moves = {MOVE_SING, MOVE_DRAGON_DANCE, MOVE_EARTHQUAKE, MOVE_AERIAL_ACE},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_NIDOQUEEN_3] = {
.species = SPECIES_NIDOQUEEN,
.moves = {MOVE_THUNDERBOLT, MOVE_FLAMETHROWER, MOVE_ICE_BEAM, MOVE_CRUNCH},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_NIDOKING_3] = {
.species = SPECIES_NIDOKING,
.moves = {MOVE_HORN_DRILL, MOVE_FIRE_BLAST, MOVE_BLIZZARD, MOVE_SURF},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEPPA_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEPPA_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_MAGMAR_3] = {
.species = SPECIES_MAGMAR,
.moves = {MOVE_MEGA_KICK, MOVE_CROSS_CHOP, MOVE_IRON_TAIL, MOVE_COUNTER},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(0, 252, 252, 0, 0, 0),
.nature = NATURE_IMPISH
},
[FRONTIER_MON_CRADILY_3] = {
.species = SPECIES_CRADILY,
.moves = {MOVE_SUBSTITUTE, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_RECOVER},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(0, 0, 170, 0, 170, 170),
.nature = NATURE_MODEST
},
[FRONTIER_MON_ARMALDO_3] = {
.species = SPECIES_ARMALDO,
.moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_BRICK_BREAK, MOVE_SWORDS_DANCE},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_GOLDUCK_3] = {
.species = SPECIES_GOLDUCK,
.moves = {MOVE_HYDRO_PUMP, MOVE_CROSS_CHOP, MOVE_BLIZZARD, MOVE_PROTECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_RAPIDASH_3] = {
.species = SPECIES_RAPIDASH,
.moves = {MOVE_OVERHEAT, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY, MOVE_HYPNOSIS},
- .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .heldItem = ITEM_WHITE_HERB,
+ .ev = TRAINER_PARTY_EVS(170, 0, 0, 170, 170, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_MUK_3] = {
.species = SPECIES_MUK,
.moves = {MOVE_SLUDGE_BOMB, MOVE_THUNDERBOLT, MOVE_FLAMETHROWER, MOVE_ICE_PUNCH},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 252, 0),
.nature = NATURE_QUIET
},
[FRONTIER_MON_GENGAR_3] = {
.species = SPECIES_GENGAR,
.moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_GIGA_DRAIN, MOVE_SKILL_SWAP},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_AMPHAROS_3] = {
.species = SPECIES_AMPHAROS,
.moves = {MOVE_THUNDERBOLT, MOVE_MEGA_KICK, MOVE_IRON_TAIL, MOVE_BRICK_BREAK},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_SCIZOR_3] = {
.species = SPECIES_SCIZOR,
.moves = {MOVE_REVERSAL, MOVE_ENDURE, MOVE_AGILITY, MOVE_SLASH},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 0, 252),
.nature = NATURE_CAREFUL
},
[FRONTIER_MON_HERACROSS_3] = {
.species = SPECIES_HERACROSS,
.moves = {MOVE_MEGAHORN, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_BRICK_BREAK},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_URSARING_3] = {
.species = SPECIES_URSARING,
.moves = {MOVE_FIRE_PUNCH, MOVE_THUNDER_PUNCH, MOVE_ICE_PUNCH, MOVE_CRUNCH},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 0, 170, 170, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_HOUNDOOM_3] = {
.species = SPECIES_HOUNDOOM,
.moves = {MOVE_OVERHEAT, MOVE_SHADOW_BALL, MOVE_SLUDGE_BOMB, MOVE_DOUBLE_EDGE},
- .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_WHITE_HERB,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_DONPHAN_3] = {
.species = SPECIES_DONPHAN,
.moves = {MOVE_FISSURE, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_SECRET_POWER},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_CLAYDOL_3] = {
.species = SPECIES_CLAYDOL,
.moves = {MOVE_PSYCHIC, MOVE_ICE_BEAM, MOVE_SOLAR_BEAM, MOVE_SUNNY_DAY},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_WAILORD_3] = {
.species = SPECIES_WAILORD,
.moves = {MOVE_HYDRO_PUMP, MOVE_FISSURE, MOVE_DOUBLE_TEAM, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_MODEST
},
[FRONTIER_MON_NINETALES_3] = {
.species = SPECIES_NINETALES,
.moves = {MOVE_FIRE_BLAST, MOVE_IRON_TAIL, MOVE_CONFUSE_RAY, MOVE_ATTRACT},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_MACHAMP_3] = {
.species = SPECIES_MACHAMP,
.moves = {MOVE_CROSS_CHOP, MOVE_FIRE_BLAST, MOVE_THUNDER_PUNCH, MOVE_ICE_PUNCH},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_SHUCKLE_3] = {
.species = SPECIES_SHUCKLE,
.moves = {MOVE_SUBSTITUTE, MOVE_ATTRACT, MOVE_TOXIC, MOVE_DOUBLE_TEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_CAREFUL
},
[FRONTIER_MON_STEELIX_3] = {
.species = SPECIES_STEELIX,
.moves = {MOVE_EARTHQUAKE, MOVE_BODY_SLAM, MOVE_ROCK_SLIDE, MOVE_EXPLOSION},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 0, 252),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_TENTACRUEL_3] = {
.species = SPECIES_TENTACRUEL,
.moves = {MOVE_SURF, MOVE_GIGA_DRAIN, MOVE_ICE_BEAM, MOVE_MIRROR_COAT},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(0, 0, 170, 170, 170, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_AERODACTYL_3] = {
.species = SPECIES_AERODACTYL,
.moves = {MOVE_DOUBLE_EDGE, MOVE_ROCK_SLIDE, MOVE_FIRE_BLAST, MOVE_DRAGON_CLAW},
- .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_KINGS_ROCK,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_PORYGON2_3] = {
.species = SPECIES_PORYGON2,
.moves = {MOVE_PSYCHIC, MOVE_TRI_ATTACK, MOVE_THUNDER_WAVE, MOVE_RECOVER},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_GARDEVOIR_3] = {
.species = SPECIES_GARDEVOIR,
.moves = {MOVE_PSYCHIC, MOVE_ICE_PUNCH, MOVE_FIRE_PUNCH, MOVE_MAGICAL_LEAF},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_EXEGGUTOR_3] = {
.species = SPECIES_EXEGGUTOR,
.moves = {MOVE_LEECH_SEED, MOVE_GIGA_DRAIN, MOVE_TOXIC, MOVE_EXPLOSION},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_HARDY
},
[FRONTIER_MON_STARMIE_3] = {
.species = SPECIES_STARMIE,
.moves = {MOVE_SURF, MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_ICE_BEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_FLYGON_3] = {
.species = SPECIES_FLYGON,
.moves = {MOVE_EARTHQUAKE, MOVE_DRAGON_CLAW, MOVE_FLAMETHROWER, MOVE_GIGA_DRAIN},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(0, 170, 0, 170, 170, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_VENUSAUR_3] = {
.species = SPECIES_VENUSAUR,
.moves = {MOVE_DOUBLE_EDGE, MOVE_SLUDGE_BOMB, MOVE_EARTHQUAKE, MOVE_SLEEP_POWDER},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(0, 170, 170, 0, 0, 170),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_VAPOREON_3] = {
.species = SPECIES_VAPOREON,
.moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_ACID_ARMOR, MOVE_BATON_PASS},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_CALM
},
[FRONTIER_MON_JOLTEON_3] = {
.species = SPECIES_JOLTEON,
.moves = {MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_AGILITY, MOVE_BATON_PASS},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_BOLD
},
[FRONTIER_MON_FLAREON_3] = {
.species = SPECIES_FLAREON,
.moves = {MOVE_SHADOW_BALL, MOVE_FLAIL, MOVE_ENDURE, MOVE_OVERHEAT},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_JOLLY
},
[FRONTIER_MON_MEGANIUM_3] = {
.species = SPECIES_MEGANIUM,
.moves = {MOVE_EARTHQUAKE, MOVE_FLAIL, MOVE_ENDURE, MOVE_GIGA_DRAIN},
- .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SALAC_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_JOLLY
},
[FRONTIER_MON_ESPEON_3] = {
.species = SPECIES_ESPEON,
.moves = {MOVE_PSYCHIC, MOVE_BITE, MOVE_WISH, MOVE_REFLECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_UMBREON_3] = {
.species = SPECIES_UMBREON,
.moves = {MOVE_SWAGGER, MOVE_PSYCH_UP, MOVE_ATTRACT, MOVE_SHADOW_BALL},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_BOLD
},
[FRONTIER_MON_BLASTOISE_3] = {
.species = SPECIES_BLASTOISE,
.moves = {MOVE_SURF, MOVE_EARTHQUAKE, MOVE_ICE_BEAM, MOVE_COUNTER},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 0, 170, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_FERALIGATR_3] = {
.species = SPECIES_FERALIGATR,
.moves = {MOVE_HYDRO_PUMP, MOVE_CRUNCH, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 0, 170, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_AGGRON_3] = {
.species = SPECIES_AGGRON,
.moves = {MOVE_SURF, MOVE_THUNDER, MOVE_FIRE_BLAST, MOVE_BLIZZARD},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_BLAZIKEN_3] = {
.species = SPECIES_BLAZIKEN,
.moves = {MOVE_OVERHEAT, MOVE_EARTHQUAKE, MOVE_ENDURE, MOVE_REVERSAL},
- .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SALAC_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_WALREIN_3] = {
.species = SPECIES_WALREIN,
.moves = {MOVE_SHEER_COLD, MOVE_FISSURE, MOVE_SURF, MOVE_ATTRACT},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_HARDY
},
[FRONTIER_MON_SCEPTILE_3] = {
.species = SPECIES_SCEPTILE,
.moves = {MOVE_LEAF_BLADE, MOVE_EARTHQUAKE, MOVE_CRUSH_CLAW, MOVE_AERIAL_ACE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(0, 170, 0, 170, 170, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_CHARIZARD_3] = {
.species = SPECIES_CHARIZARD,
.moves = {MOVE_FLAMETHROWER, MOVE_DRAGON_CLAW, MOVE_BITE, MOVE_BRICK_BREAK},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_TYPHLOSION_3] = {
.species = SPECIES_TYPHLOSION,
.moves = {MOVE_EARTHQUAKE, MOVE_OVERHEAT, MOVE_ENDURE, MOVE_REVERSAL},
- .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SALAC_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_LAPRAS_3] = {
.species = SPECIES_LAPRAS,
.moves = {MOVE_DOUBLE_EDGE, MOVE_PSYCHIC, MOVE_CONFUSE_RAY, MOVE_DRAGON_DANCE},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_CROBAT_3] = {
.species = SPECIES_CROBAT,
.moves = {MOVE_AIR_CUTTER, MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL, MOVE_SCREECH},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_SWAMPERT_3] = {
.species = SPECIES_SWAMPERT,
.moves = {MOVE_SURF, MOVE_EARTHQUAKE, MOVE_ICE_BEAM, MOVE_COUNTER},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_BRAVE
},
[FRONTIER_MON_GYARADOS_3] = {
.species = SPECIES_GYARADOS,
.moves = {MOVE_SURF, MOVE_THUNDER, MOVE_RAIN_DANCE, MOVE_EARTHQUAKE},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_SNORLAX_3] = {
.species = SPECIES_SNORLAX,
.moves = {MOVE_MEGA_KICK, MOVE_SHADOW_BALL, MOVE_SWAGGER, MOVE_PSYCH_UP},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_KINGDRA_3] = {
.species = SPECIES_KINGDRA,
.moves = {MOVE_FLAIL, MOVE_HYDRO_PUMP, MOVE_DRAGON_DANCE, MOVE_ENDURE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SALAC_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_BLISSEY_3] = {
.species = SPECIES_BLISSEY,
.moves = {MOVE_FIRE_BLAST, MOVE_BLIZZARD, MOVE_CALM_MIND, MOVE_SOFT_BOILED},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_BOLD
},
[FRONTIER_MON_MILOTIC_3] = {
.species = SPECIES_MILOTIC,
.moves = {MOVE_SURF, MOVE_BLIZZARD, MOVE_ATTRACT, MOVE_RECOVER},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_BOLD
},
[FRONTIER_MON_ARCANINE_3] = {
.species = SPECIES_ARCANINE,
.moves = {MOVE_OVERHEAT, MOVE_EXTREME_SPEED, MOVE_CRUNCH, MOVE_AERIAL_ACE},
- .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_WHITE_HERB,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_SALAMENCE_3] = {
.species = SPECIES_SALAMENCE,
.moves = {MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, MOVE_CRUNCH, MOVE_ENDURE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SALAC_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_METAGROSS_3] = {
.species = SPECIES_METAGROSS,
.moves = {MOVE_EARTHQUAKE, MOVE_METEOR_MASH, MOVE_DOUBLE_TEAM, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 170, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_SLAKING_3] = {
.species = SPECIES_SLAKING,
.moves = {MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_AERIAL_ACE, MOVE_BRICK_BREAK},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHOICE_BAND,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_CHOICE_BAND,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_DUGTRIO_4] = {
.species = SPECIES_DUGTRIO,
.moves = {MOVE_EARTHQUAKE, MOVE_DOUBLE_EDGE, MOVE_ROCK_SLIDE, MOVE_FISSURE},
- .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_KINGS_ROCK,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_MEDICHAM_4] = {
.species = SPECIES_MEDICHAM,
.moves = {MOVE_MEGA_KICK, MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_ROCK_SLIDE},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_MISDREAVUS_4] = {
.species = SPECIES_MISDREAVUS,
.moves = {MOVE_DESTINY_BOND, MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_THUNDERBOLT},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_TIMID
},
[FRONTIER_MON_FEAROW_4] = {
.species = SPECIES_FEAROW,
.moves = {MOVE_DRILL_PECK, MOVE_DOUBLE_EDGE, MOVE_STEEL_WING, MOVE_SKY_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_GRANBULL_4] = {
.species = SPECIES_GRANBULL,
.moves = {MOVE_MEGA_KICK, MOVE_EARTHQUAKE, MOVE_CRUNCH, MOVE_SHADOW_BALL},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHOICE_BAND,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_CHOICE_BAND,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_BRAVE
},
[FRONTIER_MON_JYNX_4] = {
.species = SPECIES_JYNX,
.moves = {MOVE_PSYCHIC, MOVE_ICE_BEAM, MOVE_LOVELY_KISS, MOVE_FAKE_TEARS},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_DUSCLOPS_4] = {
.species = SPECIES_DUSCLOPS,
.moves = {MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL, MOVE_CURSE, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_DODRIO_4] = {
.species = SPECIES_DODRIO,
.moves = {MOVE_FLAIL, MOVE_ENDURE, MOVE_DRILL_PECK, MOVE_FACADE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SALAC_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_MR_MIME_4] = {
.species = SPECIES_MR_MIME,
.moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_ICE_PUNCH, MOVE_FIRE_PUNCH},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_LANTURN_4] = {
.species = SPECIES_LANTURN,
.moves = {MOVE_SURF, MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_CONFUSE_RAY},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_BRELOOM_4] = {
.species = SPECIES_BRELOOM,
.moves = {MOVE_FOCUS_PUNCH, MOVE_SLUDGE_BOMB, MOVE_SPORE, MOVE_DOUBLE_TEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_FORRETRESS_4] = {
.species = SPECIES_FORRETRESS,
.moves = {MOVE_EXPLOSION, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_DOUBLE_EDGE},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 0, 252),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_WHISCASH_4] = {
.species = SPECIES_WHISCASH,
.moves = {MOVE_FISSURE, MOVE_SURF, MOVE_EARTHQUAKE, MOVE_ICE_BEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_QUIET
},
[FRONTIER_MON_XATU_4] = {
.species = SPECIES_XATU,
.moves = {MOVE_PSYCHIC, MOVE_DRILL_PECK, MOVE_SHADOW_BALL, MOVE_CONFUSE_RAY},
- .itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_PETAYA_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_SKARMORY_4] = {
.species = SPECIES_SKARMORY,
.moves = {MOVE_DRILL_PECK, MOVE_STEEL_WING, MOVE_COUNTER, MOVE_ROCK_SLIDE},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_MAROWAK_4] = {
.species = SPECIES_MAROWAK,
.moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_SWORDS_DANCE, MOVE_MEGA_KICK},
- .itemTableId = BATTLE_FRONTIER_ITEM_THICK_CLUB,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_THICK_CLUB,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_QUAGSIRE_4] = {
.species = SPECIES_QUAGSIRE,
.moves = {MOVE_SURF, MOVE_EARTHQUAKE, MOVE_ICE_BEAM, MOVE_AMNESIA},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(0, 170, 0, 0, 170, 170),
.nature = NATURE_SASSY
},
[FRONTIER_MON_CLEFABLE_4] = {
.species = SPECIES_CLEFABLE,
.moves = {MOVE_MEGA_KICK, MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_SOFT_BOILED},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(0, 252, 252, 0, 0, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_HARIYAMA_4] = {
.species = SPECIES_HARIYAMA,
.moves = {MOVE_CROSS_CHOP, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_FAKE_OUT},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_RAICHU_4] = {
.species = SPECIES_RAICHU,
.moves = {MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_PROTECT, MOVE_MEGA_KICK},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_DEWGONG_4] = {
.species = SPECIES_DEWGONG,
.moves = {MOVE_SHEER_COLD, MOVE_ICE_BEAM, MOVE_SURF, MOVE_SIGNAL_BEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_MANECTRIC_4] = {
.species = SPECIES_MANECTRIC,
.moves = {MOVE_THUNDERBOLT, MOVE_CRUNCH, MOVE_THUNDER_WAVE, MOVE_ROAR},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_VILEPLUME_4] = {
.species = SPECIES_VILEPLUME,
.moves = {MOVE_SOLAR_BEAM, MOVE_SLUDGE_BOMB, MOVE_SUNNY_DAY, MOVE_SYNTHESIS},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_QUIET
},
[FRONTIER_MON_VICTREEBEL_4] = {
.species = SPECIES_VICTREEBEL,
.moves = {MOVE_GIGA_DRAIN, MOVE_DOUBLE_EDGE, MOVE_SLUDGE_BOMB, MOVE_SYNTHESIS},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_ELECTRODE_4] = {
.species = SPECIES_ELECTRODE,
.moves = {MOVE_EXPLOSION, MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_MIRROR_COAT},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_NAUGHTY
},
[FRONTIER_MON_EXPLOUD_4] = {
.species = SPECIES_EXPLOUD,
.moves = {MOVE_MEGA_KICK, MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_OVERHEAT},
- .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_WHITE_HERB,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_SHIFTRY_4] = {
.species = SPECIES_SHIFTRY,
.moves = {MOVE_EXPLOSION, MOVE_GIGA_DRAIN, MOVE_MEGA_KICK, MOVE_FAKE_OUT},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_GLALIE_4] = {
.species = SPECIES_GLALIE,
.moves = {MOVE_ICE_BEAM, MOVE_EARTHQUAKE, MOVE_CRUNCH, MOVE_SHADOW_BALL},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 0, 170, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_LUDICOLO_4] = {
.species = SPECIES_LUDICOLO,
.moves = {MOVE_LEECH_SEED, MOVE_RAIN_DANCE, MOVE_DOUBLE_TEAM, MOVE_TOXIC},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_BOLD
},
[FRONTIER_MON_HYPNO_4] = {
.species = SPECIES_HYPNO,
.moves = {MOVE_PSYCHIC, MOVE_THUNDER_PUNCH, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_GOLEM_4] = {
.species = SPECIES_GOLEM,
.moves = {MOVE_EXPLOSION, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_DOUBLE_EDGE},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 0, 252),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_RHYDON_4] = {
.species = SPECIES_RHYDON,
.moves = {MOVE_MEGAHORN, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_HORN_DRILL},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_ALAKAZAM_4] = {
.species = SPECIES_ALAKAZAM,
.moves = {MOVE_PSYCHIC, MOVE_THUNDER_PUNCH, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_WEEZING_4] = {
.species = SPECIES_WEEZING,
.moves = {MOVE_EXPLOSION, MOVE_SLUDGE_BOMB, MOVE_FRUSTRATION, MOVE_SHADOW_BALL},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_KANGASKHAN_4] = {
.species = SPECIES_KANGASKHAN,
.moves = {MOVE_MEGA_KICK, MOVE_EARTHQUAKE, MOVE_AERIAL_ACE, MOVE_SHADOW_BALL},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_ELECTABUZZ_4] = {
.species = SPECIES_ELECTABUZZ,
.moves = {MOVE_THUNDERBOLT, MOVE_PSYCHIC, MOVE_MEGA_KICK, MOVE_CROSS_CHOP},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_TAUROS_4] = {
.species = SPECIES_TAUROS,
.moves = {MOVE_DOUBLE_EDGE, MOVE_ROCK_TOMB, MOVE_THUNDERBOLT, MOVE_SURF},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_SLOWBRO_4] = {
.species = SPECIES_SLOWBRO,
.moves = {MOVE_PSYCHIC, MOVE_SURF, MOVE_EARTHQUAKE, MOVE_ICE_BEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 0, 252, 252),
.nature = NATURE_SASSY
},
[FRONTIER_MON_SLOWKING_4] = {
.species = SPECIES_SLOWKING,
.moves = {MOVE_PSYCHIC, MOVE_SURF, MOVE_ICE_BEAM, MOVE_FLAMETHROWER},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_MILTANK_4] = {
.species = SPECIES_MILTANK,
.moves = {MOVE_DOUBLE_EDGE, MOVE_CURSE, MOVE_DOUBLE_TEAM, MOVE_MILK_DRINK},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 0, 252),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_ALTARIA_4] = {
.species = SPECIES_ALTARIA,
.moves = {MOVE_DRAGON_CLAW, MOVE_EARTHQUAKE, MOVE_FLAMETHROWER, MOVE_ICE_BEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_NIDOQUEEN_4] = {
.species = SPECIES_NIDOQUEEN,
.moves = {MOVE_SUPERPOWER, MOVE_SLUDGE_BOMB, MOVE_EARTHQUAKE, MOVE_SHADOW_BALL},
- .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_WHITE_HERB,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_NIDOKING_4] = {
.species = SPECIES_NIDOKING,
.moves = {MOVE_MEGAHORN, MOVE_SLUDGE_BOMB, MOVE_EARTHQUAKE, MOVE_THUNDER},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_MAGMAR_4] = {
.species = SPECIES_MAGMAR,
.moves = {MOVE_FLAMETHROWER, MOVE_PSYCHIC, MOVE_CROSS_CHOP, MOVE_CONFUSE_RAY},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(252, 0, 252, 0, 0, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_CRADILY_4] = {
.species = SPECIES_CRADILY,
.moves = {MOVE_TOXIC, MOVE_INGRAIN, MOVE_MIRROR_COAT, MOVE_GIGA_DRAIN},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_BOLD
},
[FRONTIER_MON_ARMALDO_4] = {
.species = SPECIES_ARMALDO,
.moves = {MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, MOVE_AERIAL_ACE, MOVE_ROCK_SLIDE},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHOICE_BAND,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHOICE_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_GOLDUCK_4] = {
.species = SPECIES_GOLDUCK,
.moves = {MOVE_SURF, MOVE_CROSS_CHOP, MOVE_ICE_BEAM, MOVE_AERIAL_ACE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_RAPIDASH_4] = {
.species = SPECIES_RAPIDASH,
.moves = {MOVE_OVERHEAT, MOVE_DOUBLE_EDGE, MOVE_IRON_TAIL, MOVE_DOUBLE_KICK},
- .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_WHITE_HERB,
+ .ev = TRAINER_PARTY_EVS(0, 170, 0, 170, 170, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_MUK_4] = {
.species = SPECIES_MUK,
.moves = {MOVE_SLUDGE_BOMB, MOVE_BRICK_BREAK, MOVE_GIGA_DRAIN, MOVE_EXPLOSION},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(0, 252, 252, 0, 0, 0),
.nature = NATURE_BRAVE
},
[FRONTIER_MON_GENGAR_4] = {
.species = SPECIES_GENGAR,
.moves = {MOVE_PSYCHIC, MOVE_FIRE_PUNCH, MOVE_ICE_PUNCH, MOVE_DESTINY_BOND},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_AMPHAROS_4] = {
.species = SPECIES_AMPHAROS,
.moves = {MOVE_THUNDERBOLT, MOVE_FIRE_PUNCH, MOVE_THUNDER_WAVE, MOVE_REFLECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_SCIZOR_4] = {
.species = SPECIES_SCIZOR,
.moves = {MOVE_SILVER_WIND, MOVE_SWORDS_DANCE, MOVE_AGILITY, MOVE_BATON_PASS},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_CAREFUL
},
[FRONTIER_MON_HERACROSS_4] = {
.species = SPECIES_HERACROSS,
.moves = {MOVE_MEGAHORN, MOVE_EARTHQUAKE, MOVE_REVERSAL, MOVE_ENDURE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SALAC_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_URSARING_4] = {
.species = SPECIES_URSARING,
.moves = {MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_AERIAL_ACE},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_HOUNDOOM_4] = {
.species = SPECIES_HOUNDOOM,
.moves = {MOVE_OVERHEAT, MOVE_SOLAR_BEAM, MOVE_CRUNCH, MOVE_SUNNY_DAY},
- .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_WHITE_HERB,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_DONPHAN_4] = {
.species = SPECIES_DONPHAN,
.moves = {MOVE_FISSURE, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_IRON_TAIL},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_CLAYDOL_4] = {
.species = SPECIES_CLAYDOL,
.moves = {MOVE_PSYCHIC, MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_EXPLOSION},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_WAILORD_4] = {
.species = SPECIES_WAILORD,
.moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_EARTHQUAKE, MOVE_FISSURE},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_HARDY
},
[FRONTIER_MON_NINETALES_4] = {
.species = SPECIES_NINETALES,
.moves = {MOVE_OVERHEAT, MOVE_DOUBLE_EDGE, MOVE_CONFUSE_RAY, MOVE_WILL_O_WISP},
- .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_WHITE_HERB,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_MACHAMP_4] = {
.species = SPECIES_MACHAMP,
.moves = {MOVE_CROSS_CHOP, MOVE_EARTHQUAKE, MOVE_FLAMETHROWER, MOVE_ROCK_SLIDE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_SHUCKLE_4] = {
.species = SPECIES_SHUCKLE,
.moves = {MOVE_TOXIC, MOVE_DOUBLE_TEAM, MOVE_WRAP, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_CAREFUL
},
[FRONTIER_MON_STEELIX_4] = {
.species = SPECIES_STEELIX,
.moves = {MOVE_EARTHQUAKE, MOVE_IRON_TAIL, MOVE_DOUBLE_EDGE, MOVE_EXPLOSION},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 0, 252),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_TENTACRUEL_4] = {
.species = SPECIES_TENTACRUEL,
.moves = {MOVE_HYDRO_PUMP, MOVE_SLUDGE_BOMB, MOVE_ICE_BEAM, MOVE_MIRROR_COAT},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(0, 170, 170, 0, 170, 0),
.nature = NATURE_QUIRKY
},
[FRONTIER_MON_AERODACTYL_4] = {
.species = SPECIES_AERODACTYL,
.moves = {MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, MOVE_FIRE_BLAST, MOVE_BITE},
- .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_KINGS_ROCK,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_PORYGON2_4] = {
.species = SPECIES_PORYGON2,
.moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_RECOVER},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_GARDEVOIR_4] = {
.species = SPECIES_GARDEVOIR,
.moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_ICE_PUNCH, MOVE_FIRE_PUNCH},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_EXEGGUTOR_4] = {
.species = SPECIES_EXEGGUTOR,
.moves = {MOVE_PSYCHIC, MOVE_GIGA_DRAIN, MOVE_SLUDGE_BOMB, MOVE_EXPLOSION},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_STARMIE_4] = {
.species = SPECIES_STARMIE,
.moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_RECOVER},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_FLYGON_4] = {
.species = SPECIES_FLYGON,
.moves = {MOVE_EARTHQUAKE, MOVE_DRAGON_CLAW, MOVE_DOUBLE_EDGE, MOVE_CRUNCH},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(0, 170, 0, 170, 170, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_VENUSAUR_4] = {
.species = SPECIES_VENUSAUR,
.moves = {MOVE_SOLAR_BEAM, MOVE_SLUDGE_BOMB, MOVE_SUNNY_DAY, MOVE_EARTHQUAKE},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 170, 0, 0, 170, 170),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_VAPOREON_4] = {
.species = SPECIES_VAPOREON,
.moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_ACID_ARMOR, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 0, 0, 170, 170),
.nature = NATURE_CALM
},
[FRONTIER_MON_JOLTEON_4] = {
.species = SPECIES_JOLTEON,
.moves = {MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_BITE, MOVE_SHADOW_BALL},
- .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_KINGS_ROCK,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_TIMID
},
[FRONTIER_MON_FLAREON_4] = {
.species = SPECIES_FLAREON,
.moves = {MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_QUIET
},
[FRONTIER_MON_MEGANIUM_4] = {
.species = SPECIES_MEGANIUM,
.moves = {MOVE_GIGA_DRAIN, MOVE_EARTHQUAKE, MOVE_ANCIENT_POWER, MOVE_BODY_SLAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 0, 170, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_ESPEON_4] = {
.species = SPECIES_ESPEON,
.moves = {MOVE_PSYCHIC, MOVE_BITE, MOVE_ATTRACT, MOVE_CALM_MIND},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_UMBREON_4] = {
.species = SPECIES_UMBREON,
.moves = {MOVE_CONFUSE_RAY, MOVE_TOXIC, MOVE_FEINT_ATTACK, MOVE_DOUBLE_TEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_BOLD
},
[FRONTIER_MON_BLASTOISE_4] = {
.species = SPECIES_BLASTOISE,
.moves = {MOVE_SURF, MOVE_EARTHQUAKE, MOVE_ICE_BEAM, MOVE_MIRROR_COAT},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 0, 170, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_FERALIGATR_4] = {
.species = SPECIES_FERALIGATR,
.moves = {MOVE_HYDRO_PUMP, MOVE_ICE_BEAM, MOVE_EARTHQUAKE, MOVE_AERIAL_ACE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 0, 170, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_AGGRON_4] = {
.species = SPECIES_AGGRON,
.moves = {MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_AERIAL_ACE},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_BLAZIKEN_4] = {
.species = SPECIES_BLAZIKEN,
.moves = {MOVE_OVERHEAT, MOVE_EARTHQUAKE, MOVE_THUNDER_PUNCH, MOVE_ROCK_SLIDE},
- .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_WHITE_HERB,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_WALREIN_4] = {
.species = SPECIES_WALREIN,
.moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_EARTHQUAKE, MOVE_SHEER_COLD},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_QUIET
},
[FRONTIER_MON_SCEPTILE_4] = {
.species = SPECIES_SCEPTILE,
.moves = {MOVE_LEAF_BLADE, MOVE_DRAGON_CLAW, MOVE_CRUNCH, MOVE_THUNDER_PUNCH},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_CHARIZARD_4] = {
.species = SPECIES_CHARIZARD,
.moves = {MOVE_OVERHEAT, MOVE_EARTHQUAKE, MOVE_AERIAL_ACE, MOVE_ROCK_SLIDE},
- .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_WHITE_HERB,
+ .ev = TRAINER_PARTY_EVS(0, 170, 0, 170, 170, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_TYPHLOSION_4] = {
.species = SPECIES_TYPHLOSION,
.moves = {MOVE_OVERHEAT, MOVE_THUNDER_PUNCH, MOVE_EARTHQUAKE, MOVE_CRUSH_CLAW},
- .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_WHITE_HERB,
+ .ev = TRAINER_PARTY_EVS(0, 170, 0, 170, 170, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_LAPRAS_4] = {
.species = SPECIES_LAPRAS,
.moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_THUNDERBOLT, MOVE_PSYCHIC},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_CROBAT_4] = {
.species = SPECIES_CROBAT,
.moves = {MOVE_SLUDGE_BOMB, MOVE_AERIAL_ACE, MOVE_SHADOW_BALL, MOVE_CONFUSE_RAY},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_SWAMPERT_4] = {
.species = SPECIES_SWAMPERT,
.moves = {MOVE_SURF, MOVE_EARTHQUAKE, MOVE_ICE_BEAM, MOVE_MIRROR_COAT},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_QUIET
},
[FRONTIER_MON_GYARADOS_4] = {
.species = SPECIES_GYARADOS,
.moves = {MOVE_RETURN, MOVE_EARTHQUAKE, MOVE_DRAGON_DANCE, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_SNORLAX_4] = {
.species = SPECIES_SNORLAX,
.moves = {MOVE_DOUBLE_EDGE, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK, MOVE_CURSE},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(0, 252, 252, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_KINGDRA_4] = {
.species = SPECIES_KINGDRA,
.moves = {MOVE_DOUBLE_EDGE, MOVE_ICE_BEAM, MOVE_DRAGON_DANCE, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_HARDY
},
[FRONTIER_MON_BLISSEY_4] = {
.species = SPECIES_BLISSEY,
.moves = {MOVE_ICE_BEAM, MOVE_CALM_MIND, MOVE_COUNTER, MOVE_SOFT_BOILED},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_BOLD
},
[FRONTIER_MON_MILOTIC_4] = {
.species = SPECIES_MILOTIC,
.moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_RECOVER, MOVE_MIRROR_COAT},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(0, 0, 170, 0, 170, 170),
.nature = NATURE_MODEST
},
[FRONTIER_MON_ARCANINE_4] = {
.species = SPECIES_ARCANINE,
.moves = {MOVE_OVERHEAT, MOVE_EXTREME_SPEED, MOVE_CRUNCH, MOVE_DOUBLE_EDGE},
- .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_WHITE_HERB,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_SALAMENCE_4] = {
.species = SPECIES_SALAMENCE,
.moves = {MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, MOVE_AERIAL_ACE, MOVE_DRAGON_DANCE},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_METAGROSS_4] = {
.species = SPECIES_METAGROSS,
.moves = {MOVE_METEOR_MASH, MOVE_PSYCHIC, MOVE_EARTHQUAKE, MOVE_SHADOW_BALL},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_SLAKING_4] = {
.species = SPECIES_SLAKING,
.moves = {MOVE_THUNDERBOLT, MOVE_FLAMETHROWER, MOVE_ICE_BEAM, MOVE_YAWN},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 0, 252, 252),
.nature = NATURE_MODEST
},
[FRONTIER_MON_ARTICUNO_1] = {
.species = SPECIES_ARTICUNO,
.moves = {MOVE_ICE_BEAM, MOVE_WATER_PULSE, MOVE_ICY_WIND, MOVE_ROAR},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_ZAPDOS_1] = {
.species = SPECIES_ZAPDOS,
.moves = {MOVE_THUNDERBOLT, MOVE_DRILL_PECK, MOVE_THUNDER_WAVE, MOVE_ROAR},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_MOLTRES_1] = {
.species = SPECIES_MOLTRES,
.moves = {MOVE_FLAMETHROWER, MOVE_AERIAL_ACE, MOVE_MUD_SLAP, MOVE_ROAR},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_RAIKOU_1] = {
.species = SPECIES_RAIKOU,
.moves = {MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_CALM_MIND, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_ENTEI_1] = {
.species = SPECIES_ENTEI,
.moves = {MOVE_FLAMETHROWER, MOVE_DOUBLE_TEAM, MOVE_CALM_MIND, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_SUICUNE_1] = {
.species = SPECIES_SUICUNE,
.moves = {MOVE_SURF, MOVE_DOUBLE_TEAM, MOVE_CALM_MIND, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_REGIROCK_1] = {
.species = SPECIES_REGIROCK,
.moves = {MOVE_SUPERPOWER, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_EXPLOSION},
- .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_WHITE_HERB,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_REGICE_1] = {
.species = SPECIES_REGICE,
.moves = {MOVE_ICE_BEAM, MOVE_THUNDERBOLT, MOVE_AMNESIA, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_REGISTEEL_1] = {
.species = SPECIES_REGISTEEL,
.moves = {MOVE_METAL_CLAW, MOVE_CURSE, MOVE_AMNESIA, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_LATIAS_1] = {
.species = SPECIES_LATIAS,
.moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_DRAGON_CLAW},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_LATIOS_1] = {
.species = SPECIES_LATIOS,
.moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_DRAGON_CLAW},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_ARTICUNO_2] = {
.species = SPECIES_ARTICUNO,
.moves = {MOVE_SUBSTITUTE, MOVE_TOXIC, MOVE_BLIZZARD, MOVE_DOUBLE_TEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_IMPISH
},
[FRONTIER_MON_ZAPDOS_2] = {
.species = SPECIES_ZAPDOS,
.moves = {MOVE_THUNDER, MOVE_RAIN_DANCE, MOVE_DRILL_PECK, MOVE_DOUBLE_TEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_MOLTRES_2] = {
.species = SPECIES_MOLTRES,
.moves = {MOVE_OVERHEAT, MOVE_AERIAL_ACE, MOVE_DOUBLE_TEAM, MOVE_PROTECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_WHITE_HERB,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_RAIKOU_2] = {
.species = SPECIES_RAIKOU,
.moves = {MOVE_THUNDER, MOVE_RAIN_DANCE, MOVE_DOUBLE_TEAM, MOVE_REFLECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_ENTEI_2] = {
.species = SPECIES_ENTEI,
.moves = {MOVE_FIRE_BLAST, MOVE_SUNNY_DAY, MOVE_SOLAR_BEAM, MOVE_REFLECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_SUICUNE_2] = {
.species = SPECIES_SUICUNE,
.moves = {MOVE_TOXIC, MOVE_DIVE, MOVE_DOUBLE_TEAM, MOVE_PROTECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_CALM
},
[FRONTIER_MON_REGIROCK_2] = {
.species = SPECIES_REGIROCK,
.moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_COUNTER, MOVE_EXPLOSION},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_REGICE_2] = {
.species = SPECIES_REGICE,
.moves = {MOVE_THUNDER, MOVE_RAIN_DANCE, MOVE_BLIZZARD, MOVE_BRICK_BREAK},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_QUIET
},
[FRONTIER_MON_REGISTEEL_2] = {
.species = SPECIES_REGISTEEL,
.moves = {MOVE_THUNDERBOLT, MOVE_ICE_PUNCH, MOVE_EARTHQUAKE, MOVE_AERIAL_ACE},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 0, 170, 0),
.nature = NATURE_QUIET
},
[FRONTIER_MON_LATIAS_2] = {
.species = SPECIES_LATIAS,
.moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_EARTHQUAKE},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_LATIOS_2] = {
.species = SPECIES_LATIOS,
.moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_EARTHQUAKE},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_ARTICUNO_3] = {
.species = SPECIES_ARTICUNO,
.moves = {MOVE_ICE_BEAM, MOVE_FACADE, MOVE_AERIAL_ACE, MOVE_PROTECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_ZAPDOS_3] = {
.species = SPECIES_ZAPDOS,
.moves = {MOVE_THUNDERBOLT, MOVE_DRILL_PECK, MOVE_THUNDER_WAVE, MOVE_SUBSTITUTE},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(0, 170, 0, 170, 170, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_MOLTRES_3] = {
.species = SPECIES_MOLTRES,
.moves = {MOVE_FIRE_BLAST, MOVE_SUNNY_DAY, MOVE_DOUBLE_TEAM, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_RAIKOU_3] = {
.species = SPECIES_RAIKOU,
.moves = {MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_QUICK_ATTACK, MOVE_ROAR},
- .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_KINGS_ROCK,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_ENTEI_3] = {
.species = SPECIES_ENTEI,
.moves = {MOVE_FLAMETHROWER, MOVE_DOUBLE_EDGE, MOVE_SWAGGER, MOVE_PSYCH_UP},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_SUICUNE_3] = {
.species = SPECIES_SUICUNE,
.moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_RAIN_DANCE, MOVE_ROAR},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_REGIROCK_3] = {
.species = SPECIES_REGIROCK,
.moves = {MOVE_ROCK_SLIDE, MOVE_EARTHQUAKE, MOVE_CURSE, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_REGICE_3] = {
.species = SPECIES_REGICE,
.moves = {MOVE_ICE_BEAM, MOVE_THUNDERBOLT, MOVE_THUNDER_WAVE, MOVE_EXPLOSION},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_QUIET
},
[FRONTIER_MON_REGISTEEL_3] = {
.species = SPECIES_REGISTEEL,
.moves = {MOVE_ANCIENT_POWER, MOVE_AMNESIA, MOVE_COUNTER, MOVE_EXPLOSION},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_LATIAS_3] = {
.species = SPECIES_LATIAS,
.moves = {MOVE_DRAGON_CLAW, MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_EARTHQUAKE},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_LATIOS_3] = {
.species = SPECIES_LATIOS,
.moves = {MOVE_DRAGON_CLAW, MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_EARTHQUAKE},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_ARTICUNO_4] = {
.species = SPECIES_ARTICUNO,
.moves = {MOVE_BLIZZARD, MOVE_DOUBLE_EDGE, MOVE_REST, MOVE_REFLECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_ZAPDOS_4] = {
.species = SPECIES_ZAPDOS,
.moves = {MOVE_THUNDERBOLT, MOVE_DRILL_PECK, MOVE_THUNDER_WAVE, MOVE_LIGHT_SCREEN},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_MOLTRES_4] = {
.species = SPECIES_MOLTRES,
.moves = {MOVE_OVERHEAT, MOVE_DOUBLE_EDGE, MOVE_STEEL_WING, MOVE_SAFEGUARD},
- .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_WHITE_HERB,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_QUIET
},
[FRONTIER_MON_RAIKOU_4] = {
.species = SPECIES_RAIKOU,
.moves = {MOVE_THUNDERBOLT, MOVE_BITE, MOVE_THUNDER_WAVE, MOVE_REFLECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_ENTEI_4] = {
.species = SPECIES_ENTEI,
.moves = {MOVE_FLAMETHROWER, MOVE_BITE, MOVE_DOUBLE_TEAM, MOVE_REFLECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_KINGS_ROCK,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_SUICUNE_4] = {
.species = SPECIES_SUICUNE,
.moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_BITE, MOVE_REFLECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_REGIROCK_4] = {
.species = SPECIES_REGIROCK,
.moves = {MOVE_ROCK_SLIDE, MOVE_BRICK_BREAK, MOVE_DOUBLE_TEAM, MOVE_THUNDER_WAVE},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 0, 0, 170),
.nature = NATURE_CAREFUL
},
[FRONTIER_MON_REGICE_4] = {
.species = SPECIES_REGICE,
.moves = {MOVE_ICE_BEAM, MOVE_HAIL, MOVE_DOUBLE_TEAM, MOVE_THUNDER_WAVE},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(252, 0, 252, 0, 0, 0),
.nature = NATURE_BOLD
},
[FRONTIER_MON_REGISTEEL_4] = {
.species = SPECIES_REGISTEEL,
.moves = {MOVE_ANCIENT_POWER, MOVE_EARTHQUAKE, MOVE_DOUBLE_TEAM, MOVE_THUNDER_WAVE},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_IMPISH
},
[FRONTIER_MON_LATIAS_4] = {
.species = SPECIES_LATIAS,
.moves = {MOVE_MIST_BALL, MOVE_SHADOW_BALL, MOVE_CHARM, MOVE_REFLECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 0, 170, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_LATIOS_4] = {
.species = SPECIES_LATIOS,
.moves = {MOVE_LUSTER_PURGE, MOVE_THUNDERBOLT, MOVE_ICE_BEAM, MOVE_DRAGON_CLAW},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_GENGAR_5] = {
.species = SPECIES_GENGAR,
.moves = {MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_THUNDERBOLT, MOVE_FIRE_PUNCH},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_GENGAR_6] = {
.species = SPECIES_GENGAR,
.moves = {MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_THUNDERBOLT, MOVE_ICE_PUNCH},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_GENGAR_7] = {
.species = SPECIES_GENGAR,
.moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_FIRE_PUNCH, MOVE_DESTINY_BOND},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_GENGAR_8] = {
.species = SPECIES_GENGAR,
.moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_ICE_PUNCH, MOVE_DESTINY_BOND},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_URSARING_5] = {
.species = SPECIES_URSARING,
.moves = {MOVE_MEGA_KICK, MOVE_AERIAL_ACE, MOVE_ROCK_SLIDE, MOVE_BRICK_BREAK},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHOICE_BAND,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHOICE_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_URSARING_6] = {
.species = SPECIES_URSARING,
.moves = {MOVE_HYPER_BEAM, MOVE_YAWN, MOVE_SWORDS_DANCE, MOVE_DOUBLE_TEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_URSARING_7] = {
.species = SPECIES_URSARING,
.moves = {MOVE_FACADE, MOVE_EARTHQUAKE, MOVE_CRUNCH, MOVE_BULK_UP},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 0, 170, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_URSARING_8] = {
.species = SPECIES_URSARING,
.moves = {MOVE_FACADE, MOVE_EARTHQUAKE, MOVE_CRUNCH, MOVE_BRICK_BREAK},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 0, 170, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_MACHAMP_5] = {
.species = SPECIES_MACHAMP,
.moves = {MOVE_CROSS_CHOP, MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_MACHAMP_6] = {
.species = SPECIES_MACHAMP,
.moves = {MOVE_CROSS_CHOP, MOVE_EARTHQUAKE, MOVE_COUNTER, MOVE_ROCK_TOMB},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_MACHAMP_7] = {
.species = SPECIES_MACHAMP,
.moves = {MOVE_FOCUS_PUNCH, MOVE_SUBSTITUTE, MOVE_ATTRACT, MOVE_DOUBLE_TEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_MACHAMP_8] = {
.species = SPECIES_MACHAMP,
.moves = {MOVE_REVENGE, MOVE_ROCK_SLIDE, MOVE_FACADE, MOVE_COUNTER},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_GARDEVOIR_5] = {
.species = SPECIES_GARDEVOIR,
.moves = {MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_ENDURE, MOVE_DESTINY_BOND},
- .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SALAC_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 170, 0, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_GARDEVOIR_6] = {
.species = SPECIES_GARDEVOIR,
.moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_WILL_O_WISP, MOVE_DESTINY_BOND},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 252, 0, 0),
.nature = NATURE_TIMID
},
[FRONTIER_MON_GARDEVOIR_7] = {
.species = SPECIES_GARDEVOIR,
.moves = {MOVE_PSYCHIC, MOVE_CALM_MIND, MOVE_WILL_O_WISP, MOVE_DESTINY_BOND},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_BOLD
},
[FRONTIER_MON_GARDEVOIR_8] = {
.species = SPECIES_GARDEVOIR,
.moves = {MOVE_PSYCHIC, MOVE_MAGICAL_LEAF, MOVE_ATTRACT, MOVE_DOUBLE_TEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_STARMIE_5] = {
.species = SPECIES_STARMIE,
.moves = {MOVE_SURF, MOVE_PSYCHIC, MOVE_RECOVER, MOVE_LIGHT_SCREEN},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_STARMIE_6] = {
.species = SPECIES_STARMIE,
.moves = {MOVE_SURF, MOVE_CONFUSE_RAY, MOVE_THUNDER_WAVE, MOVE_RECOVER},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_CALM
},
[FRONTIER_MON_STARMIE_7] = {
.species = SPECIES_STARMIE,
.moves = {MOVE_PSYCHIC, MOVE_ICE_BEAM, MOVE_COSMIC_POWER, MOVE_RECOVER},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_STARMIE_8] = {
.species = SPECIES_STARMIE,
.moves = {MOVE_SURF, MOVE_THUNDERBOLT, MOVE_COSMIC_POWER, MOVE_RECOVER},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_LAPRAS_5] = {
.species = SPECIES_LAPRAS,
.moves = {MOVE_PSYCHIC, MOVE_THUNDERBOLT, MOVE_IRON_TAIL, MOVE_DOUBLE_EDGE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_LAPRAS_6] = {
.species = SPECIES_LAPRAS,
.moves = {MOVE_HYDRO_PUMP, MOVE_THUNDER, MOVE_RAIN_DANCE, MOVE_BLIZZARD},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_LAPRAS_7] = {
.species = SPECIES_LAPRAS,
.moves = {MOVE_SHEER_COLD, MOVE_HORN_DRILL, MOVE_REST, MOVE_SLEEP_TALK},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEPPA_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEPPA_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_CALM
},
[FRONTIER_MON_LAPRAS_8] = {
.species = SPECIES_LAPRAS,
.moves = {MOVE_SHEER_COLD, MOVE_HORN_DRILL, MOVE_SING, MOVE_ATTRACT},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_CALM
},
[FRONTIER_MON_SNORLAX_5] = {
.species = SPECIES_SNORLAX,
.moves = {MOVE_MEGA_KICK, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK, MOVE_COUNTER},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(0, 252, 252, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_SNORLAX_6] = {
.species = SPECIES_SNORLAX,
.moves = {MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_BRICK_BREAK, MOVE_COUNTER},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(0, 252, 252, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_SNORLAX_7] = {
.species = SPECIES_SNORLAX,
.moves = {MOVE_HYPER_BEAM, MOVE_SHADOW_BALL, MOVE_EARTHQUAKE, MOVE_CURSE},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_SNORLAX_8] = {
.species = SPECIES_SNORLAX,
.moves = {MOVE_RETURN, MOVE_SHADOW_BALL, MOVE_BELLY_DRUM, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_SALAMENCE_5] = {
.species = SPECIES_SALAMENCE,
.moves = {MOVE_FACADE, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_DRAGON_DANCE},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_SALAMENCE_6] = {
.species = SPECIES_SALAMENCE,
.moves = {MOVE_HEADBUTT, MOVE_AERIAL_ACE, MOVE_CRUNCH, MOVE_DRAGON_DANCE},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_HARDY
},
[FRONTIER_MON_SALAMENCE_7] = {
.species = SPECIES_SALAMENCE,
.moves = {MOVE_FLAMETHROWER, MOVE_DRAGON_CLAW, MOVE_CRUNCH, MOVE_BRICK_BREAK},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_SALAMENCE_8] = {
.species = SPECIES_SALAMENCE,
.moves = {MOVE_FLAMETHROWER, MOVE_DRAGON_CLAW, MOVE_CRUNCH, MOVE_ATTRACT},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_METAGROSS_5] = {
.species = SPECIES_METAGROSS,
.moves = {MOVE_EXPLOSION, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_BRICK_BREAK},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 170, 0, 0),
.nature = NATURE_JOLLY
},
[FRONTIER_MON_METAGROSS_6] = {
.species = SPECIES_METAGROSS,
.moves = {MOVE_METEOR_MASH, MOVE_PSYCHIC, MOVE_ICE_PUNCH, MOVE_THUNDER_PUNCH},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_METAGROSS_7] = {
.species = SPECIES_METAGROSS,
.moves = {MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_ICE_PUNCH, MOVE_THUNDER_PUNCH},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_METAGROSS_8] = {
.species = SPECIES_METAGROSS,
.moves = {MOVE_METEOR_MASH, MOVE_EARTHQUAKE, MOVE_BRICK_BREAK, MOVE_EXPLOSION},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 170, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_REGIROCK_5] = {
.species = SPECIES_REGIROCK,
.moves = {MOVE_HYPER_BEAM, MOVE_FOCUS_PUNCH, MOVE_ROCK_SLIDE, MOVE_DOUBLE_TEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_REGIROCK_6] = {
.species = SPECIES_REGIROCK,
.moves = {MOVE_SWAGGER, MOVE_PSYCH_UP, MOVE_ROCK_SLIDE, MOVE_EXPLOSION},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_REGICE_5] = {
.species = SPECIES_REGICE,
.moves = {MOVE_EARTHQUAKE, MOVE_ICE_BEAM, MOVE_CURSE, MOVE_COUNTER},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 170, 0),
.nature = NATURE_BRAVE
},
[FRONTIER_MON_REGICE_6] = {
.species = SPECIES_REGICE,
.moves = {MOVE_ICE_BEAM, MOVE_THUNDERBOLT, MOVE_SLEEP_TALK, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_REGISTEEL_5] = {
.species = SPECIES_REGISTEEL,
.moves = {MOVE_FOCUS_PUNCH, MOVE_SUBSTITUTE, MOVE_TOXIC, MOVE_DOUBLE_TEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_REGISTEEL_6] = {
.species = SPECIES_REGISTEEL,
.moves = {MOVE_SUPERPOWER, MOVE_AERIAL_ACE, MOVE_SWAGGER, MOVE_PSYCH_UP},
- .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_WHITE_HERB,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_LATIAS_5] = {
.species = SPECIES_LATIAS,
.moves = {MOVE_DRAGON_CLAW, MOVE_THUNDER_WAVE, MOVE_CALM_MIND, MOVE_RECOVER},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_MODEST
},
[FRONTIER_MON_LATIAS_6] = {
.species = SPECIES_LATIAS,
.moves = {MOVE_MIST_BALL, MOVE_DRAGON_CLAW, MOVE_ATTRACT, MOVE_THUNDER_WAVE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_LATIAS_7] = {
.species = SPECIES_LATIAS,
.moves = {MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_SWAGGER, MOVE_PSYCH_UP},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(252, 0, 252, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_LATIAS_8] = {
.species = SPECIES_LATIAS,
.moves = {MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_EARTHQUAKE, MOVE_AERIAL_ACE},
- .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_KINGS_ROCK,
+ .ev = TRAINER_PARTY_EVS(0, 170, 0, 170, 170, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_LATIOS_5] = {
.species = SPECIES_LATIOS,
.moves = {MOVE_DRAGON_CLAW, MOVE_THUNDER_WAVE, MOVE_CALM_MIND, MOVE_RECOVER},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_MODEST
},
[FRONTIER_MON_LATIOS_6] = {
.species = SPECIES_LATIOS,
.moves = {MOVE_LUSTER_PURGE, MOVE_SHADOW_BALL, MOVE_DRAGON_CLAW, MOVE_THUNDER_WAVE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_LATIOS_7] = {
.species = SPECIES_LATIOS,
.moves = {MOVE_EARTHQUAKE, MOVE_SHADOW_BALL, MOVE_DRAGON_DANCE, MOVE_RECOVER},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(252, 0, 252, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_LATIOS_8] = {
.species = SPECIES_LATIOS,
.moves = {MOVE_PSYCHIC, MOVE_SHADOW_BALL, MOVE_EARTHQUAKE, MOVE_AERIAL_ACE},
- .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_KINGS_ROCK,
+ .ev = TRAINER_PARTY_EVS(0, 170, 0, 170, 170, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_DRAGONITE_1] = {
.species = SPECIES_DRAGONITE,
.moves = {MOVE_EARTHQUAKE, MOVE_AERIAL_ACE, MOVE_BRICK_BREAK, MOVE_DRAGON_DANCE},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_DRAGONITE_2] = {
.species = SPECIES_DRAGONITE,
.moves = {MOVE_EARTHQUAKE, MOVE_DOUBLE_EDGE, MOVE_AERIAL_ACE, MOVE_DRAGON_DANCE},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_DRAGONITE_3] = {
.species = SPECIES_DRAGONITE,
.moves = {MOVE_HYPER_BEAM, MOVE_ATTRACT, MOVE_DOUBLE_TEAM, MOVE_THUNDER_WAVE},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(0, 170, 170, 0, 0, 170),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_DRAGONITE_4] = {
.species = SPECIES_DRAGONITE,
.moves = {MOVE_HYPER_BEAM, MOVE_THUNDER_WAVE, MOVE_DRAGON_DANCE, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_DRAGONITE_5] = {
.species = SPECIES_DRAGONITE,
.moves = {MOVE_OUTRAGE, MOVE_DOUBLE_EDGE, MOVE_THUNDER_WAVE, MOVE_ROAR},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_DRAGONITE_6] = {
.species = SPECIES_DRAGONITE,
.moves = {MOVE_DRAGON_CLAW, MOVE_THUNDERBOLT, MOVE_SURF, MOVE_FLAMETHROWER},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_DRAGONITE_7] = {
.species = SPECIES_DRAGONITE,
.moves = {MOVE_DRAGON_CLAW, MOVE_THUNDERBOLT, MOVE_SURF, MOVE_ICE_BEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_DRAGONITE_8] = {
.species = SPECIES_DRAGONITE,
.moves = {MOVE_DRAGON_CLAW, MOVE_FLAMETHROWER, MOVE_ICE_BEAM, MOVE_BRICK_BREAK},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_DRAGONITE_9] = {
.species = SPECIES_DRAGONITE,
.moves = {MOVE_THUNDER, MOVE_SURF, MOVE_RAIN_DANCE, MOVE_EARTHQUAKE},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_DRAGONITE_10] = {
.species = SPECIES_DRAGONITE,
.moves = {MOVE_FIRE_BLAST, MOVE_BLIZZARD, MOVE_SUNNY_DAY, MOVE_EARTHQUAKE},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_TYRANITAR_1] = {
.species = SPECIES_TYRANITAR,
.moves = {MOVE_EARTHQUAKE, MOVE_AERIAL_ACE, MOVE_THUNDERBOLT, MOVE_SURF},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_TYRANITAR_2] = {
.species = SPECIES_TYRANITAR,
.moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_CRUNCH, MOVE_THUNDERBOLT},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_TYRANITAR_3] = {
.species = SPECIES_TYRANITAR,
.moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_COUNTER, MOVE_DRAGON_DANCE},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_TYRANITAR_4] = {
.species = SPECIES_TYRANITAR,
.moves = {MOVE_CRUNCH, MOVE_ICE_BEAM, MOVE_THUNDERBOLT, MOVE_FLAMETHROWER},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_TYRANITAR_5] = {
.species = SPECIES_TYRANITAR,
.moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_DRAGON_DANCE, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_TYRANITAR_6] = {
.species = SPECIES_TYRANITAR,
.moves = {MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_CURSE, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_TYRANITAR_7] = {
.species = SPECIES_TYRANITAR,
.moves = {MOVE_ROCK_SLIDE, MOVE_AERIAL_ACE, MOVE_BRICK_BREAK, MOVE_CURSE},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_TYRANITAR_8] = {
.species = SPECIES_TYRANITAR,
.moves = {MOVE_ROCK_SLIDE, MOVE_THUNDER_WAVE, MOVE_DRAGON_DANCE, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_TYRANITAR_9] = {
.species = SPECIES_TYRANITAR,
.moves = {MOVE_CRUNCH, MOVE_EARTHQUAKE, MOVE_AERIAL_ACE, MOVE_ATTRACT},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_HARDY
},
[FRONTIER_MON_TYRANITAR_10] = {
.species = SPECIES_TYRANITAR,
.moves = {MOVE_DOUBLE_EDGE, MOVE_EARTHQUAKE, MOVE_ROCK_SLIDE, MOVE_DRAGON_DANCE},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_ADAMANT
},
[FRONTIER_MON_ARTICUNO_5] = {
.species = SPECIES_ARTICUNO,
.moves = {MOVE_BLIZZARD, MOVE_DOUBLE_EDGE, MOVE_AGILITY, MOVE_SWAGGER},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_ARTICUNO_6] = {
.species = SPECIES_ARTICUNO,
.moves = {MOVE_ICE_BEAM, MOVE_AERIAL_ACE, MOVE_REFLECT, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_ZAPDOS_5] = {
.species = SPECIES_ZAPDOS,
.moves = {MOVE_THUNDERBOLT, MOVE_DRILL_PECK, MOVE_DOUBLE_EDGE, MOVE_THUNDER_WAVE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_ZAPDOS_6] = {
.species = SPECIES_ZAPDOS,
.moves = {MOVE_THUNDER, MOVE_DRILL_PECK, MOVE_RAIN_DANCE, MOVE_DOUBLE_EDGE},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 170, 0, 170, 170, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_MOLTRES_5] = {
.species = SPECIES_MOLTRES,
.moves = {MOVE_OVERHEAT, MOVE_SUNNY_DAY, MOVE_SWAGGER, MOVE_FACADE},
- .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_WHITE_HERB,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_MOLTRES_6] = {
.species = SPECIES_MOLTRES,
.moves = {MOVE_OVERHEAT, MOVE_DOUBLE_EDGE, MOVE_AERIAL_ACE, MOVE_STEEL_WING},
- .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_WHITE_HERB,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_RAIKOU_5] = {
.species = SPECIES_RAIKOU,
.moves = {MOVE_THUNDERBOLT, MOVE_DOUBLE_EDGE, MOVE_ROAR, MOVE_REFLECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_RAIKOU_6] = {
.species = SPECIES_RAIKOU,
.moves = {MOVE_THUNDERBOLT, MOVE_CALM_MIND, MOVE_SUBSTITUTE, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 252, 0, 0, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_ENTEI_5] = {
.species = SPECIES_ENTEI,
.moves = {MOVE_FIRE_BLAST, MOVE_DOUBLE_EDGE, MOVE_ENDURE, MOVE_REFLECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_SALAC_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_DOCILE
},
[FRONTIER_MON_ENTEI_6] = {
.species = SPECIES_ENTEI,
.moves = {MOVE_FLAMETHROWER, MOVE_CALM_MIND, MOVE_ROAR, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_MODEST
},
[FRONTIER_MON_SUICUNE_5] = {
.species = SPECIES_SUICUNE,
.moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_CALM_MIND, MOVE_ICY_WIND},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_MODEST
},
[FRONTIER_MON_SUICUNE_6] = {
.species = SPECIES_SUICUNE,
.moves = {MOVE_SURF, MOVE_ICE_BEAM, MOVE_CALM_MIND, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_MODEST
}
};
diff --git a/src/data/battle_frontier/battle_tent.h b/src/data/battle_frontier/battle_tent.h
index 46598b212045..4ee203ea9075 100644
--- a/src/data/battle_frontier/battle_tent.h
+++ b/src/data/battle_frontier/battle_tent.h
@@ -751,496 +751,496 @@ const struct BattleFrontierTrainer gSlateportBattleTentTrainers[NUM_BATTLE_TENT_
}
};
-const struct FacilityMon gSlateportBattleTentMons[NUM_SLATEPORT_TENT_MONS] =
+const struct TrainerMon gSlateportBattleTentMons[NUM_SLATEPORT_TENT_MONS] =
{
[SLATEPORT_TENT_MON_ZIGZAGOON_1] = {
.species = SPECIES_ZIGZAGOON,
.moves = {MOVE_TACKLE, MOVE_CHARM, MOVE_ODOR_SLEUTH, MOVE_PIN_MISSILE},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHOICE_BAND,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_CHOICE_BAND,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_JOLLY
},
[SLATEPORT_TENT_MON_ZIGZAGOON_2] = {
.species = SPECIES_ZIGZAGOON,
.moves = {MOVE_DIG, MOVE_MUD_SPORT, MOVE_TAIL_WHIP, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_JOLLY
},
[SLATEPORT_TENT_MON_BEAUTIFLY] = {
.species = SPECIES_BEAUTIFLY,
.moves = {MOVE_STUN_SPORE, MOVE_MEGA_DRAIN, MOVE_GUST, MOVE_HARDEN},
- .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_NONE,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[SLATEPORT_TENT_MON_DUSTOX] = {
.species = SPECIES_DUSTOX,
.moves = {MOVE_POISON_STING, MOVE_MOONLIGHT, MOVE_PROTECT, MOVE_GUST},
- .itemTableId = BATTLE_FRONTIER_ITEM_ORAN_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_ORAN_BERRY,
+ .ev = TRAINER_PARTY_EVS(128, 0, 128, 0, 128, 128),
.nature = NATURE_MODEST
},
[SLATEPORT_TENT_MON_WAILMER_1] = {
.species = SPECIES_WAILMER,
.moves = {MOVE_ROLLOUT, MOVE_CURSE, MOVE_GROWL, MOVE_WHIRLPOOL},
- .itemTableId = BATTLE_FRONTIER_ITEM_RAWST_BERRY,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_RAWST_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 170, 170, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[SLATEPORT_TENT_MON_WAILMER_2] = {
.species = SPECIES_WAILMER,
.moves = {MOVE_ROLLOUT, MOVE_GROWL, MOVE_WHIRLPOOL, MOVE_WATER_PULSE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 170, 0),
.nature = NATURE_MODEST
},
[SLATEPORT_TENT_MON_MARILL_1] = {
.species = SPECIES_MARILL,
.moves = {MOVE_ROLLOUT, MOVE_DEFENSE_CURL, MOVE_TAIL_WHIP, MOVE_BUBBLE_BEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_WHITE_HERB,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_IMPISH
},
[SLATEPORT_TENT_MON_WINGULL_1] = {
.species = SPECIES_WINGULL,
.moves = {MOVE_SUPERSONIC, MOVE_GROWL, MOVE_WING_ATTACK, MOVE_STEEL_WING},
- .itemTableId = BATTLE_FRONTIER_ITEM_METAL_COAT,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_METAL_COAT,
+ .ev = TRAINER_PARTY_EVS(0, 170, 0, 170, 170, 0),
.nature = NATURE_NAIVE
},
[SLATEPORT_TENT_MON_PELIPPER_1] = {
.species = SPECIES_PELIPPER,
.moves = {MOVE_TWISTER, MOVE_WATER_SPORT, MOVE_GROWL, MOVE_WING_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_DRAGON_FANG,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_DRAGON_FANG,
+ .ev = TRAINER_PARTY_EVS(0, 0, 170, 0, 170, 170),
.nature = NATURE_MODEST
},
[SLATEPORT_TENT_MON_CACNEA_1] = {
.species = SPECIES_CACNEA,
.moves = {MOVE_SANDSTORM, MOVE_LEER, MOVE_LEECH_SEED, MOVE_PIN_MISSILE},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 0, 0),
.nature = NATURE_JOLLY
},
[SLATEPORT_TENT_MON_LOMBRE_1] = {
.species = SPECIES_LOMBRE,
.moves = {MOVE_ASTONISH, MOVE_WATER_GUN, MOVE_FAKE_OUT, MOVE_ABSORB},
- .itemTableId = BATTLE_FRONTIER_ITEM_MIRACLE_SEED,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_MIRACLE_SEED,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_MODEST
},
[SLATEPORT_TENT_MON_LOTAD] = {
.species = SPECIES_LOTAD,
.moves = {MOVE_SYNTHESIS, MOVE_NATURE_POWER, MOVE_RAIN_DANCE, MOVE_MEGA_DRAIN},
- .itemTableId = BATTLE_FRONTIER_ITEM_MYSTIC_WATER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_MYSTIC_WATER,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 170, 0),
.nature = NATURE_DOCILE
},
[SLATEPORT_TENT_MON_SEEDOT] = {
.species = SPECIES_SEEDOT,
.moves = {MOVE_SUNNY_DAY, MOVE_SYNTHESIS, MOVE_LEECH_SEED, MOVE_BIDE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SALAC_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_TIMID
},
[SLATEPORT_TENT_MON_NUZLEAF] = {
.species = SPECIES_NUZLEAF,
.moves = {MOVE_FAKE_OUT, MOVE_NATURE_POWER, MOVE_HARDEN, MOVE_ATTRACT},
- .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_NONE,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_LONELY
},
[SLATEPORT_TENT_MON_NINJASK_1] = {
.species = SPECIES_NINJASK,
.moves = {MOVE_FURY_CUTTER, MOVE_SCREECH, MOVE_SWORDS_DANCE, MOVE_DOUBLE_TEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_NONE,
+ .ev = TRAINER_PARTY_EVS(102, 0, 102, 102, 102, 102),
.nature = NATURE_QUIRKY
},
[SLATEPORT_TENT_MON_NINJASK_2] = {
.species = SPECIES_NINJASK,
.moves = {MOVE_FURY_CUTTER, MOVE_DOUBLE_TEAM, MOVE_SCREECH, MOVE_SAND_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_SILVER_POWDER,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SILVER_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 252, 252, 0, 0, 0),
.nature = NATURE_NAUGHTY
},
[SLATEPORT_TENT_MON_GRAVELER] = {
.species = SPECIES_GRAVELER,
.moves = {MOVE_MUD_SPORT, MOVE_BLOCK, MOVE_ROCK_TOMB, MOVE_MAGNITUDE},
- .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_NONE,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 0, 0, 170),
.nature = NATURE_BRAVE
},
[SLATEPORT_TENT_MON_BALTOY] = {
.species = SPECIES_BALTOY,
.moves = {MOVE_SELF_DESTRUCT, MOVE_ANCIENT_POWER, MOVE_PSYBEAM, MOVE_REFLECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_NONE,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_NAIVE
},
[SLATEPORT_TENT_MON_MIGHTYENA_1] = {
.species = SPECIES_MIGHTYENA,
.moves = {MOVE_BITE, MOVE_ROAR, MOVE_SWAGGER, MOVE_TACKLE},
- .itemTableId = BATTLE_FRONTIER_ITEM_BLACK_GLASSES,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BLACK_GLASSES,
+ .ev = TRAINER_PARTY_EVS(170, 0, 0, 170, 170, 0),
.nature = NATURE_CALM
},
[SLATEPORT_TENT_MON_MIGHTYENA_2] = {
.species = SPECIES_MIGHTYENA,
.moves = {MOVE_ODOR_SLEUTH, MOVE_HOWL, MOVE_SAND_ATTACK, MOVE_POISON_FANG},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHELL_BELL,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SHELL_BELL,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_LONELY
},
[SLATEPORT_TENT_MON_LINOONE] = {
.species = SPECIES_LINOONE,
.moves = {MOVE_HEADBUTT, MOVE_TICKLE, MOVE_TAIL_WHIP, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_MENTAL_HERB,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_MENTAL_HERB,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 0, 0, 170),
.nature = NATURE_JOLLY
},
[SLATEPORT_TENT_MON_GOLDEEN] = {
.species = SPECIES_GOLDEEN,
.moves = {MOVE_WATER_SPORT, MOVE_HORN_ATTACK, MOVE_WATERFALL, MOVE_SUPERSONIC},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(0, 0, 170, 0, 170, 170),
.nature = NATURE_CALM
},
[SLATEPORT_TENT_MON_ELECTRIKE_1] = {
.species = SPECIES_ELECTRIKE,
.moves = {MOVE_BITE, MOVE_SPARK, MOVE_ROAR, MOVE_FLASH},
- .itemTableId = BATTLE_FRONTIER_ITEM_MAGNET,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_MAGNET,
+ .ev = TRAINER_PARTY_EVS(0, 170, 170, 170, 0, 0),
.nature = NATURE_MODEST
},
[SLATEPORT_TENT_MON_VOLTORB] = {
.species = SPECIES_VOLTORB,
.moves = {MOVE_SPARK, MOVE_ROLLOUT, MOVE_CHARGE, MOVE_SCREECH},
- .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK,
+ .heldItem = ITEM_NONE,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 0, 252, 252),
.nature = NATURE_MILD
},
[SLATEPORT_TENT_MON_ARON_1] = {
.species = SPECIES_ARON,
.moves = {MOVE_DIG, MOVE_METAL_CLAW, MOVE_IRON_DEFENSE, MOVE_ENDEAVOR},
- .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_NONE,
+ .ev = TRAINER_PARTY_EVS(170, 170, 170, 0, 0, 0),
.nature = NATURE_NAUGHTY
},
[SLATEPORT_TENT_MON_ARON_2] = {
.species = SPECIES_ARON,
.moves = {MOVE_MUD_SLAP, MOVE_IRON_TAIL, MOVE_HARDEN, MOVE_ROAR},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEPPA_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEPPA_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 0, 0, 170, 170),
.nature = NATURE_MODEST
},
[SLATEPORT_TENT_MON_TRAPINCH_1] = {
.species = SPECIES_TRAPINCH,
.moves = {MOVE_BODY_SLAM, MOVE_FOCUS_ENERGY, MOVE_SAND_TOMB, MOVE_SAND_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_NONE,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_BRAVE
},
[SLATEPORT_TENT_MON_CACNEA_2] = {
.species = SPECIES_CACNEA,
.moves = {MOVE_INGRAIN, MOVE_SANDSTORM, MOVE_POISON_STING, MOVE_DESTINY_BOND},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 252, 0, 0),
.nature = NATURE_TIMID
},
[SLATEPORT_TENT_MON_TAILLOW] = {
.species = SPECIES_TAILLOW,
.moves = {MOVE_GROWL, MOVE_AERIAL_ACE, MOVE_AGILITY, MOVE_ENDEAVOR},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHARP_BEAK,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SHARP_BEAK,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_ADAMANT
},
[SLATEPORT_TENT_MON_SWELLOW] = {
.species = SPECIES_SWELLOW,
.moves = {MOVE_SUPERSONIC, MOVE_GROWL, MOVE_FOCUS_ENERGY, MOVE_PECK},
- .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_NONE,
+ .ev = TRAINER_PARTY_EVS(170, 170, 170, 0, 0, 0),
.nature = NATURE_IMPISH
},
[SLATEPORT_TENT_MON_GOLBAT_1] = {
.species = SPECIES_GOLBAT,
.moves = {MOVE_ASTONISH, MOVE_GUST, MOVE_MEAN_LOOK, MOVE_CONFUSE_RAY},
- .itemTableId = BATTLE_FRONTIER_ITEM_SPELL_TAG,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_SPELL_TAG,
+ .ev = TRAINER_PARTY_EVS(0, 0, 170, 170, 0, 170),
.nature = NATURE_TIMID
},
[SLATEPORT_TENT_MON_LOUDRED] = {
.species = SPECIES_LOUDRED,
.moves = {MOVE_ASTONISH, MOVE_SCREECH, MOVE_UPROAR, MOVE_SUPERSONIC},
- .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_NONE,
+ .ev = TRAINER_PARTY_EVS(170, 170, 170, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[SLATEPORT_TENT_MON_SPINDA] = {
.species = SPECIES_SPINDA,
.moves = {MOVE_DIZZY_PUNCH, MOVE_FEINT_ATTACK, MOVE_HYPNOSIS, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 170, 170, 0, 0, 170),
.nature = NATURE_ADAMANT
},
[SLATEPORT_TENT_MON_MAGNEMITE] = {
.species = SPECIES_MAGNEMITE,
.moves = {MOVE_METAL_SOUND, MOVE_SUPERSONIC, MOVE_THUNDER_WAVE, MOVE_SPARK},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_SERIOUS
},
[SLATEPORT_TENT_MON_WHISMUR] = {
.species = SPECIES_WHISMUR,
.moves = {MOVE_REST, MOVE_SLEEP_TALK, MOVE_HOWL, MOVE_BODY_SLAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_SILK_SCARF,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SILK_SCARF,
+ .ev = TRAINER_PARTY_EVS(128, 128, 128, 0, 0, 128),
.nature = NATURE_ADAMANT
},
[SLATEPORT_TENT_MON_MAKUHITA] = {
.species = SPECIES_MAKUHITA,
.moves = {MOVE_SAND_ATTACK, MOVE_KNOCK_OFF, MOVE_ARM_THRUST, MOVE_BELLY_DRUM},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[SLATEPORT_TENT_MON_NUMEL_1] = {
.species = SPECIES_NUMEL,
.moves = {MOVE_EMBER, MOVE_TAKE_DOWN, MOVE_GROWL, MOVE_FOCUS_ENERGY},
- .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_NONE,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_MODEST
},
[SLATEPORT_TENT_MON_BARBOACH] = {
.species = SPECIES_BARBOACH,
.moves = {MOVE_MAGNITUDE, MOVE_MUD_SPORT, MOVE_WATER_SPORT, MOVE_WATER_GUN},
- .itemTableId = BATTLE_FRONTIER_ITEM_SEA_INCENSE,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SEA_INCENSE,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_JOLLY
},
[SLATEPORT_TENT_MON_TENTACOOL] = {
.species = SPECIES_TENTACOOL,
.moves = {MOVE_SCREECH, MOVE_BUBBLE_BEAM, MOVE_ACID, MOVE_BARRIER},
- .itemTableId = BATTLE_FRONTIER_ITEM_POISON_BARB,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_POISON_BARB,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[SLATEPORT_TENT_MON_VIGOROTH] = {
.species = SPECIES_VIGOROTH,
.moves = {MOVE_FOCUS_ENERGY, MOVE_FURY_SWIPES, MOVE_ENDURE, MOVE_YAWN},
- .itemTableId = BATTLE_FRONTIER_ITEM_AGUAV_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_AGUAV_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[SLATEPORT_TENT_MON_MAGIKARP] = {
.species = SPECIES_MAGIKARP,
.moves = {MOVE_TACKLE, MOVE_FLAIL, MOVE_SPLASH, MOVE_NONE},
- .itemTableId = BATTLE_FRONTIER_ITEM_DRAGON_SCALE,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_DRAGON_SCALE,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[SLATEPORT_TENT_MON_SEVIPER_1] = {
.species = SPECIES_SEVIPER,
.moves = {MOVE_LICK, MOVE_POISON_FANG, MOVE_GLARE, MOVE_WRAP},
- .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_NONE,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 0, 170, 0),
.nature = NATURE_ADAMANT
},
[SLATEPORT_TENT_MON_SOLROCK] = {
.species = SPECIES_SOLROCK,
.moves = {MOVE_ROCK_THROW, MOVE_HARDEN, MOVE_PSYWAVE, MOVE_TACKLE},
- .itemTableId = BATTLE_FRONTIER_ITEM_HARD_STONE,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_HARD_STONE,
+ .ev = TRAINER_PARTY_EVS(0, 170, 170, 0, 0, 170),
.nature = NATURE_ADAMANT
},
[SLATEPORT_TENT_MON_KECLEON_1] = {
.species = SPECIES_KECLEON,
.moves = {MOVE_PSYBEAM, MOVE_SUBSTITUTE, MOVE_THIEF, MOVE_TAIL_WHIP},
- .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .heldItem = ITEM_NONE,
+ .ev = TRAINER_PARTY_EVS(170, 0, 0, 170, 170, 0),
.nature = NATURE_MODEST
},
[SLATEPORT_TENT_MON_KECLEON_2] = {
.species = SPECIES_KECLEON,
.moves = {MOVE_FEINT_ATTACK, MOVE_ASTONISH, MOVE_LICK, MOVE_SCREECH},
- .itemTableId = BATTLE_FRONTIER_ITEM_IAPAPA_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_IAPAPA_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_CALM
},
[SLATEPORT_TENT_MON_SHROOMISH_1] = {
.species = SPECIES_SHROOMISH,
.moves = {MOVE_STUN_SPORE, MOVE_TACKLE, MOVE_LEECH_SEED, MOVE_MEGA_DRAIN},
- .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_PERSIM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[SLATEPORT_TENT_MON_SHROOMISH_2] = {
.species = SPECIES_SHROOMISH,
.moves = {MOVE_ABSORB, MOVE_STUN_SPORE, MOVE_SPORE, MOVE_LEECH_SEED},
- .itemTableId = BATTLE_FRONTIER_ITEM_FIGY_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_FIGY_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 0, 0),
.nature = NATURE_BRAVE
},
[SLATEPORT_TENT_MON_LOMBRE_2] = {
.species = SPECIES_LOMBRE,
.moves = {MOVE_NATURE_POWER, MOVE_ASTONISH, MOVE_GROWL, MOVE_ABSORB},
- .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_NONE,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_LONELY
},
[SLATEPORT_TENT_MON_NUMEL_2] = {
.species = SPECIES_NUMEL,
.moves = {MOVE_EMBER, MOVE_GROWL, MOVE_EARTHQUAKE, MOVE_SUNNY_DAY},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHARCOAL,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_CHARCOAL,
+ .ev = TRAINER_PARTY_EVS(0, 0, 170, 0, 170, 170),
.nature = NATURE_MODEST
},
[SLATEPORT_TENT_MON_TRAPINCH_2] = {
.species = SPECIES_TRAPINCH,
.moves = {MOVE_FEINT_ATTACK, MOVE_DIG, MOVE_BITE, MOVE_QUICK_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_ASPEAR_BERRY,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_ASPEAR_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 170, 170, 0, 0, 0),
.nature = NATURE_BRAVE
},
[SLATEPORT_TENT_MON_PELIPPER_2] = {
.species = SPECIES_PELIPPER,
.moves = {MOVE_WING_ATTACK, MOVE_SUPERSONIC, MOVE_MIST, MOVE_AGILITY},
- .itemTableId = BATTLE_FRONTIER_ITEM_WIKI_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_WIKI_BERRY,
+ .ev = TRAINER_PARTY_EVS(128, 0, 128, 128, 0, 128),
.nature = NATURE_ADAMANT
},
[SLATEPORT_TENT_MON_WINGULL_2] = {
.species = SPECIES_WINGULL,
.moves = {MOVE_WATER_GUN, MOVE_SUPERSONIC, MOVE_GROWL, MOVE_ICY_WIND},
- .itemTableId = BATTLE_FRONTIER_ITEM_NEVER_MELT_ICE,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_NEVER_MELT_ICE,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_ADAMANT
},
[SLATEPORT_TENT_MON_MARILL_2] = {
.species = SPECIES_MARILL,
.moves = {MOVE_DOUBLE_EDGE, MOVE_RAIN_DANCE, MOVE_TAIL_WHIP, MOVE_WATER_GUN},
- .itemTableId = BATTLE_FRONTIER_ITEM_GANLON_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_GANLON_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_MODEST
},
[SLATEPORT_TENT_MON_SKITTY] = {
.species = SPECIES_SKITTY,
.moves = {MOVE_ASSIST, MOVE_ATTRACT, MOVE_SING, MOVE_CHARM},
- .itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PETAYA_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 170, 170, 0, 0, 0),
.nature = NATURE_CAREFUL
},
[SLATEPORT_TENT_MON_SEVIPER_2] = {
.species = SPECIES_SEVIPER,
.moves = {MOVE_SWAGGER, MOVE_WRAP, MOVE_POISON_TAIL, MOVE_HAZE},
- .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_NONE,
+ .ev = TRAINER_PARTY_EVS(0, 0, 170, 0, 170, 170),
.nature = NATURE_BRAVE
},
[SLATEPORT_TENT_MON_GOLBAT_2] = {
.species = SPECIES_GOLBAT,
.moves = {MOVE_BITE, MOVE_TORMENT, MOVE_SCREECH, MOVE_POISON_FANG},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 252, 0, 0),
.nature = NATURE_HARDY
},
[SLATEPORT_TENT_MON_RALTS] = {
.species = SPECIES_RALTS,
.moves = {MOVE_HYPNOSIS, MOVE_IMPRISON, MOVE_PSYCHIC, MOVE_DREAM_EATER},
- .itemTableId = BATTLE_FRONTIER_ITEM_MAGO_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_MAGO_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_TIMID
},
[SLATEPORT_TENT_MON_SANDSHREW] = {
.species = SPECIES_SANDSHREW,
.moves = {MOVE_SLASH, MOVE_SAND_ATTACK, MOVE_SAND_TOMB, MOVE_DEFENSE_CURL},
- .itemTableId = BATTLE_FRONTIER_ITEM_SOFT_SAND,
- .evSpread = 0,
+ .heldItem = ITEM_SOFT_SAND,
+ .ev = NULL,
.nature = NATURE_HARDY
},
[SLATEPORT_TENT_MON_SWALOT] = {
.species = SPECIES_SWALOT,
.moves = {MOVE_YAWN, MOVE_SLUDGE, MOVE_ENCORE, MOVE_POUND},
- .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_NONE,
+ .ev = TRAINER_PARTY_EVS(0, 170, 170, 0, 0, 170),
.nature = NATURE_IMPISH
},
[SLATEPORT_TENT_MON_VOLBEAT] = {
.species = SPECIES_VOLBEAT,
.moves = {MOVE_TACKLE, MOVE_CONFUSE_RAY, MOVE_QUICK_ATTACK, MOVE_DOUBLE_TEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_NONE,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 0, 252),
.nature = NATURE_HARDY
},
[SLATEPORT_TENT_MON_ILLUMISE] = {
.species = SPECIES_ILLUMISE,
.moves = {MOVE_CHARM, MOVE_TACKLE, MOVE_ENCORE, MOVE_MOONLIGHT},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHERI_BERRY,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHERI_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 170, 0, 0),
.nature = NATURE_ADAMANT
},
[SLATEPORT_TENT_MON_KADABRA] = {
.species = SPECIES_KADABRA,
.moves = {MOVE_DISABLE, MOVE_CONFUSION, MOVE_REFLECT, MOVE_RECOVER},
- .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_NONE,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_QUIRKY
},
[SLATEPORT_TENT_MON_KIRLIA] = {
.species = SPECIES_KIRLIA,
.moves = {MOVE_CALM_MIND, MOVE_CONFUSION, MOVE_DOUBLE_TEAM, MOVE_GROWL},
- .itemTableId = BATTLE_FRONTIER_ITEM_TWISTED_SPOON,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_TWISTED_SPOON,
+ .ev = TRAINER_PARTY_EVS(128, 128, 128, 0, 0, 128),
.nature = NATURE_CAREFUL
},
[SLATEPORT_TENT_MON_BRELOOM] = {
.species = SPECIES_BRELOOM,
.moves = {MOVE_ABSORB, MOVE_TACKLE, MOVE_STUN_SPORE, MOVE_MEGA_DRAIN},
- .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_NONE,
+ .ev = TRAINER_PARTY_EVS(170, 170, 170, 0, 0, 0),
.nature = NATURE_NAIVE
},
[SLATEPORT_TENT_MON_PLUSLE_1] = {
.species = SPECIES_PLUSLE,
.moves = {MOVE_SPARK, MOVE_ENCORE, MOVE_THUNDER_WAVE, MOVE_GROWL},
- .itemTableId = BATTLE_FRONTIER_ITEM_LIECHI_BERRY,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_LIECHI_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_LONELY
},
[SLATEPORT_TENT_MON_PLUSLE_2] = {
.species = SPECIES_PLUSLE,
.moves = {MOVE_SPARK, MOVE_FAKE_TEARS, MOVE_SUBSTITUTE, MOVE_QUICK_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_PECHA_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PECHA_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_MILD
},
[SLATEPORT_TENT_MON_ELECTRIKE_2] = {
.species = SPECIES_ELECTRIKE,
.moves = {MOVE_SPARK, MOVE_CHARGE, MOVE_ROAR, MOVE_THUNDER_WAVE},
- .itemTableId = BATTLE_FRONTIER_ITEM_APICOT_BERRY,
- .evSpread = F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_APICOT_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 0, 0),
.nature = NATURE_TIMID
},
[SLATEPORT_TENT_MON_SWABLU] = {
.species = SPECIES_SWABLU,
.moves = {MOVE_SING, MOVE_PECK, MOVE_STEEL_WING, MOVE_SAFEGUARD},
- .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_NONE,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_JOLLY
},
[SLATEPORT_TENT_MON_MACHOP] = {
.species = SPECIES_MACHOP,
.moves = {MOVE_FOCUS_ENERGY, MOVE_VITAL_THROW, MOVE_SEISMIC_TOSS, MOVE_FORESIGHT},
- .itemTableId = BATTLE_FRONTIER_ITEM_BLACK_BELT,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_BLACK_BELT,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_ADAMANT
},
[SLATEPORT_TENT_MON_MACHOKE] = {
.species = SPECIES_MACHOKE,
.moves = {MOVE_FOCUS_ENERGY, MOVE_LEER, MOVE_KARATE_CHOP, MOVE_FORESIGHT},
- .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_NONE,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_MODEST
}
};
@@ -1804,321 +1804,321 @@ const struct BattleFrontierTrainer gVerdanturfBattleTentTrainers[NUM_BATTLE_TENT
}
};
-const struct FacilityMon gVerdanturfBattleTentMons[NUM_VERDANTURF_TENT_MONS] =
+const struct TrainerMon gVerdanturfBattleTentMons[NUM_VERDANTURF_TENT_MONS] =
{
[VERDANTURF_TENT_MON_POOCHYENA] = {
.species = SPECIES_POOCHYENA,
.moves = {MOVE_ROAR, MOVE_THIEF, MOVE_BITE, MOVE_HOWL},
- .itemTableId = BATTLE_FRONTIER_ITEM_BLACK_GLASSES,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BLACK_GLASSES,
+ .ev = TRAINER_PARTY_EVS(102, 102, 102, 102, 0, 102),
.nature = NATURE_NAUGHTY
},
[VERDANTURF_TENT_MON_ZIGZAGOON] = {
.species = SPECIES_ZIGZAGOON,
.moves = {MOVE_COVET, MOVE_GROWL, MOVE_PIN_MISSILE, MOVE_MUD_SPORT},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[VERDANTURF_TENT_MON_DUSTOX] = {
.species = SPECIES_DUSTOX,
.moves = {MOVE_CONFUSION, MOVE_MOONLIGHT, MOVE_PROTECT, MOVE_FLASH},
- .itemTableId = BATTLE_FRONTIER_ITEM_SILVER_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_SILVER_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 0, 170, 170, 170, 0),
.nature = NATURE_MODEST
},
[VERDANTURF_TENT_MON_TAILLOW] = {
.species = SPECIES_TAILLOW,
.moves = {MOVE_AGILITY, MOVE_DOUBLE_TEAM, MOVE_WING_ATTACK, MOVE_GROWL},
- .itemTableId = BATTLE_FRONTIER_ITEM_ORAN_BERRY,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_ORAN_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 170, 0, 0),
.nature = NATURE_RELAXED
},
[VERDANTURF_TENT_MON_SHROOMISH] = {
.species = SPECIES_SHROOMISH,
.moves = {MOVE_HEADBUTT, MOVE_STUN_SPORE, MOVE_LEECH_SEED, MOVE_FLASH},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 252, 0, 0),
.nature = NATURE_RASH
},
[VERDANTURF_TENT_MON_MACHOP] = {
.species = SPECIES_MACHOP,
.moves = {MOVE_LOW_KICK, MOVE_LEER, MOVE_FOCUS_ENERGY, MOVE_ENCORE},
- .itemTableId = BATTLE_FRONTIER_ITEM_PERSIM_BERRY,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_PERSIM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 170, 170, 170, 0, 0),
.nature = NATURE_LONELY
},
[VERDANTURF_TENT_MON_MAGIKARP] = {
.species = SPECIES_MAGIKARP,
.moves = {MOVE_SPLASH, MOVE_FLAIL, MOVE_TACKLE, MOVE_NONE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SILK_SCARF,
- .evSpread = F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SILK_SCARF,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 0, 0),
.nature = NATURE_HARDY
},
[VERDANTURF_TENT_MON_BARBOACH] = {
.species = SPECIES_BARBOACH,
.moves = {MOVE_MUD_SLAP, MOVE_WATER_GUN, MOVE_RAIN_DANCE, MOVE_SPARK},
- .itemTableId = BATTLE_FRONTIER_ITEM_ASPEAR_BERRY,
- .evSpread = F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_ASPEAR_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 0, 0),
.nature = NATURE_HASTY
},
[VERDANTURF_TENT_MON_WINGULL] = {
.species = SPECIES_WINGULL,
.moves = {MOVE_ATTRACT, MOVE_TWISTER, MOVE_WING_ATTACK, MOVE_SUPERSONIC},
- .itemTableId = BATTLE_FRONTIER_ITEM_DRAGON_FANG,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_DRAGON_FANG,
+ .ev = TRAINER_PARTY_EVS(0, 170, 170, 0, 0, 170),
.nature = NATURE_IMPISH
},
[VERDANTURF_TENT_MON_ARON_1] = {
.species = SPECIES_ARON,
.moves = {MOVE_ENDEAVOR, MOVE_METAL_CLAW, MOVE_TACKLE, MOVE_ATTRACT},
- .itemTableId = BATTLE_FRONTIER_ITEM_PECHA_BERRY,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_PECHA_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 252, 0, 0, 0),
.nature = NATURE_HARDY
},
[VERDANTURF_TENT_MON_NUMEL_1] = {
.species = SPECIES_NUMEL,
.moves = {MOVE_EMBER, MOVE_ROCK_SLIDE, MOVE_ROLLOUT, MOVE_GROWL},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHARCOAL,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_CHARCOAL,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_SASSY
},
[VERDANTURF_TENT_MON_SWALOT] = {
.species = SPECIES_SWALOT,
.moves = {MOVE_YAWN, MOVE_SLUDGE, MOVE_ACID_ARMOR, MOVE_AMNESIA},
- .itemTableId = BATTLE_FRONTIER_ITEM_POISON_BARB,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_POISON_BARB,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_BOLD
},
[VERDANTURF_TENT_MON_KECLEON] = {
.species = SPECIES_KECLEON,
.moves = {MOVE_SUBSTITUTE, MOVE_FEINT_ATTACK, MOVE_DOUBLE_TEAM, MOVE_BIND},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_QUIET
},
[VERDANTURF_TENT_MON_BALTOY] = {
.species = SPECIES_BALTOY,
.moves = {MOVE_SANDSTORM, MOVE_FLASH, MOVE_SELF_DESTRUCT, MOVE_HARDEN},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(0, 170, 170, 0, 0, 170),
.nature = NATURE_NAUGHTY
},
[VERDANTURF_TENT_MON_NINJASK] = {
.species = SPECIES_NINJASK,
.moves = {MOVE_DIG, MOVE_SCREECH, MOVE_SWORDS_DANCE, MOVE_LEECH_LIFE},
- .itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PETAYA_BERRY,
+ .ev = TRAINER_PARTY_EVS(102, 0, 102, 102, 102, 102),
.nature = NATURE_SASSY
},
[VERDANTURF_TENT_MON_MAKUHITA] = {
.species = SPECIES_MAKUHITA,
.moves = {MOVE_BULK_UP, MOVE_ARM_THRUST, MOVE_SMELLING_SALTS, MOVE_SAND_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SALAC_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 252, 0, 0, 0),
.nature = NATURE_NAUGHTY
},
[VERDANTURF_TENT_MON_SWABLU] = {
.species = SPECIES_SWABLU,
.moves = {MOVE_REFRESH, MOVE_SAFEGUARD, MOVE_ATTRACT, MOVE_MIRROR_MOVE},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MILD
},
[VERDANTURF_TENT_MON_GOLDEEN_1] = {
.species = SPECIES_GOLDEEN,
.moves = {MOVE_WATERFALL, MOVE_MUD_SPORT, MOVE_SUPERSONIC, MOVE_DOUBLE_TEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_MYSTIC_WATER,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_MYSTIC_WATER,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_GENTLE
},
[VERDANTURF_TENT_MON_LOTAD] = {
.species = SPECIES_LOTAD,
.moves = {MOVE_GROWL, MOVE_WATER_GUN, MOVE_MEGA_DRAIN, MOVE_PROTECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_IAPAPA_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_IAPAPA_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_QUIRKY
},
[VERDANTURF_TENT_MON_NUMEL_2] = {
.species = SPECIES_NUMEL,
.moves = {MOVE_MAGNITUDE, MOVE_EMBER, MOVE_GROWL, MOVE_DEFENSE_CURL},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHARCOAL,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_CHARCOAL,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_RELAXED
},
[VERDANTURF_TENT_MON_LINOONE] = {
.species = SPECIES_LINOONE,
.moves = {MOVE_HEADBUTT, MOVE_TICKLE, MOVE_PROTECT, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(128, 128, 128, 0, 0, 128),
.nature = NATURE_IMPISH
},
[VERDANTURF_TENT_MON_SEVIPER] = {
.species = SPECIES_SEVIPER,
.moves = {MOVE_WRAP, MOVE_GLARE, MOVE_POISON_FANG, MOVE_SWAGGER},
- .itemTableId = BATTLE_FRONTIER_ITEM_ASPEAR_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_ASPEAR_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 0, 0, 170, 170),
.nature = NATURE_LONELY
},
[VERDANTURF_TENT_MON_SKARMORY] = {
.species = SPECIES_SKARMORY,
.moves = {MOVE_AIR_CUTTER, MOVE_SANDSTORM, MOVE_LEER, MOVE_AGILITY},
- .itemTableId = BATTLE_FRONTIER_ITEM_MACHO_BRACE,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_MACHO_BRACE,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 0, 252),
.nature = NATURE_BASHFUL
},
[VERDANTURF_TENT_MON_SWELLOW] = {
.species = SPECIES_SWELLOW,
.moves = {MOVE_AGILITY, MOVE_WING_ATTACK, MOVE_DOUBLE_TEAM, MOVE_SUPERSONIC},
- .itemTableId = BATTLE_FRONTIER_ITEM_SHARP_BEAK,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SHARP_BEAK,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_NAUGHTY
},
[VERDANTURF_TENT_MON_GOLDEEN_2] = {
.species = SPECIES_GOLDEEN,
.moves = {MOVE_PECK, MOVE_SUPERSONIC, MOVE_PSYBEAM, MOVE_RAIN_DANCE},
- .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .heldItem = ITEM_KINGS_ROCK,
+ .ev = TRAINER_PARTY_EVS(170, 0, 0, 170, 170, 0),
.nature = NATURE_GENTLE
},
[VERDANTURF_TENT_MON_ELECTRIKE] = {
.species = SPECIES_ELECTRIKE,
.moves = {MOVE_SHOCK_WAVE, MOVE_TACKLE, MOVE_CHARGE, MOVE_THUNDER_WAVE},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_MILD
},
[VERDANTURF_TENT_MON_NUZLEAF] = {
.species = SPECIES_NUZLEAF,
.moves = {MOVE_SUNNY_DAY, MOVE_TORMENT, MOVE_FAKE_OUT, MOVE_THIEF},
- .itemTableId = BATTLE_FRONTIER_ITEM_BLACK_GLASSES,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BLACK_GLASSES,
+ .ev = TRAINER_PARTY_EVS(128, 0, 128, 0, 128, 128),
.nature = NATURE_BOLD
},
[VERDANTURF_TENT_MON_ARON_2] = {
.species = SPECIES_ARON,
.moves = {MOVE_TAKE_DOWN, MOVE_METAL_CLAW, MOVE_IRON_DEFENSE, MOVE_ATTRACT},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_MODEST
},
[VERDANTURF_TENT_MON_MIGHTYENA] = {
.species = SPECIES_MIGHTYENA,
.moves = {MOVE_HOWL, MOVE_TAKE_DOWN, MOVE_ODOR_SLEUTH, MOVE_SAND_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_KINGS_ROCK,
+ .ev = TRAINER_PARTY_EVS(170, 170, 170, 0, 0, 0),
.nature = NATURE_QUIRKY
},
[VERDANTURF_TENT_MON_SOLROCK] = {
.species = SPECIES_SOLROCK,
.moves = {MOVE_HARDEN, MOVE_FIRE_SPIN, MOVE_MIMIC, MOVE_PSYWAVE},
- .itemTableId = BATTLE_FRONTIER_ITEM_TWISTED_SPOON,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_TWISTED_SPOON,
+ .ev = TRAINER_PARTY_EVS(0, 128, 128, 0, 128, 128),
.nature = NATURE_ADAMANT
},
[VERDANTURF_TENT_MON_GRAVELER] = {
.species = SPECIES_GRAVELER,
.moves = {MOVE_ROLLOUT, MOVE_ROCK_SMASH, MOVE_SANDSTORM, MOVE_BLOCK},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(0, 252, 252, 0, 0, 0),
.nature = NATURE_IMPISH
},
[VERDANTURF_TENT_MON_KADABRA] = {
.species = SPECIES_KADABRA,
.moves = {MOVE_ENCORE, MOVE_PSYBEAM, MOVE_DISABLE, MOVE_KINESIS},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(170, 0, 0, 170, 170, 0),
.nature = NATURE_QUIET
},
[VERDANTURF_TENT_MON_VOLTORB] = {
.species = SPECIES_VOLTORB,
.moves = {MOVE_PROTECT, MOVE_SELF_DESTRUCT, MOVE_SPARK, MOVE_SCREECH},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_BASHFUL
},
[VERDANTURF_TENT_MON_MAGNEMITE] = {
.species = SPECIES_MAGNEMITE,
.moves = {MOVE_METAL_SOUND, MOVE_SUPERSONIC, MOVE_THUNDER_WAVE, MOVE_SHOCK_WAVE},
- .itemTableId = BATTLE_FRONTIER_ITEM_MAGNET,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_MAGNET,
+ .ev = TRAINER_PARTY_EVS(84, 84, 84, 84, 84, 84),
.nature = NATURE_SERIOUS
},
[VERDANTURF_TENT_MON_PELIPPER] = {
.species = SPECIES_PELIPPER,
.moves = {MOVE_WING_ATTACK, MOVE_MIST, MOVE_AGILITY, MOVE_PROTECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_FIGY_BERRY,
- .evSpread = 0,
+ .heldItem = ITEM_FIGY_BERRY,
+ .ev = NULL,
.nature = NATURE_BRAVE
},
[VERDANTURF_TENT_MON_LOUDRED] = {
.species = SPECIES_LOUDRED,
.moves = {MOVE_HOWL, MOVE_UPROAR, MOVE_REST, MOVE_SCREECH},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_CALM
},
[VERDANTURF_TENT_MON_MARILL] = {
.species = SPECIES_MARILL,
.moves = {MOVE_ROLLOUT, MOVE_DEFENSE_CURL, MOVE_TAIL_WHIP, MOVE_BUBBLE_BEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_RAWST_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_RAWST_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_JOLLY
},
[VERDANTURF_TENT_MON_TRAPINCH] = {
.species = SPECIES_TRAPINCH,
.moves = {MOVE_DIG, MOVE_ROCK_TOMB, MOVE_SANDSTORM, MOVE_FEINT_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_NONE,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_NONE,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 170, 0, 0),
.nature = NATURE_NAUGHTY
},
[VERDANTURF_TENT_MON_TENTACOOL] = {
.species = SPECIES_TENTACOOL,
.moves = {MOVE_SCREECH, MOVE_CONFUSE_RAY, MOVE_WRAP, MOVE_ATTRACT},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_RELAXED
},
[VERDANTURF_TENT_MON_VIGOROTH] = {
.species = SPECIES_VIGOROTH,
.moves = {MOVE_ENCORE, MOVE_SLACK_OFF, MOVE_YAWN, MOVE_SECRET_POWER},
- .itemTableId = BATTLE_FRONTIER_ITEM_MENTAL_HERB,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_MENTAL_HERB,
+ .ev = TRAINER_PARTY_EVS(0, 170, 170, 0, 0, 170),
.nature = NATURE_QUIRKY
},
[VERDANTURF_TENT_MON_WAILMER] = {
.species = SPECIES_WAILMER,
.moves = {MOVE_WATER_PULSE, MOVE_ROLLOUT, MOVE_CURSE, MOVE_PROTECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_WHITE_HERB,
- .evSpread = F_EV_SPREAD_HP,
+ .heldItem = ITEM_WHITE_HERB,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 0),
.nature = NATURE_RELAXED
},
[VERDANTURF_TENT_MON_ILLUMISE] = {
.species = SPECIES_ILLUMISE,
.moves = {MOVE_TACKLE, MOVE_SWEET_SCENT, MOVE_WISH, MOVE_ENCORE},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_QUIRKY
},
[VERDANTURF_TENT_MON_MACHOKE] = {
.species = SPECIES_MACHOKE,
.moves = {MOVE_LEER, MOVE_KARATE_CHOP, MOVE_BULK_UP, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_CALM
},
[VERDANTURF_TENT_MON_WHISMUR] = {
.species = SPECIES_WHISMUR,
.moves = {MOVE_SECRET_POWER, MOVE_SUPERSONIC, MOVE_STOMP, MOVE_ROAR},
- .itemTableId = BATTLE_FRONTIER_ITEM_RAWST_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_RAWST_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_QUIRKY
},
[VERDANTURF_TENT_MON_CACNEA] = {
.species = SPECIES_CACNEA,
.moves = {MOVE_INGRAIN, MOVE_LEECH_SEED, MOVE_NEEDLE_ARM, MOVE_GROWTH},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_SERIOUS
}
};
@@ -2685,321 +2685,321 @@ const struct BattleFrontierTrainer gFallarborBattleTentTrainers[NUM_BATTLE_TENT_
}
};
-const struct FacilityMon gFallarborBattleTentMons[NUM_FALLARBOR_TENT_MONS] =
+const struct TrainerMon gFallarborBattleTentMons[NUM_FALLARBOR_TENT_MONS] =
{
[FALLARBOR_TENT_MON_NUMEL] = {
.species = SPECIES_NUMEL,
.moves = {MOVE_GROWL, MOVE_FLAMETHROWER, MOVE_TACKLE, MOVE_SUNNY_DAY},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHARCOAL,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHARCOAL,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_QUIET
},
[FALLARBOR_TENT_MON_LINOONE_1] = {
.species = SPECIES_LINOONE,
.moves = {MOVE_ODOR_SLEUTH, MOVE_COVET, MOVE_ROCK_SMASH, MOVE_CHARM},
- .itemTableId = BATTLE_FRONTIER_ITEM_SILK_SCARF,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_SILK_SCARF,
+ .ev = TRAINER_PARTY_EVS(0, 0, 252, 0, 0, 252),
.nature = NATURE_SASSY
},
[FALLARBOR_TENT_MON_PLUSLE] = {
.species = SPECIES_PLUSLE,
.moves = {MOVE_SPARK, MOVE_GROWL, MOVE_QUICK_ATTACK, MOVE_FAKE_TEARS},
- .itemTableId = BATTLE_FRONTIER_ITEM_MENTAL_HERB,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_MENTAL_HERB,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FALLARBOR_TENT_MON_POOCHYENA] = {
.species = SPECIES_POOCHYENA,
.moves = {MOVE_YAWN, MOVE_ODOR_SLEUTH, MOVE_HOWL, MOVE_FRUSTRATION},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEPPA_BERRY,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_LEPPA_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_NAUGHTY
},
[FALLARBOR_TENT_MON_KECLEON] = {
.species = SPECIES_KECLEON,
.moves = {MOVE_LICK, MOVE_SLASH, MOVE_FEINT_ATTACK, MOVE_PSYBEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_WIKI_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_WIKI_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 170, 0, 170, 170, 0),
.nature = NATURE_MODEST
},
[FALLARBOR_TENT_MON_MAGIKARP] = {
.species = SPECIES_MAGIKARP,
.moves = {MOVE_SPLASH, MOVE_TACKLE, MOVE_FLAIL, MOVE_NONE},
- .itemTableId = BATTLE_FRONTIER_ITEM_DRAGON_SCALE,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_DRAGON_SCALE,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_QUIRKY
},
[FALLARBOR_TENT_MON_SOLROCK] = {
.species = SPECIES_SOLROCK,
.moves = {MOVE_ROCK_THROW, MOVE_FLASH, MOVE_SANDSTORM, MOVE_PSYWAVE},
- .itemTableId = BATTLE_FRONTIER_ITEM_HARD_STONE,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_HARD_STONE,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_SASSY
},
[FALLARBOR_TENT_MON_MAKUHITA] = {
.species = SPECIES_MAKUHITA,
.moves = {MOVE_DETECT, MOVE_ARM_THRUST, MOVE_FAKE_OUT, MOVE_SMELLING_SALTS},
- .itemTableId = BATTLE_FRONTIER_ITEM_BLACK_BELT,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BLACK_BELT,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_ADAMANT
},
[FALLARBOR_TENT_MON_MACHOKE] = {
.species = SPECIES_MACHOKE,
.moves = {MOVE_COUNTER, MOVE_REVENGE, MOVE_BULK_UP, MOVE_FOCUS_ENERGY},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(0, 170, 0, 170, 170, 0),
.nature = NATURE_NAIVE
},
[FALLARBOR_TENT_MON_NINCADA] = {
.species = SPECIES_NINCADA,
.moves = {MOVE_FURY_SWIPES, MOVE_ENDURE, MOVE_MUD_SLAP, MOVE_DIG},
- .itemTableId = BATTLE_FRONTIER_ITEM_LUM_BERRY,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_LUM_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_SERIOUS
},
[FALLARBOR_TENT_MON_BEAUTIFLY] = {
.species = SPECIES_BEAUTIFLY,
.moves = {MOVE_FLASH, MOVE_MORNING_SUN, MOVE_HARDEN, MOVE_MEGA_DRAIN},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(0, 128, 128, 128, 0, 128),
.nature = NATURE_QUIRKY
},
[FALLARBOR_TENT_MON_DUSTOX] = {
.species = SPECIES_DUSTOX,
.moves = {MOVE_MOONLIGHT, MOVE_HARDEN, MOVE_POISON_STING, MOVE_PSYBEAM},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(0, 0, 170, 170, 0, 170),
.nature = NATURE_DOCILE
},
[FALLARBOR_TENT_MON_ILLUMISE] = {
.species = SPECIES_ILLUMISE,
.moves = {MOVE_METRONOME, MOVE_FLATTER, MOVE_WISH, MOVE_ATTRACT},
- .itemTableId = BATTLE_FRONTIER_ITEM_SALAC_BERRY,
- .evSpread = F_EV_SPREAD_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SALAC_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 252, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FALLARBOR_TENT_MON_VOLBEAT] = {
.species = SPECIES_VOLBEAT,
.moves = {MOVE_TACKLE, MOVE_MOONLIGHT, MOVE_SIGNAL_BEAM, MOVE_TAIL_GLOW},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEPPA_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEPPA_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 0, 0, 170),
.nature = NATURE_ADAMANT
},
[FALLARBOR_TENT_MON_NINJASK_1] = {
.species = SPECIES_NINJASK,
.moves = {MOVE_DOUBLE_TEAM, MOVE_PROTECT, MOVE_DIG, MOVE_SAND_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PETAYA_BERRY,
+ .ev = TRAINER_PARTY_EVS(128, 0, 128, 128, 0, 128),
.nature = NATURE_TIMID
},
[FALLARBOR_TENT_MON_NINJASK_2] = {
.species = SPECIES_NINJASK,
.moves = {MOVE_SWORDS_DANCE, MOVE_CUT, MOVE_FURY_CUTTER, MOVE_LEECH_LIFE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SILVER_POWDER,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SILVER_POWDER,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FALLARBOR_TENT_MON_ARON_1] = {
.species = SPECIES_ARON,
.moves = {MOVE_METAL_CLAW, MOVE_PROTECT, MOVE_SHOCK_WAVE, MOVE_METAL_SOUND},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 0, 170, 0),
.nature = NATURE_LONELY
},
[FALLARBOR_TENT_MON_ARON_2] = {
.species = SPECIES_ARON,
.moves = {MOVE_SECRET_POWER, MOVE_METAL_CLAW, MOVE_IRON_DEFENSE, MOVE_MUD_SLAP},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_GENTLE
},
[FALLARBOR_TENT_MON_ELECTRIKE] = {
.species = SPECIES_ELECTRIKE,
.moves = {MOVE_CRUNCH, MOVE_THUNDER_WAVE, MOVE_HOWL, MOVE_QUICK_ATTACK},
- .itemTableId = BATTLE_FRONTIER_ITEM_SEA_INCENSE,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SEA_INCENSE,
+ .ev = TRAINER_PARTY_EVS(0, 170, 0, 170, 170, 0),
.nature = NATURE_HASTY
},
[FALLARBOR_TENT_MON_MAGNEMITE] = {
.species = SPECIES_MAGNEMITE,
.moves = {MOVE_THUNDER_WAVE, MOVE_SUPERSONIC, MOVE_ENDURE, MOVE_SPARK},
- .itemTableId = BATTLE_FRONTIER_ITEM_MAGNET,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_MAGNET,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_QUIET
},
[FALLARBOR_TENT_MON_VOLTORB] = {
.species = SPECIES_VOLTORB,
.moves = {MOVE_CHARGE, MOVE_SPARK, MOVE_SCREECH, MOVE_SONIC_BOOM},
- .itemTableId = BATTLE_FRONTIER_ITEM_ASPEAR_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_ASPEAR_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FALLARBOR_TENT_MON_WHISMUR] = {
.species = SPECIES_WHISMUR,
.moves = {MOVE_REST, MOVE_SLEEP_TALK, MOVE_HYPER_VOICE, MOVE_ATTRACT},
- .itemTableId = BATTLE_FRONTIER_ITEM_LAX_INCENSE,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LAX_INCENSE,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 170, 0, 0),
.nature = NATURE_ADAMANT
},
[FALLARBOR_TENT_MON_LOUDRED] = {
.species = SPECIES_LOUDRED,
.moves = {MOVE_STOMP, MOVE_REST, MOVE_SCREECH, MOVE_UPROAR},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FALLARBOR_TENT_MON_LINOONE_2] = {
.species = SPECIES_LINOONE,
.moves = {MOVE_FURY_SWIPES, MOVE_SAND_ATTACK, MOVE_SHOCK_WAVE, MOVE_GROWL},
- .itemTableId = BATTLE_FRONTIER_ITEM_MAGNET,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_MAGNET,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_MODEST
},
[FALLARBOR_TENT_MON_MIGHTYENA] = {
.species = SPECIES_MIGHTYENA,
.moves = {MOVE_SAND_ATTACK, MOVE_HOWL, MOVE_SWAGGER, MOVE_SECRET_POWER},
- .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_KINGS_ROCK,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 170, 0, 0),
.nature = NATURE_JOLLY
},
[FALLARBOR_TENT_MON_SWABLU] = {
.species = SPECIES_SWABLU,
.moves = {MOVE_TAKE_DOWN, MOVE_SING, MOVE_GROWL, MOVE_SAFEGUARD},
- .itemTableId = BATTLE_FRONTIER_ITEM_FOCUS_BAND,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_FOCUS_BAND,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_QUIRKY
},
[FALLARBOR_TENT_MON_SKARMORY] = {
.species = SPECIES_SKARMORY,
.moves = {MOVE_AGILITY, MOVE_STEEL_WING, MOVE_SAND_ATTACK, MOVE_TORMENT},
- .itemTableId = BATTLE_FRONTIER_ITEM_METAL_COAT,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_METAL_COAT,
+ .ev = TRAINER_PARTY_EVS(170, 170, 0, 0, 0, 170),
.nature = NATURE_BOLD
},
[FALLARBOR_TENT_MON_GOLBAT] = {
.species = SPECIES_GOLBAT,
.moves = {MOVE_CONFUSE_RAY, MOVE_BITE, MOVE_DOUBLE_TEAM, MOVE_SUBSTITUTE},
- .itemTableId = BATTLE_FRONTIER_ITEM_PETAYA_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_PETAYA_BERRY,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_BOLD
},
[FALLARBOR_TENT_MON_WINGULL] = {
.species = SPECIES_WINGULL,
.moves = {MOVE_WING_ATTACK, MOVE_HAIL, MOVE_DOUBLE_TEAM, MOVE_SUPERSONIC},
- .itemTableId = BATTLE_FRONTIER_ITEM_RAWST_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_SPEED,
+ .heldItem = ITEM_RAWST_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 0, 0, 252, 252, 0),
.nature = NATURE_MODEST
},
[FALLARBOR_TENT_MON_PELIPPER] = {
.species = SPECIES_PELIPPER,
.moves = {MOVE_TWISTER, MOVE_ICY_WIND, MOVE_DOUBLE_TEAM, MOVE_WATER_GUN},
- .itemTableId = BATTLE_FRONTIER_ITEM_DRAGON_FANG,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_DRAGON_FANG,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_ADAMANT
},
[FALLARBOR_TENT_MON_BARBOACH] = {
.species = SPECIES_BARBOACH,
.moves = {MOVE_SPARK, MOVE_WATER_GUN, MOVE_EARTHQUAKE, MOVE_WATER_SPORT},
- .itemTableId = BATTLE_FRONTIER_ITEM_LIECHI_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LIECHI_BERRY,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 252, 0),
.nature = NATURE_MODEST
},
[FALLARBOR_TENT_MON_WAILMER] = {
.species = SPECIES_WAILMER,
.moves = {MOVE_WATER_PULSE, MOVE_RAIN_DANCE, MOVE_SPLASH, MOVE_CURSE},
- .itemTableId = BATTLE_FRONTIER_ITEM_KINGS_ROCK,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_KINGS_ROCK,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_QUIET
},
[FALLARBOR_TENT_MON_MARILL] = {
.species = SPECIES_MARILL,
.moves = {MOVE_DEFENSE_CURL, MOVE_ROLLOUT, MOVE_BUBBLE_BEAM, MOVE_ATTRACT},
- .itemTableId = BATTLE_FRONTIER_ITEM_HARD_STONE,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_HARD_STONE,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_ADAMANT
},
[FALLARBOR_TENT_MON_GOLDEEN_1] = {
.species = SPECIES_GOLDEEN,
.moves = {MOVE_WATERFALL, MOVE_RAIN_DANCE, MOVE_FLAIL, MOVE_PROTECT},
- .itemTableId = BATTLE_FRONTIER_ITEM_GANLON_BERRY,
- .evSpread = F_EV_SPREAD_SP_ATTACK | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_GANLON_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 0),
.nature = NATURE_HASTY
},
[FALLARBOR_TENT_MON_GOLDEEN_2] = {
.species = SPECIES_GOLDEEN,
.moves = {MOVE_SLEEP_TALK, MOVE_HORN_DRILL, MOVE_REST, MOVE_SUPERSONIC},
- .itemTableId = BATTLE_FRONTIER_ITEM_MENTAL_HERB,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_MENTAL_HERB,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_CAREFUL
},
[FALLARBOR_TENT_MON_TRAPINCH] = {
.species = SPECIES_TRAPINCH,
.moves = {MOVE_RETURN, MOVE_SAND_ATTACK, MOVE_ATTRACT, MOVE_STRENGTH},
- .itemTableId = BATTLE_FRONTIER_ITEM_MAGO_BERRY,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_MAGO_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_ADAMANT
},
[FALLARBOR_TENT_MON_BALTOY] = {
.species = SPECIES_BALTOY,
.moves = {MOVE_SELF_DESTRUCT, MOVE_SANDSTORM, MOVE_RAPID_SPIN, MOVE_MIMIC},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(0, 170, 0, 170, 0, 170),
.nature = NATURE_JOLLY
},
[FALLARBOR_TENT_MON_GRAVELER] = {
.species = SPECIES_GRAVELER,
.moves = {MOVE_ROCK_BLAST, MOVE_DEFENSE_CURL, MOVE_MAGNITUDE, MOVE_MUD_SPORT},
- .itemTableId = BATTLE_FRONTIER_ITEM_HARD_STONE,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_HARD_STONE,
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 0, 252),
.nature = NATURE_ADAMANT
},
[FALLARBOR_TENT_MON_SANDSHREW] = {
.species = SPECIES_SANDSHREW,
.moves = {MOVE_SAND_TOMB, MOVE_SANDSTORM, MOVE_DOUBLE_TEAM, MOVE_FOCUS_PUNCH},
- .itemTableId = BATTLE_FRONTIER_ITEM_SOFT_SAND,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SOFT_SAND,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_JOLLY
},
[FALLARBOR_TENT_MON_SWALOT] = {
.species = SPECIES_SWALOT,
.moves = {MOVE_YAWN, MOVE_ENCORE, MOVE_BULLET_SEED, MOVE_SLUDGE},
- .itemTableId = BATTLE_FRONTIER_ITEM_SCOPE_LENS,
- .evSpread = F_EV_SPREAD_ATTACK | F_EV_SPREAD_HP,
+ .heldItem = ITEM_SCOPE_LENS,
+ .ev = TRAINER_PARTY_EVS(252, 252, 0, 0, 0, 0),
.nature = NATURE_BRAVE
},
[FALLARBOR_TENT_MON_SHROOMISH] = {
.species = SPECIES_SHROOMISH,
.moves = {MOVE_HEADBUTT, MOVE_SPORE, MOVE_SWAGGER, MOVE_LEECH_SEED},
- .itemTableId = BATTLE_FRONTIER_ITEM_QUICK_CLAW,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_QUICK_CLAW,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_IMPISH
},
[FALLARBOR_TENT_MON_KIRLIA] = {
.species = SPECIES_KIRLIA,
.moves = {MOVE_HYPNOSIS, MOVE_GROWL, MOVE_ATTRACT, MOVE_DREAM_EATER},
- .itemTableId = BATTLE_FRONTIER_ITEM_SITRUS_BERRY,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_SITRUS_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 0, 252),
.nature = NATURE_ADAMANT
},
[FALLARBOR_TENT_MON_LOMBRE] = {
.species = SPECIES_LOMBRE,
.moves = {MOVE_NATURE_POWER, MOVE_WATER_GUN, MOVE_RAIN_DANCE, MOVE_FLASH},
- .itemTableId = BATTLE_FRONTIER_ITEM_LEFTOVERS,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_LEFTOVERS,
+ .ev = TRAINER_PARTY_EVS(170, 0, 170, 0, 0, 170),
.nature = NATURE_BASHFUL
},
[FALLARBOR_TENT_MON_NUZLEAF] = {
.species = SPECIES_NUZLEAF,
.moves = {MOVE_NATURE_POWER, MOVE_TORMENT, MOVE_SWAGGER, MOVE_REST},
- .itemTableId = BATTLE_FRONTIER_ITEM_CHESTO_BERRY,
- .evSpread = F_EV_SPREAD_SPEED | F_EV_SPREAD_ATTACK,
+ .heldItem = ITEM_CHESTO_BERRY,
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 252, 0, 0),
.nature = NATURE_ADAMANT
},
[FALLARBOR_TENT_MON_CACNEA] = {
.species = SPECIES_CACNEA,
.moves = {MOVE_SANDSTORM, MOVE_NEEDLE_ARM, MOVE_TEETER_DANCE, MOVE_LEECH_SEED},
- .itemTableId = BATTLE_FRONTIER_ITEM_BRIGHT_POWDER,
- .evSpread = F_EV_SPREAD_SP_DEFENSE | F_EV_SPREAD_SPEED | F_EV_SPREAD_DEFENSE | F_EV_SPREAD_HP,
+ .heldItem = ITEM_BRIGHT_POWDER,
+ .ev = TRAINER_PARTY_EVS(128, 0, 128, 128, 0, 128),
.nature = NATURE_ADAMANT
}
};
diff --git a/src/data/battle_move_effects.h b/src/data/battle_move_effects.h
index 5a1536155384..ead7cee6f1ef 100644
--- a/src/data/battle_move_effects.h
+++ b/src/data/battle_move_effects.h
@@ -1423,7 +1423,7 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] =
.battleTvScore = 0, // TODO: Assign points
},
- [EFFECT_FREEZE_DRY] =
+ [EFFECT_SUPER_EFFECTIVE_ON_ARG] =
{
.battleScript = BattleScript_EffectHit,
.battleTvScore = 0, // TODO: Assign points
@@ -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
},
@@ -2218,4 +2218,41 @@ const struct BattleMoveEffect gBattleMoveEffects[NUM_BATTLE_MOVE_EFFECTS] =
.battleTvScore = 0, // TODO: Assign points
.encourageEncore = TRUE,
},
+
+ [EFFECT_SPICY_EXTRACT] =
+ {
+ .battleScript = BattleScript_EffectSpicyExtract,
+ .battleTvScore = 0, // TODO: Assign points
+ .encourageEncore = TRUE,
+ },
+
+ [EFFECT_TERA_BLAST] =
+ {
+ .battleScript = BattleScript_EffectPhotonGeyser,
+ .battleTvScore = 0, // TODO: Assign points
+ },
+
+ [EFFECT_TERA_STARSTORM] =
+ {
+ .battleScript = BattleScript_EffectPhotonGeyser,
+ .battleTvScore = 0, // TODO: Assign points
+ },
+
+ [EFFECT_DRAGON_DARTS] =
+ {
+ .battleScript = BattleScript_EffectHit,
+ .battleTvScore = 0, // TODO: Assign points
+ },
+
+ [EFFECT_GUARDIAN_OF_ALOLA] =
+ {
+ .battleScript = BattleScript_DamageToQuarterTargetHP,
+ .battleTvScore = 0, // TODO: Assign points
+ },
+
+ [EFFECT_SHELL_SIDE_ARM] =
+ {
+ .battleScript = BattleScript_EffectHit,
+ .battleTvScore = 0, // TODO: Assign points
+ },
};
diff --git a/src/data/battle_partners.h b/src/data/battle_partners.h
index 39bb91132f74..95866d24faeb 100644
--- a/src/data/battle_partners.h
+++ b/src/data/battle_partners.h
@@ -1,20 +1,105 @@
-const struct Trainer gBattlePartners[] = {
+//
+// DO NOT MODIFY THIS FILE! It is auto-generated from src/data/battle_partners.party
+//
+// If you want to modify this file set COMPETITIVE_PARTY_SYNTAX to FALSE
+// in include/config/general.h and remove this notice.
+// Use sed -i '/^#line/d' 'src/data/battle_partners.h' to remove #line markers.
+//
+
+#line 1 "src/data/battle_partners.party"
+
+#line 1
[PARTNER_NONE] =
{
- .party = NULL,
+#line 3
.trainerClass = TRAINER_CLASS_PKMN_TRAINER_1,
- .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
- .trainerPic = TRAINER_PIC_HIKER,
- .trainerName = _(""),
- .items = {},
+#line 4
+ .trainerPic = TRAINER_BACK_PIC_BRENDAN,
+ .encounterMusic_gender =
+#line 6
+ TRAINER_ENCOUNTER_MUSIC_MALE,
+ .partySize = 0,
+ .party = (const struct TrainerMon[])
+ {
+ },
},
-
+#line 8
[PARTNER_STEVEN] =
{
- .party = TRAINER_PARTY(sParty_StevenPartner),
+#line 9
+ .trainerName = _("STEVEN"),
+#line 10
.trainerClass = TRAINER_CLASS_RIVAL,
- .encounterMusic_gender = TRAINER_ENCOUNTER_MUSIC_MALE,
+#line 11
.trainerPic = TRAINER_BACK_PIC_STEVEN,
- .trainerName = _("STEVEN"),
+ .encounterMusic_gender =
+#line 13
+ TRAINER_ENCOUNTER_MUSIC_MALE,
+ .partySize = 3,
+ .party = (const struct TrainerMon[])
+ {
+ {
+#line 15
+ .species = SPECIES_METANG,
+ .gender = TRAINER_MON_RANDOM_GENDER,
+#line 19
+ .ev = TRAINER_PARTY_EVS(0, 252, 252, 0, 6, 0),
+#line 18
+ .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31),
+#line 17
+ .lvl = 42,
+#line 16
+ .nature = NATURE_BRAVE,
+ .dynamaxLevel = MAX_DYNAMAX_LEVEL,
+ .moves = {
+#line 20
+ MOVE_LIGHT_SCREEN,
+ MOVE_PSYCHIC,
+ MOVE_REFLECT,
+ MOVE_METAL_CLAW,
+ },
+ },
+ {
+#line 25
+ .species = SPECIES_SKARMORY,
+ .gender = TRAINER_MON_RANDOM_GENDER,
+#line 29
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 6, 252),
+#line 28
+ .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31),
+#line 27
+ .lvl = 43,
+#line 26
+ .nature = NATURE_IMPISH,
+ .dynamaxLevel = MAX_DYNAMAX_LEVEL,
+ .moves = {
+#line 30
+ MOVE_TOXIC,
+ MOVE_AERIAL_ACE,
+ MOVE_PROTECT,
+ MOVE_STEEL_WING,
+ },
+ },
+ {
+#line 35
+ .species = SPECIES_AGGRON,
+ .gender = TRAINER_MON_RANDOM_GENDER,
+#line 39
+ .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 6),
+#line 38
+ .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31),
+#line 37
+ .lvl = 44,
+#line 36
+ .nature = NATURE_ADAMANT,
+ .dynamaxLevel = MAX_DYNAMAX_LEVEL,
+ .moves = {
+#line 40
+ MOVE_THUNDER,
+ MOVE_PROTECT,
+ MOVE_SOLAR_BEAM,
+ MOVE_DRAGON_CLAW,
+ },
+ },
+ },
},
-};
diff --git a/src/data/battle_partners.party b/src/data/battle_partners.party
new file mode 100644
index 000000000000..e1ecfe35faaf
--- /dev/null
+++ b/src/data/battle_partners.party
@@ -0,0 +1,43 @@
+=== PARTNER_NONE ===
+Name:
+Class: Pkmn Trainer 1
+Pic: Brendan
+Gender: Male
+Music: Male
+
+=== PARTNER_STEVEN ===
+Name: STEVEN
+Class: Rival
+Pic: Steven
+Gender: Male
+Music: Male
+
+Metang
+Brave Nature
+Level: 42
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+EVs: 252 Atk / 252 Def / 6 SpA
+- Light Screen
+- Psychic
+- Reflect
+- Metal Claw
+
+Skarmory
+Impish Nature
+Level: 43
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+EVs: 252 HP / 6 SpA / 252 SpD
+- Toxic
+- Aerial Ace
+- Protect
+- Steel Wing
+
+Aggron
+Adamant Nature
+Level: 44
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+EVs: 252 Atk / 252 SpA / 6 SpD
+- Thunder
+- Protect
+- Solar Beam
+- Dragon Claw
diff --git a/src/data/field_effects/field_effect_object_template_pointers.h b/src/data/field_effects/field_effect_object_template_pointers.h
index 64a3c3283b00..14113d3a43bb 100755
--- a/src/data/field_effects/field_effect_object_template_pointers.h
+++ b/src/data/field_effects/field_effect_object_template_pointers.h
@@ -35,6 +35,9 @@ extern const struct SpriteTemplate gFieldEffectObjectTemplate_AshLaunch;
extern const struct SpriteTemplate gFieldEffectObjectTemplate_Bubbles;
extern const struct SpriteTemplate gFieldEffectObjectTemplate_SmallSparkle;
extern const struct SpriteTemplate gFieldEffectObjectTemplate_Rayquaza;
+extern const struct SpriteTemplate gFieldEffectObjectTemplate_SlitherTracks;
+extern const struct SpriteTemplate gFieldEffectObjectTemplate_BugTracks;
+extern const struct SpriteTemplate gFieldEffectObjectTemplate_SpotTracks;
const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[] = {
[FLDEFFOBJ_SHADOW_S] = &gFieldEffectObjectTemplate_ShadowSmall,
@@ -74,4 +77,7 @@ const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[] = {
[FLDEFFOBJ_BUBBLES] = &gFieldEffectObjectTemplate_Bubbles,
[FLDEFFOBJ_SMALL_SPARKLE] = &gFieldEffectObjectTemplate_SmallSparkle,
[FLDEFFOBJ_RAYQUAZA] = &gFieldEffectObjectTemplate_Rayquaza,
+ [FLDEFFOBJ_TRACKS_SLITHER] = &gFieldEffectObjectTemplate_SlitherTracks,
+ [FLDEFFOBJ_TRACKS_SPOT] = &gFieldEffectObjectTemplate_SpotTracks,
+ [FLDEFFOBJ_TRACKS_BUG] = &gFieldEffectObjectTemplate_BugTracks,
};
diff --git a/src/data/field_effects/field_effect_objects.h b/src/data/field_effects/field_effect_objects.h
index d19adf6f0b71..3b9dafd2cb4f 100755
--- a/src/data/field_effects/field_effect_objects.h
+++ b/src/data/field_effects/field_effect_objects.h
@@ -30,7 +30,7 @@ static const struct SpriteFrameImage sPicTable_ShadowExtraLarge[] = {
const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowSmall = {
.tileTag = TAG_NONE,
- .paletteTag = TAG_NONE,
+ .paletteTag = TAG_WEATHER_START,
.oam = &gObjectEventBaseOam_8x8,
.anims = sAnimTable_Shadow,
.images = sPicTable_ShadowSmall,
@@ -40,7 +40,7 @@ const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowSmall = {
const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowMedium = {
.tileTag = TAG_NONE,
- .paletteTag = TAG_NONE,
+ .paletteTag = TAG_WEATHER_START,
.oam = &gObjectEventBaseOam_16x8,
.anims = sAnimTable_Shadow,
.images = sPicTable_ShadowMedium,
@@ -50,7 +50,7 @@ const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowMedium = {
const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowLarge = {
.tileTag = TAG_NONE,
- .paletteTag = TAG_NONE,
+ .paletteTag = TAG_WEATHER_START,
.oam = &gObjectEventBaseOam_32x8,
.anims = sAnimTable_Shadow,
.images = sPicTable_ShadowLarge,
@@ -60,7 +60,7 @@ const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowLarge = {
const struct SpriteTemplate gFieldEffectObjectTemplate_ShadowExtraLarge = {
.tileTag = TAG_NONE,
- .paletteTag = TAG_NONE,
+ .paletteTag = TAG_WEATHER_START,
.oam = &gObjectEventBaseOam_64x32,
.anims = sAnimTable_Shadow,
.images = sPicTable_ShadowExtraLarge,
@@ -210,7 +210,7 @@ static const union AnimCmd *const sAnimTable_SurfBlob[] =
const struct SpriteTemplate gFieldEffectObjectTemplate_SurfBlob = {
.tileTag = TAG_NONE,
- .paletteTag = TAG_NONE,
+ .paletteTag = OBJ_EVENT_PAL_TAG_MAY,
.oam = &gObjectEventBaseOam_32x32,
.anims = sAnimTable_SurfBlob,
.images = sPicTable_SurfBlob,
@@ -267,7 +267,7 @@ static const union AnimCmd *const sAnimTable_Arrow[] =
const struct SpriteTemplate gFieldEffectObjectTemplate_Arrow = {
.tileTag = TAG_NONE,
- .paletteTag = TAG_NONE,
+ .paletteTag = OBJ_EVENT_PAL_TAG_MAY,
.oam = &gObjectEventBaseOam_16x16,
.anims = sAnimTable_Arrow,
.images = sPicTable_Arrow,
@@ -431,6 +431,36 @@ const struct SpriteTemplate gFieldEffectObjectTemplate_DeepSandFootprints = {
.callback = UpdateFootprintsTireTracksFieldEffect,
};
+static const struct SpriteFrameImage sPicTable_BugTracks[] = {
+ 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),
+};
+
+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,
+};
+
+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,
+};
+
static const struct SpriteFrameImage sPicTable_BikeTireTracks[] = {
overworld_frame(gFieldEffectObjectPic_BikeTireTracks, 2, 2, 0),
overworld_frame(gFieldEffectObjectPic_BikeTireTracks, 2, 2, 1),
@@ -438,6 +468,14 @@ static const struct SpriteFrameImage sPicTable_BikeTireTracks[] = {
overworld_frame(gFieldEffectObjectPic_BikeTireTracks, 2, 2, 3),
};
+
+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),
+};
+
static const union AnimCmd sBikeTireTracksAnim_South[] =
{
ANIMCMD_FRAME(2, 1),
@@ -509,6 +547,17 @@ const struct SpriteTemplate gFieldEffectObjectTemplate_BikeTireTracks = {
.callback = UpdateFootprintsTireTracksFieldEffect,
};
+
+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,
+};
+
static const struct SpriteFrameImage sPicTable_JumpBigSplash[] = {
overworld_frame(gFieldEffectObjectPic_JumpBigSplash, 2, 2, 0),
overworld_frame(gFieldEffectObjectPic_JumpBigSplash, 2, 2, 1),
@@ -931,7 +980,7 @@ static const union AnimCmd *const sAnimTable_Sparkle[] =
const struct SpriteTemplate gFieldEffectObjectTemplate_Sparkle = {
.tileTag = TAG_NONE,
- .paletteTag = TAG_NONE,
+ .paletteTag = OBJ_EVENT_PAL_TAG_NPC_2,
.oam = &gObjectEventBaseOam_16x16,
.anims = sAnimTable_Sparkle,
.images = sPicTable_Sparkle,
@@ -975,7 +1024,7 @@ static const union AnimCmd *const sAnimTable_TreeDisguise[] =
const struct SpriteTemplate gFieldEffectObjectTemplate_TreeDisguise = {
.tileTag = TAG_NONE,
- .paletteTag = TAG_NONE,
+ .paletteTag = OBJ_EVENT_PAL_TAG_NPC_3,
.oam = &gObjectEventBaseOam_16x32,
.anims = sAnimTable_TreeDisguise,
.images = sPicTable_TreeDisguise,
@@ -1019,7 +1068,7 @@ static const union AnimCmd *const sAnimTable_MountainDisguise[] =
const struct SpriteTemplate gFieldEffectObjectTemplate_MountainDisguise = {
.tileTag = TAG_NONE,
- .paletteTag = TAG_NONE,
+ .paletteTag = OBJ_EVENT_PAL_TAG_NPC_2,
.oam = &gObjectEventBaseOam_16x32,
.anims = sAnimTable_MountainDisguise,
.images = sPicTable_MountainDisguise,
@@ -1064,7 +1113,7 @@ static const union AnimCmd *const sAnimTable_Bird[] =
const struct SpriteTemplate gFieldEffectObjectTemplate_Bird = {
.tileTag = TAG_NONE,
- .paletteTag = TAG_NONE,
+ .paletteTag = OBJ_EVENT_PAL_TAG_MAY,
.oam = &gObjectEventBaseOam_32x32,
.anims = sAnimTable_Bird,
.images = sPicTable_Bird,
@@ -1273,7 +1322,7 @@ static const union AnimCmd *const sAnimTable_RayquazaSpotlightEffect[] = {
};
static const struct SpriteFrameImage sPicTable_RayquazaSpotlightEffect[] = {
- overworld_frame(gObjectEventPic_Rayquaza, 4, 4, 0),
+ overworld_frame(gObjectEventPic_RayquazaCutscene, 4, 4, 0),
};
const struct SpriteTemplate gFieldEffectObjectTemplate_Rayquaza = {
diff --git a/src/data/gimmicks.h b/src/data/gimmicks.h
new file mode 100644
index 000000000000..5b06feddefb7
--- /dev/null
+++ b/src/data/gimmicks.h
@@ -0,0 +1,54 @@
+#include "graphics/gimmicks.h"
+
+// Gimmick data
+
+const struct GimmickInfo gGimmicksInfo[GIMMICKS_COUNT] =
+{
+ [GIMMICK_NONE] = {0},
+ [GIMMICK_MEGA] =
+ {
+ .triggerSheet = &sSpriteSheet_MegaTrigger,
+ .triggerPal = &sSpritePalette_MegaTrigger,
+ .triggerTemplate = &sSpriteTemplate_GimmickTrigger,
+ .indicatorSheet = &sSpriteSheet_MegaIndicator,
+ .indicatorPal = &sSpritePalette_MegaIndicator,
+ .CanActivate = CanMegaEvolve,
+ .ActivateGimmick = ActivateMegaEvolution,
+ },
+ [GIMMICK_Z_MOVE] =
+ {
+ .triggerSheet = &sSpriteSheet_ZMoveTrigger,
+ .triggerPal = &sSpritePalette_ZMoveTrigger,
+ .triggerTemplate = &sSpriteTemplate_GimmickTrigger,
+ .CanActivate = CanUseZMove,
+ .ActivateGimmick = ActivateZMove,
+ },
+ [GIMMICK_ULTRA_BURST] =
+ {
+ .triggerSheet = &sSpriteSheet_BurstTrigger,
+ .triggerPal = &sSpritePalette_BurstTrigger,
+ .triggerTemplate = &sSpriteTemplate_GimmickTrigger,
+ .CanActivate = CanUltraBurst,
+ .ActivateGimmick = ActivateUltraBurst,
+ },
+ [GIMMICK_DYNAMAX] =
+ {
+ .triggerSheet = &sSpriteSheet_DynamaxTrigger,
+ .triggerPal = &sSpritePalette_DynamaxTrigger,
+ .triggerTemplate = &sSpriteTemplate_GimmickTrigger,
+ .indicatorSheet = &sSpriteSheet_DynamaxIndicator,
+ .indicatorPal = &sSpritePalette_MiscIndicator,
+ .CanActivate = CanDynamax,
+ .ActivateGimmick = ActivateDynamax,
+ },
+ [GIMMICK_TERA] =
+ {
+ .triggerSheet = &sSpriteSheet_TeraTrigger,
+ .triggerPal = &sSpritePalette_TeraTrigger,
+ .triggerTemplate = &sSpriteTemplate_GimmickTrigger,
+ .indicatorSheet = NULL, // handled separately
+ .indicatorPal = &sSpritePalette_TeraIndicator,
+ .CanActivate = CanTerastallize,
+ .ActivateGimmick = ActivateTera,
+ }
+};
diff --git a/src/data/graphics/gimmicks.h b/src/data/graphics/gimmicks.h
new file mode 100644
index 000000000000..5299f74fc3db
--- /dev/null
+++ b/src/data/graphics/gimmicks.h
@@ -0,0 +1,153 @@
+// trigger data
+static const u8 ALIGNED(4) sMegaTriggerGfx[] = INCBIN_U8("graphics/battle_interface/mega_trigger.4bpp");
+static const u8 ALIGNED(4) sZMoveTriggerGfx[] = INCBIN_U8("graphics/battle_interface/z_move_trigger.4bpp");
+static const u8 ALIGNED(4) sBurstTriggerGfx[] = INCBIN_U8("graphics/battle_interface/burst_trigger.4bpp");
+static const u8 ALIGNED(4) sDynamaxTriggerGfx[] = INCBIN_U8("graphics/battle_interface/dynamax_trigger.4bpp");
+static const u8 ALIGNED(4) sTeraTriggerGfx[] = INCBIN_U8("graphics/battle_interface/tera_trigger.4bpp");
+
+static const u16 sMegaTriggerPal[] = INCBIN_U16("graphics/battle_interface/mega_trigger.gbapal");
+static const u16 sZMoveTriggerPal[] = INCBIN_U16("graphics/battle_interface/z_move_trigger.gbapal");
+static const u16 sBurstTriggerPal[] = INCBIN_U16("graphics/battle_interface/burst_trigger.gbapal");
+static const u16 sDynamaxTriggerPal[] = INCBIN_U16("graphics/battle_interface/dynamax_trigger.gbapal");
+static const u16 sTeraTriggerPal[] = INCBIN_U16("graphics/battle_interface/tera_trigger.gbapal");
+
+static const struct SpriteSheet sSpriteSheet_MegaTrigger = {sMegaTriggerGfx, sizeof(sMegaTriggerGfx), TAG_GIMMICK_TRIGGER_TILE};
+static const struct SpriteSheet sSpriteSheet_ZMoveTrigger = {sZMoveTriggerGfx, sizeof(sZMoveTriggerGfx), TAG_GIMMICK_TRIGGER_TILE};
+static const struct SpriteSheet sSpriteSheet_BurstTrigger = {sBurstTriggerGfx, sizeof(sBurstTriggerGfx), TAG_GIMMICK_TRIGGER_TILE};
+static const struct SpriteSheet sSpriteSheet_DynamaxTrigger = {sDynamaxTriggerGfx, sizeof(sDynamaxTriggerGfx), TAG_GIMMICK_TRIGGER_TILE};
+static const struct SpriteSheet sSpriteSheet_TeraTrigger = {sTeraTriggerGfx, sizeof(sTeraTriggerGfx), TAG_GIMMICK_TRIGGER_TILE};
+
+static const struct SpritePalette sSpritePalette_MegaTrigger = {sMegaTriggerPal, TAG_GIMMICK_TRIGGER_TILE};
+static const struct SpritePalette sSpritePalette_ZMoveTrigger = {sZMoveTriggerPal, TAG_GIMMICK_TRIGGER_PAL};
+static const struct SpritePalette sSpritePalette_BurstTrigger = {sBurstTriggerPal, TAG_GIMMICK_TRIGGER_TILE};
+static const struct SpritePalette sSpritePalette_DynamaxTrigger = {sDynamaxTriggerPal, TAG_GIMMICK_TRIGGER_PAL};
+static const struct SpritePalette sSpritePalette_TeraTrigger = {sTeraTriggerPal, TAG_GIMMICK_TRIGGER_TILE};
+
+static const struct OamData sOamData_GimmickTrigger =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = ST_OAM_SQUARE,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 2,
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const union AnimCmd sSpriteAnim_GimmickTriggerOff[] =
+{
+ ANIMCMD_FRAME(0, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_GimmickTriggerOn[] =
+{
+ ANIMCMD_FRAME(16, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const sSpriteAnimTable_GimmickTrigger[] =
+{
+ sSpriteAnim_GimmickTriggerOff,
+ sSpriteAnim_GimmickTriggerOn,
+};
+
+static void SpriteCb_GimmickTrigger(struct Sprite *sprite);
+static const struct SpriteTemplate sSpriteTemplate_GimmickTrigger =
+{
+ .tileTag = TAG_GIMMICK_TRIGGER_TILE,
+ .paletteTag = TAG_GIMMICK_TRIGGER_PAL,
+ .oam = &sOamData_GimmickTrigger,
+ .anims = sSpriteAnimTable_GimmickTrigger,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCb_GimmickTrigger,
+};
+
+// indicator data
+static const u8 ALIGNED(4) sMegaIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/mega_indicator.4bpp");
+static const u8 ALIGNED(4) sAlphaIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/alpha_indicator.4bpp");
+static const u8 ALIGNED(4) sOmegaIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/omega_indicator.4bpp");
+static const u8 ALIGNED(4) sDynamaxIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/dynamax_indicator.4bpp");
+static const u8 ALIGNED(4) sNormalIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/normal_indicator.4bpp");
+static const u8 ALIGNED(4) sFightingIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/fighting_indicator.4bpp");
+static const u8 ALIGNED(4) sFlyingIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/flying_indicator.4bpp");
+static const u8 ALIGNED(4) sPoisonIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/poison_indicator.4bpp");
+static const u8 ALIGNED(4) sGroundIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/ground_indicator.4bpp");
+static const u8 ALIGNED(4) sRockIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/rock_indicator.4bpp");
+static const u8 ALIGNED(4) sBugIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/bug_indicator.4bpp");
+static const u8 ALIGNED(4) sGhostIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/ghost_indicator.4bpp");
+static const u8 ALIGNED(4) sSteelIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/steel_indicator.4bpp");
+static const u8 ALIGNED(4) sFireIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/fire_indicator.4bpp");
+static const u8 ALIGNED(4) sWaterIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/water_indicator.4bpp");
+static const u8 ALIGNED(4) sGrassIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/grass_indicator.4bpp");
+static const u8 ALIGNED(4) sElectricIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/electric_indicator.4bpp");
+static const u8 ALIGNED(4) sPsychicIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/psychic_indicator.4bpp");
+static const u8 ALIGNED(4) sIceIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/ice_indicator.4bpp");
+static const u8 ALIGNED(4) sDragonIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/dragon_indicator.4bpp");
+static const u8 ALIGNED(4) sDarkIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/dark_indicator.4bpp");
+static const u8 ALIGNED(4) sFairyIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/fairy_indicator.4bpp");
+static const u8 ALIGNED(4) sStellarIndicatorGfx[] = INCBIN_U8("graphics/battle_interface/stellar_indicator.4bpp");
+
+static const u16 sMiscIndicatorPal[] = INCBIN_U16("graphics/battle_interface/misc_indicator.gbapal"); // has room for more colors
+static const u16 sMegaIndicatorPal[] = INCBIN_U16("graphics/battle_interface/mega_indicator.gbapal");
+static const u16 sTeraIndicatorPal[] = INCBIN_U16("graphics/battle_interface/tera_indicator.gbapal");
+
+static const struct SpriteSheet sSpriteSheet_MegaIndicator = {sMegaIndicatorGfx, sizeof(sMegaIndicatorGfx), TAG_MEGA_INDICATOR_TILE};
+static const struct SpriteSheet sSpriteSheet_AlphaIndicator = {sAlphaIndicatorGfx, sizeof(sAlphaIndicatorGfx), TAG_ALPHA_INDICATOR_TILE};
+static const struct SpriteSheet sSpriteSheet_OmegaIndicator = {sOmegaIndicatorGfx, sizeof(sOmegaIndicatorGfx), TAG_OMEGA_INDICATOR_TILE};
+static const struct SpriteSheet sSpriteSheet_DynamaxIndicator = {sDynamaxIndicatorGfx, sizeof(sDynamaxIndicatorGfx), TAG_DYNAMAX_INDICATOR_TILE};
+static const struct SpriteSheet sTeraIndicatorSpriteSheets[NUMBER_OF_MON_TYPES + 1] =
+{
+ {sNormalIndicatorGfx, sizeof(sNormalIndicatorGfx), TAG_NORMAL_INDICATOR_TILE}, // TYPE_NONE
+ {sNormalIndicatorGfx, sizeof(sNormalIndicatorGfx), TAG_NORMAL_INDICATOR_TILE},
+ {sFightingIndicatorGfx, sizeof(sFightingIndicatorGfx), TAG_FIGHTING_INDICATOR_TILE},
+ {sFlyingIndicatorGfx, sizeof(sFlyingIndicatorGfx), TAG_FLYING_INDICATOR_TILE},
+ {sPoisonIndicatorGfx, sizeof(sPoisonIndicatorGfx), TAG_POISON_INDICATOR_TILE},
+ {sGroundIndicatorGfx, sizeof(sGroundIndicatorGfx), TAG_GROUND_INDICATOR_TILE},
+ {sRockIndicatorGfx, sizeof(sRockIndicatorGfx), TAG_ROCK_INDICATOR_TILE},
+ {sBugIndicatorGfx, sizeof(sBugIndicatorGfx), TAG_BUG_INDICATOR_TILE},
+ {sGhostIndicatorGfx, sizeof(sGhostIndicatorGfx), TAG_GHOST_INDICATOR_TILE},
+ {sSteelIndicatorGfx, sizeof(sSteelIndicatorGfx), TAG_STEEL_INDICATOR_TILE},
+ {sNormalIndicatorGfx, sizeof(sNormalIndicatorGfx), TAG_NORMAL_INDICATOR_TILE}, // TYPE_MYSTERY
+ {sFireIndicatorGfx, sizeof(sFireIndicatorGfx), TAG_FIRE_INDICATOR_TILE},
+ {sWaterIndicatorGfx, sizeof(sWaterIndicatorGfx), TAG_WATER_INDICATOR_TILE},
+ {sGrassIndicatorGfx, sizeof(sGrassIndicatorGfx), TAG_GRASS_INDICATOR_TILE},
+ {sElectricIndicatorGfx, sizeof(sElectricIndicatorGfx), TAG_ELECTRIC_INDICATOR_TILE},
+ {sPsychicIndicatorGfx, sizeof(sPsychicIndicatorGfx), TAG_PSYCHIC_INDICATOR_TILE},
+ {sIceIndicatorGfx, sizeof(sIceIndicatorGfx), TAG_ICE_INDICATOR_TILE},
+ {sDragonIndicatorGfx, sizeof(sDragonIndicatorGfx), TAG_DRAGON_INDICATOR_TILE},
+ {sDarkIndicatorGfx, sizeof(sDarkIndicatorGfx), TAG_DARK_INDICATOR_TILE},
+ {sFairyIndicatorGfx, sizeof(sFairyIndicatorGfx), TAG_FAIRY_INDICATOR_TILE},
+ {sStellarIndicatorGfx, sizeof(sStellarIndicatorGfx), TAG_STELLAR_INDICATOR_TILE},
+ {0}
+};
+
+static const struct SpritePalette sSpritePalette_MiscIndicator = {sMiscIndicatorPal, TAG_MISC_INDICATOR_PAL};
+static const struct SpritePalette sSpritePalette_MegaIndicator = {sMegaIndicatorPal, TAG_MEGA_INDICATOR_PAL};
+static const struct SpritePalette sSpritePalette_TeraIndicator = {sTeraIndicatorPal, TAG_TERA_INDICATOR_PAL};
+
+static const struct OamData sOamData_GimmickIndicator =
+{
+ .shape = SPRITE_SHAPE(16x16),
+ .size = SPRITE_SIZE(16x16),
+ .priority = 1,
+};
+
+static void SpriteCb_GimmickIndicator(struct Sprite *sprite);
+static const struct SpriteTemplate sSpriteTemplate_GimmickIndicator =
+{
+ .tileTag = TAG_NORMAL_INDICATOR_TILE, // updated dynamically
+ .paletteTag = TAG_TERA_INDICATOR_PAL, // updated dynamically
+ .oam = &sOamData_GimmickIndicator,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCb_GimmickIndicator,
+};
diff --git a/src/data/graphics/pokemon.h b/src/data/graphics/pokemon.h
index aacb27d06884..4c86c0adcdf7 100644
--- a/src/data/graphics/pokemon.h
+++ b/src/data/graphics/pokemon.h
@@ -1,3 +1,9 @@
+// Normally, INCBIN_COMP acts like INCBIN_U32, but appends `.lz` to the file, compressing it;
+// If not compressing overworld gfx, make this an alias to INCBIN_32, so gfx will *not* be compressed
+#if !(OW_GFX_COMPRESS)
+#define INCBIN_COMP INCBIN_U32
+#endif
+
const u32 gMonFrontPic_CircledQuestionMark[] = INCBIN_U32("graphics/pokemon/question_mark/circled/anim_front.4bpp.lz");
const u32 gMonBackPic_CircledQuestionMark[] = INCBIN_U32("graphics/pokemon/question_mark/circled/back.4bpp.lz");
const u32 gMonPalette_CircledQuestionMark[] = INCBIN_U32("graphics/pokemon/question_mark/circled/normal.gbapal.lz");
@@ -6,6 +12,7 @@ const u8 gMonIcon_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mark/ico
#if P_FOOTPRINTS
const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mark/footprint.1bpp");
#endif //P_FOOTPRINTS
+const u32 gObjectEventPic_Substitute[] = INCBIN_COMP("graphics/pokemon/question_mark/overworld.4bpp");
#if P_FAMILY_BULBASAUR
const u32 gMonFrontPic_Bulbasaur[] = INCBIN_U32("graphics/pokemon/bulbasaur/anim_front.4bpp.lz");
@@ -16,6 +23,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Bulbasaur[] = INCBIN_U8("graphics/pokemon/bulbasaur/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Bulbasaur[] = INCBIN_COMP("graphics/pokemon/bulbasaur/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Bulbasaur[] = INCBIN_U32("graphics/pokemon/bulbasaur/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Bulbasaur[] = INCBIN_U32("graphics/pokemon/bulbasaur/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Ivysaur[] = INCBIN_U32("graphics/pokemon/ivysaur/anim_front.4bpp.lz");
const u32 gMonPalette_Ivysaur[] = INCBIN_U32("graphics/pokemon/ivysaur/normal.gbapal.lz");
@@ -25,6 +39,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Ivysaur[] = INCBIN_U8("graphics/pokemon/ivysaur/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Ivysaur[] = INCBIN_COMP("graphics/pokemon/ivysaur/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Ivysaur[] = INCBIN_U32("graphics/pokemon/ivysaur/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Ivysaur[] = INCBIN_U32("graphics/pokemon/ivysaur/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Venusaur[] = INCBIN_U32("graphics/pokemon/venusaur/anim_front.4bpp.lz");
const u32 gMonPalette_Venusaur[] = INCBIN_U32("graphics/pokemon/venusaur/normal.gbapal.lz");
@@ -34,6 +55,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Venusaur[] = INCBIN_U8("graphics/pokemon/venusaur/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Venusaur[] = INCBIN_COMP("graphics/pokemon/venusaur/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Venusaur[] = INCBIN_U32("graphics/pokemon/venusaur/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Venusaur[] = INCBIN_U32("graphics/pokemon/venusaur/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_VenusaurF[] = INCBIN_U32("graphics/pokemon/venusaur/anim_frontf.4bpp.lz");
const u32 gMonBackPic_VenusaurF[] = INCBIN_U32("graphics/pokemon/venusaur/backf.4bpp.lz");
@@ -44,6 +72,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_VenusaurMega[] = INCBIN_U32("graphics/pokemon/venusaur/mega/back.4bpp.lz");
const u32 gMonShinyPalette_VenusaurMega[] = INCBIN_U32("graphics/pokemon/venusaur/mega/shiny.gbapal.lz");
const u8 gMonIcon_VenusaurMega[] = INCBIN_U8("graphics/pokemon/venusaur/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_VenusaurMega[] = INCBIN_COMP("graphics/pokemon/venusaur/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_VenusaurMega[] = INCBIN_U32("graphics/pokemon/venusaur/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_VenusaurMega[] = INCBIN_U32("graphics/pokemon/venusaur/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#if P_GIGANTAMAX_FORMS
@@ -52,6 +87,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonPalette_VenusaurGigantamax[] = INCBIN_U32("graphics/pokemon/venusaur/gigantamax/normal.gbapal.lz");
const u32 gMonShinyPalette_VenusaurGigantamax[] = INCBIN_U32("graphics/pokemon/venusaur/gigantamax/shiny.gbapal.lz");
const u8 gMonIcon_VenusaurGigantamax[] = INCBIN_U8("graphics/pokemon/venusaur/gigantamax/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_VenusaurGigantamax[] = INCBIN_COMP("graphics/pokemon/venusaur/gigantamax/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_VenusaurGigantamax[] = INCBIN_U32("graphics/pokemon/venusaur/gigantamax/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_VenusaurGigantamax[] = INCBIN_U32("graphics/pokemon/venusaur/gigantamax/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GIGANTAMAX_FORMS
#endif //P_FAMILY_BULBASAUR
@@ -64,6 +106,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Charmander[] = INCBIN_U8("graphics/pokemon/charmander/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Charmander[] = INCBIN_COMP("graphics/pokemon/charmander/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Charmander[] = INCBIN_U32("graphics/pokemon/charmander/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Charmander[] = INCBIN_U32("graphics/pokemon/charmander/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Charmeleon[] = INCBIN_U32("graphics/pokemon/charmeleon/anim_front.4bpp.lz");
const u32 gMonPalette_Charmeleon[] = INCBIN_U32("graphics/pokemon/charmeleon/normal.gbapal.lz");
@@ -73,6 +122,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Charmeleon[] = INCBIN_U8("graphics/pokemon/charmeleon/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Charmeleon[] = INCBIN_COMP("graphics/pokemon/charmeleon/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Charmeleon[] = INCBIN_U32("graphics/pokemon/charmeleon/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Charmeleon[] = INCBIN_U32("graphics/pokemon/charmeleon/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Charizard[] = INCBIN_U32("graphics/pokemon/charizard/anim_front.4bpp.lz");
const u32 gMonPalette_Charizard[] = INCBIN_U32("graphics/pokemon/charizard/normal.gbapal.lz");
@@ -82,6 +138,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Charizard[] = INCBIN_U8("graphics/pokemon/charizard/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Charizard[] = INCBIN_COMP("graphics/pokemon/charizard/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Charizard[] = INCBIN_U32("graphics/pokemon/charizard/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Charizard[] = INCBIN_U32("graphics/pokemon/charizard/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_MEGA_EVOLUTIONS
const u32 gMonFrontPic_CharizardMegaX[] = INCBIN_U32("graphics/pokemon/charizard/mega_x/front.4bpp.lz");
@@ -89,12 +152,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_CharizardMegaX[] = INCBIN_U32("graphics/pokemon/charizard/mega_x/back.4bpp.lz");
const u32 gMonShinyPalette_CharizardMegaX[] = INCBIN_U32("graphics/pokemon/charizard/mega_x/shiny.gbapal.lz");
const u8 gMonIcon_CharizardMegaX[] = INCBIN_U8("graphics/pokemon/charizard/mega_x/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_CharizardMegaX[] = INCBIN_COMP("graphics/pokemon/charizard/mega_x/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_CharizardMegaX[] = INCBIN_U32("graphics/pokemon/charizard/mega_x/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_CharizardMegaX[] = INCBIN_U32("graphics/pokemon/charizard/mega_x/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_CharizardMegaY[] = INCBIN_U32("graphics/pokemon/charizard/mega_y/front.4bpp.lz");
const u32 gMonPalette_CharizardMegaY[] = INCBIN_U32("graphics/pokemon/charizard/mega_y/normal.gbapal.lz");
const u32 gMonBackPic_CharizardMegaY[] = INCBIN_U32("graphics/pokemon/charizard/mega_y/back.4bpp.lz");
const u32 gMonShinyPalette_CharizardMegaY[] = INCBIN_U32("graphics/pokemon/charizard/mega_y/shiny.gbapal.lz");
const u8 gMonIcon_CharizardMegaY[] = INCBIN_U8("graphics/pokemon/charizard/mega_y/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_CharizardMegaY[] = INCBIN_COMP("graphics/pokemon/charizard/mega_y/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_CharizardMegaY[] = INCBIN_U32("graphics/pokemon/charizard/mega_y/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_CharizardMegaY[] = INCBIN_U32("graphics/pokemon/charizard/mega_y/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#if P_GIGANTAMAX_FORMS
@@ -103,6 +180,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonPalette_CharizardGigantamax[] = INCBIN_U32("graphics/pokemon/charizard/gigantamax/normal.gbapal.lz");
const u32 gMonShinyPalette_CharizardGigantamax[] = INCBIN_U32("graphics/pokemon/charizard/gigantamax/shiny.gbapal.lz");
const u8 gMonIcon_CharizardGigantamax[] = INCBIN_U8("graphics/pokemon/charizard/gigantamax/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_CharizardGigantamax[] = INCBIN_COMP("graphics/pokemon/charizard/gigantamax/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_CharizardGigantamax[] = INCBIN_U32("graphics/pokemon/charizard/gigantamax/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_CharizardGigantamax[] = INCBIN_U32("graphics/pokemon/charizard/gigantamax/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GIGANTAMAX_FORMS
#endif //P_FAMILY_CHARMANDER
@@ -115,6 +199,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Squirtle[] = INCBIN_U8("graphics/pokemon/squirtle/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Squirtle[] = INCBIN_COMP("graphics/pokemon/squirtle/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Squirtle[] = INCBIN_U32("graphics/pokemon/squirtle/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Squirtle[] = INCBIN_U32("graphics/pokemon/squirtle/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Wartortle[] = INCBIN_U32("graphics/pokemon/wartortle/anim_front.4bpp.lz");
const u32 gMonPalette_Wartortle[] = INCBIN_U32("graphics/pokemon/wartortle/normal.gbapal.lz");
@@ -124,6 +215,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Wartortle[] = INCBIN_U8("graphics/pokemon/wartortle/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Wartortle[] = INCBIN_COMP("graphics/pokemon/wartortle/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Wartortle[] = INCBIN_U32("graphics/pokemon/wartortle/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Wartortle[] = INCBIN_U32("graphics/pokemon/wartortle/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Blastoise[] = INCBIN_U32("graphics/pokemon/blastoise/anim_front.4bpp.lz");
const u32 gMonPalette_Blastoise[] = INCBIN_U32("graphics/pokemon/blastoise/normal.gbapal.lz");
@@ -133,6 +231,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Blastoise[] = INCBIN_U8("graphics/pokemon/blastoise/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Blastoise[] = INCBIN_COMP("graphics/pokemon/blastoise/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Blastoise[] = INCBIN_U32("graphics/pokemon/blastoise/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Blastoise[] = INCBIN_U32("graphics/pokemon/blastoise/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_MEGA_EVOLUTIONS
const u32 gMonFrontPic_BlastoiseMega[] = INCBIN_U32("graphics/pokemon/blastoise/mega/front.4bpp.lz");
@@ -140,6 +245,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_BlastoiseMega[] = INCBIN_U32("graphics/pokemon/blastoise/mega/back.4bpp.lz");
const u32 gMonShinyPalette_BlastoiseMega[] = INCBIN_U32("graphics/pokemon/blastoise/mega/shiny.gbapal.lz");
const u8 gMonIcon_BlastoiseMega[] = INCBIN_U8("graphics/pokemon/blastoise/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_BlastoiseMega[] = INCBIN_COMP("graphics/pokemon/blastoise/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_BlastoiseMega[] = INCBIN_U32("graphics/pokemon/blastoise/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_BlastoiseMega[] = INCBIN_U32("graphics/pokemon/blastoise/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#if P_GIGANTAMAX_FORMS
@@ -148,6 +260,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonPalette_BlastoiseGigantamax[] = INCBIN_U32("graphics/pokemon/blastoise/gigantamax/normal.gbapal.lz");
const u32 gMonShinyPalette_BlastoiseGigantamax[] = INCBIN_U32("graphics/pokemon/blastoise/gigantamax/shiny.gbapal.lz");
const u8 gMonIcon_BlastoiseGigantamax[] = INCBIN_U8("graphics/pokemon/blastoise/gigantamax/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_BlastoiseGigantamax[] = INCBIN_COMP("graphics/pokemon/blastoise/gigantamax/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_BlastoiseGigantamax[] = INCBIN_U32("graphics/pokemon/blastoise/gigantamax/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_BlastoiseGigantamax[] = INCBIN_U32("graphics/pokemon/blastoise/gigantamax/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GIGANTAMAX_FORMS
#endif //P_FAMILY_SQUIRTLE
@@ -160,6 +279,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Caterpie[] = INCBIN_U8("graphics/pokemon/caterpie/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Caterpie[] = INCBIN_COMP("graphics/pokemon/caterpie/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Caterpie[] = INCBIN_U32("graphics/pokemon/caterpie/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Caterpie[] = INCBIN_U32("graphics/pokemon/caterpie/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Metapod[] = INCBIN_U32("graphics/pokemon/metapod/anim_front.4bpp.lz");
const u32 gMonPalette_Metapod[] = INCBIN_U32("graphics/pokemon/metapod/normal.gbapal.lz");
@@ -169,6 +295,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Metapod[] = INCBIN_U8("graphics/pokemon/metapod/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Metapod[] = INCBIN_COMP("graphics/pokemon/metapod/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Metapod[] = INCBIN_U32("graphics/pokemon/metapod/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Metapod[] = INCBIN_U32("graphics/pokemon/metapod/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Butterfree[] = INCBIN_U32("graphics/pokemon/butterfree/anim_front.4bpp.lz");
const u32 gMonPalette_Butterfree[] = INCBIN_U32("graphics/pokemon/butterfree/normal.gbapal.lz");
@@ -178,6 +311,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Butterfree[] = INCBIN_U8("graphics/pokemon/butterfree/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Butterfree[] = INCBIN_COMP("graphics/pokemon/butterfree/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Butterfree[] = INCBIN_U32("graphics/pokemon/butterfree/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Butterfree[] = INCBIN_U32("graphics/pokemon/butterfree/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_ButterfreeF[] = INCBIN_U32("graphics/pokemon/butterfree/anim_frontf.4bpp.lz");
const u32 gMonBackPic_ButterfreeF[] = INCBIN_U32("graphics/pokemon/butterfree/backf.4bpp.lz");
@@ -188,6 +328,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonPalette_ButterfreeGigantamax[] = INCBIN_U32("graphics/pokemon/butterfree/gigantamax/normal.gbapal.lz");
const u32 gMonShinyPalette_ButterfreeGigantamax[] = INCBIN_U32("graphics/pokemon/butterfree/gigantamax/shiny.gbapal.lz");
const u8 gMonIcon_ButterfreeGigantamax[] = INCBIN_U8("graphics/pokemon/butterfree/gigantamax/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_ButterfreeGigantamax[] = INCBIN_COMP("graphics/pokemon/butterfree/gigantamax/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_ButterfreeGigantamax[] = INCBIN_U32("graphics/pokemon/butterfree/gigantamax/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_ButterfreeGigantamax[] = INCBIN_U32("graphics/pokemon/butterfree/gigantamax/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GIGANTAMAX_FORMS
#endif //P_FAMILY_CATERPIE
@@ -200,6 +347,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Weedle[] = INCBIN_U8("graphics/pokemon/weedle/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Weedle[] = INCBIN_COMP("graphics/pokemon/weedle/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Weedle[] = INCBIN_U32("graphics/pokemon/weedle/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Weedle[] = INCBIN_U32("graphics/pokemon/weedle/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Kakuna[] = INCBIN_U32("graphics/pokemon/kakuna/anim_front.4bpp.lz");
const u32 gMonPalette_Kakuna[] = INCBIN_U32("graphics/pokemon/kakuna/normal.gbapal.lz");
@@ -209,6 +363,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Kakuna[] = INCBIN_U8("graphics/pokemon/kakuna/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Kakuna[] = INCBIN_COMP("graphics/pokemon/kakuna/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Kakuna[] = INCBIN_U32("graphics/pokemon/kakuna/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Kakuna[] = INCBIN_U32("graphics/pokemon/kakuna/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Beedrill[] = INCBIN_U32("graphics/pokemon/beedrill/anim_front.4bpp.lz");
const u32 gMonPalette_Beedrill[] = INCBIN_U32("graphics/pokemon/beedrill/normal.gbapal.lz");
@@ -218,6 +379,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Beedrill[] = INCBIN_U8("graphics/pokemon/beedrill/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Beedrill[] = INCBIN_COMP("graphics/pokemon/beedrill/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Beedrill[] = INCBIN_U32("graphics/pokemon/beedrill/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Beedrill[] = INCBIN_U32("graphics/pokemon/beedrill/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_MEGA_EVOLUTIONS
const u32 gMonFrontPic_BeedrillMega[] = INCBIN_U32("graphics/pokemon/beedrill/mega/front.4bpp.lz");
@@ -225,6 +393,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_BeedrillMega[] = INCBIN_U32("graphics/pokemon/beedrill/mega/back.4bpp.lz");
const u32 gMonShinyPalette_BeedrillMega[] = INCBIN_U32("graphics/pokemon/beedrill/mega/shiny.gbapal.lz");
const u8 gMonIcon_BeedrillMega[] = INCBIN_U8("graphics/pokemon/beedrill/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_BeedrillMega[] = INCBIN_COMP("graphics/pokemon/beedrill/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_BeedrillMega[] = INCBIN_U32("graphics/pokemon/beedrill/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_BeedrillMega[] = INCBIN_U32("graphics/pokemon/beedrill/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#endif //P_FAMILY_WEEDLE
@@ -237,6 +412,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Pidgey[] = INCBIN_U8("graphics/pokemon/pidgey/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Pidgey[] = INCBIN_COMP("graphics/pokemon/pidgey/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Pidgey[] = INCBIN_U32("graphics/pokemon/pidgey/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Pidgey[] = INCBIN_U32("graphics/pokemon/pidgey/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Pidgeotto[] = INCBIN_U32("graphics/pokemon/pidgeotto/anim_front.4bpp.lz");
const u32 gMonPalette_Pidgeotto[] = INCBIN_U32("graphics/pokemon/pidgeotto/normal.gbapal.lz");
@@ -246,6 +428,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Pidgeotto[] = INCBIN_U8("graphics/pokemon/pidgeotto/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Pidgeotto[] = INCBIN_COMP("graphics/pokemon/pidgeotto/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Pidgeotto[] = INCBIN_U32("graphics/pokemon/pidgeotto/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Pidgeotto[] = INCBIN_U32("graphics/pokemon/pidgeotto/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Pidgeot[] = INCBIN_U32("graphics/pokemon/pidgeot/anim_front.4bpp.lz");
const u32 gMonPalette_Pidgeot[] = INCBIN_U32("graphics/pokemon/pidgeot/normal.gbapal.lz");
@@ -255,6 +444,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Pidgeot[] = INCBIN_U8("graphics/pokemon/pidgeot/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Pidgeot[] = INCBIN_COMP("graphics/pokemon/pidgeot/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Pidgeot[] = INCBIN_U32("graphics/pokemon/pidgeot/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Pidgeot[] = INCBIN_U32("graphics/pokemon/pidgeot/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_MEGA_EVOLUTIONS
const u32 gMonFrontPic_PidgeotMega[] = INCBIN_U32("graphics/pokemon/pidgeot/mega/front.4bpp.lz");
@@ -262,6 +458,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_PidgeotMega[] = INCBIN_U32("graphics/pokemon/pidgeot/mega/back.4bpp.lz");
const u32 gMonShinyPalette_PidgeotMega[] = INCBIN_U32("graphics/pokemon/pidgeot/mega/shiny.gbapal.lz");
const u8 gMonIcon_PidgeotMega[] = INCBIN_U8("graphics/pokemon/pidgeot/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_PidgeotMega[] = INCBIN_COMP("graphics/pokemon/pidgeot/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_PidgeotMega[] = INCBIN_U32("graphics/pokemon/pidgeot/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_PidgeotMega[] = INCBIN_U32("graphics/pokemon/pidgeot/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#endif //P_FAMILY_PIDGEY
@@ -274,6 +477,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Rattata[] = INCBIN_U8("graphics/pokemon/rattata/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Rattata[] = INCBIN_COMP("graphics/pokemon/rattata/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Rattata[] = INCBIN_U32("graphics/pokemon/rattata/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Rattata[] = INCBIN_U32("graphics/pokemon/rattata/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_RattataF[] = INCBIN_U32("graphics/pokemon/rattata/anim_frontf.4bpp.lz");
const u32 gMonBackPic_RattataF[] = INCBIN_U32("graphics/pokemon/rattata/backf.4bpp.lz");
@@ -286,6 +496,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Raticate[] = INCBIN_U8("graphics/pokemon/raticate/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Raticate[] = INCBIN_COMP("graphics/pokemon/raticate/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Raticate[] = INCBIN_U32("graphics/pokemon/raticate/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Raticate[] = INCBIN_U32("graphics/pokemon/raticate/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_RaticateF[] = INCBIN_U32("graphics/pokemon/raticate/anim_frontf.4bpp.lz");
const u32 gMonBackPic_RaticateF[] = INCBIN_U32("graphics/pokemon/raticate/backf.4bpp.lz");
@@ -296,12 +513,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_RattataAlolan[] = INCBIN_U32("graphics/pokemon/rattata/alolan/back.4bpp.lz");
const u32 gMonShinyPalette_RattataAlolan[] = INCBIN_U32("graphics/pokemon/rattata/alolan/shiny.gbapal.lz");
const u8 gMonIcon_RattataAlolan[] = INCBIN_U8("graphics/pokemon/rattata/alolan/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_RattataAlolan[] = INCBIN_COMP("graphics/pokemon/rattata/alolan/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_RattataAlolan[] = INCBIN_U32("graphics/pokemon/rattata/alolan/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_RattataAlolan[] = INCBIN_U32("graphics/pokemon/rattata/alolan/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_RaticateAlolan[] = INCBIN_U32("graphics/pokemon/raticate/alolan/front.4bpp.lz");
const u32 gMonPalette_RaticateAlolan[] = INCBIN_U32("graphics/pokemon/raticate/alolan/normal.gbapal.lz");
const u32 gMonBackPic_RaticateAlolan[] = INCBIN_U32("graphics/pokemon/raticate/alolan/back.4bpp.lz");
const u32 gMonShinyPalette_RaticateAlolan[] = INCBIN_U32("graphics/pokemon/raticate/alolan/shiny.gbapal.lz");
const u8 gMonIcon_RaticateAlolan[] = INCBIN_U8("graphics/pokemon/raticate/alolan/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_RaticateAlolan[] = INCBIN_COMP("graphics/pokemon/raticate/alolan/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_RaticateAlolan[] = INCBIN_U32("graphics/pokemon/raticate/alolan/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_RaticateAlolan[] = INCBIN_U32("graphics/pokemon/raticate/alolan/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_ALOLAN_FORMS
#endif //P_FAMILY_RATTATA
@@ -314,6 +545,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Spearow[] = INCBIN_U8("graphics/pokemon/spearow/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Spearow[] = INCBIN_COMP("graphics/pokemon/spearow/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Spearow[] = INCBIN_U32("graphics/pokemon/spearow/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Spearow[] = INCBIN_U32("graphics/pokemon/spearow/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Fearow[] = INCBIN_U32("graphics/pokemon/fearow/anim_front.4bpp.lz");
const u32 gMonPalette_Fearow[] = INCBIN_U32("graphics/pokemon/fearow/normal.gbapal.lz");
@@ -323,6 +561,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Fearow[] = INCBIN_U8("graphics/pokemon/fearow/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Fearow[] = INCBIN_COMP("graphics/pokemon/fearow/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Fearow[] = INCBIN_U32("graphics/pokemon/fearow/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Fearow[] = INCBIN_U32("graphics/pokemon/fearow/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SPEAROW
#if P_FAMILY_EKANS
@@ -334,6 +579,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Ekans[] = INCBIN_U8("graphics/pokemon/ekans/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Ekans[] = INCBIN_COMP("graphics/pokemon/ekans/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Ekans[] = INCBIN_U32("graphics/pokemon/ekans/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Ekans[] = INCBIN_U32("graphics/pokemon/ekans/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Arbok[] = INCBIN_U32("graphics/pokemon/arbok/anim_front.4bpp.lz");
const u32 gMonPalette_Arbok[] = INCBIN_U32("graphics/pokemon/arbok/normal.gbapal.lz");
@@ -343,6 +595,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Arbok[] = INCBIN_U8("graphics/pokemon/arbok/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Arbok[] = INCBIN_COMP("graphics/pokemon/arbok/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Arbok[] = INCBIN_U32("graphics/pokemon/arbok/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Arbok[] = INCBIN_U32("graphics/pokemon/arbok/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_EKANS
#if P_FAMILY_PIKACHU
@@ -355,12 +614,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Pichu[] = INCBIN_U8("graphics/pokemon/pichu/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Pichu[] = INCBIN_COMP("graphics/pokemon/pichu/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Pichu[] = INCBIN_U32("graphics/pokemon/pichu/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Pichu[] = INCBIN_U32("graphics/pokemon/pichu/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_PichuSpikyEared[] = INCBIN_U32("graphics/pokemon/pichu/spiky_eared/anim_front.4bpp.lz");
const u32 gMonPalette_PichuSpikyEared[] = INCBIN_U32("graphics/pokemon/pichu/spiky_eared/normal.gbapal.lz");
const u32 gMonBackPic_PichuSpikyEared[] = INCBIN_U32("graphics/pokemon/pichu/spiky_eared/back.4bpp.lz");
const u32 gMonShinyPalette_PichuSpikyEared[] = INCBIN_U32("graphics/pokemon/pichu/spiky_eared/shiny.gbapal.lz");
const u8 gMonIcon_PichuSpikyEared[] = INCBIN_U8("graphics/pokemon/pichu/spiky_eared/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_PichuSpikyEared[] = INCBIN_COMP("graphics/pokemon/pichu/spiky_eared/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_PichuSpikyEared[] = INCBIN_U32("graphics/pokemon/pichu/spiky_eared/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_PichuSpikyEared[] = INCBIN_U32("graphics/pokemon/pichu/spiky_eared/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_2_CROSS_EVOS
const u32 gMonFrontPic_Pikachu[] = INCBIN_U32("graphics/pokemon/pikachu/anim_front.4bpp.lz");
@@ -371,6 +644,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Pikachu[] = INCBIN_U8("graphics/pokemon/pikachu/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Pikachu[] = INCBIN_COMP("graphics/pokemon/pikachu/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Pikachu[] = INCBIN_U32("graphics/pokemon/pikachu/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Pikachu[] = INCBIN_U32("graphics/pokemon/pikachu/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_PikachuF[] = INCBIN_U32("graphics/pokemon/pikachu/anim_frontf.4bpp.lz");
const u32 gMonBackPic_PikachuF[] = INCBIN_U32("graphics/pokemon/pikachu/backf.4bpp.lz");
@@ -414,6 +694,15 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_PikachuLibre[] = INCBIN_U32("graphics/pokemon/pikachu/libre/back.4bpp.lz");
const u32 gMonShinyPalette_PikachuLibre[] = INCBIN_U32("graphics/pokemon/pikachu/libre/shiny.gbapal.lz");
const u8 gMonIcon_PikachuLibre[] = INCBIN_U8("graphics/pokemon/pikachu/libre/icon.4bpp");
+
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_PikachuCosplay[] = INCBIN_COMP("graphics/pokemon/pikachu/cosplay/overworld.4bpp");
+ // const u32 gObjectEventPic_PikachuRockStar[] = INCBIN_COMP("graphics/pokemon/pikachu/rock_star/overworld.4bpp");
+ // const u32 gObjectEventPic_PikachuBelle[] = INCBIN_COMP("graphics/pokemon/pikachu/belle/overworld.4bpp");
+ // const u32 gObjectEventPic_PikachuPopStar[] = INCBIN_COMP("graphics/pokemon/pikachu/pop_star/overworld.4bpp");
+ // const u32 gObjectEventPic_PikachuPhD[] = INCBIN_COMP("graphics/pokemon/pikachu/ph_d/overworld.4bpp");
+ // const u32 gObjectEventPic_PikachuLibre[] = INCBIN_COMP("graphics/pokemon/pikachu/libre/overworld.4bpp");
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_COSPLAY_PIKACHU_FORMS
#if P_CAP_PIKACHU_FORMS
@@ -464,6 +753,17 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_PikachuWorldCap[] = INCBIN_U32("graphics/pokemon/pikachu/world_cap/back.4bpp.lz");
const u32 gMonShinyPalette_PikachuWorldCap[] = INCBIN_U32("graphics/pokemon/pikachu/world_cap/shiny.gbapal.lz");
const u8 gMonIcon_PikachuWorldCap[] = INCBIN_U8("graphics/pokemon/pikachu/world_cap/icon.4bpp");
+
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_PikachuOriginalCap[] = INCBIN_COMP("graphics/pokemon/pikachu/original_cap/overworld.4bpp");
+ // const u32 gObjectEventPic_PikachuHoennCap[] = INCBIN_COMP("graphics/pokemon/pikachu/hoenn_cap/overworld.4bpp");
+ // const u32 gObjectEventPic_PikachuSinnohCap[] = INCBIN_COMP("graphics/pokemon/pikachu/sinnoh_cap/overworld.4bpp");
+ // const u32 gObjectEventPic_PikachuUnovaCap[] = INCBIN_COMP("graphics/pokemon/pikachu/unova_cap/overworld.4bpp");
+ // const u32 gObjectEventPic_PikachuKalosCap[] = INCBIN_COMP("graphics/pokemon/pikachu/kalos_cap/overworld.4bpp");
+ // const u32 gObjectEventPic_PikachuAlolaCap[] = INCBIN_COMP("graphics/pokemon/pikachu/alola_cap/overworld.4bpp");
+ // const u32 gObjectEventPic_PikachuPartnerCap[] = INCBIN_COMP("graphics/pokemon/pikachu/partner_cap/overworld.4bpp");
+ // const u32 gObjectEventPic_PikachuWorldCap[] = INCBIN_COMP("graphics/pokemon/pikachu/world_cap/overworld.4bpp");
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_CAP_PIKACHU_FORMS
#if P_GIGANTAMAX_FORMS
@@ -472,6 +772,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonPalette_PikachuGigantamax[] = INCBIN_U32("graphics/pokemon/pikachu/gigantamax/normal.gbapal.lz");
const u32 gMonShinyPalette_PikachuGigantamax[] = INCBIN_U32("graphics/pokemon/pikachu/gigantamax/shiny.gbapal.lz");
const u8 gMonIcon_PikachuGigantamax[] = INCBIN_U8("graphics/pokemon/pikachu/gigantamax/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_PikachuGigantamax[] = INCBIN_COMP("graphics/pokemon/pikachu/gigantamax/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_PikachuGigantamax[] = INCBIN_U32("graphics/pokemon/pikachu/gigantamax/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_PikachuGigantamax[] = INCBIN_U32("graphics/pokemon/pikachu/gigantamax/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GIGANTAMAX_FORMS
const u8 gMonIcon_PikachuPartner[] = INCBIN_U8("graphics/pokemon/pikachu/partner/icon.4bpp");
@@ -487,6 +794,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Raichu[] = INCBIN_U8("graphics/pokemon/raichu/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Raichu[] = INCBIN_COMP("graphics/pokemon/raichu/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Raichu[] = INCBIN_U32("graphics/pokemon/raichu/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Raichu[] = INCBIN_U32("graphics/pokemon/raichu/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_RaichuF[] = INCBIN_U32("graphics/pokemon/raichu/anim_frontf.4bpp.lz");
@@ -496,6 +810,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_RaichuAlolan[] = INCBIN_U32("graphics/pokemon/raichu/alolan/back.4bpp.lz");
const u32 gMonShinyPalette_RaichuAlolan[] = INCBIN_U32("graphics/pokemon/raichu/alolan/shiny.gbapal.lz");
const u8 gMonIcon_RaichuAlolan[] = INCBIN_U8("graphics/pokemon/raichu/alolan/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_RaichuAlolan[] = INCBIN_COMP("graphics/pokemon/raichu/alolan/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_RaichuAlolan[] = INCBIN_U32("graphics/pokemon/raichu/alolan/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_RaichuAlolan[] = INCBIN_U32("graphics/pokemon/raichu/alolan/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_ALOLAN_FORMS
#endif //P_FAMILY_PIKACHU
@@ -508,6 +829,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Sandshrew[] = INCBIN_U8("graphics/pokemon/sandshrew/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Sandshrew[] = INCBIN_COMP("graphics/pokemon/sandshrew/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Sandshrew[] = INCBIN_U32("graphics/pokemon/sandshrew/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Sandshrew[] = INCBIN_U32("graphics/pokemon/sandshrew/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Sandslash[] = INCBIN_U32("graphics/pokemon/sandslash/anim_front.4bpp.lz");
const u32 gMonPalette_Sandslash[] = INCBIN_U32("graphics/pokemon/sandslash/normal.gbapal.lz");
@@ -517,6 +845,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Sandslash[] = INCBIN_U8("graphics/pokemon/sandslash/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Sandslash[] = INCBIN_COMP("graphics/pokemon/sandslash/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Sandslash[] = INCBIN_U32("graphics/pokemon/sandslash/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Sandslash[] = INCBIN_U32("graphics/pokemon/sandslash/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_ALOLAN_FORMS
const u32 gMonFrontPic_SandshrewAlolan[] = INCBIN_U32("graphics/pokemon/sandshrew/alolan/front.4bpp.lz");
@@ -524,12 +859,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_SandshrewAlolan[] = INCBIN_U32("graphics/pokemon/sandshrew/alolan/back.4bpp.lz");
const u32 gMonShinyPalette_SandshrewAlolan[] = INCBIN_U32("graphics/pokemon/sandshrew/alolan/shiny.gbapal.lz");
const u8 gMonIcon_SandshrewAlolan[] = INCBIN_U8("graphics/pokemon/sandshrew/alolan/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_SandshrewAlolan[] = INCBIN_COMP("graphics/pokemon/sandshrew/alolan/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_SandshrewAlolan[] = INCBIN_U32("graphics/pokemon/sandshrew/alolan/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_SandshrewAlolan[] = INCBIN_U32("graphics/pokemon/sandshrew/alolan/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_SandslashAlolan[] = INCBIN_U32("graphics/pokemon/sandslash/alolan/front.4bpp.lz");
const u32 gMonPalette_SandslashAlolan[] = INCBIN_U32("graphics/pokemon/sandslash/alolan/normal.gbapal.lz");
const u32 gMonBackPic_SandslashAlolan[] = INCBIN_U32("graphics/pokemon/sandslash/alolan/back.4bpp.lz");
const u32 gMonShinyPalette_SandslashAlolan[] = INCBIN_U32("graphics/pokemon/sandslash/alolan/shiny.gbapal.lz");
const u8 gMonIcon_SandslashAlolan[] = INCBIN_U8("graphics/pokemon/sandslash/alolan/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_SandslashAlolan[] = INCBIN_COMP("graphics/pokemon/sandslash/alolan/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_SandslashAlolan[] = INCBIN_U32("graphics/pokemon/sandslash/alolan/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_SandslashAlolan[] = INCBIN_U32("graphics/pokemon/sandslash/alolan/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_ALOLAN_FORMS
#endif //P_FAMILY_SANDSHREW
@@ -542,6 +891,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_NidoranF[] = INCBIN_U8("graphics/pokemon/nidoran_f/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_NidoranF[] = INCBIN_COMP("graphics/pokemon/nidoran_f/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_NidoranF[] = INCBIN_U32("graphics/pokemon/nidoran_f/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_NidoranF[] = INCBIN_U32("graphics/pokemon/nidoran_f/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Nidorina[] = INCBIN_U32("graphics/pokemon/nidorina/anim_front.4bpp.lz");
const u32 gMonPalette_Nidorina[] = INCBIN_U32("graphics/pokemon/nidorina/normal.gbapal.lz");
@@ -551,6 +907,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Nidorina[] = INCBIN_U8("graphics/pokemon/nidorina/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Nidorina[] = INCBIN_COMP("graphics/pokemon/nidorina/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Nidorina[] = INCBIN_U32("graphics/pokemon/nidorina/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Nidorina[] = INCBIN_U32("graphics/pokemon/nidorina/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Nidoqueen[] = INCBIN_U32("graphics/pokemon/nidoqueen/anim_front.4bpp.lz");
const u32 gMonPalette_Nidoqueen[] = INCBIN_U32("graphics/pokemon/nidoqueen/normal.gbapal.lz");
@@ -560,6 +923,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Nidoqueen[] = INCBIN_U8("graphics/pokemon/nidoqueen/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Nidoqueen[] = INCBIN_COMP("graphics/pokemon/nidoqueen/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Nidoqueen[] = INCBIN_U32("graphics/pokemon/nidoqueen/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Nidoqueen[] = INCBIN_U32("graphics/pokemon/nidoqueen/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_NidoranM[] = INCBIN_U32("graphics/pokemon/nidoran_m/anim_front.4bpp.lz");
const u32 gMonPalette_NidoranM[] = INCBIN_U32("graphics/pokemon/nidoran_m/normal.gbapal.lz");
@@ -569,6 +939,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_NidoranM[] = INCBIN_U8("graphics/pokemon/nidoran_m/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_NidoranM[] = INCBIN_COMP("graphics/pokemon/nidoran_m/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_NidoranM[] = INCBIN_U32("graphics/pokemon/nidoran_m/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_NidoranM[] = INCBIN_U32("graphics/pokemon/nidoran_m/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Nidorino[] = INCBIN_U32("graphics/pokemon/nidorino/anim_front.4bpp.lz");
const u32 gMonPalette_Nidorino[] = INCBIN_U32("graphics/pokemon/nidorino/normal.gbapal.lz");
@@ -578,6 +955,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Nidorino[] = INCBIN_U8("graphics/pokemon/nidorino/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Nidorino[] = INCBIN_COMP("graphics/pokemon/nidorino/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Nidorino[] = INCBIN_U32("graphics/pokemon/nidorino/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Nidorino[] = INCBIN_U32("graphics/pokemon/nidorino/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Nidoking[] = INCBIN_U32("graphics/pokemon/nidoking/anim_front.4bpp.lz");
const u32 gMonPalette_Nidoking[] = INCBIN_U32("graphics/pokemon/nidoking/normal.gbapal.lz");
@@ -587,6 +971,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Nidoking[] = INCBIN_U8("graphics/pokemon/nidoking/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Nidoking[] = INCBIN_COMP("graphics/pokemon/nidoking/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Nidoking[] = INCBIN_U32("graphics/pokemon/nidoking/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Nidoking[] = INCBIN_U32("graphics/pokemon/nidoking/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_NIDORAN
#if P_FAMILY_CLEFAIRY
@@ -599,6 +990,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Cleffa[] = INCBIN_U8("graphics/pokemon/cleffa/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Cleffa[] = INCBIN_COMP("graphics/pokemon/cleffa/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Cleffa[] = INCBIN_U32("graphics/pokemon/cleffa/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Cleffa[] = INCBIN_U32("graphics/pokemon/cleffa/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_2_CROSS_EVOS
const u32 gMonFrontPic_Clefairy[] = INCBIN_U32("graphics/pokemon/clefairy/anim_front.4bpp.lz");
@@ -609,6 +1007,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Clefairy[] = INCBIN_U8("graphics/pokemon/clefairy/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Clefairy[] = INCBIN_COMP("graphics/pokemon/clefairy/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Clefairy[] = INCBIN_U32("graphics/pokemon/clefairy/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Clefairy[] = INCBIN_U32("graphics/pokemon/clefairy/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Clefable[] = INCBIN_U32("graphics/pokemon/clefable/anim_front.4bpp.lz");
const u32 gMonPalette_Clefable[] = INCBIN_U32("graphics/pokemon/clefable/normal.gbapal.lz");
@@ -618,6 +1023,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Clefable[] = INCBIN_U8("graphics/pokemon/clefable/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Clefable[] = INCBIN_COMP("graphics/pokemon/clefable/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Clefable[] = INCBIN_U32("graphics/pokemon/clefable/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Clefable[] = INCBIN_U32("graphics/pokemon/clefable/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_CLEFAIRY
#if P_FAMILY_VULPIX
@@ -629,6 +1041,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Vulpix[] = INCBIN_U8("graphics/pokemon/vulpix/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Vulpix[] = INCBIN_COMP("graphics/pokemon/vulpix/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Vulpix[] = INCBIN_U32("graphics/pokemon/vulpix/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Vulpix[] = INCBIN_U32("graphics/pokemon/vulpix/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Ninetales[] = INCBIN_U32("graphics/pokemon/ninetales/anim_front.4bpp.lz");
const u32 gMonPalette_Ninetales[] = INCBIN_U32("graphics/pokemon/ninetales/normal.gbapal.lz");
@@ -638,6 +1057,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Ninetales[] = INCBIN_U8("graphics/pokemon/ninetales/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Ninetales[] = INCBIN_COMP("graphics/pokemon/ninetales/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Ninetales[] = INCBIN_U32("graphics/pokemon/ninetales/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Ninetales[] = INCBIN_U32("graphics/pokemon/ninetales/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_ALOLAN_FORMS
const u32 gMonFrontPic_VulpixAlolan[] = INCBIN_U32("graphics/pokemon/vulpix/alolan/front.4bpp.lz");
@@ -645,12 +1071,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_VulpixAlolan[] = INCBIN_U32("graphics/pokemon/vulpix/alolan/back.4bpp.lz");
const u32 gMonShinyPalette_VulpixAlolan[] = INCBIN_U32("graphics/pokemon/vulpix/alolan/shiny.gbapal.lz");
const u8 gMonIcon_VulpixAlolan[] = INCBIN_U8("graphics/pokemon/vulpix/alolan/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_VulpixAlolan[] = INCBIN_COMP("graphics/pokemon/vulpix/alolan/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_VulpixAlolan[] = INCBIN_U32("graphics/pokemon/vulpix/alolan/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_VulpixAlolan[] = INCBIN_U32("graphics/pokemon/vulpix/alolan/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_NinetalesAlolan[] = INCBIN_U32("graphics/pokemon/ninetales/alolan/front.4bpp.lz");
const u32 gMonPalette_NinetalesAlolan[] = INCBIN_U32("graphics/pokemon/ninetales/alolan/normal.gbapal.lz");
const u32 gMonBackPic_NinetalesAlolan[] = INCBIN_U32("graphics/pokemon/ninetales/alolan/back.4bpp.lz");
const u32 gMonShinyPalette_NinetalesAlolan[] = INCBIN_U32("graphics/pokemon/ninetales/alolan/shiny.gbapal.lz");
const u8 gMonIcon_NinetalesAlolan[] = INCBIN_U8("graphics/pokemon/ninetales/alolan/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_NinetalesAlolan[] = INCBIN_COMP("graphics/pokemon/ninetales/alolan/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_NinetalesAlolan[] = INCBIN_U32("graphics/pokemon/ninetales/alolan/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_NinetalesAlolan[] = INCBIN_U32("graphics/pokemon/ninetales/alolan/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_ALOLAN_FORMS
#endif //P_FAMILY_VULPIX
@@ -664,6 +1104,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Igglybuff[] = INCBIN_U8("graphics/pokemon/igglybuff/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Igglybuff[] = INCBIN_COMP("graphics/pokemon/igglybuff/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Igglybuff[] = INCBIN_U32("graphics/pokemon/igglybuff/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Igglybuff[] = INCBIN_U32("graphics/pokemon/igglybuff/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_2_CROSS_EVOS
const u32 gMonFrontPic_Jigglypuff[] = INCBIN_U32("graphics/pokemon/jigglypuff/anim_front.4bpp.lz");
@@ -674,6 +1121,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Jigglypuff[] = INCBIN_U8("graphics/pokemon/jigglypuff/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Jigglypuff[] = INCBIN_COMP("graphics/pokemon/jigglypuff/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Jigglypuff[] = INCBIN_U32("graphics/pokemon/jigglypuff/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Jigglypuff[] = INCBIN_U32("graphics/pokemon/jigglypuff/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Wigglytuff[] = INCBIN_U32("graphics/pokemon/wigglytuff/anim_front.4bpp.lz");
const u32 gMonPalette_Wigglytuff[] = INCBIN_U32("graphics/pokemon/wigglytuff/normal.gbapal.lz");
@@ -683,6 +1137,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Wigglytuff[] = INCBIN_U8("graphics/pokemon/wigglytuff/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Wigglytuff[] = INCBIN_COMP("graphics/pokemon/wigglytuff/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Wigglytuff[] = INCBIN_U32("graphics/pokemon/wigglytuff/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Wigglytuff[] = INCBIN_U32("graphics/pokemon/wigglytuff/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_JIGGLYPUFF
#if P_FAMILY_ZUBAT
@@ -694,6 +1155,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Zubat[] = INCBIN_U8("graphics/pokemon/zubat/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Zubat[] = INCBIN_COMP("graphics/pokemon/zubat/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Zubat[] = INCBIN_U32("graphics/pokemon/zubat/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Zubat[] = INCBIN_U32("graphics/pokemon/zubat/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_ZubatF[] = INCBIN_U32("graphics/pokemon/zubat/anim_frontf.4bpp.lz");
const u32 gMonBackPic_ZubatF[] = INCBIN_U32("graphics/pokemon/zubat/backf.4bpp.lz");
@@ -706,6 +1174,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Golbat[] = INCBIN_U8("graphics/pokemon/golbat/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Golbat[] = INCBIN_COMP("graphics/pokemon/golbat/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Golbat[] = INCBIN_U32("graphics/pokemon/golbat/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Golbat[] = INCBIN_U32("graphics/pokemon/golbat/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_GolbatF[] = INCBIN_U32("graphics/pokemon/golbat/anim_frontf.4bpp.lz");
const u32 gMonBackPic_GolbatF[] = INCBIN_U32("graphics/pokemon/golbat/backf.4bpp.lz");
@@ -719,6 +1194,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Crobat[] = INCBIN_U8("graphics/pokemon/crobat/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Crobat[] = INCBIN_COMP("graphics/pokemon/crobat/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Crobat[] = INCBIN_U32("graphics/pokemon/crobat/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Crobat[] = INCBIN_U32("graphics/pokemon/crobat/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_2_CROSS_EVOS
#endif //P_FAMILY_ZUBAT
@@ -731,6 +1213,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Oddish[] = INCBIN_U8("graphics/pokemon/oddish/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Oddish[] = INCBIN_COMP("graphics/pokemon/oddish/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Oddish[] = INCBIN_U32("graphics/pokemon/oddish/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Oddish[] = INCBIN_U32("graphics/pokemon/oddish/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Gloom[] = INCBIN_U32("graphics/pokemon/gloom/anim_front.4bpp.lz");
const u32 gMonPalette_Gloom[] = INCBIN_U32("graphics/pokemon/gloom/normal.gbapal.lz");
@@ -740,6 +1229,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Gloom[] = INCBIN_U8("graphics/pokemon/gloom/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Gloom[] = INCBIN_COMP("graphics/pokemon/gloom/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Gloom[] = INCBIN_U32("graphics/pokemon/gloom/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Gloom[] = INCBIN_U32("graphics/pokemon/gloom/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_GloomF[] = INCBIN_U32("graphics/pokemon/gloom/anim_frontf.4bpp.lz");
const u32 gMonBackPic_GloomF[] = INCBIN_U32("graphics/pokemon/gloom/backf.4bpp.lz");
@@ -752,6 +1248,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Vileplume[] = INCBIN_U8("graphics/pokemon/vileplume/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Vileplume[] = INCBIN_COMP("graphics/pokemon/vileplume/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Vileplume[] = INCBIN_U32("graphics/pokemon/vileplume/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Vileplume[] = INCBIN_U32("graphics/pokemon/vileplume/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_VileplumeF[] = INCBIN_U32("graphics/pokemon/vileplume/anim_frontf.4bpp.lz");
const u32 gMonBackPic_VileplumeF[] = INCBIN_U32("graphics/pokemon/vileplume/backf.4bpp.lz");
@@ -765,6 +1268,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Bellossom[] = INCBIN_U8("graphics/pokemon/bellossom/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Bellossom[] = INCBIN_COMP("graphics/pokemon/bellossom/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Bellossom[] = INCBIN_U32("graphics/pokemon/bellossom/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Bellossom[] = INCBIN_U32("graphics/pokemon/bellossom/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_2_CROSS_EVOS
#endif //P_FAMILY_ODDISH
@@ -777,6 +1287,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Paras[] = INCBIN_U8("graphics/pokemon/paras/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Paras[] = INCBIN_COMP("graphics/pokemon/paras/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Paras[] = INCBIN_U32("graphics/pokemon/paras/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Paras[] = INCBIN_U32("graphics/pokemon/paras/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Parasect[] = INCBIN_U32("graphics/pokemon/parasect/anim_front.4bpp.lz");
const u32 gMonPalette_Parasect[] = INCBIN_U32("graphics/pokemon/parasect/normal.gbapal.lz");
@@ -786,6 +1303,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Parasect[] = INCBIN_U8("graphics/pokemon/parasect/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Parasect[] = INCBIN_COMP("graphics/pokemon/parasect/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Parasect[] = INCBIN_U32("graphics/pokemon/parasect/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Parasect[] = INCBIN_U32("graphics/pokemon/parasect/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_PARAS
#if P_FAMILY_VENONAT
@@ -797,6 +1321,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Venonat[] = INCBIN_U8("graphics/pokemon/venonat/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Venonat[] = INCBIN_COMP("graphics/pokemon/venonat/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Venonat[] = INCBIN_U32("graphics/pokemon/venonat/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Venonat[] = INCBIN_U32("graphics/pokemon/venonat/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Venomoth[] = INCBIN_U32("graphics/pokemon/venomoth/anim_front.4bpp.lz");
const u32 gMonPalette_Venomoth[] = INCBIN_U32("graphics/pokemon/venomoth/normal.gbapal.lz");
@@ -806,6 +1337,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Venomoth[] = INCBIN_U8("graphics/pokemon/venomoth/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Venomoth[] = INCBIN_COMP("graphics/pokemon/venomoth/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Venomoth[] = INCBIN_U32("graphics/pokemon/venomoth/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Venomoth[] = INCBIN_U32("graphics/pokemon/venomoth/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_VENONAT
#if P_FAMILY_DIGLETT
@@ -817,6 +1355,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Diglett[] = INCBIN_U8("graphics/pokemon/diglett/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Diglett[] = INCBIN_COMP("graphics/pokemon/diglett/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Diglett[] = INCBIN_U32("graphics/pokemon/diglett/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Diglett[] = INCBIN_U32("graphics/pokemon/diglett/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Dugtrio[] = INCBIN_U32("graphics/pokemon/dugtrio/anim_front.4bpp.lz");
const u32 gMonPalette_Dugtrio[] = INCBIN_U32("graphics/pokemon/dugtrio/normal.gbapal.lz");
@@ -826,6 +1371,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Dugtrio[] = INCBIN_U8("graphics/pokemon/dugtrio/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Dugtrio[] = INCBIN_COMP("graphics/pokemon/dugtrio/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Dugtrio[] = INCBIN_U32("graphics/pokemon/dugtrio/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Dugtrio[] = INCBIN_U32("graphics/pokemon/dugtrio/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_ALOLAN_FORMS
const u32 gMonFrontPic_DiglettAlolan[] = INCBIN_U32("graphics/pokemon/diglett/alolan/front.4bpp.lz");
@@ -833,12 +1385,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_DiglettAlolan[] = INCBIN_U32("graphics/pokemon/diglett/alolan/back.4bpp.lz");
const u32 gMonShinyPalette_DiglettAlolan[] = INCBIN_U32("graphics/pokemon/diglett/alolan/shiny.gbapal.lz");
const u8 gMonIcon_DiglettAlolan[] = INCBIN_U8("graphics/pokemon/diglett/alolan/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_DiglettAlolan[] = INCBIN_COMP("graphics/pokemon/diglett/alolan/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_DiglettAlolan[] = INCBIN_U32("graphics/pokemon/diglett/alolan/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_DiglettAlolan[] = INCBIN_U32("graphics/pokemon/diglett/alolan/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_DugtrioAlolan[] = INCBIN_U32("graphics/pokemon/dugtrio/alolan/front.4bpp.lz");
const u32 gMonPalette_DugtrioAlolan[] = INCBIN_U32("graphics/pokemon/dugtrio/alolan/normal.gbapal.lz");
const u32 gMonBackPic_DugtrioAlolan[] = INCBIN_U32("graphics/pokemon/dugtrio/alolan/back.4bpp.lz");
const u32 gMonShinyPalette_DugtrioAlolan[] = INCBIN_U32("graphics/pokemon/dugtrio/alolan/shiny.gbapal.lz");
const u8 gMonIcon_DugtrioAlolan[] = INCBIN_U8("graphics/pokemon/dugtrio/alolan/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_DugtrioAlolan[] = INCBIN_COMP("graphics/pokemon/dugtrio/alolan/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_DugtrioAlolan[] = INCBIN_U32("graphics/pokemon/dugtrio/alolan/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_DugtrioAlolan[] = INCBIN_U32("graphics/pokemon/dugtrio/alolan/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_ALOLAN_FORMS
#endif //P_FAMILY_DIGLETT
@@ -851,6 +1417,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Meowth[] = INCBIN_U8("graphics/pokemon/meowth/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Meowth[] = INCBIN_COMP("graphics/pokemon/meowth/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Meowth[] = INCBIN_U32("graphics/pokemon/meowth/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Meowth[] = INCBIN_U32("graphics/pokemon/meowth/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Persian[] = INCBIN_U32("graphics/pokemon/persian/anim_front.4bpp.lz");
const u32 gMonPalette_Persian[] = INCBIN_U32("graphics/pokemon/persian/normal.gbapal.lz");
@@ -860,6 +1433,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Persian[] = INCBIN_U8("graphics/pokemon/persian/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Persian[] = INCBIN_COMP("graphics/pokemon/persian/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Persian[] = INCBIN_U32("graphics/pokemon/persian/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Persian[] = INCBIN_U32("graphics/pokemon/persian/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_ALOLAN_FORMS
const u32 gMonFrontPic_MeowthAlolan[] = INCBIN_U32("graphics/pokemon/meowth/alolan/front.4bpp.lz");
@@ -867,12 +1447,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_MeowthAlolan[] = INCBIN_U32("graphics/pokemon/meowth/alolan/back.4bpp.lz");
const u32 gMonShinyPalette_MeowthAlolan[] = INCBIN_U32("graphics/pokemon/meowth/alolan/shiny.gbapal.lz");
const u8 gMonIcon_MeowthAlolan[] = INCBIN_U8("graphics/pokemon/meowth/alolan/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_MeowthAlolan[] = INCBIN_COMP("graphics/pokemon/meowth/alolan/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_MeowthAlolan[] = INCBIN_U32("graphics/pokemon/meowth/alolan/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_MeowthAlolan[] = INCBIN_U32("graphics/pokemon/meowth/alolan/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_PersianAlolan[] = INCBIN_U32("graphics/pokemon/persian/alolan/front.4bpp.lz");
const u32 gMonPalette_PersianAlolan[] = INCBIN_U32("graphics/pokemon/persian/alolan/normal.gbapal.lz");
const u32 gMonBackPic_PersianAlolan[] = INCBIN_U32("graphics/pokemon/persian/alolan/back.4bpp.lz");
const u32 gMonShinyPalette_PersianAlolan[] = INCBIN_U32("graphics/pokemon/persian/alolan/shiny.gbapal.lz");
const u8 gMonIcon_PersianAlolan[] = INCBIN_U8("graphics/pokemon/persian/alolan/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_PersianAlolan[] = INCBIN_COMP("graphics/pokemon/persian/alolan/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_PersianAlolan[] = INCBIN_U32("graphics/pokemon/persian/alolan/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_PersianAlolan[] = INCBIN_U32("graphics/pokemon/persian/alolan/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_ALOLAN_FORMS
#if P_GALARIAN_FORMS
@@ -881,6 +1475,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_MeowthGalarian[] = INCBIN_U32("graphics/pokemon/meowth/galarian/back.4bpp.lz");
const u32 gMonShinyPalette_MeowthGalarian[] = INCBIN_U32("graphics/pokemon/meowth/galarian/shiny.gbapal.lz");
const u8 gMonIcon_MeowthGalarian[] = INCBIN_U8("graphics/pokemon/meowth/galarian/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_MeowthGalarian[] = INCBIN_COMP("graphics/pokemon/meowth/galarian/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_MeowthGalarian[] = INCBIN_U32("graphics/pokemon/meowth/galarian/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_MeowthGalarian[] = INCBIN_U32("graphics/pokemon/meowth/galarian/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Perrserker[] = INCBIN_U32("graphics/pokemon/perrserker/front.4bpp.lz");
const u32 gMonPalette_Perrserker[] = INCBIN_U32("graphics/pokemon/perrserker/normal.gbapal.lz");
@@ -890,6 +1491,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Perrserker[] = INCBIN_U8("graphics/pokemon/perrserker/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Perrserker[] = INCBIN_COMP("graphics/pokemon/perrserker/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Perrserker[] = INCBIN_U32("graphics/pokemon/perrserker/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Perrserker[] = INCBIN_U32("graphics/pokemon/perrserker/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GALARIAN_FORMS
#if P_GIGANTAMAX_FORMS
@@ -898,6 +1506,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonPalette_MeowthGigantamax[] = INCBIN_U32("graphics/pokemon/meowth/gigantamax/normal.gbapal.lz");
const u32 gMonShinyPalette_MeowthGigantamax[] = INCBIN_U32("graphics/pokemon/meowth/gigantamax/shiny.gbapal.lz");
const u8 gMonIcon_MeowthGigantamax[] = INCBIN_U8("graphics/pokemon/meowth/gigantamax/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_MeowthGigantamax[] = INCBIN_COMP("graphics/pokemon/meowth/gigantamax/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_MeowthGigantamax[] = INCBIN_U32("graphics/pokemon/meowth/gigantamax/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_MeowthGigantamax[] = INCBIN_U32("graphics/pokemon/meowth/gigantamax/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GIGANTAMAX_FORMS
#endif //P_FAMILY_MEOWTH
@@ -910,6 +1525,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Psyduck[] = INCBIN_U8("graphics/pokemon/psyduck/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Psyduck[] = INCBIN_COMP("graphics/pokemon/psyduck/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Psyduck[] = INCBIN_U32("graphics/pokemon/psyduck/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Psyduck[] = INCBIN_U32("graphics/pokemon/psyduck/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Golduck[] = INCBIN_U32("graphics/pokemon/golduck/anim_front.4bpp.lz");
const u32 gMonPalette_Golduck[] = INCBIN_U32("graphics/pokemon/golduck/normal.gbapal.lz");
@@ -919,6 +1541,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Golduck[] = INCBIN_U8("graphics/pokemon/golduck/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Golduck[] = INCBIN_COMP("graphics/pokemon/golduck/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Golduck[] = INCBIN_U32("graphics/pokemon/golduck/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Golduck[] = INCBIN_U32("graphics/pokemon/golduck/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_PSYDUCK
#if P_FAMILY_MANKEY
@@ -930,6 +1559,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Mankey[] = INCBIN_U8("graphics/pokemon/mankey/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Mankey[] = INCBIN_COMP("graphics/pokemon/mankey/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Mankey[] = INCBIN_U32("graphics/pokemon/mankey/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Mankey[] = INCBIN_U32("graphics/pokemon/mankey/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Primeape[] = INCBIN_U32("graphics/pokemon/primeape/anim_front.4bpp.lz");
const u32 gMonPalette_Primeape[] = INCBIN_U32("graphics/pokemon/primeape/normal.gbapal.lz");
@@ -939,6 +1575,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Primeape[] = INCBIN_U8("graphics/pokemon/primeape/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Primeape[] = INCBIN_COMP("graphics/pokemon/primeape/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Primeape[] = INCBIN_U32("graphics/pokemon/primeape/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Primeape[] = INCBIN_U32("graphics/pokemon/primeape/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GEN_9_CROSS_EVOS
const u32 gMonFrontPic_Annihilape[] = INCBIN_U32("graphics/pokemon/annihilape/front.4bpp.lz");
@@ -949,6 +1592,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_9_CROSS_EVOS
#endif //P_FAMILY_MANKEY
@@ -961,6 +1611,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Growlithe[] = INCBIN_U8("graphics/pokemon/growlithe/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Growlithe[] = INCBIN_COMP("graphics/pokemon/growlithe/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Growlithe[] = INCBIN_U32("graphics/pokemon/growlithe/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Growlithe[] = INCBIN_U32("graphics/pokemon/growlithe/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Arcanine[] = INCBIN_U32("graphics/pokemon/arcanine/anim_front.4bpp.lz");
const u32 gMonPalette_Arcanine[] = INCBIN_U32("graphics/pokemon/arcanine/normal.gbapal.lz");
@@ -970,6 +1627,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Arcanine[] = INCBIN_U8("graphics/pokemon/arcanine/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Arcanine[] = INCBIN_COMP("graphics/pokemon/arcanine/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Arcanine[] = INCBIN_U32("graphics/pokemon/arcanine/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Arcanine[] = INCBIN_U32("graphics/pokemon/arcanine/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_HISUIAN_FORMS
const u32 gMonFrontPic_GrowlitheHisuian[] = INCBIN_U32("graphics/pokemon/growlithe/hisuian/front.4bpp.lz");
@@ -977,12 +1641,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_GrowlitheHisuian[] = INCBIN_U32("graphics/pokemon/growlithe/hisuian/back.4bpp.lz");
const u32 gMonShinyPalette_GrowlitheHisuian[] = INCBIN_U32("graphics/pokemon/growlithe/hisuian/shiny.gbapal.lz");
const u8 gMonIcon_GrowlitheHisuian[] = INCBIN_U8("graphics/pokemon/growlithe/hisuian/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_GrowlitheHisuian[] = INCBIN_COMP("graphics/pokemon/growlithe/hisuian/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_GrowlitheHisuian[] = INCBIN_U32("graphics/pokemon/growlithe/hisuian/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_GrowlitheHisuian[] = INCBIN_U32("graphics/pokemon/growlithe/hisuian/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_ArcanineHisuian[] = INCBIN_U32("graphics/pokemon/arcanine/hisuian/front.4bpp.lz");
const u32 gMonPalette_ArcanineHisuian[] = INCBIN_U32("graphics/pokemon/arcanine/hisuian/normal.gbapal.lz");
const u32 gMonBackPic_ArcanineHisuian[] = INCBIN_U32("graphics/pokemon/arcanine/hisuian/back.4bpp.lz");
const u32 gMonShinyPalette_ArcanineHisuian[] = INCBIN_U32("graphics/pokemon/arcanine/hisuian/shiny.gbapal.lz");
const u8 gMonIcon_ArcanineHisuian[] = INCBIN_U8("graphics/pokemon/arcanine/hisuian/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_ArcanineHisuian[] = INCBIN_COMP("graphics/pokemon/arcanine/hisuian/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_ArcanineHisuian[] = INCBIN_U32("graphics/pokemon/arcanine/hisuian/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_ArcanineHisuian[] = INCBIN_U32("graphics/pokemon/arcanine/hisuian/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_HISUIAN_FORMS
#endif //P_FAMILY_GROWLITHE
@@ -995,6 +1673,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Poliwag[] = INCBIN_U8("graphics/pokemon/poliwag/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Poliwag[] = INCBIN_COMP("graphics/pokemon/poliwag/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Poliwag[] = INCBIN_U32("graphics/pokemon/poliwag/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Poliwag[] = INCBIN_U32("graphics/pokemon/poliwag/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Poliwhirl[] = INCBIN_U32("graphics/pokemon/poliwhirl/anim_front.4bpp.lz");
const u32 gMonPalette_Poliwhirl[] = INCBIN_U32("graphics/pokemon/poliwhirl/normal.gbapal.lz");
@@ -1004,6 +1689,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Poliwhirl[] = INCBIN_U8("graphics/pokemon/poliwhirl/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Poliwhirl[] = INCBIN_COMP("graphics/pokemon/poliwhirl/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Poliwhirl[] = INCBIN_U32("graphics/pokemon/poliwhirl/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Poliwhirl[] = INCBIN_U32("graphics/pokemon/poliwhirl/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Poliwrath[] = INCBIN_U32("graphics/pokemon/poliwrath/anim_front.4bpp.lz");
const u32 gMonPalette_Poliwrath[] = INCBIN_U32("graphics/pokemon/poliwrath/normal.gbapal.lz");
@@ -1013,6 +1705,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Poliwrath[] = INCBIN_U8("graphics/pokemon/poliwrath/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Poliwrath[] = INCBIN_COMP("graphics/pokemon/poliwrath/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Poliwrath[] = INCBIN_U32("graphics/pokemon/poliwrath/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Poliwrath[] = INCBIN_U32("graphics/pokemon/poliwrath/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GEN_2_CROSS_EVOS
const u32 gMonFrontPic_Politoed[] = INCBIN_U32("graphics/pokemon/politoed/anim_front.4bpp.lz");
@@ -1023,6 +1722,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Politoed[] = INCBIN_U8("graphics/pokemon/politoed/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Politoed[] = INCBIN_COMP("graphics/pokemon/politoed/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Politoed[] = INCBIN_U32("graphics/pokemon/politoed/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Politoed[] = INCBIN_U32("graphics/pokemon/politoed/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_PolitoedF[] = INCBIN_U32("graphics/pokemon/politoed/anim_frontf.4bpp.lz");
const u32 gMonBackPic_PolitoedF[] = INCBIN_U32("graphics/pokemon/politoed/backf.4bpp.lz");
@@ -1038,6 +1744,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Abra[] = INCBIN_U8("graphics/pokemon/abra/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Abra[] = INCBIN_COMP("graphics/pokemon/abra/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Abra[] = INCBIN_U32("graphics/pokemon/abra/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Abra[] = INCBIN_U32("graphics/pokemon/abra/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Kadabra[] = INCBIN_U32("graphics/pokemon/kadabra/anim_front.4bpp.lz");
const u32 gMonPalette_Kadabra[] = INCBIN_U32("graphics/pokemon/kadabra/normal.gbapal.lz");
@@ -1047,6 +1760,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Kadabra[] = INCBIN_U8("graphics/pokemon/kadabra/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Kadabra[] = INCBIN_COMP("graphics/pokemon/kadabra/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Kadabra[] = INCBIN_U32("graphics/pokemon/kadabra/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Kadabra[] = INCBIN_U32("graphics/pokemon/kadabra/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_KadabraF[] = INCBIN_U32("graphics/pokemon/kadabra/anim_frontf.4bpp.lz");
const u32 gMonBackPic_KadabraF[] = INCBIN_U32("graphics/pokemon/kadabra/backf.4bpp.lz");
@@ -1059,6 +1779,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Alakazam[] = INCBIN_U8("graphics/pokemon/alakazam/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Alakazam[] = INCBIN_COMP("graphics/pokemon/alakazam/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Alakazam[] = INCBIN_U32("graphics/pokemon/alakazam/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Alakazam[] = INCBIN_U32("graphics/pokemon/alakazam/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_AlakazamF[] = INCBIN_U32("graphics/pokemon/alakazam/anim_frontf.4bpp.lz");
const u32 gMonBackPic_AlakazamF[] = INCBIN_U32("graphics/pokemon/alakazam/backf.4bpp.lz");
@@ -1069,6 +1796,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_AlakazamMega[] = INCBIN_U32("graphics/pokemon/alakazam/mega/back.4bpp.lz");
const u32 gMonShinyPalette_AlakazamMega[] = INCBIN_U32("graphics/pokemon/alakazam/mega/shiny.gbapal.lz");
const u8 gMonIcon_AlakazamMega[] = INCBIN_U8("graphics/pokemon/alakazam/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_AlakazamMega[] = INCBIN_COMP("graphics/pokemon/alakazam/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_AlakazamMega[] = INCBIN_U32("graphics/pokemon/alakazam/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_AlakazamMega[] = INCBIN_U32("graphics/pokemon/alakazam/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#endif //P_FAMILY_ABRA
@@ -1081,6 +1815,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Machop[] = INCBIN_U8("graphics/pokemon/machop/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Machop[] = INCBIN_COMP("graphics/pokemon/machop/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Machop[] = INCBIN_U32("graphics/pokemon/machop/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Machop[] = INCBIN_U32("graphics/pokemon/machop/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Machoke[] = INCBIN_U32("graphics/pokemon/machoke/anim_front.4bpp.lz");
const u32 gMonPalette_Machoke[] = INCBIN_U32("graphics/pokemon/machoke/normal.gbapal.lz");
@@ -1090,6 +1831,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Machoke[] = INCBIN_U8("graphics/pokemon/machoke/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Machoke[] = INCBIN_COMP("graphics/pokemon/machoke/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Machoke[] = INCBIN_U32("graphics/pokemon/machoke/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Machoke[] = INCBIN_U32("graphics/pokemon/machoke/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Machamp[] = INCBIN_U32("graphics/pokemon/machamp/anim_front.4bpp.lz");
const u32 gMonPalette_Machamp[] = INCBIN_U32("graphics/pokemon/machamp/normal.gbapal.lz");
@@ -1099,6 +1847,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Machamp[] = INCBIN_U8("graphics/pokemon/machamp/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Machamp[] = INCBIN_COMP("graphics/pokemon/machamp/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Machamp[] = INCBIN_U32("graphics/pokemon/machamp/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Machamp[] = INCBIN_U32("graphics/pokemon/machamp/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GIGANTAMAX_FORMS
const u32 gMonFrontPic_MachampGigantamax[] = INCBIN_U32("graphics/pokemon/machamp/gigantamax/front.4bpp.lz");
@@ -1106,6 +1861,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonPalette_MachampGigantamax[] = INCBIN_U32("graphics/pokemon/machamp/gigantamax/normal.gbapal.lz");
const u32 gMonShinyPalette_MachampGigantamax[] = INCBIN_U32("graphics/pokemon/machamp/gigantamax/shiny.gbapal.lz");
const u8 gMonIcon_MachampGigantamax[] = INCBIN_U8("graphics/pokemon/machamp/gigantamax/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_MachampGigantamax[] = INCBIN_COMP("graphics/pokemon/machamp/gigantamax/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_MachampGigantamax[] = INCBIN_U32("graphics/pokemon/machamp/gigantamax/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_MachampGigantamax[] = INCBIN_U32("graphics/pokemon/machamp/gigantamax/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GIGANTAMAX_FORMS
#endif //P_FAMILY_MACHOP
@@ -1118,6 +1880,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Bellsprout[] = INCBIN_U8("graphics/pokemon/bellsprout/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Bellsprout[] = INCBIN_COMP("graphics/pokemon/bellsprout/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Bellsprout[] = INCBIN_U32("graphics/pokemon/bellsprout/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Bellsprout[] = INCBIN_U32("graphics/pokemon/bellsprout/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Weepinbell[] = INCBIN_U32("graphics/pokemon/weepinbell/anim_front.4bpp.lz");
const u32 gMonPalette_Weepinbell[] = INCBIN_U32("graphics/pokemon/weepinbell/normal.gbapal.lz");
@@ -1127,6 +1896,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Weepinbell[] = INCBIN_U8("graphics/pokemon/weepinbell/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Weepinbell[] = INCBIN_COMP("graphics/pokemon/weepinbell/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Weepinbell[] = INCBIN_U32("graphics/pokemon/weepinbell/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Weepinbell[] = INCBIN_U32("graphics/pokemon/weepinbell/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Victreebel[] = INCBIN_U32("graphics/pokemon/victreebel/anim_front.4bpp.lz");
const u32 gMonPalette_Victreebel[] = INCBIN_U32("graphics/pokemon/victreebel/normal.gbapal.lz");
@@ -1136,6 +1912,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Victreebel[] = INCBIN_U8("graphics/pokemon/victreebel/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Victreebel[] = INCBIN_COMP("graphics/pokemon/victreebel/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Victreebel[] = INCBIN_U32("graphics/pokemon/victreebel/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Victreebel[] = INCBIN_U32("graphics/pokemon/victreebel/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_BELLSPROUT
#if P_FAMILY_TENTACOOL
@@ -1147,6 +1930,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Tentacool[] = INCBIN_U8("graphics/pokemon/tentacool/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Tentacool[] = INCBIN_COMP("graphics/pokemon/tentacool/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Tentacool[] = INCBIN_U32("graphics/pokemon/tentacool/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Tentacool[] = INCBIN_U32("graphics/pokemon/tentacool/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Tentacruel[] = INCBIN_U32("graphics/pokemon/tentacruel/anim_front.4bpp.lz");
const u32 gMonPalette_Tentacruel[] = INCBIN_U32("graphics/pokemon/tentacruel/normal.gbapal.lz");
@@ -1156,6 +1946,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Tentacruel[] = INCBIN_U8("graphics/pokemon/tentacruel/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Tentacruel[] = INCBIN_COMP("graphics/pokemon/tentacruel/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Tentacruel[] = INCBIN_U32("graphics/pokemon/tentacruel/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Tentacruel[] = INCBIN_U32("graphics/pokemon/tentacruel/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_TENTACOOL
#if P_FAMILY_GEODUDE
@@ -1167,6 +1964,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Geodude[] = INCBIN_U8("graphics/pokemon/geodude/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Geodude[] = INCBIN_COMP("graphics/pokemon/geodude/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Geodude[] = INCBIN_U32("graphics/pokemon/geodude/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Geodude[] = INCBIN_U32("graphics/pokemon/geodude/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Graveler[] = INCBIN_U32("graphics/pokemon/graveler/anim_front.4bpp.lz");
const u32 gMonPalette_Graveler[] = INCBIN_U32("graphics/pokemon/graveler/normal.gbapal.lz");
@@ -1176,6 +1980,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Graveler[] = INCBIN_U8("graphics/pokemon/graveler/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Graveler[] = INCBIN_COMP("graphics/pokemon/graveler/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Graveler[] = INCBIN_U32("graphics/pokemon/graveler/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Graveler[] = INCBIN_U32("graphics/pokemon/graveler/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Golem[] = INCBIN_U32("graphics/pokemon/golem/anim_front.4bpp.lz");
const u32 gMonPalette_Golem[] = INCBIN_U32("graphics/pokemon/golem/normal.gbapal.lz");
@@ -1185,6 +1996,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Golem[] = INCBIN_U8("graphics/pokemon/golem/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Golem[] = INCBIN_COMP("graphics/pokemon/golem/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Golem[] = INCBIN_U32("graphics/pokemon/golem/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Golem[] = INCBIN_U32("graphics/pokemon/golem/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_ALOLAN_FORMS
const u32 gMonFrontPic_GeodudeAlolan[] = INCBIN_U32("graphics/pokemon/geodude/alolan/front.4bpp.lz");
@@ -1192,18 +2010,39 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_GeodudeAlolan[] = INCBIN_U32("graphics/pokemon/geodude/alolan/back.4bpp.lz");
const u32 gMonShinyPalette_GeodudeAlolan[] = INCBIN_U32("graphics/pokemon/geodude/alolan/shiny.gbapal.lz");
const u8 gMonIcon_GeodudeAlolan[] = INCBIN_U8("graphics/pokemon/geodude/alolan/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_GeodudeAlolan[] = INCBIN_COMP("graphics/pokemon/geodude/alolan/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_GeodudeAlolan[] = INCBIN_U32("graphics/pokemon/geodude/alolan/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_GeodudeAlolan[] = INCBIN_U32("graphics/pokemon/geodude/alolan/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_GravelerAlolan[] = INCBIN_U32("graphics/pokemon/graveler/alolan/front.4bpp.lz");
const u32 gMonPalette_GravelerAlolan[] = INCBIN_U32("graphics/pokemon/graveler/alolan/normal.gbapal.lz");
const u32 gMonBackPic_GravelerAlolan[] = INCBIN_U32("graphics/pokemon/graveler/alolan/back.4bpp.lz");
const u32 gMonShinyPalette_GravelerAlolan[] = INCBIN_U32("graphics/pokemon/graveler/alolan/shiny.gbapal.lz");
const u8 gMonIcon_GravelerAlolan[] = INCBIN_U8("graphics/pokemon/graveler/alolan/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_GravelerAlolan[] = INCBIN_COMP("graphics/pokemon/graveler/alolan/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_GravelerAlolan[] = INCBIN_U32("graphics/pokemon/graveler/alolan/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_GravelerAlolan[] = INCBIN_U32("graphics/pokemon/graveler/alolan/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_GolemAlolan[] = INCBIN_U32("graphics/pokemon/golem/alolan/front.4bpp.lz");
const u32 gMonPalette_GolemAlolan[] = INCBIN_U32("graphics/pokemon/golem/alolan/normal.gbapal.lz");
const u32 gMonBackPic_GolemAlolan[] = INCBIN_U32("graphics/pokemon/golem/alolan/back.4bpp.lz");
const u32 gMonShinyPalette_GolemAlolan[] = INCBIN_U32("graphics/pokemon/golem/alolan/shiny.gbapal.lz");
const u8 gMonIcon_GolemAlolan[] = INCBIN_U8("graphics/pokemon/golem/alolan/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_GolemAlolan[] = INCBIN_COMP("graphics/pokemon/golem/alolan/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_GolemAlolan[] = INCBIN_U32("graphics/pokemon/golem/alolan/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_GolemAlolan[] = INCBIN_U32("graphics/pokemon/golem/alolan/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_ALOLAN_FORMS
#endif //P_FAMILY_GEODUDE
@@ -1216,6 +2055,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Ponyta[] = INCBIN_U8("graphics/pokemon/ponyta/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Ponyta[] = INCBIN_COMP("graphics/pokemon/ponyta/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Ponyta[] = INCBIN_U32("graphics/pokemon/ponyta/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Ponyta[] = INCBIN_U32("graphics/pokemon/ponyta/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Rapidash[] = INCBIN_U32("graphics/pokemon/rapidash/anim_front.4bpp.lz");
const u32 gMonPalette_Rapidash[] = INCBIN_U32("graphics/pokemon/rapidash/normal.gbapal.lz");
@@ -1225,6 +2071,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Rapidash[] = INCBIN_U8("graphics/pokemon/rapidash/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Rapidash[] = INCBIN_COMP("graphics/pokemon/rapidash/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Rapidash[] = INCBIN_U32("graphics/pokemon/rapidash/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Rapidash[] = INCBIN_U32("graphics/pokemon/rapidash/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GALARIAN_FORMS
const u32 gMonFrontPic_PonytaGalarian[] = INCBIN_U32("graphics/pokemon/ponyta/galarian/front.4bpp.lz");
@@ -1232,12 +2085,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_PonytaGalarian[] = INCBIN_U32("graphics/pokemon/ponyta/galarian/back.4bpp.lz");
const u32 gMonShinyPalette_PonytaGalarian[] = INCBIN_U32("graphics/pokemon/ponyta/galarian/shiny.gbapal.lz");
const u8 gMonIcon_PonytaGalarian[] = INCBIN_U8("graphics/pokemon/ponyta/galarian/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_PonytaGalarian[] = INCBIN_COMP("graphics/pokemon/ponyta/galarian/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_PonytaGalarian[] = INCBIN_U32("graphics/pokemon/ponyta/galarian/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_PonytaGalarian[] = INCBIN_U32("graphics/pokemon/ponyta/galarian/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_RapidashGalarian[] = INCBIN_U32("graphics/pokemon/rapidash/galarian/front.4bpp.lz");
const u32 gMonPalette_RapidashGalarian[] = INCBIN_U32("graphics/pokemon/rapidash/galarian/normal.gbapal.lz");
const u32 gMonBackPic_RapidashGalarian[] = INCBIN_U32("graphics/pokemon/rapidash/galarian/back.4bpp.lz");
const u32 gMonShinyPalette_RapidashGalarian[] = INCBIN_U32("graphics/pokemon/rapidash/galarian/shiny.gbapal.lz");
const u8 gMonIcon_RapidashGalarian[] = INCBIN_U8("graphics/pokemon/rapidash/galarian/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_RapidashGalarian[] = INCBIN_COMP("graphics/pokemon/rapidash/galarian/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_RapidashGalarian[] = INCBIN_U32("graphics/pokemon/rapidash/galarian/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_RapidashGalarian[] = INCBIN_U32("graphics/pokemon/rapidash/galarian/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GALARIAN_FORMS
#endif //P_FAMILY_PONYTA
@@ -1250,6 +2117,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Slowpoke[] = INCBIN_U8("graphics/pokemon/slowpoke/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Slowpoke[] = INCBIN_COMP("graphics/pokemon/slowpoke/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Slowpoke[] = INCBIN_U32("graphics/pokemon/slowpoke/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Slowpoke[] = INCBIN_U32("graphics/pokemon/slowpoke/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Slowbro[] = INCBIN_U32("graphics/pokemon/slowbro/anim_front.4bpp.lz");
const u32 gMonPalette_Slowbro[] = INCBIN_U32("graphics/pokemon/slowbro/normal.gbapal.lz");
@@ -1259,6 +2133,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Slowbro[] = INCBIN_U8("graphics/pokemon/slowbro/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Slowbro[] = INCBIN_COMP("graphics/pokemon/slowbro/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Slowbro[] = INCBIN_U32("graphics/pokemon/slowbro/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Slowbro[] = INCBIN_U32("graphics/pokemon/slowbro/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GEN_2_CROSS_EVOS
const u32 gMonFrontPic_Slowking[] = INCBIN_U32("graphics/pokemon/slowking/anim_front.4bpp.lz");
@@ -1269,6 +2150,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Slowking[] = INCBIN_U8("graphics/pokemon/slowking/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Slowking[] = INCBIN_COMP("graphics/pokemon/slowking/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Slowking[] = INCBIN_U32("graphics/pokemon/slowking/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Slowking[] = INCBIN_U32("graphics/pokemon/slowking/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_2_CROSS_EVOS
#if P_MEGA_EVOLUTIONS
@@ -1277,6 +2165,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_SlowbroMega[] = INCBIN_U32("graphics/pokemon/slowbro/mega/back.4bpp.lz");
const u32 gMonShinyPalette_SlowbroMega[] = INCBIN_U32("graphics/pokemon/slowbro/mega/shiny.gbapal.lz");
const u8 gMonIcon_SlowbroMega[] = INCBIN_U8("graphics/pokemon/slowbro/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_SlowbroMega[] = INCBIN_COMP("graphics/pokemon/slowbro/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_SlowbroMega[] = INCBIN_U32("graphics/pokemon/slowbro/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_SlowbroMega[] = INCBIN_U32("graphics/pokemon/slowbro/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#if P_GALARIAN_FORMS
@@ -1285,12 +2180,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_SlowpokeGalarian[] = INCBIN_U32("graphics/pokemon/slowpoke/galarian/back.4bpp.lz");
const u32 gMonShinyPalette_SlowpokeGalarian[] = INCBIN_U32("graphics/pokemon/slowpoke/galarian/shiny.gbapal.lz");
const u8 gMonIcon_SlowpokeGalarian[] = INCBIN_U8("graphics/pokemon/slowpoke/galarian/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_SlowpokeGalarian[] = INCBIN_COMP("graphics/pokemon/slowpoke/galarian/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_SlowpokeGalarian[] = INCBIN_U32("graphics/pokemon/slowpoke/galarian/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_SlowpokeGalarian[] = INCBIN_U32("graphics/pokemon/slowpoke/galarian/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_SlowbroGalarian[] = INCBIN_U32("graphics/pokemon/slowbro/galarian/front.4bpp.lz");
const u32 gMonPalette_SlowbroGalarian[] = INCBIN_U32("graphics/pokemon/slowbro/galarian/normal.gbapal.lz");
const u32 gMonBackPic_SlowbroGalarian[] = INCBIN_U32("graphics/pokemon/slowbro/galarian/back.4bpp.lz");
const u32 gMonShinyPalette_SlowbroGalarian[] = INCBIN_U32("graphics/pokemon/slowbro/galarian/shiny.gbapal.lz");
const u8 gMonIcon_SlowbroGalarian[] = INCBIN_U8("graphics/pokemon/slowbro/galarian/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_SlowbroGalarian[] = INCBIN_COMP("graphics/pokemon/slowbro/galarian/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_SlowbroGalarian[] = INCBIN_U32("graphics/pokemon/slowbro/galarian/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_SlowbroGalarian[] = INCBIN_U32("graphics/pokemon/slowbro/galarian/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GEN_2_CROSS_EVOS
const u32 gMonFrontPic_SlowkingGalarian[] = INCBIN_U32("graphics/pokemon/slowking/galarian/front.4bpp.lz");
@@ -1298,6 +2207,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_SlowkingGalarian[] = INCBIN_U32("graphics/pokemon/slowking/galarian/back.4bpp.lz");
const u32 gMonShinyPalette_SlowkingGalarian[] = INCBIN_U32("graphics/pokemon/slowking/galarian/shiny.gbapal.lz");
const u8 gMonIcon_SlowkingGalarian[] = INCBIN_U8("graphics/pokemon/slowking/galarian/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_SlowkingGalarian[] = INCBIN_COMP("graphics/pokemon/slowking/galarian/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_SlowkingGalarian[] = INCBIN_U32("graphics/pokemon/slowking/galarian/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_SlowkingGalarian[] = INCBIN_U32("graphics/pokemon/slowking/galarian/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_2_CROSS_EVOS
#endif //P_GALARIAN_FORMS
#endif //P_FAMILY_SLOWPOKE
@@ -1311,6 +2227,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Magnemite[] = INCBIN_U8("graphics/pokemon/magnemite/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Magnemite[] = INCBIN_COMP("graphics/pokemon/magnemite/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Magnemite[] = INCBIN_U32("graphics/pokemon/magnemite/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Magnemite[] = INCBIN_U32("graphics/pokemon/magnemite/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Magneton[] = INCBIN_U32("graphics/pokemon/magneton/anim_front.4bpp.lz");
const u32 gMonPalette_Magneton[] = INCBIN_U32("graphics/pokemon/magneton/normal.gbapal.lz");
@@ -1320,6 +2243,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Magneton[] = INCBIN_U8("graphics/pokemon/magneton/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Magneton[] = INCBIN_COMP("graphics/pokemon/magneton/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Magneton[] = INCBIN_U32("graphics/pokemon/magneton/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Magneton[] = INCBIN_U32("graphics/pokemon/magneton/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GEN_4_CROSS_EVOS
const u32 gMonFrontPic_Magnezone[] = INCBIN_U32("graphics/pokemon/magnezone/anim_front.4bpp.lz");
@@ -1330,6 +2260,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Magnezone[] = INCBIN_U8("graphics/pokemon/magnezone/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Magnezone[] = INCBIN_COMP("graphics/pokemon/magnezone/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Magnezone[] = INCBIN_U32("graphics/pokemon/magnezone/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Magnezone[] = INCBIN_U32("graphics/pokemon/magnezone/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_4_CROSS_EVOS
#endif //P_FAMILY_MAGNEMITE
@@ -1342,6 +2279,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Farfetchd[] = INCBIN_U8("graphics/pokemon/farfetchd/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Farfetchd[] = INCBIN_COMP("graphics/pokemon/farfetchd/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Farfetchd[] = INCBIN_U32("graphics/pokemon/farfetchd/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Farfetchd[] = INCBIN_U32("graphics/pokemon/farfetchd/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GALARIAN_FORMS
const u32 gMonFrontPic_FarfetchdGalarian[] = INCBIN_U32("graphics/pokemon/farfetchd/galarian/front.4bpp.lz");
@@ -1349,6 +2293,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_FarfetchdGalarian[] = INCBIN_U32("graphics/pokemon/farfetchd/galarian/back.4bpp.lz");
const u32 gMonShinyPalette_FarfetchdGalarian[] = INCBIN_U32("graphics/pokemon/farfetchd/galarian/shiny.gbapal.lz");
const u8 gMonIcon_FarfetchdGalarian[] = INCBIN_U8("graphics/pokemon/farfetchd/galarian/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_FarfetchdGalarian[] = INCBIN_COMP("graphics/pokemon/farfetchd/galarian/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_FarfetchdGalarian[] = INCBIN_U32("graphics/pokemon/farfetchd/galarian/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_FarfetchdGalarian[] = INCBIN_U32("graphics/pokemon/farfetchd/galarian/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Sirfetchd[] = INCBIN_U32("graphics/pokemon/sirfetchd/front.4bpp.lz");
const u32 gMonPalette_Sirfetchd[] = INCBIN_U32("graphics/pokemon/sirfetchd/normal.gbapal.lz");
@@ -1358,6 +2309,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Sirfetchd[] = INCBIN_U8("graphics/pokemon/sirfetchd/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Sirfetchd[] = INCBIN_COMP("graphics/pokemon/sirfetchd/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Sirfetchd[] = INCBIN_U32("graphics/pokemon/sirfetchd/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Sirfetchd[] = INCBIN_U32("graphics/pokemon/sirfetchd/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GALARIAN_FORMS
#endif //P_FAMILY_FARFETCHD
@@ -1370,6 +2328,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Doduo[] = INCBIN_U8("graphics/pokemon/doduo/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Doduo[] = INCBIN_COMP("graphics/pokemon/doduo/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Doduo[] = INCBIN_U32("graphics/pokemon/doduo/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Doduo[] = INCBIN_U32("graphics/pokemon/doduo/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_DoduoF[] = INCBIN_U32("graphics/pokemon/doduo/anim_frontf.4bpp.lz");
const u32 gMonBackPic_DoduoF[] = INCBIN_U32("graphics/pokemon/doduo/backf.4bpp.lz");
@@ -1382,6 +2347,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Dodrio[] = INCBIN_U8("graphics/pokemon/dodrio/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Dodrio[] = INCBIN_COMP("graphics/pokemon/dodrio/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Dodrio[] = INCBIN_U32("graphics/pokemon/dodrio/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Dodrio[] = INCBIN_U32("graphics/pokemon/dodrio/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_DodrioF[] = INCBIN_U32("graphics/pokemon/dodrio/anim_frontf.4bpp.lz");
const u32 gMonBackPic_DodrioF[] = INCBIN_U32("graphics/pokemon/dodrio/backf.4bpp.lz");
@@ -1396,6 +2368,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Seel[] = INCBIN_U8("graphics/pokemon/seel/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Seel[] = INCBIN_COMP("graphics/pokemon/seel/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Seel[] = INCBIN_U32("graphics/pokemon/seel/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Seel[] = INCBIN_U32("graphics/pokemon/seel/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Dewgong[] = INCBIN_U32("graphics/pokemon/dewgong/anim_front.4bpp.lz");
const u32 gMonPalette_Dewgong[] = INCBIN_U32("graphics/pokemon/dewgong/normal.gbapal.lz");
@@ -1405,6 +2384,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Dewgong[] = INCBIN_U8("graphics/pokemon/dewgong/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Dewgong[] = INCBIN_COMP("graphics/pokemon/dewgong/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Dewgong[] = INCBIN_U32("graphics/pokemon/dewgong/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Dewgong[] = INCBIN_U32("graphics/pokemon/dewgong/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SEEL
#if P_FAMILY_GRIMER
@@ -1416,6 +2402,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Grimer[] = INCBIN_U8("graphics/pokemon/grimer/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Grimer[] = INCBIN_COMP("graphics/pokemon/grimer/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Grimer[] = INCBIN_U32("graphics/pokemon/grimer/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Grimer[] = INCBIN_U32("graphics/pokemon/grimer/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Muk[] = INCBIN_U32("graphics/pokemon/muk/anim_front.4bpp.lz");
const u32 gMonPalette_Muk[] = INCBIN_U32("graphics/pokemon/muk/normal.gbapal.lz");
@@ -1425,6 +2418,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Muk[] = INCBIN_U8("graphics/pokemon/muk/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Muk[] = INCBIN_COMP("graphics/pokemon/muk/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Muk[] = INCBIN_U32("graphics/pokemon/muk/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Muk[] = INCBIN_U32("graphics/pokemon/muk/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_ALOLAN_FORMS
const u32 gMonFrontPic_GrimerAlolan[] = INCBIN_U32("graphics/pokemon/grimer/alolan/front.4bpp.lz");
@@ -1432,12 +2432,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_GrimerAlolan[] = INCBIN_U32("graphics/pokemon/grimer/alolan/back.4bpp.lz");
const u32 gMonShinyPalette_GrimerAlolan[] = INCBIN_U32("graphics/pokemon/grimer/alolan/shiny.gbapal.lz");
const u8 gMonIcon_GrimerAlolan[] = INCBIN_U8("graphics/pokemon/grimer/alolan/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_GrimerAlolan[] = INCBIN_COMP("graphics/pokemon/grimer/alolan/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_GrimerAlolan[] = INCBIN_U32("graphics/pokemon/grimer/alolan/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_GrimerAlolan[] = INCBIN_U32("graphics/pokemon/grimer/alolan/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_MukAlolan[] = INCBIN_U32("graphics/pokemon/muk/alolan/front.4bpp.lz");
const u32 gMonPalette_MukAlolan[] = INCBIN_U32("graphics/pokemon/muk/alolan/normal.gbapal.lz");
const u32 gMonBackPic_MukAlolan[] = INCBIN_U32("graphics/pokemon/muk/alolan/back.4bpp.lz");
const u32 gMonShinyPalette_MukAlolan[] = INCBIN_U32("graphics/pokemon/muk/alolan/shiny.gbapal.lz");
const u8 gMonIcon_MukAlolan[] = INCBIN_U8("graphics/pokemon/muk/alolan/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_MukAlolan[] = INCBIN_COMP("graphics/pokemon/muk/alolan/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_MukAlolan[] = INCBIN_U32("graphics/pokemon/muk/alolan/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_MukAlolan[] = INCBIN_U32("graphics/pokemon/muk/alolan/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_ALOLAN_FORMS
#endif //P_FAMILY_GRIMER
@@ -1450,6 +2464,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Shellder[] = INCBIN_U8("graphics/pokemon/shellder/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Shellder[] = INCBIN_COMP("graphics/pokemon/shellder/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Shellder[] = INCBIN_U32("graphics/pokemon/shellder/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Shellder[] = INCBIN_U32("graphics/pokemon/shellder/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Cloyster[] = INCBIN_U32("graphics/pokemon/cloyster/anim_front.4bpp.lz");
const u32 gMonPalette_Cloyster[] = INCBIN_U32("graphics/pokemon/cloyster/normal.gbapal.lz");
@@ -1459,6 +2480,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Cloyster[] = INCBIN_U8("graphics/pokemon/cloyster/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Cloyster[] = INCBIN_COMP("graphics/pokemon/cloyster/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Cloyster[] = INCBIN_U32("graphics/pokemon/cloyster/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Cloyster[] = INCBIN_U32("graphics/pokemon/cloyster/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SHELLDER
#if P_FAMILY_GASTLY
@@ -1470,6 +2498,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Gastly[] = INCBIN_U8("graphics/pokemon/gastly/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Gastly[] = INCBIN_COMP("graphics/pokemon/gastly/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Gastly[] = INCBIN_U32("graphics/pokemon/gastly/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Gastly[] = INCBIN_U32("graphics/pokemon/gastly/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Haunter[] = INCBIN_U32("graphics/pokemon/haunter/anim_front.4bpp.lz");
const u32 gMonPalette_Haunter[] = INCBIN_U32("graphics/pokemon/haunter/normal.gbapal.lz");
@@ -1479,6 +2514,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Haunter[] = INCBIN_U8("graphics/pokemon/haunter/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Haunter[] = INCBIN_COMP("graphics/pokemon/haunter/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Haunter[] = INCBIN_U32("graphics/pokemon/haunter/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Haunter[] = INCBIN_U32("graphics/pokemon/haunter/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Gengar[] = INCBIN_U32("graphics/pokemon/gengar/anim_front.4bpp.lz");
const u32 gMonPalette_Gengar[] = INCBIN_U32("graphics/pokemon/gengar/normal.gbapal.lz");
@@ -1488,6 +2530,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Gengar[] = INCBIN_U8("graphics/pokemon/gengar/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Gengar[] = INCBIN_COMP("graphics/pokemon/gengar/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Gengar[] = INCBIN_U32("graphics/pokemon/gengar/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Gengar[] = INCBIN_U32("graphics/pokemon/gengar/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_MEGA_EVOLUTIONS
const u32 gMonFrontPic_GengarMega[] = INCBIN_U32("graphics/pokemon/gengar/mega/front.4bpp.lz");
@@ -1495,6 +2544,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_GengarMega[] = INCBIN_U32("graphics/pokemon/gengar/mega/back.4bpp.lz");
const u32 gMonShinyPalette_GengarMega[] = INCBIN_U32("graphics/pokemon/gengar/mega/shiny.gbapal.lz");
const u8 gMonIcon_GengarMega[] = INCBIN_U8("graphics/pokemon/gengar/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_GengarMega[] = INCBIN_COMP("graphics/pokemon/gengar/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_GengarMega[] = INCBIN_U32("graphics/pokemon/gengar/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_GengarMega[] = INCBIN_U32("graphics/pokemon/gengar/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#if P_GIGANTAMAX_FORMS
@@ -1503,6 +2559,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonPalette_GengarGigantamax[] = INCBIN_U32("graphics/pokemon/gengar/gigantamax/normal.gbapal.lz");
const u32 gMonShinyPalette_GengarGigantamax[] = INCBIN_U32("graphics/pokemon/gengar/gigantamax/shiny.gbapal.lz");
const u8 gMonIcon_GengarGigantamax[] = INCBIN_U8("graphics/pokemon/gengar/gigantamax/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_GengarGigantamax[] = INCBIN_COMP("graphics/pokemon/gengar/gigantamax/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_GengarGigantamax[] = INCBIN_U32("graphics/pokemon/gengar/gigantamax/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_GengarGigantamax[] = INCBIN_U32("graphics/pokemon/gengar/gigantamax/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GIGANTAMAX_FORMS
#endif //P_FAMILY_GASTLY
@@ -1515,6 +2578,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Onix[] = INCBIN_U8("graphics/pokemon/onix/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Onix[] = INCBIN_COMP("graphics/pokemon/onix/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Onix[] = INCBIN_U32("graphics/pokemon/onix/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Onix[] = INCBIN_U32("graphics/pokemon/onix/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GEN_2_CROSS_EVOS
const u32 gMonFrontPic_Steelix[] = INCBIN_U32("graphics/pokemon/steelix/anim_front.4bpp.lz");
@@ -1525,6 +2595,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Steelix[] = INCBIN_U8("graphics/pokemon/steelix/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Steelix[] = INCBIN_COMP("graphics/pokemon/steelix/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Steelix[] = INCBIN_U32("graphics/pokemon/steelix/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Steelix[] = INCBIN_U32("graphics/pokemon/steelix/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_SteelixF[] = INCBIN_U32("graphics/pokemon/steelix/anim_frontf.4bpp.lz");
const u32 gMonBackPic_SteelixF[] = INCBIN_U32("graphics/pokemon/steelix/backf.4bpp.lz");
@@ -1535,6 +2612,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_SteelixMega[] = INCBIN_U32("graphics/pokemon/steelix/mega/back.4bpp.lz");
const u32 gMonShinyPalette_SteelixMega[] = INCBIN_U32("graphics/pokemon/steelix/mega/shiny.gbapal.lz");
const u8 gMonIcon_SteelixMega[] = INCBIN_U8("graphics/pokemon/steelix/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_SteelixMega[] = INCBIN_COMP("graphics/pokemon/steelix/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_SteelixMega[] = INCBIN_U32("graphics/pokemon/steelix/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_SteelixMega[] = INCBIN_U32("graphics/pokemon/steelix/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#endif //P_GEN_2_CROSS_EVOS
#endif //P_FAMILY_ONIX
@@ -1548,6 +2632,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Drowzee[] = INCBIN_U8("graphics/pokemon/drowzee/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Drowzee[] = INCBIN_COMP("graphics/pokemon/drowzee/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Drowzee[] = INCBIN_U32("graphics/pokemon/drowzee/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Drowzee[] = INCBIN_U32("graphics/pokemon/drowzee/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Hypno[] = INCBIN_U32("graphics/pokemon/hypno/anim_front.4bpp.lz");
const u32 gMonPalette_Hypno[] = INCBIN_U32("graphics/pokemon/hypno/normal.gbapal.lz");
@@ -1557,6 +2648,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Hypno[] = INCBIN_U8("graphics/pokemon/hypno/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Hypno[] = INCBIN_COMP("graphics/pokemon/hypno/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Hypno[] = INCBIN_U32("graphics/pokemon/hypno/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Hypno[] = INCBIN_U32("graphics/pokemon/hypno/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_HypnoF[] = INCBIN_U32("graphics/pokemon/hypno/anim_frontf.4bpp.lz");
const u32 gMonBackPic_HypnoF[] = INCBIN_U32("graphics/pokemon/hypno/backf.4bpp.lz");
@@ -1571,6 +2669,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Krabby[] = INCBIN_U8("graphics/pokemon/krabby/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Krabby[] = INCBIN_COMP("graphics/pokemon/krabby/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Krabby[] = INCBIN_U32("graphics/pokemon/krabby/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Krabby[] = INCBIN_U32("graphics/pokemon/krabby/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Kingler[] = INCBIN_U32("graphics/pokemon/kingler/anim_front.4bpp.lz");
const u32 gMonPalette_Kingler[] = INCBIN_U32("graphics/pokemon/kingler/normal.gbapal.lz");
@@ -1580,6 +2685,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Kingler[] = INCBIN_U8("graphics/pokemon/kingler/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Kingler[] = INCBIN_COMP("graphics/pokemon/kingler/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Kingler[] = INCBIN_U32("graphics/pokemon/kingler/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Kingler[] = INCBIN_U32("graphics/pokemon/kingler/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GIGANTAMAX_FORMS
const u32 gMonFrontPic_KinglerGigantamax[] = INCBIN_U32("graphics/pokemon/kingler/gigantamax/front.4bpp.lz");
@@ -1587,6 +2699,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonPalette_KinglerGigantamax[] = INCBIN_U32("graphics/pokemon/kingler/gigantamax/normal.gbapal.lz");
const u32 gMonShinyPalette_KinglerGigantamax[] = INCBIN_U32("graphics/pokemon/kingler/gigantamax/shiny.gbapal.lz");
const u8 gMonIcon_KinglerGigantamax[] = INCBIN_U8("graphics/pokemon/kingler/gigantamax/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_KinglerGigantamax[] = INCBIN_COMP("graphics/pokemon/kingler/gigantamax/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_KinglerGigantamax[] = INCBIN_U32("graphics/pokemon/kingler/gigantamax/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_KinglerGigantamax[] = INCBIN_U32("graphics/pokemon/kingler/gigantamax/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GIGANTAMAX_FORMS
#endif //P_FAMILY_KRABBY
@@ -1599,6 +2718,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Voltorb[] = INCBIN_U8("graphics/pokemon/voltorb/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Voltorb[] = INCBIN_COMP("graphics/pokemon/voltorb/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Voltorb[] = INCBIN_U32("graphics/pokemon/voltorb/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Voltorb[] = INCBIN_U32("graphics/pokemon/voltorb/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Electrode[] = INCBIN_U32("graphics/pokemon/electrode/anim_front.4bpp.lz");
const u32 gMonPalette_Electrode[] = INCBIN_U32("graphics/pokemon/electrode/normal.gbapal.lz");
@@ -1608,6 +2734,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Electrode[] = INCBIN_U8("graphics/pokemon/electrode/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Electrode[] = INCBIN_COMP("graphics/pokemon/electrode/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Electrode[] = INCBIN_U32("graphics/pokemon/electrode/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Electrode[] = INCBIN_U32("graphics/pokemon/electrode/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_HISUIAN_FORMS
const u32 gMonFrontPic_VoltorbHisuian[] = INCBIN_U32("graphics/pokemon/voltorb/hisuian/front.4bpp.lz");
@@ -1615,12 +2748,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_VoltorbHisuian[] = INCBIN_U32("graphics/pokemon/voltorb/hisuian/back.4bpp.lz");
const u32 gMonShinyPalette_VoltorbHisuian[] = INCBIN_U32("graphics/pokemon/voltorb/hisuian/shiny.gbapal.lz");
const u8 gMonIcon_VoltorbHisuian[] = INCBIN_U8("graphics/pokemon/voltorb/hisuian/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_VoltorbHisuian[] = INCBIN_COMP("graphics/pokemon/voltorb/hisuian/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_VoltorbHisuian[] = INCBIN_U32("graphics/pokemon/voltorb/hisuian/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_VoltorbHisuian[] = INCBIN_U32("graphics/pokemon/voltorb/hisuian/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_ElectrodeHisuian[] = INCBIN_U32("graphics/pokemon/electrode/hisuian/front.4bpp.lz");
const u32 gMonPalette_ElectrodeHisuian[] = INCBIN_U32("graphics/pokemon/electrode/hisuian/normal.gbapal.lz");
const u32 gMonBackPic_ElectrodeHisuian[] = INCBIN_U32("graphics/pokemon/electrode/hisuian/back.4bpp.lz");
const u32 gMonShinyPalette_ElectrodeHisuian[] = INCBIN_U32("graphics/pokemon/electrode/hisuian/shiny.gbapal.lz");
const u8 gMonIcon_ElectrodeHisuian[] = INCBIN_U8("graphics/pokemon/electrode/hisuian/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_ElectrodeHisuian[] = INCBIN_COMP("graphics/pokemon/electrode/hisuian/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_ElectrodeHisuian[] = INCBIN_U32("graphics/pokemon/electrode/hisuian/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_ElectrodeHisuian[] = INCBIN_U32("graphics/pokemon/electrode/hisuian/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_HISUIAN_FORMS
#endif //P_FAMILY_VOLTORB
@@ -1633,6 +2780,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Exeggcute[] = INCBIN_U8("graphics/pokemon/exeggcute/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Exeggcute[] = INCBIN_COMP("graphics/pokemon/exeggcute/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Exeggcute[] = INCBIN_U32("graphics/pokemon/exeggcute/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Exeggcute[] = INCBIN_U32("graphics/pokemon/exeggcute/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Exeggutor[] = INCBIN_U32("graphics/pokemon/exeggutor/anim_front.4bpp.lz");
const u32 gMonPalette_Exeggutor[] = INCBIN_U32("graphics/pokemon/exeggutor/normal.gbapal.lz");
@@ -1642,6 +2796,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Exeggutor[] = INCBIN_U8("graphics/pokemon/exeggutor/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Exeggutor[] = INCBIN_COMP("graphics/pokemon/exeggutor/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Exeggutor[] = INCBIN_U32("graphics/pokemon/exeggutor/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Exeggutor[] = INCBIN_U32("graphics/pokemon/exeggutor/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_ALOLAN_FORMS
const u32 gMonFrontPic_ExeggutorAlolan[] = INCBIN_U32("graphics/pokemon/exeggutor/alolan/anim_front.4bpp.lz");
@@ -1649,6 +2810,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_ExeggutorAlolan[] = INCBIN_U32("graphics/pokemon/exeggutor/alolan/back.4bpp.lz");
const u32 gMonShinyPalette_ExeggutorAlolan[] = INCBIN_U32("graphics/pokemon/exeggutor/alolan/shiny.gbapal.lz");
const u8 gMonIcon_ExeggutorAlolan[] = INCBIN_U8("graphics/pokemon/exeggutor/alolan/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_ExeggutorAlolan[] = INCBIN_COMP("graphics/pokemon/exeggutor/alolan/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_ExeggutorAlolan[] = INCBIN_U32("graphics/pokemon/exeggutor/alolan/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_ExeggutorAlolan[] = INCBIN_U32("graphics/pokemon/exeggutor/alolan/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_ALOLAN_FORMS
#endif //P_FAMILY_EXEGGCUTE
@@ -1661,6 +2829,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Cubone[] = INCBIN_U8("graphics/pokemon/cubone/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Cubone[] = INCBIN_COMP("graphics/pokemon/cubone/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Cubone[] = INCBIN_U32("graphics/pokemon/cubone/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Cubone[] = INCBIN_U32("graphics/pokemon/cubone/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Marowak[] = INCBIN_U32("graphics/pokemon/marowak/anim_front.4bpp.lz");
const u32 gMonPalette_Marowak[] = INCBIN_U32("graphics/pokemon/marowak/normal.gbapal.lz");
@@ -1670,6 +2845,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Marowak[] = INCBIN_U8("graphics/pokemon/marowak/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Marowak[] = INCBIN_COMP("graphics/pokemon/marowak/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Marowak[] = INCBIN_U32("graphics/pokemon/marowak/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Marowak[] = INCBIN_U32("graphics/pokemon/marowak/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_ALOLAN_FORMS
const u32 gMonFrontPic_MarowakAlolan[] = INCBIN_U32("graphics/pokemon/marowak/alolan/front.4bpp.lz");
@@ -1677,6 +2859,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_MarowakAlolan[] = INCBIN_U32("graphics/pokemon/marowak/alolan/back.4bpp.lz");
const u32 gMonShinyPalette_MarowakAlolan[] = INCBIN_U32("graphics/pokemon/marowak/alolan/shiny.gbapal.lz");
const u8 gMonIcon_MarowakAlolan[] = INCBIN_U8("graphics/pokemon/marowak/alolan/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_MarowakAlolan[] = INCBIN_COMP("graphics/pokemon/marowak/alolan/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_MarowakAlolan[] = INCBIN_U32("graphics/pokemon/marowak/alolan/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_MarowakAlolan[] = INCBIN_U32("graphics/pokemon/marowak/alolan/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_ALOLAN_FORMS
#endif //P_FAMILY_CUBONE
@@ -1690,6 +2879,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Tyrogue[] = INCBIN_U8("graphics/pokemon/tyrogue/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Tyrogue[] = INCBIN_COMP("graphics/pokemon/tyrogue/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Tyrogue[] = INCBIN_U32("graphics/pokemon/tyrogue/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Tyrogue[] = INCBIN_U32("graphics/pokemon/tyrogue/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_2_CROSS_EVOS
const u32 gMonFrontPic_Hitmonlee[] = INCBIN_U32("graphics/pokemon/hitmonlee/anim_front.4bpp.lz");
@@ -1700,6 +2896,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Hitmonlee[] = INCBIN_U8("graphics/pokemon/hitmonlee/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Hitmonlee[] = INCBIN_COMP("graphics/pokemon/hitmonlee/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Hitmonlee[] = INCBIN_U32("graphics/pokemon/hitmonlee/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Hitmonlee[] = INCBIN_U32("graphics/pokemon/hitmonlee/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Hitmonchan[] = INCBIN_U32("graphics/pokemon/hitmonchan/anim_front.4bpp.lz");
const u32 gMonPalette_Hitmonchan[] = INCBIN_U32("graphics/pokemon/hitmonchan/normal.gbapal.lz");
@@ -1709,6 +2912,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Hitmonchan[] = INCBIN_U8("graphics/pokemon/hitmonchan/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Hitmonchan[] = INCBIN_COMP("graphics/pokemon/hitmonchan/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Hitmonchan[] = INCBIN_U32("graphics/pokemon/hitmonchan/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Hitmonchan[] = INCBIN_U32("graphics/pokemon/hitmonchan/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GEN_2_CROSS_EVOS
const u32 gMonFrontPic_Hitmontop[] = INCBIN_U32("graphics/pokemon/hitmontop/anim_front.4bpp.lz");
@@ -1719,6 +2929,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Hitmontop[] = INCBIN_U8("graphics/pokemon/hitmontop/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Hitmontop[] = INCBIN_COMP("graphics/pokemon/hitmontop/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Hitmontop[] = INCBIN_U32("graphics/pokemon/hitmontop/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Hitmontop[] = INCBIN_U32("graphics/pokemon/hitmontop/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_2_CROSS_EVOS
#endif //P_FAMILY_HITMONS
@@ -1731,6 +2948,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Lickitung[] = INCBIN_U8("graphics/pokemon/lickitung/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Lickitung[] = INCBIN_COMP("graphics/pokemon/lickitung/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Lickitung[] = INCBIN_U32("graphics/pokemon/lickitung/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Lickitung[] = INCBIN_U32("graphics/pokemon/lickitung/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GEN_4_CROSS_EVOS
const u32 gMonFrontPic_Lickilicky[] = INCBIN_U32("graphics/pokemon/lickilicky/anim_front.4bpp.lz");
@@ -1741,6 +2965,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Lickilicky[] = INCBIN_U8("graphics/pokemon/lickilicky/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Lickilicky[] = INCBIN_COMP("graphics/pokemon/lickilicky/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Lickilicky[] = INCBIN_U32("graphics/pokemon/lickilicky/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Lickilicky[] = INCBIN_U32("graphics/pokemon/lickilicky/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_4_CROSS_EVOS
#endif //P_FAMILY_LICKITUNG
@@ -1753,6 +2984,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Koffing[] = INCBIN_U8("graphics/pokemon/koffing/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Koffing[] = INCBIN_COMP("graphics/pokemon/koffing/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Koffing[] = INCBIN_U32("graphics/pokemon/koffing/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Koffing[] = INCBIN_U32("graphics/pokemon/koffing/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Weezing[] = INCBIN_U32("graphics/pokemon/weezing/anim_front.4bpp.lz");
const u32 gMonPalette_Weezing[] = INCBIN_U32("graphics/pokemon/weezing/normal.gbapal.lz");
@@ -1762,6 +3000,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Weezing[] = INCBIN_U8("graphics/pokemon/weezing/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Weezing[] = INCBIN_COMP("graphics/pokemon/weezing/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Weezing[] = INCBIN_U32("graphics/pokemon/weezing/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Weezing[] = INCBIN_U32("graphics/pokemon/weezing/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GALARIAN_FORMS
const u32 gMonFrontPic_WeezingGalarian[] = INCBIN_U32("graphics/pokemon/weezing/galarian/front.4bpp.lz");
@@ -1769,6 +3014,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_WeezingGalarian[] = INCBIN_U32("graphics/pokemon/weezing/galarian/back.4bpp.lz");
const u32 gMonShinyPalette_WeezingGalarian[] = INCBIN_U32("graphics/pokemon/weezing/galarian/shiny.gbapal.lz");
const u8 gMonIcon_WeezingGalarian[] = INCBIN_U8("graphics/pokemon/weezing/galarian/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_WeezingGalarian[] = INCBIN_COMP("graphics/pokemon/weezing/galarian/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_WeezingGalarian[] = INCBIN_U32("graphics/pokemon/weezing/galarian/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_WeezingGalarian[] = INCBIN_U32("graphics/pokemon/weezing/galarian/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GALARIAN_FORMS
#endif //P_FAMILY_KOFFING
@@ -1781,6 +3033,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Rhyhorn[] = INCBIN_U8("graphics/pokemon/rhyhorn/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Rhyhorn[] = INCBIN_COMP("graphics/pokemon/rhyhorn/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Rhyhorn[] = INCBIN_U32("graphics/pokemon/rhyhorn/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Rhyhorn[] = INCBIN_U32("graphics/pokemon/rhyhorn/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_RhyhornF[] = INCBIN_U32("graphics/pokemon/rhyhorn/anim_frontf.4bpp.lz");
const u32 gMonBackPic_RhyhornF[] = INCBIN_U32("graphics/pokemon/rhyhorn/backf.4bpp.lz");
@@ -1793,6 +3052,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Rhydon[] = INCBIN_U8("graphics/pokemon/rhydon/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Rhydon[] = INCBIN_COMP("graphics/pokemon/rhydon/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Rhydon[] = INCBIN_U32("graphics/pokemon/rhydon/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Rhydon[] = INCBIN_U32("graphics/pokemon/rhydon/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_RhydonF[] = INCBIN_U32("graphics/pokemon/rhydon/anim_frontf.4bpp.lz");
const u32 gMonBackPic_RhydonF[] = INCBIN_U32("graphics/pokemon/rhydon/backf.4bpp.lz");
@@ -1806,6 +3072,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Rhyperior[] = INCBIN_U8("graphics/pokemon/rhyperior/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Rhyperior[] = INCBIN_COMP("graphics/pokemon/rhyperior/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Rhyperior[] = INCBIN_U32("graphics/pokemon/rhyperior/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Rhyperior[] = INCBIN_U32("graphics/pokemon/rhyperior/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_RhyperiorF[] = INCBIN_U32("graphics/pokemon/rhyperior/anim_frontf.4bpp.lz");
const u32 gMonBackPic_RhyperiorF[] = INCBIN_U32("graphics/pokemon/rhyperior/backf.4bpp.lz");
@@ -1822,6 +3095,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Happiny[] = INCBIN_U8("graphics/pokemon/happiny/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Happiny[] = INCBIN_COMP("graphics/pokemon/happiny/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Happiny[] = INCBIN_U32("graphics/pokemon/happiny/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Happiny[] = INCBIN_U32("graphics/pokemon/happiny/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_4_CROSS_EVOS
const u32 gMonFrontPic_Chansey[] = INCBIN_U32("graphics/pokemon/chansey/anim_front.4bpp.lz");
@@ -1832,6 +3112,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Chansey[] = INCBIN_U8("graphics/pokemon/chansey/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Chansey[] = INCBIN_COMP("graphics/pokemon/chansey/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Chansey[] = INCBIN_U32("graphics/pokemon/chansey/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Chansey[] = INCBIN_U32("graphics/pokemon/chansey/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GEN_2_CROSS_EVOS
const u32 gMonFrontPic_Blissey[] = INCBIN_U32("graphics/pokemon/blissey/anim_front.4bpp.lz");
@@ -1842,6 +3129,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Blissey[] = INCBIN_U8("graphics/pokemon/blissey/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Blissey[] = INCBIN_COMP("graphics/pokemon/blissey/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Blissey[] = INCBIN_U32("graphics/pokemon/blissey/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Blissey[] = INCBIN_U32("graphics/pokemon/blissey/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_2_CROSS_EVOS
#endif //P_FAMILY_CHANSEY
@@ -1854,6 +3148,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Tangela[] = INCBIN_U8("graphics/pokemon/tangela/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Tangela[] = INCBIN_COMP("graphics/pokemon/tangela/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Tangela[] = INCBIN_U32("graphics/pokemon/tangela/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Tangela[] = INCBIN_U32("graphics/pokemon/tangela/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GEN_4_CROSS_EVOS
const u32 gMonFrontPic_Tangrowth[] = INCBIN_U32("graphics/pokemon/tangrowth/anim_front.4bpp.lz");
@@ -1864,6 +3165,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Tangrowth[] = INCBIN_U8("graphics/pokemon/tangrowth/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Tangrowth[] = INCBIN_COMP("graphics/pokemon/tangrowth/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Tangrowth[] = INCBIN_U32("graphics/pokemon/tangrowth/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Tangrowth[] = INCBIN_U32("graphics/pokemon/tangrowth/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_TangrowthF[] = INCBIN_U32("graphics/pokemon/tangrowth/anim_frontf.4bpp.lz");
#endif //P_GEN_4_CROSS_EVOS
@@ -1878,6 +3186,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Kangaskhan[] = INCBIN_U8("graphics/pokemon/kangaskhan/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Kangaskhan[] = INCBIN_COMP("graphics/pokemon/kangaskhan/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Kangaskhan[] = INCBIN_U32("graphics/pokemon/kangaskhan/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Kangaskhan[] = INCBIN_U32("graphics/pokemon/kangaskhan/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_MEGA_EVOLUTIONS
const u32 gMonFrontPic_KangaskhanMega[] = INCBIN_U32("graphics/pokemon/kangaskhan/mega/front.4bpp.lz");
@@ -1885,6 +3200,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_KangaskhanMega[] = INCBIN_U32("graphics/pokemon/kangaskhan/mega/back.4bpp.lz");
const u32 gMonShinyPalette_KangaskhanMega[] = INCBIN_U32("graphics/pokemon/kangaskhan/mega/shiny.gbapal.lz");
const u8 gMonIcon_KangaskhanMega[] = INCBIN_U8("graphics/pokemon/kangaskhan/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_KangaskhanMega[] = INCBIN_COMP("graphics/pokemon/kangaskhan/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_KangaskhanMega[] = INCBIN_U32("graphics/pokemon/kangaskhan/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_KangaskhanMega[] = INCBIN_U32("graphics/pokemon/kangaskhan/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#endif //P_FAMILY_KANGASKHAN
@@ -1897,6 +3219,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Horsea[] = INCBIN_U8("graphics/pokemon/horsea/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Horsea[] = INCBIN_COMP("graphics/pokemon/horsea/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Horsea[] = INCBIN_U32("graphics/pokemon/horsea/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Horsea[] = INCBIN_U32("graphics/pokemon/horsea/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Seadra[] = INCBIN_U32("graphics/pokemon/seadra/anim_front.4bpp.lz");
const u32 gMonPalette_Seadra[] = INCBIN_U32("graphics/pokemon/seadra/normal.gbapal.lz");
@@ -1906,6 +3235,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Seadra[] = INCBIN_U8("graphics/pokemon/seadra/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Seadra[] = INCBIN_COMP("graphics/pokemon/seadra/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Seadra[] = INCBIN_U32("graphics/pokemon/seadra/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Seadra[] = INCBIN_U32("graphics/pokemon/seadra/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GEN_2_CROSS_EVOS
const u32 gMonFrontPic_Kingdra[] = INCBIN_U32("graphics/pokemon/kingdra/anim_front.4bpp.lz");
@@ -1916,6 +3252,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Kingdra[] = INCBIN_U8("graphics/pokemon/kingdra/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Kingdra[] = INCBIN_COMP("graphics/pokemon/kingdra/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Kingdra[] = INCBIN_U32("graphics/pokemon/kingdra/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Kingdra[] = INCBIN_U32("graphics/pokemon/kingdra/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_2_CROSS_EVOS
#endif //P_FAMILY_HORSEA
@@ -1928,6 +3271,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Goldeen[] = INCBIN_U8("graphics/pokemon/goldeen/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Goldeen[] = INCBIN_COMP("graphics/pokemon/goldeen/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Goldeen[] = INCBIN_U32("graphics/pokemon/goldeen/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Goldeen[] = INCBIN_U32("graphics/pokemon/goldeen/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_GoldeenF[] = INCBIN_U32("graphics/pokemon/goldeen/anim_frontf.4bpp.lz");
const u32 gMonBackPic_GoldeenF[] = INCBIN_U32("graphics/pokemon/goldeen/backf.4bpp.lz");
@@ -1940,6 +3290,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Seaking[] = INCBIN_U8("graphics/pokemon/seaking/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Seaking[] = INCBIN_COMP("graphics/pokemon/seaking/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Seaking[] = INCBIN_U32("graphics/pokemon/seaking/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Seaking[] = INCBIN_U32("graphics/pokemon/seaking/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_SeakingF[] = INCBIN_U32("graphics/pokemon/seaking/anim_frontf.4bpp.lz");
const u32 gMonBackPic_SeakingF[] = INCBIN_U32("graphics/pokemon/seaking/backf.4bpp.lz");
@@ -1954,6 +3311,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Staryu[] = INCBIN_U8("graphics/pokemon/staryu/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Staryu[] = INCBIN_COMP("graphics/pokemon/staryu/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Staryu[] = INCBIN_U32("graphics/pokemon/staryu/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Staryu[] = INCBIN_U32("graphics/pokemon/staryu/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Starmie[] = INCBIN_U32("graphics/pokemon/starmie/anim_front.4bpp.lz");
const u32 gMonPalette_Starmie[] = INCBIN_U32("graphics/pokemon/starmie/normal.gbapal.lz");
@@ -1963,6 +3327,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Starmie[] = INCBIN_U8("graphics/pokemon/starmie/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Starmie[] = INCBIN_COMP("graphics/pokemon/starmie/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Starmie[] = INCBIN_U32("graphics/pokemon/starmie/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Starmie[] = INCBIN_U32("graphics/pokemon/starmie/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_STARYU
#if P_FAMILY_MR_MIME
@@ -1975,6 +3346,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_MimeJr[] = INCBIN_U8("graphics/pokemon/mime_jr/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_MimeJr[] = INCBIN_COMP("graphics/pokemon/mime_jr/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_MimeJr[] = INCBIN_U32("graphics/pokemon/mime_jr/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_MimeJr[] = INCBIN_U32("graphics/pokemon/mime_jr/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_4_CROSS_EVOS
const u32 gMonFrontPic_MrMime[] = INCBIN_U32("graphics/pokemon/mr_mime/anim_front.4bpp.lz");
@@ -1985,6 +3363,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_MrMime[] = INCBIN_U8("graphics/pokemon/mr_mime/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_MrMime[] = INCBIN_COMP("graphics/pokemon/mr_mime/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_MrMime[] = INCBIN_U32("graphics/pokemon/mr_mime/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_MrMime[] = INCBIN_U32("graphics/pokemon/mr_mime/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GALARIAN_FORMS
const u32 gMonFrontPic_MrMimeGalarian[] = INCBIN_U32("graphics/pokemon/mr_mime/galarian/front.4bpp.lz");
@@ -1992,6 +3377,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_MrMimeGalarian[] = INCBIN_U32("graphics/pokemon/mr_mime/galarian/back.4bpp.lz");
const u32 gMonShinyPalette_MrMimeGalarian[] = INCBIN_U32("graphics/pokemon/mr_mime/galarian/shiny.gbapal.lz");
const u8 gMonIcon_MrMimeGalarian[] = INCBIN_U8("graphics/pokemon/mr_mime/galarian/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_MrMimeGalarian[] = INCBIN_COMP("graphics/pokemon/mr_mime/galarian/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_MrMimeGalarian[] = INCBIN_U32("graphics/pokemon/mr_mime/galarian/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_MrMimeGalarian[] = INCBIN_U32("graphics/pokemon/mr_mime/galarian/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_MrRime[] = INCBIN_U32("graphics/pokemon/mr_rime/front.4bpp.lz");
const u32 gMonPalette_MrRime[] = INCBIN_U32("graphics/pokemon/mr_rime/normal.gbapal.lz");
@@ -2001,6 +3393,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_MrRime[] = INCBIN_U8("graphics/pokemon/mr_rime/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_MrRime[] = INCBIN_COMP("graphics/pokemon/mr_rime/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_MrRime[] = INCBIN_U32("graphics/pokemon/mr_rime/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_MrRime[] = INCBIN_U32("graphics/pokemon/mr_rime/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GALARIAN_FORMS
#endif //P_FAMILY_MR_MIME
@@ -2013,6 +3412,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Scyther[] = INCBIN_U8("graphics/pokemon/scyther/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Scyther[] = INCBIN_COMP("graphics/pokemon/scyther/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Scyther[] = INCBIN_U32("graphics/pokemon/scyther/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Scyther[] = INCBIN_U32("graphics/pokemon/scyther/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_ScytherF[] = INCBIN_U32("graphics/pokemon/scyther/anim_frontf.4bpp.lz");
@@ -2025,6 +3431,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Scizor[] = INCBIN_U8("graphics/pokemon/scizor/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Scizor[] = INCBIN_COMP("graphics/pokemon/scizor/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Scizor[] = INCBIN_U32("graphics/pokemon/scizor/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Scizor[] = INCBIN_U32("graphics/pokemon/scizor/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_ScizorF[] = INCBIN_U32("graphics/pokemon/scizor/anim_frontf.4bpp.lz");
@@ -2034,6 +3447,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_ScizorMega[] = INCBIN_U32("graphics/pokemon/scizor/mega/back.4bpp.lz");
const u32 gMonShinyPalette_ScizorMega[] = INCBIN_U32("graphics/pokemon/scizor/mega/shiny.gbapal.lz");
const u8 gMonIcon_ScizorMega[] = INCBIN_U8("graphics/pokemon/scizor/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_ScizorMega[] = INCBIN_COMP("graphics/pokemon/scizor/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_ScizorMega[] = INCBIN_U32("graphics/pokemon/scizor/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_ScizorMega[] = INCBIN_U32("graphics/pokemon/scizor/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#endif //P_GEN_2_CROSS_EVOS
@@ -2046,6 +3466,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Kleavor[] = INCBIN_U8("graphics/pokemon/kleavor/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Kleavor[] = INCBIN_COMP("graphics/pokemon/kleavor/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Kleavor[] = INCBIN_U32("graphics/pokemon/kleavor/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Kleavor[] = INCBIN_U32("graphics/pokemon/kleavor/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_8_CROSS_EVOS
#endif //P_FAMILY_SCYTHER
@@ -2059,6 +3486,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Smoochum[] = INCBIN_U8("graphics/pokemon/smoochum/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Smoochum[] = INCBIN_COMP("graphics/pokemon/smoochum/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Smoochum[] = INCBIN_U32("graphics/pokemon/smoochum/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Smoochum[] = INCBIN_U32("graphics/pokemon/smoochum/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_2_CROSS_EVOS
const u32 gMonFrontPic_Jynx[] = INCBIN_U32("graphics/pokemon/jynx/anim_front.4bpp.lz");
@@ -2069,6 +3503,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Jynx[] = INCBIN_U8("graphics/pokemon/jynx/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Jynx[] = INCBIN_COMP("graphics/pokemon/jynx/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Jynx[] = INCBIN_U32("graphics/pokemon/jynx/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Jynx[] = INCBIN_U32("graphics/pokemon/jynx/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_JYNX
#if P_FAMILY_ELECTABUZZ
@@ -2081,6 +3522,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Elekid[] = INCBIN_U8("graphics/pokemon/elekid/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Elekid[] = INCBIN_COMP("graphics/pokemon/elekid/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Elekid[] = INCBIN_U32("graphics/pokemon/elekid/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Elekid[] = INCBIN_U32("graphics/pokemon/elekid/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_2_CROSS_EVOS
const u32 gMonFrontPic_Electabuzz[] = INCBIN_U32("graphics/pokemon/electabuzz/anim_front.4bpp.lz");
@@ -2091,6 +3539,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Electabuzz[] = INCBIN_U8("graphics/pokemon/electabuzz/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Electabuzz[] = INCBIN_COMP("graphics/pokemon/electabuzz/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Electabuzz[] = INCBIN_U32("graphics/pokemon/electabuzz/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Electabuzz[] = INCBIN_U32("graphics/pokemon/electabuzz/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GEN_4_CROSS_EVOS
const u32 gMonFrontPic_Electivire[] = INCBIN_U32("graphics/pokemon/electivire/anim_front.4bpp.lz");
@@ -2101,6 +3556,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Electivire[] = INCBIN_U8("graphics/pokemon/electivire/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Electivire[] = INCBIN_COMP("graphics/pokemon/electivire/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Electivire[] = INCBIN_U32("graphics/pokemon/electivire/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Electivire[] = INCBIN_U32("graphics/pokemon/electivire/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_4_CROSS_EVOS
#endif //P_FAMILY_ELECTABUZZ
@@ -2114,6 +3576,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Magby[] = INCBIN_U8("graphics/pokemon/magby/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Magby[] = INCBIN_COMP("graphics/pokemon/magby/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Magby[] = INCBIN_U32("graphics/pokemon/magby/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Magby[] = INCBIN_U32("graphics/pokemon/magby/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_2_CROSS_EVOS
const u32 gMonFrontPic_Magmar[] = INCBIN_U32("graphics/pokemon/magmar/anim_front.4bpp.lz");
@@ -2124,6 +3593,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Magmar[] = INCBIN_U8("graphics/pokemon/magmar/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Magmar[] = INCBIN_COMP("graphics/pokemon/magmar/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Magmar[] = INCBIN_U32("graphics/pokemon/magmar/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Magmar[] = INCBIN_U32("graphics/pokemon/magmar/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GEN_4_CROSS_EVOS
const u32 gMonFrontPic_Magmortar[] = INCBIN_U32("graphics/pokemon/magmortar/anim_front.4bpp.lz");
@@ -2134,6 +3610,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Magmortar[] = INCBIN_U8("graphics/pokemon/magmortar/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Magmortar[] = INCBIN_COMP("graphics/pokemon/magmortar/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Magmortar[] = INCBIN_U32("graphics/pokemon/magmortar/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Magmortar[] = INCBIN_U32("graphics/pokemon/magmortar/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_4_CROSS_EVOS
#endif //P_FAMILY_MAGMAR
@@ -2146,6 +3629,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Pinsir[] = INCBIN_U8("graphics/pokemon/pinsir/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Pinsir[] = INCBIN_COMP("graphics/pokemon/pinsir/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Pinsir[] = INCBIN_U32("graphics/pokemon/pinsir/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Pinsir[] = INCBIN_U32("graphics/pokemon/pinsir/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_MEGA_EVOLUTIONS
const u32 gMonFrontPic_PinsirMega[] = INCBIN_U32("graphics/pokemon/pinsir/mega/front.4bpp.lz");
@@ -2153,6 +3643,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_PinsirMega[] = INCBIN_U32("graphics/pokemon/pinsir/mega/back.4bpp.lz");
const u32 gMonShinyPalette_PinsirMega[] = INCBIN_U32("graphics/pokemon/pinsir/mega/shiny.gbapal.lz");
const u8 gMonIcon_PinsirMega[] = INCBIN_U8("graphics/pokemon/pinsir/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_PinsirMega[] = INCBIN_COMP("graphics/pokemon/pinsir/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_PinsirMega[] = INCBIN_U32("graphics/pokemon/pinsir/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_PinsirMega[] = INCBIN_U32("graphics/pokemon/pinsir/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#endif //P_FAMILY_PINSIR
@@ -2165,6 +3662,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Tauros[] = INCBIN_U8("graphics/pokemon/tauros/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Tauros[] = INCBIN_COMP("graphics/pokemon/tauros/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Tauros[] = INCBIN_U32("graphics/pokemon/tauros/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Tauros[] = INCBIN_U32("graphics/pokemon/tauros/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_PALDEAN_FORMS
const u32 gMonFrontPic_TaurosPaldeanCombatBreed[] = INCBIN_U32("graphics/pokemon/tauros/paldean_combat_breed/front.4bpp.lz");
@@ -2184,6 +3688,12 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_TaurosPaldeanAquaBreed[] = INCBIN_U32("graphics/pokemon/tauros/paldean_aqua_breed/back.4bpp.lz");
const u32 gMonShinyPalette_TaurosPaldeanAquaBreed[] = INCBIN_U32("graphics/pokemon/tauros/paldean_aqua_breed/shiny.gbapal.lz");
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");
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_PALDEAN_FORMS
#endif //P_FAMILY_TAUROS
@@ -2196,6 +3706,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Magikarp[] = INCBIN_U8("graphics/pokemon/magikarp/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Magikarp[] = INCBIN_COMP("graphics/pokemon/magikarp/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Magikarp[] = INCBIN_U32("graphics/pokemon/magikarp/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Magikarp[] = INCBIN_U32("graphics/pokemon/magikarp/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_MagikarpF[] = INCBIN_U32("graphics/pokemon/magikarp/anim_frontf.4bpp.lz");
const u32 gMonBackPic_MagikarpF[] = INCBIN_U32("graphics/pokemon/magikarp/backf.4bpp.lz");
@@ -2208,6 +3725,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Gyarados[] = INCBIN_U8("graphics/pokemon/gyarados/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Gyarados[] = INCBIN_COMP("graphics/pokemon/gyarados/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Gyarados[] = INCBIN_U32("graphics/pokemon/gyarados/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Gyarados[] = INCBIN_U32("graphics/pokemon/gyarados/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_GyaradosF[] = INCBIN_U32("graphics/pokemon/gyarados/anim_frontf.4bpp.lz");
const u32 gMonBackPic_GyaradosF[] = INCBIN_U32("graphics/pokemon/gyarados/backf.4bpp.lz");
@@ -2218,6 +3742,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_GyaradosMega[] = INCBIN_U32("graphics/pokemon/gyarados/mega/back.4bpp.lz");
const u32 gMonShinyPalette_GyaradosMega[] = INCBIN_U32("graphics/pokemon/gyarados/mega/shiny.gbapal.lz");
const u8 gMonIcon_GyaradosMega[] = INCBIN_U8("graphics/pokemon/gyarados/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_GyaradosMega[] = INCBIN_COMP("graphics/pokemon/gyarados/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_GyaradosMega[] = INCBIN_U32("graphics/pokemon/gyarados/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_GyaradosMega[] = INCBIN_U32("graphics/pokemon/gyarados/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#endif //P_FAMILY_MAGIKARP
@@ -2230,6 +3761,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Lapras[] = INCBIN_U8("graphics/pokemon/lapras/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Lapras[] = INCBIN_COMP("graphics/pokemon/lapras/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Lapras[] = INCBIN_U32("graphics/pokemon/lapras/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Lapras[] = INCBIN_U32("graphics/pokemon/lapras/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GIGANTAMAX_FORMS
const u32 gMonFrontPic_LaprasGigantamax[] = INCBIN_U32("graphics/pokemon/lapras/gigantamax/front.4bpp.lz");
@@ -2237,6 +3775,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonPalette_LaprasGigantamax[] = INCBIN_U32("graphics/pokemon/lapras/gigantamax/normal.gbapal.lz");
const u32 gMonShinyPalette_LaprasGigantamax[] = INCBIN_U32("graphics/pokemon/lapras/gigantamax/shiny.gbapal.lz");
const u8 gMonIcon_LaprasGigantamax[] = INCBIN_U8("graphics/pokemon/lapras/gigantamax/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_LaprasGigantamax[] = INCBIN_COMP("graphics/pokemon/lapras/gigantamax/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_LaprasGigantamax[] = INCBIN_U32("graphics/pokemon/lapras/gigantamax/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_LaprasGigantamax[] = INCBIN_U32("graphics/pokemon/lapras/gigantamax/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GIGANTAMAX_FORMS
#endif //P_FAMILY_LAPRAS
@@ -2249,6 +3794,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Ditto[] = INCBIN_U8("graphics/pokemon/ditto/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Ditto[] = INCBIN_COMP("graphics/pokemon/ditto/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Ditto[] = INCBIN_U32("graphics/pokemon/ditto/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Ditto[] = INCBIN_U32("graphics/pokemon/ditto/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_DITTO
#if P_FAMILY_EEVEE
@@ -2260,6 +3812,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Eevee[] = INCBIN_U8("graphics/pokemon/eevee/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Eevee[] = INCBIN_COMP("graphics/pokemon/eevee/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Eevee[] = INCBIN_U32("graphics/pokemon/eevee/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Eevee[] = INCBIN_U32("graphics/pokemon/eevee/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_EeveeF[] = INCBIN_U32("graphics/pokemon/eevee/anim_frontf.4bpp.lz");
const u32 gMonBackPic_EeveeF[] = INCBIN_U32("graphics/pokemon/eevee/backf.4bpp.lz");
@@ -2270,6 +3829,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonPalette_EeveeGigantamax[] = INCBIN_U32("graphics/pokemon/eevee/gigantamax/normal.gbapal.lz");
const u32 gMonShinyPalette_EeveeGigantamax[] = INCBIN_U32("graphics/pokemon/eevee/gigantamax/shiny.gbapal.lz");
const u8 gMonIcon_EeveeGigantamax[] = INCBIN_U8("graphics/pokemon/eevee/gigantamax/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_EeveeGigantamax[] = INCBIN_COMP("graphics/pokemon/eevee/gigantamax/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_EeveeGigantamax[] = INCBIN_U32("graphics/pokemon/eevee/gigantamax/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_EeveeGigantamax[] = INCBIN_U32("graphics/pokemon/eevee/gigantamax/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GIGANTAMAX_FORMS
const u8 gMonIcon_EeveePartner[] = INCBIN_U8("graphics/pokemon/eevee/partner/icon.4bpp");
@@ -2285,6 +3851,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Vaporeon[] = INCBIN_U8("graphics/pokemon/vaporeon/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Vaporeon[] = INCBIN_COMP("graphics/pokemon/vaporeon/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Vaporeon[] = INCBIN_U32("graphics/pokemon/vaporeon/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Vaporeon[] = INCBIN_U32("graphics/pokemon/vaporeon/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Jolteon[] = INCBIN_U32("graphics/pokemon/jolteon/anim_front.4bpp.lz");
const u32 gMonPalette_Jolteon[] = INCBIN_U32("graphics/pokemon/jolteon/normal.gbapal.lz");
@@ -2294,6 +3867,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Jolteon[] = INCBIN_U8("graphics/pokemon/jolteon/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Jolteon[] = INCBIN_COMP("graphics/pokemon/jolteon/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Jolteon[] = INCBIN_U32("graphics/pokemon/jolteon/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Jolteon[] = INCBIN_U32("graphics/pokemon/jolteon/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Flareon[] = INCBIN_U32("graphics/pokemon/flareon/anim_front.4bpp.lz");
const u32 gMonPalette_Flareon[] = INCBIN_U32("graphics/pokemon/flareon/normal.gbapal.lz");
@@ -2303,6 +3883,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Flareon[] = INCBIN_U8("graphics/pokemon/flareon/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Flareon[] = INCBIN_COMP("graphics/pokemon/flareon/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Flareon[] = INCBIN_U32("graphics/pokemon/flareon/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Flareon[] = INCBIN_U32("graphics/pokemon/flareon/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GEN_2_CROSS_EVOS
const u32 gMonFrontPic_Espeon[] = INCBIN_U32("graphics/pokemon/espeon/anim_front.4bpp.lz");
@@ -2313,6 +3900,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Espeon[] = INCBIN_U8("graphics/pokemon/espeon/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Espeon[] = INCBIN_COMP("graphics/pokemon/espeon/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Espeon[] = INCBIN_U32("graphics/pokemon/espeon/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Espeon[] = INCBIN_U32("graphics/pokemon/espeon/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Umbreon[] = INCBIN_U32("graphics/pokemon/umbreon/anim_front.4bpp.lz");
const u32 gMonPalette_Umbreon[] = INCBIN_U32("graphics/pokemon/umbreon/normal.gbapal.lz");
@@ -2322,6 +3916,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Umbreon[] = INCBIN_U8("graphics/pokemon/umbreon/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Umbreon[] = INCBIN_COMP("graphics/pokemon/umbreon/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Umbreon[] = INCBIN_U32("graphics/pokemon/umbreon/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Umbreon[] = INCBIN_U32("graphics/pokemon/umbreon/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_2_CROSS_EVOS
#if P_GEN_4_CROSS_EVOS
@@ -2333,6 +3934,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Leafeon[] = INCBIN_U8("graphics/pokemon/leafeon/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Leafeon[] = INCBIN_COMP("graphics/pokemon/leafeon/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Leafeon[] = INCBIN_U32("graphics/pokemon/leafeon/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Leafeon[] = INCBIN_U32("graphics/pokemon/leafeon/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Glaceon[] = INCBIN_U32("graphics/pokemon/glaceon/anim_front.4bpp.lz");
const u32 gMonPalette_Glaceon[] = INCBIN_U32("graphics/pokemon/glaceon/normal.gbapal.lz");
@@ -2342,6 +3950,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Glaceon[] = INCBIN_U8("graphics/pokemon/glaceon/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Glaceon[] = INCBIN_COMP("graphics/pokemon/glaceon/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Glaceon[] = INCBIN_U32("graphics/pokemon/glaceon/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Glaceon[] = INCBIN_U32("graphics/pokemon/glaceon/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_4_CROSS_EVOS
#if P_GEN_6_CROSS_EVOS
@@ -2353,6 +3968,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Sylveon[] = INCBIN_U8("graphics/pokemon/sylveon/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Sylveon[] = INCBIN_COMP("graphics/pokemon/sylveon/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Sylveon[] = INCBIN_U32("graphics/pokemon/sylveon/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Sylveon[] = INCBIN_U32("graphics/pokemon/sylveon/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_6_CROSS_EVOS
#endif //P_FAMILY_EEVEE
@@ -2365,6 +3987,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Porygon[] = INCBIN_U8("graphics/pokemon/porygon/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Porygon[] = INCBIN_COMP("graphics/pokemon/porygon/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Porygon[] = INCBIN_U32("graphics/pokemon/porygon/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Porygon[] = INCBIN_U32("graphics/pokemon/porygon/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GEN_2_CROSS_EVOS
const u32 gMonFrontPic_Porygon2[] = INCBIN_U32("graphics/pokemon/porygon2/anim_front.4bpp.lz");
@@ -2375,6 +4004,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Porygon2[] = INCBIN_U8("graphics/pokemon/porygon2/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Porygon2[] = INCBIN_COMP("graphics/pokemon/porygon2/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Porygon2[] = INCBIN_U32("graphics/pokemon/porygon2/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Porygon2[] = INCBIN_U32("graphics/pokemon/porygon2/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GEN_4_CROSS_EVOS
const u32 gMonFrontPic_PorygonZ[] = INCBIN_U32("graphics/pokemon/porygon_z/anim_front.4bpp.lz");
@@ -2385,6 +4021,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_PorygonZ[] = INCBIN_U8("graphics/pokemon/porygon_z/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_PorygonZ[] = INCBIN_COMP("graphics/pokemon/porygon_z/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_PorygonZ[] = INCBIN_U32("graphics/pokemon/porygon_z/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_PorygonZ[] = INCBIN_U32("graphics/pokemon/porygon_z/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_4_CROSS_EVOS
#endif //P_GEN_2_CROSS_EVOS
#endif //P_FAMILY_PORYGON
@@ -2398,6 +4041,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Omanyte[] = INCBIN_U8("graphics/pokemon/omanyte/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Omanyte[] = INCBIN_COMP("graphics/pokemon/omanyte/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Omanyte[] = INCBIN_U32("graphics/pokemon/omanyte/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Omanyte[] = INCBIN_U32("graphics/pokemon/omanyte/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Omastar[] = INCBIN_U32("graphics/pokemon/omastar/anim_front.4bpp.lz");
const u32 gMonPalette_Omastar[] = INCBIN_U32("graphics/pokemon/omastar/normal.gbapal.lz");
@@ -2407,6 +4057,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Omastar[] = INCBIN_U8("graphics/pokemon/omastar/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Omastar[] = INCBIN_COMP("graphics/pokemon/omastar/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Omastar[] = INCBIN_U32("graphics/pokemon/omastar/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Omastar[] = INCBIN_U32("graphics/pokemon/omastar/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_OMANYTE
#if P_FAMILY_KABUTO
@@ -2418,6 +4075,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Kabuto[] = INCBIN_U8("graphics/pokemon/kabuto/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Kabuto[] = INCBIN_COMP("graphics/pokemon/kabuto/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Kabuto[] = INCBIN_U32("graphics/pokemon/kabuto/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Kabuto[] = INCBIN_U32("graphics/pokemon/kabuto/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Kabutops[] = INCBIN_U32("graphics/pokemon/kabutops/anim_front.4bpp.lz");
const u32 gMonPalette_Kabutops[] = INCBIN_U32("graphics/pokemon/kabutops/normal.gbapal.lz");
@@ -2427,6 +4091,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Kabutops[] = INCBIN_U8("graphics/pokemon/kabutops/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Kabutops[] = INCBIN_COMP("graphics/pokemon/kabutops/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Kabutops[] = INCBIN_U32("graphics/pokemon/kabutops/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Kabutops[] = INCBIN_U32("graphics/pokemon/kabutops/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_KABUTO
#if P_FAMILY_AERODACTYL
@@ -2438,6 +4109,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Aerodactyl[] = INCBIN_U8("graphics/pokemon/aerodactyl/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Aerodactyl[] = INCBIN_COMP("graphics/pokemon/aerodactyl/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Aerodactyl[] = INCBIN_U32("graphics/pokemon/aerodactyl/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Aerodactyl[] = INCBIN_U32("graphics/pokemon/aerodactyl/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_MEGA_EVOLUTIONS
const u32 gMonFrontPic_AerodactylMega[] = INCBIN_U32("graphics/pokemon/aerodactyl/mega/front.4bpp.lz");
@@ -2445,6 +4123,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_AerodactylMega[] = INCBIN_U32("graphics/pokemon/aerodactyl/mega/back.4bpp.lz");
const u32 gMonShinyPalette_AerodactylMega[] = INCBIN_U32("graphics/pokemon/aerodactyl/mega/shiny.gbapal.lz");
const u8 gMonIcon_AerodactylMega[] = INCBIN_U8("graphics/pokemon/aerodactyl/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_AerodactylMega[] = INCBIN_COMP("graphics/pokemon/aerodactyl/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_AerodactylMega[] = INCBIN_U32("graphics/pokemon/aerodactyl/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_AerodactylMega[] = INCBIN_U32("graphics/pokemon/aerodactyl/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#endif //P_FAMILY_AERODACTYL
@@ -2458,6 +4143,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Munchlax[] = INCBIN_U8("graphics/pokemon/munchlax/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Munchlax[] = INCBIN_COMP("graphics/pokemon/munchlax/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Munchlax[] = INCBIN_U32("graphics/pokemon/munchlax/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Munchlax[] = INCBIN_U32("graphics/pokemon/munchlax/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_4_CROSS_EVOS
const u32 gMonFrontPic_Snorlax[] = INCBIN_U32("graphics/pokemon/snorlax/anim_front.4bpp.lz");
@@ -2468,6 +4160,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Snorlax[] = INCBIN_U8("graphics/pokemon/snorlax/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Snorlax[] = INCBIN_COMP("graphics/pokemon/snorlax/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Snorlax[] = INCBIN_U32("graphics/pokemon/snorlax/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Snorlax[] = INCBIN_U32("graphics/pokemon/snorlax/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GIGANTAMAX_FORMS
const u32 gMonFrontPic_SnorlaxGigantamax[] = INCBIN_U32("graphics/pokemon/snorlax/gigantamax/front.4bpp.lz");
@@ -2475,6 +4174,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonPalette_SnorlaxGigantamax[] = INCBIN_U32("graphics/pokemon/snorlax/gigantamax/normal.gbapal.lz");
const u32 gMonShinyPalette_SnorlaxGigantamax[] = INCBIN_U32("graphics/pokemon/snorlax/gigantamax/shiny.gbapal.lz");
const u8 gMonIcon_SnorlaxGigantamax[] = INCBIN_U8("graphics/pokemon/snorlax/gigantamax/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_SnorlaxGigantamax[] = INCBIN_COMP("graphics/pokemon/snorlax/gigantamax/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_SnorlaxGigantamax[] = INCBIN_U32("graphics/pokemon/snorlax/gigantamax/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_SnorlaxGigantamax[] = INCBIN_U32("graphics/pokemon/snorlax/gigantamax/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GIGANTAMAX_FORMS
#endif //P_FAMILY_SNORLAX
@@ -2487,6 +4193,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Articuno[] = INCBIN_U8("graphics/pokemon/articuno/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Articuno[] = INCBIN_COMP("graphics/pokemon/articuno/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Articuno[] = INCBIN_U32("graphics/pokemon/articuno/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Articuno[] = INCBIN_U32("graphics/pokemon/articuno/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GALARIAN_FORMS
const u32 gMonFrontPic_ArticunoGalarian[] = INCBIN_U32("graphics/pokemon/articuno/galarian/front.4bpp.lz");
@@ -2494,6 +4207,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_ArticunoGalarian[] = INCBIN_U32("graphics/pokemon/articuno/galarian/back.4bpp.lz");
const u32 gMonShinyPalette_ArticunoGalarian[] = INCBIN_U32("graphics/pokemon/articuno/galarian/shiny.gbapal.lz");
const u8 gMonIcon_ArticunoGalarian[] = INCBIN_U8("graphics/pokemon/articuno/galarian/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_ArticunoGalarian[] = INCBIN_COMP("graphics/pokemon/articuno/galarian/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_ArticunoGalarian[] = INCBIN_U32("graphics/pokemon/articuno/galarian/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_ArticunoGalarian[] = INCBIN_U32("graphics/pokemon/articuno/galarian/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GALARIAN_FORMS
#endif //P_FAMILY_ARTICUNO
@@ -2506,6 +4226,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Zapdos[] = INCBIN_U8("graphics/pokemon/zapdos/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Zapdos[] = INCBIN_COMP("graphics/pokemon/zapdos/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Zapdos[] = INCBIN_U32("graphics/pokemon/zapdos/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Zapdos[] = INCBIN_U32("graphics/pokemon/zapdos/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GALARIAN_FORMS
const u32 gMonFrontPic_ZapdosGalarian[] = INCBIN_U32("graphics/pokemon/zapdos/galarian/front.4bpp.lz");
@@ -2513,6 +4240,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_ZapdosGalarian[] = INCBIN_U32("graphics/pokemon/zapdos/galarian/back.4bpp.lz");
const u32 gMonShinyPalette_ZapdosGalarian[] = INCBIN_U32("graphics/pokemon/zapdos/galarian/shiny.gbapal.lz");
const u8 gMonIcon_ZapdosGalarian[] = INCBIN_U8("graphics/pokemon/zapdos/galarian/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_ZapdosGalarian[] = INCBIN_COMP("graphics/pokemon/zapdos/galarian/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_ZapdosGalarian[] = INCBIN_U32("graphics/pokemon/zapdos/galarian/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_ZapdosGalarian[] = INCBIN_U32("graphics/pokemon/zapdos/galarian/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GALARIAN_FORMS
#endif //P_FAMILY_ZAPDOS
@@ -2525,6 +4259,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Moltres[] = INCBIN_U8("graphics/pokemon/moltres/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Moltres[] = INCBIN_COMP("graphics/pokemon/moltres/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Moltres[] = INCBIN_U32("graphics/pokemon/moltres/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Moltres[] = INCBIN_U32("graphics/pokemon/moltres/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GALARIAN_FORMS
const u32 gMonFrontPic_MoltresGalarian[] = INCBIN_U32("graphics/pokemon/moltres/galarian/front.4bpp.lz");
@@ -2532,6 +4273,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_MoltresGalarian[] = INCBIN_U32("graphics/pokemon/moltres/galarian/back.4bpp.lz");
const u32 gMonShinyPalette_MoltresGalarian[] = INCBIN_U32("graphics/pokemon/moltres/galarian/shiny.gbapal.lz");
const u8 gMonIcon_MoltresGalarian[] = INCBIN_U8("graphics/pokemon/moltres/galarian/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_MoltresGalarian[] = INCBIN_COMP("graphics/pokemon/moltres/galarian/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_MoltresGalarian[] = INCBIN_U32("graphics/pokemon/moltres/galarian/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_MoltresGalarian[] = INCBIN_U32("graphics/pokemon/moltres/galarian/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GALARIAN_FORMS
#endif //P_FAMILY_MOLTRES
@@ -2544,6 +4292,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Dratini[] = INCBIN_U8("graphics/pokemon/dratini/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Dratini[] = INCBIN_COMP("graphics/pokemon/dratini/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Dratini[] = INCBIN_U32("graphics/pokemon/dratini/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Dratini[] = INCBIN_U32("graphics/pokemon/dratini/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Dragonair[] = INCBIN_U32("graphics/pokemon/dragonair/anim_front.4bpp.lz");
const u32 gMonPalette_Dragonair[] = INCBIN_U32("graphics/pokemon/dragonair/normal.gbapal.lz");
@@ -2553,6 +4308,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Dragonair[] = INCBIN_U8("graphics/pokemon/dragonair/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Dragonair[] = INCBIN_COMP("graphics/pokemon/dragonair/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Dragonair[] = INCBIN_U32("graphics/pokemon/dragonair/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Dragonair[] = INCBIN_U32("graphics/pokemon/dragonair/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Dragonite[] = INCBIN_U32("graphics/pokemon/dragonite/anim_front.4bpp.lz");
const u32 gMonPalette_Dragonite[] = INCBIN_U32("graphics/pokemon/dragonite/normal.gbapal.lz");
@@ -2562,6 +4324,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Dragonite[] = INCBIN_U8("graphics/pokemon/dragonite/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Dragonite[] = INCBIN_COMP("graphics/pokemon/dragonite/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Dragonite[] = INCBIN_U32("graphics/pokemon/dragonite/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Dragonite[] = INCBIN_U32("graphics/pokemon/dragonite/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_DRATINI
#if P_FAMILY_MEWTWO
@@ -2573,6 +4342,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Mewtwo[] = INCBIN_U8("graphics/pokemon/mewtwo/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Mewtwo[] = INCBIN_COMP("graphics/pokemon/mewtwo/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Mewtwo[] = INCBIN_U32("graphics/pokemon/mewtwo/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Mewtwo[] = INCBIN_U32("graphics/pokemon/mewtwo/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_MEGA_EVOLUTIONS
const u32 gMonFrontPic_MewtwoMegaX[] = INCBIN_U32("graphics/pokemon/mewtwo/mega_x/front.4bpp.lz");
@@ -2580,12 +4356,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_MewtwoMegaX[] = INCBIN_U32("graphics/pokemon/mewtwo/mega_x/back.4bpp.lz");
const u32 gMonShinyPalette_MewtwoMegaX[] = INCBIN_U32("graphics/pokemon/mewtwo/mega_x/shiny.gbapal.lz");
const u8 gMonIcon_MewtwoMegaX[] = INCBIN_U8("graphics/pokemon/mewtwo/mega_x/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_MewtwoMegaX[] = INCBIN_COMP("graphics/pokemon/mewtwo/mega_x/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_MewtwoMegaX[] = INCBIN_U32("graphics/pokemon/mewtwo/mega_x/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_MewtwoMegaX[] = INCBIN_U32("graphics/pokemon/mewtwo/mega_x/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_MewtwoMegaY[] = INCBIN_U32("graphics/pokemon/mewtwo/mega_y/front.4bpp.lz");
const u32 gMonPalette_MewtwoMegaY[] = INCBIN_U32("graphics/pokemon/mewtwo/mega_y/normal.gbapal.lz");
const u32 gMonBackPic_MewtwoMegaY[] = INCBIN_U32("graphics/pokemon/mewtwo/mega_y/back.4bpp.lz");
const u32 gMonShinyPalette_MewtwoMegaY[] = INCBIN_U32("graphics/pokemon/mewtwo/mega_y/shiny.gbapal.lz");
const u8 gMonIcon_MewtwoMegaY[] = INCBIN_U8("graphics/pokemon/mewtwo/mega_y/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_MewtwoMegaY[] = INCBIN_COMP("graphics/pokemon/mewtwo/mega_y/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_MewtwoMegaY[] = INCBIN_U32("graphics/pokemon/mewtwo/mega_y/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_MewtwoMegaY[] = INCBIN_U32("graphics/pokemon/mewtwo/mega_y/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#endif //P_FAMILY_MEWTWO
@@ -2598,6 +4388,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Mew[] = INCBIN_U8("graphics/pokemon/mew/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Mew[] = INCBIN_COMP("graphics/pokemon/mew/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Mew[] = INCBIN_U32("graphics/pokemon/mew/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Mew[] = INCBIN_U32("graphics/pokemon/mew/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_MEW
#if P_FAMILY_CHIKORITA
@@ -2609,6 +4406,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Chikorita[] = INCBIN_U8("graphics/pokemon/chikorita/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Chikorita[] = INCBIN_COMP("graphics/pokemon/chikorita/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Chikorita[] = INCBIN_U32("graphics/pokemon/chikorita/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Chikorita[] = INCBIN_U32("graphics/pokemon/chikorita/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Bayleef[] = INCBIN_U32("graphics/pokemon/bayleef/anim_front.4bpp.lz");
const u32 gMonPalette_Bayleef[] = INCBIN_U32("graphics/pokemon/bayleef/normal.gbapal.lz");
@@ -2618,6 +4422,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Bayleef[] = INCBIN_U8("graphics/pokemon/bayleef/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Bayleef[] = INCBIN_COMP("graphics/pokemon/bayleef/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Bayleef[] = INCBIN_U32("graphics/pokemon/bayleef/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Bayleef[] = INCBIN_U32("graphics/pokemon/bayleef/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Meganium[] = INCBIN_U32("graphics/pokemon/meganium/anim_front.4bpp.lz");
const u32 gMonPalette_Meganium[] = INCBIN_U32("graphics/pokemon/meganium/normal.gbapal.lz");
@@ -2627,6 +4438,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Meganium[] = INCBIN_U8("graphics/pokemon/meganium/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Meganium[] = INCBIN_COMP("graphics/pokemon/meganium/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Meganium[] = INCBIN_U32("graphics/pokemon/meganium/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Meganium[] = INCBIN_U32("graphics/pokemon/meganium/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_MeganiumF[] = INCBIN_U32("graphics/pokemon/meganium/anim_frontf.4bpp.lz");
const u32 gMonBackPic_MeganiumF[] = INCBIN_U32("graphics/pokemon/meganium/backf.4bpp.lz");
@@ -2641,6 +4459,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Cyndaquil[] = INCBIN_U8("graphics/pokemon/cyndaquil/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Cyndaquil[] = INCBIN_COMP("graphics/pokemon/cyndaquil/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Cyndaquil[] = INCBIN_U32("graphics/pokemon/cyndaquil/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Cyndaquil[] = INCBIN_U32("graphics/pokemon/cyndaquil/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Quilava[] = INCBIN_U32("graphics/pokemon/quilava/anim_front.4bpp.lz");
const u32 gMonPalette_Quilava[] = INCBIN_U32("graphics/pokemon/quilava/normal.gbapal.lz");
@@ -2650,6 +4475,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Quilava[] = INCBIN_U8("graphics/pokemon/quilava/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Quilava[] = INCBIN_COMP("graphics/pokemon/quilava/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Quilava[] = INCBIN_U32("graphics/pokemon/quilava/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Quilava[] = INCBIN_U32("graphics/pokemon/quilava/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Typhlosion[] = INCBIN_U32("graphics/pokemon/typhlosion/anim_front.4bpp.lz");
const u32 gMonPalette_Typhlosion[] = INCBIN_U32("graphics/pokemon/typhlosion/normal.gbapal.lz");
@@ -2659,6 +4491,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Typhlosion[] = INCBIN_U8("graphics/pokemon/typhlosion/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Typhlosion[] = INCBIN_COMP("graphics/pokemon/typhlosion/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Typhlosion[] = INCBIN_U32("graphics/pokemon/typhlosion/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Typhlosion[] = INCBIN_U32("graphics/pokemon/typhlosion/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_HISUIAN_FORMS
const u32 gMonFrontPic_TyphlosionHisuian[] = INCBIN_U32("graphics/pokemon/typhlosion/hisuian/front.4bpp.lz");
@@ -2666,6 +4505,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_TyphlosionHisuian[] = INCBIN_U32("graphics/pokemon/typhlosion/hisuian/back.4bpp.lz");
const u32 gMonShinyPalette_TyphlosionHisuian[] = INCBIN_U32("graphics/pokemon/typhlosion/hisuian/shiny.gbapal.lz");
const u8 gMonIcon_TyphlosionHisuian[] = INCBIN_U8("graphics/pokemon/typhlosion/hisuian/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_TyphlosionHisuian[] = INCBIN_COMP("graphics/pokemon/typhlosion/hisuian/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_TyphlosionHisuian[] = INCBIN_U32("graphics/pokemon/typhlosion/hisuian/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_TyphlosionHisuian[] = INCBIN_U32("graphics/pokemon/typhlosion/hisuian/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_HISUIAN_FORMS
#endif //P_FAMILY_CYNDAQUIL
@@ -2678,6 +4524,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Totodile[] = INCBIN_U8("graphics/pokemon/totodile/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Totodile[] = INCBIN_COMP("graphics/pokemon/totodile/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Totodile[] = INCBIN_U32("graphics/pokemon/totodile/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Totodile[] = INCBIN_U32("graphics/pokemon/totodile/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Croconaw[] = INCBIN_U32("graphics/pokemon/croconaw/anim_front.4bpp.lz");
const u32 gMonPalette_Croconaw[] = INCBIN_U32("graphics/pokemon/croconaw/normal.gbapal.lz");
@@ -2687,6 +4540,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Croconaw[] = INCBIN_U8("graphics/pokemon/croconaw/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Croconaw[] = INCBIN_COMP("graphics/pokemon/croconaw/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Croconaw[] = INCBIN_U32("graphics/pokemon/croconaw/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Croconaw[] = INCBIN_U32("graphics/pokemon/croconaw/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Feraligatr[] = INCBIN_U32("graphics/pokemon/feraligatr/anim_front.4bpp.lz");
const u32 gMonPalette_Feraligatr[] = INCBIN_U32("graphics/pokemon/feraligatr/normal.gbapal.lz");
@@ -2696,6 +4556,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Feraligatr[] = INCBIN_U8("graphics/pokemon/feraligatr/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Feraligatr[] = INCBIN_COMP("graphics/pokemon/feraligatr/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Feraligatr[] = INCBIN_U32("graphics/pokemon/feraligatr/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Feraligatr[] = INCBIN_U32("graphics/pokemon/feraligatr/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_TOTODILE
#if P_FAMILY_SENTRET
@@ -2707,6 +4574,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Sentret[] = INCBIN_U8("graphics/pokemon/sentret/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Sentret[] = INCBIN_COMP("graphics/pokemon/sentret/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Sentret[] = INCBIN_U32("graphics/pokemon/sentret/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Sentret[] = INCBIN_U32("graphics/pokemon/sentret/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Furret[] = INCBIN_U32("graphics/pokemon/furret/anim_front.4bpp.lz");
const u32 gMonPalette_Furret[] = INCBIN_U32("graphics/pokemon/furret/normal.gbapal.lz");
@@ -2716,6 +4590,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Furret[] = INCBIN_U8("graphics/pokemon/furret/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Furret[] = INCBIN_COMP("graphics/pokemon/furret/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Furret[] = INCBIN_U32("graphics/pokemon/furret/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Furret[] = INCBIN_U32("graphics/pokemon/furret/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SENTRET
#if P_FAMILY_HOOTHOOT
@@ -2727,6 +4608,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Hoothoot[] = INCBIN_U8("graphics/pokemon/hoothoot/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Hoothoot[] = INCBIN_COMP("graphics/pokemon/hoothoot/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Hoothoot[] = INCBIN_U32("graphics/pokemon/hoothoot/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Hoothoot[] = INCBIN_U32("graphics/pokemon/hoothoot/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Noctowl[] = INCBIN_U32("graphics/pokemon/noctowl/anim_front.4bpp.lz");
const u32 gMonPalette_Noctowl[] = INCBIN_U32("graphics/pokemon/noctowl/normal.gbapal.lz");
@@ -2736,6 +4624,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Noctowl[] = INCBIN_U8("graphics/pokemon/noctowl/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Noctowl[] = INCBIN_COMP("graphics/pokemon/noctowl/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Noctowl[] = INCBIN_U32("graphics/pokemon/noctowl/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Noctowl[] = INCBIN_U32("graphics/pokemon/noctowl/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_HOOTHOOT
#if P_FAMILY_LEDYBA
@@ -2747,6 +4642,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Ledyba[] = INCBIN_U8("graphics/pokemon/ledyba/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Ledyba[] = INCBIN_COMP("graphics/pokemon/ledyba/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Ledyba[] = INCBIN_U32("graphics/pokemon/ledyba/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Ledyba[] = INCBIN_U32("graphics/pokemon/ledyba/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_LedybaF[] = INCBIN_U32("graphics/pokemon/ledyba/anim_frontf.4bpp.lz");
const u32 gMonBackPic_LedybaF[] = INCBIN_U32("graphics/pokemon/ledyba/backf.4bpp.lz");
@@ -2759,6 +4661,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Ledian[] = INCBIN_U8("graphics/pokemon/ledian/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Ledian[] = INCBIN_COMP("graphics/pokemon/ledian/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Ledian[] = INCBIN_U32("graphics/pokemon/ledian/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Ledian[] = INCBIN_U32("graphics/pokemon/ledian/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_LedianF[] = INCBIN_U32("graphics/pokemon/ledian/anim_frontf.4bpp.lz");
const u32 gMonBackPic_LedianF[] = INCBIN_U32("graphics/pokemon/ledian/backf.4bpp.lz");
@@ -2773,6 +4682,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Spinarak[] = INCBIN_U8("graphics/pokemon/spinarak/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Spinarak[] = INCBIN_COMP("graphics/pokemon/spinarak/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Spinarak[] = INCBIN_U32("graphics/pokemon/spinarak/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Spinarak[] = INCBIN_U32("graphics/pokemon/spinarak/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Ariados[] = INCBIN_U32("graphics/pokemon/ariados/anim_front.4bpp.lz");
const u32 gMonPalette_Ariados[] = INCBIN_U32("graphics/pokemon/ariados/normal.gbapal.lz");
@@ -2782,6 +4698,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Ariados[] = INCBIN_U8("graphics/pokemon/ariados/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Ariados[] = INCBIN_COMP("graphics/pokemon/ariados/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Ariados[] = INCBIN_U32("graphics/pokemon/ariados/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Ariados[] = INCBIN_U32("graphics/pokemon/ariados/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SPINARAK
#if P_FAMILY_CHINCHOU
@@ -2793,6 +4716,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Chinchou[] = INCBIN_U8("graphics/pokemon/chinchou/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Chinchou[] = INCBIN_COMP("graphics/pokemon/chinchou/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Chinchou[] = INCBIN_U32("graphics/pokemon/chinchou/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Chinchou[] = INCBIN_U32("graphics/pokemon/chinchou/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Lanturn[] = INCBIN_U32("graphics/pokemon/lanturn/anim_front.4bpp.lz");
const u32 gMonPalette_Lanturn[] = INCBIN_U32("graphics/pokemon/lanturn/normal.gbapal.lz");
@@ -2802,6 +4732,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Lanturn[] = INCBIN_U8("graphics/pokemon/lanturn/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Lanturn[] = INCBIN_COMP("graphics/pokemon/lanturn/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Lanturn[] = INCBIN_U32("graphics/pokemon/lanturn/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Lanturn[] = INCBIN_U32("graphics/pokemon/lanturn/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_CHINCHOU
#if P_FAMILY_TOGEPI
@@ -2813,6 +4750,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Togepi[] = INCBIN_U8("graphics/pokemon/togepi/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Togepi[] = INCBIN_COMP("graphics/pokemon/togepi/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Togepi[] = INCBIN_U32("graphics/pokemon/togepi/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Togepi[] = INCBIN_U32("graphics/pokemon/togepi/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Togetic[] = INCBIN_U32("graphics/pokemon/togetic/anim_front.4bpp.lz");
const u32 gMonPalette_Togetic[] = INCBIN_U32("graphics/pokemon/togetic/normal.gbapal.lz");
@@ -2822,6 +4766,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Togetic[] = INCBIN_U8("graphics/pokemon/togetic/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Togetic[] = INCBIN_COMP("graphics/pokemon/togetic/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Togetic[] = INCBIN_U32("graphics/pokemon/togetic/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Togetic[] = INCBIN_U32("graphics/pokemon/togetic/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GEN_4_CROSS_EVOS
const u32 gMonFrontPic_Togekiss[] = INCBIN_U32("graphics/pokemon/togekiss/anim_front.4bpp.lz");
@@ -2832,6 +4783,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Togekiss[] = INCBIN_U8("graphics/pokemon/togekiss/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Togekiss[] = INCBIN_COMP("graphics/pokemon/togekiss/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Togekiss[] = INCBIN_U32("graphics/pokemon/togekiss/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Togekiss[] = INCBIN_U32("graphics/pokemon/togekiss/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_4_CROSS_EVOS
#endif //P_FAMILY_TOGEPI
@@ -2844,6 +4802,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Natu[] = INCBIN_U8("graphics/pokemon/natu/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Natu[] = INCBIN_COMP("graphics/pokemon/natu/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Natu[] = INCBIN_U32("graphics/pokemon/natu/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Natu[] = INCBIN_U32("graphics/pokemon/natu/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Xatu[] = INCBIN_U32("graphics/pokemon/xatu/anim_front.4bpp.lz");
const u32 gMonPalette_Xatu[] = INCBIN_U32("graphics/pokemon/xatu/normal.gbapal.lz");
@@ -2853,6 +4818,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Xatu[] = INCBIN_U8("graphics/pokemon/xatu/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Xatu[] = INCBIN_COMP("graphics/pokemon/xatu/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Xatu[] = INCBIN_U32("graphics/pokemon/xatu/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Xatu[] = INCBIN_U32("graphics/pokemon/xatu/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_XatuF[] = INCBIN_U32("graphics/pokemon/xatu/anim_frontf.4bpp.lz");
#endif //P_FAMILY_NATU
@@ -2866,6 +4838,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Mareep[] = INCBIN_U8("graphics/pokemon/mareep/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Mareep[] = INCBIN_COMP("graphics/pokemon/mareep/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Mareep[] = INCBIN_U32("graphics/pokemon/mareep/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Mareep[] = INCBIN_U32("graphics/pokemon/mareep/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Flaaffy[] = INCBIN_U32("graphics/pokemon/flaaffy/anim_front.4bpp.lz");
const u32 gMonPalette_Flaaffy[] = INCBIN_U32("graphics/pokemon/flaaffy/normal.gbapal.lz");
@@ -2875,6 +4854,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Flaaffy[] = INCBIN_U8("graphics/pokemon/flaaffy/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Flaaffy[] = INCBIN_COMP("graphics/pokemon/flaaffy/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Flaaffy[] = INCBIN_U32("graphics/pokemon/flaaffy/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Flaaffy[] = INCBIN_U32("graphics/pokemon/flaaffy/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Ampharos[] = INCBIN_U32("graphics/pokemon/ampharos/anim_front.4bpp.lz");
const u32 gMonPalette_Ampharos[] = INCBIN_U32("graphics/pokemon/ampharos/normal.gbapal.lz");
@@ -2884,6 +4870,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Ampharos[] = INCBIN_U8("graphics/pokemon/ampharos/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Ampharos[] = INCBIN_COMP("graphics/pokemon/ampharos/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Ampharos[] = INCBIN_U32("graphics/pokemon/ampharos/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Ampharos[] = INCBIN_U32("graphics/pokemon/ampharos/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_MEGA_EVOLUTIONS
const u32 gMonFrontPic_AmpharosMega[] = INCBIN_U32("graphics/pokemon/ampharos/mega/front.4bpp.lz");
@@ -2891,6 +4884,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_AmpharosMega[] = INCBIN_U32("graphics/pokemon/ampharos/mega/back.4bpp.lz");
const u32 gMonShinyPalette_AmpharosMega[] = INCBIN_U32("graphics/pokemon/ampharos/mega/shiny.gbapal.lz");
const u8 gMonIcon_AmpharosMega[] = INCBIN_U8("graphics/pokemon/ampharos/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_AmpharosMega[] = INCBIN_COMP("graphics/pokemon/ampharos/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_AmpharosMega[] = INCBIN_U32("graphics/pokemon/ampharos/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_AmpharosMega[] = INCBIN_U32("graphics/pokemon/ampharos/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#endif //P_FAMILY_MAREEP
@@ -2904,6 +4904,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Azurill[] = INCBIN_U8("graphics/pokemon/azurill/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Azurill[] = INCBIN_COMP("graphics/pokemon/azurill/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Azurill[] = INCBIN_U32("graphics/pokemon/azurill/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Azurill[] = INCBIN_U32("graphics/pokemon/azurill/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_3_CROSS_EVOS
const u32 gMonFrontPic_Marill[] = INCBIN_U32("graphics/pokemon/marill/anim_front.4bpp.lz");
@@ -2914,6 +4921,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Marill[] = INCBIN_U8("graphics/pokemon/marill/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Marill[] = INCBIN_COMP("graphics/pokemon/marill/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Marill[] = INCBIN_U32("graphics/pokemon/marill/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Marill[] = INCBIN_U32("graphics/pokemon/marill/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Azumarill[] = INCBIN_U32("graphics/pokemon/azumarill/anim_front.4bpp.lz");
const u32 gMonPalette_Azumarill[] = INCBIN_U32("graphics/pokemon/azumarill/normal.gbapal.lz");
@@ -2923,6 +4937,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Azumarill[] = INCBIN_U8("graphics/pokemon/azumarill/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Azumarill[] = INCBIN_COMP("graphics/pokemon/azumarill/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Azumarill[] = INCBIN_U32("graphics/pokemon/azumarill/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Azumarill[] = INCBIN_U32("graphics/pokemon/azumarill/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_MARILL
#if P_FAMILY_SUDOWOODO
@@ -2935,6 +4956,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Bonsly[] = INCBIN_U8("graphics/pokemon/bonsly/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Bonsly[] = INCBIN_COMP("graphics/pokemon/bonsly/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Bonsly[] = INCBIN_U32("graphics/pokemon/bonsly/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Bonsly[] = INCBIN_U32("graphics/pokemon/bonsly/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_4_CROSS_EVOS
const u32 gMonFrontPic_Sudowoodo[] = INCBIN_U32("graphics/pokemon/sudowoodo/anim_front.4bpp.lz");
@@ -2945,6 +4973,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Sudowoodo[] = INCBIN_U8("graphics/pokemon/sudowoodo/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Sudowoodo[] = INCBIN_COMP("graphics/pokemon/sudowoodo/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Sudowoodo[] = INCBIN_U32("graphics/pokemon/sudowoodo/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Sudowoodo[] = INCBIN_U32("graphics/pokemon/sudowoodo/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_SudowoodoF[] = INCBIN_U32("graphics/pokemon/sudowoodo/anim_frontf.4bpp.lz");
const u32 gMonBackPic_SudowoodoF[] = INCBIN_U32("graphics/pokemon/sudowoodo/backf.4bpp.lz");
@@ -2959,6 +4994,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Hoppip[] = INCBIN_U8("graphics/pokemon/hoppip/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Hoppip[] = INCBIN_COMP("graphics/pokemon/hoppip/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Hoppip[] = INCBIN_U32("graphics/pokemon/hoppip/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Hoppip[] = INCBIN_U32("graphics/pokemon/hoppip/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Skiploom[] = INCBIN_U32("graphics/pokemon/skiploom/anim_front.4bpp.lz");
const u32 gMonPalette_Skiploom[] = INCBIN_U32("graphics/pokemon/skiploom/normal.gbapal.lz");
@@ -2968,6 +5010,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Skiploom[] = INCBIN_U8("graphics/pokemon/skiploom/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Skiploom[] = INCBIN_COMP("graphics/pokemon/skiploom/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Skiploom[] = INCBIN_U32("graphics/pokemon/skiploom/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Skiploom[] = INCBIN_U32("graphics/pokemon/skiploom/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Jumpluff[] = INCBIN_U32("graphics/pokemon/jumpluff/anim_front.4bpp.lz");
const u32 gMonPalette_Jumpluff[] = INCBIN_U32("graphics/pokemon/jumpluff/normal.gbapal.lz");
@@ -2977,6 +5026,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Jumpluff[] = INCBIN_U8("graphics/pokemon/jumpluff/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Jumpluff[] = INCBIN_COMP("graphics/pokemon/jumpluff/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Jumpluff[] = INCBIN_U32("graphics/pokemon/jumpluff/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Jumpluff[] = INCBIN_U32("graphics/pokemon/jumpluff/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_HOPPIP
#if P_FAMILY_AIPOM
@@ -2988,6 +5044,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Aipom[] = INCBIN_U8("graphics/pokemon/aipom/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Aipom[] = INCBIN_COMP("graphics/pokemon/aipom/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Aipom[] = INCBIN_U32("graphics/pokemon/aipom/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Aipom[] = INCBIN_U32("graphics/pokemon/aipom/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_AipomF[] = INCBIN_U32("graphics/pokemon/aipom/anim_frontf.4bpp.lz");
const u32 gMonBackPic_AipomF[] = INCBIN_U32("graphics/pokemon/aipom/backf.4bpp.lz");
@@ -3001,6 +5064,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Ambipom[] = INCBIN_U8("graphics/pokemon/ambipom/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Ambipom[] = INCBIN_COMP("graphics/pokemon/ambipom/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Ambipom[] = INCBIN_U32("graphics/pokemon/ambipom/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Ambipom[] = INCBIN_U32("graphics/pokemon/ambipom/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_AmbipomF[] = INCBIN_U32("graphics/pokemon/ambipom/anim_frontf.4bpp.lz");
const u32 gMonBackPic_AmbipomF[] = INCBIN_U32("graphics/pokemon/ambipom/backf.4bpp.lz");
@@ -3016,6 +5086,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Sunkern[] = INCBIN_U8("graphics/pokemon/sunkern/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Sunkern[] = INCBIN_COMP("graphics/pokemon/sunkern/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Sunkern[] = INCBIN_U32("graphics/pokemon/sunkern/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Sunkern[] = INCBIN_U32("graphics/pokemon/sunkern/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Sunflora[] = INCBIN_U32("graphics/pokemon/sunflora/anim_front.4bpp.lz");
const u32 gMonPalette_Sunflora[] = INCBIN_U32("graphics/pokemon/sunflora/normal.gbapal.lz");
@@ -3025,6 +5102,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Sunflora[] = INCBIN_U8("graphics/pokemon/sunflora/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Sunflora[] = INCBIN_COMP("graphics/pokemon/sunflora/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Sunflora[] = INCBIN_U32("graphics/pokemon/sunflora/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Sunflora[] = INCBIN_U32("graphics/pokemon/sunflora/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SUNKERN
#if P_FAMILY_YANMA
@@ -3036,6 +5120,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Yanma[] = INCBIN_U8("graphics/pokemon/yanma/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Yanma[] = INCBIN_COMP("graphics/pokemon/yanma/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Yanma[] = INCBIN_U32("graphics/pokemon/yanma/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Yanma[] = INCBIN_U32("graphics/pokemon/yanma/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GEN_4_CROSS_EVOS
const u32 gMonFrontPic_Yanmega[] = INCBIN_U32("graphics/pokemon/yanmega/anim_front.4bpp.lz");
@@ -3046,6 +5137,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Yanmega[] = INCBIN_U8("graphics/pokemon/yanmega/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Yanmega[] = INCBIN_COMP("graphics/pokemon/yanmega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Yanmega[] = INCBIN_U32("graphics/pokemon/yanmega/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Yanmega[] = INCBIN_U32("graphics/pokemon/yanmega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_4_CROSS_EVOS
#endif //P_FAMILY_YANMA
@@ -3058,6 +5156,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Wooper[] = INCBIN_U8("graphics/pokemon/wooper/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Wooper[] = INCBIN_COMP("graphics/pokemon/wooper/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Wooper[] = INCBIN_U32("graphics/pokemon/wooper/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Wooper[] = INCBIN_U32("graphics/pokemon/wooper/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_WooperF[] = INCBIN_U32("graphics/pokemon/wooper/anim_frontf.4bpp.lz");
const u32 gMonBackPic_WooperF[] = INCBIN_U32("graphics/pokemon/wooper/backf.4bpp.lz");
@@ -3070,6 +5175,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Quagsire[] = INCBIN_U8("graphics/pokemon/quagsire/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Quagsire[] = INCBIN_COMP("graphics/pokemon/quagsire/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Quagsire[] = INCBIN_U32("graphics/pokemon/quagsire/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Quagsire[] = INCBIN_U32("graphics/pokemon/quagsire/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_QuagsireF[] = INCBIN_U32("graphics/pokemon/quagsire/anim_frontf.4bpp.lz");
const u32 gMonBackPic_QuagsireF[] = INCBIN_U32("graphics/pokemon/quagsire/backf.4bpp.lz");
@@ -3080,6 +5192,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_WooperPaldean[] = INCBIN_U32("graphics/pokemon/wooper/wooper_paldean/back.4bpp.lz");
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Clodsire[] = INCBIN_U32("graphics/pokemon/clodsire/front.4bpp.lz");
const u32 gMonPalette_Clodsire[] = INCBIN_U32("graphics/pokemon/clodsire/normal.gbapal.lz");
@@ -3089,6 +5208,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_PALDEAN_FORMS
#endif //P_FAMILY_WOOPER
@@ -3101,6 +5227,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Murkrow[] = INCBIN_U8("graphics/pokemon/murkrow/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Murkrow[] = INCBIN_COMP("graphics/pokemon/murkrow/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Murkrow[] = INCBIN_U32("graphics/pokemon/murkrow/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Murkrow[] = INCBIN_U32("graphics/pokemon/murkrow/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_MurkrowF[] = INCBIN_U32("graphics/pokemon/murkrow/anim_frontf.4bpp.lz");
const u32 gMonBackPic_MurkrowF[] = INCBIN_U32("graphics/pokemon/murkrow/backf.4bpp.lz");
@@ -3114,6 +5247,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Honchkrow[] = INCBIN_U8("graphics/pokemon/honchkrow/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Honchkrow[] = INCBIN_COMP("graphics/pokemon/honchkrow/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Honchkrow[] = INCBIN_U32("graphics/pokemon/honchkrow/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Honchkrow[] = INCBIN_U32("graphics/pokemon/honchkrow/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_4_CROSS_EVOS
#endif //P_FAMILY_MURKROW
@@ -3126,6 +5266,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Misdreavus[] = INCBIN_U8("graphics/pokemon/misdreavus/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Misdreavus[] = INCBIN_COMP("graphics/pokemon/misdreavus/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Misdreavus[] = INCBIN_U32("graphics/pokemon/misdreavus/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Misdreavus[] = INCBIN_U32("graphics/pokemon/misdreavus/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GEN_4_CROSS_EVOS
const u32 gMonFrontPic_Mismagius[] = INCBIN_U32("graphics/pokemon/mismagius/anim_front.4bpp.lz");
@@ -3136,6 +5283,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Mismagius[] = INCBIN_U8("graphics/pokemon/mismagius/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Mismagius[] = INCBIN_COMP("graphics/pokemon/mismagius/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Mismagius[] = INCBIN_U32("graphics/pokemon/mismagius/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Mismagius[] = INCBIN_U32("graphics/pokemon/mismagius/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_4_CROSS_EVOS
#endif //P_FAMILY_MISDREAVUS
@@ -3257,6 +5411,41 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonFrontPic_UnownQuestionMark[] = INCBIN_U32("graphics/pokemon/unown/question_mark/front.4bpp.lz");
const u32 gMonBackPic_UnownQuestionMark[] = INCBIN_U32("graphics/pokemon/unown/question_mark/back.4bpp.lz");
const u8 gMonIcon_UnownQuestionMark[] = INCBIN_U8("graphics/pokemon/unown/question_mark/icon.4bpp");
+
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_UnownA[] = INCBIN_COMP("graphics/pokemon/unown/overworld.4bpp");
+ const u32 gObjectEventPic_UnownB[] = INCBIN_COMP("graphics/pokemon/unown/b/overworld.4bpp");
+ const u32 gObjectEventPic_UnownC[] = INCBIN_COMP("graphics/pokemon/unown/c/overworld.4bpp");
+ const u32 gObjectEventPic_UnownD[] = INCBIN_COMP("graphics/pokemon/unown/d/overworld.4bpp");
+ const u32 gObjectEventPic_UnownE[] = INCBIN_COMP("graphics/pokemon/unown/e/overworld.4bpp");
+ const u32 gObjectEventPic_UnownF[] = INCBIN_COMP("graphics/pokemon/unown/f/overworld.4bpp");
+ const u32 gObjectEventPic_UnownG[] = INCBIN_COMP("graphics/pokemon/unown/g/overworld.4bpp");
+ const u32 gObjectEventPic_UnownH[] = INCBIN_COMP("graphics/pokemon/unown/h/overworld.4bpp");
+ const u32 gObjectEventPic_UnownI[] = INCBIN_COMP("graphics/pokemon/unown/i/overworld.4bpp");
+ const u32 gObjectEventPic_UnownJ[] = INCBIN_COMP("graphics/pokemon/unown/j/overworld.4bpp");
+ const u32 gObjectEventPic_UnownK[] = INCBIN_COMP("graphics/pokemon/unown/k/overworld.4bpp");
+ const u32 gObjectEventPic_UnownL[] = INCBIN_COMP("graphics/pokemon/unown/l/overworld.4bpp");
+ const u32 gObjectEventPic_UnownM[] = INCBIN_COMP("graphics/pokemon/unown/m/overworld.4bpp");
+ const u32 gObjectEventPic_UnownN[] = INCBIN_COMP("graphics/pokemon/unown/n/overworld.4bpp");
+ const u32 gObjectEventPic_UnownO[] = INCBIN_COMP("graphics/pokemon/unown/o/overworld.4bpp");
+ const u32 gObjectEventPic_UnownP[] = INCBIN_COMP("graphics/pokemon/unown/p/overworld.4bpp");
+ const u32 gObjectEventPic_UnownQ[] = INCBIN_COMP("graphics/pokemon/unown/q/overworld.4bpp");
+ const u32 gObjectEventPic_UnownR[] = INCBIN_COMP("graphics/pokemon/unown/r/overworld.4bpp");
+ const u32 gObjectEventPic_UnownS[] = INCBIN_COMP("graphics/pokemon/unown/s/overworld.4bpp");
+ const u32 gObjectEventPic_UnownT[] = INCBIN_COMP("graphics/pokemon/unown/t/overworld.4bpp");
+ const u32 gObjectEventPic_UnownU[] = INCBIN_COMP("graphics/pokemon/unown/u/overworld.4bpp");
+ const u32 gObjectEventPic_UnownV[] = INCBIN_COMP("graphics/pokemon/unown/v/overworld.4bpp");
+ const u32 gObjectEventPic_UnownW[] = INCBIN_COMP("graphics/pokemon/unown/w/overworld.4bpp");
+ const u32 gObjectEventPic_UnownX[] = INCBIN_COMP("graphics/pokemon/unown/x/overworld.4bpp");
+ const u32 gObjectEventPic_UnownY[] = INCBIN_COMP("graphics/pokemon/unown/y/overworld.4bpp");
+ const u32 gObjectEventPic_UnownZ[] = INCBIN_COMP("graphics/pokemon/unown/z/overworld.4bpp");
+ const u32 gObjectEventPic_UnownExclamationMark[] = INCBIN_COMP("graphics/pokemon/unown/exclamation_mark/overworld.4bpp");
+ const u32 gObjectEventPic_UnownQuestionMark[] = INCBIN_COMP("graphics/pokemon/unown/question_mark/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Unown[] = INCBIN_U32("graphics/pokemon/unown/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Unown[] = INCBIN_U32("graphics/pokemon/unown/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_UNOWN
#if P_FAMILY_WOBBUFFET
@@ -3269,6 +5458,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Wynaut[] = INCBIN_U8("graphics/pokemon/wynaut/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Wynaut[] = INCBIN_COMP("graphics/pokemon/wynaut/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Wynaut[] = INCBIN_U32("graphics/pokemon/wynaut/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Wynaut[] = INCBIN_U32("graphics/pokemon/wynaut/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_3_CROSS_EVOS
const u32 gMonFrontPic_Wobbuffet[] = INCBIN_U32("graphics/pokemon/wobbuffet/anim_front.4bpp.lz");
@@ -3279,6 +5475,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Wobbuffet[] = INCBIN_U8("graphics/pokemon/wobbuffet/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Wobbuffet[] = INCBIN_COMP("graphics/pokemon/wobbuffet/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Wobbuffet[] = INCBIN_U32("graphics/pokemon/wobbuffet/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Wobbuffet[] = INCBIN_U32("graphics/pokemon/wobbuffet/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_WobbuffetF[] = INCBIN_U32("graphics/pokemon/wobbuffet/anim_frontf.4bpp.lz");
const u32 gMonBackPic_WobbuffetF[] = INCBIN_U32("graphics/pokemon/wobbuffet/backf.4bpp.lz");
@@ -3296,6 +5499,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Girafarig[] = INCBIN_U8("graphics/pokemon/girafarig/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Girafarig[] = INCBIN_COMP("graphics/pokemon/girafarig/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Girafarig[] = INCBIN_U32("graphics/pokemon/girafarig/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Girafarig[] = INCBIN_U32("graphics/pokemon/girafarig/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_GirafarigF[] = INCBIN_U32("graphics/pokemon/girafarig/anim_frontf.4bpp.lz");
const u32 gMonBackPic_GirafarigF[] = INCBIN_U32("graphics/pokemon/girafarig/backf.4bpp.lz");
@@ -3309,6 +5519,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_9_CROSS_EVOS
#endif //P_FAMILY_GIRAFARIG
@@ -3321,6 +5538,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Pineco[] = INCBIN_U8("graphics/pokemon/pineco/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Pineco[] = INCBIN_COMP("graphics/pokemon/pineco/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Pineco[] = INCBIN_U32("graphics/pokemon/pineco/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Pineco[] = INCBIN_U32("graphics/pokemon/pineco/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Forretress[] = INCBIN_U32("graphics/pokemon/forretress/anim_front.4bpp.lz");
const u32 gMonPalette_Forretress[] = INCBIN_U32("graphics/pokemon/forretress/normal.gbapal.lz");
@@ -3330,6 +5554,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Forretress[] = INCBIN_U8("graphics/pokemon/forretress/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Forretress[] = INCBIN_COMP("graphics/pokemon/forretress/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Forretress[] = INCBIN_U32("graphics/pokemon/forretress/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Forretress[] = INCBIN_U32("graphics/pokemon/forretress/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_PINECO
#if P_FAMILY_DUNSPARCE
@@ -3341,6 +5572,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Dunsparce[] = INCBIN_U8("graphics/pokemon/dunsparce/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Dunsparce[] = INCBIN_COMP("graphics/pokemon/dunsparce/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Dunsparce[] = INCBIN_U32("graphics/pokemon/dunsparce/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Dunsparce[] = INCBIN_U32("graphics/pokemon/dunsparce/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GEN_9_CROSS_EVOS
const u32 gMonPalette_Dudunsparce[] = INCBIN_U32("graphics/pokemon/dudunsparce/normal.gbapal.lz");
@@ -3349,6 +5587,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_DudunsparceTwoSegment[] = INCBIN_U32("graphics/pokemon/dudunsparce/front.4bpp.lz");
const u32 gMonBackPic_DudunsparceTwoSegment[] = INCBIN_U32("graphics/pokemon/dudunsparce/back.4bpp.lz");
@@ -3367,6 +5612,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Gligar[] = INCBIN_U8("graphics/pokemon/gligar/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Gligar[] = INCBIN_COMP("graphics/pokemon/gligar/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Gligar[] = INCBIN_U32("graphics/pokemon/gligar/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Gligar[] = INCBIN_U32("graphics/pokemon/gligar/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_GligarF[] = INCBIN_U32("graphics/pokemon/gligar/anim_frontf.4bpp.lz");
const u32 gMonBackPic_GligarF[] = INCBIN_U32("graphics/pokemon/gligar/backf.4bpp.lz");
@@ -3380,6 +5632,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Gliscor[] = INCBIN_U8("graphics/pokemon/gliscor/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Gliscor[] = INCBIN_COMP("graphics/pokemon/gliscor/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Gliscor[] = INCBIN_U32("graphics/pokemon/gliscor/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Gliscor[] = INCBIN_U32("graphics/pokemon/gliscor/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_4_CROSS_EVOS
#endif //P_FAMILY_GLIGAR
@@ -3392,6 +5651,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Snubbull[] = INCBIN_U8("graphics/pokemon/snubbull/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Snubbull[] = INCBIN_COMP("graphics/pokemon/snubbull/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Snubbull[] = INCBIN_U32("graphics/pokemon/snubbull/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Snubbull[] = INCBIN_U32("graphics/pokemon/snubbull/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Granbull[] = INCBIN_U32("graphics/pokemon/granbull/anim_front.4bpp.lz");
const u32 gMonPalette_Granbull[] = INCBIN_U32("graphics/pokemon/granbull/normal.gbapal.lz");
@@ -3401,6 +5667,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Granbull[] = INCBIN_U8("graphics/pokemon/granbull/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Granbull[] = INCBIN_COMP("graphics/pokemon/granbull/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Granbull[] = INCBIN_U32("graphics/pokemon/granbull/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Granbull[] = INCBIN_U32("graphics/pokemon/granbull/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SNUBBULL
#if P_FAMILY_QWILFISH
@@ -3412,6 +5685,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Qwilfish[] = INCBIN_U8("graphics/pokemon/qwilfish/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Qwilfish[] = INCBIN_COMP("graphics/pokemon/qwilfish/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Qwilfish[] = INCBIN_U32("graphics/pokemon/qwilfish/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Qwilfish[] = INCBIN_U32("graphics/pokemon/qwilfish/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_HISUIAN_FORMS
const u32 gMonFrontPic_QwilfishHisuian[] = INCBIN_U32("graphics/pokemon/qwilfish/hisuian/front.4bpp.lz");
@@ -3419,6 +5699,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_QwilfishHisuian[] = INCBIN_U32("graphics/pokemon/qwilfish/hisuian/back.4bpp.lz");
const u32 gMonShinyPalette_QwilfishHisuian[] = INCBIN_U32("graphics/pokemon/qwilfish/hisuian/shiny.gbapal.lz");
const u8 gMonIcon_QwilfishHisuian[] = INCBIN_U8("graphics/pokemon/qwilfish/hisuian/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_QwilfishHisuian[] = INCBIN_COMP("graphics/pokemon/qwilfish/hisuian/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_QwilfishHisuian[] = INCBIN_U32("graphics/pokemon/qwilfish/hisuian/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_QwilfishHisuian[] = INCBIN_U32("graphics/pokemon/qwilfish/hisuian/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Overqwil[] = INCBIN_U32("graphics/pokemon/overqwil/front.4bpp.lz");
const u32 gMonPalette_Overqwil[] = INCBIN_U32("graphics/pokemon/overqwil/normal.gbapal.lz");
@@ -3428,6 +5715,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Overqwil[] = INCBIN_U8("graphics/pokemon/overqwil/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Overqwil[] = INCBIN_COMP("graphics/pokemon/overqwil/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Overqwil[] = INCBIN_U32("graphics/pokemon/overqwil/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Overqwil[] = INCBIN_U32("graphics/pokemon/overqwil/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_HISUIAN_FORMS
#endif //P_FAMILY_QWILFISH
@@ -3440,6 +5734,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Shuckle[] = INCBIN_U8("graphics/pokemon/shuckle/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Shuckle[] = INCBIN_COMP("graphics/pokemon/shuckle/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Shuckle[] = INCBIN_U32("graphics/pokemon/shuckle/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Shuckle[] = INCBIN_U32("graphics/pokemon/shuckle/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SHUCKLE
#if P_FAMILY_HERACROSS
@@ -3451,6 +5752,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Heracross[] = INCBIN_U8("graphics/pokemon/heracross/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Heracross[] = INCBIN_COMP("graphics/pokemon/heracross/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Heracross[] = INCBIN_U32("graphics/pokemon/heracross/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Heracross[] = INCBIN_U32("graphics/pokemon/heracross/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_HeracrossF[] = INCBIN_U32("graphics/pokemon/heracross/anim_frontf.4bpp.lz");
const u32 gMonBackPic_HeracrossF[] = INCBIN_U32("graphics/pokemon/heracross/backf.4bpp.lz");
@@ -3461,6 +5769,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_HeracrossMega[] = INCBIN_U32("graphics/pokemon/heracross/mega/back.4bpp.lz");
const u32 gMonShinyPalette_HeracrossMega[] = INCBIN_U32("graphics/pokemon/heracross/mega/shiny.gbapal.lz");
const u8 gMonIcon_HeracrossMega[] = INCBIN_U8("graphics/pokemon/heracross/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_HeracrossMega[] = INCBIN_COMP("graphics/pokemon/heracross/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_HeracrossMega[] = INCBIN_U32("graphics/pokemon/heracross/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_HeracrossMega[] = INCBIN_U32("graphics/pokemon/heracross/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#endif //P_FAMILY_HERACROSS
@@ -3473,6 +5788,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Sneasel[] = INCBIN_U8("graphics/pokemon/sneasel/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Sneasel[] = INCBIN_COMP("graphics/pokemon/sneasel/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Sneasel[] = INCBIN_U32("graphics/pokemon/sneasel/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Sneasel[] = INCBIN_U32("graphics/pokemon/sneasel/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_SneaselF[] = INCBIN_U32("graphics/pokemon/sneasel/anim_frontf.4bpp.lz");
const u32 gMonBackPic_SneaselF[] = INCBIN_U32("graphics/pokemon/sneasel/backf.4bpp.lz");
@@ -3486,6 +5808,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Weavile[] = INCBIN_U8("graphics/pokemon/weavile/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Weavile[] = INCBIN_COMP("graphics/pokemon/weavile/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Weavile[] = INCBIN_U32("graphics/pokemon/weavile/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Weavile[] = INCBIN_U32("graphics/pokemon/weavile/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_WeavileF[] = INCBIN_U32("graphics/pokemon/weavile/anim_frontf.4bpp.lz");
const u32 gMonBackPic_WeavileF[] = INCBIN_U32("graphics/pokemon/weavile/backf.4bpp.lz");
@@ -3497,6 +5826,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_SneaselHisuian[] = INCBIN_U32("graphics/pokemon/sneasel/hisuian/back.4bpp.lz");
const u32 gMonShinyPalette_SneaselHisuian[] = INCBIN_U32("graphics/pokemon/sneasel/hisuian/shiny.gbapal.lz");
const u8 gMonIcon_SneaselHisuian[] = INCBIN_U8("graphics/pokemon/sneasel/hisuian/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_SneaselHisuian[] = INCBIN_COMP("graphics/pokemon/sneasel/hisuian/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_SneaselHisuian[] = INCBIN_U32("graphics/pokemon/sneasel/hisuian/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_SneaselHisuian[] = INCBIN_U32("graphics/pokemon/sneasel/hisuian/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_SneaselHisuianF[] = INCBIN_U32("graphics/pokemon/sneasel/hisuian/frontf.4bpp.lz");
const u32 gMonBackPic_SneaselHisuianF[] = INCBIN_U32("graphics/pokemon/sneasel/hisuian/backf.4bpp.lz");
@@ -3509,6 +5845,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Sneasler[] = INCBIN_U8("graphics/pokemon/sneasler/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Sneasler[] = INCBIN_COMP("graphics/pokemon/sneasler/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Sneasler[] = INCBIN_U32("graphics/pokemon/sneasler/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_HISUIAN_FORMS
#endif //P_FAMILY_SNEASEL
@@ -3521,6 +5864,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Teddiursa[] = INCBIN_U8("graphics/pokemon/teddiursa/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Teddiursa[] = INCBIN_COMP("graphics/pokemon/teddiursa/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Teddiursa[] = INCBIN_U32("graphics/pokemon/teddiursa/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Teddiursa[] = INCBIN_U32("graphics/pokemon/teddiursa/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Ursaring[] = INCBIN_U32("graphics/pokemon/ursaring/anim_front.4bpp.lz");
const u32 gMonPalette_Ursaring[] = INCBIN_U32("graphics/pokemon/ursaring/normal.gbapal.lz");
@@ -3530,6 +5880,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Ursaring[] = INCBIN_U8("graphics/pokemon/ursaring/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Ursaring[] = INCBIN_COMP("graphics/pokemon/ursaring/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Ursaring[] = INCBIN_U32("graphics/pokemon/ursaring/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Ursaring[] = INCBIN_U32("graphics/pokemon/ursaring/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_UrsaringF[] = INCBIN_U32("graphics/pokemon/ursaring/anim_frontf.4bpp.lz");
const u32 gMonBackPic_UrsaringF[] = INCBIN_U32("graphics/pokemon/ursaring/backf.4bpp.lz");
@@ -3543,12 +5900,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Ursaluna[] = INCBIN_U8("graphics/pokemon/ursaluna/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Ursaluna[] = INCBIN_COMP("graphics/pokemon/ursaluna/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Ursaluna[] = INCBIN_U32("graphics/pokemon/ursaluna/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Ursaluna[] = INCBIN_U32("graphics/pokemon/ursaluna/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_UrsalunaBloodmoon[] = INCBIN_U32("graphics/pokemon/ursaluna/bloodmoon/front.4bpp.lz");
const u32 gMonPalette_UrsalunaBloodmoon[] = INCBIN_U32("graphics/pokemon/ursaluna/bloodmoon/normal.gbapal.lz");
const u32 gMonBackPic_UrsalunaBloodmoon[] = INCBIN_U32("graphics/pokemon/ursaluna/bloodmoon/back.4bpp.lz");
const u32 gMonShinyPalette_UrsalunaBloodmoon[] = INCBIN_U32("graphics/pokemon/ursaluna/bloodmoon/shiny.gbapal.lz");
const u8 gMonIcon_UrsalunaBloodmoon[] = INCBIN_U8("graphics/pokemon/ursaluna/bloodmoon/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ 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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_8_CROSS_EVOS
#endif //P_FAMILY_TEDDIURSA
@@ -3561,6 +5932,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Slugma[] = INCBIN_U8("graphics/pokemon/slugma/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Slugma[] = INCBIN_COMP("graphics/pokemon/slugma/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Slugma[] = INCBIN_U32("graphics/pokemon/slugma/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Slugma[] = INCBIN_U32("graphics/pokemon/slugma/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Magcargo[] = INCBIN_U32("graphics/pokemon/magcargo/anim_front.4bpp.lz");
const u32 gMonPalette_Magcargo[] = INCBIN_U32("graphics/pokemon/magcargo/normal.gbapal.lz");
@@ -3570,6 +5948,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Magcargo[] = INCBIN_U8("graphics/pokemon/magcargo/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Magcargo[] = INCBIN_COMP("graphics/pokemon/magcargo/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Magcargo[] = INCBIN_U32("graphics/pokemon/magcargo/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Magcargo[] = INCBIN_U32("graphics/pokemon/magcargo/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SLUGMA
#if P_FAMILY_SWINUB
@@ -3581,6 +5966,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Swinub[] = INCBIN_U8("graphics/pokemon/swinub/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Swinub[] = INCBIN_COMP("graphics/pokemon/swinub/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Swinub[] = INCBIN_U32("graphics/pokemon/swinub/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Swinub[] = INCBIN_U32("graphics/pokemon/swinub/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Piloswine[] = INCBIN_U32("graphics/pokemon/piloswine/anim_front.4bpp.lz");
const u32 gMonPalette_Piloswine[] = INCBIN_U32("graphics/pokemon/piloswine/normal.gbapal.lz");
@@ -3590,6 +5982,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Piloswine[] = INCBIN_U8("graphics/pokemon/piloswine/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Piloswine[] = INCBIN_COMP("graphics/pokemon/piloswine/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Piloswine[] = INCBIN_U32("graphics/pokemon/piloswine/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Piloswine[] = INCBIN_U32("graphics/pokemon/piloswine/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_PiloswineF[] = INCBIN_U32("graphics/pokemon/piloswine/anim_frontf.4bpp.lz");
const u32 gMonBackPic_PiloswineF[] = INCBIN_U32("graphics/pokemon/piloswine/backf.4bpp.lz");
@@ -3603,6 +6002,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Mamoswine[] = INCBIN_U8("graphics/pokemon/mamoswine/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Mamoswine[] = INCBIN_COMP("graphics/pokemon/mamoswine/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Mamoswine[] = INCBIN_U32("graphics/pokemon/mamoswine/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Mamoswine[] = INCBIN_U32("graphics/pokemon/mamoswine/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_MamoswineF[] = INCBIN_U32("graphics/pokemon/mamoswine/anim_frontf.4bpp.lz");
#endif //P_GEN_4_CROSS_EVOS
@@ -3617,6 +6023,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Corsola[] = INCBIN_U8("graphics/pokemon/corsola/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Corsola[] = INCBIN_COMP("graphics/pokemon/corsola/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Corsola[] = INCBIN_U32("graphics/pokemon/corsola/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Corsola[] = INCBIN_U32("graphics/pokemon/corsola/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GALARIAN_FORMS
const u32 gMonFrontPic_CorsolaGalarian[] = INCBIN_U32("graphics/pokemon/corsola/galarian/front.4bpp.lz");
@@ -3624,6 +6037,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_CorsolaGalarian[] = INCBIN_U32("graphics/pokemon/corsola/galarian/back.4bpp.lz");
const u32 gMonShinyPalette_CorsolaGalarian[] = INCBIN_U32("graphics/pokemon/corsola/galarian/shiny.gbapal.lz");
const u8 gMonIcon_CorsolaGalarian[] = INCBIN_U8("graphics/pokemon/corsola/galarian/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_CorsolaGalarian[] = INCBIN_COMP("graphics/pokemon/corsola/galarian/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_CorsolaGalarian[] = INCBIN_U32("graphics/pokemon/corsola/galarian/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_CorsolaGalarian[] = INCBIN_U32("graphics/pokemon/corsola/galarian/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Cursola[] = INCBIN_U32("graphics/pokemon/cursola/front.4bpp.lz");
const u32 gMonPalette_Cursola[] = INCBIN_U32("graphics/pokemon/cursola/normal.gbapal.lz");
@@ -3633,6 +6053,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Cursola[] = INCBIN_U8("graphics/pokemon/cursola/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Cursola[] = INCBIN_COMP("graphics/pokemon/cursola/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Cursola[] = INCBIN_U32("graphics/pokemon/cursola/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Cursola[] = INCBIN_U32("graphics/pokemon/cursola/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GALARIAN_FORMS
#endif //P_FAMILY_CORSOLA
@@ -3645,6 +6072,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Remoraid[] = INCBIN_U8("graphics/pokemon/remoraid/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Remoraid[] = INCBIN_COMP("graphics/pokemon/remoraid/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Remoraid[] = INCBIN_U32("graphics/pokemon/remoraid/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Remoraid[] = INCBIN_U32("graphics/pokemon/remoraid/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Octillery[] = INCBIN_U32("graphics/pokemon/octillery/anim_front.4bpp.lz");
const u32 gMonPalette_Octillery[] = INCBIN_U32("graphics/pokemon/octillery/normal.gbapal.lz");
@@ -3654,6 +6088,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Octillery[] = INCBIN_U8("graphics/pokemon/octillery/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Octillery[] = INCBIN_COMP("graphics/pokemon/octillery/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Octillery[] = INCBIN_U32("graphics/pokemon/octillery/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Octillery[] = INCBIN_U32("graphics/pokemon/octillery/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_OctilleryF[] = INCBIN_U32("graphics/pokemon/octillery/anim_frontf.4bpp.lz");
const u32 gMonBackPic_OctilleryF[] = INCBIN_U32("graphics/pokemon/octillery/backf.4bpp.lz");
@@ -3668,6 +6109,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Delibird[] = INCBIN_U8("graphics/pokemon/delibird/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Delibird[] = INCBIN_COMP("graphics/pokemon/delibird/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Delibird[] = INCBIN_U32("graphics/pokemon/delibird/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Delibird[] = INCBIN_U32("graphics/pokemon/delibird/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_DELIBIRD
#if P_FAMILY_MANTINE
@@ -3680,6 +6128,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Mantyke[] = INCBIN_U8("graphics/pokemon/mantyke/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Mantyke[] = INCBIN_COMP("graphics/pokemon/mantyke/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Mantyke[] = INCBIN_U32("graphics/pokemon/mantyke/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Mantyke[] = INCBIN_U32("graphics/pokemon/mantyke/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_4_CROSS_EVOS
const u32 gMonFrontPic_Mantine[] = INCBIN_U32("graphics/pokemon/mantine/anim_front.4bpp.lz");
@@ -3690,6 +6145,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Mantine[] = INCBIN_U8("graphics/pokemon/mantine/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Mantine[] = INCBIN_COMP("graphics/pokemon/mantine/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Mantine[] = INCBIN_U32("graphics/pokemon/mantine/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Mantine[] = INCBIN_U32("graphics/pokemon/mantine/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_MANTINE
#if P_FAMILY_SKARMORY
@@ -3701,6 +6163,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Skarmory[] = INCBIN_U8("graphics/pokemon/skarmory/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Skarmory[] = INCBIN_COMP("graphics/pokemon/skarmory/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Skarmory[] = INCBIN_U32("graphics/pokemon/skarmory/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Skarmory[] = INCBIN_U32("graphics/pokemon/skarmory/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SKARMORY
#if P_FAMILY_HOUNDOUR
@@ -3712,6 +6181,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Houndour[] = INCBIN_U8("graphics/pokemon/houndour/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Houndour[] = INCBIN_COMP("graphics/pokemon/houndour/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Houndour[] = INCBIN_U32("graphics/pokemon/houndour/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Houndour[] = INCBIN_U32("graphics/pokemon/houndour/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Houndoom[] = INCBIN_U32("graphics/pokemon/houndoom/anim_front.4bpp.lz");
const u32 gMonPalette_Houndoom[] = INCBIN_U32("graphics/pokemon/houndoom/normal.gbapal.lz");
@@ -3721,6 +6197,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Houndoom[] = INCBIN_U8("graphics/pokemon/houndoom/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Houndoom[] = INCBIN_COMP("graphics/pokemon/houndoom/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Houndoom[] = INCBIN_U32("graphics/pokemon/houndoom/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Houndoom[] = INCBIN_U32("graphics/pokemon/houndoom/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_HoundoomF[] = INCBIN_U32("graphics/pokemon/houndoom/anim_frontf.4bpp.lz");
const u32 gMonBackPic_HoundoomF[] = INCBIN_U32("graphics/pokemon/houndoom/backf.4bpp.lz");
@@ -3731,6 +6214,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_HoundoomMega[] = INCBIN_U32("graphics/pokemon/houndoom/mega/back.4bpp.lz");
const u32 gMonShinyPalette_HoundoomMega[] = INCBIN_U32("graphics/pokemon/houndoom/mega/shiny.gbapal.lz");
const u8 gMonIcon_HoundoomMega[] = INCBIN_U8("graphics/pokemon/houndoom/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_HoundoomMega[] = INCBIN_COMP("graphics/pokemon/houndoom/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_HoundoomMega[] = INCBIN_U32("graphics/pokemon/houndoom/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_HoundoomMega[] = INCBIN_U32("graphics/pokemon/houndoom/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#endif //P_FAMILY_HOUNDOUR
@@ -3743,6 +6233,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Phanpy[] = INCBIN_U8("graphics/pokemon/phanpy/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Phanpy[] = INCBIN_COMP("graphics/pokemon/phanpy/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Phanpy[] = INCBIN_U32("graphics/pokemon/phanpy/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Phanpy[] = INCBIN_U32("graphics/pokemon/phanpy/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Donphan[] = INCBIN_U32("graphics/pokemon/donphan/anim_front.4bpp.lz");
const u32 gMonPalette_Donphan[] = INCBIN_U32("graphics/pokemon/donphan/normal.gbapal.lz");
@@ -3752,6 +6249,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Donphan[] = INCBIN_U8("graphics/pokemon/donphan/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Donphan[] = INCBIN_COMP("graphics/pokemon/donphan/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Donphan[] = INCBIN_U32("graphics/pokemon/donphan/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Donphan[] = INCBIN_U32("graphics/pokemon/donphan/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_DonphanF[] = INCBIN_U32("graphics/pokemon/donphan/anim_frontf.4bpp.lz");
const u32 gMonBackPic_DonphanF[] = INCBIN_U32("graphics/pokemon/donphan/backf.4bpp.lz");
@@ -3766,6 +6270,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Stantler[] = INCBIN_U8("graphics/pokemon/stantler/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Stantler[] = INCBIN_COMP("graphics/pokemon/stantler/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Stantler[] = INCBIN_U32("graphics/pokemon/stantler/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Stantler[] = INCBIN_U32("graphics/pokemon/stantler/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GEN_8_CROSS_EVOS
const u32 gMonFrontPic_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/front.4bpp.lz");
@@ -3776,6 +6287,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Wyrdeer[] = INCBIN_U8("graphics/pokemon/wyrdeer/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Wyrdeer[] = INCBIN_COMP("graphics/pokemon/wyrdeer/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Wyrdeer[] = INCBIN_U32("graphics/pokemon/wyrdeer/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_8_CROSS_EVOS
#endif //P_FAMILY_STANTLER
@@ -3788,6 +6306,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Smeargle[] = INCBIN_U8("graphics/pokemon/smeargle/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Smeargle[] = INCBIN_COMP("graphics/pokemon/smeargle/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Smeargle[] = INCBIN_U32("graphics/pokemon/smeargle/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Smeargle[] = INCBIN_U32("graphics/pokemon/smeargle/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SMEARGLE
#if P_FAMILY_MILTANK
@@ -3799,6 +6324,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Miltank[] = INCBIN_U8("graphics/pokemon/miltank/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Miltank[] = INCBIN_COMP("graphics/pokemon/miltank/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Miltank[] = INCBIN_U32("graphics/pokemon/miltank/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Miltank[] = INCBIN_U32("graphics/pokemon/miltank/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_MILTANK
#if P_FAMILY_RAIKOU
@@ -3810,6 +6342,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Raikou[] = INCBIN_U8("graphics/pokemon/raikou/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Raikou[] = INCBIN_COMP("graphics/pokemon/raikou/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Raikou[] = INCBIN_U32("graphics/pokemon/raikou/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Raikou[] = INCBIN_U32("graphics/pokemon/raikou/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_RAIKOU
#if P_FAMILY_ENTEI
@@ -3821,6 +6360,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Entei[] = INCBIN_U8("graphics/pokemon/entei/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Entei[] = INCBIN_COMP("graphics/pokemon/entei/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Entei[] = INCBIN_U32("graphics/pokemon/entei/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Entei[] = INCBIN_U32("graphics/pokemon/entei/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_ENTEI
#if P_FAMILY_SUICUNE
@@ -3832,6 +6378,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Suicune[] = INCBIN_U8("graphics/pokemon/suicune/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Suicune[] = INCBIN_COMP("graphics/pokemon/suicune/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Suicune[] = INCBIN_U32("graphics/pokemon/suicune/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Suicune[] = INCBIN_U32("graphics/pokemon/suicune/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SUICUNE
#if P_FAMILY_LARVITAR
@@ -3843,6 +6396,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Larvitar[] = INCBIN_U8("graphics/pokemon/larvitar/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Larvitar[] = INCBIN_COMP("graphics/pokemon/larvitar/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Larvitar[] = INCBIN_U32("graphics/pokemon/larvitar/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Larvitar[] = INCBIN_U32("graphics/pokemon/larvitar/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Pupitar[] = INCBIN_U32("graphics/pokemon/pupitar/anim_front.4bpp.lz");
const u32 gMonPalette_Pupitar[] = INCBIN_U32("graphics/pokemon/pupitar/normal.gbapal.lz");
@@ -3852,6 +6412,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Pupitar[] = INCBIN_U8("graphics/pokemon/pupitar/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Pupitar[] = INCBIN_COMP("graphics/pokemon/pupitar/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Pupitar[] = INCBIN_U32("graphics/pokemon/pupitar/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Pupitar[] = INCBIN_U32("graphics/pokemon/pupitar/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Tyranitar[] = INCBIN_U32("graphics/pokemon/tyranitar/anim_front.4bpp.lz");
const u32 gMonPalette_Tyranitar[] = INCBIN_U32("graphics/pokemon/tyranitar/normal.gbapal.lz");
@@ -3861,6 +6428,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Tyranitar[] = INCBIN_U8("graphics/pokemon/tyranitar/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Tyranitar[] = INCBIN_COMP("graphics/pokemon/tyranitar/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Tyranitar[] = INCBIN_U32("graphics/pokemon/tyranitar/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Tyranitar[] = INCBIN_U32("graphics/pokemon/tyranitar/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_MEGA_EVOLUTIONS
const u32 gMonFrontPic_TyranitarMega[] = INCBIN_U32("graphics/pokemon/tyranitar/mega/front.4bpp.lz");
@@ -3868,6 +6442,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_TyranitarMega[] = INCBIN_U32("graphics/pokemon/tyranitar/mega/back.4bpp.lz");
const u32 gMonShinyPalette_TyranitarMega[] = INCBIN_U32("graphics/pokemon/tyranitar/mega/shiny.gbapal.lz");
const u8 gMonIcon_TyranitarMega[] = INCBIN_U8("graphics/pokemon/tyranitar/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_TyranitarMega[] = INCBIN_COMP("graphics/pokemon/tyranitar/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_TyranitarMega[] = INCBIN_U32("graphics/pokemon/tyranitar/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_TyranitarMega[] = INCBIN_U32("graphics/pokemon/tyranitar/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#endif //P_FAMILY_LARVITAR
@@ -3880,6 +6461,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Lugia[] = INCBIN_U8("graphics/pokemon/lugia/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Lugia[] = INCBIN_COMP("graphics/pokemon/lugia/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Lugia[] = INCBIN_U32("graphics/pokemon/lugia/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Lugia[] = INCBIN_U32("graphics/pokemon/lugia/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_LUGIA
#if P_FAMILY_HO_OH
@@ -3891,6 +6479,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_HoOh[] = INCBIN_U8("graphics/pokemon/ho_oh/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_HoOh[] = INCBIN_COMP("graphics/pokemon/ho_oh/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_HoOh[] = INCBIN_U32("graphics/pokemon/ho_oh/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_HoOh[] = INCBIN_U32("graphics/pokemon/ho_oh/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_HO_OH
#if P_FAMILY_CELEBI
@@ -3902,6 +6497,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Celebi[] = INCBIN_U8("graphics/pokemon/celebi/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Celebi[] = INCBIN_COMP("graphics/pokemon/celebi/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Celebi[] = INCBIN_U32("graphics/pokemon/celebi/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Celebi[] = INCBIN_U32("graphics/pokemon/celebi/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_CELEBI
#if P_FAMILY_TREECKO
@@ -3913,6 +6515,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Treecko[] = INCBIN_U8("graphics/pokemon/treecko/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Treecko[] = INCBIN_COMP("graphics/pokemon/treecko/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Treecko[] = INCBIN_U32("graphics/pokemon/treecko/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Treecko[] = INCBIN_U32("graphics/pokemon/treecko/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Grovyle[] = INCBIN_U32("graphics/pokemon/grovyle/anim_front.4bpp.lz");
const u32 gMonPalette_Grovyle[] = INCBIN_U32("graphics/pokemon/grovyle/normal.gbapal.lz");
@@ -3922,6 +6531,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Grovyle[] = INCBIN_U8("graphics/pokemon/grovyle/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Grovyle[] = INCBIN_COMP("graphics/pokemon/grovyle/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Grovyle[] = INCBIN_U32("graphics/pokemon/grovyle/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Grovyle[] = INCBIN_U32("graphics/pokemon/grovyle/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Sceptile[] = INCBIN_U32("graphics/pokemon/sceptile/anim_front.4bpp.lz");
const u32 gMonPalette_Sceptile[] = INCBIN_U32("graphics/pokemon/sceptile/normal.gbapal.lz");
@@ -3931,6 +6547,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Sceptile[] = INCBIN_U8("graphics/pokemon/sceptile/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Sceptile[] = INCBIN_COMP("graphics/pokemon/sceptile/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Sceptile[] = INCBIN_U32("graphics/pokemon/sceptile/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Sceptile[] = INCBIN_U32("graphics/pokemon/sceptile/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_MEGA_EVOLUTIONS
const u32 gMonFrontPic_SceptileMega[] = INCBIN_U32("graphics/pokemon/sceptile/mega/front.4bpp.lz");
@@ -3938,6 +6561,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_SceptileMega[] = INCBIN_U32("graphics/pokemon/sceptile/mega/back.4bpp.lz");
const u32 gMonShinyPalette_SceptileMega[] = INCBIN_U32("graphics/pokemon/sceptile/mega/shiny.gbapal.lz");
const u8 gMonIcon_SceptileMega[] = INCBIN_U8("graphics/pokemon/sceptile/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_SceptileMega[] = INCBIN_COMP("graphics/pokemon/sceptile/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_SceptileMega[] = INCBIN_U32("graphics/pokemon/sceptile/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_SceptileMega[] = INCBIN_U32("graphics/pokemon/sceptile/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#endif //P_FAMILY_TREECKO
@@ -3950,6 +6580,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Torchic[] = INCBIN_U8("graphics/pokemon/torchic/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Torchic[] = INCBIN_COMP("graphics/pokemon/torchic/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Torchic[] = INCBIN_U32("graphics/pokemon/torchic/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Torchic[] = INCBIN_U32("graphics/pokemon/torchic/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonBackPic_TorchicF[] = INCBIN_U32("graphics/pokemon/torchic/backf.4bpp.lz");
@@ -3961,6 +6598,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Combusken[] = INCBIN_U8("graphics/pokemon/combusken/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Combusken[] = INCBIN_COMP("graphics/pokemon/combusken/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Combusken[] = INCBIN_U32("graphics/pokemon/combusken/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Combusken[] = INCBIN_U32("graphics/pokemon/combusken/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_CombuskenF[] = INCBIN_U32("graphics/pokemon/combusken/anim_frontf.4bpp.lz");
const u32 gMonBackPic_CombuskenF[] = INCBIN_U32("graphics/pokemon/combusken/backf.4bpp.lz");
@@ -3973,6 +6617,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Blaziken[] = INCBIN_U8("graphics/pokemon/blaziken/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Blaziken[] = INCBIN_COMP("graphics/pokemon/blaziken/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Blaziken[] = INCBIN_U32("graphics/pokemon/blaziken/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Blaziken[] = INCBIN_U32("graphics/pokemon/blaziken/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_BlazikenF[] = INCBIN_U32("graphics/pokemon/blaziken/anim_frontf.4bpp.lz");
const u32 gMonBackPic_BlazikenF[] = INCBIN_U32("graphics/pokemon/blaziken/backf.4bpp.lz");
@@ -3983,6 +6634,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_BlazikenMega[] = INCBIN_U32("graphics/pokemon/blaziken/mega/back.4bpp.lz");
const u32 gMonShinyPalette_BlazikenMega[] = INCBIN_U32("graphics/pokemon/blaziken/mega/shiny.gbapal.lz");
const u8 gMonIcon_BlazikenMega[] = INCBIN_U8("graphics/pokemon/blaziken/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_BlazikenMega[] = INCBIN_COMP("graphics/pokemon/blaziken/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_BlazikenMega[] = INCBIN_U32("graphics/pokemon/blaziken/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_BlazikenMega[] = INCBIN_U32("graphics/pokemon/blaziken/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#endif //P_FAMILY_TORCHIC
@@ -3995,6 +6653,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Mudkip[] = INCBIN_U8("graphics/pokemon/mudkip/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Mudkip[] = INCBIN_COMP("graphics/pokemon/mudkip/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Mudkip[] = INCBIN_U32("graphics/pokemon/mudkip/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Mudkip[] = INCBIN_U32("graphics/pokemon/mudkip/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Marshtomp[] = INCBIN_U32("graphics/pokemon/marshtomp/anim_front.4bpp.lz");
const u32 gMonPalette_Marshtomp[] = INCBIN_U32("graphics/pokemon/marshtomp/normal.gbapal.lz");
@@ -4004,6 +6669,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Marshtomp[] = INCBIN_U8("graphics/pokemon/marshtomp/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Marshtomp[] = INCBIN_COMP("graphics/pokemon/marshtomp/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Marshtomp[] = INCBIN_U32("graphics/pokemon/marshtomp/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Marshtomp[] = INCBIN_U32("graphics/pokemon/marshtomp/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Swampert[] = INCBIN_U32("graphics/pokemon/swampert/anim_front.4bpp.lz");
const u32 gMonPalette_Swampert[] = INCBIN_U32("graphics/pokemon/swampert/normal.gbapal.lz");
@@ -4013,6 +6685,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Swampert[] = INCBIN_U8("graphics/pokemon/swampert/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Swampert[] = INCBIN_COMP("graphics/pokemon/swampert/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Swampert[] = INCBIN_U32("graphics/pokemon/swampert/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Swampert[] = INCBIN_U32("graphics/pokemon/swampert/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_MEGA_EVOLUTIONS
const u32 gMonFrontPic_SwampertMega[] = INCBIN_U32("graphics/pokemon/swampert/mega/front.4bpp.lz");
@@ -4020,6 +6699,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_SwampertMega[] = INCBIN_U32("graphics/pokemon/swampert/mega/back.4bpp.lz");
const u32 gMonShinyPalette_SwampertMega[] = INCBIN_U32("graphics/pokemon/swampert/mega/shiny.gbapal.lz");
const u8 gMonIcon_SwampertMega[] = INCBIN_U8("graphics/pokemon/swampert/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_SwampertMega[] = INCBIN_COMP("graphics/pokemon/swampert/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_SwampertMega[] = INCBIN_U32("graphics/pokemon/swampert/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_SwampertMega[] = INCBIN_U32("graphics/pokemon/swampert/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#endif //P_FAMILY_MUDKIP
@@ -4032,6 +6718,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Poochyena[] = INCBIN_U8("graphics/pokemon/poochyena/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Poochyena[] = INCBIN_COMP("graphics/pokemon/poochyena/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Poochyena[] = INCBIN_U32("graphics/pokemon/poochyena/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Poochyena[] = INCBIN_U32("graphics/pokemon/poochyena/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Mightyena[] = INCBIN_U32("graphics/pokemon/mightyena/anim_front.4bpp.lz");
const u32 gMonPalette_Mightyena[] = INCBIN_U32("graphics/pokemon/mightyena/normal.gbapal.lz");
@@ -4041,6 +6734,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Mightyena[] = INCBIN_U8("graphics/pokemon/mightyena/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Mightyena[] = INCBIN_COMP("graphics/pokemon/mightyena/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Mightyena[] = INCBIN_U32("graphics/pokemon/mightyena/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Mightyena[] = INCBIN_U32("graphics/pokemon/mightyena/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_POOCHYENA
#if P_FAMILY_ZIGZAGOON
@@ -4052,6 +6752,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Zigzagoon[] = INCBIN_U8("graphics/pokemon/zigzagoon/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Zigzagoon[] = INCBIN_COMP("graphics/pokemon/zigzagoon/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Zigzagoon[] = INCBIN_U32("graphics/pokemon/zigzagoon/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Zigzagoon[] = INCBIN_U32("graphics/pokemon/zigzagoon/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Linoone[] = INCBIN_U32("graphics/pokemon/linoone/anim_front.4bpp.lz");
const u32 gMonPalette_Linoone[] = INCBIN_U32("graphics/pokemon/linoone/normal.gbapal.lz");
@@ -4061,6 +6768,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Linoone[] = INCBIN_U8("graphics/pokemon/linoone/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Linoone[] = INCBIN_COMP("graphics/pokemon/linoone/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Linoone[] = INCBIN_U32("graphics/pokemon/linoone/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Linoone[] = INCBIN_U32("graphics/pokemon/linoone/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GALARIAN_FORMS
const u32 gMonFrontPic_ZigzagoonGalarian[] = INCBIN_U32("graphics/pokemon/zigzagoon/galarian/front.4bpp.lz");
@@ -4068,12 +6782,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_ZigzagoonGalarian[] = INCBIN_U32("graphics/pokemon/zigzagoon/galarian/back.4bpp.lz");
const u32 gMonShinyPalette_ZigzagoonGalarian[] = INCBIN_U32("graphics/pokemon/zigzagoon/galarian/shiny.gbapal.lz");
const u8 gMonIcon_ZigzagoonGalarian[] = INCBIN_U8("graphics/pokemon/zigzagoon/galarian/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_ZigzagoonGalarian[] = INCBIN_COMP("graphics/pokemon/zigzagoon/galarian/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_ZigzagoonGalarian[] = INCBIN_U32("graphics/pokemon/zigzagoon/galarian/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_ZigzagoonGalarian[] = INCBIN_U32("graphics/pokemon/zigzagoon/galarian/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_LinooneGalarian[] = INCBIN_U32("graphics/pokemon/linoone/galarian/front.4bpp.lz");
const u32 gMonPalette_LinooneGalarian[] = INCBIN_U32("graphics/pokemon/linoone/galarian/normal.gbapal.lz");
const u32 gMonBackPic_LinooneGalarian[] = INCBIN_U32("graphics/pokemon/linoone/galarian/back.4bpp.lz");
const u32 gMonShinyPalette_LinooneGalarian[] = INCBIN_U32("graphics/pokemon/linoone/galarian/shiny.gbapal.lz");
const u8 gMonIcon_LinooneGalarian[] = INCBIN_U8("graphics/pokemon/linoone/galarian/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_LinooneGalarian[] = INCBIN_COMP("graphics/pokemon/linoone/galarian/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_LinooneGalarian[] = INCBIN_U32("graphics/pokemon/linoone/galarian/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_LinooneGalarian[] = INCBIN_U32("graphics/pokemon/linoone/galarian/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Obstagoon[] = INCBIN_U32("graphics/pokemon/obstagoon/front.4bpp.lz");
const u32 gMonPalette_Obstagoon[] = INCBIN_U32("graphics/pokemon/obstagoon/normal.gbapal.lz");
@@ -4083,6 +6811,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Obstagoon[] = INCBIN_U8("graphics/pokemon/obstagoon/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Obstagoon[] = INCBIN_COMP("graphics/pokemon/obstagoon/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Obstagoon[] = INCBIN_U32("graphics/pokemon/obstagoon/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Obstagoon[] = INCBIN_U32("graphics/pokemon/obstagoon/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GALARIAN_FORMS
#endif //P_FAMILY_ZIGZAGOON
@@ -4095,6 +6830,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Wurmple[] = INCBIN_U8("graphics/pokemon/wurmple/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Wurmple[] = INCBIN_COMP("graphics/pokemon/wurmple/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Wurmple[] = INCBIN_U32("graphics/pokemon/wurmple/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Wurmple[] = INCBIN_U32("graphics/pokemon/wurmple/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Silcoon[] = INCBIN_U32("graphics/pokemon/silcoon/anim_front.4bpp.lz");
const u32 gMonPalette_Silcoon[] = INCBIN_U32("graphics/pokemon/silcoon/normal.gbapal.lz");
@@ -4104,6 +6846,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Silcoon[] = INCBIN_U8("graphics/pokemon/silcoon/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Silcoon[] = INCBIN_COMP("graphics/pokemon/silcoon/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Silcoon[] = INCBIN_U32("graphics/pokemon/silcoon/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Silcoon[] = INCBIN_U32("graphics/pokemon/silcoon/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Beautifly[] = INCBIN_U32("graphics/pokemon/beautifly/anim_front.4bpp.lz");
const u32 gMonPalette_Beautifly[] = INCBIN_U32("graphics/pokemon/beautifly/normal.gbapal.lz");
@@ -4113,6 +6862,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Beautifly[] = INCBIN_U8("graphics/pokemon/beautifly/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Beautifly[] = INCBIN_COMP("graphics/pokemon/beautifly/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Beautifly[] = INCBIN_U32("graphics/pokemon/beautifly/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Beautifly[] = INCBIN_U32("graphics/pokemon/beautifly/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_BeautiflyF[] = INCBIN_U32("graphics/pokemon/beautifly/anim_frontf.4bpp.lz");
const u32 gMonBackPic_BeautiflyF[] = INCBIN_U32("graphics/pokemon/beautifly/backf.4bpp.lz");
@@ -4125,6 +6881,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Cascoon[] = INCBIN_U8("graphics/pokemon/cascoon/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Cascoon[] = INCBIN_COMP("graphics/pokemon/cascoon/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Cascoon[] = INCBIN_U32("graphics/pokemon/cascoon/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Cascoon[] = INCBIN_U32("graphics/pokemon/cascoon/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Dustox[] = INCBIN_U32("graphics/pokemon/dustox/anim_front.4bpp.lz");
const u32 gMonPalette_Dustox[] = INCBIN_U32("graphics/pokemon/dustox/normal.gbapal.lz");
@@ -4134,6 +6897,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Dustox[] = INCBIN_U8("graphics/pokemon/dustox/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Dustox[] = INCBIN_COMP("graphics/pokemon/dustox/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Dustox[] = INCBIN_U32("graphics/pokemon/dustox/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Dustox[] = INCBIN_U32("graphics/pokemon/dustox/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_DustoxF[] = INCBIN_U32("graphics/pokemon/dustox/anim_frontf.4bpp.lz");
const u32 gMonBackPic_DustoxF[] = INCBIN_U32("graphics/pokemon/dustox/backf.4bpp.lz");
@@ -4148,6 +6918,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Lotad[] = INCBIN_U8("graphics/pokemon/lotad/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Lotad[] = INCBIN_COMP("graphics/pokemon/lotad/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Lotad[] = INCBIN_U32("graphics/pokemon/lotad/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Lotad[] = INCBIN_U32("graphics/pokemon/lotad/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Lombre[] = INCBIN_U32("graphics/pokemon/lombre/anim_front.4bpp.lz");
const u32 gMonPalette_Lombre[] = INCBIN_U32("graphics/pokemon/lombre/normal.gbapal.lz");
@@ -4157,6 +6934,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Lombre[] = INCBIN_U8("graphics/pokemon/lombre/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Lombre[] = INCBIN_COMP("graphics/pokemon/lombre/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Lombre[] = INCBIN_U32("graphics/pokemon/lombre/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Lombre[] = INCBIN_U32("graphics/pokemon/lombre/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Ludicolo[] = INCBIN_U32("graphics/pokemon/ludicolo/anim_front.4bpp.lz");
const u32 gMonPalette_Ludicolo[] = INCBIN_U32("graphics/pokemon/ludicolo/normal.gbapal.lz");
@@ -4166,6 +6950,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Ludicolo[] = INCBIN_U8("graphics/pokemon/ludicolo/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Ludicolo[] = INCBIN_COMP("graphics/pokemon/ludicolo/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Ludicolo[] = INCBIN_U32("graphics/pokemon/ludicolo/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Ludicolo[] = INCBIN_U32("graphics/pokemon/ludicolo/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_LudicoloF[] = INCBIN_U32("graphics/pokemon/ludicolo/anim_frontf.4bpp.lz");
const u32 gMonBackPic_LudicoloF[] = INCBIN_U32("graphics/pokemon/ludicolo/backf.4bpp.lz");
@@ -4180,6 +6971,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Seedot[] = INCBIN_U8("graphics/pokemon/seedot/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Seedot[] = INCBIN_COMP("graphics/pokemon/seedot/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Seedot[] = INCBIN_U32("graphics/pokemon/seedot/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Seedot[] = INCBIN_U32("graphics/pokemon/seedot/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Nuzleaf[] = INCBIN_U32("graphics/pokemon/nuzleaf/anim_front.4bpp.lz");
const u32 gMonPalette_Nuzleaf[] = INCBIN_U32("graphics/pokemon/nuzleaf/normal.gbapal.lz");
@@ -4189,6 +6987,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Nuzleaf[] = INCBIN_U8("graphics/pokemon/nuzleaf/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Nuzleaf[] = INCBIN_COMP("graphics/pokemon/nuzleaf/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Nuzleaf[] = INCBIN_U32("graphics/pokemon/nuzleaf/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Nuzleaf[] = INCBIN_U32("graphics/pokemon/nuzleaf/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_NuzleafF[] = INCBIN_U32("graphics/pokemon/nuzleaf/anim_frontf.4bpp.lz");
const u32 gMonBackPic_NuzleafF[] = INCBIN_U32("graphics/pokemon/nuzleaf/backf.4bpp.lz");
@@ -4201,6 +7006,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Shiftry[] = INCBIN_U8("graphics/pokemon/shiftry/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Shiftry[] = INCBIN_COMP("graphics/pokemon/shiftry/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Shiftry[] = INCBIN_U32("graphics/pokemon/shiftry/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Shiftry[] = INCBIN_U32("graphics/pokemon/shiftry/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_ShiftryF[] = INCBIN_U32("graphics/pokemon/shiftry/anim_frontf.4bpp.lz");
const u32 gMonBackPic_ShiftryF[] = INCBIN_U32("graphics/pokemon/shiftry/backf.4bpp.lz");
@@ -4215,6 +7027,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Taillow[] = INCBIN_U8("graphics/pokemon/taillow/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Taillow[] = INCBIN_COMP("graphics/pokemon/taillow/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Taillow[] = INCBIN_U32("graphics/pokemon/taillow/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Taillow[] = INCBIN_U32("graphics/pokemon/taillow/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Swellow[] = INCBIN_U32("graphics/pokemon/swellow/anim_front.4bpp.lz");
const u32 gMonPalette_Swellow[] = INCBIN_U32("graphics/pokemon/swellow/normal.gbapal.lz");
@@ -4224,6 +7043,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Swellow[] = INCBIN_U8("graphics/pokemon/swellow/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Swellow[] = INCBIN_COMP("graphics/pokemon/swellow/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Swellow[] = INCBIN_U32("graphics/pokemon/swellow/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Swellow[] = INCBIN_U32("graphics/pokemon/swellow/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_TAILLOW
#if P_FAMILY_WINGULL
@@ -4235,6 +7061,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Wingull[] = INCBIN_U8("graphics/pokemon/wingull/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Wingull[] = INCBIN_COMP("graphics/pokemon/wingull/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Wingull[] = INCBIN_U32("graphics/pokemon/wingull/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Wingull[] = INCBIN_U32("graphics/pokemon/wingull/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Pelipper[] = INCBIN_U32("graphics/pokemon/pelipper/anim_front.4bpp.lz");
const u32 gMonPalette_Pelipper[] = INCBIN_U32("graphics/pokemon/pelipper/normal.gbapal.lz");
@@ -4244,6 +7077,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Pelipper[] = INCBIN_U8("graphics/pokemon/pelipper/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Pelipper[] = INCBIN_COMP("graphics/pokemon/pelipper/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Pelipper[] = INCBIN_U32("graphics/pokemon/pelipper/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Pelipper[] = INCBIN_U32("graphics/pokemon/pelipper/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_WINGULL
#if P_FAMILY_RALTS
@@ -4255,6 +7095,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Ralts[] = INCBIN_U8("graphics/pokemon/ralts/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Ralts[] = INCBIN_COMP("graphics/pokemon/ralts/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Ralts[] = INCBIN_U32("graphics/pokemon/ralts/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Ralts[] = INCBIN_U32("graphics/pokemon/ralts/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Kirlia[] = INCBIN_U32("graphics/pokemon/kirlia/anim_front.4bpp.lz");
const u32 gMonPalette_Kirlia[] = INCBIN_U32("graphics/pokemon/kirlia/normal.gbapal.lz");
@@ -4264,6 +7111,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Kirlia[] = INCBIN_U8("graphics/pokemon/kirlia/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Kirlia[] = INCBIN_COMP("graphics/pokemon/kirlia/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Kirlia[] = INCBIN_U32("graphics/pokemon/kirlia/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Kirlia[] = INCBIN_U32("graphics/pokemon/kirlia/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Gardevoir[] = INCBIN_U32("graphics/pokemon/gardevoir/anim_front.4bpp.lz");
const u32 gMonPalette_Gardevoir[] = INCBIN_U32("graphics/pokemon/gardevoir/normal.gbapal.lz");
@@ -4273,6 +7127,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Gardevoir[] = INCBIN_U8("graphics/pokemon/gardevoir/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Gardevoir[] = INCBIN_COMP("graphics/pokemon/gardevoir/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Gardevoir[] = INCBIN_U32("graphics/pokemon/gardevoir/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Gardevoir[] = INCBIN_U32("graphics/pokemon/gardevoir/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_MEGA_EVOLUTIONS
const u32 gMonFrontPic_GardevoirMega[] = INCBIN_U32("graphics/pokemon/gardevoir/mega/front.4bpp.lz");
@@ -4280,6 +7141,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_GardevoirMega[] = INCBIN_U32("graphics/pokemon/gardevoir/mega/back.4bpp.lz");
const u32 gMonShinyPalette_GardevoirMega[] = INCBIN_U32("graphics/pokemon/gardevoir/mega/shiny.gbapal.lz");
const u8 gMonIcon_GardevoirMega[] = INCBIN_U8("graphics/pokemon/gardevoir/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_GardevoirMega[] = INCBIN_COMP("graphics/pokemon/gardevoir/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_GardevoirMega[] = INCBIN_U32("graphics/pokemon/gardevoir/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_GardevoirMega[] = INCBIN_U32("graphics/pokemon/gardevoir/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#if P_GEN_4_CROSS_EVOS
@@ -4291,6 +7159,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Gallade[] = INCBIN_U8("graphics/pokemon/gallade/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Gallade[] = INCBIN_COMP("graphics/pokemon/gallade/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Gallade[] = INCBIN_U32("graphics/pokemon/gallade/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Gallade[] = INCBIN_U32("graphics/pokemon/gallade/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_MEGA_EVOLUTIONS
const u32 gMonFrontPic_GalladeMega[] = INCBIN_U32("graphics/pokemon/gallade/mega/front.4bpp.lz");
@@ -4298,6 +7173,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_GalladeMega[] = INCBIN_U32("graphics/pokemon/gallade/mega/back.4bpp.lz");
const u32 gMonShinyPalette_GalladeMega[] = INCBIN_U32("graphics/pokemon/gallade/mega/shiny.gbapal.lz");
const u8 gMonIcon_GalladeMega[] = INCBIN_U8("graphics/pokemon/gallade/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_GalladeMega[] = INCBIN_COMP("graphics/pokemon/gallade/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_GalladeMega[] = INCBIN_U32("graphics/pokemon/gallade/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_GalladeMega[] = INCBIN_U32("graphics/pokemon/gallade/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#endif //P_GEN_4_CROSS_EVOS
#endif //P_FAMILY_RALTS
@@ -4311,6 +7193,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Surskit[] = INCBIN_U8("graphics/pokemon/surskit/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Surskit[] = INCBIN_COMP("graphics/pokemon/surskit/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Surskit[] = INCBIN_U32("graphics/pokemon/surskit/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Surskit[] = INCBIN_U32("graphics/pokemon/surskit/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Masquerain[] = INCBIN_U32("graphics/pokemon/masquerain/anim_front.4bpp.lz");
const u32 gMonPalette_Masquerain[] = INCBIN_U32("graphics/pokemon/masquerain/normal.gbapal.lz");
@@ -4320,6 +7209,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Masquerain[] = INCBIN_U8("graphics/pokemon/masquerain/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Masquerain[] = INCBIN_COMP("graphics/pokemon/masquerain/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Masquerain[] = INCBIN_U32("graphics/pokemon/masquerain/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Masquerain[] = INCBIN_U32("graphics/pokemon/masquerain/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SURSKIT
#if P_FAMILY_SHROOMISH
@@ -4331,6 +7227,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Shroomish[] = INCBIN_U8("graphics/pokemon/shroomish/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Shroomish[] = INCBIN_COMP("graphics/pokemon/shroomish/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Shroomish[] = INCBIN_U32("graphics/pokemon/shroomish/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Shroomish[] = INCBIN_U32("graphics/pokemon/shroomish/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Breloom[] = INCBIN_U32("graphics/pokemon/breloom/anim_front.4bpp.lz");
const u32 gMonPalette_Breloom[] = INCBIN_U32("graphics/pokemon/breloom/normal.gbapal.lz");
@@ -4340,6 +7243,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Breloom[] = INCBIN_U8("graphics/pokemon/breloom/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Breloom[] = INCBIN_COMP("graphics/pokemon/breloom/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Breloom[] = INCBIN_U32("graphics/pokemon/breloom/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Breloom[] = INCBIN_U32("graphics/pokemon/breloom/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SHROOMISH
#if P_FAMILY_SLAKOTH
@@ -4351,6 +7261,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Slakoth[] = INCBIN_U8("graphics/pokemon/slakoth/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Slakoth[] = INCBIN_COMP("graphics/pokemon/slakoth/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Slakoth[] = INCBIN_U32("graphics/pokemon/slakoth/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Slakoth[] = INCBIN_U32("graphics/pokemon/slakoth/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Vigoroth[] = INCBIN_U32("graphics/pokemon/vigoroth/anim_front.4bpp.lz");
const u32 gMonPalette_Vigoroth[] = INCBIN_U32("graphics/pokemon/vigoroth/normal.gbapal.lz");
@@ -4360,6 +7277,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Vigoroth[] = INCBIN_U8("graphics/pokemon/vigoroth/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Vigoroth[] = INCBIN_COMP("graphics/pokemon/vigoroth/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Vigoroth[] = INCBIN_U32("graphics/pokemon/vigoroth/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Vigoroth[] = INCBIN_U32("graphics/pokemon/vigoroth/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Slaking[] = INCBIN_U32("graphics/pokemon/slaking/anim_front.4bpp.lz");
const u32 gMonPalette_Slaking[] = INCBIN_U32("graphics/pokemon/slaking/normal.gbapal.lz");
@@ -4369,6 +7293,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Slaking[] = INCBIN_U8("graphics/pokemon/slaking/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Slaking[] = INCBIN_COMP("graphics/pokemon/slaking/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Slaking[] = INCBIN_U32("graphics/pokemon/slaking/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Slaking[] = INCBIN_U32("graphics/pokemon/slaking/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SLAKOTH
#if P_FAMILY_NINCADA
@@ -4380,6 +7311,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Nincada[] = INCBIN_U8("graphics/pokemon/nincada/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Nincada[] = INCBIN_COMP("graphics/pokemon/nincada/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Nincada[] = INCBIN_U32("graphics/pokemon/nincada/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Nincada[] = INCBIN_U32("graphics/pokemon/nincada/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Ninjask[] = INCBIN_U32("graphics/pokemon/ninjask/anim_front.4bpp.lz");
const u32 gMonPalette_Ninjask[] = INCBIN_U32("graphics/pokemon/ninjask/normal.gbapal.lz");
@@ -4389,6 +7327,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Ninjask[] = INCBIN_U8("graphics/pokemon/ninjask/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Ninjask[] = INCBIN_COMP("graphics/pokemon/ninjask/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Ninjask[] = INCBIN_U32("graphics/pokemon/ninjask/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Ninjask[] = INCBIN_U32("graphics/pokemon/ninjask/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Shedinja[] = INCBIN_U32("graphics/pokemon/shedinja/anim_front.4bpp.lz");
const u32 gMonPalette_Shedinja[] = INCBIN_U32("graphics/pokemon/shedinja/normal.gbapal.lz");
@@ -4398,6 +7343,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Shedinja[] = INCBIN_U8("graphics/pokemon/shedinja/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Shedinja[] = INCBIN_COMP("graphics/pokemon/shedinja/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Shedinja[] = INCBIN_U32("graphics/pokemon/shedinja/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Shedinja[] = INCBIN_U32("graphics/pokemon/shedinja/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_NINCADA
#if P_FAMILY_WHISMUR
@@ -4409,6 +7361,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Whismur[] = INCBIN_U8("graphics/pokemon/whismur/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Whismur[] = INCBIN_COMP("graphics/pokemon/whismur/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Whismur[] = INCBIN_U32("graphics/pokemon/whismur/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Whismur[] = INCBIN_U32("graphics/pokemon/whismur/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Loudred[] = INCBIN_U32("graphics/pokemon/loudred/anim_front.4bpp.lz");
const u32 gMonPalette_Loudred[] = INCBIN_U32("graphics/pokemon/loudred/normal.gbapal.lz");
@@ -4418,6 +7377,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Loudred[] = INCBIN_U8("graphics/pokemon/loudred/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Loudred[] = INCBIN_COMP("graphics/pokemon/loudred/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Loudred[] = INCBIN_U32("graphics/pokemon/loudred/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Loudred[] = INCBIN_U32("graphics/pokemon/loudred/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Exploud[] = INCBIN_U32("graphics/pokemon/exploud/anim_front.4bpp.lz");
const u32 gMonPalette_Exploud[] = INCBIN_U32("graphics/pokemon/exploud/normal.gbapal.lz");
@@ -4427,6 +7393,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Exploud[] = INCBIN_U8("graphics/pokemon/exploud/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Exploud[] = INCBIN_COMP("graphics/pokemon/exploud/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Exploud[] = INCBIN_U32("graphics/pokemon/exploud/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Exploud[] = INCBIN_U32("graphics/pokemon/exploud/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_WHISMUR
#if P_FAMILY_MAKUHITA
@@ -4438,6 +7411,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Makuhita[] = INCBIN_U8("graphics/pokemon/makuhita/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Makuhita[] = INCBIN_COMP("graphics/pokemon/makuhita/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Makuhita[] = INCBIN_U32("graphics/pokemon/makuhita/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Makuhita[] = INCBIN_U32("graphics/pokemon/makuhita/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Hariyama[] = INCBIN_U32("graphics/pokemon/hariyama/anim_front.4bpp.lz");
const u32 gMonPalette_Hariyama[] = INCBIN_U32("graphics/pokemon/hariyama/normal.gbapal.lz");
@@ -4447,6 +7427,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Hariyama[] = INCBIN_U8("graphics/pokemon/hariyama/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Hariyama[] = INCBIN_COMP("graphics/pokemon/hariyama/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Hariyama[] = INCBIN_U32("graphics/pokemon/hariyama/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Hariyama[] = INCBIN_U32("graphics/pokemon/hariyama/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_MAKUHITA
#if P_FAMILY_NOSEPASS
@@ -4458,6 +7445,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Nosepass[] = INCBIN_U8("graphics/pokemon/nosepass/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Nosepass[] = INCBIN_COMP("graphics/pokemon/nosepass/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Nosepass[] = INCBIN_U32("graphics/pokemon/nosepass/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Nosepass[] = INCBIN_U32("graphics/pokemon/nosepass/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GEN_4_CROSS_EVOS
const u32 gMonFrontPic_Probopass[] = INCBIN_U32("graphics/pokemon/probopass/anim_front.4bpp.lz");
@@ -4468,6 +7462,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Probopass[] = INCBIN_U8("graphics/pokemon/probopass/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Probopass[] = INCBIN_COMP("graphics/pokemon/probopass/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Probopass[] = INCBIN_U32("graphics/pokemon/probopass/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Probopass[] = INCBIN_U32("graphics/pokemon/probopass/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_4_CROSS_EVOS
#endif //P_FAMILY_NOSEPASS
@@ -4480,6 +7481,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Skitty[] = INCBIN_U8("graphics/pokemon/skitty/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Skitty[] = INCBIN_COMP("graphics/pokemon/skitty/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Skitty[] = INCBIN_U32("graphics/pokemon/skitty/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Skitty[] = INCBIN_U32("graphics/pokemon/skitty/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Delcatty[] = INCBIN_U32("graphics/pokemon/delcatty/anim_front.4bpp.lz");
const u32 gMonPalette_Delcatty[] = INCBIN_U32("graphics/pokemon/delcatty/normal.gbapal.lz");
@@ -4489,6 +7497,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Delcatty[] = INCBIN_U8("graphics/pokemon/delcatty/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Delcatty[] = INCBIN_COMP("graphics/pokemon/delcatty/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Delcatty[] = INCBIN_U32("graphics/pokemon/delcatty/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Delcatty[] = INCBIN_U32("graphics/pokemon/delcatty/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SKITTY
#if P_FAMILY_SABLEYE
@@ -4500,6 +7515,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Sableye[] = INCBIN_U8("graphics/pokemon/sableye/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Sableye[] = INCBIN_COMP("graphics/pokemon/sableye/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Sableye[] = INCBIN_U32("graphics/pokemon/sableye/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Sableye[] = INCBIN_U32("graphics/pokemon/sableye/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_MEGA_EVOLUTIONS
const u32 gMonFrontPic_SableyeMega[] = INCBIN_U32("graphics/pokemon/sableye/mega/front.4bpp.lz");
@@ -4507,6 +7529,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_SableyeMega[] = INCBIN_U32("graphics/pokemon/sableye/mega/back.4bpp.lz");
const u32 gMonShinyPalette_SableyeMega[] = INCBIN_U32("graphics/pokemon/sableye/mega/shiny.gbapal.lz");
const u8 gMonIcon_SableyeMega[] = INCBIN_U8("graphics/pokemon/sableye/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_SableyeMega[] = INCBIN_COMP("graphics/pokemon/sableye/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_SableyeMega[] = INCBIN_U32("graphics/pokemon/sableye/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_SableyeMega[] = INCBIN_U32("graphics/pokemon/sableye/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#endif //P_FAMILY_SABLEYE
@@ -4519,6 +7548,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Mawile[] = INCBIN_U8("graphics/pokemon/mawile/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Mawile[] = INCBIN_COMP("graphics/pokemon/mawile/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Mawile[] = INCBIN_U32("graphics/pokemon/mawile/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Mawile[] = INCBIN_U32("graphics/pokemon/mawile/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_MEGA_EVOLUTIONS
const u32 gMonFrontPic_MawileMega[] = INCBIN_U32("graphics/pokemon/mawile/mega/front.4bpp.lz");
@@ -4526,6 +7562,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_MawileMega[] = INCBIN_U32("graphics/pokemon/mawile/mega/back.4bpp.lz");
const u32 gMonShinyPalette_MawileMega[] = INCBIN_U32("graphics/pokemon/mawile/mega/shiny.gbapal.lz");
const u8 gMonIcon_MawileMega[] = INCBIN_U8("graphics/pokemon/mawile/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_MawileMega[] = INCBIN_COMP("graphics/pokemon/mawile/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_MawileMega[] = INCBIN_U32("graphics/pokemon/mawile/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_MawileMega[] = INCBIN_U32("graphics/pokemon/mawile/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#endif //P_FAMILY_MAWILE
@@ -4538,6 +7581,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Aron[] = INCBIN_U8("graphics/pokemon/aron/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Aron[] = INCBIN_COMP("graphics/pokemon/aron/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Aron[] = INCBIN_U32("graphics/pokemon/aron/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Aron[] = INCBIN_U32("graphics/pokemon/aron/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Lairon[] = INCBIN_U32("graphics/pokemon/lairon/anim_front.4bpp.lz");
const u32 gMonPalette_Lairon[] = INCBIN_U32("graphics/pokemon/lairon/normal.gbapal.lz");
@@ -4547,6 +7597,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Lairon[] = INCBIN_U8("graphics/pokemon/lairon/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Lairon[] = INCBIN_COMP("graphics/pokemon/lairon/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Lairon[] = INCBIN_U32("graphics/pokemon/lairon/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Lairon[] = INCBIN_U32("graphics/pokemon/lairon/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Aggron[] = INCBIN_U32("graphics/pokemon/aggron/anim_front.4bpp.lz");
const u32 gMonPalette_Aggron[] = INCBIN_U32("graphics/pokemon/aggron/normal.gbapal.lz");
@@ -4556,6 +7613,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Aggron[] = INCBIN_U8("graphics/pokemon/aggron/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Aggron[] = INCBIN_COMP("graphics/pokemon/aggron/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Aggron[] = INCBIN_U32("graphics/pokemon/aggron/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Aggron[] = INCBIN_U32("graphics/pokemon/aggron/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_MEGA_EVOLUTIONS
const u32 gMonFrontPic_AggronMega[] = INCBIN_U32("graphics/pokemon/aggron/mega/front.4bpp.lz");
@@ -4563,6 +7627,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_AggronMega[] = INCBIN_U32("graphics/pokemon/aggron/mega/back.4bpp.lz");
const u32 gMonShinyPalette_AggronMega[] = INCBIN_U32("graphics/pokemon/aggron/mega/shiny.gbapal.lz");
const u8 gMonIcon_AggronMega[] = INCBIN_U8("graphics/pokemon/aggron/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_AggronMega[] = INCBIN_COMP("graphics/pokemon/aggron/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_AggronMega[] = INCBIN_U32("graphics/pokemon/aggron/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_AggronMega[] = INCBIN_U32("graphics/pokemon/aggron/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#endif //P_FAMILY_ARON
@@ -4575,6 +7646,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Meditite[] = INCBIN_U8("graphics/pokemon/meditite/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Meditite[] = INCBIN_COMP("graphics/pokemon/meditite/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Meditite[] = INCBIN_U32("graphics/pokemon/meditite/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Meditite[] = INCBIN_U32("graphics/pokemon/meditite/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_MedititeF[] = INCBIN_U32("graphics/pokemon/meditite/anim_frontf.4bpp.lz");
const u32 gMonBackPic_MedititeF[] = INCBIN_U32("graphics/pokemon/meditite/backf.4bpp.lz");
@@ -4587,6 +7665,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Medicham[] = INCBIN_U8("graphics/pokemon/medicham/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Medicham[] = INCBIN_COMP("graphics/pokemon/medicham/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Medicham[] = INCBIN_U32("graphics/pokemon/medicham/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Medicham[] = INCBIN_U32("graphics/pokemon/medicham/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_MedichamF[] = INCBIN_U32("graphics/pokemon/medicham/anim_frontf.4bpp.lz");
const u32 gMonBackPic_MedichamF[] = INCBIN_U32("graphics/pokemon/medicham/backf.4bpp.lz");
@@ -4597,6 +7682,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_MedichamMega[] = INCBIN_U32("graphics/pokemon/medicham/mega/back.4bpp.lz");
const u32 gMonShinyPalette_MedichamMega[] = INCBIN_U32("graphics/pokemon/medicham/mega/shiny.gbapal.lz");
const u8 gMonIcon_MedichamMega[] = INCBIN_U8("graphics/pokemon/medicham/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_MedichamMega[] = INCBIN_COMP("graphics/pokemon/medicham/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_MedichamMega[] = INCBIN_U32("graphics/pokemon/medicham/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_MedichamMega[] = INCBIN_U32("graphics/pokemon/medicham/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#endif //P_FAMILY_MEDITITE
@@ -4609,6 +7701,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Electrike[] = INCBIN_U8("graphics/pokemon/electrike/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Electrike[] = INCBIN_COMP("graphics/pokemon/electrike/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Electrike[] = INCBIN_U32("graphics/pokemon/electrike/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Electrike[] = INCBIN_U32("graphics/pokemon/electrike/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Manectric[] = INCBIN_U32("graphics/pokemon/manectric/anim_front.4bpp.lz");
const u32 gMonPalette_Manectric[] = INCBIN_U32("graphics/pokemon/manectric/normal.gbapal.lz");
@@ -4618,6 +7717,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Manectric[] = INCBIN_U8("graphics/pokemon/manectric/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Manectric[] = INCBIN_COMP("graphics/pokemon/manectric/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Manectric[] = INCBIN_U32("graphics/pokemon/manectric/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Manectric[] = INCBIN_U32("graphics/pokemon/manectric/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_MEGA_EVOLUTIONS
const u32 gMonFrontPic_ManectricMega[] = INCBIN_U32("graphics/pokemon/manectric/mega/front.4bpp.lz");
@@ -4625,6 +7731,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_ManectricMega[] = INCBIN_U32("graphics/pokemon/manectric/mega/back.4bpp.lz");
const u32 gMonShinyPalette_ManectricMega[] = INCBIN_U32("graphics/pokemon/manectric/mega/shiny.gbapal.lz");
const u8 gMonIcon_ManectricMega[] = INCBIN_U8("graphics/pokemon/manectric/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_ManectricMega[] = INCBIN_COMP("graphics/pokemon/manectric/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_ManectricMega[] = INCBIN_U32("graphics/pokemon/manectric/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_ManectricMega[] = INCBIN_U32("graphics/pokemon/manectric/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#endif //P_FAMILY_ELECTRIKE
@@ -4637,6 +7750,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Plusle[] = INCBIN_U8("graphics/pokemon/plusle/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Plusle[] = INCBIN_COMP("graphics/pokemon/plusle/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Plusle[] = INCBIN_U32("graphics/pokemon/plusle/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Plusle[] = INCBIN_U32("graphics/pokemon/plusle/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_PLUSLE
#if P_FAMILY_MINUN
@@ -4648,6 +7768,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Minun[] = INCBIN_U8("graphics/pokemon/minun/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Minun[] = INCBIN_COMP("graphics/pokemon/minun/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Minun[] = INCBIN_U32("graphics/pokemon/minun/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Minun[] = INCBIN_U32("graphics/pokemon/minun/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_MINUN
#if P_FAMILY_VOLBEAT_ILLUMISE
@@ -4659,6 +7786,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Volbeat[] = INCBIN_U8("graphics/pokemon/volbeat/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Volbeat[] = INCBIN_COMP("graphics/pokemon/volbeat/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Volbeat[] = INCBIN_U32("graphics/pokemon/volbeat/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Volbeat[] = INCBIN_U32("graphics/pokemon/volbeat/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Illumise[] = INCBIN_U32("graphics/pokemon/illumise/anim_front.4bpp.lz");
const u32 gMonPalette_Illumise[] = INCBIN_U32("graphics/pokemon/illumise/normal.gbapal.lz");
@@ -4668,6 +7802,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Illumise[] = INCBIN_U8("graphics/pokemon/illumise/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Illumise[] = INCBIN_COMP("graphics/pokemon/illumise/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Illumise[] = INCBIN_U32("graphics/pokemon/illumise/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Illumise[] = INCBIN_U32("graphics/pokemon/illumise/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_VOLBEAT_ILLUMISE
#if P_FAMILY_ROSELIA
@@ -4680,6 +7821,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Budew[] = INCBIN_U8("graphics/pokemon/budew/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Budew[] = INCBIN_COMP("graphics/pokemon/budew/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Budew[] = INCBIN_U32("graphics/pokemon/budew/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Budew[] = INCBIN_U32("graphics/pokemon/budew/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_4_CROSS_EVOS
const u32 gMonFrontPic_Roselia[] = INCBIN_U32("graphics/pokemon/roselia/anim_front.4bpp.lz");
@@ -4690,6 +7838,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Roselia[] = INCBIN_U8("graphics/pokemon/roselia/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Roselia[] = INCBIN_COMP("graphics/pokemon/roselia/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Roselia[] = INCBIN_U32("graphics/pokemon/roselia/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Roselia[] = INCBIN_U32("graphics/pokemon/roselia/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_RoseliaF[] = INCBIN_U32("graphics/pokemon/roselia/anim_frontf.4bpp.lz");
const u32 gMonBackPic_RoseliaF[] = INCBIN_U32("graphics/pokemon/roselia/backf.4bpp.lz");
@@ -4703,6 +7858,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Roserade[] = INCBIN_U8("graphics/pokemon/roserade/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Roserade[] = INCBIN_COMP("graphics/pokemon/roserade/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Roserade[] = INCBIN_U32("graphics/pokemon/roserade/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Roserade[] = INCBIN_U32("graphics/pokemon/roserade/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_RoseradeF[] = INCBIN_U32("graphics/pokemon/roserade/anim_frontf.4bpp.lz");
const u32 gMonBackPic_RoseradeF[] = INCBIN_U32("graphics/pokemon/roserade/backf.4bpp.lz");
@@ -4718,6 +7880,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Gulpin[] = INCBIN_U8("graphics/pokemon/gulpin/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Gulpin[] = INCBIN_COMP("graphics/pokemon/gulpin/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Gulpin[] = INCBIN_U32("graphics/pokemon/gulpin/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Gulpin[] = INCBIN_U32("graphics/pokemon/gulpin/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_GulpinF[] = INCBIN_U32("graphics/pokemon/gulpin/anim_frontf.4bpp.lz");
const u32 gMonBackPic_GulpinF[] = INCBIN_U32("graphics/pokemon/gulpin/backf.4bpp.lz");
@@ -4730,6 +7899,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Swalot[] = INCBIN_U8("graphics/pokemon/swalot/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Swalot[] = INCBIN_COMP("graphics/pokemon/swalot/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Swalot[] = INCBIN_U32("graphics/pokemon/swalot/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Swalot[] = INCBIN_U32("graphics/pokemon/swalot/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_SwalotF[] = INCBIN_U32("graphics/pokemon/swalot/anim_frontf.4bpp.lz");
const u32 gMonBackPic_SwalotF[] = INCBIN_U32("graphics/pokemon/swalot/backf.4bpp.lz");
@@ -4744,6 +7920,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Carvanha[] = INCBIN_U8("graphics/pokemon/carvanha/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Carvanha[] = INCBIN_COMP("graphics/pokemon/carvanha/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Carvanha[] = INCBIN_U32("graphics/pokemon/carvanha/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Carvanha[] = INCBIN_U32("graphics/pokemon/carvanha/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Sharpedo[] = INCBIN_U32("graphics/pokemon/sharpedo/anim_front.4bpp.lz");
const u32 gMonPalette_Sharpedo[] = INCBIN_U32("graphics/pokemon/sharpedo/normal.gbapal.lz");
@@ -4753,6 +7936,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Sharpedo[] = INCBIN_U8("graphics/pokemon/sharpedo/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Sharpedo[] = INCBIN_COMP("graphics/pokemon/sharpedo/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Sharpedo[] = INCBIN_U32("graphics/pokemon/sharpedo/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Sharpedo[] = INCBIN_U32("graphics/pokemon/sharpedo/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_MEGA_EVOLUTIONS
const u32 gMonFrontPic_SharpedoMega[] = INCBIN_U32("graphics/pokemon/sharpedo/mega/front.4bpp.lz");
@@ -4760,6 +7950,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_SharpedoMega[] = INCBIN_U32("graphics/pokemon/sharpedo/mega/back.4bpp.lz");
const u32 gMonShinyPalette_SharpedoMega[] = INCBIN_U32("graphics/pokemon/sharpedo/mega/shiny.gbapal.lz");
const u8 gMonIcon_SharpedoMega[] = INCBIN_U8("graphics/pokemon/sharpedo/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_SharpedoMega[] = INCBIN_COMP("graphics/pokemon/sharpedo/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_SharpedoMega[] = INCBIN_U32("graphics/pokemon/sharpedo/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_SharpedoMega[] = INCBIN_U32("graphics/pokemon/sharpedo/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#endif //P_FAMILY_CARVANHA
@@ -4772,6 +7969,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Wailmer[] = INCBIN_U8("graphics/pokemon/wailmer/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Wailmer[] = INCBIN_COMP("graphics/pokemon/wailmer/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Wailmer[] = INCBIN_U32("graphics/pokemon/wailmer/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Wailmer[] = INCBIN_U32("graphics/pokemon/wailmer/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Wailord[] = INCBIN_U32("graphics/pokemon/wailord/anim_front.4bpp.lz");
const u32 gMonPalette_Wailord[] = INCBIN_U32("graphics/pokemon/wailord/normal.gbapal.lz");
@@ -4781,6 +7985,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Wailord[] = INCBIN_U8("graphics/pokemon/wailord/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Wailord[] = INCBIN_COMP("graphics/pokemon/wailord/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Wailord[] = INCBIN_U32("graphics/pokemon/wailord/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Wailord[] = INCBIN_U32("graphics/pokemon/wailord/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_WAILMER
#if P_FAMILY_NUMEL
@@ -4792,6 +8003,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Numel[] = INCBIN_U8("graphics/pokemon/numel/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Numel[] = INCBIN_COMP("graphics/pokemon/numel/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Numel[] = INCBIN_U32("graphics/pokemon/numel/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Numel[] = INCBIN_U32("graphics/pokemon/numel/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_NumelF[] = INCBIN_U32("graphics/pokemon/numel/anim_frontf.4bpp.lz");
const u32 gMonBackPic_NumelF[] = INCBIN_U32("graphics/pokemon/numel/backf.4bpp.lz");
@@ -4804,6 +8022,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Camerupt[] = INCBIN_U8("graphics/pokemon/camerupt/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Camerupt[] = INCBIN_COMP("graphics/pokemon/camerupt/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Camerupt[] = INCBIN_U32("graphics/pokemon/camerupt/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Camerupt[] = INCBIN_U32("graphics/pokemon/camerupt/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_CameruptF[] = INCBIN_U32("graphics/pokemon/camerupt/anim_frontf.4bpp.lz");
const u32 gMonBackPic_CameruptF[] = INCBIN_U32("graphics/pokemon/camerupt/backf.4bpp.lz");
@@ -4814,6 +8039,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_CameruptMega[] = INCBIN_U32("graphics/pokemon/camerupt/mega/back.4bpp.lz");
const u32 gMonShinyPalette_CameruptMega[] = INCBIN_U32("graphics/pokemon/camerupt/mega/shiny.gbapal.lz");
const u8 gMonIcon_CameruptMega[] = INCBIN_U8("graphics/pokemon/camerupt/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_CameruptMega[] = INCBIN_COMP("graphics/pokemon/camerupt/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_CameruptMega[] = INCBIN_U32("graphics/pokemon/camerupt/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_CameruptMega[] = INCBIN_U32("graphics/pokemon/camerupt/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#endif //P_FAMILY_NUMEL
@@ -4826,6 +8058,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Torkoal[] = INCBIN_U8("graphics/pokemon/torkoal/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Torkoal[] = INCBIN_COMP("graphics/pokemon/torkoal/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Torkoal[] = INCBIN_U32("graphics/pokemon/torkoal/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Torkoal[] = INCBIN_U32("graphics/pokemon/torkoal/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_TORKOAL
#if P_FAMILY_SPOINK
@@ -4837,6 +8076,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Spoink[] = INCBIN_U8("graphics/pokemon/spoink/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Spoink[] = INCBIN_COMP("graphics/pokemon/spoink/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Spoink[] = INCBIN_U32("graphics/pokemon/spoink/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Spoink[] = INCBIN_U32("graphics/pokemon/spoink/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Grumpig[] = INCBIN_U32("graphics/pokemon/grumpig/anim_front.4bpp.lz");
const u32 gMonPalette_Grumpig[] = INCBIN_U32("graphics/pokemon/grumpig/normal.gbapal.lz");
@@ -4846,6 +8092,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Grumpig[] = INCBIN_U8("graphics/pokemon/grumpig/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Grumpig[] = INCBIN_COMP("graphics/pokemon/grumpig/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Grumpig[] = INCBIN_U32("graphics/pokemon/grumpig/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Grumpig[] = INCBIN_U32("graphics/pokemon/grumpig/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SPOINK
#if P_FAMILY_SPINDA
@@ -4857,6 +8110,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Spinda[] = INCBIN_U8("graphics/pokemon/spinda/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Spinda[] = INCBIN_COMP("graphics/pokemon/spinda/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Spinda[] = INCBIN_U32("graphics/pokemon/spinda/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Spinda[] = INCBIN_U32("graphics/pokemon/spinda/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SPINDA
#if P_FAMILY_TRAPINCH
@@ -4868,6 +8128,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Trapinch[] = INCBIN_U8("graphics/pokemon/trapinch/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Trapinch[] = INCBIN_COMP("graphics/pokemon/trapinch/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Trapinch[] = INCBIN_U32("graphics/pokemon/trapinch/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Trapinch[] = INCBIN_U32("graphics/pokemon/trapinch/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Vibrava[] = INCBIN_U32("graphics/pokemon/vibrava/anim_front.4bpp.lz");
const u32 gMonPalette_Vibrava[] = INCBIN_U32("graphics/pokemon/vibrava/normal.gbapal.lz");
@@ -4877,6 +8144,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Vibrava[] = INCBIN_U8("graphics/pokemon/vibrava/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Vibrava[] = INCBIN_COMP("graphics/pokemon/vibrava/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Vibrava[] = INCBIN_U32("graphics/pokemon/vibrava/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Vibrava[] = INCBIN_U32("graphics/pokemon/vibrava/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Flygon[] = INCBIN_U32("graphics/pokemon/flygon/anim_front.4bpp.lz");
const u32 gMonPalette_Flygon[] = INCBIN_U32("graphics/pokemon/flygon/normal.gbapal.lz");
@@ -4886,6 +8160,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Flygon[] = INCBIN_U8("graphics/pokemon/flygon/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Flygon[] = INCBIN_COMP("graphics/pokemon/flygon/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Flygon[] = INCBIN_U32("graphics/pokemon/flygon/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Flygon[] = INCBIN_U32("graphics/pokemon/flygon/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_TRAPINCH
#if P_FAMILY_CACNEA
@@ -4897,6 +8178,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Cacnea[] = INCBIN_U8("graphics/pokemon/cacnea/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Cacnea[] = INCBIN_COMP("graphics/pokemon/cacnea/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Cacnea[] = INCBIN_U32("graphics/pokemon/cacnea/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Cacnea[] = INCBIN_U32("graphics/pokemon/cacnea/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Cacturne[] = INCBIN_U32("graphics/pokemon/cacturne/anim_front.4bpp.lz");
const u32 gMonPalette_Cacturne[] = INCBIN_U32("graphics/pokemon/cacturne/normal.gbapal.lz");
@@ -4906,6 +8194,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Cacturne[] = INCBIN_U8("graphics/pokemon/cacturne/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Cacturne[] = INCBIN_COMP("graphics/pokemon/cacturne/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Cacturne[] = INCBIN_U32("graphics/pokemon/cacturne/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Cacturne[] = INCBIN_U32("graphics/pokemon/cacturne/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_CacturneF[] = INCBIN_U32("graphics/pokemon/cacturne/anim_frontf.4bpp.lz");
#endif //P_FAMILY_CACNEA
@@ -4919,6 +8214,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Swablu[] = INCBIN_U8("graphics/pokemon/swablu/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Swablu[] = INCBIN_COMP("graphics/pokemon/swablu/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Swablu[] = INCBIN_U32("graphics/pokemon/swablu/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Swablu[] = INCBIN_U32("graphics/pokemon/swablu/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Altaria[] = INCBIN_U32("graphics/pokemon/altaria/anim_front.4bpp.lz");
const u32 gMonPalette_Altaria[] = INCBIN_U32("graphics/pokemon/altaria/normal.gbapal.lz");
@@ -4928,6 +8230,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Altaria[] = INCBIN_U8("graphics/pokemon/altaria/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Altaria[] = INCBIN_COMP("graphics/pokemon/altaria/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Altaria[] = INCBIN_U32("graphics/pokemon/altaria/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Altaria[] = INCBIN_U32("graphics/pokemon/altaria/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_MEGA_EVOLUTIONS
const u32 gMonFrontPic_AltariaMega[] = INCBIN_U32("graphics/pokemon/altaria/mega/front.4bpp.lz");
@@ -4935,6 +8244,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_AltariaMega[] = INCBIN_U32("graphics/pokemon/altaria/mega/back.4bpp.lz");
const u32 gMonShinyPalette_AltariaMega[] = INCBIN_U32("graphics/pokemon/altaria/mega/shiny.gbapal.lz");
const u8 gMonIcon_AltariaMega[] = INCBIN_U8("graphics/pokemon/altaria/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_AltariaMega[] = INCBIN_COMP("graphics/pokemon/altaria/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_AltariaMega[] = INCBIN_U32("graphics/pokemon/altaria/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_AltariaMega[] = INCBIN_U32("graphics/pokemon/altaria/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#endif //P_FAMILY_SWABLU
@@ -4947,6 +8263,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Zangoose[] = INCBIN_U8("graphics/pokemon/zangoose/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Zangoose[] = INCBIN_COMP("graphics/pokemon/zangoose/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Zangoose[] = INCBIN_U32("graphics/pokemon/zangoose/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Zangoose[] = INCBIN_U32("graphics/pokemon/zangoose/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_ZANGOOSE
#if P_FAMILY_SEVIPER
@@ -4958,6 +8281,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Seviper[] = INCBIN_U8("graphics/pokemon/seviper/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Seviper[] = INCBIN_COMP("graphics/pokemon/seviper/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Seviper[] = INCBIN_U32("graphics/pokemon/seviper/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Seviper[] = INCBIN_U32("graphics/pokemon/seviper/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SEVIPER
#if P_FAMILY_LUNATONE
@@ -4969,6 +8299,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Lunatone[] = INCBIN_U8("graphics/pokemon/lunatone/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Lunatone[] = INCBIN_COMP("graphics/pokemon/lunatone/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Lunatone[] = INCBIN_U32("graphics/pokemon/lunatone/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Lunatone[] = INCBIN_U32("graphics/pokemon/lunatone/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_LUNATONE
#if P_FAMILY_SOLROCK
@@ -4980,6 +8317,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Solrock[] = INCBIN_U8("graphics/pokemon/solrock/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Solrock[] = INCBIN_COMP("graphics/pokemon/solrock/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Solrock[] = INCBIN_U32("graphics/pokemon/solrock/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Solrock[] = INCBIN_U32("graphics/pokemon/solrock/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SOLROCK
#if P_FAMILY_BARBOACH
@@ -4991,6 +8335,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Barboach[] = INCBIN_U8("graphics/pokemon/barboach/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Barboach[] = INCBIN_COMP("graphics/pokemon/barboach/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Barboach[] = INCBIN_U32("graphics/pokemon/barboach/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Barboach[] = INCBIN_U32("graphics/pokemon/barboach/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Whiscash[] = INCBIN_U32("graphics/pokemon/whiscash/anim_front.4bpp.lz");
const u32 gMonPalette_Whiscash[] = INCBIN_U32("graphics/pokemon/whiscash/normal.gbapal.lz");
@@ -5000,6 +8351,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Whiscash[] = INCBIN_U8("graphics/pokemon/whiscash/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Whiscash[] = INCBIN_COMP("graphics/pokemon/whiscash/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Whiscash[] = INCBIN_U32("graphics/pokemon/whiscash/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Whiscash[] = INCBIN_U32("graphics/pokemon/whiscash/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_BARBOACH
#if P_FAMILY_CORPHISH
@@ -5011,6 +8369,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Corphish[] = INCBIN_U8("graphics/pokemon/corphish/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Corphish[] = INCBIN_COMP("graphics/pokemon/corphish/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Corphish[] = INCBIN_U32("graphics/pokemon/corphish/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Corphish[] = INCBIN_U32("graphics/pokemon/corphish/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Crawdaunt[] = INCBIN_U32("graphics/pokemon/crawdaunt/anim_front.4bpp.lz");
const u32 gMonPalette_Crawdaunt[] = INCBIN_U32("graphics/pokemon/crawdaunt/normal.gbapal.lz");
@@ -5020,6 +8385,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Crawdaunt[] = INCBIN_U8("graphics/pokemon/crawdaunt/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Crawdaunt[] = INCBIN_COMP("graphics/pokemon/crawdaunt/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Crawdaunt[] = INCBIN_U32("graphics/pokemon/crawdaunt/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Crawdaunt[] = INCBIN_U32("graphics/pokemon/crawdaunt/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_CORPHISH
#if P_FAMILY_BALTOY
@@ -5031,6 +8403,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Baltoy[] = INCBIN_U8("graphics/pokemon/baltoy/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Baltoy[] = INCBIN_COMP("graphics/pokemon/baltoy/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Baltoy[] = INCBIN_U32("graphics/pokemon/baltoy/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Baltoy[] = INCBIN_U32("graphics/pokemon/baltoy/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Claydol[] = INCBIN_U32("graphics/pokemon/claydol/anim_front.4bpp.lz");
const u32 gMonPalette_Claydol[] = INCBIN_U32("graphics/pokemon/claydol/normal.gbapal.lz");
@@ -5040,6 +8419,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Claydol[] = INCBIN_U8("graphics/pokemon/claydol/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Claydol[] = INCBIN_COMP("graphics/pokemon/claydol/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Claydol[] = INCBIN_U32("graphics/pokemon/claydol/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Claydol[] = INCBIN_U32("graphics/pokemon/claydol/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_BALTOY
#if P_FAMILY_LILEEP
@@ -5051,6 +8437,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Lileep[] = INCBIN_U8("graphics/pokemon/lileep/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Lileep[] = INCBIN_COMP("graphics/pokemon/lileep/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Lileep[] = INCBIN_U32("graphics/pokemon/lileep/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Lileep[] = INCBIN_U32("graphics/pokemon/lileep/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Cradily[] = INCBIN_U32("graphics/pokemon/cradily/anim_front.4bpp.lz");
const u32 gMonPalette_Cradily[] = INCBIN_U32("graphics/pokemon/cradily/normal.gbapal.lz");
@@ -5060,6 +8453,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Cradily[] = INCBIN_U8("graphics/pokemon/cradily/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Cradily[] = INCBIN_COMP("graphics/pokemon/cradily/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Cradily[] = INCBIN_U32("graphics/pokemon/cradily/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Cradily[] = INCBIN_U32("graphics/pokemon/cradily/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_LILEEP
#if P_FAMILY_ANORITH
@@ -5071,6 +8471,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Anorith[] = INCBIN_U8("graphics/pokemon/anorith/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Anorith[] = INCBIN_COMP("graphics/pokemon/anorith/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Anorith[] = INCBIN_U32("graphics/pokemon/anorith/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Anorith[] = INCBIN_U32("graphics/pokemon/anorith/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Armaldo[] = INCBIN_U32("graphics/pokemon/armaldo/anim_front.4bpp.lz");
const u32 gMonPalette_Armaldo[] = INCBIN_U32("graphics/pokemon/armaldo/normal.gbapal.lz");
@@ -5080,6 +8487,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Armaldo[] = INCBIN_U8("graphics/pokemon/armaldo/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Armaldo[] = INCBIN_COMP("graphics/pokemon/armaldo/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Armaldo[] = INCBIN_U32("graphics/pokemon/armaldo/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Armaldo[] = INCBIN_U32("graphics/pokemon/armaldo/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_ANORITH
#if P_FAMILY_FEEBAS
@@ -5091,6 +8505,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Feebas[] = INCBIN_U8("graphics/pokemon/feebas/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Feebas[] = INCBIN_COMP("graphics/pokemon/feebas/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Feebas[] = INCBIN_U32("graphics/pokemon/feebas/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Feebas[] = INCBIN_U32("graphics/pokemon/feebas/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Milotic[] = INCBIN_U32("graphics/pokemon/milotic/anim_front.4bpp.lz");
const u32 gMonPalette_Milotic[] = INCBIN_U32("graphics/pokemon/milotic/normal.gbapal.lz");
@@ -5100,6 +8521,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Milotic[] = INCBIN_U8("graphics/pokemon/milotic/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Milotic[] = INCBIN_COMP("graphics/pokemon/milotic/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Milotic[] = INCBIN_U32("graphics/pokemon/milotic/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Milotic[] = INCBIN_U32("graphics/pokemon/milotic/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_MiloticF[] = INCBIN_U32("graphics/pokemon/milotic/anim_frontf.4bpp.lz");
const u32 gMonBackPic_MiloticF[] = INCBIN_U32("graphics/pokemon/milotic/backf.4bpp.lz");
@@ -5132,6 +8560,23 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_CastformSnowy[] = INCBIN_U32("graphics/pokemon/castform/snowy/back.4bpp.lz");
const u32 gMonShinyPalette_CastformSnowy[] = INCBIN_U32("graphics/pokemon/castform/snowy/shiny.gbapal.lz");
const u8 gMonIcon_CastformSnowy[] = INCBIN_U8("graphics/pokemon/castform/snowy/icon.4bpp");
+
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_CastformNormal[] = INCBIN_COMP("graphics/pokemon/castform/overworld.4bpp");
+ const u32 gObjectEventPic_CastformSunny[] = INCBIN_COMP("graphics/pokemon/castform/sunny/overworld.4bpp");
+ const u32 gObjectEventPic_CastformRainy[] = INCBIN_COMP("graphics/pokemon/castform/rainy/overworld.4bpp");
+ const u32 gObjectEventPic_CastformSnowy[] = INCBIN_COMP("graphics/pokemon/castform/snowy/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_CastformNormal[] = INCBIN_U32("graphics/pokemon/castform/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_CastformSunny[] = INCBIN_U32("graphics/pokemon/castform/sunny/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_CastformRainy[] = INCBIN_U32("graphics/pokemon/castform/rainy/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_CastformSnowy[] = INCBIN_U32("graphics/pokemon/castform/snowy/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_CastformNormal[] = INCBIN_U32("graphics/pokemon/castform/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_CastformSunny[] = INCBIN_U32("graphics/pokemon/castform/sunny/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_CastformRainy[] = INCBIN_U32("graphics/pokemon/castform/rainy/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_CastformSnowy[] = INCBIN_U32("graphics/pokemon/castform/snowy/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_CASTFORM
#if P_FAMILY_KECLEON
@@ -5143,6 +8588,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Kecleon[] = INCBIN_U8("graphics/pokemon/kecleon/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Kecleon[] = INCBIN_COMP("graphics/pokemon/kecleon/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Kecleon[] = INCBIN_U32("graphics/pokemon/kecleon/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Kecleon[] = INCBIN_U32("graphics/pokemon/kecleon/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_KECLEON
#if P_FAMILY_SHUPPET
@@ -5154,6 +8606,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Shuppet[] = INCBIN_U8("graphics/pokemon/shuppet/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Shuppet[] = INCBIN_COMP("graphics/pokemon/shuppet/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Shuppet[] = INCBIN_U32("graphics/pokemon/shuppet/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Shuppet[] = INCBIN_U32("graphics/pokemon/shuppet/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Banette[] = INCBIN_U32("graphics/pokemon/banette/anim_front.4bpp.lz");
const u32 gMonPalette_Banette[] = INCBIN_U32("graphics/pokemon/banette/normal.gbapal.lz");
@@ -5163,6 +8622,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Banette[] = INCBIN_U8("graphics/pokemon/banette/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Banette[] = INCBIN_COMP("graphics/pokemon/banette/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Banette[] = INCBIN_U32("graphics/pokemon/banette/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Banette[] = INCBIN_U32("graphics/pokemon/banette/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_MEGA_EVOLUTIONS
const u32 gMonFrontPic_BanetteMega[] = INCBIN_U32("graphics/pokemon/banette/mega/front.4bpp.lz");
@@ -5170,6 +8636,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_BanetteMega[] = INCBIN_U32("graphics/pokemon/banette/mega/back.4bpp.lz");
const u32 gMonShinyPalette_BanetteMega[] = INCBIN_U32("graphics/pokemon/banette/mega/shiny.gbapal.lz");
const u8 gMonIcon_BanetteMega[] = INCBIN_U8("graphics/pokemon/banette/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_BanetteMega[] = INCBIN_COMP("graphics/pokemon/banette/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_BanetteMega[] = INCBIN_U32("graphics/pokemon/banette/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_BanetteMega[] = INCBIN_U32("graphics/pokemon/banette/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#endif //P_FAMILY_SHUPPET
@@ -5182,6 +8655,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Duskull[] = INCBIN_U8("graphics/pokemon/duskull/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Duskull[] = INCBIN_COMP("graphics/pokemon/duskull/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Duskull[] = INCBIN_U32("graphics/pokemon/duskull/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Duskull[] = INCBIN_U32("graphics/pokemon/duskull/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Dusclops[] = INCBIN_U32("graphics/pokemon/dusclops/anim_front.4bpp.lz");
const u32 gMonPalette_Dusclops[] = INCBIN_U32("graphics/pokemon/dusclops/normal.gbapal.lz");
@@ -5191,6 +8671,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Dusclops[] = INCBIN_U8("graphics/pokemon/dusclops/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Dusclops[] = INCBIN_COMP("graphics/pokemon/dusclops/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Dusclops[] = INCBIN_U32("graphics/pokemon/dusclops/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Dusclops[] = INCBIN_U32("graphics/pokemon/dusclops/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GEN_4_CROSS_EVOS
const u32 gMonFrontPic_Dusknoir[] = INCBIN_U32("graphics/pokemon/dusknoir/anim_front.4bpp.lz");
@@ -5201,6 +8688,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Dusknoir[] = INCBIN_U8("graphics/pokemon/dusknoir/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Dusknoir[] = INCBIN_COMP("graphics/pokemon/dusknoir/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Dusknoir[] = INCBIN_U32("graphics/pokemon/dusknoir/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Dusknoir[] = INCBIN_U32("graphics/pokemon/dusknoir/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_4_CROSS_EVOS
#endif //P_FAMILY_DUSKULL
@@ -5213,6 +8707,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Tropius[] = INCBIN_U8("graphics/pokemon/tropius/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Tropius[] = INCBIN_COMP("graphics/pokemon/tropius/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Tropius[] = INCBIN_U32("graphics/pokemon/tropius/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Tropius[] = INCBIN_U32("graphics/pokemon/tropius/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_TROPIUS
#if P_FAMILY_CHIMECHO
@@ -5225,6 +8726,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Chingling[] = INCBIN_U8("graphics/pokemon/chingling/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Chingling[] = INCBIN_COMP("graphics/pokemon/chingling/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Chingling[] = INCBIN_U32("graphics/pokemon/chingling/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Chingling[] = INCBIN_U32("graphics/pokemon/chingling/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_4_CROSS_EVOS
const u32 gMonFrontPic_Chimecho[] = INCBIN_U32("graphics/pokemon/chimecho/anim_front.4bpp.lz");
@@ -5235,6 +8743,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Chimecho[] = INCBIN_U8("graphics/pokemon/chimecho/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Chimecho[] = INCBIN_COMP("graphics/pokemon/chimecho/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Chimecho[] = INCBIN_U32("graphics/pokemon/chimecho/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Chimecho[] = INCBIN_U32("graphics/pokemon/chimecho/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_CHIMECHO
#if P_FAMILY_ABSOL
@@ -5246,6 +8761,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Absol[] = INCBIN_U8("graphics/pokemon/absol/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Absol[] = INCBIN_COMP("graphics/pokemon/absol/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Absol[] = INCBIN_U32("graphics/pokemon/absol/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Absol[] = INCBIN_U32("graphics/pokemon/absol/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_MEGA_EVOLUTIONS
const u32 gMonFrontPic_AbsolMega[] = INCBIN_U32("graphics/pokemon/absol/mega/front.4bpp.lz");
@@ -5253,6 +8775,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_AbsolMega[] = INCBIN_U32("graphics/pokemon/absol/mega/back.4bpp.lz");
const u32 gMonShinyPalette_AbsolMega[] = INCBIN_U32("graphics/pokemon/absol/mega/shiny.gbapal.lz");
const u8 gMonIcon_AbsolMega[] = INCBIN_U8("graphics/pokemon/absol/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_AbsolMega[] = INCBIN_COMP("graphics/pokemon/absol/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_AbsolMega[] = INCBIN_U32("graphics/pokemon/absol/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_AbsolMega[] = INCBIN_U32("graphics/pokemon/absol/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#endif //P_FAMILY_ABSOL
@@ -5265,6 +8794,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Snorunt[] = INCBIN_U8("graphics/pokemon/snorunt/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Snorunt[] = INCBIN_COMP("graphics/pokemon/snorunt/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Snorunt[] = INCBIN_U32("graphics/pokemon/snorunt/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Snorunt[] = INCBIN_U32("graphics/pokemon/snorunt/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Glalie[] = INCBIN_U32("graphics/pokemon/glalie/anim_front.4bpp.lz");
const u32 gMonPalette_Glalie[] = INCBIN_U32("graphics/pokemon/glalie/normal.gbapal.lz");
@@ -5274,6 +8810,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Glalie[] = INCBIN_U8("graphics/pokemon/glalie/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Glalie[] = INCBIN_COMP("graphics/pokemon/glalie/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Glalie[] = INCBIN_U32("graphics/pokemon/glalie/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Glalie[] = INCBIN_U32("graphics/pokemon/glalie/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_MEGA_EVOLUTIONS
const u32 gMonFrontPic_GlalieMega[] = INCBIN_U32("graphics/pokemon/glalie/mega/front.4bpp.lz");
@@ -5281,6 +8824,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_GlalieMega[] = INCBIN_U32("graphics/pokemon/glalie/mega/back.4bpp.lz");
const u32 gMonShinyPalette_GlalieMega[] = INCBIN_U32("graphics/pokemon/glalie/mega/shiny.gbapal.lz");
const u8 gMonIcon_GlalieMega[] = INCBIN_U8("graphics/pokemon/glalie/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_GlalieMega[] = INCBIN_COMP("graphics/pokemon/glalie/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_GlalieMega[] = INCBIN_U32("graphics/pokemon/glalie/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_GlalieMega[] = INCBIN_U32("graphics/pokemon/glalie/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#if P_GEN_4_CROSS_EVOS
@@ -5292,6 +8842,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Froslass[] = INCBIN_U8("graphics/pokemon/froslass/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Froslass[] = INCBIN_COMP("graphics/pokemon/froslass/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Froslass[] = INCBIN_U32("graphics/pokemon/froslass/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Froslass[] = INCBIN_U32("graphics/pokemon/froslass/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_4_CROSS_EVOS
#endif //P_FAMILY_SNORUNT
@@ -5304,6 +8861,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Spheal[] = INCBIN_U8("graphics/pokemon/spheal/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Spheal[] = INCBIN_COMP("graphics/pokemon/spheal/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Spheal[] = INCBIN_U32("graphics/pokemon/spheal/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Spheal[] = INCBIN_U32("graphics/pokemon/spheal/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Sealeo[] = INCBIN_U32("graphics/pokemon/sealeo/anim_front.4bpp.lz");
const u32 gMonPalette_Sealeo[] = INCBIN_U32("graphics/pokemon/sealeo/normal.gbapal.lz");
@@ -5313,6 +8877,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Sealeo[] = INCBIN_U8("graphics/pokemon/sealeo/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Sealeo[] = INCBIN_COMP("graphics/pokemon/sealeo/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Sealeo[] = INCBIN_U32("graphics/pokemon/sealeo/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Sealeo[] = INCBIN_U32("graphics/pokemon/sealeo/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Walrein[] = INCBIN_U32("graphics/pokemon/walrein/anim_front.4bpp.lz");
const u32 gMonPalette_Walrein[] = INCBIN_U32("graphics/pokemon/walrein/normal.gbapal.lz");
@@ -5322,6 +8893,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Walrein[] = INCBIN_U8("graphics/pokemon/walrein/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Walrein[] = INCBIN_COMP("graphics/pokemon/walrein/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Walrein[] = INCBIN_U32("graphics/pokemon/walrein/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Walrein[] = INCBIN_U32("graphics/pokemon/walrein/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SPHEAL
#if P_FAMILY_CLAMPERL
@@ -5333,6 +8911,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Clamperl[] = INCBIN_U8("graphics/pokemon/clamperl/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Clamperl[] = INCBIN_COMP("graphics/pokemon/clamperl/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Clamperl[] = INCBIN_U32("graphics/pokemon/clamperl/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Clamperl[] = INCBIN_U32("graphics/pokemon/clamperl/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Huntail[] = INCBIN_U32("graphics/pokemon/huntail/anim_front.4bpp.lz");
const u32 gMonPalette_Huntail[] = INCBIN_U32("graphics/pokemon/huntail/normal.gbapal.lz");
@@ -5342,6 +8927,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Huntail[] = INCBIN_U8("graphics/pokemon/huntail/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Huntail[] = INCBIN_COMP("graphics/pokemon/huntail/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Huntail[] = INCBIN_U32("graphics/pokemon/huntail/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Huntail[] = INCBIN_U32("graphics/pokemon/huntail/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Gorebyss[] = INCBIN_U32("graphics/pokemon/gorebyss/anim_front.4bpp.lz");
const u32 gMonPalette_Gorebyss[] = INCBIN_U32("graphics/pokemon/gorebyss/normal.gbapal.lz");
@@ -5351,6 +8943,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Gorebyss[] = INCBIN_U8("graphics/pokemon/gorebyss/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Gorebyss[] = INCBIN_COMP("graphics/pokemon/gorebyss/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Gorebyss[] = INCBIN_U32("graphics/pokemon/gorebyss/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Gorebyss[] = INCBIN_U32("graphics/pokemon/gorebyss/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_CLAMPERL
#if P_FAMILY_RELICANTH
@@ -5362,6 +8961,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Relicanth[] = INCBIN_U8("graphics/pokemon/relicanth/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Relicanth[] = INCBIN_COMP("graphics/pokemon/relicanth/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Relicanth[] = INCBIN_U32("graphics/pokemon/relicanth/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Relicanth[] = INCBIN_U32("graphics/pokemon/relicanth/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_RelicanthF[] = INCBIN_U32("graphics/pokemon/relicanth/anim_frontf.4bpp.lz");
const u32 gMonBackPic_RelicanthF[] = INCBIN_U32("graphics/pokemon/relicanth/backf.4bpp.lz");
@@ -5376,6 +8982,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Luvdisc[] = INCBIN_U8("graphics/pokemon/luvdisc/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Luvdisc[] = INCBIN_COMP("graphics/pokemon/luvdisc/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Luvdisc[] = INCBIN_U32("graphics/pokemon/luvdisc/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Luvdisc[] = INCBIN_U32("graphics/pokemon/luvdisc/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_LUVDISC
#if P_FAMILY_BAGON
@@ -5387,6 +9000,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Bagon[] = INCBIN_U8("graphics/pokemon/bagon/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Bagon[] = INCBIN_COMP("graphics/pokemon/bagon/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Bagon[] = INCBIN_U32("graphics/pokemon/bagon/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Bagon[] = INCBIN_U32("graphics/pokemon/bagon/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Shelgon[] = INCBIN_U32("graphics/pokemon/shelgon/anim_front.4bpp.lz");
const u32 gMonPalette_Shelgon[] = INCBIN_U32("graphics/pokemon/shelgon/normal.gbapal.lz");
@@ -5396,6 +9016,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Shelgon[] = INCBIN_U8("graphics/pokemon/shelgon/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Shelgon[] = INCBIN_COMP("graphics/pokemon/shelgon/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Shelgon[] = INCBIN_U32("graphics/pokemon/shelgon/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Shelgon[] = INCBIN_U32("graphics/pokemon/shelgon/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Salamence[] = INCBIN_U32("graphics/pokemon/salamence/anim_front.4bpp.lz");
const u32 gMonPalette_Salamence[] = INCBIN_U32("graphics/pokemon/salamence/normal.gbapal.lz");
@@ -5405,6 +9032,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Salamence[] = INCBIN_U8("graphics/pokemon/salamence/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Salamence[] = INCBIN_COMP("graphics/pokemon/salamence/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Salamence[] = INCBIN_U32("graphics/pokemon/salamence/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Salamence[] = INCBIN_U32("graphics/pokemon/salamence/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_MEGA_EVOLUTIONS
const u32 gMonFrontPic_SalamenceMega[] = INCBIN_U32("graphics/pokemon/salamence/mega/front.4bpp.lz");
@@ -5412,6 +9046,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_SalamenceMega[] = INCBIN_U32("graphics/pokemon/salamence/mega/back.4bpp.lz");
const u32 gMonShinyPalette_SalamenceMega[] = INCBIN_U32("graphics/pokemon/salamence/mega/shiny.gbapal.lz");
const u8 gMonIcon_SalamenceMega[] = INCBIN_U8("graphics/pokemon/salamence/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_SalamenceMega[] = INCBIN_COMP("graphics/pokemon/salamence/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_SalamenceMega[] = INCBIN_U32("graphics/pokemon/salamence/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_SalamenceMega[] = INCBIN_U32("graphics/pokemon/salamence/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#endif //P_FAMILY_BAGON
@@ -5424,6 +9065,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Beldum[] = INCBIN_U8("graphics/pokemon/beldum/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Beldum[] = INCBIN_COMP("graphics/pokemon/beldum/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Beldum[] = INCBIN_U32("graphics/pokemon/beldum/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Beldum[] = INCBIN_U32("graphics/pokemon/beldum/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Metang[] = INCBIN_U32("graphics/pokemon/metang/anim_front.4bpp.lz");
const u32 gMonPalette_Metang[] = INCBIN_U32("graphics/pokemon/metang/normal.gbapal.lz");
@@ -5433,6 +9081,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Metang[] = INCBIN_U8("graphics/pokemon/metang/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Metang[] = INCBIN_COMP("graphics/pokemon/metang/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Metang[] = INCBIN_U32("graphics/pokemon/metang/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Metang[] = INCBIN_U32("graphics/pokemon/metang/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Metagross[] = INCBIN_U32("graphics/pokemon/metagross/anim_front.4bpp.lz");
const u32 gMonPalette_Metagross[] = INCBIN_U32("graphics/pokemon/metagross/normal.gbapal.lz");
@@ -5442,6 +9097,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Metagross[] = INCBIN_U8("graphics/pokemon/metagross/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Metagross[] = INCBIN_COMP("graphics/pokemon/metagross/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Metagross[] = INCBIN_U32("graphics/pokemon/metagross/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Metagross[] = INCBIN_U32("graphics/pokemon/metagross/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_MEGA_EVOLUTIONS
const u32 gMonFrontPic_MetagrossMega[] = INCBIN_U32("graphics/pokemon/metagross/mega/front.4bpp.lz");
@@ -5449,6 +9111,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_MetagrossMega[] = INCBIN_U32("graphics/pokemon/metagross/mega/back.4bpp.lz");
const u32 gMonShinyPalette_MetagrossMega[] = INCBIN_U32("graphics/pokemon/metagross/mega/shiny.gbapal.lz");
const u8 gMonIcon_MetagrossMega[] = INCBIN_U8("graphics/pokemon/metagross/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_MetagrossMega[] = INCBIN_COMP("graphics/pokemon/metagross/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_MetagrossMega[] = INCBIN_U32("graphics/pokemon/metagross/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_MetagrossMega[] = INCBIN_U32("graphics/pokemon/metagross/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#endif //P_FAMILY_BELDUM
@@ -5461,6 +9130,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Regirock[] = INCBIN_U8("graphics/pokemon/regirock/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Regirock[] = INCBIN_COMP("graphics/pokemon/regirock/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Regirock[] = INCBIN_U32("graphics/pokemon/regirock/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Regirock[] = INCBIN_U32("graphics/pokemon/regirock/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_REGIROCK
#if P_FAMILY_REGICE
@@ -5472,6 +9148,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Regice[] = INCBIN_U8("graphics/pokemon/regice/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Regice[] = INCBIN_COMP("graphics/pokemon/regice/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Regice[] = INCBIN_U32("graphics/pokemon/regice/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Regice[] = INCBIN_U32("graphics/pokemon/regice/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_REGICE
#if P_FAMILY_REGISTEEL
@@ -5483,6 +9166,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Registeel[] = INCBIN_U8("graphics/pokemon/registeel/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Registeel[] = INCBIN_COMP("graphics/pokemon/registeel/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Registeel[] = INCBIN_U32("graphics/pokemon/registeel/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Registeel[] = INCBIN_U32("graphics/pokemon/registeel/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_REGISTEEL
#if P_FAMILY_LATIAS
@@ -5494,6 +9184,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Latias[] = INCBIN_U8("graphics/pokemon/latias/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Latias[] = INCBIN_COMP("graphics/pokemon/latias/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Latias[] = INCBIN_U32("graphics/pokemon/latias/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Latias[] = INCBIN_U32("graphics/pokemon/latias/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_MEGA_EVOLUTIONS
const u32 gMonFrontPic_LatiasMega[] = INCBIN_U32("graphics/pokemon/latias/mega/front.4bpp.lz");
@@ -5501,6 +9198,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_LatiasMega[] = INCBIN_U32("graphics/pokemon/latias/mega/back.4bpp.lz");
const u32 gMonShinyPalette_LatiasMega[] = INCBIN_U32("graphics/pokemon/latias/mega/shiny.gbapal.lz");
const u8 gMonIcon_LatiasMega[] = INCBIN_U8("graphics/pokemon/latias/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_LatiasMega[] = INCBIN_COMP("graphics/pokemon/latias/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_LatiasMega[] = INCBIN_U32("graphics/pokemon/latias/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_LatiasMega[] = INCBIN_U32("graphics/pokemon/latias/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#endif //P_FAMILY_LATIAS
@@ -5513,6 +9217,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Latios[] = INCBIN_U8("graphics/pokemon/latios/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Latios[] = INCBIN_COMP("graphics/pokemon/latios/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Latios[] = INCBIN_U32("graphics/pokemon/latios/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Latios[] = INCBIN_U32("graphics/pokemon/latios/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_MEGA_EVOLUTIONS
const u32 gMonFrontPic_LatiosMega[] = INCBIN_U32("graphics/pokemon/latios/mega/front.4bpp.lz");
@@ -5520,6 +9231,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_LatiosMega[] = INCBIN_U32("graphics/pokemon/latios/mega/back.4bpp.lz");
const u32 gMonShinyPalette_LatiosMega[] = INCBIN_U32("graphics/pokemon/latios/mega/shiny.gbapal.lz");
const u8 gMonIcon_LatiosMega[] = INCBIN_U8("graphics/pokemon/latios/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_LatiosMega[] = INCBIN_COMP("graphics/pokemon/latios/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_LatiosMega[] = INCBIN_U32("graphics/pokemon/latios/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_LatiosMega[] = INCBIN_U32("graphics/pokemon/latios/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#endif //P_FAMILY_LATIOS
@@ -5532,6 +9250,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Kyogre[] = INCBIN_U8("graphics/pokemon/kyogre/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Kyogre[] = INCBIN_COMP("graphics/pokemon/kyogre/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Kyogre[] = INCBIN_U32("graphics/pokemon/kyogre/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Kyogre[] = INCBIN_U32("graphics/pokemon/kyogre/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_PRIMAL_REVERSIONS
const u32 gMonFrontPic_KyogrePrimal[] = INCBIN_U32("graphics/pokemon/kyogre/primal/front.4bpp.lz");
@@ -5539,6 +9264,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_KyogrePrimal[] = INCBIN_U32("graphics/pokemon/kyogre/primal/back.4bpp.lz");
const u32 gMonShinyPalette_KyogrePrimal[] = INCBIN_U32("graphics/pokemon/kyogre/primal/shiny.gbapal.lz");
const u8 gMonIcon_KyogrePrimal[] = INCBIN_U8("graphics/pokemon/kyogre/primal/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_KyogrePrimal[] = INCBIN_COMP("graphics/pokemon/kyogre/primal/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_KyogrePrimal[] = INCBIN_U32("graphics/pokemon/kyogre/primal/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_KyogrePrimal[] = INCBIN_U32("graphics/pokemon/kyogre/primal/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_PRIMAL_REVERSIONS
#endif //P_FAMILY_KYOGRE
@@ -5551,6 +9283,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Groudon[] = INCBIN_U8("graphics/pokemon/groudon/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Groudon[] = INCBIN_COMP("graphics/pokemon/groudon/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Groudon[] = INCBIN_U32("graphics/pokemon/groudon/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Groudon[] = INCBIN_U32("graphics/pokemon/groudon/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_PRIMAL_REVERSIONS
const u32 gMonFrontPic_GroudonPrimal[] = INCBIN_U32("graphics/pokemon/groudon/primal/front.4bpp.lz");
@@ -5558,6 +9297,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_GroudonPrimal[] = INCBIN_U32("graphics/pokemon/groudon/primal/back.4bpp.lz");
const u32 gMonShinyPalette_GroudonPrimal[] = INCBIN_U32("graphics/pokemon/groudon/primal/shiny.gbapal.lz");
const u8 gMonIcon_GroudonPrimal[] = INCBIN_U8("graphics/pokemon/groudon/primal/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_GroudonPrimal[] = INCBIN_COMP("graphics/pokemon/groudon/primal/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_GroudonPrimal[] = INCBIN_U32("graphics/pokemon/groudon/primal/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_GroudonPrimal[] = INCBIN_U32("graphics/pokemon/groudon/primal/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_PRIMAL_REVERSIONS
#endif //P_FAMILY_GROUDON
@@ -5570,6 +9316,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Rayquaza[] = INCBIN_U8("graphics/pokemon/rayquaza/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Rayquaza[] = INCBIN_COMP("graphics/pokemon/rayquaza/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Rayquaza[] = INCBIN_U32("graphics/pokemon/rayquaza/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Rayquaza[] = INCBIN_U32("graphics/pokemon/rayquaza/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_MEGA_EVOLUTIONS
const u32 gMonFrontPic_RayquazaMega[] = INCBIN_U32("graphics/pokemon/rayquaza/mega/front.4bpp.lz");
@@ -5577,6 +9330,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_RayquazaMega[] = INCBIN_U32("graphics/pokemon/rayquaza/mega/back.4bpp.lz");
const u32 gMonShinyPalette_RayquazaMega[] = INCBIN_U32("graphics/pokemon/rayquaza/mega/shiny.gbapal.lz");
const u8 gMonIcon_RayquazaMega[] = INCBIN_U8("graphics/pokemon/rayquaza/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_RayquazaMega[] = INCBIN_COMP("graphics/pokemon/rayquaza/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_RayquazaMega[] = INCBIN_U32("graphics/pokemon/rayquaza/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_RayquazaMega[] = INCBIN_U32("graphics/pokemon/rayquaza/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#endif //P_FAMILY_RAYQUAZA
@@ -5589,6 +9349,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Jirachi[] = INCBIN_U8("graphics/pokemon/jirachi/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Jirachi[] = INCBIN_COMP("graphics/pokemon/jirachi/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Jirachi[] = INCBIN_U32("graphics/pokemon/jirachi/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Jirachi[] = INCBIN_U32("graphics/pokemon/jirachi/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_JIRACHI
#if P_FAMILY_DEOXYS
@@ -5618,6 +9385,23 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_DeoxysSpeed[] = INCBIN_U32("graphics/pokemon/deoxys/speed/back.4bpp.lz");
const u32 gMonShinyPalette_DeoxysSpeed[] = INCBIN_U32("graphics/pokemon/deoxys/speed/shiny.gbapal.lz");
const u8 gMonIcon_DeoxysSpeed[] = INCBIN_U8("graphics/pokemon/deoxys/speed/icon.4bpp");
+
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_DeoxysNormal[] = INCBIN_COMP("graphics/pokemon/deoxys/overworld.4bpp");
+ const u32 gObjectEventPic_DeoxysAttack[] = INCBIN_COMP("graphics/pokemon/deoxys/attack/overworld.4bpp");
+ const u32 gObjectEventPic_DeoxysDefense[] = INCBIN_COMP("graphics/pokemon/deoxys/defense/overworld.4bpp");
+ const u32 gObjectEventPic_DeoxysSpeed[] = INCBIN_COMP("graphics/pokemon/deoxys/speed/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_DeoxysNormal[] = INCBIN_U32("graphics/pokemon/deoxys/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_DeoxysAttack[] = INCBIN_U32("graphics/pokemon/deoxys/attack/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_DeoxysDefense[] = INCBIN_U32("graphics/pokemon/deoxys/defense/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_DeoxysSpeed[] = INCBIN_U32("graphics/pokemon/deoxys/speed/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_DeoxysNormal[] = INCBIN_U32("graphics/pokemon/deoxys/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_DeoxysAttack[] = INCBIN_U32("graphics/pokemon/deoxys/attack/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_DeoxysDefense[] = INCBIN_U32("graphics/pokemon/deoxys/defense/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_DeoxysSpeed[] = INCBIN_U32("graphics/pokemon/deoxys/speed/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_DEOXYS
#if P_FAMILY_TURTWIG
@@ -5629,6 +9413,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Turtwig[] = INCBIN_U8("graphics/pokemon/turtwig/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Turtwig[] = INCBIN_COMP("graphics/pokemon/turtwig/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Turtwig[] = INCBIN_U32("graphics/pokemon/turtwig/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Turtwig[] = INCBIN_U32("graphics/pokemon/turtwig/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Grotle[] = INCBIN_U32("graphics/pokemon/grotle/anim_front.4bpp.lz");
const u32 gMonPalette_Grotle[] = INCBIN_U32("graphics/pokemon/grotle/normal.gbapal.lz");
@@ -5638,6 +9429,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Grotle[] = INCBIN_U8("graphics/pokemon/grotle/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Grotle[] = INCBIN_COMP("graphics/pokemon/grotle/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Grotle[] = INCBIN_U32("graphics/pokemon/grotle/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Grotle[] = INCBIN_U32("graphics/pokemon/grotle/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Torterra[] = INCBIN_U32("graphics/pokemon/torterra/anim_front.4bpp.lz");
const u32 gMonPalette_Torterra[] = INCBIN_U32("graphics/pokemon/torterra/normal.gbapal.lz");
@@ -5647,6 +9445,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Torterra[] = INCBIN_U8("graphics/pokemon/torterra/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Torterra[] = INCBIN_COMP("graphics/pokemon/torterra/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Torterra[] = INCBIN_U32("graphics/pokemon/torterra/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Torterra[] = INCBIN_U32("graphics/pokemon/torterra/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_TURTWIG
#if P_FAMILY_CHIMCHAR
@@ -5658,6 +9463,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Chimchar[] = INCBIN_U8("graphics/pokemon/chimchar/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Chimchar[] = INCBIN_COMP("graphics/pokemon/chimchar/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Chimchar[] = INCBIN_U32("graphics/pokemon/chimchar/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Chimchar[] = INCBIN_U32("graphics/pokemon/chimchar/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Monferno[] = INCBIN_U32("graphics/pokemon/monferno/anim_front.4bpp.lz");
const u32 gMonPalette_Monferno[] = INCBIN_U32("graphics/pokemon/monferno/normal.gbapal.lz");
@@ -5667,6 +9479,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Monferno[] = INCBIN_U8("graphics/pokemon/monferno/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Monferno[] = INCBIN_COMP("graphics/pokemon/monferno/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Monferno[] = INCBIN_U32("graphics/pokemon/monferno/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Monferno[] = INCBIN_U32("graphics/pokemon/monferno/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Infernape[] = INCBIN_U32("graphics/pokemon/infernape/anim_front.4bpp.lz");
const u32 gMonPalette_Infernape[] = INCBIN_U32("graphics/pokemon/infernape/normal.gbapal.lz");
@@ -5676,6 +9495,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Infernape[] = INCBIN_U8("graphics/pokemon/infernape/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Infernape[] = INCBIN_COMP("graphics/pokemon/infernape/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Infernape[] = INCBIN_U32("graphics/pokemon/infernape/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Infernape[] = INCBIN_U32("graphics/pokemon/infernape/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_CHIMCHAR
#if P_FAMILY_PIPLUP
@@ -5687,6 +9513,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Piplup[] = INCBIN_U8("graphics/pokemon/piplup/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Piplup[] = INCBIN_COMP("graphics/pokemon/piplup/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Piplup[] = INCBIN_U32("graphics/pokemon/piplup/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Piplup[] = INCBIN_U32("graphics/pokemon/piplup/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Prinplup[] = INCBIN_U32("graphics/pokemon/prinplup/anim_front.4bpp.lz");
const u32 gMonPalette_Prinplup[] = INCBIN_U32("graphics/pokemon/prinplup/normal.gbapal.lz");
@@ -5696,6 +9529,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Prinplup[] = INCBIN_U8("graphics/pokemon/prinplup/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Prinplup[] = INCBIN_COMP("graphics/pokemon/prinplup/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Prinplup[] = INCBIN_U32("graphics/pokemon/prinplup/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Prinplup[] = INCBIN_U32("graphics/pokemon/prinplup/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Empoleon[] = INCBIN_U32("graphics/pokemon/empoleon/anim_front.4bpp.lz");
const u32 gMonPalette_Empoleon[] = INCBIN_U32("graphics/pokemon/empoleon/normal.gbapal.lz");
@@ -5705,6 +9545,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Empoleon[] = INCBIN_U8("graphics/pokemon/empoleon/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Empoleon[] = INCBIN_COMP("graphics/pokemon/empoleon/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Empoleon[] = INCBIN_U32("graphics/pokemon/empoleon/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Empoleon[] = INCBIN_U32("graphics/pokemon/empoleon/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_PIPLUP
#if P_FAMILY_STARLY
@@ -5716,6 +9563,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Starly[] = INCBIN_U8("graphics/pokemon/starly/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Starly[] = INCBIN_COMP("graphics/pokemon/starly/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Starly[] = INCBIN_U32("graphics/pokemon/starly/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Starly[] = INCBIN_U32("graphics/pokemon/starly/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_StarlyF[] = INCBIN_U32("graphics/pokemon/starly/anim_frontf.4bpp.lz");
const u32 gMonBackPic_StarlyF[] = INCBIN_U32("graphics/pokemon/starly/backf.4bpp.lz");
@@ -5728,6 +9582,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Staravia[] = INCBIN_U8("graphics/pokemon/staravia/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Staravia[] = INCBIN_COMP("graphics/pokemon/staravia/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Staravia[] = INCBIN_U32("graphics/pokemon/staravia/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Staravia[] = INCBIN_U32("graphics/pokemon/staravia/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_StaraviaF[] = INCBIN_U32("graphics/pokemon/staravia/anim_frontf.4bpp.lz");
const u32 gMonBackPic_StaraviaF[] = INCBIN_U32("graphics/pokemon/staravia/back.4bpp.lz");
@@ -5740,6 +9601,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Staraptor[] = INCBIN_U8("graphics/pokemon/staraptor/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Staraptor[] = INCBIN_COMP("graphics/pokemon/staraptor/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Staraptor[] = INCBIN_U32("graphics/pokemon/staraptor/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Staraptor[] = INCBIN_U32("graphics/pokemon/staraptor/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_StaraptorF[] = INCBIN_U32("graphics/pokemon/staraptor/anim_frontf.4bpp.lz");
#endif //P_FAMILY_STARLY
@@ -5753,6 +9621,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Bidoof[] = INCBIN_U8("graphics/pokemon/bidoof/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Bidoof[] = INCBIN_COMP("graphics/pokemon/bidoof/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Bidoof[] = INCBIN_U32("graphics/pokemon/bidoof/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Bidoof[] = INCBIN_U32("graphics/pokemon/bidoof/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_BidoofF[] = INCBIN_U32("graphics/pokemon/bidoof/anim_frontf.4bpp.lz");
const u32 gMonBackPic_BidoofF[] = INCBIN_U32("graphics/pokemon/bidoof/backf.4bpp.lz");
@@ -5765,6 +9640,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Bibarel[] = INCBIN_U8("graphics/pokemon/bibarel/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Bibarel[] = INCBIN_COMP("graphics/pokemon/bibarel/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Bibarel[] = INCBIN_U32("graphics/pokemon/bibarel/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Bibarel[] = INCBIN_U32("graphics/pokemon/bibarel/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_BibarelF[] = INCBIN_U32("graphics/pokemon/bibarel/anim_frontf.4bpp.lz");
#endif //P_FAMILY_BIDOOF
@@ -5778,6 +9660,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Kricketot[] = INCBIN_U8("graphics/pokemon/kricketot/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Kricketot[] = INCBIN_COMP("graphics/pokemon/kricketot/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Kricketot[] = INCBIN_U32("graphics/pokemon/kricketot/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Kricketot[] = INCBIN_U32("graphics/pokemon/kricketot/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_KricketotF[] = INCBIN_U32("graphics/pokemon/kricketot/anim_frontf.4bpp.lz");
const u32 gMonBackPic_KricketotF[] = INCBIN_U32("graphics/pokemon/kricketot/backf.4bpp.lz");
@@ -5790,6 +9679,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Kricketune[] = INCBIN_U8("graphics/pokemon/kricketune/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Kricketune[] = INCBIN_COMP("graphics/pokemon/kricketune/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Kricketune[] = INCBIN_U32("graphics/pokemon/kricketune/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Kricketune[] = INCBIN_U32("graphics/pokemon/kricketune/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_KricketuneF[] = INCBIN_U32("graphics/pokemon/kricketune/anim_frontf.4bpp.lz");
const u32 gMonBackPic_KricketuneF[] = INCBIN_U32("graphics/pokemon/kricketune/backf.4bpp.lz");
@@ -5804,6 +9700,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Shinx[] = INCBIN_U8("graphics/pokemon/shinx/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Shinx[] = INCBIN_COMP("graphics/pokemon/shinx/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Shinx[] = INCBIN_U32("graphics/pokemon/shinx/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Shinx[] = INCBIN_U32("graphics/pokemon/shinx/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_ShinxF[] = INCBIN_U32("graphics/pokemon/shinx/anim_frontf.4bpp.lz");
const u32 gMonBackPic_ShinxF[] = INCBIN_U32("graphics/pokemon/shinx/backf.4bpp.lz");
@@ -5816,6 +9719,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Luxio[] = INCBIN_U8("graphics/pokemon/luxio/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Luxio[] = INCBIN_COMP("graphics/pokemon/luxio/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Luxio[] = INCBIN_U32("graphics/pokemon/luxio/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Luxio[] = INCBIN_U32("graphics/pokemon/luxio/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_LuxioF[] = INCBIN_U32("graphics/pokemon/luxio/anim_frontf.4bpp.lz");
const u32 gMonBackPic_LuxioF[] = INCBIN_U32("graphics/pokemon/luxio/backf.4bpp.lz");
@@ -5828,6 +9738,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Luxray[] = INCBIN_U8("graphics/pokemon/luxray/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Luxray[] = INCBIN_COMP("graphics/pokemon/luxray/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Luxray[] = INCBIN_U32("graphics/pokemon/luxray/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Luxray[] = INCBIN_U32("graphics/pokemon/luxray/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_LuxrayF[] = INCBIN_U32("graphics/pokemon/luxray/anim_frontf.4bpp.lz");
const u32 gMonBackPic_LuxrayF[] = INCBIN_U32("graphics/pokemon/luxray/backf.4bpp.lz");
@@ -5842,6 +9759,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Cranidos[] = INCBIN_U8("graphics/pokemon/cranidos/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Cranidos[] = INCBIN_COMP("graphics/pokemon/cranidos/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Cranidos[] = INCBIN_U32("graphics/pokemon/cranidos/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Cranidos[] = INCBIN_U32("graphics/pokemon/cranidos/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Rampardos[] = INCBIN_U32("graphics/pokemon/rampardos/anim_front.4bpp.lz");
const u32 gMonPalette_Rampardos[] = INCBIN_U32("graphics/pokemon/rampardos/normal.gbapal.lz");
@@ -5851,6 +9775,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Rampardos[] = INCBIN_U8("graphics/pokemon/rampardos/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Rampardos[] = INCBIN_COMP("graphics/pokemon/rampardos/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Rampardos[] = INCBIN_U32("graphics/pokemon/rampardos/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Rampardos[] = INCBIN_U32("graphics/pokemon/rampardos/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_CRANIDOS
#if P_FAMILY_SHIELDON
@@ -5862,6 +9793,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Shieldon[] = INCBIN_U8("graphics/pokemon/shieldon/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Shieldon[] = INCBIN_COMP("graphics/pokemon/shieldon/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Shieldon[] = INCBIN_U32("graphics/pokemon/shieldon/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Shieldon[] = INCBIN_U32("graphics/pokemon/shieldon/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Bastiodon[] = INCBIN_U32("graphics/pokemon/bastiodon/anim_front.4bpp.lz");
const u32 gMonPalette_Bastiodon[] = INCBIN_U32("graphics/pokemon/bastiodon/normal.gbapal.lz");
@@ -5871,6 +9809,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Bastiodon[] = INCBIN_U8("graphics/pokemon/bastiodon/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Bastiodon[] = INCBIN_COMP("graphics/pokemon/bastiodon/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Bastiodon[] = INCBIN_U32("graphics/pokemon/bastiodon/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Bastiodon[] = INCBIN_U32("graphics/pokemon/bastiodon/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SHIELDON
#if P_FAMILY_BURMY
@@ -5895,6 +9840,20 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonShinyPalette_BurmyTrashCloak[] = INCBIN_U32("graphics/pokemon/burmy/trash_cloak/shiny.gbapal.lz");
const u8 gMonIcon_BurmyTrashCloak[] = INCBIN_U8("graphics/pokemon/burmy/trash_cloak/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_BurmyPlantCloak[] = INCBIN_COMP("graphics/pokemon/burmy/overworld.4bpp");
+ const u32 gObjectEventPic_BurmySandyCloak[] = INCBIN_COMP("graphics/pokemon/burmy/sandy_cloak/overworld.4bpp");
+ const u32 gObjectEventPic_BurmyTrashCloak[] = INCBIN_COMP("graphics/pokemon/burmy/trash_cloak/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_BurmyPlantCloak[] = INCBIN_U32("graphics/pokemon/burmy/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_BurmySandyCloak[] = INCBIN_U32("graphics/pokemon/burmy/sandy_cloak/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_BurmyTrashCloak[] = INCBIN_U32("graphics/pokemon/burmy/trash_cloak/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_BurmyPlantCloak[] = INCBIN_U32("graphics/pokemon/burmy/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_BurmySandyCloak[] = INCBIN_U32("graphics/pokemon/burmy/sandy_cloak/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_BurmyTrashCloak[] = INCBIN_U32("graphics/pokemon/burmy/trash_cloak/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
+
const u32 gMonFrontPic_WormadamPlantCloak[] = INCBIN_U32("graphics/pokemon/wormadam/anim_front.4bpp.lz");
const u32 gMonPalette_WormadamPlantCloak[] = INCBIN_U32("graphics/pokemon/wormadam/normal.gbapal.lz");
const u32 gMonBackPic_WormadamPlantCloak[] = INCBIN_U32("graphics/pokemon/wormadam/back.4bpp.lz");
@@ -5916,6 +9875,20 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonShinyPalette_WormadamTrashCloak[] = INCBIN_U32("graphics/pokemon/wormadam/trash_cloak/shiny.gbapal.lz");
const u8 gMonIcon_WormadamTrashCloak[] = INCBIN_U8("graphics/pokemon/wormadam/trash_cloak/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_WormadamPlantCloak[] = INCBIN_COMP("graphics/pokemon/wormadam/overworld.4bpp");
+ const u32 gObjectEventPic_WormadamSandyCloak[] = INCBIN_COMP("graphics/pokemon/wormadam/sandy_cloak/overworld.4bpp");
+ const u32 gObjectEventPic_WormadamTrashCloak[] = INCBIN_COMP("graphics/pokemon/wormadam/trash_cloak/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_WormadamPlantCloak[] = INCBIN_U32("graphics/pokemon/wormadam/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_WormadamSandyCloak[] = INCBIN_U32("graphics/pokemon/wormadam/sandy_cloak/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_WormadamTrashCloak[] = INCBIN_U32("graphics/pokemon/wormadam/trash_cloak/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_WormadamPlantCloak[] = INCBIN_U32("graphics/pokemon/wormadam/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_WormadamSandyCloak[] = INCBIN_U32("graphics/pokemon/wormadam/sandy_cloak/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_WormadamTrashCloak[] = INCBIN_U32("graphics/pokemon/wormadam/trash_cloak/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
+
const u32 gMonFrontPic_Mothim[] = INCBIN_U32("graphics/pokemon/mothim/anim_front.4bpp.lz");
const u32 gMonPalette_Mothim[] = INCBIN_U32("graphics/pokemon/mothim/normal.gbapal.lz");
const u32 gMonBackPic_Mothim[] = INCBIN_U32("graphics/pokemon/mothim/back.4bpp.lz");
@@ -5924,6 +9897,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Mothim[] = INCBIN_U8("graphics/pokemon/mothim/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Mothim[] = INCBIN_COMP("graphics/pokemon/mothim/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Mothim[] = INCBIN_U32("graphics/pokemon/mothim/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Mothim[] = INCBIN_U32("graphics/pokemon/mothim/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_BURMY
#if P_FAMILY_COMBEE
@@ -5935,9 +9915,19 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Combee[] = INCBIN_U8("graphics/pokemon/combee/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Combee[] = INCBIN_COMP("graphics/pokemon/combee/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Combee[] = INCBIN_U32("graphics/pokemon/combee/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Combee[] = INCBIN_U32("graphics/pokemon/combee/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonPalette_CombeeF[] = INCBIN_U32("graphics/pokemon/combee/normalf.gbapal.lz");
const u32 gMonShinyPalette_CombeeF[] = INCBIN_U32("graphics/pokemon/combee/shinyf.gbapal.lz");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_CombeeF[] = INCBIN_COMP("graphics/pokemon/combee/followerf.4bpp");
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Vespiquen[] = INCBIN_U32("graphics/pokemon/vespiquen/anim_front.4bpp.lz");
const u32 gMonPalette_Vespiquen[] = INCBIN_U32("graphics/pokemon/vespiquen/normal.gbapal.lz");
@@ -5947,6 +9937,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Vespiquen[] = INCBIN_U8("graphics/pokemon/vespiquen/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Vespiquen[] = INCBIN_COMP("graphics/pokemon/vespiquen/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Vespiquen[] = INCBIN_U32("graphics/pokemon/vespiquen/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Vespiquen[] = INCBIN_U32("graphics/pokemon/vespiquen/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_COMBEE
#if P_FAMILY_PACHIRISU
@@ -5958,6 +9955,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Pachirisu[] = INCBIN_U8("graphics/pokemon/pachirisu/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Pachirisu[] = INCBIN_COMP("graphics/pokemon/pachirisu/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Pachirisu[] = INCBIN_U32("graphics/pokemon/pachirisu/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Pachirisu[] = INCBIN_U32("graphics/pokemon/pachirisu/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_PachirisuF[] = INCBIN_U32("graphics/pokemon/pachirisu/anim_frontf.4bpp.lz");
#endif //P_FAMILY_PACHIRISU
@@ -5971,6 +9975,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Buizel[] = INCBIN_U8("graphics/pokemon/buizel/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Buizel[] = INCBIN_COMP("graphics/pokemon/buizel/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Buizel[] = INCBIN_U32("graphics/pokemon/buizel/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Buizel[] = INCBIN_U32("graphics/pokemon/buizel/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonBackPic_BuizelF[] = INCBIN_U32("graphics/pokemon/buizel/backf.4bpp.lz");
@@ -5982,6 +9993,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Floatzel[] = INCBIN_U8("graphics/pokemon/floatzel/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Floatzel[] = INCBIN_COMP("graphics/pokemon/floatzel/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Floatzel[] = INCBIN_U32("graphics/pokemon/floatzel/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Floatzel[] = INCBIN_U32("graphics/pokemon/floatzel/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonBackPic_FloatzelF[] = INCBIN_U32("graphics/pokemon/floatzel/backf.4bpp.lz");
#endif //P_FAMILY_BUIZEL
@@ -5995,6 +10013,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Cherubi[] = INCBIN_U8("graphics/pokemon/cherubi/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Cherubi[] = INCBIN_COMP("graphics/pokemon/cherubi/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Cherubi[] = INCBIN_U32("graphics/pokemon/cherubi/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Cherubi[] = INCBIN_U32("graphics/pokemon/cherubi/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_CherrimOvercast[] = INCBIN_U32("graphics/pokemon/cherrim/anim_front.4bpp.lz");
const u32 gMonPalette_CherrimOvercast[] = INCBIN_U32("graphics/pokemon/cherrim/normal.gbapal.lz");
@@ -6010,6 +10035,17 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_CherrimSunshine[] = INCBIN_U32("graphics/pokemon/cherrim/sunshine/back.4bpp.lz");
const u32 gMonShinyPalette_CherrimSunshine[] = INCBIN_U32("graphics/pokemon/cherrim/sunshine/shiny.gbapal.lz");
const u8 gMonIcon_CherrimSunshine[] = INCBIN_U8("graphics/pokemon/cherrim/sunshine/icon.4bpp");
+
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_CherrimOvercast[] = INCBIN_COMP("graphics/pokemon/cherrim/overworld.4bpp");
+ // const u32 gObjectEventPic_CherrimSunshine[] = INCBIN_COMP("graphics/pokemon/cherrim/sunshine/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_CherrimOvercast[] = INCBIN_U32("graphics/pokemon/cherrim/overworld_normal.gbapal.lz");
+ // const u32 gOverworldPalette_CherrimSunshine[] = INCBIN_U32("graphics/pokemon/cherrim/sunshine/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_CherrimOvercast[] = INCBIN_U32("graphics/pokemon/cherrim/overworld_shiny.gbapal.lz");
+ // const u32 gShinyOverworldPalette_CherrimSunshine[] = INCBIN_U32("graphics/pokemon/cherrim/sunshine/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_CHERUBI
#if P_FAMILY_SHELLOS
@@ -6028,6 +10064,17 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonShinyPalette_ShellosEastSea[] = INCBIN_U32("graphics/pokemon/shellos/east_sea/shiny.gbapal.lz");
const u8 gMonIcon_ShellosEastSea[] = INCBIN_U8("graphics/pokemon/shellos/east_sea/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_ShellosWestSea[] = INCBIN_COMP("graphics/pokemon/shellos/overworld.4bpp");
+ const u32 gObjectEventPic_ShellosEastSea[] = INCBIN_COMP("graphics/pokemon/shellos/east_sea/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_ShellosWestSea[] = INCBIN_U32("graphics/pokemon/shellos/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_ShellosEastSea[] = INCBIN_U32("graphics/pokemon/shellos/east_sea/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_ShellosWestSea[] = INCBIN_U32("graphics/pokemon/shellos/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_ShellosEastSea[] = INCBIN_U32("graphics/pokemon/shellos/east_sea/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
+
const u32 gMonFrontPic_GastrodonWestSea[] = INCBIN_U32("graphics/pokemon/gastrodon/anim_front.4bpp.lz");
const u32 gMonPalette_GastrodonWestSea[] = INCBIN_U32("graphics/pokemon/gastrodon/normal.gbapal.lz");
const u32 gMonBackPic_GastrodonWestSea[] = INCBIN_U32("graphics/pokemon/gastrodon/back.4bpp.lz");
@@ -6042,6 +10089,16 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_GastrodonEastSea[] = INCBIN_U32("graphics/pokemon/gastrodon/east_sea/back.4bpp.lz");
const u32 gMonShinyPalette_GastrodonEastSea[] = INCBIN_U32("graphics/pokemon/gastrodon/east_sea/shiny.gbapal.lz");
const u8 gMonIcon_GastrodonEastSea[] = INCBIN_U8("graphics/pokemon/gastrodon/east_sea/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_GastrodonWestSea[] = INCBIN_COMP("graphics/pokemon/gastrodon/overworld.4bpp");
+ const u32 gObjectEventPic_GastrodonEastSea[] = INCBIN_COMP("graphics/pokemon/gastrodon/east_sea/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_GastrodonWestSea[] = INCBIN_U32("graphics/pokemon/gastrodon/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_GastrodonEastSea[] = INCBIN_U32("graphics/pokemon/gastrodon/east_sea/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_GastrodonWestSea[] = INCBIN_U32("graphics/pokemon/gastrodon/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_GastrodonEastSea[] = INCBIN_U32("graphics/pokemon/gastrodon/east_sea/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SHELLOS
#if P_FAMILY_DRIFLOON
@@ -6053,6 +10110,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Drifloon[] = INCBIN_U8("graphics/pokemon/drifloon/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Drifloon[] = INCBIN_COMP("graphics/pokemon/drifloon/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Drifloon[] = INCBIN_U32("graphics/pokemon/drifloon/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Drifloon[] = INCBIN_U32("graphics/pokemon/drifloon/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Drifblim[] = INCBIN_U32("graphics/pokemon/drifblim/anim_front.4bpp.lz");
const u32 gMonPalette_Drifblim[] = INCBIN_U32("graphics/pokemon/drifblim/normal.gbapal.lz");
@@ -6062,6 +10126,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Drifblim[] = INCBIN_U8("graphics/pokemon/drifblim/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Drifblim[] = INCBIN_COMP("graphics/pokemon/drifblim/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Drifblim[] = INCBIN_U32("graphics/pokemon/drifblim/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Drifblim[] = INCBIN_U32("graphics/pokemon/drifblim/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_DRIFLOON
#if P_FAMILY_BUNEARY
@@ -6073,6 +10144,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Buneary[] = INCBIN_U8("graphics/pokemon/buneary/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Buneary[] = INCBIN_COMP("graphics/pokemon/buneary/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Buneary[] = INCBIN_U32("graphics/pokemon/buneary/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Buneary[] = INCBIN_U32("graphics/pokemon/buneary/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Lopunny[] = INCBIN_U32("graphics/pokemon/lopunny/anim_front.4bpp.lz");
const u32 gMonPalette_Lopunny[] = INCBIN_U32("graphics/pokemon/lopunny/normal.gbapal.lz");
@@ -6082,6 +10160,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Lopunny[] = INCBIN_U8("graphics/pokemon/lopunny/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Lopunny[] = INCBIN_COMP("graphics/pokemon/lopunny/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Lopunny[] = INCBIN_U32("graphics/pokemon/lopunny/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Lopunny[] = INCBIN_U32("graphics/pokemon/lopunny/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_MEGA_EVOLUTIONS
const u32 gMonFrontPic_LopunnyMega[] = INCBIN_U32("graphics/pokemon/lopunny/mega/front.4bpp.lz");
@@ -6089,6 +10174,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_LopunnyMega[] = INCBIN_U32("graphics/pokemon/lopunny/mega/back.4bpp.lz");
const u32 gMonShinyPalette_LopunnyMega[] = INCBIN_U32("graphics/pokemon/lopunny/mega/shiny.gbapal.lz");
const u8 gMonIcon_LopunnyMega[] = INCBIN_U8("graphics/pokemon/lopunny/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_LopunnyMega[] = INCBIN_COMP("graphics/pokemon/lopunny/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_LopunnyMega[] = INCBIN_U32("graphics/pokemon/lopunny/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_LopunnyMega[] = INCBIN_U32("graphics/pokemon/lopunny/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#endif //P_FAMILY_BUNEARY
@@ -6101,6 +10193,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Glameow[] = INCBIN_U8("graphics/pokemon/glameow/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Glameow[] = INCBIN_COMP("graphics/pokemon/glameow/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Glameow[] = INCBIN_U32("graphics/pokemon/glameow/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Glameow[] = INCBIN_U32("graphics/pokemon/glameow/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Purugly[] = INCBIN_U32("graphics/pokemon/purugly/anim_front.4bpp.lz");
const u32 gMonPalette_Purugly[] = INCBIN_U32("graphics/pokemon/purugly/normal.gbapal.lz");
@@ -6110,6 +10209,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Purugly[] = INCBIN_U8("graphics/pokemon/purugly/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Purugly[] = INCBIN_COMP("graphics/pokemon/purugly/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Purugly[] = INCBIN_U32("graphics/pokemon/purugly/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Purugly[] = INCBIN_U32("graphics/pokemon/purugly/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_GLAMEOW
#if P_FAMILY_STUNKY
@@ -6121,6 +10227,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Stunky[] = INCBIN_U8("graphics/pokemon/stunky/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Stunky[] = INCBIN_COMP("graphics/pokemon/stunky/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Stunky[] = INCBIN_U32("graphics/pokemon/stunky/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Stunky[] = INCBIN_U32("graphics/pokemon/stunky/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Skuntank[] = INCBIN_U32("graphics/pokemon/skuntank/anim_front.4bpp.lz");
const u32 gMonPalette_Skuntank[] = INCBIN_U32("graphics/pokemon/skuntank/normal.gbapal.lz");
@@ -6130,6 +10243,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Skuntank[] = INCBIN_U8("graphics/pokemon/skuntank/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Skuntank[] = INCBIN_COMP("graphics/pokemon/skuntank/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Skuntank[] = INCBIN_U32("graphics/pokemon/skuntank/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Skuntank[] = INCBIN_U32("graphics/pokemon/skuntank/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_STUNKY
#if P_FAMILY_BRONZOR
@@ -6141,6 +10261,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Bronzor[] = INCBIN_U8("graphics/pokemon/bronzor/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Bronzor[] = INCBIN_COMP("graphics/pokemon/bronzor/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Bronzor[] = INCBIN_U32("graphics/pokemon/bronzor/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Bronzor[] = INCBIN_U32("graphics/pokemon/bronzor/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Bronzong[] = INCBIN_U32("graphics/pokemon/bronzong/anim_front.4bpp.lz");
const u32 gMonPalette_Bronzong[] = INCBIN_U32("graphics/pokemon/bronzong/normal.gbapal.lz");
@@ -6150,6 +10277,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Bronzong[] = INCBIN_U8("graphics/pokemon/bronzong/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Bronzong[] = INCBIN_COMP("graphics/pokemon/bronzong/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Bronzong[] = INCBIN_U32("graphics/pokemon/bronzong/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Bronzong[] = INCBIN_U32("graphics/pokemon/bronzong/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_BRONZOR
#if P_FAMILY_CHATOT
@@ -6161,6 +10295,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Chatot[] = INCBIN_U8("graphics/pokemon/chatot/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Chatot[] = INCBIN_COMP("graphics/pokemon/chatot/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Chatot[] = INCBIN_U32("graphics/pokemon/chatot/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Chatot[] = INCBIN_U32("graphics/pokemon/chatot/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_CHATOT
#if P_FAMILY_SPIRITOMB
@@ -6172,6 +10313,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Spiritomb[] = INCBIN_U8("graphics/pokemon/spiritomb/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Spiritomb[] = INCBIN_COMP("graphics/pokemon/spiritomb/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Spiritomb[] = INCBIN_U32("graphics/pokemon/spiritomb/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Spiritomb[] = INCBIN_U32("graphics/pokemon/spiritomb/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SPIRITOMB
#if P_FAMILY_GIBLE
@@ -6183,6 +10331,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Gible[] = INCBIN_U8("graphics/pokemon/gible/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Gible[] = INCBIN_COMP("graphics/pokemon/gible/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Gible[] = INCBIN_U32("graphics/pokemon/gible/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Gible[] = INCBIN_U32("graphics/pokemon/gible/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_GibleF[] = INCBIN_U32("graphics/pokemon/gible/anim_frontf.4bpp.lz");
const u32 gMonBackPic_GibleF[] = INCBIN_U32("graphics/pokemon/gible/backf.4bpp.lz");
@@ -6195,6 +10350,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Gabite[] = INCBIN_U8("graphics/pokemon/gabite/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Gabite[] = INCBIN_COMP("graphics/pokemon/gabite/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Gabite[] = INCBIN_U32("graphics/pokemon/gabite/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Gabite[] = INCBIN_U32("graphics/pokemon/gabite/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_GabiteF[] = INCBIN_U32("graphics/pokemon/gabite/anim_frontf.4bpp.lz");
const u32 gMonBackPic_GabiteF[] = INCBIN_U32("graphics/pokemon/gabite/backf.4bpp.lz");
@@ -6207,6 +10369,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Garchomp[] = INCBIN_U8("graphics/pokemon/garchomp/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Garchomp[] = INCBIN_COMP("graphics/pokemon/garchomp/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Garchomp[] = INCBIN_U32("graphics/pokemon/garchomp/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Garchomp[] = INCBIN_U32("graphics/pokemon/garchomp/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_GarchompF[] = INCBIN_U32("graphics/pokemon/garchomp/anim_frontf.4bpp.lz");
@@ -6216,6 +10385,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_GarchompMega[] = INCBIN_U32("graphics/pokemon/garchomp/mega/back.4bpp.lz");
const u32 gMonShinyPalette_GarchompMega[] = INCBIN_U32("graphics/pokemon/garchomp/mega/shiny.gbapal.lz");
const u8 gMonIcon_GarchompMega[] = INCBIN_U8("graphics/pokemon/garchomp/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_GarchompMega[] = INCBIN_COMP("graphics/pokemon/garchomp/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_GarchompMega[] = INCBIN_U32("graphics/pokemon/garchomp/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_GarchompMega[] = INCBIN_U32("graphics/pokemon/garchomp/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#endif //P_FAMILY_GIBLE
@@ -6228,6 +10404,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Riolu[] = INCBIN_U8("graphics/pokemon/riolu/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Riolu[] = INCBIN_COMP("graphics/pokemon/riolu/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Riolu[] = INCBIN_U32("graphics/pokemon/riolu/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Riolu[] = INCBIN_U32("graphics/pokemon/riolu/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Lucario[] = INCBIN_U32("graphics/pokemon/lucario/anim_front.4bpp.lz");
const u32 gMonPalette_Lucario[] = INCBIN_U32("graphics/pokemon/lucario/normal.gbapal.lz");
@@ -6237,6 +10420,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Lucario[] = INCBIN_U8("graphics/pokemon/lucario/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Lucario[] = INCBIN_COMP("graphics/pokemon/lucario/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Lucario[] = INCBIN_U32("graphics/pokemon/lucario/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Lucario[] = INCBIN_U32("graphics/pokemon/lucario/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_MEGA_EVOLUTIONS
const u32 gMonFrontPic_LucarioMega[] = INCBIN_U32("graphics/pokemon/lucario/mega/front.4bpp.lz");
@@ -6244,6 +10434,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_LucarioMega[] = INCBIN_U32("graphics/pokemon/lucario/mega/back.4bpp.lz");
const u32 gMonShinyPalette_LucarioMega[] = INCBIN_U32("graphics/pokemon/lucario/mega/shiny.gbapal.lz");
const u8 gMonIcon_LucarioMega[] = INCBIN_U8("graphics/pokemon/lucario/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_LucarioMega[] = INCBIN_COMP("graphics/pokemon/lucario/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_LucarioMega[] = INCBIN_U32("graphics/pokemon/lucario/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_LucarioMega[] = INCBIN_U32("graphics/pokemon/lucario/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#endif //P_FAMILY_RIOLU
@@ -6256,12 +10453,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Hippopotas[] = INCBIN_U8("graphics/pokemon/hippopotas/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Hippopotas[] = INCBIN_COMP("graphics/pokemon/hippopotas/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Hippopotas[] = INCBIN_U32("graphics/pokemon/hippopotas/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Hippopotas[] = INCBIN_U32("graphics/pokemon/hippopotas/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonPalette_HippopotasF[] = INCBIN_U32("graphics/pokemon/hippopotas/normalf.gbapal.lz");
const u32 gMonShinyPalette_HippopotasF[] = INCBIN_U32("graphics/pokemon/hippopotas/shinyf.gbapal.lz");
#if P_CUSTOM_GENDER_DIFF_ICONS
const u8 gMonIcon_HippopotasF[] = INCBIN_U8("graphics/pokemon/hippopotas/iconf.4bpp");
#endif
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_HippopotasF[] = INCBIN_COMP("graphics/pokemon/hippopotas/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_HippopotasF[] = INCBIN_U32("graphics/pokemon/hippopotas/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_HippopotasF[] = INCBIN_U32("graphics/pokemon/hippopotas/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Hippowdon[] = INCBIN_U32("graphics/pokemon/hippowdon/anim_front.4bpp.lz");
const u32 gMonPalette_Hippowdon[] = INCBIN_U32("graphics/pokemon/hippowdon/normal.gbapal.lz");
@@ -6271,12 +10482,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Hippowdon[] = INCBIN_U8("graphics/pokemon/hippowdon/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Hippowdon[] = INCBIN_COMP("graphics/pokemon/hippowdon/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Hippowdon[] = INCBIN_U32("graphics/pokemon/hippowdon/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Hippowdon[] = INCBIN_U32("graphics/pokemon/hippowdon/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonPalette_HippowdonF[] = INCBIN_U32("graphics/pokemon/hippowdon/normalf.gbapal.lz");
const u32 gMonShinyPalette_HippowdonF[] = INCBIN_U32("graphics/pokemon/hippowdon/shinyf.gbapal.lz");
#if P_CUSTOM_GENDER_DIFF_ICONS
const u8 gMonIcon_HippowdonF[] = INCBIN_U8("graphics/pokemon/hippowdon/iconf.4bpp");
#endif
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_HippowdonF[] = INCBIN_COMP("graphics/pokemon/hippowdon/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_HippowdonF[] = INCBIN_U32("graphics/pokemon/hippowdon/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_HippowdonF[] = INCBIN_U32("graphics/pokemon/hippowdon/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_HIPPOPOTAS
#if P_FAMILY_SKORUPI
@@ -6288,6 +10513,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Skorupi[] = INCBIN_U8("graphics/pokemon/skorupi/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Skorupi[] = INCBIN_COMP("graphics/pokemon/skorupi/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Skorupi[] = INCBIN_U32("graphics/pokemon/skorupi/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Skorupi[] = INCBIN_U32("graphics/pokemon/skorupi/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Drapion[] = INCBIN_U32("graphics/pokemon/drapion/anim_front.4bpp.lz");
const u32 gMonPalette_Drapion[] = INCBIN_U32("graphics/pokemon/drapion/normal.gbapal.lz");
@@ -6297,6 +10529,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Drapion[] = INCBIN_U8("graphics/pokemon/drapion/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Drapion[] = INCBIN_COMP("graphics/pokemon/drapion/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Drapion[] = INCBIN_U32("graphics/pokemon/drapion/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Drapion[] = INCBIN_U32("graphics/pokemon/drapion/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SKORUPI
#if P_FAMILY_CROAGUNK
@@ -6308,6 +10547,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Croagunk[] = INCBIN_U8("graphics/pokemon/croagunk/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Croagunk[] = INCBIN_COMP("graphics/pokemon/croagunk/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Croagunk[] = INCBIN_U32("graphics/pokemon/croagunk/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Croagunk[] = INCBIN_U32("graphics/pokemon/croagunk/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_CroagunkF[] = INCBIN_U32("graphics/pokemon/croagunk/anim_frontf.4bpp.lz");
const u32 gMonBackPic_CroagunkF[] = INCBIN_U32("graphics/pokemon/croagunk/backf.4bpp.lz");
@@ -6320,6 +10566,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Toxicroak[] = INCBIN_U8("graphics/pokemon/toxicroak/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Toxicroak[] = INCBIN_COMP("graphics/pokemon/toxicroak/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Toxicroak[] = INCBIN_U32("graphics/pokemon/toxicroak/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Toxicroak[] = INCBIN_U32("graphics/pokemon/toxicroak/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_ToxicroakF[] = INCBIN_U32("graphics/pokemon/toxicroak/anim_frontf.4bpp.lz");
const u32 gMonBackPic_ToxicroakF[] = INCBIN_U32("graphics/pokemon/toxicroak/backf.4bpp.lz");
@@ -6334,6 +10587,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Carnivine[] = INCBIN_U8("graphics/pokemon/carnivine/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Carnivine[] = INCBIN_COMP("graphics/pokemon/carnivine/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Carnivine[] = INCBIN_U32("graphics/pokemon/carnivine/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Carnivine[] = INCBIN_U32("graphics/pokemon/carnivine/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_CARNIVINE
#if P_FAMILY_FINNEON
@@ -6345,6 +10605,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Finneon[] = INCBIN_U8("graphics/pokemon/finneon/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Finneon[] = INCBIN_COMP("graphics/pokemon/finneon/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Finneon[] = INCBIN_U32("graphics/pokemon/finneon/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Finneon[] = INCBIN_U32("graphics/pokemon/finneon/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_FinneonF[] = INCBIN_U32("graphics/pokemon/finneon/anim_frontf.4bpp.lz");
const u32 gMonBackPic_FinneonF[] = INCBIN_U32("graphics/pokemon/finneon/backf.4bpp.lz");
@@ -6357,6 +10624,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Lumineon[] = INCBIN_U8("graphics/pokemon/lumineon/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Lumineon[] = INCBIN_COMP("graphics/pokemon/lumineon/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Lumineon[] = INCBIN_U32("graphics/pokemon/lumineon/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Lumineon[] = INCBIN_U32("graphics/pokemon/lumineon/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_LumineonF[] = INCBIN_U32("graphics/pokemon/lumineon/anim_frontf.4bpp.lz");
const u32 gMonBackPic_LumineonF[] = INCBIN_U32("graphics/pokemon/lumineon/backf.4bpp.lz");
@@ -6371,6 +10645,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Snover[] = INCBIN_U8("graphics/pokemon/snover/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Snover[] = INCBIN_COMP("graphics/pokemon/snover/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Snover[] = INCBIN_U32("graphics/pokemon/snover/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Snover[] = INCBIN_U32("graphics/pokemon/snover/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_SnoverF[] = INCBIN_U32("graphics/pokemon/snover/anim_frontf.4bpp.lz");
const u32 gMonBackPic_SnoverF[] = INCBIN_U32("graphics/pokemon/snover/backf.4bpp.lz");
@@ -6383,6 +10664,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Abomasnow[] = INCBIN_U8("graphics/pokemon/abomasnow/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Abomasnow[] = INCBIN_COMP("graphics/pokemon/abomasnow/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Abomasnow[] = INCBIN_U32("graphics/pokemon/abomasnow/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Abomasnow[] = INCBIN_U32("graphics/pokemon/abomasnow/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_AbomasnowF[] = INCBIN_U32("graphics/pokemon/abomasnow/anim_frontf.4bpp.lz");
@@ -6392,6 +10680,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_AbomasnowMega[] = INCBIN_U32("graphics/pokemon/abomasnow/mega/back.4bpp.lz");
const u32 gMonShinyPalette_AbomasnowMega[] = INCBIN_U32("graphics/pokemon/abomasnow/mega/shiny.gbapal.lz");
const u8 gMonIcon_AbomasnowMega[] = INCBIN_U8("graphics/pokemon/abomasnow/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_AbomasnowMega[] = INCBIN_COMP("graphics/pokemon/abomasnow/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_AbomasnowMega[] = INCBIN_U32("graphics/pokemon/abomasnow/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_AbomasnowMega[] = INCBIN_U32("graphics/pokemon/abomasnow/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#endif //P_FAMILY_SNOVER
@@ -6434,6 +10729,29 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_RotomMow[] = INCBIN_U32("graphics/pokemon/rotom/mow/back.4bpp.lz");
const u32 gMonShinyPalette_RotomMow[] = INCBIN_U32("graphics/pokemon/rotom/mow/shiny.gbapal.lz");
const u8 gMonIcon_RotomMow[] = INCBIN_U8("graphics/pokemon/rotom/mow/icon.4bpp");
+
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Rotom[] = INCBIN_COMP("graphics/pokemon/rotom/overworld.4bpp");
+ const u32 gObjectEventPic_RotomHeat[] = INCBIN_COMP("graphics/pokemon/rotom/heat/overworld.4bpp");
+ const u32 gObjectEventPic_RotomWash[] = INCBIN_COMP("graphics/pokemon/rotom/wash/overworld.4bpp");
+ const u32 gObjectEventPic_RotomFrost[] = INCBIN_COMP("graphics/pokemon/rotom/frost/overworld.4bpp");
+ const u32 gObjectEventPic_RotomFan[] = INCBIN_COMP("graphics/pokemon/rotom/fan/overworld.4bpp");
+ const u32 gObjectEventPic_RotomMow[] = INCBIN_COMP("graphics/pokemon/rotom/mow/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Rotom[] = INCBIN_U32("graphics/pokemon/rotom/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_RotomHeat[] = INCBIN_U32("graphics/pokemon/rotom/heat/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_RotomWash[] = INCBIN_U32("graphics/pokemon/rotom/wash/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_RotomFrost[] = INCBIN_U32("graphics/pokemon/rotom/frost/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_RotomFan[] = INCBIN_U32("graphics/pokemon/rotom/fan/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_RotomMow[] = INCBIN_U32("graphics/pokemon/rotom/mow/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Rotom[] = INCBIN_U32("graphics/pokemon/rotom/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_RotomHeat[] = INCBIN_U32("graphics/pokemon/rotom/heat/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_RotomWash[] = INCBIN_U32("graphics/pokemon/rotom/wash/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_RotomFrost[] = INCBIN_U32("graphics/pokemon/rotom/frost/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_RotomFan[] = INCBIN_U32("graphics/pokemon/rotom/fan/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_RotomMow[] = INCBIN_U32("graphics/pokemon/rotom/mow/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_ROTOM
#if P_FAMILY_UXIE
@@ -6445,6 +10763,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Uxie[] = INCBIN_U8("graphics/pokemon/uxie/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Uxie[] = INCBIN_COMP("graphics/pokemon/uxie/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Uxie[] = INCBIN_U32("graphics/pokemon/uxie/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Uxie[] = INCBIN_U32("graphics/pokemon/uxie/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_UXIE
#if P_FAMILY_MESPRIT
@@ -6456,6 +10781,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Mesprit[] = INCBIN_U8("graphics/pokemon/mesprit/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Mesprit[] = INCBIN_COMP("graphics/pokemon/mesprit/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Mesprit[] = INCBIN_U32("graphics/pokemon/mesprit/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Mesprit[] = INCBIN_U32("graphics/pokemon/mesprit/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_MESPRIT
#if P_FAMILY_AZELF
@@ -6467,6 +10799,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Azelf[] = INCBIN_U8("graphics/pokemon/azelf/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Azelf[] = INCBIN_COMP("graphics/pokemon/azelf/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Azelf[] = INCBIN_U32("graphics/pokemon/azelf/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Azelf[] = INCBIN_U32("graphics/pokemon/azelf/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_AZELF
#if P_FAMILY_DIALGA
@@ -6478,12 +10817,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Dialga[] = INCBIN_U8("graphics/pokemon/dialga/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Dialga[] = INCBIN_COMP("graphics/pokemon/dialga/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Dialga[] = INCBIN_U32("graphics/pokemon/dialga/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Dialga[] = INCBIN_U32("graphics/pokemon/dialga/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_DialgaOrigin[] = INCBIN_U32("graphics/pokemon/dialga/origin/front.4bpp.lz");
const u32 gMonPalette_DialgaOrigin[] = INCBIN_U32("graphics/pokemon/dialga/origin/normal.gbapal.lz");
const u32 gMonBackPic_DialgaOrigin[] = INCBIN_U32("graphics/pokemon/dialga/origin/back.4bpp.lz");
const u32 gMonShinyPalette_DialgaOrigin[] = INCBIN_U32("graphics/pokemon/dialga/origin/shiny.gbapal.lz");
const u8 gMonIcon_DialgaOrigin[] = INCBIN_U8("graphics/pokemon/dialga/origin/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ 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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_DIALGA
#if P_FAMILY_PALKIA
@@ -6495,12 +10848,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Palkia[] = INCBIN_U8("graphics/pokemon/palkia/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Palkia[] = INCBIN_COMP("graphics/pokemon/palkia/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Palkia[] = INCBIN_U32("graphics/pokemon/palkia/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Palkia[] = INCBIN_U32("graphics/pokemon/palkia/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_PalkiaOrigin[] = INCBIN_U32("graphics/pokemon/palkia/origin/front.4bpp.lz");
const u32 gMonPalette_PalkiaOrigin[] = INCBIN_U32("graphics/pokemon/palkia/origin/normal.gbapal.lz");
const u32 gMonBackPic_PalkiaOrigin[] = INCBIN_U32("graphics/pokemon/palkia/origin/back.4bpp.lz");
const u32 gMonShinyPalette_PalkiaOrigin[] = INCBIN_U32("graphics/pokemon/palkia/origin/shiny.gbapal.lz");
const u8 gMonIcon_PalkiaOrigin[] = INCBIN_U8("graphics/pokemon/palkia/origin/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ 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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_PALKIA
#if P_FAMILY_HEATRAN
@@ -6512,6 +10879,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Heatran[] = INCBIN_U8("graphics/pokemon/heatran/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Heatran[] = INCBIN_COMP("graphics/pokemon/heatran/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Heatran[] = INCBIN_U32("graphics/pokemon/heatran/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Heatran[] = INCBIN_U32("graphics/pokemon/heatran/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_HEATRAN
#if P_FAMILY_REGIGIGAS
@@ -6523,6 +10897,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Regigigas[] = INCBIN_U8("graphics/pokemon/regigigas/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Regigigas[] = INCBIN_COMP("graphics/pokemon/regigigas/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Regigigas[] = INCBIN_U32("graphics/pokemon/regigigas/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Regigigas[] = INCBIN_U32("graphics/pokemon/regigigas/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_REGIGIGAS
#if P_FAMILY_GIRATINA
@@ -6534,6 +10915,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_GiratinaAltered[] = INCBIN_U8("graphics/pokemon/giratina/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_GiratinaAltered[] = INCBIN_COMP("graphics/pokemon/giratina/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_GiratinaAltered[] = INCBIN_U32("graphics/pokemon/giratina/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_GiratinaAltered[] = INCBIN_U32("graphics/pokemon/giratina/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_GiratinaOrigin[] = INCBIN_U32("graphics/pokemon/giratina/origin/anim_front.4bpp.lz");
const u32 gMonPalette_GiratinaOrigin[] = INCBIN_U32("graphics/pokemon/giratina/origin/normal.gbapal.lz");
@@ -6543,6 +10931,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_GiratinaOrigin[] = INCBIN_U8("graphics/pokemon/giratina/origin/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_GiratinaOrigin[] = INCBIN_COMP("graphics/pokemon/giratina/origin/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_GiratinaOrigin[] = INCBIN_U32("graphics/pokemon/giratina/origin/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_GiratinaOrigin[] = INCBIN_U32("graphics/pokemon/giratina/origin/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_GIRATINA
#if P_FAMILY_CRESSELIA
@@ -6554,6 +10949,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Cresselia[] = INCBIN_U8("graphics/pokemon/cresselia/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Cresselia[] = INCBIN_COMP("graphics/pokemon/cresselia/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Cresselia[] = INCBIN_U32("graphics/pokemon/cresselia/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Cresselia[] = INCBIN_U32("graphics/pokemon/cresselia/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_CRESSELIA
#if P_FAMILY_MANAPHY
@@ -6565,6 +10967,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Phione[] = INCBIN_U8("graphics/pokemon/phione/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Phione[] = INCBIN_COMP("graphics/pokemon/phione/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Phione[] = INCBIN_U32("graphics/pokemon/phione/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Phione[] = INCBIN_U32("graphics/pokemon/phione/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Manaphy[] = INCBIN_U32("graphics/pokemon/manaphy/anim_front.4bpp.lz");
const u32 gMonPalette_Manaphy[] = INCBIN_U32("graphics/pokemon/manaphy/normal.gbapal.lz");
@@ -6574,6 +10983,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Manaphy[] = INCBIN_U8("graphics/pokemon/manaphy/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Manaphy[] = INCBIN_COMP("graphics/pokemon/manaphy/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Manaphy[] = INCBIN_U32("graphics/pokemon/manaphy/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Manaphy[] = INCBIN_U32("graphics/pokemon/manaphy/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_MANAPHY
#if P_FAMILY_DARKRAI
@@ -6585,6 +11001,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Darkrai[] = INCBIN_U8("graphics/pokemon/darkrai/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Darkrai[] = INCBIN_COMP("graphics/pokemon/darkrai/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Darkrai[] = INCBIN_U32("graphics/pokemon/darkrai/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Darkrai[] = INCBIN_U32("graphics/pokemon/darkrai/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_DARKRAI
#if P_FAMILY_SHAYMIN
@@ -6596,24 +11019,38 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Shaymin[] = INCBIN_U8("graphics/pokemon/shaymin/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_ShayminLand[] = INCBIN_COMP("graphics/pokemon/shaymin/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_ShayminLand[] = INCBIN_U32("graphics/pokemon/shaymin/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_ShayminLand[] = INCBIN_U32("graphics/pokemon/shaymin/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_ShayminSky[] = INCBIN_U32("graphics/pokemon/shaymin/sky/anim_front.4bpp.lz");
const u32 gMonPalette_ShayminSky[] = INCBIN_U32("graphics/pokemon/shaymin/sky/normal.gbapal.lz");
const u32 gMonBackPic_ShayminSky[] = INCBIN_U32("graphics/pokemon/shaymin/sky/back.4bpp.lz");
const u32 gMonShinyPalette_ShayminSky[] = INCBIN_U32("graphics/pokemon/shaymin/sky/shiny.gbapal.lz");
const u8 gMonIcon_ShayminSky[] = INCBIN_U8("graphics/pokemon/shaymin/sky/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_ShayminSky[] = INCBIN_COMP("graphics/pokemon/shaymin/sky/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_ShayminSky[] = INCBIN_U32("graphics/pokemon/shaymin/sky/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_ShayminSky[] = INCBIN_U32("graphics/pokemon/shaymin/sky/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SHAYMIN
#if P_FAMILY_ARCEUS
const u32 gMonFrontPic_Arceus[] = INCBIN_U32("graphics/pokemon/arceus/anim_front.4bpp.lz");
const u32 gMonBackPic_Arceus[] = INCBIN_U32("graphics/pokemon/arceus/back.4bpp.lz");
- const u8 gMonIcon_Arceus[] = INCBIN_U8("graphics/pokemon/arceus/icon.4bpp");
#if P_FOOTPRINTS
const u8 gMonFootprint_Arceus[] = INCBIN_U8("graphics/pokemon/arceus/footprint.1bpp");
#endif //P_FOOTPRINTS
const u32 gMonPalette_ArceusNormal[] = INCBIN_U32("graphics/pokemon/arceus/normal.gbapal.lz");
const u32 gMonShinyPalette_ArceusNormal[] = INCBIN_U32("graphics/pokemon/arceus/shiny.gbapal.lz");
+ const u8 gMonIcon_ArceusNormal[] = INCBIN_U8("graphics/pokemon/arceus/icon.4bpp");
const u32 gMonPalette_ArceusFighting[] = INCBIN_U32("graphics/pokemon/arceus/fighting/normal.gbapal.lz");
const u32 gMonShinyPalette_ArceusFighting[] = INCBIN_U32("graphics/pokemon/arceus/fighting/shiny.gbapal.lz");
@@ -6665,6 +11102,84 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonPalette_ArceusFairy[] = INCBIN_U32("graphics/pokemon/arceus/fairy/normal.gbapal.lz");
const u32 gMonShinyPalette_ArceusFairy[] = INCBIN_U32("graphics/pokemon/arceus/fairy/shiny.gbapal.lz");
+
+#if P_ARCEUS_UNIQUE_FORM_ICONS >= GEN_9
+ const u8 gMonIcon_ArceusFighting[] = INCBIN_U8("graphics/pokemon/arceus/fighting/icon.4bpp");
+ const u8 gMonIcon_ArceusFlying[] = INCBIN_U8("graphics/pokemon/arceus/flying/icon.4bpp");
+ const u8 gMonIcon_ArceusPoison[] = INCBIN_U8("graphics/pokemon/arceus/poison/icon.4bpp");
+ const u8 gMonIcon_ArceusGround[] = INCBIN_U8("graphics/pokemon/arceus/ground/icon.4bpp");
+ const u8 gMonIcon_ArceusRock[] = INCBIN_U8("graphics/pokemon/arceus/rock/icon.4bpp");
+ const u8 gMonIcon_ArceusBug[] = INCBIN_U8("graphics/pokemon/arceus/bug/icon.4bpp");
+ const u8 gMonIcon_ArceusGhost[] = INCBIN_U8("graphics/pokemon/arceus/ghost/icon.4bpp");
+ const u8 gMonIcon_ArceusSteel[] = INCBIN_U8("graphics/pokemon/arceus/steel/icon.4bpp");
+ const u8 gMonIcon_ArceusFire[] = INCBIN_U8("graphics/pokemon/arceus/fire/icon.4bpp");
+ const u8 gMonIcon_ArceusWater[] = INCBIN_U8("graphics/pokemon/arceus/water/icon.4bpp");
+ const u8 gMonIcon_ArceusGrass[] = INCBIN_U8("graphics/pokemon/arceus/grass/icon.4bpp");
+ const u8 gMonIcon_ArceusElectric[] = INCBIN_U8("graphics/pokemon/arceus/electric/icon.4bpp");
+ const u8 gMonIcon_ArceusPsychic[] = INCBIN_U8("graphics/pokemon/arceus/psychic/icon.4bpp");
+ const u8 gMonIcon_ArceusIce[] = INCBIN_U8("graphics/pokemon/arceus/ice/icon.4bpp");
+ const u8 gMonIcon_ArceusDragon[] = INCBIN_U8("graphics/pokemon/arceus/dragon/icon.4bpp");
+ const u8 gMonIcon_ArceusDark[] = INCBIN_U8("graphics/pokemon/arceus/dark/icon.4bpp");
+ const u8 gMonIcon_ArceusFairy[] = INCBIN_U8("graphics/pokemon/arceus/fairy/icon.4bpp");
+#endif //P_ARCEUS_UNIQUE_FORM_ICONS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_ArceusNormal[] = INCBIN_COMP("graphics/pokemon/arceus/overworld.4bpp");
+ const u32 gObjectEventPic_ArceusFighting[] = INCBIN_COMP("graphics/pokemon/arceus/overworld.4bpp");
+ const u32 gObjectEventPic_ArceusFlying[] = INCBIN_COMP("graphics/pokemon/arceus/overworld.4bpp");
+ const u32 gObjectEventPic_ArceusPoison[] = INCBIN_COMP("graphics/pokemon/arceus/overworld.4bpp");
+ const u32 gObjectEventPic_ArceusGround[] = INCBIN_COMP("graphics/pokemon/arceus/overworld.4bpp");
+ const u32 gObjectEventPic_ArceusRock[] = INCBIN_COMP("graphics/pokemon/arceus/overworld.4bpp");
+ const u32 gObjectEventPic_ArceusBug[] = INCBIN_COMP("graphics/pokemon/arceus/overworld.4bpp");
+ const u32 gObjectEventPic_ArceusGhost[] = INCBIN_COMP("graphics/pokemon/arceus/overworld.4bpp");
+ const u32 gObjectEventPic_ArceusSteel[] = INCBIN_COMP("graphics/pokemon/arceus/overworld.4bpp");
+ const u32 gObjectEventPic_ArceusFire[] = INCBIN_COMP("graphics/pokemon/arceus/overworld.4bpp");
+ const u32 gObjectEventPic_ArceusWater[] = INCBIN_COMP("graphics/pokemon/arceus/overworld.4bpp");
+ const u32 gObjectEventPic_ArceusGrass[] = INCBIN_COMP("graphics/pokemon/arceus/overworld.4bpp");
+ const u32 gObjectEventPic_ArceusElectric[] = INCBIN_COMP("graphics/pokemon/arceus/overworld.4bpp");
+ const u32 gObjectEventPic_ArceusPsychic[] = INCBIN_COMP("graphics/pokemon/arceus/overworld.4bpp");
+ const u32 gObjectEventPic_ArceusIce[] = INCBIN_COMP("graphics/pokemon/arceus/overworld.4bpp");
+ const u32 gObjectEventPic_ArceusDragon[] = INCBIN_COMP("graphics/pokemon/arceus/overworld.4bpp");
+ const u32 gObjectEventPic_ArceusDark[] = INCBIN_COMP("graphics/pokemon/arceus/overworld.4bpp");
+ const u32 gObjectEventPic_ArceusFairy[] = INCBIN_COMP("graphics/pokemon/arceus/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_ArceusNormal[] = INCBIN_U32("graphics/pokemon/arceus/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_ArceusFighting[] = INCBIN_U32("graphics/pokemon/arceus/fighting/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_ArceusFlying[] = INCBIN_U32("graphics/pokemon/arceus/flying/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_ArceusPoison[] = INCBIN_U32("graphics/pokemon/arceus/poison/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_ArceusGround[] = INCBIN_U32("graphics/pokemon/arceus/ground/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_ArceusRock[] = INCBIN_U32("graphics/pokemon/arceus/rock/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_ArceusBug[] = INCBIN_U32("graphics/pokemon/arceus/bug/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_ArceusGhost[] = INCBIN_U32("graphics/pokemon/arceus/ghost/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_ArceusSteel[] = INCBIN_U32("graphics/pokemon/arceus/steel/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_ArceusFire[] = INCBIN_U32("graphics/pokemon/arceus/fire/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_ArceusWater[] = INCBIN_U32("graphics/pokemon/arceus/water/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_ArceusGrass[] = INCBIN_U32("graphics/pokemon/arceus/grass/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_ArceusElectric[] = INCBIN_U32("graphics/pokemon/arceus/electric/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_ArceusPsychic[] = INCBIN_U32("graphics/pokemon/arceus/psychic/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_ArceusIce[] = INCBIN_U32("graphics/pokemon/arceus/ice/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_ArceusDragon[] = INCBIN_U32("graphics/pokemon/arceus/dragon/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_ArceusDark[] = INCBIN_U32("graphics/pokemon/arceus/dark/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_ArceusFairy[] = INCBIN_U32("graphics/pokemon/arceus/fairy/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_ArceusNormal[] = INCBIN_U32("graphics/pokemon/arceus/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_ArceusFighting[] = INCBIN_U32("graphics/pokemon/arceus/fighting/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_ArceusFlying[] = INCBIN_U32("graphics/pokemon/arceus/flying/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_ArceusPoison[] = INCBIN_U32("graphics/pokemon/arceus/poison/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_ArceusGround[] = INCBIN_U32("graphics/pokemon/arceus/ground/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_ArceusRock[] = INCBIN_U32("graphics/pokemon/arceus/rock/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_ArceusBug[] = INCBIN_U32("graphics/pokemon/arceus/bug/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_ArceusGhost[] = INCBIN_U32("graphics/pokemon/arceus/ghost/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_ArceusSteel[] = INCBIN_U32("graphics/pokemon/arceus/steel/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_ArceusFire[] = INCBIN_U32("graphics/pokemon/arceus/fire/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_ArceusWater[] = INCBIN_U32("graphics/pokemon/arceus/water/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_ArceusGrass[] = INCBIN_U32("graphics/pokemon/arceus/grass/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_ArceusElectric[] = INCBIN_U32("graphics/pokemon/arceus/electric/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_ArceusPsychic[] = INCBIN_U32("graphics/pokemon/arceus/psychic/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_ArceusIce[] = INCBIN_U32("graphics/pokemon/arceus/ice/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_ArceusDragon[] = INCBIN_U32("graphics/pokemon/arceus/dragon/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_ArceusDark[] = INCBIN_U32("graphics/pokemon/arceus/dark/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_ArceusFairy[] = INCBIN_U32("graphics/pokemon/arceus/fairy/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_ARCEUS
#if P_FAMILY_VICTINI
@@ -6676,6 +11191,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Victini[] = INCBIN_U8("graphics/pokemon/victini/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Victini[] = INCBIN_COMP("graphics/pokemon/victini/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Victini[] = INCBIN_U32("graphics/pokemon/victini/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Victini[] = INCBIN_U32("graphics/pokemon/victini/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_VICTINI
#if P_FAMILY_SNIVY
@@ -6687,6 +11209,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Snivy[] = INCBIN_U8("graphics/pokemon/snivy/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Snivy[] = INCBIN_COMP("graphics/pokemon/snivy/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Snivy[] = INCBIN_U32("graphics/pokemon/snivy/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Snivy[] = INCBIN_U32("graphics/pokemon/snivy/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Servine[] = INCBIN_U32("graphics/pokemon/servine/anim_front.4bpp.lz");
const u32 gMonPalette_Servine[] = INCBIN_U32("graphics/pokemon/servine/normal.gbapal.lz");
@@ -6696,6 +11225,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Servine[] = INCBIN_U8("graphics/pokemon/servine/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Servine[] = INCBIN_COMP("graphics/pokemon/servine/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Servine[] = INCBIN_U32("graphics/pokemon/servine/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Servine[] = INCBIN_U32("graphics/pokemon/servine/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Serperior[] = INCBIN_U32("graphics/pokemon/serperior/anim_front.4bpp.lz");
const u32 gMonPalette_Serperior[] = INCBIN_U32("graphics/pokemon/serperior/normal.gbapal.lz");
@@ -6705,6 +11241,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Serperior[] = INCBIN_U8("graphics/pokemon/serperior/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Serperior[] = INCBIN_COMP("graphics/pokemon/serperior/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Serperior[] = INCBIN_U32("graphics/pokemon/serperior/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Serperior[] = INCBIN_U32("graphics/pokemon/serperior/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SNIVY
#if P_FAMILY_TEPIG
@@ -6716,6 +11259,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Tepig[] = INCBIN_U8("graphics/pokemon/tepig/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Tepig[] = INCBIN_COMP("graphics/pokemon/tepig/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Tepig[] = INCBIN_U32("graphics/pokemon/tepig/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Tepig[] = INCBIN_U32("graphics/pokemon/tepig/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Pignite[] = INCBIN_U32("graphics/pokemon/pignite/anim_front.4bpp.lz");
const u32 gMonPalette_Pignite[] = INCBIN_U32("graphics/pokemon/pignite/normal.gbapal.lz");
@@ -6725,6 +11275,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Pignite[] = INCBIN_U8("graphics/pokemon/pignite/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Pignite[] = INCBIN_COMP("graphics/pokemon/pignite/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Pignite[] = INCBIN_U32("graphics/pokemon/pignite/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Pignite[] = INCBIN_U32("graphics/pokemon/pignite/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Emboar[] = INCBIN_U32("graphics/pokemon/emboar/anim_front.4bpp.lz");
const u32 gMonPalette_Emboar[] = INCBIN_U32("graphics/pokemon/emboar/normal.gbapal.lz");
@@ -6734,6 +11291,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Emboar[] = INCBIN_U8("graphics/pokemon/emboar/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Emboar[] = INCBIN_COMP("graphics/pokemon/emboar/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Emboar[] = INCBIN_U32("graphics/pokemon/emboar/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Emboar[] = INCBIN_U32("graphics/pokemon/emboar/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_TEPIG
#if P_FAMILY_OSHAWOTT
@@ -6745,6 +11309,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Oshawott[] = INCBIN_U8("graphics/pokemon/oshawott/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Oshawott[] = INCBIN_COMP("graphics/pokemon/oshawott/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Oshawott[] = INCBIN_U32("graphics/pokemon/oshawott/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Oshawott[] = INCBIN_U32("graphics/pokemon/oshawott/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Dewott[] = INCBIN_U32("graphics/pokemon/dewott/anim_front.4bpp.lz");
const u32 gMonPalette_Dewott[] = INCBIN_U32("graphics/pokemon/dewott/normal.gbapal.lz");
@@ -6754,6 +11325,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Dewott[] = INCBIN_U8("graphics/pokemon/dewott/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Dewott[] = INCBIN_COMP("graphics/pokemon/dewott/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Dewott[] = INCBIN_U32("graphics/pokemon/dewott/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Dewott[] = INCBIN_U32("graphics/pokemon/dewott/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Samurott[] = INCBIN_U32("graphics/pokemon/samurott/anim_front.4bpp.lz");
const u32 gMonPalette_Samurott[] = INCBIN_U32("graphics/pokemon/samurott/normal.gbapal.lz");
@@ -6763,6 +11341,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Samurott[] = INCBIN_U8("graphics/pokemon/samurott/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Samurott[] = INCBIN_COMP("graphics/pokemon/samurott/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Samurott[] = INCBIN_U32("graphics/pokemon/samurott/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Samurott[] = INCBIN_U32("graphics/pokemon/samurott/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_HISUIAN_FORMS
const u32 gMonFrontPic_SamurottHisuian[] = INCBIN_U32("graphics/pokemon/samurott/hisuian/front.4bpp.lz");
@@ -6770,6 +11355,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_SamurottHisuian[] = INCBIN_U32("graphics/pokemon/samurott/hisuian/back.4bpp.lz");
const u32 gMonShinyPalette_SamurottHisuian[] = INCBIN_U32("graphics/pokemon/samurott/hisuian/shiny.gbapal.lz");
const u8 gMonIcon_SamurottHisuian[] = INCBIN_U8("graphics/pokemon/samurott/hisuian/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_SamurottHisuian[] = INCBIN_COMP("graphics/pokemon/samurott/hisuian/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_SamurottHisuian[] = INCBIN_U32("graphics/pokemon/samurott/hisuian/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_SamurottHisuian[] = INCBIN_U32("graphics/pokemon/samurott/hisuian/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_HISUIAN_FORMS
#endif //P_FAMILY_OSHAWOTT
@@ -6782,6 +11374,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Patrat[] = INCBIN_U8("graphics/pokemon/patrat/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Patrat[] = INCBIN_COMP("graphics/pokemon/patrat/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Patrat[] = INCBIN_U32("graphics/pokemon/patrat/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Patrat[] = INCBIN_U32("graphics/pokemon/patrat/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Watchog[] = INCBIN_U32("graphics/pokemon/watchog/anim_front.4bpp.lz");
const u32 gMonPalette_Watchog[] = INCBIN_U32("graphics/pokemon/watchog/normal.gbapal.lz");
@@ -6791,6 +11390,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Watchog[] = INCBIN_U8("graphics/pokemon/watchog/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Watchog[] = INCBIN_COMP("graphics/pokemon/watchog/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Watchog[] = INCBIN_U32("graphics/pokemon/watchog/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Watchog[] = INCBIN_U32("graphics/pokemon/watchog/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_PATRAT
#if P_FAMILY_LILLIPUP
@@ -6802,6 +11408,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Lillipup[] = INCBIN_U8("graphics/pokemon/lillipup/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Lillipup[] = INCBIN_COMP("graphics/pokemon/lillipup/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Lillipup[] = INCBIN_U32("graphics/pokemon/lillipup/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Lillipup[] = INCBIN_U32("graphics/pokemon/lillipup/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Herdier[] = INCBIN_U32("graphics/pokemon/herdier/anim_front.4bpp.lz");
const u32 gMonPalette_Herdier[] = INCBIN_U32("graphics/pokemon/herdier/normal.gbapal.lz");
@@ -6811,6 +11424,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Herdier[] = INCBIN_U8("graphics/pokemon/herdier/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Herdier[] = INCBIN_COMP("graphics/pokemon/herdier/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Herdier[] = INCBIN_U32("graphics/pokemon/herdier/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Herdier[] = INCBIN_U32("graphics/pokemon/herdier/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Stoutland[] = INCBIN_U32("graphics/pokemon/stoutland/anim_front.4bpp.lz");
const u32 gMonPalette_Stoutland[] = INCBIN_U32("graphics/pokemon/stoutland/normal.gbapal.lz");
@@ -6820,6 +11440,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Stoutland[] = INCBIN_U8("graphics/pokemon/stoutland/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Stoutland[] = INCBIN_COMP("graphics/pokemon/stoutland/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Stoutland[] = INCBIN_U32("graphics/pokemon/stoutland/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Stoutland[] = INCBIN_U32("graphics/pokemon/stoutland/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_LILLIPUP
#if P_FAMILY_PURRLOIN
@@ -6831,6 +11458,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Purrloin[] = INCBIN_U8("graphics/pokemon/purrloin/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Purrloin[] = INCBIN_COMP("graphics/pokemon/purrloin/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Purrloin[] = INCBIN_U32("graphics/pokemon/purrloin/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Purrloin[] = INCBIN_U32("graphics/pokemon/purrloin/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Liepard[] = INCBIN_U32("graphics/pokemon/liepard/anim_front.4bpp.lz");
const u32 gMonPalette_Liepard[] = INCBIN_U32("graphics/pokemon/liepard/normal.gbapal.lz");
@@ -6840,6 +11474,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Liepard[] = INCBIN_U8("graphics/pokemon/liepard/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Liepard[] = INCBIN_COMP("graphics/pokemon/liepard/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Liepard[] = INCBIN_U32("graphics/pokemon/liepard/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Liepard[] = INCBIN_U32("graphics/pokemon/liepard/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_PURRLOIN
#if P_FAMILY_PANSAGE
@@ -6851,6 +11492,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Pansage[] = INCBIN_U8("graphics/pokemon/pansage/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Pansage[] = INCBIN_COMP("graphics/pokemon/pansage/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Pansage[] = INCBIN_U32("graphics/pokemon/pansage/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Pansage[] = INCBIN_U32("graphics/pokemon/pansage/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Simisage[] = INCBIN_U32("graphics/pokemon/simisage/anim_front.4bpp.lz");
const u32 gMonPalette_Simisage[] = INCBIN_U32("graphics/pokemon/simisage/normal.gbapal.lz");
@@ -6860,6 +11508,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Simisage[] = INCBIN_U8("graphics/pokemon/simisage/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Simisage[] = INCBIN_COMP("graphics/pokemon/simisage/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Simisage[] = INCBIN_U32("graphics/pokemon/simisage/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Simisage[] = INCBIN_U32("graphics/pokemon/simisage/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_PANSAGE
#if P_FAMILY_PANSEAR
@@ -6871,6 +11526,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Pansear[] = INCBIN_U8("graphics/pokemon/pansear/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Pansear[] = INCBIN_COMP("graphics/pokemon/pansear/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Pansear[] = INCBIN_U32("graphics/pokemon/pansear/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Pansear[] = INCBIN_U32("graphics/pokemon/pansear/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Simisear[] = INCBIN_U32("graphics/pokemon/simisear/anim_front.4bpp.lz");
const u32 gMonPalette_Simisear[] = INCBIN_U32("graphics/pokemon/simisear/normal.gbapal.lz");
@@ -6880,6 +11542,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Simisear[] = INCBIN_U8("graphics/pokemon/simisear/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Simisear[] = INCBIN_COMP("graphics/pokemon/simisear/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Simisear[] = INCBIN_U32("graphics/pokemon/simisear/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Simisear[] = INCBIN_U32("graphics/pokemon/simisear/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_PANSEAR
#if P_FAMILY_PANPOUR
@@ -6891,6 +11560,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Panpour[] = INCBIN_U8("graphics/pokemon/panpour/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Panpour[] = INCBIN_COMP("graphics/pokemon/panpour/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Panpour[] = INCBIN_U32("graphics/pokemon/panpour/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Panpour[] = INCBIN_U32("graphics/pokemon/panpour/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Simipour[] = INCBIN_U32("graphics/pokemon/simipour/anim_front.4bpp.lz");
const u32 gMonPalette_Simipour[] = INCBIN_U32("graphics/pokemon/simipour/normal.gbapal.lz");
@@ -6900,6 +11576,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Simipour[] = INCBIN_U8("graphics/pokemon/simipour/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Simipour[] = INCBIN_COMP("graphics/pokemon/simipour/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Simipour[] = INCBIN_U32("graphics/pokemon/simipour/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Simipour[] = INCBIN_U32("graphics/pokemon/simipour/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_PANPOUR
#if P_FAMILY_MUNNA
@@ -6911,6 +11594,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Munna[] = INCBIN_U8("graphics/pokemon/munna/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Munna[] = INCBIN_COMP("graphics/pokemon/munna/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Munna[] = INCBIN_U32("graphics/pokemon/munna/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Munna[] = INCBIN_U32("graphics/pokemon/munna/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Musharna[] = INCBIN_U32("graphics/pokemon/musharna/anim_front.4bpp.lz");
const u32 gMonPalette_Musharna[] = INCBIN_U32("graphics/pokemon/musharna/normal.gbapal.lz");
@@ -6920,6 +11610,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Musharna[] = INCBIN_U8("graphics/pokemon/musharna/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Musharna[] = INCBIN_COMP("graphics/pokemon/musharna/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Musharna[] = INCBIN_U32("graphics/pokemon/musharna/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Musharna[] = INCBIN_U32("graphics/pokemon/musharna/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_MUNNA
#if P_FAMILY_PIDOVE
@@ -6931,6 +11628,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Pidove[] = INCBIN_U8("graphics/pokemon/pidove/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Pidove[] = INCBIN_COMP("graphics/pokemon/pidove/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Pidove[] = INCBIN_U32("graphics/pokemon/pidove/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Pidove[] = INCBIN_U32("graphics/pokemon/pidove/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Tranquill[] = INCBIN_U32("graphics/pokemon/tranquill/anim_front.4bpp.lz");
const u32 gMonPalette_Tranquill[] = INCBIN_U32("graphics/pokemon/tranquill/normal.gbapal.lz");
@@ -6940,6 +11644,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Tranquill[] = INCBIN_U8("graphics/pokemon/tranquill/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Tranquill[] = INCBIN_COMP("graphics/pokemon/tranquill/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Tranquill[] = INCBIN_U32("graphics/pokemon/tranquill/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Tranquill[] = INCBIN_U32("graphics/pokemon/tranquill/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Unfezant[] = INCBIN_U32("graphics/pokemon/unfezant/anim_front.4bpp.lz");
const u32 gMonPalette_Unfezant[] = INCBIN_U32("graphics/pokemon/unfezant/normal.gbapal.lz");
@@ -6949,12 +11660,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Unfezant[] = INCBIN_U8("graphics/pokemon/unfezant/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Unfezant[] = INCBIN_COMP("graphics/pokemon/unfezant/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Unfezant[] = INCBIN_U32("graphics/pokemon/unfezant/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Unfezant[] = INCBIN_U32("graphics/pokemon/unfezant/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_UnfezantF[] = INCBIN_U32("graphics/pokemon/unfezant/anim_frontf.4bpp.lz");
const u32 gMonPalette_UnfezantF[] = INCBIN_U32("graphics/pokemon/unfezant/normalf.gbapal.lz");
const u32 gMonBackPic_UnfezantF[] = INCBIN_U32("graphics/pokemon/unfezant/backf.4bpp.lz");
const u32 gMonShinyPalette_UnfezantF[] = INCBIN_U32("graphics/pokemon/unfezant/shinyf.gbapal.lz");
const u8 gMonIcon_UnfezantF[] = INCBIN_U8("graphics/pokemon/unfezant/iconf.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_UnfezantF[] = INCBIN_COMP("graphics/pokemon/unfezant_f/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_UnfezantF[] = INCBIN_U32("graphics/pokemon/unfezant_f/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_UnfezantF[] = INCBIN_U32("graphics/pokemon/unfezant_f/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_PIDOVE
#if P_FAMILY_BLITZLE
@@ -6966,6 +11691,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Blitzle[] = INCBIN_U8("graphics/pokemon/blitzle/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Blitzle[] = INCBIN_COMP("graphics/pokemon/blitzle/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Blitzle[] = INCBIN_U32("graphics/pokemon/blitzle/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Blitzle[] = INCBIN_U32("graphics/pokemon/blitzle/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Zebstrika[] = INCBIN_U32("graphics/pokemon/zebstrika/anim_front.4bpp.lz");
const u32 gMonPalette_Zebstrika[] = INCBIN_U32("graphics/pokemon/zebstrika/normal.gbapal.lz");
@@ -6975,6 +11707,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Zebstrika[] = INCBIN_U8("graphics/pokemon/zebstrika/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Zebstrika[] = INCBIN_COMP("graphics/pokemon/zebstrika/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Zebstrika[] = INCBIN_U32("graphics/pokemon/zebstrika/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Zebstrika[] = INCBIN_U32("graphics/pokemon/zebstrika/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_BLITZLE
#if P_FAMILY_ROGGENROLA
@@ -6986,6 +11725,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Roggenrola[] = INCBIN_U8("graphics/pokemon/roggenrola/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Roggenrola[] = INCBIN_COMP("graphics/pokemon/roggenrola/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Roggenrola[] = INCBIN_U32("graphics/pokemon/roggenrola/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Roggenrola[] = INCBIN_U32("graphics/pokemon/roggenrola/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Boldore[] = INCBIN_U32("graphics/pokemon/boldore/anim_front.4bpp.lz");
const u32 gMonPalette_Boldore[] = INCBIN_U32("graphics/pokemon/boldore/normal.gbapal.lz");
@@ -6995,6 +11741,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Boldore[] = INCBIN_U8("graphics/pokemon/boldore/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Boldore[] = INCBIN_COMP("graphics/pokemon/boldore/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Boldore[] = INCBIN_U32("graphics/pokemon/boldore/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Boldore[] = INCBIN_U32("graphics/pokemon/boldore/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Gigalith[] = INCBIN_U32("graphics/pokemon/gigalith/anim_front.4bpp.lz");
const u32 gMonPalette_Gigalith[] = INCBIN_U32("graphics/pokemon/gigalith/normal.gbapal.lz");
@@ -7004,6 +11757,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Gigalith[] = INCBIN_U8("graphics/pokemon/gigalith/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Gigalith[] = INCBIN_COMP("graphics/pokemon/gigalith/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Gigalith[] = INCBIN_U32("graphics/pokemon/gigalith/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Gigalith[] = INCBIN_U32("graphics/pokemon/gigalith/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_ROGGENROLA
#if P_FAMILY_WOOBAT
@@ -7015,6 +11775,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Woobat[] = INCBIN_U8("graphics/pokemon/woobat/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Woobat[] = INCBIN_COMP("graphics/pokemon/woobat/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Woobat[] = INCBIN_U32("graphics/pokemon/woobat/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Woobat[] = INCBIN_U32("graphics/pokemon/woobat/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Swoobat[] = INCBIN_U32("graphics/pokemon/swoobat/anim_front.4bpp.lz");
const u32 gMonPalette_Swoobat[] = INCBIN_U32("graphics/pokemon/swoobat/normal.gbapal.lz");
@@ -7024,6 +11791,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Swoobat[] = INCBIN_U8("graphics/pokemon/swoobat/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Swoobat[] = INCBIN_COMP("graphics/pokemon/swoobat/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Swoobat[] = INCBIN_U32("graphics/pokemon/swoobat/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Swoobat[] = INCBIN_U32("graphics/pokemon/swoobat/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_WOOBAT
#if P_FAMILY_DRILBUR
@@ -7035,6 +11809,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Drilbur[] = INCBIN_U8("graphics/pokemon/drilbur/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Drilbur[] = INCBIN_COMP("graphics/pokemon/drilbur/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Drilbur[] = INCBIN_U32("graphics/pokemon/drilbur/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Drilbur[] = INCBIN_U32("graphics/pokemon/drilbur/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Excadrill[] = INCBIN_U32("graphics/pokemon/excadrill/anim_front.4bpp.lz");
const u32 gMonPalette_Excadrill[] = INCBIN_U32("graphics/pokemon/excadrill/normal.gbapal.lz");
@@ -7044,6 +11825,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Excadrill[] = INCBIN_U8("graphics/pokemon/excadrill/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Excadrill[] = INCBIN_COMP("graphics/pokemon/excadrill/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Excadrill[] = INCBIN_U32("graphics/pokemon/excadrill/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Excadrill[] = INCBIN_U32("graphics/pokemon/excadrill/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_DRILBUR
#if P_FAMILY_AUDINO
@@ -7055,6 +11843,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Audino[] = INCBIN_U8("graphics/pokemon/audino/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Audino[] = INCBIN_COMP("graphics/pokemon/audino/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Audino[] = INCBIN_U32("graphics/pokemon/audino/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Audino[] = INCBIN_U32("graphics/pokemon/audino/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_MEGA_EVOLUTIONS
const u32 gMonFrontPic_AudinoMega[] = INCBIN_U32("graphics/pokemon/audino/mega/front.4bpp.lz");
@@ -7062,6 +11857,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_AudinoMega[] = INCBIN_U32("graphics/pokemon/audino/mega/back.4bpp.lz");
const u32 gMonShinyPalette_AudinoMega[] = INCBIN_U32("graphics/pokemon/audino/mega/shiny.gbapal.lz");
const u8 gMonIcon_AudinoMega[] = INCBIN_U8("graphics/pokemon/audino/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_AudinoMega[] = INCBIN_COMP("graphics/pokemon/audino/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_AudinoMega[] = INCBIN_U32("graphics/pokemon/audino/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_AudinoMega[] = INCBIN_U32("graphics/pokemon/audino/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#endif //P_FAMILY_AUDINO
@@ -7074,6 +11876,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Timburr[] = INCBIN_U8("graphics/pokemon/timburr/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Timburr[] = INCBIN_COMP("graphics/pokemon/timburr/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Timburr[] = INCBIN_U32("graphics/pokemon/timburr/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Timburr[] = INCBIN_U32("graphics/pokemon/timburr/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Gurdurr[] = INCBIN_U32("graphics/pokemon/gurdurr/anim_front.4bpp.lz");
const u32 gMonPalette_Gurdurr[] = INCBIN_U32("graphics/pokemon/gurdurr/normal.gbapal.lz");
@@ -7083,6 +11892,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Gurdurr[] = INCBIN_U8("graphics/pokemon/gurdurr/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Gurdurr[] = INCBIN_COMP("graphics/pokemon/gurdurr/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Gurdurr[] = INCBIN_U32("graphics/pokemon/gurdurr/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Gurdurr[] = INCBIN_U32("graphics/pokemon/gurdurr/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Conkeldurr[] = INCBIN_U32("graphics/pokemon/conkeldurr/anim_front.4bpp.lz");
const u32 gMonPalette_Conkeldurr[] = INCBIN_U32("graphics/pokemon/conkeldurr/normal.gbapal.lz");
@@ -7092,6 +11908,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Conkeldurr[] = INCBIN_U8("graphics/pokemon/conkeldurr/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Conkeldurr[] = INCBIN_COMP("graphics/pokemon/conkeldurr/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Conkeldurr[] = INCBIN_U32("graphics/pokemon/conkeldurr/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Conkeldurr[] = INCBIN_U32("graphics/pokemon/conkeldurr/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_TIMBURR
#if P_FAMILY_TYMPOLE
@@ -7103,6 +11926,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Tympole[] = INCBIN_U8("graphics/pokemon/tympole/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Tympole[] = INCBIN_COMP("graphics/pokemon/tympole/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Tympole[] = INCBIN_U32("graphics/pokemon/tympole/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Tympole[] = INCBIN_U32("graphics/pokemon/tympole/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Palpitoad[] = INCBIN_U32("graphics/pokemon/palpitoad/anim_front.4bpp.lz");
const u32 gMonPalette_Palpitoad[] = INCBIN_U32("graphics/pokemon/palpitoad/normal.gbapal.lz");
@@ -7112,6 +11942,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Palpitoad[] = INCBIN_U8("graphics/pokemon/palpitoad/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Palpitoad[] = INCBIN_COMP("graphics/pokemon/palpitoad/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Palpitoad[] = INCBIN_U32("graphics/pokemon/palpitoad/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Palpitoad[] = INCBIN_U32("graphics/pokemon/palpitoad/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Seismitoad[] = INCBIN_U32("graphics/pokemon/seismitoad/anim_front.4bpp.lz");
const u32 gMonPalette_Seismitoad[] = INCBIN_U32("graphics/pokemon/seismitoad/normal.gbapal.lz");
@@ -7121,6 +11958,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Seismitoad[] = INCBIN_U8("graphics/pokemon/seismitoad/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Seismitoad[] = INCBIN_COMP("graphics/pokemon/seismitoad/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Seismitoad[] = INCBIN_U32("graphics/pokemon/seismitoad/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Seismitoad[] = INCBIN_U32("graphics/pokemon/seismitoad/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_TYMPOLE
#if P_FAMILY_THROH
@@ -7132,6 +11976,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Throh[] = INCBIN_U8("graphics/pokemon/throh/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Throh[] = INCBIN_COMP("graphics/pokemon/throh/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Throh[] = INCBIN_U32("graphics/pokemon/throh/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Throh[] = INCBIN_U32("graphics/pokemon/throh/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_THROH
#if P_FAMILY_SAWK
@@ -7143,6 +11994,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Sawk[] = INCBIN_U8("graphics/pokemon/sawk/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Sawk[] = INCBIN_COMP("graphics/pokemon/sawk/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Sawk[] = INCBIN_U32("graphics/pokemon/sawk/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Sawk[] = INCBIN_U32("graphics/pokemon/sawk/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SAWK
#if P_FAMILY_SEWADDLE
@@ -7154,6 +12012,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Sewaddle[] = INCBIN_U8("graphics/pokemon/sewaddle/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Sewaddle[] = INCBIN_COMP("graphics/pokemon/sewaddle/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Sewaddle[] = INCBIN_U32("graphics/pokemon/sewaddle/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Sewaddle[] = INCBIN_U32("graphics/pokemon/sewaddle/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Swadloon[] = INCBIN_U32("graphics/pokemon/swadloon/anim_front.4bpp.lz");
const u32 gMonPalette_Swadloon[] = INCBIN_U32("graphics/pokemon/swadloon/normal.gbapal.lz");
@@ -7163,6 +12028,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Swadloon[] = INCBIN_U8("graphics/pokemon/swadloon/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Swadloon[] = INCBIN_COMP("graphics/pokemon/swadloon/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Swadloon[] = INCBIN_U32("graphics/pokemon/swadloon/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Swadloon[] = INCBIN_U32("graphics/pokemon/swadloon/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Leavanny[] = INCBIN_U32("graphics/pokemon/leavanny/anim_front.4bpp.lz");
const u32 gMonPalette_Leavanny[] = INCBIN_U32("graphics/pokemon/leavanny/normal.gbapal.lz");
@@ -7172,6 +12044,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Leavanny[] = INCBIN_U8("graphics/pokemon/leavanny/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Leavanny[] = INCBIN_COMP("graphics/pokemon/leavanny/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Leavanny[] = INCBIN_U32("graphics/pokemon/leavanny/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Leavanny[] = INCBIN_U32("graphics/pokemon/leavanny/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SEWADDLE
#if P_FAMILY_VENIPEDE
@@ -7183,6 +12062,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Venipede[] = INCBIN_U8("graphics/pokemon/venipede/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Venipede[] = INCBIN_COMP("graphics/pokemon/venipede/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Venipede[] = INCBIN_U32("graphics/pokemon/venipede/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Venipede[] = INCBIN_U32("graphics/pokemon/venipede/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Whirlipede[] = INCBIN_U32("graphics/pokemon/whirlipede/anim_front.4bpp.lz");
const u32 gMonPalette_Whirlipede[] = INCBIN_U32("graphics/pokemon/whirlipede/normal.gbapal.lz");
@@ -7192,6 +12078,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Whirlipede[] = INCBIN_U8("graphics/pokemon/whirlipede/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Whirlipede[] = INCBIN_COMP("graphics/pokemon/whirlipede/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Whirlipede[] = INCBIN_U32("graphics/pokemon/whirlipede/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Whirlipede[] = INCBIN_U32("graphics/pokemon/whirlipede/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Scolipede[] = INCBIN_U32("graphics/pokemon/scolipede/anim_front.4bpp.lz");
const u32 gMonPalette_Scolipede[] = INCBIN_U32("graphics/pokemon/scolipede/normal.gbapal.lz");
@@ -7201,6 +12094,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Scolipede[] = INCBIN_U8("graphics/pokemon/scolipede/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Scolipede[] = INCBIN_COMP("graphics/pokemon/scolipede/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Scolipede[] = INCBIN_U32("graphics/pokemon/scolipede/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Scolipede[] = INCBIN_U32("graphics/pokemon/scolipede/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_VENIPEDE
#if P_FAMILY_COTTONEE
@@ -7212,6 +12112,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Cottonee[] = INCBIN_U8("graphics/pokemon/cottonee/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Cottonee[] = INCBIN_COMP("graphics/pokemon/cottonee/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Cottonee[] = INCBIN_U32("graphics/pokemon/cottonee/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Cottonee[] = INCBIN_U32("graphics/pokemon/cottonee/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Whimsicott[] = INCBIN_U32("graphics/pokemon/whimsicott/anim_front.4bpp.lz");
const u32 gMonPalette_Whimsicott[] = INCBIN_U32("graphics/pokemon/whimsicott/normal.gbapal.lz");
@@ -7221,6 +12128,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Whimsicott[] = INCBIN_U8("graphics/pokemon/whimsicott/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Whimsicott[] = INCBIN_COMP("graphics/pokemon/whimsicott/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Whimsicott[] = INCBIN_U32("graphics/pokemon/whimsicott/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Whimsicott[] = INCBIN_U32("graphics/pokemon/whimsicott/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_COTTONEE
#if P_FAMILY_PETILIL
@@ -7232,6 +12146,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Petilil[] = INCBIN_U8("graphics/pokemon/petilil/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Petilil[] = INCBIN_COMP("graphics/pokemon/petilil/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Petilil[] = INCBIN_U32("graphics/pokemon/petilil/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Petilil[] = INCBIN_U32("graphics/pokemon/petilil/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Lilligant[] = INCBIN_U32("graphics/pokemon/lilligant/anim_front.4bpp.lz");
const u32 gMonPalette_Lilligant[] = INCBIN_U32("graphics/pokemon/lilligant/normal.gbapal.lz");
@@ -7241,6 +12162,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Lilligant[] = INCBIN_U8("graphics/pokemon/lilligant/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Lilligant[] = INCBIN_COMP("graphics/pokemon/lilligant/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Lilligant[] = INCBIN_U32("graphics/pokemon/lilligant/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Lilligant[] = INCBIN_U32("graphics/pokemon/lilligant/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_HISUIAN_FORMS
const u32 gMonFrontPic_LilligantHisuian[] = INCBIN_U32("graphics/pokemon/lilligant/hisuian/front.4bpp.lz");
@@ -7248,6 +12176,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_LilligantHisuian[] = INCBIN_U32("graphics/pokemon/lilligant/hisuian/back.4bpp.lz");
const u32 gMonShinyPalette_LilligantHisuian[] = INCBIN_U32("graphics/pokemon/lilligant/hisuian/shiny.gbapal.lz");
const u8 gMonIcon_LilligantHisuian[] = INCBIN_U8("graphics/pokemon/lilligant/hisuian/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_LilligantHisuian[] = INCBIN_COMP("graphics/pokemon/lilligant/hisuian/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_LilligantHisuian[] = INCBIN_U32("graphics/pokemon/lilligant/hisuian/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_LilligantHisuian[] = INCBIN_U32("graphics/pokemon/lilligant/hisuian/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_HISUIAN_FORMS
#endif //P_FAMILY_PETILIL
@@ -7274,6 +12209,20 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonShinyPalette_BasculinWhiteStriped[] = INCBIN_U32("graphics/pokemon/basculin/white_striped/shiny.gbapal.lz");
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
+
const u32 gMonFrontPic_BasculegionMale[] = INCBIN_U32("graphics/pokemon/basculegion/front.4bpp.lz");
const u32 gMonPalette_BasculegionMale[] = INCBIN_U32("graphics/pokemon/basculegion/normal.gbapal.lz");
const u32 gMonBackPic_BasculegionMale[] = INCBIN_U32("graphics/pokemon/basculegion/back.4bpp.lz");
@@ -7288,6 +12237,17 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_BasculegionFemale[] = INCBIN_U32("graphics/pokemon/basculegion/female/back.4bpp.lz");
const u32 gMonShinyPalette_BasculegionFemale[] = INCBIN_U32("graphics/pokemon/basculegion/female/shiny.gbapal.lz");
const u8 gMonIcon_BasculegionFemale[] = INCBIN_U8("graphics/pokemon/basculegion/female/icon.4bpp");
+
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_BasculegionMale[] = INCBIN_COMP("graphics/pokemon/basculegion/overworld.4bpp");
+ const u32 gObjectEventPic_BasculegionFemale[] = INCBIN_COMP("graphics/pokemon/basculegion/female/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_BasculegionMale[] = INCBIN_U32("graphics/pokemon/basculegion/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_BasculegionFemale[] = INCBIN_U32("graphics/pokemon/basculegion/female/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_BasculegionMale[] = INCBIN_U32("graphics/pokemon/basculegion/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_BasculegionFemale[] = INCBIN_U32("graphics/pokemon/basculegion/female/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_HISUIAN_FORMS
#endif //P_FAMILY_BASCULIN
@@ -7300,6 +12260,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Sandile[] = INCBIN_U8("graphics/pokemon/sandile/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Sandile[] = INCBIN_COMP("graphics/pokemon/sandile/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Sandile[] = INCBIN_U32("graphics/pokemon/sandile/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Sandile[] = INCBIN_U32("graphics/pokemon/sandile/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Krokorok[] = INCBIN_U32("graphics/pokemon/krokorok/anim_front.4bpp.lz");
const u32 gMonPalette_Krokorok[] = INCBIN_U32("graphics/pokemon/krokorok/normal.gbapal.lz");
@@ -7309,6 +12276,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Krokorok[] = INCBIN_U8("graphics/pokemon/krokorok/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Krokorok[] = INCBIN_COMP("graphics/pokemon/krokorok/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Krokorok[] = INCBIN_U32("graphics/pokemon/krokorok/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Krokorok[] = INCBIN_U32("graphics/pokemon/krokorok/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Krookodile[] = INCBIN_U32("graphics/pokemon/krookodile/anim_front.4bpp.lz");
const u32 gMonPalette_Krookodile[] = INCBIN_U32("graphics/pokemon/krookodile/normal.gbapal.lz");
@@ -7318,6 +12292,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Krookodile[] = INCBIN_U8("graphics/pokemon/krookodile/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Krookodile[] = INCBIN_COMP("graphics/pokemon/krookodile/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Krookodile[] = INCBIN_U32("graphics/pokemon/krookodile/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Krookodile[] = INCBIN_U32("graphics/pokemon/krookodile/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SANDILE
#if P_FAMILY_DARUMAKA
@@ -7329,6 +12310,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Darumaka[] = INCBIN_U8("graphics/pokemon/darumaka/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Darumaka[] = INCBIN_COMP("graphics/pokemon/darumaka/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Darumaka[] = INCBIN_U32("graphics/pokemon/darumaka/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Darumaka[] = INCBIN_U32("graphics/pokemon/darumaka/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_DarmanitanStandardMode[] = INCBIN_U32("graphics/pokemon/darmanitan/anim_front.4bpp.lz");
const u32 gMonPalette_DarmanitanStandardMode[] = INCBIN_U32("graphics/pokemon/darmanitan/normal.gbapal.lz");
@@ -7338,12 +12326,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Darmanitan[] = INCBIN_U8("graphics/pokemon/darmanitan/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_DarmanitanStandardMode[] = INCBIN_COMP("graphics/pokemon/darmanitan/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_DarmanitanStandardMode[] = INCBIN_U32("graphics/pokemon/darmanitan/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_DarmanitanStandardMode[] = INCBIN_U32("graphics/pokemon/darmanitan/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_DarmanitanZenMode[] = INCBIN_U32("graphics/pokemon/darmanitan/zen_mode/anim_front.4bpp.lz");
const u32 gMonPalette_DarmanitanZenMode[] = INCBIN_U32("graphics/pokemon/darmanitan/zen_mode/normal.gbapal.lz");
const u32 gMonBackPic_DarmanitanZenMode[] = INCBIN_U32("graphics/pokemon/darmanitan/zen_mode/back.4bpp.lz");
const u32 gMonShinyPalette_DarmanitanZenMode[] = INCBIN_U32("graphics/pokemon/darmanitan/zen_mode/shiny.gbapal.lz");
const u8 gMonIcon_DarmanitanZenMode[] = INCBIN_U8("graphics/pokemon/darmanitan/zen_mode/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_DarmanitanZenMode[] = INCBIN_COMP("graphics/pokemon/darmanitan/zen_mode/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_DarmanitanZenMode[] = INCBIN_U32("graphics/pokemon/darmanitan/zen_mode/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_DarmanitanZenMode[] = INCBIN_U32("graphics/pokemon/darmanitan/zen_mode/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GALARIAN_FORMS
const u32 gMonFrontPic_DarumakaGalarian[] = INCBIN_U32("graphics/pokemon/darumaka/galarian/front.4bpp.lz");
@@ -7351,18 +12353,39 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_DarumakaGalarian[] = INCBIN_U32("graphics/pokemon/darumaka/galarian/back.4bpp.lz");
const u32 gMonShinyPalette_DarumakaGalarian[] = INCBIN_U32("graphics/pokemon/darumaka/galarian/shiny.gbapal.lz");
const u8 gMonIcon_DarumakaGalarian[] = INCBIN_U8("graphics/pokemon/darumaka/galarian/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_DarumakaGalarian[] = INCBIN_COMP("graphics/pokemon/darumaka/galarian/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_DarumakaGalarian[] = INCBIN_U32("graphics/pokemon/darumaka/galarian/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_DarumakaGalarian[] = INCBIN_U32("graphics/pokemon/darumaka/galarian/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_DarmanitanGalarianStandardMode[] = INCBIN_U32("graphics/pokemon/darmanitan/galarian/front.4bpp.lz");
const u32 gMonPalette_DarmanitanGalarianStandardMode[] = INCBIN_U32("graphics/pokemon/darmanitan/galarian/normal.gbapal.lz");
const u32 gMonBackPic_DarmanitanGalarianStandardMode[] = INCBIN_U32("graphics/pokemon/darmanitan/galarian/back.4bpp.lz");
const u32 gMonShinyPalette_DarmanitanGalarianStandardMode[] = INCBIN_U32("graphics/pokemon/darmanitan/galarian/shiny.gbapal.lz");
const u8 gMonIcon_DarmanitanGalarianStandardMode[] = INCBIN_U8("graphics/pokemon/darmanitan/galarian/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_DarmanitanGalarianStandardMode[] = INCBIN_COMP("graphics/pokemon/darmanitan/galarian/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_DarmanitanGalarianStandardMode[] = INCBIN_U32("graphics/pokemon/darmanitan/galarian/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_DarmanitanGalarianStandardMode[] = INCBIN_U32("graphics/pokemon/darmanitan/galarian/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_DarmanitanGalarianZenMode[] = INCBIN_U32("graphics/pokemon/darmanitan/zen_mode/galarian/front.4bpp.lz");
const u32 gMonPalette_DarmanitanGalarianZenMode[] = INCBIN_U32("graphics/pokemon/darmanitan/zen_mode/galarian/normal.gbapal.lz");
const u32 gMonBackPic_DarmanitanGalarianZenMode[] = INCBIN_U32("graphics/pokemon/darmanitan/zen_mode/galarian/back.4bpp.lz");
const u32 gMonShinyPalette_DarmanitanGalarianZenMode[] = INCBIN_U32("graphics/pokemon/darmanitan/zen_mode/galarian/shiny.gbapal.lz");
const u8 gMonIcon_DarmanitanGalarianZenMode[] = INCBIN_U8("graphics/pokemon/darmanitan/zen_mode/galarian/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_DarmanitanGalarianZenMode[] = INCBIN_COMP("graphics/pokemon/darmanitan/zen_mode/galarian/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_DarmanitanGalarianZenMode[] = INCBIN_U32("graphics/pokemon/darmanitan/zen_mode/galarian/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_DarmanitanGalarianZenMode[] = INCBIN_U32("graphics/pokemon/darmanitan/zen_mode/galarian/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GALARIAN_FORMS
#endif //P_FAMILY_DARUMAKA
@@ -7375,6 +12398,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Maractus[] = INCBIN_U8("graphics/pokemon/maractus/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Maractus[] = INCBIN_COMP("graphics/pokemon/maractus/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Maractus[] = INCBIN_U32("graphics/pokemon/maractus/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Maractus[] = INCBIN_U32("graphics/pokemon/maractus/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_MARACTUS
#if P_FAMILY_DWEBBLE
@@ -7386,6 +12416,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Dwebble[] = INCBIN_U8("graphics/pokemon/dwebble/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Dwebble[] = INCBIN_COMP("graphics/pokemon/dwebble/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Dwebble[] = INCBIN_U32("graphics/pokemon/dwebble/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Dwebble[] = INCBIN_U32("graphics/pokemon/dwebble/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Crustle[] = INCBIN_U32("graphics/pokemon/crustle/anim_front.4bpp.lz");
const u32 gMonPalette_Crustle[] = INCBIN_U32("graphics/pokemon/crustle/normal.gbapal.lz");
@@ -7395,6 +12432,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Crustle[] = INCBIN_U8("graphics/pokemon/crustle/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Crustle[] = INCBIN_COMP("graphics/pokemon/crustle/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Crustle[] = INCBIN_U32("graphics/pokemon/crustle/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Crustle[] = INCBIN_U32("graphics/pokemon/crustle/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_DWEBBLE
#if P_FAMILY_SCRAGGY
@@ -7406,6 +12450,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Scraggy[] = INCBIN_U8("graphics/pokemon/scraggy/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Scraggy[] = INCBIN_COMP("graphics/pokemon/scraggy/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Scraggy[] = INCBIN_U32("graphics/pokemon/scraggy/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Scraggy[] = INCBIN_U32("graphics/pokemon/scraggy/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Scrafty[] = INCBIN_U32("graphics/pokemon/scrafty/anim_front.4bpp.lz");
const u32 gMonPalette_Scrafty[] = INCBIN_U32("graphics/pokemon/scrafty/normal.gbapal.lz");
@@ -7415,6 +12466,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Scrafty[] = INCBIN_U8("graphics/pokemon/scrafty/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Scrafty[] = INCBIN_COMP("graphics/pokemon/scrafty/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Scrafty[] = INCBIN_U32("graphics/pokemon/scrafty/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Scrafty[] = INCBIN_U32("graphics/pokemon/scrafty/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SCRAGGY
#if P_FAMILY_SIGILYPH
@@ -7426,6 +12484,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Sigilyph[] = INCBIN_U8("graphics/pokemon/sigilyph/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Sigilyph[] = INCBIN_COMP("graphics/pokemon/sigilyph/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Sigilyph[] = INCBIN_U32("graphics/pokemon/sigilyph/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Sigilyph[] = INCBIN_U32("graphics/pokemon/sigilyph/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SIGILYPH
#if P_FAMILY_YAMASK
@@ -7437,6 +12502,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Yamask[] = INCBIN_U8("graphics/pokemon/yamask/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Yamask[] = INCBIN_COMP("graphics/pokemon/yamask/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Yamask[] = INCBIN_U32("graphics/pokemon/yamask/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Yamask[] = INCBIN_U32("graphics/pokemon/yamask/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Cofagrigus[] = INCBIN_U32("graphics/pokemon/cofagrigus/anim_front.4bpp.lz");
const u32 gMonPalette_Cofagrigus[] = INCBIN_U32("graphics/pokemon/cofagrigus/normal.gbapal.lz");
@@ -7446,6 +12518,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Cofagrigus[] = INCBIN_U8("graphics/pokemon/cofagrigus/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Cofagrigus[] = INCBIN_COMP("graphics/pokemon/cofagrigus/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Cofagrigus[] = INCBIN_U32("graphics/pokemon/cofagrigus/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Cofagrigus[] = INCBIN_U32("graphics/pokemon/cofagrigus/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GALARIAN_FORMS
const u32 gMonFrontPic_YamaskGalarian[] = INCBIN_U32("graphics/pokemon/yamask/galarian/front.4bpp.lz");
@@ -7453,6 +12532,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_YamaskGalarian[] = INCBIN_U32("graphics/pokemon/yamask/galarian/back.4bpp.lz");
const u32 gMonShinyPalette_YamaskGalarian[] = INCBIN_U32("graphics/pokemon/yamask/galarian/shiny.gbapal.lz");
const u8 gMonIcon_YamaskGalarian[] = INCBIN_U8("graphics/pokemon/yamask/galarian/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_YamaskGalarian[] = INCBIN_COMP("graphics/pokemon/yamask/galarian/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_YamaskGalarian[] = INCBIN_U32("graphics/pokemon/yamask/galarian/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_YamaskGalarian[] = INCBIN_U32("graphics/pokemon/yamask/galarian/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Runerigus[] = INCBIN_U32("graphics/pokemon/runerigus/front.4bpp.lz");
const u32 gMonPalette_Runerigus[] = INCBIN_U32("graphics/pokemon/runerigus/normal.gbapal.lz");
@@ -7462,6 +12548,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Runerigus[] = INCBIN_U8("graphics/pokemon/runerigus/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Runerigus[] = INCBIN_COMP("graphics/pokemon/runerigus/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Runerigus[] = INCBIN_U32("graphics/pokemon/runerigus/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Runerigus[] = INCBIN_U32("graphics/pokemon/runerigus/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GALARIAN_FORMS
#endif //P_FAMILY_YAMASK
@@ -7474,6 +12567,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Tirtouga[] = INCBIN_U8("graphics/pokemon/tirtouga/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Tirtouga[] = INCBIN_COMP("graphics/pokemon/tirtouga/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Tirtouga[] = INCBIN_U32("graphics/pokemon/tirtouga/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Tirtouga[] = INCBIN_U32("graphics/pokemon/tirtouga/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Carracosta[] = INCBIN_U32("graphics/pokemon/carracosta/anim_front.4bpp.lz");
const u32 gMonPalette_Carracosta[] = INCBIN_U32("graphics/pokemon/carracosta/normal.gbapal.lz");
@@ -7483,6 +12583,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Carracosta[] = INCBIN_U8("graphics/pokemon/carracosta/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Carracosta[] = INCBIN_COMP("graphics/pokemon/carracosta/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Carracosta[] = INCBIN_U32("graphics/pokemon/carracosta/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Carracosta[] = INCBIN_U32("graphics/pokemon/carracosta/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_TIRTOUGA
#if P_FAMILY_ARCHEN
@@ -7494,6 +12601,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Archen[] = INCBIN_U8("graphics/pokemon/archen/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Archen[] = INCBIN_COMP("graphics/pokemon/archen/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Archen[] = INCBIN_U32("graphics/pokemon/archen/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Archen[] = INCBIN_U32("graphics/pokemon/archen/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Archeops[] = INCBIN_U32("graphics/pokemon/archeops/anim_front.4bpp.lz");
const u32 gMonPalette_Archeops[] = INCBIN_U32("graphics/pokemon/archeops/normal.gbapal.lz");
@@ -7503,6 +12617,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Archeops[] = INCBIN_U8("graphics/pokemon/archeops/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Archeops[] = INCBIN_COMP("graphics/pokemon/archeops/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Archeops[] = INCBIN_U32("graphics/pokemon/archeops/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Archeops[] = INCBIN_U32("graphics/pokemon/archeops/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_ARCHEN
#if P_FAMILY_TRUBBISH
@@ -7514,6 +12635,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Trubbish[] = INCBIN_U8("graphics/pokemon/trubbish/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Trubbish[] = INCBIN_COMP("graphics/pokemon/trubbish/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Trubbish[] = INCBIN_U32("graphics/pokemon/trubbish/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Trubbish[] = INCBIN_U32("graphics/pokemon/trubbish/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Garbodor[] = INCBIN_U32("graphics/pokemon/garbodor/anim_front.4bpp.lz");
const u32 gMonPalette_Garbodor[] = INCBIN_U32("graphics/pokemon/garbodor/normal.gbapal.lz");
@@ -7523,6 +12651,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Garbodor[] = INCBIN_U8("graphics/pokemon/garbodor/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Garbodor[] = INCBIN_COMP("graphics/pokemon/garbodor/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Garbodor[] = INCBIN_U32("graphics/pokemon/garbodor/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Garbodor[] = INCBIN_U32("graphics/pokemon/garbodor/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GIGANTAMAX_FORMS
const u32 gMonFrontPic_GarbodorGigantamax[] = INCBIN_U32("graphics/pokemon/garbodor/gigantamax/front.4bpp.lz");
@@ -7530,6 +12665,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonPalette_GarbodorGigantamax[] = INCBIN_U32("graphics/pokemon/garbodor/gigantamax/normal.gbapal.lz");
const u32 gMonShinyPalette_GarbodorGigantamax[] = INCBIN_U32("graphics/pokemon/garbodor/gigantamax/shiny.gbapal.lz");
const u8 gMonIcon_GarbodorGigantamax[] = INCBIN_U8("graphics/pokemon/garbodor/gigantamax/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_GarbodorGigantamax[] = INCBIN_COMP("graphics/pokemon/garbodor/gigantamax/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_GarbodorGigantamax[] = INCBIN_U32("graphics/pokemon/garbodor/gigantamax/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_GarbodorGigantamax[] = INCBIN_U32("graphics/pokemon/garbodor/gigantamax/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GIGANTAMAX_FORMS
#endif //P_FAMILY_TRUBBISH
@@ -7542,6 +12684,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Zorua[] = INCBIN_U8("graphics/pokemon/zorua/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Zorua[] = INCBIN_COMP("graphics/pokemon/zorua/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Zorua[] = INCBIN_U32("graphics/pokemon/zorua/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Zorua[] = INCBIN_U32("graphics/pokemon/zorua/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Zoroark[] = INCBIN_U32("graphics/pokemon/zoroark/anim_front.4bpp.lz");
const u32 gMonPalette_Zoroark[] = INCBIN_U32("graphics/pokemon/zoroark/normal.gbapal.lz");
@@ -7551,6 +12700,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Zoroark[] = INCBIN_U8("graphics/pokemon/zoroark/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Zoroark[] = INCBIN_COMP("graphics/pokemon/zoroark/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Zoroark[] = INCBIN_U32("graphics/pokemon/zoroark/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Zoroark[] = INCBIN_U32("graphics/pokemon/zoroark/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_HISUIAN_FORMS
const u32 gMonFrontPic_ZoruaHisuian[] = INCBIN_U32("graphics/pokemon/zorua/hisuian/front.4bpp.lz");
@@ -7558,12 +12714,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_ZoruaHisuian[] = INCBIN_U32("graphics/pokemon/zorua/hisuian/back.4bpp.lz");
const u32 gMonShinyPalette_ZoruaHisuian[] = INCBIN_U32("graphics/pokemon/zorua/hisuian/shiny.gbapal.lz");
const u8 gMonIcon_ZoruaHisuian[] = INCBIN_U8("graphics/pokemon/zorua/hisuian/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_ZoruaHisuian[] = INCBIN_COMP("graphics/pokemon/zorua/hisuian/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_ZoruaHisuian[] = INCBIN_U32("graphics/pokemon/zorua/hisuian/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_ZoruaHisuian[] = INCBIN_U32("graphics/pokemon/zorua/hisuian/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_ZoroarkHisuian[] = INCBIN_U32("graphics/pokemon/zoroark/hisuian/front.4bpp.lz");
const u32 gMonPalette_ZoroarkHisuian[] = INCBIN_U32("graphics/pokemon/zoroark/hisuian/normal.gbapal.lz");
const u32 gMonBackPic_ZoroarkHisuian[] = INCBIN_U32("graphics/pokemon/zoroark/hisuian/back.4bpp.lz");
const u32 gMonShinyPalette_ZoroarkHisuian[] = INCBIN_U32("graphics/pokemon/zoroark/hisuian/shiny.gbapal.lz");
const u8 gMonIcon_ZoroarkHisuian[] = INCBIN_U8("graphics/pokemon/zoroark/hisuian/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_ZoroarkHisuian[] = INCBIN_COMP("graphics/pokemon/zoroark/hisuian/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_ZoroarkHisuian[] = INCBIN_U32("graphics/pokemon/zoroark/hisuian/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_ZoroarkHisuian[] = INCBIN_U32("graphics/pokemon/zoroark/hisuian/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_HISUIAN_FORMS
#endif //P_FAMILY_ZORUA
@@ -7576,6 +12746,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Minccino[] = INCBIN_U8("graphics/pokemon/minccino/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Minccino[] = INCBIN_COMP("graphics/pokemon/minccino/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Minccino[] = INCBIN_U32("graphics/pokemon/minccino/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Minccino[] = INCBIN_U32("graphics/pokemon/minccino/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Cinccino[] = INCBIN_U32("graphics/pokemon/cinccino/anim_front.4bpp.lz");
const u32 gMonPalette_Cinccino[] = INCBIN_U32("graphics/pokemon/cinccino/normal.gbapal.lz");
@@ -7585,6 +12762,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Cinccino[] = INCBIN_U8("graphics/pokemon/cinccino/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Cinccino[] = INCBIN_COMP("graphics/pokemon/cinccino/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Cinccino[] = INCBIN_U32("graphics/pokemon/cinccino/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Cinccino[] = INCBIN_U32("graphics/pokemon/cinccino/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_MINCCINO
#if P_FAMILY_GOTHITA
@@ -7596,6 +12780,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Gothita[] = INCBIN_U8("graphics/pokemon/gothita/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Gothita[] = INCBIN_COMP("graphics/pokemon/gothita/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Gothita[] = INCBIN_U32("graphics/pokemon/gothita/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Gothita[] = INCBIN_U32("graphics/pokemon/gothita/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Gothorita[] = INCBIN_U32("graphics/pokemon/gothorita/anim_front.4bpp.lz");
const u32 gMonPalette_Gothorita[] = INCBIN_U32("graphics/pokemon/gothorita/normal.gbapal.lz");
@@ -7605,6 +12796,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Gothorita[] = INCBIN_U8("graphics/pokemon/gothorita/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Gothorita[] = INCBIN_COMP("graphics/pokemon/gothorita/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Gothorita[] = INCBIN_U32("graphics/pokemon/gothorita/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Gothorita[] = INCBIN_U32("graphics/pokemon/gothorita/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Gothitelle[] = INCBIN_U32("graphics/pokemon/gothitelle/anim_front.4bpp.lz");
const u32 gMonPalette_Gothitelle[] = INCBIN_U32("graphics/pokemon/gothitelle/normal.gbapal.lz");
@@ -7614,6 +12812,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Gothitelle[] = INCBIN_U8("graphics/pokemon/gothitelle/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Gothitelle[] = INCBIN_COMP("graphics/pokemon/gothitelle/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Gothitelle[] = INCBIN_U32("graphics/pokemon/gothitelle/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Gothitelle[] = INCBIN_U32("graphics/pokemon/gothitelle/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_GOTHITA
#if P_FAMILY_SOLOSIS
@@ -7625,6 +12830,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Solosis[] = INCBIN_U8("graphics/pokemon/solosis/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Solosis[] = INCBIN_COMP("graphics/pokemon/solosis/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Solosis[] = INCBIN_U32("graphics/pokemon/solosis/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Solosis[] = INCBIN_U32("graphics/pokemon/solosis/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Duosion[] = INCBIN_U32("graphics/pokemon/duosion/anim_front.4bpp.lz");
const u32 gMonPalette_Duosion[] = INCBIN_U32("graphics/pokemon/duosion/normal.gbapal.lz");
@@ -7634,6 +12846,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Duosion[] = INCBIN_U8("graphics/pokemon/duosion/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Duosion[] = INCBIN_COMP("graphics/pokemon/duosion/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Duosion[] = INCBIN_U32("graphics/pokemon/duosion/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Duosion[] = INCBIN_U32("graphics/pokemon/duosion/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Reuniclus[] = INCBIN_U32("graphics/pokemon/reuniclus/anim_front.4bpp.lz");
const u32 gMonPalette_Reuniclus[] = INCBIN_U32("graphics/pokemon/reuniclus/normal.gbapal.lz");
@@ -7643,6 +12862,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Reuniclus[] = INCBIN_U8("graphics/pokemon/reuniclus/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Reuniclus[] = INCBIN_COMP("graphics/pokemon/reuniclus/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Reuniclus[] = INCBIN_U32("graphics/pokemon/reuniclus/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Reuniclus[] = INCBIN_U32("graphics/pokemon/reuniclus/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SOLOSIS
#if P_FAMILY_DUCKLETT
@@ -7654,6 +12880,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Ducklett[] = INCBIN_U8("graphics/pokemon/ducklett/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Ducklett[] = INCBIN_COMP("graphics/pokemon/ducklett/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Ducklett[] = INCBIN_U32("graphics/pokemon/ducklett/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Ducklett[] = INCBIN_U32("graphics/pokemon/ducklett/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Swanna[] = INCBIN_U32("graphics/pokemon/swanna/anim_front.4bpp.lz");
const u32 gMonPalette_Swanna[] = INCBIN_U32("graphics/pokemon/swanna/normal.gbapal.lz");
@@ -7663,6 +12896,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Swanna[] = INCBIN_U8("graphics/pokemon/swanna/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Swanna[] = INCBIN_COMP("graphics/pokemon/swanna/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Swanna[] = INCBIN_U32("graphics/pokemon/swanna/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Swanna[] = INCBIN_U32("graphics/pokemon/swanna/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_DUCKLETT
#if P_FAMILY_VANILLITE
@@ -7674,6 +12914,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Vanillite[] = INCBIN_U8("graphics/pokemon/vanillite/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Vanillite[] = INCBIN_COMP("graphics/pokemon/vanillite/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Vanillite[] = INCBIN_U32("graphics/pokemon/vanillite/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Vanillite[] = INCBIN_U32("graphics/pokemon/vanillite/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Vanillish[] = INCBIN_U32("graphics/pokemon/vanillish/anim_front.4bpp.lz");
const u32 gMonPalette_Vanillish[] = INCBIN_U32("graphics/pokemon/vanillish/normal.gbapal.lz");
@@ -7683,6 +12930,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Vanillish[] = INCBIN_U8("graphics/pokemon/vanillish/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Vanillish[] = INCBIN_COMP("graphics/pokemon/vanillish/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Vanillish[] = INCBIN_U32("graphics/pokemon/vanillish/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Vanillish[] = INCBIN_U32("graphics/pokemon/vanillish/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Vanilluxe[] = INCBIN_U32("graphics/pokemon/vanilluxe/anim_front.4bpp.lz");
const u32 gMonPalette_Vanilluxe[] = INCBIN_U32("graphics/pokemon/vanilluxe/normal.gbapal.lz");
@@ -7692,6 +12946,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Vanilluxe[] = INCBIN_U8("graphics/pokemon/vanilluxe/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Vanilluxe[] = INCBIN_COMP("graphics/pokemon/vanilluxe/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Vanilluxe[] = INCBIN_U32("graphics/pokemon/vanilluxe/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Vanilluxe[] = INCBIN_U32("graphics/pokemon/vanilluxe/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_VANILLITE
#if P_FAMILY_DEERLING
@@ -7717,6 +12978,23 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonShinyPalette_DeerlingWinter[] = INCBIN_U32("graphics/pokemon/deerling/winter/shiny.gbapal.lz");
const u8 gMonIcon_DeerlingWinter[] = INCBIN_U8("graphics/pokemon/deerling/winter/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_DeerlingSpring[] = INCBIN_COMP("graphics/pokemon/deerling/overworld.4bpp");
+ const u32 gObjectEventPic_DeerlingSummer[] = INCBIN_COMP("graphics/pokemon/deerling/summer/overworld.4bpp");
+ const u32 gObjectEventPic_DeerlingAutumn[] = INCBIN_COMP("graphics/pokemon/deerling/autumn/overworld.4bpp");
+ const u32 gObjectEventPic_DeerlingWinter[] = INCBIN_COMP("graphics/pokemon/deerling/winter/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_DeerlingSpring[] = INCBIN_U32("graphics/pokemon/deerling/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_DeerlingSummer[] = INCBIN_U32("graphics/pokemon/deerling/summer/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_DeerlingAutumn[] = INCBIN_U32("graphics/pokemon/deerling/autumn/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_DeerlingWinter[] = INCBIN_U32("graphics/pokemon/deerling/winter/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_DeerlingSpring[] = INCBIN_U32("graphics/pokemon/deerling/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_DeerlingSummer[] = INCBIN_U32("graphics/pokemon/deerling/summer/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_DeerlingAutumn[] = INCBIN_U32("graphics/pokemon/deerling/autumn/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_DeerlingWinter[] = INCBIN_U32("graphics/pokemon/deerling/winter/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
+
const u32 gMonFrontPic_SawsbuckSpring[] = INCBIN_U32("graphics/pokemon/sawsbuck/anim_front.4bpp.lz");
const u32 gMonPalette_SawsbuckSpring[] = INCBIN_U32("graphics/pokemon/sawsbuck/normal.gbapal.lz");
const u32 gMonBackPic_SawsbuckSpring[] = INCBIN_U32("graphics/pokemon/sawsbuck/back.4bpp.lz");
@@ -7743,6 +13021,23 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_SawsbuckWinter[] = INCBIN_U32("graphics/pokemon/sawsbuck/winter/back.4bpp.lz");
const u32 gMonShinyPalette_SawsbuckWinter[] = INCBIN_U32("graphics/pokemon/sawsbuck/winter/shiny.gbapal.lz");
const u8 gMonIcon_SawsbuckWinter[] = INCBIN_U8("graphics/pokemon/sawsbuck/winter/icon.4bpp");
+
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_SawsbuckSpring[] = INCBIN_COMP("graphics/pokemon/sawsbuck/overworld.4bpp");
+ const u32 gObjectEventPic_SawsbuckSummer[] = INCBIN_COMP("graphics/pokemon/sawsbuck/summer/overworld.4bpp");
+ const u32 gObjectEventPic_SawsbuckAutumn[] = INCBIN_COMP("graphics/pokemon/sawsbuck/autumn/overworld.4bpp");
+ const u32 gObjectEventPic_SawsbuckWinter[] = INCBIN_COMP("graphics/pokemon/sawsbuck/winter/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_SawsbuckSpring[] = INCBIN_U32("graphics/pokemon/sawsbuck/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_SawsbuckSummer[] = INCBIN_U32("graphics/pokemon/sawsbuck/summer/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_SawsbuckAutumn[] = INCBIN_U32("graphics/pokemon/sawsbuck/autumn/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_SawsbuckWinter[] = INCBIN_U32("graphics/pokemon/sawsbuck/winter/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_SawsbuckSpring[] = INCBIN_U32("graphics/pokemon/sawsbuck/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_SawsbuckSummer[] = INCBIN_U32("graphics/pokemon/sawsbuck/summer/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_SawsbuckAutumn[] = INCBIN_U32("graphics/pokemon/sawsbuck/autumn/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_SawsbuckWinter[] = INCBIN_U32("graphics/pokemon/sawsbuck/winter/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_DEERLING
#if P_FAMILY_EMOLGA
@@ -7754,6 +13049,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Emolga[] = INCBIN_U8("graphics/pokemon/emolga/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Emolga[] = INCBIN_COMP("graphics/pokemon/emolga/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Emolga[] = INCBIN_U32("graphics/pokemon/emolga/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Emolga[] = INCBIN_U32("graphics/pokemon/emolga/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_EMOLGA
#if P_FAMILY_KARRABLAST
@@ -7765,6 +13067,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Karrablast[] = INCBIN_U8("graphics/pokemon/karrablast/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Karrablast[] = INCBIN_COMP("graphics/pokemon/karrablast/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Karrablast[] = INCBIN_U32("graphics/pokemon/karrablast/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Karrablast[] = INCBIN_U32("graphics/pokemon/karrablast/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Escavalier[] = INCBIN_U32("graphics/pokemon/escavalier/anim_front.4bpp.lz");
const u32 gMonPalette_Escavalier[] = INCBIN_U32("graphics/pokemon/escavalier/normal.gbapal.lz");
@@ -7774,6 +13083,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Escavalier[] = INCBIN_U8("graphics/pokemon/escavalier/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Escavalier[] = INCBIN_COMP("graphics/pokemon/escavalier/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Escavalier[] = INCBIN_U32("graphics/pokemon/escavalier/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Escavalier[] = INCBIN_U32("graphics/pokemon/escavalier/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_KARRABLAST
#if P_FAMILY_FOONGUS
@@ -7785,6 +13101,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Foongus[] = INCBIN_U8("graphics/pokemon/foongus/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Foongus[] = INCBIN_COMP("graphics/pokemon/foongus/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Foongus[] = INCBIN_U32("graphics/pokemon/foongus/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Foongus[] = INCBIN_U32("graphics/pokemon/foongus/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Amoonguss[] = INCBIN_U32("graphics/pokemon/amoonguss/anim_front.4bpp.lz");
const u32 gMonPalette_Amoonguss[] = INCBIN_U32("graphics/pokemon/amoonguss/normal.gbapal.lz");
@@ -7794,6 +13117,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Amoonguss[] = INCBIN_U8("graphics/pokemon/amoonguss/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Amoonguss[] = INCBIN_COMP("graphics/pokemon/amoonguss/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Amoonguss[] = INCBIN_U32("graphics/pokemon/amoonguss/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Amoonguss[] = INCBIN_U32("graphics/pokemon/amoonguss/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_FOONGUS
#if P_FAMILY_FRILLISH
@@ -7805,12 +13135,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Frillish[] = INCBIN_U8("graphics/pokemon/frillish/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Frillish[] = INCBIN_COMP("graphics/pokemon/frillish/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Frillish[] = INCBIN_U32("graphics/pokemon/frillish/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Frillish[] = INCBIN_U32("graphics/pokemon/frillish/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_FrillishF[] = INCBIN_U32("graphics/pokemon/frillish/anim_frontf.4bpp.lz");
const u32 gMonPalette_FrillishF[] = INCBIN_U32("graphics/pokemon/frillish/normalf.gbapal.lz");
const u32 gMonBackPic_FrillishF[] = INCBIN_U32("graphics/pokemon/frillish/backf.4bpp.lz");
const u32 gMonShinyPalette_FrillishF[] = INCBIN_U32("graphics/pokemon/frillish/shinyf.gbapal.lz");
const u8 gMonIcon_FrillishF[] = INCBIN_U8("graphics/pokemon/frillish/iconf.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_FrillishF[] = INCBIN_COMP("graphics/pokemon/frillish/followerf.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_FrillishF[] = INCBIN_U32("graphics/pokemon/frillish/overworld_normalf.gbapal.lz");
+ // const u32 gShinyOverworldPalette_FrillishF[] = INCBIN_U32("graphics/pokemon/frillish/overworld_shinyf.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Jellicent[] = INCBIN_U32("graphics/pokemon/jellicent/anim_front.4bpp.lz");
const u32 gMonPalette_Jellicent[] = INCBIN_U32("graphics/pokemon/jellicent/normal.gbapal.lz");
@@ -7820,12 +13164,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Jellicent[] = INCBIN_U8("graphics/pokemon/jellicent/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Jellicent[] = INCBIN_COMP("graphics/pokemon/jellicent/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Jellicent[] = INCBIN_U32("graphics/pokemon/jellicent/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Jellicent[] = INCBIN_U32("graphics/pokemon/jellicent/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_JellicentF[] = INCBIN_U32("graphics/pokemon/jellicent/anim_frontf.4bpp.lz");
const u32 gMonPalette_JellicentF[] = INCBIN_U32("graphics/pokemon/jellicent/normalf.gbapal.lz");
const u32 gMonBackPic_JellicentF[] = INCBIN_U32("graphics/pokemon/jellicent/backf.4bpp.lz");
const u32 gMonShinyPalette_JellicentF[] = INCBIN_U32("graphics/pokemon/jellicent/shinyf.gbapal.lz");
const u8 gMonIcon_JellicentF[] = INCBIN_U8("graphics/pokemon/jellicent/iconf.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_JellicentF[] = INCBIN_COMP("graphics/pokemon/jellicent/followerf.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_JellicentF[] = INCBIN_U32("graphics/pokemon/jellicent/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_JellicentF[] = INCBIN_U32("graphics/pokemon/jellicent/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_FRILLISH
#if P_FAMILY_ALOMOMOLA
@@ -7837,6 +13195,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Alomomola[] = INCBIN_U8("graphics/pokemon/alomomola/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Alomomola[] = INCBIN_COMP("graphics/pokemon/alomomola/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Alomomola[] = INCBIN_U32("graphics/pokemon/alomomola/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Alomomola[] = INCBIN_U32("graphics/pokemon/alomomola/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_ALOMOMOLA
#if P_FAMILY_JOLTIK
@@ -7848,6 +13213,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Joltik[] = INCBIN_U8("graphics/pokemon/joltik/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Joltik[] = INCBIN_COMP("graphics/pokemon/joltik/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Joltik[] = INCBIN_U32("graphics/pokemon/joltik/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Joltik[] = INCBIN_U32("graphics/pokemon/joltik/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Galvantula[] = INCBIN_U32("graphics/pokemon/galvantula/anim_front.4bpp.lz");
const u32 gMonPalette_Galvantula[] = INCBIN_U32("graphics/pokemon/galvantula/normal.gbapal.lz");
@@ -7857,6 +13229,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Galvantula[] = INCBIN_U8("graphics/pokemon/galvantula/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Galvantula[] = INCBIN_COMP("graphics/pokemon/galvantula/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Galvantula[] = INCBIN_U32("graphics/pokemon/galvantula/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Galvantula[] = INCBIN_U32("graphics/pokemon/galvantula/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_JOLTIK
#if P_FAMILY_FERROSEED
@@ -7868,6 +13247,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Ferroseed[] = INCBIN_U8("graphics/pokemon/ferroseed/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Ferroseed[] = INCBIN_COMP("graphics/pokemon/ferroseed/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Ferroseed[] = INCBIN_U32("graphics/pokemon/ferroseed/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Ferroseed[] = INCBIN_U32("graphics/pokemon/ferroseed/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Ferrothorn[] = INCBIN_U32("graphics/pokemon/ferrothorn/anim_front.4bpp.lz");
const u32 gMonPalette_Ferrothorn[] = INCBIN_U32("graphics/pokemon/ferrothorn/normal.gbapal.lz");
@@ -7877,6 +13263,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Ferrothorn[] = INCBIN_U8("graphics/pokemon/ferrothorn/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Ferrothorn[] = INCBIN_COMP("graphics/pokemon/ferrothorn/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Ferrothorn[] = INCBIN_U32("graphics/pokemon/ferrothorn/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Ferrothorn[] = INCBIN_U32("graphics/pokemon/ferrothorn/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_FERROSEED
#if P_FAMILY_KLINK
@@ -7888,6 +13281,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Klink[] = INCBIN_U8("graphics/pokemon/klink/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Klink[] = INCBIN_COMP("graphics/pokemon/klink/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Klink[] = INCBIN_U32("graphics/pokemon/klink/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Klink[] = INCBIN_U32("graphics/pokemon/klink/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Klang[] = INCBIN_U32("graphics/pokemon/klang/anim_front.4bpp.lz");
const u32 gMonPalette_Klang[] = INCBIN_U32("graphics/pokemon/klang/normal.gbapal.lz");
@@ -7897,6 +13297,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Klang[] = INCBIN_U8("graphics/pokemon/klang/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Klang[] = INCBIN_COMP("graphics/pokemon/klang/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Klang[] = INCBIN_U32("graphics/pokemon/klang/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Klang[] = INCBIN_U32("graphics/pokemon/klang/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Klinklang[] = INCBIN_U32("graphics/pokemon/klinklang/anim_front.4bpp.lz");
const u32 gMonPalette_Klinklang[] = INCBIN_U32("graphics/pokemon/klinklang/normal.gbapal.lz");
@@ -7906,6 +13313,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Klinklang[] = INCBIN_U8("graphics/pokemon/klinklang/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Klinklang[] = INCBIN_COMP("graphics/pokemon/klinklang/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Klinklang[] = INCBIN_U32("graphics/pokemon/klinklang/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Klinklang[] = INCBIN_U32("graphics/pokemon/klinklang/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_KLINK
#if P_FAMILY_TYNAMO
@@ -7917,6 +13331,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Tynamo[] = INCBIN_U8("graphics/pokemon/tynamo/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Tynamo[] = INCBIN_COMP("graphics/pokemon/tynamo/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Tynamo[] = INCBIN_U32("graphics/pokemon/tynamo/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Tynamo[] = INCBIN_U32("graphics/pokemon/tynamo/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Eelektrik[] = INCBIN_U32("graphics/pokemon/eelektrik/anim_front.4bpp.lz");
const u32 gMonPalette_Eelektrik[] = INCBIN_U32("graphics/pokemon/eelektrik/normal.gbapal.lz");
@@ -7926,6 +13347,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Eelektrik[] = INCBIN_U8("graphics/pokemon/eelektrik/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Eelektrik[] = INCBIN_COMP("graphics/pokemon/eelektrik/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Eelektrik[] = INCBIN_U32("graphics/pokemon/eelektrik/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Eelektrik[] = INCBIN_U32("graphics/pokemon/eelektrik/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Eelektross[] = INCBIN_U32("graphics/pokemon/eelektross/anim_front.4bpp.lz");
const u32 gMonPalette_Eelektross[] = INCBIN_U32("graphics/pokemon/eelektross/normal.gbapal.lz");
@@ -7935,6 +13363,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Eelektross[] = INCBIN_U8("graphics/pokemon/eelektross/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Eelektross[] = INCBIN_COMP("graphics/pokemon/eelektross/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Eelektross[] = INCBIN_U32("graphics/pokemon/eelektross/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Eelektross[] = INCBIN_U32("graphics/pokemon/eelektross/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_TYNAMO
#if P_FAMILY_ELGYEM
@@ -7946,6 +13381,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Elgyem[] = INCBIN_U8("graphics/pokemon/elgyem/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Elgyem[] = INCBIN_COMP("graphics/pokemon/elgyem/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Elgyem[] = INCBIN_U32("graphics/pokemon/elgyem/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Elgyem[] = INCBIN_U32("graphics/pokemon/elgyem/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Beheeyem[] = INCBIN_U32("graphics/pokemon/beheeyem/anim_front.4bpp.lz");
const u32 gMonPalette_Beheeyem[] = INCBIN_U32("graphics/pokemon/beheeyem/normal.gbapal.lz");
@@ -7955,6 +13397,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Beheeyem[] = INCBIN_U8("graphics/pokemon/beheeyem/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Beheeyem[] = INCBIN_COMP("graphics/pokemon/beheeyem/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Beheeyem[] = INCBIN_U32("graphics/pokemon/beheeyem/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Beheeyem[] = INCBIN_U32("graphics/pokemon/beheeyem/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_ELGYEM
#if P_FAMILY_LITWICK
@@ -7966,6 +13415,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Litwick[] = INCBIN_U8("graphics/pokemon/litwick/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Litwick[] = INCBIN_COMP("graphics/pokemon/litwick/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Litwick[] = INCBIN_U32("graphics/pokemon/litwick/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Litwick[] = INCBIN_U32("graphics/pokemon/litwick/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Lampent[] = INCBIN_U32("graphics/pokemon/lampent/anim_front.4bpp.lz");
const u32 gMonPalette_Lampent[] = INCBIN_U32("graphics/pokemon/lampent/normal.gbapal.lz");
@@ -7975,6 +13431,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Lampent[] = INCBIN_U8("graphics/pokemon/lampent/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Lampent[] = INCBIN_COMP("graphics/pokemon/lampent/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Lampent[] = INCBIN_U32("graphics/pokemon/lampent/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Lampent[] = INCBIN_U32("graphics/pokemon/lampent/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Chandelure[] = INCBIN_U32("graphics/pokemon/chandelure/anim_front.4bpp.lz");
const u32 gMonPalette_Chandelure[] = INCBIN_U32("graphics/pokemon/chandelure/normal.gbapal.lz");
@@ -7984,6 +13447,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Chandelure[] = INCBIN_U8("graphics/pokemon/chandelure/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Chandelure[] = INCBIN_COMP("graphics/pokemon/chandelure/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Chandelure[] = INCBIN_U32("graphics/pokemon/chandelure/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Chandelure[] = INCBIN_U32("graphics/pokemon/chandelure/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_LITWICK
#if P_FAMILY_AXEW
@@ -7995,6 +13465,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Axew[] = INCBIN_U8("graphics/pokemon/axew/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Axew[] = INCBIN_COMP("graphics/pokemon/axew/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Axew[] = INCBIN_U32("graphics/pokemon/axew/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Axew[] = INCBIN_U32("graphics/pokemon/axew/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Fraxure[] = INCBIN_U32("graphics/pokemon/fraxure/anim_front.4bpp.lz");
const u32 gMonPalette_Fraxure[] = INCBIN_U32("graphics/pokemon/fraxure/normal.gbapal.lz");
@@ -8004,6 +13481,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Fraxure[] = INCBIN_U8("graphics/pokemon/fraxure/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Fraxure[] = INCBIN_COMP("graphics/pokemon/fraxure/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Fraxure[] = INCBIN_U32("graphics/pokemon/fraxure/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Fraxure[] = INCBIN_U32("graphics/pokemon/fraxure/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Haxorus[] = INCBIN_U32("graphics/pokemon/haxorus/anim_front.4bpp.lz");
const u32 gMonPalette_Haxorus[] = INCBIN_U32("graphics/pokemon/haxorus/normal.gbapal.lz");
@@ -8013,6 +13497,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Haxorus[] = INCBIN_U8("graphics/pokemon/haxorus/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Haxorus[] = INCBIN_COMP("graphics/pokemon/haxorus/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Haxorus[] = INCBIN_U32("graphics/pokemon/haxorus/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Haxorus[] = INCBIN_U32("graphics/pokemon/haxorus/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_AXEW
#if P_FAMILY_CUBCHOO
@@ -8024,6 +13515,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Cubchoo[] = INCBIN_U8("graphics/pokemon/cubchoo/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Cubchoo[] = INCBIN_COMP("graphics/pokemon/cubchoo/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Cubchoo[] = INCBIN_U32("graphics/pokemon/cubchoo/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Cubchoo[] = INCBIN_U32("graphics/pokemon/cubchoo/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Beartic[] = INCBIN_U32("graphics/pokemon/beartic/anim_front.4bpp.lz");
const u32 gMonPalette_Beartic[] = INCBIN_U32("graphics/pokemon/beartic/normal.gbapal.lz");
@@ -8033,6 +13531,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Beartic[] = INCBIN_U8("graphics/pokemon/beartic/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Beartic[] = INCBIN_COMP("graphics/pokemon/beartic/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Beartic[] = INCBIN_U32("graphics/pokemon/beartic/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Beartic[] = INCBIN_U32("graphics/pokemon/beartic/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_CUBCHOO
#if P_FAMILY_CRYOGONAL
@@ -8044,6 +13549,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Cryogonal[] = INCBIN_U8("graphics/pokemon/cryogonal/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Cryogonal[] = INCBIN_COMP("graphics/pokemon/cryogonal/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Cryogonal[] = INCBIN_U32("graphics/pokemon/cryogonal/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Cryogonal[] = INCBIN_U32("graphics/pokemon/cryogonal/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_CRYOGONAL
#if P_FAMILY_SHELMET
@@ -8055,6 +13567,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Shelmet[] = INCBIN_U8("graphics/pokemon/shelmet/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Shelmet[] = INCBIN_COMP("graphics/pokemon/shelmet/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Shelmet[] = INCBIN_U32("graphics/pokemon/shelmet/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Shelmet[] = INCBIN_U32("graphics/pokemon/shelmet/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Accelgor[] = INCBIN_U32("graphics/pokemon/accelgor/anim_front.4bpp.lz");
const u32 gMonPalette_Accelgor[] = INCBIN_U32("graphics/pokemon/accelgor/normal.gbapal.lz");
@@ -8064,6 +13583,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Accelgor[] = INCBIN_U8("graphics/pokemon/accelgor/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Accelgor[] = INCBIN_COMP("graphics/pokemon/accelgor/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Accelgor[] = INCBIN_U32("graphics/pokemon/accelgor/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Accelgor[] = INCBIN_U32("graphics/pokemon/accelgor/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SHELMET
#if P_FAMILY_STUNFISK
@@ -8075,6 +13601,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Stunfisk[] = INCBIN_U8("graphics/pokemon/stunfisk/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Stunfisk[] = INCBIN_COMP("graphics/pokemon/stunfisk/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Stunfisk[] = INCBIN_U32("graphics/pokemon/stunfisk/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Stunfisk[] = INCBIN_U32("graphics/pokemon/stunfisk/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GALARIAN_FORMS
const u32 gMonFrontPic_StunfiskGalarian[] = INCBIN_U32("graphics/pokemon/stunfisk/galarian/front.4bpp.lz");
@@ -8082,6 +13615,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_StunfiskGalarian[] = INCBIN_U32("graphics/pokemon/stunfisk/galarian/back.4bpp.lz");
const u32 gMonShinyPalette_StunfiskGalarian[] = INCBIN_U32("graphics/pokemon/stunfisk/galarian/shiny.gbapal.lz");
const u8 gMonIcon_StunfiskGalarian[] = INCBIN_U8("graphics/pokemon/stunfisk/galarian/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_StunfiskGalarian[] = INCBIN_COMP("graphics/pokemon/stunfisk/galarian/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_StunfiskGalarian[] = INCBIN_U32("graphics/pokemon/stunfisk/galarian/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_StunfiskGalarian[] = INCBIN_U32("graphics/pokemon/stunfisk/galarian/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GALARIAN_FORMS
#endif //P_FAMILY_STUNFISK
@@ -8094,6 +13634,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Mienfoo[] = INCBIN_U8("graphics/pokemon/mienfoo/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Mienfoo[] = INCBIN_COMP("graphics/pokemon/mienfoo/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Mienfoo[] = INCBIN_U32("graphics/pokemon/mienfoo/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Mienfoo[] = INCBIN_U32("graphics/pokemon/mienfoo/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Mienshao[] = INCBIN_U32("graphics/pokemon/mienshao/anim_front.4bpp.lz");
const u32 gMonPalette_Mienshao[] = INCBIN_U32("graphics/pokemon/mienshao/normal.gbapal.lz");
@@ -8103,6 +13650,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Mienshao[] = INCBIN_U8("graphics/pokemon/mienshao/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Mienshao[] = INCBIN_COMP("graphics/pokemon/mienshao/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Mienshao[] = INCBIN_U32("graphics/pokemon/mienshao/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Mienshao[] = INCBIN_U32("graphics/pokemon/mienshao/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_MIENFOO
#if P_FAMILY_DRUDDIGON
@@ -8114,6 +13668,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Druddigon[] = INCBIN_U8("graphics/pokemon/druddigon/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Druddigon[] = INCBIN_COMP("graphics/pokemon/druddigon/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Druddigon[] = INCBIN_U32("graphics/pokemon/druddigon/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Druddigon[] = INCBIN_U32("graphics/pokemon/druddigon/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_DRUDDIGON
#if P_FAMILY_GOLETT
@@ -8125,6 +13686,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Golett[] = INCBIN_U8("graphics/pokemon/golett/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Golett[] = INCBIN_COMP("graphics/pokemon/golett/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Golett[] = INCBIN_U32("graphics/pokemon/golett/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Golett[] = INCBIN_U32("graphics/pokemon/golett/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Golurk[] = INCBIN_U32("graphics/pokemon/golurk/anim_front.4bpp.lz");
const u32 gMonPalette_Golurk[] = INCBIN_U32("graphics/pokemon/golurk/normal.gbapal.lz");
@@ -8134,6 +13702,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Golurk[] = INCBIN_U8("graphics/pokemon/golurk/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Golurk[] = INCBIN_COMP("graphics/pokemon/golurk/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Golurk[] = INCBIN_U32("graphics/pokemon/golurk/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Golurk[] = INCBIN_U32("graphics/pokemon/golurk/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_GOLETT
#if P_FAMILY_PAWNIARD
@@ -8145,6 +13720,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Pawniard[] = INCBIN_U8("graphics/pokemon/pawniard/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Pawniard[] = INCBIN_COMP("graphics/pokemon/pawniard/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Pawniard[] = INCBIN_U32("graphics/pokemon/pawniard/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Pawniard[] = INCBIN_U32("graphics/pokemon/pawniard/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Bisharp[] = INCBIN_U32("graphics/pokemon/bisharp/anim_front.4bpp.lz");
const u32 gMonPalette_Bisharp[] = INCBIN_U32("graphics/pokemon/bisharp/normal.gbapal.lz");
@@ -8154,6 +13736,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Bisharp[] = INCBIN_U8("graphics/pokemon/bisharp/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Bisharp[] = INCBIN_COMP("graphics/pokemon/bisharp/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Bisharp[] = INCBIN_U32("graphics/pokemon/bisharp/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Bisharp[] = INCBIN_U32("graphics/pokemon/bisharp/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GEN_9_CROSS_EVOS
const u32 gMonFrontPic_Kingambit[] = INCBIN_U32("graphics/pokemon/kingambit/front.4bpp.lz");
@@ -8164,6 +13753,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_9_CROSS_EVOS
#endif //P_FAMILY_PAWNIARD
@@ -8176,6 +13772,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Bouffalant[] = INCBIN_U8("graphics/pokemon/bouffalant/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Bouffalant[] = INCBIN_COMP("graphics/pokemon/bouffalant/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Bouffalant[] = INCBIN_U32("graphics/pokemon/bouffalant/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Bouffalant[] = INCBIN_U32("graphics/pokemon/bouffalant/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_BOUFFALANT
#if P_FAMILY_RUFFLET
@@ -8187,6 +13790,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Rufflet[] = INCBIN_U8("graphics/pokemon/rufflet/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Rufflet[] = INCBIN_COMP("graphics/pokemon/rufflet/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Rufflet[] = INCBIN_U32("graphics/pokemon/rufflet/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Rufflet[] = INCBIN_U32("graphics/pokemon/rufflet/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Braviary[] = INCBIN_U32("graphics/pokemon/braviary/anim_front.4bpp.lz");
const u32 gMonPalette_Braviary[] = INCBIN_U32("graphics/pokemon/braviary/normal.gbapal.lz");
@@ -8196,6 +13806,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Braviary[] = INCBIN_U8("graphics/pokemon/braviary/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Braviary[] = INCBIN_COMP("graphics/pokemon/braviary/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Braviary[] = INCBIN_U32("graphics/pokemon/braviary/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Braviary[] = INCBIN_U32("graphics/pokemon/braviary/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_HISUIAN_FORMS
const u32 gMonFrontPic_BraviaryHisuian[] = INCBIN_U32("graphics/pokemon/braviary/hisuian/front.4bpp.lz");
@@ -8203,6 +13820,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_BraviaryHisuian[] = INCBIN_U32("graphics/pokemon/braviary/hisuian/back.4bpp.lz");
const u32 gMonShinyPalette_BraviaryHisuian[] = INCBIN_U32("graphics/pokemon/braviary/hisuian/shiny.gbapal.lz");
const u8 gMonIcon_BraviaryHisuian[] = INCBIN_U8("graphics/pokemon/braviary/hisuian/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_BraviaryHisuian[] = INCBIN_COMP("graphics/pokemon/braviary/hisuian/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_BraviaryHisuian[] = INCBIN_U32("graphics/pokemon/braviary/hisuian/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_BraviaryHisuian[] = INCBIN_U32("graphics/pokemon/braviary/hisuian/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_HISUIAN_FORMS
#endif //P_FAMILY_RUFFLET
@@ -8215,6 +13839,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Vullaby[] = INCBIN_U8("graphics/pokemon/vullaby/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Vullaby[] = INCBIN_COMP("graphics/pokemon/vullaby/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Vullaby[] = INCBIN_U32("graphics/pokemon/vullaby/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Vullaby[] = INCBIN_U32("graphics/pokemon/vullaby/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Mandibuzz[] = INCBIN_U32("graphics/pokemon/mandibuzz/anim_front.4bpp.lz");
const u32 gMonPalette_Mandibuzz[] = INCBIN_U32("graphics/pokemon/mandibuzz/normal.gbapal.lz");
@@ -8224,6 +13855,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Mandibuzz[] = INCBIN_U8("graphics/pokemon/mandibuzz/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Mandibuzz[] = INCBIN_COMP("graphics/pokemon/mandibuzz/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Mandibuzz[] = INCBIN_U32("graphics/pokemon/mandibuzz/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Mandibuzz[] = INCBIN_U32("graphics/pokemon/mandibuzz/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_VULLABY
#if P_FAMILY_HEATMOR
@@ -8235,6 +13873,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Heatmor[] = INCBIN_U8("graphics/pokemon/heatmor/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Heatmor[] = INCBIN_COMP("graphics/pokemon/heatmor/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Heatmor[] = INCBIN_U32("graphics/pokemon/heatmor/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Heatmor[] = INCBIN_U32("graphics/pokemon/heatmor/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_HEATMOR
#if P_FAMILY_DURANT
@@ -8246,6 +13891,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Durant[] = INCBIN_U8("graphics/pokemon/durant/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Durant[] = INCBIN_COMP("graphics/pokemon/durant/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Durant[] = INCBIN_U32("graphics/pokemon/durant/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Durant[] = INCBIN_U32("graphics/pokemon/durant/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_DURANT
#if P_FAMILY_DEINO
@@ -8257,6 +13909,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Deino[] = INCBIN_U8("graphics/pokemon/deino/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Deino[] = INCBIN_COMP("graphics/pokemon/deino/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Deino[] = INCBIN_U32("graphics/pokemon/deino/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Deino[] = INCBIN_U32("graphics/pokemon/deino/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Zweilous[] = INCBIN_U32("graphics/pokemon/zweilous/anim_front.4bpp.lz");
const u32 gMonPalette_Zweilous[] = INCBIN_U32("graphics/pokemon/zweilous/normal.gbapal.lz");
@@ -8266,6 +13925,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Zweilous[] = INCBIN_U8("graphics/pokemon/zweilous/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Zweilous[] = INCBIN_COMP("graphics/pokemon/zweilous/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Zweilous[] = INCBIN_U32("graphics/pokemon/zweilous/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Zweilous[] = INCBIN_U32("graphics/pokemon/zweilous/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Hydreigon[] = INCBIN_U32("graphics/pokemon/hydreigon/anim_front.4bpp.lz");
const u32 gMonPalette_Hydreigon[] = INCBIN_U32("graphics/pokemon/hydreigon/normal.gbapal.lz");
@@ -8275,6 +13941,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Hydreigon[] = INCBIN_U8("graphics/pokemon/hydreigon/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Hydreigon[] = INCBIN_COMP("graphics/pokemon/hydreigon/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Hydreigon[] = INCBIN_U32("graphics/pokemon/hydreigon/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Hydreigon[] = INCBIN_U32("graphics/pokemon/hydreigon/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_DEINO
#if P_FAMILY_LARVESTA
@@ -8286,6 +13959,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Larvesta[] = INCBIN_U8("graphics/pokemon/larvesta/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Larvesta[] = INCBIN_COMP("graphics/pokemon/larvesta/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Larvesta[] = INCBIN_U32("graphics/pokemon/larvesta/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Larvesta[] = INCBIN_U32("graphics/pokemon/larvesta/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Volcarona[] = INCBIN_U32("graphics/pokemon/volcarona/anim_front.4bpp.lz");
const u32 gMonPalette_Volcarona[] = INCBIN_U32("graphics/pokemon/volcarona/normal.gbapal.lz");
@@ -8295,6 +13975,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Volcarona[] = INCBIN_U8("graphics/pokemon/volcarona/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Volcarona[] = INCBIN_COMP("graphics/pokemon/volcarona/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Volcarona[] = INCBIN_U32("graphics/pokemon/volcarona/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Volcarona[] = INCBIN_U32("graphics/pokemon/volcarona/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_LARVESTA
#if P_FAMILY_COBALION
@@ -8306,6 +13993,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Cobalion[] = INCBIN_U8("graphics/pokemon/cobalion/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Cobalion[] = INCBIN_COMP("graphics/pokemon/cobalion/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Cobalion[] = INCBIN_U32("graphics/pokemon/cobalion/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Cobalion[] = INCBIN_U32("graphics/pokemon/cobalion/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_COBALION
#if P_FAMILY_TERRAKION
@@ -8317,6 +14011,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Terrakion[] = INCBIN_U8("graphics/pokemon/terrakion/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Terrakion[] = INCBIN_COMP("graphics/pokemon/terrakion/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Terrakion[] = INCBIN_U32("graphics/pokemon/terrakion/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Terrakion[] = INCBIN_U32("graphics/pokemon/terrakion/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_TERRAKION
#if P_FAMILY_VIRIZION
@@ -8328,6 +14029,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Virizion[] = INCBIN_U8("graphics/pokemon/virizion/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Virizion[] = INCBIN_COMP("graphics/pokemon/virizion/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Virizion[] = INCBIN_U32("graphics/pokemon/virizion/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Virizion[] = INCBIN_U32("graphics/pokemon/virizion/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_VIRIZION
#if P_FAMILY_TORNADUS
@@ -8339,12 +14047,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Tornadus[] = INCBIN_U8("graphics/pokemon/tornadus/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_TornadusIncarnate[] = INCBIN_COMP("graphics/pokemon/tornadus/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_TornadusIncarnate[] = INCBIN_U32("graphics/pokemon/tornadus/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_TornadusIncarnate[] = INCBIN_U32("graphics/pokemon/tornadus/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_TornadusTherian[] = INCBIN_U32("graphics/pokemon/tornadus/therian/anim_front.4bpp.lz");
const u32 gMonPalette_TornadusTherian[] = INCBIN_U32("graphics/pokemon/tornadus/therian/normal.gbapal.lz");
const u32 gMonBackPic_TornadusTherian[] = INCBIN_U32("graphics/pokemon/tornadus/therian/back.4bpp.lz");
const u32 gMonShinyPalette_TornadusTherian[] = INCBIN_U32("graphics/pokemon/tornadus/therian/shiny.gbapal.lz");
const u8 gMonIcon_TornadusTherian[] = INCBIN_U8("graphics/pokemon/tornadus/therian/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ //const u32 gObjectEventPic_TornadusTherian[] = INCBIN_COMP("graphics/pokemon/tornadus/therian/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ //const u32 gOverworldPalette_TornadusTherian[] = INCBIN_U32("graphics/pokemon/tornadus/therian/overworld_normal.gbapal.lz");
+ //const u32 gShinyOverworldPalette_TornadusTherian[] = INCBIN_U32("graphics/pokemon/tornadus/therian/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_TORNADUS
#if P_FAMILY_THUNDURUS
@@ -8356,12 +14078,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Thundurus[] = INCBIN_U8("graphics/pokemon/thundurus/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_ThundurusIncarnate[] = INCBIN_COMP("graphics/pokemon/thundurus/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_ThundurusIncarnate[] = INCBIN_U32("graphics/pokemon/thundurus/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_ThundurusIncarnate[] = INCBIN_U32("graphics/pokemon/thundurus/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_ThundurusTherian[] = INCBIN_U32("graphics/pokemon/thundurus/therian/anim_front.4bpp.lz");
const u32 gMonPalette_ThundurusTherian[] = INCBIN_U32("graphics/pokemon/thundurus/therian/normal.gbapal.lz");
const u32 gMonBackPic_ThundurusTherian[] = INCBIN_U32("graphics/pokemon/thundurus/therian/back.4bpp.lz");
const u32 gMonShinyPalette_ThundurusTherian[] = INCBIN_U32("graphics/pokemon/thundurus/therian/shiny.gbapal.lz");
const u8 gMonIcon_ThundurusTherian[] = INCBIN_U8("graphics/pokemon/thundurus/therian/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ //const u32 gObjectEventPic_ThundurusTherian[] = INCBIN_COMP("graphics/pokemon/thundurus/therian/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ //const u32 gOverworldPalette_ThundurusTherian[] = INCBIN_U32("graphics/pokemon/thundurus/therian/overworld_normal.gbapal.lz");
+ //const u32 gShinyOverworldPalette_ThundurusTherian[] = INCBIN_U32("graphics/pokemon/thundurus/therian/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_THUNDURUS
#if P_FAMILY_RESHIRAM
@@ -8373,6 +14109,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Reshiram[] = INCBIN_U8("graphics/pokemon/reshiram/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Reshiram[] = INCBIN_COMP("graphics/pokemon/reshiram/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Reshiram[] = INCBIN_U32("graphics/pokemon/reshiram/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Reshiram[] = INCBIN_U32("graphics/pokemon/reshiram/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_RESHIRAM
#if P_FAMILY_ZEKROM
@@ -8384,6 +14127,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Zekrom[] = INCBIN_U8("graphics/pokemon/zekrom/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Zekrom[] = INCBIN_COMP("graphics/pokemon/zekrom/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Zekrom[] = INCBIN_U32("graphics/pokemon/zekrom/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Zekrom[] = INCBIN_U32("graphics/pokemon/zekrom/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_ZEKROM
#if P_FAMILY_LANDORUS
@@ -8395,12 +14145,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Landorus[] = INCBIN_U8("graphics/pokemon/landorus/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_LandorusIncarnate[] = INCBIN_COMP("graphics/pokemon/landorus/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_LandorusIncarnate[] = INCBIN_U32("graphics/pokemon/landorus/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_LandorusIncarnate[] = INCBIN_U32("graphics/pokemon/landorus/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_LandorusTherian[] = INCBIN_U32("graphics/pokemon/landorus/therian/anim_front.4bpp.lz");
const u32 gMonPalette_LandorusTherian[] = INCBIN_U32("graphics/pokemon/landorus/therian/normal.gbapal.lz");
const u32 gMonBackPic_LandorusTherian[] = INCBIN_U32("graphics/pokemon/landorus/therian/back.4bpp.lz");
const u32 gMonShinyPalette_LandorusTherian[] = INCBIN_U32("graphics/pokemon/landorus/therian/shiny.gbapal.lz");
const u8 gMonIcon_LandorusTherian[] = INCBIN_U8("graphics/pokemon/landorus/therian/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ //const u32 gObjectEventPic_LandorusTherian[] = INCBIN_COMP("graphics/pokemon/landorus/therian/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ //const u32 gOverworldPalette_LandorusTherian[] = INCBIN_U32("graphics/pokemon/landorus/therian/overworld_normal.gbapal.lz");
+ //const u32 gShinyOverworldPalette_LandorusTherian[] = INCBIN_U32("graphics/pokemon/landorus/therian/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_LANDORUS
#if P_FAMILY_ENAMORUS
@@ -8412,12 +14176,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Enamorus[] = INCBIN_U8("graphics/pokemon/enamorus/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ 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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_EnamorusTherian[] = INCBIN_U32("graphics/pokemon/enamorus/therian/front.4bpp.lz");
const u32 gMonPalette_EnamorusTherian[] = INCBIN_U32("graphics/pokemon/enamorus/therian/normal.gbapal.lz");
const u32 gMonBackPic_EnamorusTherian[] = INCBIN_U32("graphics/pokemon/enamorus/therian/back.4bpp.lz");
const u32 gMonShinyPalette_EnamorusTherian[] = INCBIN_U32("graphics/pokemon/enamorus/therian/shiny.gbapal.lz");
const u8 gMonIcon_EnamorusTherian[] = INCBIN_U8("graphics/pokemon/enamorus/therian/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ 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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_ENAMORUS
#if P_FAMILY_KYUREM
@@ -8429,6 +14207,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Kyurem[] = INCBIN_U8("graphics/pokemon/kyurem/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Kyurem[] = INCBIN_COMP("graphics/pokemon/kyurem/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Kyurem[] = INCBIN_U32("graphics/pokemon/kyurem/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Kyurem[] = INCBIN_U32("graphics/pokemon/kyurem/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_FUSION_FORMS
const u32 gMonFrontPic_KyuremWhite[] = INCBIN_U32("graphics/pokemon/kyurem/white/anim_front.4bpp.lz");
@@ -8436,12 +14221,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_KyuremWhite[] = INCBIN_U32("graphics/pokemon/kyurem/white/back.4bpp.lz");
const u32 gMonShinyPalette_KyuremWhite[] = INCBIN_U32("graphics/pokemon/kyurem/white/shiny.gbapal.lz");
const u8 gMonIcon_KyuremWhite[] = INCBIN_U8("graphics/pokemon/kyurem/white/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_KyuremWhite[] = INCBIN_COMP("graphics/pokemon/kyurem/white/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_KyuremWhite[] = INCBIN_U32("graphics/pokemon/kyurem/white/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_KyuremWhite[] = INCBIN_U32("graphics/pokemon/kyurem/white/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_KyuremBlack[] = INCBIN_U32("graphics/pokemon/kyurem/black/anim_front.4bpp.lz");
const u32 gMonPalette_KyuremBlack[] = INCBIN_U32("graphics/pokemon/kyurem/black/normal.gbapal.lz");
const u32 gMonBackPic_KyuremBlack[] = INCBIN_U32("graphics/pokemon/kyurem/black/back.4bpp.lz");
const u32 gMonShinyPalette_KyuremBlack[] = INCBIN_U32("graphics/pokemon/kyurem/black/shiny.gbapal.lz");
const u8 gMonIcon_KyuremBlack[] = INCBIN_U8("graphics/pokemon/kyurem/black/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_KyuremBlack[] = INCBIN_COMP("graphics/pokemon/kyurem/black/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_KyuremBlack[] = INCBIN_U32("graphics/pokemon/kyurem/black/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_KyuremBlack[] = INCBIN_U32("graphics/pokemon/kyurem/black/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FUSION_FORMS
#endif //P_FAMILY_KYUREM
@@ -8454,12 +14253,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Keldeo[] = INCBIN_U8("graphics/pokemon/keldeo/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_KeldeoOrdinary[] = INCBIN_COMP("graphics/pokemon/keldeo/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_KeldeoOrdinary[] = INCBIN_U32("graphics/pokemon/keldeo/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_KeldeoOrdinary[] = INCBIN_U32("graphics/pokemon/keldeo/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_KeldeoResolute[] = INCBIN_U32("graphics/pokemon/keldeo/resolute/anim_front.4bpp.lz");
const u32 gMonPalette_KeldeoResolute[] = INCBIN_U32("graphics/pokemon/keldeo/resolute/normal.gbapal.lz");
const u32 gMonBackPic_KeldeoResolute[] = INCBIN_U32("graphics/pokemon/keldeo/resolute/back.4bpp.lz");
const u32 gMonShinyPalette_KeldeoResolute[] = INCBIN_U32("graphics/pokemon/keldeo/resolute/shiny.gbapal.lz");
const u8 gMonIcon_KeldeoResolute[] = INCBIN_U8("graphics/pokemon/keldeo/resolute/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_KeldeoResolute[] = INCBIN_COMP("graphics/pokemon/keldeo/resolute/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_KeldeoResolute[] = INCBIN_U32("graphics/pokemon/keldeo/resolute/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_KeldeoResolute[] = INCBIN_U32("graphics/pokemon/keldeo/resolute/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_KELDEO
#if P_FAMILY_MELOETTA
@@ -8471,12 +14284,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Meloetta[] = INCBIN_U8("graphics/pokemon/meloetta/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_MeloettaAria[] = INCBIN_COMP("graphics/pokemon/meloetta/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_MeloettaAria[] = INCBIN_U32("graphics/pokemon/meloetta/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_MeloettaAria[] = INCBIN_U32("graphics/pokemon/meloetta/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_MeloettaPirouette[] = INCBIN_U32("graphics/pokemon/meloetta/pirouette/anim_front.4bpp.lz");
const u32 gMonPalette_MeloettaPirouette[] = INCBIN_U32("graphics/pokemon/meloetta/pirouette/normal.gbapal.lz");
const u32 gMonBackPic_MeloettaPirouette[] = INCBIN_U32("graphics/pokemon/meloetta/pirouette/back.4bpp.lz");
const u32 gMonShinyPalette_MeloettaPirouette[] = INCBIN_U32("graphics/pokemon/meloetta/pirouette/shiny.gbapal.lz");
const u8 gMonIcon_MeloettaPirouette[] = INCBIN_U8("graphics/pokemon/meloetta/pirouette/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_MeloettaPirouette[] = INCBIN_COMP("graphics/pokemon/meloetta/pirouette/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_MeloettaPirouette[] = INCBIN_U32("graphics/pokemon/meloetta/pirouette/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_MeloettaPirouette[] = INCBIN_U32("graphics/pokemon/meloetta/pirouette/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_MELOETTA
#if P_FAMILY_GENESECT
@@ -8488,6 +14315,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Genesect[] = INCBIN_U8("graphics/pokemon/genesect/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Genesect[] = INCBIN_COMP("graphics/pokemon/genesect/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Genesect[] = INCBIN_U32("graphics/pokemon/genesect/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Genesect[] = INCBIN_U32("graphics/pokemon/genesect/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonPalette_GenesectDouseDrive[] = INCBIN_U32("graphics/pokemon/genesect/douse_drive/normal.gbapal.lz");
const u32 gMonShinyPalette_GenesectDouseDrive[] = INCBIN_U32("graphics/pokemon/genesect/douse_drive/shiny.gbapal.lz");
@@ -8511,6 +14345,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Chespin[] = INCBIN_U8("graphics/pokemon/chespin/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Chespin[] = INCBIN_COMP("graphics/pokemon/chespin/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Chespin[] = INCBIN_U32("graphics/pokemon/chespin/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Chespin[] = INCBIN_U32("graphics/pokemon/chespin/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Quilladin[] = INCBIN_U32("graphics/pokemon/quilladin/anim_front.4bpp.lz");
const u32 gMonPalette_Quilladin[] = INCBIN_U32("graphics/pokemon/quilladin/normal.gbapal.lz");
@@ -8520,6 +14361,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Quilladin[] = INCBIN_U8("graphics/pokemon/quilladin/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Quilladin[] = INCBIN_COMP("graphics/pokemon/quilladin/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Quilladin[] = INCBIN_U32("graphics/pokemon/quilladin/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Quilladin[] = INCBIN_U32("graphics/pokemon/quilladin/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Chesnaught[] = INCBIN_U32("graphics/pokemon/chesnaught/anim_front.4bpp.lz");
const u32 gMonPalette_Chesnaught[] = INCBIN_U32("graphics/pokemon/chesnaught/normal.gbapal.lz");
@@ -8529,6 +14377,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Chesnaught[] = INCBIN_U8("graphics/pokemon/chesnaught/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Chesnaught[] = INCBIN_COMP("graphics/pokemon/chesnaught/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Chesnaught[] = INCBIN_U32("graphics/pokemon/chesnaught/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Chesnaught[] = INCBIN_U32("graphics/pokemon/chesnaught/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_CHESPIN
#if P_FAMILY_FENNEKIN
@@ -8540,6 +14395,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Fennekin[] = INCBIN_U8("graphics/pokemon/fennekin/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Fennekin[] = INCBIN_COMP("graphics/pokemon/fennekin/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Fennekin[] = INCBIN_U32("graphics/pokemon/fennekin/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Fennekin[] = INCBIN_U32("graphics/pokemon/fennekin/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Braixen[] = INCBIN_U32("graphics/pokemon/braixen/anim_front.4bpp.lz");
const u32 gMonPalette_Braixen[] = INCBIN_U32("graphics/pokemon/braixen/normal.gbapal.lz");
@@ -8549,6 +14411,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Braixen[] = INCBIN_U8("graphics/pokemon/braixen/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Braixen[] = INCBIN_COMP("graphics/pokemon/braixen/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Braixen[] = INCBIN_U32("graphics/pokemon/braixen/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Braixen[] = INCBIN_U32("graphics/pokemon/braixen/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Delphox[] = INCBIN_U32("graphics/pokemon/delphox/anim_front.4bpp.lz");
const u32 gMonPalette_Delphox[] = INCBIN_U32("graphics/pokemon/delphox/normal.gbapal.lz");
@@ -8558,6 +14427,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Delphox[] = INCBIN_U8("graphics/pokemon/delphox/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Delphox[] = INCBIN_COMP("graphics/pokemon/delphox/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Delphox[] = INCBIN_U32("graphics/pokemon/delphox/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Delphox[] = INCBIN_U32("graphics/pokemon/delphox/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_FENNEKIN
#if P_FAMILY_FROAKIE
@@ -8569,6 +14445,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Froakie[] = INCBIN_U8("graphics/pokemon/froakie/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Froakie[] = INCBIN_COMP("graphics/pokemon/froakie/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Froakie[] = INCBIN_U32("graphics/pokemon/froakie/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Froakie[] = INCBIN_U32("graphics/pokemon/froakie/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Frogadier[] = INCBIN_U32("graphics/pokemon/frogadier/anim_front.4bpp.lz");
const u32 gMonPalette_Frogadier[] = INCBIN_U32("graphics/pokemon/frogadier/normal.gbapal.lz");
@@ -8578,6 +14461,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Frogadier[] = INCBIN_U8("graphics/pokemon/frogadier/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Frogadier[] = INCBIN_COMP("graphics/pokemon/frogadier/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Frogadier[] = INCBIN_U32("graphics/pokemon/frogadier/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Frogadier[] = INCBIN_U32("graphics/pokemon/frogadier/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Greninja[] = INCBIN_U32("graphics/pokemon/greninja/anim_front.4bpp.lz");
const u32 gMonPalette_Greninja[] = INCBIN_U32("graphics/pokemon/greninja/normal.gbapal.lz");
@@ -8587,12 +14477,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Greninja[] = INCBIN_U8("graphics/pokemon/greninja/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Greninja[] = INCBIN_COMP("graphics/pokemon/greninja/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Greninja[] = INCBIN_U32("graphics/pokemon/greninja/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Greninja[] = INCBIN_U32("graphics/pokemon/greninja/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_GreninjaAsh[] = INCBIN_U32("graphics/pokemon/greninja/ash/anim_front.4bpp.lz");
const u32 gMonPalette_GreninjaAsh[] = INCBIN_U32("graphics/pokemon/greninja/ash/normal.gbapal.lz");
const u32 gMonBackPic_GreninjaAsh[] = INCBIN_U32("graphics/pokemon/greninja/ash/back.4bpp.lz");
const u32 gMonShinyPalette_GreninjaAsh[] = INCBIN_U32("graphics/pokemon/greninja/ash/shiny.gbapal.lz");
const u8 gMonIcon_GreninjaAsh[] = INCBIN_U8("graphics/pokemon/greninja/ash/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_GreninjaAsh[] = INCBIN_COMP("graphics/pokemon/greninja/ash/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_GreninjaAsh[] = INCBIN_U32("graphics/pokemon/greninja/ash/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_GreninjaAsh[] = INCBIN_U32("graphics/pokemon/greninja/ash/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_FROAKIE
#if P_FAMILY_BUNNELBY
@@ -8604,6 +14508,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Bunnelby[] = INCBIN_U8("graphics/pokemon/bunnelby/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Bunnelby[] = INCBIN_COMP("graphics/pokemon/bunnelby/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Bunnelby[] = INCBIN_U32("graphics/pokemon/bunnelby/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Bunnelby[] = INCBIN_U32("graphics/pokemon/bunnelby/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Diggersby[] = INCBIN_U32("graphics/pokemon/diggersby/anim_front.4bpp.lz");
const u32 gMonPalette_Diggersby[] = INCBIN_U32("graphics/pokemon/diggersby/normal.gbapal.lz");
@@ -8613,6 +14524,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Diggersby[] = INCBIN_U8("graphics/pokemon/diggersby/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Diggersby[] = INCBIN_COMP("graphics/pokemon/diggersby/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Diggersby[] = INCBIN_U32("graphics/pokemon/diggersby/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Diggersby[] = INCBIN_U32("graphics/pokemon/diggersby/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_BUNNELBY
#if P_FAMILY_FLETCHLING
@@ -8624,6 +14542,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Fletchling[] = INCBIN_U8("graphics/pokemon/fletchling/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Fletchling[] = INCBIN_COMP("graphics/pokemon/fletchling/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Fletchling[] = INCBIN_U32("graphics/pokemon/fletchling/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Fletchling[] = INCBIN_U32("graphics/pokemon/fletchling/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Fletchinder[] = INCBIN_U32("graphics/pokemon/fletchinder/anim_front.4bpp.lz");
const u32 gMonPalette_Fletchinder[] = INCBIN_U32("graphics/pokemon/fletchinder/normal.gbapal.lz");
@@ -8633,6 +14558,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Fletchinder[] = INCBIN_U8("graphics/pokemon/fletchinder/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Fletchinder[] = INCBIN_COMP("graphics/pokemon/fletchinder/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Fletchinder[] = INCBIN_U32("graphics/pokemon/fletchinder/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Fletchinder[] = INCBIN_U32("graphics/pokemon/fletchinder/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Talonflame[] = INCBIN_U32("graphics/pokemon/talonflame/anim_front.4bpp.lz");
const u32 gMonPalette_Talonflame[] = INCBIN_U32("graphics/pokemon/talonflame/normal.gbapal.lz");
@@ -8642,6 +14574,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Talonflame[] = INCBIN_U8("graphics/pokemon/talonflame/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Talonflame[] = INCBIN_COMP("graphics/pokemon/talonflame/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Talonflame[] = INCBIN_U32("graphics/pokemon/talonflame/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Talonflame[] = INCBIN_U32("graphics/pokemon/talonflame/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_FLETCHLING
#if P_FAMILY_SCATTERBUG
@@ -8653,6 +14592,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Scatterbug[] = INCBIN_U8("graphics/pokemon/scatterbug/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Scatterbug[] = INCBIN_COMP("graphics/pokemon/scatterbug/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Scatterbug[] = INCBIN_U32("graphics/pokemon/scatterbug/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Scatterbug[] = INCBIN_U32("graphics/pokemon/scatterbug/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Spewpa[] = INCBIN_U32("graphics/pokemon/spewpa/anim_front.4bpp.lz");
const u32 gMonPalette_Spewpa[] = INCBIN_U32("graphics/pokemon/spewpa/normal.gbapal.lz");
@@ -8662,6 +14608,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Spewpa[] = INCBIN_U8("graphics/pokemon/spewpa/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Spewpa[] = INCBIN_COMP("graphics/pokemon/spewpa/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Spewpa[] = INCBIN_U32("graphics/pokemon/spewpa/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Spewpa[] = INCBIN_U32("graphics/pokemon/spewpa/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_VivillonIcySnow[] = INCBIN_U32("graphics/pokemon/vivillon/anim_front.4bpp.lz");
const u32 gMonPalette_VivillonIcySnow[] = INCBIN_U32("graphics/pokemon/vivillon/normal.gbapal.lz");
@@ -8762,6 +14715,71 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonShinyPalette_VivillonSun[] = INCBIN_U32("graphics/pokemon/vivillon/sun/shiny.gbapal.lz");
const u8 gMonIcon_VivillonSun[] = INCBIN_U8("graphics/pokemon/vivillon/sun/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_VivillonIcySnow[] = INCBIN_COMP("graphics/pokemon/vivillon/overworld.4bpp");
+ const u32 gObjectEventPic_VivillonPolar[] = INCBIN_COMP("graphics/pokemon/vivillon/polar/overworld.4bpp");
+ const u32 gObjectEventPic_VivillonTundra[] = INCBIN_COMP("graphics/pokemon/vivillon/tundra/overworld.4bpp");
+ const u32 gObjectEventPic_VivillonContinental[] = INCBIN_COMP("graphics/pokemon/vivillon/continental/overworld.4bpp");
+ const u32 gObjectEventPic_VivillonGarden[] = INCBIN_COMP("graphics/pokemon/vivillon/garden/overworld.4bpp");
+ const u32 gObjectEventPic_VivillonElegant[] = INCBIN_COMP("graphics/pokemon/vivillon/elegant/overworld.4bpp");
+ const u32 gObjectEventPic_VivillonMeadow[] = INCBIN_COMP("graphics/pokemon/vivillon/meadow/overworld.4bpp");
+ const u32 gObjectEventPic_VivillonModern[] = INCBIN_COMP("graphics/pokemon/vivillon/modern/overworld.4bpp");
+ const u32 gObjectEventPic_VivillonMarine[] = INCBIN_COMP("graphics/pokemon/vivillon/marine/overworld.4bpp");
+ const u32 gObjectEventPic_VivillonArchipelago[] = INCBIN_COMP("graphics/pokemon/vivillon/archipelago/overworld.4bpp");
+ const u32 gObjectEventPic_VivillonHighPlains[] = INCBIN_COMP("graphics/pokemon/vivillon/high_plains/overworld.4bpp");
+ const u32 gObjectEventPic_VivillonSandstorm[] = INCBIN_COMP("graphics/pokemon/vivillon/sandstorm/overworld.4bpp");
+ const u32 gObjectEventPic_VivillonRiver[] = INCBIN_COMP("graphics/pokemon/vivillon/river/overworld.4bpp");
+ const u32 gObjectEventPic_VivillonMonsoon[] = INCBIN_COMP("graphics/pokemon/vivillon/monsoon/overworld.4bpp");
+ const u32 gObjectEventPic_VivillonSavanna[] = INCBIN_COMP("graphics/pokemon/vivillon/savanna/overworld.4bpp");
+ const u32 gObjectEventPic_VivillonSun[] = INCBIN_COMP("graphics/pokemon/vivillon/sun/overworld.4bpp");
+ const u32 gObjectEventPic_VivillonOcean[] = INCBIN_COMP("graphics/pokemon/vivillon/ocean/overworld.4bpp");
+ const u32 gObjectEventPic_VivillonJungle[] = INCBIN_COMP("graphics/pokemon/vivillon/jungle/overworld.4bpp");
+ const u32 gObjectEventPic_VivillonFancy[] = INCBIN_COMP("graphics/pokemon/vivillon/fancy/overworld.4bpp");
+ const u32 gObjectEventPic_VivillonPokeBall[] = INCBIN_COMP("graphics/pokemon/vivillon/poke_ball/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_VivillonIcySnow[] = INCBIN_U32("graphics/pokemon/vivillon/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_VivillonPolar[] = INCBIN_U32("graphics/pokemon/vivillon/polar/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_VivillonTundra[] = INCBIN_U32("graphics/pokemon/vivillon/tundra/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_VivillonContinental[] = INCBIN_U32("graphics/pokemon/vivillon/continental/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_VivillonGarden[] = INCBIN_U32("graphics/pokemon/vivillon/garden/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_VivillonElegant[] = INCBIN_U32("graphics/pokemon/vivillon/elegant/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_VivillonMeadow[] = INCBIN_U32("graphics/pokemon/vivillon/meadow/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_VivillonModern[] = INCBIN_U32("graphics/pokemon/vivillon/modern/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_VivillonMarine[] = INCBIN_U32("graphics/pokemon/vivillon/marine/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_VivillonArchipelago[] = INCBIN_U32("graphics/pokemon/vivillon/archipelago/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_VivillonHighPlains[] = INCBIN_U32("graphics/pokemon/vivillon/high_plains/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_VivillonSandstorm[] = INCBIN_U32("graphics/pokemon/vivillon/sandstorm/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_VivillonRiver[] = INCBIN_U32("graphics/pokemon/vivillon/river/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_VivillonMonsoon[] = INCBIN_U32("graphics/pokemon/vivillon/monsoon/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_VivillonSavanna[] = INCBIN_U32("graphics/pokemon/vivillon/savanna/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_VivillonSun[] = INCBIN_U32("graphics/pokemon/vivillon/sun/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_VivillonOcean[] = INCBIN_U32("graphics/pokemon/vivillon/ocean/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_VivillonJungle[] = INCBIN_U32("graphics/pokemon/vivillon/jungle/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_VivillonFancy[] = INCBIN_U32("graphics/pokemon/vivillon/fancy/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_VivillonPokeBall[] = INCBIN_U32("graphics/pokemon/vivillon/poke_ball/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_VivillonIcySnow[] = INCBIN_U32("graphics/pokemon/vivillon/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_VivillonPolar[] = INCBIN_U32("graphics/pokemon/vivillon/polar/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_VivillonTundra[] = INCBIN_U32("graphics/pokemon/vivillon/tundra/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_VivillonContinental[] = INCBIN_U32("graphics/pokemon/vivillon/continental/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_VivillonGarden[] = INCBIN_U32("graphics/pokemon/vivillon/garden/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_VivillonElegant[] = INCBIN_U32("graphics/pokemon/vivillon/elegant/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_VivillonMeadow[] = INCBIN_U32("graphics/pokemon/vivillon/meadow/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_VivillonModern[] = INCBIN_U32("graphics/pokemon/vivillon/modern/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_VivillonMarine[] = INCBIN_U32("graphics/pokemon/vivillon/marine/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_VivillonArchipelago[] = INCBIN_U32("graphics/pokemon/vivillon/archipelago/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_VivillonHighPlains[] = INCBIN_U32("graphics/pokemon/vivillon/high_plains/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_VivillonSandstorm[] = INCBIN_U32("graphics/pokemon/vivillon/sandstorm/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_VivillonRiver[] = INCBIN_U32("graphics/pokemon/vivillon/river/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_VivillonMonsoon[] = INCBIN_U32("graphics/pokemon/vivillon/monsoon/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_VivillonSavanna[] = INCBIN_U32("graphics/pokemon/vivillon/savanna/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_VivillonSun[] = INCBIN_U32("graphics/pokemon/vivillon/sun/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_VivillonOcean[] = INCBIN_U32("graphics/pokemon/vivillon/ocean/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_VivillonJungle[] = INCBIN_U32("graphics/pokemon/vivillon/jungle/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_VivillonFancy[] = INCBIN_U32("graphics/pokemon/vivillon/fancy/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_VivillonPokeBall[] = INCBIN_U32("graphics/pokemon/vivillon/poke_ball/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
+
const u32 gMonFrontPic_VivillonOcean[] = INCBIN_U32("graphics/pokemon/vivillon/ocean/anim_front.4bpp.lz");
const u32 gMonPalette_VivillonOcean[] = INCBIN_U32("graphics/pokemon/vivillon/ocean/normal.gbapal.lz");
const u32 gMonBackPic_VivillonOcean[] = INCBIN_U32("graphics/pokemon/vivillon/ocean/back.4bpp.lz");
@@ -8796,6 +14814,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Litleo[] = INCBIN_U8("graphics/pokemon/litleo/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Litleo[] = INCBIN_COMP("graphics/pokemon/litleo/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Litleo[] = INCBIN_U32("graphics/pokemon/litleo/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Litleo[] = INCBIN_U32("graphics/pokemon/litleo/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Pyroar[] = INCBIN_U32("graphics/pokemon/pyroar/anim_front.4bpp.lz");
const u32 gMonPalette_Pyroar[] = INCBIN_U32("graphics/pokemon/pyroar/normal.gbapal.lz");
@@ -8805,10 +14830,24 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Pyroar[] = INCBIN_U8("graphics/pokemon/pyroar/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Pyroar[] = INCBIN_COMP("graphics/pokemon/pyroar/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Pyroar[] = INCBIN_U32("graphics/pokemon/pyroar/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Pyroar[] = INCBIN_U32("graphics/pokemon/pyroar/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_PyroarF[] = INCBIN_U32("graphics/pokemon/pyroar/anim_frontf.4bpp.lz");
const u32 gMonBackPic_PyroarF[] = INCBIN_U32("graphics/pokemon/pyroar/backf.4bpp.lz");
const u8 gMonIcon_PyroarF[] = INCBIN_U8("graphics/pokemon/pyroar/iconf.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_PyroarF[] = INCBIN_COMP("graphics/pokemon/pyroar/followerf.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_PyroarF[] = INCBIN_U32("graphics/pokemon/pyroar/overworld_normalf.gbapal.lz");
+ // const u32 gShinyOverworldPalette_PyroarF[] = INCBIN_U32("graphics/pokemon/pyroar/overworld_shinyf.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_LITLEO
#if P_FAMILY_FLABEBE
@@ -8838,6 +14877,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonShinyPalette_FlabebeWhiteFlower[] = INCBIN_U32("graphics/pokemon/flabebe/white_flower/shiny.gbapal.lz");
const u8 gMonIcon_FlabebeWhiteFlower[] = INCBIN_U8("graphics/pokemon/flabebe/white_flower/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_FlabebeRedFlower[] = INCBIN_COMP("graphics/pokemon/flabebe/overworld.4bpp");
+ const u32 gObjectEventPic_FlabebeYellowFlower[] = INCBIN_COMP("graphics/pokemon/flabebe/yellow_flower/overworld.4bpp");
+ const u32 gObjectEventPic_FlabebeOrangeFlower[] = INCBIN_COMP("graphics/pokemon/flabebe/orange_flower/overworld.4bpp");
+ const u32 gObjectEventPic_FlabebeBlueFlower[] = INCBIN_COMP("graphics/pokemon/flabebe/blue_flower/overworld.4bpp");
+ const u32 gObjectEventPic_FlabebeWhiteFlower[] = INCBIN_COMP("graphics/pokemon/flabebe/white_flower/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_FlabebeRedFlower[] = INCBIN_U32("graphics/pokemon/flabebe/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_FlabebeYellowFlower[] = INCBIN_U32("graphics/pokemon/flabebe/yellow_flower/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_FlabebeOrangeFlower[] = INCBIN_U32("graphics/pokemon/flabebe/orange_flower/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_FlabebeBlueFlower[] = INCBIN_U32("graphics/pokemon/flabebe/blue_flower/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_FlabebeWhiteFlower[] = INCBIN_U32("graphics/pokemon/flabebe/white_flower/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_FlabebeRedFlower[] = INCBIN_U32("graphics/pokemon/flabebe/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_FlabebeYellowFlower[] = INCBIN_U32("graphics/pokemon/flabebe/yellow_flower/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_FlabebeOrangeFlower[] = INCBIN_U32("graphics/pokemon/flabebe/orange_flower/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_FlabebeBlueFlower[] = INCBIN_U32("graphics/pokemon/flabebe/blue_flower/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_FlabebeWhiteFlower[] = INCBIN_U32("graphics/pokemon/flabebe/white_flower/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
+
const u32 gMonFrontPic_Floette[] = INCBIN_U32("graphics/pokemon/floette/anim_front.4bpp.lz");
const u32 gMonBackPic_Floette[] = INCBIN_U32("graphics/pokemon/floette/back.4bpp.lz");
#if P_FOOTPRINTS
@@ -8870,6 +14929,29 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonShinyPalette_FloetteEternalFlower[] = INCBIN_U32("graphics/pokemon/floette/eternal_flower/shiny.gbapal.lz");
const u8 gMonIcon_FloetteEternalFlower[] = INCBIN_U8("graphics/pokemon/floette/eternal_flower/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_FloetteRedFlower[] = INCBIN_COMP("graphics/pokemon/floette/overworld.4bpp");
+ const u32 gObjectEventPic_FloetteYellowFlower[] = INCBIN_COMP("graphics/pokemon/floette/yellow_flower/overworld.4bpp");
+ const u32 gObjectEventPic_FloetteOrangeFlower[] = INCBIN_COMP("graphics/pokemon/floette/orange_flower/overworld.4bpp");
+ const u32 gObjectEventPic_FloetteBlueFlower[] = INCBIN_COMP("graphics/pokemon/floette/blue_flower/overworld.4bpp");
+ const u32 gObjectEventPic_FloetteWhiteFlower[] = INCBIN_COMP("graphics/pokemon/floette/white_flower/overworld.4bpp");
+ const u32 gObjectEventPic_FloetteEternalFlower[] = INCBIN_COMP("graphics/pokemon/floette/eternal_flower/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_FloetteRedFlower[] = INCBIN_U32("graphics/pokemon/floette/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_FloetteYellowFlower[] = INCBIN_U32("graphics/pokemon/floette/yellow_flower/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_FloetteOrangeFlower[] = INCBIN_U32("graphics/pokemon/floette/orange_flower/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_FloetteBlueFlower[] = INCBIN_U32("graphics/pokemon/floette/blue_flower/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_FloetteWhiteFlower[] = INCBIN_U32("graphics/pokemon/floette/white_flower/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_FloetteEternalFlower[] = INCBIN_U32("graphics/pokemon/floette/eternal_flower/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_FloetteRedFlower[] = INCBIN_U32("graphics/pokemon/floette/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_FloetteYellowFlower[] = INCBIN_U32("graphics/pokemon/floette/yellow_flower/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_FloetteOrangeFlower[] = INCBIN_U32("graphics/pokemon/floette/orange_flower/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_FloetteBlueFlower[] = INCBIN_U32("graphics/pokemon/floette/blue_flower/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_FloetteWhiteFlower[] = INCBIN_U32("graphics/pokemon/floette/white_flower/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_FloetteEternalFlower[] = INCBIN_U32("graphics/pokemon/floette/eternal_flower/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
+
const u32 gMonFrontPic_Florges[] = INCBIN_U32("graphics/pokemon/florges/anim_front.4bpp.lz");
const u32 gMonBackPic_Florges[] = INCBIN_U32("graphics/pokemon/florges/back.4bpp.lz");
#if P_FOOTPRINTS
@@ -8895,6 +14977,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonPalette_FlorgesWhiteFlower[] = INCBIN_U32("graphics/pokemon/florges/white_flower/normal.gbapal.lz");
const u32 gMonShinyPalette_FlorgesWhiteFlower[] = INCBIN_U32("graphics/pokemon/florges/white_flower/shiny.gbapal.lz");
const u8 gMonIcon_FlorgesWhiteFlower[] = INCBIN_U8("graphics/pokemon/florges/white_flower/icon.4bpp");
+
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_FlorgesRedFlower[] = INCBIN_COMP("graphics/pokemon/florges/overworld.4bpp");
+ const u32 gObjectEventPic_FlorgesYellowFlower[] = INCBIN_COMP("graphics/pokemon/florges/yellow_flower/overworld.4bpp");
+ const u32 gObjectEventPic_FlorgesOrangeFlower[] = INCBIN_COMP("graphics/pokemon/florges/orange_flower/overworld.4bpp");
+ const u32 gObjectEventPic_FlorgesBlueFlower[] = INCBIN_COMP("graphics/pokemon/florges/blue_flower/overworld.4bpp");
+ const u32 gObjectEventPic_FlorgesWhiteFlower[] = INCBIN_COMP("graphics/pokemon/florges/white_flower/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_FlorgesRedFlower[] = INCBIN_U32("graphics/pokemon/florges/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_FlorgesYellowFlower[] = INCBIN_U32("graphics/pokemon/florges/yellow_flower/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_FlorgesOrangeFlower[] = INCBIN_U32("graphics/pokemon/florges/orange_flower/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_FlorgesBlueFlower[] = INCBIN_U32("graphics/pokemon/florges/blue_flower/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_FlorgesWhiteFlower[] = INCBIN_U32("graphics/pokemon/florges/white_flower/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_FlorgesRedFlower[] = INCBIN_U32("graphics/pokemon/florges/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_FlorgesYellowFlower[] = INCBIN_U32("graphics/pokemon/florges/yellow_flower/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_FlorgesOrangeFlower[] = INCBIN_U32("graphics/pokemon/florges/orange_flower/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_FlorgesBlueFlower[] = INCBIN_U32("graphics/pokemon/florges/blue_flower/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_FlorgesWhiteFlower[] = INCBIN_U32("graphics/pokemon/florges/white_flower/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_FLABEBE
#if P_FAMILY_SKIDDO
@@ -8906,6 +15008,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Skiddo[] = INCBIN_U8("graphics/pokemon/skiddo/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Skiddo[] = INCBIN_COMP("graphics/pokemon/skiddo/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Skiddo[] = INCBIN_U32("graphics/pokemon/skiddo/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Skiddo[] = INCBIN_U32("graphics/pokemon/skiddo/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Gogoat[] = INCBIN_U32("graphics/pokemon/gogoat/anim_front.4bpp.lz");
const u32 gMonPalette_Gogoat[] = INCBIN_U32("graphics/pokemon/gogoat/normal.gbapal.lz");
@@ -8915,6 +15024,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Gogoat[] = INCBIN_U8("graphics/pokemon/gogoat/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Gogoat[] = INCBIN_COMP("graphics/pokemon/gogoat/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Gogoat[] = INCBIN_U32("graphics/pokemon/gogoat/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Gogoat[] = INCBIN_U32("graphics/pokemon/gogoat/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SKIDDO
#if P_FAMILY_PANCHAM
@@ -8926,6 +15042,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Pancham[] = INCBIN_U8("graphics/pokemon/pancham/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Pancham[] = INCBIN_COMP("graphics/pokemon/pancham/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Pancham[] = INCBIN_U32("graphics/pokemon/pancham/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Pancham[] = INCBIN_U32("graphics/pokemon/pancham/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Pangoro[] = INCBIN_U32("graphics/pokemon/pangoro/anim_front.4bpp.lz");
const u32 gMonPalette_Pangoro[] = INCBIN_U32("graphics/pokemon/pangoro/normal.gbapal.lz");
@@ -8935,6 +15058,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Pangoro[] = INCBIN_U8("graphics/pokemon/pangoro/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Pangoro[] = INCBIN_COMP("graphics/pokemon/pangoro/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Pangoro[] = INCBIN_U32("graphics/pokemon/pangoro/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Pangoro[] = INCBIN_U32("graphics/pokemon/pangoro/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_PANCHAM
#if P_FAMILY_FURFROU
@@ -9000,6 +15130,41 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_FurfrouPharaohTrim[] = INCBIN_U32("graphics/pokemon/furfrou/pharaoh_trim/back.4bpp.lz");
const u32 gMonShinyPalette_FurfrouPharaohTrim[] = INCBIN_U32("graphics/pokemon/furfrou/pharaoh_trim/shiny.gbapal.lz");
const u8 gMonIcon_FurfrouPharaohTrim[] = INCBIN_U8("graphics/pokemon/furfrou/pharaoh_trim/icon.4bpp");
+
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_FurfrouNatural[] = INCBIN_COMP("graphics/pokemon/furfrou/overworld.4bpp");
+ const u32 gObjectEventPic_FurfrouHeartTrim[] = INCBIN_COMP("graphics/pokemon/furfrou/heart_trim/overworld.4bpp");
+ const u32 gObjectEventPic_FurfrouStarTrim[] = INCBIN_COMP("graphics/pokemon/furfrou/star_trim/overworld.4bpp");
+ const u32 gObjectEventPic_FurfrouDiamondTrim[] = INCBIN_COMP("graphics/pokemon/furfrou/diamond_trim/overworld.4bpp");
+ const u32 gObjectEventPic_FurfrouDebutanteTrim[] = INCBIN_COMP("graphics/pokemon/furfrou/debutante_trim/overworld.4bpp");
+ const u32 gObjectEventPic_FurfrouMatronTrim[] = INCBIN_COMP("graphics/pokemon/furfrou/matron_trim/overworld.4bpp");
+ const u32 gObjectEventPic_FurfrouDandyTrim[] = INCBIN_COMP("graphics/pokemon/furfrou/dandy_trim/overworld.4bpp");
+ const u32 gObjectEventPic_FurfrouLaReineTrim[] = INCBIN_COMP("graphics/pokemon/furfrou/la_reine_trim/overworld.4bpp");
+ const u32 gObjectEventPic_FurfrouKabukiTrim[] = INCBIN_COMP("graphics/pokemon/furfrou/kabuki_trim/overworld.4bpp");
+ const u32 gObjectEventPic_FurfrouPharaohTrim[] = INCBIN_COMP("graphics/pokemon/furfrou/pharaoh_trim/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_FurfrouNatural[] = INCBIN_U32("graphics/pokemon/furfrou/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_FurfrouHeartTrim[] = INCBIN_U32("graphics/pokemon/furfrou/heart_trim/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_FurfrouStarTrim[] = INCBIN_U32("graphics/pokemon/furfrou/star_trim/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_FurfrouDiamondTrim[] = INCBIN_U32("graphics/pokemon/furfrou/diamond_trim/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_FurfrouDebutanteTrim[] = INCBIN_U32("graphics/pokemon/furfrou/debutante_trim/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_FurfrouMatronTrim[] = INCBIN_U32("graphics/pokemon/furfrou/matron_trim/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_FurfrouDandyTrim[] = INCBIN_U32("graphics/pokemon/furfrou/dandy_trim/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_FurfrouLaReineTrim[] = INCBIN_U32("graphics/pokemon/furfrou/la_reine_trim/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_FurfrouKabukiTrim[] = INCBIN_U32("graphics/pokemon/furfrou/kabuki_trim/overworld_normal.gbapal.lz");
+ const u32 gOverworldPalette_FurfrouPharaohTrim[] = INCBIN_U32("graphics/pokemon/furfrou/pharaoh_trim/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_FurfrouNatural[] = INCBIN_U32("graphics/pokemon/furfrou/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_FurfrouHeartTrim[] = INCBIN_U32("graphics/pokemon/furfrou/heart_trim/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_FurfrouStarTrim[] = INCBIN_U32("graphics/pokemon/furfrou/star_trim/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_FurfrouDiamondTrim[] = INCBIN_U32("graphics/pokemon/furfrou/diamond_trim/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_FurfrouDebutanteTrim[] = INCBIN_U32("graphics/pokemon/furfrou/debutante_trim/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_FurfrouMatronTrim[] = INCBIN_U32("graphics/pokemon/furfrou/matron_trim/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_FurfrouDandyTrim[] = INCBIN_U32("graphics/pokemon/furfrou/dandy_trim/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_FurfrouLaReineTrim[] = INCBIN_U32("graphics/pokemon/furfrou/la_reine_trim/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_FurfrouKabukiTrim[] = INCBIN_U32("graphics/pokemon/furfrou/kabuki_trim/overworld_shiny.gbapal.lz");
+ const u32 gShinyOverworldPalette_FurfrouPharaohTrim[] = INCBIN_U32("graphics/pokemon/furfrou/pharaoh_trim/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_FURFROU
#if P_FAMILY_ESPURR
@@ -9011,6 +15176,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Espurr[] = INCBIN_U8("graphics/pokemon/espurr/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Espurr[] = INCBIN_COMP("graphics/pokemon/espurr/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Espurr[] = INCBIN_U32("graphics/pokemon/espurr/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Espurr[] = INCBIN_U32("graphics/pokemon/espurr/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_MeowsticMale[] = INCBIN_U32("graphics/pokemon/meowstic/anim_front.4bpp.lz");
const u32 gMonPalette_MeowsticMale[] = INCBIN_U32("graphics/pokemon/meowstic/normal.gbapal.lz");
@@ -9020,12 +15192,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Meowstic[] = INCBIN_U8("graphics/pokemon/meowstic/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_MeowsticMale[] = INCBIN_COMP("graphics/pokemon/meowstic/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_MeowsticMale[] = INCBIN_U32("graphics/pokemon/meowstic/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_MeowsticMale[] = INCBIN_U32("graphics/pokemon/meowstic/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_MeowsticFemale[] = INCBIN_U32("graphics/pokemon/meowstic/female/anim_front.4bpp.lz");
const u32 gMonPalette_MeowsticFemale[] = INCBIN_U32("graphics/pokemon/meowstic/female/normal.gbapal.lz");
const u32 gMonBackPic_MeowsticFemale[] = INCBIN_U32("graphics/pokemon/meowstic/female/back.4bpp.lz");
const u32 gMonShinyPalette_MeowsticFemale[] = INCBIN_U32("graphics/pokemon/meowstic/female/shiny.gbapal.lz");
const u8 gMonIcon_MeowsticFemale[] = INCBIN_U8("graphics/pokemon/meowstic/female/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_MeowsticFemale[] = INCBIN_COMP("graphics/pokemon/meowstic/female/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_MeowsticFemale[] = INCBIN_U32("graphics/pokemon/meowstic/female/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_MeowsticFemale[] = INCBIN_U32("graphics/pokemon/meowstic/female/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_ESPURR
#if P_FAMILY_HONEDGE
@@ -9037,6 +15223,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Honedge[] = INCBIN_U8("graphics/pokemon/honedge/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Honedge[] = INCBIN_COMP("graphics/pokemon/honedge/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Honedge[] = INCBIN_U32("graphics/pokemon/honedge/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Honedge[] = INCBIN_U32("graphics/pokemon/honedge/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Doublade[] = INCBIN_U32("graphics/pokemon/doublade/anim_front.4bpp.lz");
const u32 gMonPalette_Doublade[] = INCBIN_U32("graphics/pokemon/doublade/normal.gbapal.lz");
@@ -9046,6 +15239,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Doublade[] = INCBIN_U8("graphics/pokemon/doublade/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Doublade[] = INCBIN_COMP("graphics/pokemon/doublade/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Doublade[] = INCBIN_U32("graphics/pokemon/doublade/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Doublade[] = INCBIN_U32("graphics/pokemon/doublade/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_AegislashShield[] = INCBIN_U32("graphics/pokemon/aegislash/anim_front.4bpp.lz");
const u32 gMonPalette_AegislashShield[] = INCBIN_U32("graphics/pokemon/aegislash/normal.gbapal.lz");
@@ -9055,12 +15255,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Aegislash[] = INCBIN_U8("graphics/pokemon/aegislash/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_AegislashShield[] = INCBIN_COMP("graphics/pokemon/aegislash/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_AegislashShield[] = INCBIN_U32("graphics/pokemon/aegislash/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_AegislashShield[] = INCBIN_U32("graphics/pokemon/aegislash/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_AegislashBlade[] = INCBIN_U32("graphics/pokemon/aegislash/blade/anim_front.4bpp.lz");
const u32 gMonPalette_AegislashBlade[] = INCBIN_U32("graphics/pokemon/aegislash/blade/normal.gbapal.lz");
const u32 gMonBackPic_AegislashBlade[] = INCBIN_U32("graphics/pokemon/aegislash/blade/back.4bpp.lz");
const u32 gMonShinyPalette_AegislashBlade[] = INCBIN_U32("graphics/pokemon/aegislash/blade/shiny.gbapal.lz");
const u8 gMonIcon_AegislashBlade[] = INCBIN_U8("graphics/pokemon/aegislash/blade/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_AegislashBlade[] = INCBIN_COMP("graphics/pokemon/aegislash/blade/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_AegislashBlade[] = INCBIN_U32("graphics/pokemon/aegislash/blade/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_AegislashBlade[] = INCBIN_U32("graphics/pokemon/aegislash/blade/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_HONEDGE
#if P_FAMILY_SPRITZEE
@@ -9072,6 +15286,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Spritzee[] = INCBIN_U8("graphics/pokemon/spritzee/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Spritzee[] = INCBIN_COMP("graphics/pokemon/spritzee/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Spritzee[] = INCBIN_U32("graphics/pokemon/spritzee/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Spritzee[] = INCBIN_U32("graphics/pokemon/spritzee/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Aromatisse[] = INCBIN_U32("graphics/pokemon/aromatisse/anim_front.4bpp.lz");
const u32 gMonPalette_Aromatisse[] = INCBIN_U32("graphics/pokemon/aromatisse/normal.gbapal.lz");
@@ -9081,6 +15302,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Aromatisse[] = INCBIN_U8("graphics/pokemon/aromatisse/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Aromatisse[] = INCBIN_COMP("graphics/pokemon/aromatisse/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Aromatisse[] = INCBIN_U32("graphics/pokemon/aromatisse/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Aromatisse[] = INCBIN_U32("graphics/pokemon/aromatisse/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SPRITZEE
#if P_FAMILY_SWIRLIX
@@ -9092,6 +15320,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Swirlix[] = INCBIN_U8("graphics/pokemon/swirlix/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Swirlix[] = INCBIN_COMP("graphics/pokemon/swirlix/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Swirlix[] = INCBIN_U32("graphics/pokemon/swirlix/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Swirlix[] = INCBIN_U32("graphics/pokemon/swirlix/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Slurpuff[] = INCBIN_U32("graphics/pokemon/slurpuff/anim_front.4bpp.lz");
const u32 gMonPalette_Slurpuff[] = INCBIN_U32("graphics/pokemon/slurpuff/normal.gbapal.lz");
@@ -9101,6 +15336,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Slurpuff[] = INCBIN_U8("graphics/pokemon/slurpuff/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Slurpuff[] = INCBIN_COMP("graphics/pokemon/slurpuff/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Slurpuff[] = INCBIN_U32("graphics/pokemon/slurpuff/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Slurpuff[] = INCBIN_U32("graphics/pokemon/slurpuff/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SWIRLIX
#if P_FAMILY_INKAY
@@ -9112,6 +15354,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Inkay[] = INCBIN_U8("graphics/pokemon/inkay/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Inkay[] = INCBIN_COMP("graphics/pokemon/inkay/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Inkay[] = INCBIN_U32("graphics/pokemon/inkay/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Inkay[] = INCBIN_U32("graphics/pokemon/inkay/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Malamar[] = INCBIN_U32("graphics/pokemon/malamar/anim_front.4bpp.lz");
const u32 gMonPalette_Malamar[] = INCBIN_U32("graphics/pokemon/malamar/normal.gbapal.lz");
@@ -9121,6 +15370,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Malamar[] = INCBIN_U8("graphics/pokemon/malamar/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Malamar[] = INCBIN_COMP("graphics/pokemon/malamar/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Malamar[] = INCBIN_U32("graphics/pokemon/malamar/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Malamar[] = INCBIN_U32("graphics/pokemon/malamar/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_INKAY
#if P_FAMILY_BINACLE
@@ -9132,6 +15388,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Binacle[] = INCBIN_U8("graphics/pokemon/binacle/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Binacle[] = INCBIN_COMP("graphics/pokemon/binacle/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Binacle[] = INCBIN_U32("graphics/pokemon/binacle/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Binacle[] = INCBIN_U32("graphics/pokemon/binacle/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Barbaracle[] = INCBIN_U32("graphics/pokemon/barbaracle/anim_front.4bpp.lz");
const u32 gMonPalette_Barbaracle[] = INCBIN_U32("graphics/pokemon/barbaracle/normal.gbapal.lz");
@@ -9141,6 +15404,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Barbaracle[] = INCBIN_U8("graphics/pokemon/barbaracle/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Barbaracle[] = INCBIN_COMP("graphics/pokemon/barbaracle/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Barbaracle[] = INCBIN_U32("graphics/pokemon/barbaracle/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Barbaracle[] = INCBIN_U32("graphics/pokemon/barbaracle/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_BINACLE
#if P_FAMILY_SKRELP
@@ -9152,6 +15422,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Skrelp[] = INCBIN_U8("graphics/pokemon/skrelp/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Skrelp[] = INCBIN_COMP("graphics/pokemon/skrelp/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Skrelp[] = INCBIN_U32("graphics/pokemon/skrelp/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Skrelp[] = INCBIN_U32("graphics/pokemon/skrelp/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Dragalge[] = INCBIN_U32("graphics/pokemon/dragalge/anim_front.4bpp.lz");
const u32 gMonPalette_Dragalge[] = INCBIN_U32("graphics/pokemon/dragalge/normal.gbapal.lz");
@@ -9161,6 +15438,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Dragalge[] = INCBIN_U8("graphics/pokemon/dragalge/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Dragalge[] = INCBIN_COMP("graphics/pokemon/dragalge/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Dragalge[] = INCBIN_U32("graphics/pokemon/dragalge/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Dragalge[] = INCBIN_U32("graphics/pokemon/dragalge/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SKRELP
#if P_FAMILY_CLAUNCHER
@@ -9172,6 +15456,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Clauncher[] = INCBIN_U8("graphics/pokemon/clauncher/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Clauncher[] = INCBIN_COMP("graphics/pokemon/clauncher/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Clauncher[] = INCBIN_U32("graphics/pokemon/clauncher/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Clauncher[] = INCBIN_U32("graphics/pokemon/clauncher/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Clawitzer[] = INCBIN_U32("graphics/pokemon/clawitzer/anim_front.4bpp.lz");
const u32 gMonPalette_Clawitzer[] = INCBIN_U32("graphics/pokemon/clawitzer/normal.gbapal.lz");
@@ -9181,6 +15472,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Clawitzer[] = INCBIN_U8("graphics/pokemon/clawitzer/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Clawitzer[] = INCBIN_COMP("graphics/pokemon/clawitzer/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Clawitzer[] = INCBIN_U32("graphics/pokemon/clawitzer/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Clawitzer[] = INCBIN_U32("graphics/pokemon/clawitzer/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_CLAUNCHER
#if P_FAMILY_HELIOPTILE
@@ -9192,6 +15490,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Helioptile[] = INCBIN_U8("graphics/pokemon/helioptile/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Helioptile[] = INCBIN_COMP("graphics/pokemon/helioptile/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Helioptile[] = INCBIN_U32("graphics/pokemon/helioptile/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Helioptile[] = INCBIN_U32("graphics/pokemon/helioptile/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Heliolisk[] = INCBIN_U32("graphics/pokemon/heliolisk/anim_front.4bpp.lz");
const u32 gMonPalette_Heliolisk[] = INCBIN_U32("graphics/pokemon/heliolisk/normal.gbapal.lz");
@@ -9201,6 +15506,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Heliolisk[] = INCBIN_U8("graphics/pokemon/heliolisk/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Heliolisk[] = INCBIN_COMP("graphics/pokemon/heliolisk/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Heliolisk[] = INCBIN_U32("graphics/pokemon/heliolisk/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Heliolisk[] = INCBIN_U32("graphics/pokemon/heliolisk/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_HELIOPTILE
#if P_FAMILY_TYRUNT
@@ -9212,6 +15524,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Tyrunt[] = INCBIN_U8("graphics/pokemon/tyrunt/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Tyrunt[] = INCBIN_COMP("graphics/pokemon/tyrunt/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Tyrunt[] = INCBIN_U32("graphics/pokemon/tyrunt/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Tyrunt[] = INCBIN_U32("graphics/pokemon/tyrunt/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Tyrantrum[] = INCBIN_U32("graphics/pokemon/tyrantrum/anim_front.4bpp.lz");
const u32 gMonPalette_Tyrantrum[] = INCBIN_U32("graphics/pokemon/tyrantrum/normal.gbapal.lz");
@@ -9221,6 +15540,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Tyrantrum[] = INCBIN_U8("graphics/pokemon/tyrantrum/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Tyrantrum[] = INCBIN_COMP("graphics/pokemon/tyrantrum/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Tyrantrum[] = INCBIN_U32("graphics/pokemon/tyrantrum/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Tyrantrum[] = INCBIN_U32("graphics/pokemon/tyrantrum/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_TYRUNT
#if P_FAMILY_AMAURA
@@ -9232,6 +15558,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Amaura[] = INCBIN_U8("graphics/pokemon/amaura/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Amaura[] = INCBIN_COMP("graphics/pokemon/amaura/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Amaura[] = INCBIN_U32("graphics/pokemon/amaura/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Amaura[] = INCBIN_U32("graphics/pokemon/amaura/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Aurorus[] = INCBIN_U32("graphics/pokemon/aurorus/anim_front.4bpp.lz");
const u32 gMonPalette_Aurorus[] = INCBIN_U32("graphics/pokemon/aurorus/normal.gbapal.lz");
@@ -9241,6 +15574,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Aurorus[] = INCBIN_U8("graphics/pokemon/aurorus/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Aurorus[] = INCBIN_COMP("graphics/pokemon/aurorus/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Aurorus[] = INCBIN_U32("graphics/pokemon/aurorus/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Aurorus[] = INCBIN_U32("graphics/pokemon/aurorus/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_AMAURA
#if P_FAMILY_HAWLUCHA
@@ -9252,6 +15592,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Hawlucha[] = INCBIN_U8("graphics/pokemon/hawlucha/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Hawlucha[] = INCBIN_COMP("graphics/pokemon/hawlucha/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Hawlucha[] = INCBIN_U32("graphics/pokemon/hawlucha/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Hawlucha[] = INCBIN_U32("graphics/pokemon/hawlucha/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_HAWLUCHA
#if P_FAMILY_DEDENNE
@@ -9263,6 +15610,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Dedenne[] = INCBIN_U8("graphics/pokemon/dedenne/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Dedenne[] = INCBIN_COMP("graphics/pokemon/dedenne/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Dedenne[] = INCBIN_U32("graphics/pokemon/dedenne/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Dedenne[] = INCBIN_U32("graphics/pokemon/dedenne/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_DEDENNE
#if P_FAMILY_CARBINK
@@ -9274,6 +15628,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Carbink[] = INCBIN_U8("graphics/pokemon/carbink/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Carbink[] = INCBIN_COMP("graphics/pokemon/carbink/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Carbink[] = INCBIN_U32("graphics/pokemon/carbink/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Carbink[] = INCBIN_U32("graphics/pokemon/carbink/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_CARBINK
#if P_FAMILY_GOOMY
@@ -9285,6 +15646,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Goomy[] = INCBIN_U8("graphics/pokemon/goomy/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Goomy[] = INCBIN_COMP("graphics/pokemon/goomy/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Goomy[] = INCBIN_U32("graphics/pokemon/goomy/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Goomy[] = INCBIN_U32("graphics/pokemon/goomy/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Sliggoo[] = INCBIN_U32("graphics/pokemon/sliggoo/anim_front.4bpp.lz");
const u32 gMonPalette_Sliggoo[] = INCBIN_U32("graphics/pokemon/sliggoo/normal.gbapal.lz");
@@ -9294,6 +15662,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Sliggoo[] = INCBIN_U8("graphics/pokemon/sliggoo/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Sliggoo[] = INCBIN_COMP("graphics/pokemon/sliggoo/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Sliggoo[] = INCBIN_U32("graphics/pokemon/sliggoo/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Sliggoo[] = INCBIN_U32("graphics/pokemon/sliggoo/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_HISUIAN_FORMS
const u32 gMonFrontPic_SliggooHisuian[] = INCBIN_U32("graphics/pokemon/sliggoo/hisuian/front.4bpp.lz");
@@ -9301,6 +15676,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_SliggooHisuian[] = INCBIN_U32("graphics/pokemon/sliggoo/hisuian/back.4bpp.lz");
const u32 gMonShinyPalette_SliggooHisuian[] = INCBIN_U32("graphics/pokemon/sliggoo/hisuian/shiny.gbapal.lz");
const u8 gMonIcon_SliggooHisuian[] = INCBIN_U8("graphics/pokemon/sliggoo/hisuian/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_SliggooHisuian[] = INCBIN_COMP("graphics/pokemon/sliggoo/hisuian/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_SliggooHisuian[] = INCBIN_U32("graphics/pokemon/sliggoo/hisuian/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_SliggooHisuian[] = INCBIN_U32("graphics/pokemon/sliggoo/hisuian/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_HISUIAN_FORMS
const u32 gMonFrontPic_Goodra[] = INCBIN_U32("graphics/pokemon/goodra/anim_front.4bpp.lz");
@@ -9311,6 +15693,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Goodra[] = INCBIN_U8("graphics/pokemon/goodra/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Goodra[] = INCBIN_COMP("graphics/pokemon/goodra/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Goodra[] = INCBIN_U32("graphics/pokemon/goodra/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Goodra[] = INCBIN_U32("graphics/pokemon/goodra/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_HISUIAN_FORMS
const u32 gMonFrontPic_GoodraHisuian[] = INCBIN_U32("graphics/pokemon/goodra/hisuian/front.4bpp.lz");
@@ -9318,6 +15707,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_GoodraHisuian[] = INCBIN_U32("graphics/pokemon/goodra/hisuian/back.4bpp.lz");
const u32 gMonShinyPalette_GoodraHisuian[] = INCBIN_U32("graphics/pokemon/goodra/hisuian/shiny.gbapal.lz");
const u8 gMonIcon_GoodraHisuian[] = INCBIN_U8("graphics/pokemon/goodra/hisuian/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_GoodraHisuian[] = INCBIN_COMP("graphics/pokemon/goodra/hisuian/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_GoodraHisuian[] = INCBIN_U32("graphics/pokemon/goodra/hisuian/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_GoodraHisuian[] = INCBIN_U32("graphics/pokemon/goodra/hisuian/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_HISUIAN_FORMS
#endif //P_FAMILY_GOOMY
@@ -9330,6 +15726,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Klefki[] = INCBIN_U8("graphics/pokemon/klefki/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Klefki[] = INCBIN_COMP("graphics/pokemon/klefki/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Klefki[] = INCBIN_U32("graphics/pokemon/klefki/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Klefki[] = INCBIN_U32("graphics/pokemon/klefki/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_KLEFKI
#if P_FAMILY_PHANTUMP
@@ -9341,6 +15744,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Phantump[] = INCBIN_U8("graphics/pokemon/phantump/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Phantump[] = INCBIN_COMP("graphics/pokemon/phantump/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Phantump[] = INCBIN_U32("graphics/pokemon/phantump/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Phantump[] = INCBIN_U32("graphics/pokemon/phantump/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Trevenant[] = INCBIN_U32("graphics/pokemon/trevenant/anim_front.4bpp.lz");
const u32 gMonPalette_Trevenant[] = INCBIN_U32("graphics/pokemon/trevenant/normal.gbapal.lz");
@@ -9350,6 +15760,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Trevenant[] = INCBIN_U8("graphics/pokemon/trevenant/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Trevenant[] = INCBIN_COMP("graphics/pokemon/trevenant/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Trevenant[] = INCBIN_U32("graphics/pokemon/trevenant/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Trevenant[] = INCBIN_U32("graphics/pokemon/trevenant/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_PHANTUMP
#if P_FAMILY_PUMPKABOO
@@ -9372,6 +15789,18 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonFrontPic_PumpkabooSuper[] = INCBIN_U32("graphics/pokemon/pumpkaboo/super/anim_front.4bpp.lz");
const u32 gMonBackPic_PumpkabooSuper[] = INCBIN_U32("graphics/pokemon/pumpkaboo/super/back.4bpp.lz");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Pumpkaboo[] = INCBIN_U32("graphics/pokemon/pumpkaboo/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Pumpkaboo[] = INCBIN_U32("graphics/pokemon/pumpkaboo/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_PumpkabooAverage[] = INCBIN_COMP("graphics/pokemon/pumpkaboo/overworld.4bpp");
+ // const u32 gObjectEventPic_PumpkabooSmall[] = INCBIN_COMP("graphics/pokemon/pumpkaboo/small/overworld.4bpp");
+ // const u32 gObjectEventPic_PumpkabooLarge[] = INCBIN_COMP("graphics/pokemon/pumpkaboo/large/overworld.4bpp");
+ // const u32 gObjectEventPic_PumpkabooSuper[] = INCBIN_COMP("graphics/pokemon/pumpkaboo/super/overworld.4bpp");
+#endif //OW_POKEMON_OBJECT_EVENTS
+
const u32 gMonPalette_Gourgeist[] = INCBIN_U32("graphics/pokemon/gourgeist/normal.gbapal.lz");
const u32 gMonShinyPalette_Gourgeist[] = INCBIN_U32("graphics/pokemon/gourgeist/shiny.gbapal.lz");
const u8 gMonIcon_Gourgeist[] = INCBIN_U8("graphics/pokemon/gourgeist/icon.4bpp");
@@ -9390,6 +15819,18 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonFrontPic_GourgeistSuper[] = INCBIN_U32("graphics/pokemon/gourgeist/super/anim_front.4bpp.lz");
const u32 gMonBackPic_GourgeistSuper[] = INCBIN_U32("graphics/pokemon/gourgeist/super/back.4bpp.lz");
+
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Gourgeist[] = INCBIN_U32("graphics/pokemon/gourgeist/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Gourgeist[] = INCBIN_U32("graphics/pokemon/gourgeist/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_GourgeistAverage[] = INCBIN_COMP("graphics/pokemon/gourgeist/overworld.4bpp");
+ // const u32 gObjectEventPic_GourgeistSmall[] = INCBIN_COMP("graphics/pokemon/gourgeist/small/overworld.4bpp");
+ // const u32 gObjectEventPic_GourgeistLarge[] = INCBIN_COMP("graphics/pokemon/gourgeist/large/overworld.4bpp");
+ // const u32 gObjectEventPic_GourgeistSuper[] = INCBIN_COMP("graphics/pokemon/gourgeist/super/overworld.4bpp");
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_PUMPKABOO
#if P_FAMILY_BERGMITE
@@ -9401,6 +15842,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Bergmite[] = INCBIN_U8("graphics/pokemon/bergmite/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Bergmite[] = INCBIN_COMP("graphics/pokemon/bergmite/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Bergmite[] = INCBIN_U32("graphics/pokemon/bergmite/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Bergmite[] = INCBIN_U32("graphics/pokemon/bergmite/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Avalugg[] = INCBIN_U32("graphics/pokemon/avalugg/anim_front.4bpp.lz");
const u32 gMonPalette_Avalugg[] = INCBIN_U32("graphics/pokemon/avalugg/normal.gbapal.lz");
@@ -9410,6 +15858,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Avalugg[] = INCBIN_U8("graphics/pokemon/avalugg/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Avalugg[] = INCBIN_COMP("graphics/pokemon/avalugg/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Avalugg[] = INCBIN_U32("graphics/pokemon/avalugg/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Avalugg[] = INCBIN_U32("graphics/pokemon/avalugg/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_HISUIAN_FORMS
const u32 gMonFrontPic_AvaluggHisuian[] = INCBIN_U32("graphics/pokemon/avalugg/hisuian/front.4bpp.lz");
@@ -9417,6 +15872,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_AvaluggHisuian[] = INCBIN_U32("graphics/pokemon/avalugg/hisuian/back.4bpp.lz");
const u32 gMonShinyPalette_AvaluggHisuian[] = INCBIN_U32("graphics/pokemon/avalugg/hisuian/shiny.gbapal.lz");
const u8 gMonIcon_AvaluggHisuian[] = INCBIN_U8("graphics/pokemon/avalugg/hisuian/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_AvaluggHisuian[] = INCBIN_COMP("graphics/pokemon/avalugg/hisuian/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_AvaluggHisuian[] = INCBIN_U32("graphics/pokemon/avalugg/hisuian/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_AvaluggHisuian[] = INCBIN_U32("graphics/pokemon/avalugg/hisuian/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_HISUIAN_FORMS
#endif //P_FAMILY_BERGMITE
@@ -9429,6 +15891,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Noibat[] = INCBIN_U8("graphics/pokemon/noibat/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Noibat[] = INCBIN_COMP("graphics/pokemon/noibat/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Noibat[] = INCBIN_U32("graphics/pokemon/noibat/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Noibat[] = INCBIN_U32("graphics/pokemon/noibat/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Noivern[] = INCBIN_U32("graphics/pokemon/noivern/anim_front.4bpp.lz");
const u32 gMonPalette_Noivern[] = INCBIN_U32("graphics/pokemon/noivern/normal.gbapal.lz");
@@ -9438,6 +15907,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Noivern[] = INCBIN_U8("graphics/pokemon/noivern/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Noivern[] = INCBIN_COMP("graphics/pokemon/noivern/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Noivern[] = INCBIN_U32("graphics/pokemon/noivern/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Noivern[] = INCBIN_U32("graphics/pokemon/noivern/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_NOIBAT
#if P_FAMILY_XERNEAS
@@ -9449,12 +15925,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Xerneas[] = INCBIN_U8("graphics/pokemon/xerneas/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_XerneasNeutral[] = INCBIN_COMP("graphics/pokemon/xerneas/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_XerneasNeutral[] = INCBIN_U32("graphics/pokemon/xerneas/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_XerneasNeutral[] = INCBIN_U32("graphics/pokemon/xerneas/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_XerneasActive[] = INCBIN_U32("graphics/pokemon/xerneas/active/anim_front.4bpp.lz");
const u32 gMonPalette_XerneasActive[] = INCBIN_U32("graphics/pokemon/xerneas/active/normal.gbapal.lz");
const u32 gMonBackPic_XerneasActive[] = INCBIN_U32("graphics/pokemon/xerneas/active/back.4bpp.lz");
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_XERNEAS
#if P_FAMILY_YVELTAL
@@ -9466,6 +15956,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Yveltal[] = INCBIN_U8("graphics/pokemon/yveltal/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Yveltal[] = INCBIN_COMP("graphics/pokemon/yveltal/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Yveltal[] = INCBIN_U32("graphics/pokemon/yveltal/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Yveltal[] = INCBIN_U32("graphics/pokemon/yveltal/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_YVELTAL
#if P_FAMILY_ZYGARDE
@@ -9478,17 +15975,39 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u8 gMonFootprint_Zygarde[] = INCBIN_U8("graphics/pokemon/zygarde/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Zygarde50[] = INCBIN_COMP("graphics/pokemon/zygarde/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Zygarde50[] = INCBIN_U32("graphics/pokemon/zygarde/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Zygarde50[] = INCBIN_U32("graphics/pokemon/zygarde/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
+
const u32 gMonFrontPic_Zygarde10[] = INCBIN_U32("graphics/pokemon/zygarde/10_percent/anim_front.4bpp.lz");
const u32 gMonPalette_Zygarde10[] = INCBIN_U32("graphics/pokemon/zygarde/10_percent/normal.gbapal.lz");
const u32 gMonBackPic_Zygarde10[] = INCBIN_U32("graphics/pokemon/zygarde/10_percent/back.4bpp.lz");
const u32 gMonShinyPalette_Zygarde10[] = INCBIN_U32("graphics/pokemon/zygarde/10_percent/shiny.gbapal.lz");
const u8 gMonIcon_Zygarde10[] = INCBIN_U8("graphics/pokemon/zygarde/10_percent/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ //const u32 gObjectEventPic_Zygarde10[] = INCBIN_COMP("graphics/pokemon/zygarde/10_percent/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ //const u32 gOverworldPalette_Zygarde10[] = INCBIN_U32("graphics/pokemon/zygarde/10_percent/overworld_normal.gbapal.lz");
+ //const u32 gShinyOverworldPalette_Zygarde10[] = INCBIN_U32("graphics/pokemon/zygarde/10_percent/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_ZygardeComplete[] = INCBIN_U32("graphics/pokemon/zygarde/complete/anim_front.4bpp.lz");
const u32 gMonPalette_ZygardeComplete[] = INCBIN_U32("graphics/pokemon/zygarde/complete/normal.gbapal.lz");
const u32 gMonBackPic_ZygardeComplete[] = INCBIN_U32("graphics/pokemon/zygarde/complete/back.4bpp.lz");
const u32 gMonShinyPalette_ZygardeComplete[] = INCBIN_U32("graphics/pokemon/zygarde/complete/shiny.gbapal.lz");
const u8 gMonIcon_ZygardeComplete[] = INCBIN_U8("graphics/pokemon/zygarde/complete/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ //const u32 gObjectEventPic_ZygardeComplete[] = INCBIN_COMP("graphics/pokemon/zygarde/complete/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ //const u32 gOverworldPalette_ZygardeComplete[] = INCBIN_U32("graphics/pokemon/zygarde/complete/overworld_normal.gbapal.lz");
+ //const u32 gShinyOverworldPalette_ZygardeComplete[] = INCBIN_U32("graphics/pokemon/zygarde/complete/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_ZYGARDE
#if P_FAMILY_DIANCIE
@@ -9500,6 +16019,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Diancie[] = INCBIN_U8("graphics/pokemon/diancie/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Diancie[] = INCBIN_COMP("graphics/pokemon/diancie/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Diancie[] = INCBIN_U32("graphics/pokemon/diancie/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Diancie[] = INCBIN_U32("graphics/pokemon/diancie/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_MEGA_EVOLUTIONS
const u32 gMonFrontPic_DiancieMega[] = INCBIN_U32("graphics/pokemon/diancie/mega/front.4bpp.lz");
@@ -9507,6 +16033,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_DiancieMega[] = INCBIN_U32("graphics/pokemon/diancie/mega/back.4bpp.lz");
const u32 gMonShinyPalette_DiancieMega[] = INCBIN_U32("graphics/pokemon/diancie/mega/shiny.gbapal.lz");
const u8 gMonIcon_DiancieMega[] = INCBIN_U8("graphics/pokemon/diancie/mega/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_DiancieMega[] = INCBIN_COMP("graphics/pokemon/diancie/mega/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_DiancieMega[] = INCBIN_U32("graphics/pokemon/diancie/mega/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_DiancieMega[] = INCBIN_U32("graphics/pokemon/diancie/mega/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_MEGA_EVOLUTIONS
#endif //P_FAMILY_DIANCIE
@@ -9519,12 +16052,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Hoopa[] = INCBIN_U8("graphics/pokemon/hoopa/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_HoopaConfined[] = INCBIN_COMP("graphics/pokemon/hoopa/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_HoopaConfined[] = INCBIN_U32("graphics/pokemon/hoopa/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_HoopaConfined[] = INCBIN_U32("graphics/pokemon/hoopa/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_HoopaUnbound[] = INCBIN_U32("graphics/pokemon/hoopa/unbound/anim_front.4bpp.lz");
const u32 gMonPalette_HoopaUnbound[] = INCBIN_U32("graphics/pokemon/hoopa/unbound/normal.gbapal.lz");
const u32 gMonBackPic_HoopaUnbound[] = INCBIN_U32("graphics/pokemon/hoopa/unbound/back.4bpp.lz");
const u32 gMonShinyPalette_HoopaUnbound[] = INCBIN_U32("graphics/pokemon/hoopa/unbound/shiny.gbapal.lz");
const u8 gMonIcon_HoopaUnbound[] = INCBIN_U8("graphics/pokemon/hoopa/unbound/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_HoopaUnbound[] = INCBIN_COMP("graphics/pokemon/hoopa/unbound/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_HoopaUnbound[] = INCBIN_U32("graphics/pokemon/hoopa/unbound/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_HoopaUnbound[] = INCBIN_U32("graphics/pokemon/hoopa/unbound/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_HOOPA
#if P_FAMILY_VOLCANION
@@ -9536,6 +16083,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Volcanion[] = INCBIN_U8("graphics/pokemon/volcanion/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Volcanion[] = INCBIN_COMP("graphics/pokemon/volcanion/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Volcanion[] = INCBIN_U32("graphics/pokemon/volcanion/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Volcanion[] = INCBIN_U32("graphics/pokemon/volcanion/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_VOLCANION
#if P_FAMILY_ROWLET
@@ -9547,6 +16101,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Rowlet[] = INCBIN_U8("graphics/pokemon/rowlet/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Rowlet[] = INCBIN_COMP("graphics/pokemon/rowlet/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Rowlet[] = INCBIN_U32("graphics/pokemon/rowlet/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Rowlet[] = INCBIN_U32("graphics/pokemon/rowlet/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Dartrix[] = INCBIN_U32("graphics/pokemon/dartrix/anim_front.4bpp.lz");
const u32 gMonPalette_Dartrix[] = INCBIN_U32("graphics/pokemon/dartrix/normal.gbapal.lz");
@@ -9556,6 +16117,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Dartrix[] = INCBIN_U8("graphics/pokemon/dartrix/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Dartrix[] = INCBIN_COMP("graphics/pokemon/dartrix/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Dartrix[] = INCBIN_U32("graphics/pokemon/dartrix/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Dartrix[] = INCBIN_U32("graphics/pokemon/dartrix/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Decidueye[] = INCBIN_U32("graphics/pokemon/decidueye/anim_front.4bpp.lz");
const u32 gMonPalette_Decidueye[] = INCBIN_U32("graphics/pokemon/decidueye/normal.gbapal.lz");
@@ -9565,6 +16133,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Decidueye[] = INCBIN_U8("graphics/pokemon/decidueye/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Decidueye[] = INCBIN_COMP("graphics/pokemon/decidueye/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Decidueye[] = INCBIN_U32("graphics/pokemon/decidueye/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Decidueye[] = INCBIN_U32("graphics/pokemon/decidueye/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_HISUIAN_FORMS
const u32 gMonFrontPic_DecidueyeHisuian[] = INCBIN_U32("graphics/pokemon/decidueye/hisuian/front.4bpp.lz");
@@ -9572,6 +16147,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_DecidueyeHisuian[] = INCBIN_U32("graphics/pokemon/decidueye/hisuian/back.4bpp.lz");
const u32 gMonShinyPalette_DecidueyeHisuian[] = INCBIN_U32("graphics/pokemon/decidueye/hisuian/shiny.gbapal.lz");
const u8 gMonIcon_DecidueyeHisuian[] = INCBIN_U8("graphics/pokemon/decidueye/hisuian/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_DecidueyeHisuian[] = INCBIN_COMP("graphics/pokemon/decidueye/hisuian/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_DecidueyeHisuian[] = INCBIN_U32("graphics/pokemon/decidueye/hisuian/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_DecidueyeHisuian[] = INCBIN_U32("graphics/pokemon/decidueye/hisuian/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_HISUIAN_FORMS
#endif //P_FAMILY_ROWLET
@@ -9584,6 +16166,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Litten[] = INCBIN_U8("graphics/pokemon/litten/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Litten[] = INCBIN_COMP("graphics/pokemon/litten/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Litten[] = INCBIN_U32("graphics/pokemon/litten/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Litten[] = INCBIN_U32("graphics/pokemon/litten/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Torracat[] = INCBIN_U32("graphics/pokemon/torracat/front.4bpp.lz");
const u32 gMonPalette_Torracat[] = INCBIN_U32("graphics/pokemon/torracat/normal.gbapal.lz");
@@ -9593,6 +16182,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Torracat[] = INCBIN_U8("graphics/pokemon/torracat/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Torracat[] = INCBIN_COMP("graphics/pokemon/torracat/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Torracat[] = INCBIN_U32("graphics/pokemon/torracat/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Torracat[] = INCBIN_U32("graphics/pokemon/torracat/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Incineroar[] = INCBIN_U32("graphics/pokemon/incineroar/front.4bpp.lz");
const u32 gMonPalette_Incineroar[] = INCBIN_U32("graphics/pokemon/incineroar/normal.gbapal.lz");
@@ -9602,6 +16198,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Incineroar[] = INCBIN_U8("graphics/pokemon/incineroar/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Incineroar[] = INCBIN_COMP("graphics/pokemon/incineroar/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Incineroar[] = INCBIN_U32("graphics/pokemon/incineroar/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Incineroar[] = INCBIN_U32("graphics/pokemon/incineroar/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_LITTEN
#if P_FAMILY_POPPLIO
@@ -9613,6 +16216,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Popplio[] = INCBIN_U8("graphics/pokemon/popplio/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Popplio[] = INCBIN_COMP("graphics/pokemon/popplio/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Popplio[] = INCBIN_U32("graphics/pokemon/popplio/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Popplio[] = INCBIN_U32("graphics/pokemon/popplio/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Brionne[] = INCBIN_U32("graphics/pokemon/brionne/front.4bpp.lz");
const u32 gMonPalette_Brionne[] = INCBIN_U32("graphics/pokemon/brionne/normal.gbapal.lz");
@@ -9622,6 +16232,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Brionne[] = INCBIN_U8("graphics/pokemon/brionne/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Brionne[] = INCBIN_COMP("graphics/pokemon/brionne/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Brionne[] = INCBIN_U32("graphics/pokemon/brionne/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Brionne[] = INCBIN_U32("graphics/pokemon/brionne/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Primarina[] = INCBIN_U32("graphics/pokemon/primarina/front.4bpp.lz");
const u32 gMonPalette_Primarina[] = INCBIN_U32("graphics/pokemon/primarina/normal.gbapal.lz");
@@ -9631,6 +16248,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Primarina[] = INCBIN_U8("graphics/pokemon/primarina/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Primarina[] = INCBIN_COMP("graphics/pokemon/primarina/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Primarina[] = INCBIN_U32("graphics/pokemon/primarina/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Primarina[] = INCBIN_U32("graphics/pokemon/primarina/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_POPPLIO
#if P_FAMILY_PIKIPEK
@@ -9642,6 +16266,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Pikipek[] = INCBIN_U8("graphics/pokemon/pikipek/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Pikipek[] = INCBIN_COMP("graphics/pokemon/pikipek/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Pikipek[] = INCBIN_U32("graphics/pokemon/pikipek/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Pikipek[] = INCBIN_U32("graphics/pokemon/pikipek/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Trumbeak[] = INCBIN_U32("graphics/pokemon/trumbeak/anim_front.4bpp.lz");
const u32 gMonPalette_Trumbeak[] = INCBIN_U32("graphics/pokemon/trumbeak/normal.gbapal.lz");
@@ -9651,6 +16282,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Trumbeak[] = INCBIN_U8("graphics/pokemon/trumbeak/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Trumbeak[] = INCBIN_COMP("graphics/pokemon/trumbeak/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Trumbeak[] = INCBIN_U32("graphics/pokemon/trumbeak/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Trumbeak[] = INCBIN_U32("graphics/pokemon/trumbeak/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Toucannon[] = INCBIN_U32("graphics/pokemon/toucannon/anim_front.4bpp.lz");
const u32 gMonPalette_Toucannon[] = INCBIN_U32("graphics/pokemon/toucannon/normal.gbapal.lz");
@@ -9660,6 +16298,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Toucannon[] = INCBIN_U8("graphics/pokemon/toucannon/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Toucannon[] = INCBIN_COMP("graphics/pokemon/toucannon/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Toucannon[] = INCBIN_U32("graphics/pokemon/toucannon/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Toucannon[] = INCBIN_U32("graphics/pokemon/toucannon/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_PIKIPEK
#if P_FAMILY_YUNGOOS
@@ -9671,6 +16316,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Yungoos[] = INCBIN_U8("graphics/pokemon/yungoos/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Yungoos[] = INCBIN_COMP("graphics/pokemon/yungoos/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Yungoos[] = INCBIN_U32("graphics/pokemon/yungoos/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Yungoos[] = INCBIN_U32("graphics/pokemon/yungoos/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Gumshoos[] = INCBIN_U32("graphics/pokemon/gumshoos/front.4bpp.lz");
const u32 gMonPalette_Gumshoos[] = INCBIN_U32("graphics/pokemon/gumshoos/normal.gbapal.lz");
@@ -9680,6 +16332,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Gumshoos[] = INCBIN_U8("graphics/pokemon/gumshoos/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Gumshoos[] = INCBIN_COMP("graphics/pokemon/gumshoos/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Gumshoos[] = INCBIN_U32("graphics/pokemon/gumshoos/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Gumshoos[] = INCBIN_U32("graphics/pokemon/gumshoos/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_YUNGOOS
#if P_FAMILY_GRUBBIN
@@ -9691,6 +16350,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Grubbin[] = INCBIN_U8("graphics/pokemon/grubbin/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Grubbin[] = INCBIN_COMP("graphics/pokemon/grubbin/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Grubbin[] = INCBIN_U32("graphics/pokemon/grubbin/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Grubbin[] = INCBIN_U32("graphics/pokemon/grubbin/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Charjabug[] = INCBIN_U32("graphics/pokemon/charjabug/anim_front.4bpp.lz");
const u32 gMonPalette_Charjabug[] = INCBIN_U32("graphics/pokemon/charjabug/normal.gbapal.lz");
@@ -9700,6 +16366,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Charjabug[] = INCBIN_U8("graphics/pokemon/charjabug/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Charjabug[] = INCBIN_COMP("graphics/pokemon/charjabug/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Charjabug[] = INCBIN_U32("graphics/pokemon/charjabug/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Charjabug[] = INCBIN_U32("graphics/pokemon/charjabug/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Vikavolt[] = INCBIN_U32("graphics/pokemon/vikavolt/anim_front.4bpp.lz");
const u32 gMonPalette_Vikavolt[] = INCBIN_U32("graphics/pokemon/vikavolt/normal.gbapal.lz");
@@ -9709,6 +16382,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Vikavolt[] = INCBIN_U8("graphics/pokemon/vikavolt/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Vikavolt[] = INCBIN_COMP("graphics/pokemon/vikavolt/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Vikavolt[] = INCBIN_U32("graphics/pokemon/vikavolt/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Vikavolt[] = INCBIN_U32("graphics/pokemon/vikavolt/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_GRUBBIN
#if P_FAMILY_CRABRAWLER
@@ -9720,6 +16400,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Crabrawler[] = INCBIN_U8("graphics/pokemon/crabrawler/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Crabrawler[] = INCBIN_COMP("graphics/pokemon/crabrawler/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Crabrawler[] = INCBIN_U32("graphics/pokemon/crabrawler/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Crabrawler[] = INCBIN_U32("graphics/pokemon/crabrawler/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Crabominable[] = INCBIN_U32("graphics/pokemon/crabominable/front.4bpp.lz");
const u32 gMonPalette_Crabominable[] = INCBIN_U32("graphics/pokemon/crabominable/normal.gbapal.lz");
@@ -9729,6 +16416,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Crabominable[] = INCBIN_U8("graphics/pokemon/crabominable/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Crabominable[] = INCBIN_COMP("graphics/pokemon/crabominable/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Crabominable[] = INCBIN_U32("graphics/pokemon/crabominable/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Crabominable[] = INCBIN_U32("graphics/pokemon/crabominable/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_CRABRAWLER
#if P_FAMILY_ORICORIO
@@ -9740,24 +16434,52 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Oricorio[] = INCBIN_U8("graphics/pokemon/oricorio/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_OricorioBaile[] = INCBIN_COMP("graphics/pokemon/oricorio/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_OricorioBaile[] = INCBIN_U32("graphics/pokemon/oricorio/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_OricorioBaile[] = INCBIN_U32("graphics/pokemon/oricorio/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_OricorioPomPom[] = INCBIN_U32("graphics/pokemon/oricorio/pom_pom/front.4bpp.lz");
const u32 gMonPalette_OricorioPomPom[] = INCBIN_U32("graphics/pokemon/oricorio/pom_pom/normal.gbapal.lz");
const u32 gMonBackPic_OricorioPomPom[] = INCBIN_U32("graphics/pokemon/oricorio/pom_pom/back.4bpp.lz");
const u32 gMonShinyPalette_OricorioPomPom[] = INCBIN_U32("graphics/pokemon/oricorio/pom_pom/shiny.gbapal.lz");
const u8 gMonIcon_OricorioPomPom[] = INCBIN_U8("graphics/pokemon/oricorio/pom_pom/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_OricorioPomPom[] = INCBIN_COMP("graphics/pokemon/oricorio/pom_pom/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_OricorioPomPom[] = INCBIN_U32("graphics/pokemon/oricorio/pom_pom/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_OricorioPomPom[] = INCBIN_U32("graphics/pokemon/oricorio/pom_pom/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_OricorioPau[] = INCBIN_U32("graphics/pokemon/oricorio/pau/front.4bpp.lz");
const u32 gMonPalette_OricorioPau[] = INCBIN_U32("graphics/pokemon/oricorio/pau/normal.gbapal.lz");
const u32 gMonBackPic_OricorioPau[] = INCBIN_U32("graphics/pokemon/oricorio/pau/back.4bpp.lz");
const u32 gMonShinyPalette_OricorioPau[] = INCBIN_U32("graphics/pokemon/oricorio/pau/shiny.gbapal.lz");
const u8 gMonIcon_OricorioPau[] = INCBIN_U8("graphics/pokemon/oricorio/pau/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_OricorioPau[] = INCBIN_COMP("graphics/pokemon/oricorio/pau/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_OricorioPau[] = INCBIN_U32("graphics/pokemon/oricorio/pau/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_OricorioPau[] = INCBIN_U32("graphics/pokemon/oricorio/pau/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_OricorioSensu[] = INCBIN_U32("graphics/pokemon/oricorio/sensu/front.4bpp.lz");
const u32 gMonPalette_OricorioSensu[] = INCBIN_U32("graphics/pokemon/oricorio/sensu/normal.gbapal.lz");
const u32 gMonBackPic_OricorioSensu[] = INCBIN_U32("graphics/pokemon/oricorio/sensu/back.4bpp.lz");
const u32 gMonShinyPalette_OricorioSensu[] = INCBIN_U32("graphics/pokemon/oricorio/sensu/shiny.gbapal.lz");
const u8 gMonIcon_OricorioSensu[] = INCBIN_U8("graphics/pokemon/oricorio/sensu/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_OricorioSensu[] = INCBIN_COMP("graphics/pokemon/oricorio/sensu/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_OricorioSensu[] = INCBIN_U32("graphics/pokemon/oricorio/sensu/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_OricorioSensu[] = INCBIN_U32("graphics/pokemon/oricorio/sensu/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_ORICORIO
#if P_FAMILY_CUTIEFLY
@@ -9769,6 +16491,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Cutiefly[] = INCBIN_U8("graphics/pokemon/cutiefly/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Cutiefly[] = INCBIN_COMP("graphics/pokemon/cutiefly/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Cutiefly[] = INCBIN_U32("graphics/pokemon/cutiefly/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Cutiefly[] = INCBIN_U32("graphics/pokemon/cutiefly/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Ribombee[] = INCBIN_U32("graphics/pokemon/ribombee/anim_front.4bpp.lz");
const u32 gMonPalette_Ribombee[] = INCBIN_U32("graphics/pokemon/ribombee/normal.gbapal.lz");
@@ -9778,6 +16507,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Ribombee[] = INCBIN_U8("graphics/pokemon/ribombee/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Ribombee[] = INCBIN_COMP("graphics/pokemon/ribombee/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Ribombee[] = INCBIN_U32("graphics/pokemon/ribombee/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Ribombee[] = INCBIN_U32("graphics/pokemon/ribombee/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_CUTIEFLY
#if P_FAMILY_ROCKRUFF
@@ -9789,6 +16525,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Rockruff[] = INCBIN_U8("graphics/pokemon/rockruff/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Rockruff[] = INCBIN_COMP("graphics/pokemon/rockruff/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Rockruff[] = INCBIN_U32("graphics/pokemon/rockruff/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Rockruff[] = INCBIN_U32("graphics/pokemon/rockruff/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_LycanrocMidday[] = INCBIN_U32("graphics/pokemon/lycanroc/anim_front.4bpp.lz");
const u32 gMonPalette_LycanrocMidday[] = INCBIN_U32("graphics/pokemon/lycanroc/normal.gbapal.lz");
@@ -9798,18 +16541,39 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Lycanroc[] = INCBIN_U8("graphics/pokemon/lycanroc/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_LycanrocMidday[] = INCBIN_COMP("graphics/pokemon/lycanroc/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_LycanrocMidday[] = INCBIN_U32("graphics/pokemon/lycanroc/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_LycanrocMidday[] = INCBIN_U32("graphics/pokemon/lycanroc/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_LycanrocMidnight[] = INCBIN_U32("graphics/pokemon/lycanroc/midnight/anim_front.4bpp.lz");
const u32 gMonPalette_LycanrocMidnight[] = INCBIN_U32("graphics/pokemon/lycanroc/midnight/normal.gbapal.lz");
const u32 gMonBackPic_LycanrocMidnight[] = INCBIN_U32("graphics/pokemon/lycanroc/midnight/back.4bpp.lz");
const u32 gMonShinyPalette_LycanrocMidnight[] = INCBIN_U32("graphics/pokemon/lycanroc/midnight/shiny.gbapal.lz");
const u8 gMonIcon_LycanrocMidnight[] = INCBIN_U8("graphics/pokemon/lycanroc/midnight/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_LycanrocMidnight[] = INCBIN_COMP("graphics/pokemon/lycanroc/midnight/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_LycanrocMidnight[] = INCBIN_U32("graphics/pokemon/lycanroc/midnight/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_LycanrocMidnight[] = INCBIN_U32("graphics/pokemon/lycanroc/midnight/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_LycanrocDusk[] = INCBIN_U32("graphics/pokemon/lycanroc/dusk/anim_front.4bpp.lz");
const u32 gMonPalette_LycanrocDusk[] = INCBIN_U32("graphics/pokemon/lycanroc/dusk/normal.gbapal.lz");
const u32 gMonBackPic_LycanrocDusk[] = INCBIN_U32("graphics/pokemon/lycanroc/dusk/back.4bpp.lz");
const u32 gMonShinyPalette_LycanrocDusk[] = INCBIN_U32("graphics/pokemon/lycanroc/dusk/shiny.gbapal.lz");
const u8 gMonIcon_LycanrocDusk[] = INCBIN_U8("graphics/pokemon/lycanroc/dusk/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_LycanrocDusk[] = INCBIN_COMP("graphics/pokemon/lycanroc/dusk/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_LycanrocDusk[] = INCBIN_U32("graphics/pokemon/lycanroc/dusk/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_LycanrocDusk[] = INCBIN_U32("graphics/pokemon/lycanroc/dusk/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_ROCKRUFF
#if P_FAMILY_WISHIWASHI
@@ -9821,12 +16585,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Wishiwashi[] = INCBIN_U8("graphics/pokemon/wishiwashi/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_WishiwashiSolo[] = INCBIN_COMP("graphics/pokemon/wishiwashi/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_WishiwashiSolo[] = INCBIN_U32("graphics/pokemon/wishiwashi/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_WishiwashiSolo[] = INCBIN_U32("graphics/pokemon/wishiwashi/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_WishiwashiSchool[] = INCBIN_U32("graphics/pokemon/wishiwashi/school/front.4bpp.lz");
const u32 gMonPalette_WishiwashiSchool[] = INCBIN_U32("graphics/pokemon/wishiwashi/school/normal.gbapal.lz");
const u32 gMonBackPic_WishiwashiSchool[] = INCBIN_U32("graphics/pokemon/wishiwashi/school/back.4bpp.lz");
const u32 gMonShinyPalette_WishiwashiSchool[] = INCBIN_U32("graphics/pokemon/wishiwashi/school/shiny.gbapal.lz");
const u8 gMonIcon_WishiwashiSchool[] = INCBIN_U8("graphics/pokemon/wishiwashi/school/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_WishiwashiSchool[] = INCBIN_COMP("graphics/pokemon/wishiwashi/school/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_WishiwashiSchool[] = INCBIN_U32("graphics/pokemon/wishiwashi/school/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_WishiwashiSchool[] = INCBIN_U32("graphics/pokemon/wishiwashi/school/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_WISHIWASHI
#if P_FAMILY_MAREANIE
@@ -9838,6 +16616,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Mareanie[] = INCBIN_U8("graphics/pokemon/mareanie/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Mareanie[] = INCBIN_COMP("graphics/pokemon/mareanie/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Mareanie[] = INCBIN_U32("graphics/pokemon/mareanie/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Mareanie[] = INCBIN_U32("graphics/pokemon/mareanie/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Toxapex[] = INCBIN_U32("graphics/pokemon/toxapex/front.4bpp.lz");
const u32 gMonPalette_Toxapex[] = INCBIN_U32("graphics/pokemon/toxapex/normal.gbapal.lz");
@@ -9847,6 +16632,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Toxapex[] = INCBIN_U8("graphics/pokemon/toxapex/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Toxapex[] = INCBIN_COMP("graphics/pokemon/toxapex/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Toxapex[] = INCBIN_U32("graphics/pokemon/toxapex/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Toxapex[] = INCBIN_U32("graphics/pokemon/toxapex/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_MAREANIE
#if P_FAMILY_MUDBRAY
@@ -9858,6 +16650,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Mudbray[] = INCBIN_U8("graphics/pokemon/mudbray/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Mudbray[] = INCBIN_COMP("graphics/pokemon/mudbray/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Mudbray[] = INCBIN_U32("graphics/pokemon/mudbray/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Mudbray[] = INCBIN_U32("graphics/pokemon/mudbray/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Mudsdale[] = INCBIN_U32("graphics/pokemon/mudsdale/front.4bpp.lz");
const u32 gMonPalette_Mudsdale[] = INCBIN_U32("graphics/pokemon/mudsdale/normal.gbapal.lz");
@@ -9867,6 +16666,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Mudsdale[] = INCBIN_U8("graphics/pokemon/mudsdale/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Mudsdale[] = INCBIN_COMP("graphics/pokemon/mudsdale/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Mudsdale[] = INCBIN_U32("graphics/pokemon/mudsdale/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Mudsdale[] = INCBIN_U32("graphics/pokemon/mudsdale/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_MUDBRAY
#if P_FAMILY_DEWPIDER
@@ -9878,6 +16684,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Dewpider[] = INCBIN_U8("graphics/pokemon/dewpider/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Dewpider[] = INCBIN_COMP("graphics/pokemon/dewpider/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Dewpider[] = INCBIN_U32("graphics/pokemon/dewpider/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Dewpider[] = INCBIN_U32("graphics/pokemon/dewpider/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Araquanid[] = INCBIN_U32("graphics/pokemon/araquanid/anim_front.4bpp.lz");
const u32 gMonPalette_Araquanid[] = INCBIN_U32("graphics/pokemon/araquanid/normal.gbapal.lz");
@@ -9887,6 +16700,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Araquanid[] = INCBIN_U8("graphics/pokemon/araquanid/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Araquanid[] = INCBIN_COMP("graphics/pokemon/araquanid/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Araquanid[] = INCBIN_U32("graphics/pokemon/araquanid/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Araquanid[] = INCBIN_U32("graphics/pokemon/araquanid/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_DEWPIDER
#if P_FAMILY_FOMANTIS
@@ -9898,6 +16718,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Fomantis[] = INCBIN_U8("graphics/pokemon/fomantis/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Fomantis[] = INCBIN_COMP("graphics/pokemon/fomantis/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Fomantis[] = INCBIN_U32("graphics/pokemon/fomantis/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Fomantis[] = INCBIN_U32("graphics/pokemon/fomantis/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Lurantis[] = INCBIN_U32("graphics/pokemon/lurantis/front.4bpp.lz");
const u32 gMonPalette_Lurantis[] = INCBIN_U32("graphics/pokemon/lurantis/normal.gbapal.lz");
@@ -9907,6 +16734,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Lurantis[] = INCBIN_U8("graphics/pokemon/lurantis/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Lurantis[] = INCBIN_COMP("graphics/pokemon/lurantis/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Lurantis[] = INCBIN_U32("graphics/pokemon/lurantis/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Lurantis[] = INCBIN_U32("graphics/pokemon/lurantis/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_FOMANTIS
#if P_FAMILY_MORELULL
@@ -9918,6 +16752,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Morelull[] = INCBIN_U8("graphics/pokemon/morelull/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Morelull[] = INCBIN_COMP("graphics/pokemon/morelull/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Morelull[] = INCBIN_U32("graphics/pokemon/morelull/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Morelull[] = INCBIN_U32("graphics/pokemon/morelull/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Shiinotic[] = INCBIN_U32("graphics/pokemon/shiinotic/front.4bpp.lz");
const u32 gMonPalette_Shiinotic[] = INCBIN_U32("graphics/pokemon/shiinotic/normal.gbapal.lz");
@@ -9927,6 +16768,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Shiinotic[] = INCBIN_U8("graphics/pokemon/shiinotic/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Shiinotic[] = INCBIN_COMP("graphics/pokemon/shiinotic/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Shiinotic[] = INCBIN_U32("graphics/pokemon/shiinotic/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Shiinotic[] = INCBIN_U32("graphics/pokemon/shiinotic/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_MORELULL
#if P_FAMILY_SALANDIT
@@ -9938,6 +16786,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Salandit[] = INCBIN_U8("graphics/pokemon/salandit/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Salandit[] = INCBIN_COMP("graphics/pokemon/salandit/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Salandit[] = INCBIN_U32("graphics/pokemon/salandit/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Salandit[] = INCBIN_U32("graphics/pokemon/salandit/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Salazzle[] = INCBIN_U32("graphics/pokemon/salazzle/anim_front.4bpp.lz");
const u32 gMonPalette_Salazzle[] = INCBIN_U32("graphics/pokemon/salazzle/normal.gbapal.lz");
@@ -9947,6 +16802,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Salazzle[] = INCBIN_U8("graphics/pokemon/salazzle/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Salazzle[] = INCBIN_COMP("graphics/pokemon/salazzle/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Salazzle[] = INCBIN_U32("graphics/pokemon/salazzle/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Salazzle[] = INCBIN_U32("graphics/pokemon/salazzle/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SALANDIT
#if P_FAMILY_STUFFUL
@@ -9958,6 +16820,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Stufful[] = INCBIN_U8("graphics/pokemon/stufful/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Stufful[] = INCBIN_COMP("graphics/pokemon/stufful/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Stufful[] = INCBIN_U32("graphics/pokemon/stufful/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Stufful[] = INCBIN_U32("graphics/pokemon/stufful/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Bewear[] = INCBIN_U32("graphics/pokemon/bewear/anim_front.4bpp.lz");
const u32 gMonPalette_Bewear[] = INCBIN_U32("graphics/pokemon/bewear/normal.gbapal.lz");
@@ -9967,6 +16836,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Bewear[] = INCBIN_U8("graphics/pokemon/bewear/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Bewear[] = INCBIN_COMP("graphics/pokemon/bewear/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Bewear[] = INCBIN_U32("graphics/pokemon/bewear/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Bewear[] = INCBIN_U32("graphics/pokemon/bewear/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_STUFFUL
#if P_FAMILY_BOUNSWEET
@@ -9978,6 +16854,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Bounsweet[] = INCBIN_U8("graphics/pokemon/bounsweet/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Bounsweet[] = INCBIN_COMP("graphics/pokemon/bounsweet/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Bounsweet[] = INCBIN_U32("graphics/pokemon/bounsweet/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Bounsweet[] = INCBIN_U32("graphics/pokemon/bounsweet/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Steenee[] = INCBIN_U32("graphics/pokemon/steenee/front.4bpp.lz");
const u32 gMonPalette_Steenee[] = INCBIN_U32("graphics/pokemon/steenee/normal.gbapal.lz");
@@ -9987,6 +16870,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Steenee[] = INCBIN_U8("graphics/pokemon/steenee/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Steenee[] = INCBIN_COMP("graphics/pokemon/steenee/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Steenee[] = INCBIN_U32("graphics/pokemon/steenee/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Steenee[] = INCBIN_U32("graphics/pokemon/steenee/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Tsareena[] = INCBIN_U32("graphics/pokemon/tsareena/front.4bpp.lz");
const u32 gMonPalette_Tsareena[] = INCBIN_U32("graphics/pokemon/tsareena/normal.gbapal.lz");
@@ -9996,6 +16886,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Tsareena[] = INCBIN_U8("graphics/pokemon/tsareena/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Tsareena[] = INCBIN_COMP("graphics/pokemon/tsareena/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Tsareena[] = INCBIN_U32("graphics/pokemon/tsareena/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Tsareena[] = INCBIN_U32("graphics/pokemon/tsareena/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_BOUNSWEET
#if P_FAMILY_COMFEY
@@ -10007,6 +16904,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Comfey[] = INCBIN_U8("graphics/pokemon/comfey/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Comfey[] = INCBIN_COMP("graphics/pokemon/comfey/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Comfey[] = INCBIN_U32("graphics/pokemon/comfey/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Comfey[] = INCBIN_U32("graphics/pokemon/comfey/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_COMFEY
#if P_FAMILY_ORANGURU
@@ -10018,6 +16922,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Oranguru[] = INCBIN_U8("graphics/pokemon/oranguru/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Oranguru[] = INCBIN_COMP("graphics/pokemon/oranguru/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Oranguru[] = INCBIN_U32("graphics/pokemon/oranguru/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Oranguru[] = INCBIN_U32("graphics/pokemon/oranguru/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_ORANGURU
#if P_FAMILY_PASSIMIAN
@@ -10029,6 +16940,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Passimian[] = INCBIN_U8("graphics/pokemon/passimian/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Passimian[] = INCBIN_COMP("graphics/pokemon/passimian/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Passimian[] = INCBIN_U32("graphics/pokemon/passimian/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Passimian[] = INCBIN_U32("graphics/pokemon/passimian/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_PASSIMIAN
#if P_FAMILY_WIMPOD
@@ -10040,6 +16958,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Wimpod[] = INCBIN_U8("graphics/pokemon/wimpod/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Wimpod[] = INCBIN_COMP("graphics/pokemon/wimpod/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Wimpod[] = INCBIN_U32("graphics/pokemon/wimpod/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Wimpod[] = INCBIN_U32("graphics/pokemon/wimpod/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Golisopod[] = INCBIN_U32("graphics/pokemon/golisopod/anim_front.4bpp.lz");
const u32 gMonPalette_Golisopod[] = INCBIN_U32("graphics/pokemon/golisopod/normal.gbapal.lz");
@@ -10049,6 +16974,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Golisopod[] = INCBIN_U8("graphics/pokemon/golisopod/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Golisopod[] = INCBIN_COMP("graphics/pokemon/golisopod/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Golisopod[] = INCBIN_U32("graphics/pokemon/golisopod/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Golisopod[] = INCBIN_U32("graphics/pokemon/golisopod/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_WIMPOD
#if P_FAMILY_SANDYGAST
@@ -10060,6 +16992,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Sandygast[] = INCBIN_U8("graphics/pokemon/sandygast/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Sandygast[] = INCBIN_COMP("graphics/pokemon/sandygast/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Sandygast[] = INCBIN_U32("graphics/pokemon/sandygast/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Sandygast[] = INCBIN_U32("graphics/pokemon/sandygast/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Palossand[] = INCBIN_U32("graphics/pokemon/palossand/front.4bpp.lz");
const u32 gMonPalette_Palossand[] = INCBIN_U32("graphics/pokemon/palossand/normal.gbapal.lz");
@@ -10069,6 +17008,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Palossand[] = INCBIN_U8("graphics/pokemon/palossand/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Palossand[] = INCBIN_COMP("graphics/pokemon/palossand/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Palossand[] = INCBIN_U32("graphics/pokemon/palossand/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Palossand[] = INCBIN_U32("graphics/pokemon/palossand/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SANDYGAST
#if P_FAMILY_PYUKUMUKU
@@ -10080,6 +17026,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Pyukumuku[] = INCBIN_U8("graphics/pokemon/pyukumuku/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Pyukumuku[] = INCBIN_COMP("graphics/pokemon/pyukumuku/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Pyukumuku[] = INCBIN_U32("graphics/pokemon/pyukumuku/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Pyukumuku[] = INCBIN_U32("graphics/pokemon/pyukumuku/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_PYUKUMUKU
#if P_FAMILY_TYPE_NULL
@@ -10091,6 +17044,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Type_Null[] = INCBIN_U8("graphics/pokemon/type_null/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_TypeNull[] = INCBIN_COMP("graphics/pokemon/type_null/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_TypeNull[] = INCBIN_U32("graphics/pokemon/type_null/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_TypeNull[] = INCBIN_U32("graphics/pokemon/type_null/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Silvally[] = INCBIN_U32("graphics/pokemon/silvally/front.4bpp.lz");
const u32 gMonBackPic_Silvally[] = INCBIN_U32("graphics/pokemon/silvally/back.4bpp.lz");
@@ -10098,6 +17058,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Silvally[] = INCBIN_U8("graphics/pokemon/silvally/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Silvally[] = INCBIN_COMP("graphics/pokemon/silvally/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Silvally[] = INCBIN_U32("graphics/pokemon/silvally/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Silvally[] = INCBIN_U32("graphics/pokemon/silvally/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonPalette_SilvallyNormal[] = INCBIN_U32("graphics/pokemon/silvally/normal.gbapal.lz");
const u32 gMonShinyPalette_SilvallyNormal[] = INCBIN_U32("graphics/pokemon/silvally/shiny.gbapal.lz");
@@ -10188,6 +17155,14 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonPalette_MiniorCoreViolet[] = INCBIN_U32("graphics/pokemon/minior/core/violet/normal.gbapal.lz");
const u8 gMonIcon_MiniorCoreViolet[] = INCBIN_U8("graphics/pokemon/minior/core/violet/icon.4bpp");
+
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_MiniorMeteor[] = INCBIN_COMP("graphics/pokemon/minior/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_MiniorMeteor[] = INCBIN_U32("graphics/pokemon/minior/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_MiniorMeteor[] = INCBIN_U32("graphics/pokemon/minior/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_MINIOR
#if P_FAMILY_KOMALA
@@ -10199,6 +17174,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Komala[] = INCBIN_U8("graphics/pokemon/komala/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Komala[] = INCBIN_COMP("graphics/pokemon/komala/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Komala[] = INCBIN_U32("graphics/pokemon/komala/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Komala[] = INCBIN_U32("graphics/pokemon/komala/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_KOMALA
#if P_FAMILY_TURTONATOR
@@ -10210,6 +17192,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Turtonator[] = INCBIN_U8("graphics/pokemon/turtonator/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Turtonator[] = INCBIN_COMP("graphics/pokemon/turtonator/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Turtonator[] = INCBIN_U32("graphics/pokemon/turtonator/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Turtonator[] = INCBIN_U32("graphics/pokemon/turtonator/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_TURTONATOR
#if P_FAMILY_TOGEDEMARU
@@ -10221,6 +17210,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Togedemaru[] = INCBIN_U8("graphics/pokemon/togedemaru/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Togedemaru[] = INCBIN_COMP("graphics/pokemon/togedemaru/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Togedemaru[] = INCBIN_U32("graphics/pokemon/togedemaru/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Togedemaru[] = INCBIN_U32("graphics/pokemon/togedemaru/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_TOGEDEMARU
#if P_FAMILY_MIMIKYU
@@ -10232,12 +17228,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Mimikyu[] = INCBIN_U8("graphics/pokemon/mimikyu/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_MimikyuDisguised[] = INCBIN_COMP("graphics/pokemon/mimikyu/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_MimikyuDisguised[] = INCBIN_U32("graphics/pokemon/mimikyu/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_MimikyuDisguised[] = INCBIN_U32("graphics/pokemon/mimikyu/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_MimikyuBusted[] = INCBIN_U32("graphics/pokemon/mimikyu/busted/front.4bpp.lz");
const u32 gMonPalette_MimikyuBusted[] = INCBIN_U32("graphics/pokemon/mimikyu/busted/normal.gbapal.lz");
const u32 gMonBackPic_MimikyuBusted[] = INCBIN_U32("graphics/pokemon/mimikyu/busted/back.4bpp.lz");
const u32 gMonShinyPalette_MimikyuBusted[] = INCBIN_U32("graphics/pokemon/mimikyu/busted/shiny.gbapal.lz");
const u8 gMonIcon_MimikyuBusted[] = INCBIN_U8("graphics/pokemon/mimikyu/busted/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_MimikyuBusted[] = INCBIN_COMP("graphics/pokemon/mimikyu/busted/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_MimikyuBusted[] = INCBIN_U32("graphics/pokemon/mimikyu/busted/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_MimikyuBusted[] = INCBIN_U32("graphics/pokemon/mimikyu/busted/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_MIMIKYU
#if P_FAMILY_BRUXISH
@@ -10249,6 +17259,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Bruxish[] = INCBIN_U8("graphics/pokemon/bruxish/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Bruxish[] = INCBIN_COMP("graphics/pokemon/bruxish/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Bruxish[] = INCBIN_U32("graphics/pokemon/bruxish/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Bruxish[] = INCBIN_U32("graphics/pokemon/bruxish/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_BRUXISH
#if P_FAMILY_DRAMPA
@@ -10260,6 +17277,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Drampa[] = INCBIN_U8("graphics/pokemon/drampa/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Drampa[] = INCBIN_COMP("graphics/pokemon/drampa/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Drampa[] = INCBIN_U32("graphics/pokemon/drampa/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Drampa[] = INCBIN_U32("graphics/pokemon/drampa/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_DRAMPA
#if P_FAMILY_DHELMISE
@@ -10271,6 +17295,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Dhelmise[] = INCBIN_U8("graphics/pokemon/dhelmise/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Dhelmise[] = INCBIN_COMP("graphics/pokemon/dhelmise/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Dhelmise[] = INCBIN_U32("graphics/pokemon/dhelmise/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Dhelmise[] = INCBIN_U32("graphics/pokemon/dhelmise/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_DHELMISE
#if P_FAMILY_JANGMO_O
@@ -10282,6 +17313,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_JangmoO[] = INCBIN_U8("graphics/pokemon/jangmo_o/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_JangmoO[] = INCBIN_COMP("graphics/pokemon/jangmo_o/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_JangmoO[] = INCBIN_U32("graphics/pokemon/jangmo_o/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_JangmoO[] = INCBIN_U32("graphics/pokemon/jangmo_o/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_HakamoO[] = INCBIN_U32("graphics/pokemon/hakamo_o/anim_front.4bpp.lz");
const u32 gMonPalette_HakamoO[] = INCBIN_U32("graphics/pokemon/hakamo_o/normal.gbapal.lz");
@@ -10291,6 +17329,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_HakamoO[] = INCBIN_U8("graphics/pokemon/hakamo_o/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_HakamoO[] = INCBIN_COMP("graphics/pokemon/hakamo_o/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_HakamoO[] = INCBIN_U32("graphics/pokemon/hakamo_o/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_HakamoO[] = INCBIN_U32("graphics/pokemon/hakamo_o/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_KommoO[] = INCBIN_U32("graphics/pokemon/kommo_o/anim_front.4bpp.lz");
const u32 gMonPalette_KommoO[] = INCBIN_U32("graphics/pokemon/kommo_o/normal.gbapal.lz");
@@ -10300,6 +17345,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_KommoO[] = INCBIN_U8("graphics/pokemon/kommo_o/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_KommoO[] = INCBIN_COMP("graphics/pokemon/kommo_o/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_KommoO[] = INCBIN_U32("graphics/pokemon/kommo_o/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_KommoO[] = INCBIN_U32("graphics/pokemon/kommo_o/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_JANGMO_O
#if P_FAMILY_TAPU_KOKO
@@ -10309,8 +17361,15 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonShinyPalette_TapuKoko[] = INCBIN_U32("graphics/pokemon/tapu_koko/shiny.gbapal.lz");
const u8 gMonIcon_TapuKoko[] = INCBIN_U8("graphics/pokemon/tapu_koko/icon.4bpp");
#if P_FOOTPRINTS
- const u8 gMonFootprint_Tapu_Koko[] = INCBIN_U8("graphics/pokemon/tapu_koko/footprint.1bpp");
+ const u8 gMonFootprint_TapuKoko[] = INCBIN_U8("graphics/pokemon/tapu_koko/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_TapuKoko[] = INCBIN_COMP("graphics/pokemon/tapu_koko/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_TapuKoko[] = INCBIN_U32("graphics/pokemon/tapu_koko/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_TapuKoko[] = INCBIN_U32("graphics/pokemon/tapu_koko/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_TAPU_KOKO
#if P_FAMILY_TAPU_LELE
@@ -10320,8 +17379,15 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonShinyPalette_TapuLele[] = INCBIN_U32("graphics/pokemon/tapu_lele/shiny.gbapal.lz");
const u8 gMonIcon_TapuLele[] = INCBIN_U8("graphics/pokemon/tapu_lele/icon.4bpp");
#if P_FOOTPRINTS
- const u8 gMonFootprint_Tapu_Lele[] = INCBIN_U8("graphics/pokemon/tapu_lele/footprint.1bpp");
+ const u8 gMonFootprint_TapuLele[] = INCBIN_U8("graphics/pokemon/tapu_lele/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_TapuLele[] = INCBIN_COMP("graphics/pokemon/tapu_lele/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_TapuLele[] = INCBIN_U32("graphics/pokemon/tapu_lele/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_TapuLele[] = INCBIN_U32("graphics/pokemon/tapu_lele/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_TAPU_LELE
#if P_FAMILY_TAPU_BULU
@@ -10331,8 +17397,15 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonShinyPalette_TapuBulu[] = INCBIN_U32("graphics/pokemon/tapu_bulu/shiny.gbapal.lz");
const u8 gMonIcon_TapuBulu[] = INCBIN_U8("graphics/pokemon/tapu_bulu/icon.4bpp");
#if P_FOOTPRINTS
- const u8 gMonFootprint_Tapu_Bulu[] = INCBIN_U8("graphics/pokemon/tapu_bulu/footprint.1bpp");
+ const u8 gMonFootprint_TapuBulu[] = INCBIN_U8("graphics/pokemon/tapu_bulu/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_TapuBulu[] = INCBIN_COMP("graphics/pokemon/tapu_bulu/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_TapuBulu[] = INCBIN_U32("graphics/pokemon/tapu_bulu/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_TapuBulu[] = INCBIN_U32("graphics/pokemon/tapu_bulu/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_TAPU_BULU
#if P_FAMILY_TAPU_FINI
@@ -10342,8 +17415,15 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonShinyPalette_TapuFini[] = INCBIN_U32("graphics/pokemon/tapu_fini/shiny.gbapal.lz");
const u8 gMonIcon_TapuFini[] = INCBIN_U8("graphics/pokemon/tapu_fini/icon.4bpp");
#if P_FOOTPRINTS
- const u8 gMonFootprint_Tapu_Fini[] = INCBIN_U8("graphics/pokemon/tapu_fini/footprint.1bpp");
+ const u8 gMonFootprint_TapuFini[] = INCBIN_U8("graphics/pokemon/tapu_fini/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_TapuFini[] = INCBIN_COMP("graphics/pokemon/tapu_fini/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_TapuFini[] = INCBIN_U32("graphics/pokemon/tapu_fini/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_TapuFini[] = INCBIN_U32("graphics/pokemon/tapu_fini/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_TAPU_FINI
#if P_FAMILY_COSMOG
@@ -10355,6 +17435,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Cosmog[] = INCBIN_U8("graphics/pokemon/cosmog/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Cosmog[] = INCBIN_COMP("graphics/pokemon/cosmog/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Cosmog[] = INCBIN_U32("graphics/pokemon/cosmog/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Cosmog[] = INCBIN_U32("graphics/pokemon/cosmog/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Cosmoem[] = INCBIN_U32("graphics/pokemon/cosmoem/front.4bpp.lz");
const u32 gMonPalette_Cosmoem[] = INCBIN_U32("graphics/pokemon/cosmoem/normal.gbapal.lz");
@@ -10364,6 +17451,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Cosmoem[] = INCBIN_U8("graphics/pokemon/cosmoem/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Cosmoem[] = INCBIN_COMP("graphics/pokemon/cosmoem/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Cosmoem[] = INCBIN_U32("graphics/pokemon/cosmoem/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Cosmoem[] = INCBIN_U32("graphics/pokemon/cosmoem/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Solgaleo[] = INCBIN_U32("graphics/pokemon/solgaleo/front.4bpp.lz");
const u32 gMonPalette_Solgaleo[] = INCBIN_U32("graphics/pokemon/solgaleo/normal.gbapal.lz");
@@ -10373,6 +17467,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Solgaleo[] = INCBIN_U8("graphics/pokemon/solgaleo/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Solgaleo[] = INCBIN_COMP("graphics/pokemon/solgaleo/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Solgaleo[] = INCBIN_U32("graphics/pokemon/solgaleo/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Solgaleo[] = INCBIN_U32("graphics/pokemon/solgaleo/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Lunala[] = INCBIN_U32("graphics/pokemon/lunala/front.4bpp.lz");
const u32 gMonPalette_Lunala[] = INCBIN_U32("graphics/pokemon/lunala/normal.gbapal.lz");
@@ -10382,6 +17483,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Lunala[] = INCBIN_U8("graphics/pokemon/lunala/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Lunala[] = INCBIN_COMP("graphics/pokemon/lunala/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Lunala[] = INCBIN_U32("graphics/pokemon/lunala/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Lunala[] = INCBIN_U32("graphics/pokemon/lunala/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_COSMOG
#if P_FAMILY_NIHILEGO
@@ -10393,6 +17501,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Nihilego[] = INCBIN_U8("graphics/pokemon/nihilego/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Nihilego[] = INCBIN_COMP("graphics/pokemon/nihilego/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Nihilego[] = INCBIN_U32("graphics/pokemon/nihilego/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Nihilego[] = INCBIN_U32("graphics/pokemon/nihilego/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_NIHILEGO
#if P_FAMILY_BUZZWOLE
@@ -10404,6 +17519,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Buzzwole[] = INCBIN_U8("graphics/pokemon/buzzwole/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Buzzwole[] = INCBIN_COMP("graphics/pokemon/buzzwole/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Buzzwole[] = INCBIN_U32("graphics/pokemon/buzzwole/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Buzzwole[] = INCBIN_U32("graphics/pokemon/buzzwole/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_BUZZWOLE
#if P_FAMILY_PHEROMOSA
@@ -10415,6 +17537,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Pheromosa[] = INCBIN_U8("graphics/pokemon/pheromosa/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Pheromosa[] = INCBIN_COMP("graphics/pokemon/pheromosa/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Pheromosa[] = INCBIN_U32("graphics/pokemon/pheromosa/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Pheromosa[] = INCBIN_U32("graphics/pokemon/pheromosa/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_PHEROMOSA
#if P_FAMILY_XURKITREE
@@ -10426,6 +17555,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Xurkitree[] = INCBIN_U8("graphics/pokemon/xurkitree/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Xurkitree[] = INCBIN_COMP("graphics/pokemon/xurkitree/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Xurkitree[] = INCBIN_U32("graphics/pokemon/xurkitree/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Xurkitree[] = INCBIN_U32("graphics/pokemon/xurkitree/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_XURKITREE
#if P_FAMILY_CELESTEELA
@@ -10437,6 +17573,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Celesteela[] = INCBIN_U8("graphics/pokemon/celesteela/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Celesteela[] = INCBIN_COMP("graphics/pokemon/celesteela/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Celesteela[] = INCBIN_U32("graphics/pokemon/celesteela/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Celesteela[] = INCBIN_U32("graphics/pokemon/celesteela/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_CELESTEELA
#if P_FAMILY_KARTANA
@@ -10448,6 +17591,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Kartana[] = INCBIN_U8("graphics/pokemon/kartana/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Kartana[] = INCBIN_COMP("graphics/pokemon/kartana/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Kartana[] = INCBIN_U32("graphics/pokemon/kartana/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Kartana[] = INCBIN_U32("graphics/pokemon/kartana/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_KARTANA
#if P_FAMILY_GUZZLORD
@@ -10459,6 +17609,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Guzzlord[] = INCBIN_U8("graphics/pokemon/guzzlord/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Guzzlord[] = INCBIN_COMP("graphics/pokemon/guzzlord/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Guzzlord[] = INCBIN_U32("graphics/pokemon/guzzlord/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Guzzlord[] = INCBIN_U32("graphics/pokemon/guzzlord/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_GUZZLORD
#if P_FAMILY_NECROZMA
@@ -10470,6 +17627,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Necrozma[] = INCBIN_U8("graphics/pokemon/necrozma/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Necrozma[] = INCBIN_COMP("graphics/pokemon/necrozma/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Necrozma[] = INCBIN_U32("graphics/pokemon/necrozma/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Necrozma[] = INCBIN_U32("graphics/pokemon/necrozma/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_FUSION_FORMS
const u32 gMonFrontPic_NecrozmaDuskMane[] = INCBIN_U32("graphics/pokemon/necrozma/dusk_mane/front.4bpp.lz");
@@ -10477,12 +17641,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_NecrozmaDuskMane[] = INCBIN_U32("graphics/pokemon/necrozma/dusk_mane/back.4bpp.lz");
const u32 gMonShinyPalette_NecrozmaDuskMane[] = INCBIN_U32("graphics/pokemon/necrozma/dusk_mane/shiny.gbapal.lz");
const u8 gMonIcon_NecrozmaDuskMane[] = INCBIN_U8("graphics/pokemon/necrozma/dusk_mane/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_NecrozmaDuskMane[] = INCBIN_COMP("graphics/pokemon/necrozma/dusk_mane/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_NecrozmaDuskMane[] = INCBIN_U32("graphics/pokemon/necrozma/dusk_mane/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_NecrozmaDuskMane[] = INCBIN_U32("graphics/pokemon/necrozma/dusk_mane/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_NecrozmaDawnWings[] = INCBIN_U32("graphics/pokemon/necrozma/dawn_wings/front.4bpp.lz");
const u32 gMonPalette_NecrozmaDawnWings[] = INCBIN_U32("graphics/pokemon/necrozma/dawn_wings/normal.gbapal.lz");
const u32 gMonBackPic_NecrozmaDawnWings[] = INCBIN_U32("graphics/pokemon/necrozma/dawn_wings/back.4bpp.lz");
const u32 gMonShinyPalette_NecrozmaDawnWings[] = INCBIN_U32("graphics/pokemon/necrozma/dawn_wings/shiny.gbapal.lz");
const u8 gMonIcon_NecrozmaDawnWings[] = INCBIN_U8("graphics/pokemon/necrozma/dawn_wings/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_NecrozmaDawnWings[] = INCBIN_COMP("graphics/pokemon/necrozma/dawn_wings/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_NecrozmaDawnWings[] = INCBIN_U32("graphics/pokemon/necrozma/dawn_wings/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_NecrozmaDawnWings[] = INCBIN_U32("graphics/pokemon/necrozma/dawn_wings/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_ULTRA_BURST_FORMS
const u32 gMonFrontPic_NecrozmaUltra[] = INCBIN_U32("graphics/pokemon/necrozma/ultra/front.4bpp.lz");
@@ -10490,6 +17668,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_NecrozmaUltra[] = INCBIN_U32("graphics/pokemon/necrozma/ultra/back.4bpp.lz");
const u32 gMonShinyPalette_NecrozmaUltra[] = INCBIN_U32("graphics/pokemon/necrozma/ultra/shiny.gbapal.lz");
const u8 gMonIcon_NecrozmaUltra[] = INCBIN_U8("graphics/pokemon/necrozma/ultra/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_NecrozmaUltra[] = INCBIN_COMP("graphics/pokemon/necrozma/ultra/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_NecrozmaUltra[] = INCBIN_U32("graphics/pokemon/necrozma/ultra/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_NecrozmaUltra[] = INCBIN_U32("graphics/pokemon/necrozma/ultra/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_ULTRA_BURST_FORMS
#endif //P_FUSION_FORMS
#endif //P_FAMILY_NECROZMA
@@ -10503,12 +17688,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Magearna[] = INCBIN_U8("graphics/pokemon/magearna/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Magearna[] = INCBIN_COMP("graphics/pokemon/magearna/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Magearna[] = INCBIN_U32("graphics/pokemon/magearna/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Magearna[] = INCBIN_U32("graphics/pokemon/magearna/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_MagearnaOriginalColor[] = INCBIN_U32("graphics/pokemon/magearna/original_color/front.4bpp.lz");
const u32 gMonPalette_MagearnaOriginalColor[] = INCBIN_U32("graphics/pokemon/magearna/original_color/normal.gbapal.lz");
const u32 gMonBackPic_MagearnaOriginalColor[] = INCBIN_U32("graphics/pokemon/magearna/original_color/back.4bpp.lz");
const u32 gMonShinyPalette_MagearnaOriginalColor[] = INCBIN_U32("graphics/pokemon/magearna/original_color/shiny.gbapal.lz");
const u8 gMonIcon_MagearnaOriginalColor[] = INCBIN_U8("graphics/pokemon/magearna/original_color/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_MagearnaOriginalColor[] = INCBIN_COMP("graphics/pokemon/magearna/original_color/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_MagearnaOriginalColor[] = INCBIN_U32("graphics/pokemon/magearna/original_color/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_MagearnaOriginalColor[] = INCBIN_U32("graphics/pokemon/magearna/original_color/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_MAGEARNA
#if P_FAMILY_MARSHADOW
@@ -10520,6 +17719,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Marshadow[] = INCBIN_U8("graphics/pokemon/marshadow/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Marshadow[] = INCBIN_COMP("graphics/pokemon/marshadow/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Marshadow[] = INCBIN_U32("graphics/pokemon/marshadow/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Marshadow[] = INCBIN_U32("graphics/pokemon/marshadow/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_MARSHADOW
#if P_FAMILY_POIPOLE
@@ -10531,6 +17737,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Poipole[] = INCBIN_U8("graphics/pokemon/poipole/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Poipole[] = INCBIN_COMP("graphics/pokemon/poipole/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Poipole[] = INCBIN_U32("graphics/pokemon/poipole/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Poipole[] = INCBIN_U32("graphics/pokemon/poipole/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Naganadel[] = INCBIN_U32("graphics/pokemon/naganadel/front.4bpp.lz");
const u32 gMonPalette_Naganadel[] = INCBIN_U32("graphics/pokemon/naganadel/normal.gbapal.lz");
@@ -10540,6 +17753,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Naganadel[] = INCBIN_U8("graphics/pokemon/naganadel/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Naganadel[] = INCBIN_COMP("graphics/pokemon/naganadel/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Naganadel[] = INCBIN_U32("graphics/pokemon/naganadel/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Naganadel[] = INCBIN_U32("graphics/pokemon/naganadel/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_POIPOLE
#if P_FAMILY_STAKATAKA
@@ -10551,6 +17771,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Stakataka[] = INCBIN_U8("graphics/pokemon/stakataka/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Stakataka[] = INCBIN_COMP("graphics/pokemon/stakataka/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Stakataka[] = INCBIN_U32("graphics/pokemon/stakataka/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Stakataka[] = INCBIN_U32("graphics/pokemon/stakataka/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_STAKATAKA
#if P_FAMILY_BLACEPHALON
@@ -10562,6 +17789,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Blacephalon[] = INCBIN_U8("graphics/pokemon/blacephalon/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Blacephalon[] = INCBIN_COMP("graphics/pokemon/blacephalon/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Blacephalon[] = INCBIN_U32("graphics/pokemon/blacephalon/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Blacephalon[] = INCBIN_U32("graphics/pokemon/blacephalon/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_BLACEPHALON
#if P_FAMILY_ZERAORA
@@ -10573,6 +17807,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Zeraora[] = INCBIN_U8("graphics/pokemon/zeraora/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Zeraora[] = INCBIN_COMP("graphics/pokemon/zeraora/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Zeraora[] = INCBIN_U32("graphics/pokemon/zeraora/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Zeraora[] = INCBIN_U32("graphics/pokemon/zeraora/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_ZERAORA
#if P_FAMILY_MELTAN
@@ -10584,6 +17825,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Meltan[] = INCBIN_U8("graphics/pokemon/meltan/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Meltan[] = INCBIN_COMP("graphics/pokemon/meltan/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Meltan[] = INCBIN_U32("graphics/pokemon/meltan/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Meltan[] = INCBIN_U32("graphics/pokemon/meltan/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Melmetal[] = INCBIN_U32("graphics/pokemon/melmetal/front.4bpp.lz");
const u32 gMonPalette_Melmetal[] = INCBIN_U32("graphics/pokemon/melmetal/normal.gbapal.lz");
@@ -10593,6 +17841,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Melmetal[] = INCBIN_U8("graphics/pokemon/melmetal/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Melmetal[] = INCBIN_COMP("graphics/pokemon/melmetal/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Melmetal[] = INCBIN_U32("graphics/pokemon/melmetal/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Melmetal[] = INCBIN_U32("graphics/pokemon/melmetal/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GIGANTAMAX_FORMS
const u32 gMonFrontPic_MelmetalGigantamax[] = INCBIN_U32("graphics/pokemon/melmetal/gigantamax/front.4bpp.lz");
@@ -10600,6 +17855,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonPalette_MelmetalGigantamax[] = INCBIN_U32("graphics/pokemon/melmetal/gigantamax/normal.gbapal.lz");
const u32 gMonShinyPalette_MelmetalGigantamax[] = INCBIN_U32("graphics/pokemon/melmetal/gigantamax/shiny.gbapal.lz");
const u8 gMonIcon_MelmetalGigantamax[] = INCBIN_U8("graphics/pokemon/melmetal/gigantamax/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_MelmetalGigantamax[] = INCBIN_COMP("graphics/pokemon/melmetal/gigantamax/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_MelmetalGigantamax[] = INCBIN_U32("graphics/pokemon/melmetal/gigantamax/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_MelmetalGigantamax[] = INCBIN_U32("graphics/pokemon/melmetal/gigantamax/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GIGANTAMAX_FORMS
#endif //P_FAMILY_MELTAN
@@ -10612,6 +17874,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Grookey[] = INCBIN_U8("graphics/pokemon/grookey/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Grookey[] = INCBIN_COMP("graphics/pokemon/grookey/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Grookey[] = INCBIN_U32("graphics/pokemon/grookey/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Grookey[] = INCBIN_U32("graphics/pokemon/grookey/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Thwackey[] = INCBIN_U32("graphics/pokemon/thwackey/front.4bpp.lz");
const u32 gMonPalette_Thwackey[] = INCBIN_U32("graphics/pokemon/thwackey/normal.gbapal.lz");
@@ -10621,6 +17890,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Thwackey[] = INCBIN_U8("graphics/pokemon/thwackey/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Thwackey[] = INCBIN_COMP("graphics/pokemon/thwackey/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Thwackey[] = INCBIN_U32("graphics/pokemon/thwackey/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Thwackey[] = INCBIN_U32("graphics/pokemon/thwackey/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Rillaboom[] = INCBIN_U32("graphics/pokemon/rillaboom/front.4bpp.lz");
const u32 gMonPalette_Rillaboom[] = INCBIN_U32("graphics/pokemon/rillaboom/normal.gbapal.lz");
@@ -10630,6 +17906,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Rillaboom[] = INCBIN_U8("graphics/pokemon/rillaboom/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Rillaboom[] = INCBIN_COMP("graphics/pokemon/rillaboom/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Rillaboom[] = INCBIN_U32("graphics/pokemon/rillaboom/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Rillaboom[] = INCBIN_U32("graphics/pokemon/rillaboom/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GIGANTAMAX_FORMS
const u32 gMonFrontPic_RillaboomGigantamax[] = INCBIN_U32("graphics/pokemon/rillaboom/gigantamax/front.4bpp.lz");
@@ -10637,6 +17920,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonPalette_RillaboomGigantamax[] = INCBIN_U32("graphics/pokemon/rillaboom/gigantamax/normal.gbapal.lz");
const u32 gMonShinyPalette_RillaboomGigantamax[] = INCBIN_U32("graphics/pokemon/rillaboom/gigantamax/shiny.gbapal.lz");
const u8 gMonIcon_RillaboomGigantamax[] = INCBIN_U8("graphics/pokemon/rillaboom/gigantamax/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_RillaboomGigantamax[] = INCBIN_COMP("graphics/pokemon/rillaboom/gigantamax/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_RillaboomGigantamax[] = INCBIN_U32("graphics/pokemon/rillaboom/gigantamax/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_RillaboomGigantamax[] = INCBIN_U32("graphics/pokemon/rillaboom/gigantamax/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GIGANTAMAX_FORMS
#endif //P_FAMILY_GROOKEY
@@ -10649,6 +17939,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Scorbunny[] = INCBIN_U8("graphics/pokemon/scorbunny/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Scorbunny[] = INCBIN_COMP("graphics/pokemon/scorbunny/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Scorbunny[] = INCBIN_U32("graphics/pokemon/scorbunny/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Scorbunny[] = INCBIN_U32("graphics/pokemon/scorbunny/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Raboot[] = INCBIN_U32("graphics/pokemon/raboot/front.4bpp.lz");
const u32 gMonPalette_Raboot[] = INCBIN_U32("graphics/pokemon/raboot/normal.gbapal.lz");
@@ -10658,6 +17955,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Raboot[] = INCBIN_U8("graphics/pokemon/raboot/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Raboot[] = INCBIN_COMP("graphics/pokemon/raboot/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Raboot[] = INCBIN_U32("graphics/pokemon/raboot/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Raboot[] = INCBIN_U32("graphics/pokemon/raboot/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Cinderace[] = INCBIN_U32("graphics/pokemon/cinderace/front.4bpp.lz");
const u32 gMonPalette_Cinderace[] = INCBIN_U32("graphics/pokemon/cinderace/normal.gbapal.lz");
@@ -10667,6 +17971,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Cinderace[] = INCBIN_U8("graphics/pokemon/cinderace/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Cinderace[] = INCBIN_COMP("graphics/pokemon/cinderace/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Cinderace[] = INCBIN_U32("graphics/pokemon/cinderace/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Cinderace[] = INCBIN_U32("graphics/pokemon/cinderace/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GIGANTAMAX_FORMS
const u32 gMonFrontPic_CinderaceGigantamax[] = INCBIN_U32("graphics/pokemon/cinderace/gigantamax/front.4bpp.lz");
@@ -10674,6 +17985,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonPalette_CinderaceGigantamax[] = INCBIN_U32("graphics/pokemon/cinderace/gigantamax/normal.gbapal.lz");
const u32 gMonShinyPalette_CinderaceGigantamax[] = INCBIN_U32("graphics/pokemon/cinderace/gigantamax/shiny.gbapal.lz");
const u8 gMonIcon_CinderaceGigantamax[] = INCBIN_U8("graphics/pokemon/cinderace/gigantamax/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_CinderaceGigantamax[] = INCBIN_COMP("graphics/pokemon/cinderace/gigantamax/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_CinderaceGigantamax[] = INCBIN_U32("graphics/pokemon/cinderace/gigantamax/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_CinderaceGigantamax[] = INCBIN_U32("graphics/pokemon/cinderace/gigantamax/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GIGANTAMAX_FORMS
#endif //P_FAMILY_SCORBUNNY
@@ -10686,6 +18004,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Sobble[] = INCBIN_U8("graphics/pokemon/sobble/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Sobble[] = INCBIN_COMP("graphics/pokemon/sobble/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Sobble[] = INCBIN_U32("graphics/pokemon/sobble/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Sobble[] = INCBIN_U32("graphics/pokemon/sobble/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Drizzile[] = INCBIN_U32("graphics/pokemon/drizzile/front.4bpp.lz");
const u32 gMonPalette_Drizzile[] = INCBIN_U32("graphics/pokemon/drizzile/normal.gbapal.lz");
@@ -10695,6 +18020,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Drizzile[] = INCBIN_U8("graphics/pokemon/drizzile/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Drizzile[] = INCBIN_COMP("graphics/pokemon/drizzile/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Drizzile[] = INCBIN_U32("graphics/pokemon/drizzile/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Drizzile[] = INCBIN_U32("graphics/pokemon/drizzile/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Inteleon[] = INCBIN_U32("graphics/pokemon/inteleon/front.4bpp.lz");
const u32 gMonPalette_Inteleon[] = INCBIN_U32("graphics/pokemon/inteleon/normal.gbapal.lz");
@@ -10704,6 +18036,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Inteleon[] = INCBIN_U8("graphics/pokemon/inteleon/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Inteleon[] = INCBIN_COMP("graphics/pokemon/inteleon/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Inteleon[] = INCBIN_U32("graphics/pokemon/inteleon/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Inteleon[] = INCBIN_U32("graphics/pokemon/inteleon/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GIGANTAMAX_FORMS
const u32 gMonFrontPic_InteleonGigantamax[] = INCBIN_U32("graphics/pokemon/inteleon/gigantamax/front.4bpp.lz");
@@ -10711,6 +18050,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonPalette_InteleonGigantamax[] = INCBIN_U32("graphics/pokemon/inteleon/gigantamax/normal.gbapal.lz");
const u32 gMonShinyPalette_InteleonGigantamax[] = INCBIN_U32("graphics/pokemon/inteleon/gigantamax/shiny.gbapal.lz");
const u8 gMonIcon_InteleonGigantamax[] = INCBIN_U8("graphics/pokemon/inteleon/gigantamax/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_InteleonGigantamax[] = INCBIN_COMP("graphics/pokemon/inteleon/gigantamax/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_InteleonGigantamax[] = INCBIN_U32("graphics/pokemon/inteleon/gigantamax/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_InteleonGigantamax[] = INCBIN_U32("graphics/pokemon/inteleon/gigantamax/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GIGANTAMAX_FORMS
#endif //P_FAMILY_SOBBLE
@@ -10723,6 +18069,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Skwovet[] = INCBIN_U8("graphics/pokemon/skwovet/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Skwovet[] = INCBIN_COMP("graphics/pokemon/skwovet/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Skwovet[] = INCBIN_U32("graphics/pokemon/skwovet/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Skwovet[] = INCBIN_U32("graphics/pokemon/skwovet/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Greedent[] = INCBIN_U32("graphics/pokemon/greedent/front.4bpp.lz");
const u32 gMonPalette_Greedent[] = INCBIN_U32("graphics/pokemon/greedent/normal.gbapal.lz");
@@ -10732,6 +18085,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Greedent[] = INCBIN_U8("graphics/pokemon/greedent/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Greedent[] = INCBIN_COMP("graphics/pokemon/greedent/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Greedent[] = INCBIN_U32("graphics/pokemon/greedent/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Greedent[] = INCBIN_U32("graphics/pokemon/greedent/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SKWOVET
#if P_FAMILY_ROOKIDEE
@@ -10743,6 +18103,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Rookidee[] = INCBIN_U8("graphics/pokemon/rookidee/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Rookidee[] = INCBIN_COMP("graphics/pokemon/rookidee/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Rookidee[] = INCBIN_U32("graphics/pokemon/rookidee/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Rookidee[] = INCBIN_U32("graphics/pokemon/rookidee/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Corvisquire[] = INCBIN_U32("graphics/pokemon/corvisquire/anim_front.4bpp.lz");
const u32 gMonPalette_Corvisquire[] = INCBIN_U32("graphics/pokemon/corvisquire/normal.gbapal.lz");
@@ -10752,6 +18119,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Corvisquire[] = INCBIN_U8("graphics/pokemon/corvisquire/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Corvisquire[] = INCBIN_COMP("graphics/pokemon/corvisquire/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Corvisquire[] = INCBIN_U32("graphics/pokemon/corvisquire/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Corvisquire[] = INCBIN_U32("graphics/pokemon/corvisquire/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Corviknight[] = INCBIN_U32("graphics/pokemon/corviknight/anim_front.4bpp.lz");
const u32 gMonPalette_Corviknight[] = INCBIN_U32("graphics/pokemon/corviknight/normal.gbapal.lz");
@@ -10761,6 +18135,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Corviknight[] = INCBIN_U8("graphics/pokemon/corviknight/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Corviknight[] = INCBIN_COMP("graphics/pokemon/corviknight/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Corviknight[] = INCBIN_U32("graphics/pokemon/corviknight/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Corviknight[] = INCBIN_U32("graphics/pokemon/corviknight/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GIGANTAMAX_FORMS
const u32 gMonFrontPic_CorviknightGigantamax[] = INCBIN_U32("graphics/pokemon/corviknight/gigantamax/front.4bpp.lz");
@@ -10768,6 +18149,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonPalette_CorviknightGigantamax[] = INCBIN_U32("graphics/pokemon/corviknight/gigantamax/normal.gbapal.lz");
const u32 gMonShinyPalette_CorviknightGigantamax[] = INCBIN_U32("graphics/pokemon/corviknight/gigantamax/shiny.gbapal.lz");
const u8 gMonIcon_CorviknightGigantamax[] = INCBIN_U8("graphics/pokemon/corviknight/gigantamax/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_CorviknightGigantamax[] = INCBIN_COMP("graphics/pokemon/corviknight/gigantamax/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_CorviknightGigantamax[] = INCBIN_U32("graphics/pokemon/corviknight/gigantamax/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_CorviknightGigantamax[] = INCBIN_U32("graphics/pokemon/corviknight/gigantamax/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GIGANTAMAX_FORMS
#endif //P_FAMILY_ROOKIDEE
@@ -10780,6 +18168,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Blipbug[] = INCBIN_U8("graphics/pokemon/blipbug/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Blipbug[] = INCBIN_COMP("graphics/pokemon/blipbug/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Blipbug[] = INCBIN_U32("graphics/pokemon/blipbug/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Blipbug[] = INCBIN_U32("graphics/pokemon/blipbug/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Dottler[] = INCBIN_U32("graphics/pokemon/dottler/front.4bpp.lz");
const u32 gMonPalette_Dottler[] = INCBIN_U32("graphics/pokemon/dottler/normal.gbapal.lz");
@@ -10789,6 +18184,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Dottler[] = INCBIN_U8("graphics/pokemon/dottler/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Dottler[] = INCBIN_COMP("graphics/pokemon/dottler/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Dottler[] = INCBIN_U32("graphics/pokemon/dottler/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Dottler[] = INCBIN_U32("graphics/pokemon/dottler/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Orbeetle[] = INCBIN_U32("graphics/pokemon/orbeetle/front.4bpp.lz");
const u32 gMonPalette_Orbeetle[] = INCBIN_U32("graphics/pokemon/orbeetle/normal.gbapal.lz");
@@ -10798,6 +18200,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Orbeetle[] = INCBIN_U8("graphics/pokemon/orbeetle/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Orbeetle[] = INCBIN_COMP("graphics/pokemon/orbeetle/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Orbeetle[] = INCBIN_U32("graphics/pokemon/orbeetle/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Orbeetle[] = INCBIN_U32("graphics/pokemon/orbeetle/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GIGANTAMAX_FORMS
const u32 gMonFrontPic_OrbeetleGigantamax[] = INCBIN_U32("graphics/pokemon/orbeetle/gigantamax/front.4bpp.lz");
@@ -10805,6 +18214,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonPalette_OrbeetleGigantamax[] = INCBIN_U32("graphics/pokemon/orbeetle/gigantamax/normal.gbapal.lz");
const u32 gMonShinyPalette_OrbeetleGigantamax[] = INCBIN_U32("graphics/pokemon/orbeetle/gigantamax/shiny.gbapal.lz");
const u8 gMonIcon_OrbeetleGigantamax[] = INCBIN_U8("graphics/pokemon/orbeetle/gigantamax/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_OrbeetleGigantamax[] = INCBIN_COMP("graphics/pokemon/orbeetle/gigantamax/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_OrbeetleGigantamax[] = INCBIN_U32("graphics/pokemon/orbeetle/gigantamax/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_OrbeetleGigantamax[] = INCBIN_U32("graphics/pokemon/orbeetle/gigantamax/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GIGANTAMAX_FORMS
#endif //P_FAMILY_BLIPBUG
@@ -10817,6 +18233,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Nickit[] = INCBIN_U8("graphics/pokemon/nickit/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Nickit[] = INCBIN_COMP("graphics/pokemon/nickit/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Nickit[] = INCBIN_U32("graphics/pokemon/nickit/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Nickit[] = INCBIN_U32("graphics/pokemon/nickit/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Thievul[] = INCBIN_U32("graphics/pokemon/thievul/front.4bpp.lz");
const u32 gMonPalette_Thievul[] = INCBIN_U32("graphics/pokemon/thievul/normal.gbapal.lz");
@@ -10826,6 +18249,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Thievul[] = INCBIN_U8("graphics/pokemon/thievul/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Thievul[] = INCBIN_COMP("graphics/pokemon/thievul/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Thievul[] = INCBIN_U32("graphics/pokemon/thievul/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Thievul[] = INCBIN_U32("graphics/pokemon/thievul/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_NICKIT
#if P_FAMILY_GOSSIFLEUR
@@ -10837,6 +18267,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Gossifleur[] = INCBIN_U8("graphics/pokemon/gossifleur/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Gossifleur[] = INCBIN_COMP("graphics/pokemon/gossifleur/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Gossifleur[] = INCBIN_U32("graphics/pokemon/gossifleur/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Gossifleur[] = INCBIN_U32("graphics/pokemon/gossifleur/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Eldegoss[] = INCBIN_U32("graphics/pokemon/eldegoss/front.4bpp.lz");
const u32 gMonPalette_Eldegoss[] = INCBIN_U32("graphics/pokemon/eldegoss/normal.gbapal.lz");
@@ -10846,6 +18283,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Eldegoss[] = INCBIN_U8("graphics/pokemon/eldegoss/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Eldegoss[] = INCBIN_COMP("graphics/pokemon/eldegoss/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Eldegoss[] = INCBIN_U32("graphics/pokemon/eldegoss/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Eldegoss[] = INCBIN_U32("graphics/pokemon/eldegoss/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_GOSSIFLEUR
#if P_FAMILY_WOOLOO
@@ -10857,6 +18301,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Wooloo[] = INCBIN_U8("graphics/pokemon/wooloo/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Wooloo[] = INCBIN_COMP("graphics/pokemon/wooloo/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Wooloo[] = INCBIN_U32("graphics/pokemon/wooloo/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Wooloo[] = INCBIN_U32("graphics/pokemon/wooloo/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Dubwool[] = INCBIN_U32("graphics/pokemon/dubwool/front.4bpp.lz");
const u32 gMonPalette_Dubwool[] = INCBIN_U32("graphics/pokemon/dubwool/normal.gbapal.lz");
@@ -10866,6 +18317,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Dubwool[] = INCBIN_U8("graphics/pokemon/dubwool/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Dubwool[] = INCBIN_COMP("graphics/pokemon/dubwool/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Dubwool[] = INCBIN_U32("graphics/pokemon/dubwool/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Dubwool[] = INCBIN_U32("graphics/pokemon/dubwool/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_WOOLOO
#if P_FAMILY_CHEWTLE
@@ -10877,6 +18335,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Chewtle[] = INCBIN_U8("graphics/pokemon/chewtle/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Chewtle[] = INCBIN_COMP("graphics/pokemon/chewtle/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Chewtle[] = INCBIN_U32("graphics/pokemon/chewtle/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Chewtle[] = INCBIN_U32("graphics/pokemon/chewtle/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Drednaw[] = INCBIN_U32("graphics/pokemon/drednaw/anim_front.4bpp.lz");
const u32 gMonPalette_Drednaw[] = INCBIN_U32("graphics/pokemon/drednaw/normal.gbapal.lz");
@@ -10886,6 +18351,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Drednaw[] = INCBIN_U8("graphics/pokemon/drednaw/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Drednaw[] = INCBIN_COMP("graphics/pokemon/drednaw/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Drednaw[] = INCBIN_U32("graphics/pokemon/drednaw/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Drednaw[] = INCBIN_U32("graphics/pokemon/drednaw/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GIGANTAMAX_FORMS
const u32 gMonFrontPic_DrednawGigantamax[] = INCBIN_U32("graphics/pokemon/drednaw/gigantamax/front.4bpp.lz");
@@ -10893,6 +18365,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonPalette_DrednawGigantamax[] = INCBIN_U32("graphics/pokemon/drednaw/gigantamax/normal.gbapal.lz");
const u32 gMonShinyPalette_DrednawGigantamax[] = INCBIN_U32("graphics/pokemon/drednaw/gigantamax/shiny.gbapal.lz");
const u8 gMonIcon_DrednawGigantamax[] = INCBIN_U8("graphics/pokemon/drednaw/gigantamax/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_DrednawGigantamax[] = INCBIN_COMP("graphics/pokemon/drednaw/gigantamax/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_DrednawGigantamax[] = INCBIN_U32("graphics/pokemon/drednaw/gigantamax/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_DrednawGigantamax[] = INCBIN_U32("graphics/pokemon/drednaw/gigantamax/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GIGANTAMAX_FORMS
#endif //P_FAMILY_CHEWTLE
@@ -10905,6 +18384,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Yamper[] = INCBIN_U8("graphics/pokemon/yamper/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Yamper[] = INCBIN_COMP("graphics/pokemon/yamper/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Yamper[] = INCBIN_U32("graphics/pokemon/yamper/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Yamper[] = INCBIN_U32("graphics/pokemon/yamper/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Boltund[] = INCBIN_U32("graphics/pokemon/boltund/front.4bpp.lz");
const u32 gMonPalette_Boltund[] = INCBIN_U32("graphics/pokemon/boltund/normal.gbapal.lz");
@@ -10914,6 +18400,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Boltund[] = INCBIN_U8("graphics/pokemon/boltund/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Boltund[] = INCBIN_COMP("graphics/pokemon/boltund/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Boltund[] = INCBIN_U32("graphics/pokemon/boltund/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Boltund[] = INCBIN_U32("graphics/pokemon/boltund/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_YAMPER
#if P_FAMILY_ROLYCOLY
@@ -10925,6 +18418,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Rolycoly[] = INCBIN_U8("graphics/pokemon/rolycoly/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Rolycoly[] = INCBIN_COMP("graphics/pokemon/rolycoly/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Rolycoly[] = INCBIN_U32("graphics/pokemon/rolycoly/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Rolycoly[] = INCBIN_U32("graphics/pokemon/rolycoly/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Carkol[] = INCBIN_U32("graphics/pokemon/carkol/anim_front.4bpp.lz");
const u32 gMonPalette_Carkol[] = INCBIN_U32("graphics/pokemon/carkol/normal.gbapal.lz");
@@ -10934,6 +18434,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Carkol[] = INCBIN_U8("graphics/pokemon/carkol/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Carkol[] = INCBIN_COMP("graphics/pokemon/carkol/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Carkol[] = INCBIN_U32("graphics/pokemon/carkol/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Carkol[] = INCBIN_U32("graphics/pokemon/carkol/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Coalossal[] = INCBIN_U32("graphics/pokemon/coalossal/anim_front.4bpp.lz");
const u32 gMonPalette_Coalossal[] = INCBIN_U32("graphics/pokemon/coalossal/normal.gbapal.lz");
@@ -10943,6 +18450,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Coalossal[] = INCBIN_U8("graphics/pokemon/coalossal/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Coalossal[] = INCBIN_COMP("graphics/pokemon/coalossal/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Coalossal[] = INCBIN_U32("graphics/pokemon/coalossal/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Coalossal[] = INCBIN_U32("graphics/pokemon/coalossal/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GIGANTAMAX_FORMS
const u32 gMonFrontPic_CoalossalGigantamax[] = INCBIN_U32("graphics/pokemon/coalossal/gigantamax/front.4bpp.lz");
@@ -10950,6 +18464,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonPalette_CoalossalGigantamax[] = INCBIN_U32("graphics/pokemon/coalossal/gigantamax/normal.gbapal.lz");
const u32 gMonShinyPalette_CoalossalGigantamax[] = INCBIN_U32("graphics/pokemon/coalossal/gigantamax/shiny.gbapal.lz");
const u8 gMonIcon_CoalossalGigantamax[] = INCBIN_U8("graphics/pokemon/coalossal/gigantamax/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_CoalossalGigantamax[] = INCBIN_COMP("graphics/pokemon/coalossal/gigantamax/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_CoalossalGigantamax[] = INCBIN_U32("graphics/pokemon/coalossal/gigantamax/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_CoalossalGigantamax[] = INCBIN_U32("graphics/pokemon/coalossal/gigantamax/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GIGANTAMAX_FORMS
#endif //P_FAMILY_ROLYCOLY
@@ -10962,6 +18483,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Applin[] = INCBIN_U8("graphics/pokemon/applin/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Applin[] = INCBIN_COMP("graphics/pokemon/applin/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Applin[] = INCBIN_U32("graphics/pokemon/applin/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Applin[] = INCBIN_U32("graphics/pokemon/applin/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Flapple[] = INCBIN_U32("graphics/pokemon/flapple/anim_front.4bpp.lz");
const u32 gMonPalette_Flapple[] = INCBIN_U32("graphics/pokemon/flapple/normal.gbapal.lz");
@@ -10971,6 +18499,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Flapple[] = INCBIN_U8("graphics/pokemon/flapple/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Flapple[] = INCBIN_COMP("graphics/pokemon/flapple/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Flapple[] = INCBIN_U32("graphics/pokemon/flapple/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Flapple[] = INCBIN_U32("graphics/pokemon/flapple/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GIGANTAMAX_FORMS
const u32 gMonFrontPic_FlappleGigantamax[] = INCBIN_U32("graphics/pokemon/flapple/gigantamax/front.4bpp.lz");
@@ -10978,6 +18513,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonPalette_FlappleGigantamax[] = INCBIN_U32("graphics/pokemon/flapple/gigantamax/normal.gbapal.lz");
const u32 gMonShinyPalette_FlappleGigantamax[] = INCBIN_U32("graphics/pokemon/flapple/gigantamax/shiny.gbapal.lz");
const u8 gMonIcon_FlappleGigantamax[] = INCBIN_U8("graphics/pokemon/flapple/gigantamax/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_FlappleGigantamax[] = INCBIN_COMP("graphics/pokemon/flapple/gigantamax/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_FlappleGigantamax[] = INCBIN_U32("graphics/pokemon/flapple/gigantamax/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_FlappleGigantamax[] = INCBIN_U32("graphics/pokemon/flapple/gigantamax/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GIGANTAMAX_FORMS
const u32 gMonFrontPic_Appletun[] = INCBIN_U32("graphics/pokemon/appletun/anim_front.4bpp.lz");
@@ -10988,6 +18530,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Appletun[] = INCBIN_U8("graphics/pokemon/appletun/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Appletun[] = INCBIN_COMP("graphics/pokemon/appletun/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Appletun[] = INCBIN_U32("graphics/pokemon/appletun/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Appletun[] = INCBIN_U32("graphics/pokemon/appletun/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GIGANTAMAX_FORMS
const u32 gMonFrontPic_AppletunGigantamax[] = INCBIN_U32("graphics/pokemon/appletun/gigantamax/front.4bpp.lz");
@@ -10995,6 +18544,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonPalette_AppletunGigantamax[] = INCBIN_U32("graphics/pokemon/appletun/gigantamax/normal.gbapal.lz");
const u32 gMonShinyPalette_AppletunGigantamax[] = INCBIN_U32("graphics/pokemon/appletun/gigantamax/shiny.gbapal.lz");
const u8 gMonIcon_AppletunGigantamax[] = INCBIN_U8("graphics/pokemon/appletun/gigantamax/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_AppletunGigantamax[] = INCBIN_COMP("graphics/pokemon/appletun/gigantamax/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_AppletunGigantamax[] = INCBIN_U32("graphics/pokemon/appletun/gigantamax/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_AppletunGigantamax[] = INCBIN_U32("graphics/pokemon/appletun/gigantamax/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GIGANTAMAX_FORMS
#if P_GEN_9_CROSS_EVOS
@@ -11006,6 +18562,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Hydrapple[] = INCBIN_U32("graphics/pokemon/hydrapple/front.4bpp.lz");
const u32 gMonPalette_Hydrapple[] = INCBIN_U32("graphics/pokemon/hydrapple/normal.gbapal.lz");
@@ -11015,6 +18578,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_9_CROSS_EVOS
#endif //P_FAMILY_APPLIN
@@ -11027,6 +18597,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Silicobra[] = INCBIN_U8("graphics/pokemon/silicobra/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Silicobra[] = INCBIN_COMP("graphics/pokemon/silicobra/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Silicobra[] = INCBIN_U32("graphics/pokemon/silicobra/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Silicobra[] = INCBIN_U32("graphics/pokemon/silicobra/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Sandaconda[] = INCBIN_U32("graphics/pokemon/sandaconda/front.4bpp.lz");
const u32 gMonPalette_Sandaconda[] = INCBIN_U32("graphics/pokemon/sandaconda/normal.gbapal.lz");
@@ -11036,6 +18613,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Sandaconda[] = INCBIN_U8("graphics/pokemon/sandaconda/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Sandaconda[] = INCBIN_COMP("graphics/pokemon/sandaconda/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Sandaconda[] = INCBIN_U32("graphics/pokemon/sandaconda/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Sandaconda[] = INCBIN_U32("graphics/pokemon/sandaconda/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GIGANTAMAX_FORMS
const u32 gMonFrontPic_SandacondaGigantamax[] = INCBIN_U32("graphics/pokemon/sandaconda/gigantamax/front.4bpp.lz");
@@ -11043,6 +18627,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonPalette_SandacondaGigantamax[] = INCBIN_U32("graphics/pokemon/sandaconda/gigantamax/normal.gbapal.lz");
const u32 gMonShinyPalette_SandacondaGigantamax[] = INCBIN_U32("graphics/pokemon/sandaconda/gigantamax/shiny.gbapal.lz");
const u8 gMonIcon_SandacondaGigantamax[] = INCBIN_U8("graphics/pokemon/sandaconda/gigantamax/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_SandacondaGigantamax[] = INCBIN_COMP("graphics/pokemon/sandaconda/gigantamax/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_SandacondaGigantamax[] = INCBIN_U32("graphics/pokemon/sandaconda/gigantamax/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_SandacondaGigantamax[] = INCBIN_U32("graphics/pokemon/sandaconda/gigantamax/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GIGANTAMAX_FORMS
#endif //P_FAMILY_SILICOBRA
@@ -11055,18 +18646,39 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Cramorant[] = INCBIN_U8("graphics/pokemon/cramorant/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Cramorant[] = INCBIN_COMP("graphics/pokemon/cramorant/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Cramorant[] = INCBIN_U32("graphics/pokemon/cramorant/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Cramorant[] = INCBIN_U32("graphics/pokemon/cramorant/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_CramorantGulping[] = INCBIN_U32("graphics/pokemon/cramorant/gulping/front.4bpp.lz");
const u32 gMonPalette_CramorantGulping[] = INCBIN_U32("graphics/pokemon/cramorant/gulping/normal.gbapal.lz");
const u32 gMonBackPic_CramorantGulping[] = INCBIN_U32("graphics/pokemon/cramorant/gulping/back.4bpp.lz");
const u32 gMonShinyPalette_CramorantGulping[] = INCBIN_U32("graphics/pokemon/cramorant/gulping/shiny.gbapal.lz");
const u8 gMonIcon_CramorantGulping[] = INCBIN_U8("graphics/pokemon/cramorant/gulping/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_CramorantGulping[] = INCBIN_COMP("graphics/pokemon/cramorant/gulping/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_CramorantGulping[] = INCBIN_U32("graphics/pokemon/cramorant/gulping/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_CramorantGulping[] = INCBIN_U32("graphics/pokemon/cramorant/gulping/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_CramorantGorging[] = INCBIN_U32("graphics/pokemon/cramorant/gorging/front.4bpp.lz");
const u32 gMonPalette_CramorantGorging[] = INCBIN_U32("graphics/pokemon/cramorant/gorging/normal.gbapal.lz");
const u32 gMonBackPic_CramorantGorging[] = INCBIN_U32("graphics/pokemon/cramorant/gorging/back.4bpp.lz");
const u32 gMonShinyPalette_CramorantGorging[] = INCBIN_U32("graphics/pokemon/cramorant/gorging/shiny.gbapal.lz");
const u8 gMonIcon_CramorantGorging[] = INCBIN_U8("graphics/pokemon/cramorant/gorging/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_CramorantGorging[] = INCBIN_COMP("graphics/pokemon/cramorant/gorging/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_CramorantGorging[] = INCBIN_U32("graphics/pokemon/cramorant/gorging/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_CramorantGorging[] = INCBIN_U32("graphics/pokemon/cramorant/gorging/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_CRAMORANT
#if P_FAMILY_ARROKUDA
@@ -11078,6 +18690,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Arrokuda[] = INCBIN_U8("graphics/pokemon/arrokuda/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Arrokuda[] = INCBIN_COMP("graphics/pokemon/arrokuda/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Arrokuda[] = INCBIN_U32("graphics/pokemon/arrokuda/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Arrokuda[] = INCBIN_U32("graphics/pokemon/arrokuda/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Barraskewda[] = INCBIN_U32("graphics/pokemon/barraskewda/front.4bpp.lz");
const u32 gMonPalette_Barraskewda[] = INCBIN_U32("graphics/pokemon/barraskewda/normal.gbapal.lz");
@@ -11087,6 +18706,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Barraskewda[] = INCBIN_U8("graphics/pokemon/barraskewda/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Barraskewda[] = INCBIN_COMP("graphics/pokemon/barraskewda/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Barraskewda[] = INCBIN_U32("graphics/pokemon/barraskewda/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Barraskewda[] = INCBIN_U32("graphics/pokemon/barraskewda/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_ARROKUDA
#if P_FAMILY_TOXEL
@@ -11098,6 +18724,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Toxel[] = INCBIN_U8("graphics/pokemon/toxel/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Toxel[] = INCBIN_COMP("graphics/pokemon/toxel/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Toxel[] = INCBIN_U32("graphics/pokemon/toxel/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Toxel[] = INCBIN_U32("graphics/pokemon/toxel/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_ToxtricityAmped[] = INCBIN_U32("graphics/pokemon/toxtricity/front.4bpp.lz");
const u32 gMonPalette_ToxtricityAmped[] = INCBIN_U32("graphics/pokemon/toxtricity/normal.gbapal.lz");
@@ -11107,12 +18740,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Toxtricity[] = INCBIN_U8("graphics/pokemon/toxtricity/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_ToxtricityAmped[] = INCBIN_COMP("graphics/pokemon/toxtricity/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_ToxtricityAmped[] = INCBIN_U32("graphics/pokemon/toxtricity/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_ToxtricityAmped[] = INCBIN_U32("graphics/pokemon/toxtricity/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_ToxtricityLowKey[] = INCBIN_U32("graphics/pokemon/toxtricity/low_key/front.4bpp.lz");
const u32 gMonPalette_ToxtricityLowKey[] = INCBIN_U32("graphics/pokemon/toxtricity/low_key/normal.gbapal.lz");
const u32 gMonBackPic_ToxtricityLowKey[] = INCBIN_U32("graphics/pokemon/toxtricity/low_key/back.4bpp.lz");
const u32 gMonShinyPalette_ToxtricityLowKey[] = INCBIN_U32("graphics/pokemon/toxtricity/low_key/shiny.gbapal.lz");
const u8 gMonIcon_ToxtricityLowKey[] = INCBIN_U8("graphics/pokemon/toxtricity/low_key/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_ToxtricityLowKey[] = INCBIN_COMP("graphics/pokemon/toxtricity/low_key/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_ToxtricityLowKey[] = INCBIN_U32("graphics/pokemon/toxtricity/low_key/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_ToxtricityLowKey[] = INCBIN_U32("graphics/pokemon/toxtricity/low_key/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GIGANTAMAX_FORMS
const u32 gMonFrontPic_ToxtricityGigantamax[] = INCBIN_U32("graphics/pokemon/toxtricity/gigantamax/front.4bpp.lz");
@@ -11120,6 +18767,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonPalette_ToxtricityGigantamax[] = INCBIN_U32("graphics/pokemon/toxtricity/gigantamax/normal.gbapal.lz");
const u32 gMonShinyPalette_ToxtricityGigantamax[] = INCBIN_U32("graphics/pokemon/toxtricity/gigantamax/shiny.gbapal.lz");
const u8 gMonIcon_ToxtricityGigantamax[] = INCBIN_U8("graphics/pokemon/toxtricity/gigantamax/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_ToxtricityGigantamax[] = INCBIN_COMP("graphics/pokemon/toxtricity/gigantamax/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_ToxtricityGigantamax[] = INCBIN_U32("graphics/pokemon/toxtricity/gigantamax/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_ToxtricityGigantamax[] = INCBIN_U32("graphics/pokemon/toxtricity/gigantamax/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GIGANTAMAX_FORMS
#endif //P_FAMILY_TOXEL
@@ -11132,6 +18786,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Sizzlipede[] = INCBIN_U8("graphics/pokemon/sizzlipede/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Sizzlipede[] = INCBIN_COMP("graphics/pokemon/sizzlipede/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Sizzlipede[] = INCBIN_U32("graphics/pokemon/sizzlipede/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Sizzlipede[] = INCBIN_U32("graphics/pokemon/sizzlipede/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Centiskorch[] = INCBIN_U32("graphics/pokemon/centiskorch/anim_front.4bpp.lz");
const u32 gMonPalette_Centiskorch[] = INCBIN_U32("graphics/pokemon/centiskorch/normal.gbapal.lz");
@@ -11141,6 +18802,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Centiskorch[] = INCBIN_U8("graphics/pokemon/centiskorch/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Centiskorch[] = INCBIN_COMP("graphics/pokemon/centiskorch/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Centiskorch[] = INCBIN_U32("graphics/pokemon/centiskorch/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Centiskorch[] = INCBIN_U32("graphics/pokemon/centiskorch/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GIGANTAMAX_FORMS
const u32 gMonFrontPic_CentiskorchGigantamax[] = INCBIN_U32("graphics/pokemon/centiskorch/gigantamax/front.4bpp.lz");
@@ -11148,6 +18816,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonPalette_CentiskorchGigantamax[] = INCBIN_U32("graphics/pokemon/centiskorch/gigantamax/normal.gbapal.lz");
const u32 gMonShinyPalette_CentiskorchGigantamax[] = INCBIN_U32("graphics/pokemon/centiskorch/gigantamax/shiny.gbapal.lz");
const u8 gMonIcon_CentiskorchGigantamax[] = INCBIN_U8("graphics/pokemon/centiskorch/gigantamax/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_CentiskorchGigantamax[] = INCBIN_COMP("graphics/pokemon/centiskorch/gigantamax/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_CentiskorchGigantamax[] = INCBIN_U32("graphics/pokemon/centiskorch/gigantamax/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_CentiskorchGigantamax[] = INCBIN_U32("graphics/pokemon/centiskorch/gigantamax/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GIGANTAMAX_FORMS
#endif //P_FAMILY_SIZZLIPEDE
@@ -11160,6 +18835,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Clobbopus[] = INCBIN_U8("graphics/pokemon/clobbopus/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Clobbopus[] = INCBIN_COMP("graphics/pokemon/clobbopus/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Clobbopus[] = INCBIN_U32("graphics/pokemon/clobbopus/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Clobbopus[] = INCBIN_U32("graphics/pokemon/clobbopus/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Grapploct[] = INCBIN_U32("graphics/pokemon/grapploct/front.4bpp.lz");
const u32 gMonPalette_Grapploct[] = INCBIN_U32("graphics/pokemon/grapploct/normal.gbapal.lz");
@@ -11169,6 +18851,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Grapploct[] = INCBIN_U8("graphics/pokemon/grapploct/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Grapploct[] = INCBIN_COMP("graphics/pokemon/grapploct/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Grapploct[] = INCBIN_U32("graphics/pokemon/grapploct/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Grapploct[] = INCBIN_U32("graphics/pokemon/grapploct/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_CLOBBOPUS
#if P_FAMILY_SINISTEA
@@ -11180,6 +18869,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Sinistea[] = INCBIN_U8("graphics/pokemon/sinistea/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Sinistea[] = INCBIN_COMP("graphics/pokemon/sinistea/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Sinistea[] = INCBIN_U32("graphics/pokemon/sinistea/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Sinistea[] = INCBIN_U32("graphics/pokemon/sinistea/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Polteageist[] = INCBIN_U32("graphics/pokemon/polteageist/front.4bpp.lz");
const u32 gMonPalette_Polteageist[] = INCBIN_U32("graphics/pokemon/polteageist/normal.gbapal.lz");
@@ -11189,6 +18885,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Polteageist[] = INCBIN_U8("graphics/pokemon/polteageist/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Polteageist[] = INCBIN_COMP("graphics/pokemon/polteageist/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Polteageist[] = INCBIN_U32("graphics/pokemon/polteageist/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Polteageist[] = INCBIN_U32("graphics/pokemon/polteageist/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SINISTEA
#if P_FAMILY_HATENNA
@@ -11200,6 +18903,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Hatenna[] = INCBIN_U8("graphics/pokemon/hatenna/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Hatenna[] = INCBIN_COMP("graphics/pokemon/hatenna/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Hatenna[] = INCBIN_U32("graphics/pokemon/hatenna/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Hatenna[] = INCBIN_U32("graphics/pokemon/hatenna/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Hattrem[] = INCBIN_U32("graphics/pokemon/hattrem/front.4bpp.lz");
const u32 gMonPalette_Hattrem[] = INCBIN_U32("graphics/pokemon/hattrem/normal.gbapal.lz");
@@ -11209,6 +18919,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Hattrem[] = INCBIN_U8("graphics/pokemon/hattrem/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Hattrem[] = INCBIN_COMP("graphics/pokemon/hattrem/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Hattrem[] = INCBIN_U32("graphics/pokemon/hattrem/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Hattrem[] = INCBIN_U32("graphics/pokemon/hattrem/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Hatterene[] = INCBIN_U32("graphics/pokemon/hatterene/front.4bpp.lz");
const u32 gMonPalette_Hatterene[] = INCBIN_U32("graphics/pokemon/hatterene/normal.gbapal.lz");
@@ -11218,6 +18935,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Hatterene[] = INCBIN_U8("graphics/pokemon/hatterene/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Hatterene[] = INCBIN_COMP("graphics/pokemon/hatterene/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Hatterene[] = INCBIN_U32("graphics/pokemon/hatterene/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Hatterene[] = INCBIN_U32("graphics/pokemon/hatterene/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GIGANTAMAX_FORMS
const u32 gMonFrontPic_HattereneGigantamax[] = INCBIN_U32("graphics/pokemon/hatterene/gigantamax/front.4bpp.lz");
@@ -11225,6 +18949,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonPalette_HattereneGigantamax[] = INCBIN_U32("graphics/pokemon/hatterene/gigantamax/normal.gbapal.lz");
const u32 gMonShinyPalette_HattereneGigantamax[] = INCBIN_U32("graphics/pokemon/hatterene/gigantamax/shiny.gbapal.lz");
const u8 gMonIcon_HattereneGigantamax[] = INCBIN_U8("graphics/pokemon/hatterene/gigantamax/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_HattereneGigantamax[] = INCBIN_COMP("graphics/pokemon/hatterene/gigantamax/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_HattereneGigantamax[] = INCBIN_U32("graphics/pokemon/hatterene/gigantamax/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_HattereneGigantamax[] = INCBIN_U32("graphics/pokemon/hatterene/gigantamax/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GIGANTAMAX_FORMS
#endif //P_FAMILY_HATENNA
@@ -11237,6 +18968,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Impidimp[] = INCBIN_U8("graphics/pokemon/impidimp/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Impidimp[] = INCBIN_COMP("graphics/pokemon/impidimp/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Impidimp[] = INCBIN_U32("graphics/pokemon/impidimp/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Impidimp[] = INCBIN_U32("graphics/pokemon/impidimp/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Morgrem[] = INCBIN_U32("graphics/pokemon/morgrem/front.4bpp.lz");
const u32 gMonPalette_Morgrem[] = INCBIN_U32("graphics/pokemon/morgrem/normal.gbapal.lz");
@@ -11246,6 +18984,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Morgrem[] = INCBIN_U8("graphics/pokemon/morgrem/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Morgrem[] = INCBIN_COMP("graphics/pokemon/morgrem/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Morgrem[] = INCBIN_U32("graphics/pokemon/morgrem/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Morgrem[] = INCBIN_U32("graphics/pokemon/morgrem/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Grimmsnarl[] = INCBIN_U32("graphics/pokemon/grimmsnarl/front.4bpp.lz");
const u32 gMonPalette_Grimmsnarl[] = INCBIN_U32("graphics/pokemon/grimmsnarl/normal.gbapal.lz");
@@ -11255,6 +19000,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Grimmsnarl[] = INCBIN_U8("graphics/pokemon/grimmsnarl/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Grimmsnarl[] = INCBIN_COMP("graphics/pokemon/grimmsnarl/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Grimmsnarl[] = INCBIN_U32("graphics/pokemon/grimmsnarl/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Grimmsnarl[] = INCBIN_U32("graphics/pokemon/grimmsnarl/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GIGANTAMAX_FORMS
const u32 gMonFrontPic_GrimmsnarlGigantamax[] = INCBIN_U32("graphics/pokemon/grimmsnarl/gigantamax/front.4bpp.lz");
@@ -11262,6 +19014,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonPalette_GrimmsnarlGigantamax[] = INCBIN_U32("graphics/pokemon/grimmsnarl/gigantamax/normal.gbapal.lz");
const u32 gMonShinyPalette_GrimmsnarlGigantamax[] = INCBIN_U32("graphics/pokemon/grimmsnarl/gigantamax/shiny.gbapal.lz");
const u8 gMonIcon_GrimmsnarlGigantamax[] = INCBIN_U8("graphics/pokemon/grimmsnarl/gigantamax/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_GrimmsnarlGigantamax[] = INCBIN_COMP("graphics/pokemon/grimmsnarl/gigantamax/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_GrimmsnarlGigantamax[] = INCBIN_U32("graphics/pokemon/grimmsnarl/gigantamax/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_GrimmsnarlGigantamax[] = INCBIN_U32("graphics/pokemon/grimmsnarl/gigantamax/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GIGANTAMAX_FORMS
#endif //P_FAMILY_IMPIDIMP
@@ -11274,6 +19033,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Milcery[] = INCBIN_U8("graphics/pokemon/milcery/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Milcery[] = INCBIN_COMP("graphics/pokemon/milcery/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Milcery[] = INCBIN_U32("graphics/pokemon/milcery/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Milcery[] = INCBIN_U32("graphics/pokemon/milcery/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Alcremie[] = INCBIN_U32("graphics/pokemon/alcremie/front.4bpp.lz");
const u32 gMonBackPic_Alcremie[] = INCBIN_U32("graphics/pokemon/alcremie/back.4bpp.lz");
const u32 gMonPalette_Alcremie[] = INCBIN_U32("graphics/pokemon/alcremie/normal.gbapal.lz");
@@ -11383,12 +19149,27 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_AlcremieRibbon[] = INCBIN_U32("graphics/pokemon/alcremie/ribbon/back.4bpp.lz");
const u32 gMonShinyPalette_AlcremieRibbon[] = INCBIN_U32("graphics/pokemon/alcremie/ribbon/ribbon_shiny.gbapal.lz");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_AlcremieStrawberry[] = INCBIN_COMP("graphics/pokemon/alcremie/strawberry/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_AlcremieStrawberryVanillaCream[] = INCBIN_U32("graphics/pokemon/alcremie/strawberry/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_AlcremieStrawberryVanillaCream[] = INCBIN_U32("graphics/pokemon/alcremie/strawberry/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
+
#if P_GIGANTAMAX_FORMS
const u32 gMonFrontPic_AlcremieGigantamax[] = INCBIN_U32("graphics/pokemon/alcremie/gigantamax/front.4bpp.lz");
const u32 gMonBackPic_AlcremieGigantamax[] = INCBIN_U32("graphics/pokemon/alcremie/gigantamax/back.4bpp.lz");
const u32 gMonPalette_AlcremieGigantamax[] = INCBIN_U32("graphics/pokemon/alcremie/gigantamax/normal.gbapal.lz");
const u32 gMonShinyPalette_AlcremieGigantamax[] = INCBIN_U32("graphics/pokemon/alcremie/gigantamax/shiny.gbapal.lz");
const u8 gMonIcon_AlcremieGigantamax[] = INCBIN_U8("graphics/pokemon/alcremie/gigantamax/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_AlcremieGigantamax[] = INCBIN_COMP("graphics/pokemon/alcremie/gigantamax/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_AlcremieGigantamax[] = INCBIN_U32("graphics/pokemon/alcremie/gigantamax/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_AlcremieGigantamax[] = INCBIN_U32("graphics/pokemon/alcremie/gigantamax/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GIGANTAMAX_FORMS
#endif //P_FAMILY_MILCERY
@@ -11401,6 +19182,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Falinks[] = INCBIN_U8("graphics/pokemon/falinks/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Falinks[] = INCBIN_COMP("graphics/pokemon/falinks/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Falinks[] = INCBIN_U32("graphics/pokemon/falinks/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Falinks[] = INCBIN_U32("graphics/pokemon/falinks/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_FALINKS
#if P_FAMILY_PINCURCHIN
@@ -11412,6 +19200,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Pincurchin[] = INCBIN_U8("graphics/pokemon/pincurchin/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Pincurchin[] = INCBIN_COMP("graphics/pokemon/pincurchin/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Pincurchin[] = INCBIN_U32("graphics/pokemon/pincurchin/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Pincurchin[] = INCBIN_U32("graphics/pokemon/pincurchin/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_PINCURCHIN
#if P_FAMILY_SNOM
@@ -11423,6 +19218,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Snom[] = INCBIN_U8("graphics/pokemon/snom/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Snom[] = INCBIN_COMP("graphics/pokemon/snom/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Snom[] = INCBIN_U32("graphics/pokemon/snom/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Snom[] = INCBIN_U32("graphics/pokemon/snom/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Frosmoth[] = INCBIN_U32("graphics/pokemon/frosmoth/front.4bpp.lz");
const u32 gMonPalette_Frosmoth[] = INCBIN_U32("graphics/pokemon/frosmoth/normal.gbapal.lz");
@@ -11432,6 +19234,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Frosmoth[] = INCBIN_U8("graphics/pokemon/frosmoth/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Frosmoth[] = INCBIN_COMP("graphics/pokemon/frosmoth/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Frosmoth[] = INCBIN_U32("graphics/pokemon/frosmoth/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Frosmoth[] = INCBIN_U32("graphics/pokemon/frosmoth/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SNOM
#if P_FAMILY_STONJOURNER
@@ -11443,6 +19252,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Stonjourner[] = INCBIN_U8("graphics/pokemon/stonjourner/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Stonjourner[] = INCBIN_COMP("graphics/pokemon/stonjourner/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Stonjourner[] = INCBIN_U32("graphics/pokemon/stonjourner/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Stonjourner[] = INCBIN_U32("graphics/pokemon/stonjourner/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_STONJOURNER
#if P_FAMILY_EISCUE
@@ -11454,12 +19270,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Eiscue[] = INCBIN_U8("graphics/pokemon/eiscue/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_EiscueIceFace[] = INCBIN_COMP("graphics/pokemon/eiscue/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_EiscueIceFace[] = INCBIN_U32("graphics/pokemon/eiscue/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_EiscueIceFace[] = INCBIN_U32("graphics/pokemon/eiscue/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_EiscueNoiceFace[] = INCBIN_U32("graphics/pokemon/eiscue/noice_face/front.4bpp.lz");
const u32 gMonPalette_EiscueNoiceFace[] = INCBIN_U32("graphics/pokemon/eiscue/noice_face/normal.gbapal.lz");
const u32 gMonBackPic_EiscueNoiceFace[] = INCBIN_U32("graphics/pokemon/eiscue/noice_face/back.4bpp.lz");
const u32 gMonShinyPalette_EiscueNoiceFace[] = INCBIN_U32("graphics/pokemon/eiscue/noice_face/shiny.gbapal.lz");
const u8 gMonIcon_EiscueNoiceFace[] = INCBIN_U8("graphics/pokemon/eiscue/noice_face/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_EiscueNoiceFace[] = INCBIN_COMP("graphics/pokemon/eiscue/noice_face/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_EiscueNoiceFace[] = INCBIN_U32("graphics/pokemon/eiscue/noice_face/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_EiscueNoiceFace[] = INCBIN_U32("graphics/pokemon/eiscue/noice_face/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_EISCUE
#if P_FAMILY_INDEEDEE
@@ -11471,12 +19301,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Indeedee[] = INCBIN_U8("graphics/pokemon/indeedee/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_IndeedeeMale[] = INCBIN_COMP("graphics/pokemon/indeedee/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_IndeedeeMale[] = INCBIN_U32("graphics/pokemon/indeedee/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_IndeedeeMale[] = INCBIN_U32("graphics/pokemon/indeedee/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_IndeedeeFemale[] = INCBIN_U32("graphics/pokemon/indeedee/female/front.4bpp.lz");
const u32 gMonPalette_IndeedeeFemale[] = INCBIN_U32("graphics/pokemon/indeedee/female/normal.gbapal.lz");
const u32 gMonBackPic_IndeedeeFemale[] = INCBIN_U32("graphics/pokemon/indeedee/female/back.4bpp.lz");
const u32 gMonShinyPalette_IndeedeeFemale[] = INCBIN_U32("graphics/pokemon/indeedee/female/shiny.gbapal.lz");
const u8 gMonIcon_IndeedeeFemale[] = INCBIN_U8("graphics/pokemon/indeedee/female/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_IndeedeeFemale[] = INCBIN_COMP("graphics/pokemon/indeedee/female/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_IndeedeeFemale[] = INCBIN_U32("graphics/pokemon/indeedee/female/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_IndeedeeFemale[] = INCBIN_U32("graphics/pokemon/indeedee/female/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_INDEEDEE
#if P_FAMILY_MORPEKO
@@ -11488,12 +19332,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Morpeko[] = INCBIN_U8("graphics/pokemon/morpeko/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_MorpekoFullBelly[] = INCBIN_COMP("graphics/pokemon/morpeko/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_MorpekoFullBelly[] = INCBIN_U32("graphics/pokemon/morpeko/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_MorpekoFullBelly[] = INCBIN_U32("graphics/pokemon/morpeko/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_MorpekoHangry[] = INCBIN_U32("graphics/pokemon/morpeko/hangry/front.4bpp.lz");
const u32 gMonPalette_MorpekoHangry[] = INCBIN_U32("graphics/pokemon/morpeko/hangry/normal.gbapal.lz");
const u32 gMonBackPic_MorpekoHangry[] = INCBIN_U32("graphics/pokemon/morpeko/hangry/back.4bpp.lz");
const u32 gMonShinyPalette_MorpekoHangry[] = INCBIN_U32("graphics/pokemon/morpeko/hangry/shiny.gbapal.lz");
const u8 gMonIcon_MorpekoHangry[] = INCBIN_U8("graphics/pokemon/morpeko/hangry/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_MorpekoHangry[] = INCBIN_COMP("graphics/pokemon/morpeko/hangry/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_MorpekoHangry[] = INCBIN_U32("graphics/pokemon/morpeko/hangry/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_MorpekoHangry[] = INCBIN_U32("graphics/pokemon/morpeko/hangry/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_MORPEKO
#if P_FAMILY_CUFANT
@@ -11505,6 +19363,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Cufant[] = INCBIN_U8("graphics/pokemon/cufant/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Cufant[] = INCBIN_COMP("graphics/pokemon/cufant/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Cufant[] = INCBIN_U32("graphics/pokemon/cufant/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Cufant[] = INCBIN_U32("graphics/pokemon/cufant/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Copperajah[] = INCBIN_U32("graphics/pokemon/copperajah/front.4bpp.lz");
const u32 gMonPalette_Copperajah[] = INCBIN_U32("graphics/pokemon/copperajah/normal.gbapal.lz");
@@ -11514,6 +19379,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Copperajah[] = INCBIN_U8("graphics/pokemon/copperajah/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Copperajah[] = INCBIN_COMP("graphics/pokemon/copperajah/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Copperajah[] = INCBIN_U32("graphics/pokemon/copperajah/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Copperajah[] = INCBIN_U32("graphics/pokemon/copperajah/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GIGANTAMAX_FORMS
const u32 gMonFrontPic_CopperajahGigantamax[] = INCBIN_U32("graphics/pokemon/copperajah/gigantamax/front.4bpp.lz");
@@ -11521,6 +19393,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonPalette_CopperajahGigantamax[] = INCBIN_U32("graphics/pokemon/copperajah/gigantamax/normal.gbapal.lz");
const u32 gMonShinyPalette_CopperajahGigantamax[] = INCBIN_U32("graphics/pokemon/copperajah/gigantamax/shiny.gbapal.lz");
const u8 gMonIcon_CopperajahGigantamax[] = INCBIN_U8("graphics/pokemon/copperajah/gigantamax/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_CopperajahGigantamax[] = INCBIN_COMP("graphics/pokemon/copperajah/gigantamax/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_CopperajahGigantamax[] = INCBIN_U32("graphics/pokemon/copperajah/gigantamax/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_CopperajahGigantamax[] = INCBIN_U32("graphics/pokemon/copperajah/gigantamax/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GIGANTAMAX_FORMS
#endif //P_FAMILY_CUFANT
@@ -11533,6 +19412,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Dracozolt[] = INCBIN_U8("graphics/pokemon/dracozolt/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Dracozolt[] = INCBIN_COMP("graphics/pokemon/dracozolt/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Dracozolt[] = INCBIN_U32("graphics/pokemon/dracozolt/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Dracozolt[] = INCBIN_U32("graphics/pokemon/dracozolt/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_DRACOZOLT
#if P_FAMILY_ARCTOZOLT
@@ -11544,6 +19430,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Arctozolt[] = INCBIN_U8("graphics/pokemon/arctozolt/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Arctozolt[] = INCBIN_COMP("graphics/pokemon/arctozolt/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Arctozolt[] = INCBIN_U32("graphics/pokemon/arctozolt/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Arctozolt[] = INCBIN_U32("graphics/pokemon/arctozolt/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_ARCTOZOLT
#if P_FAMILY_DRACOVISH
@@ -11555,6 +19448,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Dracovish[] = INCBIN_U8("graphics/pokemon/dracovish/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Dracovish[] = INCBIN_COMP("graphics/pokemon/dracovish/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Dracovish[] = INCBIN_U32("graphics/pokemon/dracovish/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Dracovish[] = INCBIN_U32("graphics/pokemon/dracovish/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_DRACOVISH
#if P_FAMILY_ARCTOVISH
@@ -11566,6 +19466,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Arctovish[] = INCBIN_U8("graphics/pokemon/arctovish/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Arctovish[] = INCBIN_COMP("graphics/pokemon/arctovish/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Arctovish[] = INCBIN_U32("graphics/pokemon/arctovish/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Arctovish[] = INCBIN_U32("graphics/pokemon/arctovish/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_ARCTOVISH
#if P_FAMILY_DURALUDON
@@ -11577,6 +19484,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Duraludon[] = INCBIN_U8("graphics/pokemon/duraludon/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Duraludon[] = INCBIN_COMP("graphics/pokemon/duraludon/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Duraludon[] = INCBIN_U32("graphics/pokemon/duraludon/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Duraludon[] = INCBIN_U32("graphics/pokemon/duraludon/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_GIGANTAMAX_FORMS
const u32 gMonFrontPic_DuraludonGigantamax[] = INCBIN_U32("graphics/pokemon/duraludon/gigantamax/front.4bpp.lz");
@@ -11584,6 +19498,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonPalette_DuraludonGigantamax[] = INCBIN_U32("graphics/pokemon/duraludon/gigantamax/normal.gbapal.lz");
const u32 gMonShinyPalette_DuraludonGigantamax[] = INCBIN_U32("graphics/pokemon/duraludon/gigantamax/shiny.gbapal.lz");
const u8 gMonIcon_DuraludonGigantamax[] = INCBIN_U8("graphics/pokemon/duraludon/gigantamax/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_DuraludonGigantamax[] = INCBIN_COMP("graphics/pokemon/duraludon/gigantamax/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_DuraludonGigantamax[] = INCBIN_U32("graphics/pokemon/duraludon/gigantamax/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_DuraludonGigantamax[] = INCBIN_U32("graphics/pokemon/duraludon/gigantamax/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GIGANTAMAX_FORMS
#if P_GEN_9_CROSS_EVOS
@@ -11595,6 +19516,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_GEN_9_CROSS_EVOS
#endif //P_FAMILY_DURALUDON
@@ -11607,6 +19535,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Dreepy[] = INCBIN_U8("graphics/pokemon/dreepy/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Dreepy[] = INCBIN_COMP("graphics/pokemon/dreepy/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Dreepy[] = INCBIN_U32("graphics/pokemon/dreepy/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Dreepy[] = INCBIN_U32("graphics/pokemon/dreepy/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Drakloak[] = INCBIN_U32("graphics/pokemon/drakloak/front.4bpp.lz");
const u32 gMonPalette_Drakloak[] = INCBIN_U32("graphics/pokemon/drakloak/normal.gbapal.lz");
@@ -11616,6 +19551,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Drakloak[] = INCBIN_U8("graphics/pokemon/drakloak/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Drakloak[] = INCBIN_COMP("graphics/pokemon/drakloak/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Drakloak[] = INCBIN_U32("graphics/pokemon/drakloak/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Drakloak[] = INCBIN_U32("graphics/pokemon/drakloak/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Dragapult[] = INCBIN_U32("graphics/pokemon/dragapult/front.4bpp.lz");
const u32 gMonPalette_Dragapult[] = INCBIN_U32("graphics/pokemon/dragapult/normal.gbapal.lz");
@@ -11625,6 +19567,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Dragapult[] = INCBIN_U8("graphics/pokemon/dragapult/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Dragapult[] = INCBIN_COMP("graphics/pokemon/dragapult/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Dragapult[] = INCBIN_U32("graphics/pokemon/dragapult/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Dragapult[] = INCBIN_U32("graphics/pokemon/dragapult/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_DREEPY
#if P_FAMILY_ZACIAN
@@ -11636,12 +19585,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Zacian[] = INCBIN_U8("graphics/pokemon/zacian/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_ZacianHeroOfManyBattles[] = INCBIN_COMP("graphics/pokemon/zacian/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_ZacianHeroOfManyBattles[] = INCBIN_U32("graphics/pokemon/zacian/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_ZacianHeroOfManyBattles[] = INCBIN_U32("graphics/pokemon/zacian/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_ZacianCrownedSword[] = INCBIN_U32("graphics/pokemon/zacian/crowned_sword/front.4bpp.lz");
const u32 gMonPalette_ZacianCrownedSword[] = INCBIN_U32("graphics/pokemon/zacian/crowned_sword/normal.gbapal.lz");
const u32 gMonBackPic_ZacianCrownedSword[] = INCBIN_U32("graphics/pokemon/zacian/crowned_sword/back.4bpp.lz");
const u32 gMonShinyPalette_ZacianCrownedSword[] = INCBIN_U32("graphics/pokemon/zacian/crowned_sword/shiny.gbapal.lz");
const u8 gMonIcon_ZacianCrownedSword[] = INCBIN_U8("graphics/pokemon/zacian/crowned_sword/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_ZacianCrownedSword[] = INCBIN_COMP("graphics/pokemon/zacian/crowned_sword/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_ZacianCrownedSword[] = INCBIN_U32("graphics/pokemon/zacian/crowned_sword/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_ZacianCrownedSword[] = INCBIN_U32("graphics/pokemon/zacian/crowned_sword/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_ZACIAN
#if P_FAMILY_ZAMAZENTA
@@ -11653,12 +19616,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Zamazenta[] = INCBIN_U8("graphics/pokemon/zamazenta/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_ZamazentaHeroOfManyBattles[] = INCBIN_COMP("graphics/pokemon/zamazenta/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_ZamazentaHeroOfManyBattles[] = INCBIN_U32("graphics/pokemon/zamazenta/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_ZamazentaHeroOfManyBattles[] = INCBIN_U32("graphics/pokemon/zamazenta/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_ZamazentaCrownedShield[] = INCBIN_U32("graphics/pokemon/zamazenta/crowned_shield/front.4bpp.lz");
const u32 gMonPalette_ZamazentaCrownedShield[] = INCBIN_U32("graphics/pokemon/zamazenta/crowned_shield/normal.gbapal.lz");
const u32 gMonBackPic_ZamazentaCrownedShield[] = INCBIN_U32("graphics/pokemon/zamazenta/crowned_shield/back.4bpp.lz");
const u32 gMonShinyPalette_ZamazentaCrownedShield[] = INCBIN_U32("graphics/pokemon/zamazenta/crowned_shield/shiny.gbapal.lz");
const u8 gMonIcon_ZamazentaCrownedShield[] = INCBIN_U8("graphics/pokemon/zamazenta/crowned_shield/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_ZamazentaCrownedShield[] = INCBIN_COMP("graphics/pokemon/zamazenta/crowned_shield/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_ZamazentaCrownedShield[] = INCBIN_U32("graphics/pokemon/zamazenta/crowned_shield/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_ZamazentaCrownedShield[] = INCBIN_U32("graphics/pokemon/zamazenta/crowned_shield/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_ZAMAZENTA
#if P_FAMILY_ETERNATUS
@@ -11670,12 +19647,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Eternatus[] = INCBIN_U8("graphics/pokemon/eternatus/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Eternatus[] = INCBIN_COMP("graphics/pokemon/eternatus/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Eternatus[] = INCBIN_U32("graphics/pokemon/eternatus/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Eternatus[] = INCBIN_U32("graphics/pokemon/eternatus/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_EternatusEternamax[] = INCBIN_U32("graphics/pokemon/eternatus/eternamax/front.4bpp.lz");
const u32 gMonPalette_EternatusEternamax[] = INCBIN_U32("graphics/pokemon/eternatus/eternamax/normal.gbapal.lz");
const u32 gMonBackPic_EternatusEternamax[] = INCBIN_U32("graphics/pokemon/eternatus/eternamax/back.4bpp.lz");
const u32 gMonShinyPalette_EternatusEternamax[] = INCBIN_U32("graphics/pokemon/eternatus/eternamax/shiny.gbapal.lz");
const u8 gMonIcon_EternatusEternamax[] = INCBIN_U8("graphics/pokemon/eternatus/eternamax/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_EternatusEternamax[] = INCBIN_COMP("graphics/pokemon/eternatus/eternamax/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_EternatusEternamax[] = INCBIN_U32("graphics/pokemon/eternatus/eternamax/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_EternatusEternamax[] = INCBIN_U32("graphics/pokemon/eternatus/eternamax/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_ETERNATUS
#if P_FAMILY_KUBFU
@@ -11687,6 +19678,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Kubfu[] = INCBIN_U8("graphics/pokemon/kubfu/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Kubfu[] = INCBIN_COMP("graphics/pokemon/kubfu/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Kubfu[] = INCBIN_U32("graphics/pokemon/kubfu/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Kubfu[] = INCBIN_U32("graphics/pokemon/kubfu/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_UrshifuSingleStrikeStyle[] = INCBIN_U32("graphics/pokemon/urshifu/front.4bpp.lz");
const u32 gMonPalette_UrshifuSingleStrikeStyle[] = INCBIN_U32("graphics/pokemon/urshifu/normal.gbapal.lz");
@@ -11696,12 +19694,20 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Urshifu[] = INCBIN_U8("graphics/pokemon/urshifu/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Urshifu[] = INCBIN_COMP("graphics/pokemon/urshifu/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Urshifu[] = INCBIN_U32("graphics/pokemon/urshifu/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Urshifu[] = INCBIN_U32("graphics/pokemon/urshifu/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_UrshifuRapidStrikeStyle[] = INCBIN_U32("graphics/pokemon/urshifu/rapid_strike_style/front.4bpp.lz");
const u32 gMonPalette_UrshifuRapidStrikeStyle[] = INCBIN_U32("graphics/pokemon/urshifu/rapid_strike_style/normal.gbapal.lz");
const u32 gMonBackPic_UrshifuRapidStrikeStyle[] = INCBIN_U32("graphics/pokemon/urshifu/rapid_strike_style/back.4bpp.lz");
const u32 gMonShinyPalette_UrshifuRapidStrikeStyle[] = INCBIN_U32("graphics/pokemon/urshifu/rapid_strike_style/shiny.gbapal.lz");
+#if P_GIGANTAMAX_FORMS
const u32 gMonFrontPic_UrshifuSingleStrikeStyleGigantamax[] = INCBIN_U32("graphics/pokemon/urshifu/single_strike_style_gigantamax/front.4bpp.lz");
const u32 gMonBackPic_UrshifuSingleStrikeStyleGigantamax[] = INCBIN_U32("graphics/pokemon/urshifu/single_strike_style_gigantamax/back.4bpp.lz");
const u32 gMonPalette_UrshifuSingleStrikeStyleGigantamax[] = INCBIN_U32("graphics/pokemon/urshifu/single_strike_style_gigantamax/normal.gbapal.lz");
@@ -11713,6 +19719,12 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonPalette_UrshifuRapidStrikeStyleGigantamax[] = INCBIN_U32("graphics/pokemon/urshifu/rapid_strike_style_gigantamax/normal.gbapal.lz");
const u32 gMonShinyPalette_UrshifuRapidStrikeStyleGigantamax[] = INCBIN_U32("graphics/pokemon/urshifu/rapid_strike_style_gigantamax/shiny.gbapal.lz");
const u8 gMonIcon_UrshifuRapidStrikeStyleGigantamax[] = INCBIN_U8("graphics/pokemon/urshifu/rapid_strike_style_gigantamax/icon.4bpp");
+
+#if OW_POKEMON_OBJECT_EVENTS
+ // const u32 gObjectEventPic_UrshifuSingleStrikeStyleGigantamax[] = INCBIN_COMP("graphics/pokemon/urshifu/single_strike_style_gigantamax/overworld.4bpp");
+ // const u32 gObjectEventPic_UrshifuRapidStrikeStyleGigantamax[] = INCBIN_COMP("graphics/pokemon/urshifu/rapid_strike_style_gigantamax/overworld.4bpp");
+#endif //OW_POKEMON_OBJECT_EVENTS
+#endif //P_GIGANTAMAX_FORMS
#endif //P_FAMILY_KUBFU
#if P_FAMILY_ZARUDE
@@ -11724,12 +19736,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Zarude[] = INCBIN_U8("graphics/pokemon/zarude/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Zarude[] = INCBIN_COMP("graphics/pokemon/zarude/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Zarude[] = INCBIN_U32("graphics/pokemon/zarude/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Zarude[] = INCBIN_U32("graphics/pokemon/zarude/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_ZarudeDada[] = INCBIN_U32("graphics/pokemon/zarude/dada/front.4bpp.lz");
const u32 gMonPalette_ZarudeDada[] = INCBIN_U32("graphics/pokemon/zarude/dada/normal.gbapal.lz");
const u32 gMonBackPic_ZarudeDada[] = INCBIN_U32("graphics/pokemon/zarude/dada/back.4bpp.lz");
const u32 gMonShinyPalette_ZarudeDada[] = INCBIN_U32("graphics/pokemon/zarude/dada/shiny.gbapal.lz");
const u8 gMonIcon_ZarudeDada[] = INCBIN_U8("graphics/pokemon/zarude/dada/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ //const u32 gObjectEventPic_ZarudeDada[] = INCBIN_COMP("graphics/pokemon/zarude/dada/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ // const u32 gOverworldPalette_ZarudeDada[] = INCBIN_U32("graphics/pokemon/zarude/dada/overworld_normal.gbapal.lz");
+ // const u32 gShinyOverworldPalette_ZarudeDada[] = INCBIN_U32("graphics/pokemon/zarude/dada/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_ZARUDE
#if P_FAMILY_REGIELEKI
@@ -11741,6 +19767,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Regieleki[] = INCBIN_U8("graphics/pokemon/regieleki/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Regieleki[] = INCBIN_COMP("graphics/pokemon/regieleki/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Regieleki[] = INCBIN_U32("graphics/pokemon/regieleki/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Regieleki[] = INCBIN_U32("graphics/pokemon/regieleki/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_REGIELEKI
#if P_FAMILY_REGIDRAGO
@@ -11752,6 +19785,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Regidrago[] = INCBIN_U8("graphics/pokemon/regidrago/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Regidrago[] = INCBIN_COMP("graphics/pokemon/regidrago/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Regidrago[] = INCBIN_U32("graphics/pokemon/regidrago/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Regidrago[] = INCBIN_U32("graphics/pokemon/regidrago/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_REGIDRAGO
#if P_FAMILY_GLASTRIER
@@ -11763,6 +19803,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Glastrier[] = INCBIN_U8("graphics/pokemon/glastrier/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Glastrier[] = INCBIN_COMP("graphics/pokemon/glastrier/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Glastrier[] = INCBIN_U32("graphics/pokemon/glastrier/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Glastrier[] = INCBIN_U32("graphics/pokemon/glastrier/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_GLASTRIER
#if P_FAMILY_SPECTRIER
@@ -11774,6 +19821,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Spectrier[] = INCBIN_U8("graphics/pokemon/spectrier/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Spectrier[] = INCBIN_COMP("graphics/pokemon/spectrier/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Spectrier[] = INCBIN_U32("graphics/pokemon/spectrier/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Spectrier[] = INCBIN_U32("graphics/pokemon/spectrier/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SPECTRIER
#if P_FAMILY_CALYREX
@@ -11785,6 +19839,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_Calyrex[] = INCBIN_U8("graphics/pokemon/calyrex/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_Calyrex[] = INCBIN_COMP("graphics/pokemon/calyrex/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_Calyrex[] = INCBIN_U32("graphics/pokemon/calyrex/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_Calyrex[] = INCBIN_U32("graphics/pokemon/calyrex/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#if P_FUSION_FORMS
const u32 gMonFrontPic_CalyrexIceRider[] = INCBIN_U32("graphics/pokemon/calyrex/ice_rider/front.4bpp.lz");
@@ -11792,6 +19853,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_CalyrexIceRider[] = INCBIN_U32("graphics/pokemon/calyrex/ice_rider/back.4bpp.lz");
const u32 gMonShinyPalette_CalyrexIceRider[] = INCBIN_U32("graphics/pokemon/calyrex/ice_rider/shiny.gbapal.lz");
const u8 gMonIcon_CalyrexIceRider[] = INCBIN_U8("graphics/pokemon/calyrex/ice_rider/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_CalyrexIceRider[] = INCBIN_COMP("graphics/pokemon/calyrex/ice_rider/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_CalyrexIceRider[] = INCBIN_U32("graphics/pokemon/calyrex/ice_rider/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_CalyrexIceRider[] = INCBIN_U32("graphics/pokemon/calyrex/ice_rider/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FUSION_FORMS
#if P_FUSION_FORMS
@@ -11800,6 +19868,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonBackPic_CalyrexShadowRider[] = INCBIN_U32("graphics/pokemon/calyrex/shadow_rider/back.4bpp.lz");
const u32 gMonShinyPalette_CalyrexShadowRider[] = INCBIN_U32("graphics/pokemon/calyrex/shadow_rider/shiny.gbapal.lz");
const u8 gMonIcon_CalyrexShadowRider[] = INCBIN_U8("graphics/pokemon/calyrex/shadow_rider/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ const u32 gObjectEventPic_CalyrexShadowRider[] = INCBIN_COMP("graphics/pokemon/calyrex/shadow_rider/overworld.4bpp");
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ const u32 gOverworldPalette_CalyrexShadowRider[] = INCBIN_U32("graphics/pokemon/calyrex/shadow_rider/overworld_normal.gbapal.lz");
+ const u32 gShinyOverworldPalette_CalyrexShadowRider[] = INCBIN_U32("graphics/pokemon/calyrex/shadow_rider/overworld_shiny.gbapal.lz");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FUSION_FORMS
#endif //P_FAMILY_CALYREX
@@ -11812,6 +19887,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Floragato[] = INCBIN_U32("graphics/pokemon/floragato/front.4bpp.lz");
const u32 gMonPalette_Floragato[] = INCBIN_U32("graphics/pokemon/floragato/normal.gbapal.lz");
@@ -11821,6 +19903,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Meowscarada[] = INCBIN_U32("graphics/pokemon/meowscarada/front.4bpp.lz");
const u32 gMonPalette_Meowscarada[] = INCBIN_U32("graphics/pokemon/meowscarada/normal.gbapal.lz");
@@ -11830,6 +19919,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SPRIGATITO
#if P_FAMILY_FUECOCO
@@ -11841,6 +19937,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Crocalor[] = INCBIN_U32("graphics/pokemon/crocalor/front.4bpp.lz");
const u32 gMonPalette_Crocalor[] = INCBIN_U32("graphics/pokemon/crocalor/normal.gbapal.lz");
@@ -11850,6 +19953,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Skeledirge[] = INCBIN_U32("graphics/pokemon/skeledirge/front.4bpp.lz");
const u32 gMonPalette_Skeledirge[] = INCBIN_U32("graphics/pokemon/skeledirge/normal.gbapal.lz");
@@ -11859,6 +19969,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_FUECOCO
#if P_FAMILY_QUAXLY
@@ -11870,6 +19987,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Quaxwell[] = INCBIN_U32("graphics/pokemon/quaxwell/front.4bpp.lz");
const u32 gMonPalette_Quaxwell[] = INCBIN_U32("graphics/pokemon/quaxwell/normal.gbapal.lz");
@@ -11879,6 +20003,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Quaquaval[] = INCBIN_U32("graphics/pokemon/quaquaval/front.4bpp.lz");
const u32 gMonPalette_Quaquaval[] = INCBIN_U32("graphics/pokemon/quaquaval/normal.gbapal.lz");
@@ -11888,6 +20019,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_QUAXLY
#if P_FAMILY_LECHONK
@@ -11899,6 +20037,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_OinkologneMale[] = INCBIN_U32("graphics/pokemon/oinkologne/front.4bpp.lz");
const u32 gMonPalette_OinkologneMale[] = INCBIN_U32("graphics/pokemon/oinkologne/normal.gbapal.lz");
@@ -11908,12 +20053,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_OinkologneFemale[] = INCBIN_U32("graphics/pokemon/oinkologne/female/front.4bpp.lz");
const u32 gMonPalette_OinkologneFemale[] = INCBIN_U32("graphics/pokemon/oinkologne/female/normal.gbapal.lz");
const u32 gMonBackPic_OinkologneFemale[] = INCBIN_U32("graphics/pokemon/oinkologne/female/back.4bpp.lz");
const u32 gMonShinyPalette_OinkologneFemale[] = INCBIN_U32("graphics/pokemon/oinkologne/female/shiny.gbapal.lz");
const u8 gMonIcon_OinkologneFemale[] = INCBIN_U8("graphics/pokemon/oinkologne/female/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // 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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_LECHONK
#if P_FAMILY_TAROUNTULA
@@ -11925,6 +20084,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Spidops[] = INCBIN_U32("graphics/pokemon/spidops/front.4bpp.lz");
const u32 gMonPalette_Spidops[] = INCBIN_U32("graphics/pokemon/spidops/normal.gbapal.lz");
@@ -11934,6 +20100,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_TAROUNTULA
#if P_FAMILY_NYMBLE
@@ -11945,6 +20118,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Lokix[] = INCBIN_U32("graphics/pokemon/lokix/front.4bpp.lz");
const u32 gMonPalette_Lokix[] = INCBIN_U32("graphics/pokemon/lokix/normal.gbapal.lz");
@@ -11954,6 +20134,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_NYMBLE
#if P_FAMILY_PAWMI
@@ -11965,6 +20152,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Pawmo[] = INCBIN_U32("graphics/pokemon/pawmo/front.4bpp.lz");
const u32 gMonPalette_Pawmo[] = INCBIN_U32("graphics/pokemon/pawmo/normal.gbapal.lz");
@@ -11974,6 +20168,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Pawmot[] = INCBIN_U32("graphics/pokemon/pawmot/front.4bpp.lz");
const u32 gMonPalette_Pawmot[] = INCBIN_U32("graphics/pokemon/pawmot/normal.gbapal.lz");
@@ -11983,6 +20184,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_PAWMI
#if P_FAMILY_TANDEMAUS
@@ -11994,6 +20202,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonPalette_Maushold[] = INCBIN_U32("graphics/pokemon/maushold/normal.gbapal.lz");
const u32 gMonShinyPalette_Maushold[] = INCBIN_U32("graphics/pokemon/maushold/shiny.gbapal.lz");
@@ -12004,6 +20219,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_MausholdFamilyOfFour[] = INCBIN_U32("graphics/pokemon/maushold/four/front.4bpp.lz");
const u32 gMonBackPic_MausholdFamilyOfFour[] = INCBIN_U32("graphics/pokemon/maushold/four/back.4bpp.lz");
@@ -12011,6 +20233,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_TANDEMAUS
#if P_FAMILY_FIDOUGH
@@ -12022,6 +20251,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Dachsbun[] = INCBIN_U32("graphics/pokemon/dachsbun/front.4bpp.lz");
const u32 gMonPalette_Dachsbun[] = INCBIN_U32("graphics/pokemon/dachsbun/normal.gbapal.lz");
@@ -12031,6 +20267,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_FIDOUGH
#if P_FAMILY_SMOLIV
@@ -12042,6 +20285,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Dolliv[] = INCBIN_U32("graphics/pokemon/dolliv/front.4bpp.lz");
const u32 gMonPalette_Dolliv[] = INCBIN_U32("graphics/pokemon/dolliv/normal.gbapal.lz");
@@ -12051,6 +20301,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Arboliva[] = INCBIN_U32("graphics/pokemon/arboliva/front.4bpp.lz");
const u32 gMonPalette_Arboliva[] = INCBIN_U32("graphics/pokemon/arboliva/normal.gbapal.lz");
@@ -12060,6 +20317,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SMOLIV
#if P_FAMILY_SQUAWKABILLY
@@ -12072,18 +20336,46 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonPalette_SquawkabillyGreenPlumage[] = INCBIN_U32("graphics/pokemon/squawkabilly/normal.gbapal.lz");
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonPalette_SquawkabillyBluePlumage[] = INCBIN_U32("graphics/pokemon/squawkabilly/blue_plumage/normal.gbapal.lz");
const u32 gMonShinyPalette_SquawkabillyBluePlumage[] = INCBIN_U32("graphics/pokemon/squawkabilly/blue_plumage/shiny.gbapal.lz");
const u8 gMonIcon_SquawkabillyBluePlumage[] = INCBIN_U8("graphics/pokemon/squawkabilly/blue_plumage/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // 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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonPalette_SquawkabillyYellowPlumage[] = INCBIN_U32("graphics/pokemon/squawkabilly/yellow_plumage/normal.gbapal.lz");
const u32 gMonShinyPalette_SquawkabillyYellowPlumage[] = INCBIN_U32("graphics/pokemon/squawkabilly/yellow_plumage/shiny.gbapal.lz");
const u8 gMonIcon_SquawkabillyYellowPlumage[] = INCBIN_U8("graphics/pokemon/squawkabilly/yellow_plumage/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // 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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonPalette_SquawkabillyWhitePlumage[] = INCBIN_U32("graphics/pokemon/squawkabilly/white_plumage/normal.gbapal.lz");
const u32 gMonShinyPalette_SquawkabillyWhitePlumage[] = INCBIN_U32("graphics/pokemon/squawkabilly/white_plumage/shiny.gbapal.lz");
const u8 gMonIcon_SquawkabillyWhitePlumage[] = INCBIN_U8("graphics/pokemon/squawkabilly/white_plumage/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // 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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SQUAWKABILLY
#if P_FAMILY_NACLI
@@ -12095,6 +20387,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Naclstack[] = INCBIN_U32("graphics/pokemon/naclstack/front.4bpp.lz");
const u32 gMonPalette_Naclstack[] = INCBIN_U32("graphics/pokemon/naclstack/normal.gbapal.lz");
@@ -12104,6 +20403,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Garganacl[] = INCBIN_U32("graphics/pokemon/garganacl/front.4bpp.lz");
const u32 gMonPalette_Garganacl[] = INCBIN_U32("graphics/pokemon/garganacl/normal.gbapal.lz");
@@ -12113,6 +20419,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_NACLI
#if P_FAMILY_CHARCADET
@@ -12124,6 +20437,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Armarouge[] = INCBIN_U32("graphics/pokemon/armarouge/front.4bpp.lz");
const u32 gMonPalette_Armarouge[] = INCBIN_U32("graphics/pokemon/armarouge/normal.gbapal.lz");
@@ -12133,6 +20453,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Ceruledge[] = INCBIN_U32("graphics/pokemon/ceruledge/front.4bpp.lz");
const u32 gMonPalette_Ceruledge[] = INCBIN_U32("graphics/pokemon/ceruledge/normal.gbapal.lz");
@@ -12142,6 +20469,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_CHARCADET
#if P_FAMILY_TADBULB
@@ -12153,6 +20487,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Bellibolt[] = INCBIN_U32("graphics/pokemon/bellibolt/front.4bpp.lz");
const u32 gMonPalette_Bellibolt[] = INCBIN_U32("graphics/pokemon/bellibolt/normal.gbapal.lz");
@@ -12162,6 +20503,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_TADBULB
#if P_FAMILY_WATTREL
@@ -12173,6 +20521,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Kilowattrel[] = INCBIN_U32("graphics/pokemon/kilowattrel/front.4bpp.lz");
const u32 gMonPalette_Kilowattrel[] = INCBIN_U32("graphics/pokemon/kilowattrel/normal.gbapal.lz");
@@ -12182,6 +20537,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_WATTREL
#if P_FAMILY_MASCHIFF
@@ -12193,6 +20555,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Mabosstiff[] = INCBIN_U32("graphics/pokemon/mabosstiff/front.4bpp.lz");
const u32 gMonPalette_Mabosstiff[] = INCBIN_U32("graphics/pokemon/mabosstiff/normal.gbapal.lz");
@@ -12202,6 +20571,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_MASCHIFF
#if P_FAMILY_SHROODLE
@@ -12213,6 +20589,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Grafaiai[] = INCBIN_U32("graphics/pokemon/grafaiai/front.4bpp.lz");
const u32 gMonPalette_Grafaiai[] = INCBIN_U32("graphics/pokemon/grafaiai/normal.gbapal.lz");
@@ -12222,6 +20605,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SHROODLE
#if P_FAMILY_BRAMBLIN
@@ -12233,6 +20623,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Brambleghast[] = INCBIN_U32("graphics/pokemon/brambleghast/front.4bpp.lz");
const u32 gMonPalette_Brambleghast[] = INCBIN_U32("graphics/pokemon/brambleghast/normal.gbapal.lz");
@@ -12242,6 +20639,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_BRAMBLIN
#if P_FAMILY_TOEDSCOOL
@@ -12253,6 +20657,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Toedscruel[] = INCBIN_U32("graphics/pokemon/toedscruel/front.4bpp.lz");
const u32 gMonPalette_Toedscruel[] = INCBIN_U32("graphics/pokemon/toedscruel/normal.gbapal.lz");
@@ -12262,6 +20673,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_TOEDSCOOL
#if P_FAMILY_KLAWF
@@ -12273,6 +20691,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_KLAWF
#if P_FAMILY_CAPSAKID
@@ -12284,6 +20709,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Scovillain[] = INCBIN_U32("graphics/pokemon/scovillain/front.4bpp.lz");
const u32 gMonPalette_Scovillain[] = INCBIN_U32("graphics/pokemon/scovillain/normal.gbapal.lz");
@@ -12293,6 +20725,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_CAPSAKID
#if P_FAMILY_RELLOR
@@ -12304,6 +20743,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Rabsca[] = INCBIN_U32("graphics/pokemon/rabsca/front.4bpp.lz");
const u32 gMonPalette_Rabsca[] = INCBIN_U32("graphics/pokemon/rabsca/normal.gbapal.lz");
@@ -12313,6 +20759,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_RELLOR
#if P_FAMILY_FLITTLE
@@ -12324,6 +20777,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Espathra[] = INCBIN_U32("graphics/pokemon/espathra/front.4bpp.lz");
const u32 gMonPalette_Espathra[] = INCBIN_U32("graphics/pokemon/espathra/normal.gbapal.lz");
@@ -12333,6 +20793,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_FLITTLE
#if P_FAMILY_TINKATINK
@@ -12344,6 +20811,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Tinkatuff[] = INCBIN_U32("graphics/pokemon/tinkatuff/front.4bpp.lz");
const u32 gMonPalette_Tinkatuff[] = INCBIN_U32("graphics/pokemon/tinkatuff/normal.gbapal.lz");
@@ -12353,6 +20827,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Tinkaton[] = INCBIN_U32("graphics/pokemon/tinkaton/front.4bpp.lz");
const u32 gMonPalette_Tinkaton[] = INCBIN_U32("graphics/pokemon/tinkaton/normal.gbapal.lz");
@@ -12362,6 +20843,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_TINKATINK
#if P_FAMILY_WIGLETT
@@ -12373,6 +20861,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Wugtrio[] = INCBIN_U32("graphics/pokemon/wugtrio/front.4bpp.lz");
const u32 gMonPalette_Wugtrio[] = INCBIN_U32("graphics/pokemon/wugtrio/normal.gbapal.lz");
@@ -12382,6 +20877,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_WIGLETT
#if P_FAMILY_BOMBIRDIER
@@ -12393,6 +20895,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_BOMBIRDIER
#if P_FAMILY_FINIZEN
@@ -12404,6 +20913,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_PalafinZero[] = INCBIN_U32("graphics/pokemon/palafin/front.4bpp.lz");
const u32 gMonPalette_PalafinZero[] = INCBIN_U32("graphics/pokemon/palafin/normal.gbapal.lz");
@@ -12413,12 +20929,26 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_PalafinHero[] = INCBIN_U32("graphics/pokemon/palafin/hero/front.4bpp.lz");
const u32 gMonPalette_PalafinHero[] = INCBIN_U32("graphics/pokemon/palafin/hero/normal.gbapal.lz");
const u32 gMonBackPic_PalafinHero[] = INCBIN_U32("graphics/pokemon/palafin/hero/back.4bpp.lz");
const u32 gMonShinyPalette_PalafinHero[] = INCBIN_U32("graphics/pokemon/palafin/hero/shiny.gbapal.lz");
const u8 gMonIcon_PalafinHero[] = INCBIN_U8("graphics/pokemon/palafin/hero/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // 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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_FINIZEN
#if P_FAMILY_VAROOM
@@ -12430,6 +20960,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Revavroom[] = INCBIN_U32("graphics/pokemon/revavroom/front.4bpp.lz");
const u32 gMonPalette_Revavroom[] = INCBIN_U32("graphics/pokemon/revavroom/normal.gbapal.lz");
@@ -12439,6 +20976,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_VAROOM
#if P_FAMILY_CYCLIZAR
@@ -12450,6 +20994,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_CYCLIZAR
#if P_FAMILY_ORTHWORM
@@ -12461,6 +21012,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_ORTHWORM
#if P_FAMILY_GLIMMET
@@ -12472,6 +21030,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Glimmora[] = INCBIN_U32("graphics/pokemon/glimmora/front.4bpp.lz");
const u32 gMonPalette_Glimmora[] = INCBIN_U32("graphics/pokemon/glimmora/normal.gbapal.lz");
@@ -12481,6 +21046,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_GLIMMET
#if P_FAMILY_GREAVARD
@@ -12492,6 +21064,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Houndstone[] = INCBIN_U32("graphics/pokemon/houndstone/front.4bpp.lz");
const u32 gMonPalette_Houndstone[] = INCBIN_U32("graphics/pokemon/houndstone/normal.gbapal.lz");
@@ -12501,6 +21080,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_GREAVARD
#if P_FAMILY_FLAMIGO
@@ -12512,6 +21098,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_FLAMIGO
#if P_FAMILY_CETODDLE
@@ -12523,6 +21116,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Cetitan[] = INCBIN_U32("graphics/pokemon/cetitan/front.4bpp.lz");
const u32 gMonPalette_Cetitan[] = INCBIN_U32("graphics/pokemon/cetitan/normal.gbapal.lz");
@@ -12532,6 +21132,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_CETODDLE
#if P_FAMILY_VELUZA
@@ -12543,6 +21150,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_VELUZA
#if P_FAMILY_DONDOZO
@@ -12554,6 +21168,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_DONDOZO
#if P_FAMILY_TATSUGIRI
@@ -12565,18 +21186,39 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_TatsugiriDroopy[] = INCBIN_U32("graphics/pokemon/tatsugiri/droopy/front.4bpp.lz");
const u32 gMonPalette_TatsugiriDroopy[] = INCBIN_U32("graphics/pokemon/tatsugiri/droopy/normal.gbapal.lz");
const u32 gMonBackPic_TatsugiriDroopy[] = INCBIN_U32("graphics/pokemon/tatsugiri/droopy/back.4bpp.lz");
const u32 gMonShinyPalette_TatsugiriDroopy[] = INCBIN_U32("graphics/pokemon/tatsugiri/droopy/shiny.gbapal.lz");
const u8 gMonIcon_TatsugiriDroopy[] = INCBIN_U8("graphics/pokemon/tatsugiri/droopy/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // 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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_TatsugiriStretchy[] = INCBIN_U32("graphics/pokemon/tatsugiri/stretchy/front.4bpp.lz");
const u32 gMonPalette_TatsugiriStretchy[] = INCBIN_U32("graphics/pokemon/tatsugiri/stretchy/normal.gbapal.lz");
const u32 gMonBackPic_TatsugiriStretchy[] = INCBIN_U32("graphics/pokemon/tatsugiri/stretchy/back.4bpp.lz");
const u32 gMonShinyPalette_TatsugiriStretchy[] = INCBIN_U32("graphics/pokemon/tatsugiri/stretchy/shiny.gbapal.lz");
const u8 gMonIcon_TatsugiriStretchy[] = INCBIN_U8("graphics/pokemon/tatsugiri/stretchy/icon.4bpp");
+#if OW_POKEMON_OBJECT_EVENTS
+ // 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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_DONDOZO
#if P_FAMILY_GREAT_TUSK
@@ -12588,6 +21230,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_GREAT_TUSK
#if P_FAMILY_SCREAM_TAIL
@@ -12599,6 +21248,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SCREAM_TAIL
#if P_FAMILY_BRUTE_BONNET
@@ -12610,6 +21266,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_BRUTE_BONNET
#if P_FAMILY_FLUTTER_MANE
@@ -12621,6 +21284,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_FLUTTER_MANE
#if P_FAMILY_SLITHER_WING
@@ -12632,6 +21302,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SLITHER_WING
#if P_FAMILY_SANDY_SHOCKS
@@ -12643,6 +21320,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_SANDY_SHOCKS
#if P_FAMILY_IRON_TREADS
@@ -12654,6 +21338,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_IRON_TREADS
#if P_FAMILY_IRON_BUNDLE
@@ -12665,6 +21356,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_IRON_BUNDLE
#if P_FAMILY_IRON_HANDS
@@ -12676,6 +21374,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_IRON_HANDS
#if P_FAMILY_IRON_JUGULIS
@@ -12687,6 +21392,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_IRON_JUGULIS
#if P_FAMILY_IRON_MOTH
@@ -12698,6 +21410,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_IRON_MOTH
#if P_FAMILY_IRON_THORNS
@@ -12709,6 +21428,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_IRON_THORNS
#if P_FAMILY_FRIGIBAX
@@ -12720,6 +21446,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Arctibax[] = INCBIN_U32("graphics/pokemon/arctibax/front.4bpp.lz");
const u32 gMonPalette_Arctibax[] = INCBIN_U32("graphics/pokemon/arctibax/normal.gbapal.lz");
@@ -12729,6 +21462,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Baxcalibur[] = INCBIN_U32("graphics/pokemon/baxcalibur/front.4bpp.lz");
const u32 gMonPalette_Baxcalibur[] = INCBIN_U32("graphics/pokemon/baxcalibur/normal.gbapal.lz");
@@ -12738,6 +21478,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_FRIGIBAX
#if P_FAMILY_GIMMIGHOUL
@@ -12749,6 +21496,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_GimmighoulRoaming[] = INCBIN_U32("graphics/pokemon/gimmighoul/roaming/front.4bpp.lz");
const u32 gMonPalette_GimmighoulRoaming[] = INCBIN_U32("graphics/pokemon/gimmighoul/roaming/normal.gbapal.lz");
@@ -12758,6 +21512,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Gholdengo[] = INCBIN_U32("graphics/pokemon/gholdengo/front.4bpp.lz");
const u32 gMonPalette_Gholdengo[] = INCBIN_U32("graphics/pokemon/gholdengo/normal.gbapal.lz");
@@ -12767,6 +21528,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_GIMMIGHOUL
#if P_FAMILY_WO_CHIEN
@@ -12778,6 +21546,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_WO_CHIEN
#if P_FAMILY_CHIEN_PAO
@@ -12789,6 +21564,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_CHIEN_PAO
#if P_FAMILY_TING_LU
@@ -12800,6 +21582,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_TING_LU
#if P_FAMILY_CHI_YU
@@ -12811,6 +21600,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_CHI_YU
#if P_FAMILY_ROARING_MOON
@@ -12822,6 +21618,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_ROARING_MOON
#if P_FAMILY_IRON_VALIANT
@@ -12833,6 +21636,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_IRON_VALIANT
#if P_FAMILY_KORAIDON
@@ -12844,6 +21654,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_KORAIDON
#if P_FAMILY_MIRAIDON
@@ -12855,6 +21672,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_MIRAIDON
#if P_FAMILY_WALKING_WAKE
@@ -12866,6 +21690,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_WALKING_WAKE
#if P_FAMILY_IRON_LEAVES
@@ -12877,6 +21708,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_IRON_LEAVES
#if P_FAMILY_POLTCHAGEIST
@@ -12888,6 +21726,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_Sinistcha[] = INCBIN_U32("graphics/pokemon/sinistcha/front.4bpp.lz");
const u32 gMonPalette_Sinistcha[] = INCBIN_U32("graphics/pokemon/sinistcha/normal.gbapal.lz");
@@ -12897,6 +21742,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_POLTCHAGEIST
#if P_FAMILY_OKIDOGI
@@ -12908,6 +21760,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_OKIDOGI
#if P_FAMILY_MUNKIDORI
@@ -12919,6 +21778,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_MUNKIDORI
#if P_FAMILY_FEZANDIPITI
@@ -12930,6 +21796,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_FEZANDIPITI
#if P_FAMILY_OGERPON
@@ -12960,25 +21833,32 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
const u32 gMonShinyPalette_OgerponCornerstoneMask[] = INCBIN_U32("graphics/pokemon/ogerpon/cornerstone/shiny.gbapal.lz");
const u8 gMonIcon_OgerponCornerstoneMask[] = INCBIN_U8("graphics/pokemon/ogerpon/cornerstone/icon.4bpp");
- // const u32 gMonFrontPic_OgerponTealMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/tera/front.4bpp.lz");
- // const u32 gMonPalette_OgerponTealMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/tera/normal.gbapal.lz");
- // const u32 gMonBackPic_OgerponTealMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/tera/back.4bpp.lz");
- // const u32 gMonShinyPalette_OgerponTealMaskTera[]] = INCBIN_U32("graphics/pokemon/ogerpon/tera/shiny.gbapal.lz");
-
- // const u32 gMonFrontPic_OgerponWellspringMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/wellspring/tera/front.4bpp.lz");
- // const u32 gMonPalette_OgerponWellspringMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/wellspring/tera/normal.gbapal.lz");
- // const u32 gMonBackPic_OgerponWellspringMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/wellspring/tera/back.4bpp.lz");
- // const u32 gMonShinyPalette_OgerponWellspringMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/wellspring/tera/shiny.gbapal.lz");
-
- // const u32 gMonFrontPic_OgerponHearthflameMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/hearthflame/tera/front.4bpp.lz");
- // const u32 gMonPalette_OgerponHearthflameMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/hearthflame/tera/normal.gbapal.lz");
- // const u32 gMonBackPic_OgerponHearthflameMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/hearthflame/tera/back.4bpp.lz");
- // const u32 gMonShinyPalette_OgerponHearthflameMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/hearthflame/tera/shiny.gbapal.lz");
-
- // const u32 gMonFrontPic_OgerponCornerstoneMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/cornerstone/tera/front.4bpp.lz");
- // const u32 gMonPalette_OgerponCornerstoneMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/cornerstone/tera/normal.gbapal.lz");
- // const u32 gMonBackPic_OgerponCornerstoneMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/cornerstone/tera/back.4bpp.lz");
- // const u32 gMonShinyPalette_OgerponCornerstoneMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/cornerstone/tera/shiny.gbapal.lz");
+ const u32 gMonFrontPic_OgerponTealMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/tera/front.4bpp.lz");
+ const u32 gMonPalette_OgerponTealMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/tera/normal.gbapal.lz");
+ const u32 gMonBackPic_OgerponTealMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/tera/back.4bpp.lz");
+ const u32 gMonShinyPalette_OgerponTealMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/tera/shiny.gbapal.lz");
+
+ const u32 gMonFrontPic_OgerponWellspringMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/wellspring/tera/front.4bpp.lz");
+ const u32 gMonPalette_OgerponWellspringMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/wellspring/tera/normal.gbapal.lz");
+ const u32 gMonBackPic_OgerponWellspringMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/wellspring/tera/back.4bpp.lz");
+ const u32 gMonShinyPalette_OgerponWellspringMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/wellspring/tera/shiny.gbapal.lz");
+
+ const u32 gMonFrontPic_OgerponHearthflameMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/hearthflame/tera/front.4bpp.lz");
+ const u32 gMonPalette_OgerponHearthflameMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/hearthflame/tera/normal.gbapal.lz");
+ const u32 gMonBackPic_OgerponHearthflameMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/hearthflame/tera/back.4bpp.lz");
+ const u32 gMonShinyPalette_OgerponHearthflameMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/hearthflame/tera/shiny.gbapal.lz");
+
+ const u32 gMonFrontPic_OgerponCornerstoneMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/cornerstone/tera/front.4bpp.lz");
+ const u32 gMonPalette_OgerponCornerstoneMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/cornerstone/tera/normal.gbapal.lz");
+ const u32 gMonBackPic_OgerponCornerstoneMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/cornerstone/tera/back.4bpp.lz");
+ const u32 gMonShinyPalette_OgerponCornerstoneMaskTera[] = INCBIN_U32("graphics/pokemon/ogerpon/cornerstone/tera/shiny.gbapal.lz");
+
+#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");
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_OGERPON
#if P_FAMILY_GOUGING_FIRE
@@ -12990,6 +21870,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_GOUGING_FIRE
#if P_FAMILY_RAGING_BOLT
@@ -13001,6 +21888,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_RAGING_BOLT
#if P_FAMILY_IRON_BOULDER
@@ -13012,6 +21906,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_IRON_BOULDER
#if P_FAMILY_IRON_CROWN
@@ -13023,6 +21924,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_IRON_CROWN
#if P_FAMILY_TERAPAGOS
@@ -13034,6 +21942,13 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
const u32 gMonFrontPic_TerapagosTerastal[] = INCBIN_U32("graphics/pokemon/terapagos/terastal/anim_front.4bpp.lz");
const u32 gMonPalette_TerapagosTerastal[] = INCBIN_U32("graphics/pokemon/terapagos/terastal/normal.gbapal.lz");
@@ -13043,15 +21958,29 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
const u8 gMonFootprint_TerapagosTerastal[] = INCBIN_U8("graphics/pokemon/terapagos/terastal/footprint.1bpp");
#endif //P_FOOTPRINTS
-
- // const u32 gMonFrontPic_TerapagosStellar[] = INCBIN_U32("graphics/pokemon/terapagos/stellar/front.4bpp.lz");
- // const u32 gMonPalette_TerapagosStellar[] = INCBIN_U32("graphics/pokemon/terapagos/stellar/normal.gbapal.lz");
- // const u32 gMonBackPic_TerapagosStellar[] = INCBIN_U32("graphics/pokemon/terapagos/stellar/back.4bpp.lz");
- // const u32 gMonShinyPalette_TerapagosStellar[] = INCBIN_U32("graphics/pokemon/terapagos/stellar/shiny.gbapal.lz");
+#if OW_POKEMON_OBJECT_EVENTS
+ // 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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
+
+ const u32 gMonFrontPic_TerapagosStellar[] = INCBIN_U32("graphics/pokemon/terapagos/stellar/front.4bpp.lz");
+ const u32 gMonPalette_TerapagosStellar[] = INCBIN_U32("graphics/pokemon/terapagos/stellar/normal.gbapal.lz");
+ const u32 gMonBackPic_TerapagosStellar[] = INCBIN_U32("graphics/pokemon/terapagos/stellar/back.4bpp.lz");
+ const u32 gMonShinyPalette_TerapagosStellar[] = INCBIN_U32("graphics/pokemon/terapagos/stellar/shiny.gbapal.lz");
const u8 gMonIcon_TerapagosStellar[] = INCBIN_U8("graphics/pokemon/terapagos/stellar/icon.4bpp");
#if P_FOOTPRINTS
const u8 gMonFootprint_TerapagosStellar[] = INCBIN_U8("graphics/pokemon/terapagos/stellar/footprint.1bpp");
#endif //P_FOOTPRINTS
+#if OW_POKEMON_OBJECT_EVENTS
+ // 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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_TERAPAGOS
#if P_FAMILY_PECHARUNT
@@ -13063,9 +21992,15 @@ const u8 gMonFootprint_QuestionMark[] = INCBIN_U8("graphics/pokemon/question_mar
#if P_FOOTPRINTS
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");
+#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");
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES
+#endif //OW_POKEMON_OBJECT_EVENTS
#endif //P_FAMILY_PECHARUNT
const u32 gMonFrontPic_Egg[] = INCBIN_U32("graphics/pokemon/egg/anim_front.4bpp.lz");
const u32 gMonPalette_Egg[] = INCBIN_U32("graphics/pokemon/egg/normal.gbapal.lz");
const u8 gMonIcon_Egg[] = INCBIN_U8("graphics/pokemon/egg/icon.4bpp");
-
diff --git a/src/data/graphics/trainers.h b/src/data/graphics/trainers.h
index 309fd0b80c98..2a7baf1bc8ab 100644
--- a/src/data/graphics/trainers.h
+++ b/src/data/graphics/trainers.h
@@ -423,16 +423,38 @@ static const union AnimCmd sAnimCmd_Kanto[] =
ANIMCMD_END,
};
+static const union AnimCmd sAnimCmd_Point_HGSS[] =
+{
+ ANIMCMD_FRAME(3, 9),
+ ANIMCMD_FRAME(0, 9),
+ ANIMCMD_FRAME(2, 24),
+ ANIMCMD_FRAME(2, 24),
+ ANIMCMD_FRAME(3, 50),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd sAnimCmd_Point_HGSS_Red_Leaf[] =
+{
+ ANIMCMD_FRAME(0, 9),
+ ANIMCMD_FRAME(1, 9),
+ ANIMCMD_FRAME(3, 24),
+ ANIMCMD_FRAME(3, 24),
+ ANIMCMD_FRAME(0, 50),
+ ANIMCMD_END,
+};
+
static const union AnimCmd *const sBackAnims_Hoenn[] =
{
sAnim_GeneralFrame3,
sAnimCmd_Hoenn,
+ sAnimCmd_Point_HGSS,
};
static const union AnimCmd *const sBackAnims_Kanto[] =
{
sAnim_GeneralFrame0,
sAnimCmd_Kanto,
+ sAnimCmd_Point_HGSS_Red_Leaf,
};
const struct SpriteFrameImage gTrainerBackPicTable_Brendan[] =
diff --git a/src/data/item_icon_table.h b/src/data/item_icon_table.h
index d452612c1ba0..8b137891791f 100644
--- a/src/data/item_icon_table.h
+++ b/src/data/item_icon_table.h
@@ -1,878 +1 @@
-const u32 *const gItemIconTable[ITEMS_COUNT + 1][2] =
-{
- [ITEM_NONE] = {gItemIcon_QuestionMark, gItemIconPalette_QuestionMark},
- // Poké Balls
- [ITEM_POKE_BALL] = {gItemIcon_PokeBall, gItemIconPalette_PokeBall},
- [ITEM_GREAT_BALL] = {gItemIcon_GreatBall, gItemIconPalette_GreatBall},
- [ITEM_ULTRA_BALL] = {gItemIcon_UltraBall, gItemIconPalette_UltraBall},
- [ITEM_MASTER_BALL] = {gItemIcon_MasterBall, gItemIconPalette_MasterBall},
- [ITEM_PREMIER_BALL] = {gItemIcon_PremierBall, gItemIconPalette_LuxuryBall},
- [ITEM_HEAL_BALL] = {gItemIcon_HealBall, gItemIconPalette_HealBall},
- [ITEM_NET_BALL] = {gItemIcon_NetBall, gItemIconPalette_NetBall},
- [ITEM_NEST_BALL] = {gItemIcon_NestBall, gItemIconPalette_NestBall},
- [ITEM_DIVE_BALL] = {gItemIcon_DiveBall, gItemIconPalette_DiveBall},
- [ITEM_DUSK_BALL] = {gItemIcon_DuskBall, gItemIconPalette_DuskBall},
- [ITEM_TIMER_BALL] = {gItemIcon_TimerBall, gItemIconPalette_RepeatBall},
- [ITEM_QUICK_BALL] = {gItemIcon_QuickBall, gItemIconPalette_QuickBall},
- [ITEM_REPEAT_BALL] = {gItemIcon_RepeatBall, gItemIconPalette_RepeatBall},
- [ITEM_LUXURY_BALL] = {gItemIcon_LuxuryBall, gItemIconPalette_LuxuryBall},
- [ITEM_LEVEL_BALL] = {gItemIcon_LevelBall, gItemIconPalette_LevelBall},
- [ITEM_LURE_BALL] = {gItemIcon_LureBall, gItemIconPalette_LureBall},
- [ITEM_MOON_BALL] = {gItemIcon_MoonBall, gItemIconPalette_MoonBall},
- [ITEM_FRIEND_BALL] = {gItemIcon_FriendBall, gItemIconPalette_FriendBall},
- [ITEM_LOVE_BALL] = {gItemIcon_LoveBall, gItemIconPalette_LoveBall},
- [ITEM_FAST_BALL] = {gItemIcon_FastBall, gItemIconPalette_FastBall},
- [ITEM_HEAVY_BALL] = {gItemIcon_HeavyBall, gItemIconPalette_HeavyBall},
- [ITEM_DREAM_BALL] = {gItemIcon_DreamBall, gItemIconPalette_DreamBall},
- [ITEM_SAFARI_BALL] = {gItemIcon_SafariBall, gItemIconPalette_SafariBall},
- [ITEM_SPORT_BALL] = {gItemIcon_SportBall, gItemIconPalette_SportBall},
- [ITEM_PARK_BALL] = {gItemIcon_ParkBall, gItemIconPalette_ParkBall},
- [ITEM_BEAST_BALL] = {gItemIcon_BeastBall, gItemIconPalette_BeastBall},
- [ITEM_CHERISH_BALL] = {gItemIcon_CherishBall, gItemIconPalette_CherishBall},
- // Medicine
- [ITEM_POTION] = {gItemIcon_Potion, gItemIconPalette_Potion},
- [ITEM_SUPER_POTION] = {gItemIcon_Potion, gItemIconPalette_SuperPotion},
- [ITEM_HYPER_POTION] = {gItemIcon_Potion, gItemIconPalette_HyperPotion},
- [ITEM_MAX_POTION] = {gItemIcon_LargePotion, gItemIconPalette_MaxPotion},
- [ITEM_FULL_RESTORE] = {gItemIcon_LargePotion, gItemIconPalette_FullRestore},
- [ITEM_REVIVE] = {gItemIcon_Revive, gItemIconPalette_Revive},
- [ITEM_MAX_REVIVE] = {gItemIcon_MaxRevive, gItemIconPalette_Revive},
- [ITEM_FRESH_WATER] = {gItemIcon_FreshWater, gItemIconPalette_FreshWater},
- [ITEM_SODA_POP] = {gItemIcon_SodaPop, gItemIconPalette_SodaPop},
- [ITEM_LEMONADE] = {gItemIcon_Lemonade, gItemIconPalette_Lemonade},
- [ITEM_MOOMOO_MILK] = {gItemIcon_MoomooMilk, gItemIconPalette_MoomooMilk},
- [ITEM_ENERGY_POWDER] = {gItemIcon_Powder, gItemIconPalette_EnergyPowder},
- [ITEM_ENERGY_ROOT] = {gItemIcon_EnergyRoot, gItemIconPalette_EnergyRoot},
- [ITEM_HEAL_POWDER] = {gItemIcon_Powder, gItemIconPalette_HealPowder},
- [ITEM_REVIVAL_HERB] = {gItemIcon_RevivalHerb, gItemIconPalette_RevivalHerb},
- [ITEM_ANTIDOTE] = {gItemIcon_Antidote, gItemIconPalette_Antidote},
- [ITEM_PARALYZE_HEAL] = {gItemIcon_StatusHeal, gItemIconPalette_ParalyzeHeal},
- [ITEM_BURN_HEAL] = {gItemIcon_StatusHeal, gItemIconPalette_BurnHeal},
- [ITEM_ICE_HEAL] = {gItemIcon_StatusHeal, gItemIconPalette_IceHeal},
- [ITEM_AWAKENING] = {gItemIcon_StatusHeal, gItemIconPalette_Awakening},
- [ITEM_FULL_HEAL] = {gItemIcon_FullHeal, gItemIconPalette_FullHeal},
- [ITEM_ETHER] = {gItemIcon_Ether, gItemIconPalette_Ether},
- [ITEM_MAX_ETHER] = {gItemIcon_Ether, gItemIconPalette_MaxEther},
- [ITEM_ELIXIR] = {gItemIcon_Ether, gItemIconPalette_Elixir},
- [ITEM_MAX_ELIXIR] = {gItemIcon_Ether, gItemIconPalette_MaxElixir},
- [ITEM_BERRY_JUICE] = {gItemIcon_BerryJuice, gItemIconPalette_BerryJuice},
- [ITEM_SACRED_ASH] = {gItemIcon_SacredAsh, gItemIconPalette_SacredAsh},
- [ITEM_SWEET_HEART] = {gItemIcon_SweetHeart, gItemIconPalette_SweetHeart},
- [ITEM_MAX_HONEY] = {gItemIcon_MaxHoney, gItemIconPalette_MaxHoney},
- // Regional Specialties
- [ITEM_PEWTER_CRUNCHIES] = {gItemIcon_PewterCrunchies, gItemIconPalette_PewterCrunchies},
- [ITEM_RAGE_CANDY_BAR] = {gItemIcon_RageCandyBar, gItemIconPalette_RageCandyBar},
- [ITEM_LAVA_COOKIE] = {gItemIcon_LavaCookie, gItemIconPalette_LavaCookieAndLetter},
- [ITEM_OLD_GATEAU] = {gItemIcon_OldGateau, gItemIconPalette_OldGateau},
- [ITEM_CASTELIACONE] = {gItemIcon_Casteliacone, gItemIconPalette_Casteliacone},
- [ITEM_LUMIOSE_GALETTE] = {gItemIcon_LumioseGalette, gItemIconPalette_LumioseGalette},
- [ITEM_SHALOUR_SABLE] = {gItemIcon_ShalourSable, gItemIconPalette_ShalourSable},
- [ITEM_BIG_MALASADA] = {gItemIcon_BigMalasada, gItemIconPalette_BigMalasada},
- // Vitamins
- [ITEM_HP_UP] = {gItemIcon_HPUp, gItemIconPalette_HPUp},
- [ITEM_PROTEIN] = {gItemIcon_Vitamin, gItemIconPalette_Protein},
- [ITEM_IRON] = {gItemIcon_Vitamin, gItemIconPalette_Iron},
- [ITEM_CALCIUM] = {gItemIcon_Vitamin, gItemIconPalette_Calcium},
- [ITEM_ZINC] = {gItemIcon_Vitamin, gItemIconPalette_Zinc},
- [ITEM_CARBOS] = {gItemIcon_Vitamin, gItemIconPalette_Carbos},
- [ITEM_PP_UP] = {gItemIcon_PPUp, gItemIconPalette_PPUp},
- [ITEM_PP_MAX] = {gItemIcon_PPMax, gItemIconPalette_PPMax},
- // EV Feathers
- [ITEM_HEALTH_FEATHER] = {gItemIcon_HealthFeather, gItemIconPalette_HealthFeather},
- [ITEM_MUSCLE_FEATHER] = {gItemIcon_MuscleFeather, gItemIconPalette_MuscleFeather},
- [ITEM_RESIST_FEATHER] = {gItemIcon_ResistFeather, gItemIconPalette_ResistFeather},
- [ITEM_GENIUS_FEATHER] = {gItemIcon_GeniusFeather, gItemIconPalette_GeniusFeather},
- [ITEM_CLEVER_FEATHER] = {gItemIcon_CleverFeather, gItemIconPalette_CleverFeather},
- [ITEM_SWIFT_FEATHER] = {gItemIcon_SwiftFeather, gItemIconPalette_SwiftFeather},
- // Ability Modifiers
- [ITEM_ABILITY_CAPSULE] = {gItemIcon_AbilityCapsule, gItemIconPalette_AbilityCapsule},
- [ITEM_ABILITY_PATCH] = {gItemIcon_AbilityPatch, gItemIconPalette_AbilityPatch},
- // Mints
- [ITEM_LONELY_MINT] = {gItemIcon_Mint, gItemIconPalette_RedMint},
- [ITEM_ADAMANT_MINT] = {gItemIcon_Mint, gItemIconPalette_RedMint},
- [ITEM_NAUGHTY_MINT] = {gItemIcon_Mint, gItemIconPalette_RedMint},
- [ITEM_BRAVE_MINT] = {gItemIcon_Mint, gItemIconPalette_RedMint},
- [ITEM_BOLD_MINT] = {gItemIcon_Mint, gItemIconPalette_BlueMint},
- [ITEM_IMPISH_MINT] = {gItemIcon_Mint, gItemIconPalette_BlueMint},
- [ITEM_LAX_MINT] = {gItemIcon_Mint, gItemIconPalette_BlueMint},
- [ITEM_RELAXED_MINT] = {gItemIcon_Mint, gItemIconPalette_BlueMint},
- [ITEM_MODEST_MINT] = {gItemIcon_Mint, gItemIconPalette_LightBlueMint},
- [ITEM_MILD_MINT] = {gItemIcon_Mint, gItemIconPalette_LightBlueMint},
- [ITEM_RASH_MINT] = {gItemIcon_Mint, gItemIconPalette_LightBlueMint},
- [ITEM_QUIET_MINT] = {gItemIcon_Mint, gItemIconPalette_LightBlueMint},
- [ITEM_CALM_MINT] = {gItemIcon_Mint, gItemIconPalette_PinkMint},
- [ITEM_GENTLE_MINT] = {gItemIcon_Mint, gItemIconPalette_PinkMint},
- [ITEM_CAREFUL_MINT] = {gItemIcon_Mint, gItemIconPalette_PinkMint},
- [ITEM_SASSY_MINT] = {gItemIcon_Mint, gItemIconPalette_PinkMint},
- [ITEM_TIMID_MINT] = {gItemIcon_Mint, gItemIconPalette_GreenMint},
- [ITEM_HASTY_MINT] = {gItemIcon_Mint, gItemIconPalette_GreenMint},
- [ITEM_JOLLY_MINT] = {gItemIcon_Mint, gItemIconPalette_GreenMint},
- [ITEM_NAIVE_MINT] = {gItemIcon_Mint, gItemIconPalette_GreenMint},
- [ITEM_SERIOUS_MINT] = {gItemIcon_Mint, gItemIconPalette_YellowMint},
- // Candy
- [ITEM_RARE_CANDY] = {gItemIcon_RareCandy, gItemIconPalette_RareCandy},
- [ITEM_EXP_CANDY_XS] = {gItemIcon_ExpCandyXS, gItemIconPalette_ExpCandies},
- [ITEM_EXP_CANDY_S] = {gItemIcon_ExpCandyS, gItemIconPalette_ExpCandies},
- [ITEM_EXP_CANDY_M] = {gItemIcon_ExpCandyM, gItemIconPalette_ExpCandies},
- [ITEM_EXP_CANDY_L] = {gItemIcon_ExpCandyL, gItemIconPalette_ExpCandies},
- [ITEM_EXP_CANDY_XL] = {gItemIcon_ExpCandyXL, gItemIconPalette_ExpCandies},
- [ITEM_DYNAMAX_CANDY] = {gItemIcon_DynamaxCandy, gItemIconPalette_DynamaxCandy},
- // Medicinal Flutes
- [ITEM_BLUE_FLUTE] = {gItemIcon_Flute, gItemIconPalette_BlueFlute},
- [ITEM_YELLOW_FLUTE] = {gItemIcon_Flute, gItemIconPalette_YellowFlute},
- [ITEM_RED_FLUTE] = {gItemIcon_Flute, gItemIconPalette_RedFlute},
- // Encounter-modifying Flutes
- [ITEM_BLACK_FLUTE] = {gItemIcon_Flute, gItemIconPalette_BlackFlute},
- [ITEM_WHITE_FLUTE] = {gItemIcon_Flute, gItemIconPalette_WhiteFlute},
- // Encounter Modifiers
- [ITEM_REPEL] = {gItemIcon_Repel, gItemIconPalette_Repel},
- [ITEM_SUPER_REPEL] = {gItemIcon_Repel, gItemIconPalette_SuperRepel},
- [ITEM_MAX_REPEL] = {gItemIcon_Repel, gItemIconPalette_MaxRepel},
- [ITEM_LURE] = {gItemIcon_Lure, gItemIconPalette_Lure},
- [ITEM_SUPER_LURE] = {gItemIcon_Lure, gItemIconPalette_SuperLure},
- [ITEM_MAX_LURE] = {gItemIcon_Lure, gItemIconPalette_MaxLure},
- [ITEM_ESCAPE_ROPE] = {gItemIcon_EscapeRope, gItemIconPalette_EscapeRope},
- // X Items
- [ITEM_X_ATTACK] = {gItemIcon_BattleStatItem, gItemIconPalette_XAttack},
- [ITEM_X_DEFENSE] = {gItemIcon_BattleStatItem, gItemIconPalette_XDefend},
- [ITEM_X_SP_ATK] = {gItemIcon_BattleStatItem, gItemIconPalette_XSpecial},
- [ITEM_X_SP_DEF] = {gItemIcon_XSpecialDefense, gItemIconPalette_XSpecialDefense},
- [ITEM_X_SPEED] = {gItemIcon_BattleStatItem, gItemIconPalette_XSpeed},
- [ITEM_X_ACCURACY] = {gItemIcon_BattleStatItem, gItemIconPalette_XAccuracy},
- [ITEM_DIRE_HIT] = {gItemIcon_BattleStatItem, gItemIconPalette_DireHit},
- [ITEM_GUARD_SPEC] = {gItemIcon_BattleStatItem, gItemIconPalette_GuardSpec},
- // Escape Items
- [ITEM_POKE_DOLL] = {gItemIcon_PokeDoll, gItemIconPalette_PokeDoll},
- [ITEM_FLUFFY_TAIL] = {gItemIcon_FluffyTail, gItemIconPalette_FluffyTail},
- [ITEM_POKE_TOY] = {gItemIcon_PokeToy, gItemIconPalette_PokeToy},
- [ITEM_MAX_MUSHROOMS] = {gItemIcon_MaxMushrooms, gItemIconPalette_MaxMushrooms},
- // Treasures
- [ITEM_BOTTLE_CAP] = {gItemIcon_BottleCap, gItemIconPalette_BottleCap},
- [ITEM_GOLD_BOTTLE_CAP] = {gItemIcon_BottleCap, gItemIconPalette_GoldBottleCap},
- [ITEM_NUGGET] = {gItemIcon_Nugget, gItemIconPalette_Nugget},
- [ITEM_BIG_NUGGET] = {gItemIcon_BigNugget, gItemIconPalette_BigNugget},
- [ITEM_TINY_MUSHROOM] = {gItemIcon_TinyMushroom, gItemIconPalette_Mushroom},
- [ITEM_BIG_MUSHROOM] = {gItemIcon_BigMushroom, gItemIconPalette_Mushroom},
- [ITEM_BALM_MUSHROOM] = {gItemIcon_BalmMushroom, gItemIconPalette_BalmMushroom},
- [ITEM_PEARL] = {gItemIcon_Pearl, gItemIconPalette_Pearl},
- [ITEM_BIG_PEARL] = {gItemIcon_BigPearl, gItemIconPalette_Pearl},
- [ITEM_PEARL_STRING] = {gItemIcon_PearlString, gItemIconPalette_PearlString},
- [ITEM_STARDUST] = {gItemIcon_Stardust, gItemIconPalette_Star},
- [ITEM_STAR_PIECE] = {gItemIcon_StarPiece, gItemIconPalette_Star},
- [ITEM_COMET_SHARD] = {gItemIcon_CometShard, gItemIconPalette_CometShard},
- [ITEM_SHOAL_SALT] = {gItemIcon_Powder, gItemIconPalette_ShoalSalt},
- [ITEM_SHOAL_SHELL] = {gItemIcon_ShoalShell, gItemIconPalette_Shell},
- [ITEM_RED_SHARD] = {gItemIcon_Shard, gItemIconPalette_RedShard},
- [ITEM_BLUE_SHARD] = {gItemIcon_Shard, gItemIconPalette_BlueShard},
- [ITEM_YELLOW_SHARD] = {gItemIcon_Shard, gItemIconPalette_YellowShard},
- [ITEM_GREEN_SHARD] = {gItemIcon_Shard, gItemIconPalette_GreenShard},
- [ITEM_HEART_SCALE] = {gItemIcon_HeartScale, gItemIconPalette_HeartScale},
- [ITEM_HONEY] = {gItemIcon_Honey, gItemIconPalette_Honey},
- [ITEM_RARE_BONE] = {gItemIcon_RareBone, gItemIconPalette_RareBone},
- [ITEM_ODD_KEYSTONE] = {gItemIcon_OddKeystone, gItemIconPalette_OddKeystone},
- [ITEM_PRETTY_FEATHER] = {gItemIcon_PrettyFeather, gItemIconPalette_PrettyFeather},
- [ITEM_RELIC_COPPER] = {gItemIcon_RelicCoin, gItemIconPalette_RelicCopper},
- [ITEM_RELIC_SILVER] = {gItemIcon_RelicCoin, gItemIconPalette_RelicSilver},
- [ITEM_RELIC_GOLD] = {gItemIcon_RelicCoin, gItemIconPalette_RelicGold},
- [ITEM_RELIC_VASE] = {gItemIcon_RelicVase, gItemIconPalette_Relics},
- [ITEM_RELIC_BAND] = {gItemIcon_RelicBand, gItemIconPalette_Relics},
- [ITEM_RELIC_STATUE] = {gItemIcon_RelicStatue, gItemIconPalette_Relics},
- [ITEM_RELIC_CROWN] = {gItemIcon_RelicCrown, gItemIconPalette_Relics},
- [ITEM_STRANGE_SOUVENIR] = {gItemIcon_StrangeSouvenir, gItemIconPalette_StrangeSouvenir},
- // Fossils
- [ITEM_HELIX_FOSSIL] = {gItemIcon_HelixFossil, gItemIconPalette_KantoFossil},
- [ITEM_DOME_FOSSIL] = {gItemIcon_DomeFossil, gItemIconPalette_KantoFossil},
- [ITEM_OLD_AMBER] = {gItemIcon_OldAmber, gItemIconPalette_OldAmber},
- [ITEM_ROOT_FOSSIL] = {gItemIcon_RootFossil, gItemIconPalette_HoennFossil},
- [ITEM_CLAW_FOSSIL] = {gItemIcon_ClawFossil, gItemIconPalette_HoennFossil},
- [ITEM_ARMOR_FOSSIL] = {gItemIcon_ArmorFossil, gItemIconPalette_ArmorFossil},
- [ITEM_SKULL_FOSSIL] = {gItemIcon_SkullFossil, gItemIconPalette_SkullFossil},
- [ITEM_COVER_FOSSIL] = {gItemIcon_CoverFossil, gItemIconPalette_CoverFossil},
- [ITEM_PLUME_FOSSIL] = {gItemIcon_PlumeFossil, gItemIconPalette_PlumeFossil},
- [ITEM_JAW_FOSSIL] = {gItemIcon_JawFossil, gItemIconPalette_JawFossil},
- [ITEM_SAIL_FOSSIL] = {gItemIcon_SailFossil, gItemIconPalette_SailFossil},
- [ITEM_FOSSILIZED_BIRD] = {gItemIcon_FossilizedBird, gItemIconPalette_FossilizedBird},
- [ITEM_FOSSILIZED_FISH] = {gItemIcon_FossilizedFish, gItemIconPalette_FossilizedFish},
- [ITEM_FOSSILIZED_DRAKE] = {gItemIcon_FossilizedDrake, gItemIconPalette_FossilizedDrake},
- [ITEM_FOSSILIZED_DINO] = {gItemIcon_FossilizedDino, gItemIconPalette_FossilizedDino},
- // Mulch
- [ITEM_GROWTH_MULCH] = {gItemIcon_Mulch, gItemIconPalette_GrowthMulch},
- [ITEM_DAMP_MULCH] = {gItemIcon_Mulch, gItemIconPalette_DampMulch},
- [ITEM_STABLE_MULCH] = {gItemIcon_StableMulch, gItemIconPalette_StableMulch},
- [ITEM_GOOEY_MULCH] = {gItemIcon_Mulch, gItemIconPalette_GooeyMulch},
- [ITEM_RICH_MULCH] = {gItemIcon_Mulch, gItemIconPalette_RichMulch},
- [ITEM_SURPRISE_MULCH] = {gItemIcon_Mulch, gItemIconPalette_SurpriseMulch},
- [ITEM_BOOST_MULCH] = {gItemIcon_Mulch, gItemIconPalette_BoostMulch},
- [ITEM_AMAZE_MULCH] = {gItemIcon_Mulch, gItemIconPalette_AmazeMulch},
- // Apricorns
- [ITEM_RED_APRICORN] = {gItemIcon_RedApricorn, gItemIconPalette_RedApricorn},
- [ITEM_BLUE_APRICORN] = {gItemIcon_BlueApricorn, gItemIconPalette_BlueApricorn},
- [ITEM_YELLOW_APRICORN] = {gItemIcon_YellowApricorn, gItemIconPalette_YellowApricorn},
- [ITEM_GREEN_APRICORN] = {gItemIcon_GreenApricorn, gItemIconPalette_GreenApricorn},
- [ITEM_PINK_APRICORN] = {gItemIcon_PinkApricorn, gItemIconPalette_PinkApricorn},
- [ITEM_WHITE_APRICORN] = {gItemIcon_WhiteApricorn, gItemIconPalette_WhiteApricorn},
- [ITEM_BLACK_APRICORN] = {gItemIcon_BlackApricorn, gItemIconPalette_BlackApricorn},
- [ITEM_WISHING_PIECE] = {gItemIcon_WishingPiece, gItemIconPalette_WishingPiece},
- [ITEM_GALARICA_TWIG] = {gItemIcon_GalaricaTwig, gItemIconPalette_GalaricaItem},
- [ITEM_ARMORITE_ORE] = {gItemIcon_ArmoriteOre, gItemIconPalette_ArmoriteOre},
- [ITEM_DYNITE_ORE] = {gItemIcon_DyniteOre, gItemIconPalette_DyniteOre},
- // Mail
- [ITEM_ORANGE_MAIL] = {gItemIcon_OrangeMail, gItemIconPalette_OrangeMail},
- [ITEM_HARBOR_MAIL] = {gItemIcon_HarborMail, gItemIconPalette_HarborMail},
- [ITEM_GLITTER_MAIL] = {gItemIcon_GlitterMail, gItemIconPalette_GlitterMail},
- [ITEM_MECH_MAIL] = {gItemIcon_MechMail, gItemIconPalette_MechMail},
- [ITEM_WOOD_MAIL] = {gItemIcon_WoodMail, gItemIconPalette_WoodMail},
- [ITEM_WAVE_MAIL] = {gItemIcon_WaveMail, gItemIconPalette_WaveMail},
- [ITEM_BEAD_MAIL] = {gItemIcon_BeadMail, gItemIconPalette_BeadMail},
- [ITEM_SHADOW_MAIL] = {gItemIcon_ShadowMail, gItemIconPalette_ShadowMail},
- [ITEM_TROPIC_MAIL] = {gItemIcon_TropicMail, gItemIconPalette_TropicMail},
- [ITEM_DREAM_MAIL] = {gItemIcon_DreamMail, gItemIconPalette_DreamMail},
- [ITEM_FAB_MAIL] = {gItemIcon_FabMail, gItemIconPalette_FabMail},
- [ITEM_RETRO_MAIL] = {gItemIcon_RetroMail, gItemIconPalette_RetroMail},
- // Evolution Items
- [ITEM_FIRE_STONE] = {gItemIcon_FireStone, gItemIconPalette_FireStone},
- [ITEM_WATER_STONE] = {gItemIcon_WaterStone, gItemIconPalette_WaterStone},
- [ITEM_THUNDER_STONE] = {gItemIcon_ThunderStone, gItemIconPalette_ThunderStone},
- [ITEM_LEAF_STONE] = {gItemIcon_LeafStone, gItemIconPalette_LeafStone},
- [ITEM_ICE_STONE] = {gItemIcon_IceStone, gItemIconPalette_IceStone},
- [ITEM_SUN_STONE] = {gItemIcon_SunStone, gItemIconPalette_SunStone},
- [ITEM_MOON_STONE] = {gItemIcon_MoonStone, gItemIconPalette_MoonStone},
- [ITEM_SHINY_STONE] = {gItemIcon_ShinyStone, gItemIconPalette_ShinyStone},
- [ITEM_DUSK_STONE] = {gItemIcon_DuskStone, gItemIconPalette_DuskStone},
- [ITEM_DAWN_STONE] = {gItemIcon_DawnStone, gItemIconPalette_DawnStone},
- [ITEM_SWEET_APPLE] = {gItemIcon_SweetApple, gItemIconPalette_SweetApple},
- [ITEM_TART_APPLE] = {gItemIcon_TartApple, gItemIconPalette_TartApple},
- [ITEM_CRACKED_POT] = {gItemIcon_CrackedPot, gItemIconPalette_Pot},
- [ITEM_CHIPPED_POT] = {gItemIcon_ChippedPot, gItemIconPalette_Pot},
- [ITEM_GALARICA_CUFF] = {gItemIcon_GalaricaCuff, gItemIconPalette_GalaricaItem},
- [ITEM_GALARICA_WREATH] = {gItemIcon_GalaricaWreath, gItemIconPalette_GalaricaItem},
- [ITEM_DRAGON_SCALE] = {gItemIcon_DragonScale, gItemIconPalette_DragonScale},
- [ITEM_UPGRADE] = {gItemIcon_Upgrade, gItemIconPalette_Upgrade},
- [ITEM_PROTECTOR] = {gItemIcon_Protector, gItemIconPalette_Protector},
- [ITEM_ELECTIRIZER] = {gItemIcon_Electirizer, gItemIconPalette_Electirizer},
- [ITEM_MAGMARIZER] = {gItemIcon_Magmarizer, gItemIconPalette_Magmarizer},
- [ITEM_DUBIOUS_DISC] = {gItemIcon_DubiousDisc, gItemIconPalette_DubiousDisc},
- [ITEM_REAPER_CLOTH] = {gItemIcon_ReaperCloth, gItemIconPalette_ReaperCloth},
- [ITEM_PRISM_SCALE] = {gItemIcon_PrismScale, gItemIconPalette_PrismScale},
- [ITEM_WHIPPED_DREAM] = {gItemIcon_WhippedDream, gItemIconPalette_WhippedDream},
- [ITEM_SACHET] = {gItemIcon_Sachet, gItemIconPalette_Sachet},
- [ITEM_OVAL_STONE] = {gItemIcon_OvalStone, gItemIconPalette_OvalStone},
- [ITEM_STRAWBERRY_SWEET] = {gItemIcon_StrawberrySweet, gItemIconPalette_StrawberrySweet},
- [ITEM_LOVE_SWEET] = {gItemIcon_LoveSweet, gItemIconPalette_LoveSweet},
- [ITEM_BERRY_SWEET] = {gItemIcon_BerrySweet, gItemIconPalette_BerrySweet},
- [ITEM_CLOVER_SWEET] = {gItemIcon_CloverSweet, gItemIconPalette_CloverSweet},
- [ITEM_FLOWER_SWEET] = {gItemIcon_FlowerSweet, gItemIconPalette_FlowerSweet},
- [ITEM_STAR_SWEET] = {gItemIcon_StarSweet, gItemIconPalette_StarSweet},
- [ITEM_RIBBON_SWEET] = {gItemIcon_RibbonSweet, gItemIconPalette_RibbonSweet},
- [ITEM_EVERSTONE] = {gItemIcon_Everstone, gItemIconPalette_Everstone},
- // Nectars
- [ITEM_RED_NECTAR] = {gItemIcon_RedNectar, gItemIconPalette_RedNectar},
- [ITEM_YELLOW_NECTAR] = {gItemIcon_YellowNectar, gItemIconPalette_YellowNectar},
- [ITEM_PINK_NECTAR] = {gItemIcon_PinkNectar, gItemIconPalette_PinkNectar},
- [ITEM_PURPLE_NECTAR] = {gItemIcon_PurpleNectar, gItemIconPalette_PurpleNectar},
- // Plates
- [ITEM_FLAME_PLATE] = {gItemIcon_FlamePlate, gItemIconPalette_FlamePlate},
- [ITEM_SPLASH_PLATE] = {gItemIcon_SplashPlate, gItemIconPalette_SplashPlate},
- [ITEM_ZAP_PLATE] = {gItemIcon_ZapPlate, gItemIconPalette_ZapPlate},
- [ITEM_MEADOW_PLATE] = {gItemIcon_MeadowPlate, gItemIconPalette_MeadowPlate},
- [ITEM_ICICLE_PLATE] = {gItemIcon_IciclePlate, gItemIconPalette_IciclePlate},
- [ITEM_FIST_PLATE] = {gItemIcon_FistPlate, gItemIconPalette_FistPlate},
- [ITEM_TOXIC_PLATE] = {gItemIcon_ToxicPlate, gItemIconPalette_ToxicPlate},
- [ITEM_EARTH_PLATE] = {gItemIcon_EarthPlate, gItemIconPalette_EarthPlate},
- [ITEM_SKY_PLATE] = {gItemIcon_SkyPlate, gItemIconPalette_SkyPlate},
- [ITEM_MIND_PLATE] = {gItemIcon_MindPlate, gItemIconPalette_MindPlate},
- [ITEM_INSECT_PLATE] = {gItemIcon_InsectPlate, gItemIconPalette_InsectPlate},
- [ITEM_STONE_PLATE] = {gItemIcon_StonePlate, gItemIconPalette_StonePlate},
- [ITEM_SPOOKY_PLATE] = {gItemIcon_SpookyPlate, gItemIconPalette_SpookyPlate},
- [ITEM_DRACO_PLATE] = {gItemIcon_DracoPlate, gItemIconPalette_DracoPlate},
- [ITEM_DREAD_PLATE] = {gItemIcon_DreadPlate, gItemIconPalette_DreadPlate},
- [ITEM_IRON_PLATE] = {gItemIcon_IronPlate, gItemIconPalette_IronPlate},
- [ITEM_PIXIE_PLATE] = {gItemIcon_PixiePlate, gItemIconPalette_PixiePlate},
- // Drives
- [ITEM_DOUSE_DRIVE] = {gItemIcon_DouseDrive, gItemIconPalette_DouseDrive},
- [ITEM_SHOCK_DRIVE] = {gItemIcon_ShockDrive, gItemIconPalette_ShockDrive},
- [ITEM_BURN_DRIVE] = {gItemIcon_BurnDrive, gItemIconPalette_BurnDrive},
- [ITEM_CHILL_DRIVE] = {gItemIcon_ChillDrive, gItemIconPalette_ChillDrive},
- // Memories
- [ITEM_FIRE_MEMORY] = {gItemIcon_FireMemory, gItemIconPalette_FireMemory},
- [ITEM_WATER_MEMORY] = {gItemIcon_WaterMemory, gItemIconPalette_WaterMemory},
- [ITEM_ELECTRIC_MEMORY] = {gItemIcon_ElectricMemory, gItemIconPalette_ElectricMemory},
- [ITEM_GRASS_MEMORY] = {gItemIcon_GrassMemory, gItemIconPalette_GrassMemory},
- [ITEM_ICE_MEMORY] = {gItemIcon_IceMemory, gItemIconPalette_IceMemory},
- [ITEM_FIGHTING_MEMORY] = {gItemIcon_FightingMemory, gItemIconPalette_FightingMemory},
- [ITEM_POISON_MEMORY] = {gItemIcon_PoisonMemory, gItemIconPalette_PoisonMemory},
- [ITEM_GROUND_MEMORY] = {gItemIcon_GroundMemory, gItemIconPalette_GroundMemory},
- [ITEM_FLYING_MEMORY] = {gItemIcon_FlyingMemory, gItemIconPalette_FlyingMemory},
- [ITEM_PSYCHIC_MEMORY] = {gItemIcon_PsychicMemory, gItemIconPalette_PsychicMemory},
- [ITEM_BUG_MEMORY] = {gItemIcon_BugMemory, gItemIconPalette_BugMemory},
- [ITEM_ROCK_MEMORY] = {gItemIcon_RockMemory, gItemIconPalette_RockMemory},
- [ITEM_GHOST_MEMORY] = {gItemIcon_GhostMemory, gItemIconPalette_GhostMemory},
- [ITEM_DRAGON_MEMORY] = {gItemIcon_DragonMemory, gItemIconPalette_DragonMemory},
- [ITEM_DARK_MEMORY] = {gItemIcon_DarkMemory, gItemIconPalette_DarkMemory},
- [ITEM_STEEL_MEMORY] = {gItemIcon_SteelMemory, gItemIconPalette_SteelMemory},
- [ITEM_FAIRY_MEMORY] = {gItemIcon_FairyMemory, gItemIconPalette_FairyMemory},
- [ITEM_RUSTED_SWORD] = {gItemIcon_RustedSword, gItemIconPalette_RustedWeapons},
- [ITEM_RUSTED_SHIELD] = {gItemIcon_RustedShield, gItemIconPalette_RustedWeapons},
- // Colored Orbs
- [ITEM_RED_ORB] = {gItemIcon_RedOrb, gItemIconPalette_RedOrb},
- [ITEM_BLUE_ORB] = {gItemIcon_BlueOrb, gItemIconPalette_BlueOrb},
- // Mega Stones
- [ITEM_VENUSAURITE] = {gItemIcon_Venusaurite, gItemIconPalette_Venusaurite},
- [ITEM_CHARIZARDITE_X] = {gItemIcon_CharizarditeX, gItemIconPalette_CharizarditeX},
- [ITEM_CHARIZARDITE_Y] = {gItemIcon_CharizarditeY, gItemIconPalette_CharizarditeY},
- [ITEM_BLASTOISINITE] = {gItemIcon_Blastoisinite, gItemIconPalette_Blastoisinite},
- [ITEM_BEEDRILLITE] = {gItemIcon_Beedrillite, gItemIconPalette_Beedrillite},
- [ITEM_PIDGEOTITE] = {gItemIcon_Pidgeotite, gItemIconPalette_Pidgeotite},
- [ITEM_ALAKAZITE] = {gItemIcon_Alakazite, gItemIconPalette_Alakazite},
- [ITEM_SLOWBRONITE] = {gItemIcon_Slowbronite, gItemIconPalette_Slowbronite},
- [ITEM_GENGARITE] = {gItemIcon_Gengarite, gItemIconPalette_Gengarite},
- [ITEM_KANGASKHANITE] = {gItemIcon_Kangaskhanite, gItemIconPalette_Kangaskhanite},
- [ITEM_PINSIRITE] = {gItemIcon_Pinsirite, gItemIconPalette_Pinsirite},
- [ITEM_GYARADOSITE] = {gItemIcon_Gyaradosite, gItemIconPalette_Gyaradosite},
- [ITEM_AERODACTYLITE] = {gItemIcon_Aerodactylite, gItemIconPalette_Aerodactylite},
- [ITEM_MEWTWONITE_X] = {gItemIcon_MewtwoniteX, gItemIconPalette_MewtwoniteX},
- [ITEM_MEWTWONITE_Y] = {gItemIcon_MewtwoniteY, gItemIconPalette_MewtwoniteY},
- [ITEM_AMPHAROSITE] = {gItemIcon_Ampharosite, gItemIconPalette_Ampharosite},
- [ITEM_STEELIXITE] = {gItemIcon_Steelixite, gItemIconPalette_Steelixite},
- [ITEM_SCIZORITE] = {gItemIcon_Scizorite, gItemIconPalette_Scizorite},
- [ITEM_HERACRONITE] = {gItemIcon_Heracronite, gItemIconPalette_Heracronite},
- [ITEM_HOUNDOOMINITE] = {gItemIcon_Houndoominite, gItemIconPalette_Houndoominite},
- [ITEM_TYRANITARITE] = {gItemIcon_Tyranitarite, gItemIconPalette_Tyranitarite},
- [ITEM_SCEPTILITE] = {gItemIcon_Sceptilite, gItemIconPalette_Sceptilite},
- [ITEM_BLAZIKENITE] = {gItemIcon_Blazikenite, gItemIconPalette_Blazikenite},
- [ITEM_SWAMPERTITE] = {gItemIcon_Swampertite, gItemIconPalette_Swampertite},
- [ITEM_GARDEVOIRITE] = {gItemIcon_Gardevoirite, gItemIconPalette_Gardevoirite},
- [ITEM_SABLENITE] = {gItemIcon_Sablenite, gItemIconPalette_Sablenite},
- [ITEM_MAWILITE] = {gItemIcon_Mawilite, gItemIconPalette_Mawilite},
- [ITEM_AGGRONITE] = {gItemIcon_Aggronite, gItemIconPalette_Aggronite},
- [ITEM_MEDICHAMITE] = {gItemIcon_Medichamite, gItemIconPalette_Medichamite},
- [ITEM_MANECTITE] = {gItemIcon_Manectite, gItemIconPalette_Manectite},
- [ITEM_SHARPEDONITE] = {gItemIcon_Sharpedonite, gItemIconPalette_Sharpedonite},
- [ITEM_CAMERUPTITE] = {gItemIcon_Cameruptite, gItemIconPalette_Cameruptite},
- [ITEM_ALTARIANITE] = {gItemIcon_Altarianite, gItemIconPalette_Altarianite},
- [ITEM_BANETTITE] = {gItemIcon_Banettite, gItemIconPalette_Banettite},
- [ITEM_ABSOLITE] = {gItemIcon_Absolite, gItemIconPalette_Absolite},
- [ITEM_GLALITITE] = {gItemIcon_Glalitite, gItemIconPalette_Glalitite},
- [ITEM_SALAMENCITE] = {gItemIcon_Salamencite, gItemIconPalette_Salamencite},
- [ITEM_METAGROSSITE] = {gItemIcon_Metagrossite, gItemIconPalette_Metagrossite},
- [ITEM_LATIASITE] = {gItemIcon_Latiasite, gItemIconPalette_Latiasite},
- [ITEM_LATIOSITE] = {gItemIcon_Latiosite, gItemIconPalette_Latiosite},
- [ITEM_LOPUNNITE] = {gItemIcon_Lopunnite, gItemIconPalette_Lopunnite},
- [ITEM_GARCHOMPITE] = {gItemIcon_Garchompite, gItemIconPalette_Garchompite},
- [ITEM_LUCARIONITE] = {gItemIcon_Lucarionite, gItemIconPalette_Lucarionite},
- [ITEM_ABOMASITE] = {gItemIcon_Abomasite, gItemIconPalette_Abomasite},
- [ITEM_GALLADITE] = {gItemIcon_Galladite, gItemIconPalette_Galladite},
- [ITEM_AUDINITE] = {gItemIcon_Audinite, gItemIconPalette_Audinite},
- [ITEM_DIANCITE] = {gItemIcon_Diancite, gItemIconPalette_Diancite},
- // Gems
- [ITEM_NORMAL_GEM] = {gItemIcon_NormalGem, gItemIconPalette_NormalGem},
- [ITEM_FIRE_GEM] = {gItemIcon_FireGem, gItemIconPalette_FireGem},
- [ITEM_WATER_GEM] = {gItemIcon_WaterGem, gItemIconPalette_WaterGem},
- [ITEM_ELECTRIC_GEM] = {gItemIcon_ElectricGem, gItemIconPalette_ElectricGem},
- [ITEM_GRASS_GEM] = {gItemIcon_GrassGem, gItemIconPalette_GrassGem},
- [ITEM_ICE_GEM] = {gItemIcon_IceGem, gItemIconPalette_IceGem},
- [ITEM_FIGHTING_GEM] = {gItemIcon_FightingGem, gItemIconPalette_FightingGem},
- [ITEM_POISON_GEM] = {gItemIcon_PoisonGem, gItemIconPalette_PoisonGem},
- [ITEM_GROUND_GEM] = {gItemIcon_GroundGem, gItemIconPalette_GroundGem},
- [ITEM_FLYING_GEM] = {gItemIcon_FlyingGem, gItemIconPalette_FlyingGem},
- [ITEM_PSYCHIC_GEM] = {gItemIcon_PsychicGem, gItemIconPalette_PsychicGem},
- [ITEM_BUG_GEM] = {gItemIcon_BugGem, gItemIconPalette_BugGem},
- [ITEM_ROCK_GEM] = {gItemIcon_RockGem, gItemIconPalette_RockGem},
- [ITEM_GHOST_GEM] = {gItemIcon_GhostGem, gItemIconPalette_GhostGem},
- [ITEM_DRAGON_GEM] = {gItemIcon_DragonGem, gItemIconPalette_DragonGem},
- [ITEM_DARK_GEM] = {gItemIcon_DarkGem, gItemIconPalette_DarkGem},
- [ITEM_STEEL_GEM] = {gItemIcon_SteelGem, gItemIconPalette_SteelGem},
- [ITEM_FAIRY_GEM] = {gItemIcon_FairyGem, gItemIconPalette_FairyGem},
- // Z-Crystals
- [ITEM_NORMALIUM_Z] = {gItemIcon_NormaliumZ, gItemIconPalette_NormaliumZ},
- [ITEM_FIRIUM_Z] = {gItemIcon_FiriumZ, gItemIconPalette_FiriumZ},
- [ITEM_WATERIUM_Z] = {gItemIcon_WateriumZ, gItemIconPalette_WateriumZ},
- [ITEM_ELECTRIUM_Z] = {gItemIcon_ElectriumZ, gItemIconPalette_ElectriumZ},
- [ITEM_GRASSIUM_Z] = {gItemIcon_GrassiumZ, gItemIconPalette_GrassiumZ},
- [ITEM_ICIUM_Z] = {gItemIcon_IciumZ, gItemIconPalette_IciumZ},
- [ITEM_FIGHTINIUM_Z] = {gItemIcon_FightiniumZ, gItemIconPalette_FightiniumZ},
- [ITEM_POISONIUM_Z] = {gItemIcon_PoisoniumZ, gItemIconPalette_PoisoniumZ},
- [ITEM_GROUNDIUM_Z] = {gItemIcon_GroundiumZ, gItemIconPalette_GroundiumZ},
- [ITEM_FLYINIUM_Z] = {gItemIcon_FlyiniumZ, gItemIconPalette_FlyiniumZ},
- [ITEM_PSYCHIUM_Z] = {gItemIcon_PsychiumZ, gItemIconPalette_PsychiumZ},
- [ITEM_BUGINIUM_Z] = {gItemIcon_BuginiumZ, gItemIconPalette_BuginiumZ},
- [ITEM_ROCKIUM_Z] = {gItemIcon_RockiumZ, gItemIconPalette_RockiumZ},
- [ITEM_GHOSTIUM_Z] = {gItemIcon_GhostiumZ, gItemIconPalette_GhostiumZ},
- [ITEM_DRAGONIUM_Z] = {gItemIcon_DragoniumZ, gItemIconPalette_DragoniumZ},
- [ITEM_DARKINIUM_Z] = {gItemIcon_DarkiniumZ, gItemIconPalette_DarkiniumZ},
- [ITEM_STEELIUM_Z] = {gItemIcon_SteeliumZ, gItemIconPalette_SteeliumZ},
- [ITEM_FAIRIUM_Z] = {gItemIcon_FairiumZ, gItemIconPalette_FairiumZ},
- [ITEM_PIKANIUM_Z] = {gItemIcon_PikaniumZ, gItemIconPalette_PikaniumZ},
- [ITEM_EEVIUM_Z] = {gItemIcon_EeviumZ, gItemIconPalette_EeviumZ},
- [ITEM_SNORLIUM_Z] = {gItemIcon_SnorliumZ, gItemIconPalette_SnorliumZ},
- [ITEM_MEWNIUM_Z] = {gItemIcon_MewniumZ, gItemIconPalette_MewniumZ},
- [ITEM_DECIDIUM_Z] = {gItemIcon_DecidiumZ, gItemIconPalette_DecidiumZ},
- [ITEM_INCINIUM_Z] = {gItemIcon_InciniumZ, gItemIconPalette_InciniumZ},
- [ITEM_PRIMARIUM_Z] = {gItemIcon_PrimariumZ, gItemIconPalette_PrimariumZ},
- [ITEM_LYCANIUM_Z] = {gItemIcon_LycaniumZ, gItemIconPalette_LycaniumZ},
- [ITEM_MIMIKIUM_Z] = {gItemIcon_MimikiumZ, gItemIconPalette_MimikiumZ},
- [ITEM_KOMMONIUM_Z] = {gItemIcon_KommoniumZ, gItemIconPalette_KommoniumZ},
- [ITEM_TAPUNIUM_Z] = {gItemIcon_TapuniumZ, gItemIconPalette_TapuniumZ},
- [ITEM_SOLGANIUM_Z] = {gItemIcon_SolganiumZ, gItemIconPalette_SolganiumZ},
- [ITEM_LUNALIUM_Z] = {gItemIcon_LunaliumZ, gItemIconPalette_LunaliumZ},
- [ITEM_MARSHADIUM_Z] = {gItemIcon_MarshadiumZ, gItemIconPalette_MarshadiumZ},
- [ITEM_ALORAICHIUM_Z] = {gItemIcon_AloraichiumZ, gItemIconPalette_AloraichiumZ},
- [ITEM_PIKASHUNIUM_Z] = {gItemIcon_PikashuniumZ, gItemIconPalette_PikashuniumZ},
- [ITEM_ULTRANECROZIUM_Z] = {gItemIcon_UltranecroziumZ, gItemIconPalette_UltranecroziumZ},
- // Species-specific Held Items
- [ITEM_LIGHT_BALL] = {gItemIcon_LightBall, gItemIconPalette_LightBall},
- [ITEM_LEEK] = {gItemIcon_Leek, gItemIconPalette_Leek},
- [ITEM_THICK_CLUB] = {gItemIcon_ThickClub, gItemIconPalette_ThickClub},
- [ITEM_LUCKY_PUNCH] = {gItemIcon_LuckyPunch, gItemIconPalette_LuckyPunch},
- [ITEM_METAL_POWDER] = {gItemIcon_MetalPowder, gItemIconPalette_MetalPowder},
- [ITEM_QUICK_POWDER] = {gItemIcon_QuickPowder, gItemIconPalette_QuickPowder},
- [ITEM_DEEP_SEA_SCALE] = {gItemIcon_DeepSeaScale, gItemIconPalette_DeepSeaScale},
- [ITEM_DEEP_SEA_TOOTH] = {gItemIcon_DeepSeaTooth, gItemIconPalette_DeepSeaTooth},
- [ITEM_SOUL_DEW] = {gItemIcon_SoulDew, gItemIconPalette_SoulDew},
- [ITEM_ADAMANT_ORB] = {gItemIcon_AdamantOrb, gItemIconPalette_AdamantOrb},
- [ITEM_LUSTROUS_ORB] = {gItemIcon_LustrousOrb, gItemIconPalette_LustrousOrb},
- [ITEM_GRISEOUS_ORB] = {gItemIcon_GriseousOrb, gItemIconPalette_GriseousOrb},
- // Incenses
- [ITEM_SEA_INCENSE] = {gItemIcon_SeaIncense, gItemIconPalette_SeaIncense},
- [ITEM_LAX_INCENSE] = {gItemIcon_LaxIncense, gItemIconPalette_LaxIncense},
- [ITEM_ODD_INCENSE] = {gItemIcon_OddIncense, gItemIconPalette_OddIncense},
- [ITEM_ROCK_INCENSE] = {gItemIcon_RockIncense, gItemIconPalette_RockIncense},
- [ITEM_FULL_INCENSE] = {gItemIcon_FullIncense, gItemIconPalette_FullIncense},
- [ITEM_WAVE_INCENSE] = {gItemIcon_WaveIncense, gItemIconPalette_WaveIncense},
- [ITEM_ROSE_INCENSE] = {gItemIcon_RoseIncense, gItemIconPalette_RoseIncense},
- [ITEM_LUCK_INCENSE] = {gItemIcon_LuckIncense, gItemIconPalette_LuckIncense},
- [ITEM_PURE_INCENSE] = {gItemIcon_PureIncense, gItemIconPalette_PureIncense},
- // Contest Scarves
- [ITEM_RED_SCARF] = {gItemIcon_Scarf, gItemIconPalette_RedScarf},
- [ITEM_BLUE_SCARF] = {gItemIcon_Scarf, gItemIconPalette_BlueScarf},
- [ITEM_PINK_SCARF] = {gItemIcon_Scarf, gItemIconPalette_PinkScarf},
- [ITEM_GREEN_SCARF] = {gItemIcon_Scarf, gItemIconPalette_GreenScarf},
- [ITEM_YELLOW_SCARF] = {gItemIcon_Scarf, gItemIconPalette_YellowScarf},
- // EV Gain Modifiers
- [ITEM_MACHO_BRACE] = {gItemIcon_MachoBrace, gItemIconPalette_MachoBrace},
- [ITEM_POWER_WEIGHT] = {gItemIcon_PowerWeight, gItemIconPalette_PowerWeight},
- [ITEM_POWER_BRACER] = {gItemIcon_PowerBracer, gItemIconPalette_PowerBracer},
- [ITEM_POWER_BELT] = {gItemIcon_PowerBelt, gItemIconPalette_PowerBelt},
- [ITEM_POWER_LENS] = {gItemIcon_PowerLens, gItemIconPalette_PowerLens},
- [ITEM_POWER_BAND] = {gItemIcon_PowerBand, gItemIconPalette_PowerBand},
- [ITEM_POWER_ANKLET] = {gItemIcon_PowerAnklet, gItemIconPalette_PowerAnklet},
- // Type-boosting Held Items
- [ITEM_SILK_SCARF] = {gItemIcon_SilkScarf, gItemIconPalette_SilkScarf},
- [ITEM_CHARCOAL] = {gItemIcon_Charcoal, gItemIconPalette_Charcoal},
- [ITEM_MYSTIC_WATER] = {gItemIcon_MysticWater, gItemIconPalette_MysticWater},
- [ITEM_MAGNET] = {gItemIcon_Magnet, gItemIconPalette_Magnet},
- [ITEM_MIRACLE_SEED] = {gItemIcon_MiracleSeed, gItemIconPalette_MiracleSeed},
- [ITEM_NEVER_MELT_ICE] = {gItemIcon_NeverMeltIce, gItemIconPalette_NeverMeltIce},
- [ITEM_BLACK_BELT] = {gItemIcon_BlackBelt, gItemIconPalette_BlackTypeEnhancingItem},
- [ITEM_POISON_BARB] = {gItemIcon_PoisonBarb, gItemIconPalette_PoisonBarb},
- [ITEM_SOFT_SAND] = {gItemIcon_SoftSand, gItemIconPalette_SoftSand},
- [ITEM_SHARP_BEAK] = {gItemIcon_SharpBeak, gItemIconPalette_SharpBeak},
- [ITEM_TWISTED_SPOON] = {gItemIcon_TwistedSpoon, gItemIconPalette_TwistedSpoon},
- [ITEM_SILVER_POWDER] = {gItemIcon_SilverPowder, gItemIconPalette_SilverPowder},
- [ITEM_HARD_STONE] = {gItemIcon_HardStone, gItemIconPalette_HardStone},
- [ITEM_SPELL_TAG] = {gItemIcon_SpellTag, gItemIconPalette_SpellTag},
- [ITEM_DRAGON_FANG] = {gItemIcon_DragonFang, gItemIconPalette_DragonFang},
- [ITEM_BLACK_GLASSES] = {gItemIcon_BlackGlasses, gItemIconPalette_BlackTypeEnhancingItem},
- [ITEM_METAL_COAT] = {gItemIcon_MetalCoat, gItemIconPalette_MetalCoat},
- // Choice Items
- [ITEM_CHOICE_BAND] = {gItemIcon_ChoiceBand, gItemIconPalette_ChoiceBand},
- [ITEM_CHOICE_SPECS] = {gItemIcon_ChoiceSpecs, gItemIconPalette_ChoiceSpecs},
- [ITEM_CHOICE_SCARF] = {gItemIcon_ChoiceScarf, gItemIconPalette_ChoiceScarf},
- // Status Orbs
- [ITEM_FLAME_ORB] = {gItemIcon_FlameOrb, gItemIconPalette_FlameOrb},
- [ITEM_TOXIC_ORB] = {gItemIcon_ToxicOrb, gItemIconPalette_ToxicOrb},
- // Weather Rocks
- [ITEM_DAMP_ROCK] = {gItemIcon_DampRock, gItemIconPalette_DampRock},
- [ITEM_HEAT_ROCK] = {gItemIcon_HeatRock, gItemIconPalette_HeatRock},
- [ITEM_SMOOTH_ROCK] = {gItemIcon_SmoothRock, gItemIconPalette_SmoothRock},
- [ITEM_ICY_ROCK] = {gItemIcon_IcyRock, gItemIconPalette_IcyRock},
- // Terrain Seeds
- [ITEM_ELECTRIC_SEED] = {gItemIcon_ElectricSeed, gItemIconPalette_ElectricSeed},
- [ITEM_PSYCHIC_SEED] = {gItemIcon_PsychicSeed, gItemIconPalette_PsychicSeed},
- [ITEM_MISTY_SEED] = {gItemIcon_MistySeed, gItemIconPalette_MistySeed},
- [ITEM_GRASSY_SEED] = {gItemIcon_GrassySeed, gItemIconPalette_GrassySeed},
- // Type-activated Stat Modifiers
- [ITEM_ABSORB_BULB] = {gItemIcon_AbsorbBulb, gItemIconPalette_AbsorbBulb},
- [ITEM_CELL_BATTERY] = {gItemIcon_CellBattery, gItemIconPalette_CellBattery},
- [ITEM_LUMINOUS_MOSS] = {gItemIcon_LuminousMoss, gItemIconPalette_LuminousMoss},
- [ITEM_SNOWBALL] = {gItemIcon_Snowball, gItemIconPalette_Snowball},
- // Misc. Held Items
- [ITEM_BRIGHT_POWDER] = {gItemIcon_BrightPowder, gItemIconPalette_BrightPowder},
- [ITEM_WHITE_HERB] = {gItemIcon_InBattleHerb, gItemIconPalette_WhiteHerb},
- [ITEM_EXP_SHARE] = {gItemIcon_ExpShare, gItemIconPalette_ExpShare},
- [ITEM_QUICK_CLAW] = {gItemIcon_QuickClaw, gItemIconPalette_QuickClaw},
- [ITEM_SOOTHE_BELL] = {gItemIcon_SootheBell, gItemIconPalette_SootheBell},
- [ITEM_MENTAL_HERB] = {gItemIcon_InBattleHerb, gItemIconPalette_MentalHerb},
- [ITEM_KINGS_ROCK] = {gItemIcon_KingsRock, gItemIconPalette_KingsRock},
- [ITEM_AMULET_COIN] = {gItemIcon_AmuletCoin, gItemIconPalette_AmuletCoin},
- [ITEM_CLEANSE_TAG] = {gItemIcon_CleanseTag, gItemIconPalette_CleanseTag},
- [ITEM_SMOKE_BALL] = {gItemIcon_SmokeBall, gItemIconPalette_SmokeBall},
- [ITEM_FOCUS_BAND] = {gItemIcon_FocusBand, gItemIconPalette_FocusBand},
- [ITEM_LUCKY_EGG] = {gItemIcon_LuckyEgg, gItemIconPalette_LuckyEgg},
- [ITEM_SCOPE_LENS] = {gItemIcon_ScopeLens, gItemIconPalette_ScopeLens},
- [ITEM_LEFTOVERS] = {gItemIcon_Leftovers, gItemIconPalette_Leftovers},
- [ITEM_SHELL_BELL] = {gItemIcon_ShellBell, gItemIconPalette_Shell},
- [ITEM_WIDE_LENS] = {gItemIcon_WideLens, gItemIconPalette_WideLens},
- [ITEM_MUSCLE_BAND] = {gItemIcon_MuscleBand, gItemIconPalette_MuscleBand},
- [ITEM_WISE_GLASSES] = {gItemIcon_WiseGlasses, gItemIconPalette_WiseGlasses},
- [ITEM_EXPERT_BELT] = {gItemIcon_ExpertBelt, gItemIconPalette_ExpertBelt},
- [ITEM_LIGHT_CLAY] = {gItemIcon_LightClay, gItemIconPalette_LightClay},
- [ITEM_LIFE_ORB] = {gItemIcon_LifeOrb, gItemIconPalette_LifeOrb},
- [ITEM_POWER_HERB] = {gItemIcon_PowerHerb, gItemIconPalette_PowerHerb},
- [ITEM_FOCUS_SASH] = {gItemIcon_FocusSash, gItemIconPalette_FocusSash},
- [ITEM_ZOOM_LENS] = {gItemIcon_ZoomLens, gItemIconPalette_ZoomLens},
- [ITEM_METRONOME] = {gItemIcon_Metronome, gItemIconPalette_Metronome},
- [ITEM_IRON_BALL] = {gItemIcon_IronBall, gItemIconPalette_IronBall},
- [ITEM_LAGGING_TAIL] = {gItemIcon_LaggingTail, gItemIconPalette_LaggingTail},
- [ITEM_DESTINY_KNOT] = {gItemIcon_DestinyKnot, gItemIconPalette_DestinyKnot},
- [ITEM_BLACK_SLUDGE] = {gItemIcon_BlackSludge, gItemIconPalette_BlackSludge},
- [ITEM_GRIP_CLAW] = {gItemIcon_GripClaw, gItemIconPalette_GripClaw},
- [ITEM_STICKY_BARB] = {gItemIcon_StickyBarb, gItemIconPalette_StickyBarb},
- [ITEM_SHED_SHELL] = {gItemIcon_ShedShell, gItemIconPalette_ShedShell},
- [ITEM_BIG_ROOT] = {gItemIcon_BigRoot, gItemIconPalette_BigRoot},
- [ITEM_RAZOR_CLAW] = {gItemIcon_RazorClaw, gItemIconPalette_RazorClaw},
- [ITEM_RAZOR_FANG] = {gItemIcon_RazorFang, gItemIconPalette_RazorFang},
- [ITEM_EVIOLITE] = {gItemIcon_Eviolite, gItemIconPalette_Eviolite},
- [ITEM_FLOAT_STONE] = {gItemIcon_FloatStone, gItemIconPalette_FloatStone},
- [ITEM_ROCKY_HELMET] = {gItemIcon_RockyHelmet, gItemIconPalette_RockyHelmet},
- [ITEM_AIR_BALLOON] = {gItemIcon_AirBalloon, gItemIconPalette_AirBalloon},
- [ITEM_RED_CARD] = {gItemIcon_RedCard, gItemIconPalette_RedCard},
- [ITEM_RING_TARGET] = {gItemIcon_RingTarget, gItemIconPalette_RingTarget},
- [ITEM_BINDING_BAND] = {gItemIcon_BindingBand, gItemIconPalette_BindingBand},
- [ITEM_EJECT_BUTTON] = {gItemIcon_EjectButton, gItemIconPalette_EjectButton},
- [ITEM_WEAKNESS_POLICY] = {gItemIcon_WeaknessPolicy, gItemIconPalette_WeaknessPolicy},
- [ITEM_ASSAULT_VEST] = {gItemIcon_AssaultVest, gItemIconPalette_AssaultVest},
- [ITEM_SAFETY_GOGGLES] = {gItemIcon_SafetyGoggles, gItemIconPalette_SafetyGoggles},
- [ITEM_ADRENALINE_ORB] = {gItemIcon_AdrenalineOrb, gItemIconPalette_AdrenalineOrb},
- [ITEM_TERRAIN_EXTENDER] = {gItemIcon_TerrainExtender, gItemIconPalette_TerrainExtender},
- [ITEM_PROTECTIVE_PADS] = {gItemIcon_ProtectivePads, gItemIconPalette_ProtectivePads},
- [ITEM_THROAT_SPRAY] = {gItemIcon_ThroatSpray, gItemIconPalette_ThroatSpray},
- [ITEM_EJECT_PACK] = {gItemIcon_EjectPack, gItemIconPalette_EjectPack},
- [ITEM_HEAVY_DUTY_BOOTS] = {gItemIcon_HeavyDutyBoots, gItemIconPalette_HeavyDutyBoots},
- [ITEM_BLUNDER_POLICY] = {gItemIcon_BlunderPolicy, gItemIconPalette_BlunderPolicy},
- [ITEM_ROOM_SERVICE] = {gItemIcon_RoomService, gItemIconPalette_RoomService},
- [ITEM_UTILITY_UMBRELLA] = {gItemIcon_UtilityUmbrella, gItemIconPalette_UtilityUmbrella},
- // Berries
- [ITEM_CHERI_BERRY] = {gItemIcon_CheriBerry, gItemIconPalette_CheriBerry},
- [ITEM_CHESTO_BERRY] = {gItemIcon_ChestoBerry, gItemIconPalette_ChestoBerry},
- [ITEM_PECHA_BERRY] = {gItemIcon_PechaBerry, gItemIconPalette_PechaBerry},
- [ITEM_RAWST_BERRY] = {gItemIcon_RawstBerry, gItemIconPalette_RawstBerry},
- [ITEM_ASPEAR_BERRY] = {gItemIcon_AspearBerry, gItemIconPalette_AspearBerry},
- [ITEM_LEPPA_BERRY] = {gItemIcon_LeppaBerry, gItemIconPalette_LeppaBerry},
- [ITEM_ORAN_BERRY] = {gItemIcon_OranBerry, gItemIconPalette_OranBerry},
- [ITEM_PERSIM_BERRY] = {gItemIcon_PersimBerry, gItemIconPalette_PersimBerry},
- [ITEM_LUM_BERRY] = {gItemIcon_LumBerry, gItemIconPalette_LumBerry},
- [ITEM_SITRUS_BERRY] = {gItemIcon_SitrusBerry, gItemIconPalette_SitrusBerry},
- [ITEM_FIGY_BERRY] = {gItemIcon_FigyBerry, gItemIconPalette_FigyBerry},
- [ITEM_WIKI_BERRY] = {gItemIcon_WikiBerry, gItemIconPalette_WikiBerry},
- [ITEM_MAGO_BERRY] = {gItemIcon_MagoBerry, gItemIconPalette_MagoBerry},
- [ITEM_AGUAV_BERRY] = {gItemIcon_AguavBerry, gItemIconPalette_AguavBerry},
- [ITEM_IAPAPA_BERRY] = {gItemIcon_IapapaBerry, gItemIconPalette_IapapaBerry},
- [ITEM_RAZZ_BERRY] = {gItemIcon_RazzBerry, gItemIconPalette_RazzBerry},
- [ITEM_BLUK_BERRY] = {gItemIcon_BlukBerry, gItemIconPalette_BlukBerry},
- [ITEM_NANAB_BERRY] = {gItemIcon_NanabBerry, gItemIconPalette_NanabBerry},
- [ITEM_WEPEAR_BERRY] = {gItemIcon_WepearBerry, gItemIconPalette_WepearBerry},
- [ITEM_PINAP_BERRY] = {gItemIcon_PinapBerry, gItemIconPalette_PinapBerry},
- [ITEM_POMEG_BERRY] = {gItemIcon_PomegBerry, gItemIconPalette_PomegBerry},
- [ITEM_KELPSY_BERRY] = {gItemIcon_KelpsyBerry, gItemIconPalette_KelpsyBerry},
- [ITEM_QUALOT_BERRY] = {gItemIcon_QualotBerry, gItemIconPalette_QualotBerry},
- [ITEM_HONDEW_BERRY] = {gItemIcon_HondewBerry, gItemIconPalette_HondewBerry},
- [ITEM_GREPA_BERRY] = {gItemIcon_GrepaBerry, gItemIconPalette_GrepaBerry},
- [ITEM_TAMATO_BERRY] = {gItemIcon_TamatoBerry, gItemIconPalette_TamatoBerry},
- [ITEM_CORNN_BERRY] = {gItemIcon_CornnBerry, gItemIconPalette_CornnBerry},
- [ITEM_MAGOST_BERRY] = {gItemIcon_MagostBerry, gItemIconPalette_MagostBerry},
- [ITEM_RABUTA_BERRY] = {gItemIcon_RabutaBerry, gItemIconPalette_RabutaBerry},
- [ITEM_NOMEL_BERRY] = {gItemIcon_NomelBerry, gItemIconPalette_NomelBerry},
- [ITEM_SPELON_BERRY] = {gItemIcon_SpelonBerry, gItemIconPalette_SpelonBerry},
- [ITEM_PAMTRE_BERRY] = {gItemIcon_PamtreBerry, gItemIconPalette_PamtreBerry},
- [ITEM_WATMEL_BERRY] = {gItemIcon_WatmelBerry, gItemIconPalette_WatmelBerry},
- [ITEM_DURIN_BERRY] = {gItemIcon_DurinBerry, gItemIconPalette_DurinBerry},
- [ITEM_BELUE_BERRY] = {gItemIcon_BelueBerry, gItemIconPalette_BelueBerry},
- [ITEM_CHILAN_BERRY] = {gItemIcon_ChilanBerry, gItemIconPalette_ChilanBerry},
- [ITEM_OCCA_BERRY] = {gItemIcon_OccaBerry, gItemIconPalette_OccaBerry},
- [ITEM_PASSHO_BERRY] = {gItemIcon_PasshoBerry, gItemIconPalette_PasshoBerry},
- [ITEM_WACAN_BERRY] = {gItemIcon_WacanBerry, gItemIconPalette_WacanBerry},
- [ITEM_RINDO_BERRY] = {gItemIcon_RindoBerry, gItemIconPalette_RindoBerry},
- [ITEM_YACHE_BERRY] = {gItemIcon_YacheBerry, gItemIconPalette_YacheBerry},
- [ITEM_CHOPLE_BERRY] = {gItemIcon_ChopleBerry, gItemIconPalette_ChopleBerry},
- [ITEM_KEBIA_BERRY] = {gItemIcon_KebiaBerry, gItemIconPalette_KebiaBerry},
- [ITEM_SHUCA_BERRY] = {gItemIcon_ShucaBerry, gItemIconPalette_ShucaBerry},
- [ITEM_COBA_BERRY] = {gItemIcon_CobaBerry, gItemIconPalette_CobaBerry},
- [ITEM_PAYAPA_BERRY] = {gItemIcon_PayapaBerry, gItemIconPalette_PayapaBerry},
- [ITEM_TANGA_BERRY] = {gItemIcon_TangaBerry, gItemIconPalette_TangaBerry},
- [ITEM_CHARTI_BERRY] = {gItemIcon_ChartiBerry, gItemIconPalette_ChartiBerry},
- [ITEM_KASIB_BERRY] = {gItemIcon_KasibBerry, gItemIconPalette_KasibBerry},
- [ITEM_HABAN_BERRY] = {gItemIcon_HabanBerry, gItemIconPalette_HabanBerry},
- [ITEM_COLBUR_BERRY] = {gItemIcon_ColburBerry, gItemIconPalette_ColburBerry},
- [ITEM_BABIRI_BERRY] = {gItemIcon_BabiriBerry, gItemIconPalette_BabiriBerry},
- [ITEM_ROSELI_BERRY] = {gItemIcon_RoseliBerry, gItemIconPalette_RoseliBerry},
- [ITEM_LIECHI_BERRY] = {gItemIcon_LiechiBerry, gItemIconPalette_LiechiBerry},
- [ITEM_GANLON_BERRY] = {gItemIcon_GanlonBerry, gItemIconPalette_GanlonBerry},
- [ITEM_SALAC_BERRY] = {gItemIcon_SalacBerry, gItemIconPalette_SalacBerry},
- [ITEM_PETAYA_BERRY] = {gItemIcon_PetayaBerry, gItemIconPalette_PetayaBerry},
- [ITEM_APICOT_BERRY] = {gItemIcon_ApicotBerry, gItemIconPalette_ApicotBerry},
- [ITEM_LANSAT_BERRY] = {gItemIcon_LansatBerry, gItemIconPalette_LansatBerry},
- [ITEM_STARF_BERRY] = {gItemIcon_StarfBerry, gItemIconPalette_StarfBerry},
- [ITEM_ENIGMA_BERRY] = {gItemIcon_EnigmaBerry, gItemIconPalette_EnigmaBerry},
- [ITEM_MICLE_BERRY] = {gItemIcon_MicleBerry, gItemIconPalette_MicleBerry},
- [ITEM_CUSTAP_BERRY] = {gItemIcon_CustapBerry, gItemIconPalette_CustapBerry},
- [ITEM_JABOCA_BERRY] = {gItemIcon_JabocaBerry, gItemIconPalette_JabocaBerry},
- [ITEM_ROWAP_BERRY] = {gItemIcon_RowapBerry, gItemIconPalette_RowapBerry},
- [ITEM_KEE_BERRY] = {gItemIcon_KeeBerry, gItemIconPalette_KeeBerry},
- [ITEM_MARANGA_BERRY] = {gItemIcon_MarangaBerry, gItemIconPalette_MarangaBerry},
- [ITEM_ENIGMA_BERRY_E_READER] = {gItemIcon_EnigmaBerry, gItemIconPalette_EnigmaBerry},
- // TMs/HMs
- [ITEM_TM01] = {gItemIcon_TM, gItemIconPalette_FightingTMHM},
- [ITEM_TM02] = {gItemIcon_TM, gItemIconPalette_DragonTMHM},
- [ITEM_TM03] = {gItemIcon_TM, gItemIconPalette_WaterTMHM},
- [ITEM_TM04] = {gItemIcon_TM, gItemIconPalette_PsychicTMHM},
- [ITEM_TM05] = {gItemIcon_TM, gItemIconPalette_NormalTMHM},
- [ITEM_TM06] = {gItemIcon_TM, gItemIconPalette_PoisonTMHM},
- [ITEM_TM07] = {gItemIcon_TM, gItemIconPalette_IceTMHM},
- [ITEM_TM08] = {gItemIcon_TM, gItemIconPalette_FightingTMHM},
- [ITEM_TM09] = {gItemIcon_TM, gItemIconPalette_GrassTMHM},
- [ITEM_TM10] = {gItemIcon_TM, gItemIconPalette_NormalTMHM},
- [ITEM_TM11] = {gItemIcon_TM, gItemIconPalette_FireTMHM},
- [ITEM_TM12] = {gItemIcon_TM, gItemIconPalette_DarkTMHM},
- [ITEM_TM13] = {gItemIcon_TM, gItemIconPalette_IceTMHM},
- [ITEM_TM14] = {gItemIcon_TM, gItemIconPalette_IceTMHM},
- [ITEM_TM15] = {gItemIcon_TM, gItemIconPalette_NormalTMHM},
- [ITEM_TM16] = {gItemIcon_TM, gItemIconPalette_PsychicTMHM},
- [ITEM_TM17] = {gItemIcon_TM, gItemIconPalette_NormalTMHM},
- [ITEM_TM18] = {gItemIcon_TM, gItemIconPalette_WaterTMHM},
- [ITEM_TM19] = {gItemIcon_TM, gItemIconPalette_GrassTMHM},
- [ITEM_TM20] = {gItemIcon_TM, gItemIconPalette_NormalTMHM},
- [ITEM_TM21] = {gItemIcon_TM, gItemIconPalette_NormalTMHM},
- [ITEM_TM22] = {gItemIcon_TM, gItemIconPalette_GrassTMHM},
- [ITEM_TM23] = {gItemIcon_TM, gItemIconPalette_SteelTMHM},
- [ITEM_TM24] = {gItemIcon_TM, gItemIconPalette_ElectricTMHM},
- [ITEM_TM25] = {gItemIcon_TM, gItemIconPalette_ElectricTMHM},
- [ITEM_TM26] = {gItemIcon_TM, gItemIconPalette_GroundTMHM},
- [ITEM_TM27] = {gItemIcon_TM, gItemIconPalette_NormalTMHM},
- [ITEM_TM28] = {gItemIcon_TM, gItemIconPalette_GroundTMHM},
- [ITEM_TM29] = {gItemIcon_TM, gItemIconPalette_PsychicTMHM},
- [ITEM_TM30] = {gItemIcon_TM, gItemIconPalette_GhostTMHM},
- [ITEM_TM31] = {gItemIcon_TM, gItemIconPalette_FightingTMHM},
- [ITEM_TM32] = {gItemIcon_TM, gItemIconPalette_NormalTMHM},
- [ITEM_TM33] = {gItemIcon_TM, gItemIconPalette_PsychicTMHM},
- [ITEM_TM34] = {gItemIcon_TM, gItemIconPalette_ElectricTMHM},
- [ITEM_TM35] = {gItemIcon_TM, gItemIconPalette_FireTMHM},
- [ITEM_TM36] = {gItemIcon_TM, gItemIconPalette_PoisonTMHM},
- [ITEM_TM37] = {gItemIcon_TM, gItemIconPalette_RockTMHM},
- [ITEM_TM38] = {gItemIcon_TM, gItemIconPalette_FireTMHM},
- [ITEM_TM39] = {gItemIcon_TM, gItemIconPalette_RockTMHM},
- [ITEM_TM40] = {gItemIcon_TM, gItemIconPalette_FlyingTMHM},
- [ITEM_TM41] = {gItemIcon_TM, gItemIconPalette_DarkTMHM},
- [ITEM_TM42] = {gItemIcon_TM, gItemIconPalette_NormalTMHM},
- [ITEM_TM43] = {gItemIcon_TM, gItemIconPalette_NormalTMHM},
- [ITEM_TM44] = {gItemIcon_TM, gItemIconPalette_PsychicTMHM},
- [ITEM_TM45] = {gItemIcon_TM, gItemIconPalette_NormalTMHM},
- [ITEM_TM46] = {gItemIcon_TM, gItemIconPalette_DarkTMHM},
- [ITEM_TM47] = {gItemIcon_TM, gItemIconPalette_SteelTMHM},
- [ITEM_TM48] = {gItemIcon_TM, gItemIconPalette_PsychicTMHM},
- [ITEM_TM49] = {gItemIcon_TM, gItemIconPalette_DarkTMHM},
- [ITEM_TM50] = {gItemIcon_TM, gItemIconPalette_FireTMHM},
- [ITEM_TM51] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM52] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM53] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM54] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM55] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM56] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM57] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM58] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM59] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM60] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM61] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM62] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM63] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM64] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM65] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM66] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM67] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM68] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM69] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM70] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM71] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM72] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM73] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM74] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM75] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM76] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM77] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM78] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM79] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM80] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM81] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM82] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM83] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM84] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM85] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM86] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM87] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM88] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM89] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM90] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM91] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM92] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM93] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM94] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM95] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM96] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM97] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM98] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM99] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_TM100] = {gItemIcon_TM, gItemIconPalette_NormalTMHM}, // Todo
- [ITEM_HM01] = {gItemIcon_HM, gItemIconPalette_NormalTMHM},
- [ITEM_HM02] = {gItemIcon_HM, gItemIconPalette_FlyingTMHM},
- [ITEM_HM03] = {gItemIcon_HM, gItemIconPalette_WaterTMHM},
- [ITEM_HM04] = {gItemIcon_HM, gItemIconPalette_NormalTMHM},
- [ITEM_HM05] = {gItemIcon_HM, gItemIconPalette_NormalTMHM},
- [ITEM_HM06] = {gItemIcon_HM, gItemIconPalette_FightingTMHM},
- [ITEM_HM07] = {gItemIcon_HM, gItemIconPalette_WaterTMHM},
- [ITEM_HM08] = {gItemIcon_HM, gItemIconPalette_WaterTMHM},
- // Charms
- [ITEM_OVAL_CHARM] = {gItemIcon_OvalCharm, gItemIconPalette_OvalCharm},
- [ITEM_SHINY_CHARM] = {gItemIcon_ShinyCharm, gItemIconPalette_ShinyCharm},
- [ITEM_CATCHING_CHARM] = {gItemIcon_CatchingCharm, gItemIconPalette_CatchingCharm},
- [ITEM_EXP_CHARM] = {gItemIcon_ExpCharm, gItemIconPalette_ExpCharm},
- // Form-changing Key Items
- [ITEM_ROTOM_CATALOG] = {gItemIcon_RotomCatalog, gItemIconPalette_RotomCatalog},
- [ITEM_GRACIDEA] = {gItemIcon_Gracidea, gItemIconPalette_Gracidea},
- [ITEM_REVEAL_GLASS] = {gItemIcon_RevealGlass, gItemIconPalette_RevealGlass},
- [ITEM_DNA_SPLICERS] = {gItemIcon_DNASplicers, gItemIconPalette_DNASplicers},
- [ITEM_ZYGARDE_CUBE] = {gItemIcon_ZygardeCube, gItemIconPalette_ZygardeCube},
- [ITEM_PRISON_BOTTLE] = {gItemIcon_PrisonBottle, gItemIconPalette_PrisonBottle},
- [ITEM_N_SOLARIZER] = {gItemIcon_NecrozmaFuser, gItemIconPalette_NSolarizer},
- [ITEM_N_LUNARIZER] = {gItemIcon_NecrozmaFuser, gItemIconPalette_NLunarizer},
- [ITEM_REINS_OF_UNITY] = {gItemIcon_ReinsOfUnity, gItemIconPalette_ReinsOfUnity},
- // Battle Mechanic Key Items
- [ITEM_MEGA_RING] = {gItemIcon_MegaRing, gItemIconPalette_MegaRing},
- [ITEM_Z_POWER_RING] = {gItemIcon_ZPowerRing, gItemIconPalette_ZPowerRing},
- [ITEM_DYNAMAX_BAND] = {gItemIcon_DynamaxBand, gItemIconPalette_DynamaxBand},
- // Misc. Key Items
- [ITEM_BICYCLE] = {gItemIcon_Bicycle, gItemIconPalette_Bicycle},
- [ITEM_MACH_BIKE] = {gItemIcon_MachBike, gItemIconPalette_MachBike},
- [ITEM_ACRO_BIKE] = {gItemIcon_AcroBike, gItemIconPalette_AcroBike},
- [ITEM_OLD_ROD] = {gItemIcon_OldRod, gItemIconPalette_OldRod},
- [ITEM_GOOD_ROD] = {gItemIcon_GoodRod, gItemIconPalette_GoodRod},
- [ITEM_SUPER_ROD] = {gItemIcon_SuperRod, gItemIconPalette_SuperRod},
- [ITEM_DOWSING_MACHINE] = {gItemIcon_DowsingMachine, gItemIconPalette_DowsingMachine},
- [ITEM_TOWN_MAP] = {gItemIcon_TownMap, gItemIconPalette_TownMap},
- [ITEM_VS_SEEKER] = {gItemIcon_VsSeeker, gItemIconPalette_VsSeeker},
- [ITEM_TM_CASE] = {gItemIcon_TMCase, gItemIconPalette_TMCase},
- [ITEM_BERRY_POUCH] = {gItemIcon_BerryPouch, gItemIconPalette_BerryPouch},
- [ITEM_POKEMON_BOX_LINK] = {gItemIcon_PokemonBoxLink, gItemIconPalette_PokemonBoxLink},
- [ITEM_COIN_CASE] = {gItemIcon_CoinCase, gItemIconPalette_CoinCase},
- [ITEM_POWDER_JAR] = {gItemIcon_PowderJar, gItemIconPalette_PowderJar},
- [ITEM_WAILMER_PAIL] = {gItemIcon_WailmerPail, gItemIconPalette_WailmerPail},
- [ITEM_POKE_RADAR] = {gItemIcon_PokeRadar, gItemIconPalette_PokeRadar},
- [ITEM_POKEBLOCK_CASE] = {gItemIcon_PokeblockCase, gItemIconPalette_PokeblockCase},
- [ITEM_SOOT_SACK] = {gItemIcon_SootSack, gItemIconPalette_SootSack},
- [ITEM_POKE_FLUTE] = {gItemIcon_PokeFlute, gItemIconPalette_PokeFlute},
- [ITEM_FAME_CHECKER] = {gItemIcon_FameChecker, gItemIconPalette_FameChecker},
- [ITEM_TEACHY_TV] = {gItemIcon_TeachyTV, gItemIconPalette_TeachyTV},
- // Story Key Items
- [ITEM_SS_TICKET] = {gItemIcon_SSTicket, gItemIconPalette_SSTicket},
- [ITEM_EON_TICKET] = {gItemIcon_EonTicket, gItemIconPalette_EonTicket},
- [ITEM_MYSTIC_TICKET] = {gItemIcon_MysticTicket, gItemIconPalette_MysticTicket},
- [ITEM_AURORA_TICKET] = {gItemIcon_AuroraTicket, gItemIconPalette_AuroraTicket},
- [ITEM_OLD_SEA_MAP] = {gItemIcon_OldSeaMap, gItemIconPalette_OldSeaMap},
- [ITEM_LETTER] = {gItemIcon_Letter, gItemIconPalette_LavaCookieAndLetter},
- [ITEM_DEVON_PARTS] = {gItemIcon_DevonParts, gItemIconPalette_DevonParts},
- [ITEM_GO_GOGGLES] = {gItemIcon_GoGoggles, gItemIconPalette_GoGoggles},
- [ITEM_DEVON_SCOPE] = {gItemIcon_DevonScope, gItemIconPalette_DevonScope},
- [ITEM_BASEMENT_KEY] = {gItemIcon_BasementKey, gItemIconPalette_OldKey},
- [ITEM_SCANNER] = {gItemIcon_Scanner, gItemIconPalette_Scanner},
- [ITEM_STORAGE_KEY] = {gItemIcon_StorageKey, gItemIconPalette_OldKey},
- [ITEM_KEY_TO_ROOM_1] = {gItemIcon_KeyToRoom1, gItemIconPalette_Key},
- [ITEM_KEY_TO_ROOM_2] = {gItemIcon_KeyToRoom2, gItemIconPalette_Key},
- [ITEM_KEY_TO_ROOM_4] = {gItemIcon_KeyToRoom4, gItemIconPalette_Key},
- [ITEM_KEY_TO_ROOM_6] = {gItemIcon_KeyToRoom6, gItemIconPalette_Key},
- [ITEM_METEORITE] = {gItemIcon_Meteorite, gItemIconPalette_Meteorite},
- [ITEM_MAGMA_EMBLEM] = {gItemIcon_MagmaEmblem, gItemIconPalette_MagmaEmblem},
- [ITEM_CONTEST_PASS] = {gItemIcon_ContestPass, gItemIconPalette_ContestPass},
- [ITEM_PARCEL] = {gItemIcon_Parcel, gItemIconPalette_Parcel},
- [ITEM_SECRET_KEY] = {gItemIcon_SecretKey, gItemIconPalette_SecretKey},
- [ITEM_BIKE_VOUCHER] = {gItemIcon_BikeVoucher, gItemIconPalette_BikeVoucher},
- [ITEM_GOLD_TEETH] = {gItemIcon_GoldTeeth, gItemIconPalette_GoldTeeth},
- [ITEM_CARD_KEY] = {gItemIcon_CardKey, gItemIconPalette_CardKey},
- [ITEM_LIFT_KEY] = {gItemIcon_LiftKey, gItemIconPalette_Key},
- [ITEM_SILPH_SCOPE] = {gItemIcon_SilphScope, gItemIconPalette_SilphScope},
- [ITEM_TRI_PASS] = {gItemIcon_TriPass, gItemIconPalette_TriPass},
- [ITEM_RAINBOW_PASS] = {gItemIcon_RainbowPass, gItemIconPalette_RainbowPass},
- [ITEM_TEA] = {gItemIcon_Tea, gItemIconPalette_Tea},
- [ITEM_RUBY] = {gItemIcon_Gem, gItemIconPalette_Ruby},
- [ITEM_SAPPHIRE] = {gItemIcon_Gem, gItemIconPalette_Sapphire},
- [ITEM_ABILITY_SHIELD] = {gItemIcon_AbilityShield, gItemIconPalette_AbilityShield},
- [ITEM_CLEAR_AMULET] = {gItemIcon_ClearAmulet, gItemIconPalette_ClearAmulet},
- [ITEM_PUNCHING_GLOVE] = {gItemIcon_PunchingGlove, gItemIconPalette_PunchingGlove},
- [ITEM_COVERT_CLOAK] = {gItemIcon_CovertCloak, gItemIconPalette_CovertCloak},
- [ITEM_LOADED_DICE] = {gItemIcon_LoadedDice, gItemIconPalette_LoadedDice},
- [ITEM_AUSPICIOUS_ARMOR] = {gItemIcon_AuspiciousArmor, gItemIconPalette_AuspiciousArmor},
- [ITEM_BOOSTER_ENERGY] = {gItemIcon_BoosterEnergy, gItemIconPalette_BoosterEnergy},
- [ITEM_BIG_BAMBOO_SHOOT] = {gItemIcon_BigBambooShoot, gItemIconPalette_BigBambooShoot},
- [ITEM_GIMMIGHOUL_COIN] = {gItemIcon_GimmighoulCoin, gItemIconPalette_GimmighoulCoin},
- [ITEM_LEADERS_CREST] = {gItemIcon_LeadersCrest, gItemIconPalette_LeadersCrest},
- [ITEM_MALICIOUS_ARMOR] = {gItemIcon_MaliciousArmor, gItemIconPalette_MaliciousArmor},
- [ITEM_MIRROR_HERB] = {gItemIcon_MirrorHerb, gItemIconPalette_MirrorHerb},
- [ITEM_SCROLL_OF_DARKNESS] = {gItemIcon_ScrollOfDarkness, gItemIconPalette_ScrollOfDarkness},
- [ITEM_SCROLL_OF_WATERS] = {gItemIcon_ScrollOfWaters, gItemIconPalette_ScrollOfWaters},
- [ITEM_TERA_ORB] = {gItemIcon_TeraOrb, gItemIconPalette_TeraOrb},
- [ITEM_TINY_BAMBOO_SHOOT] = {gItemIcon_TinyBambooShoot, gItemIconPalette_TinyBambooShoot},
- [ITEM_BUG_TERA_SHARD] = {gItemIcon_TeraShard, gItemIconPalette_BugTeraShard},
- [ITEM_DARK_TERA_SHARD] = {gItemIcon_TeraShard, gItemIconPalette_DarkTeraShard},
- [ITEM_DRAGON_TERA_SHARD] = {gItemIcon_TeraShard, gItemIconPalette_DragonTeraShard},
- [ITEM_ELECTRIC_TERA_SHARD] = {gItemIcon_TeraShard, gItemIconPalette_ElectricTeraShard},
- [ITEM_FAIRY_TERA_SHARD] = {gItemIcon_TeraShard, gItemIconPalette_FairyTeraShard},
- [ITEM_FIGHTING_TERA_SHARD] = {gItemIcon_TeraShard, gItemIconPalette_FightingTeraShard},
- [ITEM_FIRE_TERA_SHARD] = {gItemIcon_TeraShard, gItemIconPalette_FireTeraShard},
- [ITEM_FLYING_TERA_SHARD] = {gItemIcon_TeraShard, gItemIconPalette_FlyingTeraShard},
- [ITEM_GHOST_TERA_SHARD] = {gItemIcon_TeraShard, gItemIconPalette_GhostTeraShard},
- [ITEM_GRASS_TERA_SHARD] = {gItemIcon_TeraShard, gItemIconPalette_GrassTeraShard},
- [ITEM_GROUND_TERA_SHARD] = {gItemIcon_TeraShard, gItemIconPalette_GroundTeraShard},
- [ITEM_ICE_TERA_SHARD] = {gItemIcon_TeraShard, gItemIconPalette_IceTeraShard},
- [ITEM_NORMAL_TERA_SHARD] = {gItemIcon_TeraShard, gItemIconPalette_NormalTeraShard},
- [ITEM_POISON_TERA_SHARD] = {gItemIcon_TeraShard, gItemIconPalette_PoisonTeraShard},
- [ITEM_PSYCHIC_TERA_SHARD] = {gItemIcon_TeraShard, gItemIconPalette_PsychicTeraShard},
- [ITEM_ROCK_TERA_SHARD] = {gItemIcon_TeraShard, gItemIconPalette_RockTeraShard},
- [ITEM_STEEL_TERA_SHARD] = {gItemIcon_TeraShard, gItemIconPalette_SteelTeraShard},
- [ITEM_WATER_TERA_SHARD] = {gItemIcon_TeraShard, gItemIconPalette_WaterTeraShard},
- [ITEM_ADAMANT_CRYSTAL] = {gItemIcon_AdamantCrystal, gItemIconPalette_AdamantCrystal},
- [ITEM_GRISEOUS_CORE] = {gItemIcon_GriseousCore, gItemIconPalette_GriseousCore},
- [ITEM_LUSTROUS_GLOBE] = {gItemIcon_LustrousGlobe, gItemIconPalette_LustrousGlobe},
- [ITEM_BLACK_AUGURITE] = {gItemIcon_BlackAugurite, gItemIconPalette_BlackAugurite},
- [ITEM_LINKING_CORD] = {gItemIcon_LinkingCord, gItemIconPalette_LinkingCord},
- [ITEM_PEAT_BLOCK] = {gItemIcon_PeatBlock, gItemIconPalette_PeatBlock},
- [ITEM_BERSERK_GENE] = {gItemIcon_BerserkGene, gItemIconPalette_BerserkGene},
- [ITEM_FAIRY_FEATHER] = {gItemIcon_FairyFeather, gItemIconPalette_FairyFeather},
- [ITEM_SYRUPY_APPLE] = {gItemIcon_SyrupyApple, gItemIconPalette_SyrupyApple},
- [ITEM_UNREMARKABLE_TEACUP] = {gItemIcon_UnremarkableTeacup, gItemIconPalette_UnremarkableTeacup},
- [ITEM_MASTERPIECE_TEACUP] = {gItemIcon_MasterpieceTeacup, gItemIconPalette_MasterpieceTeacup},
- [ITEM_CORNERSTONE_MASK] = {gItemIcon_CornerstoneMask, gItemIconPalette_CornerstoneMask},
- [ITEM_WELLSPRING_MASK] = {gItemIcon_WellspringMask, gItemIconPalette_WellspringMask},
- [ITEM_HEARTHFLAME_MASK] = {gItemIcon_HearthflameMask, gItemIconPalette_HearthflameMask},
- [ITEM_HEALTH_MOCHI] = {gItemIcon_Mochi, gItemIconPalette_HealthMochi},
- [ITEM_MUSCLE_MOCHI] = {gItemIcon_Mochi, gItemIconPalette_MuscleMochi},
- [ITEM_RESIST_MOCHI] = {gItemIcon_Mochi, gItemIconPalette_ResistMochi},
- [ITEM_GENIUS_MOCHI] = {gItemIcon_Mochi, gItemIconPalette_GeniusMochi},
- [ITEM_CLEVER_MOCHI] = {gItemIcon_Mochi, gItemIconPalette_CleverMochi},
- [ITEM_SWIFT_MOCHI] = {gItemIcon_Mochi, gItemIconPalette_SwiftMochi},
- [ITEM_FRESH_START_MOCHI] = {gItemIcon_Mochi, gItemIconPalette_FreshStartMochi},
- [ITEM_GLIMMERING_CHARM] = {gItemIcon_GlimmeringCharm, gItemIconPalette_GlimmeringCharm},
- [ITEM_METAL_ALLOY] = {gItemIcon_MetalAlloy, gItemIconPalette_MetalAlloy},
- [ITEM_STELLAR_TERA_SHARD] = {gItemIcon_StellarTeraShard, gItemIconPalette_StellarTeraShard},
- [ITEM_JUBILIFE_MUFFIN] = {gItemIcon_JubilifeMuffin, gItemIconPalette_JubilifeMuffin},
- [ITEM_REMEDY] = {gItemIcon_Remedy, gItemIconPalette_Remedy},
- [ITEM_FINE_REMEDY] = {gItemIcon_FineRemedy, gItemIconPalette_FineRemedy},
- [ITEM_SUPERB_REMEDY] = {gItemIcon_SuperbRemedy, gItemIconPalette_SuperbRemedy},
- [ITEM_AUX_EVASION] = {gItemIcon_AuxBottle, gItemIconPalette_AuxEvasion},
- [ITEM_AUX_GUARD] = {gItemIcon_AuxBottle, gItemIconPalette_AuxGuard},
- [ITEM_AUX_POWER] = {gItemIcon_AuxBottle, gItemIconPalette_AuxPower},
- [ITEM_AUX_POWERGUARD] = {gItemIcon_AuxPowerguard, gItemIconPalette_AuxPowerguard},
- [ITEM_CHOICE_DUMPLING] = {gItemIcon_ChoiceDumpling, gItemIconPalette_ChoiceDumpling},
- [ITEM_SWAP_SNACK] = {gItemIcon_SwapSnack, gItemIconPalette_SwapSnack},
- [ITEM_TWICE_SPICED_RADISH] = {gItemIcon_TwiceSpicedRadish, gItemIconPalette_TwiceSpicedRadish},
- [ITEM_POKESHI_DOLL] = {gItemIcon_PokeshiDoll, gItemIconPalette_PokeshiDoll},
- // Return to field arrow
- [ITEMS_COUNT] = {gItemIcon_ReturnToFieldArrow, gItemIconPalette_ReturnToFieldArrow},
-};
+
diff --git a/src/data/items.h b/src/data/items.h
index 433c6c4325b0..f97c4670c104 100644
--- a/src/data/items.h
+++ b/src/data/items.h
@@ -1,4 +1,8 @@
-#include "constants/moves.h"
+#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
@@ -150,6 +154,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_QuestionMark,
+ .iconPalette = gItemIconPalette_QuestionMark,
},
// Poké Balls
@@ -166,6 +172,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.battleUsage = EFFECT_ITEM_THROW_BALL,
.secondaryId = ITEM_POKE_BALL - FIRST_BALL,
+ .iconPic = gItemIcon_PokeBall,
+ .iconPalette = gItemIconPalette_PokeBall,
},
[ITEM_GREAT_BALL] =
@@ -180,6 +188,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.battleUsage = EFFECT_ITEM_THROW_BALL,
.secondaryId = ITEM_GREAT_BALL - FIRST_BALL,
+ .iconPic = gItemIcon_GreatBall,
+ .iconPalette = gItemIconPalette_GreatBall,
},
[ITEM_ULTRA_BALL] =
@@ -194,6 +204,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.battleUsage = EFFECT_ITEM_THROW_BALL,
.secondaryId = ITEM_ULTRA_BALL - FIRST_BALL,
+ .iconPic = gItemIcon_UltraBall,
+ .iconPalette = gItemIconPalette_UltraBall,
},
[ITEM_MASTER_BALL] =
@@ -208,6 +220,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.battleUsage = EFFECT_ITEM_THROW_BALL,
.secondaryId = ITEM_MASTER_BALL - FIRST_BALL,
+ .iconPic = gItemIcon_MasterBall,
+ .iconPalette = gItemIconPalette_MasterBall,
},
[ITEM_PREMIER_BALL] =
@@ -222,6 +236,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.battleUsage = EFFECT_ITEM_THROW_BALL,
.secondaryId = ITEM_PREMIER_BALL - FIRST_BALL,
+ .iconPic = gItemIcon_PremierBall,
+ .iconPalette = gItemIconPalette_LuxuryBall,
},
[ITEM_HEAL_BALL] =
@@ -236,6 +252,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.battleUsage = EFFECT_ITEM_THROW_BALL,
.secondaryId = ITEM_HEAL_BALL - FIRST_BALL,
+ .iconPic = gItemIcon_HealBall,
+ .iconPalette = gItemIconPalette_HealBall,
},
[ITEM_NET_BALL] =
@@ -250,6 +268,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.battleUsage = EFFECT_ITEM_THROW_BALL,
.secondaryId = ITEM_NET_BALL - FIRST_BALL,
+ .iconPic = gItemIcon_NetBall,
+ .iconPalette = gItemIconPalette_NetBall,
},
[ITEM_NEST_BALL] =
@@ -264,6 +284,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.battleUsage = EFFECT_ITEM_THROW_BALL,
.secondaryId = ITEM_NEST_BALL - FIRST_BALL,
+ .iconPic = gItemIcon_NestBall,
+ .iconPalette = gItemIconPalette_NestBall,
},
[ITEM_DIVE_BALL] =
@@ -278,6 +300,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.battleUsage = EFFECT_ITEM_THROW_BALL,
.secondaryId = ITEM_DIVE_BALL - FIRST_BALL,
+ .iconPic = gItemIcon_DiveBall,
+ .iconPalette = gItemIconPalette_DiveBall,
},
[ITEM_DUSK_BALL] =
@@ -292,6 +316,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.battleUsage = EFFECT_ITEM_THROW_BALL,
.secondaryId = ITEM_DUSK_BALL - FIRST_BALL,
+ .iconPic = gItemIcon_DuskBall,
+ .iconPalette = gItemIconPalette_DuskBall,
},
[ITEM_TIMER_BALL] =
@@ -306,6 +332,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.battleUsage = EFFECT_ITEM_THROW_BALL,
.secondaryId = ITEM_TIMER_BALL - FIRST_BALL,
+ .iconPic = gItemIcon_TimerBall,
+ .iconPalette = gItemIconPalette_RepeatBall,
},
[ITEM_QUICK_BALL] =
@@ -320,6 +348,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.battleUsage = EFFECT_ITEM_THROW_BALL,
.secondaryId = ITEM_QUICK_BALL - FIRST_BALL,
+ .iconPic = gItemIcon_QuickBall,
+ .iconPalette = gItemIconPalette_QuickBall,
},
[ITEM_REPEAT_BALL] =
@@ -334,6 +364,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.battleUsage = EFFECT_ITEM_THROW_BALL,
.secondaryId = ITEM_REPEAT_BALL - FIRST_BALL,
+ .iconPic = gItemIcon_RepeatBall,
+ .iconPalette = gItemIconPalette_RepeatBall,
},
[ITEM_LUXURY_BALL] =
@@ -348,6 +380,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.battleUsage = EFFECT_ITEM_THROW_BALL,
.secondaryId = ITEM_LUXURY_BALL - FIRST_BALL,
+ .iconPic = gItemIcon_LuxuryBall,
+ .iconPalette = gItemIconPalette_LuxuryBall,
},
[ITEM_LEVEL_BALL] =
@@ -362,6 +396,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.battleUsage = EFFECT_ITEM_THROW_BALL,
.secondaryId = ITEM_LEVEL_BALL - FIRST_BALL,
+ .iconPic = gItemIcon_LevelBall,
+ .iconPalette = gItemIconPalette_LevelBall,
},
[ITEM_LURE_BALL] =
@@ -376,6 +412,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.battleUsage = EFFECT_ITEM_THROW_BALL,
.secondaryId = ITEM_LURE_BALL - FIRST_BALL,
+ .iconPic = gItemIcon_LureBall,
+ .iconPalette = gItemIconPalette_LureBall,
},
[ITEM_MOON_BALL] =
@@ -390,6 +428,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.battleUsage = EFFECT_ITEM_THROW_BALL,
.secondaryId = ITEM_MOON_BALL - FIRST_BALL,
+ .iconPic = gItemIcon_MoonBall,
+ .iconPalette = gItemIconPalette_MoonBall,
},
[ITEM_FRIEND_BALL] =
@@ -404,6 +444,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.battleUsage = EFFECT_ITEM_THROW_BALL,
.secondaryId = ITEM_FRIEND_BALL - FIRST_BALL,
+ .iconPic = gItemIcon_FriendBall,
+ .iconPalette = gItemIconPalette_FriendBall,
},
[ITEM_LOVE_BALL] =
@@ -418,6 +460,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.battleUsage = EFFECT_ITEM_THROW_BALL,
.secondaryId = ITEM_LOVE_BALL - FIRST_BALL,
+ .iconPic = gItemIcon_LoveBall,
+ .iconPalette = gItemIconPalette_LoveBall,
},
[ITEM_FAST_BALL] =
@@ -432,6 +476,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.battleUsage = EFFECT_ITEM_THROW_BALL,
.secondaryId = ITEM_FAST_BALL - FIRST_BALL,
+ .iconPic = gItemIcon_FastBall,
+ .iconPalette = gItemIconPalette_FastBall,
},
[ITEM_HEAVY_BALL] =
@@ -446,6 +492,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.battleUsage = EFFECT_ITEM_THROW_BALL,
.secondaryId = ITEM_HEAVY_BALL - FIRST_BALL,
+ .iconPic = gItemIcon_HeavyBall,
+ .iconPalette = gItemIconPalette_HeavyBall,
},
[ITEM_DREAM_BALL] =
@@ -465,6 +513,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.battleUsage = EFFECT_ITEM_THROW_BALL,
.secondaryId = ITEM_DREAM_BALL - FIRST_BALL,
+ .iconPic = gItemIcon_DreamBall,
+ .iconPalette = gItemIconPalette_DreamBall,
},
[ITEM_SAFARI_BALL] =
@@ -479,6 +529,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.battleUsage = EFFECT_ITEM_THROW_BALL,
.secondaryId = ITEM_SAFARI_BALL - FIRST_BALL,
+ .iconPic = gItemIcon_SafariBall,
+ .iconPalette = gItemIconPalette_SafariBall,
},
[ITEM_SPORT_BALL] =
@@ -493,6 +545,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.battleUsage = EFFECT_ITEM_THROW_BALL,
.secondaryId = ITEM_SPORT_BALL - FIRST_BALL,
+ .iconPic = gItemIcon_SportBall,
+ .iconPalette = gItemIconPalette_SportBall,
},
[ITEM_PARK_BALL] =
@@ -506,6 +560,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.battleUsage = EFFECT_ITEM_THROW_BALL,
.secondaryId = ITEM_PARK_BALL - FIRST_BALL,
+ .iconPic = gItemIcon_ParkBall,
+ .iconPalette = gItemIconPalette_ParkBall,
},
[ITEM_BEAST_BALL] =
@@ -519,6 +575,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.battleUsage = EFFECT_ITEM_THROW_BALL,
.secondaryId = ITEM_BEAST_BALL - FIRST_BALL,
+ .iconPic = gItemIcon_BeastBall,
+ .iconPalette = gItemIconPalette_BeastBall,
},
[ITEM_CHERISH_BALL] =
@@ -533,6 +591,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.battleUsage = EFFECT_ITEM_THROW_BALL,
.secondaryId = ITEM_CHERISH_BALL - FIRST_BALL,
+ .iconPic = gItemIcon_CherishBall,
+ .iconPalette = gItemIconPalette_CherishBall,
},
// Medicine
@@ -552,6 +612,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_RESTORE_HP,
.effect = gItemEffect_Potion,
.flingPower = 30,
+ .iconPic = gItemIcon_Potion,
+ .iconPalette = gItemIconPalette_Potion,
},
[ITEM_SUPER_POTION] =
@@ -573,6 +635,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_RESTORE_HP,
.effect = gItemEffect_SuperPotion,
.flingPower = 30,
+ .iconPic = gItemIcon_Potion,
+ .iconPalette = gItemIconPalette_SuperPotion,
},
[ITEM_HYPER_POTION] =
@@ -594,6 +658,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_RESTORE_HP,
.effect = gItemEffect_HyperPotion,
.flingPower = 30,
+ .iconPic = gItemIcon_Potion,
+ .iconPalette = gItemIconPalette_HyperPotion,
},
[ITEM_MAX_POTION] =
@@ -610,6 +676,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_RESTORE_HP,
.effect = gItemEffect_MaxPotion,
.flingPower = 30,
+ .iconPic = gItemIcon_LargePotion,
+ .iconPalette = gItemIconPalette_MaxPotion,
},
[ITEM_FULL_RESTORE] =
@@ -627,6 +695,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_HEAL_AND_CURE_STATUS,
.effect = gItemEffect_FullRestore,
.flingPower = 30,
+ .iconPic = gItemIcon_LargePotion,
+ .iconPalette = gItemIconPalette_FullRestore,
},
[ITEM_REVIVE] =
@@ -643,6 +713,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_REVIVE,
.effect = gItemEffect_Revive,
.flingPower = 30,
+ .iconPic = gItemIcon_Revive,
+ .iconPalette = gItemIconPalette_Revive,
},
[ITEM_MAX_REVIVE] =
@@ -656,6 +728,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_REVIVE,
.effect = gItemEffect_MaxRevive,
.flingPower = 30,
+ .iconPic = gItemIcon_MaxRevive,
+ .iconPalette = gItemIconPalette_Revive,
},
[ITEM_FRESH_WATER] =
@@ -677,6 +751,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_RESTORE_HP,
.effect = gItemEffect_FreshWater,
.flingPower = 30,
+ .iconPic = gItemIcon_FreshWater,
+ .iconPalette = gItemIconPalette_FreshWater,
},
[ITEM_SODA_POP] =
@@ -698,6 +774,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_RESTORE_HP,
.effect = gItemEffect_SodaPop,
.flingPower = 30,
+ .iconPic = gItemIcon_SodaPop,
+ .iconPalette = gItemIconPalette_SodaPop,
},
[ITEM_LEMONADE] =
@@ -722,6 +800,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_RESTORE_HP,
.effect = gItemEffect_Lemonade,
.flingPower = 30,
+ .iconPic = gItemIcon_Lemonade,
+ .iconPalette = gItemIconPalette_Lemonade,
},
[ITEM_MOOMOO_MILK] =
@@ -740,6 +820,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_RESTORE_HP,
.effect = gItemEffect_MoomooMilk,
.flingPower = 30,
+ .iconPic = gItemIcon_MoomooMilk,
+ .iconPalette = gItemIconPalette_MoomooMilk,
},
[ITEM_ENERGY_POWDER] =
@@ -761,6 +843,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_RESTORE_HP,
.effect = gItemEffect_EnergyPowder,
.flingPower = 30,
+ .iconPic = gItemIcon_Powder,
+ .iconPalette = gItemIconPalette_EnergyPowder,
},
[ITEM_ENERGY_ROOT] =
@@ -781,6 +865,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_RESTORE_HP,
.effect = gItemEffect_EnergyRoot,
.flingPower = 30,
+ .iconPic = gItemIcon_EnergyRoot,
+ .iconPalette = gItemIconPalette_EnergyRoot,
},
[ITEM_HEAL_POWDER] =
@@ -798,6 +884,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_CURE_STATUS,
.effect = gItemEffect_HealPowder,
.flingPower = 30,
+ .iconPic = gItemIcon_Powder,
+ .iconPalette = gItemIconPalette_HealPowder,
},
[ITEM_REVIVAL_HERB] =
@@ -814,6 +902,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_REVIVE,
.effect = gItemEffect_RevivalHerb,
.flingPower = 30,
+ .iconPic = gItemIcon_RevivalHerb,
+ .iconPalette = gItemIconPalette_RevivalHerb,
},
[ITEM_ANTIDOTE] =
@@ -829,6 +919,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_CURE_STATUS,
.effect = gItemEffect_Antidote,
.flingPower = 30,
+ .iconPic = gItemIcon_Antidote,
+ .iconPalette = gItemIconPalette_Antidote,
},
[ITEM_PARALYZE_HEAL] =
@@ -844,6 +936,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_CURE_STATUS,
.effect = gItemEffect_ParalyzeHeal,
.flingPower = 30,
+ .iconPic = gItemIcon_StatusHeal,
+ .iconPalette = gItemIconPalette_ParalyzeHeal,
},
[ITEM_BURN_HEAL] =
@@ -859,6 +953,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_CURE_STATUS,
.effect = gItemEffect_BurnHeal,
.flingPower = 30,
+ .iconPic = gItemIcon_StatusHeal,
+ .iconPalette = gItemIconPalette_BurnHeal,
},
[ITEM_ICE_HEAL] =
@@ -874,6 +970,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_CURE_STATUS,
.effect = gItemEffect_IceHeal,
.flingPower = 30,
+ .iconPic = gItemIcon_StatusHeal,
+ .iconPalette = gItemIconPalette_IceHeal,
},
[ITEM_AWAKENING] =
@@ -889,6 +987,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_CURE_STATUS,
.effect = gItemEffect_Awakening,
.flingPower = 30,
+ .iconPic = gItemIcon_StatusHeal,
+ .iconPalette = gItemIconPalette_Awakening,
},
[ITEM_FULL_HEAL] =
@@ -902,6 +1002,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_CURE_STATUS,
.effect = gItemEffect_FullHeal,
.flingPower = 30,
+ .iconPic = gItemIcon_FullHeal,
+ .iconPalette = gItemIconPalette_FullHeal,
},
[ITEM_ETHER] =
@@ -919,6 +1021,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_RESTORE_PP,
.effect = gItemEffect_Ether,
.flingPower = 30,
+ .iconPic = gItemIcon_Ether,
+ .iconPalette = gItemIconPalette_Ether,
},
[ITEM_MAX_ETHER] =
@@ -936,6 +1040,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_RESTORE_PP,
.effect = gItemEffect_MaxEther,
.flingPower = 30,
+ .iconPic = gItemIcon_Ether,
+ .iconPalette = gItemIconPalette_MaxEther,
},
[ITEM_ELIXIR] =
@@ -952,6 +1058,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_RESTORE_PP,
.effect = gItemEffect_Elixir,
.flingPower = 30,
+ .iconPic = gItemIcon_Ether,
+ .iconPalette = gItemIconPalette_Elixir,
},
[ITEM_MAX_ELIXIR] =
@@ -969,6 +1077,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_RESTORE_PP,
.effect = gItemEffect_MaxElixir,
.flingPower = 30,
+ .iconPic = gItemIcon_Ether,
+ .iconPalette = gItemIconPalette_MaxElixir,
},
[ITEM_BERRY_JUICE] =
@@ -988,6 +1098,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_RESTORE_HP,
.effect = gItemEffect_Potion,
.flingPower = 30,
+ .iconPic = gItemIcon_BerryJuice,
+ .iconPalette = gItemIconPalette_BerryJuice,
},
[ITEM_SACRED_ASH] =
@@ -1004,6 +1116,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_SacredAsh,
.effect = gItemEffect_SacredAsh,
.flingPower = 30,
+ .iconPic = gItemIcon_SacredAsh,
+ .iconPalette = gItemIconPalette_SacredAsh,
},
[ITEM_SWEET_HEART] =
@@ -1021,6 +1135,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_RESTORE_HP,
.effect = gItemEffect_Potion,
.flingPower = 30,
+ .iconPic = gItemIcon_SweetHeart,
+ .iconPalette = gItemIconPalette_SweetHeart,
},
[ITEM_MAX_HONEY] =
@@ -1035,14 +1151,16 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_REVIVE,
.effect = gItemEffect_MaxRevive,
.flingPower = 30,
+ .iconPic = gItemIcon_MaxHoney,
+ .iconPalette = gItemIconPalette_MaxHoney,
},
// Regional Specialties
[ITEM_PEWTER_CRUNCHIES] =
{
- .name = _("PewtrCrnches"),
- .pluralName = _("PewtrCrnches"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("PewtrCrnches", "Pewter Crunchies"),
+ .pluralName = HANDLE_EXPANDED_ITEM_NAME("PewtrCrnches", "Pewter Crunchies"),
.price = 250,
.description = sFullHealDesc,
.pocket = POCKET_ITEMS,
@@ -1051,11 +1169,13 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_CURE_STATUS,
.effect = gItemEffect_FullHeal,
.flingPower = 30,
+ .iconPic = gItemIcon_PewterCrunchies,
+ .iconPalette = gItemIconPalette_PewterCrunchies,
},
[ITEM_RAGE_CANDY_BAR] =
{
- .name = _("RageCandyBar"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("RageCandyBar", "Rage Candy Bar"),
.price = (I_PRICE >= GEN_7) ? 350 : 300,
.description = sFullHealDesc,
.pocket = POCKET_ITEMS,
@@ -1064,6 +1184,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_CURE_STATUS,
.effect = gItemEffect_FullHeal,
.flingPower = 30,
+ .iconPic = gItemIcon_RageCandyBar,
+ .iconPalette = gItemIconPalette_RageCandyBar,
},
[ITEM_LAVA_COOKIE] =
@@ -1080,6 +1202,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_CURE_STATUS,
.effect = gItemEffect_FullHeal,
.flingPower = 30,
+ .iconPic = gItemIcon_LavaCookie,
+ .iconPalette = gItemIconPalette_LavaCookieAndLetter,
},
[ITEM_OLD_GATEAU] =
@@ -1094,6 +1218,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_CURE_STATUS,
.effect = gItemEffect_FullHeal,
.flingPower = 30,
+ .iconPic = gItemIcon_OldGateau,
+ .iconPalette = gItemIconPalette_OldGateau,
},
[ITEM_CASTELIACONE] =
@@ -1107,11 +1233,13 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_CURE_STATUS,
.effect = gItemEffect_FullHeal,
.flingPower = 30,
+ .iconPic = gItemIcon_Casteliacone,
+ .iconPalette = gItemIconPalette_Casteliacone,
},
[ITEM_LUMIOSE_GALETTE] =
{
- .name = _("LumioseGlete"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("LumioseGlete", "Lumiose Galette"),
.price = (I_PRICE >= GEN_7) ? 350 : 200,
.description = sFullHealDesc,
.pocket = POCKET_ITEMS,
@@ -1120,11 +1248,13 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_CURE_STATUS,
.effect = gItemEffect_FullHeal,
.flingPower = 30,
+ .iconPic = gItemIcon_LumioseGalette,
+ .iconPalette = gItemIconPalette_LumioseGalette,
},
[ITEM_SHALOUR_SABLE] =
{
- .name = _("ShalourSable"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("ShalourSable", "Shalour Sable"),
.price = (I_PRICE >= GEN_7) ? 350 : 200,
.description = sFullHealDesc,
.pocket = POCKET_ITEMS,
@@ -1133,6 +1263,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_CURE_STATUS,
.effect = gItemEffect_FullHeal,
.flingPower = 30,
+ .iconPic = gItemIcon_ShalourSable,
+ .iconPalette = gItemIconPalette_ShalourSable,
},
[ITEM_BIG_MALASADA] =
@@ -1146,6 +1278,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_CURE_STATUS,
.effect = gItemEffect_FullHeal,
.flingPower = 30,
+ .iconPic = gItemIcon_BigMalasada,
+ .iconPalette = gItemIconPalette_BigMalasada,
},
// Vitamins
@@ -1162,6 +1296,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.effect = gItemEffect_HPUp,
.flingPower = 30,
+ .iconPic = gItemIcon_HPUp,
+ .iconPalette = gItemIconPalette_HPUp,
},
[ITEM_PROTEIN] =
@@ -1177,6 +1313,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.effect = gItemEffect_Protein,
.flingPower = 30,
+ .iconPic = gItemIcon_Vitamin,
+ .iconPalette = gItemIconPalette_Protein,
},
[ITEM_IRON] =
@@ -1192,6 +1330,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.effect = gItemEffect_Iron,
.flingPower = 30,
+ .iconPic = gItemIcon_Vitamin,
+ .iconPalette = gItemIconPalette_Iron,
},
[ITEM_CALCIUM] =
@@ -1207,6 +1347,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.effect = gItemEffect_Calcium,
.flingPower = 30,
+ .iconPic = gItemIcon_Vitamin,
+ .iconPalette = gItemIconPalette_Calcium,
},
[ITEM_ZINC] =
@@ -1222,6 +1364,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.effect = gItemEffect_Zinc,
.flingPower = 30,
+ .iconPic = gItemIcon_Vitamin,
+ .iconPalette = gItemIconPalette_Zinc,
},
[ITEM_CARBOS] =
@@ -1238,6 +1382,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.effect = gItemEffect_Carbos,
.flingPower = 30,
+ .iconPic = gItemIcon_Vitamin,
+ .iconPalette = gItemIconPalette_Carbos,
},
[ITEM_PP_UP] =
@@ -1253,6 +1399,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_PPUp,
.effect = gItemEffect_PPUp,
.flingPower = 30,
+ .iconPic = gItemIcon_PPUp,
+ .iconPalette = gItemIconPalette_PPUp,
},
[ITEM_PP_MAX] =
@@ -1269,13 +1417,15 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_PPUp,
.effect = gItemEffect_PPMax,
.flingPower = 30,
+ .iconPic = gItemIcon_PPMax,
+ .iconPalette = gItemIconPalette_PPMax,
},
// EV Feathers
[ITEM_HEALTH_FEATHER] =
{
- .name = _("HealthFeather"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("HealthFeather", "Health Feather"),
.price = (I_PRICE >= GEN_7) ? 300 : 3000,
.description = sHealthFeatherDesc,
.pocket = POCKET_ITEMS,
@@ -1283,11 +1433,13 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.effect = gItemEffect_HpFeather,
.flingPower = 20,
+ .iconPic = gItemIcon_HealthFeather,
+ .iconPalette = gItemIconPalette_HealthFeather,
},
[ITEM_MUSCLE_FEATHER] =
{
- .name = _("MuscleFeather"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("MuscleFeather", "Muscle Feather"),
.price = (I_PRICE >= GEN_7) ? 300 : 3000,
.description = sMuscleFeatherDesc,
.pocket = POCKET_ITEMS,
@@ -1295,11 +1447,13 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.effect = gItemEffect_AtkFeather,
.flingPower = 20,
+ .iconPic = gItemIcon_MuscleFeather,
+ .iconPalette = gItemIconPalette_MuscleFeather,
},
[ITEM_RESIST_FEATHER] =
{
- .name = _("ResistFeather"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("ResistFeather", "Resist Feather"),
.price = (I_PRICE >= GEN_7) ? 300 : 3000,
.description = sResistFeatherDesc,
.pocket = POCKET_ITEMS,
@@ -1307,11 +1461,13 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.effect = gItemEffect_DefFeather,
.flingPower = 20,
+ .iconPic = gItemIcon_ResistFeather,
+ .iconPalette = gItemIconPalette_ResistFeather,
},
[ITEM_GENIUS_FEATHER] =
{
- .name = _("GeniusFeather"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("GeniusFeather", "Genius Feather"),
.price = (I_PRICE >= GEN_7) ? 300 : 3000,
.description = sGeniusFeatherDesc,
.pocket = POCKET_ITEMS,
@@ -1319,11 +1475,13 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.effect = gItemEffect_SpatkFeather,
.flingPower = 20,
+ .iconPic = gItemIcon_GeniusFeather,
+ .iconPalette = gItemIconPalette_GeniusFeather,
},
[ITEM_CLEVER_FEATHER] =
{
- .name = _("CleverFeather"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("CleverFeather", "Clever Feather"),
.price = (I_PRICE >= GEN_7) ? 300 : 3000,
.description = sCleverFeatherDesc,
.pocket = POCKET_ITEMS,
@@ -1331,11 +1489,13 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.effect = gItemEffect_SpdefFeather,
.flingPower = 20,
+ .iconPic = gItemIcon_CleverFeather,
+ .iconPalette = gItemIconPalette_CleverFeather,
},
[ITEM_SWIFT_FEATHER] =
{
- .name = _("SwiftFeather"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("SwiftFeather", "Swift Feather"),
.price = (I_PRICE >= GEN_7) ? 300 : 3000,
.description = sSwiftFeatherDesc,
.pocket = POCKET_ITEMS,
@@ -1343,13 +1503,15 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.effect = gItemEffect_SpeedFeather,
.flingPower = 20,
+ .iconPic = gItemIcon_SwiftFeather,
+ .iconPalette = gItemIconPalette_SwiftFeather,
},
// Ability Modifiers
[ITEM_ABILITY_CAPSULE] =
{
- .name = _("AbilityCapsle"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("AbilityCapsle", "Ability Capsule"),
.price = (I_PRICE < GEN_7) ? 1000 : ((I_PRICE < GEN_9) ? 10000 : 100000),
.holdEffectParam = 0,
.description = COMPOUND_STRING(
@@ -1358,12 +1520,14 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_AbilityCapsule,
+ .iconPic = gItemIcon_AbilityCapsule,
+ .iconPalette = gItemIconPalette_AbilityCapsule,
},
[ITEM_ABILITY_PATCH] =
{
- .name = _("AbilityPatch"),
- .pluralName = _("AbilityPatches"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("AbilityPatch", "Ability Patch"),
+ .pluralName = HANDLE_EXPANDED_ITEM_NAME("AbilityPatches", "Ability Patches"),
.price = (I_PRICE >= GEN_9) ? 250000 : 20,
.holdEffectParam = 0,
.description = COMPOUND_STRING(
@@ -1373,6 +1537,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_AbilityPatch,
+ .iconPic = gItemIcon_AbilityPatch,
+ .iconPalette = gItemIconPalette_AbilityPatch,
},
// Mints
@@ -1390,6 +1556,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Mint,
.secondaryId = NATURE_LONELY,
.flingPower = 10,
+ .iconPic = gItemIcon_Mint,
+ .iconPalette = gItemIconPalette_RedMint,
},
[ITEM_ADAMANT_MINT] =
@@ -1405,6 +1573,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Mint,
.secondaryId = NATURE_ADAMANT,
.flingPower = 10,
+ .iconPic = gItemIcon_Mint,
+ .iconPalette = gItemIconPalette_RedMint,
},
[ITEM_NAUGHTY_MINT] =
@@ -1420,6 +1590,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Mint,
.secondaryId = NATURE_NAUGHTY,
.flingPower = 10,
+ .iconPic = gItemIcon_Mint,
+ .iconPalette = gItemIconPalette_RedMint,
},
[ITEM_BRAVE_MINT] =
@@ -1435,6 +1607,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Mint,
.secondaryId = NATURE_BRAVE,
.flingPower = 10,
+ .iconPic = gItemIcon_Mint,
+ .iconPalette = gItemIconPalette_RedMint,
},
[ITEM_BOLD_MINT] =
@@ -1450,6 +1624,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Mint,
.secondaryId = NATURE_BOLD,
.flingPower = 10,
+ .iconPic = gItemIcon_Mint,
+ .iconPalette = gItemIconPalette_BlueMint,
},
[ITEM_IMPISH_MINT] =
@@ -1465,6 +1641,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Mint,
.secondaryId = NATURE_IMPISH,
.flingPower = 10,
+ .iconPic = gItemIcon_Mint,
+ .iconPalette = gItemIconPalette_BlueMint,
},
[ITEM_LAX_MINT] =
@@ -1480,6 +1658,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Mint,
.secondaryId = NATURE_LAX,
.flingPower = 10,
+ .iconPic = gItemIcon_Mint,
+ .iconPalette = gItemIconPalette_BlueMint,
},
[ITEM_RELAXED_MINT] =
@@ -1495,6 +1675,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Mint,
.secondaryId = NATURE_RELAXED,
.flingPower = 10,
+ .iconPic = gItemIcon_Mint,
+ .iconPalette = gItemIconPalette_BlueMint,
},
[ITEM_MODEST_MINT] =
@@ -1510,6 +1692,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Mint,
.secondaryId = NATURE_MODEST,
.flingPower = 10,
+ .iconPic = gItemIcon_Mint,
+ .iconPalette = gItemIconPalette_LightBlueMint,
},
[ITEM_MILD_MINT] =
@@ -1525,6 +1709,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Mint,
.secondaryId = NATURE_MILD,
.flingPower = 10,
+ .iconPic = gItemIcon_Mint,
+ .iconPalette = gItemIconPalette_LightBlueMint,
},
[ITEM_RASH_MINT] =
@@ -1540,6 +1726,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Mint,
.secondaryId = NATURE_RASH,
.flingPower = 10,
+ .iconPic = gItemIcon_Mint,
+ .iconPalette = gItemIconPalette_LightBlueMint,
},
[ITEM_QUIET_MINT] =
@@ -1555,6 +1743,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Mint,
.secondaryId = NATURE_QUIET,
.flingPower = 10,
+ .iconPic = gItemIcon_Mint,
+ .iconPalette = gItemIconPalette_LightBlueMint,
},
[ITEM_CALM_MINT] =
@@ -1570,6 +1760,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Mint,
.secondaryId = NATURE_CALM,
.flingPower = 10,
+ .iconPic = gItemIcon_Mint,
+ .iconPalette = gItemIconPalette_PinkMint,
},
[ITEM_GENTLE_MINT] =
@@ -1585,6 +1777,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Mint,
.secondaryId = NATURE_GENTLE,
.flingPower = 10,
+ .iconPic = gItemIcon_Mint,
+ .iconPalette = gItemIconPalette_PinkMint,
},
[ITEM_CAREFUL_MINT] =
@@ -1600,6 +1794,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Mint,
.secondaryId = NATURE_CAREFUL,
.flingPower = 10,
+ .iconPic = gItemIcon_Mint,
+ .iconPalette = gItemIconPalette_PinkMint,
},
[ITEM_SASSY_MINT] =
@@ -1615,6 +1811,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Mint,
.secondaryId = NATURE_SASSY,
.flingPower = 10,
+ .iconPic = gItemIcon_Mint,
+ .iconPalette = gItemIconPalette_PinkMint,
},
[ITEM_TIMID_MINT] =
@@ -1630,6 +1828,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Mint,
.secondaryId = NATURE_TIMID,
.flingPower = 10,
+ .iconPic = gItemIcon_Mint,
+ .iconPalette = gItemIconPalette_GreenMint,
},
[ITEM_HASTY_MINT] =
@@ -1645,6 +1845,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Mint,
.secondaryId = NATURE_HASTY,
.flingPower = 10,
+ .iconPic = gItemIcon_Mint,
+ .iconPalette = gItemIconPalette_GreenMint,
},
[ITEM_JOLLY_MINT] =
@@ -1660,6 +1862,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Mint,
.secondaryId = NATURE_JOLLY,
.flingPower = 10,
+ .iconPic = gItemIcon_Mint,
+ .iconPalette = gItemIconPalette_GreenMint,
},
[ITEM_NAIVE_MINT] =
@@ -1675,6 +1879,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Mint,
.secondaryId = NATURE_NAIVE,
.flingPower = 10,
+ .iconPic = gItemIcon_Mint,
+ .iconPalette = gItemIconPalette_GreenMint,
},
[ITEM_SERIOUS_MINT] =
@@ -1690,6 +1896,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Mint,
.secondaryId = NATURE_SERIOUS,
.flingPower = 10,
+ .iconPic = gItemIcon_Mint,
+ .iconPalette = gItemIconPalette_YellowMint,
},
// Candy
@@ -1708,12 +1916,14 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_RareCandy,
.effect = gItemEffect_RareCandy,
.flingPower = 30,
+ .iconPic = gItemIcon_RareCandy,
+ .iconPalette = gItemIconPalette_RareCandy,
},
[ITEM_EXP_CANDY_XS] =
{
- .name = _("Exp.Candy XS"),
- .pluralName = _("Exp.Candies XS"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("Exp.Candy XS", "Exp. Candy XS"),
+ .pluralName = HANDLE_EXPANDED_ITEM_NAME("Exp.Candies XS", "Exp. Candies XS"),
.price = 20,
.holdEffectParam = EXP_100,
.description = COMPOUND_STRING(
@@ -1725,12 +1935,14 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_RareCandy,
.effect = gItemEffect_RareCandy,
.flingPower = 30,
+ .iconPic = gItemIcon_ExpCandyXS,
+ .iconPalette = gItemIconPalette_ExpCandies,
},
[ITEM_EXP_CANDY_S] =
{
- .name = _("Exp.Candy S"),
- .pluralName = _("Exp.Candies S"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("Exp.Candy S", "Exp. Candy S"),
+ .pluralName = HANDLE_EXPANDED_ITEM_NAME("Exp.Candies S", "Exp. Candies S"),
.price = 240,
.holdEffectParam = EXP_800,
.description = COMPOUND_STRING(
@@ -1742,12 +1954,14 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_RareCandy,
.effect = gItemEffect_RareCandy,
.flingPower = 30,
+ .iconPic = gItemIcon_ExpCandyS,
+ .iconPalette = gItemIconPalette_ExpCandies,
},
[ITEM_EXP_CANDY_M] =
{
- .name = _("Exp.Candy M"),
- .pluralName = _("Exp.Candies M"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("Exp.Candy M", "Exp. Candy M"),
+ .pluralName = HANDLE_EXPANDED_ITEM_NAME("Exp.Candies M", "Exp. Candies M"),
.price = 1000,
.holdEffectParam = EXP_3000,
.description = COMPOUND_STRING(
@@ -1759,12 +1973,14 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_RareCandy,
.effect = gItemEffect_RareCandy,
.flingPower = 30,
+ .iconPic = gItemIcon_ExpCandyM,
+ .iconPalette = gItemIconPalette_ExpCandies,
},
[ITEM_EXP_CANDY_L] =
{
- .name = _("Exp.Candy L"),
- .pluralName = _("Exp.Candies L"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("Exp.Candy L", "Exp. Candy L"),
+ .pluralName = HANDLE_EXPANDED_ITEM_NAME("Exp.Candies L", "Exp. Candies L"),
.price = 3000,
.holdEffectParam = EXP_10000,
.description = COMPOUND_STRING(
@@ -1776,12 +1992,14 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_RareCandy,
.effect = gItemEffect_RareCandy,
.flingPower = 30,
+ .iconPic = gItemIcon_ExpCandyL,
+ .iconPalette = gItemIconPalette_ExpCandies,
},
[ITEM_EXP_CANDY_XL] =
{
- .name = _("Exp.Candy XL"),
- .pluralName = _("Exp.Candies XL"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("Exp.Candy XL", "Exp. Candy XL"),
+ .pluralName = HANDLE_EXPANDED_ITEM_NAME("Exp.Candies XL", "Exp. Candies XL"),
.price = 10000,
.holdEffectParam = EXP_30000,
.description = COMPOUND_STRING(
@@ -1793,12 +2011,14 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_RareCandy,
.effect = gItemEffect_RareCandy,
.flingPower = 30,
+ .iconPic = gItemIcon_ExpCandyXL,
+ .iconPalette = gItemIconPalette_ExpCandies,
},
[ITEM_DYNAMAX_CANDY] =
{
- .name = _("DynamaxCandy"),
- .pluralName = _("DynamaxCandies"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("DynamaxCandy", "Dynamax Candy"),
+ .pluralName = HANDLE_EXPANDED_ITEM_NAME("DynamaxCandies", "Dynamax Candies"),
.price = 0,
.description = COMPOUND_STRING(
"Raises the Dynamax\n"
@@ -1808,6 +2028,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_DynamaxCandy,
.flingPower = 30,
+ .iconPic = gItemIcon_DynamaxCandy,
+ .iconPalette = gItemIconPalette_DynamaxCandy,
},
// Medicinal Flutes
@@ -1826,6 +2048,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_CURE_STATUS,
.effect = gItemEffect_Awakening,
.flingPower = 30,
+ .iconPic = gItemIcon_Flute,
+ .iconPalette = gItemIconPalette_BlueFlute,
},
[ITEM_YELLOW_FLUTE] =
@@ -1842,6 +2066,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_CURE_STATUS,
.effect = gItemEffect_YellowFlute,
.flingPower = 30,
+ .iconPic = gItemIcon_Flute,
+ .iconPalette = gItemIconPalette_YellowFlute,
},
[ITEM_RED_FLUTE] =
@@ -1858,6 +2084,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_CURE_STATUS,
.effect = gItemEffect_RedFlute,
.flingPower = 30,
+ .iconPic = gItemIcon_Flute,
+ .iconPalette = gItemIconPalette_RedFlute,
},
// Encounter-modifying Flutes
@@ -1875,6 +2103,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_BlackWhiteFlute,
.flingPower = 30,
+ .iconPic = gItemIcon_Flute,
+ .iconPalette = gItemIconPalette_BlackFlute,
},
[ITEM_WHITE_FLUTE] =
@@ -1889,6 +2119,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_BlackWhiteFlute,
.flingPower = 30,
+ .iconPic = gItemIcon_Flute,
+ .iconPalette = gItemIconPalette_WhiteFlute,
},
// Encounter Modifiers
@@ -1906,6 +2138,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_Repel,
.flingPower = 30,
+ .iconPic = gItemIcon_Repel,
+ .iconPalette = gItemIconPalette_Repel,
},
[ITEM_SUPER_REPEL] =
@@ -1921,6 +2155,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_Repel,
.flingPower = 30,
+ .iconPic = gItemIcon_Repel,
+ .iconPalette = gItemIconPalette_SuperRepel,
},
[ITEM_MAX_REPEL] =
@@ -1936,6 +2172,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_Repel,
.flingPower = 30,
+ .iconPic = gItemIcon_Repel,
+ .iconPalette = gItemIconPalette_MaxRepel,
},
[ITEM_LURE] =
@@ -1952,6 +2190,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Lure,
.secondaryId = 0,
.flingPower = 30,
+ .iconPic = gItemIcon_Lure,
+ .iconPalette = gItemIconPalette_Lure,
},
[ITEM_SUPER_LURE] =
@@ -1968,6 +2208,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Lure,
.secondaryId = 0,
.flingPower = 30,
+ .iconPic = gItemIcon_Lure,
+ .iconPalette = gItemIconPalette_SuperLure,
},
[ITEM_MAX_LURE] =
@@ -1984,6 +2226,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Lure,
.secondaryId = 0,
.flingPower = 30,
+ .iconPic = gItemIcon_Lure,
+ .iconPalette = gItemIconPalette_MaxLure,
},
[ITEM_ESCAPE_ROPE] =
@@ -2004,6 +2248,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_FIELD,
.fieldUseFunc = ItemUseOutOfBattle_EscapeRope,
.flingPower = 30,
+ .iconPic = gItemIcon_EscapeRope,
+ .iconPalette = gItemIconPalette_EscapeRope,
},
// X Items
@@ -2029,6 +2275,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_INCREASE_STAT,
.effect = gItemEffect_XAttack,
.flingPower = 30,
+ .iconPic = gItemIcon_BattleStatItem,
+ .iconPalette = gItemIconPalette_XAttack,
},
[ITEM_X_DEFENSE] =
@@ -2052,6 +2300,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_INCREASE_STAT,
.effect = gItemEffect_XDefense,
.flingPower = 30,
+ .iconPic = gItemIcon_BattleStatItem,
+ .iconPalette = gItemIconPalette_XDefend,
},
[ITEM_X_SP_ATK] =
@@ -2075,6 +2325,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_INCREASE_STAT,
.effect = gItemEffect_XSpecialAttack,
.flingPower = 30,
+ .iconPic = gItemIcon_BattleStatItem,
+ .iconPalette = gItemIconPalette_XSpecial,
},
[ITEM_X_SP_DEF] =
@@ -2098,6 +2350,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_INCREASE_STAT,
.effect = gItemEffect_XSpecialDefense,
.flingPower = 30,
+ .iconPic = gItemIcon_XSpecialDefense,
+ .iconPalette = gItemIconPalette_XSpecialDefense,
},
[ITEM_X_SPEED] =
@@ -2121,6 +2375,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_INCREASE_STAT,
.effect = gItemEffect_XSpeed,
.flingPower = 30,
+ .iconPic = gItemIcon_BattleStatItem,
+ .iconPalette = gItemIconPalette_XSpeed,
},
[ITEM_X_ACCURACY] =
@@ -2145,6 +2401,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_INCREASE_STAT,
.effect = gItemEffect_XAccuracy,
.flingPower = 30,
+ .iconPic = gItemIcon_BattleStatItem,
+ .iconPalette = gItemIconPalette_XAccuracy,
},
[ITEM_DIRE_HIT] =
@@ -2161,6 +2419,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_SET_FOCUS_ENERGY,
.effect = gItemEffect_DireHit,
.flingPower = 30,
+ .iconPic = gItemIcon_BattleStatItem,
+ .iconPalette = gItemIconPalette_DireHit,
},
[ITEM_GUARD_SPEC] =
@@ -2178,6 +2438,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_SET_MIST,
.effect = gItemEffect_GuardSpec,
.flingPower = 30,
+ .iconPic = gItemIcon_BattleStatItem,
+ .iconPalette = gItemIconPalette_GuardSpec,
},
[ITEM_POKE_DOLL] =
@@ -2190,6 +2452,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.battleUsage = EFFECT_ITEM_ESCAPE,
.flingPower = 30,
+ .iconPic = gItemIcon_PokeDoll,
+ .iconPalette = gItemIconPalette_PokeDoll,
},
[ITEM_FLUFFY_TAIL] =
@@ -2202,6 +2466,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.battleUsage = EFFECT_ITEM_ESCAPE,
.flingPower = 30,
+ .iconPic = gItemIcon_FluffyTail,
+ .iconPalette = gItemIconPalette_FluffyTail,
},
[ITEM_POKE_TOY] =
@@ -2214,12 +2480,14 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.battleUsage = EFFECT_ITEM_ESCAPE,
.flingPower = 30,
+ .iconPic = gItemIcon_PokeToy,
+ .iconPalette = gItemIconPalette_PokeToy,
},
[ITEM_MAX_MUSHROOMS] =
{
- .name = _("MaxMushrooms"),
- .pluralName = _("MaxMushrooms"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("MaxMushrooms", "Max Mushrooms"),
+ .pluralName = HANDLE_EXPANDED_ITEM_NAME("MaxMushrooms", "Max Mushrooms"),
.price = 8000,
.description = COMPOUND_STRING(
"Raises every stat\n"
@@ -2230,6 +2498,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.battleUsage = EFFECT_ITEM_INCREASE_ALL_STATS,
.flingPower = 30,
+ .iconPic = gItemIcon_MaxMushrooms,
+ .iconPalette = gItemIconPalette_MaxMushrooms,
},
// Treasures
@@ -2246,11 +2516,13 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_BottleCap,
+ .iconPalette = gItemIconPalette_BottleCap,
},
[ITEM_GOLD_BOTTLE_CAP] =
{
- .name = _("GoldBottlCap"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("GoldBottlCap", "Gold Bottle Cap"),
.price = (I_PRICE >= GEN_9) ? 60000 : 10000,
.description = COMPOUND_STRING(
"A beautiful bottle\n"
@@ -2260,6 +2532,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_BottleCap,
+ .iconPalette = gItemIconPalette_GoldBottleCap,
},
[ITEM_NUGGET] =
@@ -2274,6 +2548,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_Nugget,
+ .iconPalette = gItemIconPalette_Nugget,
},
[ITEM_BIG_NUGGET] =
@@ -2288,6 +2564,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 130,
+ .iconPic = gItemIcon_BigNugget,
+ .iconPalette = gItemIconPalette_BigNugget,
},
[ITEM_TINY_MUSHROOM] =
@@ -2302,6 +2580,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_TinyMushroom,
+ .iconPalette = gItemIconPalette_Mushroom,
},
[ITEM_BIG_MUSHROOM] =
@@ -2313,6 +2593,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_BigMushroom,
+ .iconPalette = gItemIconPalette_Mushroom,
},
[ITEM_BALM_MUSHROOM] =
@@ -2324,6 +2606,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_BalmMushroom,
+ .iconPalette = gItemIconPalette_BalmMushroom,
},
[ITEM_PEARL] =
@@ -2338,6 +2622,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_Pearl,
+ .iconPalette = gItemIconPalette_Pearl,
},
[ITEM_BIG_PEARL] =
@@ -2352,6 +2638,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_BigPearl,
+ .iconPalette = gItemIconPalette_Pearl,
},
[ITEM_PEARL_STRING] =
@@ -2366,6 +2654,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_PearlString,
+ .iconPalette = gItemIconPalette_PearlString,
},
[ITEM_STARDUST] =
@@ -2381,6 +2671,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_Stardust,
+ .iconPalette = gItemIconPalette_Star,
},
[ITEM_STAR_PIECE] =
@@ -2395,6 +2687,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_StarPiece,
+ .iconPalette = gItemIconPalette_Star,
},
[ITEM_COMET_SHARD] =
@@ -2409,6 +2703,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_CometShard,
+ .iconPalette = gItemIconPalette_CometShard,
},
[ITEM_SHOAL_SALT] =
@@ -2424,6 +2720,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_Powder,
+ .iconPalette = gItemIconPalette_ShoalSalt,
},
[ITEM_SHOAL_SHELL] =
@@ -2438,6 +2736,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_ShoalShell,
+ .iconPalette = gItemIconPalette_Shell,
},
[ITEM_RED_SHARD] =
@@ -2449,6 +2749,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_Shard,
+ .iconPalette = gItemIconPalette_RedShard,
},
[ITEM_BLUE_SHARD] =
@@ -2460,6 +2762,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_Shard,
+ .iconPalette = gItemIconPalette_BlueShard,
},
[ITEM_YELLOW_SHARD] =
@@ -2471,6 +2775,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_Shard,
+ .iconPalette = gItemIconPalette_YellowShard,
},
[ITEM_GREEN_SHARD] =
@@ -2482,6 +2788,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_Shard,
+ .iconPalette = gItemIconPalette_GreenShard,
},
[ITEM_HEART_SCALE] =
@@ -2496,6 +2804,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_HeartScale,
+ .iconPalette = gItemIconPalette_HeartScale,
},
[ITEM_HONEY] =
@@ -2511,6 +2821,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_FIELD,
.fieldUseFunc = ItemUseOutOfBattle_Honey,
.flingPower = 30,
+ .iconPic = gItemIcon_Honey,
+ .iconPalette = gItemIconPalette_Honey,
},
[ITEM_RARE_BONE] =
@@ -2525,6 +2837,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 100,
+ .iconPic = gItemIcon_RareBone,
+ .iconPalette = gItemIconPalette_RareBone,
},
[ITEM_ODD_KEYSTONE] =
@@ -2539,11 +2853,13 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_OddKeystone,
+ .iconPalette = gItemIconPalette_OddKeystone,
},
[ITEM_PRETTY_FEATHER] =
{
- .name = _("PrettyFeather"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("PrettyFeather", "Pretty Feather"),
.price = (I_PRICE >= GEN_7) ? 1000 * TREASURE_FACTOR: 200,
.description = COMPOUND_STRING(
"A beautiful yet\n"
@@ -2553,6 +2869,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 20,
+ .iconPic = gItemIcon_PrettyFeather,
+ .iconPalette = gItemIconPalette_PrettyFeather,
},
[ITEM_RELIC_COPPER] =
@@ -2567,6 +2885,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_RelicCoin,
+ .iconPalette = gItemIconPalette_RelicCopper,
},
[ITEM_RELIC_SILVER] =
@@ -2581,6 +2901,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_RelicCoin,
+ .iconPalette = gItemIconPalette_RelicSilver,
},
[ITEM_RELIC_GOLD] =
@@ -2595,6 +2917,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_RelicCoin,
+ .iconPalette = gItemIconPalette_RelicGold,
},
[ITEM_RELIC_VASE] =
@@ -2609,6 +2933,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_RelicVase,
+ .iconPalette = gItemIconPalette_Relics,
},
[ITEM_RELIC_BAND] =
@@ -2623,6 +2949,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_RelicBand,
+ .iconPalette = gItemIconPalette_Relics,
},
[ITEM_RELIC_STATUE] =
@@ -2637,6 +2965,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_RelicStatue,
+ .iconPalette = gItemIconPalette_Relics,
},
[ITEM_RELIC_CROWN] =
@@ -2651,11 +2981,13 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_RelicCrown,
+ .iconPalette = gItemIconPalette_Relics,
},
[ITEM_STRANGE_SOUVENIR] =
{
- .name = _("StrngeSouvnr"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("StrngeSouvnr", "Strange Souvenir"),
.price = (I_PRICE >= GEN_7) ? 3000 : 10,
.description = COMPOUND_STRING(
"An ornament that\n"
@@ -2665,6 +2997,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_StrangeSouvenir,
+ .iconPalette = gItemIconPalette_StrangeSouvenir,
},
// Fossils
@@ -2687,6 +3021,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 100,
+ .iconPic = gItemIcon_HelixFossil,
+ .iconPalette = gItemIconPalette_KantoFossil,
},
[ITEM_DOME_FOSSIL] =
@@ -2707,6 +3043,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 100,
+ .iconPic = gItemIcon_DomeFossil,
+ .iconPalette = gItemIconPalette_KantoFossil,
},
[ITEM_OLD_AMBER] =
@@ -2727,6 +3065,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 100,
+ .iconPic = gItemIcon_OldAmber,
+ .iconPalette = gItemIconPalette_OldAmber,
},
[ITEM_ROOT_FOSSIL] =
@@ -2744,6 +3084,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 100,
+ .iconPic = gItemIcon_RootFossil,
+ .iconPalette = gItemIconPalette_HoennFossil,
},
[ITEM_CLAW_FOSSIL] =
@@ -2761,6 +3103,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 100,
+ .iconPic = gItemIcon_ClawFossil,
+ .iconPalette = gItemIconPalette_HoennFossil,
},
[ITEM_ARMOR_FOSSIL] =
@@ -2775,6 +3119,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 100,
+ .iconPic = gItemIcon_ArmorFossil,
+ .iconPalette = gItemIconPalette_ArmorFossil,
},
[ITEM_SKULL_FOSSIL] =
@@ -2789,6 +3135,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 100,
+ .iconPic = gItemIcon_SkullFossil,
+ .iconPalette = gItemIconPalette_SkullFossil,
},
[ITEM_COVER_FOSSIL] =
@@ -2803,6 +3151,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 100,
+ .iconPic = gItemIcon_CoverFossil,
+ .iconPalette = gItemIconPalette_CoverFossil,
},
[ITEM_PLUME_FOSSIL] =
@@ -2817,6 +3167,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 100,
+ .iconPic = gItemIcon_PlumeFossil,
+ .iconPalette = gItemIconPalette_PlumeFossil,
},
[ITEM_JAW_FOSSIL] =
@@ -2831,6 +3183,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 100,
+ .iconPic = gItemIcon_JawFossil,
+ .iconPalette = gItemIconPalette_JawFossil,
},
[ITEM_SAIL_FOSSIL] =
@@ -2845,11 +3199,13 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 100,
+ .iconPic = gItemIcon_SailFossil,
+ .iconPalette = gItemIconPalette_SailFossil,
},
[ITEM_FOSSILIZED_BIRD] =
{
- .name = _("FosslzedBird"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("FosslzedBird", "Fossilized Bird"),
.price = 5000,
.description = COMPOUND_STRING(
"A fossil of an\n"
@@ -2859,23 +3215,27 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 100,
+ .iconPic = gItemIcon_FossilizedBird,
+ .iconPalette = gItemIconPalette_FossilizedBird,
},
[ITEM_FOSSILIZED_FISH] =
{
- .name = _("FosslzedFish"),
- .pluralName = _("FosslzedFishes"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("FosslzedFish", "Fossilized Fish"),
+ .pluralName = HANDLE_EXPANDED_ITEM_NAME("FosslzedFishes", "Fossilized Fishes"),
.price = 5000,
.description = sFossilizedFishDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 100,
+ .iconPic = gItemIcon_FossilizedFish,
+ .iconPalette = gItemIconPalette_FossilizedFish,
},
[ITEM_FOSSILIZED_DRAKE] =
{
- .name = _("FosslzedDrke"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("FosslzedDrke", "Fossilized Drake"),
.price = 5000,
.description = COMPOUND_STRING(
"A fossil of an\n"
@@ -2885,17 +3245,21 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 100,
+ .iconPic = gItemIcon_FossilizedDrake,
+ .iconPalette = gItemIconPalette_FossilizedDrake,
},
[ITEM_FOSSILIZED_DINO] =
{
- .name = _("FosslzedDino"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("FosslzedDino", "Fossilized Dino"),
.price = 5000,
.description = sFossilizedFishDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 100,
+ .iconPic = gItemIcon_FossilizedDino,
+ .iconPalette = gItemIconPalette_FossilizedDino,
},
// Mulch
@@ -2918,6 +3282,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = ITEM_TO_MULCH(ITEM_GROWTH_MULCH),
.flingPower = 30,
+ .iconPic = gItemIcon_Mulch,
+ .iconPalette = gItemIconPalette_GrowthMulch,
},
[ITEM_DAMP_MULCH] =
@@ -2938,6 +3304,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = ITEM_TO_MULCH(ITEM_DAMP_MULCH),
.flingPower = 30,
+ .iconPic = gItemIcon_Mulch,
+ .iconPalette = gItemIconPalette_DampMulch,
},
[ITEM_STABLE_MULCH] =
@@ -2958,6 +3326,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = ITEM_TO_MULCH(ITEM_STABLE_MULCH),
.flingPower = 30,
+ .iconPic = gItemIcon_StableMulch,
+ .iconPalette = gItemIconPalette_StableMulch,
},
[ITEM_GOOEY_MULCH] =
@@ -2978,6 +3348,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = ITEM_TO_MULCH(ITEM_GOOEY_MULCH),
.flingPower = 30,
+ .iconPic = gItemIcon_Mulch,
+ .iconPalette = gItemIconPalette_GooeyMulch,
},
[ITEM_RICH_MULCH] =
@@ -2998,12 +3370,14 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = ITEM_TO_MULCH(ITEM_RICH_MULCH),
.flingPower = 30,
+ .iconPic = gItemIcon_Mulch,
+ .iconPalette = gItemIconPalette_RichMulch,
},
[ITEM_SURPRISE_MULCH] =
{
- .name = _("SurprseMulch"),
- .pluralName = _("SurprseMulch"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("SurprseMulch", "Surprise Mulch"),
+ .pluralName = HANDLE_EXPANDED_ITEM_NAME("SurprseMulch", "Surprise Mulch"),
.price = 200,
#if OW_BERRY_MULCH_USAGE == TRUE
.description = COMPOUND_STRING(
@@ -3018,6 +3392,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = ITEM_TO_MULCH(ITEM_SURPRISE_MULCH),
.flingPower = 30,
+ .iconPic = gItemIcon_Mulch,
+ .iconPalette = gItemIconPalette_SurpriseMulch,
},
[ITEM_BOOST_MULCH] =
@@ -3038,6 +3414,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = ITEM_TO_MULCH(ITEM_BOOST_MULCH),
.flingPower = 30,
+ .iconPic = gItemIcon_Mulch,
+ .iconPalette = gItemIconPalette_BoostMulch,
},
[ITEM_AMAZE_MULCH] =
@@ -3058,6 +3436,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = ITEM_TO_MULCH(ITEM_AMAZE_MULCH),
.flingPower = 30,
+ .iconPic = gItemIcon_Mulch,
+ .iconPalette = gItemIconPalette_AmazeMulch,
},
// Apricorns
@@ -3073,6 +3453,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_RedApricorn,
+ .iconPalette = gItemIconPalette_RedApricorn,
},
[ITEM_BLUE_APRICORN] =
@@ -3086,11 +3468,13 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_BlueApricorn,
+ .iconPalette = gItemIconPalette_BlueApricorn,
},
[ITEM_YELLOW_APRICORN] =
{
- .name = _("YellwApricorn"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("YellwApricorn", "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"
@@ -3099,11 +3483,13 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_YellowApricorn,
+ .iconPalette = gItemIconPalette_YellowApricorn,
},
[ITEM_GREEN_APRICORN] =
{
- .name = _("GreenApricorn"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("GreenApricorn", "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"
@@ -3112,6 +3498,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_GreenApricorn,
+ .iconPalette = gItemIconPalette_GreenApricorn,
},
[ITEM_PINK_APRICORN] =
@@ -3125,11 +3513,13 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_PinkApricorn,
+ .iconPalette = gItemIconPalette_PinkApricorn,
},
[ITEM_WHITE_APRICORN] =
{
- .name = _("WhiteApricorn"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("WhiteApricorn", "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"
@@ -3138,11 +3528,13 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_WhiteApricorn,
+ .iconPalette = gItemIconPalette_WhiteApricorn,
},
[ITEM_BLACK_APRICORN] =
{
- .name = _("BlackApricorn"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("BlackApricorn", "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"
@@ -3151,11 +3543,13 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_BlackApricorn,
+ .iconPalette = gItemIconPalette_BlackApricorn,
},
[ITEM_WISHING_PIECE] =
{
- .name = _("WishingPiece"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("WishingPiece", "Wishing Piece"),
.price = 20,
.description = COMPOUND_STRING(
"Throw into a\n"
@@ -3165,11 +3559,13 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo
.flingPower = 50,
+ .iconPic = gItemIcon_WishingPiece,
+ .iconPalette = gItemIconPalette_WishingPiece,
},
[ITEM_GALARICA_TWIG] =
{
- .name = _("GalaricaTwig"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("GalaricaTwig", "Galarica Twig"),
.price = 20 * TREASURE_FACTOR,
.description = COMPOUND_STRING(
"A twig from a tree\n"
@@ -3179,6 +3575,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_GalaricaTwig,
+ .iconPalette = gItemIconPalette_GalaricaItem,
},
[ITEM_ARMORITE_ORE] =
@@ -3194,6 +3592,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_ArmoriteOre,
+ .iconPalette = gItemIconPalette_ArmoriteOre,
},
[ITEM_DYNITE_ORE] =
@@ -3209,6 +3609,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_DyniteOre,
+ .iconPalette = gItemIconPalette_DyniteOre,
},
// Mail
@@ -3226,6 +3628,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_MAIL,
.fieldUseFunc = ItemUseOutOfBattle_Mail,
.secondaryId = ITEM_TO_MAIL(ITEM_ORANGE_MAIL),
+ .iconPic = gItemIcon_OrangeMail,
+ .iconPalette = gItemIconPalette_OrangeMail,
},
[ITEM_HARBOR_MAIL] =
@@ -3241,6 +3645,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_MAIL,
.fieldUseFunc = ItemUseOutOfBattle_Mail,
.secondaryId = ITEM_TO_MAIL(ITEM_HARBOR_MAIL),
+ .iconPic = gItemIcon_HarborMail,
+ .iconPalette = gItemIconPalette_HarborMail,
},
[ITEM_GLITTER_MAIL] =
@@ -3256,6 +3662,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_MAIL,
.fieldUseFunc = ItemUseOutOfBattle_Mail,
.secondaryId = ITEM_TO_MAIL(ITEM_GLITTER_MAIL),
+ .iconPic = gItemIcon_GlitterMail,
+ .iconPalette = gItemIconPalette_GlitterMail,
},
[ITEM_MECH_MAIL] =
@@ -3271,6 +3679,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_MAIL,
.fieldUseFunc = ItemUseOutOfBattle_Mail,
.secondaryId = ITEM_TO_MAIL(ITEM_MECH_MAIL),
+ .iconPic = gItemIcon_MechMail,
+ .iconPalette = gItemIconPalette_MechMail,
},
[ITEM_WOOD_MAIL] =
@@ -3286,6 +3696,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_MAIL,
.fieldUseFunc = ItemUseOutOfBattle_Mail,
.secondaryId = ITEM_TO_MAIL(ITEM_WOOD_MAIL),
+ .iconPic = gItemIcon_WoodMail,
+ .iconPalette = gItemIconPalette_WoodMail,
},
[ITEM_WAVE_MAIL] =
@@ -3301,6 +3713,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_MAIL,
.fieldUseFunc = ItemUseOutOfBattle_Mail,
.secondaryId = ITEM_TO_MAIL(ITEM_WAVE_MAIL),
+ .iconPic = gItemIcon_WaveMail,
+ .iconPalette = gItemIconPalette_WaveMail,
},
[ITEM_BEAD_MAIL] =
@@ -3313,6 +3727,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_MAIL,
.fieldUseFunc = ItemUseOutOfBattle_Mail,
.secondaryId = ITEM_TO_MAIL(ITEM_BEAD_MAIL),
+ .iconPic = gItemIcon_BeadMail,
+ .iconPalette = gItemIconPalette_BeadMail,
},
[ITEM_SHADOW_MAIL] =
@@ -3328,6 +3744,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_MAIL,
.fieldUseFunc = ItemUseOutOfBattle_Mail,
.secondaryId = ITEM_TO_MAIL(ITEM_SHADOW_MAIL),
+ .iconPic = gItemIcon_ShadowMail,
+ .iconPalette = gItemIconPalette_ShadowMail,
},
[ITEM_TROPIC_MAIL] =
@@ -3343,6 +3761,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_MAIL,
.fieldUseFunc = ItemUseOutOfBattle_Mail,
.secondaryId = ITEM_TO_MAIL(ITEM_TROPIC_MAIL),
+ .iconPic = gItemIcon_TropicMail,
+ .iconPalette = gItemIconPalette_TropicMail,
},
[ITEM_DREAM_MAIL] =
@@ -3355,6 +3775,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_MAIL,
.fieldUseFunc = ItemUseOutOfBattle_Mail,
.secondaryId = ITEM_TO_MAIL(ITEM_DREAM_MAIL),
+ .iconPic = gItemIcon_DreamMail,
+ .iconPalette = gItemIconPalette_DreamMail,
},
[ITEM_FAB_MAIL] =
@@ -3370,6 +3792,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_MAIL,
.fieldUseFunc = ItemUseOutOfBattle_Mail,
.secondaryId = ITEM_TO_MAIL(ITEM_FAB_MAIL),
+ .iconPic = gItemIcon_FabMail,
+ .iconPalette = gItemIconPalette_FabMail,
},
[ITEM_RETRO_MAIL] =
@@ -3385,6 +3809,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_MAIL,
.fieldUseFunc = ItemUseOutOfBattle_Mail,
.secondaryId = ITEM_TO_MAIL(ITEM_RETRO_MAIL),
+ .iconPic = gItemIcon_RetroMail,
+ .iconPalette = gItemIconPalette_RetroMail,
},
// Evolution Items
@@ -3399,6 +3825,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
.effect = gItemEffect_EvoItem,
.flingPower = 30,
+ .iconPic = gItemIcon_FireStone,
+ .iconPalette = gItemIconPalette_FireStone,
},
[ITEM_WATER_STONE] =
@@ -3411,6 +3839,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
.effect = gItemEffect_EvoItem,
.flingPower = 30,
+ .iconPic = gItemIcon_WaterStone,
+ .iconPalette = gItemIconPalette_WaterStone,
},
[ITEM_THUNDER_STONE] =
@@ -3423,6 +3853,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
.effect = gItemEffect_EvoItem,
.flingPower = 30,
+ .iconPic = gItemIcon_ThunderStone,
+ .iconPalette = gItemIconPalette_ThunderStone,
},
[ITEM_LEAF_STONE] =
@@ -3435,6 +3867,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
.effect = gItemEffect_EvoItem,
.flingPower = 30,
+ .iconPic = gItemIcon_LeafStone,
+ .iconPalette = gItemIconPalette_LeafStone,
},
[ITEM_ICE_STONE] =
@@ -3447,6 +3881,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
.effect = gItemEffect_EvoItem,
.flingPower = 30,
+ .iconPic = gItemIcon_IceStone,
+ .iconPalette = gItemIconPalette_IceStone,
},
[ITEM_SUN_STONE] =
@@ -3459,6 +3895,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
.effect = gItemEffect_EvoItem,
.flingPower = 30,
+ .iconPic = gItemIcon_SunStone,
+ .iconPalette = gItemIconPalette_SunStone,
},
[ITEM_MOON_STONE] =
@@ -3471,6 +3909,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
.effect = gItemEffect_EvoItem,
.flingPower = 30,
+ .iconPic = gItemIcon_MoonStone,
+ .iconPalette = gItemIconPalette_MoonStone,
},
[ITEM_SHINY_STONE] =
@@ -3483,6 +3923,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
.effect = gItemEffect_EvoItem,
.flingPower = 30,
+ .iconPic = gItemIcon_ShinyStone,
+ .iconPalette = gItemIconPalette_ShinyStone,
},
[ITEM_DUSK_STONE] =
@@ -3495,6 +3937,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
.effect = gItemEffect_EvoItem,
.flingPower = 80,
+ .iconPic = gItemIcon_DuskStone,
+ .iconPalette = gItemIconPalette_DuskStone,
},
[ITEM_DAWN_STONE] =
@@ -3507,6 +3951,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
.effect = gItemEffect_EvoItem,
.flingPower = 80,
+ .iconPic = gItemIcon_DawnStone,
+ .iconPalette = gItemIconPalette_DawnStone,
},
[ITEM_SWEET_APPLE] =
@@ -3522,6 +3968,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
.effect = gItemEffect_EvoItem,
.flingPower = 30,
+ .iconPic = gItemIcon_SweetApple,
+ .iconPalette = gItemIconPalette_SweetApple,
},
[ITEM_TART_APPLE] =
@@ -3537,6 +3985,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
.effect = gItemEffect_EvoItem,
.flingPower = 30,
+ .iconPic = gItemIcon_TartApple,
+ .iconPalette = gItemIconPalette_TartApple,
},
[ITEM_CRACKED_POT] =
@@ -3552,6 +4002,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
.effect = gItemEffect_EvoItem,
.flingPower = 80,
+ .iconPic = gItemIcon_CrackedPot,
+ .iconPalette = gItemIconPalette_Pot,
},
[ITEM_CHIPPED_POT] =
@@ -3567,11 +4019,13 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
.effect = gItemEffect_EvoItem,
.flingPower = 80,
+ .iconPic = gItemIcon_ChippedPot,
+ .iconPalette = gItemIconPalette_Pot,
},
[ITEM_GALARICA_CUFF] =
{
- .name = _("GalaricaCuff"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("GalaricaCuff", "Galarica Cuff"),
.price = (I_PRICE >= GEN_9) ? 3000 : 6000,
.description = COMPOUND_STRING(
"A cuff from Galar\n"
@@ -3582,12 +4036,14 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
.effect = gItemEffect_EvoItem,
.flingPower = 30,
+ .iconPic = gItemIcon_GalaricaCuff,
+ .iconPalette = gItemIconPalette_GalaricaItem,
},
[ITEM_GALARICA_WREATH] =
{
- .name = _("GalrcaWreath"),
- .pluralName = _("GalrcaWreathes"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("GalrcaWreath", "Galarica Wreath"),
+ .pluralName = HANDLE_EXPANDED_ITEM_NAME("GalrcaWreathes", "Galarica Wreathes"),
.price = (I_PRICE >= GEN_9) ? 3000 : 6000,
.description = COMPOUND_STRING(
"A wreath made in\n"
@@ -3598,6 +4054,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
.effect = gItemEffect_EvoItem,
.flingPower = 30,
+ .iconPic = gItemIcon_GalaricaWreath,
+ .iconPalette = gItemIconPalette_GalaricaItem,
},
[ITEM_DRAGON_SCALE] =
@@ -3615,6 +4073,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = EVO_HELD_ITEM_FIELD_FUNC,
.effect = gItemEffect_EvoItem,
.flingPower = 30,
+ .iconPic = gItemIcon_DragonScale,
+ .iconPalette = gItemIconPalette_DragonScale,
},
[ITEM_UPGRADE] =
@@ -3630,6 +4090,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = EVO_HELD_ITEM_FIELD_FUNC,
.effect = gItemEffect_EvoItem,
.flingPower = 30,
+ .iconPic = gItemIcon_Upgrade,
+ .iconPalette = gItemIconPalette_Upgrade,
},
[ITEM_PROTECTOR] =
@@ -3645,6 +4107,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = EVO_HELD_ITEM_FIELD_FUNC,
.effect = gItemEffect_EvoItem,
.flingPower = 80,
+ .iconPic = gItemIcon_Protector,
+ .iconPalette = gItemIconPalette_Protector,
},
[ITEM_ELECTIRIZER] =
@@ -3660,6 +4124,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = EVO_HELD_ITEM_FIELD_FUNC,
.effect = gItemEffect_EvoItem,
.flingPower = 80,
+ .iconPic = gItemIcon_Electirizer,
+ .iconPalette = gItemIconPalette_Electirizer,
},
[ITEM_MAGMARIZER] =
@@ -3675,6 +4141,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = EVO_HELD_ITEM_FIELD_FUNC,
.effect = gItemEffect_EvoItem,
.flingPower = 80,
+ .iconPic = gItemIcon_Magmarizer,
+ .iconPalette = gItemIconPalette_Magmarizer,
},
[ITEM_DUBIOUS_DISC] =
@@ -3690,6 +4158,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = EVO_HELD_ITEM_FIELD_FUNC,
.effect = gItemEffect_EvoItem,
.flingPower = 50,
+ .iconPic = gItemIcon_DubiousDisc,
+ .iconPalette = gItemIconPalette_DubiousDisc,
},
[ITEM_REAPER_CLOTH] =
@@ -3706,6 +4176,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = EVO_HELD_ITEM_FIELD_FUNC,
.effect = gItemEffect_EvoItem,
.flingPower = 10,
+ .iconPic = gItemIcon_ReaperCloth,
+ .iconPalette = gItemIconPalette_ReaperCloth,
},
[ITEM_PRISM_SCALE] =
@@ -3721,6 +4193,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = EVO_HELD_ITEM_FIELD_FUNC,
.effect = gItemEffect_EvoItem,
.flingPower = 30,
+ .iconPic = gItemIcon_PrismScale,
+ .iconPalette = gItemIconPalette_PrismScale,
},
[ITEM_WHIPPED_DREAM] =
@@ -3737,6 +4211,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = EVO_HELD_ITEM_FIELD_FUNC,
.effect = gItemEffect_EvoItem,
.flingPower = 80,
+ .iconPic = gItemIcon_WhippedDream,
+ .iconPalette = gItemIconPalette_WhippedDream,
},
[ITEM_SACHET] =
@@ -3752,6 +4228,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = EVO_HELD_ITEM_FIELD_FUNC,
.effect = gItemEffect_EvoItem,
.flingPower = 80,
+ .iconPic = gItemIcon_Sachet,
+ .iconPalette = gItemIconPalette_Sachet,
},
[ITEM_OVAL_STONE] =
@@ -3767,11 +4245,13 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = EVO_HELD_ITEM_FIELD_FUNC,
.effect = gItemEffect_EvoItem,
.flingPower = 80,
+ .iconPic = gItemIcon_OvalStone,
+ .iconPalette = gItemIconPalette_OvalStone,
},
[ITEM_STRAWBERRY_SWEET] =
{
- .name = _("StrwbrySweet"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("StrwbrySweet", "Strawberry Sweet"),
.price = 500 * TREASURE_FACTOR,
.description = COMPOUND_STRING(
"Strawberry-shaped\n"
@@ -3781,6 +4261,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_StrawberrySweet,
+ .iconPalette = gItemIconPalette_StrawberrySweet,
},
[ITEM_LOVE_SWEET] =
@@ -3795,6 +4277,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_LoveSweet,
+ .iconPalette = gItemIconPalette_LoveSweet,
},
[ITEM_BERRY_SWEET] =
@@ -3809,6 +4293,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_BerrySweet,
+ .iconPalette = gItemIconPalette_BerrySweet,
},
[ITEM_CLOVER_SWEET] =
@@ -3823,6 +4309,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_CloverSweet,
+ .iconPalette = gItemIconPalette_CloverSweet,
},
[ITEM_FLOWER_SWEET] =
@@ -3837,6 +4325,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_FlowerSweet,
+ .iconPalette = gItemIconPalette_FlowerSweet,
},
[ITEM_STAR_SWEET] =
@@ -3851,6 +4341,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_StarSweet,
+ .iconPalette = gItemIconPalette_StarSweet,
},
[ITEM_RIBBON_SWEET] =
@@ -3865,6 +4357,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_RibbonSweet,
+ .iconPalette = gItemIconPalette_RibbonSweet,
},
[ITEM_EVERSTONE] =
@@ -3880,6 +4374,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_Everstone,
+ .iconPalette = gItemIconPalette_Everstone,
},
// Nectars
@@ -3894,6 +4390,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_FormChange_ConsumedOnUse,
.flingPower = 10,
+ .iconPic = gItemIcon_RedNectar,
+ .iconPalette = gItemIconPalette_RedNectar,
},
[ITEM_YELLOW_NECTAR] =
@@ -3906,6 +4404,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_FormChange_ConsumedOnUse,
.flingPower = 10,
+ .iconPic = gItemIcon_YellowNectar,
+ .iconPalette = gItemIconPalette_YellowNectar,
},
[ITEM_PINK_NECTAR] =
@@ -3918,6 +4418,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_FormChange_ConsumedOnUse,
.flingPower = 10,
+ .iconPic = gItemIcon_PinkNectar,
+ .iconPalette = gItemIconPalette_PinkNectar,
},
[ITEM_PURPLE_NECTAR] =
@@ -3930,6 +4432,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_FormChange_ConsumedOnUse,
.flingPower = 10,
+ .iconPic = gItemIcon_PurpleNectar,
+ .iconPalette = gItemIconPalette_PurpleNectar,
},
// Plates
@@ -3949,6 +4453,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_FIRE,
.flingPower = 90,
+ .iconPic = gItemIcon_FlamePlate,
+ .iconPalette = gItemIconPalette_FlamePlate,
},
[ITEM_SPLASH_PLATE] =
@@ -3966,6 +4472,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_WATER,
.flingPower = 90,
+ .iconPic = gItemIcon_SplashPlate,
+ .iconPalette = gItemIconPalette_SplashPlate,
},
[ITEM_ZAP_PLATE] =
@@ -3983,6 +4491,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_ELECTRIC,
.flingPower = 90,
+ .iconPic = gItemIcon_ZapPlate,
+ .iconPalette = gItemIconPalette_ZapPlate,
},
[ITEM_MEADOW_PLATE] =
@@ -4000,6 +4510,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_GRASS,
.flingPower = 90,
+ .iconPic = gItemIcon_MeadowPlate,
+ .iconPalette = gItemIconPalette_MeadowPlate,
},
[ITEM_ICICLE_PLATE] =
@@ -4017,6 +4529,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_ICE,
.flingPower = 90,
+ .iconPic = gItemIcon_IciclePlate,
+ .iconPalette = gItemIconPalette_IciclePlate,
},
[ITEM_FIST_PLATE] =
@@ -4034,6 +4548,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_FIGHTING,
.flingPower = 90,
+ .iconPic = gItemIcon_FistPlate,
+ .iconPalette = gItemIconPalette_FistPlate,
},
[ITEM_TOXIC_PLATE] =
@@ -4051,6 +4567,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_POISON,
.flingPower = 90,
+ .iconPic = gItemIcon_ToxicPlate,
+ .iconPalette = gItemIconPalette_ToxicPlate,
},
[ITEM_EARTH_PLATE] =
@@ -4068,6 +4586,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_GROUND,
.flingPower = 90,
+ .iconPic = gItemIcon_EarthPlate,
+ .iconPalette = gItemIconPalette_EarthPlate,
},
[ITEM_SKY_PLATE] =
@@ -4085,6 +4605,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_FLYING,
.flingPower = 90,
+ .iconPic = gItemIcon_SkyPlate,
+ .iconPalette = gItemIconPalette_SkyPlate,
},
[ITEM_MIND_PLATE] =
@@ -4102,6 +4624,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_PSYCHIC,
.flingPower = 90,
+ .iconPic = gItemIcon_MindPlate,
+ .iconPalette = gItemIconPalette_MindPlate,
},
[ITEM_INSECT_PLATE] =
@@ -4119,6 +4643,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_BUG,
.flingPower = 90,
+ .iconPic = gItemIcon_InsectPlate,
+ .iconPalette = gItemIconPalette_InsectPlate,
},
[ITEM_STONE_PLATE] =
@@ -4136,6 +4662,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_ROCK,
.flingPower = 90,
+ .iconPic = gItemIcon_StonePlate,
+ .iconPalette = gItemIconPalette_StonePlate,
},
[ITEM_SPOOKY_PLATE] =
@@ -4153,6 +4681,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_GHOST,
.flingPower = 90,
+ .iconPic = gItemIcon_SpookyPlate,
+ .iconPalette = gItemIconPalette_SpookyPlate,
},
[ITEM_DRACO_PLATE] =
@@ -4170,6 +4700,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_DRAGON,
.flingPower = 90,
+ .iconPic = gItemIcon_DracoPlate,
+ .iconPalette = gItemIconPalette_DracoPlate,
},
[ITEM_DREAD_PLATE] =
@@ -4187,6 +4719,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_DARK,
.flingPower = 90,
+ .iconPic = gItemIcon_DreadPlate,
+ .iconPalette = gItemIconPalette_DreadPlate,
},
[ITEM_IRON_PLATE] =
@@ -4204,6 +4738,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_STEEL,
.flingPower = 90,
+ .iconPic = gItemIcon_IronPlate,
+ .iconPalette = gItemIconPalette_IronPlate,
},
[ITEM_PIXIE_PLATE] =
@@ -4221,6 +4757,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_FAIRY,
.flingPower = 90,
+ .iconPic = gItemIcon_PixiePlate,
+ .iconPalette = gItemIconPalette_PixiePlate,
},
// Drives
@@ -4239,6 +4777,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_WATER,
.flingPower = 70,
+ .iconPic = gItemIcon_DouseDrive,
+ .iconPalette = gItemIconPalette_DouseDrive,
},
[ITEM_SHOCK_DRIVE] =
@@ -4255,6 +4795,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_ELECTRIC,
.flingPower = 70,
+ .iconPic = gItemIcon_ShockDrive,
+ .iconPalette = gItemIconPalette_ShockDrive,
},
[ITEM_BURN_DRIVE] =
@@ -4271,6 +4813,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_FIRE,
.flingPower = 70,
+ .iconPic = gItemIcon_BurnDrive,
+ .iconPalette = gItemIconPalette_BurnDrive,
},
[ITEM_CHILL_DRIVE] =
@@ -4287,6 +4831,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_ICE,
.flingPower = 70,
+ .iconPic = gItemIcon_ChillDrive,
+ .iconPalette = gItemIconPalette_ChillDrive,
},
// Memories
@@ -4307,6 +4853,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_FIRE,
.flingPower = 50,
+ .iconPic = gItemIcon_FireMemory,
+ .iconPalette = gItemIconPalette_FireMemory,
},
[ITEM_WATER_MEMORY] =
@@ -4325,12 +4873,14 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_WATER,
.flingPower = 50,
+ .iconPic = gItemIcon_WaterMemory,
+ .iconPalette = gItemIconPalette_WaterMemory,
},
[ITEM_ELECTRIC_MEMORY] =
{
- .name = _("ElectrcMemory"),
- .pluralName = _("ElectrcMemories"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("ElectrcMemory", "Electric Memory"),
+ .pluralName = HANDLE_EXPANDED_ITEM_NAME("ElectrcMemories", "Electric Memories"),
.price = 1000,
.holdEffect = HOLD_EFFECT_MEMORY,
.holdEffectParam = 0,
@@ -4343,6 +4893,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_ELECTRIC,
.flingPower = 50,
+ .iconPic = gItemIcon_ElectricMemory,
+ .iconPalette = gItemIconPalette_ElectricMemory,
},
[ITEM_GRASS_MEMORY] =
@@ -4361,6 +4913,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_GRASS,
.flingPower = 50,
+ .iconPic = gItemIcon_GrassMemory,
+ .iconPalette = gItemIconPalette_GrassMemory,
},
[ITEM_ICE_MEMORY] =
@@ -4379,12 +4933,14 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_ICE,
.flingPower = 50,
+ .iconPic = gItemIcon_IceMemory,
+ .iconPalette = gItemIconPalette_IceMemory,
},
[ITEM_FIGHTING_MEMORY] =
{
- .name = _("FightngMemory"),
- .pluralName = _("FightngMemories"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("FightngMemory", "Fighting Memory"),
+ .pluralName = HANDLE_EXPANDED_ITEM_NAME("FightngMemories", "Fighting Memories"),
.price = 1000,
.holdEffect = HOLD_EFFECT_MEMORY,
.holdEffectParam = 0,
@@ -4397,6 +4953,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_FIGHTING,
.flingPower = 50,
+ .iconPic = gItemIcon_FightingMemory,
+ .iconPalette = gItemIconPalette_FightingMemory,
},
[ITEM_POISON_MEMORY] =
@@ -4415,6 +4973,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_POISON,
.flingPower = 50,
+ .iconPic = gItemIcon_PoisonMemory,
+ .iconPalette = gItemIconPalette_PoisonMemory,
},
[ITEM_GROUND_MEMORY] =
@@ -4433,6 +4993,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_GROUND,
.flingPower = 50,
+ .iconPic = gItemIcon_GroundMemory,
+ .iconPalette = gItemIconPalette_GroundMemory,
},
[ITEM_FLYING_MEMORY] =
@@ -4451,12 +5013,14 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_FLYING,
.flingPower = 50,
+ .iconPic = gItemIcon_FlyingMemory,
+ .iconPalette = gItemIconPalette_FlyingMemory,
},
[ITEM_PSYCHIC_MEMORY] =
{
- .name = _("PsychicMemory"),
- .pluralName = _("PsychicMemories"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("PsychicMemory", "Psychic Memory"),
+ .pluralName = HANDLE_EXPANDED_ITEM_NAME("PsychicMemories", "Psychic Memories"),
.price = 1000,
.holdEffect = HOLD_EFFECT_MEMORY,
.holdEffectParam = 0,
@@ -4469,6 +5033,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_PSYCHIC,
.flingPower = 50,
+ .iconPic = gItemIcon_PsychicMemory,
+ .iconPalette = gItemIconPalette_PsychicMemory,
},
[ITEM_BUG_MEMORY] =
@@ -4487,6 +5053,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_BUG,
.flingPower = 50,
+ .iconPic = gItemIcon_BugMemory,
+ .iconPalette = gItemIconPalette_BugMemory,
},
[ITEM_ROCK_MEMORY] =
@@ -4505,6 +5073,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_ROCK,
.flingPower = 50,
+ .iconPic = gItemIcon_RockMemory,
+ .iconPalette = gItemIconPalette_RockMemory,
},
[ITEM_GHOST_MEMORY] =
@@ -4523,6 +5093,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_GHOST,
.flingPower = 50,
+ .iconPic = gItemIcon_GhostMemory,
+ .iconPalette = gItemIconPalette_GhostMemory,
},
[ITEM_DRAGON_MEMORY] =
@@ -4541,6 +5113,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_DRAGON,
.flingPower = 50,
+ .iconPic = gItemIcon_DragonMemory,
+ .iconPalette = gItemIconPalette_DragonMemory,
},
[ITEM_DARK_MEMORY] =
@@ -4559,6 +5133,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_DARK,
.flingPower = 50,
+ .iconPic = gItemIcon_DarkMemory,
+ .iconPalette = gItemIconPalette_DarkMemory,
},
[ITEM_STEEL_MEMORY] =
@@ -4577,6 +5153,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_STEEL,
.flingPower = 50,
+ .iconPic = gItemIcon_SteelMemory,
+ .iconPalette = gItemIconPalette_SteelMemory,
},
[ITEM_FAIRY_MEMORY] =
@@ -4595,11 +5173,13 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_FAIRY,
.flingPower = 50,
+ .iconPic = gItemIcon_FairyMemory,
+ .iconPalette = gItemIconPalette_FairyMemory,
},
[ITEM_RUSTED_SWORD] =
{
- .name = _("RustedSword"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("RustedSword", "Rusted Sword"),
.price = 0,
.description = COMPOUND_STRING(
"A rusty sword. A\n"
@@ -4608,11 +5188,13 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_RustedSword,
+ .iconPalette = gItemIconPalette_RustedWeapons,
},
[ITEM_RUSTED_SHIELD] =
{
- .name = _("RustedShield"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("RustedShield", "Rusted Shield"),
.price = 0,
.description = COMPOUND_STRING(
"A rusty shield. A\n"
@@ -4621,6 +5203,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_RustedShield,
+ .iconPalette = gItemIconPalette_RustedWeapons,
},
// Colored Orbs
@@ -4637,6 +5221,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_RedOrb,
+ .iconPalette = gItemIconPalette_RedOrb,
},
[ITEM_BLUE_ORB] =
@@ -4651,6 +5237,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_BlueOrb,
+ .iconPalette = gItemIconPalette_BlueOrb,
},
// Mega Stones
@@ -4668,11 +5256,13 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_Venusaurite,
+ .iconPalette = gItemIconPalette_Venusaurite,
},
[ITEM_CHARIZARDITE_X] =
{
- .name = _("CharizarditeX"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("CharizarditeX", "Charizardite X"),
.pluralName = _("Charizardites X"),
.price = 0,
.holdEffect = HOLD_EFFECT_MEGA_STONE,
@@ -4681,11 +5271,13 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_CharizarditeX,
+ .iconPalette = gItemIconPalette_CharizarditeX,
},
[ITEM_CHARIZARDITE_Y] =
{
- .name = _("CharizarditeY"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("CharizarditeY", "Charizardite Y"),
.pluralName = _("Charizardites Y"),
.price = 0,
.holdEffect = HOLD_EFFECT_MEGA_STONE,
@@ -4694,6 +5286,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_CharizarditeY,
+ .iconPalette = gItemIconPalette_CharizarditeY,
},
[ITEM_BLASTOISINITE] =
@@ -4709,6 +5303,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_Blastoisinite,
+ .iconPalette = gItemIconPalette_Blastoisinite,
},
[ITEM_BEEDRILLITE] =
@@ -4724,6 +5320,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_Beedrillite,
+ .iconPalette = gItemIconPalette_Beedrillite,
},
[ITEM_PIDGEOTITE] =
@@ -4739,6 +5337,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_Pidgeotite,
+ .iconPalette = gItemIconPalette_Pidgeotite,
},
[ITEM_ALAKAZITE] =
@@ -4754,6 +5354,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_Alakazite,
+ .iconPalette = gItemIconPalette_Alakazite,
},
[ITEM_SLOWBRONITE] =
@@ -4769,6 +5371,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_Slowbronite,
+ .iconPalette = gItemIconPalette_Slowbronite,
},
[ITEM_GENGARITE] =
@@ -4784,6 +5388,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_Gengarite,
+ .iconPalette = gItemIconPalette_Gengarite,
},
[ITEM_KANGASKHANITE] =
@@ -4799,6 +5405,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_Kangaskhanite,
+ .iconPalette = gItemIconPalette_Kangaskhanite,
},
[ITEM_PINSIRITE] =
@@ -4814,6 +5422,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_Pinsirite,
+ .iconPalette = gItemIconPalette_Pinsirite,
},
[ITEM_GYARADOSITE] =
@@ -4829,6 +5439,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_Gyaradosite,
+ .iconPalette = gItemIconPalette_Gyaradosite,
},
[ITEM_AERODACTYLITE] =
@@ -4844,6 +5456,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_Aerodactylite,
+ .iconPalette = gItemIconPalette_Aerodactylite,
},
[ITEM_MEWTWONITE_X] =
@@ -4857,6 +5471,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_MewtwoniteX,
+ .iconPalette = gItemIconPalette_MewtwoniteX,
},
[ITEM_MEWTWONITE_Y] =
@@ -4870,6 +5486,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_MewtwoniteY,
+ .iconPalette = gItemIconPalette_MewtwoniteY,
},
[ITEM_AMPHAROSITE] =
@@ -4885,6 +5503,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_Ampharosite,
+ .iconPalette = gItemIconPalette_Ampharosite,
},
[ITEM_STEELIXITE] =
@@ -4900,6 +5520,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_Steelixite,
+ .iconPalette = gItemIconPalette_Steelixite,
},
[ITEM_SCIZORITE] =
@@ -4915,6 +5537,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_Scizorite,
+ .iconPalette = gItemIconPalette_Scizorite,
},
[ITEM_HERACRONITE] =
@@ -4930,6 +5554,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_Heracronite,
+ .iconPalette = gItemIconPalette_Heracronite,
},
[ITEM_HOUNDOOMINITE] =
@@ -4945,6 +5571,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_Houndoominite,
+ .iconPalette = gItemIconPalette_Houndoominite,
},
[ITEM_TYRANITARITE] =
@@ -4960,6 +5588,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_Tyranitarite,
+ .iconPalette = gItemIconPalette_Tyranitarite,
},
[ITEM_SCEPTILITE] =
@@ -4975,6 +5605,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_Sceptilite,
+ .iconPalette = gItemIconPalette_Sceptilite,
},
[ITEM_BLAZIKENITE] =
@@ -4990,6 +5622,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_Blazikenite,
+ .iconPalette = gItemIconPalette_Blazikenite,
},
[ITEM_SWAMPERTITE] =
@@ -5005,6 +5639,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_Swampertite,
+ .iconPalette = gItemIconPalette_Swampertite,
},
[ITEM_GARDEVOIRITE] =
@@ -5020,6 +5656,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_Gardevoirite,
+ .iconPalette = gItemIconPalette_Gardevoirite,
},
[ITEM_SABLENITE] =
@@ -5035,6 +5673,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_Sablenite,
+ .iconPalette = gItemIconPalette_Sablenite,
},
[ITEM_MAWILITE] =
@@ -5050,6 +5690,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_Mawilite,
+ .iconPalette = gItemIconPalette_Mawilite,
},
[ITEM_AGGRONITE] =
@@ -5065,6 +5707,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_Aggronite,
+ .iconPalette = gItemIconPalette_Aggronite,
},
[ITEM_MEDICHAMITE] =
@@ -5080,6 +5724,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_Medichamite,
+ .iconPalette = gItemIconPalette_Medichamite,
},
[ITEM_MANECTITE] =
@@ -5095,6 +5741,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_Manectite,
+ .iconPalette = gItemIconPalette_Manectite,
},
[ITEM_SHARPEDONITE] =
@@ -5110,6 +5758,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_Sharpedonite,
+ .iconPalette = gItemIconPalette_Sharpedonite,
},
[ITEM_CAMERUPTITE] =
@@ -5125,6 +5775,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_Cameruptite,
+ .iconPalette = gItemIconPalette_Cameruptite,
},
[ITEM_ALTARIANITE] =
@@ -5140,6 +5792,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_Altarianite,
+ .iconPalette = gItemIconPalette_Altarianite,
},
[ITEM_BANETTITE] =
@@ -5155,6 +5809,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_Banettite,
+ .iconPalette = gItemIconPalette_Banettite,
},
[ITEM_ABSOLITE] =
@@ -5170,6 +5826,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_Absolite,
+ .iconPalette = gItemIconPalette_Absolite,
},
[ITEM_GLALITITE] =
@@ -5185,6 +5843,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_Glalitite,
+ .iconPalette = gItemIconPalette_Glalitite,
},
[ITEM_SALAMENCITE] =
@@ -5200,6 +5860,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_Salamencite,
+ .iconPalette = gItemIconPalette_Salamencite,
},
[ITEM_METAGROSSITE] =
@@ -5215,6 +5877,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_Metagrossite,
+ .iconPalette = gItemIconPalette_Metagrossite,
},
[ITEM_LATIASITE] =
@@ -5230,6 +5894,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_Latiasite,
+ .iconPalette = gItemIconPalette_Latiasite,
},
[ITEM_LATIOSITE] =
@@ -5245,6 +5911,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_Latiosite,
+ .iconPalette = gItemIconPalette_Latiosite,
},
[ITEM_LOPUNNITE] =
@@ -5260,6 +5928,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_Lopunnite,
+ .iconPalette = gItemIconPalette_Lopunnite,
},
[ITEM_GARCHOMPITE] =
@@ -5275,6 +5945,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_Garchompite,
+ .iconPalette = gItemIconPalette_Garchompite,
},
[ITEM_LUCARIONITE] =
@@ -5290,6 +5962,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_Lucarionite,
+ .iconPalette = gItemIconPalette_Lucarionite,
},
[ITEM_ABOMASITE] =
@@ -5305,6 +5979,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_Abomasite,
+ .iconPalette = gItemIconPalette_Abomasite,
},
[ITEM_GALLADITE] =
@@ -5320,6 +5996,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_Galladite,
+ .iconPalette = gItemIconPalette_Galladite,
},
[ITEM_AUDINITE] =
@@ -5335,6 +6013,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_Audinite,
+ .iconPalette = gItemIconPalette_Audinite,
},
[ITEM_DIANCITE] =
@@ -5350,6 +6030,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_Diancite,
+ .iconPalette = gItemIconPalette_Diancite,
},
// Gems
@@ -5368,6 +6050,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_NORMAL,
+ .iconPic = gItemIcon_NormalGem,
+ .iconPalette = gItemIconPalette_NormalGem,
},
[ITEM_FIRE_GEM] =
@@ -5384,6 +6068,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_FIRE,
+ .iconPic = gItemIcon_FireGem,
+ .iconPalette = gItemIconPalette_FireGem,
},
[ITEM_WATER_GEM] =
@@ -5400,6 +6086,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_WATER,
+ .iconPic = gItemIcon_WaterGem,
+ .iconPalette = gItemIconPalette_WaterGem,
},
[ITEM_ELECTRIC_GEM] =
@@ -5416,6 +6104,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_ELECTRIC,
+ .iconPic = gItemIcon_ElectricGem,
+ .iconPalette = gItemIconPalette_ElectricGem,
},
[ITEM_GRASS_GEM] =
@@ -5432,6 +6122,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_GRASS,
+ .iconPic = gItemIcon_GrassGem,
+ .iconPalette = gItemIconPalette_GrassGem,
},
[ITEM_ICE_GEM] =
@@ -5448,6 +6140,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_ICE,
+ .iconPic = gItemIcon_IceGem,
+ .iconPalette = gItemIconPalette_IceGem,
},
[ITEM_FIGHTING_GEM] =
@@ -5464,6 +6158,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_FIGHTING,
+ .iconPic = gItemIcon_FightingGem,
+ .iconPalette = gItemIconPalette_FightingGem,
},
[ITEM_POISON_GEM] =
@@ -5480,6 +6176,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_POISON,
+ .iconPic = gItemIcon_PoisonGem,
+ .iconPalette = gItemIconPalette_PoisonGem,
},
[ITEM_GROUND_GEM] =
@@ -5496,6 +6194,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_GROUND,
+ .iconPic = gItemIcon_GroundGem,
+ .iconPalette = gItemIconPalette_GroundGem,
},
[ITEM_FLYING_GEM] =
@@ -5512,6 +6212,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_FLYING,
+ .iconPic = gItemIcon_FlyingGem,
+ .iconPalette = gItemIconPalette_FlyingGem,
},
[ITEM_PSYCHIC_GEM] =
@@ -5528,6 +6230,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_PSYCHIC,
+ .iconPic = gItemIcon_PsychicGem,
+ .iconPalette = gItemIconPalette_PsychicGem,
},
[ITEM_BUG_GEM] =
@@ -5544,6 +6248,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_BUG,
+ .iconPic = gItemIcon_BugGem,
+ .iconPalette = gItemIconPalette_BugGem,
},
[ITEM_ROCK_GEM] =
@@ -5560,6 +6266,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_ROCK,
+ .iconPic = gItemIcon_RockGem,
+ .iconPalette = gItemIconPalette_RockGem,
},
[ITEM_GHOST_GEM] =
@@ -5576,6 +6284,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_GHOST,
+ .iconPic = gItemIcon_GhostGem,
+ .iconPalette = gItemIconPalette_GhostGem,
},
[ITEM_DRAGON_GEM] =
@@ -5592,6 +6302,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_DRAGON,
+ .iconPic = gItemIcon_DragonGem,
+ .iconPalette = gItemIconPalette_DragonGem,
},
[ITEM_DARK_GEM] =
@@ -5608,6 +6320,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_DARK,
+ .iconPic = gItemIcon_DarkGem,
+ .iconPalette = gItemIconPalette_DarkGem,
},
[ITEM_STEEL_GEM] =
@@ -5624,6 +6338,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_STEEL,
+ .iconPic = gItemIcon_SteelGem,
+ .iconPalette = gItemIconPalette_SteelGem,
},
[ITEM_FAIRY_GEM] =
@@ -5640,6 +6356,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = TYPE_FAIRY,
+ .iconPic = gItemIcon_FairyGem,
+ .iconPalette = gItemIconPalette_FairyGem,
},
// Z-Crystals
@@ -5656,7 +6374,9 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .secondaryId = TYPE_NORMAL
+ .secondaryId = TYPE_NORMAL,
+ .iconPic = gItemIcon_NormaliumZ,
+ .iconPalette = gItemIconPalette_NormaliumZ,
},
[ITEM_FIRIUM_Z] =
@@ -5671,7 +6391,9 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .secondaryId = TYPE_FIRE
+ .secondaryId = TYPE_FIRE,
+ .iconPic = gItemIcon_FiriumZ,
+ .iconPalette = gItemIconPalette_FiriumZ,
},
[ITEM_WATERIUM_Z] =
@@ -5686,7 +6408,9 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .secondaryId = TYPE_WATER
+ .secondaryId = TYPE_WATER,
+ .iconPic = gItemIcon_WateriumZ,
+ .iconPalette = gItemIconPalette_WateriumZ,
},
[ITEM_ELECTRIUM_Z] =
@@ -5701,7 +6425,9 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .secondaryId = TYPE_ELECTRIC
+ .secondaryId = TYPE_ELECTRIC,
+ .iconPic = gItemIcon_ElectriumZ,
+ .iconPalette = gItemIconPalette_ElectriumZ,
},
[ITEM_GRASSIUM_Z] =
@@ -5716,7 +6442,9 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .secondaryId = TYPE_GRASS
+ .secondaryId = TYPE_GRASS,
+ .iconPic = gItemIcon_GrassiumZ,
+ .iconPalette = gItemIconPalette_GrassiumZ,
},
[ITEM_ICIUM_Z] =
@@ -5731,7 +6459,9 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .secondaryId = TYPE_ICE
+ .secondaryId = TYPE_ICE,
+ .iconPic = gItemIcon_IciumZ,
+ .iconPalette = gItemIconPalette_IciumZ,
},
[ITEM_FIGHTINIUM_Z] =
@@ -5746,7 +6476,9 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .secondaryId = TYPE_FIGHTING
+ .secondaryId = TYPE_FIGHTING,
+ .iconPic = gItemIcon_FightiniumZ,
+ .iconPalette = gItemIconPalette_FightiniumZ,
},
[ITEM_POISONIUM_Z] =
@@ -5761,7 +6493,9 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .secondaryId = TYPE_POISON
+ .secondaryId = TYPE_POISON,
+ .iconPic = gItemIcon_PoisoniumZ,
+ .iconPalette = gItemIconPalette_PoisoniumZ,
},
[ITEM_GROUNDIUM_Z] =
@@ -5776,7 +6510,9 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .secondaryId = TYPE_GROUND
+ .secondaryId = TYPE_GROUND,
+ .iconPic = gItemIcon_GroundiumZ,
+ .iconPalette = gItemIconPalette_GroundiumZ,
},
[ITEM_FLYINIUM_Z] =
@@ -5791,7 +6527,9 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .secondaryId = TYPE_FLYING
+ .secondaryId = TYPE_FLYING,
+ .iconPic = gItemIcon_FlyiniumZ,
+ .iconPalette = gItemIconPalette_FlyiniumZ,
},
[ITEM_PSYCHIUM_Z] =
@@ -5806,7 +6544,9 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .secondaryId = TYPE_PSYCHIC
+ .secondaryId = TYPE_PSYCHIC,
+ .iconPic = gItemIcon_PsychiumZ,
+ .iconPalette = gItemIconPalette_PsychiumZ,
},
[ITEM_BUGINIUM_Z] =
@@ -5821,7 +6561,9 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .secondaryId = TYPE_BUG
+ .secondaryId = TYPE_BUG,
+ .iconPic = gItemIcon_BuginiumZ,
+ .iconPalette = gItemIconPalette_BuginiumZ,
},
[ITEM_ROCKIUM_Z] =
@@ -5836,7 +6578,9 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .secondaryId = TYPE_ROCK
+ .secondaryId = TYPE_ROCK,
+ .iconPic = gItemIcon_RockiumZ,
+ .iconPalette = gItemIconPalette_RockiumZ,
},
[ITEM_GHOSTIUM_Z] =
@@ -5851,7 +6595,9 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .secondaryId = TYPE_GHOST
+ .secondaryId = TYPE_GHOST,
+ .iconPic = gItemIcon_GhostiumZ,
+ .iconPalette = gItemIconPalette_GhostiumZ,
},
[ITEM_DRAGONIUM_Z] =
@@ -5866,7 +6612,9 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .secondaryId = TYPE_DRAGON
+ .secondaryId = TYPE_DRAGON,
+ .iconPic = gItemIcon_DragoniumZ,
+ .iconPalette = gItemIconPalette_DragoniumZ,
},
[ITEM_DARKINIUM_Z] =
@@ -5881,7 +6629,9 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .secondaryId = TYPE_DARK
+ .secondaryId = TYPE_DARK,
+ .iconPic = gItemIcon_DarkiniumZ,
+ .iconPalette = gItemIconPalette_DarkiniumZ,
},
[ITEM_STEELIUM_Z] =
@@ -5896,7 +6646,9 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .secondaryId = TYPE_STEEL
+ .secondaryId = TYPE_STEEL,
+ .iconPic = gItemIcon_SteeliumZ,
+ .iconPalette = gItemIconPalette_SteeliumZ,
},
[ITEM_FAIRIUM_Z] =
@@ -5911,7 +6663,9 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .secondaryId = TYPE_FAIRY
+ .secondaryId = TYPE_FAIRY,
+ .iconPic = gItemIcon_FairiumZ,
+ .iconPalette = gItemIconPalette_FairiumZ,
},
[ITEM_PIKANIUM_Z] =
@@ -5926,7 +6680,9 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .secondaryId = 255 // signature z move
+ .secondaryId = 255, // signature z move
+ .iconPic = gItemIcon_PikaniumZ,
+ .iconPalette = gItemIconPalette_PikaniumZ,
},
[ITEM_EEVIUM_Z] =
@@ -5941,7 +6697,9 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .secondaryId = 255 // signature z move
+ .secondaryId = 255, // signature z move
+ .iconPic = gItemIcon_EeviumZ,
+ .iconPalette = gItemIconPalette_EeviumZ,
},
[ITEM_SNORLIUM_Z] =
@@ -5956,7 +6714,9 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .secondaryId = 255 // signature z move
+ .secondaryId = 255, // signature z move
+ .iconPic = gItemIcon_SnorliumZ,
+ .iconPalette = gItemIconPalette_SnorliumZ,
},
[ITEM_MEWNIUM_Z] =
@@ -5971,7 +6731,9 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .secondaryId = 255 // signature z move
+ .secondaryId = 255, // signature z move
+ .iconPic = gItemIcon_MewniumZ,
+ .iconPalette = gItemIconPalette_MewniumZ,
},
[ITEM_DECIDIUM_Z] =
@@ -5986,7 +6748,9 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .secondaryId = 255 // signature z move
+ .secondaryId = 255, // signature z move
+ .iconPic = gItemIcon_DecidiumZ,
+ .iconPalette = gItemIconPalette_DecidiumZ,
},
[ITEM_INCINIUM_Z] =
@@ -6001,7 +6765,9 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .secondaryId = 255 // signature z move
+ .secondaryId = 255, // signature z move
+ .iconPic = gItemIcon_InciniumZ,
+ .iconPalette = gItemIconPalette_InciniumZ,
},
[ITEM_PRIMARIUM_Z] =
@@ -6016,7 +6782,9 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .secondaryId = 255 // signature z move
+ .secondaryId = 255, // signature z move
+ .iconPic = gItemIcon_PrimariumZ,
+ .iconPalette = gItemIconPalette_PrimariumZ,
},
[ITEM_LYCANIUM_Z] =
@@ -6031,7 +6799,9 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .secondaryId = 255 // signature z move
+ .secondaryId = 255, // signature z move
+ .iconPic = gItemIcon_LycaniumZ,
+ .iconPalette = gItemIconPalette_LycaniumZ,
},
[ITEM_MIMIKIUM_Z] =
@@ -6046,7 +6816,9 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .secondaryId = 255 // signature z move
+ .secondaryId = 255, // signature z move
+ .iconPic = gItemIcon_MimikiumZ,
+ .iconPalette = gItemIconPalette_MimikiumZ,
},
[ITEM_KOMMONIUM_Z] =
@@ -6061,7 +6833,9 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .secondaryId = 255 // signature z move
+ .secondaryId = 255, // signature z move
+ .iconPic = gItemIcon_KommoniumZ,
+ .iconPalette = gItemIconPalette_KommoniumZ,
},
[ITEM_TAPUNIUM_Z] =
@@ -6076,7 +6850,9 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .secondaryId = 255 //signature z move
+ .secondaryId = 255, //signature z move
+ .iconPic = gItemIcon_TapuniumZ,
+ .iconPalette = gItemIconPalette_TapuniumZ,
},
[ITEM_SOLGANIUM_Z] =
@@ -6091,7 +6867,9 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .secondaryId = 255 // signature z move
+ .secondaryId = 255, // signature z move
+ .iconPic = gItemIcon_SolganiumZ,
+ .iconPalette = gItemIconPalette_SolganiumZ,
},
[ITEM_LUNALIUM_Z] =
@@ -6106,7 +6884,9 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .secondaryId = 255 // signature z move
+ .secondaryId = 255, // signature z move
+ .iconPic = gItemIcon_LunaliumZ,
+ .iconPalette = gItemIconPalette_LunaliumZ,
},
[ITEM_MARSHADIUM_Z] =
@@ -6121,7 +6901,9 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .secondaryId = 255 // signature z move
+ .secondaryId = 255, // signature z move
+ .iconPic = gItemIcon_MarshadiumZ,
+ .iconPalette = gItemIconPalette_MarshadiumZ,
},
[ITEM_ALORAICHIUM_Z] =
@@ -6136,7 +6918,9 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .secondaryId = 255 // signature z move
+ .secondaryId = 255, // signature z move
+ .iconPic = gItemIcon_AloraichiumZ,
+ .iconPalette = gItemIconPalette_AloraichiumZ,
},
[ITEM_PIKASHUNIUM_Z] =
@@ -6151,12 +6935,14 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .secondaryId = 255 // signature z move
+ .secondaryId = 255, // signature z move
+ .iconPic = gItemIcon_PikashuniumZ,
+ .iconPalette = gItemIconPalette_PikashuniumZ,
},
[ITEM_ULTRANECROZIUM_Z] =
{
- .name = _("U-Necrozium Z"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("U-Necrozium Z", "Ultranecrozium Z"),
.price = 0,
.holdEffect = HOLD_EFFECT_Z_CRYSTAL,
.description = COMPOUND_STRING(
@@ -6166,7 +6952,9 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
- .secondaryId = 255 //signature z move
+ .secondaryId = 255, //signature z move
+ .iconPic = gItemIcon_UltranecroziumZ,
+ .iconPalette = gItemIconPalette_UltranecroziumZ,
},
// Species-specific Held Items
@@ -6184,6 +6972,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_LightBall,
+ .iconPalette = gItemIconPalette_LightBall,
},
[ITEM_LEEK] =
@@ -6199,6 +6989,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 60,
+ .iconPic = gItemIcon_Leek,
+ .iconPalette = gItemIconPalette_Leek,
},
[ITEM_THICK_CLUB] =
@@ -6214,6 +7006,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 90,
+ .iconPic = gItemIcon_ThickClub,
+ .iconPalette = gItemIconPalette_ThickClub,
},
[ITEM_LUCKY_PUNCH] =
@@ -6230,6 +7024,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 40,
+ .iconPic = gItemIcon_LuckyPunch,
+ .iconPalette = gItemIconPalette_LuckyPunch,
},
[ITEM_METAL_POWDER] =
@@ -6246,6 +7042,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_MetalPowder,
+ .iconPalette = gItemIconPalette_MetalPowder,
},
[ITEM_QUICK_POWDER] =
@@ -6262,11 +7060,13 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_QuickPowder,
+ .iconPalette = gItemIconPalette_QuickPowder,
},
[ITEM_DEEP_SEA_SCALE] =
{
- .name = _("DeepSeaScale"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("DeepSeaScale", "Deep Sea Scale"),
.price = (I_PRICE >= GEN_7) ? 2000 : 200,
.holdEffect = HOLD_EFFECT_DEEP_SEA_SCALE,
.description = COMPOUND_STRING(
@@ -6278,12 +7078,14 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = EVO_HELD_ITEM_FIELD_FUNC,
.effect = gItemEffect_EvoItem,
.flingPower = 30,
+ .iconPic = gItemIcon_DeepSeaScale,
+ .iconPalette = gItemIconPalette_DeepSeaScale,
},
[ITEM_DEEP_SEA_TOOTH] =
{
- .name = _("DeepSeaTooth"),
- .pluralName = _("DeepSeaTeeth"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("DeepSeaTooth", "Deep Sea Tooth"),
+ .pluralName = _("Deep Sea Teeth"),
.price = (I_PRICE >= GEN_7) ? 2000 : 200,
.holdEffect = HOLD_EFFECT_DEEP_SEA_TOOTH,
.description = COMPOUND_STRING(
@@ -6295,6 +7097,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = EVO_HELD_ITEM_FIELD_FUNC,
.effect = gItemEffect_EvoItem,
.flingPower = 90,
+ .iconPic = gItemIcon_DeepSeaTooth,
+ .iconPalette = gItemIconPalette_DeepSeaTooth,
},
[ITEM_SOUL_DEW] =
@@ -6317,6 +7121,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_SoulDew,
+ .iconPalette = gItemIconPalette_SoulDew,
},
[ITEM_ADAMANT_ORB] =
@@ -6333,6 +7139,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 60,
+ .iconPic = gItemIcon_AdamantOrb,
+ .iconPalette = gItemIconPalette_AdamantOrb,
},
[ITEM_LUSTROUS_ORB] =
@@ -6349,6 +7157,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 60,
+ .iconPic = gItemIcon_LustrousOrb,
+ .iconPalette = gItemIconPalette_LustrousOrb,
},
[ITEM_GRISEOUS_ORB] =
@@ -6365,6 +7175,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 60,
+ .iconPic = gItemIcon_GriseousOrb,
+ .iconPalette = gItemIconPalette_GriseousOrb,
},
// Incenses
@@ -6380,6 +7192,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_SeaIncense,
+ .iconPalette = gItemIconPalette_SeaIncense,
},
[ITEM_LAX_INCENSE] =
@@ -6396,6 +7210,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_LaxIncense,
+ .iconPalette = gItemIconPalette_LaxIncense,
},
[ITEM_ODD_INCENSE] =
@@ -6409,6 +7225,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_OddIncense,
+ .iconPalette = gItemIconPalette_OddIncense,
},
[ITEM_ROCK_INCENSE] =
@@ -6422,6 +7240,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_RockIncense,
+ .iconPalette = gItemIconPalette_RockIncense,
},
[ITEM_FULL_INCENSE] =
@@ -6435,6 +7255,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_FullIncense,
+ .iconPalette = gItemIconPalette_FullIncense,
},
[ITEM_WAVE_INCENSE] =
@@ -6448,6 +7270,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_WaveIncense,
+ .iconPalette = gItemIconPalette_WaveIncense,
},
[ITEM_ROSE_INCENSE] =
@@ -6461,6 +7285,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_RoseIncense,
+ .iconPalette = gItemIconPalette_RoseIncense,
},
[ITEM_LUCK_INCENSE] =
@@ -6473,6 +7299,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_LuckIncense,
+ .iconPalette = gItemIconPalette_LuckIncense,
},
[ITEM_PURE_INCENSE] =
@@ -6485,6 +7313,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_PureIncense,
+ .iconPalette = gItemIconPalette_PureIncense,
},
// Contest Scarves
@@ -6502,6 +7332,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_Scarf,
+ .iconPalette = gItemIconPalette_RedScarf,
},
[ITEM_BLUE_SCARF] =
@@ -6517,6 +7349,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_Scarf,
+ .iconPalette = gItemIconPalette_BlueScarf,
},
[ITEM_PINK_SCARF] =
@@ -6532,6 +7366,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_Scarf,
+ .iconPalette = gItemIconPalette_PinkScarf,
},
[ITEM_GREEN_SCARF] =
@@ -6547,6 +7383,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_Scarf,
+ .iconPalette = gItemIconPalette_GreenScarf,
},
[ITEM_YELLOW_SCARF] =
@@ -6562,6 +7400,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_Scarf,
+ .iconPalette = gItemIconPalette_YellowScarf,
},
// EV Gain Modifiers
@@ -6579,6 +7419,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 60,
+ .iconPic = gItemIcon_MachoBrace,
+ .iconPalette = gItemIconPalette_MachoBrace,
},
[ITEM_POWER_WEIGHT] =
@@ -6596,6 +7438,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = STAT_HP,
.flingPower = 70,
+ .iconPic = gItemIcon_PowerWeight,
+ .iconPalette = gItemIconPalette_PowerWeight,
},
[ITEM_POWER_BRACER] =
@@ -6613,6 +7457,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = STAT_ATK,
.flingPower = 70,
+ .iconPic = gItemIcon_PowerBracer,
+ .iconPalette = gItemIconPalette_PowerBracer,
},
[ITEM_POWER_BELT] =
@@ -6630,6 +7476,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = STAT_DEF,
.flingPower = 70,
+ .iconPic = gItemIcon_PowerBelt,
+ .iconPalette = gItemIconPalette_PowerBelt,
},
[ITEM_POWER_LENS] =
@@ -6648,6 +7496,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = STAT_SPATK,
.flingPower = 70,
+ .iconPic = gItemIcon_PowerLens,
+ .iconPalette = gItemIconPalette_PowerLens,
},
[ITEM_POWER_BAND] =
@@ -6665,6 +7515,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = STAT_SPDEF,
.flingPower = 70,
+ .iconPic = gItemIcon_PowerBand,
+ .iconPalette = gItemIconPalette_PowerBand,
},
[ITEM_POWER_ANKLET] =
@@ -6682,6 +7534,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = STAT_SPEED,
.flingPower = 70,
+ .iconPic = gItemIcon_PowerAnklet,
+ .iconPalette = gItemIconPalette_PowerAnklet,
},
// Type-boosting Held Items
@@ -6701,6 +7555,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_SilkScarf,
+ .iconPalette = gItemIconPalette_SilkScarf,
},
[ITEM_CHARCOAL] =
@@ -6717,6 +7573,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_Charcoal,
+ .iconPalette = gItemIconPalette_Charcoal,
},
[ITEM_MYSTIC_WATER] =
@@ -6734,6 +7592,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_MysticWater,
+ .iconPalette = gItemIconPalette_MysticWater,
},
[ITEM_MAGNET] =
@@ -6750,6 +7610,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_Magnet,
+ .iconPalette = gItemIconPalette_Magnet,
},
[ITEM_MIRACLE_SEED] =
@@ -6763,12 +7625,14 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_MiracleSeed,
+ .iconPalette = gItemIconPalette_MiracleSeed,
},
[ITEM_NEVER_MELT_ICE] =
{
- .name = _("Never-MeltIce"),
- .pluralName = _("Never-MeltIce"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("Never-MeltIce", "Never-Melt Ice"),
+ .pluralName = HANDLE_EXPANDED_ITEM_NAME("Never-MeltIce", "Never-Melt Ice"),
.price = (I_PRICE >= GEN_9) ? 3000 : ((I_PRICE >= GEN_7) ? 1000 : 100),
.holdEffect = HOLD_EFFECT_ICE_POWER,
.holdEffectParam = TYPE_BOOST_PARAM,
@@ -6780,6 +7644,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_NeverMeltIce,
+ .iconPalette = gItemIconPalette_NeverMeltIce,
},
[ITEM_BLACK_BELT] =
@@ -6796,6 +7662,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_BlackBelt,
+ .iconPalette = gItemIconPalette_BlackTypeEnhancingItem,
},
[ITEM_POISON_BARB] =
@@ -6812,6 +7680,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 70,
+ .iconPic = gItemIcon_PoisonBarb,
+ .iconPalette = gItemIconPalette_PoisonBarb,
},
[ITEM_SOFT_SAND] =
@@ -6829,6 +7699,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_SoftSand,
+ .iconPalette = gItemIconPalette_SoftSand,
},
[ITEM_SHARP_BEAK] =
@@ -6845,6 +7717,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 50,
+ .iconPic = gItemIcon_SharpBeak,
+ .iconPalette = gItemIconPalette_SharpBeak,
},
[ITEM_TWISTED_SPOON] =
@@ -6858,6 +7732,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_TwistedSpoon,
+ .iconPalette = gItemIconPalette_TwistedSpoon,
},
[ITEM_SILVER_POWDER] =
@@ -6875,6 +7751,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_SilverPowder,
+ .iconPalette = gItemIconPalette_SilverPowder,
},
[ITEM_HARD_STONE] =
@@ -6888,6 +7766,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 100,
+ .iconPic = gItemIcon_HardStone,
+ .iconPalette = gItemIconPalette_HardStone,
},
[ITEM_SPELL_TAG] =
@@ -6904,6 +7784,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_SpellTag,
+ .iconPalette = gItemIconPalette_SpellTag,
},
[ITEM_DRAGON_FANG] =
@@ -6920,6 +7802,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 70,
+ .iconPic = gItemIcon_DragonFang,
+ .iconPalette = gItemIconPalette_DragonFang,
},
[ITEM_BLACK_GLASSES] =
@@ -6937,6 +7821,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_BlackGlasses,
+ .iconPalette = gItemIconPalette_BlackTypeEnhancingItem,
},
[ITEM_METAL_COAT] =
@@ -6954,6 +7840,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = EVO_HELD_ITEM_FIELD_FUNC,
.effect = gItemEffect_EvoItem,
.flingPower = 30,
+ .iconPic = gItemIcon_MetalCoat,
+ .iconPalette = gItemIconPalette_MetalCoat,
},
// Choice Items
@@ -6971,6 +7859,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_ChoiceBand,
+ .iconPalette = gItemIconPalette_ChoiceBand,
},
[ITEM_CHOICE_SPECS] =
@@ -6987,6 +7877,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_ChoiceSpecs,
+ .iconPalette = gItemIconPalette_ChoiceSpecs,
},
[ITEM_CHOICE_SCARF] =
@@ -7003,6 +7895,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_ChoiceScarf,
+ .iconPalette = gItemIconPalette_ChoiceScarf,
},
// Status Orbs
@@ -7020,6 +7914,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_FlameOrb,
+ .iconPalette = gItemIconPalette_FlameOrb,
},
[ITEM_TOXIC_ORB] =
@@ -7035,6 +7931,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_ToxicOrb,
+ .iconPalette = gItemIconPalette_ToxicOrb,
},
// Weather Rocks
@@ -7052,6 +7950,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 60,
+ .iconPic = gItemIcon_DampRock,
+ .iconPalette = gItemIconPalette_DampRock,
},
[ITEM_HEAT_ROCK] =
@@ -7067,6 +7967,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 60,
+ .iconPic = gItemIcon_HeatRock,
+ .iconPalette = gItemIconPalette_HeatRock,
},
[ITEM_SMOOTH_ROCK] =
@@ -7082,6 +7984,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_SmoothRock,
+ .iconPalette = gItemIconPalette_SmoothRock,
},
[ITEM_ICY_ROCK] =
@@ -7097,6 +8001,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 40,
+ .iconPic = gItemIcon_IcyRock,
+ .iconPalette = gItemIconPalette_IcyRock,
},
// Terrain Seeds
@@ -7115,6 +8021,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_ElectricSeed,
+ .iconPalette = gItemIconPalette_ElectricSeed,
},
[ITEM_PSYCHIC_SEED] =
@@ -7131,6 +8039,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_PsychicSeed,
+ .iconPalette = gItemIconPalette_PsychicSeed,
},
[ITEM_MISTY_SEED] =
@@ -7147,6 +8057,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_MistySeed,
+ .iconPalette = gItemIconPalette_MistySeed,
},
[ITEM_GRASSY_SEED] =
@@ -7163,6 +8075,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_GrassySeed,
+ .iconPalette = gItemIconPalette_GrassySeed,
},
// Type-activated Stat Modifiers
@@ -7181,6 +8095,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_AbsorbBulb,
+ .iconPalette = gItemIconPalette_AbsorbBulb,
},
[ITEM_CELL_BATTERY] =
@@ -7198,6 +8114,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_CellBattery,
+ .iconPalette = gItemIconPalette_CellBattery,
},
[ITEM_LUMINOUS_MOSS] =
@@ -7215,6 +8133,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_LuminousMoss,
+ .iconPalette = gItemIconPalette_LuminousMoss,
},
[ITEM_SNOWBALL] =
@@ -7231,6 +8151,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_Snowball,
+ .iconPalette = gItemIconPalette_Snowball,
},
// Misc. Held Items
@@ -7250,6 +8172,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_BrightPowder,
+ .iconPalette = gItemIconPalette_BrightPowder,
},
[ITEM_WHITE_HERB] =
@@ -7265,6 +8189,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_InBattleHerb,
+ .iconPalette = gItemIconPalette_WhiteHerb,
},
[ITEM_EXP_SHARE] =
@@ -7288,6 +8214,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_FIELD,
.fieldUseFunc = ItemUseOutOfBattle_ExpShare,
.flingPower = 30,
+ .iconPic = gItemIcon_ExpShare,
+ .iconPalette = gItemIconPalette_ExpShare,
},
[ITEM_QUICK_CLAW] =
@@ -7304,6 +8232,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_QuickClaw,
+ .iconPalette = gItemIconPalette_QuickClaw,
},
[ITEM_SOOTHE_BELL] =
@@ -7319,6 +8249,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_SootheBell,
+ .iconPalette = gItemIconPalette_SootheBell,
},
[ITEM_MENTAL_HERB] =
@@ -7340,6 +8272,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_InBattleHerb,
+ .iconPalette = gItemIconPalette_MentalHerb,
},
[ITEM_KINGS_ROCK] =
@@ -7354,6 +8288,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = EVO_HELD_ITEM_FIELD_FUNC,
.effect = gItemEffect_EvoItem,
.flingPower = 30,
+ .iconPic = gItemIcon_KingsRock,
+ .iconPalette = gItemIconPalette_KingsRock,
},
[ITEM_AMULET_COIN] =
@@ -7366,6 +8302,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_AmuletCoin,
+ .iconPalette = gItemIconPalette_AmuletCoin,
},
[ITEM_CLEANSE_TAG] =
@@ -7378,6 +8316,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_CleanseTag,
+ .iconPalette = gItemIconPalette_CleanseTag,
},
[ITEM_SMOKE_BALL] =
@@ -7393,6 +8333,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_SmokeBall,
+ .iconPalette = gItemIconPalette_SmokeBall,
},
[ITEM_FOCUS_BAND] =
@@ -7409,6 +8351,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_FocusBand,
+ .iconPalette = gItemIconPalette_FocusBand,
},
[ITEM_LUCKY_EGG] =
@@ -7424,6 +8368,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_LuckyEgg,
+ .iconPalette = gItemIconPalette_LuckyEgg,
},
[ITEM_SCOPE_LENS] =
@@ -7440,6 +8386,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_ScopeLens,
+ .iconPalette = gItemIconPalette_ScopeLens,
},
[ITEM_LEFTOVERS] =
@@ -7457,6 +8405,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_Leftovers,
+ .iconPalette = gItemIconPalette_Leftovers,
},
[ITEM_SHELL_BELL] =
@@ -7473,6 +8423,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_ShellBell,
+ .iconPalette = gItemIconPalette_Shell,
},
[ITEM_WIDE_LENS] =
@@ -7490,6 +8442,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_WideLens,
+ .iconPalette = gItemIconPalette_WideLens,
},
[ITEM_MUSCLE_BAND] =
@@ -7506,6 +8460,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_MuscleBand,
+ .iconPalette = gItemIconPalette_MuscleBand,
},
[ITEM_WISE_GLASSES] =
@@ -7523,6 +8479,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_WiseGlasses,
+ .iconPalette = gItemIconPalette_WiseGlasses,
},
[ITEM_EXPERT_BELT] =
@@ -7539,6 +8497,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_ExpertBelt,
+ .iconPalette = gItemIconPalette_ExpertBelt,
},
[ITEM_LIGHT_CLAY] =
@@ -7555,6 +8515,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_LightClay,
+ .iconPalette = gItemIconPalette_LightClay,
},
[ITEM_LIFE_ORB] =
@@ -7570,6 +8532,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_LifeOrb,
+ .iconPalette = gItemIconPalette_LifeOrb,
},
[ITEM_POWER_HERB] =
@@ -7585,6 +8549,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_PowerHerb,
+ .iconPalette = gItemIconPalette_PowerHerb,
},
[ITEM_FOCUS_SASH] =
@@ -7601,6 +8567,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_FocusSash,
+ .iconPalette = gItemIconPalette_FocusSash,
},
[ITEM_ZOOM_LENS] =
@@ -7618,6 +8586,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_ZoomLens,
+ .iconPalette = gItemIconPalette_ZoomLens,
},
[ITEM_METRONOME] =
@@ -7634,6 +8604,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_Metronome,
+ .iconPalette = gItemIconPalette_Metronome,
},
[ITEM_IRON_BALL] =
@@ -7649,6 +8621,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 130,
+ .iconPic = gItemIcon_IronBall,
+ .iconPalette = gItemIconPalette_IronBall,
},
[ITEM_LAGGING_TAIL] =
@@ -7661,6 +8635,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_LaggingTail,
+ .iconPalette = gItemIconPalette_LaggingTail,
},
[ITEM_DESTINY_KNOT] =
@@ -7676,6 +8652,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_DestinyKnot,
+ .iconPalette = gItemIconPalette_DestinyKnot,
},
[ITEM_BLACK_SLUDGE] =
@@ -7692,6 +8670,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_BlackSludge,
+ .iconPalette = gItemIconPalette_BlackSludge,
},
[ITEM_GRIP_CLAW] =
@@ -7707,6 +8687,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 90,
+ .iconPic = gItemIcon_GripClaw,
+ .iconPalette = gItemIconPalette_GripClaw,
},
[ITEM_STICKY_BARB] =
@@ -7722,6 +8704,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_StickyBarb,
+ .iconPalette = gItemIconPalette_StickyBarb,
},
[ITEM_SHED_SHELL] =
@@ -7737,6 +8721,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_ShedShell,
+ .iconPalette = gItemIconPalette_ShedShell,
},
[ITEM_BIG_ROOT] =
@@ -7753,6 +8739,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_BigRoot,
+ .iconPalette = gItemIconPalette_BigRoot,
},
[ITEM_RAZOR_CLAW] =
@@ -7769,6 +8757,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = EVO_HELD_ITEM_FIELD_FUNC,
.effect = gItemEffect_EvoItem,
.flingPower = 80,
+ .iconPic = gItemIcon_RazorClaw,
+ .iconPalette = gItemIconPalette_RazorClaw,
},
[ITEM_RAZOR_FANG] =
@@ -7783,6 +8773,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = EVO_HELD_ITEM_FIELD_FUNC,
.effect = gItemEffect_EvoItem,
.flingPower = 30,
+ .iconPic = gItemIcon_RazorFang,
+ .iconPalette = gItemIconPalette_RazorFang,
},
[ITEM_EVIOLITE] =
@@ -7799,6 +8791,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 40,
+ .iconPic = gItemIcon_Eviolite,
+ .iconPalette = gItemIconPalette_Eviolite,
},
[ITEM_FLOAT_STONE] =
@@ -7814,6 +8808,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_FloatStone,
+ .iconPalette = gItemIconPalette_FloatStone,
},
[ITEM_ROCKY_HELMET] =
@@ -7830,6 +8826,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 60,
+ .iconPic = gItemIcon_RockyHelmet,
+ .iconPalette = gItemIconPalette_RockyHelmet,
},
[ITEM_AIR_BALLOON] =
@@ -7846,6 +8844,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_AirBalloon,
+ .iconPalette = gItemIconPalette_AirBalloon,
},
[ITEM_RED_CARD] =
@@ -7862,6 +8862,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_RedCard,
+ .iconPalette = gItemIconPalette_RedCard,
},
[ITEM_RING_TARGET] =
@@ -7878,6 +8880,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_RingTarget,
+ .iconPalette = gItemIconPalette_RingTarget,
},
[ITEM_BINDING_BAND] =
@@ -7893,6 +8897,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_BindingBand,
+ .iconPalette = gItemIconPalette_BindingBand,
},
[ITEM_EJECT_BUTTON] =
@@ -7909,12 +8915,14 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_EjectButton,
+ .iconPalette = gItemIconPalette_EjectButton,
},
[ITEM_WEAKNESS_POLICY] =
{
- .name = _("WeaknssPolicy"),
- .pluralName = _("WeaknssPolicies"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("WeaknssPolicy", "Weakness Policy"),
+ .pluralName = HANDLE_EXPANDED_ITEM_NAME("WeaknssPolicies", "Weakness Policies"),
.price = (I_PRICE >= GEN_9) ? 50000 : 1000,
.holdEffect = HOLD_EFFECT_WEAKNESS_POLICY,
.holdEffectParam = 0,
@@ -7926,6 +8934,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_WeaknessPolicy,
+ .iconPalette = gItemIconPalette_WeaknessPolicy,
},
[ITEM_ASSAULT_VEST] =
@@ -7942,12 +8952,14 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_AssaultVest,
+ .iconPalette = gItemIconPalette_AssaultVest,
},
[ITEM_SAFETY_GOGGLES] =
{
- .name = _("SafetyGoggles"),
- .pluralName = _("SafetyGoggles"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("SafetyGoggles", "Safety Goggles"),
+ .pluralName = HANDLE_EXPANDED_ITEM_NAME("SafetyGoggles", "Safety Goggles"),
.price = (I_PRICE >= GEN_9) ? 20000 : ((I_PRICE >= GEN_7) ? 4000 : 1000),
.holdEffect = HOLD_EFFECT_SAFETY_GOGGLES,
.description = COMPOUND_STRING(
@@ -7958,11 +8970,13 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_SafetyGoggles,
+ .iconPalette = gItemIconPalette_SafetyGoggles,
},
[ITEM_ADRENALINE_ORB] =
{
- .name = _("AdrenalineOrb"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("AdrenalineOrb", "Adrenaline Orb"),
.price = (I_PRICE >= GEN_9) ? 5000 : ((I_PRICE >= GEN_8) ? 4000 : 300),
.holdEffect = HOLD_EFFECT_ADRENALINE_ORB,
.description = COMPOUND_STRING(
@@ -7973,11 +8987,13 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_AdrenalineOrb,
+ .iconPalette = gItemIconPalette_AdrenalineOrb,
},
[ITEM_TERRAIN_EXTENDER] =
{
- .name = _("TerainExtendr"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("TerainExtendr", "Terrain Extender"),
.price = (I_PRICE >= GEN_9) ? 15000 : 4000,
.holdEffect = HOLD_EFFECT_TERRAIN_EXTENDER,
.description = COMPOUND_STRING(
@@ -7988,12 +9004,14 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 60,
+ .iconPic = gItemIcon_TerrainExtender,
+ .iconPalette = gItemIconPalette_TerrainExtender,
},
[ITEM_PROTECTIVE_PADS] =
{
- .name = _("ProtectvePads"),
- .pluralName = _("ProtectvePads"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("ProtectvePads", "Protective Pads"),
+ .pluralName = HANDLE_EXPANDED_ITEM_NAME("ProtectvePads", "Protective Pads"),
.price = (I_PRICE >= GEN_9) ? 15000 : 4000,
.holdEffect = HOLD_EFFECT_PROTECTIVE_PADS,
.description = COMPOUND_STRING(
@@ -8004,6 +9022,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_ProtectivePads,
+ .iconPalette = gItemIconPalette_ProtectivePads,
},
[ITEM_THROAT_SPRAY] =
@@ -8019,6 +9039,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_ThroatSpray,
+ .iconPalette = gItemIconPalette_ThroatSpray,
},
[ITEM_EJECT_PACK] =
@@ -8034,12 +9056,14 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 50,
+ .iconPic = gItemIcon_EjectPack,
+ .iconPalette = gItemIconPalette_EjectPack,
},
[ITEM_HEAVY_DUTY_BOOTS] =
{
- .name = _("Heavy-DtyBts"),
- .pluralName = _("Heavy-DtyBts"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("Heavy-DtyBts", "Heavy-Duty Boots"),
+ .pluralName = HANDLE_EXPANDED_ITEM_NAME("Heavy-DtyBts", "Heavy-Duty Boots"),
.price = (I_PRICE >= GEN_9) ? 20000 : 4000,
.holdEffect = HOLD_EFFECT_HEAVY_DUTY_BOOTS,
.description = COMPOUND_STRING(
@@ -8050,12 +9074,14 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_HeavyDutyBoots,
+ .iconPalette = gItemIconPalette_HeavyDutyBoots,
},
[ITEM_BLUNDER_POLICY] =
{
- .name = _("BlundrPolicy"),
- .pluralName = _("BlundrPolicies"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("BlundrPolicy", "Blunder Policy"),
+ .pluralName = HANDLE_EXPANDED_ITEM_NAME("BlundrPolicies", "Blunder Policies"),
.price = (I_PRICE >= GEN_9) ? 30000 : 4000,
.holdEffect = HOLD_EFFECT_BLUNDER_POLICY,
.description = COMPOUND_STRING(
@@ -8066,6 +9092,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 80,
+ .iconPic = gItemIcon_BlunderPolicy,
+ .iconPalette = gItemIconPalette_BlunderPolicy,
},
[ITEM_ROOM_SERVICE] =
@@ -8081,11 +9109,13 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 100,
+ .iconPic = gItemIcon_RoomService,
+ .iconPalette = gItemIconPalette_RoomService,
},
[ITEM_UTILITY_UMBRELLA] =
{
- .name = _("UtltyUmbrlla"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("UtltyUmbrlla", "Utility Umbrella"),
.price = (I_PRICE >= GEN_9) ? 15000 : 4000,
.holdEffect = HOLD_EFFECT_UTILITY_UMBRELLA,
.description = COMPOUND_STRING(
@@ -8096,6 +9126,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 60,
+ .iconPic = gItemIcon_UtilityUmbrella,
+ .iconPalette = gItemIconPalette_UtilityUmbrella,
},
// Berries
@@ -8116,6 +9148,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_CURE_STATUS,
.effect = gItemEffect_ParalyzeHeal,
.flingPower = 10,
+ .iconPic = gItemIcon_CheriBerry,
+ .iconPalette = gItemIconPalette_CheriBerry,
},
[ITEM_CHESTO_BERRY] =
@@ -8134,6 +9168,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_CURE_STATUS,
.effect = gItemEffect_Awakening,
.flingPower = 10,
+ .iconPic = gItemIcon_ChestoBerry,
+ .iconPalette = gItemIconPalette_ChestoBerry,
},
[ITEM_PECHA_BERRY] =
@@ -8152,6 +9188,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_CURE_STATUS,
.effect = gItemEffect_Antidote,
.flingPower = 10,
+ .iconPic = gItemIcon_PechaBerry,
+ .iconPalette = gItemIconPalette_PechaBerry,
},
[ITEM_RAWST_BERRY] =
@@ -8170,6 +9208,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_CURE_STATUS,
.effect = gItemEffect_BurnHeal,
.flingPower = 10,
+ .iconPic = gItemIcon_RawstBerry,
+ .iconPalette = gItemIconPalette_RawstBerry,
},
[ITEM_ASPEAR_BERRY] =
@@ -8188,6 +9228,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_CURE_STATUS,
.effect = gItemEffect_IceHeal,
.flingPower = 10,
+ .iconPic = gItemIcon_AspearBerry,
+ .iconPalette = gItemIconPalette_AspearBerry,
},
[ITEM_LEPPA_BERRY] =
@@ -8207,6 +9249,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_RESTORE_PP,
.effect = gItemEffect_LeppaBerry,
.flingPower = 10,
+ .iconPic = gItemIcon_LeppaBerry,
+ .iconPalette = gItemIconPalette_LeppaBerry,
},
[ITEM_ORAN_BERRY] =
@@ -8226,6 +9270,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_RESTORE_HP,
.effect = gItemEffect_OranBerry,
.flingPower = 10,
+ .iconPic = gItemIcon_OranBerry,
+ .iconPalette = gItemIconPalette_OranBerry,
},
[ITEM_PERSIM_BERRY] =
@@ -8244,6 +9290,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_CURE_STATUS,
.effect = gItemEffect_PersimBerry,
.flingPower = 10,
+ .iconPic = gItemIcon_PersimBerry,
+ .iconPalette = gItemIconPalette_PersimBerry,
},
[ITEM_LUM_BERRY] =
@@ -8262,6 +9310,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_CURE_STATUS,
.effect = gItemEffect_FullHeal,
.flingPower = 10,
+ .iconPic = gItemIcon_LumBerry,
+ .iconPalette = gItemIconPalette_LumBerry,
},
[ITEM_SITRUS_BERRY] =
@@ -8290,6 +9340,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_RESTORE_HP,
.effect = gItemEffect_SitrusBerry,
.flingPower = 10,
+ .iconPic = gItemIcon_SitrusBerry,
+ .iconPalette = gItemIconPalette_SitrusBerry,
},
[ITEM_FIGY_BERRY] =
@@ -8304,6 +9356,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_FigyBerry,
+ .iconPalette = gItemIconPalette_FigyBerry,
},
[ITEM_WIKI_BERRY] =
@@ -8318,6 +9372,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_WikiBerry,
+ .iconPalette = gItemIconPalette_WikiBerry,
},
[ITEM_MAGO_BERRY] =
@@ -8332,6 +9388,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_MagoBerry,
+ .iconPalette = gItemIconPalette_MagoBerry,
},
[ITEM_AGUAV_BERRY] =
@@ -8346,6 +9404,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_AguavBerry,
+ .iconPalette = gItemIconPalette_AguavBerry,
},
[ITEM_IAPAPA_BERRY] =
@@ -8360,6 +9420,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_IapapaBerry,
+ .iconPalette = gItemIconPalette_IapapaBerry,
},
[ITEM_RAZZ_BERRY] =
@@ -8375,6 +9437,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_RazzBerry,
+ .iconPalette = gItemIconPalette_RazzBerry,
},
[ITEM_BLUK_BERRY] =
@@ -8390,6 +9454,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_BlukBerry,
+ .iconPalette = gItemIconPalette_BlukBerry,
},
[ITEM_NANAB_BERRY] =
@@ -8405,6 +9471,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_NanabBerry,
+ .iconPalette = gItemIconPalette_NanabBerry,
},
[ITEM_WEPEAR_BERRY] =
@@ -8420,6 +9488,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_WepearBerry,
+ .iconPalette = gItemIconPalette_WepearBerry,
},
[ITEM_PINAP_BERRY] =
@@ -8435,6 +9505,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_PinapBerry,
+ .iconPalette = gItemIconPalette_PinapBerry,
},
[ITEM_POMEG_BERRY] =
@@ -8451,6 +9523,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_ReduceEV,
.effect = gItemEffect_PomegBerry,
.flingPower = 10,
+ .iconPic = gItemIcon_PomegBerry,
+ .iconPalette = gItemIconPalette_PomegBerry,
},
[ITEM_KELPSY_BERRY] =
@@ -8467,6 +9541,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_ReduceEV,
.effect = gItemEffect_KelpsyBerry,
.flingPower = 10,
+ .iconPic = gItemIcon_KelpsyBerry,
+ .iconPalette = gItemIconPalette_KelpsyBerry,
},
[ITEM_QUALOT_BERRY] =
@@ -8483,6 +9559,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_ReduceEV,
.effect = gItemEffect_QualotBerry,
.flingPower = 10,
+ .iconPic = gItemIcon_QualotBerry,
+ .iconPalette = gItemIconPalette_QualotBerry,
},
[ITEM_HONDEW_BERRY] =
@@ -8499,6 +9577,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_ReduceEV,
.effect = gItemEffect_HondewBerry,
.flingPower = 10,
+ .iconPic = gItemIcon_HondewBerry,
+ .iconPalette = gItemIconPalette_HondewBerry,
},
[ITEM_GREPA_BERRY] =
@@ -8515,6 +9595,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_ReduceEV,
.effect = gItemEffect_GrepaBerry,
.flingPower = 10,
+ .iconPic = gItemIcon_GrepaBerry,
+ .iconPalette = gItemIconPalette_GrepaBerry,
},
[ITEM_TAMATO_BERRY] =
@@ -8531,6 +9613,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_ReduceEV,
.effect = gItemEffect_TamatoBerry,
.flingPower = 10,
+ .iconPic = gItemIcon_TamatoBerry,
+ .iconPalette = gItemIconPalette_TamatoBerry,
},
[ITEM_CORNN_BERRY] =
@@ -8546,6 +9630,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_CornnBerry,
+ .iconPalette = gItemIconPalette_CornnBerry,
},
[ITEM_MAGOST_BERRY] =
@@ -8561,6 +9647,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_MagostBerry,
+ .iconPalette = gItemIconPalette_MagostBerry,
},
[ITEM_RABUTA_BERRY] =
@@ -8576,6 +9664,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_RabutaBerry,
+ .iconPalette = gItemIconPalette_RabutaBerry,
},
[ITEM_NOMEL_BERRY] =
@@ -8591,6 +9681,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_NomelBerry,
+ .iconPalette = gItemIconPalette_NomelBerry,
},
[ITEM_SPELON_BERRY] =
@@ -8606,6 +9698,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_SpelonBerry,
+ .iconPalette = gItemIconPalette_SpelonBerry,
},
[ITEM_PAMTRE_BERRY] =
@@ -8621,6 +9715,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_PamtreBerry,
+ .iconPalette = gItemIconPalette_PamtreBerry,
},
[ITEM_WATMEL_BERRY] =
@@ -8636,6 +9732,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_WatmelBerry,
+ .iconPalette = gItemIconPalette_WatmelBerry,
},
[ITEM_DURIN_BERRY] =
@@ -8651,6 +9749,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_DurinBerry,
+ .iconPalette = gItemIconPalette_DurinBerry,
},
[ITEM_BELUE_BERRY] =
@@ -8666,6 +9766,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_BelueBerry,
+ .iconPalette = gItemIconPalette_BelueBerry,
},
[ITEM_CHILAN_BERRY] =
@@ -8683,6 +9785,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_ChilanBerry,
+ .iconPalette = gItemIconPalette_ChilanBerry,
},
[ITEM_OCCA_BERRY] =
@@ -8700,6 +9804,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_OccaBerry,
+ .iconPalette = gItemIconPalette_OccaBerry,
},
[ITEM_PASSHO_BERRY] =
@@ -8717,6 +9823,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_PasshoBerry,
+ .iconPalette = gItemIconPalette_PasshoBerry,
},
[ITEM_WACAN_BERRY] =
@@ -8734,6 +9842,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_WacanBerry,
+ .iconPalette = gItemIconPalette_WacanBerry,
},
[ITEM_RINDO_BERRY] =
@@ -8751,6 +9861,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_RindoBerry,
+ .iconPalette = gItemIconPalette_RindoBerry,
},
[ITEM_YACHE_BERRY] =
@@ -8768,6 +9880,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_YacheBerry,
+ .iconPalette = gItemIconPalette_YacheBerry,
},
[ITEM_CHOPLE_BERRY] =
@@ -8785,6 +9899,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_ChopleBerry,
+ .iconPalette = gItemIconPalette_ChopleBerry,
},
[ITEM_KEBIA_BERRY] =
@@ -8802,6 +9918,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_KebiaBerry,
+ .iconPalette = gItemIconPalette_KebiaBerry,
},
[ITEM_SHUCA_BERRY] =
@@ -8819,6 +9937,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_ShucaBerry,
+ .iconPalette = gItemIconPalette_ShucaBerry,
},
[ITEM_COBA_BERRY] =
@@ -8836,6 +9956,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_CobaBerry,
+ .iconPalette = gItemIconPalette_CobaBerry,
},
[ITEM_PAYAPA_BERRY] =
@@ -8853,6 +9975,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_PayapaBerry,
+ .iconPalette = gItemIconPalette_PayapaBerry,
},
[ITEM_TANGA_BERRY] =
@@ -8870,6 +9994,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_TangaBerry,
+ .iconPalette = gItemIconPalette_TangaBerry,
},
[ITEM_CHARTI_BERRY] =
@@ -8887,6 +10013,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_ChartiBerry,
+ .iconPalette = gItemIconPalette_ChartiBerry,
},
[ITEM_KASIB_BERRY] =
@@ -8904,6 +10032,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_KasibBerry,
+ .iconPalette = gItemIconPalette_KasibBerry,
},
[ITEM_HABAN_BERRY] =
@@ -8921,6 +10051,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_HabanBerry,
+ .iconPalette = gItemIconPalette_HabanBerry,
},
[ITEM_COLBUR_BERRY] =
@@ -8938,6 +10070,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_ColburBerry,
+ .iconPalette = gItemIconPalette_ColburBerry,
},
[ITEM_BABIRI_BERRY] =
@@ -8955,6 +10089,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_BabiriBerry,
+ .iconPalette = gItemIconPalette_BabiriBerry,
},
[ITEM_ROSELI_BERRY] =
@@ -8972,6 +10108,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_RoseliBerry,
+ .iconPalette = gItemIconPalette_RoseliBerry,
},
[ITEM_LIECHI_BERRY] =
@@ -8989,6 +10127,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_LiechiBerry,
+ .iconPalette = gItemIconPalette_LiechiBerry,
},
[ITEM_GANLON_BERRY] =
@@ -9006,6 +10146,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_GanlonBerry,
+ .iconPalette = gItemIconPalette_GanlonBerry,
},
[ITEM_SALAC_BERRY] =
@@ -9023,6 +10165,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_SalacBerry,
+ .iconPalette = gItemIconPalette_SalacBerry,
},
[ITEM_PETAYA_BERRY] =
@@ -9040,6 +10184,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_PetayaBerry,
+ .iconPalette = gItemIconPalette_PetayaBerry,
},
[ITEM_APICOT_BERRY] =
@@ -9057,6 +10203,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_ApicotBerry,
+ .iconPalette = gItemIconPalette_ApicotBerry,
},
[ITEM_LANSAT_BERRY] =
@@ -9074,6 +10222,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_LansatBerry,
+ .iconPalette = gItemIconPalette_LansatBerry,
},
[ITEM_STARF_BERRY] =
@@ -9091,6 +10241,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_StarfBerry,
+ .iconPalette = gItemIconPalette_StarfBerry,
},
[ITEM_ENIGMA_BERRY] =
@@ -9107,6 +10259,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_EnigmaBerry,
+ .iconPalette = gItemIconPalette_EnigmaBerry,
},
[ITEM_MICLE_BERRY] =
@@ -9124,6 +10278,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_MicleBerry,
+ .iconPalette = gItemIconPalette_MicleBerry,
},
[ITEM_CUSTAP_BERRY] =
@@ -9141,6 +10297,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_CustapBerry,
+ .iconPalette = gItemIconPalette_CustapBerry,
},
[ITEM_JABOCA_BERRY] =
@@ -9157,6 +10315,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_JabocaBerry,
+ .iconPalette = gItemIconPalette_JabocaBerry,
},
[ITEM_ROWAP_BERRY] =
@@ -9173,6 +10333,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_RowapBerry,
+ .iconPalette = gItemIconPalette_RowapBerry,
},
[ITEM_KEE_BERRY] =
@@ -9189,6 +10351,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_KeeBerry,
+ .iconPalette = gItemIconPalette_KeeBerry,
},
[ITEM_MARANGA_BERRY] =
@@ -9205,6 +10369,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_MarangaBerry,
+ .iconPalette = gItemIconPalette_MarangaBerry,
},
[ITEM_ENIGMA_BERRY_E_READER] =
@@ -9221,6 +10387,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_EnigmaBerry,
.battleUsage = EFFECT_ITEM_ENIGMA_BERRY_EREADER,
.flingPower = 10,
+ .iconPic = gItemIcon_EnigmaBerry,
+ .iconPalette = gItemIconPalette_EnigmaBerry,
},
// TMs/HMs. They don't have a set flingPower, as that's handled by GetFlingPowerFromItemId.
@@ -9994,7 +11162,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_ROOST,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM52] =
@@ -10006,7 +11174,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_FOCUS_BLAST,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM53] =
@@ -10018,7 +11186,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_ENERGY_BALL,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM54] =
@@ -10030,7 +11198,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_FALSE_SWIPE,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM55] =
@@ -10042,7 +11210,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_BRINE,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM56] =
@@ -10054,7 +11222,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_FLING,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM57] =
@@ -10066,7 +11234,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_CHARGE_BEAM,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM58] =
@@ -10078,7 +11246,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_EARTH_POWER,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM59] =
@@ -10090,7 +11258,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_DRAGON_PULSE,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM60] =
@@ -10102,7 +11270,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_DRAIN_PUNCH,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM61] =
@@ -10114,7 +11282,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_WILL_O_WISP,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM62] =
@@ -10126,7 +11294,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_SILVER_WIND,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM63] =
@@ -10138,7 +11306,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_ANCIENT_POWER,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM64] =
@@ -10150,7 +11318,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_EXPLOSION,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM65] =
@@ -10162,7 +11330,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_SHADOW_CLAW,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM66] =
@@ -10174,7 +11342,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_PAYBACK,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM67] =
@@ -10186,7 +11354,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_RECYCLE,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM68] =
@@ -10198,7 +11366,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_GIGA_IMPACT,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM69] =
@@ -10210,7 +11378,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_ROCK_POLISH,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM70] =
@@ -10222,7 +11390,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_GROWTH,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM71] =
@@ -10234,7 +11402,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_STONE_EDGE,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM72] =
@@ -10246,7 +11414,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_AVALANCHE,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM73] =
@@ -10258,7 +11426,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_THUNDER_WAVE,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM74] =
@@ -10270,7 +11438,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_GYRO_BALL,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM75] =
@@ -10282,7 +11450,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_SWORDS_DANCE,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM76] =
@@ -10294,7 +11462,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_STEALTH_ROCK,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM77] =
@@ -10306,7 +11474,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_PSYCH_UP,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM78] =
@@ -10318,7 +11486,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_SUPERPOWER,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM79] =
@@ -10330,7 +11498,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_DARK_PULSE,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM80] =
@@ -10342,7 +11510,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_ROCK_SLIDE,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM81] =
@@ -10354,7 +11522,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_X_SCISSOR,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM82] =
@@ -10366,7 +11534,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_SLEEP_TALK,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM83] =
@@ -10378,7 +11546,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_NASTY_PLOT,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM84] =
@@ -10390,7 +11558,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_POISON_JAB,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM85] =
@@ -10402,7 +11570,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_DREAM_EATER,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM86] =
@@ -10414,7 +11582,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_GRASS_KNOT,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM87] =
@@ -10426,7 +11594,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_SWAGGER,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM88] =
@@ -10438,7 +11606,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_PLUCK,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM89] =
@@ -10450,7 +11618,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_U_TURN,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM90] =
@@ -10462,7 +11630,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_SUBSTITUTE,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM91] =
@@ -10474,7 +11642,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_FLASH_CANNON,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM92] =
@@ -10486,7 +11654,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_TRICK_ROOM,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM93] =
@@ -10498,7 +11666,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_WILD_CHARGE,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM94] =
@@ -10510,7 +11678,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_METRONOME,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM95] =
@@ -10522,7 +11690,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_SNARL,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM96] =
@@ -10534,7 +11702,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_POWER_GEM,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM97] =
@@ -10546,7 +11714,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_DRAINING_KISS,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM98] =
@@ -10558,7 +11726,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_POWER_UP_PUNCH,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM99] =
@@ -10570,7 +11738,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_DAZZLING_GLEAM,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_TM100] =
@@ -10582,7 +11750,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_TM_HM,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_TMHM,
- .secondaryId = MOVE_NONE,
+ .secondaryId = MOVE_NONE, // Todo
},
[ITEM_HM_CUT] =
@@ -10720,6 +11888,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_OvalCharm,
+ .iconPalette = gItemIconPalette_OvalCharm,
},
[ITEM_SHINY_CHARM] =
@@ -10734,11 +11904,13 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_ShinyCharm,
+ .iconPalette = gItemIconPalette_ShinyCharm,
},
[ITEM_CATCHING_CHARM] =
{
- .name = _("CatchngCharm"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("CatchngCharm", "Catching Charm"),
.price = 0,
.importance = 1,
.description = COMPOUND_STRING(
@@ -10748,6 +11920,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_CatchingCharm,
+ .iconPalette = gItemIconPalette_CatchingCharm,
},
[ITEM_EXP_CHARM] =
@@ -10762,13 +11936,15 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_ExpCharm,
+ .iconPalette = gItemIconPalette_ExpCharm,
},
// Form-changing Key Items
[ITEM_ROTOM_CATALOG] =
{
- .name = _("RotomCatalog"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("RotomCatalog", "Rotom Catalog"),
.price = 0,
.importance = 1,
.description = COMPOUND_STRING(
@@ -10778,6 +11954,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_RotomCatalog,
+ .iconPic = gItemIcon_RotomCatalog,
+ .iconPalette = gItemIconPalette_RotomCatalog,
},
[ITEM_GRACIDEA] =
@@ -10792,6 +11970,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_FormChange,
+ .iconPic = gItemIcon_Gracidea,
+ .iconPalette = gItemIconPalette_Gracidea,
},
[ITEM_REVEAL_GLASS] =
@@ -10807,6 +11987,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_FormChange,
+ .iconPic = gItemIcon_RevealGlass,
+ .iconPalette = gItemIconPalette_RevealGlass,
},
[ITEM_DNA_SPLICERS] =
@@ -10822,6 +12004,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_Fusion,
+ .iconPic = gItemIcon_DNASplicers,
+ .iconPalette = gItemIconPalette_DNASplicers,
},
[ITEM_ZYGARDE_CUBE] =
@@ -10836,6 +12020,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_ZygardeCube,
+ .iconPic = gItemIcon_ZygardeCube,
+ .iconPalette = gItemIconPalette_ZygardeCube,
},
[ITEM_PRISON_BOTTLE] =
@@ -10850,6 +12036,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_FormChange,
+ .iconPic = gItemIcon_PrisonBottle,
+ .iconPalette = gItemIconPalette_PrisonBottle,
},
[ITEM_N_SOLARIZER] =
@@ -10864,6 +12052,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_Fusion,
+ .iconPic = gItemIcon_NecrozmaFuser,
+ .iconPalette = gItemIconPalette_NSolarizer,
},
[ITEM_N_LUNARIZER] =
@@ -10878,12 +12068,14 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_Fusion,
+ .iconPic = gItemIcon_NecrozmaFuser,
+ .iconPalette = gItemIconPalette_NLunarizer,
},
[ITEM_REINS_OF_UNITY] =
{
- .name = _("ReinsOfUnity"),
- .pluralName = _("ReinsOfUnity"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("ReinsOfUnity", "Reins of Unity"),
+ .pluralName = HANDLE_EXPANDED_ITEM_NAME("ReinsOfUnity", "Reins of Unity"),
.price = 0,
.importance = 1,
.description = COMPOUND_STRING(
@@ -10893,6 +12085,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_Fusion,
+ .iconPic = gItemIcon_ReinsOfUnity,
+ .iconPalette = gItemIconPalette_ReinsOfUnity,
},
// Battle Mechanic Key Items
@@ -10909,6 +12103,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_MegaRing,
+ .iconPalette = gItemIconPalette_MegaRing,
},
[ITEM_Z_POWER_RING] =
@@ -10923,6 +12119,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_ZPowerRing,
+ .iconPalette = gItemIconPalette_ZPowerRing,
},
[ITEM_DYNAMAX_BAND] =
@@ -10936,6 +12134,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_DynamaxBand,
+ .iconPalette = gItemIconPalette_DynamaxBand,
},
// Misc. Key Items
@@ -10952,6 +12152,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_FIELD,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_Bicycle,
+ .iconPalette = gItemIconPalette_Bicycle,
},
[ITEM_MACH_BIKE] =
@@ -10967,6 +12169,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_FIELD,
.fieldUseFunc = ItemUseOutOfBattle_Bike,
.secondaryId = MACH_BIKE,
+ .iconPic = gItemIcon_MachBike,
+ .iconPalette = gItemIconPalette_MachBike,
},
[ITEM_ACRO_BIKE] =
@@ -10982,6 +12186,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_FIELD,
.fieldUseFunc = ItemUseOutOfBattle_Bike,
.secondaryId = ACRO_BIKE,
+ .iconPic = gItemIcon_AcroBike,
+ .iconPalette = gItemIconPalette_AcroBike,
},
[ITEM_OLD_ROD] =
@@ -10997,6 +12203,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_FIELD,
.fieldUseFunc = ItemUseOutOfBattle_Rod,
.secondaryId = OLD_ROD,
+ .iconPic = gItemIcon_OldRod,
+ .iconPalette = gItemIconPalette_OldRod,
},
[ITEM_GOOD_ROD] =
@@ -11012,6 +12220,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_FIELD,
.fieldUseFunc = ItemUseOutOfBattle_Rod,
.secondaryId = GOOD_ROD,
+ .iconPic = gItemIcon_GoodRod,
+ .iconPalette = gItemIconPalette_GoodRod,
},
[ITEM_SUPER_ROD] =
@@ -11027,11 +12237,13 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_FIELD,
.fieldUseFunc = ItemUseOutOfBattle_Rod,
.secondaryId = SUPER_ROD,
+ .iconPic = gItemIcon_SuperRod,
+ .iconPalette = gItemIconPalette_SuperRod,
},
[ITEM_DOWSING_MACHINE] =
{
- .name = _("Dowsing MCHN"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("Dowsing MCHN", "Dowsing Machine"),
.price = 0,
.description = COMPOUND_STRING(
"A device that\n"
@@ -11041,6 +12253,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_FIELD,
.fieldUseFunc = ItemUseOutOfBattle_Itemfinder,
+ .iconPic = gItemIcon_DowsingMachine,
+ .iconPalette = gItemIconPalette_DowsingMachine,
},
[ITEM_TOWN_MAP] =
@@ -11055,6 +12269,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_TownMap,
+ .iconPalette = gItemIconPalette_TownMap,
},
[ITEM_VS_SEEKER] =
@@ -11073,6 +12289,8 @@ const struct Item gItemsInfo[] =
#else
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
#endif
+ .iconPic = gItemIcon_VsSeeker,
+ .iconPalette = gItemIconPalette_VsSeeker,
},
[ITEM_TM_CASE] =
@@ -11087,6 +12305,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_TMCase,
+ .iconPalette = gItemIconPalette_TMCase,
},
[ITEM_BERRY_POUCH] =
@@ -11102,6 +12322,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_BerryPouch,
+ .iconPalette = gItemIconPalette_BerryPouch,
},
[ITEM_POKEMON_BOX_LINK] =
@@ -11116,6 +12338,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_FIELD,
.fieldUseFunc = ItemUseOutOfBattle_PokemonBoxLink,
+ .iconPic = gItemIcon_PokemonBoxLink,
+ .iconPalette = gItemIconPalette_PokemonBoxLink,
},
[ITEM_COIN_CASE] =
@@ -11129,6 +12353,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CoinCase,
+ .iconPic = gItemIcon_CoinCase,
+ .iconPalette = gItemIconPalette_CoinCase,
},
[ITEM_POWDER_JAR] =
@@ -11143,6 +12369,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_PowderJar,
+ .iconPic = gItemIcon_PowderJar,
+ .iconPalette = gItemIconPalette_PowderJar,
},
[ITEM_WAILMER_PAIL] =
@@ -11157,6 +12385,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_FIELD,
.fieldUseFunc = ItemUseOutOfBattle_WailmerPail,
+ .iconPic = gItemIcon_WailmerPail,
+ .iconPalette = gItemIconPalette_WailmerPail,
},
[ITEM_POKE_RADAR] =
@@ -11171,6 +12401,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse, // Todo
+ .iconPic = gItemIcon_PokeRadar,
+ .iconPalette = gItemIconPalette_PokeRadar,
},
[ITEM_POKEBLOCK_CASE] =
@@ -11185,6 +12417,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_PBLOCK_CASE,
.fieldUseFunc = ItemUseOutOfBattle_PokeblockCase,
+ .iconPic = gItemIcon_PokeblockCase,
+ .iconPalette = gItemIconPalette_PokeblockCase,
},
[ITEM_SOOT_SACK] =
@@ -11199,6 +12433,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_SootSack,
+ .iconPalette = gItemIconPalette_SootSack,
},
[ITEM_POKE_FLUTE] =
@@ -11213,6 +12449,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_PokeFlute,
+ .iconPalette = gItemIconPalette_PokeFlute,
},
[ITEM_FAME_CHECKER] =
@@ -11227,6 +12465,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_FameChecker,
+ .iconPalette = gItemIconPalette_FameChecker,
},
[ITEM_TEACHY_TV] =
@@ -11241,6 +12481,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_FIELD,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_TeachyTV,
+ .iconPalette = gItemIconPalette_TeachyTV,
},
// Story Key Items
@@ -11257,6 +12499,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_SSTicket,
+ .iconPalette = gItemIconPalette_SSTicket,
},
[ITEM_EON_TICKET] =
@@ -11272,6 +12516,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.secondaryId = 1,
+ .iconPic = gItemIcon_EonTicket,
+ .iconPalette = gItemIconPalette_EonTicket,
},
[ITEM_MYSTIC_TICKET] =
@@ -11286,6 +12532,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_MysticTicket,
+ .iconPalette = gItemIconPalette_MysticTicket,
},
[ITEM_AURORA_TICKET] =
@@ -11300,6 +12548,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_AuroraTicket,
+ .iconPalette = gItemIconPalette_AuroraTicket,
},
[ITEM_OLD_SEA_MAP] =
@@ -11314,6 +12564,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_OldSeaMap,
+ .iconPalette = gItemIconPalette_OldSeaMap,
},
[ITEM_LETTER] =
@@ -11328,6 +12580,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_Letter,
+ .iconPalette = gItemIconPalette_LavaCookieAndLetter,
},
[ITEM_DEVON_PARTS] =
@@ -11343,6 +12597,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_DevonParts,
+ .iconPalette = gItemIconPalette_DevonParts,
},
[ITEM_GO_GOGGLES] =
@@ -11358,6 +12614,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_GoGoggles,
+ .iconPalette = gItemIconPalette_GoGoggles,
},
[ITEM_DEVON_SCOPE] =
@@ -11372,6 +12630,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_DevonScope,
+ .iconPalette = gItemIconPalette_DevonScope,
},
[ITEM_BASEMENT_KEY] =
@@ -11386,6 +12646,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_BasementKey,
+ .iconPalette = gItemIconPalette_OldKey,
},
[ITEM_SCANNER] =
@@ -11400,6 +12662,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_Scanner,
+ .iconPalette = gItemIconPalette_Scanner,
},
[ITEM_STORAGE_KEY] =
@@ -11414,6 +12678,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_StorageKey,
+ .iconPalette = gItemIconPalette_OldKey,
},
[ITEM_KEY_TO_ROOM_1] =
@@ -11426,6 +12692,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_KeyToRoom1,
+ .iconPalette = gItemIconPalette_Key,
},
[ITEM_KEY_TO_ROOM_2] =
@@ -11438,6 +12706,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_KeyToRoom2,
+ .iconPalette = gItemIconPalette_Key,
},
[ITEM_KEY_TO_ROOM_4] =
@@ -11450,6 +12720,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_KeyToRoom4,
+ .iconPalette = gItemIconPalette_Key,
},
[ITEM_KEY_TO_ROOM_6] =
@@ -11462,6 +12734,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_KeyToRoom6,
+ .iconPalette = gItemIconPalette_Key,
},
[ITEM_METEORITE] =
@@ -11475,6 +12749,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_FormChange,
+ .iconPic = gItemIcon_Meteorite,
+ .iconPalette = gItemIconPalette_Meteorite,
},
[ITEM_MAGMA_EMBLEM] =
@@ -11489,6 +12765,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_MagmaEmblem,
+ .iconPalette = gItemIconPalette_MagmaEmblem,
},
[ITEM_CONTEST_PASS] =
@@ -11504,6 +12782,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_ContestPass,
+ .iconPalette = gItemIconPalette_ContestPass,
},
[ITEM_PARCEL] =
@@ -11518,6 +12798,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_Parcel,
+ .iconPalette = gItemIconPalette_Parcel,
},
[ITEM_SECRET_KEY] =
@@ -11532,6 +12814,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_SecretKey,
+ .iconPalette = gItemIconPalette_SecretKey,
},
[ITEM_BIKE_VOUCHER] =
@@ -11546,6 +12830,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_BikeVoucher,
+ .iconPalette = gItemIconPalette_BikeVoucher,
},
[ITEM_GOLD_TEETH] =
@@ -11561,6 +12847,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_GoldTeeth,
+ .iconPalette = gItemIconPalette_GoldTeeth,
},
[ITEM_CARD_KEY] =
@@ -11575,6 +12863,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_CardKey,
+ .iconPalette = gItemIconPalette_CardKey,
},
[ITEM_LIFT_KEY] =
@@ -11589,6 +12879,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_LiftKey,
+ .iconPalette = gItemIconPalette_Key,
},
[ITEM_SILPH_SCOPE] =
@@ -11603,6 +12895,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_SilphScope,
+ .iconPalette = gItemIconPalette_SilphScope,
},
[ITEM_TRI_PASS] =
@@ -11618,6 +12912,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_TriPass,
+ .iconPalette = gItemIconPalette_TriPass,
},
[ITEM_RAINBOW_PASS] =
@@ -11633,6 +12929,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_RainbowPass,
+ .iconPalette = gItemIconPalette_RainbowPass,
},
[ITEM_TEA] =
@@ -11648,6 +12946,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_Tea,
+ .iconPalette = gItemIconPalette_Tea,
},
[ITEM_RUBY] =
@@ -11663,6 +12963,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_Gem,
+ .iconPalette = gItemIconPalette_Ruby,
},
[ITEM_SAPPHIRE] =
@@ -11677,12 +12979,14 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_Gem,
+ .iconPalette = gItemIconPalette_Sapphire,
},
[ITEM_ABILITY_SHIELD] =
{
- .name = _("AbilityShield"),
- .price = 10000,
+ .name = HANDLE_EXPANDED_ITEM_NAME("AbilityShield", "Ability Shield"),
+ .price = 20000,
.holdEffect = HOLD_EFFECT_ABILITY_SHIELD,
.description = COMPOUND_STRING(
"Ability changes are\n"
@@ -11692,6 +12996,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_AbilityShield,
+ .iconPalette = gItemIconPalette_AbilityShield,
},
// GEN 9 ITEMS
@@ -11709,11 +13015,13 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_ClearAmulet,
+ .iconPalette = gItemIconPalette_ClearAmulet,
},
[ITEM_PUNCHING_GLOVE] =
{
- .name = _("PunchingGlove"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("PunchingGlove", "Punching Glove"),
.price = 15000,
.holdEffect = HOLD_EFFECT_PUNCHING_GLOVE,
.description = COMPOUND_STRING(
@@ -11724,12 +13032,14 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_PunchingGlove,
+ .iconPalette = gItemIconPalette_PunchingGlove,
},
[ITEM_COVERT_CLOAK] =
{
.name = _("Covert Cloak"),
- .price = 10000,
+ .price = 20000,
.holdEffect = HOLD_EFFECT_COVERT_CLOAK,
.description = COMPOUND_STRING(
"Protects the holder\n"
@@ -11739,6 +13049,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_CovertCloak,
+ .iconPalette = gItemIconPalette_CovertCloak,
},
[ITEM_LOADED_DICE] =
@@ -11755,11 +13067,13 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_LoadedDice,
+ .iconPalette = gItemIconPalette_LoadedDice,
},
[ITEM_AUSPICIOUS_ARMOR] =
{
- .name = _("AuspciousArmr"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("AuspciousArmr", "Auspicious Armor"),
.price = 3000,
.description = COMPOUND_STRING(
"Armor inhabited by\n"
@@ -11770,12 +13084,14 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
.effect = gItemEffect_EvoItem,
.flingPower = 30,
+ .iconPic = gItemIcon_AuspiciousArmor,
+ .iconPalette = gItemIconPalette_AuspiciousArmor,
},
[ITEM_BOOSTER_ENERGY] =
{
- .name = _("BoosterEnergy"),
- .pluralName = _("BoosterEnergies"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("BoosterEnergy", "Booster Energy"),
+ .pluralName = HANDLE_EXPANDED_ITEM_NAME("BoosterEnergies", "Booster Energies"),
.price = 0,
.holdEffect = HOLD_EFFECT_BOOSTER_ENERGY,
.description = COMPOUND_STRING(
@@ -11786,11 +13102,13 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_BoosterEnergy,
+ .iconPalette = gItemIconPalette_BoosterEnergy,
},
[ITEM_BIG_BAMBOO_SHOOT] =
{
- .name = _("BigBmbooShoot"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("BigBmbooShoot", "Big Bamboo Shoot"),
.price = 3000,
.description = COMPOUND_STRING(
"A large and rare\n"
@@ -11800,11 +13118,13 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_BigBambooShoot,
+ .iconPalette = gItemIconPalette_BigBambooShoot,
},
[ITEM_GIMMIGHOUL_COIN] =
{
- .name = _("GimighoulCoin"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("GimighoulCoin", "Gimmighoul Coin"),
.price = 400,
.description = COMPOUND_STRING(
"Gimmighoul hoard\n"
@@ -11813,11 +13133,13 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_GimmighoulCoin,
+ .iconPalette = gItemIconPalette_GimmighoulCoin,
},
[ITEM_LEADERS_CREST] =
{
- .name = _("Leader'sCrest"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("Leader'sCrest", "Leader's Crest"),
.price = 3000,
.description = COMPOUND_STRING(
"A shard of an old\n"
@@ -11826,11 +13148,13 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_LeadersCrest,
+ .iconPalette = gItemIconPalette_LeadersCrest,
},
[ITEM_MALICIOUS_ARMOR] =
{
- .name = _("MaliciousArmr"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("MaliciousArmr", "Malicious Armor"),
.price = 3000,
.description = COMPOUND_STRING(
"Armor inhabited by\n"
@@ -11841,12 +13165,14 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
.effect = gItemEffect_EvoItem,
.flingPower = 30,
+ .iconPic = gItemIcon_MaliciousArmor,
+ .iconPalette = gItemIconPalette_MaliciousArmor,
},
[ITEM_MIRROR_HERB] =
{
.name = _("Mirror Herb"),
- .price = 300,
+ .price = 30000,
.holdEffect = HOLD_EFFECT_MIRROR_HERB,
.description = COMPOUND_STRING(
"Mirrors an enemy's\n"
@@ -11856,12 +13182,14 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_MirrorHerb,
+ .iconPalette = gItemIconPalette_MirrorHerb,
},
[ITEM_SCROLL_OF_DARKNESS] =
{
- .name = _("ScrllOfDrknss"),
- .pluralName = _("ScrllsOfDrknss"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("ScrllOfDrknss", "Scroll of Darkness"),
+ .pluralName = HANDLE_EXPANDED_ITEM_NAME("ScrllsOfDrknss", "Scrolls of Darkness"),
.price = 0,
.description = COMPOUND_STRING(
"A peculiar scroll\n"
@@ -11872,12 +13200,14 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
.effect = gItemEffect_EvoItem,
+ .iconPic = gItemIcon_ScrollOfDarkness,
+ .iconPalette = gItemIconPalette_ScrollOfDarkness,
},
[ITEM_SCROLL_OF_WATERS] =
{
- .name = _("ScrollOfWatrs"),
- .pluralName = _("ScrollsOfWatrs"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("ScrollOfWatrs", "Scroll of Waters"),
+ .pluralName = HANDLE_EXPANDED_ITEM_NAME("ScrollsOfWatrs", "Scrolls of Waters"),
.price = 0,
.description = COMPOUND_STRING(
"A peculiar scroll\n"
@@ -11888,6 +13218,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
.effect = gItemEffect_EvoItem,
+ .iconPic = gItemIcon_ScrollOfWaters,
+ .iconPalette = gItemIconPalette_ScrollOfWaters,
},
[ITEM_TERA_ORB] =
@@ -11902,11 +13234,13 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_TeraOrb,
+ .iconPalette = gItemIconPalette_TeraOrb,
},
[ITEM_TINY_BAMBOO_SHOOT] =
{
- .name = _("TinyBmbooShot"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("TinyBmbooShot", "Tiny Bamboo Shoot"),
.price = 750,
.description = COMPOUND_STRING(
"A small and rare\n"
@@ -11916,191 +13250,229 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 30,
+ .iconPic = gItemIcon_TinyBambooShoot,
+ .iconPalette = gItemIconPalette_TinyBambooShoot,
},
[ITEM_BUG_TERA_SHARD] =
{
- .name = _("Bug TeraShard"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("Bug TeraShard", "Bug Tera Shard"),
.price = 0,
.description = sTeraShardDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_TeraShard,
+ .iconPalette = gItemIconPalette_BugTeraShard,
},
[ITEM_DARK_TERA_SHARD] =
{
- .name = _("DarkTeraShard"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("DarkTeraShard", "Dark Tera Shard"),
.price = 0,
.description = sTeraShardDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_TeraShard,
+ .iconPalette = gItemIconPalette_DarkTeraShard,
},
[ITEM_DRAGON_TERA_SHARD] =
{
- .name = _("DragnTeraShrd"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("DragnTeraShrd", "Dragon Tera Shard"),
.price = 0,
.description = sTeraShardDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_TeraShard,
+ .iconPalette = gItemIconPalette_DragonTeraShard,
},
[ITEM_ELECTRIC_TERA_SHARD] =
{
- .name = _("EltrcTeraShrd"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("EltrcTeraShrd", "Electric Tera Shard"),
.price = 0,
.description = sTeraShardDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_TeraShard,
+ .iconPalette = gItemIconPalette_ElectricTeraShard,
},
[ITEM_FAIRY_TERA_SHARD] =
{
- .name = _("FairyTeraShrd"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("FairyTeraShrd", "Fairy Tera Shard"),
.price = 0,
.description = sTeraShardDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_TeraShard,
+ .iconPalette = gItemIconPalette_FairyTeraShard,
},
[ITEM_FIGHTING_TERA_SHARD] =
{
- .name = _("FghtngTerShrd"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("FghtngTerShrd", "Fighting Tera Shard"),
.price = 0,
.description = sTeraShardDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_TeraShard,
+ .iconPalette = gItemIconPalette_FightingTeraShard,
},
[ITEM_FIRE_TERA_SHARD] =
{
- .name = _("FireTeraShard"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("FireTeraShard", "Fire Tera Shard"),
.price = 0,
.description = sTeraShardDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_TeraShard,
+ .iconPalette = gItemIconPalette_FireTeraShard,
},
[ITEM_FLYING_TERA_SHARD] =
{
- .name = _("FlyngTeraShrd"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("FlyngTeraShrd", "Flying Tera Shard"),
.price = 0,
.description = sTeraShardDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_TeraShard,
+ .iconPalette = gItemIconPalette_FlyingTeraShard,
},
[ITEM_GHOST_TERA_SHARD] =
{
- .name = _("GhostTeraShrd"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("GhostTeraShrd", "Ghost Tera Shard"),
.price = 0,
.description = sTeraShardDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_TeraShard,
+ .iconPalette = gItemIconPalette_GhostTeraShard,
},
[ITEM_GRASS_TERA_SHARD] =
{
- .name = _("GrassTeraShrd"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("GrassTeraShrd", "Grass Tera Shard"),
.price = 0,
.description = sTeraShardDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_TeraShard,
+ .iconPalette = gItemIconPalette_GrassTeraShard,
},
[ITEM_GROUND_TERA_SHARD] =
{
- .name = _("GrondTeraShrd"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("GrondTeraShrd", "Ground Tera Shard"),
.price = 0,
.description = sTeraShardDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_TeraShard,
+ .iconPalette = gItemIconPalette_GroundTeraShard,
},
[ITEM_ICE_TERA_SHARD] =
{
- .name = _("Ice TeraShard"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("Ice TeraShard", "Ice Tera Shard"),
.price = 0,
.description = sTeraShardDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_TeraShard,
+ .iconPalette = gItemIconPalette_IceTeraShard,
},
[ITEM_NORMAL_TERA_SHARD] =
{
- .name = _("NormlTeraShrd"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("NormlTeraShrd", "Normal Tera Shard"),
.price = 0,
.description = sTeraShardDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_TeraShard,
+ .iconPalette = gItemIconPalette_NormalTeraShard,
},
[ITEM_POISON_TERA_SHARD] =
{
- .name = _("PoisnTeraShrd"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("PoisnTeraShrd", "Poison Tera Shard"),
.price = 0,
.description = sTeraShardDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_TeraShard,
+ .iconPalette = gItemIconPalette_PoisonTeraShard,
},
[ITEM_PSYCHIC_TERA_SHARD] =
{
- .name = _("PschcTeraShrd"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("PschcTeraShrd", "Psychic Tera Shard"),
.price = 0,
.description = sTeraShardDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_TeraShard,
+ .iconPalette = gItemIconPalette_PsychicTeraShard,
},
[ITEM_ROCK_TERA_SHARD] =
{
- .name = _("RockTeraShard"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("RockTeraShard", "Rock Tera Shard"),
.price = 0,
.description = sTeraShardDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_TeraShard,
+ .iconPalette = gItemIconPalette_RockTeraShard,
},
[ITEM_STEEL_TERA_SHARD] =
{
- .name = _("SteelTeraShrd"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("SteelTeraShrd", "Steel Tera Shard"),
.price = 0,
.description = sTeraShardDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_TeraShard,
+ .iconPalette = gItemIconPalette_SteelTeraShard,
},
[ITEM_WATER_TERA_SHARD] =
{
- .name = _("WaterTeraShrd"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("WaterTeraShrd", "Water Tera Shard"),
.price = 0,
.description = sTeraShardDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_TeraShard,
+ .iconPalette = gItemIconPalette_WaterTeraShard,
},
[ITEM_ADAMANT_CRYSTAL] =
{
- .name = _("AdamantCrystl"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("AdamantCrystl", "Adamant Crystal"),
.price = 0,
.description = COMPOUND_STRING(
"A large, glowing gem\n"
@@ -12110,6 +13482,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 60,
+ .iconPic = gItemIcon_AdamantCrystal,
+ .iconPalette = gItemIconPalette_AdamantCrystal,
},
[ITEM_GRISEOUS_CORE] =
@@ -12124,11 +13498,13 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 60,
+ .iconPic = gItemIcon_GriseousCore,
+ .iconPalette = gItemIconPalette_GriseousCore,
},
[ITEM_LUSTROUS_GLOBE] =
{
- .name = _("LustrousGlobe"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("LustrousGlobe", "Lustrous Globe"),
.price = 0,
.description = COMPOUND_STRING(
"A large, glowing gem\n"
@@ -12138,11 +13514,13 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 60,
+ .iconPic = gItemIcon_LustrousGlobe,
+ .iconPalette = gItemIconPalette_LustrousGlobe,
},
[ITEM_BLACK_AUGURITE] =
{
- .name = _("BlackAugurite"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("BlackAugurite", "Black Augurite"),
.price = 8000,
.description = COMPOUND_STRING(
"A black stone that\n"
@@ -12153,6 +13531,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
.effect = gItemEffect_EvoItem,
.flingPower = 30,
+ .iconPic = gItemIcon_BlackAugurite,
+ .iconPalette = gItemIconPalette_BlackAugurite,
},
[ITEM_LINKING_CORD] =
@@ -12168,6 +13548,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
.effect = gItemEffect_EvoItem,
.flingPower = 30,
+ .iconPic = gItemIcon_LinkingCord,
+ .iconPalette = gItemIconPalette_LinkingCord,
},
[ITEM_PEAT_BLOCK] =
@@ -12183,6 +13565,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
.effect = gItemEffect_EvoItem,
.flingPower = 30,
+ .iconPic = gItemIcon_PeatBlock,
+ .iconPalette = gItemIconPalette_PeatBlock,
},
[ITEM_BERSERK_GENE] =
@@ -12198,6 +13582,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_BerserkGene,
+ .iconPalette = gItemIconPalette_BerserkGene,
},
[ITEM_FAIRY_FEATHER] =
@@ -12214,6 +13600,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
.flingPower = 10,
+ .iconPic = gItemIcon_FairyFeather,
+ .iconPalette = gItemIconPalette_FairyFeather,
},
[ITEM_SYRUPY_APPLE] =
@@ -12229,11 +13617,13 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
.effect = gItemEffect_EvoItem,
.flingPower = 30,
+ .iconPic = gItemIcon_SyrupyApple,
+ .iconPalette = gItemIconPalette_SyrupyApple,
},
[ITEM_UNREMARKABLE_TEACUP] =
{
- .name = _("UnrmkblTeacup"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("UnrmkblTeacup", "Unremarkable Teacup"),
.price = 1600,
.description = COMPOUND_STRING(
"A cracked teacup\n"
@@ -12244,11 +13634,13 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
.effect = gItemEffect_EvoItem,
.flingPower = 80,
+ .iconPic = gItemIcon_UnremarkableTeacup,
+ .iconPalette = gItemIconPalette_UnremarkableTeacup,
},
[ITEM_MASTERPIECE_TEACUP] =
{
- .name = _("MstrpceTeacup"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("MstrpceTeacup", "Masterpiece Teacup"),
.price = 38000,
.description = COMPOUND_STRING(
"A chipped teacup\n"
@@ -12259,11 +13651,13 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
.effect = gItemEffect_EvoItem,
.flingPower = 80,
+ .iconPic = gItemIcon_MasterpieceTeacup,
+ .iconPalette = gItemIconPalette_MasterpieceTeacup,
},
[ITEM_CORNERSTONE_MASK] =
{
- .name = _("CornrstneMask"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("CornrstneMask", "Cornerstone Mask"),
.price = 0,
.description = COMPOUND_STRING(
"Allows Ogerpon to\n"
@@ -12272,11 +13666,13 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_CornerstoneMask,
+ .iconPalette = gItemIconPalette_CornerstoneMask,
},
[ITEM_WELLSPRING_MASK] =
{
- .name = _("WellsprngMask"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("WellsprngMask", "Wellspring Mask"),
.price = 0,
.description = COMPOUND_STRING(
"Allows Ogerpon to\n"
@@ -12285,11 +13681,13 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_WellspringMask,
+ .iconPalette = gItemIconPalette_WellspringMask,
},
[ITEM_HEARTHFLAME_MASK] =
{
- .name = _("HrthflameMask"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("HrthflameMask", "Hearthflame Mask"),
.price = 0,
.description = COMPOUND_STRING(
"Allows Ogerpon to\n"
@@ -12298,6 +13696,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_HearthflameMask,
+ .iconPalette = gItemIconPalette_HearthflameMask,
},
[ITEM_HEALTH_MOCHI] =
@@ -12311,6 +13711,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.effect = gItemEffect_HpMochi,
.flingPower = 30,
+ .iconPic = gItemIcon_Mochi,
+ .iconPalette = gItemIconPalette_HealthMochi,
},
[ITEM_MUSCLE_MOCHI] =
@@ -12324,6 +13726,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.effect = gItemEffect_AtkMochi,
.flingPower = 30,
+ .iconPic = gItemIcon_Mochi,
+ .iconPalette = gItemIconPalette_MuscleMochi,
},
[ITEM_RESIST_MOCHI] =
@@ -12337,6 +13741,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.effect = gItemEffect_DefMochi,
.flingPower = 30,
+ .iconPic = gItemIcon_Mochi,
+ .iconPalette = gItemIconPalette_ResistMochi,
},
[ITEM_GENIUS_MOCHI] =
@@ -12350,6 +13756,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.effect = gItemEffect_SpatkMochi,
.flingPower = 30,
+ .iconPic = gItemIcon_Mochi,
+ .iconPalette = gItemIconPalette_GeniusMochi,
},
[ITEM_CLEVER_MOCHI] =
@@ -12363,6 +13771,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.effect = gItemEffect_SpdefMochi,
.flingPower = 30,
+ .iconPic = gItemIcon_Mochi,
+ .iconPalette = gItemIconPalette_CleverMochi,
},
[ITEM_SWIFT_MOCHI] =
@@ -12376,12 +13786,14 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.effect = gItemEffect_SpeedMochi,
.flingPower = 30,
+ .iconPic = gItemIcon_Mochi,
+ .iconPalette = gItemIconPalette_SwiftMochi,
},
[ITEM_FRESH_START_MOCHI] =
{
- .name = _("FrshStrtMochi"),
- .pluralName = _("FrshStrtMochi"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("FrshStrtMochi", "Fresh Start Mochi"),
+ .pluralName = HANDLE_EXPANDED_ITEM_NAME("FrshStrtMochi", "Fresh Start Mochi"),
.price = 300,
.description = COMPOUND_STRING(
"An item that resets\n"
@@ -12392,11 +13804,13 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_ResetEVs,
.effect = gItemEffect_ResetMochi,
.flingPower = 30,
+ .iconPic = gItemIcon_Mochi,
+ .iconPalette = gItemIconPalette_FreshStartMochi,
},
[ITEM_GLIMMERING_CHARM] =
{
- .name = _("GlmmringCharm"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("GlmmringCharm", "Glimmering Charm"),
.price = 0,
.importance = 1,
.description = COMPOUND_STRING(
@@ -12406,6 +13820,8 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_KEY_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_GlimmeringCharm,
+ .iconPalette = gItemIconPalette_GlimmeringCharm,
},
[ITEM_METAL_ALLOY] =
@@ -12420,21 +13836,25 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_PARTY_MENU,
.fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
.effect = gItemEffect_EvoItem,
+ .iconPic = gItemIcon_MetalAlloy,
+ .iconPalette = gItemIconPalette_MetalAlloy,
},
[ITEM_STELLAR_TERA_SHARD] =
{
- .name = _("StllrTeraShrd"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("StllrTeraShrd", "Stellar Tera Shard"),
.price = 0,
.description = sTeraShardDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_StellarTeraShard,
+ .iconPalette = gItemIconPalette_StellarTeraShard,
},
[ITEM_JUBILIFE_MUFFIN] =
{
- .name = _("JublifeMuffin"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("JublifeMuffin", "Jubilife Muffin"),
.price = 250,
.description = sFullHealDesc,
.pocket = POCKET_ITEMS,
@@ -12442,6 +13862,8 @@ const struct Item gItemsInfo[] =
.fieldUseFunc = ItemUseOutOfBattle_Medicine,
.battleUsage = EFFECT_ITEM_CURE_STATUS,
.flingPower = 30,
+ .iconPic = gItemIcon_JubilifeMuffin,
+ .iconPalette = gItemIconPalette_JubilifeMuffin,
},
[ITEM_REMEDY] =
@@ -12458,6 +13880,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_RESTORE_HP,
.effect = gItemEffect_Remedy,
.flingPower = 30,
+ .iconPic = gItemIcon_Remedy,
+ .iconPalette = gItemIconPalette_Remedy,
},
[ITEM_FINE_REMEDY] =
@@ -12478,6 +13902,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_RESTORE_HP,
.effect = gItemEffect_FineRemedy,
.flingPower = 30,
+ .iconPic = gItemIcon_FineRemedy,
+ .iconPalette = gItemIconPalette_FineRemedy,
},
[ITEM_SUPERB_REMEDY] =
@@ -12498,6 +13924,8 @@ const struct Item gItemsInfo[] =
.battleUsage = EFFECT_ITEM_RESTORE_HP,
.effect = gItemEffect_SuperbRemedy,
.flingPower = 30,
+ .iconPic = gItemIcon_SuperbRemedy,
+ .iconPalette = gItemIconPalette_SuperbRemedy,
},
[ITEM_AUX_EVASION] =
@@ -12518,6 +13946,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
//.effect = currently missing
+ .iconPic = gItemIcon_AuxBottle,
+ .iconPalette = gItemIconPalette_AuxEvasion,
},
[ITEM_AUX_GUARD] =
@@ -12538,6 +13968,8 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
//.effect = currently missing
+ .iconPic = gItemIcon_AuxBottle,
+ .iconPalette = gItemIconPalette_AuxGuard,
},
[ITEM_AUX_POWER] =
@@ -12558,11 +13990,13 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
//.effect = currently missing
+ .iconPic = gItemIcon_AuxBottle,
+ .iconPalette = gItemIconPalette_AuxPower,
},
[ITEM_AUX_POWERGUARD] =
{
- .name = _("AuxPowerguard"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("AuxPowerguard", "Aux Powerguard"),
.price = 1200,
.holdEffectParam = X_ITEM_STAGES,
.description = COMPOUND_STRING(
@@ -12579,17 +14013,21 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
//.effect = currently missing
+ .iconPic = gItemIcon_AuxPowerguard,
+ .iconPalette = gItemIconPalette_AuxPowerguard,
},
[ITEM_CHOICE_DUMPLING] =
{
- .name = _("ChoiceDumplng"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("ChoiceDumplng", "Choice Dumpling"),
.price = 1200,
.description = sQuestionMarksDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
//.effect = currently missing
+ .iconPic = gItemIcon_ChoiceDumpling,
+ .iconPalette = gItemIconPalette_ChoiceDumpling,
},
[ITEM_SWAP_SNACK] =
@@ -12601,17 +14039,21 @@ const struct Item gItemsInfo[] =
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
//.effect = currently missing
+ .iconPic = gItemIcon_SwapSnack,
+ .iconPalette = gItemIconPalette_SwapSnack,
},
[ITEM_TWICE_SPICED_RADISH] =
{
- .name = _("2xSpicedRadsh"),
+ .name = HANDLE_EXPANDED_ITEM_NAME("2xSpicedRadsh", "Twice-Spiced Radish"),
.price = 1600,
.description = sQuestionMarksDesc,
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
//.effect = currently missing
+ .iconPic = gItemIcon_TwiceSpicedRadish,
+ .iconPalette = gItemIconPalette_TwiceSpicedRadish,
},
[ITEM_POKESHI_DOLL] =
@@ -12625,5 +14067,7 @@ const struct Item gItemsInfo[] =
.pocket = POCKET_ITEMS,
.type = ITEM_USE_BAG_MENU,
.fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .iconPic = gItemIcon_PokeshiDoll,
+ .iconPalette = gItemIconPalette_PokeshiDoll,
},
};
diff --git a/src/data/lilycove_lady.h b/src/data/lilycove_lady.h
index 09586ccd6b03..de9f5f212e29 100644
--- a/src/data/lilycove_lady.h
+++ b/src/data/lilycove_lady.h
@@ -2,13 +2,52 @@
#include "constants/items.h"
#include "constants/moves.h"
-static const u16 sContestLadyMonGfxId[] =
-{
- [CONTEST_CATEGORY_COOL] = OBJ_EVENT_GFX_ZIGZAGOON_1,
- [CONTEST_CATEGORY_BEAUTY] = OBJ_EVENT_GFX_SKITTY,
- [CONTEST_CATEGORY_CUTE] = OBJ_EVENT_GFX_POOCHYENA,
- [CONTEST_CATEGORY_SMART] = OBJ_EVENT_GFX_KECLEON,
- [CONTEST_CATEGORY_TOUGH] = OBJ_EVENT_GFX_PIKACHU
+struct LilycoveContestLadyValues
+{
+ u16 monGfxId;
+ u16 monSpecies;
+ const u8 *monName;
+ const u8 *categoryName;
+ const u8 *contestName;
+};
+
+static const struct LilycoveContestLadyValues sContestLadyValues[] =
+{
+ [CONTEST_CATEGORY_COOL] = {
+ .monGfxId = OBJ_EVENT_GFX_ZIGZAGOON_1,
+ .monSpecies = SPECIES_ZIGZAGOON,
+ .monName = COMPOUND_STRING("HANDSOME"),
+ .categoryName = COMPOUND_STRING("coolness"),
+ .contestName = gText_CoolnessContest,
+ },
+ [CONTEST_CATEGORY_BEAUTY] = {
+ .monGfxId = OBJ_EVENT_GFX_SKITTY,
+ .monSpecies = SPECIES_SKITTY,
+ .monName = COMPOUND_STRING("VINNY"),
+ .categoryName = COMPOUND_STRING("beauty"),
+ .contestName = gText_BeautyContest,
+ },
+ [CONTEST_CATEGORY_CUTE] = {
+ .monGfxId = OBJ_EVENT_GFX_POOCHYENA,
+ .monSpecies = SPECIES_POOCHYENA,
+ .monName = COMPOUND_STRING("MOREME"),
+ .categoryName = COMPOUND_STRING("cuteness"),
+ .contestName = gText_CutenessContest,
+ },
+ [CONTEST_CATEGORY_SMART] = {
+ .monGfxId = OBJ_EVENT_GFX_KECLEON,
+ .monSpecies = SPECIES_KECLEON,
+ .monName = COMPOUND_STRING("IRONHARD"),
+ .categoryName = COMPOUND_STRING("smartness"),
+ .contestName = gText_SmartnessContest,
+ },
+ [CONTEST_CATEGORY_TOUGH] = {
+ .monGfxId = OBJ_EVENT_GFX_PIKACHU,
+ .monSpecies = SPECIES_PIKACHU,
+ .monName = COMPOUND_STRING("MUSCLE"),
+ .categoryName = COMPOUND_STRING("toughness"),
+ .contestName = gText_ToughnessContest,
+ },
};
static const u16 sLilycoveLadyGfxId[] =
@@ -290,12 +329,12 @@ static const u16 sQuizLadyPrizes[] =
// Favor Lady data
static const u8 *const sFavorLadyRequests[] =
{
- gText_FavorLady_Slippery,
- gText_FavorLady_Roundish,
- gText_FavorLady_Whamish,
- gText_FavorLady_Shiny,
- gText_FavorLady_Sticky,
- gText_FavorLady_Pointy
+ COMPOUND_STRING("slippery"),
+ COMPOUND_STRING("roundish"),
+ COMPOUND_STRING("wham-ish"),
+ COMPOUND_STRING("shiny"),
+ COMPOUND_STRING("sticky"),
+ COMPOUND_STRING("pointy"),
};
static const u16 sFavorLadyAcceptedItems_Slippery[] =
@@ -429,40 +468,3 @@ static const u16 sFavorLadyPrizes[] =
ITEM_RARE_CANDY,
ITEM_PP_MAX
};
-
-
-static const u8 *const sContestLadyMonNames[] =
-{
- [CONTEST_CATEGORY_COOL] = gText_ContestLady_Handsome,
- [CONTEST_CATEGORY_BEAUTY] = gText_ContestLady_Vinny,
- [CONTEST_CATEGORY_CUTE] = gText_ContestLady_Moreme,
- [CONTEST_CATEGORY_SMART] = gText_ContestLady_Ironhard,
- [CONTEST_CATEGORY_TOUGH] = gText_ContestLady_Muscle
-};
-
-static const u8 *const sContestLadyCategoryNames[] =
-{
- [CONTEST_CATEGORY_COOL] = gText_ContestLady_Coolness,
- [CONTEST_CATEGORY_BEAUTY] = gText_ContestLady_Beauty,
- [CONTEST_CATEGORY_CUTE] = gText_ContestLady_Cuteness,
- [CONTEST_CATEGORY_SMART] = gText_ContestLady_Smartness,
- [CONTEST_CATEGORY_TOUGH] = gText_ContestLady_Toughness
-};
-
-static const u8 *const sContestNames[] =
-{
- [CONTEST_CATEGORY_COOL] = gText_CoolnessContest,
- [CONTEST_CATEGORY_BEAUTY] = gText_BeautyContest,
- [CONTEST_CATEGORY_CUTE] = gText_CutenessContest,
- [CONTEST_CATEGORY_SMART] = gText_SmartnessContest,
- [CONTEST_CATEGORY_TOUGH] = gText_ToughnessContest
-};
-
-static const u16 sContestLadyMonSpecies[] =
-{
- [CONTEST_CATEGORY_COOL] = SPECIES_ZIGZAGOON,
- [CONTEST_CATEGORY_BEAUTY] = SPECIES_SKITTY,
- [CONTEST_CATEGORY_CUTE] = SPECIES_POOCHYENA,
- [CONTEST_CATEGORY_SMART] = SPECIES_KECLEON,
- [CONTEST_CATEGORY_TOUGH] = SPECIES_PIKACHU
-};
diff --git a/src/data/map_group_count.h b/src/data/map_group_count.h
deleted file mode 100644
index 0d4537854a67..000000000000
--- a/src/data/map_group_count.h
+++ /dev/null
@@ -1 +0,0 @@
-static const u8 MAP_GROUP_COUNT[] = {64, 19, 5, 6, 7, 8, 9, 7, 10, 15, 9, 18, 11, 23, 15, 16, 15, 2, 2, 2, 3, 1, 1, 1, 112, 61, 89, 2, 1, 13, 1, 2, 3, 1, 0};
diff --git a/src/data/moves_info.h b/src/data/moves_info.h
index 3865f0b0c6a4..08579f274f72 100644
--- a/src/data/moves_info.h
+++ b/src/data/moves_info.h
@@ -1,4 +1,5 @@
#include "battle_dynamax.h"
+#include "battle_anim_scripts.h"
#include "constants/battle.h"
#include "constants/battle_move_effects.h"
#include "constants/battle_script_commands.h"
@@ -133,6 +134,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.mirrorMoveBanned = TRUE,
.sketchBanned = TRUE,
.assistBanned = TRUE,
+ .battleAnimScript = Move_NONE,
},
[MOVE_POUND] =
@@ -154,7 +156,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = COMBO_STARTER_POUND,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_POUND,
},
[MOVE_KARATE_CHOP] =
@@ -177,6 +180,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY},
+ .battleAnimScript = Move_KARATE_CHOP,
},
[MOVE_DOUBLE_SLAP] =
@@ -198,6 +202,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_POUND},
+ .battleAnimScript = Move_DOUBLE_SLAP,
},
[MOVE_COMET_PUNCH] =
@@ -219,7 +224,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_COMET_PUNCH,
},
[MOVE_MEGA_PUNCH] =
@@ -242,6 +248,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,
},
[MOVE_PAY_DAY] =
@@ -264,7 +271,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_PAY_DAY,
},
[MOVE_FIRE_PUNCH] =
@@ -291,6 +299,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,
},
[MOVE_ICE_PUNCH] =
@@ -321,6 +330,7 @@ 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,
},
[MOVE_THUNDER_PUNCH] =
@@ -347,6 +357,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,
},
[MOVE_SCRATCH] =
@@ -368,6 +379,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = COMBO_STARTER_SCRATCH,
.contestComboMoves = {COMBO_STARTER_LEER},
+ .battleAnimScript = Move_SCRATCH,
},
[MOVE_VISE_GRIP] =
@@ -388,7 +400,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = COMBO_STARTER_VICE_GRIP,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_VISE_GRIP,
},
[MOVE_GUILLOTINE] =
@@ -410,6 +423,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_VICE_GRIP},
+ .battleAnimScript = Move_GUILLOTINE,
},
[MOVE_RAZOR_WIND] =
@@ -434,7 +448,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_RAZOR_WIND,
},
[MOVE_SWORDS_DANCE] =
@@ -457,7 +472,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = COMBO_STARTER_SWORDS_DANCE,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SWORDS_DANCE,
},
[MOVE_CUT] =
@@ -480,6 +496,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_SWORDS_DANCE},
+ .battleAnimScript = Move_CUT,
},
[MOVE_GUST] =
@@ -502,7 +519,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_GUST,
},
[MOVE_WING_ATTACK] =
@@ -523,7 +541,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_WING_ATTACK,
},
[MOVE_WHIRLWIND] =
@@ -550,7 +569,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_WHIRLWIND,
},
[MOVE_FLY] =
@@ -576,7 +596,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_FLY,
},
[MOVE_BIND] =
@@ -602,6 +623,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_VICE_GRIP},
+ .battleAnimScript = Move_BIND,
},
[MOVE_SLAM] =
@@ -624,6 +646,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_POUND},
+ .battleAnimScript = Move_SLAM,
},
[MOVE_VINE_WHIP] =
@@ -651,6 +674,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_GROWTH},
+ .battleAnimScript = Move_VINE_WHIP,
},
[MOVE_STOMP] =
@@ -678,6 +702,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_LEER},
+ .battleAnimScript = Move_STOMP,
},
[MOVE_DOUBLE_KICK] =
@@ -699,7 +724,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_DOUBLE_KICK,
},
[MOVE_MEGA_KICK] =
@@ -721,6 +747,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,
},
[MOVE_JUMP_KICK] =
@@ -749,6 +776,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_MIND_READER},
+ .battleAnimScript = Move_JUMP_KICK,
},
[MOVE_ROLLING_KICK] =
@@ -774,7 +802,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_ROLLING_KICK,
},
[MOVE_SAND_ATTACK] =
@@ -797,6 +826,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,
},
[MOVE_HEADBUTT] =
@@ -822,6 +852,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY},
+ .battleAnimScript = Move_HEADBUTT,
},
[MOVE_HORN_ATTACK] =
@@ -843,6 +874,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,
},
[MOVE_FURY_ATTACK] =
@@ -864,6 +896,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,
},
[MOVE_HORN_DRILL] =
@@ -885,6 +918,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_HORN_ATTACK},
+ .battleAnimScript = Move_HORN_DRILL,
},
[MOVE_TACKLE] =
@@ -912,6 +946,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,
},
[MOVE_BODY_SLAM] =
@@ -938,7 +973,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_BODY_SLAM,
},
[MOVE_WRAP] =
@@ -962,7 +998,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_WRAP,
},
[MOVE_TAKE_DOWN] =
@@ -985,6 +1022,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,
},
[MOVE_THRASH] =
@@ -1011,6 +1049,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_RAGE},
+ .battleAnimScript = Move_THRASH,
},
[MOVE_DOUBLE_EDGE] =
@@ -1033,6 +1072,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,
},
[MOVE_TAIL_WHIP] =
@@ -1055,6 +1095,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_CHARM},
+ .battleAnimScript = Move_TAIL_WHIP,
},
[MOVE_POISON_STING] =
@@ -1078,7 +1119,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_PREV_MON,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_POISON_STING,
},
[MOVE_TWINEEDLE] =
@@ -1104,7 +1146,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_PREV_MON,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_TWINEEDLE,
},
[MOVE_PIN_MISSILE] =
@@ -1124,7 +1167,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_PIN_MISSILE,
},
[MOVE_LEER] =
@@ -1147,6 +1191,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,
},
[MOVE_BITE] =
@@ -1173,6 +1218,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,
},
[MOVE_GROWL] =
@@ -1197,6 +1243,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_CHARM},
+ .battleAnimScript = Move_GROWL,
},
[MOVE_ROAR] =
@@ -1223,7 +1270,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_ROAR,
},
[MOVE_SING] =
@@ -1247,7 +1295,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = COMBO_STARTER_SING,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SING,
},
[MOVE_SUPERSONIC] =
@@ -1271,7 +1320,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SUPERSONIC,
},
[MOVE_SONIC_BOOM] =
@@ -1292,7 +1342,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SONIC_BOOM,
},
[MOVE_DISABLE] =
@@ -1321,7 +1372,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_DISABLE,
},
[MOVE_ACID] =
@@ -1349,7 +1401,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_ACID,
},
[MOVE_EMBER] =
@@ -1374,6 +1427,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_SUNNY_DAY},
+ .battleAnimScript = Move_EMBER,
},
[MOVE_FLAMETHROWER] =
@@ -1398,6 +1452,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_SUNNY_DAY},
+ .battleAnimScript = Move_FLAMETHROWER,
},
[MOVE_MIST] =
@@ -1421,7 +1476,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_MIST,
},
[MOVE_WATER_GUN] =
@@ -1442,6 +1498,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,
},
[MOVE_HYDRO_PUMP] =
@@ -1462,6 +1519,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_RAIN_DANCE},
+ .battleAnimScript = Move_HYDRO_PUMP,
},
[MOVE_SURF] =
@@ -1484,6 +1542,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,
},
[MOVE_ICE_BEAM] =
@@ -1514,6 +1573,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_HAIL},
+ .battleAnimScript = Move_ICE_BEAM,
},
[MOVE_BLIZZARD] =
@@ -1543,6 +1603,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,
},
[MOVE_PSYBEAM] =
@@ -1567,6 +1628,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_CALM_MIND},
+ .battleAnimScript = Move_PSYBEAM,
},
[MOVE_BUBBLE_BEAM] =
@@ -1591,6 +1653,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_RAIN_DANCE},
+ .battleAnimScript = Move_BUBBLE_BEAM,
},
[MOVE_AURORA_BEAM] =
@@ -1615,6 +1678,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_HAIL},
+ .battleAnimScript = Move_AURORA_BEAM,
},
[MOVE_HYPER_BEAM] =
@@ -1637,7 +1701,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_HYPER_BEAM,
},
[MOVE_PECK] =
@@ -1658,7 +1723,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = COMBO_STARTER_PECK,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_PECK,
},
[MOVE_DRILL_PECK] =
@@ -1680,6 +1746,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_PECK},
+ .battleAnimScript = Move_DRILL_PECK,
},
[MOVE_SUBMISSION] =
@@ -1702,6 +1769,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_MIND_READER},
+ .battleAnimScript = Move_SUBMISSION,
},
[MOVE_LOW_KICK] =
@@ -1722,7 +1790,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_LOW_KICK,
},
[MOVE_COUNTER] =
@@ -1749,6 +1818,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_TAUNT},
+ .battleAnimScript = Move_COUNTER,
},
[MOVE_SEISMIC_TOSS] =
@@ -1771,6 +1841,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_FAKE_OUT},
+ .battleAnimScript = Move_SEISMIC_TOSS,
},
[MOVE_STRENGTH] =
@@ -1791,7 +1862,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_STRENGTH,
},
[MOVE_ABSORB] =
@@ -1814,6 +1886,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_GROWTH},
+ .battleAnimScript = Move_ABSORB,
},
[MOVE_MEGA_DRAIN] =
@@ -1835,6 +1908,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_GROWTH},
+ .battleAnimScript = Move_MEGA_DRAIN,
},
[MOVE_LEECH_SEED] =
@@ -1857,6 +1931,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,
},
[MOVE_GROWTH] =
@@ -1880,7 +1955,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = COMBO_STARTER_GROWTH,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_GROWTH,
},
[MOVE_RAZOR_LEAF] =
@@ -1903,6 +1979,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_GROWTH},
+ .battleAnimScript = Move_RAZOR_LEAF,
},
[MOVE_SOLAR_BEAM] =
@@ -1926,6 +2003,7 @@ 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,
},
[MOVE_POISON_POWDER] =
@@ -1949,6 +2027,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_SWEET_SCENT},
+ .battleAnimScript = Move_POISON_POWDER,
},
[MOVE_STUN_SPORE] =
@@ -1972,6 +2051,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_SWEET_SCENT},
+ .battleAnimScript = Move_STUN_SPORE,
},
[MOVE_SLEEP_POWDER] =
@@ -1995,6 +2075,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_SWEET_SCENT},
+ .battleAnimScript = Move_SLEEP_POWDER,
},
[MOVE_PETAL_DANCE] =
@@ -2028,6 +2109,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_GROWTH},
+ .battleAnimScript = Move_PETAL_DANCE,
},
[MOVE_STRING_SHOT] =
@@ -2049,7 +2131,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_PREV_MON,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = COMBO_STARTER_STRING_SHOT,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_STRING_SHOT,
},
[MOVE_DRAGON_RAGE] =
@@ -2072,6 +2155,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,
},
[MOVE_FIRE_SPIN] =
@@ -2096,6 +2180,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_SUNNY_DAY},
+ .battleAnimScript = Move_FIRE_SPIN,
},
[MOVE_THUNDER_SHOCK] =
@@ -2120,6 +2205,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_CHARGE},
+ .battleAnimScript = Move_THUNDER_SHOCK,
},
[MOVE_THUNDERBOLT] =
@@ -2144,6 +2230,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_CHARGE},
+ .battleAnimScript = Move_THUNDERBOLT,
},
[MOVE_THUNDER_WAVE] =
@@ -2166,6 +2253,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_CHARGE},
+ .battleAnimScript = Move_THUNDER_WAVE,
},
[MOVE_THUNDER] =
@@ -2191,6 +2279,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,
},
[MOVE_ROCK_THROW] =
@@ -2210,7 +2299,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = COMBO_STARTER_ROCK_THROW,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_ROCK_THROW,
},
[MOVE_EARTHQUAKE] =
@@ -2233,7 +2323,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = COMBO_STARTER_EARTHQUAKE,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_EARTHQUAKE,
},
[MOVE_FISSURE] =
@@ -2256,6 +2347,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_EARTHQUAKE},
+ .battleAnimScript = Move_FISSURE,
},
[MOVE_DIG] =
@@ -2281,7 +2373,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_DIG,
},
[MOVE_TOXIC] =
@@ -2303,7 +2396,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = COMBO_STARTER_TOXIC,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_TOXIC,
},
[MOVE_CONFUSION] =
@@ -2328,6 +2422,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,
},
[MOVE_PSYCHIC] =
@@ -2352,6 +2447,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,
},
[MOVE_HYPNOSIS] =
@@ -2373,7 +2469,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = COMBO_STARTER_HYPNOSIS,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_HYPNOSIS,
},
[MOVE_MEDITATE] =
@@ -2398,6 +2495,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_CALM_MIND},
+ .battleAnimScript = Move_MEDITATE,
},
[MOVE_AGILITY] =
@@ -2422,6 +2520,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_DOUBLE_TEAM},
+ .battleAnimScript = Move_AGILITY,
},
[MOVE_QUICK_ATTACK] =
@@ -2443,6 +2542,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_DOUBLE_TEAM},
+ .battleAnimScript = Move_QUICK_ATTACK,
},
[MOVE_RAGE] =
@@ -2463,7 +2563,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_REPETITION_NOT_BORING,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = COMBO_STARTER_RAGE,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_RAGE,
},
[MOVE_TELEPORT] =
@@ -2487,6 +2588,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,
},
[MOVE_NIGHT_SHADE] =
@@ -2506,7 +2608,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_NIGHT_SHADE,
},
[MOVE_MIMIC] =
@@ -2535,7 +2638,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_MIMIC,
},
[MOVE_SCREECH] =
@@ -2559,7 +2663,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SCREECH,
},
[MOVE_DOUBLE_TEAM] =
@@ -2583,7 +2688,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE_ONCE,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = COMBO_STARTER_DOUBLE_TEAM,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_DOUBLE_TEAM,
},
[MOVE_RECOVER] =
@@ -2614,7 +2720,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_RECOVER,
},
[MOVE_HARDEN] =
@@ -2638,7 +2745,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE_ONCE,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = COMBO_STARTER_HARDEN,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_HARDEN,
},
[MOVE_MINIMIZE] =
@@ -2662,7 +2770,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE_ONCE,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_MINIMIZE,
},
[MOVE_SMOKESCREEN] =
@@ -2685,6 +2794,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_SMOG},
+ .battleAnimScript = Move_SMOKESCREEN,
},
[MOVE_CONFUSE_RAY] =
@@ -2706,7 +2816,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_CONFUSE_RAY,
},
[MOVE_WITHDRAW] =
@@ -2731,6 +2842,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_RAIN_DANCE},
+ .battleAnimScript = Move_WITHDRAW,
},
[MOVE_DEFENSE_CURL] =
@@ -2754,7 +2866,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE_ONCE,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = COMBO_STARTER_DEFENSE_CURL,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_DEFENSE_CURL,
},
[MOVE_BARRIER] =
@@ -2778,7 +2891,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_BARRIER,
},
[MOVE_LIGHT_SCREEN] =
@@ -2803,6 +2917,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_CALM_MIND},
+ .battleAnimScript = Move_LIGHT_SCREEN,
},
[MOVE_HAZE] =
@@ -2827,6 +2942,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_HAIL},
+ .battleAnimScript = Move_HAZE,
},
[MOVE_REFLECT] =
@@ -2851,6 +2967,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_CALM_MIND},
+ .battleAnimScript = Move_REFLECT,
},
[MOVE_FOCUS_ENERGY] =
@@ -2875,7 +2992,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = COMBO_STARTER_FOCUS_ENERGY,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_FOCUS_ENERGY,
},
[MOVE_BIDE] =
@@ -2899,7 +3017,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_BIDE,
},
[MOVE_METRONOME] =
@@ -2928,7 +3047,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_REPETITION_NOT_BORING,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_METRONOME,
},
[MOVE_MIRROR_MOVE] =
@@ -2956,7 +3076,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_MIRROR_MOVE,
},
[MOVE_SELF_DESTRUCT] =
@@ -2977,7 +3098,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SELF_DESTRUCT,
},
[MOVE_EGG_BOMB] =
@@ -2999,6 +3121,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_SOFT_BOILED},
+ .battleAnimScript = Move_EGG_BOMB,
},
[MOVE_LICK] =
@@ -3023,7 +3146,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_LICK,
},
[MOVE_SMOG] =
@@ -3047,7 +3171,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = COMBO_STARTER_SMOG,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SMOG,
},
[MOVE_SLUDGE] =
@@ -3072,6 +3197,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = COMBO_STARTER_SLUDGE,
.contestComboMoves = {COMBO_STARTER_SLUDGE_BOMB},
+ .battleAnimScript = Move_SLUDGE,
},
[MOVE_BONE_CLUB] =
@@ -3096,6 +3222,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,
},
[MOVE_FIRE_BLAST] =
@@ -3120,6 +3247,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_SUNNY_DAY},
+ .battleAnimScript = Move_FIRE_BLAST,
},
[MOVE_WATERFALL] =
@@ -3147,6 +3275,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_RAIN_DANCE},
+ .battleAnimScript = Move_WATERFALL,
},
[MOVE_CLAMP] =
@@ -3172,6 +3301,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_RAIN_DANCE},
+ .battleAnimScript = Move_CLAMP,
},
[MOVE_SWIFT] =
@@ -3191,7 +3321,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SWIFT,
},
[MOVE_SKULL_BASH] =
@@ -3220,7 +3351,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SKULL_BASH,
},
[MOVE_SPIKE_CANNON] =
@@ -3240,7 +3372,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SPIKE_CANNON,
},
[MOVE_CONSTRICT] =
@@ -3265,7 +3398,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_PREV_MON,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_CONSTRICT,
},
[MOVE_AMNESIA] =
@@ -3289,7 +3423,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_AMNESIA,
},
[MOVE_KINESIS] =
@@ -3312,6 +3447,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,
},
[MOVE_SOFT_BOILED] =
@@ -3336,7 +3472,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = COMBO_STARTER_SOFT_BOILED,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SOFT_BOILED,
},
[MOVE_HIGH_JUMP_KICK] =
@@ -3365,6 +3502,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_MIND_READER},
+ .battleAnimScript = Move_HIGH_JUMP_KICK,
},
[MOVE_GLARE] =
@@ -3393,6 +3531,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_LEER},
+ .battleAnimScript = Move_GLARE,
},
[MOVE_DREAM_EATER] =
@@ -3414,6 +3553,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,
},
[MOVE_POISON_GAS] =
@@ -3441,7 +3581,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_POISON_GAS,
},
[MOVE_BARRAGE] =
@@ -3462,7 +3603,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_BARRAGE,
},
[MOVE_LEECH_LIFE] =
@@ -3485,7 +3627,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_PREV_MON,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_LEECH_LIFE,
},
[MOVE_LOVELY_KISS] =
@@ -3507,7 +3650,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_LOVELY_KISS,
},
[MOVE_SKY_ATTACK] =
@@ -3537,7 +3681,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SKY_ATTACK,
},
[MOVE_TRANSFORM] =
@@ -3566,7 +3711,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_REPETITION_NOT_BORING,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_TRANSFORM,
},
[MOVE_BUBBLE] =
@@ -3591,6 +3737,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_RAIN_DANCE},
+ .battleAnimScript = Move_BUBBLE,
},
[MOVE_DIZZY_PUNCH] =
@@ -3616,7 +3763,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_DIZZY_PUNCH,
},
[MOVE_SPORE] =
@@ -3639,7 +3787,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SPORE,
},
[MOVE_FLASH] =
@@ -3661,7 +3810,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_FLASH,
},
[MOVE_PSYWAVE] =
@@ -3682,6 +3832,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_CALM_MIND},
+ .battleAnimScript = Move_PSYWAVE,
},
[MOVE_SPLASH] =
@@ -3705,7 +3856,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_LAST,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SPLASH,
},
[MOVE_ACID_ARMOR] =
@@ -3729,7 +3881,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_ACID_ARMOR,
},
[MOVE_CRABHAMMER] =
@@ -3752,6 +3905,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,
},
[MOVE_EXPLOSION] =
@@ -3772,7 +3926,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_EXPLOSION,
},
[MOVE_FURY_SWIPES] =
@@ -3794,6 +3949,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_SCRATCH},
+ .battleAnimScript = Move_FURY_SWIPES,
},
[MOVE_BONEMERANG] =
@@ -3815,6 +3971,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,
},
[MOVE_REST] =
@@ -3840,6 +3997,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,
},
[MOVE_ROCK_SLIDE] =
@@ -3864,6 +4022,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_ROCK_THROW},
+ .battleAnimScript = Move_ROCK_SLIDE,
},
[MOVE_HYPER_FANG] =
@@ -3889,7 +4048,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_HYPER_FANG,
},
[MOVE_SHARPEN] =
@@ -3913,7 +4073,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SHARPEN,
},
[MOVE_CONVERSION] =
@@ -3937,7 +4098,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_CONVERSION,
},
[MOVE_TRI_ATTACK] =
@@ -3962,6 +4124,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_LOCK_ON},
+ .battleAnimScript = Move_TRI_ATTACK,
},
[MOVE_SUPER_FANG] =
@@ -3984,6 +4147,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_SCARY_FACE},
+ .battleAnimScript = Move_SUPER_FANG,
},
[MOVE_SLASH] =
@@ -4007,6 +4171,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,
},
[MOVE_SUBSTITUTE] =
@@ -4031,7 +4196,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE_ONCE,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SUBSTITUTE,
},
[MOVE_STRUGGLE] =
@@ -4069,6 +4235,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.encoreBanned = TRUE,
.assistBanned = TRUE,
.sketchBanned = TRUE,
+ .battleAnimScript = Move_STRUGGLE,
},
[MOVE_SKETCH] =
@@ -4100,7 +4267,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SKETCH,
},
[MOVE_TRIPLE_KICK] =
@@ -4123,6 +4291,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY},
+ .battleAnimScript = Move_TRIPLE_KICK,
},
[MOVE_THIEF] =
@@ -4151,7 +4320,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_THIEF,
},
[MOVE_SPIDER_WEB] =
@@ -4175,6 +4345,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_STRING_SHOT},
+ .battleAnimScript = Move_SPIDER_WEB,
},
[MOVE_MIND_READER] =
@@ -4195,7 +4366,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = COMBO_STARTER_MIND_READER,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_MIND_READER,
},
[MOVE_NIGHTMARE] =
@@ -4217,7 +4389,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_NIGHTMARE,
},
[MOVE_FLAME_WHEEL] =
@@ -4244,6 +4417,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_SUNNY_DAY},
+ .battleAnimScript = Move_FLAME_WHEEL,
},
[MOVE_SNORE] =
@@ -4271,6 +4445,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_REST},
+ .battleAnimScript = Move_SNORE,
},
[MOVE_CURSE] =
@@ -4294,7 +4469,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_NEXT_APPEAL_LATER,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = COMBO_STARTER_CURSE,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_CURSE,
},
[MOVE_FLAIL] =
@@ -4316,6 +4492,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_ENDURE},
+ .battleAnimScript = Move_FLAIL,
},
[MOVE_CONVERSION_2] =
@@ -4339,7 +4516,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_CONVERSION_2,
},
[MOVE_AEROBLAST] =
@@ -4361,7 +4539,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_AEROBLAST,
},
[MOVE_COTTON_SPORE] =
@@ -4384,7 +4563,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_COTTON_SPORE,
},
[MOVE_REVERSAL] =
@@ -4406,6 +4586,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_ENDURE},
+ .battleAnimScript = Move_REVERSAL,
},
[MOVE_SPITE] =
@@ -4429,6 +4610,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_CURSE},
+ .battleAnimScript = Move_SPITE,
},
[MOVE_POWDER_SNOW] =
@@ -4457,6 +4639,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,
},
[MOVE_PROTECT] =
@@ -4481,6 +4664,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_HARDEN},
+ .battleAnimScript = Move_PROTECT,
},
[MOVE_MACH_PUNCH] =
@@ -4502,7 +4686,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_MACH_PUNCH,
},
[MOVE_SCARY_FACE] =
@@ -4525,12 +4710,15 @@ 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,
},
[MOVE_FEINT_ATTACK] =
{
.name = COMPOUND_STRING("Feint Attack"),
- .description = sFeintDescription,
+ .description = COMPOUND_STRING(
+ "Draws the foe close, then\n"
+ "strikes without fail."),
.effect = EFFECT_HIT,
.power = 60,
.type = TYPE_DARK,
@@ -4544,6 +4732,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,
},
[MOVE_SWEET_KISS] =
@@ -4566,6 +4755,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_CHARM},
+ .battleAnimScript = Move_SWEET_KISS,
},
[MOVE_BELLY_DRUM] =
@@ -4589,7 +4779,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = COMBO_STARTER_BELLY_DRUM,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_BELLY_DRUM,
},
[MOVE_SLUDGE_BOMB] =
@@ -4615,6 +4806,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,
},
[MOVE_MUD_SLAP] =
@@ -4639,6 +4831,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,
},
[MOVE_OCTAZOOKA] =
@@ -4664,6 +4857,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,
},
[MOVE_SPIKES] =
@@ -4689,7 +4883,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SPIKES,
},
[MOVE_ZAP_CANNON] =
@@ -4715,6 +4910,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,
},
[MOVE_FORESIGHT] =
@@ -4737,7 +4933,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_FORESIGHT,
},
[MOVE_DESTINY_BOND] =
@@ -4765,6 +4962,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,
},
[MOVE_PERISH_SONG] =
@@ -4790,6 +4988,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,
},
[MOVE_ICY_WIND] =
@@ -4815,6 +5014,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_HAIL},
+ .battleAnimScript = Move_ICY_WIND,
},
[MOVE_DETECT] =
@@ -4841,6 +5041,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_TAUNT},
+ .battleAnimScript = Move_DETECT,
},
[MOVE_BONE_RUSH] =
@@ -4861,6 +5062,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,
},
[MOVE_LOCK_ON] =
@@ -4881,7 +5083,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = COMBO_STARTER_LOCK_ON,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_LOCK_ON,
},
[MOVE_OUTRAGE] =
@@ -4907,7 +5110,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_OUTRAGE,
},
[MOVE_SANDSTORM] =
@@ -4931,7 +5135,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = COMBO_STARTER_SANDSTORM,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SANDSTORM,
},
[MOVE_GIGA_DRAIN] =
@@ -4954,6 +5159,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_GROWTH},
+ .battleAnimScript = Move_GIGA_DRAIN,
},
[MOVE_ENDURE] =
@@ -4979,7 +5185,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE_ONCE,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = COMBO_STARTER_ENDURE,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_ENDURE,
},
[MOVE_CHARM] =
@@ -5001,7 +5208,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = COMBO_STARTER_CHARM,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_CHARM,
},
[MOVE_ROLLOUT] =
@@ -5025,6 +5233,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,
},
[MOVE_FALSE_SWIPE] =
@@ -5044,6 +5253,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_SWORDS_DANCE},
+ .battleAnimScript = Move_FALSE_SWIPE,
},
[MOVE_SWAGGER] =
@@ -5065,7 +5275,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SWAGGER,
},
[MOVE_MILK_DRINK] =
@@ -5090,7 +5301,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_MILK_DRINK,
},
[MOVE_SPARK] =
@@ -5116,6 +5328,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_CHARGE},
+ .battleAnimScript = Move_SPARK,
},
[MOVE_FURY_CUTTER] =
@@ -5144,6 +5357,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_SWORDS_DANCE},
+ .battleAnimScript = Move_FURY_CUTTER,
},
[MOVE_STEEL_WING] =
@@ -5169,7 +5383,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_STEEL_WING,
},
[MOVE_MEAN_LOOK] =
@@ -5193,6 +5408,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,
},
[MOVE_ATTRACT] =
@@ -5215,7 +5431,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_ATTRACT,
},
[MOVE_SLEEP_TALK] =
@@ -5246,6 +5463,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_REST},
+ .battleAnimScript = Move_SLEEP_TALK,
},
[MOVE_HEAL_BELL] =
@@ -5259,7 +5477,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.type = TYPE_NORMAL,
.accuracy = 0,
.pp = 5,
- .target = MOVE_TARGET_USER | MOVE_TARGET_ALLY,
+ .target = MOVE_TARGET_USER,
.priority = 0,
.category = DAMAGE_CATEGORY_STATUS,
.zMove = { .effect = Z_EFFECT_RECOVER_HP },
@@ -5272,6 +5490,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,
},
[MOVE_RETURN] =
@@ -5292,7 +5511,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_EXCITE_AUDIENCE_IN_ANY_CONTEST,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_RETURN,
},
[MOVE_PRESENT] =
@@ -5313,7 +5533,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_REPETITION_NOT_BORING,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_PRESENT,
},
[MOVE_FRUSTRATION] =
@@ -5334,7 +5555,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_EXCITE_AUDIENCE_IN_ANY_CONTEST,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_FRUSTRATION,
},
[MOVE_SAFEGUARD] =
@@ -5358,7 +5580,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SAFEGUARD,
},
[MOVE_PAIN_SPLIT] =
@@ -5380,6 +5603,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_ENDURE},
+ .battleAnimScript = Move_PAIN_SPLIT,
},
[MOVE_SACRED_FIRE] =
@@ -5405,6 +5629,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_SUNNY_DAY},
+ .battleAnimScript = Move_SACRED_FIRE,
},
[MOVE_MAGNITUDE] =
@@ -5426,7 +5651,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_MAGNITUDE,
},
[MOVE_DYNAMIC_PUNCH] =
@@ -5453,6 +5679,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,
},
[MOVE_MEGAHORN] =
@@ -5473,7 +5700,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_MEGAHORN,
},
[MOVE_DRAGON_BREATH] =
@@ -5499,6 +5727,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,
},
[MOVE_BATON_PASS] =
@@ -5521,7 +5750,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_BATON_PASS,
},
[MOVE_ENCORE] =
@@ -5545,7 +5775,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_ENCORE,
},
[MOVE_PURSUIT] =
@@ -5567,7 +5798,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_PURSUIT,
},
[MOVE_RAPID_SPIN] =
@@ -5600,7 +5832,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE_ONCE,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_RAPID_SPIN,
},
[MOVE_SWEET_SCENT] =
@@ -5622,7 +5855,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = COMBO_STARTER_SWEET_SCENT,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SWEET_SCENT,
},
[MOVE_IRON_TAIL] =
@@ -5647,7 +5881,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_IRON_TAIL,
},
[MOVE_METAL_CLAW] =
@@ -5674,6 +5909,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_METAL_SOUND},
+ .battleAnimScript = Move_METAL_CLAW,
},
[MOVE_VITAL_THROW] =
@@ -5695,6 +5931,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_FAKE_OUT},
+ .battleAnimScript = Move_VITAL_THROW,
},
[MOVE_MORNING_SUN] =
@@ -5720,6 +5957,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_SUNNY_DAY},
+ .battleAnimScript = Move_MORNING_SUN,
},
[MOVE_SYNTHESIS] =
@@ -5745,6 +5983,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_SUNNY_DAY},
+ .battleAnimScript = Move_SYNTHESIS,
},
[MOVE_MOONLIGHT] =
@@ -5770,6 +6009,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_SUNNY_DAY},
+ .battleAnimScript = Move_MOONLIGHT,
},
[MOVE_HIDDEN_POWER] =
@@ -5789,7 +6029,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_REPETITION_NOT_BORING,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_HIDDEN_POWER,
},
[MOVE_CROSS_CHOP] =
@@ -5812,6 +6053,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY},
+ .battleAnimScript = Move_CROSS_CHOP,
},
[MOVE_TWISTER] =
@@ -5837,7 +6079,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_TWISTER,
},
[MOVE_RAIN_DANCE] =
@@ -5860,7 +6103,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = COMBO_STARTER_RAIN_DANCE,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_RAIN_DANCE,
},
[MOVE_SUNNY_DAY] =
@@ -5883,7 +6127,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = COMBO_STARTER_SUNNY_DAY,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SUNNY_DAY,
},
[MOVE_CRUNCH] =
@@ -5918,6 +6163,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_SCARY_FACE},
+ .battleAnimScript = Move_CRUNCH,
},
[MOVE_MIRROR_COAT] =
@@ -5942,6 +6188,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_TAUNT},
+ .battleAnimScript = Move_MIRROR_COAT,
},
[MOVE_PSYCH_UP] =
@@ -5966,7 +6213,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_PSYCH_UP,
},
[MOVE_EXTREME_SPEED] =
@@ -5987,7 +6235,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_EXTREME_SPEED,
},
[MOVE_ANCIENT_POWER] =
@@ -6013,7 +6262,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_ANCIENT_POWER,
},
[MOVE_SHADOW_BALL] =
@@ -6038,7 +6288,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SHADOW_BALL,
},
[MOVE_FUTURE_SIGHT] =
@@ -6067,6 +6318,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,
},
[MOVE_ROCK_SMASH] =
@@ -6091,7 +6343,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_ROCK_SMASH,
},
[MOVE_WHIRLPOOL] =
@@ -6116,6 +6369,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_RAIN_DANCE},
+ .battleAnimScript = Move_WHIRLPOOL,
},
[MOVE_BEAT_UP] =
@@ -6135,7 +6389,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_BEAT_UP,
},
[MOVE_FAKE_OUT] =
@@ -6160,7 +6415,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = COMBO_STARTER_FAKE_OUT,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_FAKE_OUT,
},
[MOVE_UPROAR] =
@@ -6192,7 +6448,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_UPROAR,
},
[MOVE_STOCKPILE] =
@@ -6216,7 +6473,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE_ONCE,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = COMBO_STARTER_STOCKPILE,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_STOCKPILE,
},
[MOVE_SPIT_UP] =
@@ -6238,6 +6496,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_STOCKPILE},
+ .battleAnimScript = Move_SPIT_UP,
},
[MOVE_SWALLOW] =
@@ -6263,6 +6522,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_STOCKPILE},
+ .battleAnimScript = Move_SWALLOW,
},
[MOVE_HEAT_WAVE] =
@@ -6288,6 +6548,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_SUNNY_DAY},
+ .battleAnimScript = Move_HEAT_WAVE,
},
[MOVE_HAIL] =
@@ -6310,7 +6571,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = COMBO_STARTER_HAIL,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_HAIL,
},
[MOVE_TORMENT] =
@@ -6329,11 +6591,11 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.category = DAMAGE_CATEGORY_STATUS,
.zMove = { .effect = Z_EFFECT_DEF_UP_1 },
.magicCoatAffected = B_UPDATED_MOVE_FLAGS >= GEN_5,
- .ignoresSubstitute = TRUE,
.contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_TORMENT,
},
[MOVE_FLATTER] =
@@ -6356,6 +6618,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_CHARM},
+ .battleAnimScript = Move_FLATTER,
},
[MOVE_WILL_O_WISP] =
@@ -6378,6 +6641,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_SUNNY_DAY},
+ .battleAnimScript = Move_WILL_O_WISP,
},
[MOVE_MEMENTO] =
@@ -6398,7 +6662,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_MEMENTO,
},
[MOVE_FACADE] =
@@ -6420,6 +6685,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
.contestComboMoves = {0},
+ .battleAnimScript = Move_FACADE,
},
[MOVE_FOCUS_PUNCH] =
@@ -6449,6 +6715,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY},
+ .battleAnimScript = Move_FOCUS_PUNCH,
},
[MOVE_SMELLING_SALTS] =
@@ -6473,7 +6740,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_PREV_MON,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SMELLING_SALTS,
},
[MOVE_FOLLOW_ME] =
@@ -6499,7 +6767,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_FOLLOW_ME,
},
[MOVE_NATURE_POWER] =
@@ -6526,7 +6795,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_NATURE_POWER,
},
[MOVE_CHARGE] =
@@ -6550,7 +6820,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = COMBO_STARTER_CHARGE,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_CHARGE,
},
[MOVE_TAUNT] =
@@ -6573,7 +6844,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = COMBO_STARTER_TAUNT,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_TAUNT,
},
[MOVE_HELPING_HAND] =
@@ -6600,7 +6872,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_HELPING_HAND,
},
[MOVE_TRICK] =
@@ -6624,7 +6897,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_TRICK,
},
[MOVE_ROLE_PLAY] =
@@ -6648,7 +6922,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_ROLE_PLAY,
},
[MOVE_WISH] =
@@ -6673,7 +6948,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_WISH,
},
[MOVE_ASSIST] =
@@ -6702,7 +6978,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_ASSIST,
},
[MOVE_INGRAIN] =
@@ -6727,7 +7004,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_INGRAIN,
},
[MOVE_SUPERPOWER] =
@@ -6753,6 +7031,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,
},
[MOVE_MAGIC_COAT] =
@@ -6775,7 +7054,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_MAGIC_COAT,
},
[MOVE_RECYCLE] =
@@ -6799,7 +7079,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_REPETITION_NOT_BORING,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_RECYCLE,
},
[MOVE_REVENGE] =
@@ -6819,6 +7100,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = COMBO_STARTER_REVENGE,
.contestComboMoves = {COMBO_STARTER_PAYBACK},
+ .battleAnimScript = Move_REVENGE,
},
[MOVE_BRICK_BREAK] =
@@ -6840,6 +7122,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY},
+ .battleAnimScript = Move_BRICK_BREAK,
},
[MOVE_YAWN] =
@@ -6861,7 +7144,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = COMBO_STARTER_YAWN,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_YAWN,
},
[MOVE_KNOCK_OFF] =
@@ -6886,6 +7170,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_FAKE_OUT},
+ .battleAnimScript = Move_KNOCK_OFF,
},
[MOVE_ENDEAVOR] =
@@ -6908,6 +7193,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_ENDURE},
+ .battleAnimScript = Move_ENDEAVOR,
},
[MOVE_ERUPTION] =
@@ -6928,6 +7214,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,
},
[MOVE_SKILL_SWAP] =
@@ -6949,7 +7236,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SKILL_SWAP,
},
[MOVE_IMPRISON] =
@@ -6975,7 +7263,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_IMPRISON,
},
[MOVE_REFRESH] =
@@ -7000,6 +7289,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,
},
[MOVE_GRUDGE] =
@@ -7024,6 +7314,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_CURSE},
+ .battleAnimScript = Move_GRUDGE,
},
[MOVE_SNATCH] =
@@ -7049,7 +7340,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SNATCH,
},
[MOVE_SECRET_POWER] =
@@ -7073,7 +7365,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SECRET_POWER,
},
[MOVE_DIVE] =
@@ -7100,6 +7393,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,
},
[MOVE_ARM_THRUST] =
@@ -7121,6 +7415,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,
},
[MOVE_CAMOUFLAGE] =
@@ -7144,7 +7439,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_CAMOUFLAGE,
},
[MOVE_TAIL_GLOW] =
@@ -7168,7 +7464,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_TAIL_GLOW,
},
[MOVE_LUSTER_PURGE] =
@@ -7193,6 +7490,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_CALM_MIND},
+ .battleAnimScript = Move_LUSTER_PURGE,
},
[MOVE_MIST_BALL] =
@@ -7218,6 +7516,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_CALM_MIND},
+ .battleAnimScript = Move_MIST_BALL,
},
[MOVE_FEATHER_DANCE] =
@@ -7240,7 +7539,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_LAST,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_FEATHER_DANCE,
},
[MOVE_TEETER_DANCE] =
@@ -7263,7 +7563,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_TEETER_DANCE,
},
[MOVE_BLAZE_KICK] =
@@ -7290,6 +7591,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_SUNNY_DAY},
+ .battleAnimScript = Move_BLAZE_KICK,
},
[MOVE_MUD_SPORT] =
@@ -7314,6 +7616,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,
},
[MOVE_ICE_BALL] =
@@ -7338,6 +7641,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_HAIL},
+ .battleAnimScript = Move_ICE_BALL,
},
[MOVE_NEEDLE_ARM] =
@@ -7363,7 +7667,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_NEEDLE_ARM,
},
[MOVE_SLACK_OFF] =
@@ -7388,7 +7693,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_WHEN_LATER,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SLACK_OFF,
},
[MOVE_HYPER_VOICE] =
@@ -7410,7 +7716,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_HYPER_VOICE,
},
[MOVE_POISON_FANG] =
@@ -7436,7 +7743,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_POISON_FANG,
},
[MOVE_CRUSH_CLAW] =
@@ -7462,6 +7770,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_SWORDS_DANCE},
+ .battleAnimScript = Move_CRUSH_CLAW,
},
[MOVE_BLAST_BURN] =
@@ -7486,6 +7795,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_SUNNY_DAY},
+ .battleAnimScript = Move_BLAST_BURN,
},
[MOVE_HYDRO_CANNON] =
@@ -7510,6 +7820,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_RAIN_DANCE},
+ .battleAnimScript = Move_HYDRO_CANNON,
},
[MOVE_METEOR_MASH] =
@@ -7536,7 +7847,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_METEOR_MASH,
},
[MOVE_ASTONISH] =
@@ -7562,7 +7874,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_PREV_MON,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_ASTONISH,
},
[MOVE_WEATHER_BALL] =
@@ -7585,6 +7898,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,
},
[MOVE_AROMATHERAPY] =
@@ -7598,7 +7912,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.type = TYPE_GRASS,
.accuracy = 0,
.pp = 5,
- .target = MOVE_TARGET_USER | MOVE_TARGET_ALLY,
+ .target = MOVE_TARGET_USER,
.priority = 0,
.category = DAMAGE_CATEGORY_STATUS,
.zMove = { .effect = Z_EFFECT_RECOVER_HP },
@@ -7608,7 +7922,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_LAST,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_AROMATHERAPY,
},
[MOVE_FAKE_TEARS] =
@@ -7630,7 +7945,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_LAST,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_FAKE_TEARS,
},
[MOVE_AIR_CUTTER] =
@@ -7653,7 +7969,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_AIR_CUTTER,
},
[MOVE_OVERHEAT] =
@@ -7672,13 +7989,14 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.category = DAMAGE_CATEGORY_SPECIAL,
.makesContact = B_UPDATED_MOVE_DATA < GEN_4,
.additionalEffects = ADDITIONAL_EFFECTS({
- .moveEffect = MOVE_EFFECT_SP_ATK_TWO_DOWN,
+ .moveEffect = MOVE_EFFECT_SP_ATK_MINUS_2,
.self = TRUE,
}),
.contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_SUNNY_DAY},
+ .battleAnimScript = Move_OVERHEAT,
},
[MOVE_ODOR_SLEUTH] =
@@ -7701,7 +8019,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_ODOR_SLEUTH,
},
[MOVE_ROCK_TOMB] =
@@ -7726,6 +8045,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_ROCK_THROW},
+ .battleAnimScript = Move_ROCK_TOMB,
},
[MOVE_SILVER_WIND] =
@@ -7751,7 +8071,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SILVER_WIND,
},
[MOVE_METAL_SOUND] =
@@ -7775,7 +8096,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = COMBO_STARTER_METAL_SOUND,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_METAL_SOUND,
},
[MOVE_GRASS_WHISTLE] =
@@ -7799,7 +8121,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_GRASS_WHISTLE,
},
[MOVE_TICKLE] =
@@ -7821,7 +8144,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_TICKLE,
},
[MOVE_COSMIC_POWER] =
@@ -7845,7 +8169,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_COSMIC_POWER,
},
[MOVE_WATER_SPOUT] =
@@ -7866,6 +8191,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_RAIN_DANCE},
+ .battleAnimScript = Move_WATER_SPOUT,
},
[MOVE_SIGNAL_BEAM] =
@@ -7889,7 +8215,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SIGNAL_BEAM,
},
[MOVE_SHADOW_PUNCH] =
@@ -7911,7 +8238,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SHADOW_PUNCH,
},
[MOVE_EXTRASENSORY] =
@@ -7936,7 +8264,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_EXTRASENSORY,
},
[MOVE_SKY_UPPERCUT] =
@@ -7960,6 +8289,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY},
+ .battleAnimScript = Move_SKY_UPPERCUT,
},
[MOVE_SAND_TOMB] =
@@ -7983,6 +8313,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_SANDSTORM},
+ .battleAnimScript = Move_SAND_TOMB,
},
[MOVE_SHEER_COLD] =
@@ -8003,6 +8334,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,
},
[MOVE_MUDDY_WATER] =
@@ -8028,6 +8360,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_RAIN_DANCE},
+ .battleAnimScript = Move_MUDDY_WATER,
},
[MOVE_BULLET_SEED] =
@@ -8049,6 +8382,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_GROWTH},
+ .battleAnimScript = Move_BULLET_SEED,
},
[MOVE_AERIAL_ACE] =
@@ -8070,7 +8404,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_AERIAL_ACE,
},
[MOVE_ICICLE_SPEAR] =
@@ -8090,7 +8425,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_ICICLE_SPEAR,
},
[MOVE_IRON_DEFENSE] =
@@ -8114,7 +8450,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_IRON_DEFENSE,
},
[MOVE_BLOCK] =
@@ -8137,7 +8474,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_BLOCK,
},
[MOVE_HOWL] =
@@ -8162,7 +8500,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_HOWL,
},
[MOVE_DRAGON_CLAW] =
@@ -8184,6 +8523,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,
},
[MOVE_FRENZY_PLANT] =
@@ -8209,6 +8549,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_GROWTH},
+ .battleAnimScript = Move_FRENZY_PLANT,
},
[MOVE_BULK_UP] =
@@ -8232,7 +8573,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_BULK_UP,
},
[MOVE_BOUNCE] =
@@ -8262,7 +8604,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_BOUNCE,
},
[MOVE_MUD_SHOT] =
@@ -8287,6 +8630,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_SANDSTORM},
+ .battleAnimScript = Move_MUD_SHOT,
},
[MOVE_POISON_TAIL] =
@@ -8312,7 +8656,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_POISON_TAIL,
},
[MOVE_COVET] =
@@ -8340,7 +8685,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_COVET,
},
[MOVE_VOLT_TACKLE] =
@@ -8368,7 +8714,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_VOLT_TACKLE,
},
[MOVE_MAGICAL_LEAF] =
@@ -8389,6 +8736,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_GROWTH},
+ .battleAnimScript = Move_MAGICAL_LEAF,
},
[MOVE_WATER_SPORT] =
@@ -8413,6 +8761,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,
},
[MOVE_CALM_MIND] =
@@ -8436,7 +8785,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE_ONCE,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = COMBO_STARTER_CALM_MIND,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_CALM_MIND,
},
[MOVE_LEAF_BLADE] =
@@ -8459,7 +8809,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_LEAF_BLADE,
},
[MOVE_DRAGON_DANCE] =
@@ -8485,6 +8836,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,
},
[MOVE_ROCK_BLAST] =
@@ -8505,7 +8857,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_ROCK_BLAST,
},
[MOVE_SHOCK_WAVE] =
@@ -8526,6 +8879,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_CHARGE},
+ .battleAnimScript = Move_SHOCK_WAVE,
},
[MOVE_WATER_PULSE] =
@@ -8551,6 +8905,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_RAIN_DANCE},
+ .battleAnimScript = Move_WATER_PULSE,
},
[MOVE_DOOM_DESIRE] =
@@ -8572,7 +8927,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_DOOM_DESIRE,
},
[MOVE_PSYCHO_BOOST] =
@@ -8590,13 +8946,14 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_SPECIAL,
.additionalEffects = ADDITIONAL_EFFECTS({
- .moveEffect = MOVE_EFFECT_SP_ATK_TWO_DOWN,
+ .moveEffect = MOVE_EFFECT_SP_ATK_MINUS_2,
.self = TRUE,
}),
.contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_CALM_MIND},
+ .battleAnimScript = Move_PSYCHO_BOOST,
},
[MOVE_ROOST] =
@@ -8622,6 +8979,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_BRAVE_BIRD},
+ .battleAnimScript = Move_ROOST,
},
[MOVE_GRAVITY] =
@@ -8645,7 +9003,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_GRAVITY,
},
[MOVE_MIRACLE_EYE] =
@@ -8668,7 +9027,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_MIRACLE_EYE,
},
[MOVE_WAKE_UP_SLAP] =
@@ -8693,7 +9053,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_PREV_MON,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_WAKE_UP_SLAP,
},
[MOVE_HAMMER_ARM] =
@@ -8720,6 +9081,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY},
+ .battleAnimScript = Move_HAMMER_ARM,
},
[MOVE_GYRO_BALL] =
@@ -8741,7 +9103,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_LAST,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_GYRO_BALL,
},
[MOVE_HEALING_WISH] =
@@ -8763,7 +9126,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_HEALING_WISH,
},
[MOVE_BRINE] =
@@ -8784,6 +9148,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_RAIN_DANCE},
+ .battleAnimScript = Move_BRINE,
},
[MOVE_NATURAL_GIFT] =
@@ -8803,15 +9168,14 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_WHEN_LATER,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_NATURAL_GIFT,
},
[MOVE_FEINT] =
{
.name = COMPOUND_STRING("Feint"),
- .description = COMPOUND_STRING(
- "An attack that hits foes\n"
- "using moves like Protect."),
+ .description = sFeintDescription,
.effect = EFFECT_HIT,
.power = B_UPDATED_MOVE_DATA >= GEN_5 ? 30 : 50,
.type = TYPE_NORMAL,
@@ -8831,7 +9195,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_FEINT,
},
[MOVE_PLUCK] =
@@ -8853,7 +9218,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_PLUCK,
},
[MOVE_TAILWIND] =
@@ -8878,7 +9244,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_TAILWIND,
},
[MOVE_ACUPRESSURE] =
@@ -8902,7 +9269,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_ACUPRESSURE,
},
[MOVE_METAL_BURST] =
@@ -8924,6 +9292,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_METAL_SOUND},
+ .battleAnimScript = Move_METAL_BURST,
},
[MOVE_U_TURN] =
@@ -8942,7 +9311,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_U_TURN,
},
[MOVE_CLOSE_COMBAT] =
@@ -8966,6 +9336,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,
},
[MOVE_PAYBACK] =
@@ -8987,6 +9358,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = COMBO_STARTER_PAYBACK,
.contestComboMoves = {COMBO_STARTER_REVENGE},
+ .battleAnimScript = Move_PAYBACK,
},
[MOVE_ASSURANCE] =
@@ -9008,6 +9380,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_PAYBACK, COMBO_STARTER_REVENGE},
+ .battleAnimScript = Move_ASSURANCE,
},
[MOVE_EMBARGO] =
@@ -9029,7 +9402,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_EMBARGO,
},
[MOVE_FLING] =
@@ -9050,7 +9424,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_FLING,
},
[MOVE_PSYCHO_SHIFT] =
@@ -9071,7 +9446,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_PSYCHO_SHIFT,
},
[MOVE_TRUMP_CARD] =
@@ -9092,7 +9468,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_WHEN_LATER,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_TRUMP_CARD,
},
[MOVE_HEAL_BLOCK] =
@@ -9114,7 +9491,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_HEAL_BLOCK,
},
[MOVE_WRING_OUT] =
@@ -9134,7 +9512,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_PREV_MON,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_WRING_OUT,
},
[MOVE_POWER_TRICK] =
@@ -9158,7 +9537,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_POWER_TRICK,
},
[MOVE_GASTRO_ACID] =
@@ -9180,7 +9560,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_GASTRO_ACID,
},
[MOVE_LUCKY_CHANT] =
@@ -9205,6 +9586,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,
},
[MOVE_ME_FIRST] =
@@ -9235,7 +9617,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_ME_FIRST,
},
[MOVE_COPYCAT] =
@@ -9265,7 +9648,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_COPYCAT,
},
[MOVE_POWER_SWAP] =
@@ -9287,7 +9671,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_POWER_SWAP,
},
[MOVE_GUARD_SWAP] =
@@ -9309,7 +9694,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_GUARD_SWAP,
},
[MOVE_PUNISHMENT] =
@@ -9330,7 +9716,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_WHEN_LATER,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_PUNISHMENT,
},
[MOVE_LAST_RESORT] =
@@ -9351,7 +9738,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_LAST_RESORT,
},
[MOVE_WORRY_SEED] =
@@ -9374,6 +9762,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,
},
[MOVE_SUCKER_PUNCH] =
@@ -9392,7 +9781,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SUCKER_PUNCH,
},
[MOVE_TOXIC_SPIKES] =
@@ -9418,7 +9808,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_TOXIC_SPIKES,
},
[MOVE_HEART_SWAP] =
@@ -9440,7 +9831,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_HEART_SWAP,
},
[MOVE_AQUA_RING] =
@@ -9464,7 +9856,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_AQUA_RING,
},
[MOVE_MAGNET_RISE] =
@@ -9489,7 +9882,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_MAGNET_RISE,
},
[MOVE_FLARE_BLITZ] =
@@ -9517,6 +9911,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_SUNNY_DAY},
+ .battleAnimScript = Move_FLARE_BLITZ,
},
[MOVE_FORCE_PALM] =
@@ -9541,7 +9936,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_FORCE_PALM,
},
[MOVE_AURA_SPHERE] =
@@ -9563,7 +9959,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_AURA_SPHERE,
},
[MOVE_ROCK_POLISH] =
@@ -9587,7 +9984,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_ROCK_POLISH,
},
[MOVE_POISON_JAB] =
@@ -9612,7 +10010,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_POISON_JAB,
},
[MOVE_DARK_PULSE] =
@@ -9637,7 +10036,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_LAST,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_DARK_PULSE,
},
[MOVE_NIGHT_SLASH] =
@@ -9660,7 +10060,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_NIGHT_SLASH,
},
[MOVE_AQUA_TAIL] =
@@ -9682,6 +10083,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_RAIN_DANCE},
+ .battleAnimScript = Move_AQUA_TAIL,
},
[MOVE_SEED_BOMB] =
@@ -9702,7 +10104,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SEED_BOMB,
},
[MOVE_AIR_SLASH] =
@@ -9727,7 +10130,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_AIR_SLASH,
},
[MOVE_X_SCISSOR] =
@@ -9750,6 +10154,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_SWORDS_DANCE},
+ .battleAnimScript = Move_X_SCISSOR,
},
[MOVE_BUG_BUZZ] =
@@ -9775,7 +10180,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_BUG_BUZZ,
},
[MOVE_DRAGON_PULSE] =
@@ -9796,7 +10202,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_DRAGON_PULSE,
},
[MOVE_DRAGON_RUSH] =
@@ -9823,6 +10230,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,
},
[MOVE_POWER_GEM] =
@@ -9842,7 +10250,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_POWER_GEM,
},
[MOVE_DRAIN_PUNCH] =
@@ -9864,6 +10273,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY},
+ .battleAnimScript = Move_DRAIN_PUNCH,
},
[MOVE_VACUUM_WAVE] =
@@ -9883,7 +10293,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_VACUUM_WAVE,
},
[MOVE_FOCUS_BLAST] =
@@ -9909,6 +10320,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_FOCUS_ENERGY},
+ .battleAnimScript = Move_FOCUS_BLAST,
},
[MOVE_ENERGY_BALL] =
@@ -9934,6 +10346,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_GROWTH},
+ .battleAnimScript = Move_ENERGY_BALL,
},
[MOVE_BRAVE_BIRD] =
@@ -9955,7 +10368,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = COMBO_STARTER_BRAVE_BIRD,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_BRAVE_BIRD,
},
[MOVE_EARTH_POWER] =
@@ -9980,7 +10394,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_EARTH_POWER,
},
[MOVE_SWITCHEROO] =
@@ -10004,7 +10419,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SWITCHEROO,
},
[MOVE_GIGA_IMPACT] =
@@ -10027,7 +10443,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_GIGA_IMPACT,
},
[MOVE_NASTY_PLOT] =
@@ -10051,7 +10468,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_NASTY_PLOT,
},
[MOVE_BULLET_PUNCH] =
@@ -10073,7 +10491,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_BULLET_PUNCH,
},
[MOVE_AVALANCHE] =
@@ -10085,14 +10504,15 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.type = TYPE_ICE,
.accuracy = 100,
.pp = 10,
- .target = MOVE_TARGET_BOTH,
+ .target = MOVE_TARGET_SELECTED,
.priority = -4,
.category = DAMAGE_CATEGORY_PHYSICAL,
.makesContact = TRUE,
.contestEffect = CONTEST_EFFECT_NEXT_APPEAL_LATER,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_AVALANCHE,
},
[MOVE_ICE_SHARD] =
@@ -10112,7 +10532,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_ICE_SHARD,
},
[MOVE_SHADOW_CLAW] =
@@ -10134,7 +10555,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SHADOW_CLAW,
},
[MOVE_THUNDER_FANG] =
@@ -10165,6 +10587,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,
},
[MOVE_ICE_FANG] =
@@ -10199,6 +10622,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,
},
[MOVE_FIRE_FANG] =
@@ -10229,6 +10653,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,
},
[MOVE_SHADOW_SNEAK] =
@@ -10249,7 +10674,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SHADOW_SNEAK,
},
[MOVE_MUD_BOMB] =
@@ -10274,7 +10700,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_MUD_BOMB,
},
[MOVE_PSYCHO_CUT] =
@@ -10296,7 +10723,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_PSYCHO_CUT,
},
[MOVE_ZEN_HEADBUTT] =
@@ -10321,7 +10749,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_ZEN_HEADBUTT,
},
[MOVE_MIRROR_SHOT] =
@@ -10345,7 +10774,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_MIRROR_SHOT,
},
[MOVE_FLASH_CANNON] =
@@ -10369,7 +10799,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_FLASH_CANNON,
},
[MOVE_ROCK_CLIMB] =
@@ -10394,7 +10825,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_WITH_GOOD_CONDITION,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_ROCK_CLIMB,
},
[MOVE_DEFOG] =
@@ -10412,12 +10844,13 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_STATUS,
.zMove = { .effect = Z_EFFECT_ACC_UP_1 },
- .ignoresSubstitute = B_UPDATED_MOVE_FLAGS == GEN_4,
+ //.ignoresSubstitute = TRUE,
.magicCoatAffected = B_UPDATED_MOVE_FLAGS >= GEN_5,
.contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_DEFOG,
},
[MOVE_TRICK_ROOM] =
@@ -10439,7 +10872,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_NEXT_APPEAL_LATER,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_TRICK_ROOM,
},
[MOVE_DRACO_METEOR] =
@@ -10457,13 +10891,14 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_SPECIAL,
.additionalEffects = ADDITIONAL_EFFECTS({
- .moveEffect = MOVE_EFFECT_SP_ATK_TWO_DOWN,
+ .moveEffect = MOVE_EFFECT_SP_ATK_MINUS_2,
.self = TRUE,
}),
.contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_DRACO_METEOR,
},
[MOVE_DISCHARGE] =
@@ -10488,6 +10923,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_CHARGE},
+ .battleAnimScript = Move_DISCHARGE,
},
[MOVE_LAVA_PLUME] =
@@ -10510,6 +10946,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_SUNNY_DAY},
+ .battleAnimScript = Move_LAVA_PLUME,
},
[MOVE_LEAF_STORM] =
@@ -10527,13 +10964,14 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_SPECIAL,
.additionalEffects = ADDITIONAL_EFFECTS({
- .moveEffect = MOVE_EFFECT_SP_ATK_TWO_DOWN,
+ .moveEffect = MOVE_EFFECT_SP_ATK_MINUS_2,
.self = TRUE,
}),
.contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_LEAF_STORM,
},
[MOVE_POWER_WHIP] =
@@ -10555,6 +10993,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_GROWTH},
+ .battleAnimScript = Move_POWER_WHIP,
},
[MOVE_ROCK_WRECKER] =
@@ -10577,7 +11016,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_ROCK_WRECKER,
},
[MOVE_CROSS_POISON] =
@@ -10604,7 +11044,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_CROSS_POISON,
},
[MOVE_GUNK_SHOT] =
@@ -10628,7 +11069,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_GUNK_SHOT,
},
[MOVE_IRON_HEAD] =
@@ -10653,7 +11095,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_IRON_HEAD,
},
[MOVE_MAGNET_BOMB] =
@@ -10674,7 +11117,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_MAGNET_BOMB,
},
[MOVE_STONE_EDGE] =
@@ -10695,7 +11139,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_STONE_EDGE,
},
[MOVE_CAPTIVATE] =
@@ -10718,6 +11163,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_CHARM},
+ .battleAnimScript = Move_CAPTIVATE,
},
[MOVE_STEALTH_ROCK] =
@@ -10742,7 +11188,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_STEALTH_ROCK,
},
[MOVE_GRASS_KNOT] =
@@ -10764,7 +11211,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_GRASS_KNOT,
},
[MOVE_CHATTER] =
@@ -10803,7 +11251,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_CHATTER,
},
[MOVE_JUDGMENT] =
@@ -10824,7 +11273,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_JUDGMENT,
},
[MOVE_BUG_BITE] =
@@ -10846,7 +11296,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_BUG_BITE,
},
[MOVE_CHARGE_BEAM] =
@@ -10872,6 +11323,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_CHARGE},
+ .battleAnimScript = Move_CHARGE_BEAM,
},
[MOVE_WOOD_HAMMER] =
@@ -10893,7 +11345,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_WOOD_HAMMER,
},
[MOVE_AQUA_JET] =
@@ -10915,6 +11368,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_RAIN_DANCE},
+ .battleAnimScript = Move_AQUA_JET,
},
[MOVE_ATTACK_ORDER] =
@@ -10936,6 +11390,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,
},
[MOVE_DEFEND_ORDER] =
@@ -10960,6 +11415,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,
},
[MOVE_HEAL_ORDER] =
@@ -10985,6 +11441,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,
},
[MOVE_HEAD_SMASH] =
@@ -11006,7 +11463,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_HEAD_SMASH,
},
[MOVE_DOUBLE_HIT] =
@@ -11028,7 +11486,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_REPETITION_NOT_BORING,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_DOUBLE_HIT,
},
[MOVE_ROAR_OF_TIME] =
@@ -11052,7 +11511,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_ROAR_OF_TIME,
},
[MOVE_SPACIAL_REND] =
@@ -11073,7 +11533,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SPACIAL_REND,
},
[MOVE_LUNAR_DANCE] =
@@ -11096,7 +11557,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_LUNAR_DANCE,
},
[MOVE_CRUSH_GRIP] =
@@ -11116,7 +11578,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_CRUSH_GRIP,
},
[MOVE_MAGMA_STORM] =
@@ -11140,6 +11603,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_SUNNY_DAY},
+ .battleAnimScript = Move_MAGMA_STORM,
},
[MOVE_DARK_VOID] =
@@ -11162,7 +11626,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_DARK_VOID,
},
[MOVE_SEED_FLARE] =
@@ -11186,7 +11651,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SEED_FLARE,
},
[MOVE_OMINOUS_WIND] =
@@ -11212,7 +11678,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_OMINOUS_WIND,
},
[MOVE_SHADOW_FORCE] =
@@ -11240,7 +11707,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE_ONCE,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SHADOW_FORCE,
},
[MOVE_HONE_CLAWS] =
@@ -11264,7 +11732,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_HONE_CLAWS,
},
[MOVE_WIDE_GUARD] =
@@ -11290,7 +11759,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_WIDE_GUARD,
},
[MOVE_GUARD_SPLIT] =
@@ -11312,7 +11782,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_GUARD_SPLIT,
},
[MOVE_POWER_SPLIT] =
@@ -11334,7 +11805,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_POWER_SPLIT,
},
[MOVE_WONDER_ROOM] =
@@ -11356,7 +11828,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_WONDER_ROOM,
},
[MOVE_PSYSHOCK] =
@@ -11374,7 +11847,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_PSYSHOCK,
},
[MOVE_VENOSHOCK] =
@@ -11396,6 +11870,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_TOXIC},
+ .battleAnimScript = Move_VENOSHOCK,
},
[MOVE_AUTOTOMIZE] =
@@ -11419,7 +11894,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_AUTOTOMIZE,
},
[MOVE_RAGE_POWDER] =
@@ -11446,7 +11922,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_RAGE_POWDER,
},
[MOVE_TELEKINESIS] =
@@ -11469,7 +11946,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_TELEKINESIS,
},
[MOVE_MAGIC_ROOM] =
@@ -11491,7 +11969,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_MAGIC_ROOM,
},
[MOVE_SMACK_DOWN] =
@@ -11516,7 +11995,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SMACK_DOWN,
},
[MOVE_STORM_THROW] =
@@ -11536,7 +12016,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_STORM_THROW,
},
[MOVE_FLAME_BURST] =
@@ -11560,7 +12041,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_FLAME_BURST,
},
[MOVE_SLUDGE_WAVE] =
@@ -11584,7 +12066,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SLUDGE_WAVE,
},
[MOVE_QUIVER_DANCE] =
@@ -11609,7 +12092,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_QUIVER_DANCE,
},
[MOVE_HEAVY_SLAM] =
@@ -11630,7 +12114,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_HEAVY_SLAM,
},
[MOVE_SYNCHRONOISE] =
@@ -11650,7 +12135,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SYNCHRONOISE,
},
[MOVE_ELECTRO_BALL] =
@@ -11671,7 +12157,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_ELECTRO_BALL,
},
[MOVE_SOAK] =
@@ -11693,7 +12180,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SOAK,
},
[MOVE_FLAME_CHARGE] =
@@ -11719,7 +12207,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_FLAME_CHARGE,
},
[MOVE_COIL] =
@@ -11743,7 +12232,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_COIL,
},
[MOVE_LOW_SWEEP] =
@@ -11768,7 +12258,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_LOW_SWEEP,
},
[MOVE_ACID_SPRAY] =
@@ -11793,7 +12284,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_ACID_SPRAY,
},
[MOVE_FOUL_PLAY] =
@@ -11814,7 +12306,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_FOUL_PLAY,
},
[MOVE_SIMPLE_BEAM] =
@@ -11836,7 +12329,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SIMPLE_BEAM,
},
[MOVE_ENTRAINMENT] =
@@ -11858,7 +12352,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_ENTRAINMENT,
},
[MOVE_AFTER_YOU] =
@@ -11883,7 +12378,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_NEXT_APPEAL_LATER,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_AFTER_YOU,
},
[MOVE_ROUND] =
@@ -11908,7 +12404,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_REPETITION_NOT_BORING,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_ROUND,
},
[MOVE_ECHOED_VOICE] =
@@ -11930,7 +12427,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_REPETITION_NOT_BORING,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_ECHOED_VOICE,
},
[MOVE_CHIP_AWAY] =
@@ -11950,7 +12448,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_REPETITION_NOT_BORING,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_CHIP_AWAY,
},
[MOVE_CLEAR_SMOG] =
@@ -11973,7 +12472,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_CLEAR_SMOG,
},
[MOVE_STORED_POWER] =
@@ -11993,7 +12493,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_WHEN_LATER,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_STORED_POWER,
},
[MOVE_QUICK_GUARD] =
@@ -12019,7 +12520,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE_ONCE,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_QUICK_GUARD,
},
[MOVE_ALLY_SWITCH] =
@@ -12042,7 +12544,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_ALLY_SWITCH,
},
[MOVE_SCALD] =
@@ -12067,7 +12570,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = COMBO_STARTER_SCALD,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SCALD,
},
[MOVE_SHELL_SMASH] =
@@ -12091,7 +12595,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SHELL_SMASH,
},
[MOVE_HEAL_PULSE] =
@@ -12116,7 +12621,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_HEAL_PULSE,
},
[MOVE_HEX] =
@@ -12139,6 +12645,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_TOXIC},
+ .battleAnimScript = Move_HEX,
},
[MOVE_SKY_DROP] =
@@ -12164,7 +12671,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SKY_DROP,
},
[MOVE_SHIFT_GEAR] =
@@ -12188,7 +12696,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SHIFT_GEAR,
},
[MOVE_CIRCLE_THROW] =
@@ -12209,7 +12718,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_CIRCLE_THROW,
},
[MOVE_INCINERATE] =
@@ -12232,7 +12742,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_INCINERATE,
},
[MOVE_QUASH] =
@@ -12254,7 +12765,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_NEXT_APPEAL_LATER,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_QUASH,
},
[MOVE_ACROBATICS] =
@@ -12275,7 +12787,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_ACROBATICS,
},
[MOVE_REFLECT_TYPE] =
@@ -12298,7 +12811,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_REFLECT_TYPE,
},
[MOVE_RETALIATE] =
@@ -12319,7 +12833,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_NEXT_APPEAL_LATER,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_RETALIATE,
},
[MOVE_FINAL_GAMBIT] =
@@ -12341,7 +12856,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_FINAL_GAMBIT,
},
[MOVE_BESTOW] =
@@ -12367,7 +12883,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_BESTOW,
},
[MOVE_INFERNO] =
@@ -12391,7 +12908,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_INFERNO,
},
[MOVE_WATER_PLEDGE] =
@@ -12412,7 +12930,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_WATER_PLEDGE,
},
[MOVE_FIRE_PLEDGE] =
@@ -12433,7 +12952,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_FIRE_PLEDGE,
},
[MOVE_GRASS_PLEDGE] =
@@ -12454,7 +12974,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_GRASS_PLEDGE,
},
[MOVE_VOLT_SWITCH] =
@@ -12472,7 +12993,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_VOLT_SWITCH,
},
[MOVE_STRUGGLE_BUG] =
@@ -12496,7 +13018,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_STRUGGLE_BUG,
},
[MOVE_BULLDOZE] =
@@ -12521,7 +13044,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_BULLDOZE,
},
[MOVE_FROST_BREATH] =
@@ -12540,7 +13064,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_FROST_BREATH,
},
[MOVE_DRAGON_TAIL] =
@@ -12562,6 +13087,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,
},
[MOVE_WORK_UP] =
@@ -12585,7 +13111,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_WORK_UP,
},
[MOVE_ELECTROWEB] =
@@ -12609,7 +13136,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_ELECTROWEB,
},
[MOVE_WILD_CHARGE] =
@@ -12631,7 +13159,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_WILD_CHARGE,
},
[MOVE_DRILL_RUN] =
@@ -12653,7 +13182,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_DRILL_RUN,
},
[MOVE_DUAL_CHOP] =
@@ -12675,7 +13205,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_REPETITION_NOT_BORING,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_DUAL_CHOP,
},
[MOVE_HEART_STAMP] =
@@ -12700,7 +13231,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_HEART_STAMP,
},
[MOVE_HORN_LEECH] =
@@ -12720,7 +13252,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_HORN_LEECH,
},
[MOVE_SACRED_SWORD] =
@@ -12741,7 +13274,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SACRED_SWORD,
},
[MOVE_RAZOR_SHELL] =
@@ -12767,7 +13301,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_RAZOR_SHELL,
},
[MOVE_HEAT_CRASH] =
@@ -12787,7 +13322,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_HEAT_CRASH,
},
[MOVE_LEAF_TORNADO] =
@@ -12812,7 +13348,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_LEAF_TORNADO,
},
[MOVE_STEAMROLLER] =
@@ -12838,7 +13375,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_STEAMROLLER,
},
[MOVE_COTTON_GUARD] =
@@ -12862,7 +13400,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_COTTON_GUARD,
},
[MOVE_NIGHT_DAZE] =
@@ -12886,7 +13425,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_NIGHT_DAZE,
},
[MOVE_PSYSTRIKE] =
@@ -12904,7 +13444,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_PSYSTRIKE,
},
[MOVE_TAIL_SLAP] =
@@ -12925,7 +13466,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_TAIL_SLAP,
},
[MOVE_HURRICANE] =
@@ -12951,7 +13493,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_HURRICANE,
},
[MOVE_HEAD_CHARGE] =
@@ -12973,7 +13516,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_HEAD_CHARGE,
},
[MOVE_GEAR_GRIND] =
@@ -12996,7 +13540,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_REPETITION_NOT_BORING,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_GEAR_GRIND,
},
[MOVE_SEARING_SHOT] =
@@ -13019,7 +13564,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SEARING_SHOT,
},
[MOVE_TECHNO_BLAST] =
@@ -13041,7 +13587,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_EXCITE_AUDIENCE_IN_ANY_CONTEST,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_TECHNO_BLAST,
},
[MOVE_RELIC_SONG] =
@@ -13069,7 +13616,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_RELIC_SONG,
},
[MOVE_SECRET_SWORD] =
@@ -13091,7 +13639,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SECRET_SWORD,
},
[MOVE_GLACIATE] =
@@ -13115,7 +13664,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_GLACIATE,
},
[MOVE_BOLT_STRIKE] =
@@ -13140,7 +13690,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_BOLT_STRIKE,
},
[MOVE_BLUE_FLARE] =
@@ -13164,7 +13715,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_BLUE_FLARE,
},
[MOVE_FIERY_DANCE] =
@@ -13190,7 +13742,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_FIERY_DANCE,
},
[MOVE_FREEZE_SHOCK] =
@@ -13218,7 +13771,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_FREEZE_SHOCK,
},
[MOVE_ICE_BURN] =
@@ -13246,7 +13800,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_ICE_BURN,
},
[MOVE_SNARL] =
@@ -13273,7 +13828,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SNARL,
},
[MOVE_ICICLE_CRASH] =
@@ -13297,7 +13853,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_PREV_MON,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_ICICLE_CRASH,
},
[MOVE_V_CREATE] =
@@ -13324,7 +13881,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_V_CREATE,
},
[MOVE_FUSION_FLARE] =
@@ -13345,7 +13903,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_FUSION_FLARE,
},
[MOVE_FUSION_BOLT] =
@@ -13365,7 +13924,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_FUSION_BOLT,
},
[MOVE_FLYING_PRESS] =
@@ -13391,7 +13951,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_FLYING_PRESS,
},
[MOVE_MAT_BLOCK] =
@@ -13420,7 +13981,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_MAT_BLOCK,
},
[MOVE_BELCH] =
@@ -13448,7 +14010,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_BELCH,
},
[MOVE_ROTOTILLER] =
@@ -13472,7 +14035,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_ROTOTILLER,
},
[MOVE_STICKY_WEB] =
@@ -13497,7 +14061,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_STICKY_WEB,
},
[MOVE_FELL_STINGER] =
@@ -13518,7 +14083,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_LAST,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_FELL_STINGER,
},
[MOVE_PHANTOM_FORCE] =
@@ -13546,7 +14112,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE_ONCE,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_PHANTOM_FORCE,
},
[MOVE_TRICK_OR_TREAT] =
@@ -13569,7 +14136,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_TRICK_OR_TREAT,
},
[MOVE_NOBLE_ROAR] =
@@ -13593,7 +14161,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_LAST,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_NOBLE_ROAR,
},
[MOVE_ION_DELUGE] =
@@ -13616,7 +14185,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_ION_DELUGE,
},
[MOVE_PARABOLIC_CHARGE] =
@@ -13637,7 +14207,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_PARABOLIC_CHARGE,
},
[MOVE_FORESTS_CURSE] =
@@ -13660,7 +14231,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_FORESTS_CURSE,
},
[MOVE_PETAL_BLIZZARD] =
@@ -13681,7 +14253,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_PETAL_BLIZZARD,
},
[MOVE_FREEZE_DRY] =
@@ -13694,7 +14267,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
#else
"types. May cause freezing."),
#endif
- .effect = EFFECT_FREEZE_DRY,
+ .effect = EFFECT_SUPER_EFFECTIVE_ON_ARG,
.power = 70,
.type = TYPE_ICE,
.accuracy = 100,
@@ -13702,6 +14275,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_SPECIAL,
+ .argument = TYPE_WATER,
.additionalEffects = ADDITIONAL_EFFECTS({
.moveEffect = MOVE_EFFECT_FREEZE_OR_FROSTBITE,
.chance = 10,
@@ -13709,7 +14283,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_FREEZE_DRY,
},
[MOVE_DISARMING_VOICE] =
@@ -13731,7 +14306,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_DISARMING_VOICE,
},
[MOVE_PARTING_SHOT] =
@@ -13755,7 +14331,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_PARTING_SHOT,
},
[MOVE_TOPSY_TURVY] =
@@ -13777,7 +14354,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_TOPSY_TURVY,
},
[MOVE_DRAINING_KISS] =
@@ -13798,7 +14376,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_DRAINING_KISS,
},
[MOVE_CRAFTY_SHIELD] =
@@ -13823,7 +14402,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE_ONCE,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_CRAFTY_SHIELD,
},
[MOVE_FLOWER_SHIELD] =
@@ -13846,7 +14426,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_FLOWER_SHIELD,
},
[MOVE_GRASSY_TERRAIN] =
@@ -13870,7 +14451,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = COMBO_STARTER_GRASSY_TERRAIN,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_GRASSY_TERRAIN,
},
[MOVE_MISTY_TERRAIN] =
@@ -13894,7 +14476,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = COMBO_STARTER_MISTY_TERRAIN,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_MISTY_TERRAIN,
},
[MOVE_ELECTRIFY] =
@@ -13915,7 +14498,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_ELECTRIFY,
},
[MOVE_PLAY_ROUGH] =
@@ -13940,7 +14524,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_PLAY_ROUGH,
},
[MOVE_FAIRY_WIND] =
@@ -13961,7 +14546,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_FAIRY_WIND,
},
[MOVE_MOONBLAST] =
@@ -13985,7 +14571,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_MOONBLAST,
},
[MOVE_BOOMBURST] =
@@ -14007,7 +14594,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_BOOMBURST,
},
[MOVE_FAIRY_LOCK] =
@@ -14030,7 +14618,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_FAIRY_LOCK,
},
[MOVE_KINGS_SHIELD] =
@@ -14057,7 +14646,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_KINGS_SHIELD,
},
[MOVE_PLAY_NICE] =
@@ -14081,7 +14671,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_LAST,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_PLAY_NICE,
},
[MOVE_CONFIDE] =
@@ -14106,7 +14697,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_LAST,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_CONFIDE,
},
[MOVE_DIAMOND_STORM] =
@@ -14132,7 +14724,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_DIAMOND_STORM,
},
[MOVE_STEAM_ERUPTION] =
@@ -14159,11 +14752,12 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_SCALD},
+ .battleAnimScript = Move_STEAM_ERUPTION,
},
[MOVE_HYPERSPACE_HOLE] =
{
- .name = HANDLE_EXPANDED_MOVE_NAME("HyprspceHole", "Hyprspace Hole"),
+ .name = HANDLE_EXPANDED_MOVE_NAME("HyprspceHole", "Hyperspace Hole"),
.description = sHyperspaceHoleDescription,
.effect = EFFECT_HIT,
.power = 80,
@@ -14183,6 +14777,7 @@ 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,
},
[MOVE_WATER_SHURIKEN] =
@@ -14202,7 +14797,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_WATER_SHURIKEN,
},
[MOVE_MYSTICAL_FIRE] =
@@ -14226,7 +14822,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_MYSTICAL_FIRE,
},
[MOVE_SPIKY_SHIELD] =
@@ -14252,7 +14849,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SPIKY_SHIELD,
},
[MOVE_AROMATIC_MIST] =
@@ -14276,7 +14874,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_AROMATIC_MIST,
},
[MOVE_EERIE_IMPULSE] =
@@ -14298,7 +14897,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_EERIE_IMPULSE,
},
[MOVE_VENOM_DRENCH] =
@@ -14321,6 +14921,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_TOXIC},
+ .battleAnimScript = Move_VENOM_DRENCH,
},
[MOVE_POWDER] =
@@ -14340,11 +14941,11 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.zMove = { .effect = Z_EFFECT_SPDEF_UP_2 },
.powderMove = TRUE,
.magicCoatAffected = TRUE,
- .ignoresSubstitute = TRUE,
.contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_POWDER,
},
[MOVE_GEOMANCY] =
@@ -14369,7 +14970,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_GEOMANCY,
},
[MOVE_MAGNETIC_FLUX] =
@@ -14394,7 +14996,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_MAGNETIC_FLUX,
},
[MOVE_HAPPY_HOUR] =
@@ -14417,7 +15020,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_HAPPY_HOUR,
},
[MOVE_ELECTRIC_TERRAIN] =
@@ -14441,7 +15045,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = COMBO_STARTER_ELECTRIC_TERRAIN,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_ELECTRIC_TERRAIN,
},
[MOVE_DAZZLING_GLEAM] =
@@ -14461,7 +15066,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_DAZZLING_GLEAM,
},
[MOVE_CELEBRATE] =
@@ -14490,7 +15096,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_CELEBRATE,
},
[MOVE_HOLD_HANDS] =
@@ -14519,7 +15126,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_HOLD_HANDS,
},
[MOVE_BABY_DOLL_EYES] =
@@ -14541,7 +15149,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_BABY_DOLL_EYES,
},
[MOVE_NUZZLE] =
@@ -14566,7 +15175,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_NUZZLE,
},
[MOVE_HOLD_BACK] =
@@ -14585,7 +15195,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_HOLD_BACK,
},
[MOVE_INFESTATION] =
@@ -14609,7 +15220,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_INFESTATION,
},
[MOVE_POWER_UP_PUNCH] =
@@ -14636,7 +15248,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_POWER_UP_PUNCH,
},
[MOVE_OBLIVION_WING] =
@@ -14656,7 +15269,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_OBLIVION_WING,
},
[MOVE_THOUSAND_ARROWS] =
@@ -14684,6 +15298,7 @@ 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,
},
[MOVE_THOUSAND_WAVES] =
@@ -14709,6 +15324,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,
},
[MOVE_LANDS_WRATH] =
@@ -14729,7 +15345,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_LANDS_WRATH,
},
[MOVE_LIGHT_OF_RUIN] =
@@ -14748,6 +15365,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_SPECIAL,
.metronomeBanned = TRUE,
+ .battleAnimScript = Move_LIGHT_OF_RUIN,
},
[MOVE_ORIGIN_PULSE] =
@@ -14769,7 +15387,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_ORIGIN_PULSE,
},
[MOVE_PRECIPICE_BLADES] =
@@ -14790,7 +15409,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_LAST,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_PRECIPICE_BLADES,
},
[MOVE_DRAGON_ASCENT] =
@@ -14814,7 +15434,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_DRAGON_ASCENT,
},
[MOVE_HYPERSPACE_FURY] =
@@ -14842,6 +15463,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,
},
[MOVE_SHORE_UP] =
@@ -14866,7 +15488,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {COMBO_STARTER_SANDSTORM}
+ .contestComboMoves = {COMBO_STARTER_SANDSTORM},
+ .battleAnimScript = Move_SHORE_UP,
},
[MOVE_FIRST_IMPRESSION] =
@@ -14888,7 +15511,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_FIRST_IMPRESSION,
},
[MOVE_BANEFUL_BUNKER] =
@@ -14914,7 +15538,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_BANEFUL_BUNKER,
},
[MOVE_SPIRIT_SHACKLE] =
@@ -14938,7 +15563,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SPIRIT_SHACKLE,
},
[MOVE_DARKEST_LARIAT] =
@@ -14960,7 +15586,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_DARKEST_LARIAT,
},
[MOVE_SPARKLING_ARIA] =
@@ -14988,6 +15615,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_SCALD},
+ .battleAnimScript = Move_SPARKLING_ARIA,
},
[MOVE_ICE_HAMMER] =
@@ -15014,6 +15642,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_HAIL},
+ .battleAnimScript = Move_ICE_HAMMER,
},
[MOVE_FLORAL_HEALING] =
@@ -15038,7 +15667,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_FLORAL_HEALING,
},
[MOVE_HIGH_HORSEPOWER] =
@@ -15059,7 +15689,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_HIGH_HORSEPOWER,
},
[MOVE_STRENGTH_SAP] =
@@ -15082,7 +15713,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_STRENGTH_SAP,
},
[MOVE_SOLAR_BLADE] =
@@ -15108,6 +15740,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_SUNNY_DAY},
+ .battleAnimScript = Move_SOLAR_BLADE,
},
[MOVE_LEAFAGE] =
@@ -15128,6 +15761,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_GROWTH},
+ .battleAnimScript = Move_LEAFAGE,
},
[MOVE_SPOTLIGHT] =
@@ -15153,7 +15787,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SPOTLIGHT,
},
[MOVE_TOXIC_THREAD] =
@@ -15176,6 +15811,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_TOXIC},
+ .battleAnimScript = Move_TOXIC_THREAD,
},
[MOVE_LASER_FOCUS] =
@@ -15199,7 +15835,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_LASER_FOCUS,
},
[MOVE_GEAR_UP] =
@@ -15224,7 +15861,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_GEAR_UP,
},
[MOVE_THROAT_CHOP] =
@@ -15249,7 +15887,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_THROAT_CHOP,
},
[MOVE_POLLEN_PUFF] =
@@ -15270,7 +15909,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_POLLEN_PUFF,
},
[MOVE_ANCHOR_SHOT] =
@@ -15295,7 +15935,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_ANCHOR_SHOT,
},
[MOVE_PSYCHIC_TERRAIN] =
@@ -15318,7 +15959,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_WHEN_AUDIENCE_EXCITED,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = COMBO_STARTER_PSYCHIC_TERRAIN,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_PSYCHIC_TERRAIN,
},
[MOVE_LUNGE] =
@@ -15343,7 +15985,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_LUNGE,
},
[MOVE_FIRE_LASH] =
@@ -15369,6 +16012,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_SUNNY_DAY},
+ .battleAnimScript = Move_FIRE_LASH,
},
[MOVE_POWER_TRIP] =
@@ -15389,7 +16033,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_WHEN_LATER,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_POWER_TRIP,
},
[MOVE_BURN_UP] =
@@ -15416,6 +16061,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_SUNNY_DAY},
+ .battleAnimScript = Move_BURN_UP,
},
[MOVE_SPEED_SWAP] =
@@ -15437,7 +16083,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SPEED_SWAP,
},
[MOVE_SMART_STRIKE] =
@@ -15458,7 +16105,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SMART_STRIKE,
},
[MOVE_PURIFY] =
@@ -15482,7 +16130,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_PURIFY,
},
[MOVE_REVELATION_DANCE] =
@@ -15503,7 +16152,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_REPETITION_NOT_BORING,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_REVELATION_DANCE,
},
[MOVE_CORE_ENFORCER] =
@@ -15527,7 +16177,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_SHIFT_JUDGE_ATTENTION,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_CORE_ENFORCER,
},
[MOVE_TROP_KICK] =
@@ -15552,7 +16203,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_TROP_KICK,
},
[MOVE_INSTRUCT] =
@@ -15577,7 +16229,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONE,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_INSTRUCT,
},
[MOVE_BEAK_BLAST] =
@@ -15605,7 +16258,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AFFECTED_BY_PREV_APPEAL,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_BEAK_BLAST,
},
[MOVE_CLANGING_SCALES] =
@@ -15631,7 +16285,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_CLANGING_SCALES,
},
[MOVE_DRAGON_HAMMER] =
@@ -15653,6 +16308,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,
},
[MOVE_BRUTAL_SWING] =
@@ -15673,7 +16329,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_BRUTAL_SWING,
},
[MOVE_AURORA_VEIL] =
@@ -15698,6 +16355,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_HAIL},
+ .battleAnimScript = Move_AURORA_VEIL,
},
[MOVE_SHELL_TRAP] =
@@ -15724,7 +16382,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_LAST,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SHELL_TRAP,
},
[MOVE_FLEUR_CANNON] =
@@ -15743,13 +16402,14 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.category = DAMAGE_CATEGORY_SPECIAL,
.metronomeBanned = TRUE,
.additionalEffects = ADDITIONAL_EFFECTS({
- .moveEffect = MOVE_EFFECT_SP_ATK_TWO_DOWN,
+ .moveEffect = MOVE_EFFECT_SP_ATK_MINUS_2,
.self = TRUE,
}),
.contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_FLEUR_CANNON,
},
[MOVE_PSYCHIC_FANGS] =
@@ -15771,7 +16431,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_PSYCHIC_FANGS,
},
[MOVE_STOMPING_TANTRUM] =
@@ -15793,7 +16454,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_STOMPING_TANTRUM,
},
[MOVE_SHADOW_BONE] =
@@ -15818,6 +16480,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,
},
[MOVE_ACCELEROCK] =
@@ -15838,7 +16501,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_ACCELEROCK,
},
[MOVE_LIQUIDATION] =
@@ -15864,6 +16528,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_RAIN_DANCE},
+ .battleAnimScript = Move_LIQUIDATION,
},
[MOVE_PRISMATIC_LASER] =
@@ -15887,7 +16552,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_PRISMATIC_LASER,
},
[MOVE_SPECTRAL_THIEF] =
@@ -15913,7 +16579,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_APPEAL_AS_GOOD_AS_PREV_ONES,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SPECTRAL_THIEF,
},
[MOVE_SUNSTEEL_STRIKE] =
@@ -15936,7 +16603,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SUNSTEEL_STRIKE,
},
[MOVE_MOONGEIST_BEAM] =
@@ -15958,7 +16626,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_MOONGEIST_BEAM,
},
[MOVE_TEARFUL_LOOK] =
@@ -15981,7 +16650,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_LAST,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_TEARFUL_LOOK,
},
[MOVE_ZING_ZAP] =
@@ -16007,6 +16677,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
.contestComboMoves = {COMBO_STARTER_CHARGE},
+ .battleAnimScript = Move_ZING_ZAP,
},
[MOVE_NATURES_MADNESS] =
@@ -16027,7 +16698,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_MONS_WITH_GOOD_APPEALS,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_NATURES_MADNESS,
},
[MOVE_MULTI_ATTACK] =
@@ -16049,7 +16721,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_SCRAMBLE_NEXT_TURN_ORDER,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_MULTI_ATTACK,
},
[MOVE_MIND_BLOWN] =
@@ -16070,7 +16743,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_MIND_BLOWN,
},
[MOVE_PLASMA_FISTS] =
@@ -16093,7 +16767,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_PLASMA_FISTS,
},
[MOVE_PHOTON_GEYSER] =
@@ -16115,7 +16790,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_PHOTON_GEYSER,
},
[MOVE_ZIPPY_ZAP] =
@@ -16142,6 +16818,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.chance = 100,
}),
#endif
+ .battleAnimScript = Move_ZIPPY_ZAP,
},
[MOVE_SPLISHY_SPLASH] =
@@ -16164,6 +16841,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.moveEffect = MOVE_EFFECT_PARALYSIS,
.chance = 30,
}),
+ .battleAnimScript = Move_SPLISHY_SPLASH,
},
[MOVE_FLOATY_FALL] =
@@ -16188,6 +16866,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.moveEffect = MOVE_EFFECT_FLINCH,
.chance = 30,
}),
+ .battleAnimScript = Move_FLOATY_FALL,
},
[MOVE_PIKA_PAPOW] =
@@ -16206,6 +16885,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.category = DAMAGE_CATEGORY_SPECIAL,
.mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8,
.metronomeBanned = TRUE,
+ .battleAnimScript = Move_PIKA_PAPOW,
},
[MOVE_BOUNCY_BUBBLE] =
@@ -16230,6 +16910,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,
},
[MOVE_BUZZY_BUZZ] =
@@ -16252,6 +16933,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.moveEffect = MOVE_EFFECT_PARALYSIS,
.chance = 100,
}),
+ .battleAnimScript = Move_BUZZY_BUZZ,
},
[MOVE_SIZZLY_SLIDE] =
@@ -16276,6 +16958,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.moveEffect = MOVE_EFFECT_BURN,
.chance = 100,
}),
+ .battleAnimScript = Move_SIZZLY_SLIDE,
},
[MOVE_GLITZY_GLOW] =
@@ -16294,6 +16977,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,
},
[MOVE_BADDY_BAD] =
@@ -16312,6 +16996,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,
},
[MOVE_SAPPY_SEED] =
@@ -16331,6 +17016,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8,
.magicCoatAffected = TRUE,
.metronomeBanned = TRUE,
+ .battleAnimScript = Move_SAPPY_SEED,
},
[MOVE_FREEZY_FROST] =
@@ -16349,6 +17035,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.category = DAMAGE_CATEGORY_SPECIAL,
.mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8,
.metronomeBanned = TRUE,
+ .battleAnimScript = Move_FREEZY_FROST,
},
[MOVE_SPARKLY_SWIRL] =
@@ -16367,6 +17054,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.category = DAMAGE_CATEGORY_SPECIAL,
.mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8,
.metronomeBanned = TRUE,
+ .battleAnimScript = Move_SPARKLY_SWIRL,
},
[MOVE_VEEVEE_VOLLEY] =
@@ -16386,6 +17074,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.makesContact = TRUE,
.mirrorMoveBanned = B_UPDATED_MOVE_FLAGS < GEN_8,
.metronomeBanned = TRUE,
+ .battleAnimScript = Move_VEEVEE_VOLLEY,
},
[MOVE_DOUBLE_IRON_BASH] =
@@ -16414,7 +17103,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_REPETITION_NOT_BORING,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_DOUBLE_IRON_BASH,
},
[MOVE_DYNAMAX_CANNON] =
@@ -16444,6 +17134,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
.contestComboMoves = {0},
+ .battleAnimScript = Move_DYNAMAX_CANNON,
},
[MOVE_SNIPE_SHOT] =
@@ -16464,7 +17155,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SNIPE_SHOT,
},
[MOVE_JAW_LOCK] =
@@ -16489,7 +17181,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_JAW_LOCK,
},
[MOVE_STUFF_CHEEKS] =
@@ -16512,7 +17205,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_STUFF_CHEEKS,
},
[MOVE_NO_RETREAT] =
@@ -16535,7 +17229,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_NO_RETREAT,
},
[MOVE_TAR_SHOT] =
@@ -16556,7 +17251,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_TAR_SHOT,
},
[MOVE_MAGIC_POWDER] =
@@ -16579,7 +17275,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_MAGIC_POWDER,
},
[MOVE_DRAGON_DARTS] =
@@ -16588,7 +17285,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.description = COMPOUND_STRING(
"The user attacks twice. Two\n"
"targets are hit once each."),
- .effect = EFFECT_HIT, // TODO: EFFECT_DRAGON_DARTS
+ .effect = EFFECT_DRAGON_DARTS,
.power = 50,
.type = TYPE_DRAGON,
.accuracy = 100,
@@ -16602,6 +17299,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
.contestComboMoves = {0},
+ .battleAnimScript = Move_DRAGON_DARTS,
},
[MOVE_TEATIME] =
@@ -16625,6 +17323,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {0},
+ .battleAnimScript = Move_TEATIME,
},
[MOVE_OCTOLOCK] =
@@ -16644,7 +17343,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_OCTOLOCK,
},
[MOVE_BOLT_BEAK] =
@@ -16665,7 +17365,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_BOLT_BEAK,
},
[MOVE_FISHIOUS_REND] =
@@ -16687,7 +17388,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_FISHIOUS_REND,
},
[MOVE_COURT_CHANGE] =
@@ -16708,7 +17410,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_MAKE_FOLLOWING_MONS_NERVOUS,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_COURT_CHANGE,
},
[MOVE_CLANGOROUS_SOUL] =
@@ -16734,7 +17437,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_CLANGOROUS_SOUL,
},
[MOVE_BODY_PRESS] =
@@ -16757,7 +17461,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_BODY_PRESS,
},
[MOVE_DECORATE] =
@@ -16765,7 +17470,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,
@@ -16780,7 +17485,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_DECORATE,
},
[MOVE_DRUM_BEATING] =
@@ -16805,7 +17511,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_DRUM_BEATING,
},
[MOVE_SNAP_TRAP] =
@@ -16831,7 +17538,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SNAP_TRAP,
},
[MOVE_PYRO_BALL] =
@@ -16858,7 +17566,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_PYRO_BALL,
},
[MOVE_BEHEMOTH_BLADE] =
@@ -16885,6 +17594,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
.contestComboMoves = {0},
+ .battleAnimScript = Move_BEHEMOTH_BLADE,
},
[MOVE_BEHEMOTH_BASH] =
@@ -16910,6 +17620,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
.contestComboMoves = {0},
+ .battleAnimScript = Move_BEHEMOTH_BASH,
},
[MOVE_AURA_WHEEL] =
@@ -16935,7 +17646,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_AURA_WHEEL,
},
[MOVE_BREAKING_SWIPE] =
@@ -16962,6 +17674,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
.contestComboMoves = {0},
+ .battleAnimScript = Move_BREAKING_SWIPE,
},
[MOVE_BRANCH_POKE] =
@@ -16983,7 +17696,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_BRANCH_POKE,
},
[MOVE_OVERDRIVE] =
@@ -17007,6 +17721,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
.contestComboMoves = {0},
+ .battleAnimScript = Move_OVERDRIVE,
},
[MOVE_APPLE_ACID] =
@@ -17031,7 +17746,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_APPLE_ACID,
},
[MOVE_GRAV_APPLE] =
@@ -17057,6 +17773,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
.contestComboMoves = {0},
+ .battleAnimScript = Move_GRAV_APPLE,
},
[MOVE_SPIRIT_BREAK] =
@@ -17082,7 +17799,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SPIRIT_BREAK,
},
[MOVE_STRANGE_STEAM] =
@@ -17107,7 +17825,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_FRONT_MON,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_STRANGE_STEAM,
},
[MOVE_LIFE_DEW] =
@@ -17133,7 +17852,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_QUALITY_DEPENDS_ON_TIMING,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_LIFE_DEW,
},
[MOVE_OBSTRUCT] =
@@ -17158,6 +17878,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
.contestComboMoves = {0},
+ .battleAnimScript = Move_OBSTRUCT,
},
[MOVE_FALSE_SURRENDER] =
@@ -17179,7 +17900,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_FIRST,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_FALSE_SURRENDER,
},
[MOVE_METEOR_ASSAULT] =
@@ -17205,7 +17927,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_METEOR_ASSAULT,
},
[MOVE_ETERNABEAM] =
@@ -17230,7 +17953,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_ETERNABEAM,
},
[MOVE_STEEL_BEAM] =
@@ -17251,7 +17975,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_USER_MORE_EASILY_STARTLED,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_STEEL_BEAM,
},
[MOVE_EXPANDING_FORCE] =
@@ -17271,7 +17996,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {COMBO_STARTER_PSYCHIC_TERRAIN}
+ .contestComboMoves = {COMBO_STARTER_PSYCHIC_TERRAIN},
+ .battleAnimScript = Move_EXPANDING_FORCE,
},
[MOVE_STEEL_ROLLER] =
@@ -17295,6 +18021,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
.contestComboMoves = {0},
+ .battleAnimScript = Move_STEEL_ROLLER,
},
[MOVE_SCALE_SHOT] =
@@ -17316,6 +18043,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
.contestComboMoves = {0},
+ .battleAnimScript = Move_SCALE_SHOT,
},
[MOVE_METEOR_BEAM] =
@@ -17343,6 +18071,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
.contestComboMoves = {0},
+ .battleAnimScript = Move_METEOR_BEAM,
},
[MOVE_SHELL_SIDE_ARM] =
@@ -17351,7 +18080,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.description = COMPOUND_STRING(
"Deals better of physical and\n"
"special damage. May poison."),
- .effect = EFFECT_HIT, // The effect is hardcoded to the move since SetShellSideArmCategory() can't be used with anything but Shell Side Arm because of the BP requirement
+ .effect = EFFECT_SHELL_SIDE_ARM,
.power = 90,
.type = TYPE_POISON,
.accuracy = 100,
@@ -17366,7 +18095,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SHELL_SIDE_ARM,
},
[MOVE_MISTY_EXPLOSION] =
@@ -17386,7 +18116,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_GREAT_APPEAL_BUT_NO_MORE_MOVES,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {COMBO_STARTER_MISTY_TERRAIN}
+ .contestComboMoves = {COMBO_STARTER_MISTY_TERRAIN},
+ .battleAnimScript = Move_MISTY_EXPLOSION,
},
[MOVE_GRASSY_GLIDE] =
@@ -17408,7 +18139,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_NEXT_APPEAL_EARLIER,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {COMBO_STARTER_GRASSY_TERRAIN}
+ .contestComboMoves = {COMBO_STARTER_GRASSY_TERRAIN},
+ .battleAnimScript = Move_GRASSY_GLIDE,
},
[MOVE_RISING_VOLTAGE] =
@@ -17428,7 +18160,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {COMBO_STARTER_ELECTRIC_TERRAIN}
+ .contestComboMoves = {COMBO_STARTER_ELECTRIC_TERRAIN},
+ .battleAnimScript = Move_RISING_VOLTAGE,
},
[MOVE_TERRAIN_PULSE] =
@@ -17450,6 +18183,7 @@ 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,
},
[MOVE_SKITTER_SMACK] =
@@ -17474,7 +18208,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BADLY_STARTLE_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SKITTER_SMACK,
},
[MOVE_BURNING_JEALOUSY] =
@@ -17499,7 +18234,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_MON_WITH_JUDGES_ATTENTION,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_BURNING_JEALOUSY,
},
[MOVE_LASH_OUT] =
@@ -17520,7 +18256,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_PREV_MON,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_LASH_OUT,
},
[MOVE_POLTERGEIST] =
@@ -17541,6 +18278,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
.contestComboMoves = {0},
+ .battleAnimScript = Move_POLTERGEIST,
},
[MOVE_CORROSIVE_GAS] =
@@ -17561,7 +18299,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_WORSEN_CONDITION_OF_PREV_MONS,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_CORROSIVE_GAS,
},
[MOVE_COACHING] =
@@ -17584,7 +18323,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_IMPROVE_CONDITION_PREVENT_NERVOUSNESS,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_COACHING,
},
[MOVE_FLIP_TURN] =
@@ -17605,7 +18345,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_AVOID_STARTLE,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_FLIP_TURN,
},
[MOVE_TRIPLE_AXEL] =
@@ -17627,7 +18368,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_IF_SAME_TYPE,
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_TRIPLE_AXEL,
},
[MOVE_DUAL_WINGBEAT] =
@@ -17650,6 +18392,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
.contestComboMoves = {0},
+ .battleAnimScript = Move_DUAL_WINGBEAT,
},
[MOVE_SCORCHING_SANDS] =
@@ -17674,7 +18417,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SCORCHING_SANDS,
},
[MOVE_JUNGLE_HEALING] =
@@ -17700,6 +18444,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
.contestComboMoves = {0},
+ .battleAnimScript = Move_JUNGLE_HEALING,
},
[MOVE_WICKED_BLOW] =
@@ -17723,7 +18468,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_JAMS_OTHERS_BUT_MISS_ONE_TURN,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_WICKED_BLOW,
},
[MOVE_SURGING_STRIKES] =
@@ -17748,7 +18494,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_STARTLE_MONS_SAME_TYPE_APPEAL,
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_SURGING_STRIKES,
},
[MOVE_THUNDER_CAGE] =
@@ -17772,7 +18519,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_DONT_EXCITE_AUDIENCE,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_THUNDER_CAGE,
},
[MOVE_DRAGON_ENERGY] =
@@ -17793,7 +18541,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_WHEN_LATER,
.contestCategory = CONTEST_CATEGORY_COOL,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_DRAGON_ENERGY,
},
[MOVE_FREEZING_GLARE] =
@@ -17822,7 +18571,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_HIGHLY_APPEALING,
.contestCategory = CONTEST_CATEGORY_CUTE,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_FREEZING_GLARE,
},
[MOVE_FIERY_WRATH] =
@@ -17848,6 +18598,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {0},
+ .battleAnimScript = Move_FIERY_WRATH,
},
[MOVE_THUNDEROUS_KICK] =
@@ -17874,6 +18625,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_TOUGH,
.contestComboStarterId = 0,
.contestComboMoves = {0},
+ .battleAnimScript = Move_THUNDEROUS_KICK,
},
[MOVE_GLACIAL_LANCE] =
@@ -17895,6 +18647,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_BEAUTY,
.contestComboStarterId = 0,
.contestComboMoves = {0},
+ .battleAnimScript = Move_GLACIAL_LANCE,
},
[MOVE_ASTRAL_BARRAGE] =
@@ -17916,6 +18669,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
.contestComboMoves = {0},
+ .battleAnimScript = Move_ASTRAL_BARRAGE,
},
[MOVE_EERIE_SPELL] =
@@ -17937,7 +18691,8 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.contestEffect = CONTEST_EFFECT_BETTER_WHEN_LATER,
.contestCategory = CONTEST_CATEGORY_SMART,
.contestComboStarterId = 0,
- .contestComboMoves = {0}
+ .contestComboMoves = {0},
+ .battleAnimScript = Move_EERIE_SPELL,
},
[MOVE_DIRE_CLAW] =
@@ -17959,6 +18714,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.moveEffect = MOVE_EFFECT_DIRE_CLAW,
.chance = 50,
}),
+ .battleAnimScript = Move_DIRE_CLAW,
},
[MOVE_PSYSHIELD_BASH] =
@@ -17981,6 +18737,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.self = TRUE,
.chance = 100,
}),
+ .battleAnimScript = Move_PSYSHIELD_BASH,
},
[MOVE_POWER_SHIFT] =
@@ -18001,6 +18758,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.ignoresProtect = TRUE,
.mirrorMoveBanned = TRUE,
.metronomeBanned = TRUE,
+ .battleAnimScript = Move_POWER_SHIFT,
},
[MOVE_STONE_AXE] =
@@ -18023,6 +18781,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.moveEffect = MOVE_EFFECT_STEALTH_ROCK,
.chance = 100,
}),
+ .battleAnimScript = Move_STONE_AXE,
},
[MOVE_SPRINGTIDE_STORM] =
@@ -18045,6 +18804,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.moveEffect = MOVE_EFFECT_ATK_MINUS_1,
.chance = 30,
}),
+ .battleAnimScript = Move_SPRINGTIDE_STORM,
},
[MOVE_MYSTICAL_POWER] =
@@ -18066,6 +18826,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.self = TRUE,
.chance = 100,
}),
+ .battleAnimScript = Move_MYSTICAL_POWER,
},
[MOVE_RAGING_FURY] =
@@ -18087,6 +18848,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.moveEffect = MOVE_EFFECT_THRASH,
.self = TRUE,
}),
+ .battleAnimScript = Move_RAGING_FURY,
},
[MOVE_WAVE_CRASH] =
@@ -18106,6 +18868,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.category = DAMAGE_CATEGORY_PHYSICAL,
.makesContact = TRUE,
.skyBattleBanned = B_EXTRAPOLATED_MOVE_FLAGS,
+ .battleAnimScript = Move_WAVE_CRASH,
},
[MOVE_CHLOROBLAST] =
@@ -18122,6 +18885,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_SPECIAL,
+ .battleAnimScript = Move_CHLOROBLAST,
},
[MOVE_MOUNTAIN_GALE] =
@@ -18142,6 +18906,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.moveEffect = MOVE_EFFECT_FLINCH,
.chance = 30,
}),
+ .battleAnimScript = Move_MOUNTAIN_GALE,
},
[MOVE_VICTORY_DANCE] =
@@ -18162,6 +18927,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.snatchAffected = TRUE,
.ignoresProtect = TRUE,
.mirrorMoveBanned = TRUE,
+ .battleAnimScript = Move_VICTORY_DANCE,
},
[MOVE_HEADLONG_RUSH] =
@@ -18184,6 +18950,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.moveEffect = MOVE_EFFECT_DEF_SPDEF_DOWN,
.self = TRUE,
}),
+ .battleAnimScript = Move_HEADLONG_RUSH,
},
[MOVE_BARB_BARRAGE] =
@@ -18205,6 +18972,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.moveEffect = MOVE_EFFECT_POISON,
.chance = 50,
}),
+ .battleAnimScript = Move_BARB_BARRAGE,
},
[MOVE_ESPER_WING] =
@@ -18227,6 +18995,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.self = TRUE,
.chance = 100,
}),
+ .battleAnimScript = Move_ESPER_WING,
},
[MOVE_BITTER_MALICE] =
@@ -18247,6 +19016,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.moveEffect = MOVE_EFFECT_ATK_MINUS_1,
.chance = 100,
}),
+ .battleAnimScript = Move_BITTER_MALICE,
},
[MOVE_SHELTER] =
@@ -18266,6 +19036,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.snatchAffected = TRUE,
.ignoresProtect = TRUE,
.mirrorMoveBanned = TRUE,
+ .battleAnimScript = Move_SHELTER,
},
[MOVE_TRIPLE_ARROWS] =
@@ -18291,6 +19062,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.moveEffect = MOVE_EFFECT_FLINCH,
.chance = 30,
}),
+ .battleAnimScript = Move_TRIPLE_ARROWS,
},
[MOVE_INFERNAL_PARADE] =
@@ -18312,6 +19084,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.moveEffect = MOVE_EFFECT_BURN,
.chance = 30,
}),
+ .battleAnimScript = Move_INFERNAL_PARADE,
},
[MOVE_CEASELESS_EDGE] =
@@ -18334,6 +19107,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.moveEffect = MOVE_EFFECT_SPIKES,
.chance = 100,
}),
+ .battleAnimScript = Move_CEASELESS_EDGE,
},
[MOVE_BLEAKWIND_STORM] =
@@ -18355,6 +19129,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.moveEffect = MOVE_EFFECT_SPD_MINUS_1,
.chance = 30,
}),
+ .battleAnimScript = Move_BLEAKWIND_STORM,
},
[MOVE_WILDBOLT_STORM] =
@@ -18376,6 +19151,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.moveEffect = MOVE_EFFECT_PARALYSIS,
.chance = 20,
}),
+ .battleAnimScript = Move_WILDBOLT_STORM,
},
[MOVE_SANDSEAR_STORM] =
@@ -18397,6 +19173,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.moveEffect = MOVE_EFFECT_BURN,
.chance = 20,
}),
+ .battleAnimScript = Move_SANDSEAR_STORM,
},
[MOVE_LUNAR_BLESSING] =
@@ -18417,6 +19194,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.ignoresProtect = TRUE,
.mirrorMoveBanned = TRUE,
.healingMove = TRUE,
+ .battleAnimScript = Move_LUNAR_BLESSING,
},
[MOVE_TAKE_HEART] =
@@ -18436,6 +19214,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.snatchAffected = TRUE,
.ignoresProtect = TRUE,
.mirrorMoveBanned = TRUE,
+ .battleAnimScript = Move_TAKE_HEART,
},
[MOVE_TERA_BLAST] =
@@ -18444,7 +19223,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.description = COMPOUND_STRING(
"If the user's Terastallized,\n"
"it hits with its Tera-type."),
- .effect = EFFECT_PLACEHOLDER, // EFFECT_TERA_BLAST,
+ .effect = EFFECT_TERA_BLAST,
.power = 80,
.type = TYPE_NORMAL,
.accuracy = 100,
@@ -18453,6 +19232,11 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_SPECIAL,
.forcePressure = TRUE,
+ .additionalEffects = ADDITIONAL_EFFECTS({
+ .moveEffect = MOVE_EFFECT_TERA_BLAST,
+ .self = TRUE,
+ }),
+ .battleAnimScript = Move_TERA_BLAST,
},
[MOVE_SILK_TRAP] =
@@ -18472,6 +19256,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.ignoresProtect = TRUE,
.mirrorMoveBanned = TRUE,
.metronomeBanned = TRUE,
+ .battleAnimScript = Move_SILK_TRAP,
},
[MOVE_AXE_KICK] =
@@ -18493,6 +19278,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.moveEffect = MOVE_EFFECT_CONFUSION,
.chance = 30,
}),
+ .battleAnimScript = Move_AXE_KICK,
},
[MOVE_LAST_RESPECTS] =
@@ -18510,6 +19296,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,
},
[MOVE_LUMINA_CRASH] =
@@ -18530,6 +19317,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.moveEffect = MOVE_EFFECT_SP_DEF_MINUS_2,
.chance = 100,
}),
+ .battleAnimScript = Move_LUMINA_CRASH,
},
[MOVE_ORDER_UP] =
@@ -18548,6 +19336,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.category = DAMAGE_CATEGORY_PHYSICAL,
.mirrorMoveBanned = TRUE,
.metronomeBanned = TRUE,
+ .battleAnimScript = Move_ORDER_UP,
},
[MOVE_JET_PUNCH] =
@@ -18567,6 +19356,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.makesContact = TRUE,
.punchingMove = TRUE,
.metronomeBanned = TRUE,
+ .battleAnimScript = Move_JET_PUNCH,
},
[MOVE_SPICY_EXTRACT] =
@@ -18575,7 +19365,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.description = COMPOUND_STRING(
"Sharply ups target's Attack,\n"
"harshly lowers its Defense."),
- .effect = EFFECT_PLACEHOLDER, // EFFECT_SPICY_EXTRACT
+ .effect = EFFECT_SPICY_EXTRACT,
.power = 0,
.type = TYPE_GRASS,
.accuracy = 0,
@@ -18585,6 +19375,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.category = DAMAGE_CATEGORY_STATUS,
.magicCoatAffected = TRUE,
.metronomeBanned = TRUE,
+ .battleAnimScript = Move_SPICY_EXTRACT,
},
[MOVE_SPIN_OUT] =
@@ -18607,6 +19398,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.moveEffect = MOVE_EFFECT_SPD_MINUS_2,
.self = TRUE,
}),
+ .battleAnimScript = Move_SPIN_OUT,
},
[MOVE_POPULATION_BOMB] =
@@ -18627,6 +19419,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.slicingMove = TRUE,
.metronomeBanned = TRUE,
.strikeCount = 10,
+ .battleAnimScript = Move_POPULATION_BOMB,
},
[MOVE_ICE_SPINNER] =
@@ -18646,6 +19439,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,
},
[MOVE_GLAIVE_RUSH] =
@@ -18663,6 +19457,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.makesContact = TRUE,
+ .battleAnimScript = Move_GLAIVE_RUSH,
},
[MOVE_REVIVAL_BLESSING] =
@@ -18684,6 +19479,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.metronomeBanned = TRUE,
.healingMove = TRUE,
.sketchBanned = (B_SKETCH_BANS >= GEN_9),
+ .battleAnimScript = Move_REVIVAL_BLESSING,
},
[MOVE_SALT_CURE] =
@@ -18701,6 +19497,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.metronomeBanned = TRUE,
+ .battleAnimScript = Move_SALT_CURE,
},
[MOVE_TRIPLE_DIVE] =
@@ -18719,6 +19516,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.category = DAMAGE_CATEGORY_PHYSICAL,
.makesContact = TRUE,
.strikeCount = 3,
+ .battleAnimScript = Move_TRIPLE_DIVE,
},
[MOVE_MORTAL_SPIN] =
@@ -18744,6 +19542,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.moveEffect = MOVE_EFFECT_POISON,
.chance = 100,
}),
+ .battleAnimScript = Move_MORTAL_SPIN,
},
[MOVE_DOODLE] =
@@ -18763,6 +19562,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.ignoresProtect = TRUE,
.mirrorMoveBanned = TRUE,
.metronomeBanned = TRUE,
+ .battleAnimScript = Move_DOODLE,
},
[MOVE_FILLET_AWAY] =
@@ -18784,6 +19584,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.ignoresProtect = TRUE,
.mirrorMoveBanned = TRUE,
.metronomeBanned = TRUE,
+ .battleAnimScript = Move_FILLET_AWAY,
},
[MOVE_KOWTOW_CLEAVE] =
@@ -18802,6 +19603,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.category = DAMAGE_CATEGORY_PHYSICAL,
.makesContact = TRUE,
.slicingMove = TRUE,
+ .battleAnimScript = Move_KOWTOW_CLEAVE,
},
[MOVE_FLOWER_TRICK] =
@@ -18819,6 +19621,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.alwaysCriticalHit = TRUE,
+ .battleAnimScript = Move_FLOWER_TRICK,
},
[MOVE_TORCH_SONG] =
@@ -18842,6 +19645,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.self = TRUE,
.chance = 100,
}),
+ .battleAnimScript = Move_TORCH_SONG,
},
[MOVE_AQUA_STEP] =
@@ -18865,6 +19669,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.self = TRUE,
.chance = 100,
}),
+ .battleAnimScript = Move_AQUA_STEP,
},
[MOVE_RAGING_BULL] =
@@ -18883,6 +19688,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.category = DAMAGE_CATEGORY_PHYSICAL,
.makesContact = TRUE,
.metronomeBanned = TRUE,
+ .battleAnimScript = Move_RAGING_BULL,
},
[MOVE_MAKE_IT_RAIN] =
@@ -18907,6 +19713,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.moveEffect = MOVE_EFFECT_SP_ATK_MINUS_1,
.self = TRUE,
}),
+ .battleAnimScript = Move_MAKE_IT_RAIN,
},
[MOVE_RUINATION] =
@@ -18924,6 +19731,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_SPECIAL,
.metronomeBanned = TRUE,
+ .battleAnimScript = Move_RUINATION,
},
[MOVE_COLLISION_COURSE] =
@@ -18931,7 +19739,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.name = HANDLE_EXPANDED_MOVE_NAME("ColisinCours", "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,
@@ -18942,6 +19750,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.category = DAMAGE_CATEGORY_PHYSICAL,
.makesContact = TRUE,
.metronomeBanned = TRUE,
+ .battleAnimScript = Move_COLLISION_COURSE,
},
[MOVE_ELECTRO_DRIFT] =
@@ -18949,7 +19758,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.name = HANDLE_EXPANDED_MOVE_NAME("ElectroDrift", "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,
@@ -18960,6 +19769,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.category = DAMAGE_CATEGORY_SPECIAL,
.makesContact = TRUE,
.metronomeBanned = TRUE,
+ .battleAnimScript = Move_ELECTRO_DRIFT,
},
[MOVE_SHED_TAIL] =
@@ -18980,6 +19790,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.ignoresProtect = TRUE,
.mirrorMoveBanned = TRUE,
.metronomeBanned = TRUE,
+ .battleAnimScript = Move_SHED_TAIL,
},
[MOVE_CHILLY_RECEPTION] =
@@ -19000,6 +19811,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.ignoresProtect = TRUE,
.mirrorMoveBanned = TRUE,
.metronomeBanned = TRUE,
+ .battleAnimScript = Move_CHILLY_RECEPTION,
},
[MOVE_TIDY_UP] =
@@ -19019,6 +19831,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.ignoresProtect = TRUE,
.mirrorMoveBanned = TRUE,
.metronomeBanned = TRUE,
+ .battleAnimScript = Move_TIDY_UP,
},
[MOVE_SNOWSCAPE] =
@@ -19039,6 +19852,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.ignoresProtect = TRUE,
.mirrorMoveBanned = TRUE,
.metronomeBanned = TRUE,
+ .battleAnimScript = Move_SNOWSCAPE,
},
[MOVE_POUNCE] =
@@ -19061,6 +19875,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.moveEffect = MOVE_EFFECT_SPD_MINUS_1,
.chance = 100,
}),
+ .battleAnimScript = Move_POUNCE,
},
[MOVE_TRAILBLAZE] =
@@ -19084,6 +19899,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.self = TRUE,
.chance = 100,
}),
+ .battleAnimScript = Move_TRAILBLAZE,
},
[MOVE_CHILLING_WATER] =
@@ -19105,6 +19921,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.moveEffect = MOVE_EFFECT_ATK_MINUS_1,
.chance = 100,
}),
+ .battleAnimScript = Move_CHILLING_WATER,
},
[MOVE_HYPER_DRILL] =
@@ -19124,6 +19941,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.makesContact = TRUE,
.ignoresProtect = TRUE,
.metronomeBanned = TRUE,
+ .battleAnimScript = Move_HYPER_DRILL,
},
[MOVE_TWIN_BEAM] =
@@ -19142,6 +19960,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.category = DAMAGE_CATEGORY_SPECIAL,
.strikeCount = 2,
.metronomeBanned = TRUE,
+ .battleAnimScript = Move_TWIN_BEAM,
},
[MOVE_RAGE_FIST] =
@@ -19161,6 +19980,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.makesContact = TRUE,
.punchingMove = TRUE,
.metronomeBanned = TRUE,
+ .battleAnimScript = Move_RAGE_FIST,
},
[MOVE_ARMOR_CANNON] =
@@ -19182,6 +20002,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.moveEffect = MOVE_EFFECT_DEF_SPDEF_DOWN,
.self = TRUE,
}),
+ .battleAnimScript = Move_ARMOR_CANNON,
},
[MOVE_BITTER_BLADE] =
@@ -19201,6 +20022,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.makesContact = TRUE,
.slicingMove = TRUE,
.healingMove = TRUE,
+ .battleAnimScript = Move_BITTER_BLADE,
},
[MOVE_DOUBLE_SHOCK] =
@@ -19224,6 +20046,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.moveEffect = MOVE_EFFECT_REMOVE_ARG_TYPE,
.self = TRUE,
}),
+ .battleAnimScript = Move_DOUBLE_SHOCK,
},
[MOVE_GIGATON_HAMMER] =
@@ -19241,6 +20064,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.cantUseTwice = TRUE,
+ .battleAnimScript = Move_GIGATON_HAMMER,
},
[MOVE_COMEUPPANCE] =
@@ -19260,6 +20084,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.makesContact = TRUE,
.meFirstBanned = TRUE,
.metronomeBanned = TRUE,
+ .battleAnimScript = Move_COMEUPPANCE,
},
[MOVE_AQUA_CUTTER] =
@@ -19278,6 +20103,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.slicingMove = TRUE,
+ .battleAnimScript = Move_AQUA_CUTTER,
},
[MOVE_BLAZING_TORQUE] =
@@ -19306,6 +20132,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.moveEffect = MOVE_EFFECT_BURN,
.chance = 30,
}),
+ .battleAnimScript = Move_BLAZING_TORQUE,
},
[MOVE_WICKED_TORQUE] =
@@ -19334,6 +20161,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.moveEffect = MOVE_EFFECT_SLEEP,
.chance = 10,
}),
+ .battleAnimScript = Move_WICKED_TORQUE,
},
[MOVE_NOXIOUS_TORQUE] =
@@ -19362,6 +20190,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.moveEffect = MOVE_EFFECT_POISON,
.chance = 30,
}),
+ .battleAnimScript = Move_NOXIOUS_TORQUE,
},
[MOVE_COMBAT_TORQUE] =
@@ -19390,6 +20219,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.moveEffect = MOVE_EFFECT_PARALYSIS,
.chance = 30,
}),
+ .battleAnimScript = Move_COMBAT_TORQUE,
},
[MOVE_MAGICAL_TORQUE] =
@@ -19418,6 +20248,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.moveEffect = MOVE_EFFECT_CONFUSION,
.chance = 30,
}),
+ .battleAnimScript = Move_MAGICAL_TORQUE,
},
[MOVE_PSYBLADE] =
@@ -19436,6 +20267,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.category = DAMAGE_CATEGORY_PHYSICAL,
.makesContact = TRUE,
.slicingMove = TRUE,
+ .battleAnimScript = Move_PSYBLADE,
},
[MOVE_HYDRO_STEAM] =
@@ -19453,6 +20285,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_SPECIAL,
.thawsUser = TRUE,
+ .battleAnimScript = Move_HYDRO_STEAM,
},
[MOVE_BLOOD_MOON] =
@@ -19470,6 +20303,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_SPECIAL,
.cantUseTwice = TRUE,
+ .battleAnimScript = Move_BLOOD_MOON,
},
[MOVE_MATCHA_GOTCHA] =
@@ -19493,6 +20327,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.moveEffect = MOVE_EFFECT_BURN,
.chance = 20,
}),
+ .battleAnimScript = Move_MATCHA_GOTCHA,
},
[MOVE_SYRUP_BOMB] =
@@ -19515,6 +20350,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.moveEffect = MOVE_EFFECT_SYRUP_BOMB,
.chance = 100,
}),
+ .battleAnimScript = Move_SYRUP_BOMB,
},
[MOVE_IVY_CUDGEL] =
@@ -19533,6 +20369,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.metronomeBanned = TRUE,
+ .battleAnimScript = Move_IVY_CUDGEL,
},
[MOVE_ELECTRO_SHOT] =
@@ -19555,6 +20392,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.self = TRUE,
.onChargeTurnOnly = TRUE,
}, SHEER_FORCE_HACK),
+ .battleAnimScript = Move_ELECTRO_SHOT,
},
[MOVE_TERA_STARSTORM] =
@@ -19563,26 +20401,27 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.description = COMPOUND_STRING(
"Damages all opponents if user is\n"
"Stellar form Terapagos."),
- .effect = EFFECT_PLACEHOLDER, //EFFECT_TERA_STARSTORM
+ .effect = EFFECT_TERA_STARSTORM,
.power = 120,
- .type = TYPE_NORMAL, // Stellar type if used by Terapagos-Stellar
+ .type = TYPE_NORMAL,
.accuracy = 100,
.pp = 5,
- .target = MOVE_TARGET_SELECTED, // MOVE_TARGET_BOTH if used by Terapagos-Stellar
+ .target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_SPECIAL,
.assistBanned = TRUE,
.copycatBanned = TRUE,
.mimicBanned = TRUE,
.sketchBanned = (B_SKETCH_BANS >= GEN_9),
+ .battleAnimScript = Move_TERA_STARSTORM,
},
[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,
@@ -19591,6 +20430,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_SPECIAL,
+ .battleAnimScript = Move_FICKLE_BEAM,
},
[MOVE_BURNING_BULWARK] =
@@ -19613,6 +20453,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.metronomeBanned = TRUE,
.copycatBanned = TRUE,
.assistBanned = TRUE,
+ .battleAnimScript = Move_BURNING_BULWARK,
},
[MOVE_THUNDERCLAP] =
@@ -19627,6 +20468,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.target = MOVE_TARGET_SELECTED,
.priority = 1,
.category = DAMAGE_CATEGORY_SPECIAL,
+ .battleAnimScript = Move_THUNDERCLAP,
},
[MOVE_MIGHTY_CLEAVE] =
@@ -19644,6 +20486,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.makesContact = TRUE,
.ignoresProtect = TRUE,
.slicingMove = TRUE,
+ .battleAnimScript = Move_MIGHTY_CLEAVE,
},
[MOVE_TACHYON_CUTTER] =
@@ -19662,6 +20505,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.category = DAMAGE_CATEGORY_SPECIAL,
.strikeCount = 2,
.slicingMove = TRUE,
+ .battleAnimScript = Move_TACHYON_CUTTER,
},
[MOVE_HARD_PRESS] =
@@ -19678,6 +20522,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = 100,
.makesContact = TRUE,
+ .battleAnimScript = Move_HARD_PRESS,
},
[MOVE_DRAGON_CHEER] =
@@ -19695,6 +20540,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_STATUS,
.ignoresSubstitute = TRUE,
+ .battleAnimScript = Move_DRAGON_CHEER,
},
[MOVE_ALLURING_VOICE] =
@@ -19718,6 +20564,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.onlyIfTargetRaisedStats = TRUE,
.chance = 100,
}),
+ .battleAnimScript = Move_ALLURING_VOICE,
},
[MOVE_TEMPER_FLARE] =
@@ -19735,6 +20582,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.makesContact = TRUE,
+ .battleAnimScript = Move_TEMPER_FLARE,
},
[MOVE_SUPERCELL_SLAM] =
@@ -19752,6 +20600,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.makesContact = TRUE,
+ .battleAnimScript = Move_SUPERCELL_SLAM,
},
[MOVE_PSYCHIC_NOISE] =
@@ -19774,6 +20623,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.moveEffect = MOVE_EFFECT_PSYCHIC_NOISE,
.chance = 100,
}),
+ .battleAnimScript = Move_PSYCHIC_NOISE,
},
[MOVE_UPPER_HAND] =
@@ -19795,6 +20645,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.moveEffect = MOVE_EFFECT_FLINCH,
.chance = 100,
}),
+ .battleAnimScript = Move_UPPER_HAND,
},
[MOVE_MALIGNANT_CHAIN] =
@@ -19815,6 +20666,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.moveEffect = MOVE_EFFECT_TOXIC,
.chance = 50,
}),
+ .battleAnimScript = Move_MALIGNANT_CHAIN,
},
// Z-Moves
@@ -19830,6 +20682,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,
},
[MOVE_ALL_OUT_PUMMELING] =
{
@@ -19843,6 +20696,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
+ .battleAnimScript = Move_ALL_OUT_PUMMELING,
},
[MOVE_SUPERSONIC_SKYSTRIKE] =
{
@@ -19856,6 +20710,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
+ .battleAnimScript = Move_SUPERSONIC_SKYSTRIKE,
},
[MOVE_ACID_DOWNPOUR] =
{
@@ -19869,6 +20724,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
+ .battleAnimScript = Move_ACID_DOWNPOUR,
},
[MOVE_TECTONIC_RAGE] =
{
@@ -19883,6 +20739,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.skyBattleBanned = B_EXTRAPOLATED_MOVE_FLAGS,
+ .battleAnimScript = Move_TECTONIC_RAGE,
},
[MOVE_CONTINENTAL_CRUSH] =
{
@@ -19896,6 +20753,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
+ .battleAnimScript = Move_CONTINENTAL_CRUSH,
},
[MOVE_SAVAGE_SPIN_OUT] =
{
@@ -19909,6 +20767,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
+ .battleAnimScript = Move_SAVAGE_SPIN_OUT,
},
[MOVE_NEVER_ENDING_NIGHTMARE] =
{
@@ -19922,6 +20781,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
+ .battleAnimScript = Move_NEVER_ENDING_NIGHTMARE,
},
[MOVE_CORKSCREW_CRASH] =
{
@@ -19935,6 +20795,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
+ .battleAnimScript = Move_CORKSCREW_CRASH,
},
[MOVE_INFERNO_OVERDRIVE] =
{
@@ -19948,6 +20809,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
+ .battleAnimScript = Move_INFERNO_OVERDRIVE,
},
[MOVE_HYDRO_VORTEX] =
{
@@ -19961,6 +20823,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
+ .battleAnimScript = Move_HYDRO_VORTEX,
},
[MOVE_BLOOM_DOOM] =
{
@@ -19974,6 +20837,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
+ .battleAnimScript = Move_BLOOM_DOOM,
},
[MOVE_GIGAVOLT_HAVOC] =
{
@@ -19987,6 +20851,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
+ .battleAnimScript = Move_GIGAVOLT_HAVOC,
},
[MOVE_SHATTERED_PSYCHE] =
{
@@ -20000,6 +20865,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
+ .battleAnimScript = Move_SHATTERED_PSYCHE,
},
[MOVE_SUBZERO_SLAMMER] =
{
@@ -20013,6 +20879,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
+ .battleAnimScript = Move_SUBZERO_SLAMMER,
},
[MOVE_DEVASTATING_DRAKE] =
{
@@ -20026,6 +20893,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
+ .battleAnimScript = Move_DEVASTATING_DRAKE,
},
[MOVE_BLACK_HOLE_ECLIPSE] =
{
@@ -20039,6 +20907,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
+ .battleAnimScript = Move_BLACK_HOLE_ECLIPSE,
},
[MOVE_TWINKLE_TACKLE] =
{
@@ -20052,6 +20921,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
+ .battleAnimScript = Move_TWINKLE_TACKLE,
},
[MOVE_CATASTROPIKA] =
{
@@ -20065,6 +20935,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
+ .battleAnimScript = Move_CATASTROPIKA,
},
[MOVE_10000000_VOLT_THUNDERBOLT] =
{
@@ -20079,6 +20950,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_SPECIAL,
+ .battleAnimScript = Move_10000000_VOLT_THUNDERBOLT,
},
[MOVE_STOKED_SPARKSURFER] =
{
@@ -20096,6 +20968,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.moveEffect = MOVE_EFFECT_PARALYSIS,
.chance = 100,
}),
+ .battleAnimScript = Move_STOKED_SPARKSURFER,
},
[MOVE_EXTREME_EVOBOOST] =
{
@@ -20109,6 +20982,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.target = MOVE_TARGET_USER,
.priority = 0,
.category = DAMAGE_CATEGORY_STATUS,
+ .battleAnimScript = Move_EXTREME_EVOBOOST,
},
[MOVE_PULVERIZING_PANCAKE] =
{
@@ -20122,6 +20996,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
+ .battleAnimScript = Move_PULVERIZING_PANCAKE,
},
[MOVE_GENESIS_SUPERNOVA] =
{
@@ -20136,6 +21011,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,
},
[MOVE_SINISTER_ARROW_RAID] =
{
@@ -20149,6 +21025,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
+ .battleAnimScript = Move_SINISTER_ARROW_RAID,
},
[MOVE_MALICIOUS_MOONSAULT] =
{
@@ -20162,6 +21039,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
+ .battleAnimScript = Move_MALICIOUS_MOONSAULT,
},
[MOVE_OCEANIC_OPERETTA] =
{
@@ -20175,6 +21053,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_SPECIAL,
+ .battleAnimScript = Move_OCEANIC_OPERETTA,
},
[MOVE_SPLINTERED_STORMSHARDS] =
{
@@ -20189,6 +21068,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,
},
[MOVE_LETS_SNUGGLE_FOREVER] =
{
@@ -20202,6 +21082,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
+ .battleAnimScript = Move_LETS_SNUGGLE_FOREVER,
},
[MOVE_CLANGOROUS_SOULBLAZE] =
{
@@ -20222,12 +21103,13 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.self = TRUE,
.chance = 100,
}),
+ .battleAnimScript = Move_CLANGOROUS_SOULBLAZE,
},
[MOVE_GUARDIAN_OF_ALOLA] =
{
- .name = COMPOUND_STRING("Guardian Of Alola"),
+ .name = COMPOUND_STRING("Guardian of Alola"),
.description = sNullDescription,
- .effect = EFFECT_SUPER_FANG,
+ .effect = EFFECT_GUARDIAN_OF_ALOLA,
.power = 1,
.type = TYPE_FAIRY,
.accuracy = 0,
@@ -20235,6 +21117,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.target = MOVE_TARGET_SELECTED,
.priority = 0,
.category = DAMAGE_CATEGORY_SPECIAL,
+ .battleAnimScript = Move_GUARDIAN_OF_ALOLA,
},
[MOVE_SEARING_SUNRAZE_SMASH] =
{
@@ -20249,6 +21132,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.ignoresTargetAbility = TRUE,
+ .battleAnimScript = Move_SEARING_SUNRAZE_SMASH,
},
[MOVE_MENACING_MOONRAZE_MAELSTROM] =
{
@@ -20263,12 +21147,13 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_SPECIAL,
.ignoresTargetAbility = TRUE,
+ .battleAnimScript = Move_MENACING_MOONRAZE_MAELSTROM,
},
[MOVE_LIGHT_THAT_BURNS_THE_SKY] =
{
.name = COMPOUND_STRING("Light That Burns The Sky"),
.description = sNullDescription,
- .effect = EFFECT_HIT,
+ .effect = EFFECT_PHOTON_GEYSER,
.power = 200,
.type = TYPE_PSYCHIC,
.accuracy = 0,
@@ -20277,6 +21162,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_SPECIAL,
.ignoresTargetAbility = TRUE,
+ .battleAnimScript = Move_LIGHT_THAT_BURNS_THE_SKY,
},
[MOVE_SOUL_STEALING_7_STAR_STRIKE] =
{
@@ -20290,6 +21176,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,
},
[MOVE_MAX_GUARD] =
@@ -20304,6 +21191,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.target = MOVE_TARGET_USER,
.priority = 4,
.category = DAMAGE_CATEGORY_STATUS,
+ .battleAnimScript = Move_MAX_GUARD,
},
[MOVE_MAX_FLARE] =
@@ -20319,6 +21207,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = MAX_EFFECT_SUN,
+ .battleAnimScript = Move_MAX_FLARE,
},
[MOVE_MAX_FLUTTERBY] =
@@ -20334,6 +21223,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = MAX_EFFECT_LOWER_SP_ATK,
+ .battleAnimScript = Move_MAX_FLUTTERBY,
},
[MOVE_MAX_LIGHTNING] =
@@ -20349,6 +21239,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = MAX_EFFECT_ELECTRIC_TERRAIN,
+ .battleAnimScript = Move_MAX_LIGHTNING,
},
[MOVE_MAX_STRIKE] =
@@ -20364,6 +21255,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = MAX_EFFECT_LOWER_SPEED,
+ .battleAnimScript = Move_MAX_STRIKE,
},
[MOVE_MAX_KNUCKLE] =
@@ -20379,6 +21271,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = MAX_EFFECT_RAISE_TEAM_ATTACK,
+ .battleAnimScript = Move_MAX_KNUCKLE,
},
[MOVE_MAX_PHANTASM] =
@@ -20394,6 +21287,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = MAX_EFFECT_LOWER_DEFENSE,
+ .battleAnimScript = Move_MAX_PHANTASM,
},
[MOVE_MAX_HAILSTORM] =
@@ -20409,6 +21303,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = MAX_EFFECT_HAIL,
+ .battleAnimScript = Move_MAX_HAILSTORM,
},
[MOVE_MAX_OOZE] =
@@ -20424,6 +21319,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,
},
[MOVE_MAX_GEYSER] =
@@ -20439,6 +21335,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = MAX_EFFECT_RAIN,
+ .battleAnimScript = Move_MAX_GEYSER,
},
[MOVE_MAX_AIRSTREAM] =
@@ -20454,6 +21351,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = MAX_EFFECT_RAISE_TEAM_SPEED,
+ .battleAnimScript = Move_MAX_AIRSTREAM,
},
[MOVE_MAX_STARFALL] =
@@ -20469,6 +21367,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = MAX_EFFECT_MISTY_TERRAIN,
+ .battleAnimScript = Move_MAX_STARFALL,
},
[MOVE_MAX_WYRMWIND] =
@@ -20484,6 +21383,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = MAX_EFFECT_LOWER_ATTACK,
+ .battleAnimScript = Move_MAX_WYRMWIND,
},
[MOVE_MAX_MINDSTORM] =
@@ -20499,6 +21399,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = MAX_EFFECT_PSYCHIC_TERRAIN,
+ .battleAnimScript = Move_MAX_MINDSTORM,
},
[MOVE_MAX_ROCKFALL] =
@@ -20514,6 +21415,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = MAX_EFFECT_SANDSTORM,
+ .battleAnimScript = Move_MAX_ROCKFALL,
},
[MOVE_MAX_QUAKE] =
@@ -20530,6 +21432,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,
},
[MOVE_MAX_DARKNESS] =
@@ -20545,6 +21448,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = MAX_EFFECT_LOWER_SP_DEF,
+ .battleAnimScript = Move_MAX_DARKNESS,
},
[MOVE_MAX_OVERGROWTH] =
@@ -20560,6 +21464,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = MAX_EFFECT_GRASSY_TERRAIN,
+ .battleAnimScript = Move_MAX_OVERGROWTH,
},
[MOVE_MAX_STEELSPIKE] =
@@ -20575,6 +21480,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = MAX_EFFECT_RAISE_TEAM_DEFENSE,
+ .battleAnimScript = Move_MAX_STEELSPIKE,
},
[MOVE_G_MAX_VINE_LASH] =
@@ -20590,6 +21496,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,
},
[MOVE_G_MAX_WILDFIRE] =
@@ -20605,6 +21512,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = MAX_EFFECT_WILDFIRE,
+ .battleAnimScript = Move_G_MAX_WILDFIRE,
},
[MOVE_G_MAX_CANNONADE] =
@@ -20620,6 +21528,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = MAX_EFFECT_CANNONADE,
+ .battleAnimScript = Move_G_MAX_CANNONADE,
},
[MOVE_G_MAX_BEFUDDLE] =
@@ -20635,6 +21544,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,
},
[MOVE_G_MAX_VOLT_CRASH] =
@@ -20650,6 +21560,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,
},
[MOVE_G_MAX_GOLD_RUSH] =
@@ -20665,6 +21576,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,
},
[MOVE_G_MAX_CHI_STRIKE] =
@@ -20680,6 +21592,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,
},
[MOVE_G_MAX_TERROR] =
@@ -20695,6 +21608,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = MAX_EFFECT_MEAN_LOOK,
+ .battleAnimScript = Move_G_MAX_TERROR,
},
[MOVE_G_MAX_FOAM_BURST] =
@@ -20710,6 +21624,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,
},
[MOVE_G_MAX_RESONANCE] =
@@ -20725,6 +21640,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = MAX_EFFECT_AURORA_VEIL,
+ .battleAnimScript = Move_G_MAX_RESONANCE,
},
[MOVE_G_MAX_CUDDLE] =
@@ -20740,6 +21656,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = MAX_EFFECT_INFATUATE_FOES,
+ .battleAnimScript = Move_G_MAX_CUDDLE,
},
[MOVE_G_MAX_REPLENISH] =
@@ -20755,6 +21672,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = MAX_EFFECT_RECYCLE_BERRIES,
+ .battleAnimScript = Move_G_MAX_REPLENISH,
},
[MOVE_G_MAX_MALODOR] =
@@ -20770,6 +21688,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = MAX_EFFECT_POISON_FOES,
+ .battleAnimScript = Move_G_MAX_MALODOR,
},
[MOVE_G_MAX_MELTDOWN] =
@@ -20785,6 +21704,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = MAX_EFFECT_TORMENT_FOES,
+ .battleAnimScript = Move_G_MAX_MELTDOWN,
},
[MOVE_G_MAX_DRUM_SOLO] =
@@ -20801,6 +21721,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = MAX_EFFECT_FIXED_POWER, //EFFECT TODO
.ignoresTargetAbility = TRUE,
+ .battleAnimScript = Move_G_MAX_DRUM_SOLO,
},
[MOVE_G_MAX_FIREBALL] =
@@ -20817,6 +21738,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = MAX_EFFECT_FIXED_POWER, //EFFECT TODO
.ignoresTargetAbility = TRUE,
+ .battleAnimScript = Move_G_MAX_FIREBALL,
},
[MOVE_G_MAX_HYDROSNIPE] =
@@ -20833,6 +21755,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = MAX_EFFECT_FIXED_POWER, //EFFECT TODO
.ignoresTargetAbility = TRUE,
+ .battleAnimScript = Move_G_MAX_HYDROSNIPE,
},
[MOVE_G_MAX_WIND_RAGE] =
@@ -20848,6 +21771,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = MAX_EFFECT_DEFOG,
+ .battleAnimScript = Move_G_MAX_WIND_RAGE,
},
[MOVE_G_MAX_GRAVITAS] =
@@ -20863,6 +21787,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = MAX_EFFECT_GRAVITY,
+ .battleAnimScript = Move_G_MAX_GRAVITAS,
},
[MOVE_G_MAX_STONESURGE] =
@@ -20878,6 +21803,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = MAX_EFFECT_STEALTH_ROCK,
+ .battleAnimScript = Move_G_MAX_STONESURGE,
},
[MOVE_G_MAX_VOLCALITH] =
@@ -20893,6 +21819,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = MAX_EFFECT_VOLCALITH,
+ .battleAnimScript = Move_G_MAX_VOLCALITH,
},
[MOVE_G_MAX_TARTNESS] =
@@ -20908,6 +21835,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,
},
[MOVE_G_MAX_SWEETNESS] =
@@ -20923,6 +21851,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = MAX_EFFECT_AROMATHERAPY,
+ .battleAnimScript = Move_G_MAX_SWEETNESS,
},
[MOVE_G_MAX_SANDBLAST] =
@@ -20938,6 +21867,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = MAX_EFFECT_SANDBLAST_FOES,
+ .battleAnimScript = Move_G_MAX_SANDBLAST,
},
[MOVE_G_MAX_STUN_SHOCK] =
@@ -20953,6 +21883,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,
},
[MOVE_G_MAX_CENTIFERNO] =
@@ -20968,6 +21899,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,
},
[MOVE_G_MAX_SMITE] =
@@ -20983,6 +21915,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = MAX_EFFECT_CONFUSE_FOES,
+ .battleAnimScript = Move_G_MAX_SMITE,
},
@@ -20999,6 +21932,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = MAX_EFFECT_YAWN_FOE,
+ .battleAnimScript = Move_G_MAX_SNOOZE,
},
[MOVE_G_MAX_FINALE] =
@@ -21014,6 +21948,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = MAX_EFFECT_HEAL_TEAM,
+ .battleAnimScript = Move_G_MAX_FINALE,
},
[MOVE_G_MAX_STEELSURGE] =
@@ -21029,6 +21964,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = MAX_EFFECT_STEELSURGE,
+ .battleAnimScript = Move_G_MAX_STEELSURGE,
},
[MOVE_G_MAX_DEPLETION] =
@@ -21044,6 +21980,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = MAX_EFFECT_SPITE,
+ .battleAnimScript = Move_G_MAX_DEPLETION,
},
[MOVE_G_MAX_ONE_BLOW] =
@@ -21059,6 +21996,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = MAX_EFFECT_BYPASS_PROTECT, //EFFECT TODO
+ .battleAnimScript = Move_G_MAX_ONE_BLOW,
},
[MOVE_G_MAX_RAPID_FLOW] =
@@ -21074,6 +22012,7 @@ const struct MoveInfo gMovesInfo[MOVES_COUNT_DYNAMAX] =
.priority = 0,
.category = DAMAGE_CATEGORY_PHYSICAL,
.argument = MAX_EFFECT_BYPASS_PROTECT, //EFFECT TODO
+ .battleAnimScript = Move_G_MAX_RAPID_FLOW,
},
};
diff --git a/src/data/object_events/movement_action_func_tables.h b/src/data/object_events/movement_action_func_tables.h
index e16cae74fcdc..a605b3f0b2d4 100755
--- a/src/data/object_events/movement_action_func_tables.h
+++ b/src/data/object_events/movement_action_func_tables.h
@@ -66,6 +66,9 @@ u8 MovementAction_WalkInPlaceSlowLeft_Step0(struct ObjectEvent *, struct Sprite
u8 MovementAction_WalkInPlaceSlowRight_Step0(struct ObjectEvent *, struct Sprite *);
u8 MovementAction_WalkInPlaceNormalDown_Step0(struct ObjectEvent *, struct Sprite *);
u8 MovementAction_WalkInPlace_Step1(struct ObjectEvent *, struct Sprite *);
+u8 MovementAction_ExitPokeball_Step1(struct ObjectEvent *, struct Sprite *);
+u8 MovementAction_EnterPokeball_Step1(struct ObjectEvent *, struct Sprite *);
+u8 MovementAction_EnterPokeball_Step2(struct ObjectEvent *, struct Sprite *);
u8 MovementAction_WalkInPlaceNormalUp_Step0(struct ObjectEvent *, struct Sprite *);
u8 MovementAction_WalkInPlaceNormalLeft_Step0(struct ObjectEvent *, struct Sprite *);
u8 MovementAction_WalkInPlaceNormalRight_Step0(struct ObjectEvent *, struct Sprite *);
@@ -77,6 +80,8 @@ u8 MovementAction_WalkInPlaceFasterDown_Step0(struct ObjectEvent *, struct Sprit
u8 MovementAction_WalkInPlaceFasterUp_Step0(struct ObjectEvent *, struct Sprite *);
u8 MovementAction_WalkInPlaceFasterLeft_Step0(struct ObjectEvent *, struct Sprite *);
u8 MovementAction_WalkInPlaceFasterRight_Step0(struct ObjectEvent *, struct Sprite *);
+u8 MovementAction_ExitPokeball_Step0(struct ObjectEvent *, struct Sprite *);
+u8 MovementAction_EnterPokeball_Step0(struct ObjectEvent *, struct Sprite *);
u8 MovementAction_RideWaterCurrentDown_Step0(struct ObjectEvent *, struct Sprite *);
u8 MovementAction_RideWaterCurrentDown_Step1(struct ObjectEvent *, struct Sprite *);
u8 MovementAction_RideWaterCurrentUp_Step0(struct ObjectEvent *, struct Sprite *);
@@ -303,6 +308,8 @@ u8 (*const gMovementActionFuncs_WalkInPlaceFasterDown[])(struct ObjectEvent *, s
u8 (*const gMovementActionFuncs_WalkInPlaceFasterUp[])(struct ObjectEvent *, struct Sprite *);
u8 (*const gMovementActionFuncs_WalkInPlaceFasterLeft[])(struct ObjectEvent *, struct Sprite *);
u8 (*const gMovementActionFuncs_WalkInPlaceFasterRight[])(struct ObjectEvent *, struct Sprite *);
+u8 (*const gMovementActionFuncs_ExitPokeball[])(struct ObjectEvent *, struct Sprite *);
+u8 (*const gMovementActionFuncs_EnterPokeball[])(struct ObjectEvent *, struct Sprite *);
u8 (*const gMovementActionFuncs_RideWaterCurrentDown[])(struct ObjectEvent *, struct Sprite *);
u8 (*const gMovementActionFuncs_RideWaterCurrentUp[])(struct ObjectEvent *, struct Sprite *);
u8 (*const gMovementActionFuncs_RideWaterCurrentLeft[])(struct ObjectEvent *, struct Sprite *);
@@ -584,6 +591,8 @@ u8 (*const *const gMovementActionFuncs[])(struct ObjectEvent *, struct Sprite *)
[MOVEMENT_ACTION_FLY_DOWN] = gMovementActionFuncs_FlyDown,
[MOVEMENT_ACTION_EMOTE_X] = gMovementActionFuncs_EmoteX,
[MOVEMENT_ACTION_EMOTE_DOUBLE_EXCL_MARK] = gMovementActionFuncs_EmoteDoubleExclMark,
+ [MOVEMENT_ACTION_EXIT_POKEBALL] = gMovementActionFuncs_ExitPokeball,
+ [MOVEMENT_ACTION_ENTER_POKEBALL] = gMovementActionFuncs_EnterPokeball,
};
u8 (*const gMovementActionFuncs_FaceDown[])(struct ObjectEvent *, struct Sprite *) = {
@@ -877,6 +886,18 @@ u8 (*const gMovementActionFuncs_WalkInPlaceFasterDown[])(struct ObjectEvent *, s
MovementAction_PauseSpriteAnim,
};
+u8 (*const gMovementActionFuncs_ExitPokeball[])(struct ObjectEvent *, struct Sprite *) = {
+ MovementAction_ExitPokeball_Step0,
+ MovementAction_ExitPokeball_Step1,
+ MovementAction_PauseSpriteAnim,
+};
+
+u8 (*const gMovementActionFuncs_EnterPokeball[])(struct ObjectEvent *, struct Sprite *) = {
+ MovementAction_EnterPokeball_Step0,
+ MovementAction_EnterPokeball_Step1,
+ MovementAction_EnterPokeball_Step2,
+};
+
u8 (*const gMovementActionFuncs_WalkInPlaceFasterUp[])(struct ObjectEvent *, struct Sprite *) = {
MovementAction_WalkInPlaceFasterUp_Step0,
MovementAction_WalkInPlace_Step1,
diff --git a/src/data/object_events/movement_type_func_tables.h b/src/data/object_events/movement_type_func_tables.h
index f5189d838f74..749c14969c58 100755
--- a/src/data/object_events/movement_type_func_tables.h
+++ b/src/data/object_events/movement_type_func_tables.h
@@ -401,6 +401,26 @@ bool8 (*const gCopyPlayerMovementFuncs[])(struct ObjectEvent *, struct Sprite *,
[COPY_MOVE_EMPTY_2] = CopyablePlayerMovement_None,
};
+u8 (*const gMovementTypeFuncs_FollowPlayer[])(struct ObjectEvent *, struct Sprite *) = {
+ MovementType_FollowPlayer_Shadow,
+ MovementType_FollowPlayer_Active,
+ MovementType_FollowPlayer_Moving,
+};
+
+bool8 (*const gFollowPlayerMovementFuncs[])(struct ObjectEvent *, struct Sprite *, u8, bool8(u8)) = {
+ [COPY_MOVE_NONE] = FollowablePlayerMovement_Idle,
+ [COPY_MOVE_FACE] = FollowablePlayerMovement_Idle,
+ [COPY_MOVE_WALK] = FollowablePlayerMovement_Step,
+ [COPY_MOVE_WALK_FAST] = FollowablePlayerMovement_GoSpeed1,
+ [COPY_MOVE_WALK_FASTER] = FollowablePlayerMovement_GoSpeed2,
+ [COPY_MOVE_SLIDE] = FollowablePlayerMovement_Slide,
+ [COPY_MOVE_JUMP_IN_PLACE] = FollowablePlayerMovement_JumpInPlace,
+ [COPY_MOVE_JUMP] = FollowablePlayerMovement_GoSpeed4,
+ [COPY_MOVE_JUMP2] = FollowablePlayerMovement_Step,
+ [COPY_MOVE_EMPTY_1] = FollowablePlayerMovement_Idle,
+ [COPY_MOVE_EMPTY_2] = FollowablePlayerMovement_Idle,
+};
+
u8 (*const gMovementTypeFuncs_CopyPlayerInGrass[])(struct ObjectEvent *, struct Sprite *) = {
MovementType_CopyPlayer_Step0,
MovementType_CopyPlayerInGrass_Step1,
diff --git a/src/data/object_events/object_event_anims.h b/src/data/object_events/object_event_anims.h
index e68910d1592d..bde3c3b0d5db 100755
--- a/src/data/object_events/object_event_anims.h
+++ b/src/data/object_events/object_event_anims.h
@@ -187,18 +187,42 @@ static const union AnimCmd sAnim_FaceNorth[] =
ANIMCMD_JUMP(0),
};
+static const union AnimCmd sAnim_FaceNorth2F[] =
+{
+ ANIMCMD_FRAME(2, 16),
+ ANIMCMD_JUMP(0),
+};
+
static const union AnimCmd sAnim_FaceWest[] =
{
ANIMCMD_FRAME(2, 16),
ANIMCMD_JUMP(0),
};
+static const union AnimCmd sAnim_FaceWest2F[] =
+{
+ ANIMCMD_FRAME(4, 16),
+ ANIMCMD_JUMP(0),
+};
+
static const union AnimCmd sAnim_FaceEast[] =
{
ANIMCMD_FRAME(2, 16, .hFlip = TRUE),
ANIMCMD_JUMP(0),
};
+static const union AnimCmd sAnim_FaceEast2F[] =
+{
+ ANIMCMD_FRAME(4, 16, .hFlip = TRUE),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd sAnim_FaceEast2F_Asym[] =
+{
+ ANIMCMD_FRAME(6, 16),
+ ANIMCMD_JUMP(0),
+};
+
static const union AnimCmd sAnim_GoSouth[] =
{
ANIMCMD_FRAME(3, 8),
@@ -208,6 +232,15 @@ static const union AnimCmd sAnim_GoSouth[] =
ANIMCMD_JUMP(0),
};
+static const union AnimCmd sAnim_GoSouth2F[] =
+{
+ ANIMCMD_FRAME(0, 6),
+ ANIMCMD_FRAME(1, 6),
+ ANIMCMD_FRAME(1, 6),
+ ANIMCMD_FRAME(0, 6),
+ ANIMCMD_JUMP(0),
+};
+
static const union AnimCmd sAnim_GoNorth[] =
{
ANIMCMD_FRAME(5, 8),
@@ -217,6 +250,15 @@ static const union AnimCmd sAnim_GoNorth[] =
ANIMCMD_JUMP(0),
};
+static const union AnimCmd sAnim_GoNorth2F[] =
+{
+ ANIMCMD_FRAME(2, 6),
+ ANIMCMD_FRAME(3, 6),
+ ANIMCMD_FRAME(3, 6),
+ ANIMCMD_FRAME(2, 6),
+ ANIMCMD_JUMP(0),
+};
+
static const union AnimCmd sAnim_GoWest[] =
{
ANIMCMD_FRAME(7, 8),
@@ -226,6 +268,15 @@ static const union AnimCmd sAnim_GoWest[] =
ANIMCMD_JUMP(0),
};
+static const union AnimCmd sAnim_GoWest2F[] =
+{
+ ANIMCMD_FRAME(4, 6),
+ ANIMCMD_FRAME(5, 6),
+ ANIMCMD_FRAME(5, 6),
+ ANIMCMD_FRAME(4, 6),
+ ANIMCMD_JUMP(0),
+};
+
static const union AnimCmd sAnim_GoEast[] =
{
ANIMCMD_FRAME(7, 8, .hFlip = TRUE),
@@ -235,6 +286,24 @@ static const union AnimCmd sAnim_GoEast[] =
ANIMCMD_JUMP(0),
};
+static const union AnimCmd sAnim_GoEast2F[] =
+{
+ ANIMCMD_FRAME(4, 6, .hFlip = TRUE),
+ ANIMCMD_FRAME(5, 6, .hFlip = TRUE),
+ ANIMCMD_FRAME(5, 6, .hFlip = TRUE),
+ ANIMCMD_FRAME(4, 6, .hFlip = TRUE),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd sAnim_GoEast2F_Asym[] =
+{
+ ANIMCMD_FRAME(6, 6),
+ ANIMCMD_FRAME(7, 6),
+ ANIMCMD_FRAME(7, 6),
+ ANIMCMD_FRAME(6, 6),
+ ANIMCMD_JUMP(0),
+};
+
static const union AnimCmd sAnim_GoFastSouth[] =
{
ANIMCMD_FRAME(3, 4),
@@ -244,6 +313,15 @@ static const union AnimCmd sAnim_GoFastSouth[] =
ANIMCMD_JUMP(0),
};
+static const union AnimCmd sAnim_GoFastSouth2F[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(1, 4),
+ ANIMCMD_FRAME(1, 4),
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_JUMP(0),
+};
+
static const union AnimCmd sAnim_GoFastNorth[] =
{
ANIMCMD_FRAME(5, 4),
@@ -253,6 +331,15 @@ static const union AnimCmd sAnim_GoFastNorth[] =
ANIMCMD_JUMP(0),
};
+static const union AnimCmd sAnim_GoFastNorth2F[] =
+{
+ ANIMCMD_FRAME(2, 4),
+ ANIMCMD_FRAME(3, 4),
+ ANIMCMD_FRAME(3, 4),
+ ANIMCMD_FRAME(2, 4),
+ ANIMCMD_JUMP(0),
+};
+
static const union AnimCmd sAnim_GoFastWest[] =
{
ANIMCMD_FRAME(7, 4),
@@ -262,6 +349,15 @@ static const union AnimCmd sAnim_GoFastWest[] =
ANIMCMD_JUMP(0),
};
+static const union AnimCmd sAnim_GoFastWest2F[] =
+{
+ ANIMCMD_FRAME(4, 4),
+ ANIMCMD_FRAME(5, 4),
+ ANIMCMD_FRAME(5, 4),
+ ANIMCMD_FRAME(4, 4),
+ ANIMCMD_JUMP(0),
+};
+
static const union AnimCmd sAnim_GoFastEast[] =
{
ANIMCMD_FRAME(7, 4, .hFlip = TRUE),
@@ -271,6 +367,24 @@ static const union AnimCmd sAnim_GoFastEast[] =
ANIMCMD_JUMP(0),
};
+static const union AnimCmd sAnim_GoFastEast2F[] =
+{
+ ANIMCMD_FRAME(4, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(5, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(5, 4, .hFlip = TRUE),
+ ANIMCMD_FRAME(4, 4, .hFlip = TRUE),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd sAnim_GoFastEast2F_Asym[] =
+{
+ ANIMCMD_FRAME(6, 4),
+ ANIMCMD_FRAME(7, 4),
+ ANIMCMD_FRAME(7, 4),
+ ANIMCMD_FRAME(6, 4),
+ ANIMCMD_JUMP(0),
+};
+
static const union AnimCmd sAnim_GoFasterSouth[] =
{
ANIMCMD_FRAME(3, 2),
@@ -280,6 +394,83 @@ static const union AnimCmd sAnim_GoFasterSouth[] =
ANIMCMD_JUMP(0),
};
+static const union AnimCmd sAnim_ExitPokeballSouth[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_FRAME(1, 1),
+ ANIMCMD_FRAME(2, 1),
+ ANIMCMD_FRAME(3, 1),
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd sAnim_ExitPokeballNorth[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_FRAME(1, 1),
+ ANIMCMD_FRAME(2, 1),
+ ANIMCMD_FRAME(3, 1),
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_FRAME(2, 8),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd sAnim_ExitPokeballWest[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_FRAME(1, 1),
+ ANIMCMD_FRAME(2, 1),
+ ANIMCMD_FRAME(3, 1),
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_FRAME(4, 8),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd sAnim_ExitPokeballEast[] =
+{
+ ANIMCMD_FRAME(0, 1, .hFlip = TRUE),
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_FRAME(1, 1),
+ ANIMCMD_FRAME(2, 1),
+ ANIMCMD_FRAME(3, 1),
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_FRAME(4, 8, .hFlip = TRUE),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd sAnim_ExitPokeballEast_Asym[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_FRAME(1, 1),
+ ANIMCMD_FRAME(2, 1),
+ ANIMCMD_FRAME(3, 1),
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_FRAME(6, 8),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd sAnim_EnterSouth[] =
+{
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_FRAME(3, 1),
+ ANIMCMD_FRAME(2, 1),
+ ANIMCMD_FRAME(1, 1),
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_JUMP(0),
+};
+
static const union AnimCmd sAnim_GoFasterNorth[] =
{
ANIMCMD_FRAME(5, 2),
@@ -289,6 +480,18 @@ static const union AnimCmd sAnim_GoFasterNorth[] =
ANIMCMD_JUMP(0),
};
+static const union AnimCmd sAnim_EnterNorth[] =
+{
+ ANIMCMD_FRAME(2, 8),
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_FRAME(3, 1),
+ ANIMCMD_FRAME(2, 1),
+ ANIMCMD_FRAME(1, 1),
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_JUMP(0),
+};
+
static const union AnimCmd sAnim_GoFasterWest[] =
{
ANIMCMD_FRAME(7, 2),
@@ -298,6 +501,18 @@ static const union AnimCmd sAnim_GoFasterWest[] =
ANIMCMD_JUMP(0),
};
+static const union AnimCmd sAnim_EnterWest[] =
+{
+ ANIMCMD_FRAME(4, 8),
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_FRAME(3, 1),
+ ANIMCMD_FRAME(2, 1),
+ ANIMCMD_FRAME(1, 1),
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_JUMP(0),
+};
+
static const union AnimCmd sAnim_GoFasterEast[] =
{
ANIMCMD_FRAME(7, 2, .hFlip = TRUE),
@@ -307,6 +522,30 @@ static const union AnimCmd sAnim_GoFasterEast[] =
ANIMCMD_JUMP(0),
};
+static const union AnimCmd sAnim_EnterEast[] =
+{
+ ANIMCMD_FRAME(4, 8, .hFlip = TRUE),
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_FRAME(3, 1),
+ ANIMCMD_FRAME(2, 1),
+ ANIMCMD_FRAME(1, 1),
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd sAnim_EnterEast_Asym[] =
+{
+ ANIMCMD_FRAME(6, 8),
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_FRAME(3, 1),
+ ANIMCMD_FRAME(2, 1),
+ ANIMCMD_FRAME(1, 1),
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_JUMP(0),
+};
+
static const union AnimCmd sAnim_GoFastestSouth[] =
{
ANIMCMD_FRAME(3, 1),
@@ -316,6 +555,66 @@ static const union AnimCmd sAnim_GoFastestSouth[] =
ANIMCMD_JUMP(0),
};
+static const union AnimCmd sAnim_ExitPokeballFastSouth[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_FRAME(1, 1),
+ ANIMCMD_FRAME(2, 1),
+ ANIMCMD_FRAME(3, 1),
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_FRAME(0, 2),
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd sAnim_ExitPokeballFastNorth[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_FRAME(1, 1),
+ ANIMCMD_FRAME(2, 1),
+ ANIMCMD_FRAME(3, 1),
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_FRAME(2, 2),
+ ANIMCMD_FRAME(2, 1),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd sAnim_ExitPokeballFastWest[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_FRAME(1, 1),
+ ANIMCMD_FRAME(2, 1),
+ ANIMCMD_FRAME(3, 1),
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_FRAME(4, 2),
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd sAnim_ExitPokeballFastEast[] =
+{
+ ANIMCMD_FRAME(0, 1, .hFlip = TRUE),
+ ANIMCMD_FRAME(1, 1),
+ ANIMCMD_FRAME(2, 1),
+ ANIMCMD_FRAME(3, 1),
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_FRAME(4, 2, .hFlip = TRUE),
+ ANIMCMD_FRAME(4, 1, .hFlip = TRUE),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd sAnim_ExitPokeballFastEast_Asym[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_FRAME(1, 1),
+ ANIMCMD_FRAME(2, 1),
+ ANIMCMD_FRAME(3, 1),
+ ANIMCMD_FRAME(4, 1),
+ ANIMCMD_FRAME(6, 2),
+ ANIMCMD_FRAME(6, 1),
+ ANIMCMD_JUMP(0),
+};
+
static const union AnimCmd sAnim_GoFastestNorth[] =
{
ANIMCMD_FRAME(5, 1),
@@ -845,6 +1144,62 @@ static const union AnimCmd *const sAnimTable_Standard[] = {
[ANIM_STD_GO_FASTEST_EAST] = sAnim_GoFastestEast,
};
+const union AnimCmd *const sAnimTable_Following[] = {
+ [ANIM_STD_FACE_SOUTH] = sAnim_FaceSouth,
+ [ANIM_STD_FACE_NORTH] = sAnim_FaceNorth2F,
+ [ANIM_STD_FACE_WEST] = sAnim_FaceWest2F,
+ [ANIM_STD_FACE_EAST] = sAnim_FaceEast2F,
+ [ANIM_STD_GO_SOUTH] = sAnim_GoSouth2F,
+ [ANIM_STD_GO_NORTH] = sAnim_GoNorth2F,
+ [ANIM_STD_GO_WEST] = sAnim_GoWest2F,
+ [ANIM_STD_GO_EAST] = sAnim_GoEast2F,
+ [ANIM_STD_GO_FAST_SOUTH] = sAnim_GoFastSouth2F,
+ [ANIM_STD_GO_FAST_NORTH] = sAnim_GoFastNorth2F,
+ [ANIM_STD_GO_FAST_WEST] = sAnim_GoFastWest2F,
+ [ANIM_STD_GO_FAST_EAST] = sAnim_GoFastEast2F,
+ // 'Faster' and above used for entering/exiting pokeball
+ [ANIM_STD_GO_FASTER_SOUTH] = sAnim_EnterSouth,
+ [ANIM_STD_GO_FASTER_NORTH] = sAnim_EnterNorth,
+ [ANIM_STD_GO_FASTER_WEST] = sAnim_EnterWest,
+ [ANIM_STD_GO_FASTER_EAST] = sAnim_EnterEast,
+ [ANIM_STD_GO_FASTEST_SOUTH] = sAnim_ExitPokeballSouth,
+ [ANIM_STD_GO_FASTEST_NORTH] = sAnim_ExitPokeballNorth,
+ [ANIM_STD_GO_FASTEST_WEST] = sAnim_ExitPokeballWest,
+ [ANIM_STD_GO_FASTEST_EAST] = sAnim_ExitPokeballEast,
+ [ANIM_EXIT_POKEBALL_FAST_SOUTH] = sAnim_ExitPokeballFastSouth,
+ [ANIM_EXIT_POKEBALL_FAST_NORTH] = sAnim_ExitPokeballFastNorth,
+ [ANIM_EXIT_POKEBALL_FAST_WEST] = sAnim_ExitPokeballFastWest,
+ [ANIM_EXIT_POKEBALL_FAST_EAST] = sAnim_ExitPokeballFastEast,
+};
+
+// Like the above, but has separate frames for facing right
+static const union AnimCmd *const sAnimTable_Following_Asym[] = {
+ [ANIM_STD_FACE_SOUTH] = sAnim_FaceSouth,
+ [ANIM_STD_FACE_NORTH] = sAnim_FaceNorth2F,
+ [ANIM_STD_FACE_WEST] = sAnim_FaceWest2F,
+ [ANIM_STD_FACE_EAST] = sAnim_FaceEast2F_Asym,
+ [ANIM_STD_GO_SOUTH] = sAnim_GoSouth2F,
+ [ANIM_STD_GO_NORTH] = sAnim_GoNorth2F,
+ [ANIM_STD_GO_WEST] = sAnim_GoWest2F,
+ [ANIM_STD_GO_EAST] = sAnim_GoEast2F_Asym,
+ [ANIM_STD_GO_FAST_SOUTH] = sAnim_GoFastSouth2F,
+ [ANIM_STD_GO_FAST_NORTH] = sAnim_GoFastNorth2F,
+ [ANIM_STD_GO_FAST_WEST] = sAnim_GoFastWest2F,
+ [ANIM_STD_GO_FAST_EAST] = sAnim_GoFastEast2F_Asym,
+ [ANIM_STD_GO_FASTER_SOUTH] = sAnim_EnterSouth,
+ [ANIM_STD_GO_FASTER_NORTH] = sAnim_EnterNorth,
+ [ANIM_STD_GO_FASTER_WEST] = sAnim_EnterWest,
+ [ANIM_STD_GO_FASTER_EAST] = sAnim_EnterEast_Asym,
+ [ANIM_STD_GO_FASTEST_SOUTH] = sAnim_ExitPokeballSouth,
+ [ANIM_STD_GO_FASTEST_NORTH] = sAnim_ExitPokeballNorth,
+ [ANIM_STD_GO_FASTEST_WEST] = sAnim_ExitPokeballWest,
+ [ANIM_STD_GO_FASTEST_EAST] = sAnim_ExitPokeballEast_Asym,
+ [ANIM_EXIT_POKEBALL_FAST_SOUTH] = sAnim_ExitPokeballFastSouth,
+ [ANIM_EXIT_POKEBALL_FAST_NORTH] = sAnim_ExitPokeballFastNorth,
+ [ANIM_EXIT_POKEBALL_FAST_WEST] = sAnim_ExitPokeballFastWest,
+ [ANIM_EXIT_POKEBALL_FAST_EAST] = sAnim_ExitPokeballFastEast_Asym,
+};
+
static const union AnimCmd *const sAnimTable_HoOh[] = {
[ANIM_STD_FACE_SOUTH] = sAnim_FaceSouth,
[ANIM_STD_FACE_NORTH] = sAnim_FaceNorth,
@@ -1155,6 +1510,10 @@ static const struct StepAnimTable sStepAnimTables[] = {
.anims = sAnimTable_Standard,
.animPos = {1, 3, 0, 2},
},
+ {
+ .anims = sAnimTable_Following,
+ .animPos = {1, 3, 0, 2},
+ },
{
.anims = sAnimTable_BrendanMayNormal,
.animPos = {1, 3, 0, 2},
diff --git a/src/data/object_events/object_event_graphics.h b/src/data/object_events/object_event_graphics.h
index a1e9fc22cf4b..1f08b77599f9 100755
--- a/src/data/object_events/object_event_graphics.h
+++ b/src/data/object_events/object_event_graphics.h
@@ -122,7 +122,6 @@ const u32 gObjectEventPic_CyclingTriathleteF[] = INCBIN_U32("graphics/object_eve
const u32 gObjectEventPic_Man4[] = INCBIN_U32("graphics/object_events/pics/people/man_4.4bpp");
const u32 gObjectEventPic_Man5[] = INCBIN_U32("graphics/object_events/pics/people/man_5.4bpp");
const u32 gObjectEventPic_Nurse[] = INCBIN_U32("graphics/object_events/pics/people/nurse.4bpp");
-const u32 gObjectEventPic_ItemBall[] = INCBIN_U32("graphics/object_events/pics/misc/item_ball.4bpp");
const u32 gObjectEventPic_ProfBirch[] = INCBIN_U32("graphics/object_events/pics/people/prof_birch.4bpp");
const u32 gObjectEventPic_ReporterM[] = INCBIN_U32("graphics/object_events/pics/people/reporter_m.4bpp");
const u32 gObjectEventPic_ReporterF[] = INCBIN_U32("graphics/object_events/pics/people/reporter_f.4bpp");
@@ -156,24 +155,14 @@ const u32 gObjectEventPic_Steven[] = INCBIN_U32("graphics/object_events/pics/peo
const u32 gObjectEventPic_Wally[] = INCBIN_U32("graphics/object_events/pics/people/wally.4bpp");
const u32 gObjectEventPic_RubySapphireLittleBoy[] = INCBIN_U32("graphics/object_events/pics/people/rs_little_boy.4bpp");
const u32 gObjectEventPic_HotSpringsOldWoman[] = INCBIN_U32("graphics/object_events/pics/people/hot_springs_old_woman.4bpp");
-const u32 gObjectEventPic_LatiasLatios[] = INCBIN_U32("graphics/object_events/pics/pokemon/latias_latios.4bpp");
+const u32 gObjectEventPic_LatiasLatios[] = INCBIN_U32("graphics/object_events/pics/pokemon_old/latias_latios.4bpp");
const u32 gObjectEventPic_GameboyKid[] = INCBIN_U32("graphics/object_events/pics/people/gameboy_kid.4bpp");
const u32 gObjectEventPic_ContestJudge[] = INCBIN_U32("graphics/object_events/pics/people/contest_judge.4bpp");
const u32 gObjectEventPic_Archie[] = INCBIN_U32("graphics/object_events/pics/people/team_aqua/archie.4bpp");
const u32 gObjectEventPic_Maxie[] = INCBIN_U32("graphics/object_events/pics/people/team_magma/maxie.4bpp");
-const u32 gObjectEventPic_Kyogre[] = INCBIN_U32("graphics/object_events/pics/pokemon/kyogre.4bpp");
-const u32 gObjectEventPic_Groudon[] = INCBIN_U32("graphics/object_events/pics/pokemon/groudon.4bpp");
-const u32 gObjectEventPic_Regi[] = INCBIN_U32("graphics/object_events/pics/pokemon/regi.4bpp");
-const u32 gObjectEventPic_Skitty[] = INCBIN_U32("graphics/object_events/pics/pokemon/skitty.4bpp");
-const u32 gObjectEventPic_Kecleon[] = INCBIN_U32("graphics/object_events/pics/pokemon/kecleon.4bpp");
-const u32 gObjectEventPic_Rayquaza[] = INCBIN_U32("graphics/object_events/pics/pokemon/rayquaza.4bpp");
-const u32 gObjectEventPic_RayquazaStill[] = INCBIN_U32("graphics/object_events/pics/pokemon/rayquaza_still.4bpp");
-const u32 gObjectEventPic_Zigzagoon[] = INCBIN_U32("graphics/object_events/pics/pokemon/zigzagoon.4bpp");
-const u32 gObjectEventPic_Pikachu[] = INCBIN_U32("graphics/object_events/pics/pokemon/pikachu.4bpp");
-const u32 gObjectEventPic_Azumarill[] = INCBIN_U32("graphics/object_events/pics/pokemon/azumarill.4bpp");
-const u32 gObjectEventPic_Wingull[] = INCBIN_U32("graphics/object_events/pics/pokemon/wingull.4bpp");
+const u32 gObjectEventPic_Regi[] = INCBIN_U32("graphics/object_events/pics/pokemon_old/regi.4bpp");
+const u32 gObjectEventPic_RayquazaStill[] = INCBIN_U32("graphics/object_events/pics/pokemon_old/rayquaza_still.4bpp");
const u32 gObjectEventPic_TuberMSwimming[] = INCBIN_U32("graphics/object_events/pics/people/tuber_m_swimming.4bpp");
-const u32 gObjectEventPic_Azurill[] = INCBIN_U32("graphics/object_events/pics/pokemon/azurill.4bpp");
const u32 gObjectEventPic_Mom[] = INCBIN_U32("graphics/object_events/pics/people/mom.4bpp");
const u16 gObjectEventPal_Kyogre[] = INCBIN_U16("graphics/object_events/palettes/kyogre.gbapal");
const u16 gObjectEventPal_KyogreReflection[] = INCBIN_U16("graphics/object_events/palettes/kyogre_reflection.gbapal");
@@ -239,12 +228,10 @@ const u32 gObjectEventPic_SubmarineShadow[] = INCBIN_U32("graphics/object_events
const u16 gObjectEventPal_SubmarineShadow[] = INCBIN_U16("graphics/object_events/palettes/submarine_shadow.gbapal");
const u32 gObjectEventPic_Truck[] = INCBIN_U32("graphics/object_events/pics/misc/truck.4bpp");
const u16 gObjectEventPal_Truck[] = INCBIN_U16("graphics/object_events/palettes/truck.gbapal");
-const u32 gObjectEventPic_Vigoroth[] = INCBIN_U32("graphics/object_events/pics/pokemon/vigoroth.4bpp");
const u16 gObjectEventPal_Vigoroth[] = INCBIN_U16("graphics/object_events/palettes/vigoroth.gbapal");
const u32 gObjectEventPic_BirchsBag[] = INCBIN_U32("graphics/object_events/pics/misc/birchs_bag.4bpp");
-const u32 gObjectEventPic_EnemyZigzagoon[] = INCBIN_U32("graphics/object_events/pics/pokemon/enemy_zigzagoon.4bpp");
+const u32 gObjectEventPic_EnemyZigzagoon[] = INCBIN_U32("graphics/object_events/pics/pokemon_old/enemy_zigzagoon.4bpp");
const u16 gObjectEventPal_EnemyZigzagoon[] = INCBIN_U16("graphics/object_events/palettes/enemy_zigzagoon.gbapal");
-const u32 gObjectEventPic_Poochyena[] = INCBIN_U32("graphics/object_events/pics/pokemon/poochyena.4bpp");
const u16 gObjectEventPal_Poochyena[] = INCBIN_U16("graphics/object_events/palettes/poochyena.gbapal");
const u32 gObjectEventPic_CableCar[] = INCBIN_U32("graphics/object_events/pics/misc/cable_car.4bpp");
const u16 gObjectEventPal_CableCar[] = INCBIN_U16("graphics/object_events/palettes/cable_car.gbapal");
@@ -327,6 +314,9 @@ const u32 gFieldEffectObjectPic_ShortGrass[] = INCBIN_U32("graphics/field_effect
const u32 gFieldEffectObjectPic_SandFootprints[] = INCBIN_U32("graphics/field_effects/pics/sand_footprints.4bpp");
const u32 gFieldEffectObjectPic_DeepSandFootprints[] = INCBIN_U32("graphics/field_effects/pics/deep_sand_footprints.4bpp");
const u32 gFieldEffectObjectPic_BikeTireTracks[] = INCBIN_U32("graphics/field_effects/pics/bike_tire_tracks.4bpp");
+const u32 gFieldEffectObjectPic_SlitherTracks[] = INCBIN_U32("graphics/field_effects/pics/slither_tracks.4bpp");
+const u32 gFieldEffectObjectPic_SpotTracks[] = INCBIN_U32("graphics/field_effects/pics/spot_tracks.4bpp");
+const u32 gFieldEffectObjectPic_BugTracks[] = INCBIN_U32("graphics/field_effects/pics/bug_tracks.4bpp");
const u32 gFieldEffectObjectPic_UnusedSand[] = INCBIN_U32("graphics/field_effects/pics/unused_sand.4bpp");
const u32 gFieldEffectObjectPic_SandPile[] = INCBIN_U32("graphics/field_effects/pics/sand_pile.4bpp");
const u32 gFieldEffectObjectPic_JumpBigSplash[] = INCBIN_U32("graphics/field_effects/pics/jump_big_splash.4bpp");
@@ -347,21 +337,16 @@ const u32 gFieldEffectObjectPic_Bird[] = INCBIN_U32("graphics/field_effects/pics
const u32 gObjectEventPic_Juan[] = INCBIN_U32("graphics/object_events/pics/people/gym_leaders/juan.4bpp");
const u32 gObjectEventPic_Scott[] = INCBIN_U32("graphics/object_events/pics/people/scott.4bpp");
const u32 gObjectEventPic_Statue[] = INCBIN_U32("graphics/object_events/pics/misc/statue.4bpp");
-const u32 gObjectEventPic_Kirlia[] = INCBIN_U32("graphics/object_events/pics/pokemon/kirlia.4bpp");
-const u32 gObjectEventPic_Dusclops[] = INCBIN_U32("graphics/object_events/pics/pokemon/dusclops.4bpp");
const u32 gObjectEventPic_MysteryEventDeliveryman[] = INCBIN_U32("graphics/object_events/pics/people/mystery_event_deliveryman.4bpp");
const u32 gObjectEventPic_UnionRoomAttendant[] = INCBIN_U32("graphics/object_events/pics/people/union_room_attendant.4bpp");
const u32 gObjectEventPic_MovingBox[] = INCBIN_U32("graphics/object_events/pics/misc/moving_box.4bpp");
const u16 gObjectEventPal_MovingBox[] = INCBIN_U16("graphics/object_events/palettes/moving_box.gbapal");
-const u32 gObjectEventPic_Sudowoodo[] = INCBIN_U32("graphics/object_events/pics/pokemon/sudowoodo.4bpp");
-const u32 gObjectEventPic_Mew[] = INCBIN_U32("graphics/object_events/pics/pokemon/mew.4bpp");
const u16 gObjectEventPal_RedLeaf[] = INCBIN_U16("graphics/object_events/palettes/red_leaf.gbapal");
const u32 gObjectEventPic_Red[] = INCBIN_U32("graphics/object_events/pics/people/red.4bpp");
const u32 gObjectEventPic_Leaf[] = INCBIN_U32("graphics/object_events/pics/people/leaf.4bpp");
const u16 gObjectEventPal_BirthIslandStone[] = INCBIN_U16("graphics/object_events/palettes/birth_island_stone.gbapal");
const u32 gObjectEventPic_BirthIslandStone[] = INCBIN_U32("graphics/object_events/pics/misc/birth_island_stone.4bpp");
const u16 gObjectEventPal_Deoxys[] = INCBIN_U16("graphics/object_events/palettes/deoxys.gbapal");
-const u32 gObjectEventPic_Deoxys[] = INCBIN_U32("graphics/object_events/pics/pokemon/deoxys.4bpp");
const u32 gObjectEventPic_Anabel[] = INCBIN_U32("graphics/object_events/pics/people/frontier_brains/anabel.4bpp");
const u32 gObjectEventPic_Tucker[] = INCBIN_U32("graphics/object_events/pics/people/frontier_brains/tucker.4bpp");
const u32 gObjectEventPic_Spenser[] = INCBIN_U32("graphics/object_events/pics/people/frontier_brains/spenser.4bpp");
@@ -369,7 +354,103 @@ const u32 gObjectEventPic_Greta[] = INCBIN_U32("graphics/object_events/pics/peop
const u32 gObjectEventPic_Noland[] = INCBIN_U32("graphics/object_events/pics/people/frontier_brains/noland.4bpp");
const u32 gObjectEventPic_Lucy[] = INCBIN_U32("graphics/object_events/pics/people/frontier_brains/lucy.4bpp");
const u32 gObjectEventPic_Brandon[] = INCBIN_U32("graphics/object_events/pics/people/frontier_brains/brandon.4bpp");
-const u32 gObjectEventPic_Lugia[] = INCBIN_U32("graphics/object_events/pics/pokemon/lugia.4bpp");
-const u16 gObjectEventPal_Lugia[] = INCBIN_U16("graphics/object_events/palettes/lugia.gbapal");
-const u32 gObjectEventPic_HoOh[] = INCBIN_U32("graphics/object_events/pics/pokemon/ho_oh.4bpp");
+const u32 gObjectEventPic_PokeBall[] = INCBIN_U32("graphics/object_events/pics/misc/ball_poke.4bpp");
+
+const u32 gObjectEventPic_DeoxysOld[] = INCBIN_U32("graphics/object_events/pics/pokemon_old/deoxys.4bpp");
+const u32 gObjectEventPic_MewOld[] = INCBIN_U32("graphics/object_events/pics/pokemon_old/mew.4bpp");
+const u32 gObjectEventPic_DusclopsOld[] = INCBIN_U32("graphics/object_events/pics/pokemon_old/dusclops.4bpp");
+const u32 gObjectEventPic_KirliaOld[] = INCBIN_U32("graphics/object_events/pics/pokemon_old/kirlia.4bpp");
+const u32 gObjectEventPic_AzurillOld[] = INCBIN_U32("graphics/object_events/pics/pokemon_old/azurill.4bpp");
+const u32 gObjectEventPic_KecleonOld[] = INCBIN_U32("graphics/object_events/pics/pokemon_old/kecleon.4bpp");
+const u32 gObjectEventPic_WingullOld[] = INCBIN_U32("graphics/object_events/pics/pokemon_old/wingull.4bpp");
+const u32 gObjectEventPic_AzumarillOld[] = INCBIN_U32("graphics/object_events/pics/pokemon_old/azumarill.4bpp");
+const u32 gObjectEventPic_PikachuOld[] = INCBIN_U32("graphics/object_events/pics/pokemon_old/pikachu.4bpp");
+const u32 gObjectEventPic_ZigzagoonOld[] = INCBIN_U32("graphics/object_events/pics/pokemon_old/zigzagoon.4bpp");
+const u32 gObjectEventPic_SkittyOld[] = INCBIN_U32("graphics/object_events/pics/pokemon_old/skitty.4bpp");
+const u32 gObjectEventPic_PoochyenaOld[] = INCBIN_U32("graphics/object_events/pics/pokemon_old/poochyena.4bpp");
+const u32 gObjectEventPic_LugiaOld[] = INCBIN_U32("graphics/object_events/pics/pokemon_old/lugia.4bpp");
+const u32 gObjectEventPic_HoOhOld[] = INCBIN_U32("graphics/object_events/pics/pokemon_old/ho_oh.4bpp");
+const u32 gObjectEventPic_GroudonOld[] = INCBIN_U32("graphics/object_events/pics/pokemon_old/groudon.4bpp");
+const u32 gObjectEventPic_KyogreOld[] = INCBIN_U32("graphics/object_events/pics/pokemon_old/kyogre.4bpp");
+
+const u32 gObjectEventPic_VigorothMover[] = INCBIN_U32("graphics/object_events/pics/pokemon_old/vigoroth_mover.4bpp");
+const u32 gObjectEventPic_SudowoodoTree[] = INCBIN_U32("graphics/object_events/pics/pokemon_old/sudowoodo_tree.4bpp");
+const u32 gObjectEventPic_RayquazaCutscene[] = INCBIN_U32("graphics/object_events/pics/pokemon_old/rayquaza_cutscene.4bpp");
+
const u16 gObjectEventPal_HoOh[] = INCBIN_U16("graphics/object_events/palettes/ho_oh.gbapal");
+const u16 gObjectEventPal_Lugia[] = INCBIN_U16("graphics/object_events/palettes/lugia.gbapal");
+
+const u16 gObjectEventPal_Substitute[] = INCBIN_U16("graphics/pokemon/question_mark/overworld.gbapal");
+
+const u16 gObjectEventPaletteEmotes[] = INCBIN_U16("graphics/misc/emotes.gbapal");
+
+#if OW_FOLLOWERS_POKEBALLS
+const u32 gObjectEventPic_MasterBall[] = INCBIN_U32("graphics/object_events/pics/misc/ball_master.4bpp");
+const u32 gObjectEventPic_UltraBall[] = INCBIN_U32("graphics/object_events/pics/misc/ball_ultra.4bpp");
+const u32 gObjectEventPic_GreatBall[] = INCBIN_U32("graphics/object_events/pics/misc/ball_great.4bpp");
+const u32 gObjectEventPic_SafariBall[] = INCBIN_U32("graphics/object_events/pics/misc/ball_safari.4bpp");
+const u32 gObjectEventPic_NetBall[] = INCBIN_U32("graphics/object_events/pics/misc/ball_net.4bpp");
+const u32 gObjectEventPic_DiveBall[] = INCBIN_U32("graphics/object_events/pics/misc/ball_dive.4bpp");
+const u32 gObjectEventPic_NestBall[] = INCBIN_U32("graphics/object_events/pics/misc/ball_nest.4bpp");
+const u32 gObjectEventPic_RepeatBall[] = INCBIN_U32("graphics/object_events/pics/misc/ball_repeat.4bpp");
+const u32 gObjectEventPic_TimerBall[] = INCBIN_U32("graphics/object_events/pics/misc/ball_timer.4bpp");
+const u32 gObjectEventPic_LuxuryBall[] = INCBIN_U32("graphics/object_events/pics/misc/ball_luxury.4bpp");
+const u32 gObjectEventPic_PremierBall[] = INCBIN_U32("graphics/object_events/pics/misc/ball_premier.4bpp");
+const u32 gObjectEventPic_DuskBall[] = INCBIN_U32("graphics/object_events/pics/misc/ball_dusk.4bpp");
+const u32 gObjectEventPic_HealBall[] = INCBIN_U32("graphics/object_events/pics/misc/ball_heal.4bpp");
+const u32 gObjectEventPic_QuickBall[] = INCBIN_U32("graphics/object_events/pics/misc/ball_quick.4bpp");
+const u32 gObjectEventPic_CherishBall[] = INCBIN_U32("graphics/object_events/pics/misc/ball_cherish.4bpp");
+const u32 gObjectEventPic_ParkBall[] = INCBIN_U32("graphics/object_events/pics/misc/ball_park.4bpp");
+const u32 gObjectEventPic_FastBall[] = INCBIN_U32("graphics/object_events/pics/misc/ball_fast.4bpp");
+const u32 gObjectEventPic_LevelBall[] = INCBIN_U32("graphics/object_events/pics/misc/ball_level.4bpp");
+const u32 gObjectEventPic_LureBall[] = INCBIN_U32("graphics/object_events/pics/misc/ball_lure.4bpp");
+const u32 gObjectEventPic_HeavyBall[] = INCBIN_U32("graphics/object_events/pics/misc/ball_heavy.4bpp");
+const u32 gObjectEventPic_LoveBall[] = INCBIN_U32("graphics/object_events/pics/misc/ball_love.4bpp");
+const u32 gObjectEventPic_FriendBall[] = INCBIN_U32("graphics/object_events/pics/misc/ball_friend.4bpp");
+const u32 gObjectEventPic_MoonBall[] = INCBIN_U32("graphics/object_events/pics/misc/ball_moon.4bpp");
+const u32 gObjectEventPic_SportBall[] = INCBIN_U32("graphics/object_events/pics/misc/ball_sport.4bpp");
+const u32 gObjectEventPic_DreamBall[] = INCBIN_U32("graphics/object_events/pics/misc/ball_dream.4bpp");
+const u32 gObjectEventPic_BeastBall[] = INCBIN_U32("graphics/object_events/pics/misc/ball_beast.4bpp");
+#ifdef ITEM_STRANGE_BALL
+const u32 gObjectEventPic_StrangeBall[] = INCBIN_U32("graphics/object_events/pics/misc/ball_strange.4bpp");
+#endif //ITEM_STRANGE_BALL
+#endif //OW_FOLLOWERS_POKEBALLS
+
+#if OW_FOLLOWERS_POKEBALLS
+// Palettes are small, so always include all of the palettes (no #ifdef)
+// Vanilla
+const u16 gObjectEventPal_MasterBall[] = INCBIN_U16("graphics/object_events/pics/misc/ball_master.gbapal");
+const u16 gObjectEventPal_UltraBall[] = INCBIN_U16("graphics/object_events/pics/misc/ball_ultra.gbapal");
+const u16 gObjectEventPal_GreatBall[] = INCBIN_U16("graphics/object_events/pics/misc/ball_great.gbapal");
+const u16 gObjectEventPal_SafariBall[] = INCBIN_U16("graphics/object_events/pics/misc/ball_safari.gbapal");
+const u16 gObjectEventPal_NetBall[] = INCBIN_U16("graphics/object_events/pics/misc/ball_net.gbapal");
+const u16 gObjectEventPal_DiveBall[] = INCBIN_U16("graphics/object_events/pics/misc/ball_dive.gbapal");
+const u16 gObjectEventPal_NestBall[] = INCBIN_U16("graphics/object_events/pics/misc/ball_nest.gbapal");
+const u16 gObjectEventPal_RepeatBall[] = INCBIN_U16("graphics/object_events/pics/misc/ball_repeat.gbapal");
+const u16 gObjectEventPal_TimerBall[] = INCBIN_U16("graphics/object_events/pics/misc/ball_timer.gbapal");
+const u16 gObjectEventPal_LuxuryBall[] = INCBIN_U16("graphics/object_events/pics/misc/ball_luxury.gbapal");
+const u16 gObjectEventPal_PremierBall[] = INCBIN_U16("graphics/object_events/pics/misc/ball_premier.gbapal");
+// Gen IV/Sinnoh
+const u16 gObjectEventPal_DuskBall[] = INCBIN_U16("graphics/object_events/pics/misc/ball_dusk.gbapal");
+const u16 gObjectEventPal_HealBall[] = INCBIN_U16("graphics/object_events/pics/misc/ball_heal.gbapal");
+const u16 gObjectEventPal_QuickBall[] = INCBIN_U16("graphics/object_events/pics/misc/ball_quick.gbapal");
+const u16 gObjectEventPal_CherishBall[] = INCBIN_U16("graphics/object_events/pics/misc/ball_cherish.gbapal");
+const u16 gObjectEventPal_ParkBall[] = INCBIN_U16("graphics/object_events/pics/misc/ball_park.gbapal");
+// Gen II/Johto Apricorns
+const u16 gObjectEventPal_FastBall[] = INCBIN_U16("graphics/object_events/pics/misc/ball_fast.gbapal");
+const u16 gObjectEventPal_LevelBall[] = INCBIN_U16("graphics/object_events/pics/misc/ball_level.gbapal");
+const u16 gObjectEventPal_LureBall[] = INCBIN_U16("graphics/object_events/pics/misc/ball_lure.gbapal");
+const u16 gObjectEventPal_HeavyBall[] = INCBIN_U16("graphics/object_events/pics/misc/ball_heavy.gbapal");
+const u16 gObjectEventPal_LoveBall[] = INCBIN_U16("graphics/object_events/pics/misc/ball_love.gbapal");
+const u16 gObjectEventPal_FriendBall[] = INCBIN_U16("graphics/object_events/pics/misc/ball_friend.gbapal");
+const u16 gObjectEventPal_MoonBall[] = INCBIN_U16("graphics/object_events/pics/misc/ball_moon.gbapal");
+const u16 gObjectEventPal_SportBall[] = INCBIN_U16("graphics/object_events/pics/misc/ball_sport.gbapal");
+// Gen V
+const u16 gObjectEventPal_DreamBall[] = INCBIN_U16("graphics/object_events/pics/misc/ball_dream.gbapal");
+// Gen VII
+const u16 gObjectEventPal_BeastBall[] = INCBIN_U16("graphics/object_events/pics/misc/ball_beast.gbapal");
+// Gen VIII
+#ifdef ITEM_STRANGE_BALL
+const u16 gObjectEventPal_StrangeBall[] = INCBIN_U16("graphics/object_events/pics/misc/ball_strange.gbapal");
+#endif //ITEM_STRANGE_BALL
+#endif //OW_FOLLOWERS_POKEBALLS
diff --git a/src/data/object_events/object_event_graphics_info.h b/src/data/object_events/object_event_graphics_info.h
index 146bb87306b1..5b8f971a4925 100755
--- a/src/data/object_events/object_event_graphics_info.h
+++ b/src/data/object_events/object_event_graphics_info.h
@@ -8,7 +8,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanNormal = {
.paletteSlot = PALSLOT_PLAYER,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -27,7 +27,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanMachBike =
.paletteSlot = PALSLOT_PLAYER,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_BIKE_TIRE,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -46,7 +46,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanAcroBike =
.paletteSlot = PALSLOT_PLAYER,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_BIKE_TIRE,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -65,7 +65,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanSurfing = {
.paletteSlot = PALSLOT_PLAYER,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = TRUE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -84,7 +84,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanFieldMove =
.paletteSlot = PALSLOT_PLAYER,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -103,7 +103,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_QuintyPlump = {
.paletteSlot = PALSLOT_NPC_SPECIAL,
.shadowSize = SHADOW_SIZE_L,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -122,7 +122,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_NinjaBoy = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -141,7 +141,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Twin = {
.paletteSlot = PALSLOT_NPC_2,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -160,7 +160,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Boy1 = {
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -179,7 +179,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Girl1 = {
.paletteSlot = PALSLOT_NPC_2,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -198,7 +198,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Boy2 = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -217,7 +217,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Girl2 = {
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -236,7 +236,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_LittleBoy = {
.paletteSlot = PALSLOT_NPC_4,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -255,7 +255,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_LittleGirl = {
.paletteSlot = PALSLOT_NPC_2,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -274,7 +274,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Boy3 = {
.paletteSlot = PALSLOT_NPC_4,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -293,7 +293,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Girl3 = {
.paletteSlot = PALSLOT_NPC_2,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -312,7 +312,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RichBoy = {
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -331,7 +331,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Woman1 = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -350,7 +350,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_FatMan = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -369,7 +369,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PokefanF = {
.paletteSlot = PALSLOT_NPC_2,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -388,7 +388,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Man1 = {
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -407,7 +407,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Woman2 = {
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -426,7 +426,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ExpertM = {
.paletteSlot = PALSLOT_NPC_4,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -445,7 +445,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ExpertF = {
.paletteSlot = PALSLOT_NPC_4,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -464,7 +464,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Man2 = {
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -483,7 +483,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Woman3 = {
.paletteSlot = PALSLOT_NPC_2,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -502,7 +502,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PokefanM = {
.paletteSlot = PALSLOT_NPC_2,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -521,7 +521,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Woman4 = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -540,7 +540,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Cook = {
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -559,7 +559,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_LinkReceptionist =
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -578,7 +578,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_OldMan = {
.paletteSlot = PALSLOT_NPC_4,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -597,7 +597,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_OldWoman = {
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -616,7 +616,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Camper = {
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -635,7 +635,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Picnicker = {
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -654,7 +654,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Man3 = {
.paletteSlot = PALSLOT_NPC_2,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -673,7 +673,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Woman5 = {
.paletteSlot = PALSLOT_NPC_2,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -692,7 +692,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Youngster = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -711,7 +711,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BugCatcher = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -730,7 +730,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PsychicM = {
.paletteSlot = PALSLOT_NPC_4,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -749,7 +749,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SchoolKidM = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -768,7 +768,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Maniac = {
.paletteSlot = PALSLOT_NPC_4,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -787,7 +787,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_HexManiac = {
.paletteSlot = PALSLOT_NPC_4,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -806,7 +806,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RayquazaStill = {
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = TRUE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_64x64,
.subspriteTables = sOamTables_64x64,
@@ -825,7 +825,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SwimmerM = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -844,7 +844,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SwimmerF = {
.paletteSlot = PALSLOT_NPC_2,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -863,7 +863,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BlackBelt = {
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -882,7 +882,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Beauty = {
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -901,7 +901,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Scientist1 = {
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -920,7 +920,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Lass = {
.paletteSlot = PALSLOT_NPC_4,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -939,7 +939,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Gentleman = {
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -958,7 +958,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Sailor = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -977,7 +977,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Fisherman = {
.paletteSlot = PALSLOT_NPC_2,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -996,7 +996,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RunningTriathleteM
.paletteSlot = PALSLOT_NPC_4,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -1015,7 +1015,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RunningTriathleteF
.paletteSlot = PALSLOT_NPC_2,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -1034,7 +1034,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TuberF = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -1053,7 +1053,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TuberM = {
.paletteSlot = PALSLOT_NPC_2,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -1072,7 +1072,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Hiker = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -1091,7 +1091,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_CyclingTriathleteM
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_BIKE_TIRE,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -1110,7 +1110,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_CyclingTriathleteF
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_BIKE_TIRE,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -1129,7 +1129,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Nurse = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -1138,25 +1138,6 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Nurse = {
.affineAnims = gDummySpriteAffineAnimTable,
};
-const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ItemBall = {
- .tileTag = TAG_NONE,
- .paletteTag = OBJ_EVENT_PAL_TAG_NPC_3,
- .reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE,
- .size = 128,
- .width = 16,
- .height = 16,
- .paletteSlot = PALSLOT_NPC_3,
- .shadowSize = SHADOW_SIZE_S,
- .inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
- .tracks = TRACKS_NONE,
- .oam = &gObjectEventBaseOam_16x16,
- .subspriteTables = sOamTables_16x16,
- .anims = sAnimTable_Inanimate,
- .images = sPicTable_ItemBall,
- .affineAnims = gDummySpriteAffineAnimTable,
-};
-
const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BerryTree = {
.tileTag = TAG_NONE,
.paletteTag = OBJ_EVENT_PAL_TAG_NPC_1,
@@ -1167,7 +1148,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BerryTree = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = NULL,
@@ -1186,7 +1167,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BerryTreeEarlyStag
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -1205,7 +1186,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BerryTreeLateStage
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -1224,7 +1205,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ProfBirch = {
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -1243,7 +1224,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Man4 = {
.paletteSlot = PALSLOT_NPC_4,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -1262,7 +1243,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Man5 = {
.paletteSlot = PALSLOT_NPC_2,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -1281,7 +1262,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ReporterM = {
.paletteSlot = PALSLOT_NPC_4,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -1300,7 +1281,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ReporterF = {
.paletteSlot = PALSLOT_NPC_4,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -1319,7 +1300,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Bard = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -1338,7 +1319,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Hipster = {
.paletteSlot = PALSLOT_NPC_2,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -1357,7 +1338,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Trader = {
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -1376,7 +1357,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Storyteller = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -1395,7 +1376,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Giddy = {
.paletteSlot = PALSLOT_NPC_2,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -1414,7 +1395,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedMauvilleOldM
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -1433,7 +1414,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedMauvilleOldM
.paletteSlot = PALSLOT_NPC_4,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -1452,7 +1433,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedNatuDoll = {
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -1471,7 +1452,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedMagnemiteDol
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -1490,7 +1471,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedSquirtleDoll
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -1509,7 +1490,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedWooperDoll =
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -1528,7 +1509,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedPikachuDoll
.paletteSlot = PALSLOT_NPC_2,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -1547,7 +1528,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedPorygon2Doll
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -1566,7 +1547,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_CuttableTree = {
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -1585,7 +1566,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MartEmployee = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -1604,7 +1585,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RooftopSaleWoman =
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -1623,7 +1604,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Teala = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -1642,7 +1623,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BreakableRock = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -1661,7 +1642,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PushableBoulder =
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -1680,7 +1661,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MrBrineysBoat = {
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -1699,7 +1680,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayNormal = {
.paletteSlot = PALSLOT_PLAYER,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -1718,7 +1699,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayMachBike = {
.paletteSlot = PALSLOT_PLAYER,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_BIKE_TIRE,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -1737,7 +1718,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayAcroBike = {
.paletteSlot = PALSLOT_PLAYER,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_BIKE_TIRE,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -1756,7 +1737,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MaySurfing = {
.paletteSlot = PALSLOT_PLAYER,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = TRUE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -1775,7 +1756,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayFieldMove = {
.paletteSlot = PALSLOT_PLAYER,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -1794,7 +1775,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Truck = {
.paletteSlot = PALSLOT_NPC_SPECIAL,
.shadowSize = SHADOW_SIZE_M,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_48x48,
@@ -1813,7 +1794,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_VigorothCarryingBo
.paletteSlot = PALSLOT_NPC_SPECIAL,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -1832,7 +1813,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_VigorothFacingAway
.paletteSlot = PALSLOT_NPC_SPECIAL,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -1851,7 +1832,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BirchsBag = {
.paletteSlot = PALSLOT_NPC_2,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -1870,7 +1851,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_EnemyZigzagoon = {
.paletteSlot = PALSLOT_NPC_SPECIAL,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -1889,12 +1870,12 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Poochyena = {
.paletteSlot = PALSLOT_NPC_SPECIAL,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
.anims = sAnimTable_Standard,
- .images = sPicTable_Poochyena,
+ .images = sPicTable_PoochyenaOld,
.affineAnims = gDummySpriteAffineAnimTable,
};
@@ -1908,7 +1889,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Artist = {
.paletteSlot = PALSLOT_NPC_4,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -1927,7 +1908,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalBrendanNormal
.paletteSlot = PALSLOT_NPC_SPECIAL,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -1946,7 +1927,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalBrendanMachBi
.paletteSlot = PALSLOT_NPC_SPECIAL,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_BIKE_TIRE,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -1965,7 +1946,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalBrendanAcroBi
.paletteSlot = PALSLOT_NPC_SPECIAL,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_BIKE_TIRE,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -1984,7 +1965,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalBrendanSurfin
.paletteSlot = PALSLOT_NPC_SPECIAL,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = TRUE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -2003,7 +1984,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalBrendanFieldM
.paletteSlot = PALSLOT_NPC_SPECIAL,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -2022,7 +2003,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalMayNormal = {
.paletteSlot = PALSLOT_NPC_SPECIAL,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -2041,7 +2022,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalMayMachBike =
.paletteSlot = PALSLOT_NPC_SPECIAL,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_BIKE_TIRE,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -2060,7 +2041,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalMayAcroBike =
.paletteSlot = PALSLOT_NPC_SPECIAL,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_BIKE_TIRE,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -2079,7 +2060,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalMaySurfing =
.paletteSlot = PALSLOT_NPC_SPECIAL,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = TRUE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -2098,7 +2079,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RivalMayFieldMove
.paletteSlot = PALSLOT_NPC_SPECIAL,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -2117,7 +2098,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Cameraman = {
.paletteSlot = PALSLOT_NPC_4,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -2136,7 +2117,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanUnderwater
.paletteSlot = PALSLOT_PLAYER,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = TRUE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -2155,7 +2136,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayUnderwater = {
.paletteSlot = PALSLOT_NPC_SPECIAL,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = TRUE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -2174,7 +2155,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MovingBox = {
.paletteSlot = PALSLOT_NPC_SPECIAL,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -2193,7 +2174,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_CableCar = {
.paletteSlot = PALSLOT_NPC_SPECIAL,
.shadowSize = SHADOW_SIZE_M,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_64x64,
.subspriteTables = sOamTables_64x64,
@@ -2212,7 +2193,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Scientist2 = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -2231,7 +2212,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_DevonEmployee = {
.paletteSlot = PALSLOT_NPC_2,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -2250,7 +2231,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_AquaMemberM = {
.paletteSlot = PALSLOT_NPC_4,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -2269,7 +2250,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_AquaMemberF = {
.paletteSlot = PALSLOT_NPC_4,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -2288,7 +2269,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MagmaMemberM = {
.paletteSlot = PALSLOT_NPC_2,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -2307,7 +2288,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MagmaMemberF = {
.paletteSlot = PALSLOT_NPC_2,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -2326,7 +2307,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Sidney = {
.paletteSlot = PALSLOT_NPC_2,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -2345,7 +2326,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Phoebe = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -2364,7 +2345,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Glacia = {
.paletteSlot = PALSLOT_NPC_2,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -2383,7 +2364,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Drake = {
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -2402,7 +2383,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Roxanne = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -2421,7 +2402,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Brawly = {
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -2440,7 +2421,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Wattson = {
.paletteSlot = PALSLOT_NPC_2,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -2459,7 +2440,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Flannery = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -2478,7 +2459,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Norman = {
.paletteSlot = PALSLOT_NPC_4,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -2497,7 +2478,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Winona = {
.paletteSlot = PALSLOT_NPC_4,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -2516,7 +2497,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Liza = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -2535,7 +2516,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Tate = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -2554,7 +2535,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Wallace = {
.paletteSlot = PALSLOT_NPC_4,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -2573,7 +2554,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Steven = {
.paletteSlot = PALSLOT_NPC_4,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -2592,7 +2573,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Wally = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -2611,7 +2592,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RubySapphireLittle
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -2630,7 +2611,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanFishing = {
.paletteSlot = PALSLOT_PLAYER,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -2649,7 +2630,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayFishing = {
.paletteSlot = PALSLOT_PLAYER,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -2668,7 +2649,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_HotSpringsOldWoman
.paletteSlot = PALSLOT_NPC_4,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -2687,7 +2668,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SSTidal = {
.paletteSlot = PALSLOT_NPC_SPECIAL,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_8x8,
.subspriteTables = sOamTables_96x40,
@@ -2706,7 +2687,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SubmarineShadow =
.paletteSlot = PALSLOT_NPC_SPECIAL,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_8x8,
.subspriteTables = sOamTables_88x32,
@@ -2725,7 +2706,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PichuDoll = {
.paletteSlot = PALSLOT_NPC_2,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -2744,7 +2725,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PikachuDoll = {
.paletteSlot = PALSLOT_NPC_2,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -2763,7 +2744,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MarillDoll = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -2782,7 +2763,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TogepiDoll = {
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -2801,7 +2782,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_CyndaquilDoll = {
.paletteSlot = PALSLOT_NPC_4,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -2820,7 +2801,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ChikoritaDoll = {
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -2839,7 +2820,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TotodileDoll = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -2858,7 +2839,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_JigglypuffDoll = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -2877,7 +2858,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MeowthDoll = {
.paletteSlot = PALSLOT_NPC_2,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -2896,7 +2877,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ClefairyDoll = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -2915,7 +2896,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_DittoDoll = {
.paletteSlot = PALSLOT_NPC_4,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -2934,7 +2915,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SmoochumDoll = {
.paletteSlot = PALSLOT_NPC_4,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -2953,7 +2934,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TreeckoDoll = {
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -2972,7 +2953,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TorchicDoll = {
.paletteSlot = PALSLOT_NPC_2,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -2991,7 +2972,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MudkipDoll = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -3010,7 +2991,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_DuskullDoll = {
.paletteSlot = PALSLOT_NPC_4,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -3029,7 +3010,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_WynautDoll = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -3048,7 +3029,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BaltoyDoll = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -3067,7 +3048,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_KecleonDoll = {
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -3086,7 +3067,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_AzurillDoll = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -3105,7 +3086,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SkittyDoll = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -3124,7 +3105,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SwabluDoll = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -3143,7 +3124,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_GulpinDoll = {
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -3162,7 +3143,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_LotadDoll = {
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -3181,7 +3162,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SeedotDoll = {
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -3200,7 +3181,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PikaCushion = {
.paletteSlot = PALSLOT_NPC_2,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -3219,7 +3200,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RoundCushion = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -3238,7 +3219,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_KissCushion = {
.paletteSlot = PALSLOT_NPC_4,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -3257,7 +3238,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ZigzagCushion = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -3276,7 +3257,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_SpinCushion = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -3295,7 +3276,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_DiamondCushion = {
.paletteSlot = PALSLOT_NPC_4,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -3314,7 +3295,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BallCushion = {
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -3333,7 +3314,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_GrassCushion = {
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -3352,7 +3333,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_FireCushion = {
.paletteSlot = PALSLOT_NPC_2,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -3371,7 +3352,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_WaterCushion = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -3390,7 +3371,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigSnorlaxDoll = {
.paletteSlot = PALSLOT_NPC_4,
.shadowSize = SHADOW_SIZE_M,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -3409,7 +3390,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigRhydonDoll = {
.paletteSlot = PALSLOT_NPC_4,
.shadowSize = SHADOW_SIZE_M,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -3428,7 +3409,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigLaprasDoll = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -3447,7 +3428,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigVenusaurDoll =
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_M,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -3466,7 +3447,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigCharizardDoll =
.paletteSlot = PALSLOT_NPC_2,
.shadowSize = SHADOW_SIZE_M,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -3485,7 +3466,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigBlastoiseDoll =
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -3504,7 +3485,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigWailmerDoll = {
.paletteSlot = PALSLOT_NPC_4,
.shadowSize = SHADOW_SIZE_M,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -3523,7 +3504,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigRegirockDoll =
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -3542,7 +3523,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigRegiceDoll = {
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_M,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -3561,7 +3542,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BigRegisteelDoll =
.paletteSlot = PALSLOT_NPC_4,
.shadowSize = SHADOW_SIZE_M,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -3580,7 +3561,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Latias = {
.paletteSlot = PALSLOT_NPC_2,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -3599,7 +3580,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Latios = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -3618,7 +3599,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_GameboyKid = {
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -3637,7 +3618,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ContestJudge = {
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -3656,7 +3637,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanWatering =
.paletteSlot = PALSLOT_PLAYER,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -3675,7 +3656,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayWatering = {
.paletteSlot = PALSLOT_PLAYER,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -3694,7 +3675,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BrendanDecorating
.paletteSlot = PALSLOT_NPC_SPECIAL,
.shadowSize = SHADOW_SIZE_M,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -3713,7 +3694,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MayDecorating = {
.paletteSlot = PALSLOT_NPC_SPECIAL,
.shadowSize = SHADOW_SIZE_M,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -3732,7 +3713,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Archie = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -3751,7 +3732,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Maxie = {
.paletteSlot = PALSLOT_NPC_2,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -3770,7 +3751,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_KyogreFront = {
.paletteSlot = PALSLOT_NPC_4,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -3789,7 +3770,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_GroudonFront = {
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -3808,7 +3789,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_KyogreSide = {
.paletteSlot = PALSLOT_NPC_4,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -3827,7 +3808,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_GroudonSide = {
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -3846,7 +3827,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Fossil = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_S,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_NONE,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -3865,7 +3846,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Regirock = {
.paletteSlot = PALSLOT_NPC_2,
.shadowSize = SHADOW_SIZE_M,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -3884,7 +3865,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Regice = {
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_M,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -3903,7 +3884,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Registeel = {
.paletteSlot = PALSLOT_NPC_4,
.shadowSize = SHADOW_SIZE_M,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -3922,12 +3903,12 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Skitty = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
.anims = sAnimTable_Standard,
- .images = sPicTable_Skitty,
+ .images = sPicTable_SkittyOld,
.affineAnims = gDummySpriteAffineAnimTable,
};
@@ -3941,12 +3922,12 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kecleon = {
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
.anims = sAnimTable_Standard,
- .images = sPicTable_Kecleon,
+ .images = sPicTable_KecleonOld,
.affineAnims = gDummySpriteAffineAnimTable,
};
@@ -3960,7 +3941,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_KyogreAsleep = {
.paletteSlot = PALSLOT_NPC_SPECIAL,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -3979,7 +3960,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_GroudonAsleep = {
.paletteSlot = PALSLOT_NPC_SPECIAL,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -3998,12 +3979,12 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Rayquaza = {
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = TRUE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_64x64,
.subspriteTables = sOamTables_64x64,
.anims = sAnimTable_Rayquaza,
- .images = sPicTable_Rayquaza,
+ .images = sPicTable_RayquazaCutscene,
.affineAnims = gDummySpriteAffineAnimTable,
};
@@ -4017,12 +3998,12 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Zigzagoon = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
.anims = sAnimTable_Standard,
- .images = sPicTable_Zigzagoon,
+ .images = sPicTable_ZigzagoonOld,
.affineAnims = gDummySpriteAffineAnimTable,
};
@@ -4036,12 +4017,12 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Pikachu = {
.paletteSlot = PALSLOT_NPC_2,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
.anims = sAnimTable_Standard,
- .images = sPicTable_Pikachu,
+ .images = sPicTable_PikachuOld,
.affineAnims = gDummySpriteAffineAnimTable,
};
@@ -4055,12 +4036,12 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Azumarill = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
.anims = sAnimTable_Standard,
- .images = sPicTable_Azumarill,
+ .images = sPicTable_AzumarillOld,
.affineAnims = gDummySpriteAffineAnimTable,
};
@@ -4074,12 +4055,12 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Wingull = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
.anims = sAnimTable_Standard,
- .images = sPicTable_Wingull,
+ .images = sPicTable_WingullOld,
.affineAnims = gDummySpriteAffineAnimTable,
};
@@ -4093,12 +4074,12 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_KecleonBridgeShado
.paletteSlot = PALSLOT_NPC_SPECIAL,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
.anims = sAnimTable_Standard,
- .images = sPicTable_Kecleon,
+ .images = sPicTable_KecleonOld,
.affineAnims = gDummySpriteAffineAnimTable,
};
@@ -4112,7 +4093,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_TuberMSwimming = {
.paletteSlot = PALSLOT_NPC_2,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
@@ -4131,12 +4112,12 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Azurill = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x16,
.subspriteTables = sOamTables_16x16,
.anims = sAnimTable_Standard,
- .images = sPicTable_Azurill,
+ .images = sPicTable_AzurillOld,
.affineAnims = gDummySpriteAffineAnimTable,
};
@@ -4150,7 +4131,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Mom = {
.paletteSlot = PALSLOT_NPC_4,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -4169,7 +4150,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_LinkBrendan = {
.paletteSlot = PALSLOT_NPC_SPECIAL,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -4188,7 +4169,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_LinkMay = {
.paletteSlot = PALSLOT_NPC_SPECIAL,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -4207,7 +4188,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Juan = {
.paletteSlot = PALSLOT_NPC_4,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -4226,7 +4207,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Scott = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -4245,7 +4226,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_MysteryEventDelive
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -4264,7 +4245,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Statue = {
.paletteSlot = PALSLOT_NPC_4,
.shadowSize = SHADOW_SIZE_M,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -4283,12 +4264,12 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Kirlia = {
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_S,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
.anims = sAnimTable_Standard,
- .images = sPicTable_Kirlia,
+ .images = sPicTable_KirliaOld,
.affineAnims = gDummySpriteAffineAnimTable,
};
@@ -4302,12 +4283,12 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Dusclops = {
.paletteSlot = PALSLOT_NPC_4,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
.anims = sAnimTable_Standard,
- .images = sPicTable_Dusclops,
+ .images = sPicTable_DusclopsOld,
.affineAnims = gDummySpriteAffineAnimTable,
};
@@ -4321,7 +4302,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnionRoomAttendant
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -4340,7 +4321,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Red = {
.paletteSlot = PALSLOT_NPC_SPECIAL,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -4359,7 +4340,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Leaf = {
.paletteSlot = PALSLOT_NPC_SPECIAL,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -4378,12 +4359,12 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Sudowoodo = {
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
.anims = sAnimTable_Standard,
- .images = sPicTable_Sudowoodo,
+ .images = sPicTable_SudowoodoTree,
.affineAnims = gDummySpriteAffineAnimTable,
};
@@ -4397,12 +4378,12 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Mew = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
.anims = sAnimTable_Standard,
- .images = sPicTable_Mew,
+ .images = sPicTable_MewOld,
.affineAnims = gDummySpriteAffineAnimTable,
};
@@ -4416,12 +4397,12 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Deoxys = {
.paletteSlot = PALSLOT_NPC_SPECIAL,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
.anims = sAnimTable_Standard,
- .images = sPicTable_Deoxys,
+ .images = sPicTable_DeoxysOld,
.affineAnims = gDummySpriteAffineAnimTable,
};
@@ -4435,7 +4416,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BirthIslandStone =
.paletteSlot = PALSLOT_NPC_SPECIAL,
.shadowSize = SHADOW_SIZE_M,
.inanimate = TRUE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
@@ -4454,7 +4435,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Anabel = {
.paletteSlot = PALSLOT_NPC_4,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -4473,7 +4454,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Tucker = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -4492,7 +4473,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Greta = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -4511,7 +4492,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Spenser = {
.paletteSlot = PALSLOT_NPC_1,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -4530,7 +4511,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Noland = {
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -4549,7 +4530,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Lucy = {
.paletteSlot = PALSLOT_NPC_4,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -4568,7 +4549,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Brandon = {
.paletteSlot = PALSLOT_NPC_3,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -4587,7 +4568,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RubySapphireBrenda
.paletteSlot = PALSLOT_NPC_SPECIAL,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -4606,7 +4587,7 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RubySapphireMay =
.paletteSlot = PALSLOT_NPC_SPECIAL,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_16x32,
.subspriteTables = sOamTables_16x32,
@@ -4625,12 +4606,12 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Lugia = {
.paletteSlot = PALSLOT_NPC_SPECIAL,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
.anims = sAnimTable_Standard,
- .images = sPicTable_Lugia,
+ .images = sPicTable_LugiaOld,
.affineAnims = gDummySpriteAffineAnimTable,
};
@@ -4644,11 +4625,49 @@ const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_HoOh = {
.paletteSlot = PALSLOT_NPC_SPECIAL,
.shadowSize = SHADOW_SIZE_M,
.inanimate = FALSE,
- .disableReflectionPaletteLoad = FALSE,
+ .compressed = FALSE,
.tracks = TRACKS_FOOT,
.oam = &gObjectEventBaseOam_32x32,
.subspriteTables = sOamTables_32x32,
.anims = sAnimTable_HoOh,
- .images = sPicTable_HoOh,
+ .images = sPicTable_HoOhOld,
+ .affineAnims = gDummySpriteAffineAnimTable,
+};
+
+const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_PokeBall = {
+ .tileTag = TAG_NONE,
+ .paletteTag = OBJ_EVENT_PAL_TAG_NPC_3,
+ .reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE,
+ .size = 256,
+ .width = 16,
+ .height = 32,
+ .paletteSlot = PALSLOT_NPC_1,
+ .shadowSize = SHADOW_SIZE_M,
+ .inanimate = TRUE,
+ .compressed = FALSE,
+ .tracks = TRACKS_NONE,
+ .oam = &gObjectEventBaseOam_16x32,
+ .subspriteTables = sOamTables_16x32,
+ .anims = sAnimTable_Following,
+ .images = sPicTable_PokeBall,
+ .affineAnims = gDummySpriteAffineAnimTable,
+};
+
+const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Follower = {
+ .tileTag = TAG_NONE,
+ .paletteTag = OBJ_EVENT_PAL_TAG_DYNAMIC,
+ .reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE,
+ .size = 512,
+ .width = 32,
+ .height = 32,
+ .paletteSlot = PALSLOT_NPC_1,
+ .shadowSize = SHADOW_SIZE_M,
+ .inanimate = FALSE,
+ .compressed = FALSE,
+ .tracks = TRACKS_FOOT,
+ .oam = &gObjectEventBaseOam_32x32,
+ .subspriteTables = sOamTables_32x32,
+ .anims = sAnimTable_Following,
+ .images = NULL,
.affineAnims = gDummySpriteAffineAnimTable,
};
diff --git a/src/data/object_events/object_event_graphics_info_followers.h b/src/data/object_events/object_event_graphics_info_followers.h
new file mode 100644
index 000000000000..e35b1ebd67ba
--- /dev/null
+++ b/src/data/object_events/object_event_graphics_info_followers.h
@@ -0,0 +1,57 @@
+#if OW_FOLLOWERS_POKEBALLS
+
+#define POKEBALL_GFX_INFO(NAME) \
+ [BALL_##NAME] = { \
+ .tileTag = TAG_NONE, \
+ .paletteTag = OBJ_EVENT_PAL_TAG_BALL_##NAME, \
+ .size = 256, \
+ .width = 16, \
+ .height = 32, \
+ .shadowSize = SHADOW_SIZE_M, \
+ .inanimate = TRUE, \
+ .oam = &gObjectEventBaseOam_16x32, \
+ .subspriteTables = sOamTables_16x32, \
+ .anims = sAnimTable_Following, \
+ .images = sPicTable_Ball_##NAME, \
+ .affineAnims = gDummySpriteAffineAnimTable, \
+ }
+
+
+const struct ObjectEventGraphicsInfo gPokeballGraphics[POKEBALL_COUNT] = {
+ // Vanilla
+ POKEBALL_GFX_INFO(MASTER),
+ POKEBALL_GFX_INFO(ULTRA),
+ POKEBALL_GFX_INFO(GREAT),
+ POKEBALL_GFX_INFO(SAFARI),
+ POKEBALL_GFX_INFO(NET),
+ POKEBALL_GFX_INFO(DIVE),
+ POKEBALL_GFX_INFO(NEST),
+ POKEBALL_GFX_INFO(REPEAT),
+ POKEBALL_GFX_INFO(TIMER),
+ POKEBALL_GFX_INFO(LUXURY),
+ POKEBALL_GFX_INFO(PREMIER),
+ // Gen IV/Sinnoh pokeballs
+ POKEBALL_GFX_INFO(DUSK),
+ POKEBALL_GFX_INFO(HEAL),
+ POKEBALL_GFX_INFO(QUICK),
+ POKEBALL_GFX_INFO(CHERISH),
+ POKEBALL_GFX_INFO(PARK),
+ // Gen II/Johto Apricorn pokeballs
+ POKEBALL_GFX_INFO(FAST),
+ POKEBALL_GFX_INFO(LEVEL),
+ POKEBALL_GFX_INFO(LURE),
+ POKEBALL_GFX_INFO(HEAVY),
+ POKEBALL_GFX_INFO(LOVE),
+ POKEBALL_GFX_INFO(FRIEND),
+ POKEBALL_GFX_INFO(MOON),
+ POKEBALL_GFX_INFO(SPORT),
+ // Gen V
+ POKEBALL_GFX_INFO(DREAM),
+ // Gen VII
+ POKEBALL_GFX_INFO(BEAST),
+ // Gen VIII
+ #ifdef ITEM_STRANGE_BALL
+ POKEBALL_GFX_INFO(STRANGE),
+ #endif
+};
+#endif //OW_FOLLOWERS_POKEBALLS
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 ae1117164a72..60dc6997db68 100755
--- a/src/data/object_events/object_event_graphics_info_pointers.h
+++ b/src/data/object_events/object_event_graphics_info_pointers.h
@@ -57,7 +57,6 @@ extern const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Hiker;
extern const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_CyclingTriathleteM;
extern const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_CyclingTriathleteF;
extern const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Nurse;
-extern const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_ItemBall;
extern const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BerryTree;
extern const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BerryTreeEarlyStages;
extern const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_BerryTreeLateStages;
@@ -237,6 +236,10 @@ extern const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RubySapphir
extern const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_RubySapphireMay;
extern const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Lugia;
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;
@@ -245,7 +248,6 @@ extern const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_Giddy;
extern const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedMauvilleOldMan1;
extern const struct ObjectEventGraphicsInfo gObjectEventGraphicsInfo_UnusedMauvilleOldMan2;
-
const struct ObjectEventGraphicsInfo *const gObjectEventGraphicsInfoPointers[NUM_OBJ_EVENT_GFX] = {
[OBJ_EVENT_GFX_BRENDAN_NORMAL] = &gObjectEventGraphicsInfo_BrendanNormal,
[OBJ_EVENT_GFX_BRENDAN_MACH_BIKE] = &gObjectEventGraphicsInfo_BrendanMachBike,
@@ -306,7 +308,7 @@ const struct ObjectEventGraphicsInfo *const gObjectEventGraphicsInfoPointers[NUM
[OBJ_EVENT_GFX_CYCLING_TRIATHLETE_M] = &gObjectEventGraphicsInfo_CyclingTriathleteM,
[OBJ_EVENT_GFX_CYCLING_TRIATHLETE_F] = &gObjectEventGraphicsInfo_CyclingTriathleteF,
[OBJ_EVENT_GFX_NURSE] = &gObjectEventGraphicsInfo_Nurse,
- [OBJ_EVENT_GFX_ITEM_BALL] = &gObjectEventGraphicsInfo_ItemBall,
+ [OBJ_EVENT_GFX_ITEM_BALL] = &gObjectEventGraphicsInfo_PokeBall,
[OBJ_EVENT_GFX_BERRY_TREE] = &gObjectEventGraphicsInfo_BerryTree,
[OBJ_EVENT_GFX_BERRY_TREE_EARLY_STAGES] = &gObjectEventGraphicsInfo_BerryTreeEarlyStages,
[OBJ_EVENT_GFX_BERRY_TREE_LATE_STAGES] = &gObjectEventGraphicsInfo_BerryTreeLateStages,
@@ -486,6 +488,8 @@ const struct ObjectEventGraphicsInfo *const gObjectEventGraphicsInfoPointers[NUM
[OBJ_EVENT_GFX_LINK_RS_MAY] = &gObjectEventGraphicsInfo_RubySapphireMay,
[OBJ_EVENT_GFX_LUGIA] = &gObjectEventGraphicsInfo_Lugia,
[OBJ_EVENT_GFX_HOOH] = &gObjectEventGraphicsInfo_HoOh,
+ [OBJ_EVENT_GFX_POKE_BALL] = &gObjectEventGraphicsInfo_PokeBall,
+ [OBJ_EVENT_GFX_OW_MON] = &gObjectEventGraphicsInfo_Follower,
};
const struct ObjectEventGraphicsInfo *const gMauvilleOldManGraphicsInfoPointers[] = {
diff --git a/src/data/object_events/object_event_pic_tables.h b/src/data/object_events/object_event_pic_tables.h
index aa9f4e1532ab..1fdfc6d49207 100755
--- a/src/data/object_events/object_event_pic_tables.h
+++ b/src/data/object_events/object_event_pic_tables.h
@@ -282,10 +282,6 @@ static const struct SpriteFrameImage sPicTable_Nurse[] = {
overworld_frame(gObjectEventPic_Nurse, 2, 4, 3),
};
-static const struct SpriteFrameImage sPicTable_ItemBall[] = {
- obj_frame_tiles(gObjectEventPic_ItemBall),
-};
-
static const struct SpriteFrameImage sPicTable_ProfBirch[] = {
overworld_ascending_frames(gObjectEventPic_ProfBirch, 2, 4),
};
@@ -379,27 +375,27 @@ static const struct SpriteFrameImage sPicTable_Truck[] = {
};
static const struct SpriteFrameImage sPicTable_VigorothCarryingBox[] = {
- overworld_frame(gObjectEventPic_Vigoroth, 4, 4, 0),
- overworld_frame(gObjectEventPic_Vigoroth, 4, 4, 0),
- overworld_frame(gObjectEventPic_Vigoroth, 4, 4, 0),
- overworld_frame(gObjectEventPic_Vigoroth, 4, 4, 1),
- overworld_frame(gObjectEventPic_Vigoroth, 4, 4, 2),
- overworld_frame(gObjectEventPic_Vigoroth, 4, 4, 1),
- overworld_frame(gObjectEventPic_Vigoroth, 4, 4, 2),
- overworld_frame(gObjectEventPic_Vigoroth, 4, 4, 1),
- overworld_frame(gObjectEventPic_Vigoroth, 4, 4, 2),
+ overworld_frame(gObjectEventPic_VigorothMover, 4, 4, 0),
+ overworld_frame(gObjectEventPic_VigorothMover, 4, 4, 0),
+ overworld_frame(gObjectEventPic_VigorothMover, 4, 4, 0),
+ overworld_frame(gObjectEventPic_VigorothMover, 4, 4, 1),
+ overworld_frame(gObjectEventPic_VigorothMover, 4, 4, 2),
+ overworld_frame(gObjectEventPic_VigorothMover, 4, 4, 1),
+ overworld_frame(gObjectEventPic_VigorothMover, 4, 4, 2),
+ overworld_frame(gObjectEventPic_VigorothMover, 4, 4, 1),
+ overworld_frame(gObjectEventPic_VigorothMover, 4, 4, 2),
};
static const struct SpriteFrameImage sPicTable_VigorothFacingAway[] = {
- overworld_frame(gObjectEventPic_Vigoroth, 4, 4, 3),
- overworld_frame(gObjectEventPic_Vigoroth, 4, 4, 3),
- overworld_frame(gObjectEventPic_Vigoroth, 4, 4, 3),
- overworld_frame(gObjectEventPic_Vigoroth, 4, 4, 4),
- overworld_frame(gObjectEventPic_Vigoroth, 4, 4, 4),
- overworld_frame(gObjectEventPic_Vigoroth, 4, 4, 4),
- overworld_frame(gObjectEventPic_Vigoroth, 4, 4, 4),
- overworld_frame(gObjectEventPic_Vigoroth, 4, 4, 4),
- overworld_frame(gObjectEventPic_Vigoroth, 4, 4, 4),
+ overworld_frame(gObjectEventPic_VigorothMover, 4, 4, 3),
+ overworld_frame(gObjectEventPic_VigorothMover, 4, 4, 3),
+ overworld_frame(gObjectEventPic_VigorothMover, 4, 4, 3),
+ overworld_frame(gObjectEventPic_VigorothMover, 4, 4, 4),
+ overworld_frame(gObjectEventPic_VigorothMover, 4, 4, 4),
+ overworld_frame(gObjectEventPic_VigorothMover, 4, 4, 4),
+ overworld_frame(gObjectEventPic_VigorothMover, 4, 4, 4),
+ overworld_frame(gObjectEventPic_VigorothMover, 4, 4, 4),
+ overworld_frame(gObjectEventPic_VigorothMover, 4, 4, 4),
};
static const struct SpriteFrameImage sPicTable_BirchsBag[] = {
@@ -410,10 +406,6 @@ static const struct SpriteFrameImage sPicTable_EnemyZigzagoon[] = {
overworld_ascending_frames(gObjectEventPic_EnemyZigzagoon, 4, 4),
};
-static const struct SpriteFrameImage sPicTable_Poochyena[] = {
- overworld_ascending_frames(gObjectEventPic_Poochyena, 4, 4),
-};
-
static const struct SpriteFrameImage sPicTable_Artist[] = {
overworld_ascending_frames(gObjectEventPic_Artist, 2, 4),
};
@@ -594,12 +586,7 @@ static const struct SpriteFrameImage sPicTable_Flannery[] = {
};
static const struct SpriteFrameImage sPicTable_Norman[] = {
- overworld_frame(gObjectEventPic_Norman, 2, 4, 0),
- overworld_frame(gObjectEventPic_Norman, 2, 4, 1),
- overworld_frame(gObjectEventPic_Norman, 2, 4, 2),
- overworld_frame(gObjectEventPic_Norman, 2, 4, 3),
- overworld_frame(gObjectEventPic_Norman, 2, 4, 4),
- overworld_frame(gObjectEventPic_Norman, 2, 4, 5),
+ overworld_ascending_frames(gObjectEventPic_Norman, 2, 4),
overworld_frame(gObjectEventPic_Norman, 2, 4, 6),
overworld_frame(gObjectEventPic_Norman, 2, 4, 7),
overworld_frame(gObjectEventPic_Norman, 2, 4, 8),
@@ -942,51 +929,51 @@ static const struct SpriteFrameImage sPicTable_Maxie[] = {
};
static const struct SpriteFrameImage sPicTable_KyogreFront[] = {
- overworld_frame(gObjectEventPic_Kyogre, 4, 4, 0),
- overworld_frame(gObjectEventPic_Kyogre, 4, 4, 0),
- overworld_frame(gObjectEventPic_Kyogre, 4, 4, 0),
- overworld_frame(gObjectEventPic_Kyogre, 4, 4, 1),
- overworld_frame(gObjectEventPic_Kyogre, 4, 4, 1),
- overworld_frame(gObjectEventPic_Kyogre, 4, 4, 1),
- overworld_frame(gObjectEventPic_Kyogre, 4, 4, 1),
- overworld_frame(gObjectEventPic_Kyogre, 4, 4, 1),
- overworld_frame(gObjectEventPic_Kyogre, 4, 4, 1),
+ overworld_frame(gObjectEventPic_KyogreOld, 4, 4, 0),
+ overworld_frame(gObjectEventPic_KyogreOld, 4, 4, 0),
+ overworld_frame(gObjectEventPic_KyogreOld, 4, 4, 0),
+ overworld_frame(gObjectEventPic_KyogreOld, 4, 4, 1),
+ overworld_frame(gObjectEventPic_KyogreOld, 4, 4, 1),
+ overworld_frame(gObjectEventPic_KyogreOld, 4, 4, 1),
+ overworld_frame(gObjectEventPic_KyogreOld, 4, 4, 1),
+ overworld_frame(gObjectEventPic_KyogreOld, 4, 4, 1),
+ overworld_frame(gObjectEventPic_KyogreOld, 4, 4, 1),
};
static const struct SpriteFrameImage sPicTable_GroudonFront[] = {
- overworld_frame(gObjectEventPic_Groudon, 4, 4, 0),
- overworld_frame(gObjectEventPic_Groudon, 4, 4, 0),
- overworld_frame(gObjectEventPic_Groudon, 4, 4, 0),
- overworld_frame(gObjectEventPic_Groudon, 4, 4, 1),
- overworld_frame(gObjectEventPic_Groudon, 4, 4, 1),
- overworld_frame(gObjectEventPic_Groudon, 4, 4, 1),
- overworld_frame(gObjectEventPic_Groudon, 4, 4, 1),
- overworld_frame(gObjectEventPic_Groudon, 4, 4, 1),
- overworld_frame(gObjectEventPic_Groudon, 4, 4, 1),
+ overworld_frame(gObjectEventPic_GroudonOld, 4, 4, 0),
+ overworld_frame(gObjectEventPic_GroudonOld, 4, 4, 0),
+ overworld_frame(gObjectEventPic_GroudonOld, 4, 4, 0),
+ overworld_frame(gObjectEventPic_GroudonOld, 4, 4, 1),
+ overworld_frame(gObjectEventPic_GroudonOld, 4, 4, 1),
+ overworld_frame(gObjectEventPic_GroudonOld, 4, 4, 1),
+ overworld_frame(gObjectEventPic_GroudonOld, 4, 4, 1),
+ overworld_frame(gObjectEventPic_GroudonOld, 4, 4, 1),
+ overworld_frame(gObjectEventPic_GroudonOld, 4, 4, 1),
};
static const struct SpriteFrameImage sPicTable_KyogreSide[] = {
- overworld_frame(gObjectEventPic_Kyogre, 4, 4, 2),
- overworld_frame(gObjectEventPic_Kyogre, 4, 4, 2),
- overworld_frame(gObjectEventPic_Kyogre, 4, 4, 2),
- overworld_frame(gObjectEventPic_Kyogre, 4, 4, 3),
- overworld_frame(gObjectEventPic_Kyogre, 4, 4, 3),
- overworld_frame(gObjectEventPic_Kyogre, 4, 4, 3),
- overworld_frame(gObjectEventPic_Kyogre, 4, 4, 3),
- overworld_frame(gObjectEventPic_Kyogre, 4, 4, 3),
- overworld_frame(gObjectEventPic_Kyogre, 4, 4, 3),
+ overworld_frame(gObjectEventPic_KyogreOld, 4, 4, 2),
+ overworld_frame(gObjectEventPic_KyogreOld, 4, 4, 2),
+ overworld_frame(gObjectEventPic_KyogreOld, 4, 4, 2),
+ overworld_frame(gObjectEventPic_KyogreOld, 4, 4, 3),
+ overworld_frame(gObjectEventPic_KyogreOld, 4, 4, 3),
+ overworld_frame(gObjectEventPic_KyogreOld, 4, 4, 3),
+ overworld_frame(gObjectEventPic_KyogreOld, 4, 4, 3),
+ overworld_frame(gObjectEventPic_KyogreOld, 4, 4, 3),
+ overworld_frame(gObjectEventPic_KyogreOld, 4, 4, 3),
};
static const struct SpriteFrameImage sPicTable_GroudonSide[] = {
- overworld_frame(gObjectEventPic_Groudon, 4, 4, 2),
- overworld_frame(gObjectEventPic_Groudon, 4, 4, 2),
- overworld_frame(gObjectEventPic_Groudon, 4, 4, 2),
- overworld_frame(gObjectEventPic_Groudon, 4, 4, 3),
- overworld_frame(gObjectEventPic_Groudon, 4, 4, 3),
- overworld_frame(gObjectEventPic_Groudon, 4, 4, 3),
- overworld_frame(gObjectEventPic_Groudon, 4, 4, 3),
- overworld_frame(gObjectEventPic_Groudon, 4, 4, 3),
- overworld_frame(gObjectEventPic_Groudon, 4, 4, 3),
+ overworld_frame(gObjectEventPic_GroudonOld, 4, 4, 2),
+ overworld_frame(gObjectEventPic_GroudonOld, 4, 4, 2),
+ overworld_frame(gObjectEventPic_GroudonOld, 4, 4, 2),
+ overworld_frame(gObjectEventPic_GroudonOld, 4, 4, 3),
+ overworld_frame(gObjectEventPic_GroudonOld, 4, 4, 3),
+ overworld_frame(gObjectEventPic_GroudonOld, 4, 4, 3),
+ overworld_frame(gObjectEventPic_GroudonOld, 4, 4, 3),
+ overworld_frame(gObjectEventPic_GroudonOld, 4, 4, 3),
+ overworld_frame(gObjectEventPic_GroudonOld, 4, 4, 3),
};
static const struct SpriteFrameImage sPicTable_Fossil[] = {
@@ -1005,38 +992,6 @@ static const struct SpriteFrameImage sPicTable_Regi[] = {
obj_frame_tiles(gObjectEventPic_Regi),
};
-static const struct SpriteFrameImage sPicTable_Skitty[] = {
- overworld_frame(gObjectEventPic_Skitty, 2, 2, 0),
- overworld_frame(gObjectEventPic_Skitty, 2, 2, 1),
- overworld_frame(gObjectEventPic_Skitty, 2, 2, 2),
- overworld_frame(gObjectEventPic_Skitty, 2, 2, 0),
- overworld_frame(gObjectEventPic_Skitty, 2, 2, 0),
- overworld_frame(gObjectEventPic_Skitty, 2, 2, 1),
- overworld_frame(gObjectEventPic_Skitty, 2, 2, 1),
- overworld_frame(gObjectEventPic_Skitty, 2, 2, 2),
- overworld_frame(gObjectEventPic_Skitty, 2, 2, 2),
-};
-
-static const struct SpriteFrameImage sPicTable_Kecleon[] = {
- overworld_frame(gObjectEventPic_Kecleon, 2, 2, 0),
- overworld_frame(gObjectEventPic_Kecleon, 2, 2, 1),
- overworld_frame(gObjectEventPic_Kecleon, 2, 2, 2),
- overworld_frame(gObjectEventPic_Kecleon, 2, 2, 0),
- overworld_frame(gObjectEventPic_Kecleon, 2, 2, 0),
- overworld_frame(gObjectEventPic_Kecleon, 2, 2, 1),
- overworld_frame(gObjectEventPic_Kecleon, 2, 2, 1),
- overworld_frame(gObjectEventPic_Kecleon, 2, 2, 2),
- overworld_frame(gObjectEventPic_Kecleon, 2, 2, 2),
-};
-
-static const struct SpriteFrameImage sPicTable_Rayquaza[] = {
- overworld_frame(gObjectEventPic_Rayquaza, 8, 8, 0),
- overworld_frame(gObjectEventPic_Rayquaza, 8, 8, 1),
- overworld_frame(gObjectEventPic_Rayquaza, 8, 8, 2),
- overworld_frame(gObjectEventPic_Rayquaza, 8, 8, 3),
- overworld_frame(gObjectEventPic_Rayquaza, 8, 8, 4),
-};
-
static const struct SpriteFrameImage sPicTable_RayquazaStill[] = {
obj_frame_tiles(gObjectEventPic_RayquazaStill),
obj_frame_tiles(gObjectEventPic_RayquazaStill),
@@ -1049,70 +1004,10 @@ static const struct SpriteFrameImage sPicTable_RayquazaStill[] = {
obj_frame_tiles(gObjectEventPic_RayquazaStill),
};
-static const struct SpriteFrameImage sPicTable_Zigzagoon[] = {
- overworld_frame(gObjectEventPic_Zigzagoon, 2, 2, 0),
- overworld_frame(gObjectEventPic_Zigzagoon, 2, 2, 1),
- overworld_frame(gObjectEventPic_Zigzagoon, 2, 2, 2),
- overworld_frame(gObjectEventPic_Zigzagoon, 2, 2, 0),
- overworld_frame(gObjectEventPic_Zigzagoon, 2, 2, 0),
- overworld_frame(gObjectEventPic_Zigzagoon, 2, 2, 1),
- overworld_frame(gObjectEventPic_Zigzagoon, 2, 2, 1),
- overworld_frame(gObjectEventPic_Zigzagoon, 2, 2, 2),
- overworld_frame(gObjectEventPic_Zigzagoon, 2, 2, 2),
-};
-
-static const struct SpriteFrameImage sPicTable_Pikachu[] = {
- overworld_frame(gObjectEventPic_Pikachu, 2, 2, 0),
- overworld_frame(gObjectEventPic_Pikachu, 2, 2, 1),
- overworld_frame(gObjectEventPic_Pikachu, 2, 2, 2),
- overworld_frame(gObjectEventPic_Pikachu, 2, 2, 0),
- overworld_frame(gObjectEventPic_Pikachu, 2, 2, 0),
- overworld_frame(gObjectEventPic_Pikachu, 2, 2, 1),
- overworld_frame(gObjectEventPic_Pikachu, 2, 2, 1),
- overworld_frame(gObjectEventPic_Pikachu, 2, 2, 2),
- overworld_frame(gObjectEventPic_Pikachu, 2, 2, 2),
-};
-
-static const struct SpriteFrameImage sPicTable_Azumarill[] = {
- overworld_frame(gObjectEventPic_Azumarill, 2, 2, 0),
- overworld_frame(gObjectEventPic_Azumarill, 2, 2, 1),
- overworld_frame(gObjectEventPic_Azumarill, 2, 2, 2),
- overworld_frame(gObjectEventPic_Azumarill, 2, 2, 0),
- overworld_frame(gObjectEventPic_Azumarill, 2, 2, 0),
- overworld_frame(gObjectEventPic_Azumarill, 2, 2, 1),
- overworld_frame(gObjectEventPic_Azumarill, 2, 2, 1),
- overworld_frame(gObjectEventPic_Azumarill, 2, 2, 2),
- overworld_frame(gObjectEventPic_Azumarill, 2, 2, 2),
-};
-
-static const struct SpriteFrameImage sPicTable_Wingull[] = {
- overworld_frame(gObjectEventPic_Wingull, 2, 2, 0),
- overworld_frame(gObjectEventPic_Wingull, 2, 2, 2),
- overworld_frame(gObjectEventPic_Wingull, 2, 2, 4),
- overworld_frame(gObjectEventPic_Wingull, 2, 2, 1),
- overworld_frame(gObjectEventPic_Wingull, 2, 2, 1),
- overworld_frame(gObjectEventPic_Wingull, 2, 2, 3),
- overworld_frame(gObjectEventPic_Wingull, 2, 2, 3),
- overworld_frame(gObjectEventPic_Wingull, 2, 2, 5),
- overworld_frame(gObjectEventPic_Wingull, 2, 2, 5),
-};
-
static const struct SpriteFrameImage sPicTable_TuberMSwimming[] = {
overworld_ascending_frames(gObjectEventPic_TuberMSwimming, 2, 2),
};
-static const struct SpriteFrameImage sPicTable_Azurill[] = {
- overworld_frame(gObjectEventPic_Azurill, 2, 2, 0),
- overworld_frame(gObjectEventPic_Azurill, 2, 2, 1),
- overworld_frame(gObjectEventPic_Azurill, 2, 2, 2),
- overworld_frame(gObjectEventPic_Azurill, 2, 2, 0),
- overworld_frame(gObjectEventPic_Azurill, 2, 2, 0),
- overworld_frame(gObjectEventPic_Azurill, 2, 2, 1),
- overworld_frame(gObjectEventPic_Azurill, 2, 2, 1),
- overworld_frame(gObjectEventPic_Azurill, 2, 2, 2),
- overworld_frame(gObjectEventPic_Azurill, 2, 2, 2),
-};
-
static const struct SpriteFrameImage sPicTable_Mom[] = {
overworld_ascending_frames(gObjectEventPic_Mom, 2, 4),
};
@@ -1141,14 +1036,6 @@ static const struct SpriteFrameImage sPicTable_Statue[] = {
obj_frame_tiles(gObjectEventPic_Statue),
};
-static const struct SpriteFrameImage sPicTable_Dusclops[] = {
- overworld_ascending_frames(gObjectEventPic_Dusclops, 2, 4),
-};
-
-static const struct SpriteFrameImage sPicTable_Kirlia[] = {
- overworld_ascending_frames(gObjectEventPic_Kirlia, 2, 4),
-};
-
static const struct SpriteFrameImage sPicTable_UnionRoomAttendant[] = {
overworld_frame(gObjectEventPic_UnionRoomAttendant, 2, 4, 0),
overworld_frame(gObjectEventPic_UnionRoomAttendant, 2, 4, 1),
@@ -1161,22 +1048,6 @@ static const struct SpriteFrameImage sPicTable_UnionRoomAttendant[] = {
overworld_frame(gObjectEventPic_UnionRoomAttendant, 2, 4, 2),
};
-static const struct SpriteFrameImage sPicTable_Sudowoodo[] = {
- overworld_frame(gObjectEventPic_Sudowoodo, 2, 4, 0),
- overworld_frame(gObjectEventPic_Sudowoodo, 2, 4, 0),
- overworld_frame(gObjectEventPic_Sudowoodo, 2, 4, 1),
- overworld_frame(gObjectEventPic_Sudowoodo, 2, 4, 0),
- overworld_frame(gObjectEventPic_Sudowoodo, 2, 4, 0),
- overworld_frame(gObjectEventPic_Sudowoodo, 2, 4, 0),
- overworld_frame(gObjectEventPic_Sudowoodo, 2, 4, 0),
- overworld_frame(gObjectEventPic_Sudowoodo, 2, 4, 1),
- overworld_frame(gObjectEventPic_Sudowoodo, 2, 4, 2),
-};
-
-static const struct SpriteFrameImage sPicTable_Mew[] = {
- overworld_ascending_frames(gObjectEventPic_Mew, 2, 4),
-};
-
static const struct SpriteFrameImage sPicTable_Red[] = {
overworld_ascending_frames(gObjectEventPic_Red, 2, 4),
};
@@ -1185,16 +1056,24 @@ static const struct SpriteFrameImage sPicTable_Leaf[] = {
overworld_ascending_frames(gObjectEventPic_Leaf, 2, 4),
};
-static const struct SpriteFrameImage sPicTable_Deoxys[] = {
- overworld_frame(gObjectEventPic_Deoxys, 4, 4, 0),
- overworld_frame(gObjectEventPic_Deoxys, 4, 4, 0),
- overworld_frame(gObjectEventPic_Deoxys, 4, 4, 0),
- overworld_frame(gObjectEventPic_Deoxys, 4, 4, 0),
- overworld_frame(gObjectEventPic_Deoxys, 4, 4, 1),
- overworld_frame(gObjectEventPic_Deoxys, 4, 4, 0),
- overworld_frame(gObjectEventPic_Deoxys, 4, 4, 1),
- overworld_frame(gObjectEventPic_Deoxys, 4, 4, 0),
- overworld_frame(gObjectEventPic_Deoxys, 4, 4, 0),
+static const struct SpriteFrameImage sPicTable_SudowoodoTree[] = {
+ overworld_frame(gObjectEventPic_SudowoodoTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_SudowoodoTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_SudowoodoTree, 2, 4, 1),
+ overworld_frame(gObjectEventPic_SudowoodoTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_SudowoodoTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_SudowoodoTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_SudowoodoTree, 2, 4, 0),
+ overworld_frame(gObjectEventPic_SudowoodoTree, 2, 4, 1),
+ overworld_frame(gObjectEventPic_SudowoodoTree, 2, 4, 2),
+};
+
+static const struct SpriteFrameImage sPicTable_RayquazaCutscene[] = {
+ overworld_frame(gObjectEventPic_RayquazaCutscene, 8, 8, 0),
+ overworld_frame(gObjectEventPic_RayquazaCutscene, 8, 8, 1),
+ overworld_frame(gObjectEventPic_RayquazaCutscene, 8, 8, 2),
+ overworld_frame(gObjectEventPic_RayquazaCutscene, 8, 8, 3),
+ overworld_frame(gObjectEventPic_RayquazaCutscene, 8, 8, 4),
};
static const struct SpriteFrameImage sPicTable_BirthIslandStone[] = {
@@ -1229,34 +1108,250 @@ static const struct SpriteFrameImage sPicTable_Brandon[] = {
overworld_ascending_frames(gObjectEventPic_Brandon, 2, 4),
};
-static const struct SpriteFrameImage sPicTable_Lugia[] = {
- overworld_frame(gObjectEventPic_Lugia, 4, 4, 0),
- overworld_frame(gObjectEventPic_Lugia, 4, 4, 0),
- overworld_frame(gObjectEventPic_Lugia, 4, 4, 0),
- overworld_frame(gObjectEventPic_Lugia, 4, 4, 0),
- overworld_frame(gObjectEventPic_Lugia, 4, 4, 1),
- overworld_frame(gObjectEventPic_Lugia, 4, 4, 0),
- overworld_frame(gObjectEventPic_Lugia, 4, 4, 1),
- overworld_frame(gObjectEventPic_Lugia, 4, 4, 0),
- overworld_frame(gObjectEventPic_Lugia, 4, 4, 1),
+static const struct SpriteFrameImage sPicTable_PokeBall[] = {
+ overworld_frame(gObjectEventPic_PokeBall, 2, 4, 0),
+ overworld_frame(gObjectEventPic_PokeBall, 2, 4, 1),
+ overworld_frame(gObjectEventPic_PokeBall, 2, 4, 2),
+ overworld_frame(gObjectEventPic_PokeBall, 2, 4, 3),
+ overworld_frame(gObjectEventPic_PokeBall, 2, 4, 4),
+ overworld_frame(gObjectEventPic_PokeBall, 2, 4, 0),
+};
+
+#if OW_FOLLOWERS_POKEBALLS
+
+#define POKEBALL_PIC_FRAMES(name) \
+ overworld_frame(gObjectEventPic_##name##Ball, 2, 4, 0), \
+ overworld_frame(gObjectEventPic_##name##Ball, 2, 4, 1), \
+ overworld_frame(gObjectEventPic_##name##Ball, 2, 4, 2), \
+ overworld_frame(gObjectEventPic_##name##Ball, 2, 4, 3), \
+ overworld_frame(gObjectEventPic_##name##Ball, 2, 4, 4), \
+ overworld_frame(gObjectEventPic_##name##Ball, 2, 4, 0)
+
+static const struct SpriteFrameImage sPicTable_Ball_MASTER[] = {
+ POKEBALL_PIC_FRAMES(Master),
+};
+static const struct SpriteFrameImage sPicTable_Ball_ULTRA[] = {
+ POKEBALL_PIC_FRAMES(Ultra),
+};
+static const struct SpriteFrameImage sPicTable_Ball_GREAT[] = {
+ POKEBALL_PIC_FRAMES(Great),
+};
+static const struct SpriteFrameImage sPicTable_Ball_SAFARI[] = {
+ POKEBALL_PIC_FRAMES(Safari),
+};
+static const struct SpriteFrameImage sPicTable_Ball_NET[] = {
+ POKEBALL_PIC_FRAMES(Net),
+};
+static const struct SpriteFrameImage sPicTable_Ball_DIVE[] = {
+ POKEBALL_PIC_FRAMES(Dive),
+};
+static const struct SpriteFrameImage sPicTable_Ball_NEST[] = {
+ POKEBALL_PIC_FRAMES(Nest),
+};
+static const struct SpriteFrameImage sPicTable_Ball_REPEAT[] = {
+ POKEBALL_PIC_FRAMES(Repeat),
+};
+static const struct SpriteFrameImage sPicTable_Ball_TIMER[] = {
+ POKEBALL_PIC_FRAMES(Timer),
+};
+static const struct SpriteFrameImage sPicTable_Ball_LUXURY[] = {
+ POKEBALL_PIC_FRAMES(Luxury),
+};
+static const struct SpriteFrameImage sPicTable_Ball_PREMIER[] = {
+ POKEBALL_PIC_FRAMES(Premier),
+};
+static const struct SpriteFrameImage sPicTable_Ball_DUSK[] = {
+ POKEBALL_PIC_FRAMES(Dusk),
+};
+static const struct SpriteFrameImage sPicTable_Ball_HEAL[] = {
+ POKEBALL_PIC_FRAMES(Heal),
+};
+static const struct SpriteFrameImage sPicTable_Ball_QUICK[] = {
+ POKEBALL_PIC_FRAMES(Quick),
+};
+static const struct SpriteFrameImage sPicTable_Ball_CHERISH[] = {
+ POKEBALL_PIC_FRAMES(Cherish),
+};
+static const struct SpriteFrameImage sPicTable_Ball_PARK[] = {
+ POKEBALL_PIC_FRAMES(Park),
+};
+static const struct SpriteFrameImage sPicTable_Ball_FAST[] = {
+ POKEBALL_PIC_FRAMES(Fast),
+};
+static const struct SpriteFrameImage sPicTable_Ball_LEVEL[] = {
+ POKEBALL_PIC_FRAMES(Level),
+};
+static const struct SpriteFrameImage sPicTable_Ball_LURE[] = {
+ POKEBALL_PIC_FRAMES(Lure),
+};
+static const struct SpriteFrameImage sPicTable_Ball_HEAVY[] = {
+ POKEBALL_PIC_FRAMES(Heavy),
+};
+static const struct SpriteFrameImage sPicTable_Ball_LOVE[] = {
+ POKEBALL_PIC_FRAMES(Love),
+};
+static const struct SpriteFrameImage sPicTable_Ball_FRIEND[] = {
+ POKEBALL_PIC_FRAMES(Friend),
+};
+static const struct SpriteFrameImage sPicTable_Ball_MOON[] = {
+ POKEBALL_PIC_FRAMES(Moon),
+};
+static const struct SpriteFrameImage sPicTable_Ball_SPORT[] = {
+ POKEBALL_PIC_FRAMES(Sport),
+};
+static const struct SpriteFrameImage sPicTable_Ball_DREAM[] = {
+ POKEBALL_PIC_FRAMES(Dream),
+};
+static const struct SpriteFrameImage sPicTable_Ball_BEAST[] = {
+ POKEBALL_PIC_FRAMES(Beast),
+};
+#ifdef ITEM_STRANGE_BALL
+static const struct SpriteFrameImage sPicTable_Ball_STRANGE[] = {
+ POKEBALL_PIC_FRAMES(Strange),
+};
+#endif //ITEM_STRANGE_BALL
+#endif //OW_FOLLOWERS_POKEBALLS
+
+static const struct SpriteFrameImage sPicTable_DeoxysOld[] = {
+ overworld_frame(gObjectEventPic_DeoxysOld, 4, 4, 0),
+ overworld_frame(gObjectEventPic_DeoxysOld, 4, 4, 0),
+ overworld_frame(gObjectEventPic_DeoxysOld, 4, 4, 0),
+ overworld_frame(gObjectEventPic_DeoxysOld, 4, 4, 0),
+ overworld_frame(gObjectEventPic_DeoxysOld, 4, 4, 1),
+ overworld_frame(gObjectEventPic_DeoxysOld, 4, 4, 0),
+ overworld_frame(gObjectEventPic_DeoxysOld, 4, 4, 1),
+ overworld_frame(gObjectEventPic_DeoxysOld, 4, 4, 0),
+ overworld_frame(gObjectEventPic_DeoxysOld, 4, 4, 0),
+};
+
+static const struct SpriteFrameImage sPicTable_MewOld[] = {
+ overworld_ascending_frames(gObjectEventPic_MewOld, 2, 4),
};
-static const struct SpriteFrameImage sPicTable_HoOh[] = {
- overworld_frame(gObjectEventPic_HoOh, 4, 4, 0),
- overworld_frame(gObjectEventPic_HoOh, 4, 4, 0),
- overworld_frame(gObjectEventPic_HoOh, 4, 4, 0),
- overworld_frame(gObjectEventPic_HoOh, 4, 4, 0),
- overworld_frame(gObjectEventPic_HoOh, 4, 4, 1),
- overworld_frame(gObjectEventPic_HoOh, 4, 4, 0),
- overworld_frame(gObjectEventPic_HoOh, 4, 4, 1),
- overworld_frame(gObjectEventPic_HoOh, 4, 4, 0),
- overworld_frame(gObjectEventPic_HoOh, 4, 4, 1),
+static const struct SpriteFrameImage sPicTable_DusclopsOld[] = {
+ overworld_ascending_frames(gObjectEventPic_DusclopsOld, 2, 4),
+};
+
+static const struct SpriteFrameImage sPicTable_AzurillOld[] = {
+ overworld_frame(gObjectEventPic_AzurillOld, 2, 2, 0),
+ overworld_frame(gObjectEventPic_AzurillOld, 2, 2, 1),
+ overworld_frame(gObjectEventPic_AzurillOld, 2, 2, 2),
+ overworld_frame(gObjectEventPic_AzurillOld, 2, 2, 0),
+ overworld_frame(gObjectEventPic_AzurillOld, 2, 2, 0),
+ overworld_frame(gObjectEventPic_AzurillOld, 2, 2, 1),
+ overworld_frame(gObjectEventPic_AzurillOld, 2, 2, 1),
+ overworld_frame(gObjectEventPic_AzurillOld, 2, 2, 2),
+ overworld_frame(gObjectEventPic_AzurillOld, 2, 2, 2),
+};
+
+static const struct SpriteFrameImage sPicTable_KecleonOld[] = {
+ overworld_frame(gObjectEventPic_KecleonOld, 2, 2, 0),
+ overworld_frame(gObjectEventPic_KecleonOld, 2, 2, 1),
+ overworld_frame(gObjectEventPic_KecleonOld, 2, 2, 2),
+ overworld_frame(gObjectEventPic_KecleonOld, 2, 2, 0),
+ overworld_frame(gObjectEventPic_KecleonOld, 2, 2, 0),
+ overworld_frame(gObjectEventPic_KecleonOld, 2, 2, 1),
+ overworld_frame(gObjectEventPic_KecleonOld, 2, 2, 1),
+ overworld_frame(gObjectEventPic_KecleonOld, 2, 2, 2),
+ overworld_frame(gObjectEventPic_KecleonOld, 2, 2, 2),
+};
+
+static const struct SpriteFrameImage sPicTable_WingullOld[] = {
+ overworld_frame(gObjectEventPic_WingullOld, 2, 2, 0),
+ overworld_frame(gObjectEventPic_WingullOld, 2, 2, 2),
+ overworld_frame(gObjectEventPic_WingullOld, 2, 2, 4),
+ overworld_frame(gObjectEventPic_WingullOld, 2, 2, 1),
+ overworld_frame(gObjectEventPic_WingullOld, 2, 2, 1),
+ overworld_frame(gObjectEventPic_WingullOld, 2, 2, 3),
+ overworld_frame(gObjectEventPic_WingullOld, 2, 2, 3),
+ overworld_frame(gObjectEventPic_WingullOld, 2, 2, 5),
+ overworld_frame(gObjectEventPic_WingullOld, 2, 2, 5),
+};
+
+static const struct SpriteFrameImage sPicTable_AzumarillOld[] = {
+ overworld_frame(gObjectEventPic_AzumarillOld, 2, 2, 0),
+ overworld_frame(gObjectEventPic_AzumarillOld, 2, 2, 1),
+ overworld_frame(gObjectEventPic_AzumarillOld, 2, 2, 2),
+ overworld_frame(gObjectEventPic_AzumarillOld, 2, 2, 0),
+ overworld_frame(gObjectEventPic_AzumarillOld, 2, 2, 0),
+ overworld_frame(gObjectEventPic_AzumarillOld, 2, 2, 1),
+ overworld_frame(gObjectEventPic_AzumarillOld, 2, 2, 1),
+ overworld_frame(gObjectEventPic_AzumarillOld, 2, 2, 2),
+ overworld_frame(gObjectEventPic_AzumarillOld, 2, 2, 2),
+};
+
+static const struct SpriteFrameImage sPicTable_PikachuOld[] = {
+ overworld_frame(gObjectEventPic_PikachuOld, 2, 2, 0),
+ overworld_frame(gObjectEventPic_PikachuOld, 2, 2, 1),
+ overworld_frame(gObjectEventPic_PikachuOld, 2, 2, 2),
+ overworld_frame(gObjectEventPic_PikachuOld, 2, 2, 0),
+ overworld_frame(gObjectEventPic_PikachuOld, 2, 2, 0),
+ overworld_frame(gObjectEventPic_PikachuOld, 2, 2, 1),
+ overworld_frame(gObjectEventPic_PikachuOld, 2, 2, 1),
+ overworld_frame(gObjectEventPic_PikachuOld, 2, 2, 2),
+ overworld_frame(gObjectEventPic_PikachuOld, 2, 2, 2),
+};
+
+static const struct SpriteFrameImage sPicTable_ZigzagoonOld[] = {
+ overworld_frame(gObjectEventPic_ZigzagoonOld, 2, 2, 0),
+ overworld_frame(gObjectEventPic_ZigzagoonOld, 2, 2, 1),
+ overworld_frame(gObjectEventPic_ZigzagoonOld, 2, 2, 2),
+ overworld_frame(gObjectEventPic_ZigzagoonOld, 2, 2, 0),
+ overworld_frame(gObjectEventPic_ZigzagoonOld, 2, 2, 0),
+ overworld_frame(gObjectEventPic_ZigzagoonOld, 2, 2, 1),
+ overworld_frame(gObjectEventPic_ZigzagoonOld, 2, 2, 1),
+ overworld_frame(gObjectEventPic_ZigzagoonOld, 2, 2, 2),
+ overworld_frame(gObjectEventPic_ZigzagoonOld, 2, 2, 2),
+};
+
+static const struct SpriteFrameImage sPicTable_SkittyOld[] = {
+ overworld_frame(gObjectEventPic_SkittyOld, 2, 2, 0),
+ overworld_frame(gObjectEventPic_SkittyOld, 2, 2, 1),
+ overworld_frame(gObjectEventPic_SkittyOld, 2, 2, 2),
+ overworld_frame(gObjectEventPic_SkittyOld, 2, 2, 0),
+ overworld_frame(gObjectEventPic_SkittyOld, 2, 2, 0),
+ overworld_frame(gObjectEventPic_SkittyOld, 2, 2, 1),
+ overworld_frame(gObjectEventPic_SkittyOld, 2, 2, 1),
+ overworld_frame(gObjectEventPic_SkittyOld, 2, 2, 2),
+ overworld_frame(gObjectEventPic_SkittyOld, 2, 2, 2),
+};
+
+static const struct SpriteFrameImage sPicTable_PoochyenaOld[] = {
+ overworld_ascending_frames(gObjectEventPic_PoochyenaOld, 4, 4),
+};
+
+static const struct SpriteFrameImage sPicTable_LugiaOld[] = {
+ overworld_frame(gObjectEventPic_LugiaOld, 4, 4, 0),
+ overworld_frame(gObjectEventPic_LugiaOld, 4, 4, 0),
+ overworld_frame(gObjectEventPic_LugiaOld, 4, 4, 0),
+ overworld_frame(gObjectEventPic_LugiaOld, 4, 4, 0),
+ overworld_frame(gObjectEventPic_LugiaOld, 4, 4, 1),
+ overworld_frame(gObjectEventPic_LugiaOld, 4, 4, 0),
+ overworld_frame(gObjectEventPic_LugiaOld, 4, 4, 1),
+ overworld_frame(gObjectEventPic_LugiaOld, 4, 4, 0),
+ overworld_frame(gObjectEventPic_LugiaOld, 4, 4, 1),
+};
+
+static const struct SpriteFrameImage sPicTable_HoOhOld[] = {
+ overworld_frame(gObjectEventPic_HoOhOld, 4, 4, 0),
+ overworld_frame(gObjectEventPic_HoOhOld, 4, 4, 0),
+ overworld_frame(gObjectEventPic_HoOhOld, 4, 4, 0),
+ overworld_frame(gObjectEventPic_HoOhOld, 4, 4, 0),
+ overworld_frame(gObjectEventPic_HoOhOld, 4, 4, 1),
+ overworld_frame(gObjectEventPic_HoOhOld, 4, 4, 0),
+ overworld_frame(gObjectEventPic_HoOhOld, 4, 4, 1),
+ overworld_frame(gObjectEventPic_HoOhOld, 4, 4, 0),
+ overworld_frame(gObjectEventPic_HoOhOld, 4, 4, 1),
};
static const struct SpriteFrameImage sPicTable_RubySapphireBrendan[] = {
overworld_ascending_frames(gObjectEventPic_RubySapphireBrendanNormal, 2, 4),
};
+static const struct SpriteFrameImage sPicTable_KirliaOld[] = {
+ overworld_ascending_frames(gObjectEventPic_KirliaOld, 2, 4),
+};
+
static const struct SpriteFrameImage sPicTable_RubySapphireMay[] = {
overworld_ascending_frames(gObjectEventPic_RubySapphireMayNormal, 2, 4),
};
diff --git a/src/data/object_events/object_event_pic_tables_followers.h b/src/data/object_events/object_event_pic_tables_followers.h
new file mode 100644
index 000000000000..b47faf52f1df
--- /dev/null
+++ b/src/data/object_events/object_event_pic_tables_followers.h
@@ -0,0 +1,6155 @@
+static const struct SpriteFrameImage sPicTable_Substitute[] = {
+ overworld_ascending_frames(gObjectEventPic_Substitute, 4, 4),
+};
+
+#if OW_POKEMON_OBJECT_EVENTS
+#if P_FAMILY_BULBASAUR
+static const struct SpriteFrameImage sPicTable_Bulbasaur[] = {
+ overworld_ascending_frames(gObjectEventPic_Bulbasaur, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Ivysaur[] = {
+ overworld_ascending_frames(gObjectEventPic_Ivysaur, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Venusaur[] = {
+ overworld_ascending_frames(gObjectEventPic_Venusaur, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_VenusaurMega[] = {
+ overworld_ascending_frames(gObjectEventPic_VenusaurMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+#if P_GIGANTAMAX_FORMS
+/*static const struct SpriteFrameImage sPicTable_VenusaurGigantamax[] = {
+ overworld_ascending_frames(gObjectEventPic_VenusaurGigantamax, 4, 4),
+};*/
+#endif //P_GIGANTAMAX_FORMS
+#endif //P_FAMILY_BULBASAUR
+
+#if P_FAMILY_CHARMANDER
+static const struct SpriteFrameImage sPicTable_Charmander[] = {
+ overworld_ascending_frames(gObjectEventPic_Charmander, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Charmeleon[] = {
+ overworld_ascending_frames(gObjectEventPic_Charmeleon, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Charizard[] = {
+ overworld_ascending_frames(gObjectEventPic_Charizard, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_CharizardMegaX[] = {
+ overworld_ascending_frames(gObjectEventPic_CharizardMegaX, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_CharizardMegaY[] = {
+ overworld_ascending_frames(gObjectEventPic_CharizardMegaY, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+#if P_GIGANTAMAX_FORMS
+/*static const struct SpriteFrameImage sPicTable_CharizardGigantamax[] = {
+ overworld_ascending_frames(gObjectEventPic_CharizardGigantamax, 4, 4),
+};*/
+#endif //P_GIGANTAMAX_FORMS
+#endif //P_FAMILY_CHARMANDER
+
+#if P_FAMILY_SQUIRTLE
+static const struct SpriteFrameImage sPicTable_Squirtle[] = {
+ overworld_ascending_frames(gObjectEventPic_Squirtle, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Wartortle[] = {
+ overworld_ascending_frames(gObjectEventPic_Wartortle, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Blastoise[] = {
+ overworld_ascending_frames(gObjectEventPic_Blastoise, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_BlastoiseMega[] = {
+ overworld_ascending_frames(gObjectEventPic_BlastoiseMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+#if P_GIGANTAMAX_FORMS
+/*static const struct SpriteFrameImage sPicTable_BlastoiseGigantamax[] = {
+ overworld_ascending_frames(gObjectEventPic_BlastoiseGigantamax, 4, 4),
+};*/
+#endif //P_GIGANTAMAX_FORMS
+#endif //P_FAMILY_SQUIRTLE
+
+#if P_FAMILY_CATERPIE
+static const struct SpriteFrameImage sPicTable_Caterpie[] = {
+ overworld_ascending_frames(gObjectEventPic_Caterpie, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Metapod[] = {
+ overworld_ascending_frames(gObjectEventPic_Metapod, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Butterfree[] = {
+ overworld_ascending_frames(gObjectEventPic_Butterfree, 4, 4),
+};
+#if P_GIGANTAMAX_FORMS
+/*static const struct SpriteFrameImage sPicTable_ButterfreeGigantamax[] = {
+ overworld_ascending_frames(gObjectEventPic_ButterfreeGigantamax, 4, 4),
+};*/
+#endif //P_GIGANTAMAX_FORMS
+#endif //P_FAMILY_CATERPIE
+
+#if P_FAMILY_WEEDLE
+static const struct SpriteFrameImage sPicTable_Weedle[] = {
+ overworld_ascending_frames(gObjectEventPic_Weedle, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Kakuna[] = {
+ overworld_ascending_frames(gObjectEventPic_Kakuna, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Beedrill[] = {
+ overworld_ascending_frames(gObjectEventPic_Beedrill, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_BeedrillMega[] = {
+ overworld_ascending_frames(gObjectEventPic_BeedrillMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+#endif //P_FAMILY_WEEDLE
+
+#if P_FAMILY_PIDGEY
+static const struct SpriteFrameImage sPicTable_Pidgey[] = {
+ overworld_ascending_frames(gObjectEventPic_Pidgey, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Pidgeotto[] = {
+ overworld_ascending_frames(gObjectEventPic_Pidgeotto, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Pidgeot[] = {
+ overworld_ascending_frames(gObjectEventPic_Pidgeot, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_PidgeotMega[] = {
+ overworld_ascending_frames(gObjectEventPic_PidgeotMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+#endif //P_FAMILY_PIDGEY
+
+#if P_FAMILY_RATTATA
+static const struct SpriteFrameImage sPicTable_Rattata[] = {
+ overworld_ascending_frames(gObjectEventPic_Rattata, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Raticate[] = {
+ overworld_ascending_frames(gObjectEventPic_Raticate, 4, 4),
+};
+#if P_ALOLAN_FORMS
+static const struct SpriteFrameImage sPicTable_RattataAlolan[] = {
+ overworld_ascending_frames(gObjectEventPic_RattataAlolan, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_RaticateAlolan[] = {
+ overworld_ascending_frames(gObjectEventPic_RaticateAlolan, 4, 4),
+};
+#endif //P_ALOLAN_FORMS
+#endif //P_FAMILY_RATTATA
+
+#if P_FAMILY_SPEAROW
+static const struct SpriteFrameImage sPicTable_Spearow[] = {
+ overworld_ascending_frames(gObjectEventPic_Spearow, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Fearow[] = {
+ overworld_ascending_frames(gObjectEventPic_Fearow, 4, 4),
+};
+#endif //P_FAMILY_SPEAROW
+
+#if P_FAMILY_EKANS
+static const struct SpriteFrameImage sPicTable_Ekans[] = {
+ overworld_ascending_frames(gObjectEventPic_Ekans, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Arbok[] = {
+ overworld_ascending_frames(gObjectEventPic_Arbok, 4, 4),
+};
+#endif //P_FAMILY_EKANS
+
+#if P_FAMILY_PIKACHU
+#if P_GEN_2_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Pichu[] = {
+ overworld_ascending_frames(gObjectEventPic_Pichu, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_PichuSpikyEared[] = {
+ overworld_ascending_frames(gObjectEventPic_PichuSpikyEared, 4, 4),
+};
+#endif //P_GEN_2_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Pikachu[] = {
+ overworld_ascending_frames(gObjectEventPic_Pikachu, 4, 4),
+};
+#if P_COSPLAY_PIKACHU_FORMS
+/*static const struct SpriteFrameImage sPicTable_PikachuCosplay[] = {
+ overworld_ascending_frames(gObjectEventPic_PikachuCosplay, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_PikachuRockStar[] = {
+ overworld_ascending_frames(gObjectEventPic_PikachuRockStar, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_PikachuBelle[] = {
+ overworld_ascending_frames(gObjectEventPic_PikachuBelle, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_PikachuPopStar[] = {
+ overworld_ascending_frames(gObjectEventPic_PikachuPopStar, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_PikachuPhD[] = {
+ overworld_ascending_frames(gObjectEventPic_PikachuPhD, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_PikachuLibre[] = {
+ overworld_ascending_frames(gObjectEventPic_PikachuLibre, 4, 4),
+};*/
+#endif //P_COSPLAY_PIKACHU_FORMS
+
+#if P_CAP_PIKACHU_FORMS
+/*static const struct SpriteFrameImage sPicTable_PikachuOriginalCap[] = {
+ overworld_ascending_frames(gObjectEventPic_PikachuOriginalCap, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_PikachuHoennCap[] = {
+ overworld_ascending_frames(gObjectEventPic_PikachuHoennCap, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_PikachuSinnohCap[] = {
+ overworld_ascending_frames(gObjectEventPic_PikachuSinnohCap, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_PikachuUnovaCap[] = {
+ overworld_ascending_frames(gObjectEventPic_PikachuUnovaCap, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_PikachuKalosCap[] = {
+ overworld_ascending_frames(gObjectEventPic_PikachuKalosCap, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_PikachuAlolaCap[] = {
+ overworld_ascending_frames(gObjectEventPic_PikachuAlolaCap, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_PikachuPartnerCap[] = {
+ overworld_ascending_frames(gObjectEventPic_PikachuPartnerCap, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_PikachuWorldCap[] = {
+ overworld_ascending_frames(gObjectEventPic_PikachuWorldCap, 4, 4),
+};*/
+#endif //P_CAP_PIKACHU_FORMS
+
+#if P_GIGANTAMAX_FORMS
+/*static const struct SpriteFrameImage sPicTable_PikachuGigantamax[] = {
+ overworld_ascending_frames(gObjectEventPic_PikachuGigantamax, 4, 4),
+};*/
+#endif //P_GIGANTAMAX_FORMS
+
+static const struct SpriteFrameImage sPicTable_Raichu[] = {
+ overworld_ascending_frames(gObjectEventPic_Raichu, 4, 4),
+};
+#if P_ALOLAN_FORMS
+static const struct SpriteFrameImage sPicTable_RaichuAlolan[] = {
+ overworld_ascending_frames(gObjectEventPic_RaichuAlolan, 4, 4),
+};
+#endif //P_ALOLAN_FORMS
+#endif //P_FAMILY_PIKACHU
+
+#if P_FAMILY_SANDSHREW
+static const struct SpriteFrameImage sPicTable_Sandshrew[] = {
+ overworld_ascending_frames(gObjectEventPic_Sandshrew, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Sandslash[] = {
+ overworld_ascending_frames(gObjectEventPic_Sandslash, 4, 4),
+};
+#if P_ALOLAN_FORMS
+static const struct SpriteFrameImage sPicTable_SandshrewAlolan[] = {
+ overworld_ascending_frames(gObjectEventPic_SandshrewAlolan, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_SandslashAlolan[] = {
+ overworld_ascending_frames(gObjectEventPic_SandslashAlolan, 4, 4),
+};
+#endif //P_ALOLAN_FORMS
+#endif //P_FAMILY_SANDSHREW
+
+#if P_FAMILY_NIDORAN
+static const struct SpriteFrameImage sPicTable_NidoranF[] = {
+ overworld_ascending_frames(gObjectEventPic_NidoranF, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Nidorina[] = {
+ overworld_ascending_frames(gObjectEventPic_Nidorina, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Nidoqueen[] = {
+ overworld_ascending_frames(gObjectEventPic_Nidoqueen, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_NidoranM[] = {
+ overworld_ascending_frames(gObjectEventPic_NidoranM, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Nidorino[] = {
+ overworld_ascending_frames(gObjectEventPic_Nidorino, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Nidoking[] = {
+ overworld_ascending_frames(gObjectEventPic_Nidoking, 4, 4),
+};
+#endif //P_FAMILY_NIDORAN
+
+#if P_FAMILY_CLEFAIRY
+#if P_GEN_2_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Cleffa[] = {
+ overworld_ascending_frames(gObjectEventPic_Cleffa, 4, 4),
+};
+#endif //P_GEN_2_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Clefairy[] = {
+ overworld_ascending_frames(gObjectEventPic_Clefairy, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Clefable[] = {
+ overworld_ascending_frames(gObjectEventPic_Clefable, 4, 4),
+};
+#endif //P_FAMILY_CLEFAIRY
+
+#if P_FAMILY_VULPIX
+static const struct SpriteFrameImage sPicTable_Vulpix[] = {
+ overworld_ascending_frames(gObjectEventPic_Vulpix, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Ninetales[] = {
+ overworld_ascending_frames(gObjectEventPic_Ninetales, 4, 4),
+};
+#if P_ALOLAN_FORMS
+static const struct SpriteFrameImage sPicTable_VulpixAlolan[] = {
+ overworld_ascending_frames(gObjectEventPic_VulpixAlolan, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_NinetalesAlolan[] = {
+ overworld_ascending_frames(gObjectEventPic_NinetalesAlolan, 4, 4),
+};
+#endif //P_ALOLAN_FORMS
+#endif //P_FAMILY_VULPIX
+
+#if P_FAMILY_JIGGLYPUFF
+#if P_GEN_2_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Igglybuff[] = {
+ overworld_ascending_frames(gObjectEventPic_Igglybuff, 4, 4),
+};
+#endif //P_GEN_2_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Jigglypuff[] = {
+ overworld_ascending_frames(gObjectEventPic_Jigglypuff, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Wigglytuff[] = {
+ overworld_ascending_frames(gObjectEventPic_Wigglytuff, 4, 4),
+};
+#endif //P_FAMILY_JIGGLYPUFF
+
+#if P_FAMILY_ZUBAT
+static const struct SpriteFrameImage sPicTable_Zubat[] = {
+ overworld_ascending_frames(gObjectEventPic_Zubat, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Golbat[] = {
+ overworld_ascending_frames(gObjectEventPic_Golbat, 4, 4),
+};
+#if P_GEN_2_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Crobat[] = {
+ overworld_ascending_frames(gObjectEventPic_Crobat, 4, 4),
+};
+#endif //P_GEN_2_CROSS_EVOS
+#endif //P_FAMILY_ZUBAT
+
+#if P_FAMILY_ODDISH
+static const struct SpriteFrameImage sPicTable_Oddish[] = {
+ overworld_ascending_frames(gObjectEventPic_Oddish, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Gloom[] = {
+ overworld_ascending_frames(gObjectEventPic_Gloom, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Vileplume[] = {
+ overworld_ascending_frames(gObjectEventPic_Vileplume, 4, 4),
+};
+#if P_GEN_2_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Bellossom[] = {
+ overworld_ascending_frames(gObjectEventPic_Bellossom, 4, 4),
+};
+#endif //P_GEN_2_CROSS_EVOS
+#endif //P_FAMILY_ODDISH
+
+#if P_FAMILY_PARAS
+static const struct SpriteFrameImage sPicTable_Paras[] = {
+ overworld_ascending_frames(gObjectEventPic_Paras, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Parasect[] = {
+ overworld_ascending_frames(gObjectEventPic_Parasect, 4, 4),
+};
+#endif //P_FAMILY_PARAS
+
+#if P_FAMILY_VENONAT
+static const struct SpriteFrameImage sPicTable_Venonat[] = {
+ overworld_ascending_frames(gObjectEventPic_Venonat, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Venomoth[] = {
+ overworld_ascending_frames(gObjectEventPic_Venomoth, 4, 4),
+};
+#endif //P_FAMILY_VENONAT
+
+#if P_FAMILY_DIGLETT
+static const struct SpriteFrameImage sPicTable_Diglett[] = {
+ overworld_ascending_frames(gObjectEventPic_Diglett, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Dugtrio[] = {
+ overworld_ascending_frames(gObjectEventPic_Dugtrio, 4, 4),
+};
+#if P_ALOLAN_FORMS
+static const struct SpriteFrameImage sPicTable_DiglettAlolan[] = {
+ overworld_ascending_frames(gObjectEventPic_DiglettAlolan, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_DugtrioAlolan[] = {
+ overworld_ascending_frames(gObjectEventPic_DugtrioAlolan, 4, 4),
+};
+#endif //P_ALOLAN_FORMS
+#endif //P_FAMILY_DIGLETT
+
+#if P_FAMILY_MEOWTH
+static const struct SpriteFrameImage sPicTable_Meowth[] = {
+ overworld_ascending_frames(gObjectEventPic_Meowth, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Persian[] = {
+ overworld_ascending_frames(gObjectEventPic_Persian, 4, 4),
+};
+#if P_ALOLAN_FORMS
+static const struct SpriteFrameImage sPicTable_MeowthAlolan[] = {
+ overworld_ascending_frames(gObjectEventPic_MeowthAlolan, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_PersianAlolan[] = {
+ overworld_ascending_frames(gObjectEventPic_PersianAlolan, 4, 4),
+};
+#endif //P_ALOLAN_FORMS
+
+#if P_GALARIAN_FORMS
+static const struct SpriteFrameImage sPicTable_MeowthGalarian[] = {
+ overworld_ascending_frames(gObjectEventPic_MeowthGalarian, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Perrserker[] = {
+ overworld_ascending_frames(gObjectEventPic_Perrserker, 4, 4),
+};
+#endif //P_GALARIAN_FORMS
+
+#if P_GIGANTAMAX_FORMS
+/*static const struct SpriteFrameImage sPicTable_MeowthGigantamax[] = {
+ overworld_ascending_frames(gObjectEventPic_MeowthGigantamax, 4, 4),
+};*/
+#endif //P_GIGANTAMAX_FORMS
+#endif //P_FAMILY_MEOWTH
+
+#if P_FAMILY_PSYDUCK
+static const struct SpriteFrameImage sPicTable_Psyduck[] = {
+ overworld_ascending_frames(gObjectEventPic_Psyduck, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Golduck[] = {
+ overworld_ascending_frames(gObjectEventPic_Golduck, 4, 4),
+};
+#endif //P_FAMILY_PSYDUCK
+
+#if P_FAMILY_MANKEY
+static const struct SpriteFrameImage sPicTable_Mankey[] = {
+ overworld_ascending_frames(gObjectEventPic_Mankey, 4, 4),
+};
+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[] = {
+ overworld_ascending_frames(gObjectEventPic_Annihilape, 4, 4),
+};*/
+#endif //P_GEN_9_CROSS_EVOS
+#endif //P_FAMILY_MANKEY
+
+#if P_FAMILY_GROWLITHE
+static const struct SpriteFrameImage sPicTable_Growlithe[] = {
+ overworld_ascending_frames(gObjectEventPic_Growlithe, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Arcanine[] = {
+ overworld_ascending_frames(gObjectEventPic_Arcanine, 4, 4),
+};
+#if P_HISUIAN_FORMS
+static const struct SpriteFrameImage sPicTable_GrowlitheHisuian[] = {
+ overworld_ascending_frames(gObjectEventPic_GrowlitheHisuian, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_ArcanineHisuian[] = {
+ overworld_ascending_frames(gObjectEventPic_ArcanineHisuian, 4, 4),
+};
+#endif //P_HISUIAN_FORMS
+#endif //P_FAMILY_GROWLITHE
+
+#if P_FAMILY_POLIWAG
+static const struct SpriteFrameImage sPicTable_Poliwag[] = {
+ overworld_ascending_frames(gObjectEventPic_Poliwag, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Poliwhirl[] = {
+ overworld_ascending_frames(gObjectEventPic_Poliwhirl, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Poliwrath[] = {
+ overworld_ascending_frames(gObjectEventPic_Poliwrath, 4, 4),
+};
+#if P_GEN_2_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Politoed[] = {
+ overworld_ascending_frames(gObjectEventPic_Politoed, 4, 4),
+};
+
+#endif //P_GEN_2_CROSS_EVOS
+#endif //P_FAMILY_POLIWAG
+
+#if P_FAMILY_ABRA
+static const struct SpriteFrameImage sPicTable_Abra[] = {
+ overworld_ascending_frames(gObjectEventPic_Abra, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Kadabra[] = {
+ overworld_ascending_frames(gObjectEventPic_Kadabra, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Alakazam[] = {
+ overworld_ascending_frames(gObjectEventPic_Alakazam, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_AlakazamMega[] = {
+ overworld_ascending_frames(gObjectEventPic_AlakazamMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+#endif //P_FAMILY_ABRA
+
+#if P_FAMILY_MACHOP
+static const struct SpriteFrameImage sPicTable_Machop[] = {
+ overworld_ascending_frames(gObjectEventPic_Machop, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Machoke[] = {
+ overworld_ascending_frames(gObjectEventPic_Machoke, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Machamp[] = {
+ overworld_ascending_frames(gObjectEventPic_Machamp, 4, 4),
+};
+#if P_GIGANTAMAX_FORMS
+/*static const struct SpriteFrameImage sPicTable_MachampGigantamax[] = {
+ overworld_ascending_frames(gObjectEventPic_MachampGigantamax, 4, 4),
+};*/
+#endif //P_GIGANTAMAX_FORMS
+#endif //P_FAMILY_MACHOP
+
+#if P_FAMILY_BELLSPROUT
+static const struct SpriteFrameImage sPicTable_Bellsprout[] = {
+ overworld_ascending_frames(gObjectEventPic_Bellsprout, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Weepinbell[] = {
+ overworld_ascending_frames(gObjectEventPic_Weepinbell, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Victreebel[] = {
+ overworld_ascending_frames(gObjectEventPic_Victreebel, 4, 4),
+};
+#endif //P_FAMILY_BELLSPROUT
+
+#if P_FAMILY_TENTACOOL
+static const struct SpriteFrameImage sPicTable_Tentacool[] = {
+ overworld_ascending_frames(gObjectEventPic_Tentacool, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Tentacruel[] = {
+ overworld_ascending_frames(gObjectEventPic_Tentacruel, 4, 4),
+};
+#endif //P_FAMILY_TENTACOOL
+
+#if P_FAMILY_GEODUDE
+static const struct SpriteFrameImage sPicTable_Geodude[] = {
+ overworld_ascending_frames(gObjectEventPic_Geodude, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Graveler[] = {
+ overworld_ascending_frames(gObjectEventPic_Graveler, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Golem[] = {
+ overworld_ascending_frames(gObjectEventPic_Golem, 4, 4),
+};
+#if P_ALOLAN_FORMS
+static const struct SpriteFrameImage sPicTable_GeodudeAlolan[] = {
+ overworld_ascending_frames(gObjectEventPic_GeodudeAlolan, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_GravelerAlolan[] = {
+ overworld_ascending_frames(gObjectEventPic_GravelerAlolan, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_GolemAlolan[] = {
+ overworld_ascending_frames(gObjectEventPic_GolemAlolan, 4, 4),
+};
+#endif //P_ALOLAN_FORMS
+#endif //P_FAMILY_GEODUDE
+
+#if P_FAMILY_PONYTA
+static const struct SpriteFrameImage sPicTable_Ponyta[] = {
+ overworld_ascending_frames(gObjectEventPic_Ponyta, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Rapidash[] = {
+ overworld_ascending_frames(gObjectEventPic_Rapidash, 4, 4),
+};
+#if P_GALARIAN_FORMS
+static const struct SpriteFrameImage sPicTable_PonytaGalarian[] = {
+ overworld_ascending_frames(gObjectEventPic_PonytaGalarian, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_RapidashGalarian[] = {
+ overworld_ascending_frames(gObjectEventPic_RapidashGalarian, 4, 4),
+};
+#endif //P_GALARIAN_FORMS
+#endif //P_FAMILY_PONYTA
+
+#if P_FAMILY_SLOWPOKE
+static const struct SpriteFrameImage sPicTable_Slowpoke[] = {
+ overworld_ascending_frames(gObjectEventPic_Slowpoke, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Slowbro[] = {
+ overworld_ascending_frames(gObjectEventPic_Slowbro, 4, 4),
+};
+#if P_GEN_2_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Slowking[] = {
+ overworld_ascending_frames(gObjectEventPic_Slowking, 4, 4),
+};
+#endif //P_GEN_2_CROSS_EVOS
+
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_SlowbroMega[] = {
+ overworld_ascending_frames(gObjectEventPic_SlowbroMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+
+#if P_GALARIAN_FORMS
+static const struct SpriteFrameImage sPicTable_SlowpokeGalarian[] = {
+ overworld_ascending_frames(gObjectEventPic_SlowpokeGalarian, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_SlowbroGalarian[] = {
+ overworld_ascending_frames(gObjectEventPic_SlowbroGalarian, 4, 4),
+};
+#if P_GEN_2_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_SlowkingGalarian[] = {
+ overworld_ascending_frames(gObjectEventPic_SlowkingGalarian, 4, 4),
+};
+#endif //P_GEN_2_CROSS_EVOS
+#endif //P_GALARIAN_FORMS
+#endif //P_FAMILY_SLOWPOKE
+
+#if P_FAMILY_MAGNEMITE
+static const struct SpriteFrameImage sPicTable_Magnemite[] = {
+ overworld_ascending_frames(gObjectEventPic_Magnemite, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Magneton[] = {
+ overworld_ascending_frames(gObjectEventPic_Magneton, 4, 4),
+};
+#if P_GEN_4_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Magnezone[] = {
+ overworld_ascending_frames(gObjectEventPic_Magnezone, 4, 4),
+};
+#endif //P_GEN_4_CROSS_EVOS
+#endif //P_FAMILY_MAGNEMITE
+
+#if P_FAMILY_FARFETCHD
+static const struct SpriteFrameImage sPicTable_Farfetchd[] = {
+ overworld_ascending_frames(gObjectEventPic_Farfetchd, 4, 4),
+};
+#if P_GALARIAN_FORMS
+static const struct SpriteFrameImage sPicTable_FarfetchdGalarian[] = {
+ overworld_ascending_frames(gObjectEventPic_FarfetchdGalarian, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Sirfetchd[] = {
+ overworld_ascending_frames(gObjectEventPic_Sirfetchd, 4, 4),
+};
+#endif //P_GALARIAN_FORMS
+#endif //P_FAMILY_FARFETCHD
+
+#if P_FAMILY_DODUO
+static const struct SpriteFrameImage sPicTable_Doduo[] = {
+ overworld_ascending_frames(gObjectEventPic_Doduo, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Dodrio[] = {
+ overworld_ascending_frames(gObjectEventPic_Dodrio, 4, 4),
+};
+#endif //P_FAMILY_DODUO
+
+#if P_FAMILY_SEEL
+static const struct SpriteFrameImage sPicTable_Seel[] = {
+ overworld_ascending_frames(gObjectEventPic_Seel, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Dewgong[] = {
+ overworld_ascending_frames(gObjectEventPic_Dewgong, 4, 4),
+};
+#endif //P_FAMILY_SEEL
+
+#if P_FAMILY_GRIMER
+static const struct SpriteFrameImage sPicTable_Grimer[] = {
+ overworld_ascending_frames(gObjectEventPic_Grimer, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Muk[] = {
+ overworld_ascending_frames(gObjectEventPic_Muk, 4, 4),
+};
+#if P_ALOLAN_FORMS
+static const struct SpriteFrameImage sPicTable_GrimerAlolan[] = {
+ overworld_ascending_frames(gObjectEventPic_GrimerAlolan, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_MukAlolan[] = {
+ overworld_ascending_frames(gObjectEventPic_MukAlolan, 4, 4),
+};
+#endif //P_ALOLAN_FORMS
+#endif //P_FAMILY_GRIMER
+
+#if P_FAMILY_SHELLDER
+static const struct SpriteFrameImage sPicTable_Shellder[] = {
+ overworld_ascending_frames(gObjectEventPic_Shellder, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Cloyster[] = {
+ overworld_ascending_frames(gObjectEventPic_Cloyster, 4, 4),
+};
+#endif //P_FAMILY_SHELLDER
+
+#if P_FAMILY_GASTLY
+static const struct SpriteFrameImage sPicTable_Gastly[] = {
+ overworld_ascending_frames(gObjectEventPic_Gastly, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Haunter[] = {
+ overworld_ascending_frames(gObjectEventPic_Haunter, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Gengar[] = {
+ overworld_ascending_frames(gObjectEventPic_Gengar, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_GengarMega[] = {
+ overworld_ascending_frames(gObjectEventPic_GengarMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+#if P_GIGANTAMAX_FORMS
+/*static const struct SpriteFrameImage sPicTable_GengarGigantamax[] = {
+ overworld_ascending_frames(gObjectEventPic_GengarGigantamax, 4, 4),
+};*/
+#endif //P_GIGANTAMAX_FORMS
+#endif //P_FAMILY_GASTLY
+
+#if P_FAMILY_ONIX
+static const struct SpriteFrameImage sPicTable_Onix[] = {
+ overworld_ascending_frames(gObjectEventPic_Onix, 4, 4),
+};
+#if P_GEN_2_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Steelix[] = {
+ overworld_ascending_frames(gObjectEventPic_Steelix, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_SteelixMega[] = {
+ overworld_ascending_frames(gObjectEventPic_SteelixMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+#endif //P_GEN_2_CROSS_EVOS
+#endif //P_FAMILY_ONIX
+
+#if P_FAMILY_DROWZEE
+static const struct SpriteFrameImage sPicTable_Drowzee[] = {
+ overworld_ascending_frames(gObjectEventPic_Drowzee, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Hypno[] = {
+ overworld_ascending_frames(gObjectEventPic_Hypno, 4, 4),
+};
+#endif //P_FAMILY_DROWZEE
+
+#if P_FAMILY_KRABBY
+static const struct SpriteFrameImage sPicTable_Krabby[] = {
+ overworld_ascending_frames(gObjectEventPic_Krabby, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Kingler[] = {
+ overworld_ascending_frames(gObjectEventPic_Kingler, 4, 4),
+};
+#if P_GIGANTAMAX_FORMS
+/*static const struct SpriteFrameImage sPicTable_KinglerGigantamax[] = {
+ overworld_ascending_frames(gObjectEventPic_KinglerGigantamax, 4, 4),
+};*/
+#endif //P_GIGANTAMAX_FORMS
+#endif //P_FAMILY_KRABBY
+
+#if P_FAMILY_VOLTORB
+static const struct SpriteFrameImage sPicTable_Voltorb[] = {
+ overworld_ascending_frames(gObjectEventPic_Voltorb, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Electrode[] = {
+ overworld_ascending_frames(gObjectEventPic_Electrode, 4, 4),
+};
+#if P_HISUIAN_FORMS
+static const struct SpriteFrameImage sPicTable_VoltorbHisuian[] = {
+ overworld_ascending_frames(gObjectEventPic_VoltorbHisuian, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_ElectrodeHisuian[] = {
+ overworld_ascending_frames(gObjectEventPic_ElectrodeHisuian, 4, 4),
+};
+#endif //P_HISUIAN_FORMS
+#endif //P_FAMILY_VOLTORB
+
+#if P_FAMILY_EXEGGCUTE
+static const struct SpriteFrameImage sPicTable_Exeggcute[] = {
+ overworld_ascending_frames(gObjectEventPic_Exeggcute, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Exeggutor[] = {
+ overworld_ascending_frames(gObjectEventPic_Exeggutor, 4, 4),
+};
+#if P_ALOLAN_FORMS
+static const struct SpriteFrameImage sPicTable_ExeggutorAlolan[] = {
+ overworld_ascending_frames(gObjectEventPic_ExeggutorAlolan, 4, 4),
+};
+#endif //P_ALOLAN_FORMS
+#endif //P_FAMILY_EXEGGCUTE
+
+#if P_FAMILY_CUBONE
+static const struct SpriteFrameImage sPicTable_Cubone[] = {
+ overworld_ascending_frames(gObjectEventPic_Cubone, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Marowak[] = {
+ overworld_ascending_frames(gObjectEventPic_Marowak, 4, 4),
+};
+#if P_ALOLAN_FORMS
+static const struct SpriteFrameImage sPicTable_MarowakAlolan[] = {
+ overworld_ascending_frames(gObjectEventPic_MarowakAlolan, 4, 4),
+};
+#endif //P_ALOLAN_FORMS
+#endif //P_FAMILY_CUBONE
+
+#if P_FAMILY_HITMONS
+#if P_GEN_2_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Tyrogue[] = {
+ overworld_ascending_frames(gObjectEventPic_Tyrogue, 4, 4),
+};
+#endif //P_GEN_2_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Hitmonlee[] = {
+ overworld_ascending_frames(gObjectEventPic_Hitmonlee, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Hitmonchan[] = {
+ overworld_ascending_frames(gObjectEventPic_Hitmonchan, 4, 4),
+};
+#if P_GEN_2_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Hitmontop[] = {
+ overworld_ascending_frames(gObjectEventPic_Hitmontop, 4, 4),
+};
+#endif //P_GEN_2_CROSS_EVOS
+#endif //P_FAMILY_HITMONS
+
+#if P_FAMILY_LICKITUNG
+static const struct SpriteFrameImage sPicTable_Lickitung[] = {
+ overworld_ascending_frames(gObjectEventPic_Lickitung, 4, 4),
+};
+#if P_GEN_4_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Lickilicky[] = {
+ overworld_ascending_frames(gObjectEventPic_Lickilicky, 4, 4),
+};
+#endif //P_GEN_4_CROSS_EVOS
+#endif //P_FAMILY_LICKITUNG
+
+#if P_FAMILY_KOFFING
+static const struct SpriteFrameImage sPicTable_Koffing[] = {
+ overworld_ascending_frames(gObjectEventPic_Koffing, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Weezing[] = {
+ overworld_ascending_frames(gObjectEventPic_Weezing, 4, 4),
+};
+#if P_GALARIAN_FORMS
+static const struct SpriteFrameImage sPicTable_WeezingGalarian[] = {
+ overworld_ascending_frames(gObjectEventPic_WeezingGalarian, 4, 4),
+};
+#endif //P_GALARIAN_FORMS
+#endif //P_FAMILY_KOFFING
+
+#if P_FAMILY_RHYHORN
+static const struct SpriteFrameImage sPicTable_Rhyhorn[] = {
+ overworld_ascending_frames(gObjectEventPic_Rhyhorn, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Rhydon[] = {
+ overworld_ascending_frames(gObjectEventPic_Rhydon, 4, 4),
+};
+#if P_GEN_4_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Rhyperior[] = {
+ overworld_ascending_frames(gObjectEventPic_Rhyperior, 4, 4),
+};
+
+#endif //P_GEN_4_CROSS_EVOS
+#endif //P_FAMILY_RHYHORN
+
+#if P_FAMILY_CHANSEY
+#if P_GEN_4_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Happiny[] = {
+ overworld_ascending_frames(gObjectEventPic_Happiny, 4, 4),
+};
+#endif //P_GEN_4_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Chansey[] = {
+ overworld_ascending_frames(gObjectEventPic_Chansey, 4, 4),
+};
+#if P_GEN_2_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Blissey[] = {
+ overworld_ascending_frames(gObjectEventPic_Blissey, 4, 4),
+};
+#endif //P_GEN_2_CROSS_EVOS
+#endif //P_FAMILY_CHANSEY
+
+#if P_FAMILY_TANGELA
+static const struct SpriteFrameImage sPicTable_Tangela[] = {
+ overworld_ascending_frames(gObjectEventPic_Tangela, 4, 4),
+};
+#if P_GEN_4_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Tangrowth[] = {
+ overworld_ascending_frames(gObjectEventPic_Tangrowth, 4, 4),
+};
+
+#endif //P_GEN_4_CROSS_EVOS
+#endif //P_FAMILY_TANGELA
+
+#if P_FAMILY_KANGASKHAN
+static const struct SpriteFrameImage sPicTable_Kangaskhan[] = {
+ overworld_ascending_frames(gObjectEventPic_Kangaskhan, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_KangaskhanMega[] = {
+ overworld_ascending_frames(gObjectEventPic_KangaskhanMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+#endif //P_FAMILY_KANGASKHAN
+
+#if P_FAMILY_HORSEA
+static const struct SpriteFrameImage sPicTable_Horsea[] = {
+ overworld_ascending_frames(gObjectEventPic_Horsea, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Seadra[] = {
+ overworld_ascending_frames(gObjectEventPic_Seadra, 4, 4),
+};
+#if P_GEN_2_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Kingdra[] = {
+ overworld_ascending_frames(gObjectEventPic_Kingdra, 4, 4),
+};
+#endif //P_GEN_2_CROSS_EVOS
+#endif //P_FAMILY_HORSEA
+
+#if P_FAMILY_GOLDEEN
+static const struct SpriteFrameImage sPicTable_Goldeen[] = {
+ overworld_ascending_frames(gObjectEventPic_Goldeen, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Seaking[] = {
+ overworld_ascending_frames(gObjectEventPic_Seaking, 4, 4),
+};
+#endif //P_FAMILY_GOLDEEN
+
+#if P_FAMILY_STARYU
+static const struct SpriteFrameImage sPicTable_Staryu[] = {
+ overworld_ascending_frames(gObjectEventPic_Staryu, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Starmie[] = {
+ overworld_ascending_frames(gObjectEventPic_Starmie, 4, 4),
+};
+#endif //P_FAMILY_STARYU
+
+#if P_FAMILY_MR_MIME
+#if P_GEN_4_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_MimeJr[] = {
+ overworld_ascending_frames(gObjectEventPic_MimeJr, 4, 4),
+};
+#endif //P_GEN_4_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_MrMime[] = {
+ overworld_ascending_frames(gObjectEventPic_MrMime, 4, 4),
+};
+#if P_GALARIAN_FORMS
+static const struct SpriteFrameImage sPicTable_MrMimeGalarian[] = {
+ overworld_ascending_frames(gObjectEventPic_MrMimeGalarian, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_MrRime[] = {
+ overworld_ascending_frames(gObjectEventPic_MrRime, 4, 4),
+};
+#endif //P_GALARIAN_FORMS
+#endif //P_FAMILY_MR_MIME
+
+#if P_FAMILY_SCYTHER
+static const struct SpriteFrameImage sPicTable_Scyther[] = {
+ overworld_ascending_frames(gObjectEventPic_Scyther, 4, 4),
+};
+#if P_GEN_2_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Scizor[] = {
+ overworld_ascending_frames(gObjectEventPic_Scizor, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_ScizorMega[] = {
+ overworld_ascending_frames(gObjectEventPic_ScizorMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+#endif //P_GEN_2_CROSS_EVOS
+
+#if P_GEN_8_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Kleavor[] = {
+ overworld_ascending_frames(gObjectEventPic_Kleavor, 4, 4),
+};
+#endif //P_GEN_8_CROSS_EVOS
+#endif //P_FAMILY_SCYTHER
+
+#if P_FAMILY_JYNX
+#if P_GEN_2_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Smoochum[] = {
+ overworld_ascending_frames(gObjectEventPic_Smoochum, 4, 4),
+};
+#endif //P_GEN_2_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Jynx[] = {
+ overworld_ascending_frames(gObjectEventPic_Jynx, 4, 4),
+};
+#endif //P_FAMILY_JYNX
+
+#if P_FAMILY_ELECTABUZZ
+#if P_GEN_2_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Elekid[] = {
+ overworld_ascending_frames(gObjectEventPic_Elekid, 4, 4),
+};
+#endif //P_GEN_2_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Electabuzz[] = {
+ overworld_ascending_frames(gObjectEventPic_Electabuzz, 4, 4),
+};
+#if P_GEN_4_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Electivire[] = {
+ overworld_ascending_frames(gObjectEventPic_Electivire, 4, 4),
+};
+#endif //P_GEN_4_CROSS_EVOS
+#endif //P_FAMILY_ELECTABUZZ
+
+#if P_FAMILY_MAGMAR
+#if P_GEN_2_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Magby[] = {
+ overworld_ascending_frames(gObjectEventPic_Magby, 4, 4),
+};
+#endif //P_GEN_2_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Magmar[] = {
+ overworld_ascending_frames(gObjectEventPic_Magmar, 4, 4),
+};
+#if P_GEN_4_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Magmortar[] = {
+ overworld_ascending_frames(gObjectEventPic_Magmortar, 4, 4),
+};
+#endif //P_GEN_4_CROSS_EVOS
+#endif //P_FAMILY_MAGMAR
+
+#if P_FAMILY_PINSIR
+static const struct SpriteFrameImage sPicTable_Pinsir[] = {
+ overworld_ascending_frames(gObjectEventPic_Pinsir, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_PinsirMega[] = {
+ overworld_ascending_frames(gObjectEventPic_PinsirMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+#endif //P_FAMILY_PINSIR
+
+#if P_FAMILY_TAUROS
+static const struct SpriteFrameImage sPicTable_Tauros[] = {
+ overworld_ascending_frames(gObjectEventPic_Tauros, 4, 4),
+};
+#if P_PALDEAN_FORMS
+/*static const struct SpriteFrameImage sPicTable_TaurosPaldeanCombatBreed[] = {
+ overworld_ascending_frames(gObjectEventPic_TaurosPaldeanCombatBreed, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_TaurosPaldeanBlazeBreed[] = {
+ overworld_ascending_frames(gObjectEventPic_TaurosPaldeanBlazeBreed, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_TaurosPaldeanAquaBreed[] = {
+ overworld_ascending_frames(gObjectEventPic_TaurosPaldeanAquaBreed, 4, 4),
+};*/
+#endif //P_PALDEAN_FORMS
+#endif //P_FAMILY_TAUROS
+
+#if P_FAMILY_MAGIKARP
+static const struct SpriteFrameImage sPicTable_Magikarp[] = {
+ overworld_ascending_frames(gObjectEventPic_Magikarp, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Gyarados[] = {
+ overworld_ascending_frames(gObjectEventPic_Gyarados, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_GyaradosMega[] = {
+ overworld_ascending_frames(gObjectEventPic_GyaradosMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+#endif //P_FAMILY_MAGIKARP
+
+#if P_FAMILY_LAPRAS
+static const struct SpriteFrameImage sPicTable_Lapras[] = {
+ overworld_ascending_frames(gObjectEventPic_Lapras, 4, 4),
+};
+#if P_GIGANTAMAX_FORMS
+/*static const struct SpriteFrameImage sPicTable_LaprasGigantamax[] = {
+ overworld_ascending_frames(gObjectEventPic_LaprasGigantamax, 4, 4),
+};*/
+#endif //P_GIGANTAMAX_FORMS
+#endif //P_FAMILY_LAPRAS
+
+#if P_FAMILY_DITTO
+static const struct SpriteFrameImage sPicTable_Ditto[] = {
+ overworld_ascending_frames(gObjectEventPic_Ditto, 4, 4),
+};
+#endif //P_FAMILY_DITTO
+
+#if P_FAMILY_EEVEE
+static const struct SpriteFrameImage sPicTable_Eevee[] = {
+ overworld_ascending_frames(gObjectEventPic_Eevee, 4, 4),
+};
+#if P_GIGANTAMAX_FORMS
+/*static const struct SpriteFrameImage sPicTable_EeveeGigantamax[] = {
+ overworld_ascending_frames(gObjectEventPic_EeveeGigantamax, 4, 4),
+};*/
+#endif //P_GIGANTAMAX_FORMS
+
+static const struct SpriteFrameImage sPicTable_Vaporeon[] = {
+ overworld_ascending_frames(gObjectEventPic_Vaporeon, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Jolteon[] = {
+ overworld_ascending_frames(gObjectEventPic_Jolteon, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Flareon[] = {
+ overworld_ascending_frames(gObjectEventPic_Flareon, 4, 4),
+};
+#if P_GEN_2_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Espeon[] = {
+ overworld_ascending_frames(gObjectEventPic_Espeon, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Umbreon[] = {
+ overworld_ascending_frames(gObjectEventPic_Umbreon, 4, 4),
+};
+#endif //P_GEN_2_CROSS_EVOS
+
+#if P_GEN_4_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Leafeon[] = {
+ overworld_ascending_frames(gObjectEventPic_Leafeon, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Glaceon[] = {
+ overworld_ascending_frames(gObjectEventPic_Glaceon, 4, 4),
+};
+#endif //P_GEN_4_CROSS_EVOS
+
+#if P_GEN_6_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Sylveon[] = {
+ overworld_ascending_frames(gObjectEventPic_Sylveon, 4, 4),
+};
+#endif //P_GEN_6_CROSS_EVOS
+#endif //P_FAMILY_EEVEE
+
+#if P_FAMILY_PORYGON
+static const struct SpriteFrameImage sPicTable_Porygon[] = {
+ overworld_ascending_frames(gObjectEventPic_Porygon, 4, 4),
+};
+#if P_GEN_2_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Porygon2[] = {
+ overworld_ascending_frames(gObjectEventPic_Porygon2, 4, 4),
+};
+#if P_GEN_4_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_PorygonZ[] = {
+ overworld_ascending_frames(gObjectEventPic_PorygonZ, 4, 4),
+};
+#endif //P_GEN_4_CROSS_EVOS
+#endif //P_GEN_2_CROSS_EVOS
+#endif //P_FAMILY_PORYGON
+
+#if P_FAMILY_OMANYTE
+static const struct SpriteFrameImage sPicTable_Omanyte[] = {
+ overworld_ascending_frames(gObjectEventPic_Omanyte, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Omastar[] = {
+ overworld_ascending_frames(gObjectEventPic_Omastar, 4, 4),
+};
+#endif //P_FAMILY_OMANYTE
+
+#if P_FAMILY_KABUTO
+static const struct SpriteFrameImage sPicTable_Kabuto[] = {
+ overworld_ascending_frames(gObjectEventPic_Kabuto, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Kabutops[] = {
+ overworld_ascending_frames(gObjectEventPic_Kabutops, 4, 4),
+};
+#endif //P_FAMILY_KABUTO
+
+#if P_FAMILY_AERODACTYL
+static const struct SpriteFrameImage sPicTable_Aerodactyl[] = {
+ overworld_ascending_frames(gObjectEventPic_Aerodactyl, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_AerodactylMega[] = {
+ overworld_ascending_frames(gObjectEventPic_AerodactylMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+#endif //P_FAMILY_AERODACTYL
+
+#if P_FAMILY_SNORLAX
+#if P_GEN_4_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Munchlax[] = {
+ overworld_ascending_frames(gObjectEventPic_Munchlax, 4, 4),
+};
+#endif //P_GEN_4_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Snorlax[] = {
+ overworld_ascending_frames(gObjectEventPic_Snorlax, 4, 4),
+};
+#if P_GIGANTAMAX_FORMS
+/*static const struct SpriteFrameImage sPicTable_SnorlaxGigantamax[] = {
+ overworld_ascending_frames(gObjectEventPic_SnorlaxGigantamax, 4, 4),
+};*/
+#endif //P_GIGANTAMAX_FORMS
+#endif //P_FAMILY_SNORLAX
+
+#if P_FAMILY_ARTICUNO
+static const struct SpriteFrameImage sPicTable_Articuno[] = {
+ overworld_ascending_frames(gObjectEventPic_Articuno, 4, 4),
+};
+#if P_GALARIAN_FORMS
+static const struct SpriteFrameImage sPicTable_ArticunoGalarian[] = {
+ overworld_ascending_frames(gObjectEventPic_ArticunoGalarian, 4, 4),
+};
+#endif //P_GALARIAN_FORMS
+#endif //P_FAMILY_ARTICUNO
+
+#if P_FAMILY_ZAPDOS
+static const struct SpriteFrameImage sPicTable_Zapdos[] = {
+ overworld_ascending_frames(gObjectEventPic_Zapdos, 4, 4),
+};
+#if P_GALARIAN_FORMS
+static const struct SpriteFrameImage sPicTable_ZapdosGalarian[] = {
+ overworld_ascending_frames(gObjectEventPic_ZapdosGalarian, 4, 4),
+};
+#endif //P_GALARIAN_FORMS
+#endif //P_FAMILY_ZAPDOS
+
+#if P_FAMILY_MOLTRES
+static const struct SpriteFrameImage sPicTable_Moltres[] = {
+ overworld_ascending_frames(gObjectEventPic_Moltres, 4, 4),
+};
+#if P_GALARIAN_FORMS
+static const struct SpriteFrameImage sPicTable_MoltresGalarian[] = {
+ overworld_ascending_frames(gObjectEventPic_MoltresGalarian, 4, 4),
+};
+#endif //P_GALARIAN_FORMS
+#endif //P_FAMILY_MOLTRES
+
+#if P_FAMILY_DRATINI
+static const struct SpriteFrameImage sPicTable_Dratini[] = {
+ overworld_ascending_frames(gObjectEventPic_Dratini, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Dragonair[] = {
+ overworld_ascending_frames(gObjectEventPic_Dragonair, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Dragonite[] = {
+ overworld_ascending_frames(gObjectEventPic_Dragonite, 4, 4),
+};
+#endif //P_FAMILY_DRATINI
+
+#if P_FAMILY_MEWTWO
+static const struct SpriteFrameImage sPicTable_Mewtwo[] = {
+ overworld_ascending_frames(gObjectEventPic_Mewtwo, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_MewtwoMegaX[] = {
+ overworld_ascending_frames(gObjectEventPic_MewtwoMegaX, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_MewtwoMegaY[] = {
+ overworld_ascending_frames(gObjectEventPic_MewtwoMegaY, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+#endif //P_FAMILY_MEWTWO
+
+#if P_FAMILY_MEW
+static const struct SpriteFrameImage sPicTable_Mew[] = {
+ overworld_ascending_frames(gObjectEventPic_Mew, 4, 4),
+};
+#endif //P_FAMILY_MEW
+
+#if P_FAMILY_CHIKORITA
+static const struct SpriteFrameImage sPicTable_Chikorita[] = {
+ overworld_ascending_frames(gObjectEventPic_Chikorita, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Bayleef[] = {
+ overworld_ascending_frames(gObjectEventPic_Bayleef, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Meganium[] = {
+ overworld_ascending_frames(gObjectEventPic_Meganium, 4, 4),
+};
+#endif //P_FAMILY_CHIKORITA
+
+#if P_FAMILY_CYNDAQUIL
+static const struct SpriteFrameImage sPicTable_Cyndaquil[] = {
+ overworld_ascending_frames(gObjectEventPic_Cyndaquil, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Quilava[] = {
+ overworld_ascending_frames(gObjectEventPic_Quilava, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Typhlosion[] = {
+ overworld_ascending_frames(gObjectEventPic_Typhlosion, 4, 4),
+};
+#if P_HISUIAN_FORMS
+static const struct SpriteFrameImage sPicTable_TyphlosionHisuian[] = {
+ overworld_ascending_frames(gObjectEventPic_TyphlosionHisuian, 4, 4),
+};
+#endif //P_HISUIAN_FORMS
+#endif //P_FAMILY_CYNDAQUIL
+
+#if P_FAMILY_TOTODILE
+static const struct SpriteFrameImage sPicTable_Totodile[] = {
+ overworld_ascending_frames(gObjectEventPic_Totodile, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Croconaw[] = {
+ overworld_ascending_frames(gObjectEventPic_Croconaw, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Feraligatr[] = {
+ overworld_ascending_frames(gObjectEventPic_Feraligatr, 4, 4),
+};
+#endif //P_FAMILY_TOTODILE
+
+#if P_FAMILY_SENTRET
+static const struct SpriteFrameImage sPicTable_Sentret[] = {
+ overworld_ascending_frames(gObjectEventPic_Sentret, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Furret[] = {
+ overworld_ascending_frames(gObjectEventPic_Furret, 4, 4),
+};
+#endif //P_FAMILY_SENTRET
+
+#if P_FAMILY_HOOTHOOT
+static const struct SpriteFrameImage sPicTable_Hoothoot[] = {
+ overworld_ascending_frames(gObjectEventPic_Hoothoot, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Noctowl[] = {
+ overworld_ascending_frames(gObjectEventPic_Noctowl, 4, 4),
+};
+#endif //P_FAMILY_HOOTHOOT
+
+#if P_FAMILY_LEDYBA
+static const struct SpriteFrameImage sPicTable_Ledyba[] = {
+ overworld_ascending_frames(gObjectEventPic_Ledyba, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Ledian[] = {
+ overworld_ascending_frames(gObjectEventPic_Ledian, 4, 4),
+};
+#endif //P_FAMILY_LEDYBA
+
+#if P_FAMILY_SPINARAK
+static const struct SpriteFrameImage sPicTable_Spinarak[] = {
+ overworld_ascending_frames(gObjectEventPic_Spinarak, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Ariados[] = {
+ overworld_ascending_frames(gObjectEventPic_Ariados, 4, 4),
+};
+#endif //P_FAMILY_SPINARAK
+
+#if P_FAMILY_CHINCHOU
+static const struct SpriteFrameImage sPicTable_Chinchou[] = {
+ overworld_ascending_frames(gObjectEventPic_Chinchou, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Lanturn[] = {
+ overworld_ascending_frames(gObjectEventPic_Lanturn, 4, 4),
+};
+#endif //P_FAMILY_CHINCHOU
+
+#if P_FAMILY_TOGEPI
+static const struct SpriteFrameImage sPicTable_Togepi[] = {
+ overworld_ascending_frames(gObjectEventPic_Togepi, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Togetic[] = {
+ overworld_ascending_frames(gObjectEventPic_Togetic, 4, 4),
+};
+#if P_GEN_4_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Togekiss[] = {
+ overworld_ascending_frames(gObjectEventPic_Togekiss, 4, 4),
+};
+#endif //P_GEN_4_CROSS_EVOS
+#endif //P_FAMILY_TOGEPI
+
+#if P_FAMILY_NATU
+static const struct SpriteFrameImage sPicTable_Natu[] = {
+ overworld_ascending_frames(gObjectEventPic_Natu, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Xatu[] = {
+ overworld_ascending_frames(gObjectEventPic_Xatu, 4, 4),
+};
+#endif //P_FAMILY_NATU
+
+#if P_FAMILY_MAREEP
+static const struct SpriteFrameImage sPicTable_Mareep[] = {
+ overworld_ascending_frames(gObjectEventPic_Mareep, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Flaaffy[] = {
+ overworld_ascending_frames(gObjectEventPic_Flaaffy, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Ampharos[] = {
+ overworld_ascending_frames(gObjectEventPic_Ampharos, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_AmpharosMega[] = {
+ overworld_ascending_frames(gObjectEventPic_AmpharosMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+#endif //P_FAMILY_MAREEP
+
+#if P_FAMILY_MARILL
+#if P_GEN_3_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Azurill[] = {
+ overworld_ascending_frames(gObjectEventPic_Azurill, 4, 4),
+};
+#endif //P_GEN_3_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Marill[] = {
+ overworld_ascending_frames(gObjectEventPic_Marill, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Azumarill[] = {
+ overworld_ascending_frames(gObjectEventPic_Azumarill, 4, 4),
+};
+#endif //P_FAMILY_MARILL
+
+#if P_FAMILY_SUDOWOODO
+#if P_GEN_4_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Bonsly[] = {
+ overworld_ascending_frames(gObjectEventPic_Bonsly, 4, 4),
+};
+#endif //P_GEN_4_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Sudowoodo[] = {
+ overworld_ascending_frames(gObjectEventPic_Sudowoodo, 4, 4),
+};
+#endif //P_FAMILY_SUDOWOODO
+
+#if P_FAMILY_HOPPIP
+static const struct SpriteFrameImage sPicTable_Hoppip[] = {
+ overworld_ascending_frames(gObjectEventPic_Hoppip, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Skiploom[] = {
+ overworld_ascending_frames(gObjectEventPic_Skiploom, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Jumpluff[] = {
+ overworld_ascending_frames(gObjectEventPic_Jumpluff, 4, 4),
+};
+#endif //P_FAMILY_HOPPIP
+
+#if P_FAMILY_AIPOM
+static const struct SpriteFrameImage sPicTable_Aipom[] = {
+ overworld_ascending_frames(gObjectEventPic_Aipom, 4, 4),
+};
+#if P_GEN_4_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Ambipom[] = {
+ overworld_ascending_frames(gObjectEventPic_Ambipom, 4, 4),
+};
+
+#endif //P_GEN_4_CROSS_EVOS
+#endif //P_FAMILY_AIPOM
+
+#if P_FAMILY_SUNKERN
+static const struct SpriteFrameImage sPicTable_Sunkern[] = {
+ overworld_ascending_frames(gObjectEventPic_Sunkern, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Sunflora[] = {
+ overworld_ascending_frames(gObjectEventPic_Sunflora, 4, 4),
+};
+#endif //P_FAMILY_SUNKERN
+
+#if P_FAMILY_YANMA
+static const struct SpriteFrameImage sPicTable_Yanma[] = {
+ overworld_ascending_frames(gObjectEventPic_Yanma, 4, 4),
+};
+#if P_GEN_4_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Yanmega[] = {
+ overworld_ascending_frames(gObjectEventPic_Yanmega, 4, 4),
+};
+#endif //P_GEN_4_CROSS_EVOS
+#endif //P_FAMILY_YANMA
+
+#if P_FAMILY_WOOPER
+static const struct SpriteFrameImage sPicTable_Wooper[] = {
+ overworld_ascending_frames(gObjectEventPic_Wooper, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Quagsire[] = {
+ overworld_ascending_frames(gObjectEventPic_Quagsire, 4, 4),
+};
+#if P_PALDEAN_FORMS
+/*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
+
+#if P_FAMILY_MURKROW
+static const struct SpriteFrameImage sPicTable_Murkrow[] = {
+ overworld_ascending_frames(gObjectEventPic_Murkrow, 4, 4),
+};
+#if P_GEN_4_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Honchkrow[] = {
+ overworld_ascending_frames(gObjectEventPic_Honchkrow, 4, 4),
+};
+#endif //P_GEN_4_CROSS_EVOS
+#endif //P_FAMILY_MURKROW
+
+#if P_FAMILY_MISDREAVUS
+static const struct SpriteFrameImage sPicTable_Misdreavus[] = {
+ overworld_ascending_frames(gObjectEventPic_Misdreavus, 4, 4),
+};
+#if P_GEN_4_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Mismagius[] = {
+ overworld_ascending_frames(gObjectEventPic_Mismagius, 4, 4),
+};
+#endif //P_GEN_4_CROSS_EVOS
+#endif //P_FAMILY_MISDREAVUS
+
+#if P_FAMILY_UNOWN
+static const struct SpriteFrameImage sPicTable_UnownA[] = {
+ overworld_ascending_frames(gObjectEventPic_UnownA, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_UnownB[] = {
+ overworld_ascending_frames(gObjectEventPic_UnownB, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_UnownC[] = {
+ overworld_ascending_frames(gObjectEventPic_UnownC, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_UnownD[] = {
+ overworld_ascending_frames(gObjectEventPic_UnownD, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_UnownE[] = {
+ overworld_ascending_frames(gObjectEventPic_UnownE, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_UnownF[] = {
+ overworld_ascending_frames(gObjectEventPic_UnownF, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_UnownG[] = {
+ overworld_ascending_frames(gObjectEventPic_UnownG, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_UnownH[] = {
+ overworld_ascending_frames(gObjectEventPic_UnownH, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_UnownI[] = {
+ overworld_ascending_frames(gObjectEventPic_UnownI, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_UnownJ[] = {
+ overworld_ascending_frames(gObjectEventPic_UnownJ, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_UnownK[] = {
+ overworld_ascending_frames(gObjectEventPic_UnownK, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_UnownL[] = {
+ overworld_ascending_frames(gObjectEventPic_UnownL, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_UnownM[] = {
+ overworld_ascending_frames(gObjectEventPic_UnownM, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_UnownN[] = {
+ overworld_ascending_frames(gObjectEventPic_UnownN, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_UnownO[] = {
+ overworld_ascending_frames(gObjectEventPic_UnownO, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_UnownP[] = {
+ overworld_ascending_frames(gObjectEventPic_UnownP, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_UnownQ[] = {
+ overworld_ascending_frames(gObjectEventPic_UnownQ, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_UnownR[] = {
+ overworld_ascending_frames(gObjectEventPic_UnownR, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_UnownS[] = {
+ overworld_ascending_frames(gObjectEventPic_UnownS, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_UnownT[] = {
+ overworld_ascending_frames(gObjectEventPic_UnownT, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_UnownU[] = {
+ overworld_ascending_frames(gObjectEventPic_UnownU, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_UnownV[] = {
+ overworld_ascending_frames(gObjectEventPic_UnownV, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_UnownW[] = {
+ overworld_ascending_frames(gObjectEventPic_UnownW, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_UnownX[] = {
+ overworld_ascending_frames(gObjectEventPic_UnownX, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_UnownY[] = {
+ overworld_ascending_frames(gObjectEventPic_UnownY, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_UnownZ[] = {
+ overworld_ascending_frames(gObjectEventPic_UnownZ, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_UnownExclamationMark[] = {
+ overworld_ascending_frames(gObjectEventPic_UnownExclamationMark, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_UnownQuestionMark[] = {
+ overworld_ascending_frames(gObjectEventPic_UnownQuestionMark, 4, 4),
+};
+#endif //P_FAMILY_UNOWN
+
+#if P_FAMILY_WOBBUFFET
+#if P_GEN_3_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Wynaut[] = {
+ overworld_ascending_frames(gObjectEventPic_Wynaut, 4, 4),
+};
+#endif //P_GEN_3_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Wobbuffet[] = {
+ overworld_ascending_frames(gObjectEventPic_Wobbuffet, 4, 4),
+};
+#endif //P_FAMILY_WOBBUFFET
+
+#if P_FAMILY_GIRAFARIG
+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[] = {
+ overworld_ascending_frames(gObjectEventPic_Farigiraf, 4, 4),
+};*/
+#endif //P_GEN_9_CROSS_EVOS
+#endif //P_FAMILY_GIRAFARIG
+
+#if P_FAMILY_PINECO
+static const struct SpriteFrameImage sPicTable_Pineco[] = {
+ overworld_ascending_frames(gObjectEventPic_Pineco, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Forretress[] = {
+ overworld_ascending_frames(gObjectEventPic_Forretress, 4, 4),
+};
+#endif //P_FAMILY_PINECO
+
+#if P_FAMILY_DUNSPARCE
+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),
+};*/
+
+
+#endif //P_GEN_9_CROSS_EVOS
+#endif //P_FAMILY_DUNSPARCE
+
+#if P_FAMILY_GLIGAR
+static const struct SpriteFrameImage sPicTable_Gligar[] = {
+ overworld_ascending_frames(gObjectEventPic_Gligar, 4, 4),
+};
+#if P_GEN_4_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Gliscor[] = {
+ overworld_ascending_frames(gObjectEventPic_Gliscor, 4, 4),
+};
+#endif //P_GEN_4_CROSS_EVOS
+#endif //P_FAMILY_GLIGAR
+
+#if P_FAMILY_SNUBBULL
+static const struct SpriteFrameImage sPicTable_Snubbull[] = {
+ overworld_ascending_frames(gObjectEventPic_Snubbull, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Granbull[] = {
+ overworld_ascending_frames(gObjectEventPic_Granbull, 4, 4),
+};
+#endif //P_FAMILY_SNUBBULL
+
+#if P_FAMILY_QWILFISH
+static const struct SpriteFrameImage sPicTable_Qwilfish[] = {
+ overworld_ascending_frames(gObjectEventPic_Qwilfish, 4, 4),
+};
+#if P_HISUIAN_FORMS
+static const struct SpriteFrameImage sPicTable_QwilfishHisuian[] = {
+ overworld_ascending_frames(gObjectEventPic_QwilfishHisuian, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Overqwil[] = {
+ overworld_ascending_frames(gObjectEventPic_Overqwil, 4, 4),
+};
+#endif //P_HISUIAN_FORMS
+#endif //P_FAMILY_QWILFISH
+
+#if P_FAMILY_SHUCKLE
+static const struct SpriteFrameImage sPicTable_Shuckle[] = {
+ overworld_ascending_frames(gObjectEventPic_Shuckle, 4, 4),
+};
+#endif //P_FAMILY_SHUCKLE
+
+#if P_FAMILY_HERACROSS
+static const struct SpriteFrameImage sPicTable_Heracross[] = {
+ overworld_ascending_frames(gObjectEventPic_Heracross, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_HeracrossMega[] = {
+ overworld_ascending_frames(gObjectEventPic_HeracrossMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+#endif //P_FAMILY_HERACROSS
+
+#if P_FAMILY_SNEASEL
+static const struct SpriteFrameImage sPicTable_Sneasel[] = {
+ overworld_ascending_frames(gObjectEventPic_Sneasel, 4, 4),
+};
+#if P_GEN_4_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Weavile[] = {
+ overworld_ascending_frames(gObjectEventPic_Weavile, 4, 4),
+};
+
+#endif //P_GEN_4_CROSS_EVOS
+
+#if P_HISUIAN_FORMS
+static const struct SpriteFrameImage sPicTable_SneaselHisuian[] = {
+ overworld_ascending_frames(gObjectEventPic_SneaselHisuian, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Sneasler[] = {
+ overworld_ascending_frames(gObjectEventPic_Sneasler, 4, 4),
+};
+#endif //P_HISUIAN_FORMS
+#endif //P_FAMILY_SNEASEL
+
+#if P_FAMILY_TEDDIURSA
+static const struct SpriteFrameImage sPicTable_Teddiursa[] = {
+ overworld_ascending_frames(gObjectEventPic_Teddiursa, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Ursaring[] = {
+ overworld_ascending_frames(gObjectEventPic_Ursaring, 4, 4),
+};
+#if P_GEN_8_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Ursaluna[] = {
+ overworld_ascending_frames(gObjectEventPic_Ursaluna, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_UrsalunaBloodmoon[] = {
+ overworld_ascending_frames(gObjectEventPic_UrsalunaBloodmoon, 4, 4),
+};
+#endif //P_GEN_8_CROSS_EVOS
+#endif //P_FAMILY_TEDDIURSA
+
+#if P_FAMILY_SLUGMA
+static const struct SpriteFrameImage sPicTable_Slugma[] = {
+ overworld_ascending_frames(gObjectEventPic_Slugma, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Magcargo[] = {
+ overworld_ascending_frames(gObjectEventPic_Magcargo, 4, 4),
+};
+#endif //P_FAMILY_SLUGMA
+
+#if P_FAMILY_SWINUB
+static const struct SpriteFrameImage sPicTable_Swinub[] = {
+ overworld_ascending_frames(gObjectEventPic_Swinub, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Piloswine[] = {
+ overworld_ascending_frames(gObjectEventPic_Piloswine, 4, 4),
+};
+#if P_GEN_4_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Mamoswine[] = {
+ overworld_ascending_frames(gObjectEventPic_Mamoswine, 4, 4),
+};
+
+#endif //P_GEN_4_CROSS_EVOS
+#endif //P_FAMILY_SWINUB
+
+#if P_FAMILY_CORSOLA
+static const struct SpriteFrameImage sPicTable_Corsola[] = {
+ overworld_ascending_frames(gObjectEventPic_Corsola, 4, 4),
+};
+#if P_GALARIAN_FORMS
+static const struct SpriteFrameImage sPicTable_CorsolaGalarian[] = {
+ overworld_ascending_frames(gObjectEventPic_CorsolaGalarian, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Cursola[] = {
+ overworld_ascending_frames(gObjectEventPic_Cursola, 4, 4),
+};
+#endif //P_GALARIAN_FORMS
+#endif //P_FAMILY_CORSOLA
+
+#if P_FAMILY_REMORAID
+static const struct SpriteFrameImage sPicTable_Remoraid[] = {
+ overworld_ascending_frames(gObjectEventPic_Remoraid, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Octillery[] = {
+ overworld_ascending_frames(gObjectEventPic_Octillery, 4, 4),
+};
+#endif //P_FAMILY_REMORAID
+
+#if P_FAMILY_DELIBIRD
+static const struct SpriteFrameImage sPicTable_Delibird[] = {
+ overworld_ascending_frames(gObjectEventPic_Delibird, 4, 4),
+};
+#endif //P_FAMILY_DELIBIRD
+
+#if P_FAMILY_MANTINE
+#if P_GEN_4_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Mantyke[] = {
+ overworld_ascending_frames(gObjectEventPic_Mantyke, 4, 4),
+};
+#endif //P_GEN_4_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Mantine[] = {
+ overworld_ascending_frames(gObjectEventPic_Mantine, 4, 4),
+};
+#endif //P_FAMILY_MANTINE
+
+#if P_FAMILY_SKARMORY
+static const struct SpriteFrameImage sPicTable_Skarmory[] = {
+ overworld_ascending_frames(gObjectEventPic_Skarmory, 4, 4),
+};
+#endif //P_FAMILY_SKARMORY
+
+#if P_FAMILY_HOUNDOUR
+static const struct SpriteFrameImage sPicTable_Houndour[] = {
+ overworld_ascending_frames(gObjectEventPic_Houndour, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Houndoom[] = {
+ overworld_ascending_frames(gObjectEventPic_Houndoom, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_HoundoomMega[] = {
+ overworld_ascending_frames(gObjectEventPic_HoundoomMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+#endif //P_FAMILY_HOUNDOUR
+
+#if P_FAMILY_PHANPY
+static const struct SpriteFrameImage sPicTable_Phanpy[] = {
+ overworld_ascending_frames(gObjectEventPic_Phanpy, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Donphan[] = {
+ overworld_ascending_frames(gObjectEventPic_Donphan, 4, 4),
+};
+#endif //P_FAMILY_PHANPY
+
+#if P_FAMILY_STANTLER
+static const struct SpriteFrameImage sPicTable_Stantler[] = {
+ overworld_ascending_frames(gObjectEventPic_Stantler, 4, 4),
+};
+#if P_GEN_8_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Wyrdeer[] = {
+ overworld_ascending_frames(gObjectEventPic_Wyrdeer, 4, 4),
+};
+#endif //P_GEN_8_CROSS_EVOS
+#endif //P_FAMILY_STANTLER
+
+#if P_FAMILY_SMEARGLE
+static const struct SpriteFrameImage sPicTable_Smeargle[] = {
+ overworld_ascending_frames(gObjectEventPic_Smeargle, 4, 4),
+};
+#endif //P_FAMILY_SMEARGLE
+
+#if P_FAMILY_MILTANK
+static const struct SpriteFrameImage sPicTable_Miltank[] = {
+ overworld_ascending_frames(gObjectEventPic_Miltank, 4, 4),
+};
+#endif //P_FAMILY_MILTANK
+
+#if P_FAMILY_RAIKOU
+static const struct SpriteFrameImage sPicTable_Raikou[] = {
+ overworld_ascending_frames(gObjectEventPic_Raikou, 4, 4),
+};
+#endif //P_FAMILY_RAIKOU
+
+#if P_FAMILY_ENTEI
+static const struct SpriteFrameImage sPicTable_Entei[] = {
+ overworld_ascending_frames(gObjectEventPic_Entei, 4, 4),
+};
+#endif //P_FAMILY_ENTEI
+
+#if P_FAMILY_SUICUNE
+static const struct SpriteFrameImage sPicTable_Suicune[] = {
+ overworld_ascending_frames(gObjectEventPic_Suicune, 4, 4),
+};
+#endif //P_FAMILY_SUICUNE
+
+#if P_FAMILY_LARVITAR
+static const struct SpriteFrameImage sPicTable_Larvitar[] = {
+ overworld_ascending_frames(gObjectEventPic_Larvitar, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Pupitar[] = {
+ overworld_ascending_frames(gObjectEventPic_Pupitar, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Tyranitar[] = {
+ overworld_ascending_frames(gObjectEventPic_Tyranitar, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_TyranitarMega[] = {
+ overworld_ascending_frames(gObjectEventPic_TyranitarMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+#endif //P_FAMILY_LARVITAR
+
+#if P_FAMILY_LUGIA
+static const struct SpriteFrameImage sPicTable_Lugia[] = {
+ overworld_ascending_frames(gObjectEventPic_Lugia, 4, 4),
+};
+#endif //P_FAMILY_LUGIA
+
+#if P_FAMILY_HO_OH
+static const struct SpriteFrameImage sPicTable_HoOh[] = {
+ overworld_ascending_frames(gObjectEventPic_HoOh, 4, 4),
+};
+#endif //P_FAMILY_HO_OH
+
+#if P_FAMILY_CELEBI
+static const struct SpriteFrameImage sPicTable_Celebi[] = {
+ overworld_ascending_frames(gObjectEventPic_Celebi, 4, 4),
+};
+#endif //P_FAMILY_CELEBI
+
+#if P_FAMILY_TREECKO
+static const struct SpriteFrameImage sPicTable_Treecko[] = {
+ overworld_ascending_frames(gObjectEventPic_Treecko, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Grovyle[] = {
+ overworld_ascending_frames(gObjectEventPic_Grovyle, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Sceptile[] = {
+ overworld_ascending_frames(gObjectEventPic_Sceptile, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_SceptileMega[] = {
+ overworld_ascending_frames(gObjectEventPic_SceptileMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+#endif //P_FAMILY_TREECKO
+
+#if P_FAMILY_TORCHIC
+static const struct SpriteFrameImage sPicTable_Torchic[] = {
+ overworld_ascending_frames(gObjectEventPic_Torchic, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Combusken[] = {
+ overworld_ascending_frames(gObjectEventPic_Combusken, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Blaziken[] = {
+ overworld_ascending_frames(gObjectEventPic_Blaziken, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_BlazikenMega[] = {
+ overworld_ascending_frames(gObjectEventPic_BlazikenMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+#endif //P_FAMILY_TORCHIC
+
+#if P_FAMILY_MUDKIP
+static const struct SpriteFrameImage sPicTable_Mudkip[] = {
+ overworld_ascending_frames(gObjectEventPic_Mudkip, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Marshtomp[] = {
+ overworld_ascending_frames(gObjectEventPic_Marshtomp, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Swampert[] = {
+ overworld_ascending_frames(gObjectEventPic_Swampert, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_SwampertMega[] = {
+ overworld_ascending_frames(gObjectEventPic_SwampertMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+#endif //P_FAMILY_MUDKIP
+
+#if P_FAMILY_POOCHYENA
+static const struct SpriteFrameImage sPicTable_Poochyena[] = {
+ overworld_ascending_frames(gObjectEventPic_Poochyena, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Mightyena[] = {
+ overworld_ascending_frames(gObjectEventPic_Mightyena, 4, 4),
+};
+#endif //P_FAMILY_POOCHYENA
+
+#if P_FAMILY_ZIGZAGOON
+static const struct SpriteFrameImage sPicTable_Zigzagoon[] = {
+ overworld_ascending_frames(gObjectEventPic_Zigzagoon, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Linoone[] = {
+ overworld_ascending_frames(gObjectEventPic_Linoone, 4, 4),
+};
+#if P_GALARIAN_FORMS
+static const struct SpriteFrameImage sPicTable_ZigzagoonGalarian[] = {
+ overworld_ascending_frames(gObjectEventPic_ZigzagoonGalarian, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_LinooneGalarian[] = {
+ overworld_ascending_frames(gObjectEventPic_LinooneGalarian, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Obstagoon[] = {
+ overworld_ascending_frames(gObjectEventPic_Obstagoon, 4, 4),
+};
+#endif //P_GALARIAN_FORMS
+#endif //P_FAMILY_ZIGZAGOON
+
+#if P_FAMILY_WURMPLE
+static const struct SpriteFrameImage sPicTable_Wurmple[] = {
+ overworld_ascending_frames(gObjectEventPic_Wurmple, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Silcoon[] = {
+ overworld_ascending_frames(gObjectEventPic_Silcoon, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Beautifly[] = {
+ overworld_ascending_frames(gObjectEventPic_Beautifly, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Cascoon[] = {
+ overworld_ascending_frames(gObjectEventPic_Cascoon, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Dustox[] = {
+ overworld_ascending_frames(gObjectEventPic_Dustox, 4, 4),
+};
+#endif //P_FAMILY_WURMPLE
+
+#if P_FAMILY_LOTAD
+static const struct SpriteFrameImage sPicTable_Lotad[] = {
+ overworld_ascending_frames(gObjectEventPic_Lotad, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Lombre[] = {
+ overworld_ascending_frames(gObjectEventPic_Lombre, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Ludicolo[] = {
+ overworld_ascending_frames(gObjectEventPic_Ludicolo, 4, 4),
+};
+#endif //P_FAMILY_LOTAD
+
+#if P_FAMILY_SEEDOT
+static const struct SpriteFrameImage sPicTable_Seedot[] = {
+ overworld_ascending_frames(gObjectEventPic_Seedot, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Nuzleaf[] = {
+ overworld_ascending_frames(gObjectEventPic_Nuzleaf, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Shiftry[] = {
+ overworld_ascending_frames(gObjectEventPic_Shiftry, 4, 4),
+};
+#endif //P_FAMILY_SEEDOT
+
+#if P_FAMILY_TAILLOW
+static const struct SpriteFrameImage sPicTable_Taillow[] = {
+ overworld_ascending_frames(gObjectEventPic_Taillow, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Swellow[] = {
+ overworld_ascending_frames(gObjectEventPic_Swellow, 4, 4),
+};
+#endif //P_FAMILY_TAILLOW
+
+#if P_FAMILY_WINGULL
+static const struct SpriteFrameImage sPicTable_Wingull[] = {
+ overworld_ascending_frames(gObjectEventPic_Wingull, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Pelipper[] = {
+ overworld_ascending_frames(gObjectEventPic_Pelipper, 4, 4),
+};
+#endif //P_FAMILY_WINGULL
+
+#if P_FAMILY_RALTS
+static const struct SpriteFrameImage sPicTable_Ralts[] = {
+ overworld_ascending_frames(gObjectEventPic_Ralts, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Kirlia[] = {
+ overworld_ascending_frames(gObjectEventPic_Kirlia, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Gardevoir[] = {
+ overworld_ascending_frames(gObjectEventPic_Gardevoir, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_GardevoirMega[] = {
+ overworld_ascending_frames(gObjectEventPic_GardevoirMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+
+#if P_GEN_4_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Gallade[] = {
+ overworld_ascending_frames(gObjectEventPic_Gallade, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_GalladeMega[] = {
+ overworld_ascending_frames(gObjectEventPic_GalladeMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+#endif //P_GEN_4_CROSS_EVOS
+#endif //P_FAMILY_RALTS
+
+#if P_FAMILY_SURSKIT
+static const struct SpriteFrameImage sPicTable_Surskit[] = {
+ overworld_ascending_frames(gObjectEventPic_Surskit, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Masquerain[] = {
+ overworld_ascending_frames(gObjectEventPic_Masquerain, 4, 4),
+};
+#endif //P_FAMILY_SURSKIT
+
+#if P_FAMILY_SHROOMISH
+static const struct SpriteFrameImage sPicTable_Shroomish[] = {
+ overworld_ascending_frames(gObjectEventPic_Shroomish, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Breloom[] = {
+ overworld_ascending_frames(gObjectEventPic_Breloom, 4, 4),
+};
+#endif //P_FAMILY_SHROOMISH
+
+#if P_FAMILY_SLAKOTH
+static const struct SpriteFrameImage sPicTable_Slakoth[] = {
+ overworld_ascending_frames(gObjectEventPic_Slakoth, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Vigoroth[] = {
+ overworld_ascending_frames(gObjectEventPic_Vigoroth, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Slaking[] = {
+ overworld_ascending_frames(gObjectEventPic_Slaking, 4, 4),
+};
+#endif //P_FAMILY_SLAKOTH
+
+#if P_FAMILY_NINCADA
+static const struct SpriteFrameImage sPicTable_Nincada[] = {
+ overworld_ascending_frames(gObjectEventPic_Nincada, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Ninjask[] = {
+ overworld_ascending_frames(gObjectEventPic_Ninjask, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Shedinja[] = {
+ overworld_ascending_frames(gObjectEventPic_Shedinja, 4, 4),
+};
+#endif //P_FAMILY_NINCADA
+
+#if P_FAMILY_WHISMUR
+static const struct SpriteFrameImage sPicTable_Whismur[] = {
+ overworld_ascending_frames(gObjectEventPic_Whismur, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Loudred[] = {
+ overworld_ascending_frames(gObjectEventPic_Loudred, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Exploud[] = {
+ overworld_ascending_frames(gObjectEventPic_Exploud, 4, 4),
+};
+#endif //P_FAMILY_WHISMUR
+
+#if P_FAMILY_MAKUHITA
+static const struct SpriteFrameImage sPicTable_Makuhita[] = {
+ overworld_ascending_frames(gObjectEventPic_Makuhita, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Hariyama[] = {
+ overworld_ascending_frames(gObjectEventPic_Hariyama, 4, 4),
+};
+#endif //P_FAMILY_MAKUHITA
+
+#if P_FAMILY_NOSEPASS
+static const struct SpriteFrameImage sPicTable_Nosepass[] = {
+ overworld_ascending_frames(gObjectEventPic_Nosepass, 4, 4),
+};
+#if P_GEN_4_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Probopass[] = {
+ overworld_ascending_frames(gObjectEventPic_Probopass, 4, 4),
+};
+#endif //P_GEN_4_CROSS_EVOS
+#endif //P_FAMILY_NOSEPASS
+
+#if P_FAMILY_SKITTY
+static const struct SpriteFrameImage sPicTable_Skitty[] = {
+ overworld_ascending_frames(gObjectEventPic_Skitty, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Delcatty[] = {
+ overworld_ascending_frames(gObjectEventPic_Delcatty, 4, 4),
+};
+#endif //P_FAMILY_SKITTY
+
+#if P_FAMILY_SABLEYE
+static const struct SpriteFrameImage sPicTable_Sableye[] = {
+ overworld_ascending_frames(gObjectEventPic_Sableye, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_SableyeMega[] = {
+ overworld_ascending_frames(gObjectEventPic_SableyeMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+#endif //P_FAMILY_SABLEYE
+
+#if P_FAMILY_MAWILE
+static const struct SpriteFrameImage sPicTable_Mawile[] = {
+ overworld_ascending_frames(gObjectEventPic_Mawile, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_MawileMega[] = {
+ overworld_ascending_frames(gObjectEventPic_MawileMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+#endif //P_FAMILY_MAWILE
+
+#if P_FAMILY_ARON
+static const struct SpriteFrameImage sPicTable_Aron[] = {
+ overworld_ascending_frames(gObjectEventPic_Aron, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Lairon[] = {
+ overworld_ascending_frames(gObjectEventPic_Lairon, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Aggron[] = {
+ overworld_ascending_frames(gObjectEventPic_Aggron, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_AggronMega[] = {
+ overworld_ascending_frames(gObjectEventPic_AggronMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+#endif //P_FAMILY_ARON
+
+#if P_FAMILY_MEDITITE
+static const struct SpriteFrameImage sPicTable_Meditite[] = {
+ overworld_ascending_frames(gObjectEventPic_Meditite, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Medicham[] = {
+ overworld_ascending_frames(gObjectEventPic_Medicham, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_MedichamMega[] = {
+ overworld_ascending_frames(gObjectEventPic_MedichamMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+#endif //P_FAMILY_MEDITITE
+
+#if P_FAMILY_ELECTRIKE
+static const struct SpriteFrameImage sPicTable_Electrike[] = {
+ overworld_ascending_frames(gObjectEventPic_Electrike, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Manectric[] = {
+ overworld_ascending_frames(gObjectEventPic_Manectric, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_ManectricMega[] = {
+ overworld_ascending_frames(gObjectEventPic_ManectricMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+#endif //P_FAMILY_ELECTRIKE
+
+#if P_FAMILY_PLUSLE
+static const struct SpriteFrameImage sPicTable_Plusle[] = {
+ overworld_ascending_frames(gObjectEventPic_Plusle, 4, 4),
+};
+#endif //P_FAMILY_PLUSLE
+
+#if P_FAMILY_MINUN
+static const struct SpriteFrameImage sPicTable_Minun[] = {
+ overworld_ascending_frames(gObjectEventPic_Minun, 4, 4),
+};
+#endif //P_FAMILY_MINUN
+
+#if P_FAMILY_VOLBEAT_ILLUMISE
+static const struct SpriteFrameImage sPicTable_Volbeat[] = {
+ overworld_ascending_frames(gObjectEventPic_Volbeat, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Illumise[] = {
+ overworld_ascending_frames(gObjectEventPic_Illumise, 4, 4),
+};
+#endif //P_FAMILY_VOLBEAT_ILLUMISE
+
+#if P_FAMILY_ROSELIA
+#if P_GEN_4_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Budew[] = {
+ overworld_ascending_frames(gObjectEventPic_Budew, 4, 4),
+};
+#endif //P_GEN_4_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Roselia[] = {
+ overworld_ascending_frames(gObjectEventPic_Roselia, 4, 4),
+};
+#if P_GEN_4_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Roserade[] = {
+ overworld_ascending_frames(gObjectEventPic_Roserade, 4, 4),
+};
+
+#endif //P_GEN_4_CROSS_EVOS
+#endif //P_FAMILY_ROSELIA
+
+#if P_FAMILY_GULPIN
+static const struct SpriteFrameImage sPicTable_Gulpin[] = {
+ overworld_ascending_frames(gObjectEventPic_Gulpin, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Swalot[] = {
+ overworld_ascending_frames(gObjectEventPic_Swalot, 4, 4),
+};
+#endif //P_FAMILY_GULPIN
+
+#if P_FAMILY_CARVANHA
+static const struct SpriteFrameImage sPicTable_Carvanha[] = {
+ overworld_ascending_frames(gObjectEventPic_Carvanha, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Sharpedo[] = {
+ overworld_ascending_frames(gObjectEventPic_Sharpedo, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_SharpedoMega[] = {
+ overworld_ascending_frames(gObjectEventPic_SharpedoMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+#endif //P_FAMILY_CARVANHA
+
+#if P_FAMILY_WAILMER
+static const struct SpriteFrameImage sPicTable_Wailmer[] = {
+ overworld_ascending_frames(gObjectEventPic_Wailmer, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Wailord[] = {
+ overworld_ascending_frames(gObjectEventPic_Wailord, 4, 4),
+};
+#endif //P_FAMILY_WAILMER
+
+#if P_FAMILY_NUMEL
+static const struct SpriteFrameImage sPicTable_Numel[] = {
+ overworld_ascending_frames(gObjectEventPic_Numel, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Camerupt[] = {
+ overworld_ascending_frames(gObjectEventPic_Camerupt, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_CameruptMega[] = {
+ overworld_ascending_frames(gObjectEventPic_CameruptMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+#endif //P_FAMILY_NUMEL
+
+#if P_FAMILY_TORKOAL
+static const struct SpriteFrameImage sPicTable_Torkoal[] = {
+ overworld_ascending_frames(gObjectEventPic_Torkoal, 4, 4),
+};
+#endif //P_FAMILY_TORKOAL
+
+#if P_FAMILY_SPOINK
+static const struct SpriteFrameImage sPicTable_Spoink[] = {
+ overworld_ascending_frames(gObjectEventPic_Spoink, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Grumpig[] = {
+ overworld_ascending_frames(gObjectEventPic_Grumpig, 4, 4),
+};
+#endif //P_FAMILY_SPOINK
+
+#if P_FAMILY_SPINDA
+static const struct SpriteFrameImage sPicTable_Spinda[] = {
+ overworld_ascending_frames(gObjectEventPic_Spinda, 4, 4),
+};
+#endif //P_FAMILY_SPINDA
+
+#if P_FAMILY_TRAPINCH
+static const struct SpriteFrameImage sPicTable_Trapinch[] = {
+ overworld_ascending_frames(gObjectEventPic_Trapinch, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Vibrava[] = {
+ overworld_ascending_frames(gObjectEventPic_Vibrava, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Flygon[] = {
+ overworld_ascending_frames(gObjectEventPic_Flygon, 4, 4),
+};
+#endif //P_FAMILY_TRAPINCH
+
+#if P_FAMILY_CACNEA
+static const struct SpriteFrameImage sPicTable_Cacnea[] = {
+ overworld_ascending_frames(gObjectEventPic_Cacnea, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Cacturne[] = {
+ overworld_ascending_frames(gObjectEventPic_Cacturne, 4, 4),
+};
+#endif //P_FAMILY_CACNEA
+
+#if P_FAMILY_SWABLU
+static const struct SpriteFrameImage sPicTable_Swablu[] = {
+ overworld_ascending_frames(gObjectEventPic_Swablu, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Altaria[] = {
+ overworld_ascending_frames(gObjectEventPic_Altaria, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_AltariaMega[] = {
+ overworld_ascending_frames(gObjectEventPic_AltariaMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+#endif //P_FAMILY_SWABLU
+
+#if P_FAMILY_ZANGOOSE
+static const struct SpriteFrameImage sPicTable_Zangoose[] = {
+ overworld_ascending_frames(gObjectEventPic_Zangoose, 4, 4),
+};
+#endif //P_FAMILY_ZANGOOSE
+
+#if P_FAMILY_SEVIPER
+static const struct SpriteFrameImage sPicTable_Seviper[] = {
+ overworld_ascending_frames(gObjectEventPic_Seviper, 4, 4),
+};
+#endif //P_FAMILY_SEVIPER
+
+#if P_FAMILY_LUNATONE
+static const struct SpriteFrameImage sPicTable_Lunatone[] = {
+ overworld_ascending_frames(gObjectEventPic_Lunatone, 4, 4),
+};
+#endif //P_FAMILY_LUNATONE
+
+#if P_FAMILY_SOLROCK
+static const struct SpriteFrameImage sPicTable_Solrock[] = {
+ overworld_ascending_frames(gObjectEventPic_Solrock, 4, 4),
+};
+#endif //P_FAMILY_SOLROCK
+
+#if P_FAMILY_BARBOACH
+static const struct SpriteFrameImage sPicTable_Barboach[] = {
+ overworld_ascending_frames(gObjectEventPic_Barboach, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Whiscash[] = {
+ overworld_ascending_frames(gObjectEventPic_Whiscash, 4, 4),
+};
+#endif //P_FAMILY_BARBOACH
+
+#if P_FAMILY_CORPHISH
+static const struct SpriteFrameImage sPicTable_Corphish[] = {
+ overworld_ascending_frames(gObjectEventPic_Corphish, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Crawdaunt[] = {
+ overworld_ascending_frames(gObjectEventPic_Crawdaunt, 4, 4),
+};
+#endif //P_FAMILY_CORPHISH
+
+#if P_FAMILY_BALTOY
+static const struct SpriteFrameImage sPicTable_Baltoy[] = {
+ overworld_ascending_frames(gObjectEventPic_Baltoy, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Claydol[] = {
+ overworld_ascending_frames(gObjectEventPic_Claydol, 4, 4),
+};
+#endif //P_FAMILY_BALTOY
+
+#if P_FAMILY_LILEEP
+static const struct SpriteFrameImage sPicTable_Lileep[] = {
+ overworld_ascending_frames(gObjectEventPic_Lileep, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Cradily[] = {
+ overworld_ascending_frames(gObjectEventPic_Cradily, 4, 4),
+};
+#endif //P_FAMILY_LILEEP
+
+#if P_FAMILY_ANORITH
+static const struct SpriteFrameImage sPicTable_Anorith[] = {
+ overworld_ascending_frames(gObjectEventPic_Anorith, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Armaldo[] = {
+ overworld_ascending_frames(gObjectEventPic_Armaldo, 4, 4),
+};
+#endif //P_FAMILY_ANORITH
+
+#if P_FAMILY_FEEBAS
+static const struct SpriteFrameImage sPicTable_Feebas[] = {
+ overworld_ascending_frames(gObjectEventPic_Feebas, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Milotic[] = {
+ overworld_ascending_frames(gObjectEventPic_Milotic, 4, 4),
+};
+#endif //P_FAMILY_FEEBAS
+
+#if P_FAMILY_CASTFORM
+static const struct SpriteFrameImage sPicTable_CastformNormal[] = {
+ overworld_ascending_frames(gObjectEventPic_CastformNormal, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_CastformSunny[] = {
+ overworld_ascending_frames(gObjectEventPic_CastformSunny, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_CastformRainy[] = {
+ overworld_ascending_frames(gObjectEventPic_CastformRainy, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_CastformSnowy[] = {
+ overworld_ascending_frames(gObjectEventPic_CastformSnowy, 4, 4),
+};
+#endif //P_FAMILY_CASTFORM
+
+#if P_FAMILY_KECLEON
+static const struct SpriteFrameImage sPicTable_Kecleon[] = {
+ overworld_ascending_frames(gObjectEventPic_Kecleon, 4, 4),
+};
+#endif //P_FAMILY_KECLEON
+
+#if P_FAMILY_SHUPPET
+static const struct SpriteFrameImage sPicTable_Shuppet[] = {
+ overworld_ascending_frames(gObjectEventPic_Shuppet, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Banette[] = {
+ overworld_ascending_frames(gObjectEventPic_Banette, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_BanetteMega[] = {
+ overworld_ascending_frames(gObjectEventPic_BanetteMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+#endif //P_FAMILY_SHUPPET
+
+#if P_FAMILY_DUSKULL
+static const struct SpriteFrameImage sPicTable_Duskull[] = {
+ overworld_ascending_frames(gObjectEventPic_Duskull, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Dusclops[] = {
+ overworld_ascending_frames(gObjectEventPic_Dusclops, 4, 4),
+};
+#if P_GEN_4_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Dusknoir[] = {
+ overworld_ascending_frames(gObjectEventPic_Dusknoir, 4, 4),
+};
+#endif //P_GEN_4_CROSS_EVOS
+#endif //P_FAMILY_DUSKULL
+
+#if P_FAMILY_TROPIUS
+static const struct SpriteFrameImage sPicTable_Tropius[] = {
+ overworld_ascending_frames(gObjectEventPic_Tropius, 4, 4),
+};
+#endif //P_FAMILY_TROPIUS
+
+#if P_FAMILY_CHIMECHO
+#if P_GEN_4_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Chingling[] = {
+ overworld_ascending_frames(gObjectEventPic_Chingling, 4, 4),
+};
+#endif //P_GEN_4_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Chimecho[] = {
+ overworld_ascending_frames(gObjectEventPic_Chimecho, 4, 4),
+};
+#endif //P_FAMILY_CHIMECHO
+
+#if P_FAMILY_ABSOL
+static const struct SpriteFrameImage sPicTable_Absol[] = {
+ overworld_ascending_frames(gObjectEventPic_Absol, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_AbsolMega[] = {
+ overworld_ascending_frames(gObjectEventPic_AbsolMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+#endif //P_FAMILY_ABSOL
+
+#if P_FAMILY_SNORUNT
+static const struct SpriteFrameImage sPicTable_Snorunt[] = {
+ overworld_ascending_frames(gObjectEventPic_Snorunt, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Glalie[] = {
+ overworld_ascending_frames(gObjectEventPic_Glalie, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_GlalieMega[] = {
+ overworld_ascending_frames(gObjectEventPic_GlalieMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+
+#if P_GEN_4_CROSS_EVOS
+static const struct SpriteFrameImage sPicTable_Froslass[] = {
+ overworld_ascending_frames(gObjectEventPic_Froslass, 4, 4),
+};
+#endif //P_GEN_4_CROSS_EVOS
+#endif //P_FAMILY_SNORUNT
+
+#if P_FAMILY_SPHEAL
+static const struct SpriteFrameImage sPicTable_Spheal[] = {
+ overworld_ascending_frames(gObjectEventPic_Spheal, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Sealeo[] = {
+ overworld_ascending_frames(gObjectEventPic_Sealeo, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Walrein[] = {
+ overworld_ascending_frames(gObjectEventPic_Walrein, 4, 4),
+};
+#endif //P_FAMILY_SPHEAL
+
+#if P_FAMILY_CLAMPERL
+static const struct SpriteFrameImage sPicTable_Clamperl[] = {
+ overworld_ascending_frames(gObjectEventPic_Clamperl, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Huntail[] = {
+ overworld_ascending_frames(gObjectEventPic_Huntail, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Gorebyss[] = {
+ overworld_ascending_frames(gObjectEventPic_Gorebyss, 4, 4),
+};
+#endif //P_FAMILY_CLAMPERL
+
+#if P_FAMILY_RELICANTH
+static const struct SpriteFrameImage sPicTable_Relicanth[] = {
+ overworld_ascending_frames(gObjectEventPic_Relicanth, 4, 4),
+};
+#endif //P_FAMILY_RELICANTH
+
+#if P_FAMILY_LUVDISC
+static const struct SpriteFrameImage sPicTable_Luvdisc[] = {
+ overworld_ascending_frames(gObjectEventPic_Luvdisc, 4, 4),
+};
+#endif //P_FAMILY_LUVDISC
+
+#if P_FAMILY_BAGON
+static const struct SpriteFrameImage sPicTable_Bagon[] = {
+ overworld_ascending_frames(gObjectEventPic_Bagon, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Shelgon[] = {
+ overworld_ascending_frames(gObjectEventPic_Shelgon, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Salamence[] = {
+ overworld_ascending_frames(gObjectEventPic_Salamence, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_SalamenceMega[] = {
+ overworld_ascending_frames(gObjectEventPic_SalamenceMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+#endif //P_FAMILY_BAGON
+
+#if P_FAMILY_BELDUM
+static const struct SpriteFrameImage sPicTable_Beldum[] = {
+ overworld_ascending_frames(gObjectEventPic_Beldum, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Metang[] = {
+ overworld_ascending_frames(gObjectEventPic_Metang, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Metagross[] = {
+ overworld_ascending_frames(gObjectEventPic_Metagross, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_MetagrossMega[] = {
+ overworld_ascending_frames(gObjectEventPic_MetagrossMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+#endif //P_FAMILY_BELDUM
+
+#if P_FAMILY_REGIROCK
+static const struct SpriteFrameImage sPicTable_Regirock[] = {
+ overworld_ascending_frames(gObjectEventPic_Regirock, 4, 4),
+};
+#endif //P_FAMILY_REGIROCK
+
+#if P_FAMILY_REGICE
+static const struct SpriteFrameImage sPicTable_Regice[] = {
+ overworld_ascending_frames(gObjectEventPic_Regice, 4, 4),
+};
+#endif //P_FAMILY_REGICE
+
+#if P_FAMILY_REGISTEEL
+static const struct SpriteFrameImage sPicTable_Registeel[] = {
+ overworld_ascending_frames(gObjectEventPic_Registeel, 4, 4),
+};
+#endif //P_FAMILY_REGISTEEL
+
+#if P_FAMILY_LATIAS
+static const struct SpriteFrameImage sPicTable_Latias[] = {
+ overworld_ascending_frames(gObjectEventPic_Latias, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_LatiasMega[] = {
+ overworld_ascending_frames(gObjectEventPic_LatiasMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+#endif //P_FAMILY_LATIAS
+
+#if P_FAMILY_LATIOS
+static const struct SpriteFrameImage sPicTable_Latios[] = {
+ overworld_ascending_frames(gObjectEventPic_Latios, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_LatiosMega[] = {
+ overworld_ascending_frames(gObjectEventPic_LatiosMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+#endif //P_FAMILY_LATIOS
+
+#if P_FAMILY_KYOGRE
+static const struct SpriteFrameImage sPicTable_Kyogre[] = {
+ overworld_ascending_frames(gObjectEventPic_Kyogre, 4, 4),
+};
+#if P_PRIMAL_REVERSIONS
+/*static const struct SpriteFrameImage sPicTable_KyogrePrimal[] = {
+ overworld_ascending_frames(gObjectEventPic_KyogrePrimal, 4, 4),
+};*/
+#endif //P_PRIMAL_REVERSIONS
+#endif //P_FAMILY_KYOGRE
+
+#if P_FAMILY_GROUDON
+static const struct SpriteFrameImage sPicTable_Groudon[] = {
+ overworld_ascending_frames(gObjectEventPic_Groudon, 4, 4),
+};
+#if P_PRIMAL_REVERSIONS
+/*static const struct SpriteFrameImage sPicTable_GroudonPrimal[] = {
+ overworld_ascending_frames(gObjectEventPic_GroudonPrimal, 4, 4),
+};*/
+#endif //P_PRIMAL_REVERSIONS
+#endif //P_FAMILY_GROUDON
+
+#if P_FAMILY_RAYQUAZA
+static const struct SpriteFrameImage sPicTable_Rayquaza[] = {
+ overworld_ascending_frames(gObjectEventPic_Rayquaza, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_RayquazaMega[] = {
+ overworld_ascending_frames(gObjectEventPic_RayquazaMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+#endif //P_FAMILY_RAYQUAZA
+
+#if P_FAMILY_JIRACHI
+static const struct SpriteFrameImage sPicTable_Jirachi[] = {
+ overworld_ascending_frames(gObjectEventPic_Jirachi, 4, 4),
+};
+#endif //P_FAMILY_JIRACHI
+
+#if P_FAMILY_DEOXYS
+static const struct SpriteFrameImage sPicTable_DeoxysNormal[] = {
+ overworld_ascending_frames(gObjectEventPic_DeoxysNormal, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_DeoxysAttack[] = {
+ overworld_ascending_frames(gObjectEventPic_DeoxysAttack, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_DeoxysDefense[] = {
+ overworld_ascending_frames(gObjectEventPic_DeoxysDefense, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_DeoxysSpeed[] = {
+ overworld_ascending_frames(gObjectEventPic_DeoxysSpeed, 4, 4),
+};
+#endif //P_FAMILY_DEOXYS
+
+#if P_FAMILY_TURTWIG
+static const struct SpriteFrameImage sPicTable_Turtwig[] = {
+ overworld_ascending_frames(gObjectEventPic_Turtwig, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Grotle[] = {
+ overworld_ascending_frames(gObjectEventPic_Grotle, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Torterra[] = {
+ overworld_ascending_frames(gObjectEventPic_Torterra, 4, 4),
+};
+#endif //P_FAMILY_TURTWIG
+
+#if P_FAMILY_CHIMCHAR
+static const struct SpriteFrameImage sPicTable_Chimchar[] = {
+ overworld_ascending_frames(gObjectEventPic_Chimchar, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Monferno[] = {
+ overworld_ascending_frames(gObjectEventPic_Monferno, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Infernape[] = {
+ overworld_ascending_frames(gObjectEventPic_Infernape, 4, 4),
+};
+#endif //P_FAMILY_CHIMCHAR
+
+#if P_FAMILY_PIPLUP
+static const struct SpriteFrameImage sPicTable_Piplup[] = {
+ overworld_ascending_frames(gObjectEventPic_Piplup, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Prinplup[] = {
+ overworld_ascending_frames(gObjectEventPic_Prinplup, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Empoleon[] = {
+ overworld_ascending_frames(gObjectEventPic_Empoleon, 4, 4),
+};
+#endif //P_FAMILY_PIPLUP
+
+#if P_FAMILY_STARLY
+static const struct SpriteFrameImage sPicTable_Starly[] = {
+ overworld_ascending_frames(gObjectEventPic_Starly, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Staravia[] = {
+ overworld_ascending_frames(gObjectEventPic_Staravia, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Staraptor[] = {
+ overworld_ascending_frames(gObjectEventPic_Staraptor, 4, 4),
+};
+#endif //P_FAMILY_STARLY
+
+#if P_FAMILY_BIDOOF
+static const struct SpriteFrameImage sPicTable_Bidoof[] = {
+ overworld_ascending_frames(gObjectEventPic_Bidoof, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Bibarel[] = {
+ overworld_ascending_frames(gObjectEventPic_Bibarel, 4, 4),
+};
+#endif //P_FAMILY_BIDOOF
+
+#if P_FAMILY_KRICKETOT
+static const struct SpriteFrameImage sPicTable_Kricketot[] = {
+ overworld_ascending_frames(gObjectEventPic_Kricketot, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Kricketune[] = {
+ overworld_ascending_frames(gObjectEventPic_Kricketune, 4, 4),
+};
+#endif //P_FAMILY_KRICKETOT
+
+#if P_FAMILY_SHINX
+static const struct SpriteFrameImage sPicTable_Shinx[] = {
+ overworld_ascending_frames(gObjectEventPic_Shinx, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Luxio[] = {
+ overworld_ascending_frames(gObjectEventPic_Luxio, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Luxray[] = {
+ overworld_ascending_frames(gObjectEventPic_Luxray, 4, 4),
+};
+#endif //P_FAMILY_SHINX
+
+#if P_FAMILY_CRANIDOS
+static const struct SpriteFrameImage sPicTable_Cranidos[] = {
+ overworld_ascending_frames(gObjectEventPic_Cranidos, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Rampardos[] = {
+ overworld_ascending_frames(gObjectEventPic_Rampardos, 4, 4),
+};
+#endif //P_FAMILY_CRANIDOS
+
+#if P_FAMILY_SHIELDON
+static const struct SpriteFrameImage sPicTable_Shieldon[] = {
+ overworld_ascending_frames(gObjectEventPic_Shieldon, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Bastiodon[] = {
+ overworld_ascending_frames(gObjectEventPic_Bastiodon, 4, 4),
+};
+#endif //P_FAMILY_SHIELDON
+
+#if P_FAMILY_BURMY
+static const struct SpriteFrameImage sPicTable_BurmyPlantCloak[] = {
+ overworld_ascending_frames(gObjectEventPic_BurmyPlantCloak, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_BurmySandyCloak[] = {
+ overworld_ascending_frames(gObjectEventPic_BurmySandyCloak, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_BurmyTrashCloak[] = {
+ overworld_ascending_frames(gObjectEventPic_BurmyTrashCloak, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_WormadamPlantCloak[] = {
+ overworld_ascending_frames(gObjectEventPic_WormadamPlantCloak, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_WormadamSandyCloak[] = {
+ overworld_ascending_frames(gObjectEventPic_WormadamSandyCloak, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_WormadamTrashCloak[] = {
+ overworld_ascending_frames(gObjectEventPic_WormadamTrashCloak, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Mothim[] = {
+ overworld_ascending_frames(gObjectEventPic_Mothim, 4, 4),
+};
+#endif //P_FAMILY_BURMY
+
+#if P_FAMILY_COMBEE
+static const struct SpriteFrameImage sPicTable_Combee[] = {
+ overworld_ascending_frames(gObjectEventPic_Combee, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_CombeeF[] = {
+ overworld_ascending_frames(gObjectEventPic_CombeeF, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Vespiquen[] = {
+ overworld_ascending_frames(gObjectEventPic_Vespiquen, 4, 4),
+};
+#endif //P_FAMILY_COMBEE
+
+#if P_FAMILY_PACHIRISU
+static const struct SpriteFrameImage sPicTable_Pachirisu[] = {
+ overworld_ascending_frames(gObjectEventPic_Pachirisu, 4, 4),
+};
+#endif //P_FAMILY_PACHIRISU
+
+#if P_FAMILY_BUIZEL
+static const struct SpriteFrameImage sPicTable_Buizel[] = {
+ overworld_ascending_frames(gObjectEventPic_Buizel, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Floatzel[] = {
+ overworld_ascending_frames(gObjectEventPic_Floatzel, 4, 4),
+};
+#endif //P_FAMILY_BUIZEL
+
+#if P_FAMILY_CHERUBI
+static const struct SpriteFrameImage sPicTable_Cherubi[] = {
+ overworld_ascending_frames(gObjectEventPic_Cherubi, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_CherrimOvercast[] = {
+ overworld_ascending_frames(gObjectEventPic_CherrimOvercast, 4, 4),
+};
+/*static const struct SpriteFrameImage sPicTable_CherrimSunshine[] = {
+ overworld_ascending_frames(gObjectEventPic_CherrimSunshine, 4, 4),
+};*/
+#endif //P_FAMILY_CHERUBI
+
+#if P_FAMILY_SHELLOS
+static const struct SpriteFrameImage sPicTable_ShellosWestSea[] = {
+ overworld_ascending_frames(gObjectEventPic_ShellosWestSea, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_ShellosEastSea[] = {
+ overworld_ascending_frames(gObjectEventPic_ShellosEastSea, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_GastrodonWestSea[] = {
+ overworld_ascending_frames(gObjectEventPic_GastrodonWestSea, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_GastrodonEastSea[] = {
+ overworld_ascending_frames(gObjectEventPic_GastrodonEastSea, 4, 4),
+};
+#endif //P_FAMILY_SHELLOS
+
+#if P_FAMILY_DRIFLOON
+static const struct SpriteFrameImage sPicTable_Drifloon[] = {
+ overworld_ascending_frames(gObjectEventPic_Drifloon, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Drifblim[] = {
+ overworld_ascending_frames(gObjectEventPic_Drifblim, 4, 4),
+};
+#endif //P_FAMILY_DRIFLOON
+
+#if P_FAMILY_BUNEARY
+static const struct SpriteFrameImage sPicTable_Buneary[] = {
+ overworld_ascending_frames(gObjectEventPic_Buneary, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Lopunny[] = {
+ overworld_ascending_frames(gObjectEventPic_Lopunny, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_LopunnyMega[] = {
+ overworld_ascending_frames(gObjectEventPic_LopunnyMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+#endif //P_FAMILY_BUNEARY
+
+#if P_FAMILY_GLAMEOW
+static const struct SpriteFrameImage sPicTable_Glameow[] = {
+ overworld_ascending_frames(gObjectEventPic_Glameow, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Purugly[] = {
+ overworld_ascending_frames(gObjectEventPic_Purugly, 4, 4),
+};
+#endif //P_FAMILY_GLAMEOW
+
+#if P_FAMILY_STUNKY
+static const struct SpriteFrameImage sPicTable_Stunky[] = {
+ overworld_ascending_frames(gObjectEventPic_Stunky, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Skuntank[] = {
+ overworld_ascending_frames(gObjectEventPic_Skuntank, 4, 4),
+};
+#endif //P_FAMILY_STUNKY
+
+#if P_FAMILY_BRONZOR
+static const struct SpriteFrameImage sPicTable_Bronzor[] = {
+ overworld_ascending_frames(gObjectEventPic_Bronzor, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Bronzong[] = {
+ overworld_ascending_frames(gObjectEventPic_Bronzong, 4, 4),
+};
+#endif //P_FAMILY_BRONZOR
+
+#if P_FAMILY_CHATOT
+static const struct SpriteFrameImage sPicTable_Chatot[] = {
+ overworld_ascending_frames(gObjectEventPic_Chatot, 4, 4),
+};
+#endif //P_FAMILY_CHATOT
+
+#if P_FAMILY_SPIRITOMB
+static const struct SpriteFrameImage sPicTable_Spiritomb[] = {
+ overworld_ascending_frames(gObjectEventPic_Spiritomb, 4, 4),
+};
+#endif //P_FAMILY_SPIRITOMB
+
+#if P_FAMILY_GIBLE
+static const struct SpriteFrameImage sPicTable_Gible[] = {
+ overworld_ascending_frames(gObjectEventPic_Gible, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Gabite[] = {
+ overworld_ascending_frames(gObjectEventPic_Gabite, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Garchomp[] = {
+ overworld_ascending_frames(gObjectEventPic_Garchomp, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_GarchompMega[] = {
+ overworld_ascending_frames(gObjectEventPic_GarchompMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+#endif //P_FAMILY_GIBLE
+
+#if P_FAMILY_RIOLU
+static const struct SpriteFrameImage sPicTable_Riolu[] = {
+ overworld_ascending_frames(gObjectEventPic_Riolu, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Lucario[] = {
+ overworld_ascending_frames(gObjectEventPic_Lucario, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_LucarioMega[] = {
+ overworld_ascending_frames(gObjectEventPic_LucarioMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+#endif //P_FAMILY_RIOLU
+
+#if P_FAMILY_HIPPOPOTAS
+static const struct SpriteFrameImage sPicTable_Hippopotas[] = {
+ overworld_ascending_frames(gObjectEventPic_Hippopotas, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_HippopotasF[] = {
+ overworld_ascending_frames(gObjectEventPic_HippopotasF, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Hippowdon[] = {
+ overworld_ascending_frames(gObjectEventPic_Hippowdon, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_HippowdonF[] = {
+ overworld_ascending_frames(gObjectEventPic_HippowdonF, 4, 4),
+};
+#endif //P_FAMILY_HIPPOPOTAS
+
+#if P_FAMILY_SKORUPI
+static const struct SpriteFrameImage sPicTable_Skorupi[] = {
+ overworld_ascending_frames(gObjectEventPic_Skorupi, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Drapion[] = {
+ overworld_ascending_frames(gObjectEventPic_Drapion, 4, 4),
+};
+#endif //P_FAMILY_SKORUPI
+
+#if P_FAMILY_CROAGUNK
+static const struct SpriteFrameImage sPicTable_Croagunk[] = {
+ overworld_ascending_frames(gObjectEventPic_Croagunk, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Toxicroak[] = {
+ overworld_ascending_frames(gObjectEventPic_Toxicroak, 4, 4),
+};
+#endif //P_FAMILY_CROAGUNK
+
+#if P_FAMILY_CARNIVINE
+static const struct SpriteFrameImage sPicTable_Carnivine[] = {
+ overworld_ascending_frames(gObjectEventPic_Carnivine, 4, 4),
+};
+#endif //P_FAMILY_CARNIVINE
+
+#if P_FAMILY_FINNEON
+static const struct SpriteFrameImage sPicTable_Finneon[] = {
+ overworld_ascending_frames(gObjectEventPic_Finneon, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Lumineon[] = {
+ overworld_ascending_frames(gObjectEventPic_Lumineon, 4, 4),
+};
+#endif //P_FAMILY_FINNEON
+
+#if P_FAMILY_SNOVER
+static const struct SpriteFrameImage sPicTable_Snover[] = {
+ overworld_ascending_frames(gObjectEventPic_Snover, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Abomasnow[] = {
+ overworld_ascending_frames(gObjectEventPic_Abomasnow, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_AbomasnowMega[] = {
+ overworld_ascending_frames(gObjectEventPic_AbomasnowMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+#endif //P_FAMILY_SNOVER
+
+#if P_FAMILY_ROTOM
+static const struct SpriteFrameImage sPicTable_Rotom[] = {
+ overworld_ascending_frames(gObjectEventPic_Rotom, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_RotomHeat[] = {
+ overworld_ascending_frames(gObjectEventPic_RotomHeat, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_RotomWash[] = {
+ overworld_ascending_frames(gObjectEventPic_RotomWash, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_RotomFrost[] = {
+ overworld_ascending_frames(gObjectEventPic_RotomFrost, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_RotomFan[] = {
+ overworld_ascending_frames(gObjectEventPic_RotomFan, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_RotomMow[] = {
+ overworld_ascending_frames(gObjectEventPic_RotomMow, 4, 4),
+};
+#endif //P_FAMILY_ROTOM
+
+#if P_FAMILY_UXIE
+static const struct SpriteFrameImage sPicTable_Uxie[] = {
+ overworld_ascending_frames(gObjectEventPic_Uxie, 4, 4),
+};
+#endif //P_FAMILY_UXIE
+
+#if P_FAMILY_MESPRIT
+static const struct SpriteFrameImage sPicTable_Mesprit[] = {
+ overworld_ascending_frames(gObjectEventPic_Mesprit, 4, 4),
+};
+#endif //P_FAMILY_MESPRIT
+
+#if P_FAMILY_AZELF
+static const struct SpriteFrameImage sPicTable_Azelf[] = {
+ overworld_ascending_frames(gObjectEventPic_Azelf, 4, 4),
+};
+#endif //P_FAMILY_AZELF
+
+#if P_FAMILY_DIALGA
+static const struct SpriteFrameImage sPicTable_Dialga[] = {
+ overworld_ascending_frames(gObjectEventPic_Dialga, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_DialgaOrigin[] = {
+ overworld_ascending_frames(gObjectEventPic_DialgaOrigin, 4, 4),
+};
+#endif //P_FAMILY_DIALGA
+
+#if P_FAMILY_PALKIA
+static const struct SpriteFrameImage sPicTable_Palkia[] = {
+ overworld_ascending_frames(gObjectEventPic_Palkia, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_PalkiaOrigin[] = {
+ overworld_ascending_frames(gObjectEventPic_PalkiaOrigin, 4, 4),
+};
+#endif //P_FAMILY_PALKIA
+
+#if P_FAMILY_HEATRAN
+static const struct SpriteFrameImage sPicTable_Heatran[] = {
+ overworld_ascending_frames(gObjectEventPic_Heatran, 4, 4),
+};
+#endif //P_FAMILY_HEATRAN
+
+#if P_FAMILY_REGIGIGAS
+static const struct SpriteFrameImage sPicTable_Regigigas[] = {
+ overworld_ascending_frames(gObjectEventPic_Regigigas, 4, 4),
+};
+#endif //P_FAMILY_REGIGIGAS
+
+#if P_FAMILY_GIRATINA
+static const struct SpriteFrameImage sPicTable_GiratinaAltered[] = {
+ overworld_ascending_frames(gObjectEventPic_GiratinaAltered, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_GiratinaOrigin[] = {
+ overworld_ascending_frames(gObjectEventPic_GiratinaOrigin, 4, 4),
+};
+#endif //P_FAMILY_GIRATINA
+
+#if P_FAMILY_CRESSELIA
+static const struct SpriteFrameImage sPicTable_Cresselia[] = {
+ overworld_ascending_frames(gObjectEventPic_Cresselia, 4, 4),
+};
+#endif //P_FAMILY_CRESSELIA
+
+#if P_FAMILY_MANAPHY
+static const struct SpriteFrameImage sPicTable_Phione[] = {
+ overworld_ascending_frames(gObjectEventPic_Phione, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Manaphy[] = {
+ overworld_ascending_frames(gObjectEventPic_Manaphy, 4, 4),
+};
+#endif //P_FAMILY_MANAPHY
+
+#if P_FAMILY_DARKRAI
+static const struct SpriteFrameImage sPicTable_Darkrai[] = {
+ overworld_ascending_frames(gObjectEventPic_Darkrai, 4, 4),
+};
+#endif //P_FAMILY_DARKRAI
+
+#if P_FAMILY_SHAYMIN
+static const struct SpriteFrameImage sPicTable_ShayminLand[] = {
+ overworld_ascending_frames(gObjectEventPic_ShayminLand, 4, 4),
+};
+/*static const struct SpriteFrameImage sPicTable_ShayminSky[] = {
+ overworld_ascending_frames(gObjectEventPic_ShayminSky, 4, 4),
+};*/
+#endif //P_FAMILY_SHAYMIN
+
+#if P_FAMILY_ARCEUS
+
+static const struct SpriteFrameImage sPicTable_ArceusNormal[] = {
+ overworld_ascending_frames(gObjectEventPic_ArceusNormal, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_ArceusFighting[] = {
+ overworld_ascending_frames(gObjectEventPic_ArceusFighting, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_ArceusFlying[] = {
+ overworld_ascending_frames(gObjectEventPic_ArceusFlying, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_ArceusPoison[] = {
+ overworld_ascending_frames(gObjectEventPic_ArceusPoison, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_ArceusGround[] = {
+ overworld_ascending_frames(gObjectEventPic_ArceusGround, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_ArceusRock[] = {
+ overworld_ascending_frames(gObjectEventPic_ArceusRock, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_ArceusBug[] = {
+ overworld_ascending_frames(gObjectEventPic_ArceusBug, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_ArceusGhost[] = {
+ overworld_ascending_frames(gObjectEventPic_ArceusGhost, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_ArceusSteel[] = {
+ overworld_ascending_frames(gObjectEventPic_ArceusSteel, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_ArceusFire[] = {
+ overworld_ascending_frames(gObjectEventPic_ArceusFire, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_ArceusWater[] = {
+ overworld_ascending_frames(gObjectEventPic_ArceusWater, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_ArceusGrass[] = {
+ overworld_ascending_frames(gObjectEventPic_ArceusGrass, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_ArceusElectric[] = {
+ overworld_ascending_frames(gObjectEventPic_ArceusElectric, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_ArceusPsychic[] = {
+ overworld_ascending_frames(gObjectEventPic_ArceusPsychic, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_ArceusIce[] = {
+ overworld_ascending_frames(gObjectEventPic_ArceusIce, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_ArceusDragon[] = {
+ overworld_ascending_frames(gObjectEventPic_ArceusDragon, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_ArceusDark[] = {
+ overworld_ascending_frames(gObjectEventPic_ArceusDark, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_ArceusFairy[] = {
+ overworld_ascending_frames(gObjectEventPic_ArceusFairy, 4, 4),
+};
+#endif //P_FAMILY_ARCEUS
+
+#if P_FAMILY_VICTINI
+static const struct SpriteFrameImage sPicTable_Victini[] = {
+ overworld_ascending_frames(gObjectEventPic_Victini, 4, 4),
+};
+#endif //P_FAMILY_VICTINI
+
+#if P_FAMILY_SNIVY
+static const struct SpriteFrameImage sPicTable_Snivy[] = {
+ overworld_ascending_frames(gObjectEventPic_Snivy, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Servine[] = {
+ overworld_ascending_frames(gObjectEventPic_Servine, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Serperior[] = {
+ overworld_ascending_frames(gObjectEventPic_Serperior, 4, 4),
+};
+#endif //P_FAMILY_SNIVY
+
+#if P_FAMILY_TEPIG
+static const struct SpriteFrameImage sPicTable_Tepig[] = {
+ overworld_ascending_frames(gObjectEventPic_Tepig, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Pignite[] = {
+ overworld_ascending_frames(gObjectEventPic_Pignite, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Emboar[] = {
+ overworld_ascending_frames(gObjectEventPic_Emboar, 4, 4),
+};
+#endif //P_FAMILY_TEPIG
+
+#if P_FAMILY_OSHAWOTT
+static const struct SpriteFrameImage sPicTable_Oshawott[] = {
+ overworld_ascending_frames(gObjectEventPic_Oshawott, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Dewott[] = {
+ overworld_ascending_frames(gObjectEventPic_Dewott, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Samurott[] = {
+ overworld_ascending_frames(gObjectEventPic_Samurott, 4, 4),
+};
+#if P_HISUIAN_FORMS
+static const struct SpriteFrameImage sPicTable_SamurottHisuian[] = {
+ overworld_ascending_frames(gObjectEventPic_SamurottHisuian, 4, 4),
+};
+#endif //P_HISUIAN_FORMS
+#endif //P_FAMILY_OSHAWOTT
+
+#if P_FAMILY_PATRAT
+static const struct SpriteFrameImage sPicTable_Patrat[] = {
+ overworld_ascending_frames(gObjectEventPic_Patrat, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Watchog[] = {
+ overworld_ascending_frames(gObjectEventPic_Watchog, 4, 4),
+};
+#endif //P_FAMILY_PATRAT
+
+#if P_FAMILY_LILLIPUP
+static const struct SpriteFrameImage sPicTable_Lillipup[] = {
+ overworld_ascending_frames(gObjectEventPic_Lillipup, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Herdier[] = {
+ overworld_ascending_frames(gObjectEventPic_Herdier, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Stoutland[] = {
+ overworld_ascending_frames(gObjectEventPic_Stoutland, 4, 4),
+};
+#endif //P_FAMILY_LILLIPUP
+
+#if P_FAMILY_PURRLOIN
+static const struct SpriteFrameImage sPicTable_Purrloin[] = {
+ overworld_ascending_frames(gObjectEventPic_Purrloin, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Liepard[] = {
+ overworld_ascending_frames(gObjectEventPic_Liepard, 4, 4),
+};
+#endif //P_FAMILY_PURRLOIN
+
+#if P_FAMILY_PANSAGE
+static const struct SpriteFrameImage sPicTable_Pansage[] = {
+ overworld_ascending_frames(gObjectEventPic_Pansage, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Simisage[] = {
+ overworld_ascending_frames(gObjectEventPic_Simisage, 4, 4),
+};
+#endif //P_FAMILY_PANSAGE
+
+#if P_FAMILY_PANSEAR
+static const struct SpriteFrameImage sPicTable_Pansear[] = {
+ overworld_ascending_frames(gObjectEventPic_Pansear, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Simisear[] = {
+ overworld_ascending_frames(gObjectEventPic_Simisear, 4, 4),
+};
+#endif //P_FAMILY_PANSEAR
+
+#if P_FAMILY_PANPOUR
+static const struct SpriteFrameImage sPicTable_Panpour[] = {
+ overworld_ascending_frames(gObjectEventPic_Panpour, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Simipour[] = {
+ overworld_ascending_frames(gObjectEventPic_Simipour, 4, 4),
+};
+#endif //P_FAMILY_PANPOUR
+
+#if P_FAMILY_MUNNA
+static const struct SpriteFrameImage sPicTable_Munna[] = {
+ overworld_ascending_frames(gObjectEventPic_Munna, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Musharna[] = {
+ overworld_ascending_frames(gObjectEventPic_Musharna, 4, 4),
+};
+#endif //P_FAMILY_MUNNA
+
+#if P_FAMILY_PIDOVE
+static const struct SpriteFrameImage sPicTable_Pidove[] = {
+ overworld_ascending_frames(gObjectEventPic_Pidove, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Tranquill[] = {
+ overworld_ascending_frames(gObjectEventPic_Tranquill, 4, 4),
+};
+
+static const struct SpriteFrameImage sPicTable_Unfezant[] = {
+ overworld_ascending_frames(gObjectEventPic_Unfezant, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_UnfezantF[] = {
+ overworld_ascending_frames(gObjectEventPic_UnfezantF, 4, 4),
+};
+#endif //P_FAMILY_PIDOVE
+
+#if P_FAMILY_BLITZLE
+static const struct SpriteFrameImage sPicTable_Blitzle[] = {
+ overworld_ascending_frames(gObjectEventPic_Blitzle, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Zebstrika[] = {
+ overworld_ascending_frames(gObjectEventPic_Zebstrika, 4, 4),
+};
+#endif //P_FAMILY_BLITZLE
+
+#if P_FAMILY_ROGGENROLA
+static const struct SpriteFrameImage sPicTable_Roggenrola[] = {
+ overworld_ascending_frames(gObjectEventPic_Roggenrola, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Boldore[] = {
+ overworld_ascending_frames(gObjectEventPic_Boldore, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Gigalith[] = {
+ overworld_ascending_frames(gObjectEventPic_Gigalith, 4, 4),
+};
+#endif //P_FAMILY_ROGGENROLA
+
+#if P_FAMILY_WOOBAT
+static const struct SpriteFrameImage sPicTable_Woobat[] = {
+ overworld_ascending_frames(gObjectEventPic_Woobat, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Swoobat[] = {
+ overworld_ascending_frames(gObjectEventPic_Swoobat, 4, 4),
+};
+#endif //P_FAMILY_WOOBAT
+
+#if P_FAMILY_DRILBUR
+static const struct SpriteFrameImage sPicTable_Drilbur[] = {
+ overworld_ascending_frames(gObjectEventPic_Drilbur, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Excadrill[] = {
+ overworld_ascending_frames(gObjectEventPic_Excadrill, 4, 4),
+};
+#endif //P_FAMILY_DRILBUR
+
+#if P_FAMILY_AUDINO
+static const struct SpriteFrameImage sPicTable_Audino[] = {
+ overworld_ascending_frames(gObjectEventPic_Audino, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_AudinoMega[] = {
+ overworld_ascending_frames(gObjectEventPic_AudinoMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+#endif //P_FAMILY_AUDINO
+
+#if P_FAMILY_TIMBURR
+static const struct SpriteFrameImage sPicTable_Timburr[] = {
+ overworld_ascending_frames(gObjectEventPic_Timburr, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Gurdurr[] = {
+ overworld_ascending_frames(gObjectEventPic_Gurdurr, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Conkeldurr[] = {
+ overworld_ascending_frames(gObjectEventPic_Conkeldurr, 4, 4),
+};
+#endif //P_FAMILY_TIMBURR
+
+#if P_FAMILY_TYMPOLE
+static const struct SpriteFrameImage sPicTable_Tympole[] = {
+ overworld_ascending_frames(gObjectEventPic_Tympole, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Palpitoad[] = {
+ overworld_ascending_frames(gObjectEventPic_Palpitoad, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Seismitoad[] = {
+ overworld_ascending_frames(gObjectEventPic_Seismitoad, 4, 4),
+};
+#endif //P_FAMILY_TYMPOLE
+
+#if P_FAMILY_THROH
+static const struct SpriteFrameImage sPicTable_Throh[] = {
+ overworld_ascending_frames(gObjectEventPic_Throh, 4, 4),
+};
+#endif //P_FAMILY_THROH
+
+#if P_FAMILY_SAWK
+static const struct SpriteFrameImage sPicTable_Sawk[] = {
+ overworld_ascending_frames(gObjectEventPic_Sawk, 4, 4),
+};
+#endif //P_FAMILY_SAWK
+
+#if P_FAMILY_SEWADDLE
+static const struct SpriteFrameImage sPicTable_Sewaddle[] = {
+ overworld_ascending_frames(gObjectEventPic_Sewaddle, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Swadloon[] = {
+ overworld_ascending_frames(gObjectEventPic_Swadloon, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Leavanny[] = {
+ overworld_ascending_frames(gObjectEventPic_Leavanny, 4, 4),
+};
+#endif //P_FAMILY_SEWADDLE
+
+#if P_FAMILY_VENIPEDE
+static const struct SpriteFrameImage sPicTable_Venipede[] = {
+ overworld_ascending_frames(gObjectEventPic_Venipede, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Whirlipede[] = {
+ overworld_ascending_frames(gObjectEventPic_Whirlipede, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Scolipede[] = {
+ overworld_ascending_frames(gObjectEventPic_Scolipede, 4, 4),
+};
+#endif //P_FAMILY_VENIPEDE
+
+#if P_FAMILY_COTTONEE
+static const struct SpriteFrameImage sPicTable_Cottonee[] = {
+ overworld_ascending_frames(gObjectEventPic_Cottonee, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Whimsicott[] = {
+ overworld_ascending_frames(gObjectEventPic_Whimsicott, 4, 4),
+};
+#endif //P_FAMILY_COTTONEE
+
+#if P_FAMILY_PETILIL
+static const struct SpriteFrameImage sPicTable_Petilil[] = {
+ overworld_ascending_frames(gObjectEventPic_Petilil, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Lilligant[] = {
+ overworld_ascending_frames(gObjectEventPic_Lilligant, 4, 4),
+};
+#if P_HISUIAN_FORMS
+static const struct SpriteFrameImage sPicTable_LilligantHisuian[] = {
+ overworld_ascending_frames(gObjectEventPic_LilligantHisuian, 4, 4),
+};
+#endif //P_HISUIAN_FORMS
+#endif //P_FAMILY_PETILIL
+
+#if P_FAMILY_BASCULIN
+static const struct SpriteFrameImage sPicTable_BasculinRedStriped[] = {
+ overworld_ascending_frames(gObjectEventPic_BasculinRedStriped, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_BasculinBlueStriped[] = {
+ overworld_ascending_frames(gObjectEventPic_BasculinBlueStriped, 4, 4),
+};
+#if P_HISUIAN_FORMS
+static const struct SpriteFrameImage sPicTable_BasculinWhiteStriped[] = {
+ overworld_ascending_frames(gObjectEventPic_BasculinWhiteStriped, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_BasculegionMale[] = {
+ overworld_ascending_frames(gObjectEventPic_BasculegionMale, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_BasculegionFemale[] = {
+ overworld_ascending_frames(gObjectEventPic_BasculegionFemale, 4, 4),
+};
+#endif //P_HISUIAN_FORMS
+#endif //P_FAMILY_BASCULIN
+
+#if P_FAMILY_SANDILE
+static const struct SpriteFrameImage sPicTable_Sandile[] = {
+ overworld_ascending_frames(gObjectEventPic_Sandile, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Krokorok[] = {
+ overworld_ascending_frames(gObjectEventPic_Krokorok, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Krookodile[] = {
+ overworld_ascending_frames(gObjectEventPic_Krookodile, 4, 4),
+};
+#endif //P_FAMILY_SANDILE
+
+#if P_FAMILY_DARUMAKA
+static const struct SpriteFrameImage sPicTable_Darumaka[] = {
+ overworld_ascending_frames(gObjectEventPic_Darumaka, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_DarmanitanStandardMode[] = {
+ overworld_ascending_frames(gObjectEventPic_DarmanitanStandardMode, 4, 4),
+};
+/*static const struct SpriteFrameImage sPicTable_DarmanitanZenMode[] = {
+ overworld_ascending_frames(gObjectEventPic_DarmanitanZenMode, 4, 4),
+};*/
+#if P_GALARIAN_FORMS
+static const struct SpriteFrameImage sPicTable_DarumakaGalarian[] = {
+ overworld_ascending_frames(gObjectEventPic_DarumakaGalarian, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_DarmanitanGalarianStandardMode[] = {
+ overworld_ascending_frames(gObjectEventPic_DarmanitanGalarianStandardMode, 4, 4),
+};
+/*static const struct SpriteFrameImage sPicTable_DarmanitanGalarianZenMode[] = {
+ overworld_ascending_frames(gObjectEventPic_DarmanitanGalarianZenMode, 4, 4),
+};*/
+#endif //P_GALARIAN_FORMS
+#endif //P_FAMILY_DARUMAKA
+
+#if P_FAMILY_MARACTUS
+static const struct SpriteFrameImage sPicTable_Maractus[] = {
+ overworld_ascending_frames(gObjectEventPic_Maractus, 4, 4),
+};
+#endif //P_FAMILY_MARACTUS
+
+#if P_FAMILY_DWEBBLE
+static const struct SpriteFrameImage sPicTable_Dwebble[] = {
+ overworld_ascending_frames(gObjectEventPic_Dwebble, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Crustle[] = {
+ overworld_ascending_frames(gObjectEventPic_Crustle, 4, 4),
+};
+#endif //P_FAMILY_DWEBBLE
+
+#if P_FAMILY_SCRAGGY
+static const struct SpriteFrameImage sPicTable_Scraggy[] = {
+ overworld_ascending_frames(gObjectEventPic_Scraggy, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Scrafty[] = {
+ overworld_ascending_frames(gObjectEventPic_Scrafty, 4, 4),
+};
+#endif //P_FAMILY_SCRAGGY
+
+#if P_FAMILY_SIGILYPH
+static const struct SpriteFrameImage sPicTable_Sigilyph[] = {
+ overworld_ascending_frames(gObjectEventPic_Sigilyph, 4, 4),
+};
+#endif //P_FAMILY_SIGILYPH
+
+#if P_FAMILY_YAMASK
+static const struct SpriteFrameImage sPicTable_Yamask[] = {
+ overworld_ascending_frames(gObjectEventPic_Yamask, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Cofagrigus[] = {
+ overworld_ascending_frames(gObjectEventPic_Cofagrigus, 4, 4),
+};
+#if P_GALARIAN_FORMS
+static const struct SpriteFrameImage sPicTable_YamaskGalarian[] = {
+ overworld_ascending_frames(gObjectEventPic_YamaskGalarian, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Runerigus[] = {
+ overworld_ascending_frames(gObjectEventPic_Runerigus, 4, 4),
+};
+#endif //P_GALARIAN_FORMS
+#endif //P_FAMILY_YAMASK
+
+#if P_FAMILY_TIRTOUGA
+static const struct SpriteFrameImage sPicTable_Tirtouga[] = {
+ overworld_ascending_frames(gObjectEventPic_Tirtouga, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Carracosta[] = {
+ overworld_ascending_frames(gObjectEventPic_Carracosta, 4, 4),
+};
+#endif //P_FAMILY_TIRTOUGA
+
+#if P_FAMILY_ARCHEN
+static const struct SpriteFrameImage sPicTable_Archen[] = {
+ overworld_ascending_frames(gObjectEventPic_Archen, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Archeops[] = {
+ overworld_ascending_frames(gObjectEventPic_Archeops, 4, 4),
+};
+#endif //P_FAMILY_ARCHEN
+
+#if P_FAMILY_TRUBBISH
+static const struct SpriteFrameImage sPicTable_Trubbish[] = {
+ overworld_ascending_frames(gObjectEventPic_Trubbish, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Garbodor[] = {
+ overworld_ascending_frames(gObjectEventPic_Garbodor, 4, 4),
+};
+#if P_GIGANTAMAX_FORMS
+/*static const struct SpriteFrameImage sPicTable_GarbodorGigantamax[] = {
+ overworld_ascending_frames(gObjectEventPic_GarbodorGigantamax, 4, 4),
+};*/
+#endif //P_GIGANTAMAX_FORMS
+#endif //P_FAMILY_TRUBBISH
+
+#if P_FAMILY_ZORUA
+static const struct SpriteFrameImage sPicTable_Zorua[] = {
+ overworld_ascending_frames(gObjectEventPic_Zorua, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Zoroark[] = {
+ overworld_ascending_frames(gObjectEventPic_Zoroark, 4, 4),
+};
+#if P_HISUIAN_FORMS
+static const struct SpriteFrameImage sPicTable_ZoruaHisuian[] = {
+ overworld_ascending_frames(gObjectEventPic_ZoruaHisuian, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_ZoroarkHisuian[] = {
+ overworld_ascending_frames(gObjectEventPic_ZoroarkHisuian, 4, 4),
+};
+#endif //P_HISUIAN_FORMS
+#endif //P_FAMILY_ZORUA
+
+#if P_FAMILY_MINCCINO
+static const struct SpriteFrameImage sPicTable_Minccino[] = {
+ overworld_ascending_frames(gObjectEventPic_Minccino, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Cinccino[] = {
+ overworld_ascending_frames(gObjectEventPic_Cinccino, 4, 4),
+};
+#endif //P_FAMILY_MINCCINO
+
+#if P_FAMILY_GOTHITA
+static const struct SpriteFrameImage sPicTable_Gothita[] = {
+ overworld_ascending_frames(gObjectEventPic_Gothita, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Gothorita[] = {
+ overworld_ascending_frames(gObjectEventPic_Gothorita, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Gothitelle[] = {
+ overworld_ascending_frames(gObjectEventPic_Gothitelle, 4, 4),
+};
+#endif //P_FAMILY_GOTHITA
+
+#if P_FAMILY_SOLOSIS
+static const struct SpriteFrameImage sPicTable_Solosis[] = {
+ overworld_ascending_frames(gObjectEventPic_Solosis, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Duosion[] = {
+ overworld_ascending_frames(gObjectEventPic_Duosion, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Reuniclus[] = {
+ overworld_ascending_frames(gObjectEventPic_Reuniclus, 4, 4),
+};
+#endif //P_FAMILY_SOLOSIS
+
+#if P_FAMILY_DUCKLETT
+static const struct SpriteFrameImage sPicTable_Ducklett[] = {
+ overworld_ascending_frames(gObjectEventPic_Ducklett, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Swanna[] = {
+ overworld_ascending_frames(gObjectEventPic_Swanna, 4, 4),
+};
+#endif //P_FAMILY_DUCKLETT
+
+#if P_FAMILY_VANILLITE
+static const struct SpriteFrameImage sPicTable_Vanillite[] = {
+ overworld_ascending_frames(gObjectEventPic_Vanillite, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Vanillish[] = {
+ overworld_ascending_frames(gObjectEventPic_Vanillish, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Vanilluxe[] = {
+ overworld_ascending_frames(gObjectEventPic_Vanilluxe, 4, 4),
+};
+#endif //P_FAMILY_VANILLITE
+
+#if P_FAMILY_DEERLING
+
+static const struct SpriteFrameImage sPicTable_DeerlingSpring[] = {
+ overworld_ascending_frames(gObjectEventPic_DeerlingSpring, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_DeerlingSummer[] = {
+ overworld_ascending_frames(gObjectEventPic_DeerlingSummer, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_DeerlingAutumn[] = {
+ overworld_ascending_frames(gObjectEventPic_DeerlingAutumn, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_DeerlingWinter[] = {
+ overworld_ascending_frames(gObjectEventPic_DeerlingWinter, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_SawsbuckSpring[] = {
+ overworld_ascending_frames(gObjectEventPic_SawsbuckSpring, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_SawsbuckSummer[] = {
+ overworld_ascending_frames(gObjectEventPic_SawsbuckSummer, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_SawsbuckAutumn[] = {
+ overworld_ascending_frames(gObjectEventPic_SawsbuckAutumn, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_SawsbuckWinter[] = {
+ overworld_ascending_frames(gObjectEventPic_SawsbuckWinter, 4, 4),
+};
+#endif //P_FAMILY_DEERLING
+
+#if P_FAMILY_EMOLGA
+static const struct SpriteFrameImage sPicTable_Emolga[] = {
+ overworld_ascending_frames(gObjectEventPic_Emolga, 4, 4),
+};
+#endif //P_FAMILY_EMOLGA
+
+#if P_FAMILY_KARRABLAST
+static const struct SpriteFrameImage sPicTable_Karrablast[] = {
+ overworld_ascending_frames(gObjectEventPic_Karrablast, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Escavalier[] = {
+ overworld_ascending_frames(gObjectEventPic_Escavalier, 4, 4),
+};
+#endif //P_FAMILY_KARRABLAST
+
+#if P_FAMILY_FOONGUS
+static const struct SpriteFrameImage sPicTable_Foongus[] = {
+ overworld_ascending_frames(gObjectEventPic_Foongus, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Amoonguss[] = {
+ overworld_ascending_frames(gObjectEventPic_Amoonguss, 4, 4),
+};
+#endif //P_FAMILY_FOONGUS
+
+#if P_FAMILY_FRILLISH
+static const struct SpriteFrameImage sPicTable_Frillish[] = {
+ overworld_ascending_frames(gObjectEventPic_Frillish, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_FrillishF[] = {
+ overworld_ascending_frames(gObjectEventPic_FrillishF, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Jellicent[] = {
+ overworld_ascending_frames(gObjectEventPic_Jellicent, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_JellicentF[] = {
+ overworld_ascending_frames(gObjectEventPic_JellicentF, 4, 4),
+};
+#endif //P_FAMILY_FRILLISH
+
+#if P_FAMILY_ALOMOMOLA
+static const struct SpriteFrameImage sPicTable_Alomomola[] = {
+ overworld_ascending_frames(gObjectEventPic_Alomomola, 4, 4),
+};
+#endif //P_FAMILY_ALOMOMOLA
+
+#if P_FAMILY_JOLTIK
+static const struct SpriteFrameImage sPicTable_Joltik[] = {
+ overworld_ascending_frames(gObjectEventPic_Joltik, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Galvantula[] = {
+ overworld_ascending_frames(gObjectEventPic_Galvantula, 4, 4),
+};
+#endif //P_FAMILY_JOLTIK
+
+#if P_FAMILY_FERROSEED
+static const struct SpriteFrameImage sPicTable_Ferroseed[] = {
+ overworld_ascending_frames(gObjectEventPic_Ferroseed, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Ferrothorn[] = {
+ overworld_ascending_frames(gObjectEventPic_Ferrothorn, 4, 4),
+};
+#endif //P_FAMILY_FERROSEED
+
+#if P_FAMILY_KLINK
+static const struct SpriteFrameImage sPicTable_Klink[] = {
+ overworld_ascending_frames(gObjectEventPic_Klink, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Klang[] = {
+ overworld_ascending_frames(gObjectEventPic_Klang, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Klinklang[] = {
+ overworld_ascending_frames(gObjectEventPic_Klinklang, 4, 4),
+};
+#endif //P_FAMILY_KLINK
+
+#if P_FAMILY_TYNAMO
+static const struct SpriteFrameImage sPicTable_Tynamo[] = {
+ overworld_ascending_frames(gObjectEventPic_Tynamo, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Eelektrik[] = {
+ overworld_ascending_frames(gObjectEventPic_Eelektrik, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Eelektross[] = {
+ overworld_ascending_frames(gObjectEventPic_Eelektross, 4, 4),
+};
+#endif //P_FAMILY_TYNAMO
+
+#if P_FAMILY_ELGYEM
+static const struct SpriteFrameImage sPicTable_Elgyem[] = {
+ overworld_ascending_frames(gObjectEventPic_Elgyem, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Beheeyem[] = {
+ overworld_ascending_frames(gObjectEventPic_Beheeyem, 4, 4),
+};
+#endif //P_FAMILY_ELGYEM
+
+#if P_FAMILY_LITWICK
+static const struct SpriteFrameImage sPicTable_Litwick[] = {
+ overworld_ascending_frames(gObjectEventPic_Litwick, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Lampent[] = {
+ overworld_ascending_frames(gObjectEventPic_Lampent, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Chandelure[] = {
+ overworld_ascending_frames(gObjectEventPic_Chandelure, 4, 4),
+};
+#endif //P_FAMILY_LITWICK
+
+#if P_FAMILY_AXEW
+static const struct SpriteFrameImage sPicTable_Axew[] = {
+ overworld_ascending_frames(gObjectEventPic_Axew, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Fraxure[] = {
+ overworld_ascending_frames(gObjectEventPic_Fraxure, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Haxorus[] = {
+ overworld_ascending_frames(gObjectEventPic_Haxorus, 4, 4),
+};
+#endif //P_FAMILY_AXEW
+
+#if P_FAMILY_CUBCHOO
+static const struct SpriteFrameImage sPicTable_Cubchoo[] = {
+ overworld_ascending_frames(gObjectEventPic_Cubchoo, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Beartic[] = {
+ overworld_ascending_frames(gObjectEventPic_Beartic, 4, 4),
+};
+#endif //P_FAMILY_CUBCHOO
+
+#if P_FAMILY_CRYOGONAL
+static const struct SpriteFrameImage sPicTable_Cryogonal[] = {
+ overworld_ascending_frames(gObjectEventPic_Cryogonal, 4, 4),
+};
+#endif //P_FAMILY_CRYOGONAL
+
+#if P_FAMILY_SHELMET
+static const struct SpriteFrameImage sPicTable_Shelmet[] = {
+ overworld_ascending_frames(gObjectEventPic_Shelmet, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Accelgor[] = {
+ overworld_ascending_frames(gObjectEventPic_Accelgor, 4, 4),
+};
+#endif //P_FAMILY_SHELMET
+
+#if P_FAMILY_STUNFISK
+static const struct SpriteFrameImage sPicTable_Stunfisk[] = {
+ overworld_ascending_frames(gObjectEventPic_Stunfisk, 4, 4),
+};
+#if P_GALARIAN_FORMS
+static const struct SpriteFrameImage sPicTable_StunfiskGalarian[] = {
+ overworld_ascending_frames(gObjectEventPic_StunfiskGalarian, 4, 4),
+};
+#endif //P_GALARIAN_FORMS
+#endif //P_FAMILY_STUNFISK
+
+#if P_FAMILY_MIENFOO
+static const struct SpriteFrameImage sPicTable_Mienfoo[] = {
+ overworld_ascending_frames(gObjectEventPic_Mienfoo, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Mienshao[] = {
+ overworld_ascending_frames(gObjectEventPic_Mienshao, 4, 4),
+};
+#endif //P_FAMILY_MIENFOO
+
+#if P_FAMILY_DRUDDIGON
+static const struct SpriteFrameImage sPicTable_Druddigon[] = {
+ overworld_ascending_frames(gObjectEventPic_Druddigon, 4, 4),
+};
+#endif //P_FAMILY_DRUDDIGON
+
+#if P_FAMILY_GOLETT
+static const struct SpriteFrameImage sPicTable_Golett[] = {
+ overworld_ascending_frames(gObjectEventPic_Golett, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Golurk[] = {
+ overworld_ascending_frames(gObjectEventPic_Golurk, 4, 4),
+};
+#endif //P_FAMILY_GOLETT
+
+#if P_FAMILY_PAWNIARD
+static const struct SpriteFrameImage sPicTable_Pawniard[] = {
+ overworld_ascending_frames(gObjectEventPic_Pawniard, 4, 4),
+};
+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),
+};*/
+#endif //P_GEN_9_CROSS_EVOS
+#endif //P_FAMILY_PAWNIARD
+
+#if P_FAMILY_BOUFFALANT
+static const struct SpriteFrameImage sPicTable_Bouffalant[] = {
+ overworld_ascending_frames(gObjectEventPic_Bouffalant, 4, 4),
+};
+#endif //P_FAMILY_BOUFFALANT
+
+#if P_FAMILY_RUFFLET
+static const struct SpriteFrameImage sPicTable_Rufflet[] = {
+ overworld_ascending_frames(gObjectEventPic_Rufflet, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Braviary[] = {
+ overworld_ascending_frames(gObjectEventPic_Braviary, 4, 4),
+};
+#if P_HISUIAN_FORMS
+static const struct SpriteFrameImage sPicTable_BraviaryHisuian[] = {
+ overworld_ascending_frames(gObjectEventPic_BraviaryHisuian, 4, 4),
+};
+#endif //P_HISUIAN_FORMS
+#endif //P_FAMILY_RUFFLET
+
+#if P_FAMILY_VULLABY
+static const struct SpriteFrameImage sPicTable_Vullaby[] = {
+ overworld_ascending_frames(gObjectEventPic_Vullaby, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Mandibuzz[] = {
+ overworld_ascending_frames(gObjectEventPic_Mandibuzz, 4, 4),
+};
+#endif //P_FAMILY_VULLABY
+
+#if P_FAMILY_HEATMOR
+static const struct SpriteFrameImage sPicTable_Heatmor[] = {
+ overworld_ascending_frames(gObjectEventPic_Heatmor, 4, 4),
+};
+#endif //P_FAMILY_HEATMOR
+
+#if P_FAMILY_DURANT
+static const struct SpriteFrameImage sPicTable_Durant[] = {
+ overworld_ascending_frames(gObjectEventPic_Durant, 4, 4),
+};
+#endif //P_FAMILY_DURANT
+
+#if P_FAMILY_DEINO
+static const struct SpriteFrameImage sPicTable_Deino[] = {
+ overworld_ascending_frames(gObjectEventPic_Deino, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Zweilous[] = {
+ overworld_ascending_frames(gObjectEventPic_Zweilous, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Hydreigon[] = {
+ overworld_ascending_frames(gObjectEventPic_Hydreigon, 4, 4),
+};
+#endif //P_FAMILY_DEINO
+
+#if P_FAMILY_LARVESTA
+static const struct SpriteFrameImage sPicTable_Larvesta[] = {
+ overworld_ascending_frames(gObjectEventPic_Larvesta, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Volcarona[] = {
+ overworld_ascending_frames(gObjectEventPic_Volcarona, 4, 4),
+};
+#endif //P_FAMILY_LARVESTA
+
+#if P_FAMILY_COBALION
+static const struct SpriteFrameImage sPicTable_Cobalion[] = {
+ overworld_ascending_frames(gObjectEventPic_Cobalion, 4, 4),
+};
+#endif //P_FAMILY_COBALION
+
+#if P_FAMILY_TERRAKION
+static const struct SpriteFrameImage sPicTable_Terrakion[] = {
+ overworld_ascending_frames(gObjectEventPic_Terrakion, 4, 4),
+};
+#endif //P_FAMILY_TERRAKION
+
+#if P_FAMILY_VIRIZION
+static const struct SpriteFrameImage sPicTable_Virizion[] = {
+ overworld_ascending_frames(gObjectEventPic_Virizion, 4, 4),
+};
+#endif //P_FAMILY_VIRIZION
+
+#if P_FAMILY_TORNADUS
+
+static const struct SpriteFrameImage sPicTable_TornadusIncarnate[] = {
+ overworld_ascending_frames(gObjectEventPic_TornadusIncarnate, 4, 4),
+};
+/*static const struct SpriteFrameImage sPicTable_TornadusTherian[] = {
+ overworld_ascending_frames(gObjectEventPic_TornadusTherian, 4, 4),
+};*/
+#endif //P_FAMILY_TORNADUS
+
+#if P_FAMILY_THUNDURUS
+
+static const struct SpriteFrameImage sPicTable_ThundurusIncarnate[] = {
+ overworld_ascending_frames(gObjectEventPic_ThundurusIncarnate, 4, 4),
+};
+/*static const struct SpriteFrameImage sPicTable_ThundurusTherian[] = {
+ overworld_ascending_frames(gObjectEventPic_ThundurusTherian, 4, 4),
+};*/
+#endif //P_FAMILY_THUNDURUS
+
+#if P_FAMILY_RESHIRAM
+static const struct SpriteFrameImage sPicTable_Reshiram[] = {
+ overworld_ascending_frames(gObjectEventPic_Reshiram, 4, 4),
+};
+#endif //P_FAMILY_RESHIRAM
+
+#if P_FAMILY_ZEKROM
+static const struct SpriteFrameImage sPicTable_Zekrom[] = {
+ overworld_ascending_frames(gObjectEventPic_Zekrom, 4, 4),
+};
+#endif //P_FAMILY_ZEKROM
+
+#if P_FAMILY_LANDORUS
+
+static const struct SpriteFrameImage sPicTable_LandorusIncarnate[] = {
+ overworld_ascending_frames(gObjectEventPic_LandorusIncarnate, 4, 4),
+};
+/*static const struct SpriteFrameImage sPicTable_LandorusTherian[] = {
+ overworld_ascending_frames(gObjectEventPic_LandorusTherian, 4, 4),
+};*/
+#endif //P_FAMILY_LANDORUS
+
+#if P_FAMILY_ENAMORUS
+static const struct SpriteFrameImage sPicTable_EnamorusIncarnate[] = {
+ overworld_ascending_frames(gObjectEventPic_EnamorusIncarnate, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_EnamorusTherian[] = {
+ overworld_ascending_frames(gObjectEventPic_EnamorusTherian, 4, 4),
+};
+#endif //P_FAMILY_ENAMORUS
+
+#if P_FAMILY_KYUREM
+static const struct SpriteFrameImage sPicTable_Kyurem[] = {
+ overworld_ascending_frames(gObjectEventPic_Kyurem, 4, 4),
+};
+#if P_FUSION_FORMS
+/*static const struct SpriteFrameImage sPicTable_KyuremWhite[] = {
+ overworld_ascending_frames(gObjectEventPic_KyuremWhite, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_KyuremBlack[] = {
+ overworld_ascending_frames(gObjectEventPic_KyuremBlack, 4, 4),
+};*/
+#endif //P_FUSION_FORMS
+#endif //P_FAMILY_KYUREM
+
+#if P_FAMILY_KELDEO
+static const struct SpriteFrameImage sPicTable_KeldeoOrdinary[] = {
+ overworld_ascending_frames(gObjectEventPic_KeldeoOrdinary, 4, 4),
+};
+/*static const struct SpriteFrameImage sPicTable_KeldeoResolute[] = {
+ overworld_ascending_frames(gObjectEventPic_KeldeoResolute, 4, 4),
+};*/
+#endif //P_FAMILY_KELDEO
+
+#if P_FAMILY_MELOETTA
+static const struct SpriteFrameImage sPicTable_MeloettaAria[] = {
+ overworld_ascending_frames(gObjectEventPic_MeloettaAria, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_MeloettaPirouette[] = {
+ overworld_ascending_frames(gObjectEventPic_MeloettaPirouette, 4, 4),
+};
+#endif //P_FAMILY_MELOETTA
+
+#if P_FAMILY_GENESECT
+static const struct SpriteFrameImage sPicTable_Genesect[] = {
+ overworld_ascending_frames(gObjectEventPic_Genesect, 4, 4),
+};
+
+
+
+
+#endif //P_FAMILY_GENESECT
+
+#if P_FAMILY_CHESPIN
+static const struct SpriteFrameImage sPicTable_Chespin[] = {
+ overworld_ascending_frames(gObjectEventPic_Chespin, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Quilladin[] = {
+ overworld_ascending_frames(gObjectEventPic_Quilladin, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Chesnaught[] = {
+ overworld_ascending_frames(gObjectEventPic_Chesnaught, 4, 4),
+};
+#endif //P_FAMILY_CHESPIN
+
+#if P_FAMILY_FENNEKIN
+static const struct SpriteFrameImage sPicTable_Fennekin[] = {
+ overworld_ascending_frames(gObjectEventPic_Fennekin, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Braixen[] = {
+ overworld_ascending_frames(gObjectEventPic_Braixen, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Delphox[] = {
+ overworld_ascending_frames(gObjectEventPic_Delphox, 4, 4),
+};
+#endif //P_FAMILY_FENNEKIN
+
+#if P_FAMILY_FROAKIE
+static const struct SpriteFrameImage sPicTable_Froakie[] = {
+ overworld_ascending_frames(gObjectEventPic_Froakie, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Frogadier[] = {
+ overworld_ascending_frames(gObjectEventPic_Frogadier, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Greninja[] = {
+ overworld_ascending_frames(gObjectEventPic_Greninja, 4, 4),
+};
+/*static const struct SpriteFrameImage sPicTable_GreninjaAsh[] = {
+ overworld_ascending_frames(gObjectEventPic_GreninjaAsh, 4, 4),
+};*/
+#endif //P_FAMILY_FROAKIE
+
+#if P_FAMILY_BUNNELBY
+static const struct SpriteFrameImage sPicTable_Bunnelby[] = {
+ overworld_ascending_frames(gObjectEventPic_Bunnelby, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Diggersby[] = {
+ overworld_ascending_frames(gObjectEventPic_Diggersby, 4, 4),
+};
+#endif //P_FAMILY_BUNNELBY
+
+#if P_FAMILY_FLETCHLING
+static const struct SpriteFrameImage sPicTable_Fletchling[] = {
+ overworld_ascending_frames(gObjectEventPic_Fletchling, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Fletchinder[] = {
+ overworld_ascending_frames(gObjectEventPic_Fletchinder, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Talonflame[] = {
+ overworld_ascending_frames(gObjectEventPic_Talonflame, 4, 4),
+};
+#endif //P_FAMILY_FLETCHLING
+
+#if P_FAMILY_SCATTERBUG
+static const struct SpriteFrameImage sPicTable_Scatterbug[] = {
+ overworld_ascending_frames(gObjectEventPic_Scatterbug, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Spewpa[] = {
+ overworld_ascending_frames(gObjectEventPic_Spewpa, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_VivillonIcySnow[] = {
+ overworld_ascending_frames(gObjectEventPic_VivillonIcySnow, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_VivillonPolar[] = {
+ overworld_ascending_frames(gObjectEventPic_VivillonPolar, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_VivillonTundra[] = {
+ overworld_ascending_frames(gObjectEventPic_VivillonTundra, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_VivillonContinental[] = {
+ overworld_ascending_frames(gObjectEventPic_VivillonContinental, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_VivillonGarden[] = {
+ overworld_ascending_frames(gObjectEventPic_VivillonGarden, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_VivillonElegant[] = {
+ overworld_ascending_frames(gObjectEventPic_VivillonElegant, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_VivillonMeadow[] = {
+ overworld_ascending_frames(gObjectEventPic_VivillonMeadow, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_VivillonModern[] = {
+ overworld_ascending_frames(gObjectEventPic_VivillonModern, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_VivillonMarine[] = {
+ overworld_ascending_frames(gObjectEventPic_VivillonMarine, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_VivillonArchipelago[] = {
+ overworld_ascending_frames(gObjectEventPic_VivillonArchipelago, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_VivillonHighPlains[] = {
+ overworld_ascending_frames(gObjectEventPic_VivillonHighPlains, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_VivillonSandstorm[] = {
+ overworld_ascending_frames(gObjectEventPic_VivillonSandstorm, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_VivillonRiver[] = {
+ overworld_ascending_frames(gObjectEventPic_VivillonRiver, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_VivillonMonsoon[] = {
+ overworld_ascending_frames(gObjectEventPic_VivillonMonsoon, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_VivillonSavanna[] = {
+ overworld_ascending_frames(gObjectEventPic_VivillonSavanna, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_VivillonSun[] = {
+ overworld_ascending_frames(gObjectEventPic_VivillonSun, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_VivillonOcean[] = {
+ overworld_ascending_frames(gObjectEventPic_VivillonOcean, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_VivillonJungle[] = {
+ overworld_ascending_frames(gObjectEventPic_VivillonJungle, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_VivillonFancy[] = {
+ overworld_ascending_frames(gObjectEventPic_VivillonFancy, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_VivillonPokeBall[] = {
+ overworld_ascending_frames(gObjectEventPic_VivillonPokeBall, 4, 4),
+};
+#endif //P_FAMILY_SCATTERBUG
+
+#if P_FAMILY_LITLEO
+static const struct SpriteFrameImage sPicTable_Litleo[] = {
+ overworld_ascending_frames(gObjectEventPic_Litleo, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Pyroar[] = {
+ overworld_ascending_frames(gObjectEventPic_Pyroar, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_PyroarF[] = {
+ overworld_ascending_frames(gObjectEventPic_PyroarF, 4, 4),
+};
+#endif //P_FAMILY_LITLEO
+
+#if P_FAMILY_FLABEBE
+
+static const struct SpriteFrameImage sPicTable_FlabebeRedFlower[] = {
+ overworld_ascending_frames(gObjectEventPic_FlabebeRedFlower, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_FlabebeYellowFlower[] = {
+ overworld_ascending_frames(gObjectEventPic_FlabebeYellowFlower, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_FlabebeOrangeFlower[] = {
+ overworld_ascending_frames(gObjectEventPic_FlabebeOrangeFlower, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_FlabebeBlueFlower[] = {
+ overworld_ascending_frames(gObjectEventPic_FlabebeBlueFlower, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_FlabebeWhiteFlower[] = {
+ overworld_ascending_frames(gObjectEventPic_FlabebeWhiteFlower, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_FloetteRedFlower[] = {
+ overworld_ascending_frames(gObjectEventPic_FloetteRedFlower, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_FloetteYellowFlower[] = {
+ overworld_ascending_frames(gObjectEventPic_FloetteYellowFlower, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_FloetteOrangeFlower[] = {
+ overworld_ascending_frames(gObjectEventPic_FloetteOrangeFlower, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_FloetteBlueFlower[] = {
+ overworld_ascending_frames(gObjectEventPic_FloetteBlueFlower, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_FloetteWhiteFlower[] = {
+ overworld_ascending_frames(gObjectEventPic_FloetteWhiteFlower, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_FloetteEternalFlower[] = {
+ overworld_ascending_frames(gObjectEventPic_FloetteEternalFlower, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_FlorgesRedFlower[] = {
+ overworld_ascending_frames(gObjectEventPic_FlorgesRedFlower, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_FlorgesYellowFlower[] = {
+ overworld_ascending_frames(gObjectEventPic_FlorgesYellowFlower, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_FlorgesOrangeFlower[] = {
+ overworld_ascending_frames(gObjectEventPic_FlorgesOrangeFlower, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_FlorgesBlueFlower[] = {
+ overworld_ascending_frames(gObjectEventPic_FlorgesBlueFlower, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_FlorgesWhiteFlower[] = {
+ overworld_ascending_frames(gObjectEventPic_FlorgesWhiteFlower, 4, 4),
+};
+#endif //P_FAMILY_FLABEBE
+
+#if P_FAMILY_SKIDDO
+static const struct SpriteFrameImage sPicTable_Skiddo[] = {
+ overworld_ascending_frames(gObjectEventPic_Skiddo, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Gogoat[] = {
+ overworld_ascending_frames(gObjectEventPic_Gogoat, 4, 4),
+};
+#endif //P_FAMILY_SKIDDO
+
+#if P_FAMILY_PANCHAM
+static const struct SpriteFrameImage sPicTable_Pancham[] = {
+ overworld_ascending_frames(gObjectEventPic_Pancham, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Pangoro[] = {
+ overworld_ascending_frames(gObjectEventPic_Pangoro, 4, 4),
+};
+#endif //P_FAMILY_PANCHAM
+
+#if P_FAMILY_FURFROU
+static const struct SpriteFrameImage sPicTable_FurfrouNatural[] = {
+ overworld_ascending_frames(gObjectEventPic_FurfrouNatural, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_FurfrouHeartTrim[] = {
+ overworld_ascending_frames(gObjectEventPic_FurfrouHeartTrim, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_FurfrouStarTrim[] = {
+ overworld_ascending_frames(gObjectEventPic_FurfrouStarTrim, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_FurfrouDiamondTrim[] = {
+ overworld_ascending_frames(gObjectEventPic_FurfrouDiamondTrim, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_FurfrouDebutanteTrim[] = {
+ overworld_ascending_frames(gObjectEventPic_FurfrouDebutanteTrim, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_FurfrouMatronTrim[] = {
+ overworld_ascending_frames(gObjectEventPic_FurfrouMatronTrim, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_FurfrouDandyTrim[] = {
+ overworld_ascending_frames(gObjectEventPic_FurfrouDandyTrim, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_FurfrouLaReineTrim[] = {
+ overworld_ascending_frames(gObjectEventPic_FurfrouLaReineTrim, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_FurfrouKabukiTrim[] = {
+ overworld_ascending_frames(gObjectEventPic_FurfrouKabukiTrim, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_FurfrouPharaohTrim[] = {
+ overworld_ascending_frames(gObjectEventPic_FurfrouPharaohTrim, 4, 4),
+};
+#endif //P_FAMILY_FURFROU
+
+#if P_FAMILY_ESPURR
+static const struct SpriteFrameImage sPicTable_Espurr[] = {
+ overworld_ascending_frames(gObjectEventPic_Espurr, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_MeowsticMale[] = {
+ overworld_ascending_frames(gObjectEventPic_MeowsticMale, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_MeowsticFemale[] = {
+ overworld_ascending_frames(gObjectEventPic_MeowsticFemale, 4, 4),
+};
+#endif //P_FAMILY_ESPURR
+
+#if P_FAMILY_HONEDGE
+static const struct SpriteFrameImage sPicTable_Honedge[] = {
+ overworld_ascending_frames(gObjectEventPic_Honedge, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Doublade[] = {
+ overworld_ascending_frames(gObjectEventPic_Doublade, 4, 4),
+};
+
+static const struct SpriteFrameImage sPicTable_AegislashShield[] = {
+ overworld_ascending_frames(gObjectEventPic_AegislashShield, 4, 4),
+};
+/*static const struct SpriteFrameImage sPicTable_AegislashBlade[] = {
+ overworld_ascending_frames(gObjectEventPic_AegislashBlade, 4, 4),
+};*/
+#endif //P_FAMILY_HONEDGE
+
+#if P_FAMILY_SPRITZEE
+static const struct SpriteFrameImage sPicTable_Spritzee[] = {
+ overworld_ascending_frames(gObjectEventPic_Spritzee, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Aromatisse[] = {
+ overworld_ascending_frames(gObjectEventPic_Aromatisse, 4, 4),
+};
+#endif //P_FAMILY_SPRITZEE
+
+#if P_FAMILY_SWIRLIX
+static const struct SpriteFrameImage sPicTable_Swirlix[] = {
+ overworld_ascending_frames(gObjectEventPic_Swirlix, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Slurpuff[] = {
+ overworld_ascending_frames(gObjectEventPic_Slurpuff, 4, 4),
+};
+#endif //P_FAMILY_SWIRLIX
+
+#if P_FAMILY_INKAY
+static const struct SpriteFrameImage sPicTable_Inkay[] = {
+ overworld_ascending_frames(gObjectEventPic_Inkay, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Malamar[] = {
+ overworld_ascending_frames(gObjectEventPic_Malamar, 4, 4),
+};
+#endif //P_FAMILY_INKAY
+
+#if P_FAMILY_BINACLE
+static const struct SpriteFrameImage sPicTable_Binacle[] = {
+ overworld_ascending_frames(gObjectEventPic_Binacle, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Barbaracle[] = {
+ overworld_ascending_frames(gObjectEventPic_Barbaracle, 4, 4),
+};
+#endif //P_FAMILY_BINACLE
+
+#if P_FAMILY_SKRELP
+static const struct SpriteFrameImage sPicTable_Skrelp[] = {
+ overworld_ascending_frames(gObjectEventPic_Skrelp, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Dragalge[] = {
+ overworld_ascending_frames(gObjectEventPic_Dragalge, 4, 4),
+};
+#endif //P_FAMILY_SKRELP
+
+#if P_FAMILY_CLAUNCHER
+static const struct SpriteFrameImage sPicTable_Clauncher[] = {
+ overworld_ascending_frames(gObjectEventPic_Clauncher, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Clawitzer[] = {
+ overworld_ascending_frames(gObjectEventPic_Clawitzer, 4, 4),
+};
+#endif //P_FAMILY_CLAUNCHER
+
+#if P_FAMILY_HELIOPTILE
+static const struct SpriteFrameImage sPicTable_Helioptile[] = {
+ overworld_ascending_frames(gObjectEventPic_Helioptile, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Heliolisk[] = {
+ overworld_ascending_frames(gObjectEventPic_Heliolisk, 4, 4),
+};
+#endif //P_FAMILY_HELIOPTILE
+
+#if P_FAMILY_TYRUNT
+static const struct SpriteFrameImage sPicTable_Tyrunt[] = {
+ overworld_ascending_frames(gObjectEventPic_Tyrunt, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Tyrantrum[] = {
+ overworld_ascending_frames(gObjectEventPic_Tyrantrum, 4, 4),
+};
+#endif //P_FAMILY_TYRUNT
+
+#if P_FAMILY_AMAURA
+static const struct SpriteFrameImage sPicTable_Amaura[] = {
+ overworld_ascending_frames(gObjectEventPic_Amaura, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Aurorus[] = {
+ overworld_ascending_frames(gObjectEventPic_Aurorus, 4, 4),
+};
+#endif //P_FAMILY_AMAURA
+
+#if P_FAMILY_HAWLUCHA
+static const struct SpriteFrameImage sPicTable_Hawlucha[] = {
+ overworld_ascending_frames(gObjectEventPic_Hawlucha, 4, 4),
+};
+#endif //P_FAMILY_HAWLUCHA
+
+#if P_FAMILY_DEDENNE
+static const struct SpriteFrameImage sPicTable_Dedenne[] = {
+ overworld_ascending_frames(gObjectEventPic_Dedenne, 4, 4),
+};
+#endif //P_FAMILY_DEDENNE
+
+#if P_FAMILY_CARBINK
+static const struct SpriteFrameImage sPicTable_Carbink[] = {
+ overworld_ascending_frames(gObjectEventPic_Carbink, 4, 4),
+};
+#endif //P_FAMILY_CARBINK
+
+#if P_FAMILY_GOOMY
+static const struct SpriteFrameImage sPicTable_Goomy[] = {
+ overworld_ascending_frames(gObjectEventPic_Goomy, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Sliggoo[] = {
+ overworld_ascending_frames(gObjectEventPic_Sliggoo, 4, 4),
+};
+#if P_HISUIAN_FORMS
+static const struct SpriteFrameImage sPicTable_SliggooHisuian[] = {
+ overworld_ascending_frames(gObjectEventPic_SliggooHisuian, 4, 4),
+};
+#endif //P_HISUIAN_FORMS
+
+static const struct SpriteFrameImage sPicTable_Goodra[] = {
+ overworld_ascending_frames(gObjectEventPic_Goodra, 4, 4),
+};
+#if P_HISUIAN_FORMS
+static const struct SpriteFrameImage sPicTable_GoodraHisuian[] = {
+ overworld_ascending_frames(gObjectEventPic_GoodraHisuian, 4, 4),
+};
+#endif //P_HISUIAN_FORMS
+#endif //P_FAMILY_GOOMY
+
+#if P_FAMILY_KLEFKI
+static const struct SpriteFrameImage sPicTable_Klefki[] = {
+ overworld_ascending_frames(gObjectEventPic_Klefki, 4, 4),
+};
+#endif //P_FAMILY_KLEFKI
+
+#if P_FAMILY_PHANTUMP
+static const struct SpriteFrameImage sPicTable_Phantump[] = {
+ overworld_ascending_frames(gObjectEventPic_Phantump, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Trevenant[] = {
+ overworld_ascending_frames(gObjectEventPic_Trevenant, 4, 4),
+};
+#endif //P_FAMILY_PHANTUMP
+
+#if P_FAMILY_PUMPKABOO
+
+static const struct SpriteFrameImage sPicTable_PumpkabooAverage[] = {
+ overworld_ascending_frames(gObjectEventPic_PumpkabooAverage, 4, 4),
+};
+/*static const struct SpriteFrameImage sPicTable_PumpkabooSmall[] = {
+ overworld_ascending_frames(gObjectEventPic_PumpkabooSmall, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_PumpkabooLarge[] = {
+ overworld_ascending_frames(gObjectEventPic_PumpkabooLarge, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_PumpkabooSuper[] = {
+ overworld_ascending_frames(gObjectEventPic_PumpkabooSuper, 4, 4),
+};*/
+
+static const struct SpriteFrameImage sPicTable_GourgeistAverage[] = {
+ overworld_ascending_frames(gObjectEventPic_GourgeistAverage, 4, 4),
+};
+/*static const struct SpriteFrameImage sPicTable_GourgeistSmall[] = {
+ overworld_ascending_frames(gObjectEventPic_GourgeistSmall, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_GourgeistLarge[] = {
+ overworld_ascending_frames(gObjectEventPic_GourgeistLarge, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_GourgeistSuper[] = {
+ overworld_ascending_frames(gObjectEventPic_GourgeistSuper, 4, 4),
+};*/
+#endif //P_FAMILY_PUMPKABOO
+
+#if P_FAMILY_BERGMITE
+static const struct SpriteFrameImage sPicTable_Bergmite[] = {
+ overworld_ascending_frames(gObjectEventPic_Bergmite, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Avalugg[] = {
+ overworld_ascending_frames(gObjectEventPic_Avalugg, 4, 4),
+};
+#if P_HISUIAN_FORMS
+static const struct SpriteFrameImage sPicTable_AvaluggHisuian[] = {
+ overworld_ascending_frames(gObjectEventPic_AvaluggHisuian, 4, 4),
+};
+#endif //P_HISUIAN_FORMS
+#endif //P_FAMILY_BERGMITE
+
+#if P_FAMILY_NOIBAT
+static const struct SpriteFrameImage sPicTable_Noibat[] = {
+ overworld_ascending_frames(gObjectEventPic_Noibat, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Noivern[] = {
+ overworld_ascending_frames(gObjectEventPic_Noivern, 4, 4),
+};
+#endif //P_FAMILY_NOIBAT
+
+#if P_FAMILY_XERNEAS
+
+static const struct SpriteFrameImage sPicTable_XerneasNeutral[] = {
+ overworld_ascending_frames(gObjectEventPic_XerneasNeutral, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_XerneasActive[] = {
+ overworld_ascending_frames(gObjectEventPic_XerneasActive, 4, 4),
+};
+#endif //P_FAMILY_XERNEAS
+
+#if P_FAMILY_YVELTAL
+static const struct SpriteFrameImage sPicTable_Yveltal[] = {
+ overworld_ascending_frames(gObjectEventPic_Yveltal, 4, 4),
+};
+#endif //P_FAMILY_YVELTAL
+
+#if P_FAMILY_ZYGARDE
+
+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),
+};
+*/
+#endif //P_FAMILY_ZYGARDE
+
+#if P_FAMILY_DIANCIE
+static const struct SpriteFrameImage sPicTable_Diancie[] = {
+ overworld_ascending_frames(gObjectEventPic_Diancie, 4, 4),
+};
+#if P_MEGA_EVOLUTIONS
+/*static const struct SpriteFrameImage sPicTable_DiancieMega[] = {
+ overworld_ascending_frames(gObjectEventPic_DiancieMega, 4, 4),
+};*/
+#endif //P_MEGA_EVOLUTIONS
+#endif //P_FAMILY_DIANCIE
+
+#if P_FAMILY_HOOPA
+static const struct SpriteFrameImage sPicTable_HoopaConfined[] = {
+ overworld_ascending_frames(gObjectEventPic_HoopaConfined, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_HoopaUnbound[] = {
+ overworld_ascending_frames(gObjectEventPic_HoopaUnbound, 4, 4),
+};
+#endif //P_FAMILY_HOOPA
+
+#if P_FAMILY_VOLCANION
+static const struct SpriteFrameImage sPicTable_Volcanion[] = {
+ overworld_ascending_frames(gObjectEventPic_Volcanion, 4, 4),
+};
+#endif //P_FAMILY_VOLCANION
+
+#if P_FAMILY_ROWLET
+static const struct SpriteFrameImage sPicTable_Rowlet[] = {
+ overworld_ascending_frames(gObjectEventPic_Rowlet, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Dartrix[] = {
+ overworld_ascending_frames(gObjectEventPic_Dartrix, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Decidueye[] = {
+ overworld_ascending_frames(gObjectEventPic_Decidueye, 4, 4),
+};
+#if P_HISUIAN_FORMS
+static const struct SpriteFrameImage sPicTable_DecidueyeHisuian[] = {
+ overworld_ascending_frames(gObjectEventPic_DecidueyeHisuian, 4, 4),
+};
+#endif //P_HISUIAN_FORMS
+#endif //P_FAMILY_ROWLET
+
+#if P_FAMILY_LITTEN
+static const struct SpriteFrameImage sPicTable_Litten[] = {
+ overworld_ascending_frames(gObjectEventPic_Litten, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Torracat[] = {
+ overworld_ascending_frames(gObjectEventPic_Torracat, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Incineroar[] = {
+ overworld_ascending_frames(gObjectEventPic_Incineroar, 4, 4),
+};
+#endif //P_FAMILY_LITTEN
+
+#if P_FAMILY_POPPLIO
+static const struct SpriteFrameImage sPicTable_Popplio[] = {
+ overworld_ascending_frames(gObjectEventPic_Popplio, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Brionne[] = {
+ overworld_ascending_frames(gObjectEventPic_Brionne, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Primarina[] = {
+ overworld_ascending_frames(gObjectEventPic_Primarina, 4, 4),
+};
+#endif //P_FAMILY_POPPLIO
+
+#if P_FAMILY_PIKIPEK
+static const struct SpriteFrameImage sPicTable_Pikipek[] = {
+ overworld_ascending_frames(gObjectEventPic_Pikipek, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Trumbeak[] = {
+ overworld_ascending_frames(gObjectEventPic_Trumbeak, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Toucannon[] = {
+ overworld_ascending_frames(gObjectEventPic_Toucannon, 4, 4),
+};
+#endif //P_FAMILY_PIKIPEK
+
+#if P_FAMILY_YUNGOOS
+static const struct SpriteFrameImage sPicTable_Yungoos[] = {
+ overworld_ascending_frames(gObjectEventPic_Yungoos, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Gumshoos[] = {
+ overworld_ascending_frames(gObjectEventPic_Gumshoos, 4, 4),
+};
+#endif //P_FAMILY_YUNGOOS
+
+#if P_FAMILY_GRUBBIN
+static const struct SpriteFrameImage sPicTable_Grubbin[] = {
+ overworld_ascending_frames(gObjectEventPic_Grubbin, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Charjabug[] = {
+ overworld_ascending_frames(gObjectEventPic_Charjabug, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Vikavolt[] = {
+ overworld_ascending_frames(gObjectEventPic_Vikavolt, 4, 4),
+};
+#endif //P_FAMILY_GRUBBIN
+
+#if P_FAMILY_CRABRAWLER
+static const struct SpriteFrameImage sPicTable_Crabrawler[] = {
+ overworld_ascending_frames(gObjectEventPic_Crabrawler, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Crabominable[] = {
+ overworld_ascending_frames(gObjectEventPic_Crabominable, 4, 4),
+};
+#endif //P_FAMILY_CRABRAWLER
+
+#if P_FAMILY_ORICORIO
+
+static const struct SpriteFrameImage sPicTable_OricorioBaile[] = {
+ overworld_ascending_frames(gObjectEventPic_OricorioBaile, 4, 4),
+};
+/*static const struct SpriteFrameImage sPicTable_OricorioPomPom[] = {
+ overworld_ascending_frames(gObjectEventPic_OricorioPomPom, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_OricorioPau[] = {
+ overworld_ascending_frames(gObjectEventPic_OricorioPau, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_OricorioSensu[] = {
+ overworld_ascending_frames(gObjectEventPic_OricorioSensu, 4, 4),
+};*/
+#endif //P_FAMILY_ORICORIO
+
+#if P_FAMILY_CUTIEFLY
+static const struct SpriteFrameImage sPicTable_Cutiefly[] = {
+ overworld_ascending_frames(gObjectEventPic_Cutiefly, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Ribombee[] = {
+ overworld_ascending_frames(gObjectEventPic_Ribombee, 4, 4),
+};
+#endif //P_FAMILY_CUTIEFLY
+
+#if P_FAMILY_ROCKRUFF
+static const struct SpriteFrameImage sPicTable_Rockruff[] = {
+ overworld_ascending_frames(gObjectEventPic_Rockruff, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_LycanrocMidday[] = {
+ overworld_ascending_frames(gObjectEventPic_LycanrocMidday, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_LycanrocMidnight[] = {
+ overworld_ascending_frames(gObjectEventPic_LycanrocMidnight, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_LycanrocDusk[] = {
+ overworld_ascending_frames(gObjectEventPic_LycanrocDusk, 4, 4),
+};
+#endif //P_FAMILY_ROCKRUFF
+
+#if P_FAMILY_WISHIWASHI
+
+static const struct SpriteFrameImage sPicTable_WishiwashiSolo[] = {
+ overworld_ascending_frames(gObjectEventPic_WishiwashiSolo, 4, 4),
+};
+/*static const struct SpriteFrameImage sPicTable_WishiwashiSchool[] = {
+ overworld_ascending_frames(gObjectEventPic_WishiwashiSchool, 4, 4),
+};*/
+#endif //P_FAMILY_WISHIWASHI
+
+#if P_FAMILY_MAREANIE
+static const struct SpriteFrameImage sPicTable_Mareanie[] = {
+ overworld_ascending_frames(gObjectEventPic_Mareanie, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Toxapex[] = {
+ overworld_ascending_frames(gObjectEventPic_Toxapex, 4, 4),
+};
+#endif //P_FAMILY_MAREANIE
+
+#if P_FAMILY_MUDBRAY
+static const struct SpriteFrameImage sPicTable_Mudbray[] = {
+ overworld_ascending_frames(gObjectEventPic_Mudbray, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Mudsdale[] = {
+ overworld_ascending_frames(gObjectEventPic_Mudsdale, 4, 4),
+};
+#endif //P_FAMILY_MUDBRAY
+
+#if P_FAMILY_DEWPIDER
+static const struct SpriteFrameImage sPicTable_Dewpider[] = {
+ overworld_ascending_frames(gObjectEventPic_Dewpider, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Araquanid[] = {
+ overworld_ascending_frames(gObjectEventPic_Araquanid, 4, 4),
+};
+#endif //P_FAMILY_DEWPIDER
+
+#if P_FAMILY_FOMANTIS
+static const struct SpriteFrameImage sPicTable_Fomantis[] = {
+ overworld_ascending_frames(gObjectEventPic_Fomantis, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Lurantis[] = {
+ overworld_ascending_frames(gObjectEventPic_Lurantis, 4, 4),
+};
+#endif //P_FAMILY_FOMANTIS
+
+#if P_FAMILY_MORELULL
+static const struct SpriteFrameImage sPicTable_Morelull[] = {
+ overworld_ascending_frames(gObjectEventPic_Morelull, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Shiinotic[] = {
+ overworld_ascending_frames(gObjectEventPic_Shiinotic, 4, 4),
+};
+#endif //P_FAMILY_MORELULL
+
+#if P_FAMILY_SALANDIT
+static const struct SpriteFrameImage sPicTable_Salandit[] = {
+ overworld_ascending_frames(gObjectEventPic_Salandit, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Salazzle[] = {
+ overworld_ascending_frames(gObjectEventPic_Salazzle, 4, 4),
+};
+#endif //P_FAMILY_SALANDIT
+
+#if P_FAMILY_STUFFUL
+static const struct SpriteFrameImage sPicTable_Stufful[] = {
+ overworld_ascending_frames(gObjectEventPic_Stufful, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Bewear[] = {
+ overworld_ascending_frames(gObjectEventPic_Bewear, 4, 4),
+};
+#endif //P_FAMILY_STUFFUL
+
+#if P_FAMILY_BOUNSWEET
+static const struct SpriteFrameImage sPicTable_Bounsweet[] = {
+ overworld_ascending_frames(gObjectEventPic_Bounsweet, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Steenee[] = {
+ overworld_ascending_frames(gObjectEventPic_Steenee, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Tsareena[] = {
+ overworld_ascending_frames(gObjectEventPic_Tsareena, 4, 4),
+};
+#endif //P_FAMILY_BOUNSWEET
+
+#if P_FAMILY_COMFEY
+static const struct SpriteFrameImage sPicTable_Comfey[] = {
+ overworld_ascending_frames(gObjectEventPic_Comfey, 4, 4),
+};
+#endif //P_FAMILY_COMFEY
+
+#if P_FAMILY_ORANGURU
+static const struct SpriteFrameImage sPicTable_Oranguru[] = {
+ overworld_ascending_frames(gObjectEventPic_Oranguru, 4, 4),
+};
+#endif //P_FAMILY_ORANGURU
+
+#if P_FAMILY_PASSIMIAN
+static const struct SpriteFrameImage sPicTable_Passimian[] = {
+ overworld_ascending_frames(gObjectEventPic_Passimian, 4, 4),
+};
+#endif //P_FAMILY_PASSIMIAN
+
+#if P_FAMILY_WIMPOD
+static const struct SpriteFrameImage sPicTable_Wimpod[] = {
+ overworld_ascending_frames(gObjectEventPic_Wimpod, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Golisopod[] = {
+ overworld_ascending_frames(gObjectEventPic_Golisopod, 4, 4),
+};
+#endif //P_FAMILY_WIMPOD
+
+#if P_FAMILY_SANDYGAST
+static const struct SpriteFrameImage sPicTable_Sandygast[] = {
+ overworld_ascending_frames(gObjectEventPic_Sandygast, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Palossand[] = {
+ overworld_ascending_frames(gObjectEventPic_Palossand, 4, 4),
+};
+#endif //P_FAMILY_SANDYGAST
+
+#if P_FAMILY_PYUKUMUKU
+static const struct SpriteFrameImage sPicTable_Pyukumuku[] = {
+ overworld_ascending_frames(gObjectEventPic_Pyukumuku, 4, 4),
+};
+#endif //P_FAMILY_PYUKUMUKU
+
+#if P_FAMILY_TYPE_NULL
+static const struct SpriteFrameImage sPicTable_TypeNull[] = {
+ overworld_ascending_frames(gObjectEventPic_TypeNull, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Silvally[] = {
+ overworld_ascending_frames(gObjectEventPic_Silvally, 4, 4),
+};
+#endif //P_FAMILY_TYPE_NULL
+
+#if P_FAMILY_MINIOR
+static const struct SpriteFrameImage sPicTable_MiniorMeteor[] = {
+ overworld_ascending_frames(gObjectEventPic_MiniorMeteor, 4, 4),
+};
+/*static const struct SpriteFrameImage sPicTable_MiniorCoreRed[] = {
+ overworld_ascending_frames(gObjectEventPic_MiniorCoreRed, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_MiniorCoreOrange[] = {
+ overworld_ascending_frames(gObjectEventPic_MiniorCoreOrange, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_MiniorCoreYellow[] = {
+ overworld_ascending_frames(gObjectEventPic_MiniorCoreYellow, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_MiniorCoreGreen[] = {
+ overworld_ascending_frames(gObjectEventPic_MiniorCoreGreen, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_MiniorCoreBlue[] = {
+ overworld_ascending_frames(gObjectEventPic_MiniorCoreBlue, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_MiniorCoreIndigo[] = {
+ overworld_ascending_frames(gObjectEventPic_MiniorCoreIndigo, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_MiniorCoreViolet[] = {
+ overworld_ascending_frames(gObjectEventPic_MiniorCoreViolet, 4, 4),
+};*/
+#endif //P_FAMILY_MINIOR
+
+#if P_FAMILY_KOMALA
+static const struct SpriteFrameImage sPicTable_Komala[] = {
+ overworld_ascending_frames(gObjectEventPic_Komala, 4, 4),
+};
+#endif //P_FAMILY_KOMALA
+
+#if P_FAMILY_TURTONATOR
+static const struct SpriteFrameImage sPicTable_Turtonator[] = {
+ overworld_ascending_frames(gObjectEventPic_Turtonator, 4, 4),
+};
+#endif //P_FAMILY_TURTONATOR
+
+#if P_FAMILY_TOGEDEMARU
+static const struct SpriteFrameImage sPicTable_Togedemaru[] = {
+ overworld_ascending_frames(gObjectEventPic_Togedemaru, 4, 4),
+};
+#endif //P_FAMILY_TOGEDEMARU
+
+#if P_FAMILY_MIMIKYU
+static const struct SpriteFrameImage sPicTable_MimikyuDisguised[] = {
+ overworld_ascending_frames(gObjectEventPic_MimikyuDisguised, 4, 4),
+};
+/*static const struct SpriteFrameImage sPicTable_MimikyuBusted[] = {
+ overworld_ascending_frames(gObjectEventPic_MimikyuBusted, 4, 4),
+};*/
+#endif //P_FAMILY_MIMIKYU
+
+#if P_FAMILY_BRUXISH
+static const struct SpriteFrameImage sPicTable_Bruxish[] = {
+ overworld_ascending_frames(gObjectEventPic_Bruxish, 4, 4),
+};
+#endif //P_FAMILY_BRUXISH
+
+#if P_FAMILY_DRAMPA
+static const struct SpriteFrameImage sPicTable_Drampa[] = {
+ overworld_ascending_frames(gObjectEventPic_Drampa, 4, 4),
+};
+#endif //P_FAMILY_DRAMPA
+
+#if P_FAMILY_DHELMISE
+static const struct SpriteFrameImage sPicTable_Dhelmise[] = {
+ overworld_ascending_frames(gObjectEventPic_Dhelmise, 4, 4),
+};
+#endif //P_FAMILY_DHELMISE
+
+#if P_FAMILY_JANGMO_O
+static const struct SpriteFrameImage sPicTable_JangmoO[] = {
+ overworld_ascending_frames(gObjectEventPic_JangmoO, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_HakamoO[] = {
+ overworld_ascending_frames(gObjectEventPic_HakamoO, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_KommoO[] = {
+ overworld_ascending_frames(gObjectEventPic_KommoO, 4, 4),
+};
+#endif //P_FAMILY_JANGMO_O
+
+#if P_FAMILY_TAPU_KOKO
+static const struct SpriteFrameImage sPicTable_TapuKoko[] = {
+ overworld_ascending_frames(gObjectEventPic_TapuKoko, 4, 4),
+};
+#endif //P_FAMILY_TAPU_KOKO
+
+#if P_FAMILY_TAPU_LELE
+static const struct SpriteFrameImage sPicTable_TapuLele[] = {
+ overworld_ascending_frames(gObjectEventPic_TapuLele, 4, 4),
+};
+#endif //P_FAMILY_TAPU_LELE
+
+#if P_FAMILY_TAPU_BULU
+static const struct SpriteFrameImage sPicTable_TapuBulu[] = {
+ overworld_ascending_frames(gObjectEventPic_TapuBulu, 4, 4),
+};
+#endif //P_FAMILY_TAPU_BULU
+
+#if P_FAMILY_TAPU_FINI
+static const struct SpriteFrameImage sPicTable_TapuFini[] = {
+ overworld_ascending_frames(gObjectEventPic_TapuFini, 4, 4),
+};
+#endif //P_FAMILY_TAPU_FINI
+
+#if P_FAMILY_COSMOG
+static const struct SpriteFrameImage sPicTable_Cosmog[] = {
+ overworld_ascending_frames(gObjectEventPic_Cosmog, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Cosmoem[] = {
+ overworld_ascending_frames(gObjectEventPic_Cosmoem, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Solgaleo[] = {
+ overworld_ascending_frames(gObjectEventPic_Solgaleo, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Lunala[] = {
+ overworld_ascending_frames(gObjectEventPic_Lunala, 4, 4),
+};
+#endif //P_FAMILY_COSMOG
+
+#if P_FAMILY_NIHILEGO
+static const struct SpriteFrameImage sPicTable_Nihilego[] = {
+ overworld_ascending_frames(gObjectEventPic_Nihilego, 4, 4),
+};
+#endif //P_FAMILY_NIHILEGO
+
+#if P_FAMILY_BUZZWOLE
+static const struct SpriteFrameImage sPicTable_Buzzwole[] = {
+ overworld_ascending_frames(gObjectEventPic_Buzzwole, 4, 4),
+};
+#endif //P_FAMILY_BUZZWOLE
+
+#if P_FAMILY_PHEROMOSA
+static const struct SpriteFrameImage sPicTable_Pheromosa[] = {
+ overworld_ascending_frames(gObjectEventPic_Pheromosa, 4, 4),
+};
+#endif //P_FAMILY_PHEROMOSA
+
+#if P_FAMILY_XURKITREE
+static const struct SpriteFrameImage sPicTable_Xurkitree[] = {
+ overworld_ascending_frames(gObjectEventPic_Xurkitree, 4, 4),
+};
+#endif //P_FAMILY_XURKITREE
+
+#if P_FAMILY_CELESTEELA
+static const struct SpriteFrameImage sPicTable_Celesteela[] = {
+ overworld_ascending_frames(gObjectEventPic_Celesteela, 4, 4),
+};
+#endif //P_FAMILY_CELESTEELA
+
+#if P_FAMILY_KARTANA
+static const struct SpriteFrameImage sPicTable_Kartana[] = {
+ overworld_ascending_frames(gObjectEventPic_Kartana, 4, 4),
+};
+#endif //P_FAMILY_KARTANA
+
+#if P_FAMILY_GUZZLORD
+static const struct SpriteFrameImage sPicTable_Guzzlord[] = {
+ overworld_ascending_frames(gObjectEventPic_Guzzlord, 4, 4),
+};
+#endif //P_FAMILY_GUZZLORD
+
+#if P_FAMILY_NECROZMA
+static const struct SpriteFrameImage sPicTable_Necrozma[] = {
+ overworld_ascending_frames(gObjectEventPic_Necrozma, 4, 4),
+};
+#if P_FUSION_FORMS
+
+static const struct SpriteFrameImage sPicTable_NecrozmaDuskMane[] = {
+ overworld_ascending_frames(gObjectEventPic_NecrozmaDuskMane, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_NecrozmaDawnWings[] = {
+ overworld_ascending_frames(gObjectEventPic_NecrozmaDawnWings, 4, 4),
+};
+#if P_ULTRA_BURST_FORMS
+/*static const struct SpriteFrameImage sPicTable_NecrozmaUltra[] = {
+ overworld_ascending_frames(gObjectEventPic_NecrozmaUltra, 4, 4),
+};*/
+#endif //P_ULTRA_BURST_FORMS
+#endif //P_FUSION_FORMS
+#endif //P_FAMILY_NECROZMA
+
+#if P_FAMILY_MAGEARNA
+static const struct SpriteFrameImage sPicTable_Magearna[] = {
+ overworld_ascending_frames(gObjectEventPic_Magearna, 4, 4),
+};
+/*static const struct SpriteFrameImage sPicTable_MagearnaOriginalColor[] = {
+ overworld_ascending_frames(gObjectEventPic_MagearnaOriginalColor, 4, 4),
+};*/
+#endif //P_FAMILY_MAGEARNA
+
+#if P_FAMILY_MARSHADOW
+static const struct SpriteFrameImage sPicTable_Marshadow[] = {
+ overworld_ascending_frames(gObjectEventPic_Marshadow, 4, 4),
+};
+#endif //P_FAMILY_MARSHADOW
+
+#if P_FAMILY_POIPOLE
+static const struct SpriteFrameImage sPicTable_Poipole[] = {
+ overworld_ascending_frames(gObjectEventPic_Poipole, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Naganadel[] = {
+ overworld_ascending_frames(gObjectEventPic_Naganadel, 4, 4),
+};
+#endif //P_FAMILY_POIPOLE
+
+#if P_FAMILY_STAKATAKA
+static const struct SpriteFrameImage sPicTable_Stakataka[] = {
+ overworld_ascending_frames(gObjectEventPic_Stakataka, 4, 4),
+};
+#endif //P_FAMILY_STAKATAKA
+
+#if P_FAMILY_BLACEPHALON
+static const struct SpriteFrameImage sPicTable_Blacephalon[] = {
+ overworld_ascending_frames(gObjectEventPic_Blacephalon, 4, 4),
+};
+#endif //P_FAMILY_BLACEPHALON
+
+#if P_FAMILY_ZERAORA
+static const struct SpriteFrameImage sPicTable_Zeraora[] = {
+ overworld_ascending_frames(gObjectEventPic_Zeraora, 4, 4),
+};
+#endif //P_FAMILY_ZERAORA
+
+#if P_FAMILY_MELTAN
+static const struct SpriteFrameImage sPicTable_Meltan[] = {
+ overworld_ascending_frames(gObjectEventPic_Meltan, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Melmetal[] = {
+ overworld_ascending_frames(gObjectEventPic_Melmetal, 4, 4),
+};
+#if P_GIGANTAMAX_FORMS
+/*static const struct SpriteFrameImage sPicTable_MelmetalGigantamax[] = {
+ overworld_ascending_frames(gObjectEventPic_MelmetalGigantamax, 4, 4),
+};*/
+#endif //P_GIGANTAMAX_FORMS
+#endif //P_FAMILY_MELTAN
+
+#if P_FAMILY_GROOKEY
+static const struct SpriteFrameImage sPicTable_Grookey[] = {
+ overworld_ascending_frames(gObjectEventPic_Grookey, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Thwackey[] = {
+ overworld_ascending_frames(gObjectEventPic_Thwackey, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Rillaboom[] = {
+ overworld_ascending_frames(gObjectEventPic_Rillaboom, 4, 4),
+};
+#if P_GIGANTAMAX_FORMS
+/*static const struct SpriteFrameImage sPicTable_RillaboomGigantamax[] = {
+ overworld_ascending_frames(gObjectEventPic_RillaboomGigantamax, 4, 4),
+};*/
+#endif //P_GIGANTAMAX_FORMS
+#endif //P_FAMILY_GROOKEY
+
+#if P_FAMILY_SCORBUNNY
+static const struct SpriteFrameImage sPicTable_Scorbunny[] = {
+ overworld_ascending_frames(gObjectEventPic_Scorbunny, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Raboot[] = {
+ overworld_ascending_frames(gObjectEventPic_Raboot, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Cinderace[] = {
+ overworld_ascending_frames(gObjectEventPic_Cinderace, 4, 4),
+};
+#if P_GIGANTAMAX_FORMS
+/*static const struct SpriteFrameImage sPicTable_CinderaceGigantamax[] = {
+ overworld_ascending_frames(gObjectEventPic_CinderaceGigantamax, 4, 4),
+};*/
+#endif //P_GIGANTAMAX_FORMS
+#endif //P_FAMILY_SCORBUNNY
+
+#if P_FAMILY_SOBBLE
+static const struct SpriteFrameImage sPicTable_Sobble[] = {
+ overworld_ascending_frames(gObjectEventPic_Sobble, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Drizzile[] = {
+ overworld_ascending_frames(gObjectEventPic_Drizzile, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Inteleon[] = {
+ overworld_ascending_frames(gObjectEventPic_Inteleon, 4, 4),
+};
+#if P_GIGANTAMAX_FORMS
+/*static const struct SpriteFrameImage sPicTable_InteleonGigantamax[] = {
+ overworld_ascending_frames(gObjectEventPic_InteleonGigantamax, 4, 4),
+};*/
+#endif //P_GIGANTAMAX_FORMS
+#endif //P_FAMILY_SOBBLE
+
+#if P_FAMILY_SKWOVET
+static const struct SpriteFrameImage sPicTable_Skwovet[] = {
+ overworld_ascending_frames(gObjectEventPic_Skwovet, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Greedent[] = {
+ overworld_ascending_frames(gObjectEventPic_Greedent, 4, 4),
+};
+#endif //P_FAMILY_SKWOVET
+
+#if P_FAMILY_ROOKIDEE
+static const struct SpriteFrameImage sPicTable_Rookidee[] = {
+ overworld_ascending_frames(gObjectEventPic_Rookidee, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Corvisquire[] = {
+ overworld_ascending_frames(gObjectEventPic_Corvisquire, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Corviknight[] = {
+ overworld_ascending_frames(gObjectEventPic_Corviknight, 4, 4),
+};
+#if P_GIGANTAMAX_FORMS
+/*static const struct SpriteFrameImage sPicTable_CorviknightGigantamax[] = {
+ overworld_ascending_frames(gObjectEventPic_CorviknightGigantamax, 4, 4),
+};*/
+#endif //P_GIGANTAMAX_FORMS
+#endif //P_FAMILY_ROOKIDEE
+
+#if P_FAMILY_BLIPBUG
+static const struct SpriteFrameImage sPicTable_Blipbug[] = {
+ overworld_ascending_frames(gObjectEventPic_Blipbug, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Dottler[] = {
+ overworld_ascending_frames(gObjectEventPic_Dottler, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Orbeetle[] = {
+ overworld_ascending_frames(gObjectEventPic_Orbeetle, 4, 4),
+};
+#if P_GIGANTAMAX_FORMS
+/*static const struct SpriteFrameImage sPicTable_OrbeetleGigantamax[] = {
+ overworld_ascending_frames(gObjectEventPic_OrbeetleGigantamax, 4, 4),
+};*/
+#endif //P_GIGANTAMAX_FORMS
+#endif //P_FAMILY_BLIPBUG
+
+#if P_FAMILY_NICKIT
+static const struct SpriteFrameImage sPicTable_Nickit[] = {
+ overworld_ascending_frames(gObjectEventPic_Nickit, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Thievul[] = {
+ overworld_ascending_frames(gObjectEventPic_Thievul, 4, 4),
+};
+#endif //P_FAMILY_NICKIT
+
+#if P_FAMILY_GOSSIFLEUR
+static const struct SpriteFrameImage sPicTable_Gossifleur[] = {
+ overworld_ascending_frames(gObjectEventPic_Gossifleur, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Eldegoss[] = {
+ overworld_ascending_frames(gObjectEventPic_Eldegoss, 4, 4),
+};
+#endif //P_FAMILY_GOSSIFLEUR
+
+#if P_FAMILY_WOOLOO
+static const struct SpriteFrameImage sPicTable_Wooloo[] = {
+ overworld_ascending_frames(gObjectEventPic_Wooloo, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Dubwool[] = {
+ overworld_ascending_frames(gObjectEventPic_Dubwool, 4, 4),
+};
+#endif //P_FAMILY_WOOLOO
+
+#if P_FAMILY_CHEWTLE
+static const struct SpriteFrameImage sPicTable_Chewtle[] = {
+ overworld_ascending_frames(gObjectEventPic_Chewtle, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Drednaw[] = {
+ overworld_ascending_frames(gObjectEventPic_Drednaw, 4, 4),
+};
+#if P_GIGANTAMAX_FORMS
+/*static const struct SpriteFrameImage sPicTable_DrednawGigantamax[] = {
+ overworld_ascending_frames(gObjectEventPic_DrednawGigantamax, 4, 4),
+};*/
+#endif //P_GIGANTAMAX_FORMS
+#endif //P_FAMILY_CHEWTLE
+
+#if P_FAMILY_YAMPER
+static const struct SpriteFrameImage sPicTable_Yamper[] = {
+ overworld_ascending_frames(gObjectEventPic_Yamper, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Boltund[] = {
+ overworld_ascending_frames(gObjectEventPic_Boltund, 4, 4),
+};
+#endif //P_FAMILY_YAMPER
+
+#if P_FAMILY_ROLYCOLY
+static const struct SpriteFrameImage sPicTable_Rolycoly[] = {
+ overworld_ascending_frames(gObjectEventPic_Rolycoly, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Carkol[] = {
+ overworld_ascending_frames(gObjectEventPic_Carkol, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Coalossal[] = {
+ overworld_ascending_frames(gObjectEventPic_Coalossal, 4, 4),
+};
+#if P_GIGANTAMAX_FORMS
+/*static const struct SpriteFrameImage sPicTable_CoalossalGigantamax[] = {
+ overworld_ascending_frames(gObjectEventPic_CoalossalGigantamax, 4, 4),
+};*/
+#endif //P_GIGANTAMAX_FORMS
+#endif //P_FAMILY_ROLYCOLY
+
+#if P_FAMILY_APPLIN
+static const struct SpriteFrameImage sPicTable_Applin[] = {
+ overworld_ascending_frames(gObjectEventPic_Applin, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Flapple[] = {
+ overworld_ascending_frames(gObjectEventPic_Flapple, 4, 4),
+};
+#if P_GIGANTAMAX_FORMS
+/*static const struct SpriteFrameImage sPicTable_FlappleGigantamax[] = {
+ overworld_ascending_frames(gObjectEventPic_FlappleGigantamax, 4, 4),
+};*/
+#endif //P_GIGANTAMAX_FORMS
+
+static const struct SpriteFrameImage sPicTable_Appletun[] = {
+ overworld_ascending_frames(gObjectEventPic_Appletun, 4, 4),
+};
+#if P_GIGANTAMAX_FORMS
+/*static const struct SpriteFrameImage sPicTable_AppletunGigantamax[] = {
+ overworld_ascending_frames(gObjectEventPic_AppletunGigantamax, 4, 4),
+};*/
+#endif //P_GIGANTAMAX_FORMS
+
+#if P_GEN_9_CROSS_EVOS
+/*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),
+};*/
+#endif //P_GEN_9_CROSS_EVOS
+#endif //P_FAMILY_APPLIN
+
+#if P_FAMILY_SILICOBRA
+static const struct SpriteFrameImage sPicTable_Silicobra[] = {
+ overworld_ascending_frames(gObjectEventPic_Silicobra, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Sandaconda[] = {
+ overworld_ascending_frames(gObjectEventPic_Sandaconda, 4, 4),
+};
+#if P_GIGANTAMAX_FORMS
+/*static const struct SpriteFrameImage sPicTable_SandacondaGigantamax[] = {
+ overworld_ascending_frames(gObjectEventPic_SandacondaGigantamax, 4, 4),
+};*/
+#endif //P_GIGANTAMAX_FORMS
+#endif //P_FAMILY_SILICOBRA
+
+#if P_FAMILY_CRAMORANT
+static const struct SpriteFrameImage sPicTable_Cramorant[] = {
+ overworld_ascending_frames(gObjectEventPic_Cramorant, 4, 4),
+};
+/*static const struct SpriteFrameImage sPicTable_CramorantGulping[] = {
+ overworld_ascending_frames(gObjectEventPic_CramorantGulping, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_CramorantGorging[] = {
+ overworld_ascending_frames(gObjectEventPic_CramorantGorging, 4, 4),
+};*/
+#endif //P_FAMILY_CRAMORANT
+
+#if P_FAMILY_ARROKUDA
+static const struct SpriteFrameImage sPicTable_Arrokuda[] = {
+ overworld_ascending_frames(gObjectEventPic_Arrokuda, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Barraskewda[] = {
+ overworld_ascending_frames(gObjectEventPic_Barraskewda, 4, 4),
+};
+#endif //P_FAMILY_ARROKUDA
+
+#if P_FAMILY_TOXEL
+static const struct SpriteFrameImage sPicTable_Toxel[] = {
+ overworld_ascending_frames(gObjectEventPic_Toxel, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_ToxtricityAmped[] = {
+ overworld_ascending_frames(gObjectEventPic_ToxtricityAmped, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_ToxtricityLowKey[] = {
+ overworld_ascending_frames(gObjectEventPic_ToxtricityLowKey, 4, 4),
+};
+#if P_GIGANTAMAX_FORMS
+/*static const struct SpriteFrameImage sPicTable_ToxtricityGigantamax[] = {
+ overworld_ascending_frames(gObjectEventPic_ToxtricityGigantamax, 4, 4),
+};*/
+#endif //P_GIGANTAMAX_FORMS
+#endif //P_FAMILY_TOXEL
+
+#if P_FAMILY_SIZZLIPEDE
+static const struct SpriteFrameImage sPicTable_Sizzlipede[] = {
+ overworld_ascending_frames(gObjectEventPic_Sizzlipede, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Centiskorch[] = {
+ overworld_ascending_frames(gObjectEventPic_Centiskorch, 4, 4),
+};
+#if P_GIGANTAMAX_FORMS
+/*static const struct SpriteFrameImage sPicTable_CentiskorchGigantamax[] = {
+ overworld_ascending_frames(gObjectEventPic_CentiskorchGigantamax, 4, 4),
+};*/
+#endif //P_GIGANTAMAX_FORMS
+#endif //P_FAMILY_SIZZLIPEDE
+
+#if P_FAMILY_CLOBBOPUS
+static const struct SpriteFrameImage sPicTable_Clobbopus[] = {
+ overworld_ascending_frames(gObjectEventPic_Clobbopus, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Grapploct[] = {
+ overworld_ascending_frames(gObjectEventPic_Grapploct, 4, 4),
+};
+#endif //P_FAMILY_CLOBBOPUS
+
+#if P_FAMILY_SINISTEA
+static const struct SpriteFrameImage sPicTable_Sinistea[] = {
+ overworld_ascending_frames(gObjectEventPic_Sinistea, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Polteageist[] = {
+ overworld_ascending_frames(gObjectEventPic_Polteageist, 4, 4),
+};
+#endif //P_FAMILY_SINISTEA
+
+#if P_FAMILY_HATENNA
+static const struct SpriteFrameImage sPicTable_Hatenna[] = {
+ overworld_ascending_frames(gObjectEventPic_Hatenna, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Hattrem[] = {
+ overworld_ascending_frames(gObjectEventPic_Hattrem, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Hatterene[] = {
+ overworld_ascending_frames(gObjectEventPic_Hatterene, 4, 4),
+};
+#if P_GIGANTAMAX_FORMS
+/*static const struct SpriteFrameImage sPicTable_HattereneGigantamax[] = {
+ overworld_ascending_frames(gObjectEventPic_HattereneGigantamax, 4, 4),
+};*/
+#endif //P_GIGANTAMAX_FORMS
+#endif //P_FAMILY_HATENNA
+
+#if P_FAMILY_IMPIDIMP
+static const struct SpriteFrameImage sPicTable_Impidimp[] = {
+ overworld_ascending_frames(gObjectEventPic_Impidimp, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Morgrem[] = {
+ overworld_ascending_frames(gObjectEventPic_Morgrem, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Grimmsnarl[] = {
+ overworld_ascending_frames(gObjectEventPic_Grimmsnarl, 4, 4),
+};
+#if P_GIGANTAMAX_FORMS
+/*static const struct SpriteFrameImage sPicTable_GrimmsnarlGigantamax[] = {
+ overworld_ascending_frames(gObjectEventPic_GrimmsnarlGigantamax, 4, 4),
+};*/
+#endif //P_GIGANTAMAX_FORMS
+#endif //P_FAMILY_IMPIDIMP
+
+#if P_FAMILY_MILCERY
+static const struct SpriteFrameImage sPicTable_Milcery[] = {
+ overworld_ascending_frames(gObjectEventPic_Milcery, 4, 4),
+};
+
+static const struct SpriteFrameImage sPicTable_AlcremieStrawberry[] = {
+ overworld_ascending_frames(gObjectEventPic_AlcremieStrawberry, 4, 4),
+};
+#if P_GIGANTAMAX_FORMS
+/*static const struct SpriteFrameImage sPicTable_AlcremieGigantamax[] = {
+ overworld_ascending_frames(gObjectEventPic_AlcremieGigantamax, 4, 4),
+};*/
+#endif //P_GIGANTAMAX_FORMS
+#endif //P_FAMILY_MILCERY
+
+#if P_FAMILY_FALINKS
+static const struct SpriteFrameImage sPicTable_Falinks[] = {
+ overworld_ascending_frames(gObjectEventPic_Falinks, 4, 4),
+};
+#endif //P_FAMILY_FALINKS
+
+#if P_FAMILY_PINCURCHIN
+static const struct SpriteFrameImage sPicTable_Pincurchin[] = {
+ overworld_ascending_frames(gObjectEventPic_Pincurchin, 4, 4),
+};
+#endif //P_FAMILY_PINCURCHIN
+
+#if P_FAMILY_SNOM
+static const struct SpriteFrameImage sPicTable_Snom[] = {
+ overworld_ascending_frames(gObjectEventPic_Snom, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Frosmoth[] = {
+ overworld_ascending_frames(gObjectEventPic_Frosmoth, 4, 4),
+};
+#endif //P_FAMILY_SNOM
+
+#if P_FAMILY_STONJOURNER
+static const struct SpriteFrameImage sPicTable_Stonjourner[] = {
+ overworld_ascending_frames(gObjectEventPic_Stonjourner, 4, 4),
+};
+#endif //P_FAMILY_STONJOURNER
+
+#if P_FAMILY_EISCUE
+static const struct SpriteFrameImage sPicTable_EiscueIceFace[] = {
+ overworld_ascending_frames(gObjectEventPic_EiscueIceFace, 4, 4),
+};
+/*static const struct SpriteFrameImage sPicTable_EiscueNoiceFace[] = {
+ overworld_ascending_frames(gObjectEventPic_EiscueNoiceFace, 4, 4),
+};*/
+#endif //P_FAMILY_EISCUE
+
+#if P_FAMILY_INDEEDEE
+static const struct SpriteFrameImage sPicTable_IndeedeeMale[] = {
+ overworld_ascending_frames(gObjectEventPic_IndeedeeMale, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_IndeedeeFemale[] = {
+ overworld_ascending_frames(gObjectEventPic_IndeedeeFemale, 4, 4),
+};
+#endif //P_FAMILY_INDEEDEE
+
+#if P_FAMILY_MORPEKO
+static const struct SpriteFrameImage sPicTable_MorpekoFullBelly[] = {
+ overworld_ascending_frames(gObjectEventPic_MorpekoFullBelly, 4, 4),
+};
+/*static const struct SpriteFrameImage sPicTable_MorpekoHangry[] = {
+ overworld_ascending_frames(gObjectEventPic_MorpekoHangry, 4, 4),
+};*/
+#endif //P_FAMILY_MORPEKO
+
+#if P_FAMILY_CUFANT
+static const struct SpriteFrameImage sPicTable_Cufant[] = {
+ overworld_ascending_frames(gObjectEventPic_Cufant, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Copperajah[] = {
+ overworld_ascending_frames(gObjectEventPic_Copperajah, 4, 4),
+};
+#if P_GIGANTAMAX_FORMS
+/*static const struct SpriteFrameImage sPicTable_CopperajahGigantamax[] = {
+ overworld_ascending_frames(gObjectEventPic_CopperajahGigantamax, 4, 4),
+};*/
+#endif //P_GIGANTAMAX_FORMS
+#endif //P_FAMILY_CUFANT
+
+#if P_FAMILY_DRACOZOLT
+static const struct SpriteFrameImage sPicTable_Dracozolt[] = {
+ overworld_ascending_frames(gObjectEventPic_Dracozolt, 4, 4),
+};
+#endif //P_FAMILY_DRACOZOLT
+
+#if P_FAMILY_ARCTOZOLT
+static const struct SpriteFrameImage sPicTable_Arctozolt[] = {
+ overworld_ascending_frames(gObjectEventPic_Arctozolt, 4, 4),
+};
+#endif //P_FAMILY_ARCTOZOLT
+
+#if P_FAMILY_DRACOVISH
+static const struct SpriteFrameImage sPicTable_Dracovish[] = {
+ overworld_ascending_frames(gObjectEventPic_Dracovish, 4, 4),
+};
+#endif //P_FAMILY_DRACOVISH
+
+#if P_FAMILY_ARCTOVISH
+static const struct SpriteFrameImage sPicTable_Arctovish[] = {
+ overworld_ascending_frames(gObjectEventPic_Arctovish, 4, 4),
+};
+#endif //P_FAMILY_ARCTOVISH
+
+#if P_FAMILY_DURALUDON
+static const struct SpriteFrameImage sPicTable_Duraludon[] = {
+ overworld_ascending_frames(gObjectEventPic_Duraludon, 4, 4),
+};
+#if P_GIGANTAMAX_FORMS
+/*static const struct SpriteFrameImage sPicTable_DuraludonGigantamax[] = {
+ overworld_ascending_frames(gObjectEventPic_DuraludonGigantamax, 4, 4),
+};*/
+#endif //P_GIGANTAMAX_FORMS
+
+#if P_GEN_9_CROSS_EVOS
+/*static const struct SpriteFrameImage sPicTable_Archaludon[] = {
+ overworld_ascending_frames(gObjectEventPic_Archaludon, 4, 4),
+};*/
+#endif //P_GEN_9_CROSS_EVOS
+#endif //P_FAMILY_DURALUDON
+
+#if P_FAMILY_DREEPY
+static const struct SpriteFrameImage sPicTable_Dreepy[] = {
+ overworld_ascending_frames(gObjectEventPic_Dreepy, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Drakloak[] = {
+ overworld_ascending_frames(gObjectEventPic_Drakloak, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Dragapult[] = {
+ overworld_ascending_frames(gObjectEventPic_Dragapult, 4, 4),
+};
+#endif //P_FAMILY_DREEPY
+
+#if P_FAMILY_ZACIAN
+static const struct SpriteFrameImage sPicTable_ZacianHeroOfManyBattles[] = {
+ overworld_ascending_frames(gObjectEventPic_ZacianHeroOfManyBattles, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_ZacianCrownedSword[] = {
+ overworld_ascending_frames(gObjectEventPic_ZacianCrownedSword, 4, 4),
+};
+#endif //P_FAMILY_ZACIAN
+
+#if P_FAMILY_ZAMAZENTA
+static const struct SpriteFrameImage sPicTable_ZamazentaHeroOfManyBattles[] = {
+ overworld_ascending_frames(gObjectEventPic_ZamazentaHeroOfManyBattles, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_ZamazentaCrownedShield[] = {
+ overworld_ascending_frames(gObjectEventPic_ZamazentaCrownedShield, 4, 4),
+};
+#endif //P_FAMILY_ZAMAZENTA
+
+#if P_FAMILY_ETERNATUS
+static const struct SpriteFrameImage sPicTable_Eternatus[] = {
+ overworld_ascending_frames(gObjectEventPic_Eternatus, 4, 4),
+};
+/*static const struct SpriteFrameImage sPicTable_EternatusEternamax[] = {
+ overworld_ascending_frames(gObjectEventPic_EternatusEternamax, 4, 4),
+};*/
+#endif //P_FAMILY_ETERNATUS
+
+#if P_FAMILY_KUBFU
+static const struct SpriteFrameImage sPicTable_Kubfu[] = {
+ overworld_ascending_frames(gObjectEventPic_Kubfu, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Urshifu[] = {
+ overworld_ascending_frames(gObjectEventPic_Urshifu, 4, 4),
+};
+#if P_GIGANTAMAX_FORMS
+/*static const struct SpriteFrameImage sPicTable_UrshifuSingleStrikeStyleGigantamax[] = {
+ overworld_ascending_frames(gObjectEventPic_UrshifuSingleStrikeStyleGigantamax, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_UrshifuRapidStrikeStyleGigantamax[] = {
+ overworld_ascending_frames(gObjectEventPic_UrshifuRapidStrikeStyleGigantamax, 4, 4),
+};*/
+#endif //P_GIGANTAMAX_FORMS
+#endif //P_FAMILY_KUBFU
+
+#if P_FAMILY_ZARUDE
+
+static const struct SpriteFrameImage sPicTable_Zarude[] = {
+ overworld_ascending_frames(gObjectEventPic_Zarude, 4, 4),
+};
+/*static const struct SpriteFrameImage sPicTable_ZarudeDada[] = {
+ overworld_ascending_frames(gObjectEventPic_ZarudeDada, 4, 4),
+};*/
+#endif //P_FAMILY_ZARUDE
+
+#if P_FAMILY_REGIELEKI
+static const struct SpriteFrameImage sPicTable_Regieleki[] = {
+ overworld_ascending_frames(gObjectEventPic_Regieleki, 4, 4),
+};
+#endif //P_FAMILY_REGIELEKI
+
+#if P_FAMILY_REGIDRAGO
+static const struct SpriteFrameImage sPicTable_Regidrago[] = {
+ overworld_ascending_frames(gObjectEventPic_Regidrago, 4, 4),
+};
+#endif //P_FAMILY_REGIDRAGO
+
+#if P_FAMILY_GLASTRIER
+static const struct SpriteFrameImage sPicTable_Glastrier[] = {
+ overworld_ascending_frames(gObjectEventPic_Glastrier, 4, 4),
+};
+#endif //P_FAMILY_GLASTRIER
+
+#if P_FAMILY_SPECTRIER
+static const struct SpriteFrameImage sPicTable_Spectrier[] = {
+ overworld_ascending_frames(gObjectEventPic_Spectrier, 4, 4),
+};
+#endif //P_FAMILY_SPECTRIER
+
+#if P_FAMILY_CALYREX
+static const struct SpriteFrameImage sPicTable_Calyrex[] = {
+ overworld_ascending_frames(gObjectEventPic_Calyrex, 4, 4),
+};
+#if P_FUSION_FORMS
+static const struct SpriteFrameImage sPicTable_CalyrexIceRider[] = {
+ overworld_ascending_frames(gObjectEventPic_CalyrexIceRider, 4, 4),
+};
+#endif //P_FUSION_FORMS
+
+#if P_FUSION_FORMS
+static const struct SpriteFrameImage sPicTable_CalyrexShadowRider[] = {
+ overworld_ascending_frames(gObjectEventPic_CalyrexShadowRider, 4, 4),
+};
+#endif //P_FUSION_FORMS
+#endif //P_FAMILY_CALYREX
+
+#if P_FAMILY_SPRIGATITO
+/*static const struct SpriteFrameImage sPicTable_Sprigatito[] = {
+ overworld_ascending_frames(gObjectEventPic_Sprigatito, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Floragato[] = {
+ overworld_ascending_frames(gObjectEventPic_Floragato, 4, 4),
+};
+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[] = {
+ overworld_ascending_frames(gObjectEventPic_Fuecoco, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Crocalor[] = {
+ overworld_ascending_frames(gObjectEventPic_Crocalor, 4, 4),
+};
+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[] = {
+ overworld_ascending_frames(gObjectEventPic_Quaxly, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Quaxwell[] = {
+ overworld_ascending_frames(gObjectEventPic_Quaxwell, 4, 4),
+};
+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[] = {
+ overworld_ascending_frames(gObjectEventPic_Lechonk, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_OinkologneMale[] = {
+ overworld_ascending_frames(gObjectEventPic_OinkologneMale, 4, 4),
+};
+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[] = {
+ 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[] = {
+ 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[] = {
+ overworld_ascending_frames(gObjectEventPic_Pawmi, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Pawmo[] = {
+ overworld_ascending_frames(gObjectEventPic_Pawmo, 4, 4),
+};
+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[] = {
+ overworld_ascending_frames(gObjectEventPic_Tandemaus, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_MausholdFamilyOfThree[] = {
+ overworld_ascending_frames(gObjectEventPic_MausholdFamilyOfThree, 4, 4),
+};
+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[] = {
+ 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[] = {
+ overworld_ascending_frames(gObjectEventPic_Smoliv, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Dolliv[] = {
+ overworld_ascending_frames(gObjectEventPic_Dolliv, 4, 4),
+};
+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[] = {
+ overworld_ascending_frames(gObjectEventPic_SquawkabillyGreenPlumage, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_SquawkabillyBluePlumage[] = {
+ overworld_ascending_frames(gObjectEventPic_SquawkabillyBluePlumage, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_SquawkabillyYellowPlumage[] = {
+ overworld_ascending_frames(gObjectEventPic_SquawkabillyYellowPlumage, 4, 4),
+};
+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[] = {
+ overworld_ascending_frames(gObjectEventPic_Nacli, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Naclstack[] = {
+ overworld_ascending_frames(gObjectEventPic_Naclstack, 4, 4),
+};
+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[] = {
+ overworld_ascending_frames(gObjectEventPic_Charcadet, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Armarouge[] = {
+ overworld_ascending_frames(gObjectEventPic_Armarouge, 4, 4),
+};
+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[] = {
+ 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[] = {
+ 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[] = {
+ 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[] = {
+ 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[] = {
+ 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[] = {
+ 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[] = {
+ overworld_ascending_frames(gObjectEventPic_Klawf, 4, 4),
+};*/
+#endif //P_FAMILY_KLAWF
+
+#if P_FAMILY_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[] = {
+ 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[] = {
+ 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[] = {
+ overworld_ascending_frames(gObjectEventPic_Tinkatink, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Tinkatuff[] = {
+ overworld_ascending_frames(gObjectEventPic_Tinkatuff, 4, 4),
+};
+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[] = {
+ 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[] = {
+ overworld_ascending_frames(gObjectEventPic_Bombirdier, 4, 4),
+};*/
+#endif //P_FAMILY_BOMBIRDIER
+
+#if P_FAMILY_FINIZEN
+/*static const struct SpriteFrameImage sPicTable_Finizen[] = {
+ overworld_ascending_frames(gObjectEventPic_Finizen, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_PalafinZero[] = {
+ overworld_ascending_frames(gObjectEventPic_PalafinZero, 4, 4),
+};
+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[] = {
+ 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[] = {
+ overworld_ascending_frames(gObjectEventPic_Cyclizar, 4, 4),
+};*/
+#endif //P_FAMILY_CYCLIZAR
+
+#if P_FAMILY_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[] = {
+ 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[] = {
+ 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[] = {
+ overworld_ascending_frames(gObjectEventPic_Flamigo, 4, 4),
+};*/
+#endif //P_FAMILY_FLAMIGO
+
+#if P_FAMILY_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[] = {
+ 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),
+};*/
+#endif //P_FAMILY_DONDOZO
+
+#if P_FAMILY_TATSUGIRI
+/*static const struct SpriteFrameImage sPicTable_TatsugiriCurly[] = {
+ overworld_ascending_frames(gObjectEventPic_TatsugiriCurly, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_TatsugiriDroopy[] = {
+ overworld_ascending_frames(gObjectEventPic_TatsugiriDroopy, 4, 4),
+};
+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[] = {
+ overworld_ascending_frames(gObjectEventPic_GreatTusk, 4, 4),
+};*/
+#endif //P_FAMILY_GREAT_TUSK
+
+#if P_FAMILY_SCREAM_TAIL
+/*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[] = {
+ overworld_ascending_frames(gObjectEventPic_BruteBonnet, 4, 4),
+};*/
+#endif //P_FAMILY_BRUTE_BONNET
+
+#if P_FAMILY_FLUTTER_MANE
+/*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[] = {
+ overworld_ascending_frames(gObjectEventPic_SlitherWing, 4, 4),
+};*/
+#endif //P_FAMILY_SLITHER_WING
+
+#if P_FAMILY_SANDY_SHOCKS
+/*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[] = {
+ overworld_ascending_frames(gObjectEventPic_IronTreads, 4, 4),
+};*/
+#endif //P_FAMILY_IRON_TREADS
+
+#if P_FAMILY_IRON_BUNDLE
+/*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[] = {
+ overworld_ascending_frames(gObjectEventPic_IronHands, 4, 4),
+};*/
+#endif //P_FAMILY_IRON_HANDS
+
+#if P_FAMILY_IRON_JUGULIS
+/*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[] = {
+ overworld_ascending_frames(gObjectEventPic_IronMoth, 4, 4),
+};*/
+#endif //P_FAMILY_IRON_MOTH
+
+#if P_FAMILY_IRON_THORNS
+/*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[] = {
+ overworld_ascending_frames(gObjectEventPic_Frigibax, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_Arctibax[] = {
+ overworld_ascending_frames(gObjectEventPic_Arctibax, 4, 4),
+};
+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[] = {
+ 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_Gholdengo[] = {
+ overworld_ascending_frames(gObjectEventPic_Gholdengo, 4, 4),
+};*/
+#endif //P_FAMILY_GIMMIGHOUL
+
+#if P_FAMILY_WO_CHIEN
+/*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[] = {
+ overworld_ascending_frames(gObjectEventPic_ChienPao, 4, 4),
+};*/
+#endif //P_FAMILY_CHIEN_PAO
+
+#if P_FAMILY_TING_LU
+/*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[] = {
+ overworld_ascending_frames(gObjectEventPic_ChiYu, 4, 4),
+};*/
+#endif //P_FAMILY_CHI_YU
+
+#if P_FAMILY_ROARING_MOON
+/*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[] = {
+ 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),
+};*/
+#endif //P_FAMILY_KORAIDON
+
+#if P_FAMILY_MIRAIDON
+/*static const struct SpriteFrameImage sPicTable_Miraidon[] = {
+ overworld_ascending_frames(gObjectEventPic_Miraidon, 4, 4),
+};*/
+#endif //P_FAMILY_MIRAIDON
+
+#if P_FAMILY_WALKING_WAKE
+/*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[] = {
+ overworld_ascending_frames(gObjectEventPic_IronLeaves, 4, 4),
+};*/
+#endif //P_FAMILY_IRON_LEAVES
+
+#if P_FAMILY_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[] = {
+ overworld_ascending_frames(gObjectEventPic_Okidogi, 4, 4),
+};*/
+#endif //P_FAMILY_OKIDOGI
+
+#if P_FAMILY_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[] = {
+ overworld_ascending_frames(gObjectEventPic_Fezandipiti, 4, 4),
+};*/
+#endif //P_FAMILY_FEZANDIPITI
+
+#if P_FAMILY_OGERPON
+/*static const struct SpriteFrameImage sPicTable_OgerponTealMask[] = {
+ overworld_ascending_frames(gObjectEventPic_OgerponTealMask, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_OgerponWellspringMask[] = {
+ overworld_ascending_frames(gObjectEventPic_OgerponWellspringMask, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_OgerponHearthflameMask[] = {
+ overworld_ascending_frames(gObjectEventPic_OgerponHearthflameMask, 4, 4),
+};
+static const struct SpriteFrameImage sPicTable_OgerponCornerstoneMask[] = {
+ overworld_ascending_frames(gObjectEventPic_OgerponCornerstoneMask, 4, 4),
+};*/
+#endif //P_FAMILY_OGERPON
+
+#if P_FAMILY_GOUGING_FIRE
+/*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),
+};*/
+#endif //P_FAMILY_RAGING_BOLT
+
+#if P_FAMILY_IRON_BOULDER
+/*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[] = {
+ overworld_ascending_frames(gObjectEventPic_IronCrown, 4, 4),
+};*/
+#endif //P_FAMILY_IRON_CROWN
+
+#if P_FAMILY_TERAPAGOS
+/*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),
+};*/
+#endif //P_FAMILY_TERAPAGOS
+
+#if P_FAMILY_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/object_events/object_event_subsprites.h b/src/data/object_events/object_event_subsprites.h
index 808491992739..a2c1b1103aea 100755
--- a/src/data/object_events/object_event_subsprites.h
+++ b/src/data/object_events/object_event_subsprites.h
@@ -1,3 +1,6 @@
+#define SUBSPRITE_TABLE_ENTRY(x) {ARRAY_COUNT(x), x}
+#define SUBSPRITE_SHAPE(w, h) .shape = SPRITE_SHAPE(w##x##h), .size = SPRITE_SIZE(w##x##h)
+
static const struct Subsprite sOamTable_16x16_0[] = {
{
.x = -8,
@@ -269,7 +272,7 @@ static const struct Subsprite sOamTable_32x32_4[] = {
}
};
-static const struct SubspriteTable sOamTables_32x32[] = {
+const struct SubspriteTable sOamTables_32x32[] = {
{},
{ARRAY_COUNT(sOamTable_32x32_0), sOamTable_32x32_0},
{ARRAY_COUNT(sOamTable_32x32_1), sOamTable_32x32_1},
@@ -278,120 +281,11 @@ static const struct SubspriteTable sOamTables_32x32[] = {
{ARRAY_COUNT(sOamTable_32x32_4), sOamTable_32x32_4}
};
-static const struct Subsprite sOamTable_48x48[] = {
- {
- .x = -24,
- .y = -24,
- .shape = SPRITE_SHAPE(32x8),
- .size = SPRITE_SIZE(32x8),
- .tileOffset = 0,
- .priority = 2
- },
- {
- .x = 8,
- .y = -24,
- .shape = SPRITE_SHAPE(16x8),
- .size = SPRITE_SIZE(16x8),
- .tileOffset = 4,
- .priority = 2
- },
- {
- .x = -24,
- .y = -16,
- .shape = SPRITE_SHAPE(32x8),
- .size = SPRITE_SIZE(32x8),
- .tileOffset = 6,
- .priority = 2
- },
- {
- .x = 8,
- .y = -16,
- .shape = SPRITE_SHAPE(16x8),
- .size = SPRITE_SIZE(16x8),
- .tileOffset = 10,
- .priority = 2
- },
- {
- .x = -24,
- .y = -8,
- .shape = SPRITE_SHAPE(32x8),
- .size = SPRITE_SIZE(32x8),
- .tileOffset = 12,
- .priority = 2
- },
- {
- .x = 8,
- .y = -8,
- .shape = SPRITE_SHAPE(16x8),
- .size = SPRITE_SIZE(16x8),
- .tileOffset = 16,
- .priority = 2
- },
- {
- .x = -24,
- .y = 0,
- .shape = SPRITE_SHAPE(32x8),
- .size = SPRITE_SIZE(32x8),
- .tileOffset = 18,
- .priority = 2
- },
- {
- .x = 8,
- .y = 0,
- .shape = SPRITE_SHAPE(16x8),
- .size = SPRITE_SIZE(16x8),
- .tileOffset = 22,
- .priority = 2
- },
- {
- .x = -24,
- .y = 8,
- .shape = SPRITE_SHAPE(32x8),
- .size = SPRITE_SIZE(32x8),
- .tileOffset = 24,
- .priority = 2
- },
- {
- .x = 8,
- .y = 8,
- .shape = SPRITE_SHAPE(16x8),
- .size = SPRITE_SIZE(16x8),
- .tileOffset = 28,
- .priority = 2
- },
- {
- .x = -24,
- .y = 16,
- .shape = SPRITE_SHAPE(32x8),
- .size = SPRITE_SIZE(32x8),
- .tileOffset = 30,
- .priority = 2
- },
- {
- .x = 8,
- .y = 16,
- .shape = SPRITE_SHAPE(16x8),
- .size = SPRITE_SIZE(16x8),
- .tileOffset = 34,
- .priority = 2
- }
-};
-
-static const struct SubspriteTable sOamTables_48x48[] = {
- {ARRAY_COUNT(sOamTable_48x48), sOamTable_48x48},
- {ARRAY_COUNT(sOamTable_48x48), sOamTable_48x48},
- {ARRAY_COUNT(sOamTable_48x48), sOamTable_48x48},
- {ARRAY_COUNT(sOamTable_48x48), sOamTable_48x48},
- {ARRAY_COUNT(sOamTable_48x48), sOamTable_48x48},
- {ARRAY_COUNT(sOamTable_48x48), sOamTable_48x48}
-};
-
static const struct Subsprite sOamTable_64x32_0[] = {
{
.x = -32,
.y = -16,
- .shape = SPRITE_SHAPE(64x32),
- .size = SPRITE_SIZE(64x32),
+ SUBSPRITE_SHAPE(64, 32),
.tileOffset = 0,
.priority = 2
}
@@ -401,8 +295,7 @@ static const struct Subsprite sOamTable_64x32_1[] = {
{
.x = -32,
.y = -16,
- .shape = SPRITE_SHAPE(64x32),
- .size = SPRITE_SIZE(64x32),
+ SUBSPRITE_SHAPE(64, 32),
.tileOffset = 0,
.priority = 1
}
@@ -412,8 +305,7 @@ static const struct Subsprite sOamTable_64x32_2[] = {
{
.x = -32,
.y = -16,
- .shape = SPRITE_SHAPE(64x32),
- .size = SPRITE_SIZE(64x32),
+ SUBSPRITE_SHAPE(64, 32),
.tileOffset = 0,
.priority = 2
}
@@ -423,8 +315,7 @@ static const struct Subsprite sOamTable_64x32_3[] = {
{
.x = -32,
.y = -16,
- .shape = SPRITE_SHAPE(64x32),
- .size = SPRITE_SIZE(64x32),
+ SUBSPRITE_SHAPE(64, 32),
.tileOffset = 0,
.priority = 2
}
@@ -444,8 +335,7 @@ static const struct Subsprite sOamTable_64x64_0[] = {
{
.x = -32,
.y = -32,
- .shape = SPRITE_SHAPE(64x64),
- .size = SPRITE_SIZE(64x64),
+ SUBSPRITE_SHAPE(64, 64),
.tileOffset = 0,
.priority = 2
}
@@ -455,8 +345,7 @@ static const struct Subsprite sOamTable_64x64_1[] = {
{
.x = -32,
.y = -32,
- .shape = SPRITE_SHAPE(64x64),
- .size = SPRITE_SIZE(64x64),
+ SUBSPRITE_SHAPE(64, 64),
.tileOffset = 0,
.priority = 1
}
@@ -466,8 +355,7 @@ static const struct Subsprite sOamTable_64x64_2[] = {
{
.x = -32,
.y = -32,
- .shape = SPRITE_SHAPE(64x64),
- .size = SPRITE_SIZE(64x64),
+ SUBSPRITE_SHAPE(64, 64),
.tileOffset = 0,
.priority = 2
}
@@ -477,14 +365,13 @@ static const struct Subsprite sOamTable_64x64_3[] = {
{
.x = -32,
.y = -32,
- .shape = SPRITE_SHAPE(64x64),
- .size = SPRITE_SIZE(64x64),
+ SUBSPRITE_SHAPE(64, 64),
.tileOffset = 0,
.priority = 2
}
};
-static const struct SubspriteTable sOamTables_64x64[] = {
+const struct SubspriteTable sOamTables_64x64[] = {
{},
{ARRAY_COUNT(sOamTable_64x64_0), sOamTable_64x64_0},
{ARRAY_COUNT(sOamTable_64x64_1), sOamTable_64x64_1},
@@ -1528,3 +1415,1483 @@ static const struct SubspriteTable sOamTables_88x32[] = {
{ARRAY_COUNT(sOamTable_88x32_3), sOamTable_88x32_3},
{ARRAY_COUNT(sOamTable_88x32_3), sOamTable_88x32_3}
};
+
+#if OW_LARGE_OW_SUPPORT
+// These tables allow (virtual) sprite sizes so that
+// some space can be saved by making graphics smaller.
+// Note: When using these for followers, the minimum
+// `size` you must set in GraphicsInfo is 512.
+
+static const struct Subsprite sOamTable_16x24_0[] = {
+ {
+ .x = -8, .y = -12,
+ SUBSPRITE_SHAPE(16, 16),
+ .tileOffset = 0,
+ .priority = 2
+ },
+ {
+ .x = -8, .y = 4,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 4,
+ .priority = 2
+ },
+};
+
+static const struct Subsprite sOamTable_16x24_1[] = {
+ {
+ .x = -8, .y = -12,
+ SUBSPRITE_SHAPE(16, 16),
+ .tileOffset = 0,
+ .priority = 1
+ },
+ {
+ .x = -8, .y = 4,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 4,
+ .priority = 1
+ },
+};
+
+static const struct Subsprite sOamTable_16x24_2[] = {
+ {
+ .x = -8, .y = -12,
+ SUBSPRITE_SHAPE(16, 16),
+ .tileOffset = 0,
+ .priority = 2
+ },
+ {
+ .x = -8, .y = 4,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 4,
+ .priority = 3
+ },
+};
+
+static const struct Subsprite sOamTable_16x24_3[] = {
+ {
+ .x = -8, .y = -12,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 0,
+ .priority = 2
+ },
+ {
+ .x = -8, .y = -4,
+ SUBSPRITE_SHAPE(16, 16),
+ .tileOffset = 2,
+ .priority = 3
+ },
+};
+
+static const struct Subsprite sOamTable_16x24_4[] = {
+ {
+ .x = -8, .y = -12,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 0,
+ .priority = 1
+ },
+ {
+ .x = -8, .y = -4,
+ SUBSPRITE_SHAPE(16, 16),
+ .tileOffset = 2,
+ .priority = 3
+ },
+};
+
+static const struct Subsprite sOamTable_32x24_0[] = {
+ {
+ .x = -16, .y = -12,
+ SUBSPRITE_SHAPE(32, 16),
+ .tileOffset = 0,
+ .priority = 2
+ },
+ {
+ .x = -16, .y = 4,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 8,
+ .priority = 2
+ },
+};
+
+static const struct Subsprite sOamTable_32x24_1[] = {
+ {
+ .x = -16, .y = -12,
+ SUBSPRITE_SHAPE(32, 16),
+ .tileOffset = 0,
+ .priority = 1
+ },
+ {
+ .x = -16, .y = 4,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 8,
+ .priority = 1
+ },
+};
+
+static const struct Subsprite sOamTable_32x24_2[] = {
+ {
+ .x = -16, .y = -12,
+ SUBSPRITE_SHAPE(32, 16),
+ .tileOffset = 0,
+ .priority = 2
+ },
+ {
+ .x = -16, .y = 4,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 8,
+ .priority = 3
+ },
+};
+
+static const struct Subsprite sOamTable_32x24_3[] = {
+ {
+ .x = -16, .y = -12,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 0,
+ .priority = 2
+ },
+ {
+ .x = -16, .y = -4,
+ SUBSPRITE_SHAPE(32, 16),
+ .tileOffset = 4,
+ .priority = 3
+ },
+};
+
+static const struct Subsprite sOamTable_32x24_4[] = {
+ {
+ .x = -16, .y = -12,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 0,
+ .priority = 1
+ },
+ {
+ .x = -16, .y = -4,
+ SUBSPRITE_SHAPE(32, 16),
+ .tileOffset = 4,
+ .priority = 3
+ },
+};
+
+static const struct Subsprite sOamTable_24x16_0[] = {
+ {
+ .x = -12, .y = -8,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 0,
+ .priority = 2
+ },
+ {
+ .x = 4, .y = -8,
+ SUBSPRITE_SHAPE(8, 8),
+ .tileOffset = 2,
+ .priority = 2
+ },
+ {
+ .x = -12, .y = 0,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 3,
+ .priority = 2
+ },
+ {
+ .x = 4, .y = 0,
+ SUBSPRITE_SHAPE(8, 8),
+ .tileOffset = 5,
+ .priority = 2
+ },
+};
+
+static const struct Subsprite sOamTable_24x16_1[] = {
+ {
+ .x = -12, .y = -8,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 0,
+ .priority = 1
+ },
+ {
+ .x = 4, .y = -8,
+ SUBSPRITE_SHAPE(8, 8),
+ .tileOffset = 2,
+ .priority = 1
+ },
+ {
+ .x = -12, .y = 0,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 3,
+ .priority = 1
+ },
+ {
+ .x = 4, .y = 0,
+ SUBSPRITE_SHAPE(8, 8),
+ .tileOffset = 5,
+ .priority = 1
+ },
+};
+
+static const struct Subsprite sOamTable_24x16_2[] = {
+ {
+ .x = -12, .y = -8,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 0,
+ .priority = 2
+ },
+ {
+ .x = 4, .y = -8,
+ SUBSPRITE_SHAPE(8, 8),
+ .tileOffset = 2,
+ .priority = 2
+ },
+ {
+ .x = -12, .y = 0,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 3,
+ .priority = 3
+ },
+ {
+ .x = 4, .y = 0,
+ SUBSPRITE_SHAPE(8, 8),
+ .tileOffset = 5,
+ .priority = 3
+ },
+};
+
+static const struct Subsprite sOamTable_24x16_3[] = {
+ {
+ .x = -12, .y = -8,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 0,
+ .priority = 3
+ },
+ {
+ .x = 4, .y = -8,
+ SUBSPRITE_SHAPE(8, 8),
+ .tileOffset = 2,
+ .priority = 3
+ },
+ {
+ .x = -12, .y = 0,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 3,
+ .priority = 3
+ },
+ {
+ .x = 4, .y = 0,
+ SUBSPRITE_SHAPE(8, 8),
+ .tileOffset = 5,
+ .priority = 3
+ },
+};
+
+static const struct Subsprite sOamTable_24x24_0[] = {
+ {
+ .x = -12, .y = -12,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 0,
+ .priority = 2
+ },
+ {
+ .x = 4, .y = -12,
+ SUBSPRITE_SHAPE(8, 8),
+ .tileOffset = 2,
+ .priority = 2
+ },
+ {
+ .x = -12, .y = -4,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 3,
+ .priority = 2
+ },
+ {
+ .x = 4, .y = -4,
+ SUBSPRITE_SHAPE(8, 8),
+ .tileOffset = 5,
+ .priority = 2
+ },
+ {
+ .x = -12, .y = 4,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 6,
+ .priority = 2
+ },
+ {
+ .x = 4, .y = 4,
+ SUBSPRITE_SHAPE(8, 8),
+ .tileOffset = 8,
+ .priority = 2
+ },
+};
+
+static const struct Subsprite sOamTable_24x24_1[] = {
+ {
+ .x = -12, .y = -12,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 0,
+ .priority = 1
+ },
+ {
+ .x = 4, .y = -12,
+ SUBSPRITE_SHAPE(8, 8),
+ .tileOffset = 2,
+ .priority = 1
+ },
+ {
+ .x = -12, .y = -4,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 3,
+ .priority = 1
+ },
+ {
+ .x = 4, .y = -4,
+ SUBSPRITE_SHAPE(8, 8),
+ .tileOffset = 5,
+ .priority = 1
+ },
+ {
+ .x = -12, .y = 4,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 6,
+ .priority = 1
+ },
+ {
+ .x = 4, .y = 4,
+ SUBSPRITE_SHAPE(8, 8),
+ .tileOffset = 8,
+ .priority = 1
+ },
+};
+
+static const struct Subsprite sOamTable_24x24_2[] = {
+ {
+ .x = -12, .y = -12,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 0,
+ .priority = 2
+ },
+ {
+ .x = 4, .y = -12,
+ SUBSPRITE_SHAPE(8, 8),
+ .tileOffset = 2,
+ .priority = 2
+ },
+ {
+ .x = -12, .y = -4,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 3,
+ .priority = 2
+ },
+ {
+ .x = 4, .y = -4,
+ SUBSPRITE_SHAPE(8, 8),
+ .tileOffset = 5,
+ .priority = 2
+ },
+ {
+ .x = -12, .y = 4,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 6,
+ .priority = 3
+ },
+ {
+ .x = 4, .y = 4,
+ SUBSPRITE_SHAPE(8, 8),
+ .tileOffset = 8,
+ .priority = 3
+ },
+};
+
+static const struct Subsprite sOamTable_24x24_3[] = {
+ {
+ .x = -12, .y = -12,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 0,
+ .priority = 2
+ },
+ {
+ .x = 4, .y = -12,
+ SUBSPRITE_SHAPE(8, 8),
+ .tileOffset = 2,
+ .priority = 2
+ },
+ {
+ .x = -12, .y = -4,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 3,
+ .priority = 3
+ },
+ {
+ .x = 4, .y = -4,
+ SUBSPRITE_SHAPE(8, 8),
+ .tileOffset = 5,
+ .priority = 3
+ },
+ {
+ .x = -12, .y = 4,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 6,
+ .priority = 3
+ },
+ {
+ .x = 4, .y = 4,
+ SUBSPRITE_SHAPE(8, 8),
+ .tileOffset = 8,
+ .priority = 3
+ },
+};
+
+static const struct Subsprite sOamTable_24x24_4[] = {
+ {
+ .x = -12, .y = -12,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 0,
+ .priority = 1
+ },
+ {
+ .x = 4, .y = -12,
+ SUBSPRITE_SHAPE(8, 8),
+ .tileOffset = 2,
+ .priority = 1
+ },
+ {
+ .x = -12, .y = -4,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 3,
+ .priority = 3
+ },
+ {
+ .x = 4, .y = -4,
+ SUBSPRITE_SHAPE(8, 8),
+ .tileOffset = 5,
+ .priority = 3
+ },
+ {
+ .x = -12, .y = 4,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 6,
+ .priority = 3
+ },
+ {
+ .x = 4, .y = 4,
+ SUBSPRITE_SHAPE(8, 8),
+ .tileOffset = 8,
+ .priority = 3
+ },
+};
+
+static const struct Subsprite sOamTable_24x32_0[] = {
+ {
+ .x = -12, .y = -16,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 0,
+ .priority = 2
+ },
+ {
+ .x = 4, .y = -16,
+ SUBSPRITE_SHAPE(8, 8),
+ .tileOffset = 2,
+ .priority = 2
+ },
+ {
+ .x = -12, .y = -8,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 3,
+ .priority = 2
+ },
+ {
+ .x = 4, .y = -8,
+ SUBSPRITE_SHAPE(8, 8),
+ .tileOffset = 5,
+ .priority = 2
+ },
+ {
+ .x = -12, .y = 0,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 6,
+ .priority = 2
+ },
+ {
+ .x = 4, .y = 0,
+ SUBSPRITE_SHAPE(8, 8),
+ .tileOffset = 8,
+ .priority = 2
+ },
+ {
+ .x = -12, .y = 8,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 9,
+ .priority = 2
+ },
+ {
+ .x = 4, .y = 8,
+ SUBSPRITE_SHAPE(8, 8),
+ .tileOffset = 11,
+ .priority = 2
+ },
+};
+
+static const struct Subsprite sOamTable_24x32_1[] = {
+ {
+ .x = -12, .y = -16,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 0,
+ .priority = 1
+ },
+ {
+ .x = 4, .y = -16,
+ SUBSPRITE_SHAPE(8, 8),
+ .tileOffset = 2,
+ .priority = 1
+ },
+ {
+ .x = -12, .y = -8,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 3,
+ .priority = 1
+ },
+ {
+ .x = 4, .y = -8,
+ SUBSPRITE_SHAPE(8, 8),
+ .tileOffset = 5,
+ .priority = 1
+ },
+ {
+ .x = -12, .y = 0,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 6,
+ .priority = 1
+ },
+ {
+ .x = 4, .y = 0,
+ SUBSPRITE_SHAPE(8, 8),
+ .tileOffset = 8,
+ .priority = 1
+ },
+ {
+ .x = -12, .y = 8,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 9,
+ .priority = 1
+ },
+ {
+ .x = 4, .y = 8,
+ SUBSPRITE_SHAPE(8, 8),
+ .tileOffset = 11,
+ .priority = 1
+ },
+};
+
+static const struct Subsprite sOamTable_24x32_2[] = {
+ {
+ .x = -12, .y = -16,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 0,
+ .priority = 2
+ },
+ {
+ .x = 4, .y = -16,
+ SUBSPRITE_SHAPE(8, 8),
+ .tileOffset = 2,
+ .priority = 2
+ },
+ {
+ .x = -12, .y = -8,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 3,
+ .priority = 2
+ },
+ {
+ .x = 4, .y = -8,
+ SUBSPRITE_SHAPE(8, 8),
+ .tileOffset = 5,
+ .priority = 2
+ },
+ {
+ .x = -12, .y = 0,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 6,
+ .priority = 2
+ },
+ {
+ .x = 4, .y = 0,
+ SUBSPRITE_SHAPE(8, 8),
+ .tileOffset = 8,
+ .priority = 2
+ },
+ {
+ .x = -12, .y = 8,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 9,
+ .priority = 3
+ },
+ {
+ .x = 4, .y = 8,
+ SUBSPRITE_SHAPE(8, 8),
+ .tileOffset = 11,
+ .priority = 3
+ },
+};
+
+static const struct Subsprite sOamTable_24x32_3[] = {
+ {
+ .x = -12, .y = -16,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 0,
+ .priority = 2
+ },
+ {
+ .x = 4, .y = -16,
+ SUBSPRITE_SHAPE(8, 8),
+ .tileOffset = 2,
+ .priority = 2
+ },
+ {
+ .x = -12, .y = -8,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 3,
+ .priority = 2
+ },
+ {
+ .x = 4, .y = -8,
+ SUBSPRITE_SHAPE(8, 8),
+ .tileOffset = 5,
+ .priority = 2
+ },
+ {
+ .x = -12, .y = 0,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 6,
+ .priority = 3
+ },
+ {
+ .x = 4, .y = 0,
+ SUBSPRITE_SHAPE(8, 8),
+ .tileOffset = 8,
+ .priority = 3
+ },
+ {
+ .x = -12, .y = 8,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 9,
+ .priority = 3
+ },
+ {
+ .x = 4, .y = 8,
+ SUBSPRITE_SHAPE(8, 8),
+ .tileOffset = 11,
+ .priority = 3
+ },
+};
+
+static const struct Subsprite sOamTable_24x32_4[] = {
+ {
+ .x = -12, .y = -16,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 0,
+ .priority = 1
+ },
+ {
+ .x = 4, .y = -16,
+ SUBSPRITE_SHAPE(8, 8),
+ .tileOffset = 2,
+ .priority = 1
+ },
+ {
+ .x = -12, .y = -8,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 3,
+ .priority = 1
+ },
+ {
+ .x = 4, .y = -8,
+ SUBSPRITE_SHAPE(8, 8),
+ .tileOffset = 5,
+ .priority = 1
+ },
+ {
+ .x = -12, .y = 0,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 6,
+ .priority = 3
+ },
+ {
+ .x = 4, .y = 0,
+ SUBSPRITE_SHAPE(8, 8),
+ .tileOffset = 8,
+ .priority = 3
+ },
+ {
+ .x = -12, .y = 8,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 9,
+ .priority = 3
+ },
+ {
+ .x = 4, .y = 8,
+ SUBSPRITE_SHAPE(8, 8),
+ .tileOffset = 11,
+ .priority = 3
+ },
+};
+
+static const struct Subsprite sOamTable_64x64_Follower[] = {
+ {
+ .x = -32, .y = -32,
+ SUBSPRITE_SHAPE(64, 32),
+ .tileOffset = 0,
+ .priority = 1
+ },
+ {
+ .x = -32, .y = 0,
+ SUBSPRITE_SHAPE(64, 32),
+ .tileOffset = 32,
+ .priority = 2
+ }
+};
+
+static const struct Subsprite sOamTable_64x64_HotSprings[] = {
+ {
+ .x = -32,
+ .y = -32,
+ SUBSPRITE_SHAPE(64, 32),
+ .tileOffset = 0,
+ .priority = 2
+ },
+ {
+ .x = -32,
+ .y = 0,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 32,
+ .priority = 2
+ },
+ {
+ .x = 0,
+ .y = 0,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 36,
+ .priority = 2
+ },
+ {
+ .x = -32,
+ .y = 8,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 40,
+ .priority = 2
+ },
+ {
+ .x = 0,
+ .y = 8,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 44,
+ .priority = 2
+ },
+ {
+ .x = -32,
+ .y = 16,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 48,
+ .priority = 2
+ },
+ {
+ .x = 0,
+ .y = 16,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 52,
+ .priority = 2
+ },
+ {
+ .x = -32,
+ .y = 24,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 56,
+ .priority = 3
+ },
+ {
+ .x = 0,
+ .y = 24,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 60,
+ .priority = 3
+ },
+};
+
+static const struct Subsprite sOamTable_64x64_Grass2[] = {
+ {
+ .x = -32,
+ .y = -32,
+ SUBSPRITE_SHAPE(64, 32),
+ .tileOffset = 0,
+ .priority = 2
+ },
+ {
+ .x = -32,
+ .y = 0,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 32,
+ .priority = 2
+ },
+ {
+ .x = 0,
+ .y = 0,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 36,
+ .priority = 2
+ },
+ {
+ .x = -32,
+ .y = 8,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 40,
+ .priority = 2
+ },
+ {
+ .x = 0,
+ .y = 8,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 44,
+ .priority = 2
+ },
+ {
+ .x = -32,
+ .y = 16,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 48,
+ .priority = 3
+ },
+ {
+ .x = 0,
+ .y = 16,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 52,
+ .priority = 3
+ },
+ {
+ .x = -32,
+ .y = 24,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 56,
+ .priority = 3
+ },
+ {
+ .x = 0,
+ .y = 24,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 60,
+ .priority = 3
+ },
+};
+
+static const struct Subsprite sOamTable_64x64_Grass1[] = {
+ {
+ .x = -32,
+ .y = -32,
+ SUBSPRITE_SHAPE(64, 32),
+ .tileOffset = 0,
+ .priority = 1
+ },
+ {
+ .x = -32,
+ .y = 0,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 32,
+ .priority = 1
+ },
+ {
+ .x = 0,
+ .y = 0,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 36,
+ .priority = 1
+ },
+ {
+ .x = -32,
+ .y = 8,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 40,
+ .priority = 1
+ },
+ {
+ .x = 0,
+ .y = 8,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 44,
+ .priority = 1
+ },
+ {
+ .x = -32,
+ .y = 16,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 48,
+ .priority = 3
+ },
+ {
+ .x = 0,
+ .y = 16,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 52,
+ .priority = 3
+ },
+ {
+ .x = -32,
+ .y = 24,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 56,
+ .priority = 3
+ },
+ {
+ .x = 0,
+ .y = 24,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 60,
+ .priority = 3
+ },
+};
+
+static const struct Subsprite sOamTable_64x64_Grass3[] = {
+ {
+ .x = -32,
+ .y = -24,
+ SUBSPRITE_SHAPE(64, 32),
+ .tileOffset = 0,
+ .priority = 2
+ },
+ {
+ .x = -32,
+ .y = 8,
+ SUBSPRITE_SHAPE(64, 32),
+ .tileOffset = 32,
+ .priority = 3
+ }
+};
+
+static const struct Subsprite sOamTable_64x64_Grass4[] = {
+ {
+ .x = -32,
+ .y = -24,
+ SUBSPRITE_SHAPE(64, 32),
+ .tileOffset = 0,
+ .priority = 1
+ },
+ {
+ .x = -32,
+ .y = 8,
+ SUBSPRITE_SHAPE(64, 32),
+ .tileOffset = 32,
+ .priority = 3
+ }
+};
+
+
+static const struct SubspriteTable sOamTables_16x24[] = {
+ SUBSPRITE_TABLE_ENTRY(sOamTable_16x24_0),
+ SUBSPRITE_TABLE_ENTRY(sOamTable_16x24_0),
+ SUBSPRITE_TABLE_ENTRY(sOamTable_16x24_1),
+ SUBSPRITE_TABLE_ENTRY(sOamTable_16x24_2),
+ SUBSPRITE_TABLE_ENTRY(sOamTable_16x24_3),
+ SUBSPRITE_TABLE_ENTRY(sOamTable_16x24_4),
+};
+
+
+static const struct SubspriteTable sOamTables_24x16[] = {
+ SUBSPRITE_TABLE_ENTRY(sOamTable_24x16_0),
+ SUBSPRITE_TABLE_ENTRY(sOamTable_24x16_0),
+ SUBSPRITE_TABLE_ENTRY(sOamTable_24x16_1),
+ SUBSPRITE_TABLE_ENTRY(sOamTable_24x16_2),
+ SUBSPRITE_TABLE_ENTRY(sOamTable_24x16_3),
+ SUBSPRITE_TABLE_ENTRY(sOamTable_24x16_3),
+};
+
+static const struct SubspriteTable sOamTables_24x24[] = {
+ SUBSPRITE_TABLE_ENTRY(sOamTable_24x24_0), // reflections
+ SUBSPRITE_TABLE_ENTRY(sOamTable_24x24_0), // all 2
+ SUBSPRITE_TABLE_ENTRY(sOamTable_24x24_1), // all 1
+ SUBSPRITE_TABLE_ENTRY(sOamTable_24x24_2), // bottom 8 3
+ SUBSPRITE_TABLE_ENTRY(sOamTable_24x24_3), // bottom 16 3
+ SUBSPRITE_TABLE_ENTRY(sOamTable_24x24_4), // top 1, bottom 16 3
+};
+
+static const struct SubspriteTable sOamTables_24x32[] = {
+ SUBSPRITE_TABLE_ENTRY(sOamTable_24x32_0),
+ SUBSPRITE_TABLE_ENTRY(sOamTable_24x32_0),
+ SUBSPRITE_TABLE_ENTRY(sOamTable_24x32_1),
+ SUBSPRITE_TABLE_ENTRY(sOamTable_24x32_2),
+ SUBSPRITE_TABLE_ENTRY(sOamTable_24x32_3),
+ SUBSPRITE_TABLE_ENTRY(sOamTable_24x32_4),
+};
+
+
+static const struct SubspriteTable sOamTables_32x24[] = {
+ SUBSPRITE_TABLE_ENTRY(sOamTable_32x24_0),
+ SUBSPRITE_TABLE_ENTRY(sOamTable_32x24_0),
+ SUBSPRITE_TABLE_ENTRY(sOamTable_32x24_1),
+ SUBSPRITE_TABLE_ENTRY(sOamTable_32x24_2),
+ SUBSPRITE_TABLE_ENTRY(sOamTable_32x24_3),
+ SUBSPRITE_TABLE_ENTRY(sOamTable_32x24_4),
+};
+
+
+// For following pokemon
+// Makes the top 32 pixels priority 1,
+// so that very tall pokemon's heads
+// will appear on top of buildings, etc.
+static const struct SubspriteTable sOamTables_64x64_Tall[] = {
+ {}, // unused
+ SUBSPRITE_TABLE_ENTRY(sOamTable_64x64_Follower), // elevation 3
+ SUBSPRITE_TABLE_ENTRY(sOamTable_64x64_1), // elevation 4
+ SUBSPRITE_TABLE_ENTRY(sOamTable_64x64_HotSprings), // hot springs
+ SUBSPRITE_TABLE_ENTRY(sOamTable_64x64_Grass2), // long grass
+ SUBSPRITE_TABLE_ENTRY(sOamTable_64x64_Grass1) // long grass priority 1
+};
+
+// Like sOamTables_64x64_Tall, but fewer pixels visible in long grass
+// Meant for pokemon that are more long than tall like Wailord
+static const struct SubspriteTable sOamTables_64x64_Long[] = {
+ {}, // unused
+ SUBSPRITE_TABLE_ENTRY(sOamTable_64x64_Follower), // elevation 3
+ SUBSPRITE_TABLE_ENTRY(sOamTable_64x64_1), // elevation 4
+ SUBSPRITE_TABLE_ENTRY(sOamTable_64x64_HotSprings), // hot springs
+ SUBSPRITE_TABLE_ENTRY(sOamTable_64x64_Grass3), // long grass
+ SUBSPRITE_TABLE_ENTRY(sOamTable_64x64_Grass4) // long grass priority 1
+};
+#endif
+
+static const struct Subsprite sOamTable_48x48[] = {
+ {
+ .x = -24,
+ .y = -24,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 0,
+ .priority = 1
+ },
+ {
+ .x = 8,
+ .y = -24,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 4,
+ .priority = 1
+ },
+ {
+ .x = -24,
+ .y = -16,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 6,
+ .priority = 1
+ },
+ {
+ .x = 8,
+ .y = -16,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 10,
+ .priority = 1
+ },
+ {
+ .x = -24,
+ .y = -8,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 12,
+ .priority = 2
+ },
+ {
+ .x = 8,
+ .y = -8,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 16,
+ .priority = 2
+ },
+ {
+ .x = -24,
+ .y = 0,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 18,
+ .priority = 2
+ },
+ {
+ .x = 8,
+ .y = 0,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 22,
+ .priority = 2
+ },
+ {
+ .x = -24,
+ .y = 8,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 24,
+ .priority = 2
+ },
+ {
+ .x = 8,
+ .y = 8,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 28,
+ .priority = 2
+ },
+ {
+ .x = -24,
+ .y = 16,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 30,
+ .priority = 2
+ },
+ {
+ .x = 8,
+ .y = 16,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 34,
+ .priority = 2
+ }
+};
+
+static const struct Subsprite sOamTable_48x48_4[] = {
+ {
+ .x = -24,
+ .y = -24,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 0,
+ .priority = 1
+ },
+ {
+ .x = 8,
+ .y = -24,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 4,
+ .priority = 1
+ },
+ {
+ .x = -24,
+ .y = -16,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 6,
+ .priority = 1
+ },
+ {
+ .x = 8,
+ .y = -16,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 10,
+ .priority = 1
+ },
+ {
+ .x = -24,
+ .y = -8,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 12,
+ .priority = 1
+ },
+ {
+ .x = 8,
+ .y = -8,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 16,
+ .priority = 1
+ },
+ {
+ .x = -24,
+ .y = 0,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 18,
+ .priority = 1
+ },
+ {
+ .x = 8,
+ .y = 0,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 22,
+ .priority = 1
+ },
+ {
+ .x = -24,
+ .y = 8,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 24,
+ .priority = 1
+ },
+ {
+ .x = 8,
+ .y = 8,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 28,
+ .priority = 1
+ },
+ {
+ .x = -24,
+ .y = 16,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 30,
+ .priority = 1
+ },
+ {
+ .x = 8,
+ .y = 16,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 34,
+ .priority = 1
+ }
+};
+
+static const struct Subsprite sOamTable_48x48_HotSprings[] = {
+ {
+ .x = -24,
+ .y = -24,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 0,
+ .priority = 2
+ },
+ {
+ .x = 8,
+ .y = -24,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 4,
+ .priority = 2
+ },
+ {
+ .x = -24,
+ .y = -16,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 6,
+ .priority = 2
+ },
+ {
+ .x = 8,
+ .y = -16,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 10,
+ .priority = 2
+ },
+ {
+ .x = -24,
+ .y = -8,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 12,
+ .priority = 2
+ },
+ {
+ .x = 8,
+ .y = -8,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 16,
+ .priority = 2
+ },
+ {
+ .x = -24,
+ .y = 0,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 18,
+ .priority = 2
+ },
+ {
+ .x = 8,
+ .y = 0,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 22,
+ .priority = 2
+ },
+ {
+ .x = -24,
+ .y = 8,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 24,
+ .priority = 2
+ },
+ {
+ .x = 8,
+ .y = 8,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 28,
+ .priority = 2
+ },
+ {
+ .x = -24,
+ .y = 16,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 30,
+ .priority = 3
+ },
+ {
+ .x = 8,
+ .y = 16,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 34,
+ .priority = 3
+ }
+};
+
+static const struct Subsprite sOamTable_48x48_Grass2[] = {
+ {
+ .x = -24,
+ .y = -24,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 0,
+ .priority = 2
+ },
+ {
+ .x = 8,
+ .y = -24,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 4,
+ .priority = 2
+ },
+ {
+ .x = -24,
+ .y = -16,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 6,
+ .priority = 2
+ },
+ {
+ .x = 8,
+ .y = -16,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 10,
+ .priority = 2
+ },
+ {
+ .x = -24,
+ .y = -8,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 12,
+ .priority = 2
+ },
+ {
+ .x = 8,
+ .y = -8,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 16,
+ .priority = 2
+ },
+ {
+ .x = -24,
+ .y = 0,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 18,
+ .priority = 2
+ },
+ {
+ .x = 8,
+ .y = 0,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 22,
+ .priority = 2
+ },
+ {
+ .x = -24,
+ .y = 8,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 24,
+ .priority = 3
+ },
+ {
+ .x = 8,
+ .y = 8,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 28,
+ .priority = 3
+ },
+ {
+ .x = -24,
+ .y = 16,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 30,
+ .priority = 3
+ },
+ {
+ .x = 8,
+ .y = 16,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 34,
+ .priority = 3
+ }
+};
+
+static const struct Subsprite sOamTable_48x48_Grass1[] = {
+ {
+ .x = -24,
+ .y = -24,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 0,
+ .priority = 1
+ },
+ {
+ .x = 8,
+ .y = -24,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 4,
+ .priority = 1
+ },
+ {
+ .x = -24,
+ .y = -16,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 6,
+ .priority = 1
+ },
+ {
+ .x = 8,
+ .y = -16,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 10,
+ .priority = 1
+ },
+ {
+ .x = -24,
+ .y = -8,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 12,
+ .priority = 1
+ },
+ {
+ .x = 8,
+ .y = -8,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 16,
+ .priority = 1
+ },
+ {
+ .x = -24,
+ .y = 0,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 18,
+ .priority = 1
+ },
+ {
+ .x = 8,
+ .y = 0,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 22,
+ .priority = 1
+ },
+ {
+ .x = -24,
+ .y = 8,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 24,
+ .priority = 3
+ },
+ {
+ .x = 8,
+ .y = 8,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 28,
+ .priority = 3
+ },
+ {
+ .x = -24,
+ .y = 16,
+ SUBSPRITE_SHAPE(32, 8),
+ .tileOffset = 30,
+ .priority = 3
+ },
+ {
+ .x = 8,
+ .y = 16,
+ SUBSPRITE_SHAPE(16, 8),
+ .tileOffset = 34,
+ .priority = 3
+ }
+};
+
+// Also used for truck
+static const struct SubspriteTable sOamTables_48x48[] = {
+ SUBSPRITE_TABLE_ENTRY(sOamTable_48x48), // reflections
+ SUBSPRITE_TABLE_ENTRY(sOamTable_48x48), // elevation 3
+ SUBSPRITE_TABLE_ENTRY(sOamTable_48x48_4), // elevation 4
+ SUBSPRITE_TABLE_ENTRY(sOamTable_48x48_HotSprings), // hot springs
+ SUBSPRITE_TABLE_ENTRY(sOamTable_48x48_Grass2), // long grass
+ SUBSPRITE_TABLE_ENTRY(sOamTable_48x48_Grass1) // long grass priority 1
+};
\ No newline at end of file
diff --git a/src/data/partner_parties.h b/src/data/partner_parties.h
index 1b071ec28e41..8b137891791f 100644
--- a/src/data/partner_parties.h
+++ b/src/data/partner_parties.h
@@ -1,26 +1 @@
-static const struct TrainerMon sParty_StevenPartner[] = {
- {
- .species = SPECIES_METANG,
- .lvl = 42,
- .nature = NATURE_BRAVE,
- .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31),
- .ev = TRAINER_PARTY_EVS(0, 252, 252, 0, 6, 0),
- .moves = {MOVE_LIGHT_SCREEN, MOVE_PSYCHIC, MOVE_REFLECT, MOVE_METAL_CLAW},
- },
- {
- .species = SPECIES_SKARMORY,
- .lvl = 43,
- .nature = NATURE_IMPISH,
- .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31),
- .ev = TRAINER_PARTY_EVS(252, 0, 0, 0, 6, 252),
- .moves = {MOVE_TOXIC, MOVE_AERIAL_ACE, MOVE_PROTECT, MOVE_STEEL_WING},
- },
- {
- .species = SPECIES_AGGRON,
- .lvl = 44,
- .nature = NATURE_ADAMANT,
- .iv = TRAINER_PARTY_IVS(31, 31, 31, 31, 31, 31),
- .ev = TRAINER_PARTY_EVS(0, 252, 0, 0, 252, 6),
- .moves = {MOVE_THUNDER, MOVE_PROTECT, MOVE_SOLAR_BEAM, MOVE_DRAGON_CLAW},
- }
-};
+
diff --git a/src/data/pokemon/egg_moves.h b/src/data/pokemon/egg_moves.h
index 61b025963862..18ce19a7a1a0 100644
--- a/src/data/pokemon/egg_moves.h
+++ b/src/data/pokemon/egg_moves.h
@@ -1,5484 +1,6303 @@
#include "constants/moves.h"
-#define EGG_MOVES_SPECIES_OFFSET 20000
-#define EGG_MOVES_TERMINATOR 0xFFFF
-#define egg_moves(species, moves...) (SPECIES_##species + EGG_MOVES_SPECIES_OFFSET), moves
+static const u16 sNoneEggMoveLearnset[] = {
+ MOVE_UNAVAILABLE,
+};
-const u16 gEggMoves[] = {
#if P_FAMILY_BULBASAUR
- egg_moves(BULBASAUR,
- MOVE_SKULL_BASH,
- MOVE_CHARM,
- MOVE_PETAL_DANCE,
- MOVE_MAGICAL_LEAF,
- MOVE_GRASS_WHISTLE,
- MOVE_CURSE,
- MOVE_INGRAIN,
- MOVE_NATURE_POWER,
- MOVE_AMNESIA,
- MOVE_LEAF_STORM,
- MOVE_POWER_WHIP,
- MOVE_SLUDGE,
- MOVE_ENDURE,
- MOVE_GIGA_DRAIN,
- MOVE_GRASSY_TERRAIN),
+static const u16 sBulbasaurEggMoveLearnset[] = {
+ MOVE_SKULL_BASH,
+ MOVE_CHARM,
+ MOVE_PETAL_DANCE,
+ MOVE_MAGICAL_LEAF,
+ MOVE_GRASS_WHISTLE,
+ MOVE_CURSE,
+ MOVE_INGRAIN,
+ MOVE_NATURE_POWER,
+ MOVE_AMNESIA,
+ MOVE_LEAF_STORM,
+ MOVE_POWER_WHIP,
+ MOVE_SLUDGE,
+ MOVE_ENDURE,
+ MOVE_GIGA_DRAIN,
+ MOVE_GRASSY_TERRAIN,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_BULBASAUR
#if P_FAMILY_CHARMANDER
- egg_moves(CHARMANDER,
- MOVE_BELLY_DRUM,
- MOVE_ANCIENT_POWER,
- MOVE_BITE,
- MOVE_OUTRAGE,
- MOVE_BEAT_UP,
- MOVE_DRAGON_DANCE,
- MOVE_CRUNCH,
- MOVE_DRAGON_RUSH,
- MOVE_METAL_CLAW,
- MOVE_FLARE_BLITZ,
- MOVE_COUNTER,
- MOVE_DRAGON_PULSE,
- MOVE_FOCUS_PUNCH,
- MOVE_AIR_CUTTER),
+static const u16 sCharmanderEggMoveLearnset[] = {
+ MOVE_BELLY_DRUM,
+ MOVE_ANCIENT_POWER,
+ MOVE_BITE,
+ MOVE_OUTRAGE,
+ MOVE_BEAT_UP,
+ MOVE_DRAGON_DANCE,
+ MOVE_CRUNCH,
+ MOVE_DRAGON_RUSH,
+ MOVE_METAL_CLAW,
+ MOVE_FLARE_BLITZ,
+ MOVE_COUNTER,
+ MOVE_DRAGON_PULSE,
+ MOVE_FOCUS_PUNCH,
+ MOVE_AIR_CUTTER,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_CHARMANDER
#if P_FAMILY_SQUIRTLE
- egg_moves(SQUIRTLE,
- MOVE_MIRROR_COAT,
- MOVE_HAZE,
- MOVE_MIST,
- MOVE_FORESIGHT,
- MOVE_FLAIL,
- MOVE_REFRESH,
- MOVE_MUD_SPORT,
- MOVE_YAWN,
- MOVE_MUDDY_WATER,
- MOVE_FAKE_OUT,
- MOVE_AQUA_RING,
- MOVE_AQUA_JET,
- MOVE_WATER_SPOUT,
- MOVE_BRINE,
- MOVE_DRAGON_PULSE,
- MOVE_AURA_SPHERE),
+static const u16 sSquirtleEggMoveLearnset[] = {
+ MOVE_MIRROR_COAT,
+ MOVE_HAZE,
+ MOVE_MIST,
+ MOVE_FORESIGHT,
+ MOVE_FLAIL,
+ MOVE_REFRESH,
+ MOVE_MUD_SPORT,
+ MOVE_YAWN,
+ MOVE_MUDDY_WATER,
+ MOVE_FAKE_OUT,
+ MOVE_AQUA_RING,
+ MOVE_AQUA_JET,
+ MOVE_WATER_SPOUT,
+ MOVE_BRINE,
+ MOVE_DRAGON_PULSE,
+ MOVE_AURA_SPHERE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SQUIRTLE
#if P_FAMILY_PIDGEY
- egg_moves(PIDGEY,
- MOVE_PURSUIT,
- MOVE_FEINT_ATTACK,
- MOVE_FORESIGHT,
- MOVE_STEEL_WING,
- MOVE_AIR_CUTTER,
- MOVE_AIR_SLASH,
- MOVE_BRAVE_BIRD,
- MOVE_UPROAR,
- MOVE_DEFOG),
+static const u16 sPidgeyEggMoveLearnset[] = {
+ MOVE_PURSUIT,
+ MOVE_FEINT_ATTACK,
+ MOVE_FORESIGHT,
+ MOVE_STEEL_WING,
+ MOVE_AIR_CUTTER,
+ MOVE_AIR_SLASH,
+ MOVE_BRAVE_BIRD,
+ MOVE_UPROAR,
+ MOVE_DEFOG,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_PIDGEY
#if P_FAMILY_RATTATA
- egg_moves(RATTATA,
- MOVE_SCREECH,
- MOVE_FLAME_WHEEL,
- MOVE_FURY_SWIPES,
- MOVE_BITE,
- MOVE_COUNTER,
- MOVE_REVERSAL,
- MOVE_UPROAR,
- MOVE_LAST_RESORT,
- MOVE_ME_FIRST,
- MOVE_REVENGE,
- MOVE_FINAL_GAMBIT),
+static const u16 sRattataEggMoveLearnset[] = {
+ MOVE_SCREECH,
+ MOVE_FLAME_WHEEL,
+ MOVE_FURY_SWIPES,
+ MOVE_BITE,
+ MOVE_COUNTER,
+ MOVE_REVERSAL,
+ MOVE_UPROAR,
+ MOVE_LAST_RESORT,
+ MOVE_ME_FIRST,
+ MOVE_REVENGE,
+ MOVE_FINAL_GAMBIT,
+ MOVE_UNAVAILABLE,
+};
#if P_ALOLAN_FORMS
- egg_moves(RATTATA_ALOLAN,
- MOVE_COUNTER,
- MOVE_FINAL_GAMBIT,
- MOVE_FURY_SWIPES,
- MOVE_ME_FIRST,
- MOVE_REVENGE,
- MOVE_REVERSAL,
- MOVE_SNATCH,
- MOVE_STOCKPILE,
- MOVE_SWALLOW,
- MOVE_SWITCHEROO,
- MOVE_UPROAR),
+static const u16 sRattataAlolanEggMoveLearnset[] = {
+ MOVE_COUNTER,
+ MOVE_FINAL_GAMBIT,
+ MOVE_FURY_SWIPES,
+ MOVE_ME_FIRST,
+ MOVE_REVENGE,
+ MOVE_REVERSAL,
+ MOVE_SNATCH,
+ MOVE_STOCKPILE,
+ MOVE_SWALLOW,
+ MOVE_SWITCHEROO,
+ MOVE_UPROAR,
+ MOVE_UNAVAILABLE,
+};
#endif //P_ALOLAN_FORMS
#endif //P_FAMILY_RATTATA
#if P_FAMILY_SPEAROW
- egg_moves(SPEAROW,
- MOVE_FEINT_ATTACK,
- MOVE_SCARY_FACE,
- MOVE_QUICK_ATTACK,
- MOVE_TRI_ATTACK,
- MOVE_ASTONISH,
- MOVE_SKY_ATTACK,
- MOVE_WHIRLWIND,
- MOVE_UPROAR,
- MOVE_FEATHER_DANCE,
- MOVE_STEEL_WING,
- MOVE_RAZOR_WIND),
+static const u16 sSpearowEggMoveLearnset[] = {
+ MOVE_FEINT_ATTACK,
+ MOVE_SCARY_FACE,
+ MOVE_QUICK_ATTACK,
+ MOVE_TRI_ATTACK,
+ MOVE_ASTONISH,
+ MOVE_SKY_ATTACK,
+ MOVE_WHIRLWIND,
+ MOVE_UPROAR,
+ MOVE_FEATHER_DANCE,
+ MOVE_STEEL_WING,
+ MOVE_RAZOR_WIND,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SPEAROW
#if P_FAMILY_EKANS
- egg_moves(EKANS,
- MOVE_PURSUIT,
- MOVE_SLAM,
- MOVE_SPITE,
- MOVE_BEAT_UP,
- MOVE_POISON_FANG,
- MOVE_SCARY_FACE,
- MOVE_POISON_TAIL,
- MOVE_DISABLE,
- MOVE_SWITCHEROO,
- MOVE_IRON_TAIL,
- MOVE_SUCKER_PUNCH,
- MOVE_SNATCH),
+static const u16 sEkansEggMoveLearnset[] = {
+ MOVE_PURSUIT,
+ MOVE_SLAM,
+ MOVE_SPITE,
+ MOVE_BEAT_UP,
+ MOVE_POISON_FANG,
+ MOVE_SCARY_FACE,
+ MOVE_POISON_TAIL,
+ MOVE_DISABLE,
+ MOVE_SWITCHEROO,
+ MOVE_IRON_TAIL,
+ MOVE_SUCKER_PUNCH,
+ MOVE_SNATCH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_EKANS
#if P_FAMILY_PIKACHU
#if P_GEN_2_CROSS_EVOS
- egg_moves(PICHU,
- MOVE_REVERSAL,
- MOVE_BIDE,
- MOVE_PRESENT,
- MOVE_ENCORE,
- MOVE_DOUBLE_SLAP,
- MOVE_WISH,
- MOVE_CHARGE,
- MOVE_FAKE_OUT,
- MOVE_THUNDER_PUNCH,
- MOVE_TICKLE,
- MOVE_FLAIL,
- MOVE_ENDURE,
- MOVE_LUCKY_CHANT,
- MOVE_BESTOW,
- MOVE_DISARMING_VOICE,
- MOVE_ELECTRIC_TERRAIN),
+static const u16 sPichuEggMoveLearnset[] = {
+ MOVE_REVERSAL,
+ MOVE_BIDE,
+ MOVE_PRESENT,
+ MOVE_ENCORE,
+ MOVE_DOUBLE_SLAP,
+ MOVE_WISH,
+ MOVE_CHARGE,
+ MOVE_FAKE_OUT,
+ MOVE_THUNDER_PUNCH,
+ MOVE_TICKLE,
+ MOVE_FLAIL,
+ MOVE_ENDURE,
+ MOVE_LUCKY_CHANT,
+ MOVE_BESTOW,
+ MOVE_DISARMING_VOICE,
+ MOVE_ELECTRIC_TERRAIN,
+ MOVE_UNAVAILABLE,
+};
#endif //P_GEN_2_CROSS_EVOS
#endif //P_FAMILY_PIKACHU
#if P_FAMILY_SANDSHREW
- egg_moves(SANDSHREW,
- MOVE_FLAIL,
- MOVE_COUNTER,
- MOVE_RAPID_SPIN,
- MOVE_METAL_CLAW,
- MOVE_CRUSH_CLAW,
- MOVE_NIGHT_SLASH,
- MOVE_MUD_SHOT,
- MOVE_ENDURE,
- MOVE_CHIP_AWAY,
- MOVE_ROCK_CLIMB,
- MOVE_ROTOTILLER,
- MOVE_HONE_CLAWS),
+static const u16 sSandshrewEggMoveLearnset[] = {
+ MOVE_FLAIL,
+ MOVE_COUNTER,
+ MOVE_RAPID_SPIN,
+ MOVE_METAL_CLAW,
+ MOVE_CRUSH_CLAW,
+ MOVE_NIGHT_SLASH,
+ MOVE_MUD_SHOT,
+ MOVE_ENDURE,
+ MOVE_CHIP_AWAY,
+ MOVE_ROCK_CLIMB,
+ MOVE_ROTOTILLER,
+ MOVE_HONE_CLAWS,
+ MOVE_UNAVAILABLE,
+};
#if P_ALOLAN_FORMS
- egg_moves(SANDSHREW_ALOLAN,
- MOVE_AMNESIA,
- MOVE_CHIP_AWAY,
- MOVE_COUNTER,
- MOVE_CRUSH_CLAW,
- MOVE_CURSE,
- MOVE_ENDURE,
- MOVE_FLAIL,
- MOVE_HONE_CLAWS,
- MOVE_ICICLE_CRASH,
- MOVE_ICICLE_SPEAR,
- MOVE_METAL_CLAW,
- MOVE_NIGHT_SLASH),
+static const u16 sSandshrewAlolanEggMoveLearnset[] = {
+ MOVE_AMNESIA,
+ MOVE_CHIP_AWAY,
+ MOVE_COUNTER,
+ MOVE_CRUSH_CLAW,
+ MOVE_CURSE,
+ MOVE_ENDURE,
+ MOVE_FLAIL,
+ MOVE_HONE_CLAWS,
+ MOVE_ICICLE_CRASH,
+ MOVE_ICICLE_SPEAR,
+ MOVE_METAL_CLAW,
+ MOVE_NIGHT_SLASH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_ALOLAN_FORMS
#endif //P_FAMILY_SANDSHREW
#if P_FAMILY_NIDORAN
- egg_moves(NIDORAN_F,
- MOVE_SUPERSONIC,
- MOVE_DISABLE,
- MOVE_TAKE_DOWN,
- MOVE_FOCUS_ENERGY,
- MOVE_CHARM,
- MOVE_COUNTER,
- MOVE_BEAT_UP,
- MOVE_PURSUIT,
- MOVE_SKULL_BASH,
- MOVE_IRON_TAIL,
- MOVE_POISON_TAIL,
- MOVE_ENDURE,
- MOVE_CHIP_AWAY,
- MOVE_VENOM_DRENCH),
-
- egg_moves(NIDORAN_M,
- MOVE_COUNTER,
- MOVE_DISABLE,
- MOVE_SUPERSONIC,
- MOVE_TAKE_DOWN,
- MOVE_AMNESIA,
- MOVE_CONFUSION,
- MOVE_BEAT_UP,
- MOVE_SUCKER_PUNCH,
- MOVE_HEAD_SMASH,
- MOVE_IRON_TAIL,
- MOVE_POISON_TAIL,
- MOVE_ENDURE,
- MOVE_CHIP_AWAY,
- MOVE_VENOM_DRENCH),
+static const u16 sNidoranFEggMoveLearnset[] = {
+ MOVE_SUPERSONIC,
+ MOVE_DISABLE,
+ MOVE_TAKE_DOWN,
+ MOVE_FOCUS_ENERGY,
+ MOVE_CHARM,
+ MOVE_COUNTER,
+ MOVE_BEAT_UP,
+ MOVE_PURSUIT,
+ MOVE_SKULL_BASH,
+ MOVE_IRON_TAIL,
+ MOVE_POISON_TAIL,
+ MOVE_ENDURE,
+ MOVE_CHIP_AWAY,
+ MOVE_VENOM_DRENCH,
+ MOVE_UNAVAILABLE,
+};
+
+static const u16 sNidoranMEggMoveLearnset[] = {
+ MOVE_COUNTER,
+ MOVE_DISABLE,
+ MOVE_SUPERSONIC,
+ MOVE_TAKE_DOWN,
+ MOVE_AMNESIA,
+ MOVE_CONFUSION,
+ MOVE_BEAT_UP,
+ MOVE_SUCKER_PUNCH,
+ MOVE_HEAD_SMASH,
+ MOVE_IRON_TAIL,
+ MOVE_POISON_TAIL,
+ MOVE_ENDURE,
+ MOVE_CHIP_AWAY,
+ MOVE_VENOM_DRENCH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_NIDORAN
#if P_FAMILY_CLEFAIRY
#if P_GEN_2_CROSS_EVOS
- egg_moves(CLEFFA,
- MOVE_PRESENT,
- MOVE_METRONOME,
- MOVE_AMNESIA,
- MOVE_BELLY_DRUM,
- MOVE_SPLASH,
- MOVE_MIMIC,
- MOVE_WISH,
- MOVE_FAKE_TEARS,
- MOVE_COVET,
- MOVE_AROMATHERAPY,
- MOVE_STORED_POWER,
- MOVE_TICKLE,
- MOVE_MISTY_TERRAIN,
- MOVE_HEAL_PULSE),
+static const u16 sCleffaEggMoveLearnset[] = {
+ MOVE_PRESENT,
+ MOVE_METRONOME,
+ MOVE_AMNESIA,
+ MOVE_BELLY_DRUM,
+ MOVE_SPLASH,
+ MOVE_MIMIC,
+ MOVE_WISH,
+ MOVE_FAKE_TEARS,
+ MOVE_COVET,
+ MOVE_AROMATHERAPY,
+ MOVE_STORED_POWER,
+ MOVE_TICKLE,
+ MOVE_MISTY_TERRAIN,
+ MOVE_HEAL_PULSE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_GEN_2_CROSS_EVOS
#endif //P_FAMILY_CLEFAIRY
#if P_FAMILY_VULPIX
- egg_moves(VULPIX,
- MOVE_FEINT_ATTACK,
- MOVE_HYPNOSIS,
- MOVE_FLAIL,
- MOVE_SPITE,
- MOVE_DISABLE,
- MOVE_HOWL,
- MOVE_HEAT_WAVE,
- MOVE_FLARE_BLITZ,
- MOVE_EXTRASENSORY,
- MOVE_POWER_SWAP,
- MOVE_SECRET_POWER,
- MOVE_HEX,
- MOVE_TAIL_SLAP,
- MOVE_CAPTIVATE),
+static const u16 sVulpixEggMoveLearnset[] = {
+ MOVE_FEINT_ATTACK,
+ MOVE_HYPNOSIS,
+ MOVE_FLAIL,
+ MOVE_SPITE,
+ MOVE_DISABLE,
+ MOVE_HOWL,
+ MOVE_HEAT_WAVE,
+ MOVE_FLARE_BLITZ,
+ MOVE_EXTRASENSORY,
+ MOVE_POWER_SWAP,
+ MOVE_SECRET_POWER,
+ MOVE_HEX,
+ MOVE_TAIL_SLAP,
+ MOVE_CAPTIVATE,
+ MOVE_UNAVAILABLE,
+};
#if P_ALOLAN_FORMS
- egg_moves(VULPIX_ALOLAN,
- MOVE_AGILITY,
- MOVE_CHARM,
- MOVE_DISABLE,
- MOVE_ENCORE,
- MOVE_EXTRASENSORY,
- MOVE_FLAIL,
- MOVE_FREEZE_DRY,
- MOVE_HOWL,
- MOVE_HYPNOSIS,
- MOVE_MOONBLAST,
- MOVE_POWER_SWAP,
- MOVE_SPITE,
- MOVE_SECRET_POWER,
- MOVE_TAIL_SLAP),
+static const u16 sVulpixAlolanEggMoveLearnset[] = {
+ MOVE_AGILITY,
+ MOVE_CHARM,
+ MOVE_DISABLE,
+ MOVE_ENCORE,
+ MOVE_EXTRASENSORY,
+ MOVE_FLAIL,
+ MOVE_FREEZE_DRY,
+ MOVE_HOWL,
+ MOVE_HYPNOSIS,
+ MOVE_MOONBLAST,
+ MOVE_POWER_SWAP,
+ MOVE_SPITE,
+ MOVE_SECRET_POWER,
+ MOVE_TAIL_SLAP,
+ MOVE_UNAVAILABLE,
+};
#endif //P_ALOLAN_FORMS
#endif //P_FAMILY_VULPIX
#if P_FAMILY_JIGGLYPUFF
#if P_GEN_2_CROSS_EVOS
- egg_moves(IGGLYBUFF,
- MOVE_PERISH_SONG,
- MOVE_PRESENT,
- MOVE_FEINT_ATTACK,
- MOVE_WISH,
- MOVE_FAKE_TEARS,
- MOVE_LAST_RESORT,
- MOVE_COVET,
- MOVE_GRAVITY,
- MOVE_SLEEP_TALK,
- MOVE_CAPTIVATE,
- MOVE_PUNISHMENT,
- MOVE_MISTY_TERRAIN,
- MOVE_HEAL_PULSE),
+static const u16 sIgglybuffEggMoveLearnset[] = {
+ MOVE_PERISH_SONG,
+ MOVE_PRESENT,
+ MOVE_FEINT_ATTACK,
+ MOVE_WISH,
+ MOVE_FAKE_TEARS,
+ MOVE_LAST_RESORT,
+ MOVE_COVET,
+ MOVE_GRAVITY,
+ MOVE_SLEEP_TALK,
+ MOVE_CAPTIVATE,
+ MOVE_PUNISHMENT,
+ MOVE_MISTY_TERRAIN,
+ MOVE_HEAL_PULSE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_GEN_2_CROSS_EVOS
#endif //P_FAMILY_JIGGLYPUFF
#if P_FAMILY_ZUBAT
- egg_moves(ZUBAT,
- MOVE_QUICK_ATTACK,
- MOVE_PURSUIT,
- MOVE_FEINT_ATTACK,
- MOVE_GUST,
- MOVE_WHIRLWIND,
- MOVE_CURSE,
- MOVE_NASTY_PLOT,
- MOVE_HYPNOSIS,
- MOVE_ZEN_HEADBUTT,
- MOVE_BRAVE_BIRD,
- MOVE_GIGA_DRAIN,
- MOVE_STEEL_WING,
- MOVE_DEFOG,
- MOVE_VENOM_DRENCH),
+static const u16 sZubatEggMoveLearnset[] = {
+ MOVE_QUICK_ATTACK,
+ MOVE_PURSUIT,
+ MOVE_FEINT_ATTACK,
+ MOVE_GUST,
+ MOVE_WHIRLWIND,
+ MOVE_CURSE,
+ MOVE_NASTY_PLOT,
+ MOVE_HYPNOSIS,
+ MOVE_ZEN_HEADBUTT,
+ MOVE_BRAVE_BIRD,
+ MOVE_GIGA_DRAIN,
+ MOVE_STEEL_WING,
+ MOVE_DEFOG,
+ MOVE_VENOM_DRENCH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_ZUBAT
#if P_FAMILY_ODDISH
- egg_moves(ODDISH,
- MOVE_RAZOR_LEAF,
- MOVE_FLAIL,
- MOVE_SYNTHESIS,
- MOVE_CHARM,
- MOVE_INGRAIN,
- MOVE_TICKLE,
- MOVE_TEETER_DANCE,
- MOVE_SECRET_POWER,
- MOVE_NATURE_POWER,
- MOVE_AFTER_YOU,
- MOVE_STRENGTH_SAP),
+static const u16 sOddishEggMoveLearnset[] = {
+ MOVE_RAZOR_LEAF,
+ MOVE_FLAIL,
+ MOVE_SYNTHESIS,
+ MOVE_CHARM,
+ MOVE_INGRAIN,
+ MOVE_TICKLE,
+ MOVE_TEETER_DANCE,
+ MOVE_SECRET_POWER,
+ MOVE_NATURE_POWER,
+ MOVE_AFTER_YOU,
+ MOVE_STRENGTH_SAP,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_ODDISH
#if P_FAMILY_PARAS
- egg_moves(PARAS,
- MOVE_SCREECH,
- MOVE_COUNTER,
- MOVE_PSYBEAM,
- MOVE_FLAIL,
- MOVE_SWEET_SCENT,
- MOVE_PURSUIT,
- MOVE_METAL_CLAW,
- MOVE_BUG_BITE,
- MOVE_CROSS_POISON,
- MOVE_AGILITY,
- MOVE_ENDURE,
- MOVE_NATURAL_GIFT,
- MOVE_LEECH_SEED,
- MOVE_WIDE_GUARD,
- MOVE_ROTOTILLER,
- MOVE_FELL_STINGER,
- MOVE_GRASSY_TERRAIN),
+static const u16 sParasEggMoveLearnset[] = {
+ MOVE_SCREECH,
+ MOVE_COUNTER,
+ MOVE_PSYBEAM,
+ MOVE_FLAIL,
+ MOVE_SWEET_SCENT,
+ MOVE_PURSUIT,
+ MOVE_METAL_CLAW,
+ MOVE_BUG_BITE,
+ MOVE_CROSS_POISON,
+ MOVE_AGILITY,
+ MOVE_ENDURE,
+ MOVE_NATURAL_GIFT,
+ MOVE_LEECH_SEED,
+ MOVE_WIDE_GUARD,
+ MOVE_ROTOTILLER,
+ MOVE_FELL_STINGER,
+ MOVE_GRASSY_TERRAIN,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_PARAS
#if P_FAMILY_VENONAT
- egg_moves(VENONAT,
- MOVE_BATON_PASS,
- MOVE_SCREECH,
- MOVE_GIGA_DRAIN,
- MOVE_SIGNAL_BEAM,
- MOVE_AGILITY,
- MOVE_MORNING_SUN,
- MOVE_TOXIC_SPIKES,
- MOVE_BUG_BITE,
- MOVE_SECRET_POWER,
- MOVE_SKILL_SWAP,
- MOVE_RAGE_POWDER),
+static const u16 sVenonatEggMoveLearnset[] = {
+ MOVE_BATON_PASS,
+ MOVE_SCREECH,
+ MOVE_GIGA_DRAIN,
+ MOVE_SIGNAL_BEAM,
+ MOVE_AGILITY,
+ MOVE_MORNING_SUN,
+ MOVE_TOXIC_SPIKES,
+ MOVE_BUG_BITE,
+ MOVE_SECRET_POWER,
+ MOVE_SKILL_SWAP,
+ MOVE_RAGE_POWDER,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_VENONAT
#if P_FAMILY_DIGLETT
- egg_moves(DIGLETT,
- MOVE_FEINT_ATTACK,
- MOVE_SCREECH,
- MOVE_ANCIENT_POWER,
- MOVE_PURSUIT,
- MOVE_BEAT_UP,
- MOVE_UPROAR,
- MOVE_MUD_BOMB,
- MOVE_ASTONISH,
- MOVE_REVERSAL,
- MOVE_HEADBUTT,
- MOVE_ENDURE,
- MOVE_FINAL_GAMBIT,
- MOVE_MEMENTO),
+static const u16 sDiglettEggMoveLearnset[] = {
+ MOVE_FEINT_ATTACK,
+ MOVE_SCREECH,
+ MOVE_ANCIENT_POWER,
+ MOVE_PURSUIT,
+ MOVE_BEAT_UP,
+ MOVE_UPROAR,
+ MOVE_MUD_BOMB,
+ MOVE_ASTONISH,
+ MOVE_REVERSAL,
+ MOVE_HEADBUTT,
+ MOVE_ENDURE,
+ MOVE_FINAL_GAMBIT,
+ MOVE_MEMENTO,
+ MOVE_UNAVAILABLE,
+};
#if P_ALOLAN_FORMS
- egg_moves(DIGLETT_ALOLAN,
- MOVE_ANCIENT_POWER,
- MOVE_BEAT_UP,
- MOVE_ENDURE,
- MOVE_FEINT_ATTACK,
- MOVE_FINAL_GAMBIT,
- MOVE_HEADBUTT,
- MOVE_MEMENTO,
- MOVE_METAL_SOUND,
- MOVE_PURSUIT,
- MOVE_REVERSAL,
- MOVE_THRASH),
+static const u16 sDiglettAlolanEggMoveLearnset[] = {
+ MOVE_ANCIENT_POWER,
+ MOVE_BEAT_UP,
+ MOVE_ENDURE,
+ MOVE_FEINT_ATTACK,
+ MOVE_FINAL_GAMBIT,
+ MOVE_HEADBUTT,
+ MOVE_MEMENTO,
+ MOVE_METAL_SOUND,
+ MOVE_PURSUIT,
+ MOVE_REVERSAL,
+ MOVE_THRASH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_ALOLAN_FORMS
#endif //P_FAMILY_DIGLETT
#if P_FAMILY_MEOWTH
- egg_moves(MEOWTH,
- MOVE_SPITE,
- MOVE_CHARM,
- MOVE_HYPNOSIS,
- MOVE_AMNESIA,
- MOVE_ASSIST,
- MOVE_ODOR_SLEUTH,
- MOVE_FLAIL,
- MOVE_LAST_RESORT,
- MOVE_PUNISHMENT,
- MOVE_TAIL_WHIP,
- MOVE_SNATCH,
- MOVE_IRON_TAIL,
- MOVE_FOUL_PLAY),
+static const u16 sMeowthEggMoveLearnset[] = {
+ MOVE_SPITE,
+ MOVE_CHARM,
+ MOVE_HYPNOSIS,
+ MOVE_AMNESIA,
+ MOVE_ASSIST,
+ MOVE_ODOR_SLEUTH,
+ MOVE_FLAIL,
+ MOVE_LAST_RESORT,
+ MOVE_PUNISHMENT,
+ MOVE_TAIL_WHIP,
+ MOVE_SNATCH,
+ MOVE_IRON_TAIL,
+ MOVE_FOUL_PLAY,
+ MOVE_UNAVAILABLE,
+};
#if P_ALOLAN_FORMS
- egg_moves(MEOWTH_ALOLAN,
- MOVE_AMNESIA,
- MOVE_ASSIST,
- MOVE_CHARM,
- MOVE_COVET,
- MOVE_FLAIL,
- MOVE_FLATTER,
- MOVE_FOUL_PLAY,
- MOVE_HYPNOSIS,
- MOVE_PARTING_SHOT,
- MOVE_PUNISHMENT,
- MOVE_SNATCH,
- MOVE_SPITE),
+static const u16 sMeowthAlolanEggMoveLearnset[] = {
+ MOVE_AMNESIA,
+ MOVE_ASSIST,
+ MOVE_CHARM,
+ MOVE_COVET,
+ MOVE_FLAIL,
+ MOVE_FLATTER,
+ MOVE_FOUL_PLAY,
+ MOVE_HYPNOSIS,
+ MOVE_PARTING_SHOT,
+ MOVE_PUNISHMENT,
+ MOVE_SNATCH,
+ MOVE_SPITE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_ALOLAN_FORMS
#if P_GALARIAN_FORMS
- egg_moves(MEOWTH_GALARIAN,
- MOVE_SPITE,
- MOVE_DOUBLE_EDGE,
- MOVE_CURSE,
- MOVE_FLAIL,
- MOVE_NIGHT_SLASH,
- MOVE_COVET),
+static const u16 sMeowthGalarianEggMoveLearnset[] = {
+ MOVE_SPITE,
+ MOVE_DOUBLE_EDGE,
+ MOVE_CURSE,
+ MOVE_FLAIL,
+ MOVE_NIGHT_SLASH,
+ MOVE_COVET,
+ MOVE_UNAVAILABLE,
+};
#endif //P_GALARIAN_FORMS
#endif //P_FAMILY_MEOWTH
#if P_FAMILY_PSYDUCK
- egg_moves(PSYDUCK,
- MOVE_HYPNOSIS,
- MOVE_PSYBEAM,
- MOVE_FORESIGHT,
- MOVE_FUTURE_SIGHT,
- MOVE_CROSS_CHOP,
- MOVE_REFRESH,
- MOVE_CONFUSE_RAY,
- MOVE_YAWN,
- MOVE_MUD_BOMB,
- MOVE_ENCORE,
- MOVE_SECRET_POWER,
- MOVE_SLEEP_TALK,
- MOVE_SYNCHRONOISE,
- MOVE_SIMPLE_BEAM,
- MOVE_CLEAR_SMOG),
+static const u16 sPsyduckEggMoveLearnset[] = {
+ MOVE_HYPNOSIS,
+ MOVE_PSYBEAM,
+ MOVE_FORESIGHT,
+ MOVE_FUTURE_SIGHT,
+ MOVE_CROSS_CHOP,
+ MOVE_REFRESH,
+ MOVE_CONFUSE_RAY,
+ MOVE_YAWN,
+ MOVE_MUD_BOMB,
+ MOVE_ENCORE,
+ MOVE_SECRET_POWER,
+ MOVE_SLEEP_TALK,
+ MOVE_SYNCHRONOISE,
+ MOVE_SIMPLE_BEAM,
+ MOVE_CLEAR_SMOG,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_PSYDUCK
#if P_FAMILY_MANKEY
- egg_moves(MANKEY,
- MOVE_FORESIGHT,
- MOVE_MEDITATE,
- MOVE_COUNTER,
- MOVE_REVERSAL,
- MOVE_BEAT_UP,
- MOVE_REVENGE,
- MOVE_SMELLING_SALTS,
- MOVE_CLOSE_COMBAT,
- MOVE_ENCORE,
- MOVE_FOCUS_PUNCH,
- MOVE_SLEEP_TALK,
- MOVE_NIGHT_SLASH,
- MOVE_POWER_TRIP),
+static const u16 sMankeyEggMoveLearnset[] = {
+ MOVE_FORESIGHT,
+ MOVE_MEDITATE,
+ MOVE_COUNTER,
+ MOVE_REVERSAL,
+ MOVE_BEAT_UP,
+ MOVE_REVENGE,
+ MOVE_SMELLING_SALTS,
+ MOVE_CLOSE_COMBAT,
+ MOVE_ENCORE,
+ MOVE_FOCUS_PUNCH,
+ MOVE_SLEEP_TALK,
+ MOVE_NIGHT_SLASH,
+ MOVE_POWER_TRIP,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_MANKEY
#if P_FAMILY_GROWLITHE
- egg_moves(GROWLITHE,
- MOVE_BODY_SLAM,
- MOVE_CRUNCH,
- MOVE_THRASH,
- MOVE_FIRE_SPIN,
- MOVE_HOWL,
- MOVE_HEAT_WAVE,
- MOVE_DOUBLE_EDGE,
- MOVE_FLARE_BLITZ,
- MOVE_MORNING_SUN,
- MOVE_COVET,
- MOVE_IRON_TAIL,
- MOVE_DOUBLE_KICK,
- MOVE_CLOSE_COMBAT,
- MOVE_BURN_UP),
+static const u16 sGrowlitheEggMoveLearnset[] = {
+ MOVE_BODY_SLAM,
+ MOVE_CRUNCH,
+ MOVE_THRASH,
+ MOVE_FIRE_SPIN,
+ MOVE_HOWL,
+ MOVE_HEAT_WAVE,
+ MOVE_DOUBLE_EDGE,
+ MOVE_FLARE_BLITZ,
+ MOVE_MORNING_SUN,
+ MOVE_COVET,
+ MOVE_IRON_TAIL,
+ MOVE_DOUBLE_KICK,
+ MOVE_CLOSE_COMBAT,
+ MOVE_BURN_UP,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_GROWLITHE
#if P_FAMILY_POLIWAG
- egg_moves(POLIWAG,
- MOVE_MIST,
- MOVE_SPLASH,
- MOVE_BUBBLE_BEAM,
- MOVE_HAZE,
- MOVE_MIND_READER,
- MOVE_WATER_SPORT,
- MOVE_ICE_BALL,
- MOVE_MUD_SHOT,
- MOVE_REFRESH,
- MOVE_ENDEAVOR,
- MOVE_ENCORE,
- MOVE_ENDURE,
- MOVE_WATER_PULSE),
+static const u16 sPoliwagEggMoveLearnset[] = {
+ MOVE_MIST,
+ MOVE_SPLASH,
+ MOVE_BUBBLE_BEAM,
+ MOVE_HAZE,
+ MOVE_MIND_READER,
+ MOVE_WATER_SPORT,
+ MOVE_ICE_BALL,
+ MOVE_MUD_SHOT,
+ MOVE_REFRESH,
+ MOVE_ENDEAVOR,
+ MOVE_ENCORE,
+ MOVE_ENDURE,
+ MOVE_WATER_PULSE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_POLIWAG
#if P_FAMILY_ABRA
- egg_moves(ABRA,
- MOVE_ENCORE,
- MOVE_BARRIER,
- MOVE_KNOCK_OFF,
- MOVE_FIRE_PUNCH,
- MOVE_THUNDER_PUNCH,
- MOVE_ICE_PUNCH,
- MOVE_POWER_TRICK,
- MOVE_GUARD_SWAP,
- MOVE_SKILL_SWAP,
- MOVE_GUARD_SPLIT,
- MOVE_PSYCHO_SHIFT,
- MOVE_ALLY_SWITCH,
- MOVE_PSYCHIC_TERRAIN),
+static const u16 sAbraEggMoveLearnset[] = {
+ MOVE_ENCORE,
+ MOVE_BARRIER,
+ MOVE_KNOCK_OFF,
+ MOVE_FIRE_PUNCH,
+ MOVE_THUNDER_PUNCH,
+ MOVE_ICE_PUNCH,
+ MOVE_POWER_TRICK,
+ MOVE_GUARD_SWAP,
+ MOVE_SKILL_SWAP,
+ MOVE_GUARD_SPLIT,
+ MOVE_PSYCHO_SHIFT,
+ MOVE_ALLY_SWITCH,
+ MOVE_PSYCHIC_TERRAIN,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_ABRA
#if P_FAMILY_MACHOP
- egg_moves(MACHOP,
- MOVE_MEDITATE,
- MOVE_ROLLING_KICK,
- MOVE_ENCORE,
- MOVE_SMELLING_SALTS,
- MOVE_COUNTER,
- MOVE_CLOSE_COMBAT,
- MOVE_FIRE_PUNCH,
- MOVE_THUNDER_PUNCH,
- MOVE_ICE_PUNCH,
- MOVE_BULLET_PUNCH,
- MOVE_POWER_TRICK,
- MOVE_HEAVY_SLAM,
- MOVE_KNOCK_OFF,
- MOVE_TICKLE,
- MOVE_QUICK_GUARD),
+static const u16 sMachopEggMoveLearnset[] = {
+ MOVE_MEDITATE,
+ MOVE_ROLLING_KICK,
+ MOVE_ENCORE,
+ MOVE_SMELLING_SALTS,
+ MOVE_COUNTER,
+ MOVE_CLOSE_COMBAT,
+ MOVE_FIRE_PUNCH,
+ MOVE_THUNDER_PUNCH,
+ MOVE_ICE_PUNCH,
+ MOVE_BULLET_PUNCH,
+ MOVE_POWER_TRICK,
+ MOVE_HEAVY_SLAM,
+ MOVE_KNOCK_OFF,
+ MOVE_TICKLE,
+ MOVE_QUICK_GUARD,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_MACHOP
#if P_FAMILY_BELLSPROUT
- egg_moves(BELLSPROUT,
- MOVE_ENCORE,
- MOVE_SYNTHESIS,
- MOVE_LEECH_LIFE,
- MOVE_INGRAIN,
- MOVE_MAGICAL_LEAF,
- MOVE_WORRY_SEED,
- MOVE_TICKLE,
- MOVE_WEATHER_BALL,
- MOVE_BULLET_SEED,
- MOVE_NATURAL_GIFT,
- MOVE_GIGA_DRAIN,
- MOVE_CLEAR_SMOG,
- MOVE_POWER_WHIP,
- MOVE_ACID_SPRAY,
- MOVE_BELCH,
- MOVE_STRENGTH_SAP),
+static const u16 sBellsproutEggMoveLearnset[] = {
+ MOVE_ENCORE,
+ MOVE_SYNTHESIS,
+ MOVE_LEECH_LIFE,
+ MOVE_INGRAIN,
+ MOVE_MAGICAL_LEAF,
+ MOVE_WORRY_SEED,
+ MOVE_TICKLE,
+ MOVE_WEATHER_BALL,
+ MOVE_BULLET_SEED,
+ MOVE_NATURAL_GIFT,
+ MOVE_GIGA_DRAIN,
+ MOVE_CLEAR_SMOG,
+ MOVE_POWER_WHIP,
+ MOVE_ACID_SPRAY,
+ MOVE_BELCH,
+ MOVE_STRENGTH_SAP,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_BELLSPROUT
#if P_FAMILY_TENTACOOL
- egg_moves(TENTACOOL,
- MOVE_AURORA_BEAM,
- MOVE_MIRROR_COAT,
- MOVE_RAPID_SPIN,
- MOVE_HAZE,
- MOVE_CONFUSE_RAY,
- MOVE_KNOCK_OFF,
- MOVE_ACUPRESSURE,
- MOVE_MUDDY_WATER,
- MOVE_BUBBLE,
- MOVE_AQUA_RING,
- MOVE_TICKLE),
+static const u16 sTentacoolEggMoveLearnset[] = {
+ MOVE_AURORA_BEAM,
+ MOVE_MIRROR_COAT,
+ MOVE_RAPID_SPIN,
+ MOVE_HAZE,
+ MOVE_CONFUSE_RAY,
+ MOVE_KNOCK_OFF,
+ MOVE_ACUPRESSURE,
+ MOVE_MUDDY_WATER,
+ MOVE_BUBBLE,
+ MOVE_AQUA_RING,
+ MOVE_TICKLE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_TENTACOOL
#if P_FAMILY_GEODUDE
- egg_moves(GEODUDE,
- MOVE_MEGA_PUNCH,
- MOVE_BLOCK,
- MOVE_HAMMER_ARM,
- MOVE_FLAIL,
- MOVE_CURSE,
- MOVE_FOCUS_PUNCH,
- MOVE_ROCK_CLIMB,
- MOVE_ENDURE,
- MOVE_AUTOTOMIZE,
- MOVE_WIDE_GUARD),
+static const u16 sGeodudeEggMoveLearnset[] = {
+ MOVE_MEGA_PUNCH,
+ MOVE_BLOCK,
+ MOVE_HAMMER_ARM,
+ MOVE_FLAIL,
+ MOVE_CURSE,
+ MOVE_FOCUS_PUNCH,
+ MOVE_ROCK_CLIMB,
+ MOVE_ENDURE,
+ MOVE_AUTOTOMIZE,
+ MOVE_WIDE_GUARD,
+ MOVE_UNAVAILABLE,
+};
#if P_ALOLAN_FORMS
- egg_moves(GEODUDE_ALOLAN,
- MOVE_AUTOTOMIZE,
- MOVE_BLOCK,
- MOVE_COUNTER,
- MOVE_CURSE,
- MOVE_ENDURE,
- MOVE_FLAIL,
- MOVE_MAGNET_RISE,
- MOVE_ROCK_CLIMB,
- MOVE_SCREECH,
- MOVE_WIDE_GUARD),
+static const u16 sGeodudeAlolanEggMoveLearnset[] = {
+ MOVE_AUTOTOMIZE,
+ MOVE_BLOCK,
+ MOVE_COUNTER,
+ MOVE_CURSE,
+ MOVE_ENDURE,
+ MOVE_FLAIL,
+ MOVE_MAGNET_RISE,
+ MOVE_ROCK_CLIMB,
+ MOVE_SCREECH,
+ MOVE_WIDE_GUARD,
+ MOVE_UNAVAILABLE,
+};
#endif //P_ALOLAN_FORMS
#endif //P_FAMILY_GEODUDE
#if P_FAMILY_PONYTA
- egg_moves(PONYTA,
- MOVE_FLAME_WHEEL,
- MOVE_THRASH,
- MOVE_DOUBLE_KICK,
- MOVE_HYPNOSIS,
- MOVE_CHARM,
- MOVE_DOUBLE_EDGE,
- MOVE_HORN_DRILL,
- MOVE_MORNING_SUN,
- MOVE_LOW_KICK,
- MOVE_CAPTIVATE,
- MOVE_ALLY_SWITCH,
- MOVE_HIGH_HORSEPOWER),
+static const u16 sPonytaEggMoveLearnset[] = {
+ MOVE_FLAME_WHEEL,
+ MOVE_THRASH,
+ MOVE_DOUBLE_KICK,
+ MOVE_HYPNOSIS,
+ MOVE_CHARM,
+ MOVE_DOUBLE_EDGE,
+ MOVE_HORN_DRILL,
+ MOVE_MORNING_SUN,
+ MOVE_LOW_KICK,
+ MOVE_CAPTIVATE,
+ MOVE_ALLY_SWITCH,
+ MOVE_HIGH_HORSEPOWER,
+ MOVE_UNAVAILABLE,
+};
#if P_GALARIAN_FORMS
- egg_moves(PONYTA_GALARIAN,
- MOVE_THRASH,
- MOVE_DOUBLE_KICK,
- MOVE_HYPNOSIS,
- MOVE_DOUBLE_EDGE,
- MOVE_HORN_DRILL,
- MOVE_MORNING_SUN),
+static const u16 sPonytaGalarianEggMoveLearnset[] = {
+ MOVE_THRASH,
+ MOVE_DOUBLE_KICK,
+ MOVE_HYPNOSIS,
+ MOVE_DOUBLE_EDGE,
+ MOVE_HORN_DRILL,
+ MOVE_MORNING_SUN,
+ MOVE_UNAVAILABLE,
+};
#endif //P_GALARIAN_FORMS
#endif //P_FAMILY_PONYTA
#if P_FAMILY_SLOWPOKE
- egg_moves(SLOWPOKE,
- MOVE_BELLY_DRUM,
- MOVE_FUTURE_SIGHT,
- MOVE_STOMP,
- MOVE_MUD_SPORT,
- MOVE_SLEEP_TALK,
- MOVE_SNORE,
- MOVE_ME_FIRST,
- MOVE_BLOCK,
- MOVE_ZEN_HEADBUTT,
- MOVE_WONDER_ROOM,
- MOVE_BELCH),
+static const u16 sSlowpokeEggMoveLearnset[] = {
+ MOVE_BELLY_DRUM,
+ MOVE_FUTURE_SIGHT,
+ MOVE_STOMP,
+ MOVE_MUD_SPORT,
+ MOVE_SLEEP_TALK,
+ MOVE_SNORE,
+ MOVE_ME_FIRST,
+ MOVE_BLOCK,
+ MOVE_ZEN_HEADBUTT,
+ MOVE_WONDER_ROOM,
+ MOVE_BELCH,
+ MOVE_UNAVAILABLE,
+};
#if P_GALARIAN_FORMS
- egg_moves(SLOWPOKE_GALARIAN,
- MOVE_BELCH,
- MOVE_BELLY_DRUM,
- MOVE_BLOCK,
- MOVE_STOMP),
+static const u16 sSlowpokeGalarianEggMoveLearnset[] = {
+ MOVE_BELCH,
+ MOVE_BELLY_DRUM,
+ MOVE_BLOCK,
+ MOVE_STOMP,
+ MOVE_UNAVAILABLE,
+};
#endif //P_GALARIAN_FORMS
#endif //P_FAMILY_SLOWPOKE
#if P_FAMILY_FARFETCHD
- egg_moves(FARFETCHD,
- MOVE_STEEL_WING,
- MOVE_FORESIGHT,
- MOVE_MIRROR_MOVE,
- MOVE_GUST,
- MOVE_QUICK_ATTACK,
- MOVE_FLAIL,
- MOVE_FEATHER_DANCE,
- MOVE_CURSE,
- MOVE_COVET,
- MOVE_MUD_SLAP,
- MOVE_NIGHT_SLASH,
- MOVE_LEAF_BLADE,
- MOVE_REVENGE,
- MOVE_ROOST,
- MOVE_TRUMP_CARD,
- MOVE_SIMPLE_BEAM,
- MOVE_FIRST_IMPRESSION,
- MOVE_FINAL_GAMBIT),
+static const u16 sFarfetchdEggMoveLearnset[] = {
+ MOVE_STEEL_WING,
+ MOVE_FORESIGHT,
+ MOVE_MIRROR_MOVE,
+ MOVE_GUST,
+ MOVE_QUICK_ATTACK,
+ MOVE_FLAIL,
+ MOVE_FEATHER_DANCE,
+ MOVE_CURSE,
+ MOVE_COVET,
+ MOVE_MUD_SLAP,
+ MOVE_NIGHT_SLASH,
+ MOVE_LEAF_BLADE,
+ MOVE_REVENGE,
+ MOVE_ROOST,
+ MOVE_TRUMP_CARD,
+ MOVE_SIMPLE_BEAM,
+ MOVE_FIRST_IMPRESSION,
+ MOVE_FINAL_GAMBIT,
+ MOVE_UNAVAILABLE,
+};
#if P_GALARIAN_FORMS
- egg_moves(FARFETCHD_GALARIAN,
- MOVE_COUNTER,
- MOVE_QUICK_ATTACK,
- MOVE_FLAIL,
- MOVE_QUICK_GUARD,
- MOVE_CURSE,
- MOVE_COVET,
- MOVE_NIGHT_SLASH,
- MOVE_SIMPLE_BEAM,
- MOVE_DOUBLE_EDGE,
- MOVE_FEINT,
- MOVE_SKY_ATTACK),
+static const u16 sFarfetchdGalarianEggMoveLearnset[] = {
+ MOVE_COUNTER,
+ MOVE_QUICK_ATTACK,
+ MOVE_FLAIL,
+ MOVE_QUICK_GUARD,
+ MOVE_CURSE,
+ MOVE_COVET,
+ MOVE_NIGHT_SLASH,
+ MOVE_SIMPLE_BEAM,
+ MOVE_DOUBLE_EDGE,
+ MOVE_FEINT,
+ MOVE_SKY_ATTACK,
+ MOVE_UNAVAILABLE,
+};
#endif //P_GALARIAN_FORMS
#endif //P_FAMILY_FARFETCHD
#if P_FAMILY_DODUO
- egg_moves(DODUO,
- MOVE_QUICK_ATTACK,
- MOVE_SUPERSONIC,
- MOVE_HAZE,
- MOVE_FEINT_ATTACK,
- MOVE_FLAIL,
- MOVE_ENDEAVOR,
- MOVE_MIRROR_MOVE,
- MOVE_BRAVE_BIRD,
- MOVE_NATURAL_GIFT,
- MOVE_ASSURANCE),
+static const u16 sDoduoEggMoveLearnset[] = {
+ MOVE_QUICK_ATTACK,
+ MOVE_SUPERSONIC,
+ MOVE_HAZE,
+ MOVE_FEINT_ATTACK,
+ MOVE_FLAIL,
+ MOVE_ENDEAVOR,
+ MOVE_MIRROR_MOVE,
+ MOVE_BRAVE_BIRD,
+ MOVE_NATURAL_GIFT,
+ MOVE_ASSURANCE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_DODUO
#if P_FAMILY_SEEL
- egg_moves(SEEL,
- MOVE_LICK,
- MOVE_PERISH_SONG,
- MOVE_DISABLE,
- MOVE_HORN_DRILL,
- MOVE_SLAM,
- MOVE_ENCORE,
- MOVE_FAKE_OUT,
- MOVE_ICICLE_SPEAR,
- MOVE_SIGNAL_BEAM,
- MOVE_STOCKPILE,
- MOVE_SWALLOW,
- MOVE_SPIT_UP,
- MOVE_WATER_PULSE,
- MOVE_IRON_TAIL,
- MOVE_SLEEP_TALK,
- MOVE_BELCH,
- MOVE_ENTRAINMENT),
+static const u16 sSeelEggMoveLearnset[] = {
+ MOVE_LICK,
+ MOVE_PERISH_SONG,
+ MOVE_DISABLE,
+ MOVE_HORN_DRILL,
+ MOVE_SLAM,
+ MOVE_ENCORE,
+ MOVE_FAKE_OUT,
+ MOVE_ICICLE_SPEAR,
+ MOVE_SIGNAL_BEAM,
+ MOVE_STOCKPILE,
+ MOVE_SWALLOW,
+ MOVE_SPIT_UP,
+ MOVE_WATER_PULSE,
+ MOVE_IRON_TAIL,
+ MOVE_SLEEP_TALK,
+ MOVE_BELCH,
+ MOVE_ENTRAINMENT,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SEEL
#if P_FAMILY_GRIMER
- egg_moves(GRIMER,
- MOVE_HAZE,
- MOVE_MEAN_LOOK,
- MOVE_LICK,
- MOVE_IMPRISON,
- MOVE_CURSE,
- MOVE_SHADOW_PUNCH,
- MOVE_SHADOW_SNEAK,
- MOVE_STOCKPILE,
- MOVE_SWALLOW,
- MOVE_SPIT_UP,
- MOVE_SCARY_FACE,
- MOVE_ACID_SPRAY,
- MOVE_POWER_UP_PUNCH),
+static const u16 sGrimerEggMoveLearnset[] = {
+ MOVE_HAZE,
+ MOVE_MEAN_LOOK,
+ MOVE_LICK,
+ MOVE_IMPRISON,
+ MOVE_CURSE,
+ MOVE_SHADOW_PUNCH,
+ MOVE_SHADOW_SNEAK,
+ MOVE_STOCKPILE,
+ MOVE_SWALLOW,
+ MOVE_SPIT_UP,
+ MOVE_SCARY_FACE,
+ MOVE_ACID_SPRAY,
+ MOVE_POWER_UP_PUNCH,
+ MOVE_UNAVAILABLE,
+};
#if P_ALOLAN_FORMS
- egg_moves(GRIMER_ALOLAN,
- MOVE_ASSURANCE,
- MOVE_CLEAR_SMOG,
- MOVE_CURSE,
- MOVE_IMPRISON,
- MOVE_MEAN_LOOK,
- MOVE_POWER_UP_PUNCH,
- MOVE_PURSUIT,
- MOVE_SCARY_FACE,
- MOVE_SHADOW_SNEAK,
- MOVE_SPITE,
- MOVE_SPIT_UP,
- MOVE_STOCKPILE,
- MOVE_SWALLOW),
+static const u16 sGrimerAlolanEggMoveLearnset[] = {
+ MOVE_ASSURANCE,
+ MOVE_CLEAR_SMOG,
+ MOVE_CURSE,
+ MOVE_IMPRISON,
+ MOVE_MEAN_LOOK,
+ MOVE_POWER_UP_PUNCH,
+ MOVE_PURSUIT,
+ MOVE_SCARY_FACE,
+ MOVE_SHADOW_SNEAK,
+ MOVE_SPITE,
+ MOVE_SPIT_UP,
+ MOVE_STOCKPILE,
+ MOVE_SWALLOW,
+ MOVE_UNAVAILABLE,
+};
#endif //P_ALOLAN_FORMS
#endif //P_FAMILY_GRIMER
#if P_FAMILY_SHELLDER
- egg_moves(SHELLDER,
- MOVE_BUBBLE_BEAM,
- MOVE_TAKE_DOWN,
- MOVE_BARRIER,
- MOVE_RAPID_SPIN,
- MOVE_SCREECH,
- MOVE_ICICLE_SPEAR,
- MOVE_MUD_SHOT,
- MOVE_ROCK_BLAST,
- MOVE_WATER_PULSE,
- MOVE_AQUA_RING,
- MOVE_AVALANCHE,
- MOVE_TWINEEDLE),
+static const u16 sShellderEggMoveLearnset[] = {
+ MOVE_BUBBLE_BEAM,
+ MOVE_TAKE_DOWN,
+ MOVE_BARRIER,
+ MOVE_RAPID_SPIN,
+ MOVE_SCREECH,
+ MOVE_ICICLE_SPEAR,
+ MOVE_MUD_SHOT,
+ MOVE_ROCK_BLAST,
+ MOVE_WATER_PULSE,
+ MOVE_AQUA_RING,
+ MOVE_AVALANCHE,
+ MOVE_TWINEEDLE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SHELLDER
#if P_FAMILY_GASTLY
- egg_moves(GASTLY,
- MOVE_PSYWAVE,
- MOVE_PERISH_SONG,
- MOVE_HAZE,
- MOVE_ASTONISH,
- MOVE_GRUDGE,
- MOVE_FIRE_PUNCH,
- MOVE_ICE_PUNCH,
- MOVE_THUNDER_PUNCH,
- MOVE_DISABLE,
- MOVE_SCARY_FACE,
- MOVE_CLEAR_SMOG,
- MOVE_SMOG,
- MOVE_REFLECT_TYPE),
+static const u16 sGastlyEggMoveLearnset[] = {
+ MOVE_PSYWAVE,
+ MOVE_PERISH_SONG,
+ MOVE_HAZE,
+ MOVE_ASTONISH,
+ MOVE_GRUDGE,
+ MOVE_FIRE_PUNCH,
+ MOVE_ICE_PUNCH,
+ MOVE_THUNDER_PUNCH,
+ MOVE_DISABLE,
+ MOVE_SCARY_FACE,
+ MOVE_CLEAR_SMOG,
+ MOVE_SMOG,
+ MOVE_REFLECT_TYPE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_GASTLY
#if P_FAMILY_ONIX
- egg_moves(ONIX,
- MOVE_FLAIL,
- MOVE_BLOCK,
- MOVE_DEFENSE_CURL,
- MOVE_ROLLOUT,
- MOVE_ROCK_BLAST,
- MOVE_ROCK_CLIMB,
- MOVE_HEAVY_SLAM,
- MOVE_STEALTH_ROCK,
- MOVE_ROTOTILLER,
- MOVE_WIDE_GUARD),
+static const u16 sOnixEggMoveLearnset[] = {
+ MOVE_FLAIL,
+ MOVE_BLOCK,
+ MOVE_DEFENSE_CURL,
+ MOVE_ROLLOUT,
+ MOVE_ROCK_BLAST,
+ MOVE_ROCK_CLIMB,
+ MOVE_HEAVY_SLAM,
+ MOVE_STEALTH_ROCK,
+ MOVE_ROTOTILLER,
+ MOVE_WIDE_GUARD,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_ONIX
#if P_FAMILY_DROWZEE
- egg_moves(DROWZEE,
- MOVE_BARRIER,
- MOVE_ASSIST,
- MOVE_ROLE_PLAY,
- MOVE_FIRE_PUNCH,
- MOVE_THUNDER_PUNCH,
- MOVE_ICE_PUNCH,
- MOVE_NASTY_PLOT,
- MOVE_FLATTER,
- MOVE_PSYCHO_CUT,
- MOVE_GUARD_SWAP,
- MOVE_SECRET_POWER,
- MOVE_SKILL_SWAP,
- MOVE_POWER_SPLIT,
- MOVE_PSYCHIC_TERRAIN),
+static const u16 sDrowzeeEggMoveLearnset[] = {
+ MOVE_BARRIER,
+ MOVE_ASSIST,
+ MOVE_ROLE_PLAY,
+ MOVE_FIRE_PUNCH,
+ MOVE_THUNDER_PUNCH,
+ MOVE_ICE_PUNCH,
+ MOVE_NASTY_PLOT,
+ MOVE_FLATTER,
+ MOVE_PSYCHO_CUT,
+ MOVE_GUARD_SWAP,
+ MOVE_SECRET_POWER,
+ MOVE_SKILL_SWAP,
+ MOVE_POWER_SPLIT,
+ MOVE_PSYCHIC_TERRAIN,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_DROWZEE
#if P_FAMILY_KRABBY
- egg_moves(KRABBY,
- MOVE_HAZE,
- MOVE_AMNESIA,
- MOVE_FLAIL,
- MOVE_SLAM,
- MOVE_KNOCK_OFF,
- MOVE_TICKLE,
- MOVE_ANCIENT_POWER,
- MOVE_AGILITY,
- MOVE_ENDURE,
- MOVE_CHIP_AWAY,
- MOVE_BIDE,
- MOVE_ALLY_SWITCH),
+static const u16 sKrabbyEggMoveLearnset[] = {
+ MOVE_HAZE,
+ MOVE_AMNESIA,
+ MOVE_FLAIL,
+ MOVE_SLAM,
+ MOVE_KNOCK_OFF,
+ MOVE_TICKLE,
+ MOVE_ANCIENT_POWER,
+ MOVE_AGILITY,
+ MOVE_ENDURE,
+ MOVE_CHIP_AWAY,
+ MOVE_BIDE,
+ MOVE_ALLY_SWITCH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_KRABBY
#if P_FAMILY_EXEGGCUTE
- egg_moves(EXEGGCUTE,
- MOVE_SYNTHESIS,
- MOVE_MOONLIGHT,
- MOVE_ANCIENT_POWER,
- MOVE_INGRAIN,
- MOVE_CURSE,
- MOVE_NATURE_POWER,
- MOVE_LUCKY_CHANT,
- MOVE_LEAF_STORM,
- MOVE_POWER_SWAP,
- MOVE_GIGA_DRAIN,
- MOVE_SKILL_SWAP,
- MOVE_NATURAL_GIFT,
- MOVE_BLOCK,
- MOVE_GRASSY_TERRAIN),
+static const u16 sExeggcuteEggMoveLearnset[] = {
+ MOVE_SYNTHESIS,
+ MOVE_MOONLIGHT,
+ MOVE_ANCIENT_POWER,
+ MOVE_INGRAIN,
+ MOVE_CURSE,
+ MOVE_NATURE_POWER,
+ MOVE_LUCKY_CHANT,
+ MOVE_LEAF_STORM,
+ MOVE_POWER_SWAP,
+ MOVE_GIGA_DRAIN,
+ MOVE_SKILL_SWAP,
+ MOVE_NATURAL_GIFT,
+ MOVE_BLOCK,
+ MOVE_GRASSY_TERRAIN,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_EXEGGCUTE
#if P_FAMILY_CUBONE
- egg_moves(CUBONE,
- MOVE_ANCIENT_POWER,
- MOVE_BELLY_DRUM,
- MOVE_SCREECH,
- MOVE_SKULL_BASH,
- MOVE_PERISH_SONG,
- MOVE_DOUBLE_KICK,
- MOVE_IRON_HEAD,
- MOVE_DETECT,
- MOVE_ENDURE,
- MOVE_CHIP_AWAY,
- MOVE_CURSE),
+static const u16 sCuboneEggMoveLearnset[] = {
+ MOVE_ANCIENT_POWER,
+ MOVE_BELLY_DRUM,
+ MOVE_SCREECH,
+ MOVE_SKULL_BASH,
+ MOVE_PERISH_SONG,
+ MOVE_DOUBLE_KICK,
+ MOVE_IRON_HEAD,
+ MOVE_DETECT,
+ MOVE_ENDURE,
+ MOVE_CHIP_AWAY,
+ MOVE_CURSE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_CUBONE
#if P_FAMILY_HITMONS
#if P_GEN_2_CROSS_EVOS
- egg_moves(TYROGUE,
- MOVE_RAPID_SPIN,
- MOVE_HIGH_JUMP_KICK,
- MOVE_MACH_PUNCH,
- MOVE_MIND_READER,
- MOVE_HELPING_HAND,
- MOVE_COUNTER,
- MOVE_VACUUM_WAVE,
- MOVE_BULLET_PUNCH,
- MOVE_ENDURE,
- MOVE_PURSUIT,
- MOVE_FEINT),
+static const u16 sTyrogueEggMoveLearnset[] = {
+ MOVE_RAPID_SPIN,
+ MOVE_HIGH_JUMP_KICK,
+ MOVE_MACH_PUNCH,
+ MOVE_MIND_READER,
+ MOVE_HELPING_HAND,
+ MOVE_COUNTER,
+ MOVE_VACUUM_WAVE,
+ MOVE_BULLET_PUNCH,
+ MOVE_ENDURE,
+ MOVE_PURSUIT,
+ MOVE_FEINT,
+ MOVE_UNAVAILABLE,
+};
#endif //P_GEN_2_CROSS_EVOS
#endif //P_FAMILY_HITMONS
#if P_FAMILY_LICKITUNG
- egg_moves(LICKITUNG,
- MOVE_BELLY_DRUM,
- MOVE_MAGNITUDE,
- MOVE_BODY_SLAM,
- MOVE_CURSE,
- MOVE_SMELLING_SALTS,
- MOVE_SLEEP_TALK,
- MOVE_SNORE,
- MOVE_AMNESIA,
- MOVE_HAMMER_ARM,
- MOVE_MUDDY_WATER,
- MOVE_ZEN_HEADBUTT,
- MOVE_BELCH,
- MOVE_THRASH),
+static const u16 sLickitungEggMoveLearnset[] = {
+ MOVE_BELLY_DRUM,
+ MOVE_MAGNITUDE,
+ MOVE_BODY_SLAM,
+ MOVE_CURSE,
+ MOVE_SMELLING_SALTS,
+ MOVE_SLEEP_TALK,
+ MOVE_SNORE,
+ MOVE_AMNESIA,
+ MOVE_HAMMER_ARM,
+ MOVE_MUDDY_WATER,
+ MOVE_ZEN_HEADBUTT,
+ MOVE_BELCH,
+ MOVE_THRASH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_LICKITUNG
#if P_FAMILY_KOFFING
- egg_moves(KOFFING,
- MOVE_SCREECH,
- MOVE_PSYWAVE,
- MOVE_PSYBEAM,
- MOVE_DESTINY_BOND,
- MOVE_PAIN_SPLIT,
- MOVE_GRUDGE,
- MOVE_SPITE,
- MOVE_CURSE,
- MOVE_STOCKPILE,
- MOVE_SWALLOW,
- MOVE_SPIT_UP,
- MOVE_TOXIC_SPIKES,
- MOVE_VENOM_DRENCH),
+static const u16 sKoffingEggMoveLearnset[] = {
+ MOVE_SCREECH,
+ MOVE_PSYWAVE,
+ MOVE_PSYBEAM,
+ MOVE_DESTINY_BOND,
+ MOVE_PAIN_SPLIT,
+ MOVE_GRUDGE,
+ MOVE_SPITE,
+ MOVE_CURSE,
+ MOVE_STOCKPILE,
+ MOVE_SWALLOW,
+ MOVE_SPIT_UP,
+ MOVE_TOXIC_SPIKES,
+ MOVE_VENOM_DRENCH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_KOFFING
#if P_FAMILY_RHYHORN
- egg_moves(RHYHORN,
- MOVE_CRUNCH,
- MOVE_REVERSAL,
- MOVE_COUNTER,
- MOVE_MAGNITUDE,
- MOVE_CURSE,
- MOVE_CRUSH_CLAW,
- MOVE_DRAGON_RUSH,
- MOVE_ICE_FANG,
- MOVE_FIRE_FANG,
- MOVE_THUNDER_FANG,
- MOVE_SKULL_BASH,
- MOVE_IRON_TAIL,
- MOVE_ROCK_CLIMB,
- MOVE_ROTOTILLER,
- MOVE_METAL_BURST,
- MOVE_GUARD_SPLIT),
+static const u16 sRhyhornEggMoveLearnset[] = {
+ MOVE_CRUNCH,
+ MOVE_REVERSAL,
+ MOVE_COUNTER,
+ MOVE_MAGNITUDE,
+ MOVE_CURSE,
+ MOVE_CRUSH_CLAW,
+ MOVE_DRAGON_RUSH,
+ MOVE_ICE_FANG,
+ MOVE_FIRE_FANG,
+ MOVE_THUNDER_FANG,
+ MOVE_SKULL_BASH,
+ MOVE_IRON_TAIL,
+ MOVE_ROCK_CLIMB,
+ MOVE_ROTOTILLER,
+ MOVE_METAL_BURST,
+ MOVE_GUARD_SPLIT,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_RHYHORN
#if P_FAMILY_CHANSEY
#if P_GEN_4_CROSS_EVOS
- egg_moves(HAPPINY,
- MOVE_PRESENT,
- MOVE_METRONOME,
- MOVE_HEAL_BELL,
- MOVE_AROMATHERAPY,
- MOVE_COUNTER,
- MOVE_HELPING_HAND,
- MOVE_GRAVITY,
- MOVE_LAST_RESORT,
- MOVE_MUD_BOMB,
- MOVE_NATURAL_GIFT,
- MOVE_ENDURE),
+static const u16 sHappinyEggMoveLearnset[] = {
+ MOVE_PRESENT,
+ MOVE_METRONOME,
+ MOVE_HEAL_BELL,
+ MOVE_AROMATHERAPY,
+ MOVE_COUNTER,
+ MOVE_HELPING_HAND,
+ MOVE_GRAVITY,
+ MOVE_LAST_RESORT,
+ MOVE_MUD_BOMB,
+ MOVE_NATURAL_GIFT,
+ MOVE_ENDURE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_GEN_4_CROSS_EVOS
- egg_moves(CHANSEY,
- MOVE_PRESENT,
- MOVE_METRONOME,
- MOVE_HEAL_BELL,
- MOVE_AROMATHERAPY,
- MOVE_COUNTER,
- MOVE_HELPING_HAND,
- MOVE_GRAVITY,
- MOVE_MUD_BOMB,
- MOVE_NATURAL_GIFT,
- MOVE_ENDURE,
- MOVE_SEISMIC_TOSS),
+static const u16 sChanseyEggMoveLearnset[] = {
+ MOVE_PRESENT,
+ MOVE_METRONOME,
+ MOVE_HEAL_BELL,
+ MOVE_AROMATHERAPY,
+ MOVE_COUNTER,
+ MOVE_HELPING_HAND,
+ MOVE_GRAVITY,
+ MOVE_MUD_BOMB,
+ MOVE_NATURAL_GIFT,
+ MOVE_ENDURE,
+ MOVE_SEISMIC_TOSS,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_CHANSEY
#if P_FAMILY_TANGELA
- egg_moves(TANGELA,
- MOVE_FLAIL,
- MOVE_CONFUSION,
- MOVE_MEGA_DRAIN,
- MOVE_AMNESIA,
- MOVE_LEECH_SEED,
- MOVE_NATURE_POWER,
- MOVE_ENDEAVOR,
- MOVE_LEAF_STORM,
- MOVE_POWER_SWAP,
- MOVE_GIGA_DRAIN,
- MOVE_RAGE_POWDER,
- MOVE_NATURAL_GIFT,
- MOVE_WAKE_UP_SLAP),
+static const u16 sTangelaEggMoveLearnset[] = {
+ MOVE_FLAIL,
+ MOVE_CONFUSION,
+ MOVE_MEGA_DRAIN,
+ MOVE_AMNESIA,
+ MOVE_LEECH_SEED,
+ MOVE_NATURE_POWER,
+ MOVE_ENDEAVOR,
+ MOVE_LEAF_STORM,
+ MOVE_POWER_SWAP,
+ MOVE_GIGA_DRAIN,
+ MOVE_RAGE_POWDER,
+ MOVE_NATURAL_GIFT,
+ MOVE_WAKE_UP_SLAP,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_TANGELA
#if P_FAMILY_KANGASKHAN
- egg_moves(KANGASKHAN,
- MOVE_STOMP,
- MOVE_FORESIGHT,
- MOVE_FOCUS_ENERGY,
- MOVE_DISABLE,
- MOVE_COUNTER,
- MOVE_CRUSH_CLAW,
- MOVE_DOUBLE_EDGE,
- MOVE_ENDEAVOR,
- MOVE_HAMMER_ARM,
- MOVE_FOCUS_PUNCH,
- MOVE_TRUMP_CARD,
- MOVE_UPROAR,
- MOVE_CIRCLE_THROW),
+static const u16 sKangaskhanEggMoveLearnset[] = {
+ MOVE_STOMP,
+ MOVE_FORESIGHT,
+ MOVE_FOCUS_ENERGY,
+ MOVE_DISABLE,
+ MOVE_COUNTER,
+ MOVE_CRUSH_CLAW,
+ MOVE_DOUBLE_EDGE,
+ MOVE_ENDEAVOR,
+ MOVE_HAMMER_ARM,
+ MOVE_FOCUS_PUNCH,
+ MOVE_TRUMP_CARD,
+ MOVE_UPROAR,
+ MOVE_CIRCLE_THROW,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_KANGASKHAN
#if P_FAMILY_HORSEA
- egg_moves(HORSEA,
- MOVE_FLAIL,
- MOVE_AURORA_BEAM,
- MOVE_OCTAZOOKA,
- MOVE_DISABLE,
- MOVE_SPLASH,
- MOVE_DRAGON_RAGE,
- MOVE_DRAGON_BREATH,
- MOVE_SIGNAL_BEAM,
- MOVE_RAZOR_WIND,
- MOVE_MUDDY_WATER,
- MOVE_WATER_PULSE,
- MOVE_CLEAR_SMOG,
- MOVE_OUTRAGE),
+static const u16 sHorseaEggMoveLearnset[] = {
+ MOVE_FLAIL,
+ MOVE_AURORA_BEAM,
+ MOVE_OCTAZOOKA,
+ MOVE_DISABLE,
+ MOVE_SPLASH,
+ MOVE_DRAGON_RAGE,
+ MOVE_DRAGON_BREATH,
+ MOVE_SIGNAL_BEAM,
+ MOVE_RAZOR_WIND,
+ MOVE_MUDDY_WATER,
+ MOVE_WATER_PULSE,
+ MOVE_CLEAR_SMOG,
+ MOVE_OUTRAGE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_HORSEA
#if P_FAMILY_GOLDEEN
- egg_moves(GOLDEEN,
- MOVE_PSYBEAM,
- MOVE_HAZE,
- MOVE_HYDRO_PUMP,
- MOVE_SLEEP_TALK,
- MOVE_MUD_SPORT,
- MOVE_MUD_SLAP,
- MOVE_AQUA_TAIL,
- MOVE_BODY_SLAM,
- MOVE_MUD_SHOT,
- MOVE_SKULL_BASH,
- MOVE_SIGNAL_BEAM),
+static const u16 sGoldeenEggMoveLearnset[] = {
+ MOVE_PSYBEAM,
+ MOVE_HAZE,
+ MOVE_HYDRO_PUMP,
+ MOVE_SLEEP_TALK,
+ MOVE_MUD_SPORT,
+ MOVE_MUD_SLAP,
+ MOVE_AQUA_TAIL,
+ MOVE_BODY_SLAM,
+ MOVE_MUD_SHOT,
+ MOVE_SKULL_BASH,
+ MOVE_SIGNAL_BEAM,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_GOLDEEN
#if P_FAMILY_MR_MIME
#if P_GEN_4_CROSS_EVOS
- egg_moves(MIME_JR,
- MOVE_FUTURE_SIGHT,
- MOVE_HYPNOSIS,
- MOVE_MIMIC,
- MOVE_FAKE_OUT,
- MOVE_TRICK,
- MOVE_CONFUSE_RAY,
- MOVE_WAKE_UP_SLAP,
- MOVE_TEETER_DANCE,
- MOVE_HEALING_WISH,
- MOVE_CHARM,
- MOVE_NASTY_PLOT,
- MOVE_POWER_SPLIT,
- MOVE_MAGIC_ROOM,
- MOVE_ICY_WIND,
- MOVE_PSYCHIC_TERRAIN),
+static const u16 sMimeJrEggMoveLearnset[] = {
+ MOVE_FUTURE_SIGHT,
+ MOVE_HYPNOSIS,
+ MOVE_MIMIC,
+ MOVE_FAKE_OUT,
+ MOVE_TRICK,
+ MOVE_CONFUSE_RAY,
+ MOVE_WAKE_UP_SLAP,
+ MOVE_TEETER_DANCE,
+ MOVE_HEALING_WISH,
+ MOVE_CHARM,
+ MOVE_NASTY_PLOT,
+ MOVE_POWER_SPLIT,
+ MOVE_MAGIC_ROOM,
+ MOVE_ICY_WIND,
+ MOVE_PSYCHIC_TERRAIN,
+ MOVE_UNAVAILABLE,
+};
#endif //P_GEN_4_CROSS_EVOS
- egg_moves(MR_MIME,
- MOVE_FUTURE_SIGHT,
- MOVE_HYPNOSIS,
- MOVE_MIMIC,
- MOVE_FAKE_OUT,
- MOVE_TRICK,
- MOVE_CONFUSE_RAY,
- MOVE_WAKE_UP_SLAP,
- MOVE_TEETER_DANCE,
- MOVE_NASTY_PLOT,
- MOVE_POWER_SPLIT,
- MOVE_MAGIC_ROOM,
- MOVE_ICY_WIND,
- MOVE_PSYCHIC_TERRAIN),
+static const u16 sMrMimeEggMoveLearnset[] = {
+ MOVE_FUTURE_SIGHT,
+ MOVE_HYPNOSIS,
+ MOVE_MIMIC,
+ MOVE_FAKE_OUT,
+ MOVE_TRICK,
+ MOVE_CONFUSE_RAY,
+ MOVE_WAKE_UP_SLAP,
+ MOVE_TEETER_DANCE,
+ MOVE_NASTY_PLOT,
+ MOVE_POWER_SPLIT,
+ MOVE_MAGIC_ROOM,
+ MOVE_ICY_WIND,
+ MOVE_PSYCHIC_TERRAIN,
+ MOVE_UNAVAILABLE,
+};
#if P_GALARIAN_FORMS
- egg_moves(MR_MIME_GALARIAN,
- MOVE_FAKE_OUT,
- MOVE_CONFUSE_RAY,
- MOVE_POWER_SPLIT,
- MOVE_TICKLE),
+static const u16 sMrMimeGalarianEggMoveLearnset[] = {
+ MOVE_FAKE_OUT,
+ MOVE_CONFUSE_RAY,
+ MOVE_POWER_SPLIT,
+ MOVE_TICKLE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_GALARIAN_FORMS
#endif //P_FAMILY_MR_MIME
#if P_FAMILY_SCYTHER
- egg_moves(SCYTHER,
- MOVE_COUNTER,
- MOVE_BATON_PASS,
- MOVE_RAZOR_WIND,
- MOVE_REVERSAL,
- MOVE_ENDURE,
- MOVE_SILVER_WIND,
- MOVE_BUG_BUZZ,
- MOVE_NIGHT_SLASH,
- MOVE_DEFOG,
- MOVE_STEEL_WING,
- MOVE_QUICK_GUARD),
+static const u16 sScytherEggMoveLearnset[] = {
+ MOVE_COUNTER,
+ MOVE_BATON_PASS,
+ MOVE_RAZOR_WIND,
+ MOVE_REVERSAL,
+ MOVE_ENDURE,
+ MOVE_SILVER_WIND,
+ MOVE_BUG_BUZZ,
+ MOVE_NIGHT_SLASH,
+ MOVE_DEFOG,
+ MOVE_STEEL_WING,
+ MOVE_QUICK_GUARD,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SCYTHER
#if P_FAMILY_JYNX
#if P_GEN_2_CROSS_EVOS
- egg_moves(SMOOCHUM,
- MOVE_MEDITATE,
- MOVE_FAKE_OUT,
- MOVE_WISH,
- MOVE_ICE_PUNCH,
- MOVE_MIRACLE_EYE,
- MOVE_NASTY_PLOT,
- MOVE_WAKE_UP_SLAP,
- MOVE_CAPTIVATE),
+static const u16 sSmoochumEggMoveLearnset[] = {
+ MOVE_MEDITATE,
+ MOVE_FAKE_OUT,
+ MOVE_WISH,
+ MOVE_ICE_PUNCH,
+ MOVE_MIRACLE_EYE,
+ MOVE_NASTY_PLOT,
+ MOVE_WAKE_UP_SLAP,
+ MOVE_CAPTIVATE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_GEN_2_CROSS_EVOS
#endif //P_FAMILY_JYNX
#if P_FAMILY_ELECTABUZZ
#if P_GEN_2_CROSS_EVOS
- egg_moves(ELEKID,
- MOVE_KARATE_CHOP,
- MOVE_BARRIER,
- MOVE_ROLLING_KICK,
- MOVE_MEDITATE,
- MOVE_CROSS_CHOP,
- MOVE_FIRE_PUNCH,
- MOVE_ICE_PUNCH,
- MOVE_DYNAMIC_PUNCH,
- MOVE_FEINT,
- MOVE_HAMMER_ARM,
- MOVE_FOCUS_PUNCH),
+static const u16 sElekidEggMoveLearnset[] = {
+ MOVE_KARATE_CHOP,
+ MOVE_BARRIER,
+ MOVE_ROLLING_KICK,
+ MOVE_MEDITATE,
+ MOVE_CROSS_CHOP,
+ MOVE_FIRE_PUNCH,
+ MOVE_ICE_PUNCH,
+ MOVE_DYNAMIC_PUNCH,
+ MOVE_FEINT,
+ MOVE_HAMMER_ARM,
+ MOVE_FOCUS_PUNCH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_GEN_2_CROSS_EVOS
#endif //P_FAMILY_ELECTABUZZ
#if P_FAMILY_MAGMAR
#if P_GEN_2_CROSS_EVOS
- egg_moves(MAGBY,
- MOVE_KARATE_CHOP,
- MOVE_MEGA_PUNCH,
- MOVE_BARRIER,
- MOVE_SCREECH,
- MOVE_CROSS_CHOP,
- MOVE_THUNDER_PUNCH,
- MOVE_MACH_PUNCH,
- MOVE_DYNAMIC_PUNCH,
- MOVE_FLARE_BLITZ,
- MOVE_BELLY_DRUM,
- MOVE_IRON_TAIL,
- MOVE_FOCUS_ENERGY,
- MOVE_POWER_SWAP,
- MOVE_BELCH),
+static const u16 sMagbyEggMoveLearnset[] = {
+ MOVE_KARATE_CHOP,
+ MOVE_MEGA_PUNCH,
+ MOVE_BARRIER,
+ MOVE_SCREECH,
+ MOVE_CROSS_CHOP,
+ MOVE_THUNDER_PUNCH,
+ MOVE_MACH_PUNCH,
+ MOVE_DYNAMIC_PUNCH,
+ MOVE_FLARE_BLITZ,
+ MOVE_BELLY_DRUM,
+ MOVE_IRON_TAIL,
+ MOVE_FOCUS_ENERGY,
+ MOVE_POWER_SWAP,
+ MOVE_BELCH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_GEN_2_CROSS_EVOS
#endif //P_FAMILY_MAGMAR
#if P_FAMILY_PINSIR
- egg_moves(PINSIR,
- MOVE_FURY_ATTACK,
- MOVE_FLAIL,
- MOVE_FEINT_ATTACK,
- MOVE_QUICK_ATTACK,
- MOVE_CLOSE_COMBAT,
- MOVE_FEINT,
- MOVE_ME_FIRST,
- MOVE_BUG_BITE,
- MOVE_SUPERPOWER),
+static const u16 sPinsirEggMoveLearnset[] = {
+ MOVE_FURY_ATTACK,
+ MOVE_FLAIL,
+ MOVE_FEINT_ATTACK,
+ MOVE_QUICK_ATTACK,
+ MOVE_CLOSE_COMBAT,
+ MOVE_FEINT,
+ MOVE_ME_FIRST,
+ MOVE_BUG_BITE,
+ MOVE_SUPERPOWER,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_PINSIR
#if P_FAMILY_TAUROS
#if P_PALDEAN_FORMS
- egg_moves(TAUROS_PALDEAN_COMBAT_BREED,
- MOVE_CURSE,
- MOVE_ENDEAVOR),
+static const u16 sTaurosPaldeanCombatBreedEggMoveLearnset[] = {
+ MOVE_CURSE,
+ MOVE_ENDEAVOR,
+ MOVE_UNAVAILABLE,
+};
- egg_moves(TAUROS_PALDEAN_BLAZE_BREED,
- MOVE_CURSE,
- MOVE_ENDEAVOR),
+static const u16 sTaurosPaldeanBlazeBreedEggMoveLearnset[] = {
+ MOVE_CURSE,
+ MOVE_ENDEAVOR,
+ MOVE_UNAVAILABLE,
+};
- egg_moves(TAUROS_PALDEAN_AQUA_BREED,
- MOVE_CURSE,
- MOVE_ENDEAVOR),
+static const u16 sTaurosPaldeanAquaBreedEggMoveLearnset[] = {
+ MOVE_CURSE,
+ MOVE_ENDEAVOR,
+ MOVE_UNAVAILABLE,
+};
#endif //P_PALDEAN_FORMS
#endif //P_FAMILY_TAUROS
#if P_FAMILY_LAPRAS
- egg_moves(LAPRAS,
- MOVE_FORESIGHT,
- MOVE_TICKLE,
- MOVE_REFRESH,
- MOVE_DRAGON_DANCE,
- MOVE_CURSE,
- MOVE_SLEEP_TALK,
- MOVE_HORN_DRILL,
- MOVE_ANCIENT_POWER,
- MOVE_WHIRLPOOL,
- MOVE_FISSURE,
- MOVE_DRAGON_PULSE,
- MOVE_AVALANCHE,
- MOVE_FUTURE_SIGHT,
- MOVE_FREEZE_DRY),
+static const u16 sLaprasEggMoveLearnset[] = {
+ MOVE_FORESIGHT,
+ MOVE_TICKLE,
+ MOVE_REFRESH,
+ MOVE_DRAGON_DANCE,
+ MOVE_CURSE,
+ MOVE_SLEEP_TALK,
+ MOVE_HORN_DRILL,
+ MOVE_ANCIENT_POWER,
+ MOVE_WHIRLPOOL,
+ MOVE_FISSURE,
+ MOVE_DRAGON_PULSE,
+ MOVE_AVALANCHE,
+ MOVE_FUTURE_SIGHT,
+ MOVE_FREEZE_DRY,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_LAPRAS
#if P_FAMILY_EEVEE
- egg_moves(EEVEE,
- MOVE_CHARM,
- MOVE_FLAIL,
- MOVE_ENDURE,
- MOVE_CURSE,
- MOVE_TICKLE,
- MOVE_WISH,
- MOVE_YAWN,
- MOVE_FAKE_TEARS,
- MOVE_COVET,
- MOVE_DETECT,
- MOVE_NATURAL_GIFT,
- MOVE_STORED_POWER,
- MOVE_SYNCHRONOISE,
- MOVE_CAPTIVATE),
+static const u16 sEeveeEggMoveLearnset[] = {
+ MOVE_CHARM,
+ MOVE_FLAIL,
+ MOVE_ENDURE,
+ MOVE_CURSE,
+ MOVE_TICKLE,
+ MOVE_WISH,
+ MOVE_YAWN,
+ MOVE_FAKE_TEARS,
+ MOVE_COVET,
+ MOVE_DETECT,
+ MOVE_NATURAL_GIFT,
+ MOVE_STORED_POWER,
+ MOVE_SYNCHRONOISE,
+ MOVE_CAPTIVATE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_EEVEE
#if P_FAMILY_OMANYTE
- egg_moves(OMANYTE,
- MOVE_BUBBLE_BEAM,
- MOVE_AURORA_BEAM,
- MOVE_SLAM,
- MOVE_SUPERSONIC,
- MOVE_HAZE,
- MOVE_SPIKES,
- MOVE_KNOCK_OFF,
- MOVE_WRING_OUT,
- MOVE_TOXIC_SPIKES,
- MOVE_MUDDY_WATER,
- MOVE_BIDE,
- MOVE_WATER_PULSE,
- MOVE_WHIRLPOOL,
- MOVE_REFLECT_TYPE),
+static const u16 sOmanyteEggMoveLearnset[] = {
+ MOVE_BUBBLE_BEAM,
+ MOVE_AURORA_BEAM,
+ MOVE_SLAM,
+ MOVE_SUPERSONIC,
+ MOVE_HAZE,
+ MOVE_SPIKES,
+ MOVE_KNOCK_OFF,
+ MOVE_WRING_OUT,
+ MOVE_TOXIC_SPIKES,
+ MOVE_MUDDY_WATER,
+ MOVE_BIDE,
+ MOVE_WATER_PULSE,
+ MOVE_WHIRLPOOL,
+ MOVE_REFLECT_TYPE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_OMANYTE
#if P_FAMILY_KABUTO
- egg_moves(KABUTO,
- MOVE_BUBBLE_BEAM,
- MOVE_AURORA_BEAM,
- MOVE_RAPID_SPIN,
- MOVE_FLAIL,
- MOVE_KNOCK_OFF,
- MOVE_CONFUSE_RAY,
- MOVE_MUD_SHOT,
- MOVE_ICY_WIND,
- MOVE_SCREECH,
- MOVE_GIGA_DRAIN,
- MOVE_FORESIGHT,
- MOVE_TAKE_DOWN),
+static const u16 sKabutoEggMoveLearnset[] = {
+ MOVE_BUBBLE_BEAM,
+ MOVE_AURORA_BEAM,
+ MOVE_RAPID_SPIN,
+ MOVE_FLAIL,
+ MOVE_KNOCK_OFF,
+ MOVE_CONFUSE_RAY,
+ MOVE_MUD_SHOT,
+ MOVE_ICY_WIND,
+ MOVE_SCREECH,
+ MOVE_GIGA_DRAIN,
+ MOVE_FORESIGHT,
+ MOVE_TAKE_DOWN,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_KABUTO
#if P_FAMILY_AERODACTYL
- egg_moves(AERODACTYL,
- MOVE_WHIRLWIND,
- MOVE_PURSUIT,
- MOVE_FORESIGHT,
- MOVE_STEEL_WING,
- MOVE_DRAGON_BREATH,
- MOVE_CURSE,
- MOVE_ASSURANCE,
- MOVE_ROOST,
- MOVE_TAILWIND,
- MOVE_WIDE_GUARD),
+static const u16 sAerodactylEggMoveLearnset[] = {
+ MOVE_WHIRLWIND,
+ MOVE_PURSUIT,
+ MOVE_FORESIGHT,
+ MOVE_STEEL_WING,
+ MOVE_DRAGON_BREATH,
+ MOVE_CURSE,
+ MOVE_ASSURANCE,
+ MOVE_ROOST,
+ MOVE_TAILWIND,
+ MOVE_WIDE_GUARD,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_AERODACTYL
#if P_FAMILY_SNORLAX
#if P_GEN_4_CROSS_EVOS
- egg_moves(MUNCHLAX,
- MOVE_LICK,
- MOVE_CHARM,
- MOVE_DOUBLE_EDGE,
- MOVE_CURSE,
- MOVE_WHIRLWIND,
- MOVE_PURSUIT,
- MOVE_ZEN_HEADBUTT,
- MOVE_COUNTER,
- MOVE_NATURAL_GIFT,
- MOVE_AFTER_YOU,
- MOVE_SELF_DESTRUCT,
- MOVE_BELCH),
+static const u16 sMunchlaxEggMoveLearnset[] = {
+ MOVE_LICK,
+ MOVE_CHARM,
+ MOVE_DOUBLE_EDGE,
+ MOVE_CURSE,
+ MOVE_WHIRLWIND,
+ MOVE_PURSUIT,
+ MOVE_ZEN_HEADBUTT,
+ MOVE_COUNTER,
+ MOVE_NATURAL_GIFT,
+ MOVE_AFTER_YOU,
+ MOVE_SELF_DESTRUCT,
+ MOVE_BELCH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_GEN_4_CROSS_EVOS
- egg_moves(SNORLAX,
- MOVE_LICK,
- MOVE_CHARM,
- MOVE_DOUBLE_EDGE,
- MOVE_CURSE,
- MOVE_FISSURE,
- MOVE_WHIRLWIND,
- MOVE_PURSUIT,
- MOVE_COUNTER,
- MOVE_NATURAL_GIFT,
- MOVE_AFTER_YOU,
- MOVE_BELCH,
- MOVE_POWER_UP_PUNCH),
+static const u16 sSnorlaxEggMoveLearnset[] = {
+ MOVE_LICK,
+ MOVE_CHARM,
+ MOVE_DOUBLE_EDGE,
+ MOVE_CURSE,
+ MOVE_FISSURE,
+ MOVE_WHIRLWIND,
+ MOVE_PURSUIT,
+ MOVE_COUNTER,
+ MOVE_NATURAL_GIFT,
+ MOVE_AFTER_YOU,
+ MOVE_BELCH,
+ MOVE_POWER_UP_PUNCH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SNORLAX
#if P_FAMILY_DRATINI
- egg_moves(DRATINI,
- MOVE_MIST,
- MOVE_HAZE,
- MOVE_SUPERSONIC,
- MOVE_DRAGON_BREATH,
- MOVE_DRAGON_DANCE,
- MOVE_DRAGON_RUSH,
- MOVE_EXTREME_SPEED,
- MOVE_WATER_PULSE,
- MOVE_AQUA_JET,
- MOVE_DRAGON_PULSE,
- MOVE_IRON_TAIL),
+static const u16 sDratiniEggMoveLearnset[] = {
+ MOVE_MIST,
+ MOVE_HAZE,
+ MOVE_SUPERSONIC,
+ MOVE_DRAGON_BREATH,
+ MOVE_DRAGON_DANCE,
+ MOVE_DRAGON_RUSH,
+ MOVE_EXTREME_SPEED,
+ MOVE_WATER_PULSE,
+ MOVE_AQUA_JET,
+ MOVE_DRAGON_PULSE,
+ MOVE_IRON_TAIL,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_DRATINI
#if P_FAMILY_CHIKORITA
- egg_moves(CHIKORITA,
- MOVE_VINE_WHIP,
- MOVE_LEECH_SEED,
- MOVE_COUNTER,
- MOVE_ANCIENT_POWER,
- MOVE_FLAIL,
- MOVE_NATURE_POWER,
- MOVE_INGRAIN,
- MOVE_GRASS_WHISTLE,
- MOVE_LEAF_STORM,
- MOVE_AROMATHERAPY,
- MOVE_WRING_OUT,
- MOVE_BODY_SLAM,
- MOVE_REFRESH,
- MOVE_HEAL_PULSE,
- MOVE_GRASSY_TERRAIN),
+static const u16 sChikoritaEggMoveLearnset[] = {
+ MOVE_VINE_WHIP,
+ MOVE_LEECH_SEED,
+ MOVE_COUNTER,
+ MOVE_ANCIENT_POWER,
+ MOVE_FLAIL,
+ MOVE_NATURE_POWER,
+ MOVE_INGRAIN,
+ MOVE_GRASS_WHISTLE,
+ MOVE_LEAF_STORM,
+ MOVE_AROMATHERAPY,
+ MOVE_WRING_OUT,
+ MOVE_BODY_SLAM,
+ MOVE_REFRESH,
+ MOVE_HEAL_PULSE,
+ MOVE_GRASSY_TERRAIN,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_CHIKORITA
#if P_FAMILY_CYNDAQUIL
- egg_moves(CYNDAQUIL,
- MOVE_FURY_SWIPES,
- MOVE_QUICK_ATTACK,
- MOVE_REVERSAL,
- MOVE_THRASH,
- MOVE_FORESIGHT,
- MOVE_COVET,
- MOVE_HOWL,
- MOVE_CRUSH_CLAW,
- MOVE_DOUBLE_EDGE,
- MOVE_DOUBLE_KICK,
- MOVE_FLARE_BLITZ,
- MOVE_EXTRASENSORY,
- MOVE_NATURE_POWER,
- MOVE_FLAME_BURST),
+static const u16 sCyndaquilEggMoveLearnset[] = {
+ MOVE_FURY_SWIPES,
+ MOVE_QUICK_ATTACK,
+ MOVE_REVERSAL,
+ MOVE_THRASH,
+ MOVE_FORESIGHT,
+ MOVE_COVET,
+ MOVE_HOWL,
+ MOVE_CRUSH_CLAW,
+ MOVE_DOUBLE_EDGE,
+ MOVE_DOUBLE_KICK,
+ MOVE_FLARE_BLITZ,
+ MOVE_EXTRASENSORY,
+ MOVE_NATURE_POWER,
+ MOVE_FLAME_BURST,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_CYNDAQUIL
#if P_FAMILY_TOTODILE
- egg_moves(TOTODILE,
- MOVE_CRUNCH,
- MOVE_THRASH,
- MOVE_HYDRO_PUMP,
- MOVE_ANCIENT_POWER,
- MOVE_MUD_SPORT,
- MOVE_WATER_SPORT,
- MOVE_ICE_PUNCH,
- MOVE_METAL_CLAW,
- MOVE_DRAGON_DANCE,
- MOVE_AQUA_JET,
- MOVE_FAKE_TEARS,
- MOVE_BLOCK,
- MOVE_WATER_PULSE,
- MOVE_FLATTER),
+static const u16 sTotodileEggMoveLearnset[] = {
+ MOVE_CRUNCH,
+ MOVE_THRASH,
+ MOVE_HYDRO_PUMP,
+ MOVE_ANCIENT_POWER,
+ MOVE_MUD_SPORT,
+ MOVE_WATER_SPORT,
+ MOVE_ICE_PUNCH,
+ MOVE_METAL_CLAW,
+ MOVE_DRAGON_DANCE,
+ MOVE_AQUA_JET,
+ MOVE_FAKE_TEARS,
+ MOVE_BLOCK,
+ MOVE_WATER_PULSE,
+ MOVE_FLATTER,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_TOTODILE
#if P_FAMILY_SENTRET
- egg_moves(SENTRET,
- MOVE_DOUBLE_EDGE,
- MOVE_PURSUIT,
- MOVE_SLASH,
- MOVE_FOCUS_ENERGY,
- MOVE_REVERSAL,
- MOVE_TRICK,
- MOVE_ASSIST,
- MOVE_LAST_RESORT,
- MOVE_CHARM,
- MOVE_COVET,
- MOVE_NATURAL_GIFT,
- MOVE_IRON_TAIL,
- MOVE_CAPTIVATE,
- MOVE_BABY_DOLL_EYES),
+static const u16 sSentretEggMoveLearnset[] = {
+ MOVE_DOUBLE_EDGE,
+ MOVE_PURSUIT,
+ MOVE_SLASH,
+ MOVE_FOCUS_ENERGY,
+ MOVE_REVERSAL,
+ MOVE_TRICK,
+ MOVE_ASSIST,
+ MOVE_LAST_RESORT,
+ MOVE_CHARM,
+ MOVE_COVET,
+ MOVE_NATURAL_GIFT,
+ MOVE_IRON_TAIL,
+ MOVE_CAPTIVATE,
+ MOVE_BABY_DOLL_EYES,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SENTRET
#if P_FAMILY_HOOTHOOT
- egg_moves(HOOTHOOT,
- MOVE_MIRROR_MOVE,
- MOVE_SUPERSONIC,
- MOVE_FEINT_ATTACK,
- MOVE_WING_ATTACK,
- MOVE_WHIRLWIND,
- MOVE_SKY_ATTACK,
- MOVE_FEATHER_DANCE,
- MOVE_AGILITY,
- MOVE_NIGHT_SHADE,
- MOVE_DEFOG,
- MOVE_MEAN_LOOK,
- MOVE_HURRICANE),
+static const u16 sHoothootEggMoveLearnset[] = {
+ MOVE_MIRROR_MOVE,
+ MOVE_SUPERSONIC,
+ MOVE_FEINT_ATTACK,
+ MOVE_WING_ATTACK,
+ MOVE_WHIRLWIND,
+ MOVE_SKY_ATTACK,
+ MOVE_FEATHER_DANCE,
+ MOVE_AGILITY,
+ MOVE_NIGHT_SHADE,
+ MOVE_DEFOG,
+ MOVE_MEAN_LOOK,
+ MOVE_HURRICANE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_HOOTHOOT
#if P_FAMILY_LEDYBA
- egg_moves(LEDYBA,
- MOVE_PSYBEAM,
- MOVE_BIDE,
- MOVE_SILVER_WIND,
- MOVE_BUG_BUZZ,
- MOVE_SCREECH,
- MOVE_ENCORE,
- MOVE_KNOCK_OFF,
- MOVE_BUG_BITE,
- MOVE_FOCUS_PUNCH,
- MOVE_DRAIN_PUNCH,
- MOVE_DIZZY_PUNCH,
- MOVE_TAILWIND,
- MOVE_ENDURE,
- MOVE_COUNTER),
+static const u16 sLedybaEggMoveLearnset[] = {
+ MOVE_PSYBEAM,
+ MOVE_BIDE,
+ MOVE_SILVER_WIND,
+ MOVE_BUG_BUZZ,
+ MOVE_SCREECH,
+ MOVE_ENCORE,
+ MOVE_KNOCK_OFF,
+ MOVE_BUG_BITE,
+ MOVE_FOCUS_PUNCH,
+ MOVE_DRAIN_PUNCH,
+ MOVE_DIZZY_PUNCH,
+ MOVE_TAILWIND,
+ MOVE_ENDURE,
+ MOVE_COUNTER,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_LEDYBA
#if P_FAMILY_SPINARAK
- egg_moves(SPINARAK,
- MOVE_PSYBEAM,
- MOVE_DISABLE,
- MOVE_SONIC_BOOM,
- MOVE_BATON_PASS,
- MOVE_PURSUIT,
- MOVE_SIGNAL_BEAM,
- MOVE_TOXIC_SPIKES,
- MOVE_TWINEEDLE,
- MOVE_ELECTROWEB,
- MOVE_RAGE_POWDER,
- MOVE_NIGHT_SLASH,
- MOVE_MEGAHORN,
- MOVE_LUNGE),
+static const u16 sSpinarakEggMoveLearnset[] = {
+ MOVE_PSYBEAM,
+ MOVE_DISABLE,
+ MOVE_SONIC_BOOM,
+ MOVE_BATON_PASS,
+ MOVE_PURSUIT,
+ MOVE_SIGNAL_BEAM,
+ MOVE_TOXIC_SPIKES,
+ MOVE_TWINEEDLE,
+ MOVE_ELECTROWEB,
+ MOVE_RAGE_POWDER,
+ MOVE_NIGHT_SLASH,
+ MOVE_MEGAHORN,
+ MOVE_LUNGE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SPINARAK
#if P_FAMILY_CHINCHOU
- egg_moves(CHINCHOU,
- MOVE_FLAIL,
- MOVE_SCREECH,
- MOVE_AMNESIA,
- MOVE_PSYBEAM,
- MOVE_WHIRLPOOL,
- MOVE_AGILITY,
- MOVE_MIST,
- MOVE_SHOCK_WAVE,
- MOVE_BRINE,
- MOVE_WATER_PULSE,
- MOVE_SOAK),
+static const u16 sChinchouEggMoveLearnset[] = {
+ MOVE_FLAIL,
+ MOVE_SCREECH,
+ MOVE_AMNESIA,
+ MOVE_PSYBEAM,
+ MOVE_WHIRLPOOL,
+ MOVE_AGILITY,
+ MOVE_MIST,
+ MOVE_SHOCK_WAVE,
+ MOVE_BRINE,
+ MOVE_WATER_PULSE,
+ MOVE_SOAK,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_CHINCHOU
#if P_FAMILY_TOGEPI
- egg_moves(TOGEPI,
- MOVE_PRESENT,
- MOVE_MIRROR_MOVE,
- MOVE_PECK,
- MOVE_FORESIGHT,
- MOVE_FUTURE_SIGHT,
- MOVE_NASTY_PLOT,
- MOVE_PSYCHO_SHIFT,
- MOVE_LUCKY_CHANT,
- MOVE_EXTRASENSORY,
- MOVE_SECRET_POWER,
- MOVE_STORED_POWER,
- MOVE_MORNING_SUN),
+static const u16 sTogepiEggMoveLearnset[] = {
+ MOVE_PRESENT,
+ MOVE_MIRROR_MOVE,
+ MOVE_PECK,
+ MOVE_FORESIGHT,
+ MOVE_FUTURE_SIGHT,
+ MOVE_NASTY_PLOT,
+ MOVE_PSYCHO_SHIFT,
+ MOVE_LUCKY_CHANT,
+ MOVE_EXTRASENSORY,
+ MOVE_SECRET_POWER,
+ MOVE_STORED_POWER,
+ MOVE_MORNING_SUN,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_TOGEPI
#if P_FAMILY_NATU
- egg_moves(NATU,
- MOVE_HAZE,
- MOVE_DRILL_PECK,
- MOVE_QUICK_ATTACK,
- MOVE_FEINT_ATTACK,
- MOVE_STEEL_WING,
- MOVE_FEATHER_DANCE,
- MOVE_REFRESH,
- MOVE_ZEN_HEADBUTT,
- MOVE_SUCKER_PUNCH,
- MOVE_SYNCHRONOISE,
- MOVE_ROOST,
- MOVE_SKILL_SWAP,
- MOVE_SIMPLE_BEAM,
- MOVE_ALLY_SWITCH),
+static const u16 sNatuEggMoveLearnset[] = {
+ MOVE_HAZE,
+ MOVE_DRILL_PECK,
+ MOVE_QUICK_ATTACK,
+ MOVE_FEINT_ATTACK,
+ MOVE_STEEL_WING,
+ MOVE_FEATHER_DANCE,
+ MOVE_REFRESH,
+ MOVE_ZEN_HEADBUTT,
+ MOVE_SUCKER_PUNCH,
+ MOVE_SYNCHRONOISE,
+ MOVE_ROOST,
+ MOVE_SKILL_SWAP,
+ MOVE_SIMPLE_BEAM,
+ MOVE_ALLY_SWITCH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_NATU
#if P_FAMILY_MAREEP
- egg_moves(MAREEP,
- MOVE_TAKE_DOWN,
- MOVE_BODY_SLAM,
- MOVE_SCREECH,
- MOVE_ODOR_SLEUTH,
- MOVE_CHARGE,
- MOVE_FLATTER,
- MOVE_SAND_ATTACK,
- MOVE_IRON_TAIL,
- MOVE_AFTER_YOU,
- MOVE_AGILITY,
- MOVE_EERIE_IMPULSE,
- MOVE_ELECTRIC_TERRAIN),
+static const u16 sMareepEggMoveLearnset[] = {
+ MOVE_TAKE_DOWN,
+ MOVE_BODY_SLAM,
+ MOVE_SCREECH,
+ MOVE_ODOR_SLEUTH,
+ MOVE_CHARGE,
+ MOVE_FLATTER,
+ MOVE_SAND_ATTACK,
+ MOVE_IRON_TAIL,
+ MOVE_AFTER_YOU,
+ MOVE_AGILITY,
+ MOVE_EERIE_IMPULSE,
+ MOVE_ELECTRIC_TERRAIN,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_MAREEP
#if P_FAMILY_MARILL
#if P_GEN_3_CROSS_EVOS
- egg_moves(AZURILL,
- MOVE_ENCORE,
- MOVE_SING,
- MOVE_REFRESH,
- MOVE_SLAM,
- MOVE_TICKLE,
- MOVE_FAKE_TEARS,
- MOVE_BODY_SLAM,
- MOVE_WATER_SPORT,
- MOVE_SOAK,
- MOVE_MUDDY_WATER,
- MOVE_COPYCAT,
- MOVE_CAMOUFLAGE),
+static const u16 sAzurillEggMoveLearnset[] = {
+ MOVE_ENCORE,
+ MOVE_SING,
+ MOVE_REFRESH,
+ MOVE_SLAM,
+ MOVE_TICKLE,
+ MOVE_FAKE_TEARS,
+ MOVE_BODY_SLAM,
+ MOVE_WATER_SPORT,
+ MOVE_SOAK,
+ MOVE_MUDDY_WATER,
+ MOVE_COPYCAT,
+ MOVE_CAMOUFLAGE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_GEN_3_CROSS_EVOS
- egg_moves(MARILL,
- MOVE_PRESENT,
- MOVE_AMNESIA,
- MOVE_FUTURE_SIGHT,
- MOVE_BELLY_DRUM,
- MOVE_PERISH_SONG,
- MOVE_SUPERSONIC,
- MOVE_AQUA_JET,
- MOVE_SUPERPOWER,
- MOVE_REFRESH,
- MOVE_BODY_SLAM,
- MOVE_WATER_SPORT,
- MOVE_MUDDY_WATER,
- MOVE_CAMOUFLAGE),
+static const u16 sMarillEggMoveLearnset[] = {
+ MOVE_PRESENT,
+ MOVE_AMNESIA,
+ MOVE_FUTURE_SIGHT,
+ MOVE_BELLY_DRUM,
+ MOVE_PERISH_SONG,
+ MOVE_SUPERSONIC,
+ MOVE_AQUA_JET,
+ MOVE_SUPERPOWER,
+ MOVE_REFRESH,
+ MOVE_BODY_SLAM,
+ MOVE_WATER_SPORT,
+ MOVE_MUDDY_WATER,
+ MOVE_CAMOUFLAGE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_MARILL
#if P_FAMILY_SUDOWOODO
#if P_GEN_4_CROSS_EVOS
- egg_moves(BONSLY,
- MOVE_SELF_DESTRUCT,
- MOVE_HEADBUTT,
- MOVE_HARDEN,
- MOVE_DEFENSE_CURL,
- MOVE_ROLLOUT,
- MOVE_SAND_TOMB,
- MOVE_STEALTH_ROCK,
- MOVE_CURSE,
- MOVE_ENDURE),
+static const u16 sBonslyEggMoveLearnset[] = {
+ MOVE_SELF_DESTRUCT,
+ MOVE_HEADBUTT,
+ MOVE_HARDEN,
+ MOVE_DEFENSE_CURL,
+ MOVE_ROLLOUT,
+ MOVE_SAND_TOMB,
+ MOVE_STEALTH_ROCK,
+ MOVE_CURSE,
+ MOVE_ENDURE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_GEN_4_CROSS_EVOS
- egg_moves(SUDOWOODO,
- MOVE_SELF_DESTRUCT,
- MOVE_HEADBUTT,
- MOVE_HARDEN,
- MOVE_DEFENSE_CURL,
- MOVE_ROLLOUT,
- MOVE_SAND_TOMB,
- MOVE_STEALTH_ROCK,
- MOVE_CURSE,
- MOVE_ENDURE),
+static const u16 sSudowoodoEggMoveLearnset[] = {
+ MOVE_SELF_DESTRUCT,
+ MOVE_HEADBUTT,
+ MOVE_HARDEN,
+ MOVE_DEFENSE_CURL,
+ MOVE_ROLLOUT,
+ MOVE_SAND_TOMB,
+ MOVE_STEALTH_ROCK,
+ MOVE_CURSE,
+ MOVE_ENDURE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SUDOWOODO
#if P_FAMILY_HOPPIP
- egg_moves(HOPPIP,
- MOVE_CONFUSION,
- MOVE_ENCORE,
- MOVE_DOUBLE_EDGE,
- MOVE_AMNESIA,
- MOVE_HELPING_HAND,
- MOVE_AROMATHERAPY,
- MOVE_WORRY_SEED,
- MOVE_COTTON_GUARD,
- MOVE_SEED_BOMB,
- MOVE_ENDURE,
- MOVE_GRASSY_TERRAIN,
- MOVE_STRENGTH_SAP),
+static const u16 sHoppipEggMoveLearnset[] = {
+ MOVE_CONFUSION,
+ MOVE_ENCORE,
+ MOVE_DOUBLE_EDGE,
+ MOVE_AMNESIA,
+ MOVE_HELPING_HAND,
+ MOVE_AROMATHERAPY,
+ MOVE_WORRY_SEED,
+ MOVE_COTTON_GUARD,
+ MOVE_SEED_BOMB,
+ MOVE_ENDURE,
+ MOVE_GRASSY_TERRAIN,
+ MOVE_STRENGTH_SAP,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_HOPPIP
#if P_FAMILY_AIPOM
- egg_moves(AIPOM,
- MOVE_COUNTER,
- MOVE_SCREECH,
- MOVE_PURSUIT,
- MOVE_AGILITY,
- MOVE_SPITE,
- MOVE_SLAM,
- MOVE_DOUBLE_SLAP,
- MOVE_BEAT_UP,
- MOVE_FAKE_OUT,
- MOVE_COVET,
- MOVE_BOUNCE,
- MOVE_REVENGE,
- MOVE_SWITCHEROO,
- MOVE_QUICK_GUARD,
- MOVE_TAIL_SLAP),
+static const u16 sAipomEggMoveLearnset[] = {
+ MOVE_COUNTER,
+ MOVE_SCREECH,
+ MOVE_PURSUIT,
+ MOVE_AGILITY,
+ MOVE_SPITE,
+ MOVE_SLAM,
+ MOVE_DOUBLE_SLAP,
+ MOVE_BEAT_UP,
+ MOVE_FAKE_OUT,
+ MOVE_COVET,
+ MOVE_BOUNCE,
+ MOVE_REVENGE,
+ MOVE_SWITCHEROO,
+ MOVE_QUICK_GUARD,
+ MOVE_TAIL_SLAP,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_AIPOM
#if P_FAMILY_SUNKERN
- egg_moves(SUNKERN,
- MOVE_GRASS_WHISTLE,
- MOVE_ENCORE,
- MOVE_LEECH_SEED,
- MOVE_NATURE_POWER,
- MOVE_CURSE,
- MOVE_HELPING_HAND,
- MOVE_INGRAIN,
- MOVE_SWEET_SCENT,
- MOVE_ENDURE,
- MOVE_BIDE,
- MOVE_NATURAL_GIFT,
- MOVE_MORNING_SUN,
- MOVE_GRASSY_TERRAIN),
+static const u16 sSunkernEggMoveLearnset[] = {
+ MOVE_GRASS_WHISTLE,
+ MOVE_ENCORE,
+ MOVE_LEECH_SEED,
+ MOVE_NATURE_POWER,
+ MOVE_CURSE,
+ MOVE_HELPING_HAND,
+ MOVE_INGRAIN,
+ MOVE_SWEET_SCENT,
+ MOVE_ENDURE,
+ MOVE_BIDE,
+ MOVE_NATURAL_GIFT,
+ MOVE_MORNING_SUN,
+ MOVE_GRASSY_TERRAIN,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SUNKERN
#if P_FAMILY_YANMA
- egg_moves(YANMA,
- MOVE_WHIRLWIND,
- MOVE_REVERSAL,
- MOVE_LEECH_LIFE,
- MOVE_SIGNAL_BEAM,
- MOVE_SILVER_WIND,
- MOVE_FEINT,
- MOVE_FEINT_ATTACK,
- MOVE_PURSUIT,
- MOVE_DOUBLE_EDGE,
- MOVE_SECRET_POWER),
+static const u16 sYanmaEggMoveLearnset[] = {
+ MOVE_WHIRLWIND,
+ MOVE_REVERSAL,
+ MOVE_LEECH_LIFE,
+ MOVE_SIGNAL_BEAM,
+ MOVE_SILVER_WIND,
+ MOVE_FEINT,
+ MOVE_FEINT_ATTACK,
+ MOVE_PURSUIT,
+ MOVE_DOUBLE_EDGE,
+ MOVE_SECRET_POWER,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_YANMA
#if P_FAMILY_WOOPER
- egg_moves(WOOPER,
- MOVE_BODY_SLAM,
- MOVE_ANCIENT_POWER,
- MOVE_CURSE,
- MOVE_MUD_SPORT,
- MOVE_STOCKPILE,
- MOVE_SWALLOW,
- MOVE_SPIT_UP,
- MOVE_COUNTER,
- MOVE_ENCORE,
- MOVE_DOUBLE_KICK,
- MOVE_RECOVER,
- MOVE_AFTER_YOU,
- MOVE_SLEEP_TALK,
- MOVE_ACID_SPRAY,
- MOVE_GUARD_SWAP,
- MOVE_EERIE_IMPULSE,
- MOVE_POWER_UP_PUNCH),
+static const u16 sWooperEggMoveLearnset[] = {
+ MOVE_BODY_SLAM,
+ MOVE_ANCIENT_POWER,
+ MOVE_CURSE,
+ MOVE_MUD_SPORT,
+ MOVE_STOCKPILE,
+ MOVE_SWALLOW,
+ MOVE_SPIT_UP,
+ MOVE_COUNTER,
+ MOVE_ENCORE,
+ MOVE_DOUBLE_KICK,
+ MOVE_RECOVER,
+ MOVE_AFTER_YOU,
+ MOVE_SLEEP_TALK,
+ MOVE_ACID_SPRAY,
+ MOVE_GUARD_SWAP,
+ MOVE_EERIE_IMPULSE,
+ MOVE_POWER_UP_PUNCH,
+ MOVE_UNAVAILABLE,
+};
#if P_PALDEAN_FORMS
- egg_moves(WOOPER_PALDEAN,
- MOVE_ACID_SPRAY,
- MOVE_AFTER_YOU,
- MOVE_ANCIENT_POWER,
- MOVE_COUNTER,
- MOVE_CURSE,
- MOVE_DOUBLE_KICK,
- MOVE_HAZE,
- MOVE_MIST,
- MOVE_RECOVER,
- MOVE_SPIT_UP,
- MOVE_STOCKPILE,
- MOVE_SWALLOW),
+static const u16 sWooperPaldeanEggMoveLearnset[] = {
+ MOVE_ACID_SPRAY,
+ MOVE_AFTER_YOU,
+ MOVE_ANCIENT_POWER,
+ MOVE_COUNTER,
+ MOVE_CURSE,
+ MOVE_DOUBLE_KICK,
+ MOVE_HAZE,
+ MOVE_MIST,
+ MOVE_RECOVER,
+ MOVE_SPIT_UP,
+ MOVE_STOCKPILE,
+ MOVE_SWALLOW,
+ MOVE_UNAVAILABLE,
+};
#endif //P_PALDEAN_FORMS
#endif //P_FAMILY_WOOPER
#if P_FAMILY_MURKROW
- egg_moves(MURKROW,
- MOVE_WHIRLWIND,
- MOVE_DRILL_PECK,
- MOVE_MIRROR_MOVE,
- MOVE_WING_ATTACK,
- MOVE_SKY_ATTACK,
- MOVE_CONFUSE_RAY,
- MOVE_FEATHER_DANCE,
- MOVE_PERISH_SONG,
- MOVE_PSYCHO_SHIFT,
- MOVE_SCREECH,
- MOVE_FEINT_ATTACK,
- MOVE_BRAVE_BIRD,
- MOVE_ROOST,
- MOVE_ASSURANCE,
- MOVE_FLATTER,
- MOVE_PUNISHMENT),
+static const u16 sMurkrowEggMoveLearnset[] = {
+ MOVE_WHIRLWIND,
+ MOVE_DRILL_PECK,
+ MOVE_MIRROR_MOVE,
+ MOVE_WING_ATTACK,
+ MOVE_SKY_ATTACK,
+ MOVE_CONFUSE_RAY,
+ MOVE_FEATHER_DANCE,
+ MOVE_PERISH_SONG,
+ MOVE_PSYCHO_SHIFT,
+ MOVE_SCREECH,
+ MOVE_FEINT_ATTACK,
+ MOVE_BRAVE_BIRD,
+ MOVE_ROOST,
+ MOVE_ASSURANCE,
+ MOVE_FLATTER,
+ MOVE_PUNISHMENT,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_MURKROW
#if P_FAMILY_MISDREAVUS
- egg_moves(MISDREAVUS,
- MOVE_SCREECH,
- MOVE_DESTINY_BOND,
- MOVE_IMPRISON,
- MOVE_MEMENTO,
- MOVE_SUCKER_PUNCH,
- MOVE_SHADOW_SNEAK,
- MOVE_CURSE,
- MOVE_SPITE,
- MOVE_OMINOUS_WIND,
- MOVE_NASTY_PLOT,
- MOVE_SKILL_SWAP,
- MOVE_WONDER_ROOM,
- MOVE_ME_FIRST),
+static const u16 sMisdreavusEggMoveLearnset[] = {
+ MOVE_SCREECH,
+ MOVE_DESTINY_BOND,
+ MOVE_IMPRISON,
+ MOVE_MEMENTO,
+ MOVE_SUCKER_PUNCH,
+ MOVE_SHADOW_SNEAK,
+ MOVE_CURSE,
+ MOVE_SPITE,
+ MOVE_OMINOUS_WIND,
+ MOVE_NASTY_PLOT,
+ MOVE_SKILL_SWAP,
+ MOVE_WONDER_ROOM,
+ MOVE_ME_FIRST,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_MISDREAVUS
#if P_FAMILY_GIRAFARIG
- egg_moves(GIRAFARIG,
- MOVE_TAKE_DOWN,
- MOVE_AMNESIA,
- MOVE_FORESIGHT,
- MOVE_FUTURE_SIGHT,
- MOVE_BEAT_UP,
- MOVE_WISH,
- MOVE_MAGIC_COAT,
- MOVE_DOUBLE_KICK,
- MOVE_MIRROR_COAT,
- MOVE_RAZOR_WIND,
- MOVE_SKILL_SWAP,
- MOVE_SECRET_POWER,
- MOVE_MEAN_LOOK,
- MOVE_PSYCHIC_TERRAIN,
- MOVE_PSYCHIC_FANGS),
+static const u16 sGirafarigEggMoveLearnset[] = {
+ MOVE_TAKE_DOWN,
+ MOVE_AMNESIA,
+ MOVE_FORESIGHT,
+ MOVE_FUTURE_SIGHT,
+ MOVE_BEAT_UP,
+ MOVE_WISH,
+ MOVE_MAGIC_COAT,
+ MOVE_DOUBLE_KICK,
+ MOVE_MIRROR_COAT,
+ MOVE_RAZOR_WIND,
+ MOVE_SKILL_SWAP,
+ MOVE_SECRET_POWER,
+ MOVE_MEAN_LOOK,
+ MOVE_PSYCHIC_TERRAIN,
+ MOVE_PSYCHIC_FANGS,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_GIRAFARIG
#if P_FAMILY_PINECO
- egg_moves(PINECO,
- MOVE_PIN_MISSILE,
- MOVE_FLAIL,
- MOVE_SWIFT,
- MOVE_COUNTER,
- MOVE_SAND_TOMB,
- MOVE_REVENGE,
- MOVE_DOUBLE_EDGE,
- MOVE_TOXIC_SPIKES,
- MOVE_POWER_TRICK,
- MOVE_ENDURE,
- MOVE_STEALTH_ROCK),
+static const u16 sPinecoEggMoveLearnset[] = {
+ MOVE_PIN_MISSILE,
+ MOVE_FLAIL,
+ MOVE_SWIFT,
+ MOVE_COUNTER,
+ MOVE_SAND_TOMB,
+ MOVE_REVENGE,
+ MOVE_DOUBLE_EDGE,
+ MOVE_TOXIC_SPIKES,
+ MOVE_POWER_TRICK,
+ MOVE_ENDURE,
+ MOVE_STEALTH_ROCK,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_PINECO
#if P_FAMILY_DUNSPARCE
- egg_moves(DUNSPARCE,
- MOVE_BIDE,
- MOVE_ANCIENT_POWER,
- MOVE_BITE,
- MOVE_HEADBUTT,
- MOVE_ASTONISH,
- MOVE_CURSE,
- MOVE_TRUMP_CARD,
- MOVE_MAGIC_COAT,
- MOVE_SNORE,
- MOVE_AGILITY,
- MOVE_SECRET_POWER,
- MOVE_SLEEP_TALK,
- MOVE_HEX),
+static const u16 sDunsparceEggMoveLearnset[] = {
+ MOVE_BIDE,
+ MOVE_ANCIENT_POWER,
+ MOVE_BITE,
+ MOVE_HEADBUTT,
+ MOVE_ASTONISH,
+ MOVE_CURSE,
+ MOVE_TRUMP_CARD,
+ MOVE_MAGIC_COAT,
+ MOVE_SNORE,
+ MOVE_AGILITY,
+ MOVE_SECRET_POWER,
+ MOVE_SLEEP_TALK,
+ MOVE_HEX,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_DUNSPARCE
#if P_FAMILY_GLIGAR
- egg_moves(GLIGAR,
- MOVE_METAL_CLAW,
- MOVE_WING_ATTACK,
- MOVE_RAZOR_WIND,
- MOVE_COUNTER,
- MOVE_SAND_TOMB,
- MOVE_AGILITY,
- MOVE_BATON_PASS,
- MOVE_DOUBLE_EDGE,
- MOVE_FEINT,
- MOVE_NIGHT_SLASH,
- MOVE_CROSS_POISON,
- MOVE_POWER_TRICK,
- MOVE_ROCK_CLIMB,
- MOVE_POISON_TAIL),
+static const u16 sGligarEggMoveLearnset[] = {
+ MOVE_METAL_CLAW,
+ MOVE_WING_ATTACK,
+ MOVE_RAZOR_WIND,
+ MOVE_COUNTER,
+ MOVE_SAND_TOMB,
+ MOVE_AGILITY,
+ MOVE_BATON_PASS,
+ MOVE_DOUBLE_EDGE,
+ MOVE_FEINT,
+ MOVE_NIGHT_SLASH,
+ MOVE_CROSS_POISON,
+ MOVE_POWER_TRICK,
+ MOVE_ROCK_CLIMB,
+ MOVE_POISON_TAIL,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_GLIGAR
#if P_FAMILY_SNUBBULL
- egg_moves(SNUBBULL,
- MOVE_METRONOME,
- MOVE_FEINT_ATTACK,
- MOVE_PRESENT,
- MOVE_CRUNCH,
- MOVE_HEAL_BELL,
- MOVE_SNORE,
- MOVE_SMELLING_SALTS,
- MOVE_CLOSE_COMBAT,
- MOVE_ICE_FANG,
- MOVE_FIRE_FANG,
- MOVE_THUNDER_FANG,
- MOVE_FOCUS_PUNCH,
- MOVE_DOUBLE_EDGE,
- MOVE_MIMIC,
- MOVE_FAKE_TEARS),
+static const u16 sSnubbullEggMoveLearnset[] = {
+ MOVE_METRONOME,
+ MOVE_FEINT_ATTACK,
+ MOVE_PRESENT,
+ MOVE_CRUNCH,
+ MOVE_HEAL_BELL,
+ MOVE_SNORE,
+ MOVE_SMELLING_SALTS,
+ MOVE_CLOSE_COMBAT,
+ MOVE_ICE_FANG,
+ MOVE_FIRE_FANG,
+ MOVE_THUNDER_FANG,
+ MOVE_FOCUS_PUNCH,
+ MOVE_DOUBLE_EDGE,
+ MOVE_MIMIC,
+ MOVE_FAKE_TEARS,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SNUBBULL
#if P_FAMILY_QWILFISH
- egg_moves(QWILFISH,
- MOVE_FLAIL,
- MOVE_HAZE,
- MOVE_BUBBLE_BEAM,
- MOVE_SUPERSONIC,
- MOVE_ASTONISH,
- MOVE_SIGNAL_BEAM,
- MOVE_AQUA_JET,
- MOVE_WATER_PULSE,
- MOVE_BRINE,
- MOVE_ACID_SPRAY),
+static const u16 sQwilfishEggMoveLearnset[] = {
+ MOVE_FLAIL,
+ MOVE_HAZE,
+ MOVE_BUBBLE_BEAM,
+ MOVE_SUPERSONIC,
+ MOVE_ASTONISH,
+ MOVE_SIGNAL_BEAM,
+ MOVE_AQUA_JET,
+ MOVE_WATER_PULSE,
+ MOVE_BRINE,
+ MOVE_ACID_SPRAY,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_QWILFISH
#if P_FAMILY_SHUCKLE
- egg_moves(SHUCKLE,
- MOVE_SWEET_SCENT,
- MOVE_KNOCK_OFF,
- MOVE_HELPING_HAND,
- MOVE_ACUPRESSURE,
- MOVE_SAND_TOMB,
- MOVE_MUD_SLAP,
- MOVE_ACID,
- MOVE_ROCK_BLAST,
- MOVE_FINAL_GAMBIT),
+static const u16 sShuckleEggMoveLearnset[] = {
+ MOVE_SWEET_SCENT,
+ MOVE_KNOCK_OFF,
+ MOVE_HELPING_HAND,
+ MOVE_ACUPRESSURE,
+ MOVE_SAND_TOMB,
+ MOVE_MUD_SLAP,
+ MOVE_ACID,
+ MOVE_ROCK_BLAST,
+ MOVE_FINAL_GAMBIT,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SHUCKLE
#if P_FAMILY_HERACROSS
- egg_moves(HERACROSS,
- MOVE_HARDEN,
- MOVE_BIDE,
- MOVE_FLAIL,
- MOVE_REVENGE,
- MOVE_PURSUIT,
- MOVE_DOUBLE_EDGE,
- MOVE_SEISMIC_TOSS,
- MOVE_FOCUS_PUNCH,
- MOVE_MEGAHORN,
- MOVE_ROCK_BLAST),
+static const u16 sHeracrossEggMoveLearnset[] = {
+ MOVE_HARDEN,
+ MOVE_BIDE,
+ MOVE_FLAIL,
+ MOVE_REVENGE,
+ MOVE_PURSUIT,
+ MOVE_DOUBLE_EDGE,
+ MOVE_SEISMIC_TOSS,
+ MOVE_FOCUS_PUNCH,
+ MOVE_MEGAHORN,
+ MOVE_ROCK_BLAST,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_HERACROSS
#if P_FAMILY_SNEASEL
- egg_moves(SNEASEL,
- MOVE_COUNTER,
- MOVE_SPITE,
- MOVE_FORESIGHT,
- MOVE_BITE,
- MOVE_CRUSH_CLAW,
- MOVE_FAKE_OUT,
- MOVE_DOUBLE_HIT,
- MOVE_PUNISHMENT,
- MOVE_PURSUIT,
- MOVE_ICE_SHARD,
- MOVE_ICE_PUNCH,
- MOVE_ASSIST,
- MOVE_AVALANCHE,
- MOVE_FEINT,
- MOVE_ICICLE_CRASH,
- MOVE_THROAT_CHOP),
+static const u16 sSneaselEggMoveLearnset[] = {
+ MOVE_COUNTER,
+ MOVE_SPITE,
+ MOVE_FORESIGHT,
+ MOVE_BITE,
+ MOVE_CRUSH_CLAW,
+ MOVE_FAKE_OUT,
+ MOVE_DOUBLE_HIT,
+ MOVE_PUNISHMENT,
+ MOVE_PURSUIT,
+ MOVE_ICE_SHARD,
+ MOVE_ICE_PUNCH,
+ MOVE_ASSIST,
+ MOVE_AVALANCHE,
+ MOVE_FEINT,
+ MOVE_ICICLE_CRASH,
+ MOVE_THROAT_CHOP,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SNEASEL
#if P_FAMILY_TEDDIURSA
- egg_moves(TEDDIURSA,
- MOVE_CRUNCH,
- MOVE_TAKE_DOWN,
- MOVE_SEISMIC_TOSS,
- MOVE_COUNTER,
- MOVE_METAL_CLAW,
- MOVE_FAKE_TEARS,
- MOVE_YAWN,
- MOVE_SLEEP_TALK,
- MOVE_CROSS_CHOP,
- MOVE_DOUBLE_EDGE,
- MOVE_CLOSE_COMBAT,
- MOVE_NIGHT_SLASH,
- MOVE_BELLY_DRUM,
- MOVE_CHIP_AWAY,
- MOVE_PLAY_ROUGH),
+static const u16 sTeddiursaEggMoveLearnset[] = {
+ MOVE_CRUNCH,
+ MOVE_TAKE_DOWN,
+ MOVE_SEISMIC_TOSS,
+ MOVE_COUNTER,
+ MOVE_METAL_CLAW,
+ MOVE_FAKE_TEARS,
+ MOVE_YAWN,
+ MOVE_SLEEP_TALK,
+ MOVE_CROSS_CHOP,
+ MOVE_DOUBLE_EDGE,
+ MOVE_CLOSE_COMBAT,
+ MOVE_NIGHT_SLASH,
+ MOVE_BELLY_DRUM,
+ MOVE_CHIP_AWAY,
+ MOVE_PLAY_ROUGH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_TEDDIURSA
#if P_FAMILY_SLUGMA
- egg_moves(SLUGMA,
- MOVE_ACID_ARMOR,
- MOVE_HEAT_WAVE,
- MOVE_CURSE,
- MOVE_SMOKESCREEN,
- MOVE_MEMENTO,
- MOVE_STOCKPILE,
- MOVE_SPIT_UP,
- MOVE_SWALLOW,
- MOVE_ROLLOUT,
- MOVE_INFERNO,
- MOVE_EARTH_POWER,
- MOVE_GUARD_SWAP),
+static const u16 sSlugmaEggMoveLearnset[] = {
+ MOVE_ACID_ARMOR,
+ MOVE_HEAT_WAVE,
+ MOVE_CURSE,
+ MOVE_SMOKESCREEN,
+ MOVE_MEMENTO,
+ MOVE_STOCKPILE,
+ MOVE_SPIT_UP,
+ MOVE_SWALLOW,
+ MOVE_ROLLOUT,
+ MOVE_INFERNO,
+ MOVE_EARTH_POWER,
+ MOVE_GUARD_SWAP,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SLUGMA
#if P_FAMILY_SWINUB
- egg_moves(SWINUB,
- MOVE_TAKE_DOWN,
- MOVE_BITE,
- MOVE_BODY_SLAM,
- MOVE_ANCIENT_POWER,
- MOVE_MUD_SHOT,
- MOVE_ICICLE_SPEAR,
- MOVE_DOUBLE_EDGE,
- MOVE_FISSURE,
- MOVE_CURSE,
- MOVE_MUD_SHOT,
- MOVE_AVALANCHE,
- MOVE_STEALTH_ROCK,
- MOVE_ICICLE_CRASH,
- MOVE_FREEZE_DRY),
+static const u16 sSwinubEggMoveLearnset[] = {
+ MOVE_TAKE_DOWN,
+ MOVE_BITE,
+ MOVE_BODY_SLAM,
+ MOVE_ANCIENT_POWER,
+ MOVE_MUD_SHOT,
+ MOVE_ICICLE_SPEAR,
+ MOVE_DOUBLE_EDGE,
+ MOVE_FISSURE,
+ MOVE_CURSE,
+ MOVE_MUD_SHOT,
+ MOVE_AVALANCHE,
+ MOVE_STEALTH_ROCK,
+ MOVE_ICICLE_CRASH,
+ MOVE_FREEZE_DRY,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SWINUB
#if P_FAMILY_CORSOLA
- egg_moves(CORSOLA,
- MOVE_SCREECH,
- MOVE_MIST,
- MOVE_AMNESIA,
- MOVE_BARRIER,
- MOVE_INGRAIN,
- MOVE_CONFUSE_RAY,
- MOVE_ICICLE_SPEAR,
- MOVE_NATURE_POWER,
- MOVE_AQUA_RING,
- MOVE_CURSE,
- MOVE_BIDE,
- MOVE_WATER_PULSE,
- MOVE_HEAD_SMASH,
- MOVE_CAMOUFLAGE,
- MOVE_LIQUIDATION),
+static const u16 sCorsolaEggMoveLearnset[] = {
+ MOVE_SCREECH,
+ MOVE_MIST,
+ MOVE_AMNESIA,
+ MOVE_BARRIER,
+ MOVE_INGRAIN,
+ MOVE_CONFUSE_RAY,
+ MOVE_ICICLE_SPEAR,
+ MOVE_NATURE_POWER,
+ MOVE_AQUA_RING,
+ MOVE_CURSE,
+ MOVE_BIDE,
+ MOVE_WATER_PULSE,
+ MOVE_HEAD_SMASH,
+ MOVE_CAMOUFLAGE,
+ MOVE_LIQUIDATION,
+ MOVE_UNAVAILABLE,
+};
#if P_GALARIAN_FORMS
- egg_moves(CORSOLA_GALARIAN,
- MOVE_HAZE,
- MOVE_CONFUSE_RAY,
- MOVE_NATURE_POWER,
- MOVE_DESTINY_BOND,
- MOVE_WATER_PULSE,
- MOVE_HEAD_SMASH),
+static const u16 sCorsolaGalarianEggMoveLearnset[] = {
+ MOVE_HAZE,
+ MOVE_CONFUSE_RAY,
+ MOVE_NATURE_POWER,
+ MOVE_DESTINY_BOND,
+ MOVE_WATER_PULSE,
+ MOVE_HEAD_SMASH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_GALARIAN_FORMS
#endif //P_FAMILY_CORSOLA
#if P_FAMILY_REMORAID
- egg_moves(REMORAID,
- MOVE_AURORA_BEAM,
- MOVE_OCTAZOOKA,
- MOVE_SUPERSONIC,
- MOVE_HAZE,
- MOVE_SCREECH,
- MOVE_ROCK_BLAST,
- MOVE_SNORE,
- MOVE_FLAIL,
- MOVE_WATER_SPOUT,
- MOVE_MUD_SHOT,
- MOVE_SWIFT,
- MOVE_ACID_SPRAY,
- MOVE_WATER_PULSE,
- MOVE_ENTRAINMENT),
+static const u16 sRemoraidEggMoveLearnset[] = {
+ MOVE_AURORA_BEAM,
+ MOVE_OCTAZOOKA,
+ MOVE_SUPERSONIC,
+ MOVE_HAZE,
+ MOVE_SCREECH,
+ MOVE_ROCK_BLAST,
+ MOVE_SNORE,
+ MOVE_FLAIL,
+ MOVE_WATER_SPOUT,
+ MOVE_MUD_SHOT,
+ MOVE_SWIFT,
+ MOVE_ACID_SPRAY,
+ MOVE_WATER_PULSE,
+ MOVE_ENTRAINMENT,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_REMORAID
#if P_FAMILY_DELIBIRD
- egg_moves(DELIBIRD,
- MOVE_AURORA_BEAM,
- MOVE_QUICK_ATTACK,
- MOVE_FUTURE_SIGHT,
- MOVE_SPLASH,
- MOVE_RAPID_SPIN,
- MOVE_ICE_BALL,
- MOVE_ICE_SHARD,
- MOVE_ICE_PUNCH,
- MOVE_FAKE_OUT,
- MOVE_BESTOW,
- MOVE_ICY_WIND,
- MOVE_FREEZE_DRY,
- MOVE_DESTINY_BOND,
- MOVE_SPIKES,
- MOVE_COUNTER),
+static const u16 sDelibirdEggMoveLearnset[] = {
+ MOVE_AURORA_BEAM,
+ MOVE_QUICK_ATTACK,
+ MOVE_FUTURE_SIGHT,
+ MOVE_SPLASH,
+ MOVE_RAPID_SPIN,
+ MOVE_ICE_BALL,
+ MOVE_ICE_SHARD,
+ MOVE_ICE_PUNCH,
+ MOVE_FAKE_OUT,
+ MOVE_BESTOW,
+ MOVE_ICY_WIND,
+ MOVE_FREEZE_DRY,
+ MOVE_DESTINY_BOND,
+ MOVE_SPIKES,
+ MOVE_COUNTER,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_DELIBIRD
#if P_FAMILY_MANTINE
#if P_GEN_4_CROSS_EVOS
- egg_moves(MANTYKE,
- MOVE_TWISTER,
- MOVE_HYDRO_PUMP,
- MOVE_HAZE,
- MOVE_SLAM,
- MOVE_MUD_SPORT,
- MOVE_MIRROR_COAT,
- MOVE_WATER_SPORT,
- MOVE_SPLASH,
- MOVE_SIGNAL_BEAM,
- MOVE_WIDE_GUARD,
- MOVE_AMNESIA,
- MOVE_TAILWIND),
+static const u16 sMantykeEggMoveLearnset[] = {
+ MOVE_TWISTER,
+ MOVE_HYDRO_PUMP,
+ MOVE_HAZE,
+ MOVE_SLAM,
+ MOVE_MUD_SPORT,
+ MOVE_MIRROR_COAT,
+ MOVE_WATER_SPORT,
+ MOVE_SPLASH,
+ MOVE_SIGNAL_BEAM,
+ MOVE_WIDE_GUARD,
+ MOVE_AMNESIA,
+ MOVE_TAILWIND,
+ MOVE_UNAVAILABLE,
+};
#endif //P_GEN_4_CROSS_EVOS
- egg_moves(MANTINE,
- MOVE_TWISTER,
- MOVE_HYDRO_PUMP,
- MOVE_HAZE,
- MOVE_SLAM,
- MOVE_MUD_SPORT,
- MOVE_MIRROR_COAT,
- MOVE_WATER_SPORT,
- MOVE_SPLASH,
- MOVE_WIDE_GUARD,
- MOVE_AMNESIA),
+static const u16 sMantineEggMoveLearnset[] = {
+ MOVE_TWISTER,
+ MOVE_HYDRO_PUMP,
+ MOVE_HAZE,
+ MOVE_SLAM,
+ MOVE_MUD_SPORT,
+ MOVE_MIRROR_COAT,
+ MOVE_WATER_SPORT,
+ MOVE_SPLASH,
+ MOVE_WIDE_GUARD,
+ MOVE_AMNESIA,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_MANTINE
#if P_FAMILY_SKARMORY
- egg_moves(SKARMORY,
- MOVE_DRILL_PECK,
- MOVE_PURSUIT,
- MOVE_WHIRLWIND,
- MOVE_SKY_ATTACK,
- MOVE_CURSE,
- MOVE_BRAVE_BIRD,
- MOVE_ASSURANCE,
- MOVE_GUARD_SWAP,
- MOVE_STEALTH_ROCK,
- MOVE_ENDURE),
+static const u16 sSkarmoryEggMoveLearnset[] = {
+ MOVE_DRILL_PECK,
+ MOVE_PURSUIT,
+ MOVE_WHIRLWIND,
+ MOVE_SKY_ATTACK,
+ MOVE_CURSE,
+ MOVE_BRAVE_BIRD,
+ MOVE_ASSURANCE,
+ MOVE_GUARD_SWAP,
+ MOVE_STEALTH_ROCK,
+ MOVE_ENDURE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SKARMORY
#if P_FAMILY_HOUNDOUR
- egg_moves(HOUNDOUR,
- MOVE_FIRE_SPIN,
- MOVE_RAGE,
- MOVE_PURSUIT,
- MOVE_COUNTER,
- MOVE_SPITE,
- MOVE_REVERSAL,
- MOVE_BEAT_UP,
- MOVE_FIRE_FANG,
- MOVE_THUNDER_FANG,
- MOVE_NASTY_PLOT,
- MOVE_PUNISHMENT,
- MOVE_FEINT,
- MOVE_SUCKER_PUNCH,
- MOVE_DESTINY_BOND),
+static const u16 sHoundourEggMoveLearnset[] = {
+ MOVE_FIRE_SPIN,
+ MOVE_RAGE,
+ MOVE_PURSUIT,
+ MOVE_COUNTER,
+ MOVE_SPITE,
+ MOVE_REVERSAL,
+ MOVE_BEAT_UP,
+ MOVE_FIRE_FANG,
+ MOVE_THUNDER_FANG,
+ MOVE_NASTY_PLOT,
+ MOVE_PUNISHMENT,
+ MOVE_FEINT,
+ MOVE_SUCKER_PUNCH,
+ MOVE_DESTINY_BOND,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_HOUNDOUR
#if P_FAMILY_PHANPY
- egg_moves(PHANPY,
- MOVE_FOCUS_ENERGY,
- MOVE_BODY_SLAM,
- MOVE_ANCIENT_POWER,
- MOVE_SNORE,
- MOVE_COUNTER,
- MOVE_FISSURE,
- MOVE_ENDEAVOR,
- MOVE_ICE_SHARD,
- MOVE_HEAD_SMASH,
- MOVE_MUD_SLAP,
- MOVE_HEAVY_SLAM,
- MOVE_PLAY_ROUGH,
- MOVE_HIGH_HORSEPOWER),
+static const u16 sPhanpyEggMoveLearnset[] = {
+ MOVE_FOCUS_ENERGY,
+ MOVE_BODY_SLAM,
+ MOVE_ANCIENT_POWER,
+ MOVE_SNORE,
+ MOVE_COUNTER,
+ MOVE_FISSURE,
+ MOVE_ENDEAVOR,
+ MOVE_ICE_SHARD,
+ MOVE_HEAD_SMASH,
+ MOVE_MUD_SLAP,
+ MOVE_HEAVY_SLAM,
+ MOVE_PLAY_ROUGH,
+ MOVE_HIGH_HORSEPOWER,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_PHANPY
#if P_FAMILY_STANTLER
- egg_moves(STANTLER,
- MOVE_SPITE,
- MOVE_DISABLE,
- MOVE_BITE,
- MOVE_EXTRASENSORY,
- MOVE_THRASH,
- MOVE_DOUBLE_KICK,
- MOVE_ZEN_HEADBUTT,
- MOVE_MEGAHORN,
- MOVE_MUD_SPORT,
- MOVE_RAGE,
- MOVE_ME_FIRST),
+static const u16 sStantlerEggMoveLearnset[] = {
+ MOVE_SPITE,
+ MOVE_DISABLE,
+ MOVE_BITE,
+ MOVE_EXTRASENSORY,
+ MOVE_THRASH,
+ MOVE_DOUBLE_KICK,
+ MOVE_ZEN_HEADBUTT,
+ MOVE_MEGAHORN,
+ MOVE_MUD_SPORT,
+ MOVE_RAGE,
+ MOVE_ME_FIRST,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_STANTLER
#if P_FAMILY_MILTANK
- egg_moves(MILTANK,
- MOVE_PRESENT,
- MOVE_REVERSAL,
- MOVE_SEISMIC_TOSS,
- MOVE_ENDURE,
- MOVE_CURSE,
- MOVE_HELPING_HAND,
- MOVE_SLEEP_TALK,
- MOVE_DIZZY_PUNCH,
- MOVE_HAMMER_ARM,
- MOVE_DOUBLE_EDGE,
- MOVE_PUNISHMENT,
- MOVE_NATURAL_GIFT,
- MOVE_HEART_STAMP,
- MOVE_BELCH),
+static const u16 sMiltankEggMoveLearnset[] = {
+ MOVE_PRESENT,
+ MOVE_REVERSAL,
+ MOVE_SEISMIC_TOSS,
+ MOVE_ENDURE,
+ MOVE_CURSE,
+ MOVE_HELPING_HAND,
+ MOVE_SLEEP_TALK,
+ MOVE_DIZZY_PUNCH,
+ MOVE_HAMMER_ARM,
+ MOVE_DOUBLE_EDGE,
+ MOVE_PUNISHMENT,
+ MOVE_NATURAL_GIFT,
+ MOVE_HEART_STAMP,
+ MOVE_BELCH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_MILTANK
#if P_FAMILY_LARVITAR
- egg_moves(LARVITAR,
- MOVE_PURSUIT,
- MOVE_STOMP,
- MOVE_OUTRAGE,
- MOVE_FOCUS_ENERGY,
- MOVE_ANCIENT_POWER,
- MOVE_DRAGON_DANCE,
- MOVE_CURSE,
- MOVE_IRON_DEFENSE,
- MOVE_ASSURANCE,
- MOVE_IRON_HEAD,
- MOVE_STEALTH_ROCK,
- MOVE_IRON_TAIL),
+static const u16 sLarvitarEggMoveLearnset[] = {
+ MOVE_PURSUIT,
+ MOVE_STOMP,
+ MOVE_OUTRAGE,
+ MOVE_FOCUS_ENERGY,
+ MOVE_ANCIENT_POWER,
+ MOVE_DRAGON_DANCE,
+ MOVE_CURSE,
+ MOVE_IRON_DEFENSE,
+ MOVE_ASSURANCE,
+ MOVE_IRON_HEAD,
+ MOVE_STEALTH_ROCK,
+ MOVE_IRON_TAIL,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_LARVITAR
#if P_FAMILY_TREECKO
- egg_moves(TREECKO,
- MOVE_CRUNCH,
- MOVE_MUD_SPORT,
- MOVE_ENDEAVOR,
- MOVE_LEECH_SEED,
- MOVE_DRAGON_BREATH,
- MOVE_CRUSH_CLAW,
- MOVE_WORRY_SEED,
- MOVE_DOUBLE_KICK,
- MOVE_GRASS_WHISTLE,
- MOVE_SYNTHESIS,
- MOVE_MAGICAL_LEAF,
- MOVE_LEAF_STORM,
- MOVE_RAZOR_WIND,
- MOVE_BULLET_SEED,
- MOVE_NATURAL_GIFT,
- MOVE_GRASSY_TERRAIN),
+static const u16 sTreeckoEggMoveLearnset[] = {
+ MOVE_CRUNCH,
+ MOVE_MUD_SPORT,
+ MOVE_ENDEAVOR,
+ MOVE_LEECH_SEED,
+ MOVE_DRAGON_BREATH,
+ MOVE_CRUSH_CLAW,
+ MOVE_WORRY_SEED,
+ MOVE_DOUBLE_KICK,
+ MOVE_GRASS_WHISTLE,
+ MOVE_SYNTHESIS,
+ MOVE_MAGICAL_LEAF,
+ MOVE_LEAF_STORM,
+ MOVE_RAZOR_WIND,
+ MOVE_BULLET_SEED,
+ MOVE_NATURAL_GIFT,
+ MOVE_GRASSY_TERRAIN,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_TREECKO
#if P_FAMILY_TORCHIC
- egg_moves(TORCHIC,
- MOVE_COUNTER,
- MOVE_REVERSAL,
- MOVE_ENDURE,
- MOVE_SMELLING_SALTS,
- MOVE_CRUSH_CLAW,
- MOVE_BATON_PASS,
- MOVE_AGILITY,
- MOVE_NIGHT_SLASH,
- MOVE_LAST_RESORT,
- MOVE_FEINT,
- MOVE_FEATHER_DANCE,
- MOVE_CURSE,
- MOVE_FLAME_BURST,
- MOVE_LOW_KICK),
+static const u16 sTorchicEggMoveLearnset[] = {
+ MOVE_COUNTER,
+ MOVE_REVERSAL,
+ MOVE_ENDURE,
+ MOVE_SMELLING_SALTS,
+ MOVE_CRUSH_CLAW,
+ MOVE_BATON_PASS,
+ MOVE_AGILITY,
+ MOVE_NIGHT_SLASH,
+ MOVE_LAST_RESORT,
+ MOVE_FEINT,
+ MOVE_FEATHER_DANCE,
+ MOVE_CURSE,
+ MOVE_FLAME_BURST,
+ MOVE_LOW_KICK,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_TORCHIC
#if P_FAMILY_MUDKIP
- egg_moves(MUDKIP,
- MOVE_REFRESH,
- MOVE_UPROAR,
- MOVE_CURSE,
- MOVE_STOMP,
- MOVE_ICE_BALL,
- MOVE_MIRROR_COAT,
- MOVE_COUNTER,
- MOVE_ANCIENT_POWER,
- MOVE_WHIRLPOOL,
- MOVE_BITE,
- MOVE_DOUBLE_EDGE,
- MOVE_MUD_BOMB,
- MOVE_YAWN,
- MOVE_SLUDGE,
- MOVE_AVALANCHE,
- MOVE_WIDE_GUARD,
- MOVE_BARRIER),
+static const u16 sMudkipEggMoveLearnset[] = {
+ MOVE_REFRESH,
+ MOVE_UPROAR,
+ MOVE_CURSE,
+ MOVE_STOMP,
+ MOVE_ICE_BALL,
+ MOVE_MIRROR_COAT,
+ MOVE_COUNTER,
+ MOVE_ANCIENT_POWER,
+ MOVE_WHIRLPOOL,
+ MOVE_BITE,
+ MOVE_DOUBLE_EDGE,
+ MOVE_MUD_BOMB,
+ MOVE_YAWN,
+ MOVE_SLUDGE,
+ MOVE_AVALANCHE,
+ MOVE_WIDE_GUARD,
+ MOVE_BARRIER,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_MUDKIP
#if P_FAMILY_POOCHYENA
- egg_moves(POOCHYENA,
- MOVE_ASTONISH,
- MOVE_POISON_FANG,
- MOVE_COVET,
- MOVE_LEER,
- MOVE_YAWN,
- MOVE_SUCKER_PUNCH,
- MOVE_ICE_FANG,
- MOVE_FIRE_FANG,
- MOVE_THUNDER_FANG,
- MOVE_ME_FIRST,
- MOVE_SNATCH,
- MOVE_SLEEP_TALK,
- MOVE_PLAY_ROUGH),
+static const u16 sPoochyenaEggMoveLearnset[] = {
+ MOVE_ASTONISH,
+ MOVE_POISON_FANG,
+ MOVE_COVET,
+ MOVE_LEER,
+ MOVE_YAWN,
+ MOVE_SUCKER_PUNCH,
+ MOVE_ICE_FANG,
+ MOVE_FIRE_FANG,
+ MOVE_THUNDER_FANG,
+ MOVE_ME_FIRST,
+ MOVE_SNATCH,
+ MOVE_SLEEP_TALK,
+ MOVE_PLAY_ROUGH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_POOCHYENA
#if P_FAMILY_ZIGZAGOON
- egg_moves(ZIGZAGOON,
- MOVE_CHARM,
- MOVE_PURSUIT,
- MOVE_TICKLE,
- MOVE_TRICK,
- MOVE_HELPING_HAND,
- MOVE_MUD_SLAP,
- MOVE_SLEEP_TALK,
- MOVE_ROCK_CLIMB,
- MOVE_SIMPLE_BEAM,
- MOVE_EXTREME_SPEED),
+static const u16 sZigzagoonEggMoveLearnset[] = {
+ MOVE_CHARM,
+ MOVE_PURSUIT,
+ MOVE_TICKLE,
+ MOVE_TRICK,
+ MOVE_HELPING_HAND,
+ MOVE_MUD_SLAP,
+ MOVE_SLEEP_TALK,
+ MOVE_ROCK_CLIMB,
+ MOVE_SIMPLE_BEAM,
+ MOVE_EXTREME_SPEED,
+ MOVE_UNAVAILABLE,
+};
#if P_GALARIAN_FORMS
- egg_moves(ZIGZAGOON_GALARIAN,
- MOVE_PARTING_SHOT,
- MOVE_QUICK_GUARD,
- MOVE_KNOCK_OFF),
+static const u16 sZigzagoonGalarianEggMoveLearnset[] = {
+ MOVE_PARTING_SHOT,
+ MOVE_QUICK_GUARD,
+ MOVE_KNOCK_OFF,
+ MOVE_UNAVAILABLE,
+};
#endif //P_GALARIAN_FORMS
#endif //P_FAMILY_ZIGZAGOON
#if P_FAMILY_LOTAD
- egg_moves(LOTAD,
- MOVE_SYNTHESIS,
- MOVE_RAZOR_LEAF,
- MOVE_SWEET_SCENT,
- MOVE_LEECH_SEED,
- MOVE_FLAIL,
- MOVE_WATER_GUN,
- MOVE_TICKLE,
- MOVE_COUNTER,
- MOVE_GIGA_DRAIN,
- MOVE_TEETER_DANCE),
+static const u16 sLotadEggMoveLearnset[] = {
+ MOVE_SYNTHESIS,
+ MOVE_RAZOR_LEAF,
+ MOVE_SWEET_SCENT,
+ MOVE_LEECH_SEED,
+ MOVE_FLAIL,
+ MOVE_WATER_GUN,
+ MOVE_TICKLE,
+ MOVE_COUNTER,
+ MOVE_GIGA_DRAIN,
+ MOVE_TEETER_DANCE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_LOTAD
#if P_FAMILY_SEEDOT
- egg_moves(SEEDOT,
- MOVE_LEECH_SEED,
- MOVE_AMNESIA,
- MOVE_QUICK_ATTACK,
- MOVE_RAZOR_WIND,
- MOVE_TAKE_DOWN,
- MOVE_WORRY_SEED,
- MOVE_NASTY_PLOT,
- MOVE_POWER_SWAP,
- MOVE_DEFOG,
- MOVE_FOUL_PLAY,
- MOVE_BEAT_UP,
- MOVE_BULLET_SEED,
- MOVE_GRASSY_TERRAIN),
+static const u16 sSeedotEggMoveLearnset[] = {
+ MOVE_LEECH_SEED,
+ MOVE_AMNESIA,
+ MOVE_QUICK_ATTACK,
+ MOVE_RAZOR_WIND,
+ MOVE_TAKE_DOWN,
+ MOVE_WORRY_SEED,
+ MOVE_NASTY_PLOT,
+ MOVE_POWER_SWAP,
+ MOVE_DEFOG,
+ MOVE_FOUL_PLAY,
+ MOVE_BEAT_UP,
+ MOVE_BULLET_SEED,
+ MOVE_GRASSY_TERRAIN,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SEEDOT
#if P_FAMILY_TAILLOW
- egg_moves(TAILLOW,
- MOVE_PURSUIT,
- MOVE_SUPERSONIC,
- MOVE_REFRESH,
- MOVE_MIRROR_MOVE,
- MOVE_RAGE,
- MOVE_SKY_ATTACK,
- MOVE_WHIRLWIND,
- MOVE_BRAVE_BIRD,
- MOVE_ROOST,
- MOVE_STEEL_WING,
- MOVE_DEFOG,
- MOVE_BOOMBURST,
- MOVE_HURRICANE),
+static const u16 sTaillowEggMoveLearnset[] = {
+ MOVE_PURSUIT,
+ MOVE_SUPERSONIC,
+ MOVE_REFRESH,
+ MOVE_MIRROR_MOVE,
+ MOVE_RAGE,
+ MOVE_SKY_ATTACK,
+ MOVE_WHIRLWIND,
+ MOVE_BRAVE_BIRD,
+ MOVE_ROOST,
+ MOVE_STEEL_WING,
+ MOVE_DEFOG,
+ MOVE_BOOMBURST,
+ MOVE_HURRICANE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_TAILLOW
#if P_FAMILY_WINGULL
- egg_moves(WINGULL,
- MOVE_MIST,
- MOVE_TWISTER,
- MOVE_AGILITY,
- MOVE_GUST,
- MOVE_WATER_SPORT,
- MOVE_AQUA_RING,
- MOVE_KNOCK_OFF,
- MOVE_BRINE,
- MOVE_ROOST,
- MOVE_SOAK,
- MOVE_WIDE_GUARD),
+static const u16 sWingullEggMoveLearnset[] = {
+ MOVE_MIST,
+ MOVE_TWISTER,
+ MOVE_AGILITY,
+ MOVE_GUST,
+ MOVE_WATER_SPORT,
+ MOVE_AQUA_RING,
+ MOVE_KNOCK_OFF,
+ MOVE_BRINE,
+ MOVE_ROOST,
+ MOVE_SOAK,
+ MOVE_WIDE_GUARD,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_WINGULL
#if P_FAMILY_RALTS
- egg_moves(RALTS,
- MOVE_DISABLE,
- MOVE_MEAN_LOOK,
- MOVE_MEMENTO,
- MOVE_DESTINY_BOND,
- MOVE_GRUDGE,
- MOVE_SHADOW_SNEAK,
- MOVE_CONFUSE_RAY,
- MOVE_ENCORE,
- MOVE_SYNCHRONOISE,
- MOVE_SKILL_SWAP,
- MOVE_MISTY_TERRAIN,
- MOVE_ALLY_SWITCH),
+static const u16 sRaltsEggMoveLearnset[] = {
+ MOVE_DISABLE,
+ MOVE_MEAN_LOOK,
+ MOVE_MEMENTO,
+ MOVE_DESTINY_BOND,
+ MOVE_GRUDGE,
+ MOVE_SHADOW_SNEAK,
+ MOVE_CONFUSE_RAY,
+ MOVE_ENCORE,
+ MOVE_SYNCHRONOISE,
+ MOVE_SKILL_SWAP,
+ MOVE_MISTY_TERRAIN,
+ MOVE_ALLY_SWITCH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_RALTS
#if P_FAMILY_SURSKIT
- egg_moves(SURSKIT,
- MOVE_FORESIGHT,
- MOVE_MUD_SHOT,
- MOVE_PSYBEAM,
- MOVE_HYDRO_PUMP,
- MOVE_MIND_READER,
- MOVE_SIGNAL_BEAM,
- MOVE_BUG_BITE,
- MOVE_AQUA_JET,
- MOVE_ENDURE,
- MOVE_FELL_STINGER,
- MOVE_POWER_SPLIT,
- MOVE_LUNGE),
+static const u16 sSurskitEggMoveLearnset[] = {
+ MOVE_FORESIGHT,
+ MOVE_MUD_SHOT,
+ MOVE_PSYBEAM,
+ MOVE_HYDRO_PUMP,
+ MOVE_MIND_READER,
+ MOVE_SIGNAL_BEAM,
+ MOVE_BUG_BITE,
+ MOVE_AQUA_JET,
+ MOVE_ENDURE,
+ MOVE_FELL_STINGER,
+ MOVE_POWER_SPLIT,
+ MOVE_LUNGE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SURSKIT
#if P_FAMILY_SHROOMISH
- egg_moves(SHROOMISH,
- MOVE_FAKE_TEARS,
- MOVE_CHARM,
- MOVE_HELPING_HAND,
- MOVE_WORRY_SEED,
- MOVE_WAKE_UP_SLAP,
- MOVE_SEED_BOMB,
- MOVE_BULLET_SEED,
- MOVE_FOCUS_PUNCH,
- MOVE_NATURAL_GIFT,
- MOVE_DRAIN_PUNCH),
+static const u16 sShroomishEggMoveLearnset[] = {
+ MOVE_FAKE_TEARS,
+ MOVE_CHARM,
+ MOVE_HELPING_HAND,
+ MOVE_WORRY_SEED,
+ MOVE_WAKE_UP_SLAP,
+ MOVE_SEED_BOMB,
+ MOVE_BULLET_SEED,
+ MOVE_FOCUS_PUNCH,
+ MOVE_NATURAL_GIFT,
+ MOVE_DRAIN_PUNCH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SHROOMISH
#if P_FAMILY_SLAKOTH
- egg_moves(SLAKOTH,
- MOVE_PURSUIT,
- MOVE_SLASH,
- MOVE_BODY_SLAM,
- MOVE_SNORE,
- MOVE_CRUSH_CLAW,
- MOVE_CURSE,
- MOVE_SLEEP_TALK,
- MOVE_HAMMER_ARM,
- MOVE_NIGHT_SLASH,
- MOVE_AFTER_YOU,
- MOVE_TICKLE),
+static const u16 sSlakothEggMoveLearnset[] = {
+ MOVE_PURSUIT,
+ MOVE_SLASH,
+ MOVE_BODY_SLAM,
+ MOVE_SNORE,
+ MOVE_CRUSH_CLAW,
+ MOVE_CURSE,
+ MOVE_SLEEP_TALK,
+ MOVE_HAMMER_ARM,
+ MOVE_NIGHT_SLASH,
+ MOVE_AFTER_YOU,
+ MOVE_TICKLE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SLAKOTH
#if P_FAMILY_NINCADA
- egg_moves(NINCADA,
- MOVE_ENDURE,
- MOVE_FEINT_ATTACK,
- MOVE_GUST,
- MOVE_SILVER_WIND,
- MOVE_BUG_BUZZ,
- MOVE_NIGHT_SLASH,
- MOVE_BUG_BITE,
- MOVE_FINAL_GAMBIT),
+static const u16 sNincadaEggMoveLearnset[] = {
+ MOVE_ENDURE,
+ MOVE_FEINT_ATTACK,
+ MOVE_GUST,
+ MOVE_SILVER_WIND,
+ MOVE_BUG_BUZZ,
+ MOVE_NIGHT_SLASH,
+ MOVE_BUG_BITE,
+ MOVE_FINAL_GAMBIT,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_NINCADA
#if P_FAMILY_WHISMUR
- egg_moves(WHISMUR,
- MOVE_TAKE_DOWN,
- MOVE_SNORE,
- MOVE_EXTRASENSORY,
- MOVE_SMELLING_SALTS,
- MOVE_SMOKESCREEN,
- MOVE_ENDEAVOR,
- MOVE_HAMMER_ARM,
- MOVE_FAKE_TEARS,
- MOVE_CIRCLE_THROW,
- MOVE_DISARMING_VOICE,
- MOVE_WHIRLWIND),
+static const u16 sWhismurEggMoveLearnset[] = {
+ MOVE_TAKE_DOWN,
+ MOVE_SNORE,
+ MOVE_EXTRASENSORY,
+ MOVE_SMELLING_SALTS,
+ MOVE_SMOKESCREEN,
+ MOVE_ENDEAVOR,
+ MOVE_HAMMER_ARM,
+ MOVE_FAKE_TEARS,
+ MOVE_CIRCLE_THROW,
+ MOVE_DISARMING_VOICE,
+ MOVE_WHIRLWIND,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_WHISMUR
#if P_FAMILY_MAKUHITA
- egg_moves(MAKUHITA,
- MOVE_FEINT_ATTACK,
- MOVE_DETECT,
- MOVE_FORESIGHT,
- MOVE_HELPING_HAND,
- MOVE_CROSS_CHOP,
- MOVE_REVENGE,
- MOVE_DYNAMIC_PUNCH,
- MOVE_COUNTER,
- MOVE_WAKE_UP_SLAP,
- MOVE_BULLET_PUNCH,
- MOVE_FEINT,
- MOVE_WIDE_GUARD,
- MOVE_FOCUS_PUNCH,
- MOVE_CHIP_AWAY),
+static const u16 sMakuhitaEggMoveLearnset[] = {
+ MOVE_FEINT_ATTACK,
+ MOVE_DETECT,
+ MOVE_FORESIGHT,
+ MOVE_HELPING_HAND,
+ MOVE_CROSS_CHOP,
+ MOVE_REVENGE,
+ MOVE_DYNAMIC_PUNCH,
+ MOVE_COUNTER,
+ MOVE_WAKE_UP_SLAP,
+ MOVE_BULLET_PUNCH,
+ MOVE_FEINT,
+ MOVE_WIDE_GUARD,
+ MOVE_FOCUS_PUNCH,
+ MOVE_CHIP_AWAY,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_MAKUHITA
#if P_FAMILY_NOSEPASS
- egg_moves(NOSEPASS,
- MOVE_MAGNITUDE,
- MOVE_ROLLOUT,
- MOVE_DOUBLE_EDGE,
- MOVE_BLOCK,
- MOVE_STEALTH_ROCK,
- MOVE_ENDURE,
- MOVE_WIDE_GUARD),
+static const u16 sNosepassEggMoveLearnset[] = {
+ MOVE_MAGNITUDE,
+ MOVE_ROLLOUT,
+ MOVE_DOUBLE_EDGE,
+ MOVE_BLOCK,
+ MOVE_STEALTH_ROCK,
+ MOVE_ENDURE,
+ MOVE_WIDE_GUARD,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_NOSEPASS
#if P_FAMILY_SKITTY
- egg_moves(SKITTY,
- MOVE_HELPING_HAND,
- MOVE_UPROAR,
- MOVE_FAKE_TEARS,
- MOVE_WISH,
- MOVE_BATON_PASS,
- MOVE_TICKLE,
- MOVE_LAST_RESORT,
- MOVE_FAKE_OUT,
- MOVE_ZEN_HEADBUTT,
- MOVE_SUCKER_PUNCH,
- MOVE_MUD_BOMB,
- MOVE_SIMPLE_BEAM,
- MOVE_CAPTIVATE,
- MOVE_COSMIC_POWER),
+static const u16 sSkittyEggMoveLearnset[] = {
+ MOVE_HELPING_HAND,
+ MOVE_UPROAR,
+ MOVE_FAKE_TEARS,
+ MOVE_WISH,
+ MOVE_BATON_PASS,
+ MOVE_TICKLE,
+ MOVE_LAST_RESORT,
+ MOVE_FAKE_OUT,
+ MOVE_ZEN_HEADBUTT,
+ MOVE_SUCKER_PUNCH,
+ MOVE_MUD_BOMB,
+ MOVE_SIMPLE_BEAM,
+ MOVE_CAPTIVATE,
+ MOVE_COSMIC_POWER,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SKITTY
#if P_FAMILY_SABLEYE
- egg_moves(SABLEYE,
- MOVE_RECOVER,
- MOVE_MOONLIGHT,
- MOVE_NASTY_PLOT,
- MOVE_FLATTER,
- MOVE_FEINT,
- MOVE_SUCKER_PUNCH,
- MOVE_TRICK,
- MOVE_CAPTIVATE,
- MOVE_MEAN_LOOK,
- MOVE_METAL_BURST,
- MOVE_IMPRISON),
+static const u16 sSableyeEggMoveLearnset[] = {
+ MOVE_RECOVER,
+ MOVE_MOONLIGHT,
+ MOVE_NASTY_PLOT,
+ MOVE_FLATTER,
+ MOVE_FEINT,
+ MOVE_SUCKER_PUNCH,
+ MOVE_TRICK,
+ MOVE_CAPTIVATE,
+ MOVE_MEAN_LOOK,
+ MOVE_METAL_BURST,
+ MOVE_IMPRISON,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SABLEYE
#if P_FAMILY_MAWILE
- egg_moves(MAWILE,
- MOVE_POISON_FANG,
- MOVE_ANCIENT_POWER,
- MOVE_TICKLE,
- MOVE_SUCKER_PUNCH,
- MOVE_ICE_FANG,
- MOVE_FIRE_FANG,
- MOVE_THUNDER_FANG,
- MOVE_PUNISHMENT,
- MOVE_GUARD_SWAP,
- MOVE_CAPTIVATE,
- MOVE_SLAM,
- MOVE_METAL_BURST,
- MOVE_MISTY_TERRAIN,
- MOVE_SEISMIC_TOSS,
- MOVE_POWER_UP_PUNCH),
+static const u16 sMawileEggMoveLearnset[] = {
+ MOVE_POISON_FANG,
+ MOVE_ANCIENT_POWER,
+ MOVE_TICKLE,
+ MOVE_SUCKER_PUNCH,
+ MOVE_ICE_FANG,
+ MOVE_FIRE_FANG,
+ MOVE_THUNDER_FANG,
+ MOVE_PUNISHMENT,
+ MOVE_GUARD_SWAP,
+ MOVE_CAPTIVATE,
+ MOVE_SLAM,
+ MOVE_METAL_BURST,
+ MOVE_MISTY_TERRAIN,
+ MOVE_SEISMIC_TOSS,
+ MOVE_POWER_UP_PUNCH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_MAWILE
#if P_FAMILY_ARON
- egg_moves(ARON,
- MOVE_ENDEAVOR,
- MOVE_BODY_SLAM,
- MOVE_STOMP,
- MOVE_SMELLING_SALTS,
- MOVE_CURSE,
- MOVE_SCREECH,
- MOVE_IRON_HEAD,
- MOVE_DRAGON_RUSH,
- MOVE_HEAD_SMASH,
- MOVE_SUPERPOWER,
- MOVE_STEALTH_ROCK,
- MOVE_REVERSAL),
+static const u16 sAronEggMoveLearnset[] = {
+ MOVE_ENDEAVOR,
+ MOVE_BODY_SLAM,
+ MOVE_STOMP,
+ MOVE_SMELLING_SALTS,
+ MOVE_CURSE,
+ MOVE_SCREECH,
+ MOVE_IRON_HEAD,
+ MOVE_DRAGON_RUSH,
+ MOVE_HEAD_SMASH,
+ MOVE_SUPERPOWER,
+ MOVE_STEALTH_ROCK,
+ MOVE_REVERSAL,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_ARON
#if P_FAMILY_MEDITITE
- egg_moves(MEDITITE,
- MOVE_FIRE_PUNCH,
- MOVE_THUNDER_PUNCH,
- MOVE_ICE_PUNCH,
- MOVE_FORESIGHT,
- MOVE_FAKE_OUT,
- MOVE_BATON_PASS,
- MOVE_DYNAMIC_PUNCH,
- MOVE_POWER_SWAP,
- MOVE_GUARD_SWAP,
- MOVE_PSYCHO_CUT,
- MOVE_BULLET_PUNCH,
- MOVE_DRAIN_PUNCH,
- MOVE_SECRET_POWER,
- MOVE_QUICK_GUARD),
+static const u16 sMedititeEggMoveLearnset[] = {
+ MOVE_FIRE_PUNCH,
+ MOVE_THUNDER_PUNCH,
+ MOVE_ICE_PUNCH,
+ MOVE_FORESIGHT,
+ MOVE_FAKE_OUT,
+ MOVE_BATON_PASS,
+ MOVE_DYNAMIC_PUNCH,
+ MOVE_POWER_SWAP,
+ MOVE_GUARD_SWAP,
+ MOVE_PSYCHO_CUT,
+ MOVE_BULLET_PUNCH,
+ MOVE_DRAIN_PUNCH,
+ MOVE_SECRET_POWER,
+ MOVE_QUICK_GUARD,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_MEDITITE
#if P_FAMILY_ELECTRIKE
- egg_moves(ELECTRIKE,
- MOVE_CRUNCH,
- MOVE_HEADBUTT,
- MOVE_UPROAR,
- MOVE_CURSE,
- MOVE_SWIFT,
- MOVE_DISCHARGE,
- MOVE_ICE_FANG,
- MOVE_FIRE_FANG,
- MOVE_THUNDER_FANG,
- MOVE_SWITCHEROO,
- MOVE_ELECTRO_BALL,
- MOVE_SHOCK_WAVE,
- MOVE_FLAME_BURST,
- MOVE_EERIE_IMPULSE),
+static const u16 sElectrikeEggMoveLearnset[] = {
+ MOVE_CRUNCH,
+ MOVE_HEADBUTT,
+ MOVE_UPROAR,
+ MOVE_CURSE,
+ MOVE_SWIFT,
+ MOVE_DISCHARGE,
+ MOVE_ICE_FANG,
+ MOVE_FIRE_FANG,
+ MOVE_THUNDER_FANG,
+ MOVE_SWITCHEROO,
+ MOVE_ELECTRO_BALL,
+ MOVE_SHOCK_WAVE,
+ MOVE_FLAME_BURST,
+ MOVE_EERIE_IMPULSE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_ELECTRIKE
#if P_FAMILY_PLUSLE
- egg_moves(PLUSLE,
- MOVE_WISH,
- MOVE_SING,
- MOVE_SWEET_KISS,
- MOVE_DISCHARGE,
- MOVE_LUCKY_CHANT,
- MOVE_CHARM,
- MOVE_FAKE_TEARS,
- MOVE_TEARFUL_LOOK),
+static const u16 sPlusleEggMoveLearnset[] = {
+ MOVE_WISH,
+ MOVE_SING,
+ MOVE_SWEET_KISS,
+ MOVE_DISCHARGE,
+ MOVE_LUCKY_CHANT,
+ MOVE_CHARM,
+ MOVE_FAKE_TEARS,
+ MOVE_TEARFUL_LOOK,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_PLUSLE
#if P_FAMILY_MINUN
- egg_moves(MINUN,
- MOVE_WISH,
- MOVE_SING,
- MOVE_SWEET_KISS,
- MOVE_DISCHARGE,
- MOVE_LUCKY_CHANT,
- MOVE_CHARM,
- MOVE_FAKE_TEARS,
- MOVE_TEARFUL_LOOK),
+static const u16 sMinunEggMoveLearnset[] = {
+ MOVE_WISH,
+ MOVE_SING,
+ MOVE_SWEET_KISS,
+ MOVE_DISCHARGE,
+ MOVE_LUCKY_CHANT,
+ MOVE_CHARM,
+ MOVE_FAKE_TEARS,
+ MOVE_TEARFUL_LOOK,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_MINUN
#if P_FAMILY_VOLBEAT_ILLUMISE
- egg_moves(VOLBEAT,
- MOVE_BATON_PASS,
- MOVE_SILVER_WIND,
- MOVE_TRICK,
- MOVE_ENCORE,
- MOVE_BUG_BUZZ,
- MOVE_DIZZY_PUNCH,
- MOVE_SEISMIC_TOSS,
- MOVE_LUNGE),
-
- egg_moves(ILLUMISE,
- MOVE_BATON_PASS,
- MOVE_SILVER_WIND,
- MOVE_GROWTH,
- MOVE_ENCORE,
- MOVE_BUG_BUZZ,
- MOVE_CAPTIVATE,
- MOVE_FAKE_TEARS,
- MOVE_CONFUSE_RAY,
- MOVE_AROMATHERAPY),
+static const u16 sVolbeatEggMoveLearnset[] = {
+ MOVE_BATON_PASS,
+ MOVE_SILVER_WIND,
+ MOVE_TRICK,
+ MOVE_ENCORE,
+ MOVE_BUG_BUZZ,
+ MOVE_DIZZY_PUNCH,
+ MOVE_SEISMIC_TOSS,
+ MOVE_LUNGE,
+ MOVE_UNAVAILABLE,
+};
+
+static const u16 sIllumiseEggMoveLearnset[] = {
+ MOVE_BATON_PASS,
+ MOVE_SILVER_WIND,
+ MOVE_GROWTH,
+ MOVE_ENCORE,
+ MOVE_BUG_BUZZ,
+ MOVE_CAPTIVATE,
+ MOVE_FAKE_TEARS,
+ MOVE_CONFUSE_RAY,
+ MOVE_AROMATHERAPY,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_VOLBEAT_ILLUMISE
#if P_FAMILY_ROSELIA
#if P_GEN_4_CROSS_EVOS
- egg_moves(BUDEW,
- MOVE_SPIKES,
- MOVE_SYNTHESIS,
- MOVE_PIN_MISSILE,
- MOVE_COTTON_SPORE,
- MOVE_SLEEP_POWDER,
- MOVE_RAZOR_LEAF,
- MOVE_MIND_READER,
- MOVE_LEAF_STORM,
- MOVE_EXTRASENSORY,
- MOVE_SEED_BOMB,
- MOVE_GIGA_DRAIN,
- MOVE_NATURAL_GIFT,
- MOVE_GRASS_WHISTLE),
+static const u16 sBudewEggMoveLearnset[] = {
+ MOVE_SPIKES,
+ MOVE_SYNTHESIS,
+ MOVE_PIN_MISSILE,
+ MOVE_COTTON_SPORE,
+ MOVE_SLEEP_POWDER,
+ MOVE_RAZOR_LEAF,
+ MOVE_MIND_READER,
+ MOVE_LEAF_STORM,
+ MOVE_EXTRASENSORY,
+ MOVE_SEED_BOMB,
+ MOVE_GIGA_DRAIN,
+ MOVE_NATURAL_GIFT,
+ MOVE_GRASS_WHISTLE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_GEN_4_CROSS_EVOS
- egg_moves(ROSELIA,
- MOVE_SPIKES,
- MOVE_SYNTHESIS,
- MOVE_PIN_MISSILE,
- MOVE_COTTON_SPORE,
- MOVE_SLEEP_POWDER,
- MOVE_RAZOR_LEAF,
- MOVE_MIND_READER,
- MOVE_LEAF_STORM,
- MOVE_SEED_BOMB,
- MOVE_GIGA_DRAIN,
- MOVE_NATURAL_GIFT,
- MOVE_GRASS_WHISTLE,
- MOVE_BULLET_SEED,
- MOVE_POWER_WHIP),
+static const u16 sRoseliaEggMoveLearnset[] = {
+ MOVE_SPIKES,
+ MOVE_SYNTHESIS,
+ MOVE_PIN_MISSILE,
+ MOVE_COTTON_SPORE,
+ MOVE_SLEEP_POWDER,
+ MOVE_RAZOR_LEAF,
+ MOVE_MIND_READER,
+ MOVE_LEAF_STORM,
+ MOVE_SEED_BOMB,
+ MOVE_GIGA_DRAIN,
+ MOVE_NATURAL_GIFT,
+ MOVE_GRASS_WHISTLE,
+ MOVE_BULLET_SEED,
+ MOVE_POWER_WHIP,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_ROSELIA
#if P_FAMILY_GULPIN
- egg_moves(GULPIN,
- MOVE_ACID_ARMOR,
- MOVE_SMOG,
- MOVE_PAIN_SPLIT,
- MOVE_CURSE,
- MOVE_DESTINY_BOND,
- MOVE_MUD_SLAP,
- MOVE_GUNK_SHOT,
- MOVE_VENOM_DRENCH),
+static const u16 sGulpinEggMoveLearnset[] = {
+ MOVE_ACID_ARMOR,
+ MOVE_SMOG,
+ MOVE_PAIN_SPLIT,
+ MOVE_CURSE,
+ MOVE_DESTINY_BOND,
+ MOVE_MUD_SLAP,
+ MOVE_GUNK_SHOT,
+ MOVE_VENOM_DRENCH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_GULPIN
#if P_FAMILY_CARVANHA
- egg_moves(CARVANHA,
- MOVE_HYDRO_PUMP,
- MOVE_DOUBLE_EDGE,
- MOVE_THRASH,
- MOVE_ANCIENT_POWER,
- MOVE_SWIFT,
- MOVE_BRINE,
- MOVE_DESTINY_BOND,
- MOVE_PSYCHIC_FANGS),
+static const u16 sCarvanhaEggMoveLearnset[] = {
+ MOVE_HYDRO_PUMP,
+ MOVE_DOUBLE_EDGE,
+ MOVE_THRASH,
+ MOVE_ANCIENT_POWER,
+ MOVE_SWIFT,
+ MOVE_BRINE,
+ MOVE_DESTINY_BOND,
+ MOVE_PSYCHIC_FANGS,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_CARVANHA
#if P_FAMILY_WAILMER
- egg_moves(WAILMER,
- MOVE_DOUBLE_EDGE,
- MOVE_THRASH,
- MOVE_SNORE,
- MOVE_SLEEP_TALK,
- MOVE_CURSE,
- MOVE_FISSURE,
- MOVE_TICKLE,
- MOVE_DEFENSE_CURL,
- MOVE_BODY_SLAM,
- MOVE_AQUA_RING,
- MOVE_SOAK,
- MOVE_ZEN_HEADBUTT,
- MOVE_CLEAR_SMOG),
+static const u16 sWailmerEggMoveLearnset[] = {
+ MOVE_DOUBLE_EDGE,
+ MOVE_THRASH,
+ MOVE_SNORE,
+ MOVE_SLEEP_TALK,
+ MOVE_CURSE,
+ MOVE_FISSURE,
+ MOVE_TICKLE,
+ MOVE_DEFENSE_CURL,
+ MOVE_BODY_SLAM,
+ MOVE_AQUA_RING,
+ MOVE_SOAK,
+ MOVE_ZEN_HEADBUTT,
+ MOVE_CLEAR_SMOG,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_WAILMER
#if P_FAMILY_NUMEL
- egg_moves(NUMEL,
- MOVE_HOWL,
- MOVE_SCARY_FACE,
- MOVE_BODY_SLAM,
- MOVE_ROLLOUT,
- MOVE_DEFENSE_CURL,
- MOVE_STOMP,
- MOVE_YAWN,
- MOVE_ANCIENT_POWER,
- MOVE_MUD_BOMB,
- MOVE_HEAT_WAVE,
- MOVE_STOCKPILE,
- MOVE_SWALLOW,
- MOVE_SPIT_UP,
- MOVE_ENDURE,
- MOVE_IRON_HEAD,
- MOVE_GROWTH,
- MOVE_HEAVY_SLAM),
+static const u16 sNumelEggMoveLearnset[] = {
+ MOVE_HOWL,
+ MOVE_SCARY_FACE,
+ MOVE_BODY_SLAM,
+ MOVE_ROLLOUT,
+ MOVE_DEFENSE_CURL,
+ MOVE_STOMP,
+ MOVE_YAWN,
+ MOVE_ANCIENT_POWER,
+ MOVE_MUD_BOMB,
+ MOVE_HEAT_WAVE,
+ MOVE_STOCKPILE,
+ MOVE_SWALLOW,
+ MOVE_SPIT_UP,
+ MOVE_ENDURE,
+ MOVE_IRON_HEAD,
+ MOVE_GROWTH,
+ MOVE_HEAVY_SLAM,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_NUMEL
#if P_FAMILY_TORKOAL
- egg_moves(TORKOAL,
- MOVE_ERUPTION,
- MOVE_ENDURE,
- MOVE_SLEEP_TALK,
- MOVE_YAWN,
- MOVE_FISSURE,
- MOVE_SKULL_BASH,
- MOVE_FLAME_BURST,
- MOVE_CLEAR_SMOG,
- MOVE_SUPERPOWER),
+static const u16 sTorkoalEggMoveLearnset[] = {
+ MOVE_ERUPTION,
+ MOVE_ENDURE,
+ MOVE_SLEEP_TALK,
+ MOVE_YAWN,
+ MOVE_FISSURE,
+ MOVE_SKULL_BASH,
+ MOVE_FLAME_BURST,
+ MOVE_CLEAR_SMOG,
+ MOVE_SUPERPOWER,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_TORKOAL
#if P_FAMILY_SPOINK
- egg_moves(SPOINK,
- MOVE_FUTURE_SIGHT,
- MOVE_EXTRASENSORY,
- MOVE_TRICK,
- MOVE_ZEN_HEADBUTT,
- MOVE_AMNESIA,
- MOVE_MIRROR_COAT,
- MOVE_SKILL_SWAP,
- MOVE_WHIRLWIND,
- MOVE_LUCKY_CHANT,
- MOVE_ENDURE,
- MOVE_SIMPLE_BEAM),
+static const u16 sSpoinkEggMoveLearnset[] = {
+ MOVE_FUTURE_SIGHT,
+ MOVE_EXTRASENSORY,
+ MOVE_TRICK,
+ MOVE_ZEN_HEADBUTT,
+ MOVE_AMNESIA,
+ MOVE_MIRROR_COAT,
+ MOVE_SKILL_SWAP,
+ MOVE_WHIRLWIND,
+ MOVE_LUCKY_CHANT,
+ MOVE_ENDURE,
+ MOVE_SIMPLE_BEAM,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SPOINK
#if P_FAMILY_SPINDA
- egg_moves(SPINDA,
- MOVE_ENCORE,
- MOVE_ASSIST,
- MOVE_DISABLE,
- MOVE_BATON_PASS,
- MOVE_WISH,
- MOVE_TRICK,
- MOVE_SMELLING_SALTS,
- MOVE_FAKE_OUT,
- MOVE_ROLE_PLAY,
- MOVE_PSYCHO_CUT,
- MOVE_FAKE_TEARS,
- MOVE_RAPID_SPIN,
- MOVE_ICY_WIND,
- MOVE_WATER_PULSE,
- MOVE_PSYCHO_SHIFT,
- MOVE_GUARD_SPLIT,
- MOVE_SPOTLIGHT),
+static const u16 sSpindaEggMoveLearnset[] = {
+ MOVE_ENCORE,
+ MOVE_ASSIST,
+ MOVE_DISABLE,
+ MOVE_BATON_PASS,
+ MOVE_WISH,
+ MOVE_TRICK,
+ MOVE_SMELLING_SALTS,
+ MOVE_FAKE_OUT,
+ MOVE_ROLE_PLAY,
+ MOVE_PSYCHO_CUT,
+ MOVE_FAKE_TEARS,
+ MOVE_RAPID_SPIN,
+ MOVE_ICY_WIND,
+ MOVE_WATER_PULSE,
+ MOVE_PSYCHO_SHIFT,
+ MOVE_GUARD_SPLIT,
+ MOVE_SPOTLIGHT,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SPINDA
#if P_FAMILY_TRAPINCH
- egg_moves(TRAPINCH,
- MOVE_FOCUS_ENERGY,
- MOVE_QUICK_ATTACK,
- MOVE_GUST,
- MOVE_FLAIL,
- MOVE_FURY_CUTTER,
- MOVE_MUD_SHOT,
- MOVE_ENDURE,
- MOVE_EARTH_POWER,
- MOVE_BUG_BITE,
- MOVE_SIGNAL_BEAM),
+static const u16 sTrapinchEggMoveLearnset[] = {
+ MOVE_FOCUS_ENERGY,
+ MOVE_QUICK_ATTACK,
+ MOVE_GUST,
+ MOVE_FLAIL,
+ MOVE_FURY_CUTTER,
+ MOVE_MUD_SHOT,
+ MOVE_ENDURE,
+ MOVE_EARTH_POWER,
+ MOVE_BUG_BITE,
+ MOVE_SIGNAL_BEAM,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_TRAPINCH
#if P_FAMILY_CACNEA
- egg_moves(CACNEA,
- MOVE_GRASS_WHISTLE,
- MOVE_ACID,
- MOVE_TEETER_DANCE,
- MOVE_DYNAMIC_PUNCH,
- MOVE_COUNTER,
- MOVE_LOW_KICK,
- MOVE_SMELLING_SALTS,
- MOVE_MAGICAL_LEAF,
- MOVE_SEED_BOMB,
- MOVE_NASTY_PLOT,
- MOVE_DISABLE,
- MOVE_BLOCK,
- MOVE_WORRY_SEED,
- MOVE_SWITCHEROO,
- MOVE_FELL_STINGER,
- MOVE_BELCH,
- MOVE_ROTOTILLER,
- MOVE_POWER_UP_PUNCH),
+static const u16 sCacneaEggMoveLearnset[] = {
+ MOVE_GRASS_WHISTLE,
+ MOVE_ACID,
+ MOVE_TEETER_DANCE,
+ MOVE_DYNAMIC_PUNCH,
+ MOVE_COUNTER,
+ MOVE_LOW_KICK,
+ MOVE_SMELLING_SALTS,
+ MOVE_MAGICAL_LEAF,
+ MOVE_SEED_BOMB,
+ MOVE_NASTY_PLOT,
+ MOVE_DISABLE,
+ MOVE_BLOCK,
+ MOVE_WORRY_SEED,
+ MOVE_SWITCHEROO,
+ MOVE_FELL_STINGER,
+ MOVE_BELCH,
+ MOVE_ROTOTILLER,
+ MOVE_POWER_UP_PUNCH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_CACNEA
#if P_FAMILY_SWABLU
- egg_moves(SWABLU,
- MOVE_AGILITY,
- MOVE_HAZE,
- MOVE_PURSUIT,
- MOVE_RAGE,
- MOVE_FEATHER_DANCE,
- MOVE_DRAGON_RUSH,
- MOVE_POWER_SWAP,
- MOVE_ROOST,
- MOVE_HYPER_VOICE,
- MOVE_STEEL_WING,
- MOVE_PLAY_ROUGH),
+static const u16 sSwabluEggMoveLearnset[] = {
+ MOVE_AGILITY,
+ MOVE_HAZE,
+ MOVE_PURSUIT,
+ MOVE_RAGE,
+ MOVE_FEATHER_DANCE,
+ MOVE_DRAGON_RUSH,
+ MOVE_POWER_SWAP,
+ MOVE_ROOST,
+ MOVE_HYPER_VOICE,
+ MOVE_STEEL_WING,
+ MOVE_PLAY_ROUGH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SWABLU
#if P_FAMILY_ZANGOOSE
- egg_moves(ZANGOOSE,
- MOVE_FLAIL,
- MOVE_DOUBLE_KICK,
- MOVE_RAZOR_WIND,
- MOVE_COUNTER,
- MOVE_CURSE,
- MOVE_FURY_SWIPES,
- MOVE_NIGHT_SLASH,
- MOVE_METAL_CLAW,
- MOVE_DOUBLE_HIT,
- MOVE_DISABLE,
- MOVE_IRON_TAIL,
- MOVE_FINAL_GAMBIT,
- MOVE_FEINT,
- MOVE_QUICK_GUARD,
- MOVE_BELLY_DRUM),
+static const u16 sZangooseEggMoveLearnset[] = {
+ MOVE_FLAIL,
+ MOVE_DOUBLE_KICK,
+ MOVE_RAZOR_WIND,
+ MOVE_COUNTER,
+ MOVE_CURSE,
+ MOVE_FURY_SWIPES,
+ MOVE_NIGHT_SLASH,
+ MOVE_METAL_CLAW,
+ MOVE_DOUBLE_HIT,
+ MOVE_DISABLE,
+ MOVE_IRON_TAIL,
+ MOVE_FINAL_GAMBIT,
+ MOVE_FEINT,
+ MOVE_QUICK_GUARD,
+ MOVE_BELLY_DRUM,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_ZANGOOSE
#if P_FAMILY_SEVIPER
- egg_moves(SEVIPER,
- MOVE_STOCKPILE,
- MOVE_SWALLOW,
- MOVE_SPIT_UP,
- MOVE_BODY_SLAM,
- MOVE_SCARY_FACE,
- MOVE_ASSURANCE,
- MOVE_NIGHT_SLASH,
- MOVE_SWITCHEROO,
- MOVE_IRON_TAIL,
- MOVE_WRING_OUT,
- MOVE_PUNISHMENT,
- MOVE_FINAL_GAMBIT),
+static const u16 sSeviperEggMoveLearnset[] = {
+ MOVE_STOCKPILE,
+ MOVE_SWALLOW,
+ MOVE_SPIT_UP,
+ MOVE_BODY_SLAM,
+ MOVE_SCARY_FACE,
+ MOVE_ASSURANCE,
+ MOVE_NIGHT_SLASH,
+ MOVE_SWITCHEROO,
+ MOVE_IRON_TAIL,
+ MOVE_WRING_OUT,
+ MOVE_PUNISHMENT,
+ MOVE_FINAL_GAMBIT,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SEVIPER
#if P_FAMILY_BARBOACH
- egg_moves(BARBOACH,
- MOVE_THRASH,
- MOVE_WHIRLPOOL,
- MOVE_SPARK,
- MOVE_HYDRO_PUMP,
- MOVE_FLAIL,
- MOVE_TAKE_DOWN,
- MOVE_DRAGON_DANCE,
- MOVE_EARTH_POWER,
- MOVE_MUD_SHOT,
- MOVE_MUDDY_WATER),
+static const u16 sBarboachEggMoveLearnset[] = {
+ MOVE_THRASH,
+ MOVE_WHIRLPOOL,
+ MOVE_SPARK,
+ MOVE_HYDRO_PUMP,
+ MOVE_FLAIL,
+ MOVE_TAKE_DOWN,
+ MOVE_DRAGON_DANCE,
+ MOVE_EARTH_POWER,
+ MOVE_MUD_SHOT,
+ MOVE_MUDDY_WATER,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_BARBOACH
#if P_FAMILY_CORPHISH
- egg_moves(CORPHISH,
- MOVE_MUD_SPORT,
- MOVE_ENDEAVOR,
- MOVE_BODY_SLAM,
- MOVE_ANCIENT_POWER,
- MOVE_KNOCK_OFF,
- MOVE_SUPERPOWER,
- MOVE_METAL_CLAW,
- MOVE_DRAGON_DANCE,
- MOVE_TRUMP_CARD,
- MOVE_CHIP_AWAY,
- MOVE_DOUBLE_EDGE,
- MOVE_AQUA_JET,
- MOVE_SWITCHEROO),
+static const u16 sCorphishEggMoveLearnset[] = {
+ MOVE_MUD_SPORT,
+ MOVE_ENDEAVOR,
+ MOVE_BODY_SLAM,
+ MOVE_ANCIENT_POWER,
+ MOVE_KNOCK_OFF,
+ MOVE_SUPERPOWER,
+ MOVE_METAL_CLAW,
+ MOVE_DRAGON_DANCE,
+ MOVE_TRUMP_CARD,
+ MOVE_CHIP_AWAY,
+ MOVE_DOUBLE_EDGE,
+ MOVE_AQUA_JET,
+ MOVE_SWITCHEROO,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_CORPHISH
#if P_FAMILY_LILEEP
- egg_moves(LILEEP,
- MOVE_BARRIER,
- MOVE_RECOVER,
- MOVE_MIRROR_COAT,
- MOVE_WRING_OUT,
- MOVE_TICKLE,
- MOVE_CURSE,
- MOVE_MEGA_DRAIN,
- MOVE_ENDURE,
- MOVE_STEALTH_ROCK),
+static const u16 sLileepEggMoveLearnset[] = {
+ MOVE_BARRIER,
+ MOVE_RECOVER,
+ MOVE_MIRROR_COAT,
+ MOVE_WRING_OUT,
+ MOVE_TICKLE,
+ MOVE_CURSE,
+ MOVE_MEGA_DRAIN,
+ MOVE_ENDURE,
+ MOVE_STEALTH_ROCK,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_LILEEP
#if P_FAMILY_ANORITH
- egg_moves(ANORITH,
- MOVE_RAPID_SPIN,
- MOVE_KNOCK_OFF,
- MOVE_SCREECH,
- MOVE_SAND_ATTACK,
- MOVE_CROSS_POISON,
- MOVE_CURSE,
- MOVE_IRON_DEFENSE,
- MOVE_WATER_PULSE,
- MOVE_AQUA_JET),
+static const u16 sAnorithEggMoveLearnset[] = {
+ MOVE_RAPID_SPIN,
+ MOVE_KNOCK_OFF,
+ MOVE_SCREECH,
+ MOVE_SAND_ATTACK,
+ MOVE_CROSS_POISON,
+ MOVE_CURSE,
+ MOVE_IRON_DEFENSE,
+ MOVE_WATER_PULSE,
+ MOVE_AQUA_JET,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_ANORITH
#if P_FAMILY_FEEBAS
- egg_moves(FEEBAS,
- MOVE_MIRROR_COAT,
- MOVE_DRAGON_BREATH,
- MOVE_MUD_SPORT,
- MOVE_HYPNOSIS,
- MOVE_CONFUSE_RAY,
- MOVE_MIST,
- MOVE_HAZE,
- MOVE_TICKLE,
- MOVE_BRINE,
- MOVE_IRON_TAIL,
- MOVE_DRAGON_PULSE,
- MOVE_CAPTIVATE),
+static const u16 sFeebasEggMoveLearnset[] = {
+ MOVE_MIRROR_COAT,
+ MOVE_DRAGON_BREATH,
+ MOVE_MUD_SPORT,
+ MOVE_HYPNOSIS,
+ MOVE_CONFUSE_RAY,
+ MOVE_MIST,
+ MOVE_HAZE,
+ MOVE_TICKLE,
+ MOVE_BRINE,
+ MOVE_IRON_TAIL,
+ MOVE_DRAGON_PULSE,
+ MOVE_CAPTIVATE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_FEEBAS
#if P_FAMILY_CASTFORM
- egg_moves(CASTFORM,
- MOVE_FUTURE_SIGHT,
- MOVE_LUCKY_CHANT,
- MOVE_DISABLE,
- MOVE_AMNESIA,
- MOVE_OMINOUS_WIND,
- MOVE_HEX,
- MOVE_CLEAR_SMOG,
- MOVE_REFLECT_TYPE,
- MOVE_GUARD_SWAP,
- MOVE_COSMIC_POWER),
+static const u16 sCastformEggMoveLearnset[] = {
+ MOVE_FUTURE_SIGHT,
+ MOVE_LUCKY_CHANT,
+ MOVE_DISABLE,
+ MOVE_AMNESIA,
+ MOVE_OMINOUS_WIND,
+ MOVE_HEX,
+ MOVE_CLEAR_SMOG,
+ MOVE_REFLECT_TYPE,
+ MOVE_GUARD_SWAP,
+ MOVE_COSMIC_POWER,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_CASTFORM
#if P_FAMILY_KECLEON
- egg_moves(KECLEON,
- MOVE_DISABLE,
- MOVE_MAGIC_COAT,
- MOVE_TRICK,
- MOVE_FAKE_OUT,
- MOVE_NASTY_PLOT,
- MOVE_DIZZY_PUNCH,
- MOVE_RECOVER,
- MOVE_SKILL_SWAP,
- MOVE_SNATCH,
- MOVE_FOUL_PLAY,
- MOVE_CAMOUFLAGE,
- MOVE_POWER_UP_PUNCH),
+static const u16 sKecleonEggMoveLearnset[] = {
+ MOVE_DISABLE,
+ MOVE_MAGIC_COAT,
+ MOVE_TRICK,
+ MOVE_FAKE_OUT,
+ MOVE_NASTY_PLOT,
+ MOVE_DIZZY_PUNCH,
+ MOVE_RECOVER,
+ MOVE_SKILL_SWAP,
+ MOVE_SNATCH,
+ MOVE_FOUL_PLAY,
+ MOVE_CAMOUFLAGE,
+ MOVE_POWER_UP_PUNCH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_KECLEON
#if P_FAMILY_SHUPPET
- egg_moves(SHUPPET,
- MOVE_DISABLE,
- MOVE_DESTINY_BOND,
- MOVE_FORESIGHT,
- MOVE_ASTONISH,
- MOVE_IMPRISON,
- MOVE_PURSUIT,
- MOVE_SHADOW_SNEAK,
- MOVE_CONFUSE_RAY,
- MOVE_OMINOUS_WIND,
- MOVE_GUNK_SHOT,
- MOVE_PHANTOM_FORCE),
+static const u16 sShuppetEggMoveLearnset[] = {
+ MOVE_DISABLE,
+ MOVE_DESTINY_BOND,
+ MOVE_FORESIGHT,
+ MOVE_ASTONISH,
+ MOVE_IMPRISON,
+ MOVE_PURSUIT,
+ MOVE_SHADOW_SNEAK,
+ MOVE_CONFUSE_RAY,
+ MOVE_OMINOUS_WIND,
+ MOVE_GUNK_SHOT,
+ MOVE_PHANTOM_FORCE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SHUPPET
#if P_FAMILY_DUSKULL
- egg_moves(DUSKULL,
- MOVE_IMPRISON,
- MOVE_DESTINY_BOND,
- MOVE_PAIN_SPLIT,
- MOVE_GRUDGE,
- MOVE_MEMENTO,
- MOVE_FEINT_ATTACK,
- MOVE_OMINOUS_WIND,
- MOVE_DARK_PULSE,
- MOVE_SKILL_SWAP,
- MOVE_HAZE),
+static const u16 sDuskullEggMoveLearnset[] = {
+ MOVE_IMPRISON,
+ MOVE_DESTINY_BOND,
+ MOVE_PAIN_SPLIT,
+ MOVE_GRUDGE,
+ MOVE_MEMENTO,
+ MOVE_FEINT_ATTACK,
+ MOVE_OMINOUS_WIND,
+ MOVE_DARK_PULSE,
+ MOVE_SKILL_SWAP,
+ MOVE_HAZE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_DUSKULL
#if P_FAMILY_TROPIUS
- egg_moves(TROPIUS,
- MOVE_HEADBUTT,
- MOVE_SLAM,
- MOVE_RAZOR_WIND,
- MOVE_LEECH_SEED,
- MOVE_NATURE_POWER,
- MOVE_LEAF_STORM,
- MOVE_SYNTHESIS,
- MOVE_CURSE,
- MOVE_LEAF_BLADE,
- MOVE_DRAGON_DANCE,
- MOVE_BULLET_SEED,
- MOVE_NATURAL_GIFT,
- MOVE_DRAGON_HAMMER),
+static const u16 sTropiusEggMoveLearnset[] = {
+ MOVE_HEADBUTT,
+ MOVE_SLAM,
+ MOVE_RAZOR_WIND,
+ MOVE_LEECH_SEED,
+ MOVE_NATURE_POWER,
+ MOVE_LEAF_STORM,
+ MOVE_SYNTHESIS,
+ MOVE_CURSE,
+ MOVE_LEAF_BLADE,
+ MOVE_DRAGON_DANCE,
+ MOVE_BULLET_SEED,
+ MOVE_NATURAL_GIFT,
+ MOVE_DRAGON_HAMMER,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_TROPIUS
#if P_FAMILY_CHIMECHO
#if P_GEN_4_CROSS_EVOS
- egg_moves(CHINGLING,
- MOVE_DISABLE,
- MOVE_CURSE,
- MOVE_HYPNOSIS,
- MOVE_WISH,
- MOVE_FUTURE_SIGHT,
- MOVE_RECOVER,
- MOVE_STORED_POWER,
- MOVE_SKILL_SWAP,
- MOVE_COSMIC_POWER),
+static const u16 sChinglingEggMoveLearnset[] = {
+ MOVE_DISABLE,
+ MOVE_CURSE,
+ MOVE_HYPNOSIS,
+ MOVE_WISH,
+ MOVE_FUTURE_SIGHT,
+ MOVE_RECOVER,
+ MOVE_STORED_POWER,
+ MOVE_SKILL_SWAP,
+ MOVE_COSMIC_POWER,
+ MOVE_UNAVAILABLE,
+};
#endif //P_GEN_4_CROSS_EVOS
- egg_moves(CHIMECHO,
- MOVE_DISABLE,
- MOVE_CURSE,
- MOVE_HYPNOSIS,
- MOVE_WISH,
- MOVE_FUTURE_SIGHT,
- MOVE_RECOVER,
- MOVE_STORED_POWER,
- MOVE_SKILL_SWAP,
- MOVE_COSMIC_POWER,
- MOVE_CRAFTY_SHIELD,
- MOVE_PERISH_SONG),
+static const u16 sChimechoEggMoveLearnset[] = {
+ MOVE_DISABLE,
+ MOVE_CURSE,
+ MOVE_HYPNOSIS,
+ MOVE_WISH,
+ MOVE_FUTURE_SIGHT,
+ MOVE_RECOVER,
+ MOVE_STORED_POWER,
+ MOVE_SKILL_SWAP,
+ MOVE_COSMIC_POWER,
+ MOVE_CRAFTY_SHIELD,
+ MOVE_PERISH_SONG,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_CHIMECHO
#if P_FAMILY_ABSOL
- egg_moves(ABSOL,
- MOVE_BATON_PASS,
- MOVE_FEINT_ATTACK,
- MOVE_DOUBLE_EDGE,
- MOVE_MAGIC_COAT,
- MOVE_CURSE,
- MOVE_MEAN_LOOK,
- MOVE_ZEN_HEADBUTT,
- MOVE_PUNISHMENT,
- MOVE_SUCKER_PUNCH,
- MOVE_ASSURANCE,
- MOVE_ME_FIRST,
- MOVE_MEGAHORN,
- MOVE_HEX,
- MOVE_PERISH_SONG,
- MOVE_PLAY_ROUGH),
+static const u16 sAbsolEggMoveLearnset[] = {
+ MOVE_BATON_PASS,
+ MOVE_FEINT_ATTACK,
+ MOVE_DOUBLE_EDGE,
+ MOVE_MAGIC_COAT,
+ MOVE_CURSE,
+ MOVE_MEAN_LOOK,
+ MOVE_ZEN_HEADBUTT,
+ MOVE_PUNISHMENT,
+ MOVE_SUCKER_PUNCH,
+ MOVE_ASSURANCE,
+ MOVE_ME_FIRST,
+ MOVE_MEGAHORN,
+ MOVE_HEX,
+ MOVE_PERISH_SONG,
+ MOVE_PLAY_ROUGH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_ABSOL
#if P_FAMILY_SNORUNT
- egg_moves(SNORUNT,
- MOVE_BLOCK,
- MOVE_SPIKES,
- MOVE_ROLLOUT,
- MOVE_DISABLE,
- MOVE_BIDE,
- MOVE_WEATHER_BALL,
- MOVE_AVALANCHE,
- MOVE_HEX,
- MOVE_FAKE_TEARS,
- MOVE_SWITCHEROO),
+static const u16 sSnoruntEggMoveLearnset[] = {
+ MOVE_BLOCK,
+ MOVE_SPIKES,
+ MOVE_ROLLOUT,
+ MOVE_DISABLE,
+ MOVE_BIDE,
+ MOVE_WEATHER_BALL,
+ MOVE_AVALANCHE,
+ MOVE_HEX,
+ MOVE_FAKE_TEARS,
+ MOVE_SWITCHEROO,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SNORUNT
#if P_FAMILY_SPHEAL
- egg_moves(SPHEAL,
- MOVE_WATER_SPORT,
- MOVE_STOCKPILE,
- MOVE_SWALLOW,
- MOVE_SPIT_UP,
- MOVE_YAWN,
- MOVE_CURSE,
- MOVE_FISSURE,
- MOVE_SIGNAL_BEAM,
- MOVE_AQUA_RING,
- MOVE_ROLLOUT,
- MOVE_SLEEP_TALK,
- MOVE_WATER_PULSE,
- MOVE_BELLY_DRUM),
+static const u16 sSphealEggMoveLearnset[] = {
+ MOVE_WATER_SPORT,
+ MOVE_STOCKPILE,
+ MOVE_SWALLOW,
+ MOVE_SPIT_UP,
+ MOVE_YAWN,
+ MOVE_CURSE,
+ MOVE_FISSURE,
+ MOVE_SIGNAL_BEAM,
+ MOVE_AQUA_RING,
+ MOVE_ROLLOUT,
+ MOVE_SLEEP_TALK,
+ MOVE_WATER_PULSE,
+ MOVE_BELLY_DRUM,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SPHEAL
#if P_FAMILY_CLAMPERL
- egg_moves(CLAMPERL,
- MOVE_REFRESH,
- MOVE_MUD_SPORT,
- MOVE_BODY_SLAM,
- MOVE_SUPERSONIC,
- MOVE_BARRIER,
- MOVE_CONFUSE_RAY,
- MOVE_AQUA_RING,
- MOVE_MUDDY_WATER,
- MOVE_WATER_PULSE,
- MOVE_BRINE,
- MOVE_ENDURE),
+static const u16 sClamperlEggMoveLearnset[] = {
+ MOVE_REFRESH,
+ MOVE_MUD_SPORT,
+ MOVE_BODY_SLAM,
+ MOVE_SUPERSONIC,
+ MOVE_BARRIER,
+ MOVE_CONFUSE_RAY,
+ MOVE_AQUA_RING,
+ MOVE_MUDDY_WATER,
+ MOVE_WATER_PULSE,
+ MOVE_BRINE,
+ MOVE_ENDURE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_CLAMPERL
#if P_FAMILY_RELICANTH
- egg_moves(RELICANTH,
- MOVE_MAGNITUDE,
- MOVE_SKULL_BASH,
- MOVE_WATER_SPORT,
- MOVE_AMNESIA,
- MOVE_SLEEP_TALK,
- MOVE_AQUA_TAIL,
- MOVE_SNORE,
- MOVE_MUD_SLAP,
- MOVE_MUDDY_WATER,
- MOVE_MUD_SHOT,
- MOVE_BRINE,
- MOVE_ZEN_HEADBUTT),
+static const u16 sRelicanthEggMoveLearnset[] = {
+ MOVE_MAGNITUDE,
+ MOVE_SKULL_BASH,
+ MOVE_WATER_SPORT,
+ MOVE_AMNESIA,
+ MOVE_SLEEP_TALK,
+ MOVE_AQUA_TAIL,
+ MOVE_SNORE,
+ MOVE_MUD_SLAP,
+ MOVE_MUDDY_WATER,
+ MOVE_MUD_SHOT,
+ MOVE_BRINE,
+ MOVE_ZEN_HEADBUTT,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_RELICANTH
#if P_FAMILY_LUVDISC
- egg_moves(LUVDISC,
- MOVE_SPLASH,
- MOVE_SUPERSONIC,
- MOVE_WATER_SPORT,
- MOVE_MUD_SPORT,
- MOVE_CAPTIVATE,
- MOVE_AQUA_RING,
- MOVE_AQUA_JET,
- MOVE_HEAL_PULSE,
- MOVE_BRINE,
- MOVE_ENTRAINMENT),
+static const u16 sLuvdiscEggMoveLearnset[] = {
+ MOVE_SPLASH,
+ MOVE_SUPERSONIC,
+ MOVE_WATER_SPORT,
+ MOVE_MUD_SPORT,
+ MOVE_CAPTIVATE,
+ MOVE_AQUA_RING,
+ MOVE_AQUA_JET,
+ MOVE_HEAL_PULSE,
+ MOVE_BRINE,
+ MOVE_ENTRAINMENT,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_LUVDISC
#if P_FAMILY_BAGON
- egg_moves(BAGON,
- MOVE_HYDRO_PUMP,
- MOVE_THRASH,
- MOVE_DRAGON_RAGE,
- MOVE_TWISTER,
- MOVE_DRAGON_DANCE,
- MOVE_FIRE_FANG,
- MOVE_DRAGON_RUSH,
- MOVE_DRAGON_PULSE,
- MOVE_ENDURE,
- MOVE_DEFENSE_CURL),
+static const u16 sBagonEggMoveLearnset[] = {
+ MOVE_HYDRO_PUMP,
+ MOVE_THRASH,
+ MOVE_DRAGON_RAGE,
+ MOVE_TWISTER,
+ MOVE_DRAGON_DANCE,
+ MOVE_FIRE_FANG,
+ MOVE_DRAGON_RUSH,
+ MOVE_DRAGON_PULSE,
+ MOVE_ENDURE,
+ MOVE_DEFENSE_CURL,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_BAGON
#if P_FAMILY_TURTWIG
- egg_moves(TURTWIG,
- MOVE_WORRY_SEED,
- MOVE_GROWTH,
- MOVE_TICKLE,
- MOVE_BODY_SLAM,
- MOVE_DOUBLE_EDGE,
- MOVE_SAND_TOMB,
- MOVE_SEED_BOMB,
- MOVE_THRASH,
- MOVE_AMNESIA,
- MOVE_SUPERPOWER,
- MOVE_STOCKPILE,
- MOVE_SWALLOW,
- MOVE_SPIT_UP,
- MOVE_EARTH_POWER,
- MOVE_WIDE_GUARD,
- MOVE_GRASSY_TERRAIN,
- MOVE_HEAVY_SLAM),
+static const u16 sTurtwigEggMoveLearnset[] = {
+ MOVE_WORRY_SEED,
+ MOVE_GROWTH,
+ MOVE_TICKLE,
+ MOVE_BODY_SLAM,
+ MOVE_DOUBLE_EDGE,
+ MOVE_SAND_TOMB,
+ MOVE_SEED_BOMB,
+ MOVE_THRASH,
+ MOVE_AMNESIA,
+ MOVE_SUPERPOWER,
+ MOVE_STOCKPILE,
+ MOVE_SWALLOW,
+ MOVE_SPIT_UP,
+ MOVE_EARTH_POWER,
+ MOVE_WIDE_GUARD,
+ MOVE_GRASSY_TERRAIN,
+ MOVE_HEAVY_SLAM,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_TURTWIG
#if P_FAMILY_CHIMCHAR
- egg_moves(CHIMCHAR,
- MOVE_FIRE_PUNCH,
- MOVE_THUNDER_PUNCH,
- MOVE_DOUBLE_KICK,
- MOVE_ENCORE,
- MOVE_HEAT_WAVE,
- MOVE_FOCUS_ENERGY,
- MOVE_HELPING_HAND,
- MOVE_FAKE_OUT,
- MOVE_BLAZE_KICK,
- MOVE_COUNTER,
- MOVE_ASSIST,
- MOVE_QUICK_GUARD,
- MOVE_FOCUS_PUNCH,
- MOVE_SUBMISSION,
- MOVE_POWER_UP_PUNCH),
+static const u16 sChimcharEggMoveLearnset[] = {
+ MOVE_FIRE_PUNCH,
+ MOVE_THUNDER_PUNCH,
+ MOVE_DOUBLE_KICK,
+ MOVE_ENCORE,
+ MOVE_HEAT_WAVE,
+ MOVE_FOCUS_ENERGY,
+ MOVE_HELPING_HAND,
+ MOVE_FAKE_OUT,
+ MOVE_BLAZE_KICK,
+ MOVE_COUNTER,
+ MOVE_ASSIST,
+ MOVE_QUICK_GUARD,
+ MOVE_FOCUS_PUNCH,
+ MOVE_SUBMISSION,
+ MOVE_POWER_UP_PUNCH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_CHIMCHAR
#if P_FAMILY_PIPLUP
- egg_moves(PIPLUP,
- MOVE_DOUBLE_HIT,
- MOVE_SUPERSONIC,
- MOVE_YAWN,
- MOVE_MUD_SPORT,
- MOVE_MUD_SLAP,
- MOVE_SNORE,
- MOVE_FLAIL,
- MOVE_AGILITY,
- MOVE_AQUA_RING,
- MOVE_HYDRO_PUMP,
- MOVE_FEATHER_DANCE,
- MOVE_BIDE,
- MOVE_ICY_WIND,
- MOVE_POWER_TRIP),
+static const u16 sPiplupEggMoveLearnset[] = {
+ MOVE_DOUBLE_HIT,
+ MOVE_SUPERSONIC,
+ MOVE_YAWN,
+ MOVE_MUD_SPORT,
+ MOVE_MUD_SLAP,
+ MOVE_SNORE,
+ MOVE_FLAIL,
+ MOVE_AGILITY,
+ MOVE_AQUA_RING,
+ MOVE_HYDRO_PUMP,
+ MOVE_FEATHER_DANCE,
+ MOVE_BIDE,
+ MOVE_ICY_WIND,
+ MOVE_POWER_TRIP,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_PIPLUP
#if P_FAMILY_STARLY
- egg_moves(STARLY,
- MOVE_FEATHER_DANCE,
- MOVE_FURY_ATTACK,
- MOVE_PURSUIT,
- MOVE_ASTONISH,
- MOVE_SAND_ATTACK,
- MOVE_FORESIGHT,
- MOVE_DOUBLE_EDGE,
- MOVE_STEEL_WING,
- MOVE_UPROAR,
- MOVE_ROOST,
- MOVE_DETECT,
- MOVE_REVENGE,
- MOVE_MIRROR_MOVE),
+static const u16 sStarlyEggMoveLearnset[] = {
+ MOVE_FEATHER_DANCE,
+ MOVE_FURY_ATTACK,
+ MOVE_PURSUIT,
+ MOVE_ASTONISH,
+ MOVE_SAND_ATTACK,
+ MOVE_FORESIGHT,
+ MOVE_DOUBLE_EDGE,
+ MOVE_STEEL_WING,
+ MOVE_UPROAR,
+ MOVE_ROOST,
+ MOVE_DETECT,
+ MOVE_REVENGE,
+ MOVE_MIRROR_MOVE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_STARLY
#if P_FAMILY_BIDOOF
- egg_moves(BIDOOF,
- MOVE_QUICK_ATTACK,
- MOVE_WATER_SPORT,
- MOVE_DOUBLE_EDGE,
- MOVE_FURY_SWIPES,
- MOVE_DEFENSE_CURL,
- MOVE_ROLLOUT,
- MOVE_ODOR_SLEUTH,
- MOVE_AQUA_TAIL,
- MOVE_ROCK_CLIMB,
- MOVE_SLEEP_TALK,
- MOVE_ENDURE,
- MOVE_SKULL_BASH,
- MOVE_MUD_SPORT),
+static const u16 sBidoofEggMoveLearnset[] = {
+ MOVE_QUICK_ATTACK,
+ MOVE_WATER_SPORT,
+ MOVE_DOUBLE_EDGE,
+ MOVE_FURY_SWIPES,
+ MOVE_DEFENSE_CURL,
+ MOVE_ROLLOUT,
+ MOVE_ODOR_SLEUTH,
+ MOVE_AQUA_TAIL,
+ MOVE_ROCK_CLIMB,
+ MOVE_SLEEP_TALK,
+ MOVE_ENDURE,
+ MOVE_SKULL_BASH,
+ MOVE_MUD_SPORT,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_BIDOOF
#if P_FAMILY_SHINX
- egg_moves(SHINX,
- MOVE_ICE_FANG,
- MOVE_FIRE_FANG,
- MOVE_THUNDER_FANG,
- MOVE_QUICK_ATTACK,
- MOVE_HOWL,
- MOVE_TAKE_DOWN,
- MOVE_NIGHT_SLASH,
- MOVE_SHOCK_WAVE,
- MOVE_SWIFT,
- MOVE_DOUBLE_KICK,
- MOVE_SIGNAL_BEAM,
- MOVE_HELPING_HAND,
- MOVE_EERIE_IMPULSE,
- MOVE_FAKE_TEARS),
+static const u16 sShinxEggMoveLearnset[] = {
+ MOVE_ICE_FANG,
+ MOVE_FIRE_FANG,
+ MOVE_THUNDER_FANG,
+ MOVE_QUICK_ATTACK,
+ MOVE_HOWL,
+ MOVE_TAKE_DOWN,
+ MOVE_NIGHT_SLASH,
+ MOVE_SHOCK_WAVE,
+ MOVE_SWIFT,
+ MOVE_DOUBLE_KICK,
+ MOVE_SIGNAL_BEAM,
+ MOVE_HELPING_HAND,
+ MOVE_EERIE_IMPULSE,
+ MOVE_FAKE_TEARS,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SHINX
#if P_FAMILY_CRANIDOS
- egg_moves(CRANIDOS,
- MOVE_CRUNCH,
- MOVE_THRASH,
- MOVE_DOUBLE_EDGE,
- MOVE_LEER,
- MOVE_SLAM,
- MOVE_STOMP,
- MOVE_WHIRLWIND,
- MOVE_HAMMER_ARM,
- MOVE_CURSE,
- MOVE_IRON_TAIL,
- MOVE_IRON_HEAD),
+static const u16 sCranidosEggMoveLearnset[] = {
+ MOVE_CRUNCH,
+ MOVE_THRASH,
+ MOVE_DOUBLE_EDGE,
+ MOVE_LEER,
+ MOVE_SLAM,
+ MOVE_STOMP,
+ MOVE_WHIRLWIND,
+ MOVE_HAMMER_ARM,
+ MOVE_CURSE,
+ MOVE_IRON_TAIL,
+ MOVE_IRON_HEAD,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_CRANIDOS
#if P_FAMILY_SHIELDON
- egg_moves(SHIELDON,
- MOVE_HEADBUTT,
- MOVE_SCARY_FACE,
- MOVE_FOCUS_ENERGY,
- MOVE_DOUBLE_EDGE,
- MOVE_ROCK_BLAST,
- MOVE_BODY_SLAM,
- MOVE_SCREECH,
- MOVE_CURSE,
- MOVE_FISSURE,
- MOVE_COUNTER,
- MOVE_STEALTH_ROCK,
- MOVE_WIDE_GUARD,
- MOVE_GUARD_SPLIT),
+static const u16 sShieldonEggMoveLearnset[] = {
+ MOVE_HEADBUTT,
+ MOVE_SCARY_FACE,
+ MOVE_FOCUS_ENERGY,
+ MOVE_DOUBLE_EDGE,
+ MOVE_ROCK_BLAST,
+ MOVE_BODY_SLAM,
+ MOVE_SCREECH,
+ MOVE_CURSE,
+ MOVE_FISSURE,
+ MOVE_COUNTER,
+ MOVE_STEALTH_ROCK,
+ MOVE_WIDE_GUARD,
+ MOVE_GUARD_SPLIT,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SHIELDON
#if P_FAMILY_PACHIRISU
- egg_moves(PACHIRISU,
- MOVE_COVET,
- MOVE_BITE,
- MOVE_FAKE_TEARS,
- MOVE_DEFENSE_CURL,
- MOVE_ROLLOUT,
- MOVE_FLATTER,
- MOVE_FLAIL,
- MOVE_IRON_TAIL,
- MOVE_TAIL_WHIP,
- MOVE_FOLLOW_ME,
- MOVE_CHARGE,
- MOVE_BESTOW,
- MOVE_ION_DELUGE,
- MOVE_BABY_DOLL_EYES),
+static const u16 sPachirisuEggMoveLearnset[] = {
+ MOVE_COVET,
+ MOVE_BITE,
+ MOVE_FAKE_TEARS,
+ MOVE_DEFENSE_CURL,
+ MOVE_ROLLOUT,
+ MOVE_FLATTER,
+ MOVE_FLAIL,
+ MOVE_IRON_TAIL,
+ MOVE_TAIL_WHIP,
+ MOVE_FOLLOW_ME,
+ MOVE_CHARGE,
+ MOVE_BESTOW,
+ MOVE_ION_DELUGE,
+ MOVE_BABY_DOLL_EYES,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_PACHIRISU
#if P_FAMILY_BUIZEL
- egg_moves(BUIZEL,
- MOVE_MUD_SLAP,
- MOVE_HEADBUTT,
- MOVE_FURY_SWIPES,
- MOVE_SLASH,
- MOVE_ODOR_SLEUTH,
- MOVE_DOUBLE_SLAP,
- MOVE_FURY_CUTTER,
- MOVE_BATON_PASS,
- MOVE_AQUA_TAIL,
- MOVE_AQUA_RING,
- MOVE_ME_FIRST,
- MOVE_SWITCHEROO,
- MOVE_TAIL_SLAP,
- MOVE_SOAK,
- MOVE_HELPING_HAND),
+static const u16 sBuizelEggMoveLearnset[] = {
+ MOVE_MUD_SLAP,
+ MOVE_HEADBUTT,
+ MOVE_FURY_SWIPES,
+ MOVE_SLASH,
+ MOVE_ODOR_SLEUTH,
+ MOVE_DOUBLE_SLAP,
+ MOVE_FURY_CUTTER,
+ MOVE_BATON_PASS,
+ MOVE_AQUA_TAIL,
+ MOVE_AQUA_RING,
+ MOVE_ME_FIRST,
+ MOVE_SWITCHEROO,
+ MOVE_TAIL_SLAP,
+ MOVE_SOAK,
+ MOVE_HELPING_HAND,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_BUIZEL
#if P_FAMILY_CHERUBI
- egg_moves(CHERUBI,
- MOVE_RAZOR_LEAF,
- MOVE_SWEET_SCENT,
- MOVE_TICKLE,
- MOVE_NATURE_POWER,
- MOVE_GRASS_WHISTLE,
- MOVE_AROMATHERAPY,
- MOVE_WEATHER_BALL,
- MOVE_HEAL_PULSE,
- MOVE_HEALING_WISH,
- MOVE_SEED_BOMB,
- MOVE_NATURAL_GIFT,
- MOVE_DEFENSE_CURL,
- MOVE_ROLLOUT,
- MOVE_FLOWER_SHIELD,
- MOVE_GRASSY_TERRAIN),
+static const u16 sCherubiEggMoveLearnset[] = {
+ MOVE_RAZOR_LEAF,
+ MOVE_SWEET_SCENT,
+ MOVE_TICKLE,
+ MOVE_NATURE_POWER,
+ MOVE_GRASS_WHISTLE,
+ MOVE_AROMATHERAPY,
+ MOVE_WEATHER_BALL,
+ MOVE_HEAL_PULSE,
+ MOVE_HEALING_WISH,
+ MOVE_SEED_BOMB,
+ MOVE_NATURAL_GIFT,
+ MOVE_DEFENSE_CURL,
+ MOVE_ROLLOUT,
+ MOVE_FLOWER_SHIELD,
+ MOVE_GRASSY_TERRAIN,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_CHERUBI
#if P_FAMILY_SHELLOS
- egg_moves(SHELLOS_WEST_SEA,
- MOVE_COUNTER,
- MOVE_MIRROR_COAT,
- MOVE_STOCKPILE,
- MOVE_SWALLOW,
- MOVE_SPIT_UP,
- MOVE_YAWN,
- MOVE_MEMENTO,
- MOVE_CURSE,
- MOVE_AMNESIA,
- MOVE_FISSURE,
- MOVE_TRUMP_CARD,
- MOVE_SLUDGE,
- MOVE_CLEAR_SMOG,
- MOVE_BRINE,
- MOVE_MIST,
- MOVE_ACID_ARMOR),
+static const u16 sShellosEggMoveLearnset[] = {
+ MOVE_COUNTER,
+ MOVE_MIRROR_COAT,
+ MOVE_STOCKPILE,
+ MOVE_SWALLOW,
+ MOVE_SPIT_UP,
+ MOVE_YAWN,
+ MOVE_MEMENTO,
+ MOVE_CURSE,
+ MOVE_AMNESIA,
+ MOVE_FISSURE,
+ MOVE_TRUMP_CARD,
+ MOVE_SLUDGE,
+ MOVE_CLEAR_SMOG,
+ MOVE_BRINE,
+ MOVE_MIST,
+ MOVE_ACID_ARMOR,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SHELLOS
#if P_FAMILY_DRIFLOON
- egg_moves(DRIFLOON,
- MOVE_MEMENTO,
- MOVE_BODY_SLAM,
- MOVE_DESTINY_BOND,
- MOVE_DISABLE,
- MOVE_HAZE,
- MOVE_HYPNOSIS,
- MOVE_WEATHER_BALL,
- MOVE_CLEAR_SMOG,
- MOVE_DEFOG,
- MOVE_TAILWIND),
+static const u16 sDrifloonEggMoveLearnset[] = {
+ MOVE_MEMENTO,
+ MOVE_BODY_SLAM,
+ MOVE_DESTINY_BOND,
+ MOVE_DISABLE,
+ MOVE_HAZE,
+ MOVE_HYPNOSIS,
+ MOVE_WEATHER_BALL,
+ MOVE_CLEAR_SMOG,
+ MOVE_DEFOG,
+ MOVE_TAILWIND,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_DRIFLOON
#if P_FAMILY_BUNEARY
- egg_moves(BUNEARY,
- MOVE_FAKE_TEARS,
- MOVE_FAKE_OUT,
- MOVE_ENCORE,
- MOVE_SWEET_KISS,
- MOVE_DOUBLE_HIT,
- MOVE_LOW_KICK,
- MOVE_SKY_UPPERCUT,
- MOVE_SWITCHEROO,
- MOVE_THUNDER_PUNCH,
- MOVE_ICE_PUNCH,
- MOVE_FIRE_PUNCH,
- MOVE_FLAIL,
- MOVE_FOCUS_PUNCH,
- MOVE_CIRCLE_THROW,
- MOVE_COPYCAT,
- MOVE_TEETER_DANCE,
- MOVE_COSMIC_POWER,
- MOVE_MUD_SPORT,
- MOVE_POWER_UP_PUNCH),
+static const u16 sBunearyEggMoveLearnset[] = {
+ MOVE_FAKE_TEARS,
+ MOVE_FAKE_OUT,
+ MOVE_ENCORE,
+ MOVE_SWEET_KISS,
+ MOVE_DOUBLE_HIT,
+ MOVE_LOW_KICK,
+ MOVE_SKY_UPPERCUT,
+ MOVE_SWITCHEROO,
+ MOVE_THUNDER_PUNCH,
+ MOVE_ICE_PUNCH,
+ MOVE_FIRE_PUNCH,
+ MOVE_FLAIL,
+ MOVE_FOCUS_PUNCH,
+ MOVE_CIRCLE_THROW,
+ MOVE_COPYCAT,
+ MOVE_TEETER_DANCE,
+ MOVE_COSMIC_POWER,
+ MOVE_MUD_SPORT,
+ MOVE_POWER_UP_PUNCH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_BUNEARY
#if P_FAMILY_GLAMEOW
- egg_moves(GLAMEOW,
- MOVE_BITE,
- MOVE_TAIL_WHIP,
- MOVE_QUICK_ATTACK,
- MOVE_SAND_ATTACK,
- MOVE_FAKE_TEARS,
- MOVE_ASSURANCE,
- MOVE_FLAIL,
- MOVE_SNATCH,
- MOVE_WAKE_UP_SLAP,
- MOVE_LAST_RESORT),
+static const u16 sGlameowEggMoveLearnset[] = {
+ MOVE_BITE,
+ MOVE_TAIL_WHIP,
+ MOVE_QUICK_ATTACK,
+ MOVE_SAND_ATTACK,
+ MOVE_FAKE_TEARS,
+ MOVE_ASSURANCE,
+ MOVE_FLAIL,
+ MOVE_SNATCH,
+ MOVE_WAKE_UP_SLAP,
+ MOVE_LAST_RESORT,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_GLAMEOW
#if P_FAMILY_STUNKY
- egg_moves(STUNKY,
- MOVE_PURSUIT,
- MOVE_LEER,
- MOVE_SMOG,
- MOVE_DOUBLE_EDGE,
- MOVE_CRUNCH,
- MOVE_SCARY_FACE,
- MOVE_ASTONISH,
- MOVE_PUNISHMENT,
- MOVE_HAZE,
- MOVE_IRON_TAIL,
- MOVE_FOUL_PLAY,
- MOVE_FLAME_BURST,
- MOVE_PLAY_ROUGH),
+static const u16 sStunkyEggMoveLearnset[] = {
+ MOVE_PURSUIT,
+ MOVE_LEER,
+ MOVE_SMOG,
+ MOVE_DOUBLE_EDGE,
+ MOVE_CRUNCH,
+ MOVE_SCARY_FACE,
+ MOVE_ASTONISH,
+ MOVE_PUNISHMENT,
+ MOVE_HAZE,
+ MOVE_IRON_TAIL,
+ MOVE_FOUL_PLAY,
+ MOVE_FLAME_BURST,
+ MOVE_PLAY_ROUGH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_STUNKY
#if P_FAMILY_CHATOT
- egg_moves(CHATOT,
- MOVE_ENCORE,
- MOVE_NIGHT_SHADE,
- MOVE_AGILITY,
- MOVE_NASTY_PLOT,
- MOVE_SUPERSONIC,
- MOVE_STEEL_WING,
- MOVE_SLEEP_TALK,
- MOVE_DEFOG,
- MOVE_AIR_CUTTER,
- MOVE_BOOMBURST),
+static const u16 sChatotEggMoveLearnset[] = {
+ MOVE_ENCORE,
+ MOVE_NIGHT_SHADE,
+ MOVE_AGILITY,
+ MOVE_NASTY_PLOT,
+ MOVE_SUPERSONIC,
+ MOVE_STEEL_WING,
+ MOVE_SLEEP_TALK,
+ MOVE_DEFOG,
+ MOVE_AIR_CUTTER,
+ MOVE_BOOMBURST,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_CHATOT
#if P_FAMILY_SPIRITOMB
- egg_moves(SPIRITOMB,
- MOVE_DESTINY_BOND,
- MOVE_PAIN_SPLIT,
- MOVE_SMOKESCREEN,
- MOVE_IMPRISON,
- MOVE_GRUDGE,
- MOVE_SHADOW_SNEAK,
- MOVE_CAPTIVATE,
- MOVE_NIGHTMARE,
- MOVE_FOUL_PLAY,
- MOVE_DISABLE),
+static const u16 sSpiritombEggMoveLearnset[] = {
+ MOVE_DESTINY_BOND,
+ MOVE_PAIN_SPLIT,
+ MOVE_SMOKESCREEN,
+ MOVE_IMPRISON,
+ MOVE_GRUDGE,
+ MOVE_SHADOW_SNEAK,
+ MOVE_CAPTIVATE,
+ MOVE_NIGHTMARE,
+ MOVE_FOUL_PLAY,
+ MOVE_DISABLE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SPIRITOMB
#if P_FAMILY_GIBLE
- egg_moves(GIBLE,
- MOVE_DRAGON_BREATH,
- MOVE_OUTRAGE,
- MOVE_TWISTER,
- MOVE_SCARY_FACE,
- MOVE_DOUBLE_EDGE,
- MOVE_THRASH,
- MOVE_METAL_CLAW,
- MOVE_SAND_TOMB,
- MOVE_BODY_SLAM,
- MOVE_IRON_HEAD,
- MOVE_MUD_SHOT,
- MOVE_ROCK_CLIMB,
- MOVE_IRON_TAIL),
+static const u16 sGibleEggMoveLearnset[] = {
+ MOVE_DRAGON_BREATH,
+ MOVE_OUTRAGE,
+ MOVE_TWISTER,
+ MOVE_SCARY_FACE,
+ MOVE_DOUBLE_EDGE,
+ MOVE_THRASH,
+ MOVE_METAL_CLAW,
+ MOVE_SAND_TOMB,
+ MOVE_BODY_SLAM,
+ MOVE_IRON_HEAD,
+ MOVE_MUD_SHOT,
+ MOVE_ROCK_CLIMB,
+ MOVE_IRON_TAIL,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_GIBLE
#if P_FAMILY_RIOLU
- egg_moves(RIOLU,
- MOVE_CROSS_CHOP,
- MOVE_DETECT,
- MOVE_BITE,
- MOVE_MIND_READER,
- MOVE_SKY_UPPERCUT,
- MOVE_HIGH_JUMP_KICK,
- MOVE_AGILITY,
- MOVE_VACUUM_WAVE,
- MOVE_CRUNCH,
- MOVE_LOW_KICK,
- MOVE_IRON_DEFENSE,
- MOVE_BLAZE_KICK,
- MOVE_BULLET_PUNCH,
- MOVE_FOLLOW_ME,
- MOVE_CIRCLE_THROW,
- MOVE_METEOR_MASH),
+static const u16 sRioluEggMoveLearnset[] = {
+ MOVE_CROSS_CHOP,
+ MOVE_DETECT,
+ MOVE_BITE,
+ MOVE_MIND_READER,
+ MOVE_SKY_UPPERCUT,
+ MOVE_HIGH_JUMP_KICK,
+ MOVE_AGILITY,
+ MOVE_VACUUM_WAVE,
+ MOVE_CRUNCH,
+ MOVE_LOW_KICK,
+ MOVE_IRON_DEFENSE,
+ MOVE_BLAZE_KICK,
+ MOVE_BULLET_PUNCH,
+ MOVE_FOLLOW_ME,
+ MOVE_CIRCLE_THROW,
+ MOVE_METEOR_MASH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_RIOLU
#if P_FAMILY_HIPPOPOTAS
- egg_moves(HIPPOPOTAS,
- MOVE_STOCKPILE,
- MOVE_SWALLOW,
- MOVE_SPIT_UP,
- MOVE_CURSE,
- MOVE_SLACK_OFF,
- MOVE_BODY_SLAM,
- MOVE_SAND_TOMB,
- MOVE_REVENGE,
- MOVE_SLEEP_TALK,
- MOVE_WHIRLWIND),
+static const u16 sHippopotasEggMoveLearnset[] = {
+ MOVE_STOCKPILE,
+ MOVE_SWALLOW,
+ MOVE_SPIT_UP,
+ MOVE_CURSE,
+ MOVE_SLACK_OFF,
+ MOVE_BODY_SLAM,
+ MOVE_SAND_TOMB,
+ MOVE_REVENGE,
+ MOVE_SLEEP_TALK,
+ MOVE_WHIRLWIND,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_HIPPOPOTAS
#if P_FAMILY_SKORUPI
- egg_moves(SKORUPI,
- MOVE_FEINT_ATTACK,
- MOVE_SCREECH,
- MOVE_SAND_ATTACK,
- MOVE_SLASH,
- MOVE_CONFUSE_RAY,
- MOVE_WHIRLWIND,
- MOVE_AGILITY,
- MOVE_PURSUIT,
- MOVE_NIGHT_SLASH,
- MOVE_IRON_TAIL,
- MOVE_TWINEEDLE,
- MOVE_POISON_TAIL),
+static const u16 sSkorupiEggMoveLearnset[] = {
+ MOVE_FEINT_ATTACK,
+ MOVE_SCREECH,
+ MOVE_SAND_ATTACK,
+ MOVE_SLASH,
+ MOVE_CONFUSE_RAY,
+ MOVE_WHIRLWIND,
+ MOVE_AGILITY,
+ MOVE_PURSUIT,
+ MOVE_NIGHT_SLASH,
+ MOVE_IRON_TAIL,
+ MOVE_TWINEEDLE,
+ MOVE_POISON_TAIL,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SKORUPI
#if P_FAMILY_CROAGUNK
- egg_moves(CROAGUNK,
- MOVE_ME_FIRST,
- MOVE_FEINT,
- MOVE_DYNAMIC_PUNCH,
- MOVE_HEADBUTT,
- MOVE_VACUUM_WAVE,
- MOVE_MEDITATE,
- MOVE_FAKE_OUT,
- MOVE_WAKE_UP_SLAP,
- MOVE_SMELLING_SALTS,
- MOVE_CROSS_CHOP,
- MOVE_BULLET_PUNCH,
- MOVE_COUNTER,
- MOVE_DRAIN_PUNCH,
- MOVE_ACUPRESSURE,
- MOVE_QUICK_GUARD),
+static const u16 sCroagunkEggMoveLearnset[] = {
+ MOVE_ME_FIRST,
+ MOVE_FEINT,
+ MOVE_DYNAMIC_PUNCH,
+ MOVE_HEADBUTT,
+ MOVE_VACUUM_WAVE,
+ MOVE_MEDITATE,
+ MOVE_FAKE_OUT,
+ MOVE_WAKE_UP_SLAP,
+ MOVE_SMELLING_SALTS,
+ MOVE_CROSS_CHOP,
+ MOVE_BULLET_PUNCH,
+ MOVE_COUNTER,
+ MOVE_DRAIN_PUNCH,
+ MOVE_ACUPRESSURE,
+ MOVE_QUICK_GUARD,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_CROAGUNK
#if P_FAMILY_CARNIVINE
- egg_moves(CARNIVINE,
- MOVE_SLEEP_POWDER,
- MOVE_STUN_SPORE,
- MOVE_RAZOR_LEAF,
- MOVE_SLAM,
- MOVE_SYNTHESIS,
- MOVE_MAGICAL_LEAF,
- MOVE_LEECH_SEED,
- MOVE_WORRY_SEED,
- MOVE_GIGA_DRAIN,
- MOVE_RAGE_POWDER,
- MOVE_GRASS_WHISTLE,
- MOVE_ACID_SPRAY),
+static const u16 sCarnivineEggMoveLearnset[] = {
+ MOVE_SLEEP_POWDER,
+ MOVE_STUN_SPORE,
+ MOVE_RAZOR_LEAF,
+ MOVE_SLAM,
+ MOVE_SYNTHESIS,
+ MOVE_MAGICAL_LEAF,
+ MOVE_LEECH_SEED,
+ MOVE_WORRY_SEED,
+ MOVE_GIGA_DRAIN,
+ MOVE_RAGE_POWDER,
+ MOVE_GRASS_WHISTLE,
+ MOVE_ACID_SPRAY,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_CARNIVINE
#if P_FAMILY_FINNEON
- egg_moves(FINNEON,
- MOVE_SWEET_KISS,
- MOVE_CHARM,
- MOVE_FLAIL,
- MOVE_AQUA_TAIL,
- MOVE_SPLASH,
- MOVE_PSYBEAM,
- MOVE_TICKLE,
- MOVE_AGILITY,
- MOVE_BRINE,
- MOVE_AURORA_BEAM,
- MOVE_SIGNAL_BEAM,
- MOVE_CONFUSE_RAY),
+static const u16 sFinneonEggMoveLearnset[] = {
+ MOVE_SWEET_KISS,
+ MOVE_CHARM,
+ MOVE_FLAIL,
+ MOVE_AQUA_TAIL,
+ MOVE_SPLASH,
+ MOVE_PSYBEAM,
+ MOVE_TICKLE,
+ MOVE_AGILITY,
+ MOVE_BRINE,
+ MOVE_AURORA_BEAM,
+ MOVE_SIGNAL_BEAM,
+ MOVE_CONFUSE_RAY,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_FINNEON
#if P_FAMILY_SNOVER
- egg_moves(SNOVER,
- MOVE_LEECH_SEED,
- MOVE_MAGICAL_LEAF,
- MOVE_SEED_BOMB,
- MOVE_GROWTH,
- MOVE_DOUBLE_EDGE,
- MOVE_MIST,
- MOVE_STOMP,
- MOVE_SKULL_BASH,
- MOVE_AVALANCHE,
- MOVE_NATURAL_GIFT,
- MOVE_BULLET_SEED),
+static const u16 sSnoverEggMoveLearnset[] = {
+ MOVE_LEECH_SEED,
+ MOVE_MAGICAL_LEAF,
+ MOVE_SEED_BOMB,
+ MOVE_GROWTH,
+ MOVE_DOUBLE_EDGE,
+ MOVE_MIST,
+ MOVE_STOMP,
+ MOVE_SKULL_BASH,
+ MOVE_AVALANCHE,
+ MOVE_NATURAL_GIFT,
+ MOVE_BULLET_SEED,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SNOVER
#if P_FAMILY_SNIVY
- egg_moves(SNIVY,
- MOVE_CAPTIVATE,
- MOVE_NATURAL_GIFT,
- MOVE_GLARE,
- MOVE_IRON_TAIL,
- MOVE_MAGICAL_LEAF,
- MOVE_SWEET_SCENT,
- MOVE_MIRROR_COAT,
- MOVE_PURSUIT,
- MOVE_MEAN_LOOK,
- MOVE_TWISTER,
- MOVE_GRASSY_TERRAIN),
+static const u16 sSnivyEggMoveLearnset[] = {
+ MOVE_CAPTIVATE,
+ MOVE_NATURAL_GIFT,
+ MOVE_GLARE,
+ MOVE_IRON_TAIL,
+ MOVE_MAGICAL_LEAF,
+ MOVE_SWEET_SCENT,
+ MOVE_MIRROR_COAT,
+ MOVE_PURSUIT,
+ MOVE_MEAN_LOOK,
+ MOVE_TWISTER,
+ MOVE_GRASSY_TERRAIN,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SNIVY
#if P_FAMILY_TEPIG
- egg_moves(TEPIG,
- MOVE_COVET,
- MOVE_BODY_SLAM,
- MOVE_THRASH,
- MOVE_MAGNITUDE,
- MOVE_SUPERPOWER,
- MOVE_CURSE,
- MOVE_ENDEAVOR,
- MOVE_YAWN,
- MOVE_SLEEP_TALK,
- MOVE_HEAVY_SLAM,
- MOVE_SUCKER_PUNCH,
- MOVE_BURN_UP),
+static const u16 sTepigEggMoveLearnset[] = {
+ MOVE_COVET,
+ MOVE_BODY_SLAM,
+ MOVE_THRASH,
+ MOVE_MAGNITUDE,
+ MOVE_SUPERPOWER,
+ MOVE_CURSE,
+ MOVE_ENDEAVOR,
+ MOVE_YAWN,
+ MOVE_SLEEP_TALK,
+ MOVE_HEAVY_SLAM,
+ MOVE_SUCKER_PUNCH,
+ MOVE_BURN_UP,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_TEPIG
#if P_FAMILY_OSHAWOTT
- egg_moves(OSHAWOTT,
- MOVE_COPYCAT,
- MOVE_DETECT,
- MOVE_AIR_SLASH,
- MOVE_ASSURANCE,
- MOVE_BRINE,
- MOVE_NIGHT_SLASH,
- MOVE_TRUMP_CARD,
- MOVE_SCREECH,
- MOVE_SACRED_SWORD),
+static const u16 sOshawottEggMoveLearnset[] = {
+ MOVE_COPYCAT,
+ MOVE_DETECT,
+ MOVE_AIR_SLASH,
+ MOVE_ASSURANCE,
+ MOVE_BRINE,
+ MOVE_NIGHT_SLASH,
+ MOVE_TRUMP_CARD,
+ MOVE_SCREECH,
+ MOVE_SACRED_SWORD,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_OSHAWOTT
#if P_FAMILY_PATRAT
- egg_moves(PATRAT,
- MOVE_FORESIGHT,
- MOVE_IRON_TAIL,
- MOVE_SCREECH,
- MOVE_ASSURANCE,
- MOVE_PURSUIT,
- MOVE_REVENGE,
- MOVE_FLAIL,
- MOVE_TEARFUL_LOOK,
- MOVE_BULLET_SEED),
+static const u16 sPatratEggMoveLearnset[] = {
+ MOVE_FORESIGHT,
+ MOVE_IRON_TAIL,
+ MOVE_SCREECH,
+ MOVE_ASSURANCE,
+ MOVE_PURSUIT,
+ MOVE_REVENGE,
+ MOVE_FLAIL,
+ MOVE_TEARFUL_LOOK,
+ MOVE_BULLET_SEED,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_PATRAT
#if P_FAMILY_LILLIPUP
- egg_moves(LILLIPUP,
- MOVE_HOWL,
- MOVE_SAND_ATTACK,
- MOVE_MUD_SLAP,
- MOVE_LICK,
- MOVE_CHARM,
- MOVE_ENDURE,
- MOVE_YAWN,
- MOVE_PURSUIT,
- MOVE_FIRE_FANG,
- MOVE_THUNDER_FANG,
- MOVE_ICE_FANG,
- MOVE_AFTER_YOU,
- MOVE_PSYCHIC_FANGS),
+static const u16 sLillipupEggMoveLearnset[] = {
+ MOVE_HOWL,
+ MOVE_SAND_ATTACK,
+ MOVE_MUD_SLAP,
+ MOVE_LICK,
+ MOVE_CHARM,
+ MOVE_ENDURE,
+ MOVE_YAWN,
+ MOVE_PURSUIT,
+ MOVE_FIRE_FANG,
+ MOVE_THUNDER_FANG,
+ MOVE_ICE_FANG,
+ MOVE_AFTER_YOU,
+ MOVE_PSYCHIC_FANGS,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_LILLIPUP
#if P_FAMILY_PURRLOIN
- egg_moves(PURRLOIN,
- MOVE_PAY_DAY,
- MOVE_FOUL_PLAY,
- MOVE_FEINT_ATTACK,
- MOVE_FAKE_TEARS,
- MOVE_CHARM,
- MOVE_ENCORE,
- MOVE_YAWN,
- MOVE_COVET,
- MOVE_COPYCAT),
+static const u16 sPurrloinEggMoveLearnset[] = {
+ MOVE_PAY_DAY,
+ MOVE_FOUL_PLAY,
+ MOVE_FEINT_ATTACK,
+ MOVE_FAKE_TEARS,
+ MOVE_CHARM,
+ MOVE_ENCORE,
+ MOVE_YAWN,
+ MOVE_COVET,
+ MOVE_COPYCAT,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_PURRLOIN
#if P_FAMILY_PANSAGE
- egg_moves(PANSAGE,
- MOVE_COVET,
- MOVE_LOW_KICK,
- MOVE_TICKLE,
- MOVE_NASTY_PLOT,
- MOVE_ROLE_PLAY,
- MOVE_ASTONISH,
- MOVE_GRASS_WHISTLE,
- MOVE_MAGICAL_LEAF,
- MOVE_BULLET_SEED,
- MOVE_LEAF_STORM,
- MOVE_DISARMING_VOICE,
- MOVE_SPIKY_SHIELD),
+static const u16 sPansageEggMoveLearnset[] = {
+ MOVE_COVET,
+ MOVE_LOW_KICK,
+ MOVE_TICKLE,
+ MOVE_NASTY_PLOT,
+ MOVE_ROLE_PLAY,
+ MOVE_ASTONISH,
+ MOVE_GRASS_WHISTLE,
+ MOVE_MAGICAL_LEAF,
+ MOVE_BULLET_SEED,
+ MOVE_LEAF_STORM,
+ MOVE_DISARMING_VOICE,
+ MOVE_SPIKY_SHIELD,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_PANSAGE
#if P_FAMILY_PANSEAR
- egg_moves(PANSEAR,
- MOVE_COVET,
- MOVE_LOW_KICK,
- MOVE_TICKLE,
- MOVE_NASTY_PLOT,
- MOVE_ROLE_PLAY,
- MOVE_ASTONISH,
- MOVE_SLEEP_TALK,
- MOVE_FIRE_SPIN,
- MOVE_FIRE_PUNCH,
- MOVE_HEAT_WAVE,
- MOVE_DISARMING_VOICE,
- MOVE_BELCH,
- MOVE_FLARE_BLITZ),
+static const u16 sPansearEggMoveLearnset[] = {
+ MOVE_COVET,
+ MOVE_LOW_KICK,
+ MOVE_TICKLE,
+ MOVE_NASTY_PLOT,
+ MOVE_ROLE_PLAY,
+ MOVE_ASTONISH,
+ MOVE_SLEEP_TALK,
+ MOVE_FIRE_SPIN,
+ MOVE_FIRE_PUNCH,
+ MOVE_HEAT_WAVE,
+ MOVE_DISARMING_VOICE,
+ MOVE_BELCH,
+ MOVE_FLARE_BLITZ,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_PANSEAR
#if P_FAMILY_PANPOUR
- egg_moves(PANPOUR,
- MOVE_COVET,
- MOVE_LOW_KICK,
- MOVE_TICKLE,
- MOVE_NASTY_PLOT,
- MOVE_ROLE_PLAY,
- MOVE_ASTONISH,
- MOVE_AQUA_RING,
- MOVE_AQUA_TAIL,
- MOVE_MUD_SPORT,
- MOVE_HYDRO_PUMP,
- MOVE_DISARMING_VOICE),
+static const u16 sPanpourEggMoveLearnset[] = {
+ MOVE_COVET,
+ MOVE_LOW_KICK,
+ MOVE_TICKLE,
+ MOVE_NASTY_PLOT,
+ MOVE_ROLE_PLAY,
+ MOVE_ASTONISH,
+ MOVE_AQUA_RING,
+ MOVE_AQUA_TAIL,
+ MOVE_MUD_SPORT,
+ MOVE_HYDRO_PUMP,
+ MOVE_DISARMING_VOICE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_PANPOUR
#if P_FAMILY_MUNNA
- egg_moves(MUNNA,
- MOVE_SLEEP_TALK,
- MOVE_SECRET_POWER,
- MOVE_BARRIER,
- MOVE_MAGIC_COAT,
- MOVE_HELPING_HAND,
- MOVE_BATON_PASS,
- MOVE_SWIFT,
- MOVE_CURSE,
- MOVE_SONIC_BOOM,
- MOVE_HEALING_WISH),
+static const u16 sMunnaEggMoveLearnset[] = {
+ MOVE_SLEEP_TALK,
+ MOVE_SECRET_POWER,
+ MOVE_BARRIER,
+ MOVE_MAGIC_COAT,
+ MOVE_HELPING_HAND,
+ MOVE_BATON_PASS,
+ MOVE_SWIFT,
+ MOVE_CURSE,
+ MOVE_SONIC_BOOM,
+ MOVE_HEALING_WISH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_MUNNA
#if P_FAMILY_PIDOVE
- egg_moves(PIDOVE,
- MOVE_STEEL_WING,
- MOVE_HYPNOSIS,
- MOVE_UPROAR,
- MOVE_BESTOW,
- MOVE_WISH,
- MOVE_MORNING_SUN,
- MOVE_LUCKY_CHANT,
- MOVE_NIGHT_SLASH),
+static const u16 sPidoveEggMoveLearnset[] = {
+ MOVE_STEEL_WING,
+ MOVE_HYPNOSIS,
+ MOVE_UPROAR,
+ MOVE_BESTOW,
+ MOVE_WISH,
+ MOVE_MORNING_SUN,
+ MOVE_LUCKY_CHANT,
+ MOVE_NIGHT_SLASH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_PIDOVE
#if P_FAMILY_BLITZLE
- egg_moves(BLITZLE,
- MOVE_ME_FIRST,
- MOVE_TAKE_DOWN,
- MOVE_SAND_ATTACK,
- MOVE_DOUBLE_KICK,
- MOVE_SCREECH,
- MOVE_RAGE,
- MOVE_ENDURE,
- MOVE_DOUBLE_EDGE,
- MOVE_SHOCK_WAVE,
- MOVE_SNATCH,
- MOVE_FEINT),
+static const u16 sBlitzleEggMoveLearnset[] = {
+ MOVE_ME_FIRST,
+ MOVE_TAKE_DOWN,
+ MOVE_SAND_ATTACK,
+ MOVE_DOUBLE_KICK,
+ MOVE_SCREECH,
+ MOVE_RAGE,
+ MOVE_ENDURE,
+ MOVE_DOUBLE_EDGE,
+ MOVE_SHOCK_WAVE,
+ MOVE_SNATCH,
+ MOVE_FEINT,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_BLITZLE
#if P_FAMILY_ROGGENROLA
- egg_moves(ROGGENROLA,
- MOVE_MAGNITUDE,
- MOVE_CURSE,
- MOVE_AUTOTOMIZE,
- MOVE_ROCK_TOMB,
- MOVE_LOCK_ON,
- MOVE_HEAVY_SLAM,
- MOVE_TAKE_DOWN,
- MOVE_GRAVITY,
- MOVE_WIDE_GUARD),
+static const u16 sRoggenrolaEggMoveLearnset[] = {
+ MOVE_MAGNITUDE,
+ MOVE_CURSE,
+ MOVE_AUTOTOMIZE,
+ MOVE_ROCK_TOMB,
+ MOVE_LOCK_ON,
+ MOVE_HEAVY_SLAM,
+ MOVE_TAKE_DOWN,
+ MOVE_GRAVITY,
+ MOVE_WIDE_GUARD,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_ROGGENROLA
#if P_FAMILY_WOOBAT
- egg_moves(WOOBAT,
- MOVE_CHARM,
- MOVE_KNOCK_OFF,
- MOVE_FAKE_TEARS,
- MOVE_SUPERSONIC,
- MOVE_SYNCHRONOISE,
- MOVE_STORED_POWER,
- MOVE_ROOST,
- MOVE_FLATTER,
- MOVE_HELPING_HAND,
- MOVE_CAPTIVATE,
- MOVE_VENOM_DRENCH,
- MOVE_PSYCHO_SHIFT),
+static const u16 sWoobatEggMoveLearnset[] = {
+ MOVE_CHARM,
+ MOVE_KNOCK_OFF,
+ MOVE_FAKE_TEARS,
+ MOVE_SUPERSONIC,
+ MOVE_SYNCHRONOISE,
+ MOVE_STORED_POWER,
+ MOVE_ROOST,
+ MOVE_FLATTER,
+ MOVE_HELPING_HAND,
+ MOVE_CAPTIVATE,
+ MOVE_VENOM_DRENCH,
+ MOVE_PSYCHO_SHIFT,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_WOOBAT
#if P_FAMILY_DRILBUR
- egg_moves(DRILBUR,
- MOVE_IRON_DEFENSE,
- MOVE_RAPID_SPIN,
- MOVE_EARTH_POWER,
- MOVE_CRUSH_CLAW,
- MOVE_METAL_SOUND,
- MOVE_SUBMISSION,
- MOVE_SKULL_BASH,
- MOVE_ROCK_CLIMB),
+static const u16 sDrilburEggMoveLearnset[] = {
+ MOVE_IRON_DEFENSE,
+ MOVE_RAPID_SPIN,
+ MOVE_EARTH_POWER,
+ MOVE_CRUSH_CLAW,
+ MOVE_METAL_SOUND,
+ MOVE_SUBMISSION,
+ MOVE_SKULL_BASH,
+ MOVE_ROCK_CLIMB,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_DRILBUR
#if P_FAMILY_AUDINO
- egg_moves(AUDINO,
- MOVE_WISH,
- MOVE_HEAL_BELL,
- MOVE_LUCKY_CHANT,
- MOVE_ENCORE,
- MOVE_BESTOW,
- MOVE_SWEET_KISS,
- MOVE_YAWN,
- MOVE_SLEEP_TALK,
- MOVE_HEALING_WISH,
- MOVE_AMNESIA,
- MOVE_DRAINING_KISS),
+static const u16 sAudinoEggMoveLearnset[] = {
+ MOVE_WISH,
+ MOVE_HEAL_BELL,
+ MOVE_LUCKY_CHANT,
+ MOVE_ENCORE,
+ MOVE_BESTOW,
+ MOVE_SWEET_KISS,
+ MOVE_YAWN,
+ MOVE_SLEEP_TALK,
+ MOVE_HEALING_WISH,
+ MOVE_AMNESIA,
+ MOVE_DRAINING_KISS,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_AUDINO
#if P_FAMILY_TIMBURR
- egg_moves(TIMBURR,
- MOVE_DRAIN_PUNCH,
- MOVE_ENDURE,
- MOVE_COUNTER,
- MOVE_COMET_PUNCH,
- MOVE_FORESIGHT,
- MOVE_SMELLING_SALTS,
- MOVE_DETECT,
- MOVE_WIDE_GUARD,
- MOVE_FORCE_PALM,
- MOVE_REVERSAL,
- MOVE_MACH_PUNCH,
- MOVE_POWER_UP_PUNCH),
+static const u16 sTimburrEggMoveLearnset[] = {
+ MOVE_DRAIN_PUNCH,
+ MOVE_ENDURE,
+ MOVE_COUNTER,
+ MOVE_COMET_PUNCH,
+ MOVE_FORESIGHT,
+ MOVE_SMELLING_SALTS,
+ MOVE_DETECT,
+ MOVE_WIDE_GUARD,
+ MOVE_FORCE_PALM,
+ MOVE_REVERSAL,
+ MOVE_MACH_PUNCH,
+ MOVE_POWER_UP_PUNCH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_TIMBURR
#if P_FAMILY_TYMPOLE
- egg_moves(TYMPOLE,
- MOVE_WATER_PULSE,
- MOVE_REFRESH,
- MOVE_MUD_SPORT,
- MOVE_MUD_BOMB,
- MOVE_SLEEP_TALK,
- MOVE_SNORE,
- MOVE_MIST,
- MOVE_EARTH_POWER,
- MOVE_AFTER_YOU,
- MOVE_VENOM_DRENCH),
+static const u16 sTympoleEggMoveLearnset[] = {
+ MOVE_WATER_PULSE,
+ MOVE_REFRESH,
+ MOVE_MUD_SPORT,
+ MOVE_MUD_BOMB,
+ MOVE_SLEEP_TALK,
+ MOVE_SNORE,
+ MOVE_MIST,
+ MOVE_EARTH_POWER,
+ MOVE_AFTER_YOU,
+ MOVE_VENOM_DRENCH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_TYMPOLE
#if P_FAMILY_SEWADDLE
- egg_moves(SEWADDLE,
- MOVE_SILVER_WIND,
- MOVE_SCREECH,
- MOVE_RAZOR_WIND,
- MOVE_MIND_READER,
- MOVE_AGILITY,
- MOVE_ME_FIRST,
- MOVE_BATON_PASS,
- MOVE_CAMOUFLAGE,
- MOVE_AIR_SLASH,
- MOVE_GRASSY_TERRAIN),
+static const u16 sSewaddleEggMoveLearnset[] = {
+ MOVE_SILVER_WIND,
+ MOVE_SCREECH,
+ MOVE_RAZOR_WIND,
+ MOVE_MIND_READER,
+ MOVE_AGILITY,
+ MOVE_ME_FIRST,
+ MOVE_BATON_PASS,
+ MOVE_CAMOUFLAGE,
+ MOVE_AIR_SLASH,
+ MOVE_GRASSY_TERRAIN,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SEWADDLE
#if P_FAMILY_VENIPEDE
- egg_moves(VENIPEDE,
- MOVE_TWINEEDLE,
- MOVE_PIN_MISSILE,
- MOVE_TOXIC_SPIKES,
- MOVE_SPIKES,
- MOVE_TAKE_DOWN,
- MOVE_ROCK_CLIMB),
+static const u16 sVenipedeEggMoveLearnset[] = {
+ MOVE_TWINEEDLE,
+ MOVE_PIN_MISSILE,
+ MOVE_TOXIC_SPIKES,
+ MOVE_SPIKES,
+ MOVE_TAKE_DOWN,
+ MOVE_ROCK_CLIMB,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_VENIPEDE
#if P_FAMILY_COTTONEE
- egg_moves(COTTONEE,
- MOVE_NATURAL_GIFT,
- MOVE_ENCORE,
- MOVE_TICKLE,
- MOVE_FAKE_TEARS,
- MOVE_GRASS_WHISTLE,
- MOVE_MEMENTO,
- MOVE_BEAT_UP,
- MOVE_SWITCHEROO,
- MOVE_WORRY_SEED,
- MOVE_CAPTIVATE,
- MOVE_MISTY_TERRAIN),
+static const u16 sCottoneeEggMoveLearnset[] = {
+ MOVE_NATURAL_GIFT,
+ MOVE_ENCORE,
+ MOVE_TICKLE,
+ MOVE_FAKE_TEARS,
+ MOVE_GRASS_WHISTLE,
+ MOVE_MEMENTO,
+ MOVE_BEAT_UP,
+ MOVE_SWITCHEROO,
+ MOVE_WORRY_SEED,
+ MOVE_CAPTIVATE,
+ MOVE_MISTY_TERRAIN,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_COTTONEE
#if P_FAMILY_PETILIL
- egg_moves(PETILIL,
- MOVE_NATURAL_GIFT,
- MOVE_CHARM,
- MOVE_ENDURE,
- MOVE_INGRAIN,
- MOVE_WORRY_SEED,
- MOVE_GRASS_WHISTLE,
- MOVE_SWEET_SCENT,
- MOVE_BIDE,
- MOVE_HEALING_WISH,
- MOVE_ENCORE),
+static const u16 sPetililEggMoveLearnset[] = {
+ MOVE_NATURAL_GIFT,
+ MOVE_CHARM,
+ MOVE_ENDURE,
+ MOVE_INGRAIN,
+ MOVE_WORRY_SEED,
+ MOVE_GRASS_WHISTLE,
+ MOVE_SWEET_SCENT,
+ MOVE_BIDE,
+ MOVE_HEALING_WISH,
+ MOVE_ENCORE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_PETILIL
#if P_FAMILY_BASCULIN
- egg_moves(BASCULIN,
- MOVE_SWIFT,
- MOVE_BUBBLE_BEAM,
- MOVE_MUD_SHOT,
- MOVE_MUDDY_WATER,
- MOVE_AGILITY,
- MOVE_WHIRLPOOL,
- MOVE_RAGE,
- MOVE_BRINE,
- MOVE_REVENGE,
- MOVE_HEAD_SMASH),
+static const u16 sBasculinEggMoveLearnset[] = {
+ MOVE_SWIFT,
+ MOVE_BUBBLE_BEAM,
+ MOVE_MUD_SHOT,
+ MOVE_MUDDY_WATER,
+ MOVE_AGILITY,
+ MOVE_WHIRLPOOL,
+ MOVE_RAGE,
+ MOVE_BRINE,
+ MOVE_REVENGE,
+ MOVE_HEAD_SMASH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_BASCULIN
#if P_FAMILY_SANDILE
- egg_moves(SANDILE,
- MOVE_DOUBLE_EDGE,
- MOVE_ROCK_CLIMB,
- MOVE_PURSUIT,
- MOVE_UPROAR,
- MOVE_FIRE_FANG,
- MOVE_THUNDER_FANG,
- MOVE_BEAT_UP,
- MOVE_FOCUS_ENERGY,
- MOVE_COUNTER,
- MOVE_MEAN_LOOK,
- MOVE_ME_FIRST,
- MOVE_POWER_TRIP),
+static const u16 sSandileEggMoveLearnset[] = {
+ MOVE_DOUBLE_EDGE,
+ MOVE_ROCK_CLIMB,
+ MOVE_PURSUIT,
+ MOVE_UPROAR,
+ MOVE_FIRE_FANG,
+ MOVE_THUNDER_FANG,
+ MOVE_BEAT_UP,
+ MOVE_FOCUS_ENERGY,
+ MOVE_COUNTER,
+ MOVE_MEAN_LOOK,
+ MOVE_ME_FIRST,
+ MOVE_POWER_TRIP,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SANDILE
#if P_FAMILY_DARUMAKA
- egg_moves(DARUMAKA,
- MOVE_SLEEP_TALK,
- MOVE_FOCUS_PUNCH,
- MOVE_FOCUS_ENERGY,
- MOVE_ENDURE,
- MOVE_HAMMER_ARM,
- MOVE_TAKE_DOWN,
- MOVE_FLAME_WHEEL,
- MOVE_ENCORE,
- MOVE_YAWN,
- MOVE_SNATCH,
- MOVE_EXTRASENSORY),
+static const u16 sDarumakaEggMoveLearnset[] = {
+ MOVE_SLEEP_TALK,
+ MOVE_FOCUS_PUNCH,
+ MOVE_FOCUS_ENERGY,
+ MOVE_ENDURE,
+ MOVE_HAMMER_ARM,
+ MOVE_TAKE_DOWN,
+ MOVE_FLAME_WHEEL,
+ MOVE_ENCORE,
+ MOVE_YAWN,
+ MOVE_SNATCH,
+ MOVE_EXTRASENSORY,
+ MOVE_UNAVAILABLE,
+};
#if P_GALARIAN_FORMS
- egg_moves(DARUMAKA_GALARIAN,
- MOVE_FOCUS_PUNCH,
- MOVE_HAMMER_ARM,
- MOVE_TAKE_DOWN,
- MOVE_FLAME_WHEEL,
- MOVE_YAWN,
- MOVE_FREEZE_DRY,
- MOVE_INCINERATE,
- MOVE_POWER_UP_PUNCH),
+static const u16 sDarumakaGalarianEggMoveLearnset[] = {
+ MOVE_FOCUS_PUNCH,
+ MOVE_HAMMER_ARM,
+ MOVE_TAKE_DOWN,
+ MOVE_FLAME_WHEEL,
+ MOVE_YAWN,
+ MOVE_FREEZE_DRY,
+ MOVE_INCINERATE,
+ MOVE_POWER_UP_PUNCH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_GALARIAN_FORMS
#endif //P_FAMILY_DARUMAKA
#if P_FAMILY_MARACTUS
- egg_moves(MARACTUS,
- MOVE_BULLET_SEED,
- MOVE_BOUNCE,
- MOVE_WORRY_SEED,
- MOVE_LEECH_SEED,
- MOVE_SEED_BOMB,
- MOVE_WOOD_HAMMER,
- MOVE_SPIKES,
- MOVE_GRASS_WHISTLE,
- MOVE_GRASSY_TERRAIN),
+static const u16 sMaractusEggMoveLearnset[] = {
+ MOVE_BULLET_SEED,
+ MOVE_BOUNCE,
+ MOVE_WORRY_SEED,
+ MOVE_LEECH_SEED,
+ MOVE_SEED_BOMB,
+ MOVE_WOOD_HAMMER,
+ MOVE_SPIKES,
+ MOVE_GRASS_WHISTLE,
+ MOVE_GRASSY_TERRAIN,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_MARACTUS
#if P_FAMILY_DWEBBLE
- egg_moves(DWEBBLE,
- MOVE_ENDURE,
- MOVE_IRON_DEFENSE,
- MOVE_NIGHT_SLASH,
- MOVE_SAND_TOMB,
- MOVE_COUNTER,
- MOVE_CURSE,
- MOVE_SPIKES,
- MOVE_BLOCK,
- MOVE_WIDE_GUARD,
- MOVE_ROTOTILLER),
+static const u16 sDwebbleEggMoveLearnset[] = {
+ MOVE_ENDURE,
+ MOVE_IRON_DEFENSE,
+ MOVE_NIGHT_SLASH,
+ MOVE_SAND_TOMB,
+ MOVE_COUNTER,
+ MOVE_CURSE,
+ MOVE_SPIKES,
+ MOVE_BLOCK,
+ MOVE_WIDE_GUARD,
+ MOVE_ROTOTILLER,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_DWEBBLE
#if P_FAMILY_SCRAGGY
- egg_moves(SCRAGGY,
- MOVE_DRAIN_PUNCH,
- MOVE_COUNTER,
- MOVE_DRAGON_DANCE,
- MOVE_DETECT,
- MOVE_FAKE_OUT,
- MOVE_FIRE_PUNCH,
- MOVE_ICE_PUNCH,
- MOVE_THUNDER_PUNCH,
- MOVE_AMNESIA,
- MOVE_FEINT_ATTACK,
- MOVE_ZEN_HEADBUTT,
- MOVE_QUICK_GUARD,
- MOVE_POWER_UP_PUNCH,
- MOVE_ACID_SPRAY),
+static const u16 sScraggyEggMoveLearnset[] = {
+ MOVE_DRAIN_PUNCH,
+ MOVE_COUNTER,
+ MOVE_DRAGON_DANCE,
+ MOVE_DETECT,
+ MOVE_FAKE_OUT,
+ MOVE_FIRE_PUNCH,
+ MOVE_ICE_PUNCH,
+ MOVE_THUNDER_PUNCH,
+ MOVE_AMNESIA,
+ MOVE_FEINT_ATTACK,
+ MOVE_ZEN_HEADBUTT,
+ MOVE_QUICK_GUARD,
+ MOVE_POWER_UP_PUNCH,
+ MOVE_ACID_SPRAY,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SCRAGGY
#if P_FAMILY_SIGILYPH
- egg_moves(SIGILYPH,
- MOVE_STORED_POWER,
- MOVE_PSYCHO_SHIFT,
- MOVE_ANCIENT_POWER,
- MOVE_STEEL_WING,
- MOVE_ROOST,
- MOVE_SKILL_SWAP,
- MOVE_FUTURE_SIGHT),
+static const u16 sSigilyphEggMoveLearnset[] = {
+ MOVE_STORED_POWER,
+ MOVE_PSYCHO_SHIFT,
+ MOVE_ANCIENT_POWER,
+ MOVE_STEEL_WING,
+ MOVE_ROOST,
+ MOVE_SKILL_SWAP,
+ MOVE_FUTURE_SIGHT,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SIGILYPH
#if P_FAMILY_YAMASK
- egg_moves(YAMASK,
- MOVE_MEMENTO,
- MOVE_FAKE_TEARS,
- MOVE_NASTY_PLOT,
- MOVE_ENDURE,
- MOVE_HEAL_BLOCK,
- MOVE_IMPRISON,
- MOVE_NIGHTMARE,
- MOVE_DISABLE,
- MOVE_ALLY_SWITCH,
- MOVE_TOXIC_SPIKES,
- MOVE_CRAFTY_SHIELD),
+static const u16 sYamaskEggMoveLearnset[] = {
+ MOVE_MEMENTO,
+ MOVE_FAKE_TEARS,
+ MOVE_NASTY_PLOT,
+ MOVE_ENDURE,
+ MOVE_HEAL_BLOCK,
+ MOVE_IMPRISON,
+ MOVE_NIGHTMARE,
+ MOVE_DISABLE,
+ MOVE_ALLY_SWITCH,
+ MOVE_TOXIC_SPIKES,
+ MOVE_CRAFTY_SHIELD,
+ MOVE_UNAVAILABLE,
+};
#if P_GALARIAN_FORMS
- egg_moves(YAMASK_GALARIAN,
- MOVE_MEMENTO),
+static const u16 sYamaskGalarianEggMoveLearnset[] = {
+ MOVE_MEMENTO,
+ MOVE_UNAVAILABLE,
+};
#endif //P_GALARIAN_FORMS
#endif //P_FAMILY_YAMASK
#if P_FAMILY_TIRTOUGA
- egg_moves(TIRTOUGA,
- MOVE_WATER_PULSE,
- MOVE_KNOCK_OFF,
- MOVE_ROCK_THROW,
- MOVE_SLAM,
- MOVE_IRON_DEFENSE,
- MOVE_FLAIL,
- MOVE_WHIRLPOOL,
- MOVE_BODY_SLAM,
- MOVE_BIDE,
- MOVE_GUARD_SWAP,
- MOVE_LIQUIDATION),
+static const u16 sTirtougaEggMoveLearnset[] = {
+ MOVE_WATER_PULSE,
+ MOVE_KNOCK_OFF,
+ MOVE_ROCK_THROW,
+ MOVE_SLAM,
+ MOVE_IRON_DEFENSE,
+ MOVE_FLAIL,
+ MOVE_WHIRLPOOL,
+ MOVE_BODY_SLAM,
+ MOVE_BIDE,
+ MOVE_GUARD_SWAP,
+ MOVE_LIQUIDATION,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_TIRTOUGA
#if P_FAMILY_ARCHEN
- egg_moves(ARCHEN,
- MOVE_STEEL_WING,
- MOVE_DEFOG,
- MOVE_DRAGON_PULSE,
- MOVE_HEAD_SMASH,
- MOVE_KNOCK_OFF,
- MOVE_EARTH_POWER,
- MOVE_BITE,
- MOVE_ALLY_SWITCH,
- MOVE_SWITCHEROO),
+static const u16 sArchenEggMoveLearnset[] = {
+ MOVE_STEEL_WING,
+ MOVE_DEFOG,
+ MOVE_DRAGON_PULSE,
+ MOVE_HEAD_SMASH,
+ MOVE_KNOCK_OFF,
+ MOVE_EARTH_POWER,
+ MOVE_BITE,
+ MOVE_ALLY_SWITCH,
+ MOVE_SWITCHEROO,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_ARCHEN
#if P_FAMILY_TRUBBISH
- egg_moves(TRUBBISH,
- MOVE_SPIKES,
- MOVE_ROLLOUT,
- MOVE_HAZE,
- MOVE_CURSE,
- MOVE_ROCK_BLAST,
- MOVE_SAND_ATTACK,
- MOVE_MUD_SPORT,
- MOVE_SELF_DESTRUCT,
- MOVE_AUTOTOMIZE),
+static const u16 sTrubbishEggMoveLearnset[] = {
+ MOVE_SPIKES,
+ MOVE_ROLLOUT,
+ MOVE_HAZE,
+ MOVE_CURSE,
+ MOVE_ROCK_BLAST,
+ MOVE_SAND_ATTACK,
+ MOVE_MUD_SPORT,
+ MOVE_SELF_DESTRUCT,
+ MOVE_AUTOTOMIZE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_TRUBBISH
#if P_FAMILY_ZORUA
- egg_moves(ZORUA,
- MOVE_DETECT,
- MOVE_CAPTIVATE,
- MOVE_DARK_PULSE,
- MOVE_SNATCH,
- MOVE_MEMENTO,
- MOVE_SUCKER_PUNCH,
- MOVE_EXTRASENSORY,
- MOVE_COUNTER,
- MOVE_COPYCAT),
+static const u16 sZoruaEggMoveLearnset[] = {
+ MOVE_DETECT,
+ MOVE_CAPTIVATE,
+ MOVE_DARK_PULSE,
+ MOVE_SNATCH,
+ MOVE_MEMENTO,
+ MOVE_SUCKER_PUNCH,
+ MOVE_EXTRASENSORY,
+ MOVE_COUNTER,
+ MOVE_COPYCAT,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_ZORUA
#if P_FAMILY_MINCCINO
- egg_moves(MINCCINO,
- MOVE_IRON_TAIL,
- MOVE_TAIL_WHIP,
- MOVE_AQUA_TAIL,
- MOVE_MUD_SLAP,
- MOVE_KNOCK_OFF,
- MOVE_FAKE_TEARS,
- MOVE_SLEEP_TALK,
- MOVE_ENDURE,
- MOVE_FLAIL),
+static const u16 sMinccinoEggMoveLearnset[] = {
+ MOVE_IRON_TAIL,
+ MOVE_TAIL_WHIP,
+ MOVE_AQUA_TAIL,
+ MOVE_MUD_SLAP,
+ MOVE_KNOCK_OFF,
+ MOVE_FAKE_TEARS,
+ MOVE_SLEEP_TALK,
+ MOVE_ENDURE,
+ MOVE_FLAIL,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_MINCCINO
#if P_FAMILY_GOTHITA
- egg_moves(GOTHITA,
- MOVE_MIRROR_COAT,
- MOVE_UPROAR,
- MOVE_MIRACLE_EYE,
- MOVE_CAPTIVATE,
- MOVE_MEAN_LOOK,
- MOVE_DARK_PULSE,
- MOVE_HEAL_PULSE),
+static const u16 sGothitaEggMoveLearnset[] = {
+ MOVE_MIRROR_COAT,
+ MOVE_UPROAR,
+ MOVE_MIRACLE_EYE,
+ MOVE_CAPTIVATE,
+ MOVE_MEAN_LOOK,
+ MOVE_DARK_PULSE,
+ MOVE_HEAL_PULSE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_GOTHITA
#if P_FAMILY_SOLOSIS
- egg_moves(SOLOSIS,
- MOVE_NIGHT_SHADE,
- MOVE_ASTONISH,
- MOVE_CONFUSE_RAY,
- MOVE_ACID_ARMOR,
- MOVE_TRICK,
- MOVE_IMPRISON,
- MOVE_SECRET_POWER,
- MOVE_ASTONISH,
- MOVE_HELPING_HAND),
+static const u16 sSolosisEggMoveLearnset[] = {
+ MOVE_NIGHT_SHADE,
+ MOVE_ASTONISH,
+ MOVE_CONFUSE_RAY,
+ MOVE_ACID_ARMOR,
+ MOVE_TRICK,
+ MOVE_IMPRISON,
+ MOVE_SECRET_POWER,
+ MOVE_ASTONISH,
+ MOVE_HELPING_HAND,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SOLOSIS
#if P_FAMILY_DUCKLETT
- egg_moves(DUCKLETT,
- MOVE_STEEL_WING,
- MOVE_BRINE,
- MOVE_GUST,
- MOVE_AIR_CUTTER,
- MOVE_MIRROR_MOVE,
- MOVE_ME_FIRST,
- MOVE_LUCKY_CHANT,
- MOVE_MUD_SPORT,
- MOVE_AQUA_JET),
+static const u16 sDucklettEggMoveLearnset[] = {
+ MOVE_STEEL_WING,
+ MOVE_BRINE,
+ MOVE_GUST,
+ MOVE_AIR_CUTTER,
+ MOVE_MIRROR_MOVE,
+ MOVE_ME_FIRST,
+ MOVE_LUCKY_CHANT,
+ MOVE_MUD_SPORT,
+ MOVE_AQUA_JET,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_DUCKLETT
#if P_FAMILY_VANILLITE
- egg_moves(VANILLITE,
- MOVE_WATER_PULSE,
- MOVE_NATURAL_GIFT,
- MOVE_IMPRISON,
- MOVE_AUTOTOMIZE,
- MOVE_IRON_DEFENSE,
- MOVE_MAGNET_RISE,
- MOVE_ICE_SHARD,
- MOVE_POWDER_SNOW),
+static const u16 sVanilliteEggMoveLearnset[] = {
+ MOVE_WATER_PULSE,
+ MOVE_NATURAL_GIFT,
+ MOVE_IMPRISON,
+ MOVE_AUTOTOMIZE,
+ MOVE_IRON_DEFENSE,
+ MOVE_MAGNET_RISE,
+ MOVE_ICE_SHARD,
+ MOVE_POWDER_SNOW,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_VANILLITE
#if P_FAMILY_DEERLING
- egg_moves(DEERLING,
- MOVE_FAKE_TEARS,
- MOVE_NATURAL_GIFT,
- MOVE_SYNTHESIS,
- MOVE_WORRY_SEED,
- MOVE_ODOR_SLEUTH,
- MOVE_AGILITY,
- MOVE_SLEEP_TALK,
- MOVE_BATON_PASS,
- MOVE_GRASS_WHISTLE,
- MOVE_HEADBUTT),
+static const u16 sDeerlingEggMoveLearnset[] = {
+ MOVE_FAKE_TEARS,
+ MOVE_NATURAL_GIFT,
+ MOVE_SYNTHESIS,
+ MOVE_WORRY_SEED,
+ MOVE_ODOR_SLEUTH,
+ MOVE_AGILITY,
+ MOVE_SLEEP_TALK,
+ MOVE_BATON_PASS,
+ MOVE_GRASS_WHISTLE,
+ MOVE_HEADBUTT,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_DEERLING
#if P_FAMILY_EMOLGA
- egg_moves(EMOLGA,
- MOVE_ROOST,
- MOVE_IRON_TAIL,
- MOVE_ASTONISH,
- MOVE_AIR_SLASH,
- MOVE_SHOCK_WAVE,
- MOVE_CHARM,
- MOVE_COVET,
- MOVE_TICKLE,
- MOVE_BATON_PASS,
- MOVE_ION_DELUGE,
- MOVE_SPEED_SWAP),
+static const u16 sEmolgaEggMoveLearnset[] = {
+ MOVE_ROOST,
+ MOVE_IRON_TAIL,
+ MOVE_ASTONISH,
+ MOVE_AIR_SLASH,
+ MOVE_SHOCK_WAVE,
+ MOVE_CHARM,
+ MOVE_COVET,
+ MOVE_TICKLE,
+ MOVE_BATON_PASS,
+ MOVE_ION_DELUGE,
+ MOVE_SPEED_SWAP,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_EMOLGA
#if P_FAMILY_KARRABLAST
- egg_moves(KARRABLAST,
- MOVE_MEGAHORN,
- MOVE_PURSUIT,
- MOVE_COUNTER,
- MOVE_HORN_ATTACK,
- MOVE_FEINT_ATTACK,
- MOVE_BUG_BITE,
- MOVE_SCREECH,
- MOVE_KNOCK_OFF,
- MOVE_DRILL_RUN),
+static const u16 sKarrablastEggMoveLearnset[] = {
+ MOVE_MEGAHORN,
+ MOVE_PURSUIT,
+ MOVE_COUNTER,
+ MOVE_HORN_ATTACK,
+ MOVE_FEINT_ATTACK,
+ MOVE_BUG_BITE,
+ MOVE_SCREECH,
+ MOVE_KNOCK_OFF,
+ MOVE_DRILL_RUN,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_KARRABLAST
#if P_FAMILY_FOONGUS
- egg_moves(FOONGUS,
- MOVE_GASTRO_ACID,
- MOVE_GROWTH,
- MOVE_POISON_POWDER,
- MOVE_STUN_SPORE,
- MOVE_ROLLOUT,
- MOVE_DEFENSE_CURL,
- MOVE_ENDURE,
- MOVE_BODY_SLAM),
+static const u16 sFoongusEggMoveLearnset[] = {
+ MOVE_GASTRO_ACID,
+ MOVE_GROWTH,
+ MOVE_POISON_POWDER,
+ MOVE_STUN_SPORE,
+ MOVE_ROLLOUT,
+ MOVE_DEFENSE_CURL,
+ MOVE_ENDURE,
+ MOVE_BODY_SLAM,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_FOONGUS
#if P_FAMILY_FRILLISH
- egg_moves(FRILLISH,
- MOVE_ACID_ARMOR,
- MOVE_CONFUSE_RAY,
- MOVE_PAIN_SPLIT,
- MOVE_MIST,
- MOVE_RECOVER,
- MOVE_CONSTRICT),
+static const u16 sFrillishEggMoveLearnset[] = {
+ MOVE_ACID_ARMOR,
+ MOVE_CONFUSE_RAY,
+ MOVE_PAIN_SPLIT,
+ MOVE_MIST,
+ MOVE_RECOVER,
+ MOVE_CONSTRICT,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_FRILLISH
#if P_FAMILY_ALOMOMOLA
- egg_moves(ALOMOMOLA,
- MOVE_PAIN_SPLIT,
- MOVE_REFRESH,
- MOVE_TICKLE,
- MOVE_MIRROR_COAT,
- MOVE_MIST,
- MOVE_ENDURE),
+static const u16 sAlomomolaEggMoveLearnset[] = {
+ MOVE_PAIN_SPLIT,
+ MOVE_REFRESH,
+ MOVE_TICKLE,
+ MOVE_MIRROR_COAT,
+ MOVE_MIST,
+ MOVE_ENDURE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_ALOMOMOLA
#if P_FAMILY_JOLTIK
- egg_moves(JOLTIK,
- MOVE_PIN_MISSILE,
- MOVE_POISON_STING,
- MOVE_CROSS_POISON,
- MOVE_ROCK_CLIMB,
- MOVE_PURSUIT,
- MOVE_DISABLE,
- MOVE_FEINT_ATTACK,
- MOVE_CAMOUFLAGE,
- MOVE_LUNGE),
+static const u16 sJoltikEggMoveLearnset[] = {
+ MOVE_PIN_MISSILE,
+ MOVE_POISON_STING,
+ MOVE_CROSS_POISON,
+ MOVE_ROCK_CLIMB,
+ MOVE_PURSUIT,
+ MOVE_DISABLE,
+ MOVE_FEINT_ATTACK,
+ MOVE_CAMOUFLAGE,
+ MOVE_LUNGE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_JOLTIK
#if P_FAMILY_FERROSEED
- egg_moves(FERROSEED,
- MOVE_BULLET_SEED,
- MOVE_LEECH_SEED,
- MOVE_SPIKES,
- MOVE_WORRY_SEED,
- MOVE_SEED_BOMB,
- MOVE_GRAVITY,
- MOVE_ROCK_CLIMB,
- MOVE_STEALTH_ROCK,
- MOVE_ACID_SPRAY),
+static const u16 sFerroseedEggMoveLearnset[] = {
+ MOVE_BULLET_SEED,
+ MOVE_LEECH_SEED,
+ MOVE_SPIKES,
+ MOVE_WORRY_SEED,
+ MOVE_SEED_BOMB,
+ MOVE_GRAVITY,
+ MOVE_ROCK_CLIMB,
+ MOVE_STEALTH_ROCK,
+ MOVE_ACID_SPRAY,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_FERROSEED
#if P_FAMILY_ELGYEM
- egg_moves(ELGYEM,
- MOVE_TELEPORT,
- MOVE_DISABLE,
- MOVE_ASTONISH,
- MOVE_POWER_SWAP,
- MOVE_GUARD_SWAP,
- MOVE_BARRIER,
- MOVE_NASTY_PLOT,
- MOVE_SKILL_SWAP,
- MOVE_COSMIC_POWER,
- MOVE_ALLY_SWITCH),
+static const u16 sElgyemEggMoveLearnset[] = {
+ MOVE_TELEPORT,
+ MOVE_DISABLE,
+ MOVE_ASTONISH,
+ MOVE_POWER_SWAP,
+ MOVE_GUARD_SWAP,
+ MOVE_BARRIER,
+ MOVE_NASTY_PLOT,
+ MOVE_SKILL_SWAP,
+ MOVE_COSMIC_POWER,
+ MOVE_ALLY_SWITCH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_ELGYEM
#if P_FAMILY_LITWICK
- egg_moves(LITWICK,
- MOVE_ACID_ARMOR,
- MOVE_HEAT_WAVE,
- MOVE_HAZE,
- MOVE_ENDURE,
- MOVE_CAPTIVATE,
- MOVE_ACID,
- MOVE_CLEAR_SMOG,
- MOVE_POWER_SPLIT),
+static const u16 sLitwickEggMoveLearnset[] = {
+ MOVE_ACID_ARMOR,
+ MOVE_HEAT_WAVE,
+ MOVE_HAZE,
+ MOVE_ENDURE,
+ MOVE_CAPTIVATE,
+ MOVE_ACID,
+ MOVE_CLEAR_SMOG,
+ MOVE_POWER_SPLIT,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_LITWICK
#if P_FAMILY_AXEW
- egg_moves(AXEW,
- MOVE_COUNTER,
- MOVE_FOCUS_ENERGY,
- MOVE_REVERSAL,
- MOVE_ENDURE,
- MOVE_RAZOR_WIND,
- MOVE_NIGHT_SLASH,
- MOVE_ENDEAVOR,
- MOVE_IRON_TAIL,
- MOVE_DRAGON_PULSE,
- MOVE_HARDEN),
+static const u16 sAxewEggMoveLearnset[] = {
+ MOVE_COUNTER,
+ MOVE_FOCUS_ENERGY,
+ MOVE_REVERSAL,
+ MOVE_ENDURE,
+ MOVE_RAZOR_WIND,
+ MOVE_NIGHT_SLASH,
+ MOVE_ENDEAVOR,
+ MOVE_IRON_TAIL,
+ MOVE_DRAGON_PULSE,
+ MOVE_HARDEN,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_AXEW
#if P_FAMILY_CUBCHOO
- egg_moves(CUBCHOO,
- MOVE_YAWN,
- MOVE_AVALANCHE,
- MOVE_ENCORE,
- MOVE_ICE_PUNCH,
- MOVE_NIGHT_SLASH,
- MOVE_ASSURANCE,
- MOVE_SLEEP_TALK,
- MOVE_FOCUS_PUNCH,
- MOVE_PLAY_ROUGH),
+static const u16 sCubchooEggMoveLearnset[] = {
+ MOVE_YAWN,
+ MOVE_AVALANCHE,
+ MOVE_ENCORE,
+ MOVE_ICE_PUNCH,
+ MOVE_NIGHT_SLASH,
+ MOVE_ASSURANCE,
+ MOVE_SLEEP_TALK,
+ MOVE_FOCUS_PUNCH,
+ MOVE_PLAY_ROUGH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_CUBCHOO
#if P_FAMILY_SHELMET
- egg_moves(SHELMET,
- MOVE_ENDURE,
- MOVE_BATON_PASS,
- MOVE_DOUBLE_EDGE,
- MOVE_ENCORE,
- MOVE_GUARD_SPLIT,
- MOVE_MIND_READER,
- MOVE_MUD_SLAP,
- MOVE_SPIKES,
- MOVE_FEINT,
- MOVE_PURSUIT,
- MOVE_TOXIC_SPIKES),
+static const u16 sShelmetEggMoveLearnset[] = {
+ MOVE_ENDURE,
+ MOVE_BATON_PASS,
+ MOVE_DOUBLE_EDGE,
+ MOVE_ENCORE,
+ MOVE_GUARD_SPLIT,
+ MOVE_MIND_READER,
+ MOVE_MUD_SLAP,
+ MOVE_SPIKES,
+ MOVE_FEINT,
+ MOVE_PURSUIT,
+ MOVE_TOXIC_SPIKES,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SHELMET
#if P_FAMILY_STUNFISK
- egg_moves(STUNFISK,
- MOVE_SHOCK_WAVE,
- MOVE_EARTH_POWER,
- MOVE_YAWN,
- MOVE_SLEEP_TALK,
- MOVE_ASTONISH,
- MOVE_CURSE,
- MOVE_SPITE,
- MOVE_SPARK,
- MOVE_PAIN_SPLIT,
- MOVE_EERIE_IMPULSE,
- MOVE_REFLECT_TYPE,
- MOVE_ME_FIRST),
+static const u16 sStunfiskEggMoveLearnset[] = {
+ MOVE_SHOCK_WAVE,
+ MOVE_EARTH_POWER,
+ MOVE_YAWN,
+ MOVE_SLEEP_TALK,
+ MOVE_ASTONISH,
+ MOVE_CURSE,
+ MOVE_SPITE,
+ MOVE_SPARK,
+ MOVE_PAIN_SPLIT,
+ MOVE_EERIE_IMPULSE,
+ MOVE_REFLECT_TYPE,
+ MOVE_ME_FIRST,
+ MOVE_UNAVAILABLE,
+};
#if P_GALARIAN_FORMS
- egg_moves(STUNFISK_GALARIAN,
- MOVE_BIND,
- MOVE_YAWN,
- MOVE_ASTONISH,
- MOVE_CURSE,
- MOVE_SPITE,
- MOVE_COUNTER,
- MOVE_PAIN_SPLIT,
- MOVE_REFLECT_TYPE),
+static const u16 sStunfiskGalarianEggMoveLearnset[] = {
+ MOVE_BIND,
+ MOVE_YAWN,
+ MOVE_ASTONISH,
+ MOVE_CURSE,
+ MOVE_SPITE,
+ MOVE_COUNTER,
+ MOVE_PAIN_SPLIT,
+ MOVE_REFLECT_TYPE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_GALARIAN_FORMS
#endif //P_FAMILY_STUNFISK
#if P_FAMILY_MIENFOO
- egg_moves(MIENFOO,
- MOVE_ENDURE,
- MOVE_VITAL_THROW,
- MOVE_BATON_PASS,
- MOVE_SMELLING_SALTS,
- MOVE_LOW_KICK,
- MOVE_FEINT,
- MOVE_ME_FIRST,
- MOVE_KNOCK_OFF,
- MOVE_ALLY_SWITCH),
+static const u16 sMienfooEggMoveLearnset[] = {
+ MOVE_ENDURE,
+ MOVE_VITAL_THROW,
+ MOVE_BATON_PASS,
+ MOVE_SMELLING_SALTS,
+ MOVE_LOW_KICK,
+ MOVE_FEINT,
+ MOVE_ME_FIRST,
+ MOVE_KNOCK_OFF,
+ MOVE_ALLY_SWITCH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_MIENFOO
#if P_FAMILY_DRUDDIGON
- egg_moves(DRUDDIGON,
- MOVE_FIRE_FANG,
- MOVE_THUNDER_FANG,
- MOVE_CRUSH_CLAW,
- MOVE_FEINT_ATTACK,
- MOVE_PURSUIT,
- MOVE_IRON_TAIL,
- MOVE_POISON_TAIL,
- MOVE_SNATCH,
- MOVE_METAL_CLAW,
- MOVE_GLARE,
- MOVE_SUCKER_PUNCH),
+static const u16 sDruddigonEggMoveLearnset[] = {
+ MOVE_FIRE_FANG,
+ MOVE_THUNDER_FANG,
+ MOVE_CRUSH_CLAW,
+ MOVE_FEINT_ATTACK,
+ MOVE_PURSUIT,
+ MOVE_IRON_TAIL,
+ MOVE_POISON_TAIL,
+ MOVE_SNATCH,
+ MOVE_METAL_CLAW,
+ MOVE_GLARE,
+ MOVE_SUCKER_PUNCH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_DRUDDIGON
#if P_FAMILY_PAWNIARD
- egg_moves(PAWNIARD,
- MOVE_REVENGE,
- MOVE_SUCKER_PUNCH,
- MOVE_PURSUIT,
- MOVE_HEADBUTT,
- MOVE_STEALTH_ROCK,
- MOVE_PSYCHO_CUT,
- MOVE_MEAN_LOOK,
- MOVE_QUICK_GUARD),
+static const u16 sPawniardEggMoveLearnset[] = {
+ MOVE_REVENGE,
+ MOVE_SUCKER_PUNCH,
+ MOVE_PURSUIT,
+ MOVE_HEADBUTT,
+ MOVE_STEALTH_ROCK,
+ MOVE_PSYCHO_CUT,
+ MOVE_MEAN_LOOK,
+ MOVE_QUICK_GUARD,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_PAWNIARD
#if P_FAMILY_BOUFFALANT
- egg_moves(BOUFFALANT,
- MOVE_STOMP,
- MOVE_ROCK_CLIMB,
- MOVE_HEADBUTT,
- MOVE_SKULL_BASH,
- MOVE_MUD_SHOT,
- MOVE_MUD_SLAP,
- MOVE_IRON_HEAD,
- MOVE_AMNESIA,
- MOVE_BELCH,
- MOVE_COTTON_GUARD),
+static const u16 sBouffalantEggMoveLearnset[] = {
+ MOVE_STOMP,
+ MOVE_ROCK_CLIMB,
+ MOVE_HEADBUTT,
+ MOVE_SKULL_BASH,
+ MOVE_MUD_SHOT,
+ MOVE_MUD_SLAP,
+ MOVE_IRON_HEAD,
+ MOVE_AMNESIA,
+ MOVE_BELCH,
+ MOVE_COTTON_GUARD,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_BOUFFALANT
#if P_FAMILY_VULLABY
- egg_moves(VULLABY,
- MOVE_STEEL_WING,
- MOVE_MEAN_LOOK,
- MOVE_ROOST,
- MOVE_SCARY_FACE,
- MOVE_KNOCK_OFF,
- MOVE_FAKE_TEARS,
- MOVE_FOUL_PLAY),
+static const u16 sVullabyEggMoveLearnset[] = {
+ MOVE_STEEL_WING,
+ MOVE_MEAN_LOOK,
+ MOVE_ROOST,
+ MOVE_SCARY_FACE,
+ MOVE_KNOCK_OFF,
+ MOVE_FAKE_TEARS,
+ MOVE_FOUL_PLAY,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_VULLABY
#if P_FAMILY_HEATMOR
- egg_moves(HEATMOR,
- MOVE_PURSUIT,
- MOVE_WRAP,
- MOVE_NIGHT_SLASH,
- MOVE_CURSE,
- MOVE_BODY_SLAM,
- MOVE_HEAT_WAVE,
- MOVE_FEINT_ATTACK,
- MOVE_SUCKER_PUNCH,
- MOVE_TICKLE,
- MOVE_SLEEP_TALK,
- MOVE_BELCH),
+static const u16 sHeatmorEggMoveLearnset[] = {
+ MOVE_PURSUIT,
+ MOVE_WRAP,
+ MOVE_NIGHT_SLASH,
+ MOVE_CURSE,
+ MOVE_BODY_SLAM,
+ MOVE_HEAT_WAVE,
+ MOVE_FEINT_ATTACK,
+ MOVE_SUCKER_PUNCH,
+ MOVE_TICKLE,
+ MOVE_SLEEP_TALK,
+ MOVE_BELCH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_HEATMOR
#if P_FAMILY_DURANT
- egg_moves(DURANT,
- MOVE_SCREECH,
- MOVE_ENDURE,
- MOVE_ROCK_CLIMB,
- MOVE_BATON_PASS,
- MOVE_THUNDER_FANG,
- MOVE_FEINT_ATTACK),
+static const u16 sDurantEggMoveLearnset[] = {
+ MOVE_SCREECH,
+ MOVE_ENDURE,
+ MOVE_ROCK_CLIMB,
+ MOVE_BATON_PASS,
+ MOVE_THUNDER_FANG,
+ MOVE_FEINT_ATTACK,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_DURANT
#if P_FAMILY_DEINO
- egg_moves(DEINO,
- MOVE_FIRE_FANG,
- MOVE_THUNDER_FANG,
- MOVE_ICE_FANG,
- MOVE_DOUBLE_HIT,
- MOVE_ASTONISH,
- MOVE_EARTH_POWER,
- MOVE_SCREECH,
- MOVE_HEAD_SMASH,
- MOVE_ASSURANCE,
- MOVE_DARK_PULSE,
- MOVE_BELCH),
+static const u16 sDeinoEggMoveLearnset[] = {
+ MOVE_FIRE_FANG,
+ MOVE_THUNDER_FANG,
+ MOVE_ICE_FANG,
+ MOVE_DOUBLE_HIT,
+ MOVE_ASTONISH,
+ MOVE_EARTH_POWER,
+ MOVE_SCREECH,
+ MOVE_HEAD_SMASH,
+ MOVE_ASSURANCE,
+ MOVE_DARK_PULSE,
+ MOVE_BELCH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_DEINO
#if P_FAMILY_LARVESTA
- egg_moves(LARVESTA,
- MOVE_STRING_SHOT,
- MOVE_HARDEN,
- MOVE_FORESIGHT,
- MOVE_ENDURE,
- MOVE_ZEN_HEADBUTT,
- MOVE_MORNING_SUN,
- MOVE_MAGNET_RISE),
+static const u16 sLarvestaEggMoveLearnset[] = {
+ MOVE_STRING_SHOT,
+ MOVE_HARDEN,
+ MOVE_FORESIGHT,
+ MOVE_ENDURE,
+ MOVE_ZEN_HEADBUTT,
+ MOVE_MORNING_SUN,
+ MOVE_MAGNET_RISE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_LARVESTA
#if P_FAMILY_CHESPIN
- egg_moves(CHESPIN,
- MOVE_SYNTHESIS,
- MOVE_BELLY_DRUM,
- MOVE_CURSE,
- MOVE_QUICK_GUARD,
- MOVE_SPIKES,
- MOVE_DEFENSE_CURL,
- MOVE_ROLLOUT,
- MOVE_POWER_UP_PUNCH),
+static const u16 sChespinEggMoveLearnset[] = {
+ MOVE_SYNTHESIS,
+ MOVE_BELLY_DRUM,
+ MOVE_CURSE,
+ MOVE_QUICK_GUARD,
+ MOVE_SPIKES,
+ MOVE_DEFENSE_CURL,
+ MOVE_ROLLOUT,
+ MOVE_POWER_UP_PUNCH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_CHESPIN
#if P_FAMILY_FENNEKIN
- egg_moves(FENNEKIN,
- MOVE_WISH,
- MOVE_HYPNOSIS,
- MOVE_HEAT_WAVE,
- MOVE_MAGIC_COAT,
- MOVE_PSYCHIC_TERRAIN),
+static const u16 sFennekinEggMoveLearnset[] = {
+ MOVE_WISH,
+ MOVE_HYPNOSIS,
+ MOVE_HEAT_WAVE,
+ MOVE_MAGIC_COAT,
+ MOVE_PSYCHIC_TERRAIN,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_FENNEKIN
#if P_FAMILY_FROAKIE
- egg_moves(FROAKIE,
- MOVE_BESTOW,
- MOVE_MIND_READER,
- MOVE_TOXIC_SPIKES,
- MOVE_MUD_SPORT,
- MOVE_CAMOUFLAGE,
- MOVE_WATER_SPORT,
- MOVE_POWER_UP_PUNCH),
+static const u16 sFroakieEggMoveLearnset[] = {
+ MOVE_BESTOW,
+ MOVE_MIND_READER,
+ MOVE_TOXIC_SPIKES,
+ MOVE_MUD_SPORT,
+ MOVE_CAMOUFLAGE,
+ MOVE_WATER_SPORT,
+ MOVE_POWER_UP_PUNCH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_FROAKIE
#if P_FAMILY_BUNNELBY
- egg_moves(BUNNELBY,
- MOVE_SPIKES,
- MOVE_DEFENSE_CURL,
- MOVE_ROLLOUT),
+static const u16 sBunnelbyEggMoveLearnset[] = {
+ MOVE_SPIKES,
+ MOVE_DEFENSE_CURL,
+ MOVE_ROLLOUT,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_BUNNELBY
#if P_FAMILY_FLETCHLING
- egg_moves(FLETCHLING,
- MOVE_TAILWIND,
- MOVE_SNATCH,
- MOVE_QUICK_GUARD),
+static const u16 sFletchlingEggMoveLearnset[] = {
+ MOVE_TAILWIND,
+ MOVE_SNATCH,
+ MOVE_QUICK_GUARD,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_FLETCHLING
#if P_FAMILY_SCATTERBUG
- egg_moves(SCATTERBUG,
- MOVE_STUN_SPORE,
- MOVE_POISON_POWDER,
- MOVE_RAGE_POWDER),
+static const u16 sScatterbugEggMoveLearnset[] = {
+ MOVE_STUN_SPORE,
+ MOVE_POISON_POWDER,
+ MOVE_RAGE_POWDER,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SCATTERBUG
#if P_FAMILY_LITLEO
- egg_moves(LITLEO,
- MOVE_ENTRAINMENT,
- MOVE_YAWN,
- MOVE_SNATCH,
- MOVE_FIRE_SPIN,
- MOVE_FLARE_BLITZ),
+static const u16 sLitleoEggMoveLearnset[] = {
+ MOVE_ENTRAINMENT,
+ MOVE_YAWN,
+ MOVE_SNATCH,
+ MOVE_FIRE_SPIN,
+ MOVE_FLARE_BLITZ,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_LITLEO
#if P_FAMILY_FLABEBE
- egg_moves(FLABEBE,
- MOVE_COPYCAT,
- MOVE_CAPTIVATE,
- MOVE_CAMOUFLAGE,
- MOVE_TEARFUL_LOOK),
+static const u16 sFlabebeEggMoveLearnset[] = {
+ MOVE_COPYCAT,
+ MOVE_CAPTIVATE,
+ MOVE_CAMOUFLAGE,
+ MOVE_TEARFUL_LOOK,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_FLABEBE
#if P_FAMILY_SKIDDO
- egg_moves(SKIDDO,
- MOVE_DEFENSE_CURL,
- MOVE_ROLLOUT,
- MOVE_MILK_DRINK,
- MOVE_GRASSY_TERRAIN),
+static const u16 sSkiddoEggMoveLearnset[] = {
+ MOVE_DEFENSE_CURL,
+ MOVE_ROLLOUT,
+ MOVE_MILK_DRINK,
+ MOVE_GRASSY_TERRAIN,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SKIDDO
#if P_FAMILY_PANCHAM
- egg_moves(PANCHAM,
- MOVE_QUASH,
- MOVE_ME_FIRST,
- MOVE_QUICK_GUARD,
- MOVE_FOUL_PLAY,
- MOVE_STORM_THROW,
- MOVE_POWER_TRIP),
+static const u16 sPanchamEggMoveLearnset[] = {
+ MOVE_QUASH,
+ MOVE_ME_FIRST,
+ MOVE_QUICK_GUARD,
+ MOVE_FOUL_PLAY,
+ MOVE_STORM_THROW,
+ MOVE_POWER_TRIP,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_PANCHAM
#if P_FAMILY_FURFROU
- egg_moves(FURFROU,
- MOVE_ROLE_PLAY,
- MOVE_WORK_UP,
- MOVE_MIMIC,
- MOVE_CAPTIVATE,
- MOVE_REFRESH),
+static const u16 sFurfrouEggMoveLearnset[] = {
+ MOVE_ROLE_PLAY,
+ MOVE_WORK_UP,
+ MOVE_MIMIC,
+ MOVE_CAPTIVATE,
+ MOVE_REFRESH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_FURFROU
#if P_FAMILY_ESPURR
- egg_moves(ESPURR,
- MOVE_TRICK,
- MOVE_YAWN,
- MOVE_ASSIST,
- MOVE_BARRIER),
+static const u16 sEspurrEggMoveLearnset[] = {
+ MOVE_TRICK,
+ MOVE_YAWN,
+ MOVE_ASSIST,
+ MOVE_BARRIER,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_ESPURR
#if P_FAMILY_HONEDGE
- egg_moves(HONEDGE,
- MOVE_METAL_SOUND,
- MOVE_SHADOW_SNEAK,
- MOVE_DESTINY_BOND,
- MOVE_WIDE_GUARD),
+static const u16 sHonedgeEggMoveLearnset[] = {
+ MOVE_METAL_SOUND,
+ MOVE_SHADOW_SNEAK,
+ MOVE_DESTINY_BOND,
+ MOVE_WIDE_GUARD,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_HONEDGE
#if P_FAMILY_SPRITZEE
- egg_moves(SPRITZEE,
- MOVE_DISABLE,
- MOVE_WISH,
- MOVE_CAPTIVATE,
- MOVE_REFRESH,
- MOVE_NASTY_PLOT),
+static const u16 sSpritzeeEggMoveLearnset[] = {
+ MOVE_DISABLE,
+ MOVE_WISH,
+ MOVE_CAPTIVATE,
+ MOVE_REFRESH,
+ MOVE_NASTY_PLOT,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SPRITZEE
#if P_FAMILY_SWIRLIX
- egg_moves(SWIRLIX,
- MOVE_AFTER_YOU,
- MOVE_YAWN,
- MOVE_BELLY_DRUM,
- MOVE_COPYCAT,
- MOVE_STICKY_WEB),
+static const u16 sSwirlixEggMoveLearnset[] = {
+ MOVE_AFTER_YOU,
+ MOVE_YAWN,
+ MOVE_BELLY_DRUM,
+ MOVE_COPYCAT,
+ MOVE_STICKY_WEB,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SWIRLIX
#if P_FAMILY_INKAY
- egg_moves(INKAY,
- MOVE_SIMPLE_BEAM,
- MOVE_POWER_SPLIT,
- MOVE_CAMOUFLAGE,
- MOVE_FLATTER,
- MOVE_DESTINY_BOND,
- MOVE_GUARD_SWAP),
+static const u16 sInkayEggMoveLearnset[] = {
+ MOVE_SIMPLE_BEAM,
+ MOVE_POWER_SPLIT,
+ MOVE_CAMOUFLAGE,
+ MOVE_FLATTER,
+ MOVE_DESTINY_BOND,
+ MOVE_GUARD_SWAP,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_INKAY
#if P_FAMILY_BINACLE
- egg_moves(BINACLE,
- MOVE_TICKLE,
- MOVE_SWITCHEROO,
- MOVE_HELPING_HAND,
- MOVE_WATER_SPORT),
+static const u16 sBinacleEggMoveLearnset[] = {
+ MOVE_TICKLE,
+ MOVE_SWITCHEROO,
+ MOVE_HELPING_HAND,
+ MOVE_WATER_SPORT,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_BINACLE
#if P_FAMILY_SKRELP
- egg_moves(SKRELP,
- MOVE_TOXIC_SPIKES,
- MOVE_PLAY_ROUGH,
- MOVE_HAZE,
- MOVE_ACID_ARMOR,
- MOVE_VENOM_DRENCH),
+static const u16 sSkrelpEggMoveLearnset[] = {
+ MOVE_TOXIC_SPIKES,
+ MOVE_PLAY_ROUGH,
+ MOVE_HAZE,
+ MOVE_ACID_ARMOR,
+ MOVE_VENOM_DRENCH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SKRELP
#if P_FAMILY_CLAUNCHER
- egg_moves(CLAUNCHER,
- MOVE_AQUA_JET,
- MOVE_ENTRAINMENT,
- MOVE_ENDURE,
- MOVE_CRABHAMMER,
- MOVE_HELPING_HAND),
+static const u16 sClauncherEggMoveLearnset[] = {
+ MOVE_AQUA_JET,
+ MOVE_ENTRAINMENT,
+ MOVE_ENDURE,
+ MOVE_CRABHAMMER,
+ MOVE_HELPING_HAND,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_CLAUNCHER
#if P_FAMILY_HELIOPTILE
- egg_moves(HELIOPTILE,
- MOVE_AGILITY,
- MOVE_GLARE,
- MOVE_CAMOUFLAGE,
- MOVE_ELECTRIC_TERRAIN),
+static const u16 sHelioptileEggMoveLearnset[] = {
+ MOVE_AGILITY,
+ MOVE_GLARE,
+ MOVE_CAMOUFLAGE,
+ MOVE_ELECTRIC_TERRAIN,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_HELIOPTILE
#if P_FAMILY_TYRUNT
- egg_moves(TYRUNT,
- MOVE_DRAGON_DANCE,
- MOVE_THUNDER_FANG,
- MOVE_ICE_FANG,
- MOVE_POISON_FANG,
- MOVE_ROCK_POLISH,
- MOVE_FIRE_FANG,
- MOVE_CURSE),
+static const u16 sTyruntEggMoveLearnset[] = {
+ MOVE_DRAGON_DANCE,
+ MOVE_THUNDER_FANG,
+ MOVE_ICE_FANG,
+ MOVE_POISON_FANG,
+ MOVE_ROCK_POLISH,
+ MOVE_FIRE_FANG,
+ MOVE_CURSE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_TYRUNT
#if P_FAMILY_AMAURA
- egg_moves(AMAURA,
- MOVE_HAZE,
- MOVE_BARRIER,
- MOVE_MIRROR_COAT,
- MOVE_MAGNET_RISE,
- MOVE_DISCHARGE),
+static const u16 sAmauraEggMoveLearnset[] = {
+ MOVE_HAZE,
+ MOVE_BARRIER,
+ MOVE_MIRROR_COAT,
+ MOVE_MAGNET_RISE,
+ MOVE_DISCHARGE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_AMAURA
#if P_FAMILY_HAWLUCHA
- egg_moves(HAWLUCHA,
- MOVE_AGILITY,
- MOVE_ME_FIRST,
- MOVE_ALLY_SWITCH,
- MOVE_ENTRAINMENT,
- MOVE_MUD_SPORT,
- MOVE_BATON_PASS,
- MOVE_QUICK_GUARD,
- MOVE_FEINT),
+static const u16 sHawluchaEggMoveLearnset[] = {
+ MOVE_AGILITY,
+ MOVE_ME_FIRST,
+ MOVE_ALLY_SWITCH,
+ MOVE_ENTRAINMENT,
+ MOVE_MUD_SPORT,
+ MOVE_BATON_PASS,
+ MOVE_QUICK_GUARD,
+ MOVE_FEINT,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_HAWLUCHA
#if P_FAMILY_DEDENNE
- egg_moves(DEDENNE,
- MOVE_EERIE_IMPULSE,
- MOVE_COVET,
- MOVE_HELPING_HAND,
- MOVE_NATURAL_GIFT,
- MOVE_TEARFUL_LOOK),
+static const u16 sDedenneEggMoveLearnset[] = {
+ MOVE_EERIE_IMPULSE,
+ MOVE_COVET,
+ MOVE_HELPING_HAND,
+ MOVE_NATURAL_GIFT,
+ MOVE_TEARFUL_LOOK,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_DEDENNE
#if P_FAMILY_GOOMY
- egg_moves(GOOMY,
- MOVE_ACID_ARMOR,
- MOVE_CURSE,
- MOVE_IRON_TAIL,
- MOVE_POISON_TAIL,
- MOVE_COUNTER,
- MOVE_ENDURE),
+static const u16 sGoomyEggMoveLearnset[] = {
+ MOVE_ACID_ARMOR,
+ MOVE_CURSE,
+ MOVE_IRON_TAIL,
+ MOVE_POISON_TAIL,
+ MOVE_COUNTER,
+ MOVE_ENDURE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_GOOMY
#if P_FAMILY_KLEFKI
- egg_moves(KLEFKI,
- MOVE_SWITCHEROO,
- MOVE_THIEF,
- MOVE_LOCK_ON,
- MOVE_IRON_DEFENSE),
+static const u16 sKlefkiEggMoveLearnset[] = {
+ MOVE_SWITCHEROO,
+ MOVE_THIEF,
+ MOVE_LOCK_ON,
+ MOVE_IRON_DEFENSE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_KLEFKI
#if P_FAMILY_PHANTUMP
- egg_moves(PHANTUMP,
- MOVE_GRUDGE,
- MOVE_BESTOW,
- MOVE_IMPRISON,
- MOVE_VENOM_DRENCH,
- MOVE_POWER_UP_PUNCH),
+static const u16 sPhantumpEggMoveLearnset[] = {
+ MOVE_GRUDGE,
+ MOVE_BESTOW,
+ MOVE_IMPRISON,
+ MOVE_VENOM_DRENCH,
+ MOVE_POWER_UP_PUNCH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_PHANTUMP
#if P_FAMILY_PUMPKABOO
- egg_moves(PUMPKABOO,
- MOVE_DISABLE,
- MOVE_BESTOW,
- MOVE_DESTINY_BOND,
- MOVE_CURSE),
+static const u16 sPumpkabooEggMoveLearnset[] = {
+ MOVE_DISABLE,
+ MOVE_BESTOW,
+ MOVE_DESTINY_BOND,
+ MOVE_CURSE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_PUMPKABOO
#if P_FAMILY_BERGMITE
- egg_moves(BERGMITE,
- MOVE_RECOVER,
- MOVE_MIST,
- MOVE_BARRIER,
- MOVE_MIRROR_COAT),
+static const u16 sBergmiteEggMoveLearnset[] = {
+ MOVE_RECOVER,
+ MOVE_MIST,
+ MOVE_BARRIER,
+ MOVE_MIRROR_COAT,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_BERGMITE
#if P_FAMILY_NOIBAT
- egg_moves(NOIBAT,
- MOVE_SWITCHEROO,
- MOVE_SNATCH,
- MOVE_OUTRAGE,
- MOVE_TAILWIND),
+static const u16 sNoibatEggMoveLearnset[] = {
+ MOVE_SWITCHEROO,
+ MOVE_SNATCH,
+ MOVE_OUTRAGE,
+ MOVE_TAILWIND,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_NOIBAT
#if P_FAMILY_ROWLET
- egg_moves(ROWLET,
- MOVE_CURSE,
- MOVE_CONFUSE_RAY,
- MOVE_OMINOUS_WIND,
- MOVE_HAZE,
- MOVE_BATON_PASS,
- MOVE_DEFOG),
+static const u16 sRowletEggMoveLearnset[] = {
+ MOVE_CURSE,
+ MOVE_CONFUSE_RAY,
+ MOVE_OMINOUS_WIND,
+ MOVE_HAZE,
+ MOVE_BATON_PASS,
+ MOVE_DEFOG,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_ROWLET
#if P_FAMILY_LITTEN
- egg_moves(LITTEN,
- MOVE_NASTY_PLOT,
- MOVE_BODY_SLAM,
- MOVE_CRUNCH,
- MOVE_FAKE_OUT,
- MOVE_REVENGE,
- MOVE_HEAT_WAVE,
- MOVE_POWER_TRIP),
+static const u16 sLittenEggMoveLearnset[] = {
+ MOVE_NASTY_PLOT,
+ MOVE_BODY_SLAM,
+ MOVE_CRUNCH,
+ MOVE_FAKE_OUT,
+ MOVE_REVENGE,
+ MOVE_HEAT_WAVE,
+ MOVE_POWER_TRIP,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_LITTEN
#if P_FAMILY_POPPLIO
- egg_moves(POPPLIO,
- MOVE_CHARM,
- MOVE_AMNESIA,
- MOVE_AQUA_RING,
- MOVE_AROMATIC_MIST,
- MOVE_PERISH_SONG,
- MOVE_WONDER_ROOM),
+static const u16 sPopplioEggMoveLearnset[] = {
+ MOVE_CHARM,
+ MOVE_AMNESIA,
+ MOVE_AQUA_RING,
+ MOVE_AROMATIC_MIST,
+ MOVE_PERISH_SONG,
+ MOVE_WONDER_ROOM,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_POPPLIO
#if P_FAMILY_PIKIPEK
- egg_moves(PIKIPEK,
- MOVE_BRAVE_BIRD,
- MOVE_BOOMBURST,
- MOVE_MIRROR_MOVE,
- MOVE_TAILWIND,
- MOVE_UPROAR),
+static const u16 sPikipekEggMoveLearnset[] = {
+ MOVE_BRAVE_BIRD,
+ MOVE_BOOMBURST,
+ MOVE_MIRROR_MOVE,
+ MOVE_TAILWIND,
+ MOVE_UPROAR,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_PIKIPEK
#if P_FAMILY_YUNGOOS
- egg_moves(YUNGOOS,
- MOVE_REVENGE,
- MOVE_LAST_RESORT,
- MOVE_FIRE_FANG,
- MOVE_ICE_FANG,
- MOVE_THUNDER_FANG),
+static const u16 sYungoosEggMoveLearnset[] = {
+ MOVE_REVENGE,
+ MOVE_LAST_RESORT,
+ MOVE_FIRE_FANG,
+ MOVE_ICE_FANG,
+ MOVE_THUNDER_FANG,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_YUNGOOS
#if P_FAMILY_GRUBBIN
- egg_moves(GRUBBIN,
- MOVE_HARDEN,
- MOVE_ELECTROWEB,
- MOVE_MUD_SHOT,
- MOVE_ENDURE),
+static const u16 sGrubbinEggMoveLearnset[] = {
+ MOVE_HARDEN,
+ MOVE_ELECTROWEB,
+ MOVE_MUD_SHOT,
+ MOVE_ENDURE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_GRUBBIN
#if P_FAMILY_CRABRAWLER
- egg_moves(CRABRAWLER,
- MOVE_WIDE_GUARD,
- MOVE_SUPERPOWER,
- MOVE_ENDEAVOR,
- MOVE_AMNESIA),
+static const u16 sCrabrawlerEggMoveLearnset[] = {
+ MOVE_WIDE_GUARD,
+ MOVE_SUPERPOWER,
+ MOVE_ENDEAVOR,
+ MOVE_AMNESIA,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_CRABRAWLER
#if P_FAMILY_ORICORIO
- egg_moves(ORICORIO_BAILE,
- MOVE_PLUCK,
- MOVE_TAILWIND,
- MOVE_SAFEGUARD,
- MOVE_CAPTIVATE),
+static const u16 sOricorioEggMoveLearnset[] = {
+ MOVE_PLUCK,
+ MOVE_TAILWIND,
+ MOVE_SAFEGUARD,
+ MOVE_CAPTIVATE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_ORICORIO
#if P_FAMILY_CUTIEFLY
- egg_moves(CUTIEFLY,
- MOVE_BATON_PASS,
- MOVE_SKILL_SWAP,
- MOVE_SPEED_SWAP,
- MOVE_BESTOW,
- MOVE_MOONBLAST,
- MOVE_POWDER,
- MOVE_STICKY_WEB),
+static const u16 sCutieflyEggMoveLearnset[] = {
+ MOVE_BATON_PASS,
+ MOVE_SKILL_SWAP,
+ MOVE_SPEED_SWAP,
+ MOVE_BESTOW,
+ MOVE_MOONBLAST,
+ MOVE_POWDER,
+ MOVE_STICKY_WEB,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_CUTIEFLY
#if P_FAMILY_ROCKRUFF
- egg_moves(ROCKRUFF,
- MOVE_CRUSH_CLAW,
- MOVE_FIRE_FANG,
- MOVE_THUNDER_FANG,
- MOVE_SUCKER_PUNCH,
- MOVE_THRASH),
+static const u16 sRockruffEggMoveLearnset[] = {
+ MOVE_CRUSH_CLAW,
+ MOVE_FIRE_FANG,
+ MOVE_THUNDER_FANG,
+ MOVE_SUCKER_PUNCH,
+ MOVE_THRASH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_ROCKRUFF
#if P_FAMILY_WISHIWASHI
- egg_moves(WISHIWASHI,
- MOVE_MUDDY_WATER,
- MOVE_MIST,
- MOVE_WATER_PULSE,
- MOVE_WATER_SPORT,
- MOVE_WHIRLPOOL),
+static const u16 sWishiwashiEggMoveLearnset[] = {
+ MOVE_MUDDY_WATER,
+ MOVE_MIST,
+ MOVE_WATER_PULSE,
+ MOVE_WATER_SPORT,
+ MOVE_WHIRLPOOL,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_WISHIWASHI
#if P_FAMILY_MAREANIE
- egg_moves(MAREANIE,
- MOVE_STOCKPILE,
- MOVE_SWALLOW,
- MOVE_SPIT_UP,
- MOVE_HAZE),
+static const u16 sMareanieEggMoveLearnset[] = {
+ MOVE_STOCKPILE,
+ MOVE_SWALLOW,
+ MOVE_SPIT_UP,
+ MOVE_HAZE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_MAREANIE
#if P_FAMILY_MUDBRAY
- egg_moves(MUDBRAY,
- MOVE_BODY_SLAM,
- MOVE_DOUBLE_EDGE,
- MOVE_MAGNITUDE,
- MOVE_CLOSE_COMBAT,
- MOVE_MUD_BOMB),
+static const u16 sMudbrayEggMoveLearnset[] = {
+ MOVE_BODY_SLAM,
+ MOVE_DOUBLE_EDGE,
+ MOVE_MAGNITUDE,
+ MOVE_CLOSE_COMBAT,
+ MOVE_MUD_BOMB,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_MUDBRAY
#if P_FAMILY_DEWPIDER
- egg_moves(DEWPIDER,
- MOVE_POWER_SPLIT,
- MOVE_AURORA_BEAM,
- MOVE_STOCKPILE,
- MOVE_SPIT_UP,
- MOVE_STICKY_WEB),
+static const u16 sDewpiderEggMoveLearnset[] = {
+ MOVE_POWER_SPLIT,
+ MOVE_AURORA_BEAM,
+ MOVE_STOCKPILE,
+ MOVE_SPIT_UP,
+ MOVE_STICKY_WEB,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_DEWPIDER
#if P_FAMILY_FOMANTIS
- egg_moves(FOMANTIS,
- MOVE_WEATHER_BALL,
- MOVE_GIGA_DRAIN,
- MOVE_AROMATHERAPY,
- MOVE_DEFOG,
- MOVE_LEAF_STORM),
+static const u16 sFomantisEggMoveLearnset[] = {
+ MOVE_WEATHER_BALL,
+ MOVE_GIGA_DRAIN,
+ MOVE_AROMATHERAPY,
+ MOVE_DEFOG,
+ MOVE_LEAF_STORM,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_FOMANTIS
#if P_FAMILY_MORELULL
- egg_moves(MORELULL,
- MOVE_AMNESIA,
- MOVE_POISON_POWDER,
- MOVE_STUN_SPORE,
- MOVE_GROWTH,
- MOVE_LEECH_SEED),
+static const u16 sMorelullEggMoveLearnset[] = {
+ MOVE_AMNESIA,
+ MOVE_POISON_POWDER,
+ MOVE_STUN_SPORE,
+ MOVE_GROWTH,
+ MOVE_LEECH_SEED,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_MORELULL
#if P_FAMILY_SALANDIT
- egg_moves(SALANDIT,
- MOVE_BELCH,
- MOVE_KNOCK_OFF,
- MOVE_SAND_ATTACK,
- MOVE_SNATCH,
- MOVE_FAKE_OUT),
+static const u16 sSalanditEggMoveLearnset[] = {
+ MOVE_BELCH,
+ MOVE_KNOCK_OFF,
+ MOVE_SAND_ATTACK,
+ MOVE_SNATCH,
+ MOVE_FAKE_OUT,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SALANDIT
#if P_FAMILY_STUFFUL
- egg_moves(STUFFUL,
- MOVE_ICE_PUNCH,
- MOVE_THUNDER_PUNCH,
- MOVE_FORCE_PALM,
- MOVE_ENDURE,
- MOVE_WIDE_GUARD,
- MOVE_MEGA_KICK,
- MOVE_STOMPING_TANTRUM),
+static const u16 sStuffulEggMoveLearnset[] = {
+ MOVE_ICE_PUNCH,
+ MOVE_THUNDER_PUNCH,
+ MOVE_FORCE_PALM,
+ MOVE_ENDURE,
+ MOVE_WIDE_GUARD,
+ MOVE_MEGA_KICK,
+ MOVE_STOMPING_TANTRUM,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_STUFFUL
#if P_FAMILY_BOUNSWEET
- egg_moves(BOUNSWEET,
- MOVE_GRASS_WHISTLE,
- MOVE_SYNTHESIS,
- MOVE_PLAY_ROUGH,
- MOVE_FEINT,
- MOVE_CHARM,
- MOVE_ACUPRESSURE),
+static const u16 sBounsweetEggMoveLearnset[] = {
+ MOVE_GRASS_WHISTLE,
+ MOVE_SYNTHESIS,
+ MOVE_PLAY_ROUGH,
+ MOVE_FEINT,
+ MOVE_CHARM,
+ MOVE_ACUPRESSURE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_BOUNSWEET
#if P_FAMILY_COMFEY
- egg_moves(COMFEY,
- MOVE_ENDURE,
- MOVE_AMNESIA,
- MOVE_AFTER_YOU,
- MOVE_LUCKY_CHANT),
+static const u16 sComfeyEggMoveLearnset[] = {
+ MOVE_ENDURE,
+ MOVE_AMNESIA,
+ MOVE_AFTER_YOU,
+ MOVE_LUCKY_CHANT,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_COMFEY
#if P_FAMILY_ORANGURU
- egg_moves(ORANGURU,
- MOVE_EXTRASENSORY,
- MOVE_WONDER_ROOM,
- MOVE_PSYCHIC_TERRAIN),
+static const u16 sOranguruEggMoveLearnset[] = {
+ MOVE_EXTRASENSORY,
+ MOVE_WONDER_ROOM,
+ MOVE_PSYCHIC_TERRAIN,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_ORANGURU
#if P_FAMILY_PASSIMIAN
- egg_moves(PASSIMIAN,
- MOVE_SEISMIC_TOSS,
- MOVE_VITAL_THROW,
- MOVE_QUICK_GUARD,
- MOVE_IRON_HEAD,
- MOVE_QUICK_ATTACK,
- MOVE_FEINT),
+static const u16 sPassimianEggMoveLearnset[] = {
+ MOVE_SEISMIC_TOSS,
+ MOVE_VITAL_THROW,
+ MOVE_QUICK_GUARD,
+ MOVE_IRON_HEAD,
+ MOVE_QUICK_ATTACK,
+ MOVE_FEINT,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_PASSIMIAN
#if P_FAMILY_WIMPOD
- egg_moves(WIMPOD,
- MOVE_SPIKES,
- MOVE_METAL_CLAW,
- MOVE_WIDE_GUARD,
- MOVE_HARDEN,
- MOVE_AQUA_JET),
+static const u16 sWimpodEggMoveLearnset[] = {
+ MOVE_SPIKES,
+ MOVE_METAL_CLAW,
+ MOVE_WIDE_GUARD,
+ MOVE_HARDEN,
+ MOVE_AQUA_JET,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_WIMPOD
#if P_FAMILY_SANDYGAST
- egg_moves(SANDYGAST,
- MOVE_AMNESIA,
- MOVE_DESTINY_BOND,
- MOVE_ANCIENT_POWER,
- MOVE_STOCKPILE,
- MOVE_SWALLOW,
- MOVE_SPIT_UP,
- MOVE_CURSE),
+static const u16 sSandygastEggMoveLearnset[] = {
+ MOVE_AMNESIA,
+ MOVE_DESTINY_BOND,
+ MOVE_ANCIENT_POWER,
+ MOVE_STOCKPILE,
+ MOVE_SWALLOW,
+ MOVE_SPIT_UP,
+ MOVE_CURSE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SANDYGAST
#if P_FAMILY_PYUKUMUKU
- egg_moves(PYUKUMUKU,
- MOVE_ENDURE,
- MOVE_VENOM_DRENCH,
- MOVE_BESTOW,
- MOVE_TICKLE,
- MOVE_SPITE),
+static const u16 sPyukumukuEggMoveLearnset[] = {
+ MOVE_ENDURE,
+ MOVE_VENOM_DRENCH,
+ MOVE_BESTOW,
+ MOVE_TICKLE,
+ MOVE_SPITE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_PYUKUMUKU
#if P_FAMILY_KOMALA
- egg_moves(KOMALA,
- MOVE_CHARM,
- MOVE_WISH,
- MOVE_PLAY_ROUGH,
- MOVE_SING),
+static const u16 sKomalaEggMoveLearnset[] = {
+ MOVE_CHARM,
+ MOVE_WISH,
+ MOVE_PLAY_ROUGH,
+ MOVE_SING,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_KOMALA
#if P_FAMILY_TURTONATOR
- egg_moves(TURTONATOR,
- MOVE_WIDE_GUARD,
- MOVE_REVENGE,
- MOVE_HEAD_SMASH,
- MOVE_FIRE_SPIN),
+static const u16 sTurtonatorEggMoveLearnset[] = {
+ MOVE_WIDE_GUARD,
+ MOVE_REVENGE,
+ MOVE_HEAD_SMASH,
+ MOVE_FIRE_SPIN,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_TURTONATOR
#if P_FAMILY_TOGEDEMARU
- egg_moves(TOGEDEMARU,
- MOVE_REVERSAL,
- MOVE_PRESENT,
- MOVE_ENCORE,
- MOVE_TWINEEDLE,
- MOVE_WISH,
- MOVE_FAKE_OUT,
- MOVE_TICKLE,
- MOVE_FLAIL,
- MOVE_DISARMING_VOICE),
+static const u16 sTogedemaruEggMoveLearnset[] = {
+ MOVE_REVERSAL,
+ MOVE_PRESENT,
+ MOVE_ENCORE,
+ MOVE_TWINEEDLE,
+ MOVE_WISH,
+ MOVE_FAKE_OUT,
+ MOVE_TICKLE,
+ MOVE_FLAIL,
+ MOVE_DISARMING_VOICE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_TOGEDEMARU
#if P_FAMILY_MIMIKYU
- egg_moves(MIMIKYU,
- MOVE_GRUDGE,
- MOVE_DESTINY_BOND,
- MOVE_CURSE,
- MOVE_NIGHTMARE),
+static const u16 sMimikyuEggMoveLearnset[] = {
+ MOVE_GRUDGE,
+ MOVE_DESTINY_BOND,
+ MOVE_CURSE,
+ MOVE_NIGHTMARE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_MIMIKYU
#if P_FAMILY_BRUXISH
- egg_moves(BRUXISH,
- MOVE_WATER_PULSE,
- MOVE_POISON_FANG,
- MOVE_ICE_FANG,
- MOVE_RAGE),
+static const u16 sBruxishEggMoveLearnset[] = {
+ MOVE_WATER_PULSE,
+ MOVE_POISON_FANG,
+ MOVE_ICE_FANG,
+ MOVE_RAGE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_BRUXISH
#if P_FAMILY_DRAMPA
- egg_moves(DRAMPA,
- MOVE_HURRICANE,
- MOVE_DRAGON_RUSH,
- MOVE_RAZOR_WIND,
- MOVE_MIST,
- MOVE_PLAY_ROUGH),
+static const u16 sDrampaEggMoveLearnset[] = {
+ MOVE_HURRICANE,
+ MOVE_DRAGON_RUSH,
+ MOVE_RAZOR_WIND,
+ MOVE_MIST,
+ MOVE_PLAY_ROUGH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_DRAMPA
#if P_FAMILY_JANGMO_O
- egg_moves(JANGMO_O,
- MOVE_COUNTER,
- MOVE_REVERSAL,
- MOVE_DRAGON_BREATH),
+static const u16 sJangmoOEggMoveLearnset[] = {
+ MOVE_COUNTER,
+ MOVE_REVERSAL,
+ MOVE_DRAGON_BREATH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_JANGMO_O
#if P_FAMILY_GROOKEY
- egg_moves(GROOKEY,
- MOVE_GROWTH,
- MOVE_HAMMER_ARM,
- MOVE_FAKE_OUT,
- MOVE_STRENGTH,
- MOVE_NATURE_POWER,
- MOVE_WORRY_SEED,
- MOVE_LEECH_SEED),
+static const u16 sGrookeyEggMoveLearnset[] = {
+ MOVE_GROWTH,
+ MOVE_HAMMER_ARM,
+ MOVE_FAKE_OUT,
+ MOVE_STRENGTH,
+ MOVE_NATURE_POWER,
+ MOVE_WORRY_SEED,
+ MOVE_LEECH_SEED,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_GROOKEY
#if P_FAMILY_SCORBUNNY
- egg_moves(SCORBUNNY,
- MOVE_HIGH_JUMP_KICK,
- MOVE_SAND_ATTACK,
- MOVE_SUCKER_PUNCH,
- MOVE_SUPER_FANG),
+static const u16 sScorbunnyEggMoveLearnset[] = {
+ MOVE_HIGH_JUMP_KICK,
+ MOVE_SAND_ATTACK,
+ MOVE_SUCKER_PUNCH,
+ MOVE_SUPER_FANG,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SCORBUNNY
#if P_FAMILY_SOBBLE
- egg_moves(SOBBLE,
- MOVE_AQUA_JET,
- MOVE_DOUBLE_TEAM,
- MOVE_AQUA_RING,
- MOVE_MIST,
- MOVE_HAZE,
- MOVE_ICE_SHARD,
- MOVE_FELL_STINGER),
+static const u16 sSobbleEggMoveLearnset[] = {
+ MOVE_AQUA_JET,
+ MOVE_DOUBLE_TEAM,
+ MOVE_AQUA_RING,
+ MOVE_MIST,
+ MOVE_HAZE,
+ MOVE_ICE_SHARD,
+ MOVE_FELL_STINGER,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SOBBLE
#if P_FAMILY_SKWOVET
- egg_moves(SKWOVET,
- MOVE_ROLLOUT,
- MOVE_DEFENSE_CURL,
- MOVE_LAST_RESORT,
- MOVE_BELLY_DRUM),
+static const u16 sSkwovetEggMoveLearnset[] = {
+ MOVE_ROLLOUT,
+ MOVE_DEFENSE_CURL,
+ MOVE_LAST_RESORT,
+ MOVE_BELLY_DRUM,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SKWOVET
#if P_FAMILY_ROOKIDEE
- egg_moves(ROOKIDEE,
- MOVE_SKY_ATTACK,
- MOVE_SAND_ATTACK,
- MOVE_TAILWIND,
- MOVE_DEFOG,
- MOVE_ROCK_SMASH,
- MOVE_SPITE,
- MOVE_ROOST),
+static const u16 sRookideeEggMoveLearnset[] = {
+ MOVE_SKY_ATTACK,
+ MOVE_SAND_ATTACK,
+ MOVE_TAILWIND,
+ MOVE_DEFOG,
+ MOVE_ROCK_SMASH,
+ MOVE_SPITE,
+ MOVE_ROOST,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_ROOKIDEE
#if P_FAMILY_BLIPBUG
- egg_moves(BLIPBUG,
- MOVE_INFESTATION,
- MOVE_SUPERSONIC,
- MOVE_STICKY_WEB,
- MOVE_RECOVER),
+static const u16 sBlipbugEggMoveLearnset[] = {
+ MOVE_INFESTATION,
+ MOVE_SUPERSONIC,
+ MOVE_STICKY_WEB,
+ MOVE_RECOVER,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_BLIPBUG
#if P_FAMILY_NICKIT
- egg_moves(NICKIT,
- MOVE_QUICK_GUARD,
- MOVE_KNOCK_OFF,
- MOVE_HOWL,
- MOVE_TORMENT),
+static const u16 sNickitEggMoveLearnset[] = {
+ MOVE_QUICK_GUARD,
+ MOVE_KNOCK_OFF,
+ MOVE_HOWL,
+ MOVE_TORMENT,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_NICKIT
#if P_FAMILY_GOSSIFLEUR
- egg_moves(GOSSIFLEUR,
- MOVE_GROWTH,
- MOVE_LEECH_SEED,
- MOVE_WORRY_SEED,
- MOVE_POISON_POWDER,
- MOVE_STUN_SPORE,
- MOVE_SLEEP_POWDER),
+static const u16 sGossifleurEggMoveLearnset[] = {
+ MOVE_GROWTH,
+ MOVE_LEECH_SEED,
+ MOVE_WORRY_SEED,
+ MOVE_POISON_POWDER,
+ MOVE_STUN_SPORE,
+ MOVE_SLEEP_POWDER,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_GOSSIFLEUR
#if P_FAMILY_WOOLOO
- egg_moves(WOOLOO,
- MOVE_STOMP,
- MOVE_SWAGGER,
- MOVE_COUNTER),
+static const u16 sWoolooEggMoveLearnset[] = {
+ MOVE_STOMP,
+ MOVE_SWAGGER,
+ MOVE_COUNTER,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_WOOLOO
#if P_FAMILY_CHEWTLE
- egg_moves(CHEWTLE,
- MOVE_SKULL_BASH,
- MOVE_GASTRO_ACID,
- MOVE_DRAGON_TAIL),
+static const u16 sChewtleEggMoveLearnset[] = {
+ MOVE_SKULL_BASH,
+ MOVE_GASTRO_ACID,
+ MOVE_DRAGON_TAIL,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_CHEWTLE
#if P_FAMILY_YAMPER
- egg_moves(YAMPER,
- MOVE_DOUBLE_EDGE,
- MOVE_SAND_ATTACK,
- MOVE_FLAME_CHARGE,
- MOVE_DISCHARGE,
- MOVE_HOWL),
+static const u16 sYamperEggMoveLearnset[] = {
+ MOVE_DOUBLE_EDGE,
+ MOVE_SAND_ATTACK,
+ MOVE_FLAME_CHARGE,
+ MOVE_DISCHARGE,
+ MOVE_HOWL,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_YAMPER
#if P_FAMILY_ROLYCOLY
- egg_moves(ROLYCOLY,
- MOVE_EXPLOSION,
- MOVE_MUD_SLAP,
- MOVE_BLOCK),
+static const u16 sRolycolyEggMoveLearnset[] = {
+ MOVE_EXPLOSION,
+ MOVE_MUD_SLAP,
+ MOVE_BLOCK,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_ROLYCOLY
#if P_FAMILY_APPLIN
- egg_moves(APPLIN,
- MOVE_SUCKER_PUNCH,
- MOVE_ROLLOUT,
- MOVE_DEFENSE_CURL,
- MOVE_RECYCLE),
+static const u16 sApplinEggMoveLearnset[] = {
+ MOVE_SUCKER_PUNCH,
+ MOVE_ROLLOUT,
+ MOVE_DEFENSE_CURL,
+ MOVE_RECYCLE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_APPLIN
#if P_FAMILY_SILICOBRA
- egg_moves(SILICOBRA,
- MOVE_DRAGON_RUSH,
- MOVE_MUD_SLAP,
- MOVE_LAST_RESORT,
- MOVE_BELCH,
- MOVE_POISON_TAIL),
+static const u16 sSilicobraEggMoveLearnset[] = {
+ MOVE_DRAGON_RUSH,
+ MOVE_MUD_SLAP,
+ MOVE_LAST_RESORT,
+ MOVE_BELCH,
+ MOVE_POISON_TAIL,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SILICOBRA
#if P_FAMILY_CRAMORANT
- egg_moves(CRAMORANT,
- MOVE_DEFOG,
- MOVE_AERIAL_ACE,
- MOVE_FEATHER_DANCE,
- MOVE_AQUA_RING,
- MOVE_ROOST),
+static const u16 sCramorantEggMoveLearnset[] = {
+ MOVE_DEFOG,
+ MOVE_AERIAL_ACE,
+ MOVE_FEATHER_DANCE,
+ MOVE_AQUA_RING,
+ MOVE_ROOST,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_CRAMORANT
#if P_FAMILY_ARROKUDA
- egg_moves(ARROKUDA,
- MOVE_THRASH,
- MOVE_ACUPRESSURE,
- MOVE_SLASH,
- MOVE_NIGHT_SLASH),
+static const u16 sArrokudaEggMoveLearnset[] = {
+ MOVE_THRASH,
+ MOVE_ACUPRESSURE,
+ MOVE_SLASH,
+ MOVE_NIGHT_SLASH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_ARROKUDA
#if P_FAMILY_TOXEL
- egg_moves(TOXEL,
- MOVE_ENDEAVOR,
- MOVE_METAL_SOUND,
- MOVE_POWER_UP_PUNCH),
+static const u16 sToxelEggMoveLearnset[] = {
+ MOVE_ENDEAVOR,
+ MOVE_METAL_SOUND,
+ MOVE_POWER_UP_PUNCH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_TOXEL
#if P_FAMILY_SIZZLIPEDE
- egg_moves(SIZZLIPEDE,
- MOVE_KNOCK_OFF,
- MOVE_STRUGGLE_BUG,
- MOVE_ROLLOUT,
- MOVE_DEFENSE_CURL),
+static const u16 sSizzlipedeEggMoveLearnset[] = {
+ MOVE_KNOCK_OFF,
+ MOVE_STRUGGLE_BUG,
+ MOVE_ROLLOUT,
+ MOVE_DEFENSE_CURL,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SIZZLIPEDE
#if P_FAMILY_CLOBBOPUS
- egg_moves(CLOBBOPUS,
- MOVE_PAIN_SPLIT,
- MOVE_SOAK,
- MOVE_SUCKER_PUNCH,
- MOVE_CIRCLE_THROW,
- MOVE_SEISMIC_TOSS,
- MOVE_POWER_UP_PUNCH),
+static const u16 sClobbopusEggMoveLearnset[] = {
+ MOVE_PAIN_SPLIT,
+ MOVE_SOAK,
+ MOVE_SUCKER_PUNCH,
+ MOVE_CIRCLE_THROW,
+ MOVE_SEISMIC_TOSS,
+ MOVE_POWER_UP_PUNCH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_CLOBBOPUS
#if P_FAMILY_HATENNA
- egg_moves(HATENNA,
- MOVE_AROMATIC_MIST,
- MOVE_NUZZLE,
- MOVE_AFTER_YOU,
- MOVE_QUASH),
+static const u16 sHatennaEggMoveLearnset[] = {
+ MOVE_AROMATIC_MIST,
+ MOVE_NUZZLE,
+ MOVE_AFTER_YOU,
+ MOVE_QUASH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_HATENNA
#if P_FAMILY_MILCERY
- egg_moves(MILCERY,
- MOVE_BABY_DOLL_EYES,
- MOVE_LAST_RESORT),
+static const u16 sMilceryEggMoveLearnset[] = {
+ MOVE_BABY_DOLL_EYES,
+ MOVE_LAST_RESORT,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_MILCERY
#if P_FAMILY_PINCURCHIN
- egg_moves(PINCURCHIN,
- MOVE_MEMENTO,
- MOVE_SUCKER_PUNCH),
+static const u16 sPincurchinEggMoveLearnset[] = {
+ MOVE_MEMENTO,
+ MOVE_SUCKER_PUNCH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_PINCURCHIN
#if P_FAMILY_SNOM
- egg_moves(SNOM,
- MOVE_FAIRY_WIND,
- MOVE_MIRROR_COAT,
- MOVE_BUG_BITE),
+static const u16 sSnomEggMoveLearnset[] = {
+ MOVE_FAIRY_WIND,
+ MOVE_MIRROR_COAT,
+ MOVE_BUG_BITE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SNOM
#if P_FAMILY_STONJOURNER
- egg_moves(STONJOURNER,
- MOVE_CURSE,
- MOVE_ANCIENT_POWER),
+static const u16 sStonjournerEggMoveLearnset[] = {
+ MOVE_CURSE,
+ MOVE_ANCIENT_POWER,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_STONJOURNER
#if P_FAMILY_EISCUE
- egg_moves(EISCUE,
- MOVE_SOAK,
- MOVE_AQUA_RING,
- MOVE_BELLY_DRUM,
- MOVE_DOUBLE_EDGE,
- MOVE_ICICLE_CRASH,
- MOVE_HEAD_SMASH),
+static const u16 sEiscueEggMoveLearnset[] = {
+ MOVE_SOAK,
+ MOVE_AQUA_RING,
+ MOVE_BELLY_DRUM,
+ MOVE_DOUBLE_EDGE,
+ MOVE_ICICLE_CRASH,
+ MOVE_HEAD_SMASH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_EISCUE
#if P_FAMILY_INDEEDEE
- egg_moves(INDEEDEE,
- MOVE_PSYCH_UP,
- MOVE_FAKE_OUT,
- MOVE_EXTRASENSORY),
-
- egg_moves(INDEEDEE_FEMALE,
- MOVE_PSYCH_UP,
- MOVE_FAKE_OUT,
- MOVE_PSYCHO_SHIFT,
- MOVE_HEAL_PULSE),
+static const u16 sIndeedeeEggMoveLearnset[] = {
+ MOVE_PSYCH_UP,
+ MOVE_FAKE_OUT,
+ MOVE_EXTRASENSORY,
+ MOVE_UNAVAILABLE,
+};
+
+static const u16 sIndeedeeFemaleEggMoveLearnset[] = {
+ MOVE_PSYCH_UP,
+ MOVE_FAKE_OUT,
+ MOVE_PSYCHO_SHIFT,
+ MOVE_HEAL_PULSE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_INDEEDEE
#if P_FAMILY_MORPEKO
- egg_moves(MORPEKO,
- MOVE_SWAGGER,
- MOVE_SUPER_FANG,
- MOVE_CHARGE,
- MOVE_TICKLE,
- MOVE_RAPID_SPIN,
- MOVE_QUASH,
- MOVE_PARTING_SHOT,
- MOVE_FAKE_OUT),
+static const u16 sMorpekoEggMoveLearnset[] = {
+ MOVE_SWAGGER,
+ MOVE_SUPER_FANG,
+ MOVE_CHARGE,
+ MOVE_TICKLE,
+ MOVE_RAPID_SPIN,
+ MOVE_QUASH,
+ MOVE_PARTING_SHOT,
+ MOVE_FAKE_OUT,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_MORPEKO
#if P_FAMILY_CUFANT
- egg_moves(CUFANT,
- MOVE_DOUBLE_EDGE,
- MOVE_BELCH,
- MOVE_CURSE,
- MOVE_SLAM,
- MOVE_FISSURE,
- MOVE_SWAGGER,
- MOVE_WHIRLWIND,
- MOVE_DEFENSE_CURL),
+static const u16 sCufantEggMoveLearnset[] = {
+ MOVE_DOUBLE_EDGE,
+ MOVE_BELCH,
+ MOVE_CURSE,
+ MOVE_SLAM,
+ MOVE_FISSURE,
+ MOVE_SWAGGER,
+ MOVE_WHIRLWIND,
+ MOVE_DEFENSE_CURL,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_CUFANT
#if P_FAMILY_DURALUDON
- egg_moves(DURALUDON,
- MOVE_SLASH,
- MOVE_NIGHT_SLASH,
- MOVE_MIRROR_COAT),
+static const u16 sDuraludonEggMoveLearnset[] = {
+ MOVE_SLASH,
+ MOVE_NIGHT_SLASH,
+ MOVE_MIRROR_COAT,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_DURALUDON
#if P_FAMILY_DREEPY
- egg_moves(DREEPY,
- MOVE_CURSE,
- MOVE_GRUDGE,
- MOVE_CONFUSE_RAY,
- MOVE_DOUBLE_TEAM,
- MOVE_DISABLE,
- MOVE_DRAGON_TAIL,
- MOVE_SUCKER_PUNCH),
+static const u16 sDreepyEggMoveLearnset[] = {
+ MOVE_CURSE,
+ MOVE_GRUDGE,
+ MOVE_CONFUSE_RAY,
+ MOVE_DOUBLE_TEAM,
+ MOVE_DISABLE,
+ MOVE_DRAGON_TAIL,
+ MOVE_SUCKER_PUNCH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_DREEPY
#if P_FAMILY_SPRIGATITO
- egg_moves(SPRIGATITO,
- MOVE_ALLY_SWITCH,
- MOVE_COPYCAT,
- MOVE_LEECH_SEED,
- MOVE_PETAL_BLIZZARD,
- MOVE_SUCKER_PUNCH),
+static const u16 sSprigatitoEggMoveLearnset[] = {
+ MOVE_ALLY_SWITCH,
+ MOVE_COPYCAT,
+ MOVE_LEECH_SEED,
+ MOVE_PETAL_BLIZZARD,
+ MOVE_SUCKER_PUNCH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SPRIGATITO
#if P_FAMILY_FUECOCO
- egg_moves(FUECOCO,
- MOVE_BELCH,
- MOVE_CURSE,
- MOVE_ENCORE,
- MOVE_SLACK_OFF),
+static const u16 sFuecocoEggMoveLearnset[] = {
+ MOVE_BELCH,
+ MOVE_CURSE,
+ MOVE_ENCORE,
+ MOVE_SLACK_OFF,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_FUECOCO
#if P_FAMILY_QUAXLY
- egg_moves(QUAXLY,
- MOVE_DETECT,
- MOVE_LAST_RESORT,
- MOVE_RAPID_SPIN,
- MOVE_ROOST),
+static const u16 sQuaxlyEggMoveLearnset[] = {
+ MOVE_DETECT,
+ MOVE_LAST_RESORT,
+ MOVE_RAPID_SPIN,
+ MOVE_ROOST,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_QUAXLY
#if P_FAMILY_LECHONK
- egg_moves(LECHONK,
- MOVE_ENDEAVOR,
- MOVE_SPIT_UP,
- MOVE_STOCKPILE,
- MOVE_STUFF_CHEEKS,
- MOVE_SWALLOW),
+static const u16 sLechonkEggMoveLearnset[] = {
+ MOVE_ENDEAVOR,
+ MOVE_SPIT_UP,
+ MOVE_STOCKPILE,
+ MOVE_STUFF_CHEEKS,
+ MOVE_SWALLOW,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_LECHONK
#if P_FAMILY_TAROUNTULA
- egg_moves(TAROUNTULA,
- MOVE_FIRST_IMPRESSION,
- MOVE_LUNGE,
- MOVE_MEMENTO,
- MOVE_SUCKER_PUNCH),
+static const u16 sTarountulaEggMoveLearnset[] = {
+ MOVE_FIRST_IMPRESSION,
+ MOVE_LUNGE,
+ MOVE_MEMENTO,
+ MOVE_SUCKER_PUNCH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_TAROUNTULA
#if P_FAMILY_NYMBLE
- egg_moves(NYMBLE,
- MOVE_COUNTER,
- MOVE_SKITTER_SMACK),
+static const u16 sNymbleEggMoveLearnset[] = {
+ MOVE_COUNTER,
+ MOVE_SKITTER_SMACK,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_NYMBLE
#if P_FAMILY_PAWMI
- egg_moves(PAWMI,
- MOVE_FAKE_OUT,
- MOVE_MACH_PUNCH,
- MOVE_SWEET_KISS,
- MOVE_WISH),
+static const u16 sPawmiEggMoveLearnset[] = {
+ MOVE_FAKE_OUT,
+ MOVE_MACH_PUNCH,
+ MOVE_SWEET_KISS,
+ MOVE_WISH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_PAWMI
#if P_FAMILY_TANDEMAUS
- egg_moves(TANDEMAUS,
- MOVE_AFTER_YOU,
- MOVE_BATON_PASS,
- MOVE_BITE,
- MOVE_FEINT,
- MOVE_SWITCHEROO,
- MOVE_TICKLE),
+static const u16 sTandemausEggMoveLearnset[] = {
+ MOVE_AFTER_YOU,
+ MOVE_BATON_PASS,
+ MOVE_BITE,
+ MOVE_FEINT,
+ MOVE_SWITCHEROO,
+ MOVE_TICKLE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_TANDEMAUS
#if P_FAMILY_FIDOUGH
- egg_moves(FIDOUGH,
- MOVE_COPYCAT,
- MOVE_HOWL,
- MOVE_SWEET_SCENT,
- MOVE_WISH,
- MOVE_YAWN),
+static const u16 sFidoughEggMoveLearnset[] = {
+ MOVE_COPYCAT,
+ MOVE_HOWL,
+ MOVE_SWEET_SCENT,
+ MOVE_WISH,
+ MOVE_YAWN,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_FIDOUGH
#if P_FAMILY_SMOLIV
- egg_moves(SMOLIV,
- MOVE_MEMENTO,
- MOVE_STRENGTH_SAP,
- MOVE_SYNTHESIS,
- MOVE_WEATHER_BALL),
+static const u16 sSmolivEggMoveLearnset[] = {
+ MOVE_MEMENTO,
+ MOVE_STRENGTH_SAP,
+ MOVE_SYNTHESIS,
+ MOVE_WEATHER_BALL,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SMOLIV
#if P_FAMILY_SQUAWKABILLY
- egg_moves(SQUAWKABILLY,
- MOVE_DOUBLE_EDGE,
- MOVE_FINAL_GAMBIT,
- MOVE_FLATTER,
- MOVE_PARTING_SHOT),
+static const u16 sSquawkabillyEggMoveLearnset[] = {
+ MOVE_DOUBLE_EDGE,
+ MOVE_FINAL_GAMBIT,
+ MOVE_FLATTER,
+ MOVE_PARTING_SHOT,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SQUAWKABILLY
#if P_FAMILY_NACLI
- egg_moves(NACLI,
- MOVE_ANCIENT_POWER,
- MOVE_CURSE,
- MOVE_FISSURE,
- MOVE_POWER_GEM),
+static const u16 sNacliEggMoveLearnset[] = {
+ MOVE_ANCIENT_POWER,
+ MOVE_CURSE,
+ MOVE_FISSURE,
+ MOVE_POWER_GEM,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_NACLI
#if P_FAMILY_CHARCADET
- egg_moves(CHARCADET,
- MOVE_DESTINY_BOND,
- MOVE_DISABLE,
- MOVE_SPITE),
+static const u16 sCharcadetEggMoveLearnset[] = {
+ MOVE_DESTINY_BOND,
+ MOVE_DISABLE,
+ MOVE_SPITE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_CHARCADET
#if P_FAMILY_TADBULB
- egg_moves(TADBULB,
- MOVE_MUDDY_WATER,
- MOVE_PARABOLIC_CHARGE,
- MOVE_SOAK),
+static const u16 sTadbulbEggMoveLearnset[] = {
+ MOVE_MUDDY_WATER,
+ MOVE_PARABOLIC_CHARGE,
+ MOVE_SOAK,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_TADBULB
#if P_FAMILY_WATTREL
- egg_moves(WATTREL,
- MOVE_ENDEAVOR,
- MOVE_FEATHER_DANCE,
- MOVE_SPIT_UP,
- MOVE_STOCKPILE,
- MOVE_SWALLOW,
- MOVE_WEATHER_BALL),
+static const u16 sWattrelEggMoveLearnset[] = {
+ MOVE_ENDEAVOR,
+ MOVE_FEATHER_DANCE,
+ MOVE_SPIT_UP,
+ MOVE_STOCKPILE,
+ MOVE_SWALLOW,
+ MOVE_WEATHER_BALL,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_WATTREL
#if P_FAMILY_MASCHIFF
- egg_moves(MASCHIFF,
- MOVE_DESTINY_BOND,
- MOVE_ENDEAVOR,
- MOVE_PLAY_ROUGH,
- MOVE_RETALIATE),
+static const u16 sMaschiffEggMoveLearnset[] = {
+ MOVE_DESTINY_BOND,
+ MOVE_ENDEAVOR,
+ MOVE_PLAY_ROUGH,
+ MOVE_RETALIATE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_MASCHIFF
#if P_FAMILY_SHROODLE
- egg_moves(SHROODLE,
- MOVE_COPYCAT,
- MOVE_CROSS_POISON,
- MOVE_PARTING_SHOT,
- MOVE_SUPER_FANG,
- MOVE_SWAGGER,
- MOVE_TOXIC),
+static const u16 sShroodleEggMoveLearnset[] = {
+ MOVE_COPYCAT,
+ MOVE_CROSS_POISON,
+ MOVE_PARTING_SHOT,
+ MOVE_SUPER_FANG,
+ MOVE_SWAGGER,
+ MOVE_TOXIC,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_SHROODLE
#if P_FAMILY_BRAMBLIN
- egg_moves(BRAMBLIN,
- MOVE_BEAT_UP,
- MOVE_BLOCK,
- MOVE_LEECH_SEED,
- MOVE_SHADOW_SNEAK,
- MOVE_STRENGTH_SAP),
+static const u16 sBramblinEggMoveLearnset[] = {
+ MOVE_BEAT_UP,
+ MOVE_BLOCK,
+ MOVE_LEECH_SEED,
+ MOVE_SHADOW_SNEAK,
+ MOVE_STRENGTH_SAP,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_BRAMBLIN
#if P_FAMILY_TOEDSCOOL
- egg_moves(TOEDSCOOL,
- MOVE_ACUPRESSURE,
- MOVE_KNOCK_OFF,
- MOVE_LEECH_SEED,
- MOVE_MIRROR_COAT,
- MOVE_RAGE_POWDER,
- MOVE_RAPID_SPIN,
- MOVE_TICKLE,
- MOVE_TOXIC),
+static const u16 sToedscoolEggMoveLearnset[] = {
+ MOVE_ACUPRESSURE,
+ MOVE_KNOCK_OFF,
+ MOVE_LEECH_SEED,
+ MOVE_MIRROR_COAT,
+ MOVE_RAGE_POWDER,
+ MOVE_RAPID_SPIN,
+ MOVE_TICKLE,
+ MOVE_TOXIC,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_TOEDSCOOL
#if P_FAMILY_KLAWF
- egg_moves(KLAWF,
- MOVE_ANCIENT_POWER,
- MOVE_CRABHAMMER,
- MOVE_ENDEAVOR,
- MOVE_KNOCK_OFF),
+static const u16 sKlawfEggMoveLearnset[] = {
+ MOVE_ANCIENT_POWER,
+ MOVE_CRABHAMMER,
+ MOVE_ENDEAVOR,
+ MOVE_KNOCK_OFF,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_KLAWF
#if P_FAMILY_CAPSAKID
- egg_moves(CAPSAKID,
- MOVE_INGRAIN,
- MOVE_LEECH_SEED,
- MOVE_RAGE_POWDER,
- MOVE_ROLLOUT,
- MOVE_WORRY_SEED),
+static const u16 sCapsakidEggMoveLearnset[] = {
+ MOVE_INGRAIN,
+ MOVE_LEECH_SEED,
+ MOVE_RAGE_POWDER,
+ MOVE_ROLLOUT,
+ MOVE_WORRY_SEED,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_CAPSAKID
#if P_FAMILY_RELLOR
- egg_moves(RELLOR,
- MOVE_COSMIC_POWER,
- MOVE_MEMENTO,
- MOVE_RECOVER,
- MOVE_WEATHER_BALL),
+static const u16 sRellorEggMoveLearnset[] = {
+ MOVE_COSMIC_POWER,
+ MOVE_MEMENTO,
+ MOVE_RECOVER,
+ MOVE_WEATHER_BALL,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_RELLOR
#if P_FAMILY_FLITTLE
- egg_moves(FLITTLE,
- MOVE_ALLY_SWITCH,
- MOVE_HYPNOSIS,
- MOVE_ROOST),
+static const u16 sFlittleEggMoveLearnset[] = {
+ MOVE_ALLY_SWITCH,
+ MOVE_HYPNOSIS,
+ MOVE_ROOST,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_FLITTLE
#if P_FAMILY_TINKATINK
- egg_moves(TINKATINK,
- MOVE_FEINT,
- MOVE_ICE_HAMMER,
- MOVE_QUASH),
+static const u16 sTinkatinkEggMoveLearnset[] = {
+ MOVE_FEINT,
+ MOVE_ICE_HAMMER,
+ MOVE_QUASH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_TINKATINK
#if P_FAMILY_WIGLETT
- egg_moves(WIGLETT,
- MOVE_FINAL_GAMBIT,
- MOVE_MEMENTO),
+static const u16 sWiglettEggMoveLearnset[] = {
+ MOVE_FINAL_GAMBIT,
+ MOVE_MEMENTO,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_WIGLETT
#if P_FAMILY_BOMBIRDIER
- egg_moves(BOMBIRDIER,
- MOVE_FEATHER_DANCE,
- MOVE_POWER_TRIP,
- MOVE_ROOST,
- MOVE_SKY_ATTACK,
- MOVE_SUCKER_PUNCH),
+static const u16 sBombirdierEggMoveLearnset[] = {
+ MOVE_FEATHER_DANCE,
+ MOVE_POWER_TRIP,
+ MOVE_ROOST,
+ MOVE_SKY_ATTACK,
+ MOVE_SUCKER_PUNCH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_BOMBIRDIER
#if P_FAMILY_FINIZEN
- egg_moves(FINIZEN,
- MOVE_BOOMBURST,
- MOVE_BOUNCE,
- MOVE_COUNTER,
- MOVE_HAZE,
- MOVE_TICKLE),
+static const u16 sFinizenEggMoveLearnset[] = {
+ MOVE_BOOMBURST,
+ MOVE_BOUNCE,
+ MOVE_COUNTER,
+ MOVE_HAZE,
+ MOVE_TICKLE,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_FINIZEN
#if P_FAMILY_VAROOM
- egg_moves(VAROOM,
- MOVE_HAZE,
- MOVE_PARTING_SHOT,
- MOVE_SELF_DESTRUCT,
- MOVE_TORMENT,
- MOVE_TOXIC),
+static const u16 sVaroomEggMoveLearnset[] = {
+ MOVE_HAZE,
+ MOVE_PARTING_SHOT,
+ MOVE_SELF_DESTRUCT,
+ MOVE_TORMENT,
+ MOVE_TOXIC,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_VAROOM
#if P_FAMILY_CYCLIZAR
- egg_moves(CYCLIZAR,
- MOVE_AQUA_TAIL,
- MOVE_IRON_TAIL,
- MOVE_KNOCK_OFF,
- MOVE_POWER_WHIP),
+static const u16 sCyclizarEggMoveLearnset[] = {
+ MOVE_AQUA_TAIL,
+ MOVE_IRON_TAIL,
+ MOVE_KNOCK_OFF,
+ MOVE_POWER_WHIP,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_CYCLIZAR
#if P_FAMILY_ORTHWORM
- egg_moves(ORTHWORM,
- MOVE_COIL,
- MOVE_CURSE,
- MOVE_METAL_BURST),
+static const u16 sOrthwormEggMoveLearnset[] = {
+ MOVE_COIL,
+ MOVE_CURSE,
+ MOVE_METAL_BURST,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_ORTHWORM
#if P_FAMILY_GLIMMET
- egg_moves(GLIMMET,
- MOVE_EXPLOSION,
- MOVE_MEMENTO,
- MOVE_TOXIC),
+static const u16 sGlimmetEggMoveLearnset[] = {
+ MOVE_EXPLOSION,
+ MOVE_MEMENTO,
+ MOVE_TOXIC,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_GLIMMET
#if P_FAMILY_GREAVARD
- egg_moves(GREAVARD,
- MOVE_ALLY_SWITCH,
- MOVE_DESTINY_BOND,
- MOVE_DISABLE,
- MOVE_HOWL,
- MOVE_MEMENTO,
- MOVE_SHADOW_SNEAK,
- MOVE_YAWN),
+static const u16 sGreavardEggMoveLearnset[] = {
+ MOVE_ALLY_SWITCH,
+ MOVE_DESTINY_BOND,
+ MOVE_DISABLE,
+ MOVE_HOWL,
+ MOVE_MEMENTO,
+ MOVE_SHADOW_SNEAK,
+ MOVE_YAWN,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_GREAVARD
#if P_FAMILY_FLAMIGO
- egg_moves(FLAMIGO,
- MOVE_DOUBLE_TEAM,
- MOVE_QUICK_GUARD,
- MOVE_SKY_ATTACK),
+static const u16 sFlamigoEggMoveLearnset[] = {
+ MOVE_DOUBLE_TEAM,
+ MOVE_QUICK_GUARD,
+ MOVE_SKY_ATTACK,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_FLAMIGO
#if P_FAMILY_CETODDLE
- egg_moves(CETODDLE,
- MOVE_BELLY_DRUM,
- MOVE_ENTRAINMENT,
- MOVE_ICICLE_CRASH,
- MOVE_SUPERPOWER,
- MOVE_YAWN),
+static const u16 sCetoddleEggMoveLearnset[] = {
+ MOVE_BELLY_DRUM,
+ MOVE_ENTRAINMENT,
+ MOVE_ICICLE_CRASH,
+ MOVE_SUPERPOWER,
+ MOVE_YAWN,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_CETODDLE
#if P_FAMILY_VELUZA
- egg_moves(VELUZA,
- MOVE_RECOVER,
- MOVE_THRASH),
+static const u16 sVeluzaEggMoveLearnset[] = {
+ MOVE_RECOVER,
+ MOVE_THRASH,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_VELUZA
#if P_FAMILY_DONDOZO
- egg_moves(DONDOZO,
- MOVE_CURSE,
- MOVE_FISSURE,
- MOVE_THRASH,
- MOVE_YAWN),
+static const u16 sDondozoEggMoveLearnset[] = {
+ MOVE_CURSE,
+ MOVE_FISSURE,
+ MOVE_THRASH,
+ MOVE_YAWN,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_DONDOZO
#if P_FAMILY_TATSUGIRI
- egg_moves(TATSUGIRI,
- MOVE_BATON_PASS,
- MOVE_COUNTER,
- MOVE_RAPID_SPIN),
+static const u16 sTatsugiriEggMoveLearnset[] = {
+ MOVE_BATON_PASS,
+ MOVE_COUNTER,
+ MOVE_RAPID_SPIN,
+ MOVE_UNAVAILABLE,
+};
#endif //P_FAMILY_TATSUGIRI
#if P_FAMILY_FRIGIBAX
- egg_moves(FRIGIBAX,
- MOVE_AQUA_TAIL,
- MOVE_DRAGON_RUSH,
- MOVE_FREEZE_DRY,
- MOVE_ICICLE_SPEAR),
-#endif //P_FAMILY_FRIGIBAX
-
- EGG_MOVES_TERMINATOR
+static const u16 sFrigibaxEggMoveLearnset[] = {
+ MOVE_AQUA_TAIL,
+ MOVE_DRAGON_RUSH,
+ MOVE_FREEZE_DRY,
+ MOVE_ICICLE_SPEAR,
+ MOVE_UNAVAILABLE,
};
-
+#endif //P_FAMILY_FRIGIBAX
diff --git a/src/data/pokemon/form_change_tables.h b/src/data/pokemon/form_change_tables.h
index 84b7a86088db..52f888a55b32 100644
--- a/src/data/pokemon/form_change_tables.h
+++ b/src/data/pokemon/form_change_tables.h
@@ -779,6 +779,14 @@ static const struct FormChange sGreninjaBattleBondFormChangeTable[] = {
};
#endif //P_FAMILY_FROAKIE
+#if P_FAMILY_FURFROU
+static const struct FormChange sFurfrouFormChangeTable[] = {
+ {FORM_CHANGE_WITHDRAW, SPECIES_FURFROU_NATURAL},
+ {FORM_CHANGE_DAYS_PASSED, SPECIES_FURFROU_NATURAL, 5},
+ {FORM_CHANGE_TERMINATOR},
+};
+#endif //P_FAMILY_FURFROU
+
#if P_FAMILY_HONEDGE
static const struct FormChange sAegislashFormChangeTable[] = {
{FORM_CHANGE_BATTLE_SWITCH, SPECIES_AEGISLASH_SHIELD},
@@ -841,8 +849,9 @@ static const struct FormChange sDiancieFormChangeTable[] = {
#if P_FAMILY_HOOPA
static const struct FormChange sHoopaFormChangeTable[] = {
- {FORM_CHANGE_ITEM_USE, SPECIES_HOOPA_UNBOUND, ITEM_PRISON_BOTTLE, SPECIES_HOOPA_CONFINED},
- {FORM_CHANGE_WITHDRAW, SPECIES_HOOPA_CONFINED},
+ {FORM_CHANGE_ITEM_USE, SPECIES_HOOPA_UNBOUND, ITEM_PRISON_BOTTLE, SPECIES_HOOPA_CONFINED},
+ {FORM_CHANGE_WITHDRAW, SPECIES_HOOPA_CONFINED},
+ {FORM_CHANGE_DAYS_PASSED, SPECIES_HOOPA_CONFINED, 3},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_HOOPA
@@ -1259,21 +1268,27 @@ static const struct FormChange sPalafinZeroFormChangeTable[] =
#if P_FAMILY_OGERPON
static const struct FormChange sOgerponFormChangeTable[] = {
- {FORM_CHANGE_ITEM_HOLD, SPECIES_OGERPON_TEAL_MASK, ITEM_NONE},
- {FORM_CHANGE_ITEM_HOLD, SPECIES_OGERPON_WELLSPRING_MASK, ITEM_WELLSPRING_MASK},
- {FORM_CHANGE_ITEM_HOLD, SPECIES_OGERPON_HEARTHFLAME_MASK, ITEM_HEARTHFLAME_MASK},
- {FORM_CHANGE_ITEM_HOLD, SPECIES_OGERPON_CORNERSTONE_MASK, ITEM_CORNERSTONE_MASK},
+ {FORM_CHANGE_ITEM_HOLD, SPECIES_OGERPON_TEAL_MASK, ITEM_NONE},
+ {FORM_CHANGE_ITEM_HOLD, SPECIES_OGERPON_WELLSPRING_MASK, ITEM_WELLSPRING_MASK},
+ {FORM_CHANGE_ITEM_HOLD, SPECIES_OGERPON_HEARTHFLAME_MASK, ITEM_HEARTHFLAME_MASK},
+ {FORM_CHANGE_ITEM_HOLD, SPECIES_OGERPON_CORNERSTONE_MASK, ITEM_CORNERSTONE_MASK},
+#if P_TERA_FORMS
+ {FORM_CHANGE_BATTLE_TERASTALLIZATION, SPECIES_OGERPON_TEAL_MASK_TERA, TYPE_GRASS},
+ {FORM_CHANGE_BATTLE_TERASTALLIZATION, SPECIES_OGERPON_WELLSPRING_MASK_TERA, TYPE_WATER},
+ {FORM_CHANGE_BATTLE_TERASTALLIZATION, SPECIES_OGERPON_HEARTHFLAME_MASK_TERA, TYPE_FIRE},
+ {FORM_CHANGE_BATTLE_TERASTALLIZATION, SPECIES_OGERPON_CORNERSTONE_MASK_TERA, TYPE_ROCK},
+#endif
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_OGERPON
#if P_FAMILY_TERAPAGOS
static const struct FormChange sTerapagosFormChangeTable[] = {
- {FORM_CHANGE_BEGIN_BATTLE, SPECIES_TERAPAGOS_TERASTAL}, //needs to be tied to the ability
+ {FORM_CHANGE_BATTLE_SWITCH, SPECIES_TERAPAGOS_TERASTAL, ABILITY_TERA_SHIFT},
#if P_TERA_FORMS
- //{FORM_CHANGE_TERASTALLIZATION, SPECIES_TERAPAGOS_STELLAR},
+ {FORM_CHANGE_BATTLE_TERASTALLIZATION, SPECIES_TERAPAGOS_STELLAR, TYPE_STELLAR},
#endif
- {FORM_CHANGE_END_BATTLE, SPECIES_TERAPAGOS_NORMAL},
+ {FORM_CHANGE_END_BATTLE, SPECIES_TERAPAGOS_NORMAL},
{FORM_CHANGE_TERMINATOR},
};
#endif //P_FAMILY_TERAPAGOS
diff --git a/src/data/pokemon/form_species_tables.h b/src/data/pokemon/form_species_tables.h
index 9ae2c3ebdb89..f099f8665fd0 100644
--- a/src/data/pokemon/form_species_tables.h
+++ b/src/data/pokemon/form_species_tables.h
@@ -2161,6 +2161,12 @@ static const u16 sOgerponFormSpeciesIdTable[] = {
SPECIES_OGERPON_WELLSPRING_MASK,
SPECIES_OGERPON_HEARTHFLAME_MASK,
SPECIES_OGERPON_CORNERSTONE_MASK,
+#if P_TERA_FORMS
+ SPECIES_OGERPON_TEAL_MASK_TERA,
+ SPECIES_OGERPON_WELLSPRING_MASK_TERA,
+ SPECIES_OGERPON_HEARTHFLAME_MASK_TERA,
+ SPECIES_OGERPON_CORNERSTONE_MASK_TERA,
+#endif
FORM_SPECIES_END,
};
#endif //P_FAMILY_OGERPON
@@ -2169,7 +2175,7 @@ static const u16 sOgerponFormSpeciesIdTable[] = {
static const u16 sTerapagosFormSpeciesIdTable[] = {
SPECIES_TERAPAGOS_NORMAL,
SPECIES_TERAPAGOS_TERASTAL,
-#if P_TERA_FORMS
+#if P_TERA_FORMS
SPECIES_TERAPAGOS_STELLAR,
#endif
FORM_SPECIES_END,
diff --git a/src/data/pokemon/level_up_learnsets/gen_1.h b/src/data/pokemon/level_up_learnsets/gen_1.h
index 240a4b06956f..e7b9d23238f4 100644
--- a/src/data/pokemon/level_up_learnsets/gen_1.h
+++ b/src/data/pokemon/level_up_learnsets/gen_1.h
@@ -5048,7 +5048,7 @@ static const struct LevelUpMove sSwampertLevelUpLearnset[] = {
LEVEL_UP_MOVE(46, MOVE_PROTECT),
LEVEL_UP_MOVE(52, MOVE_EARTHQUAKE),
LEVEL_UP_MOVE(61, MOVE_ENDEAVOR),
- LEVEL_UP_END
+ LEVEL_UP_END
};
#endif //P_FAMILY_MUDKIP
@@ -17587,6 +17587,8 @@ static const struct LevelUpMove sFloragatoLevelUpLearnset[] = {
static const struct LevelUpMove sMeowscaradaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_FLOWER_TRICK),
+ LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM),
+ LEVEL_UP_MOVE( 1, MOVE_TRICK),
LEVEL_UP_MOVE( 1, MOVE_LEAFAGE),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
@@ -17645,6 +17647,8 @@ static const struct LevelUpMove sCrocalorLevelUpLearnset[] = {
static const struct LevelUpMove sSkeledirgeLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_TORCH_SONG),
+ LEVEL_UP_MOVE( 1, MOVE_SING),
+ LEVEL_UP_MOVE( 1, MOVE_YAWN),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_LEER),
@@ -17704,6 +17708,7 @@ static const struct LevelUpMove sQuaxwellLevelUpLearnset[] = {
static const struct LevelUpMove sQuaquavalLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_AQUA_STEP),
+ LEVEL_UP_MOVE( 1, MOVE_COUNTER),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
@@ -18188,6 +18193,10 @@ static const struct LevelUpMove sArmarougeLevelUpLearnset[] = {
static const struct LevelUpMove sCeruledgeLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_SHADOW_CLAW),
+ LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK),
+ LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD),
+ LEVEL_UP_MOVE( 1, MOVE_SOLAR_BLADE),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
@@ -18524,6 +18533,8 @@ static const struct LevelUpMove sRellorLevelUpLearnset[] = {
static const struct LevelUpMove sRabscaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_REVIVAL_BLESSING),
+ LEVEL_UP_MOVE( 1, MOVE_SAFEGUARD),
+ LEVEL_UP_MOVE( 1, MOVE_PSYCH_UP),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
@@ -19050,6 +19061,7 @@ static const struct LevelUpMove sGreatTuskLevelUpLearnset[] = {
#if P_FAMILY_SCREAM_TAIL
static const struct LevelUpMove sScreamTailLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_SING),
LEVEL_UP_MOVE( 1, MOVE_DISABLE),
@@ -19072,6 +19084,7 @@ static const struct LevelUpMove sScreamTailLevelUpLearnset[] = {
#if P_FAMILY_BRUTE_BONNET
static const struct LevelUpMove sBruteBonnetLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_ABSORB),
LEVEL_UP_MOVE( 1, MOVE_GROWTH),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
@@ -19093,6 +19106,7 @@ static const struct LevelUpMove sBruteBonnetLevelUpLearnset[] = {
#if P_FAMILY_FLUTTER_MANE
static const struct LevelUpMove sFlutterManeLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE( 1, MOVE_SPITE),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
@@ -19115,6 +19129,7 @@ static const struct LevelUpMove sFlutterManeLevelUpLearnset[] = {
#if P_FAMILY_SLITHER_WING
static const struct LevelUpMove sSlitherWingLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_GUST),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_BUG_BITE),
@@ -19138,6 +19153,7 @@ static const struct LevelUpMove sSlitherWingLevelUpLearnset[] = {
#if P_FAMILY_SANDY_SHOCKS
static const struct LevelUpMove sSandyShocksLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE),
LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC),
@@ -19183,6 +19199,7 @@ static const struct LevelUpMove sIronTreadsLevelUpLearnset[] = {
#if P_FAMILY_IRON_BUNDLE
static const struct LevelUpMove sIronBundleLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_PRESENT),
LEVEL_UP_MOVE( 7, MOVE_POWDER_SNOW),
LEVEL_UP_MOVE(14, MOVE_WHIRLPOOL),
@@ -19203,6 +19220,7 @@ static const struct LevelUpMove sIronBundleLevelUpLearnset[] = {
#if P_FAMILY_IRON_HANDS
static const struct LevelUpMove sIronHandsLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY),
@@ -19249,6 +19267,7 @@ static const struct LevelUpMove sIronJugulisLevelUpLearnset[] = {
#if P_FAMILY_IRON_MOTH
static const struct LevelUpMove sIronMothLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_GUST),
LEVEL_UP_MOVE( 1, MOVE_WHIRLWIND),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
@@ -19272,11 +19291,12 @@ static const struct LevelUpMove sIronMothLevelUpLearnset[] = {
#if P_FAMILY_IRON_THORNS
static const struct LevelUpMove sIronThornsLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW),
LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
- LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE),
+ LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
LEVEL_UP_MOVE( 7, MOVE_SCREECH),
LEVEL_UP_MOVE(21, MOVE_ROCK_TOMB),
LEVEL_UP_MOVE(28, MOVE_BITE),
@@ -19473,6 +19493,10 @@ static const struct LevelUpMove sChiYuLevelUpLearnset[] = {
#if P_FAMILY_ROARING_MOON
static const struct LevelUpMove sRoaringMoonLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
+ LEVEL_UP_MOVE( 1, MOVE_JAW_LOCK),
+ LEVEL_UP_MOVE( 1, MOVE_BREAKING_SWIPE),
+ LEVEL_UP_MOVE( 1, MOVE_SCALE_SHOT),
LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_BITE),
@@ -19496,6 +19520,7 @@ static const struct LevelUpMove sRoaringMoonLevelUpLearnset[] = {
#if P_FAMILY_IRON_VALIANT
static const struct LevelUpMove sIronValiantLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_DISABLE),
LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM),
LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK),
@@ -19511,8 +19536,8 @@ static const struct LevelUpMove sIronValiantLevelUpLearnset[] = {
LEVEL_UP_MOVE(63, MOVE_CLOSE_COMBAT),
LEVEL_UP_MOVE(70, MOVE_KNOCK_OFF),
LEVEL_UP_MOVE(77, MOVE_DESTINY_BOND),
- LEVEL_UP_MOVE(84, MOVE_QUICK_GUARD),
LEVEL_UP_MOVE(84, MOVE_WIDE_GUARD),
+ LEVEL_UP_MOVE(84, MOVE_QUICK_GUARD),
LEVEL_UP_MOVE(91, MOVE_SPIRIT_BREAK),
LEVEL_UP_END
};
@@ -19564,6 +19589,8 @@ static const struct LevelUpMove sMiraidonLevelUpLearnset[] = {
#if P_FAMILY_WALKING_WAKE
static const struct LevelUpMove sWalkingWakeLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
+ LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_ROAR),
LEVEL_UP_MOVE( 1, MOVE_TWISTER),
@@ -19585,6 +19612,8 @@ static const struct LevelUpMove sWalkingWakeLevelUpLearnset[] = {
#if P_FAMILY_IRON_LEAVES
static const struct LevelUpMove sIronLeavesLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_QUASH),
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND),
@@ -19692,8 +19721,8 @@ static const struct LevelUpMove sFezandipitiLevelUpLearnset[] = {
LEVEL_UP_MOVE(32, MOVE_CROSS_POISON),
LEVEL_UP_MOVE(40, MOVE_TAIL_SLAP),
LEVEL_UP_MOVE(48, MOVE_BEAT_UP),
- LEVEL_UP_MOVE(56, MOVE_FLATTER),
LEVEL_UP_MOVE(56, MOVE_SWAGGER),
+ LEVEL_UP_MOVE(56, MOVE_FLATTER),
LEVEL_UP_MOVE(64, MOVE_ROOST),
LEVEL_UP_MOVE(72, MOVE_MOONBLAST),
LEVEL_UP_END
@@ -19702,6 +19731,10 @@ static const struct LevelUpMove sFezandipitiLevelUpLearnset[] = {
#if P_FAMILY_OGERPON
static const struct LevelUpMove sOgerponLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK),
+ LEVEL_UP_MOVE( 1, MOVE_COUNTER),
+ LEVEL_UP_MOVE( 1, MOVE_RETALIATE),
+ LEVEL_UP_MOVE( 1, MOVE_HORN_LEECH),
LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP),
LEVEL_UP_MOVE( 1, MOVE_LEECH_SEED),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
@@ -19723,6 +19756,9 @@ static const struct LevelUpMove sOgerponLevelUpLearnset[] = {
#if P_FAMILY_GOUGING_FIRE
static const struct LevelUpMove sGougingFireLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK),
+ LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER),
+ LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR),
LEVEL_UP_MOVE( 1, MOVE_STOMP),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_INCINERATE),
@@ -19746,6 +19782,7 @@ static const struct LevelUpMove sGougingFireLevelUpLearnset[] = {
#if P_FAMILY_RAGING_BOLT
static const struct LevelUpMove sRagingBoltLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE( 1, MOVE_TWISTER),
LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_SHOCK_WAVE),
@@ -19833,6 +19870,9 @@ static const struct LevelUpMove sTerapagosLevelUpLearnset[] = {
#if P_FAMILY_PECHARUNT
static const struct LevelUpMove sPecharuntLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
+ LEVEL_UP_MOVE( 1, MOVE_ROLLOUT),
+ LEVEL_UP_MOVE( 1, MOVE_MEAN_LOOK),
LEVEL_UP_MOVE( 1, MOVE_SMOG),
LEVEL_UP_MOVE( 1, MOVE_POISON_GAS),
LEVEL_UP_MOVE( 1, MOVE_MEMENTO),
diff --git a/src/data/pokemon/level_up_learnsets/gen_2.h b/src/data/pokemon/level_up_learnsets/gen_2.h
index 0995a4c1504a..991cf5daf8aa 100644
--- a/src/data/pokemon/level_up_learnsets/gen_2.h
+++ b/src/data/pokemon/level_up_learnsets/gen_2.h
@@ -5292,7 +5292,7 @@ static const struct LevelUpMove sSwampertLevelUpLearnset[] = {
LEVEL_UP_MOVE(46, MOVE_PROTECT),
LEVEL_UP_MOVE(52, MOVE_EARTHQUAKE),
LEVEL_UP_MOVE(61, MOVE_ENDEAVOR),
- LEVEL_UP_END
+ LEVEL_UP_END
};
#endif //P_FAMILY_MUDKIP
@@ -17831,6 +17831,8 @@ static const struct LevelUpMove sFloragatoLevelUpLearnset[] = {
static const struct LevelUpMove sMeowscaradaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_FLOWER_TRICK),
+ LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM),
+ LEVEL_UP_MOVE( 1, MOVE_TRICK),
LEVEL_UP_MOVE( 1, MOVE_LEAFAGE),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
@@ -17889,6 +17891,8 @@ static const struct LevelUpMove sCrocalorLevelUpLearnset[] = {
static const struct LevelUpMove sSkeledirgeLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_TORCH_SONG),
+ LEVEL_UP_MOVE( 1, MOVE_SING),
+ LEVEL_UP_MOVE( 1, MOVE_YAWN),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_LEER),
@@ -17948,6 +17952,7 @@ static const struct LevelUpMove sQuaxwellLevelUpLearnset[] = {
static const struct LevelUpMove sQuaquavalLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_AQUA_STEP),
+ LEVEL_UP_MOVE( 1, MOVE_COUNTER),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
@@ -18432,6 +18437,10 @@ static const struct LevelUpMove sArmarougeLevelUpLearnset[] = {
static const struct LevelUpMove sCeruledgeLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_SHADOW_CLAW),
+ LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK),
+ LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD),
+ LEVEL_UP_MOVE( 1, MOVE_SOLAR_BLADE),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
@@ -18768,6 +18777,8 @@ static const struct LevelUpMove sRellorLevelUpLearnset[] = {
static const struct LevelUpMove sRabscaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_REVIVAL_BLESSING),
+ LEVEL_UP_MOVE( 1, MOVE_SAFEGUARD),
+ LEVEL_UP_MOVE( 1, MOVE_PSYCH_UP),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
@@ -19294,6 +19305,7 @@ static const struct LevelUpMove sGreatTuskLevelUpLearnset[] = {
#if P_FAMILY_SCREAM_TAIL
static const struct LevelUpMove sScreamTailLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_SING),
LEVEL_UP_MOVE( 1, MOVE_DISABLE),
@@ -19316,6 +19328,7 @@ static const struct LevelUpMove sScreamTailLevelUpLearnset[] = {
#if P_FAMILY_BRUTE_BONNET
static const struct LevelUpMove sBruteBonnetLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_ABSORB),
LEVEL_UP_MOVE( 1, MOVE_GROWTH),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
@@ -19337,6 +19350,7 @@ static const struct LevelUpMove sBruteBonnetLevelUpLearnset[] = {
#if P_FAMILY_FLUTTER_MANE
static const struct LevelUpMove sFlutterManeLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE( 1, MOVE_SPITE),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
@@ -19359,6 +19373,7 @@ static const struct LevelUpMove sFlutterManeLevelUpLearnset[] = {
#if P_FAMILY_SLITHER_WING
static const struct LevelUpMove sSlitherWingLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_GUST),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_BUG_BITE),
@@ -19382,6 +19397,7 @@ static const struct LevelUpMove sSlitherWingLevelUpLearnset[] = {
#if P_FAMILY_SANDY_SHOCKS
static const struct LevelUpMove sSandyShocksLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE),
LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC),
@@ -19427,6 +19443,7 @@ static const struct LevelUpMove sIronTreadsLevelUpLearnset[] = {
#if P_FAMILY_IRON_BUNDLE
static const struct LevelUpMove sIronBundleLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_PRESENT),
LEVEL_UP_MOVE( 7, MOVE_POWDER_SNOW),
LEVEL_UP_MOVE(14, MOVE_WHIRLPOOL),
@@ -19447,6 +19464,7 @@ static const struct LevelUpMove sIronBundleLevelUpLearnset[] = {
#if P_FAMILY_IRON_HANDS
static const struct LevelUpMove sIronHandsLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY),
@@ -19493,6 +19511,7 @@ static const struct LevelUpMove sIronJugulisLevelUpLearnset[] = {
#if P_FAMILY_IRON_MOTH
static const struct LevelUpMove sIronMothLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_GUST),
LEVEL_UP_MOVE( 1, MOVE_WHIRLWIND),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
@@ -19516,11 +19535,12 @@ static const struct LevelUpMove sIronMothLevelUpLearnset[] = {
#if P_FAMILY_IRON_THORNS
static const struct LevelUpMove sIronThornsLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW),
LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
- LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE),
+ LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
LEVEL_UP_MOVE( 7, MOVE_SCREECH),
LEVEL_UP_MOVE(21, MOVE_ROCK_TOMB),
LEVEL_UP_MOVE(28, MOVE_BITE),
@@ -19717,6 +19737,10 @@ static const struct LevelUpMove sChiYuLevelUpLearnset[] = {
#if P_FAMILY_ROARING_MOON
static const struct LevelUpMove sRoaringMoonLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
+ LEVEL_UP_MOVE( 1, MOVE_JAW_LOCK),
+ LEVEL_UP_MOVE( 1, MOVE_BREAKING_SWIPE),
+ LEVEL_UP_MOVE( 1, MOVE_SCALE_SHOT),
LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_BITE),
@@ -19740,6 +19764,7 @@ static const struct LevelUpMove sRoaringMoonLevelUpLearnset[] = {
#if P_FAMILY_IRON_VALIANT
static const struct LevelUpMove sIronValiantLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_DISABLE),
LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM),
LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK),
@@ -19755,8 +19780,8 @@ static const struct LevelUpMove sIronValiantLevelUpLearnset[] = {
LEVEL_UP_MOVE(63, MOVE_CLOSE_COMBAT),
LEVEL_UP_MOVE(70, MOVE_KNOCK_OFF),
LEVEL_UP_MOVE(77, MOVE_DESTINY_BOND),
- LEVEL_UP_MOVE(84, MOVE_QUICK_GUARD),
LEVEL_UP_MOVE(84, MOVE_WIDE_GUARD),
+ LEVEL_UP_MOVE(84, MOVE_QUICK_GUARD),
LEVEL_UP_MOVE(91, MOVE_SPIRIT_BREAK),
LEVEL_UP_END
};
@@ -19808,6 +19833,8 @@ static const struct LevelUpMove sMiraidonLevelUpLearnset[] = {
#if P_FAMILY_WALKING_WAKE
static const struct LevelUpMove sWalkingWakeLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
+ LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_ROAR),
LEVEL_UP_MOVE( 1, MOVE_TWISTER),
@@ -19829,6 +19856,8 @@ static const struct LevelUpMove sWalkingWakeLevelUpLearnset[] = {
#if P_FAMILY_IRON_LEAVES
static const struct LevelUpMove sIronLeavesLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_QUASH),
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND),
@@ -19936,8 +19965,8 @@ static const struct LevelUpMove sFezandipitiLevelUpLearnset[] = {
LEVEL_UP_MOVE(32, MOVE_CROSS_POISON),
LEVEL_UP_MOVE(40, MOVE_TAIL_SLAP),
LEVEL_UP_MOVE(48, MOVE_BEAT_UP),
- LEVEL_UP_MOVE(56, MOVE_FLATTER),
LEVEL_UP_MOVE(56, MOVE_SWAGGER),
+ LEVEL_UP_MOVE(56, MOVE_FLATTER),
LEVEL_UP_MOVE(64, MOVE_ROOST),
LEVEL_UP_MOVE(72, MOVE_MOONBLAST),
LEVEL_UP_END
@@ -19946,6 +19975,10 @@ static const struct LevelUpMove sFezandipitiLevelUpLearnset[] = {
#if P_FAMILY_OGERPON
static const struct LevelUpMove sOgerponLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK),
+ LEVEL_UP_MOVE( 1, MOVE_COUNTER),
+ LEVEL_UP_MOVE( 1, MOVE_RETALIATE),
+ LEVEL_UP_MOVE( 1, MOVE_HORN_LEECH),
LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP),
LEVEL_UP_MOVE( 1, MOVE_LEECH_SEED),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
@@ -19967,6 +20000,9 @@ static const struct LevelUpMove sOgerponLevelUpLearnset[] = {
#if P_FAMILY_GOUGING_FIRE
static const struct LevelUpMove sGougingFireLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK),
+ LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER),
+ LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR),
LEVEL_UP_MOVE( 1, MOVE_STOMP),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_INCINERATE),
@@ -19990,6 +20026,7 @@ static const struct LevelUpMove sGougingFireLevelUpLearnset[] = {
#if P_FAMILY_RAGING_BOLT
static const struct LevelUpMove sRagingBoltLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE( 1, MOVE_TWISTER),
LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_SHOCK_WAVE),
@@ -20077,6 +20114,9 @@ static const struct LevelUpMove sTerapagosLevelUpLearnset[] = {
#if P_FAMILY_PECHARUNT
static const struct LevelUpMove sPecharuntLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
+ LEVEL_UP_MOVE( 1, MOVE_ROLLOUT),
+ LEVEL_UP_MOVE( 1, MOVE_MEAN_LOOK),
LEVEL_UP_MOVE( 1, MOVE_SMOG),
LEVEL_UP_MOVE( 1, MOVE_POISON_GAS),
LEVEL_UP_MOVE( 1, MOVE_MEMENTO),
diff --git a/src/data/pokemon/level_up_learnsets/gen_3.h b/src/data/pokemon/level_up_learnsets/gen_3.h
index 999c4c29d241..35af1dfbe674 100644
--- a/src/data/pokemon/level_up_learnsets/gen_3.h
+++ b/src/data/pokemon/level_up_learnsets/gen_3.h
@@ -5518,7 +5518,7 @@ static const struct LevelUpMove sSwampertLevelUpLearnset[] = {
LEVEL_UP_MOVE(46, MOVE_PROTECT),
LEVEL_UP_MOVE(52, MOVE_EARTHQUAKE),
LEVEL_UP_MOVE(61, MOVE_ENDEAVOR),
- LEVEL_UP_END
+ LEVEL_UP_END
};
#endif //P_FAMILY_MUDKIP
@@ -18057,6 +18057,8 @@ static const struct LevelUpMove sFloragatoLevelUpLearnset[] = {
static const struct LevelUpMove sMeowscaradaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_FLOWER_TRICK),
+ LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM),
+ LEVEL_UP_MOVE( 1, MOVE_TRICK),
LEVEL_UP_MOVE( 1, MOVE_LEAFAGE),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
@@ -18115,6 +18117,8 @@ static const struct LevelUpMove sCrocalorLevelUpLearnset[] = {
static const struct LevelUpMove sSkeledirgeLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_TORCH_SONG),
+ LEVEL_UP_MOVE( 1, MOVE_SING),
+ LEVEL_UP_MOVE( 1, MOVE_YAWN),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_LEER),
@@ -18174,6 +18178,7 @@ static const struct LevelUpMove sQuaxwellLevelUpLearnset[] = {
static const struct LevelUpMove sQuaquavalLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_AQUA_STEP),
+ LEVEL_UP_MOVE( 1, MOVE_COUNTER),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
@@ -18658,6 +18663,10 @@ static const struct LevelUpMove sArmarougeLevelUpLearnset[] = {
static const struct LevelUpMove sCeruledgeLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_SHADOW_CLAW),
+ LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK),
+ LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD),
+ LEVEL_UP_MOVE( 1, MOVE_SOLAR_BLADE),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
@@ -18994,6 +19003,8 @@ static const struct LevelUpMove sRellorLevelUpLearnset[] = {
static const struct LevelUpMove sRabscaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_REVIVAL_BLESSING),
+ LEVEL_UP_MOVE( 1, MOVE_SAFEGUARD),
+ LEVEL_UP_MOVE( 1, MOVE_PSYCH_UP),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
@@ -19520,6 +19531,7 @@ static const struct LevelUpMove sGreatTuskLevelUpLearnset[] = {
#if P_FAMILY_SCREAM_TAIL
static const struct LevelUpMove sScreamTailLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_SING),
LEVEL_UP_MOVE( 1, MOVE_DISABLE),
@@ -19542,6 +19554,7 @@ static const struct LevelUpMove sScreamTailLevelUpLearnset[] = {
#if P_FAMILY_BRUTE_BONNET
static const struct LevelUpMove sBruteBonnetLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_ABSORB),
LEVEL_UP_MOVE( 1, MOVE_GROWTH),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
@@ -19563,6 +19576,7 @@ static const struct LevelUpMove sBruteBonnetLevelUpLearnset[] = {
#if P_FAMILY_FLUTTER_MANE
static const struct LevelUpMove sFlutterManeLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE( 1, MOVE_SPITE),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
@@ -19585,6 +19599,7 @@ static const struct LevelUpMove sFlutterManeLevelUpLearnset[] = {
#if P_FAMILY_SLITHER_WING
static const struct LevelUpMove sSlitherWingLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_GUST),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_BUG_BITE),
@@ -19608,6 +19623,7 @@ static const struct LevelUpMove sSlitherWingLevelUpLearnset[] = {
#if P_FAMILY_SANDY_SHOCKS
static const struct LevelUpMove sSandyShocksLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE),
LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC),
@@ -19653,6 +19669,7 @@ static const struct LevelUpMove sIronTreadsLevelUpLearnset[] = {
#if P_FAMILY_IRON_BUNDLE
static const struct LevelUpMove sIronBundleLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_PRESENT),
LEVEL_UP_MOVE( 7, MOVE_POWDER_SNOW),
LEVEL_UP_MOVE(14, MOVE_WHIRLPOOL),
@@ -19673,6 +19690,7 @@ static const struct LevelUpMove sIronBundleLevelUpLearnset[] = {
#if P_FAMILY_IRON_HANDS
static const struct LevelUpMove sIronHandsLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY),
@@ -19719,6 +19737,7 @@ static const struct LevelUpMove sIronJugulisLevelUpLearnset[] = {
#if P_FAMILY_IRON_MOTH
static const struct LevelUpMove sIronMothLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_GUST),
LEVEL_UP_MOVE( 1, MOVE_WHIRLWIND),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
@@ -19742,11 +19761,12 @@ static const struct LevelUpMove sIronMothLevelUpLearnset[] = {
#if P_FAMILY_IRON_THORNS
static const struct LevelUpMove sIronThornsLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW),
LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
- LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE),
+ LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
LEVEL_UP_MOVE( 7, MOVE_SCREECH),
LEVEL_UP_MOVE(21, MOVE_ROCK_TOMB),
LEVEL_UP_MOVE(28, MOVE_BITE),
@@ -19943,6 +19963,10 @@ static const struct LevelUpMove sChiYuLevelUpLearnset[] = {
#if P_FAMILY_ROARING_MOON
static const struct LevelUpMove sRoaringMoonLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
+ LEVEL_UP_MOVE( 1, MOVE_JAW_LOCK),
+ LEVEL_UP_MOVE( 1, MOVE_BREAKING_SWIPE),
+ LEVEL_UP_MOVE( 1, MOVE_SCALE_SHOT),
LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_BITE),
@@ -19966,6 +19990,7 @@ static const struct LevelUpMove sRoaringMoonLevelUpLearnset[] = {
#if P_FAMILY_IRON_VALIANT
static const struct LevelUpMove sIronValiantLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_DISABLE),
LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM),
LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK),
@@ -19981,8 +20006,8 @@ static const struct LevelUpMove sIronValiantLevelUpLearnset[] = {
LEVEL_UP_MOVE(63, MOVE_CLOSE_COMBAT),
LEVEL_UP_MOVE(70, MOVE_KNOCK_OFF),
LEVEL_UP_MOVE(77, MOVE_DESTINY_BOND),
- LEVEL_UP_MOVE(84, MOVE_QUICK_GUARD),
LEVEL_UP_MOVE(84, MOVE_WIDE_GUARD),
+ LEVEL_UP_MOVE(84, MOVE_QUICK_GUARD),
LEVEL_UP_MOVE(91, MOVE_SPIRIT_BREAK),
LEVEL_UP_END
};
@@ -20034,6 +20059,8 @@ static const struct LevelUpMove sMiraidonLevelUpLearnset[] = {
#if P_FAMILY_WALKING_WAKE
static const struct LevelUpMove sWalkingWakeLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
+ LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_ROAR),
LEVEL_UP_MOVE( 1, MOVE_TWISTER),
@@ -20055,6 +20082,8 @@ static const struct LevelUpMove sWalkingWakeLevelUpLearnset[] = {
#if P_FAMILY_IRON_LEAVES
static const struct LevelUpMove sIronLeavesLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_QUASH),
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND),
@@ -20162,8 +20191,8 @@ static const struct LevelUpMove sFezandipitiLevelUpLearnset[] = {
LEVEL_UP_MOVE(32, MOVE_CROSS_POISON),
LEVEL_UP_MOVE(40, MOVE_TAIL_SLAP),
LEVEL_UP_MOVE(48, MOVE_BEAT_UP),
- LEVEL_UP_MOVE(56, MOVE_FLATTER),
LEVEL_UP_MOVE(56, MOVE_SWAGGER),
+ LEVEL_UP_MOVE(56, MOVE_FLATTER),
LEVEL_UP_MOVE(64, MOVE_ROOST),
LEVEL_UP_MOVE(72, MOVE_MOONBLAST),
LEVEL_UP_END
@@ -20172,6 +20201,10 @@ static const struct LevelUpMove sFezandipitiLevelUpLearnset[] = {
#if P_FAMILY_OGERPON
static const struct LevelUpMove sOgerponLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK),
+ LEVEL_UP_MOVE( 1, MOVE_COUNTER),
+ LEVEL_UP_MOVE( 1, MOVE_RETALIATE),
+ LEVEL_UP_MOVE( 1, MOVE_HORN_LEECH),
LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP),
LEVEL_UP_MOVE( 1, MOVE_LEECH_SEED),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
@@ -20193,6 +20226,9 @@ static const struct LevelUpMove sOgerponLevelUpLearnset[] = {
#if P_FAMILY_GOUGING_FIRE
static const struct LevelUpMove sGougingFireLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK),
+ LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER),
+ LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR),
LEVEL_UP_MOVE( 1, MOVE_STOMP),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_INCINERATE),
@@ -20216,6 +20252,7 @@ static const struct LevelUpMove sGougingFireLevelUpLearnset[] = {
#if P_FAMILY_RAGING_BOLT
static const struct LevelUpMove sRagingBoltLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE( 1, MOVE_TWISTER),
LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_SHOCK_WAVE),
@@ -20303,6 +20340,9 @@ static const struct LevelUpMove sTerapagosLevelUpLearnset[] = {
#if P_FAMILY_PECHARUNT
static const struct LevelUpMove sPecharuntLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
+ LEVEL_UP_MOVE( 1, MOVE_ROLLOUT),
+ LEVEL_UP_MOVE( 1, MOVE_MEAN_LOOK),
LEVEL_UP_MOVE( 1, MOVE_SMOG),
LEVEL_UP_MOVE( 1, MOVE_POISON_GAS),
LEVEL_UP_MOVE( 1, MOVE_MEMENTO),
diff --git a/src/data/pokemon/level_up_learnsets/gen_4.h b/src/data/pokemon/level_up_learnsets/gen_4.h
index 169281c56f15..f620abc3df48 100644
--- a/src/data/pokemon/level_up_learnsets/gen_4.h
+++ b/src/data/pokemon/level_up_learnsets/gen_4.h
@@ -19331,6 +19331,8 @@ static const struct LevelUpMove sFloragatoLevelUpLearnset[] = {
static const struct LevelUpMove sMeowscaradaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_FLOWER_TRICK),
+ LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM),
+ LEVEL_UP_MOVE( 1, MOVE_TRICK),
LEVEL_UP_MOVE( 1, MOVE_LEAFAGE),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
@@ -19389,6 +19391,8 @@ static const struct LevelUpMove sCrocalorLevelUpLearnset[] = {
static const struct LevelUpMove sSkeledirgeLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_TORCH_SONG),
+ LEVEL_UP_MOVE( 1, MOVE_SING),
+ LEVEL_UP_MOVE( 1, MOVE_YAWN),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_LEER),
@@ -19448,6 +19452,7 @@ static const struct LevelUpMove sQuaxwellLevelUpLearnset[] = {
static const struct LevelUpMove sQuaquavalLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_AQUA_STEP),
+ LEVEL_UP_MOVE( 1, MOVE_COUNTER),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
@@ -19932,6 +19937,10 @@ static const struct LevelUpMove sArmarougeLevelUpLearnset[] = {
static const struct LevelUpMove sCeruledgeLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_SHADOW_CLAW),
+ LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK),
+ LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD),
+ LEVEL_UP_MOVE( 1, MOVE_SOLAR_BLADE),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
@@ -20268,6 +20277,8 @@ static const struct LevelUpMove sRellorLevelUpLearnset[] = {
static const struct LevelUpMove sRabscaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_REVIVAL_BLESSING),
+ LEVEL_UP_MOVE( 1, MOVE_SAFEGUARD),
+ LEVEL_UP_MOVE( 1, MOVE_PSYCH_UP),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
@@ -20794,6 +20805,7 @@ static const struct LevelUpMove sGreatTuskLevelUpLearnset[] = {
#if P_FAMILY_SCREAM_TAIL
static const struct LevelUpMove sScreamTailLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_SING),
LEVEL_UP_MOVE( 1, MOVE_DISABLE),
@@ -20816,6 +20828,7 @@ static const struct LevelUpMove sScreamTailLevelUpLearnset[] = {
#if P_FAMILY_BRUTE_BONNET
static const struct LevelUpMove sBruteBonnetLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_ABSORB),
LEVEL_UP_MOVE( 1, MOVE_GROWTH),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
@@ -20837,6 +20850,7 @@ static const struct LevelUpMove sBruteBonnetLevelUpLearnset[] = {
#if P_FAMILY_FLUTTER_MANE
static const struct LevelUpMove sFlutterManeLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE( 1, MOVE_SPITE),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
@@ -20859,6 +20873,7 @@ static const struct LevelUpMove sFlutterManeLevelUpLearnset[] = {
#if P_FAMILY_SLITHER_WING
static const struct LevelUpMove sSlitherWingLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_GUST),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_BUG_BITE),
@@ -20882,6 +20897,7 @@ static const struct LevelUpMove sSlitherWingLevelUpLearnset[] = {
#if P_FAMILY_SANDY_SHOCKS
static const struct LevelUpMove sSandyShocksLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE),
LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC),
@@ -20927,6 +20943,7 @@ static const struct LevelUpMove sIronTreadsLevelUpLearnset[] = {
#if P_FAMILY_IRON_BUNDLE
static const struct LevelUpMove sIronBundleLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_PRESENT),
LEVEL_UP_MOVE( 7, MOVE_POWDER_SNOW),
LEVEL_UP_MOVE(14, MOVE_WHIRLPOOL),
@@ -20947,6 +20964,7 @@ static const struct LevelUpMove sIronBundleLevelUpLearnset[] = {
#if P_FAMILY_IRON_HANDS
static const struct LevelUpMove sIronHandsLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY),
@@ -20993,6 +21011,7 @@ static const struct LevelUpMove sIronJugulisLevelUpLearnset[] = {
#if P_FAMILY_IRON_MOTH
static const struct LevelUpMove sIronMothLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_GUST),
LEVEL_UP_MOVE( 1, MOVE_WHIRLWIND),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
@@ -21016,11 +21035,12 @@ static const struct LevelUpMove sIronMothLevelUpLearnset[] = {
#if P_FAMILY_IRON_THORNS
static const struct LevelUpMove sIronThornsLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW),
LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
- LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE),
+ LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
LEVEL_UP_MOVE( 7, MOVE_SCREECH),
LEVEL_UP_MOVE(21, MOVE_ROCK_TOMB),
LEVEL_UP_MOVE(28, MOVE_BITE),
@@ -21217,6 +21237,10 @@ static const struct LevelUpMove sChiYuLevelUpLearnset[] = {
#if P_FAMILY_ROARING_MOON
static const struct LevelUpMove sRoaringMoonLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
+ LEVEL_UP_MOVE( 1, MOVE_JAW_LOCK),
+ LEVEL_UP_MOVE( 1, MOVE_BREAKING_SWIPE),
+ LEVEL_UP_MOVE( 1, MOVE_SCALE_SHOT),
LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_BITE),
@@ -21240,6 +21264,7 @@ static const struct LevelUpMove sRoaringMoonLevelUpLearnset[] = {
#if P_FAMILY_IRON_VALIANT
static const struct LevelUpMove sIronValiantLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_DISABLE),
LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM),
LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK),
@@ -21255,8 +21280,8 @@ static const struct LevelUpMove sIronValiantLevelUpLearnset[] = {
LEVEL_UP_MOVE(63, MOVE_CLOSE_COMBAT),
LEVEL_UP_MOVE(70, MOVE_KNOCK_OFF),
LEVEL_UP_MOVE(77, MOVE_DESTINY_BOND),
- LEVEL_UP_MOVE(84, MOVE_QUICK_GUARD),
LEVEL_UP_MOVE(84, MOVE_WIDE_GUARD),
+ LEVEL_UP_MOVE(84, MOVE_QUICK_GUARD),
LEVEL_UP_MOVE(91, MOVE_SPIRIT_BREAK),
LEVEL_UP_END
};
@@ -21308,6 +21333,8 @@ static const struct LevelUpMove sMiraidonLevelUpLearnset[] = {
#if P_FAMILY_WALKING_WAKE
static const struct LevelUpMove sWalkingWakeLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
+ LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_ROAR),
LEVEL_UP_MOVE( 1, MOVE_TWISTER),
@@ -21329,6 +21356,8 @@ static const struct LevelUpMove sWalkingWakeLevelUpLearnset[] = {
#if P_FAMILY_IRON_LEAVES
static const struct LevelUpMove sIronLeavesLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_QUASH),
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND),
@@ -21436,8 +21465,8 @@ static const struct LevelUpMove sFezandipitiLevelUpLearnset[] = {
LEVEL_UP_MOVE(32, MOVE_CROSS_POISON),
LEVEL_UP_MOVE(40, MOVE_TAIL_SLAP),
LEVEL_UP_MOVE(48, MOVE_BEAT_UP),
- LEVEL_UP_MOVE(56, MOVE_FLATTER),
LEVEL_UP_MOVE(56, MOVE_SWAGGER),
+ LEVEL_UP_MOVE(56, MOVE_FLATTER),
LEVEL_UP_MOVE(64, MOVE_ROOST),
LEVEL_UP_MOVE(72, MOVE_MOONBLAST),
LEVEL_UP_END
@@ -21446,6 +21475,10 @@ static const struct LevelUpMove sFezandipitiLevelUpLearnset[] = {
#if P_FAMILY_OGERPON
static const struct LevelUpMove sOgerponLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK),
+ LEVEL_UP_MOVE( 1, MOVE_COUNTER),
+ LEVEL_UP_MOVE( 1, MOVE_RETALIATE),
+ LEVEL_UP_MOVE( 1, MOVE_HORN_LEECH),
LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP),
LEVEL_UP_MOVE( 1, MOVE_LEECH_SEED),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
@@ -21467,6 +21500,9 @@ static const struct LevelUpMove sOgerponLevelUpLearnset[] = {
#if P_FAMILY_GOUGING_FIRE
static const struct LevelUpMove sGougingFireLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK),
+ LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER),
+ LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR),
LEVEL_UP_MOVE( 1, MOVE_STOMP),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_INCINERATE),
@@ -21490,6 +21526,7 @@ static const struct LevelUpMove sGougingFireLevelUpLearnset[] = {
#if P_FAMILY_RAGING_BOLT
static const struct LevelUpMove sRagingBoltLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE( 1, MOVE_TWISTER),
LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_SHOCK_WAVE),
@@ -21577,6 +21614,9 @@ static const struct LevelUpMove sTerapagosLevelUpLearnset[] = {
#if P_FAMILY_PECHARUNT
static const struct LevelUpMove sPecharuntLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
+ LEVEL_UP_MOVE( 1, MOVE_ROLLOUT),
+ LEVEL_UP_MOVE( 1, MOVE_MEAN_LOOK),
LEVEL_UP_MOVE( 1, MOVE_SMOG),
LEVEL_UP_MOVE( 1, MOVE_POISON_GAS),
LEVEL_UP_MOVE( 1, MOVE_MEMENTO),
diff --git a/src/data/pokemon/level_up_learnsets/gen_5.h b/src/data/pokemon/level_up_learnsets/gen_5.h
index af612cf583ed..b02bbdf4304a 100644
--- a/src/data/pokemon/level_up_learnsets/gen_5.h
+++ b/src/data/pokemon/level_up_learnsets/gen_5.h
@@ -19854,6 +19854,8 @@ static const struct LevelUpMove sFloragatoLevelUpLearnset[] = {
static const struct LevelUpMove sMeowscaradaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_FLOWER_TRICK),
+ LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM),
+ LEVEL_UP_MOVE( 1, MOVE_TRICK),
LEVEL_UP_MOVE( 1, MOVE_LEAFAGE),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
@@ -19912,6 +19914,8 @@ static const struct LevelUpMove sCrocalorLevelUpLearnset[] = {
static const struct LevelUpMove sSkeledirgeLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_TORCH_SONG),
+ LEVEL_UP_MOVE( 1, MOVE_SING),
+ LEVEL_UP_MOVE( 1, MOVE_YAWN),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_LEER),
@@ -19971,6 +19975,7 @@ static const struct LevelUpMove sQuaxwellLevelUpLearnset[] = {
static const struct LevelUpMove sQuaquavalLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_AQUA_STEP),
+ LEVEL_UP_MOVE( 1, MOVE_COUNTER),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
@@ -20455,6 +20460,10 @@ static const struct LevelUpMove sArmarougeLevelUpLearnset[] = {
static const struct LevelUpMove sCeruledgeLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_SHADOW_CLAW),
+ LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK),
+ LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD),
+ LEVEL_UP_MOVE( 1, MOVE_SOLAR_BLADE),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
@@ -20791,6 +20800,8 @@ static const struct LevelUpMove sRellorLevelUpLearnset[] = {
static const struct LevelUpMove sRabscaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_REVIVAL_BLESSING),
+ LEVEL_UP_MOVE( 1, MOVE_SAFEGUARD),
+ LEVEL_UP_MOVE( 1, MOVE_PSYCH_UP),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
@@ -21317,6 +21328,7 @@ static const struct LevelUpMove sGreatTuskLevelUpLearnset[] = {
#if P_FAMILY_SCREAM_TAIL
static const struct LevelUpMove sScreamTailLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_SING),
LEVEL_UP_MOVE( 1, MOVE_DISABLE),
@@ -21339,6 +21351,7 @@ static const struct LevelUpMove sScreamTailLevelUpLearnset[] = {
#if P_FAMILY_BRUTE_BONNET
static const struct LevelUpMove sBruteBonnetLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_ABSORB),
LEVEL_UP_MOVE( 1, MOVE_GROWTH),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
@@ -21360,6 +21373,7 @@ static const struct LevelUpMove sBruteBonnetLevelUpLearnset[] = {
#if P_FAMILY_FLUTTER_MANE
static const struct LevelUpMove sFlutterManeLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE( 1, MOVE_SPITE),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
@@ -21382,6 +21396,7 @@ static const struct LevelUpMove sFlutterManeLevelUpLearnset[] = {
#if P_FAMILY_SLITHER_WING
static const struct LevelUpMove sSlitherWingLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_GUST),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_BUG_BITE),
@@ -21405,6 +21420,7 @@ static const struct LevelUpMove sSlitherWingLevelUpLearnset[] = {
#if P_FAMILY_SANDY_SHOCKS
static const struct LevelUpMove sSandyShocksLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE),
LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC),
@@ -21450,6 +21466,7 @@ static const struct LevelUpMove sIronTreadsLevelUpLearnset[] = {
#if P_FAMILY_IRON_BUNDLE
static const struct LevelUpMove sIronBundleLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_PRESENT),
LEVEL_UP_MOVE( 7, MOVE_POWDER_SNOW),
LEVEL_UP_MOVE(14, MOVE_WHIRLPOOL),
@@ -21470,6 +21487,7 @@ static const struct LevelUpMove sIronBundleLevelUpLearnset[] = {
#if P_FAMILY_IRON_HANDS
static const struct LevelUpMove sIronHandsLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY),
@@ -21516,6 +21534,7 @@ static const struct LevelUpMove sIronJugulisLevelUpLearnset[] = {
#if P_FAMILY_IRON_MOTH
static const struct LevelUpMove sIronMothLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_GUST),
LEVEL_UP_MOVE( 1, MOVE_WHIRLWIND),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
@@ -21539,11 +21558,12 @@ static const struct LevelUpMove sIronMothLevelUpLearnset[] = {
#if P_FAMILY_IRON_THORNS
static const struct LevelUpMove sIronThornsLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW),
LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
- LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE),
+ LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
LEVEL_UP_MOVE( 7, MOVE_SCREECH),
LEVEL_UP_MOVE(21, MOVE_ROCK_TOMB),
LEVEL_UP_MOVE(28, MOVE_BITE),
@@ -21740,6 +21760,10 @@ static const struct LevelUpMove sChiYuLevelUpLearnset[] = {
#if P_FAMILY_ROARING_MOON
static const struct LevelUpMove sRoaringMoonLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
+ LEVEL_UP_MOVE( 1, MOVE_JAW_LOCK),
+ LEVEL_UP_MOVE( 1, MOVE_BREAKING_SWIPE),
+ LEVEL_UP_MOVE( 1, MOVE_SCALE_SHOT),
LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_BITE),
@@ -21763,6 +21787,7 @@ static const struct LevelUpMove sRoaringMoonLevelUpLearnset[] = {
#if P_FAMILY_IRON_VALIANT
static const struct LevelUpMove sIronValiantLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_DISABLE),
LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM),
LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK),
@@ -21778,8 +21803,8 @@ static const struct LevelUpMove sIronValiantLevelUpLearnset[] = {
LEVEL_UP_MOVE(63, MOVE_CLOSE_COMBAT),
LEVEL_UP_MOVE(70, MOVE_KNOCK_OFF),
LEVEL_UP_MOVE(77, MOVE_DESTINY_BOND),
- LEVEL_UP_MOVE(84, MOVE_QUICK_GUARD),
LEVEL_UP_MOVE(84, MOVE_WIDE_GUARD),
+ LEVEL_UP_MOVE(84, MOVE_QUICK_GUARD),
LEVEL_UP_MOVE(91, MOVE_SPIRIT_BREAK),
LEVEL_UP_END
};
@@ -21831,6 +21856,8 @@ static const struct LevelUpMove sMiraidonLevelUpLearnset[] = {
#if P_FAMILY_WALKING_WAKE
static const struct LevelUpMove sWalkingWakeLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
+ LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_ROAR),
LEVEL_UP_MOVE( 1, MOVE_TWISTER),
@@ -21852,6 +21879,8 @@ static const struct LevelUpMove sWalkingWakeLevelUpLearnset[] = {
#if P_FAMILY_IRON_LEAVES
static const struct LevelUpMove sIronLeavesLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_QUASH),
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND),
@@ -21959,8 +21988,8 @@ static const struct LevelUpMove sFezandipitiLevelUpLearnset[] = {
LEVEL_UP_MOVE(32, MOVE_CROSS_POISON),
LEVEL_UP_MOVE(40, MOVE_TAIL_SLAP),
LEVEL_UP_MOVE(48, MOVE_BEAT_UP),
- LEVEL_UP_MOVE(56, MOVE_FLATTER),
LEVEL_UP_MOVE(56, MOVE_SWAGGER),
+ LEVEL_UP_MOVE(56, MOVE_FLATTER),
LEVEL_UP_MOVE(64, MOVE_ROOST),
LEVEL_UP_MOVE(72, MOVE_MOONBLAST),
LEVEL_UP_END
@@ -21969,6 +21998,10 @@ static const struct LevelUpMove sFezandipitiLevelUpLearnset[] = {
#if P_FAMILY_OGERPON
static const struct LevelUpMove sOgerponLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK),
+ LEVEL_UP_MOVE( 1, MOVE_COUNTER),
+ LEVEL_UP_MOVE( 1, MOVE_RETALIATE),
+ LEVEL_UP_MOVE( 1, MOVE_HORN_LEECH),
LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP),
LEVEL_UP_MOVE( 1, MOVE_LEECH_SEED),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
@@ -21990,6 +22023,9 @@ static const struct LevelUpMove sOgerponLevelUpLearnset[] = {
#if P_FAMILY_GOUGING_FIRE
static const struct LevelUpMove sGougingFireLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK),
+ LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER),
+ LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR),
LEVEL_UP_MOVE( 1, MOVE_STOMP),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_INCINERATE),
@@ -22013,6 +22049,7 @@ static const struct LevelUpMove sGougingFireLevelUpLearnset[] = {
#if P_FAMILY_RAGING_BOLT
static const struct LevelUpMove sRagingBoltLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE( 1, MOVE_TWISTER),
LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_SHOCK_WAVE),
@@ -22100,6 +22137,9 @@ static const struct LevelUpMove sTerapagosLevelUpLearnset[] = {
#if P_FAMILY_PECHARUNT
static const struct LevelUpMove sPecharuntLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
+ LEVEL_UP_MOVE( 1, MOVE_ROLLOUT),
+ LEVEL_UP_MOVE( 1, MOVE_MEAN_LOOK),
LEVEL_UP_MOVE( 1, MOVE_SMOG),
LEVEL_UP_MOVE( 1, MOVE_POISON_GAS),
LEVEL_UP_MOVE( 1, MOVE_MEMENTO),
diff --git a/src/data/pokemon/level_up_learnsets/gen_6.h b/src/data/pokemon/level_up_learnsets/gen_6.h
index 59b05f96055c..3286c5ce4ee3 100644
--- a/src/data/pokemon/level_up_learnsets/gen_6.h
+++ b/src/data/pokemon/level_up_learnsets/gen_6.h
@@ -1787,7 +1787,7 @@ static const struct LevelUpMove sTentacruelLevelUpLearnset[] = {
LEVEL_UP_MOVE(44, MOVE_HEX),
LEVEL_UP_MOVE(48, MOVE_SLUDGE_WAVE),
LEVEL_UP_MOVE(52, MOVE_HYDRO_PUMP),
- LEVEL_UP_MOVE(56, MOVE_WRING_OUT),
+ LEVEL_UP_MOVE(56, MOVE_WRING_OUT),
LEVEL_UP_END
};
#endif //P_FAMILY_TENTACOOL
@@ -20504,6 +20504,8 @@ static const struct LevelUpMove sFloragatoLevelUpLearnset[] = {
static const struct LevelUpMove sMeowscaradaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_FLOWER_TRICK),
+ LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM),
+ LEVEL_UP_MOVE( 1, MOVE_TRICK),
LEVEL_UP_MOVE( 1, MOVE_LEAFAGE),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
@@ -20562,6 +20564,8 @@ static const struct LevelUpMove sCrocalorLevelUpLearnset[] = {
static const struct LevelUpMove sSkeledirgeLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_TORCH_SONG),
+ LEVEL_UP_MOVE( 1, MOVE_SING),
+ LEVEL_UP_MOVE( 1, MOVE_YAWN),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_LEER),
@@ -20621,6 +20625,7 @@ static const struct LevelUpMove sQuaxwellLevelUpLearnset[] = {
static const struct LevelUpMove sQuaquavalLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_AQUA_STEP),
+ LEVEL_UP_MOVE( 1, MOVE_COUNTER),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
@@ -21105,6 +21110,10 @@ static const struct LevelUpMove sArmarougeLevelUpLearnset[] = {
static const struct LevelUpMove sCeruledgeLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_SHADOW_CLAW),
+ LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK),
+ LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD),
+ LEVEL_UP_MOVE( 1, MOVE_SOLAR_BLADE),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
@@ -21441,6 +21450,8 @@ static const struct LevelUpMove sRellorLevelUpLearnset[] = {
static const struct LevelUpMove sRabscaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_REVIVAL_BLESSING),
+ LEVEL_UP_MOVE( 1, MOVE_SAFEGUARD),
+ LEVEL_UP_MOVE( 1, MOVE_PSYCH_UP),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
@@ -21967,6 +21978,7 @@ static const struct LevelUpMove sGreatTuskLevelUpLearnset[] = {
#if P_FAMILY_SCREAM_TAIL
static const struct LevelUpMove sScreamTailLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_SING),
LEVEL_UP_MOVE( 1, MOVE_DISABLE),
@@ -21989,6 +22001,7 @@ static const struct LevelUpMove sScreamTailLevelUpLearnset[] = {
#if P_FAMILY_BRUTE_BONNET
static const struct LevelUpMove sBruteBonnetLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_ABSORB),
LEVEL_UP_MOVE( 1, MOVE_GROWTH),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
@@ -22010,6 +22023,7 @@ static const struct LevelUpMove sBruteBonnetLevelUpLearnset[] = {
#if P_FAMILY_FLUTTER_MANE
static const struct LevelUpMove sFlutterManeLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE( 1, MOVE_SPITE),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
@@ -22032,6 +22046,7 @@ static const struct LevelUpMove sFlutterManeLevelUpLearnset[] = {
#if P_FAMILY_SLITHER_WING
static const struct LevelUpMove sSlitherWingLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_GUST),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_BUG_BITE),
@@ -22055,6 +22070,7 @@ static const struct LevelUpMove sSlitherWingLevelUpLearnset[] = {
#if P_FAMILY_SANDY_SHOCKS
static const struct LevelUpMove sSandyShocksLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE),
LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC),
@@ -22100,6 +22116,7 @@ static const struct LevelUpMove sIronTreadsLevelUpLearnset[] = {
#if P_FAMILY_IRON_BUNDLE
static const struct LevelUpMove sIronBundleLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_PRESENT),
LEVEL_UP_MOVE( 7, MOVE_POWDER_SNOW),
LEVEL_UP_MOVE(14, MOVE_WHIRLPOOL),
@@ -22120,6 +22137,7 @@ static const struct LevelUpMove sIronBundleLevelUpLearnset[] = {
#if P_FAMILY_IRON_HANDS
static const struct LevelUpMove sIronHandsLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY),
@@ -22166,6 +22184,7 @@ static const struct LevelUpMove sIronJugulisLevelUpLearnset[] = {
#if P_FAMILY_IRON_MOTH
static const struct LevelUpMove sIronMothLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_GUST),
LEVEL_UP_MOVE( 1, MOVE_WHIRLWIND),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
@@ -22189,11 +22208,12 @@ static const struct LevelUpMove sIronMothLevelUpLearnset[] = {
#if P_FAMILY_IRON_THORNS
static const struct LevelUpMove sIronThornsLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW),
LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
- LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE),
+ LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
LEVEL_UP_MOVE( 7, MOVE_SCREECH),
LEVEL_UP_MOVE(21, MOVE_ROCK_TOMB),
LEVEL_UP_MOVE(28, MOVE_BITE),
@@ -22390,6 +22410,10 @@ static const struct LevelUpMove sChiYuLevelUpLearnset[] = {
#if P_FAMILY_ROARING_MOON
static const struct LevelUpMove sRoaringMoonLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
+ LEVEL_UP_MOVE( 1, MOVE_JAW_LOCK),
+ LEVEL_UP_MOVE( 1, MOVE_BREAKING_SWIPE),
+ LEVEL_UP_MOVE( 1, MOVE_SCALE_SHOT),
LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_BITE),
@@ -22413,6 +22437,7 @@ static const struct LevelUpMove sRoaringMoonLevelUpLearnset[] = {
#if P_FAMILY_IRON_VALIANT
static const struct LevelUpMove sIronValiantLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_DISABLE),
LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM),
LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK),
@@ -22428,8 +22453,8 @@ static const struct LevelUpMove sIronValiantLevelUpLearnset[] = {
LEVEL_UP_MOVE(63, MOVE_CLOSE_COMBAT),
LEVEL_UP_MOVE(70, MOVE_KNOCK_OFF),
LEVEL_UP_MOVE(77, MOVE_DESTINY_BOND),
- LEVEL_UP_MOVE(84, MOVE_QUICK_GUARD),
LEVEL_UP_MOVE(84, MOVE_WIDE_GUARD),
+ LEVEL_UP_MOVE(84, MOVE_QUICK_GUARD),
LEVEL_UP_MOVE(91, MOVE_SPIRIT_BREAK),
LEVEL_UP_END
};
@@ -22481,6 +22506,8 @@ static const struct LevelUpMove sMiraidonLevelUpLearnset[] = {
#if P_FAMILY_WALKING_WAKE
static const struct LevelUpMove sWalkingWakeLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
+ LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_ROAR),
LEVEL_UP_MOVE( 1, MOVE_TWISTER),
@@ -22502,6 +22529,8 @@ static const struct LevelUpMove sWalkingWakeLevelUpLearnset[] = {
#if P_FAMILY_IRON_LEAVES
static const struct LevelUpMove sIronLeavesLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_QUASH),
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND),
@@ -22609,8 +22638,8 @@ static const struct LevelUpMove sFezandipitiLevelUpLearnset[] = {
LEVEL_UP_MOVE(32, MOVE_CROSS_POISON),
LEVEL_UP_MOVE(40, MOVE_TAIL_SLAP),
LEVEL_UP_MOVE(48, MOVE_BEAT_UP),
- LEVEL_UP_MOVE(56, MOVE_FLATTER),
LEVEL_UP_MOVE(56, MOVE_SWAGGER),
+ LEVEL_UP_MOVE(56, MOVE_FLATTER),
LEVEL_UP_MOVE(64, MOVE_ROOST),
LEVEL_UP_MOVE(72, MOVE_MOONBLAST),
LEVEL_UP_END
@@ -22619,6 +22648,10 @@ static const struct LevelUpMove sFezandipitiLevelUpLearnset[] = {
#if P_FAMILY_OGERPON
static const struct LevelUpMove sOgerponLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK),
+ LEVEL_UP_MOVE( 1, MOVE_COUNTER),
+ LEVEL_UP_MOVE( 1, MOVE_RETALIATE),
+ LEVEL_UP_MOVE( 1, MOVE_HORN_LEECH),
LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP),
LEVEL_UP_MOVE( 1, MOVE_LEECH_SEED),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
@@ -22640,6 +22673,9 @@ static const struct LevelUpMove sOgerponLevelUpLearnset[] = {
#if P_FAMILY_GOUGING_FIRE
static const struct LevelUpMove sGougingFireLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK),
+ LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER),
+ LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR),
LEVEL_UP_MOVE( 1, MOVE_STOMP),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_INCINERATE),
@@ -22663,6 +22699,7 @@ static const struct LevelUpMove sGougingFireLevelUpLearnset[] = {
#if P_FAMILY_RAGING_BOLT
static const struct LevelUpMove sRagingBoltLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE( 1, MOVE_TWISTER),
LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_SHOCK_WAVE),
@@ -22750,6 +22787,9 @@ static const struct LevelUpMove sTerapagosLevelUpLearnset[] = {
#if P_FAMILY_PECHARUNT
static const struct LevelUpMove sPecharuntLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
+ LEVEL_UP_MOVE( 1, MOVE_ROLLOUT),
+ LEVEL_UP_MOVE( 1, MOVE_MEAN_LOOK),
LEVEL_UP_MOVE( 1, MOVE_SMOG),
LEVEL_UP_MOVE( 1, MOVE_POISON_GAS),
LEVEL_UP_MOVE( 1, MOVE_MEMENTO),
diff --git a/src/data/pokemon/level_up_learnsets/gen_7.h b/src/data/pokemon/level_up_learnsets/gen_7.h
index cf1cf304386f..cd1a14eef32a 100644
--- a/src/data/pokemon/level_up_learnsets/gen_7.h
+++ b/src/data/pokemon/level_up_learnsets/gen_7.h
@@ -21148,6 +21148,8 @@ static const struct LevelUpMove sFloragatoLevelUpLearnset[] = {
static const struct LevelUpMove sMeowscaradaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_FLOWER_TRICK),
+ LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM),
+ LEVEL_UP_MOVE( 1, MOVE_TRICK),
LEVEL_UP_MOVE( 1, MOVE_LEAFAGE),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
@@ -21206,6 +21208,8 @@ static const struct LevelUpMove sCrocalorLevelUpLearnset[] = {
static const struct LevelUpMove sSkeledirgeLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_TORCH_SONG),
+ LEVEL_UP_MOVE( 1, MOVE_SING),
+ LEVEL_UP_MOVE( 1, MOVE_YAWN),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_LEER),
@@ -21265,6 +21269,7 @@ static const struct LevelUpMove sQuaxwellLevelUpLearnset[] = {
static const struct LevelUpMove sQuaquavalLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_AQUA_STEP),
+ LEVEL_UP_MOVE( 1, MOVE_COUNTER),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
@@ -21749,6 +21754,10 @@ static const struct LevelUpMove sArmarougeLevelUpLearnset[] = {
static const struct LevelUpMove sCeruledgeLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_SHADOW_CLAW),
+ LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK),
+ LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD),
+ LEVEL_UP_MOVE( 1, MOVE_SOLAR_BLADE),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
@@ -22085,6 +22094,8 @@ static const struct LevelUpMove sRellorLevelUpLearnset[] = {
static const struct LevelUpMove sRabscaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_REVIVAL_BLESSING),
+ LEVEL_UP_MOVE( 1, MOVE_SAFEGUARD),
+ LEVEL_UP_MOVE( 1, MOVE_PSYCH_UP),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
@@ -22611,6 +22622,7 @@ static const struct LevelUpMove sGreatTuskLevelUpLearnset[] = {
#if P_FAMILY_SCREAM_TAIL
static const struct LevelUpMove sScreamTailLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_SING),
LEVEL_UP_MOVE( 1, MOVE_DISABLE),
@@ -22633,6 +22645,7 @@ static const struct LevelUpMove sScreamTailLevelUpLearnset[] = {
#if P_FAMILY_BRUTE_BONNET
static const struct LevelUpMove sBruteBonnetLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_ABSORB),
LEVEL_UP_MOVE( 1, MOVE_GROWTH),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
@@ -22654,6 +22667,7 @@ static const struct LevelUpMove sBruteBonnetLevelUpLearnset[] = {
#if P_FAMILY_FLUTTER_MANE
static const struct LevelUpMove sFlutterManeLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE( 1, MOVE_SPITE),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
@@ -22676,6 +22690,7 @@ static const struct LevelUpMove sFlutterManeLevelUpLearnset[] = {
#if P_FAMILY_SLITHER_WING
static const struct LevelUpMove sSlitherWingLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_GUST),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_BUG_BITE),
@@ -22699,6 +22714,7 @@ static const struct LevelUpMove sSlitherWingLevelUpLearnset[] = {
#if P_FAMILY_SANDY_SHOCKS
static const struct LevelUpMove sSandyShocksLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE),
LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC),
@@ -22744,6 +22760,7 @@ static const struct LevelUpMove sIronTreadsLevelUpLearnset[] = {
#if P_FAMILY_IRON_BUNDLE
static const struct LevelUpMove sIronBundleLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_PRESENT),
LEVEL_UP_MOVE( 7, MOVE_POWDER_SNOW),
LEVEL_UP_MOVE(14, MOVE_WHIRLPOOL),
@@ -22764,6 +22781,7 @@ static const struct LevelUpMove sIronBundleLevelUpLearnset[] = {
#if P_FAMILY_IRON_HANDS
static const struct LevelUpMove sIronHandsLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY),
@@ -22810,6 +22828,7 @@ static const struct LevelUpMove sIronJugulisLevelUpLearnset[] = {
#if P_FAMILY_IRON_MOTH
static const struct LevelUpMove sIronMothLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_GUST),
LEVEL_UP_MOVE( 1, MOVE_WHIRLWIND),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
@@ -22833,11 +22852,12 @@ static const struct LevelUpMove sIronMothLevelUpLearnset[] = {
#if P_FAMILY_IRON_THORNS
static const struct LevelUpMove sIronThornsLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW),
LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
- LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE),
+ LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
LEVEL_UP_MOVE( 7, MOVE_SCREECH),
LEVEL_UP_MOVE(21, MOVE_ROCK_TOMB),
LEVEL_UP_MOVE(28, MOVE_BITE),
@@ -23034,6 +23054,10 @@ static const struct LevelUpMove sChiYuLevelUpLearnset[] = {
#if P_FAMILY_ROARING_MOON
static const struct LevelUpMove sRoaringMoonLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
+ LEVEL_UP_MOVE( 1, MOVE_JAW_LOCK),
+ LEVEL_UP_MOVE( 1, MOVE_BREAKING_SWIPE),
+ LEVEL_UP_MOVE( 1, MOVE_SCALE_SHOT),
LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_BITE),
@@ -23057,6 +23081,7 @@ static const struct LevelUpMove sRoaringMoonLevelUpLearnset[] = {
#if P_FAMILY_IRON_VALIANT
static const struct LevelUpMove sIronValiantLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_DISABLE),
LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM),
LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK),
@@ -23072,8 +23097,8 @@ static const struct LevelUpMove sIronValiantLevelUpLearnset[] = {
LEVEL_UP_MOVE(63, MOVE_CLOSE_COMBAT),
LEVEL_UP_MOVE(70, MOVE_KNOCK_OFF),
LEVEL_UP_MOVE(77, MOVE_DESTINY_BOND),
- LEVEL_UP_MOVE(84, MOVE_QUICK_GUARD),
LEVEL_UP_MOVE(84, MOVE_WIDE_GUARD),
+ LEVEL_UP_MOVE(84, MOVE_QUICK_GUARD),
LEVEL_UP_MOVE(91, MOVE_SPIRIT_BREAK),
LEVEL_UP_END
};
@@ -23125,6 +23150,8 @@ static const struct LevelUpMove sMiraidonLevelUpLearnset[] = {
#if P_FAMILY_WALKING_WAKE
static const struct LevelUpMove sWalkingWakeLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
+ LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_ROAR),
LEVEL_UP_MOVE( 1, MOVE_TWISTER),
@@ -23146,6 +23173,8 @@ static const struct LevelUpMove sWalkingWakeLevelUpLearnset[] = {
#if P_FAMILY_IRON_LEAVES
static const struct LevelUpMove sIronLeavesLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_QUASH),
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND),
@@ -23253,8 +23282,8 @@ static const struct LevelUpMove sFezandipitiLevelUpLearnset[] = {
LEVEL_UP_MOVE(32, MOVE_CROSS_POISON),
LEVEL_UP_MOVE(40, MOVE_TAIL_SLAP),
LEVEL_UP_MOVE(48, MOVE_BEAT_UP),
- LEVEL_UP_MOVE(56, MOVE_FLATTER),
LEVEL_UP_MOVE(56, MOVE_SWAGGER),
+ LEVEL_UP_MOVE(56, MOVE_FLATTER),
LEVEL_UP_MOVE(64, MOVE_ROOST),
LEVEL_UP_MOVE(72, MOVE_MOONBLAST),
LEVEL_UP_END
@@ -23263,6 +23292,10 @@ static const struct LevelUpMove sFezandipitiLevelUpLearnset[] = {
#if P_FAMILY_OGERPON
static const struct LevelUpMove sOgerponLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK),
+ LEVEL_UP_MOVE( 1, MOVE_COUNTER),
+ LEVEL_UP_MOVE( 1, MOVE_RETALIATE),
+ LEVEL_UP_MOVE( 1, MOVE_HORN_LEECH),
LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP),
LEVEL_UP_MOVE( 1, MOVE_LEECH_SEED),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
@@ -23284,6 +23317,9 @@ static const struct LevelUpMove sOgerponLevelUpLearnset[] = {
#if P_FAMILY_GOUGING_FIRE
static const struct LevelUpMove sGougingFireLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK),
+ LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER),
+ LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR),
LEVEL_UP_MOVE( 1, MOVE_STOMP),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_INCINERATE),
@@ -23307,6 +23343,7 @@ static const struct LevelUpMove sGougingFireLevelUpLearnset[] = {
#if P_FAMILY_RAGING_BOLT
static const struct LevelUpMove sRagingBoltLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE( 1, MOVE_TWISTER),
LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_SHOCK_WAVE),
@@ -23394,6 +23431,9 @@ static const struct LevelUpMove sTerapagosLevelUpLearnset[] = {
#if P_FAMILY_PECHARUNT
static const struct LevelUpMove sPecharuntLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
+ LEVEL_UP_MOVE( 1, MOVE_ROLLOUT),
+ LEVEL_UP_MOVE( 1, MOVE_MEAN_LOOK),
LEVEL_UP_MOVE( 1, MOVE_SMOG),
LEVEL_UP_MOVE( 1, MOVE_POISON_GAS),
LEVEL_UP_MOVE( 1, MOVE_MEMENTO),
diff --git a/src/data/pokemon/level_up_learnsets/gen_8.h b/src/data/pokemon/level_up_learnsets/gen_8.h
index e774dd088a83..4357fdf64357 100644
--- a/src/data/pokemon/level_up_learnsets/gen_8.h
+++ b/src/data/pokemon/level_up_learnsets/gen_8.h
@@ -9937,7 +9937,7 @@ static const struct LevelUpMove sRegiceLevelUpLearnset[] = {
LEVEL_UP_MOVE(66, MOVE_ZAP_CANNON),
LEVEL_UP_MOVE(72, MOVE_HYPER_BEAM),
LEVEL_UP_MOVE(78, MOVE_EXPLOSION),
- LEVEL_UP_END
+ LEVEL_UP_END
};
#endif //P_FAMILY_REGICE
@@ -9960,7 +9960,7 @@ static const struct LevelUpMove sRegisteelLevelUpLearnset[] = {
LEVEL_UP_MOVE(66, MOVE_ZAP_CANNON),
LEVEL_UP_MOVE(72, MOVE_HYPER_BEAM),
LEVEL_UP_MOVE(78, MOVE_EXPLOSION),
- LEVEL_UP_END
+ LEVEL_UP_END
};
#endif //P_FAMILY_REGISTEEL
@@ -20438,6 +20438,8 @@ static const struct LevelUpMove sFloragatoLevelUpLearnset[] = {
static const struct LevelUpMove sMeowscaradaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_FLOWER_TRICK),
+ LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM),
+ LEVEL_UP_MOVE( 1, MOVE_TRICK),
LEVEL_UP_MOVE( 1, MOVE_LEAFAGE),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
@@ -20496,6 +20498,8 @@ static const struct LevelUpMove sCrocalorLevelUpLearnset[] = {
static const struct LevelUpMove sSkeledirgeLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_TORCH_SONG),
+ LEVEL_UP_MOVE( 1, MOVE_SING),
+ LEVEL_UP_MOVE( 1, MOVE_YAWN),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_LEER),
@@ -20555,6 +20559,7 @@ static const struct LevelUpMove sQuaxwellLevelUpLearnset[] = {
static const struct LevelUpMove sQuaquavalLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_AQUA_STEP),
+ LEVEL_UP_MOVE( 1, MOVE_COUNTER),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
@@ -21039,6 +21044,10 @@ static const struct LevelUpMove sArmarougeLevelUpLearnset[] = {
static const struct LevelUpMove sCeruledgeLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_SHADOW_CLAW),
+ LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK),
+ LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD),
+ LEVEL_UP_MOVE( 1, MOVE_SOLAR_BLADE),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
@@ -21375,6 +21384,8 @@ static const struct LevelUpMove sRellorLevelUpLearnset[] = {
static const struct LevelUpMove sRabscaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_REVIVAL_BLESSING),
+ LEVEL_UP_MOVE( 1, MOVE_SAFEGUARD),
+ LEVEL_UP_MOVE( 1, MOVE_PSYCH_UP),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
@@ -21901,6 +21912,7 @@ static const struct LevelUpMove sGreatTuskLevelUpLearnset[] = {
#if P_FAMILY_SCREAM_TAIL
static const struct LevelUpMove sScreamTailLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_SING),
LEVEL_UP_MOVE( 1, MOVE_DISABLE),
@@ -21923,6 +21935,7 @@ static const struct LevelUpMove sScreamTailLevelUpLearnset[] = {
#if P_FAMILY_BRUTE_BONNET
static const struct LevelUpMove sBruteBonnetLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_ABSORB),
LEVEL_UP_MOVE( 1, MOVE_GROWTH),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
@@ -21944,6 +21957,7 @@ static const struct LevelUpMove sBruteBonnetLevelUpLearnset[] = {
#if P_FAMILY_FLUTTER_MANE
static const struct LevelUpMove sFlutterManeLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE( 1, MOVE_SPITE),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
@@ -21966,6 +21980,7 @@ static const struct LevelUpMove sFlutterManeLevelUpLearnset[] = {
#if P_FAMILY_SLITHER_WING
static const struct LevelUpMove sSlitherWingLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_GUST),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_BUG_BITE),
@@ -21989,6 +22004,7 @@ static const struct LevelUpMove sSlitherWingLevelUpLearnset[] = {
#if P_FAMILY_SANDY_SHOCKS
static const struct LevelUpMove sSandyShocksLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE),
LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC),
@@ -22034,6 +22050,7 @@ static const struct LevelUpMove sIronTreadsLevelUpLearnset[] = {
#if P_FAMILY_IRON_BUNDLE
static const struct LevelUpMove sIronBundleLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_PRESENT),
LEVEL_UP_MOVE( 7, MOVE_POWDER_SNOW),
LEVEL_UP_MOVE(14, MOVE_WHIRLPOOL),
@@ -22054,6 +22071,7 @@ static const struct LevelUpMove sIronBundleLevelUpLearnset[] = {
#if P_FAMILY_IRON_HANDS
static const struct LevelUpMove sIronHandsLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY),
@@ -22100,6 +22118,7 @@ static const struct LevelUpMove sIronJugulisLevelUpLearnset[] = {
#if P_FAMILY_IRON_MOTH
static const struct LevelUpMove sIronMothLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_GUST),
LEVEL_UP_MOVE( 1, MOVE_WHIRLWIND),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
@@ -22123,11 +22142,12 @@ static const struct LevelUpMove sIronMothLevelUpLearnset[] = {
#if P_FAMILY_IRON_THORNS
static const struct LevelUpMove sIronThornsLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW),
LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
- LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE),
+ LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
LEVEL_UP_MOVE( 7, MOVE_SCREECH),
LEVEL_UP_MOVE(21, MOVE_ROCK_TOMB),
LEVEL_UP_MOVE(28, MOVE_BITE),
@@ -22324,6 +22344,10 @@ static const struct LevelUpMove sChiYuLevelUpLearnset[] = {
#if P_FAMILY_ROARING_MOON
static const struct LevelUpMove sRoaringMoonLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
+ LEVEL_UP_MOVE( 1, MOVE_JAW_LOCK),
+ LEVEL_UP_MOVE( 1, MOVE_BREAKING_SWIPE),
+ LEVEL_UP_MOVE( 1, MOVE_SCALE_SHOT),
LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_BITE),
@@ -22347,6 +22371,7 @@ static const struct LevelUpMove sRoaringMoonLevelUpLearnset[] = {
#if P_FAMILY_IRON_VALIANT
static const struct LevelUpMove sIronValiantLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_DISABLE),
LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM),
LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK),
@@ -22362,8 +22387,8 @@ static const struct LevelUpMove sIronValiantLevelUpLearnset[] = {
LEVEL_UP_MOVE(63, MOVE_CLOSE_COMBAT),
LEVEL_UP_MOVE(70, MOVE_KNOCK_OFF),
LEVEL_UP_MOVE(77, MOVE_DESTINY_BOND),
- LEVEL_UP_MOVE(84, MOVE_QUICK_GUARD),
LEVEL_UP_MOVE(84, MOVE_WIDE_GUARD),
+ LEVEL_UP_MOVE(84, MOVE_QUICK_GUARD),
LEVEL_UP_MOVE(91, MOVE_SPIRIT_BREAK),
LEVEL_UP_END
};
@@ -22415,6 +22440,8 @@ static const struct LevelUpMove sMiraidonLevelUpLearnset[] = {
#if P_FAMILY_WALKING_WAKE
static const struct LevelUpMove sWalkingWakeLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
+ LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_ROAR),
LEVEL_UP_MOVE( 1, MOVE_TWISTER),
@@ -22436,6 +22463,8 @@ static const struct LevelUpMove sWalkingWakeLevelUpLearnset[] = {
#if P_FAMILY_IRON_LEAVES
static const struct LevelUpMove sIronLeavesLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_QUASH),
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND),
@@ -22543,8 +22572,8 @@ static const struct LevelUpMove sFezandipitiLevelUpLearnset[] = {
LEVEL_UP_MOVE(32, MOVE_CROSS_POISON),
LEVEL_UP_MOVE(40, MOVE_TAIL_SLAP),
LEVEL_UP_MOVE(48, MOVE_BEAT_UP),
- LEVEL_UP_MOVE(56, MOVE_FLATTER),
LEVEL_UP_MOVE(56, MOVE_SWAGGER),
+ LEVEL_UP_MOVE(56, MOVE_FLATTER),
LEVEL_UP_MOVE(64, MOVE_ROOST),
LEVEL_UP_MOVE(72, MOVE_MOONBLAST),
LEVEL_UP_END
@@ -22553,6 +22582,10 @@ static const struct LevelUpMove sFezandipitiLevelUpLearnset[] = {
#if P_FAMILY_OGERPON
static const struct LevelUpMove sOgerponLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK),
+ LEVEL_UP_MOVE( 1, MOVE_COUNTER),
+ LEVEL_UP_MOVE( 1, MOVE_RETALIATE),
+ LEVEL_UP_MOVE( 1, MOVE_HORN_LEECH),
LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP),
LEVEL_UP_MOVE( 1, MOVE_LEECH_SEED),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
@@ -22574,6 +22607,9 @@ static const struct LevelUpMove sOgerponLevelUpLearnset[] = {
#if P_FAMILY_GOUGING_FIRE
static const struct LevelUpMove sGougingFireLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK),
+ LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER),
+ LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR),
LEVEL_UP_MOVE( 1, MOVE_STOMP),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_INCINERATE),
@@ -22597,6 +22633,7 @@ static const struct LevelUpMove sGougingFireLevelUpLearnset[] = {
#if P_FAMILY_RAGING_BOLT
static const struct LevelUpMove sRagingBoltLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE( 1, MOVE_TWISTER),
LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_SHOCK_WAVE),
@@ -22684,6 +22721,9 @@ static const struct LevelUpMove sTerapagosLevelUpLearnset[] = {
#if P_FAMILY_PECHARUNT
static const struct LevelUpMove sPecharuntLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
+ LEVEL_UP_MOVE( 1, MOVE_ROLLOUT),
+ LEVEL_UP_MOVE( 1, MOVE_MEAN_LOOK),
LEVEL_UP_MOVE( 1, MOVE_SMOG),
LEVEL_UP_MOVE( 1, MOVE_POISON_GAS),
LEVEL_UP_MOVE( 1, MOVE_MEMENTO),
diff --git a/src/data/pokemon/level_up_learnsets/gen_9.h b/src/data/pokemon/level_up_learnsets/gen_9.h
index 0db97107a22a..de35a1d36de0 100644
--- a/src/data/pokemon/level_up_learnsets/gen_9.h
+++ b/src/data/pokemon/level_up_learnsets/gen_9.h
@@ -21,15 +21,15 @@ static const struct LevelUpMove sBulbasaurLevelUpLearnset[] = {
LEVEL_UP_MOVE(24, MOVE_SWEET_SCENT),
LEVEL_UP_MOVE(27, MOVE_SYNTHESIS),
LEVEL_UP_MOVE(30, MOVE_WORRY_SEED),
- LEVEL_UP_MOVE(33, MOVE_DOUBLE_EDGE),
+ LEVEL_UP_MOVE(33, MOVE_POWER_WHIP),
LEVEL_UP_MOVE(36, MOVE_SOLAR_BEAM),
LEVEL_UP_END
};
static const struct LevelUpMove sIvysaurLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
- LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP),
LEVEL_UP_MOVE( 1, MOVE_GROWTH),
LEVEL_UP_MOVE( 9, MOVE_LEECH_SEED),
LEVEL_UP_MOVE(12, MOVE_RAZOR_LEAF),
@@ -40,29 +40,28 @@ static const struct LevelUpMove sIvysaurLevelUpLearnset[] = {
LEVEL_UP_MOVE(30, MOVE_SWEET_SCENT),
LEVEL_UP_MOVE(35, MOVE_SYNTHESIS),
LEVEL_UP_MOVE(40, MOVE_WORRY_SEED),
- LEVEL_UP_MOVE(45, MOVE_DOUBLE_EDGE),
+ LEVEL_UP_MOVE(45, MOVE_POWER_WHIP),
LEVEL_UP_MOVE(50, MOVE_SOLAR_BEAM),
LEVEL_UP_END
};
static const struct LevelUpMove sVenusaurLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_PETAL_BLIZZARD),
- LEVEL_UP_MOVE( 1, MOVE_PETAL_BLIZZARD),
+ LEVEL_UP_MOVE( 1, MOVE_GROWTH),
LEVEL_UP_MOVE( 1, MOVE_PETAL_DANCE),
+ LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
- LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP),
- LEVEL_UP_MOVE( 1, MOVE_GROWTH),
LEVEL_UP_MOVE( 9, MOVE_LEECH_SEED),
LEVEL_UP_MOVE(12, MOVE_RAZOR_LEAF),
- LEVEL_UP_MOVE(15, MOVE_POISON_POWDER),
LEVEL_UP_MOVE(15, MOVE_SLEEP_POWDER),
+ LEVEL_UP_MOVE(15, MOVE_POISON_POWDER),
LEVEL_UP_MOVE(20, MOVE_SEED_BOMB),
LEVEL_UP_MOVE(25, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(30, MOVE_SWEET_SCENT),
LEVEL_UP_MOVE(37, MOVE_SYNTHESIS),
LEVEL_UP_MOVE(44, MOVE_WORRY_SEED),
- LEVEL_UP_MOVE(51, MOVE_DOUBLE_EDGE),
+ LEVEL_UP_MOVE(51, MOVE_POWER_WHIP),
LEVEL_UP_MOVE(58, MOVE_SOLAR_BEAM),
LEVEL_UP_END
};
@@ -135,7 +134,7 @@ static const struct LevelUpMove sSquirtleLevelUpLearnset[] = {
LEVEL_UP_MOVE(27, MOVE_SHELL_SMASH),
LEVEL_UP_MOVE(30, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE(33, MOVE_HYDRO_PUMP),
- LEVEL_UP_MOVE(36, MOVE_SKULL_BASH),
+ LEVEL_UP_MOVE(36, MOVE_WAVE_CRASH),
LEVEL_UP_END
};
@@ -153,13 +152,12 @@ static const struct LevelUpMove sWartortleLevelUpLearnset[] = {
LEVEL_UP_MOVE(35, MOVE_SHELL_SMASH),
LEVEL_UP_MOVE(40, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE(45, MOVE_HYDRO_PUMP),
- LEVEL_UP_MOVE(50, MOVE_SKULL_BASH),
+ LEVEL_UP_MOVE(50, MOVE_WAVE_CRASH),
LEVEL_UP_END
};
static const struct LevelUpMove sBlastoiseLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_FLASH_CANNON),
- LEVEL_UP_MOVE( 1, MOVE_FLASH_CANNON),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
@@ -173,7 +171,7 @@ static const struct LevelUpMove sBlastoiseLevelUpLearnset[] = {
LEVEL_UP_MOVE(35, MOVE_SHELL_SMASH),
LEVEL_UP_MOVE(42, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE(49, MOVE_HYDRO_PUMP),
- LEVEL_UP_MOVE(56, MOVE_SKULL_BASH),
+ LEVEL_UP_MOVE(56, MOVE_WAVE_CRASH),
LEVEL_UP_END
};
#endif //P_FAMILY_SQUIRTLE
@@ -444,8 +442,8 @@ static const struct LevelUpMove sEkansLevelUpLearnset[] = {
LEVEL_UP_MOVE(12, MOVE_GLARE),
LEVEL_UP_MOVE(17, MOVE_SCREECH),
LEVEL_UP_MOVE(20, MOVE_ACID),
- LEVEL_UP_MOVE(25, MOVE_STOCKPILE),
LEVEL_UP_MOVE(25, MOVE_SWALLOW),
+ LEVEL_UP_MOVE(25, MOVE_STOCKPILE),
LEVEL_UP_MOVE(25, MOVE_SPIT_UP),
LEVEL_UP_MOVE(28, MOVE_ACID_SPRAY),
LEVEL_UP_MOVE(33, MOVE_SLUDGE_BOMB),
@@ -459,21 +457,18 @@ static const struct LevelUpMove sEkansLevelUpLearnset[] = {
static const struct LevelUpMove sArbokLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_CRUNCH),
- LEVEL_UP_MOVE( 1, MOVE_CRUNCH),
- LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
- LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
- LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
LEVEL_UP_MOVE( 1, MOVE_WRAP),
- LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_POISON_STING),
+ LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_BITE),
- LEVEL_UP_MOVE( 4, MOVE_POISON_STING),
- LEVEL_UP_MOVE( 9, MOVE_BITE),
+ LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
LEVEL_UP_MOVE(12, MOVE_GLARE),
LEVEL_UP_MOVE(17, MOVE_SCREECH),
LEVEL_UP_MOVE(20, MOVE_ACID),
- LEVEL_UP_MOVE(27, MOVE_STOCKPILE),
LEVEL_UP_MOVE(27, MOVE_SWALLOW),
+ LEVEL_UP_MOVE(27, MOVE_STOCKPILE),
LEVEL_UP_MOVE(27, MOVE_SPIT_UP),
LEVEL_UP_MOVE(32, MOVE_ACID_SPRAY),
LEVEL_UP_MOVE(39, MOVE_SLUDGE_BOMB),
@@ -600,11 +595,11 @@ static const struct LevelUpMove sSandshrewLevelUpLearnset[] = {
};
static const struct LevelUpMove sSandslashLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_CRUSH_CLAW),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
- LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
- LEVEL_UP_MOVE( 1, MOVE_POISON_STING),
+ LEVEL_UP_MOVE( 1, MOVE_CRUSH_CLAW),
LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK),
+ LEVEL_UP_MOVE( 1, MOVE_POISON_STING),
+ LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE( 9, MOVE_ROLLOUT),
LEVEL_UP_MOVE(12, MOVE_FURY_CUTTER),
LEVEL_UP_MOVE(15, MOVE_RAPID_SPIN),
@@ -623,8 +618,8 @@ static const struct LevelUpMove sSandslashLevelUpLearnset[] = {
#if P_ALOLAN_FORMS
static const struct LevelUpMove sSandshrewAlolanLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
+ LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 3, MOVE_MIST),
LEVEL_UP_MOVE( 6, MOVE_POWDER_SNOW),
LEVEL_UP_MOVE( 9, MOVE_ROLLOUT),
@@ -638,33 +633,32 @@ static const struct LevelUpMove sSandshrewAlolanLevelUpLearnset[] = {
LEVEL_UP_MOVE(33, MOVE_IRON_HEAD),
LEVEL_UP_MOVE(36, MOVE_GYRO_BALL),
LEVEL_UP_MOVE(39, MOVE_SWORDS_DANCE),
- LEVEL_UP_MOVE(42, MOVE_HAIL),
+ LEVEL_UP_MOVE(42, MOVE_SNOWSCAPE),
LEVEL_UP_MOVE(45, MOVE_BLIZZARD),
LEVEL_UP_END
};
static const struct LevelUpMove sSandslashAlolanLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_ICICLE_SPEAR),
- LEVEL_UP_MOVE( 1, MOVE_ICICLE_SPEAR),
- LEVEL_UP_MOVE( 1, MOVE_ICICLE_CRASH),
- LEVEL_UP_MOVE( 1, MOVE_METAL_BURST),
+ LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
+ LEVEL_UP_MOVE( 1, MOVE_MIST),
+ LEVEL_UP_MOVE( 1, MOVE_BLIZZARD),
+ LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
+ LEVEL_UP_MOVE( 1, MOVE_SWIFT),
+ LEVEL_UP_MOVE( 1, MOVE_FURY_SWIPES),
+ LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW),
LEVEL_UP_MOVE( 1, MOVE_ROLLOUT),
LEVEL_UP_MOVE( 1, MOVE_FURY_CUTTER),
LEVEL_UP_MOVE( 1, MOVE_RAPID_SPIN),
- LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW),
- LEVEL_UP_MOVE( 1, MOVE_SWIFT),
- LEVEL_UP_MOVE( 1, MOVE_FURY_SWIPES),
LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE),
- LEVEL_UP_MOVE( 1, MOVE_SLASH),
- LEVEL_UP_MOVE( 1, MOVE_IRON_HEAD),
LEVEL_UP_MOVE( 1, MOVE_GYRO_BALL),
+ LEVEL_UP_MOVE( 1, MOVE_METAL_BURST),
+ LEVEL_UP_MOVE( 1, MOVE_IRON_HEAD),
+ LEVEL_UP_MOVE( 1, MOVE_SNOWSCAPE),
LEVEL_UP_MOVE( 1, MOVE_SWORDS_DANCE),
- LEVEL_UP_MOVE( 1, MOVE_HAIL),
- LEVEL_UP_MOVE( 1, MOVE_BLIZZARD),
- LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
- LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
- LEVEL_UP_MOVE( 1, MOVE_MIST),
- LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW),
+ LEVEL_UP_MOVE( 1, MOVE_SLASH),
+ LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW),
+ LEVEL_UP_MOVE( 1, MOVE_ICICLE_CRASH),
LEVEL_UP_END
};
#endif //P_ALOLAN_FORMS
@@ -707,6 +701,7 @@ static const struct LevelUpMove sNidorinaLevelUpLearnset[] = {
static const struct LevelUpMove sNidoqueenLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_SUPERPOWER),
+ LEVEL_UP_MOVE( 1, MOVE_SLUDGE_WAVE),
LEVEL_UP_MOVE( 1, MOVE_SUPERPOWER),
LEVEL_UP_MOVE( 1, MOVE_FURY_SWIPES),
LEVEL_UP_MOVE( 1, MOVE_TOXIC_SPIKES),
@@ -760,6 +755,7 @@ static const struct LevelUpMove sNidorinoLevelUpLearnset[] = {
static const struct LevelUpMove sNidokingLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_MEGAHORN),
+ LEVEL_UP_MOVE( 1, MOVE_SLUDGE_WAVE),
LEVEL_UP_MOVE( 1, MOVE_MEGAHORN),
LEVEL_UP_MOVE( 1, MOVE_FURY_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_TOXIC_SPIKES),
@@ -781,8 +777,8 @@ static const struct LevelUpMove sNidokingLevelUpLearnset[] = {
#if P_FAMILY_CLEFAIRY
#if P_GEN_2_CROSS_EVOS
static const struct LevelUpMove sCleffaLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_SPLASH),
LEVEL_UP_MOVE( 1, MOVE_POUND),
+ LEVEL_UP_MOVE( 1, MOVE_SPLASH),
LEVEL_UP_MOVE( 1, MOVE_COPYCAT),
LEVEL_UP_MOVE( 4, MOVE_SING),
LEVEL_UP_MOVE( 8, MOVE_SWEET_KISS),
@@ -794,18 +790,17 @@ static const struct LevelUpMove sCleffaLevelUpLearnset[] = {
#endif //P_GEN_2_CROSS_EVOS
static const struct LevelUpMove sClefairyLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_POUND),
+ LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_SING),
- LEVEL_UP_MOVE( 1, MOVE_SWEET_KISS),
+ LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE),
- LEVEL_UP_MOVE( 1, MOVE_ENCORE),
- LEVEL_UP_MOVE( 1, MOVE_CHARM),
LEVEL_UP_MOVE( 1, MOVE_SPLASH),
- LEVEL_UP_MOVE( 1, MOVE_POUND),
+ LEVEL_UP_MOVE( 1, MOVE_SWEET_KISS),
+ LEVEL_UP_MOVE( 1, MOVE_CHARM),
LEVEL_UP_MOVE( 1, MOVE_COPYCAT),
- LEVEL_UP_MOVE( 1, MOVE_GROWL),
- LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE( 4, MOVE_STORED_POWER),
- LEVEL_UP_MOVE( 8, MOVE_MINIMIZE),
+ LEVEL_UP_MOVE( 8, MOVE_ENCORE),
LEVEL_UP_MOVE(12, MOVE_AFTER_YOU),
LEVEL_UP_MOVE(16, MOVE_LIFE_DEW),
LEVEL_UP_MOVE(20, MOVE_METRONOME),
@@ -820,36 +815,35 @@ static const struct LevelUpMove sClefairyLevelUpLearnset[] = {
};
static const struct LevelUpMove sClefableLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_POUND),
+ LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_SING),
+ LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
+ LEVEL_UP_MOVE( 1, MOVE_SPLASH),
LEVEL_UP_MOVE( 1, MOVE_SWEET_KISS),
- LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE),
- LEVEL_UP_MOVE( 1, MOVE_ENCORE),
LEVEL_UP_MOVE( 1, MOVE_CHARM),
- LEVEL_UP_MOVE( 1, MOVE_STORED_POWER),
- LEVEL_UP_MOVE( 1, MOVE_MINIMIZE),
- LEVEL_UP_MOVE( 1, MOVE_AFTER_YOU),
- LEVEL_UP_MOVE( 1, MOVE_LIFE_DEW),
- LEVEL_UP_MOVE( 1, MOVE_METRONOME),
+ LEVEL_UP_MOVE( 1, MOVE_ENCORE),
LEVEL_UP_MOVE( 1, MOVE_MOONLIGHT),
- LEVEL_UP_MOVE( 1, MOVE_GRAVITY),
- LEVEL_UP_MOVE( 1, MOVE_METEOR_MASH),
LEVEL_UP_MOVE( 1, MOVE_FOLLOW_ME),
LEVEL_UP_MOVE( 1, MOVE_COSMIC_POWER),
- LEVEL_UP_MOVE( 1, MOVE_MOONBLAST),
+ LEVEL_UP_MOVE( 1, MOVE_GRAVITY),
LEVEL_UP_MOVE( 1, MOVE_HEALING_WISH),
- LEVEL_UP_MOVE( 1, MOVE_SPLASH),
- LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_COPYCAT),
- LEVEL_UP_MOVE( 1, MOVE_GROWL),
- LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
+ LEVEL_UP_MOVE( 1, MOVE_AFTER_YOU),
+ LEVEL_UP_MOVE( 1, MOVE_STORED_POWER),
+ LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE),
+ LEVEL_UP_MOVE( 1, MOVE_METRONOME),
+ LEVEL_UP_MOVE( 1, MOVE_METEOR_MASH),
+ LEVEL_UP_MOVE( 1, MOVE_MOONBLAST),
+ LEVEL_UP_MOVE( 1, MOVE_LIFE_DEW),
LEVEL_UP_END
};
#endif //P_FAMILY_CLEFAIRY
#if P_FAMILY_VULPIX
static const struct LevelUpMove sVulpixLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
+ LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 4, MOVE_DISABLE),
LEVEL_UP_MOVE( 8, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE(12, MOVE_SPITE),
@@ -862,36 +856,34 @@ static const struct LevelUpMove sVulpixLevelUpLearnset[] = {
LEVEL_UP_MOVE(40, MOVE_FIRE_SPIN),
LEVEL_UP_MOVE(44, MOVE_SAFEGUARD),
LEVEL_UP_MOVE(48, MOVE_INFERNO),
- LEVEL_UP_MOVE(52, MOVE_GRUDGE),
- LEVEL_UP_MOVE(56, MOVE_FIRE_BLAST),
+ LEVEL_UP_MOVE(52, MOVE_FIRE_BLAST),
LEVEL_UP_END
};
static const struct LevelUpMove sNinetalesLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT),
- LEVEL_UP_MOVE( 1, MOVE_INCINERATE),
- LEVEL_UP_MOVE( 1, MOVE_SPITE),
+ LEVEL_UP_MOVE( 1, MOVE_DISABLE),
+ LEVEL_UP_MOVE( 1, MOVE_EMBER),
+ LEVEL_UP_MOVE( 1, MOVE_FIRE_SPIN),
LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY),
+ LEVEL_UP_MOVE( 1, MOVE_FIRE_BLAST),
+ LEVEL_UP_MOVE( 1, MOVE_SPITE),
+ LEVEL_UP_MOVE( 1, MOVE_SAFEGUARD),
LEVEL_UP_MOVE( 1, MOVE_WILL_O_WISP),
- LEVEL_UP_MOVE( 1, MOVE_EXTRASENSORY),
- LEVEL_UP_MOVE( 1, MOVE_FLAMETHROWER),
LEVEL_UP_MOVE( 1, MOVE_IMPRISON),
- LEVEL_UP_MOVE( 1, MOVE_FIRE_SPIN),
- LEVEL_UP_MOVE( 1, MOVE_SAFEGUARD),
+ LEVEL_UP_MOVE( 1, MOVE_EXTRASENSORY),
+ LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE( 1, MOVE_INCINERATE),
LEVEL_UP_MOVE( 1, MOVE_INFERNO),
- LEVEL_UP_MOVE( 1, MOVE_GRUDGE),
- LEVEL_UP_MOVE( 1, MOVE_FIRE_BLAST),
- LEVEL_UP_MOVE( 1, MOVE_EMBER),
- LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
- LEVEL_UP_MOVE( 1, MOVE_DISABLE),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
+ LEVEL_UP_MOVE( 1, MOVE_FLAMETHROWER),
+ LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
LEVEL_UP_END
};
#if P_ALOLAN_FORMS
static const struct LevelUpMove sVulpixAlolanLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
+ LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW),
LEVEL_UP_MOVE( 4, MOVE_DISABLE),
LEVEL_UP_MOVE( 8, MOVE_ICE_SHARD),
LEVEL_UP_MOVE(12, MOVE_SPITE),
@@ -903,32 +895,29 @@ static const struct LevelUpMove sVulpixAlolanLevelUpLearnset[] = {
LEVEL_UP_MOVE(36, MOVE_IMPRISON),
LEVEL_UP_MOVE(40, MOVE_MIST),
LEVEL_UP_MOVE(44, MOVE_AURORA_VEIL),
- LEVEL_UP_MOVE(48, MOVE_SHEER_COLD),
- LEVEL_UP_MOVE(52, MOVE_GRUDGE),
- LEVEL_UP_MOVE(56, MOVE_BLIZZARD),
+ LEVEL_UP_MOVE(48, MOVE_FREEZE_DRY),
+ LEVEL_UP_MOVE(52, MOVE_BLIZZARD),
LEVEL_UP_END
};
static const struct LevelUpMove sNinetalesAlolanLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_DAZZLING_GLEAM),
- LEVEL_UP_MOVE( 1, MOVE_DAZZLING_GLEAM),
- LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT),
- LEVEL_UP_MOVE( 1, MOVE_SPITE),
- LEVEL_UP_MOVE( 1, MOVE_ICY_WIND),
- LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY),
+ LEVEL_UP_MOVE( 1, MOVE_DISABLE),
+ LEVEL_UP_MOVE( 1, MOVE_MIST),
+ LEVEL_UP_MOVE( 1, MOVE_ICE_BEAM),
LEVEL_UP_MOVE( 1, MOVE_AURORA_BEAM),
+ LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY),
+ LEVEL_UP_MOVE( 1, MOVE_SPITE),
+ LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW),
LEVEL_UP_MOVE( 1, MOVE_EXTRASENSORY),
- LEVEL_UP_MOVE( 1, MOVE_ICE_BEAM),
- LEVEL_UP_MOVE( 1, MOVE_IMPRISON),
- LEVEL_UP_MOVE( 1, MOVE_MIST),
+ LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE( 1, MOVE_ICE_SHARD),
+ LEVEL_UP_MOVE( 1, MOVE_FREEZE_DRY),
LEVEL_UP_MOVE( 1, MOVE_AURORA_VEIL),
- LEVEL_UP_MOVE( 1, MOVE_SHEER_COLD),
- LEVEL_UP_MOVE( 1, MOVE_GRUDGE),
- LEVEL_UP_MOVE( 1, MOVE_BLIZZARD),
- LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
- LEVEL_UP_MOVE( 1, MOVE_DISABLE),
- LEVEL_UP_MOVE( 1, MOVE_ICE_SHARD),
+ LEVEL_UP_MOVE( 1, MOVE_BLIZZARD),
+ LEVEL_UP_MOVE( 1, MOVE_ICY_WIND),
+ LEVEL_UP_MOVE( 1, MOVE_IMPRISON),
LEVEL_UP_END
};
#endif //P_ALOLAN_FORMS
@@ -1080,9 +1069,9 @@ static const struct LevelUpMove sOddishLevelUpLearnset[] = {
};
static const struct LevelUpMove sGloomLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ACID),
LEVEL_UP_MOVE( 1, MOVE_ABSORB),
LEVEL_UP_MOVE( 1, MOVE_GROWTH),
- LEVEL_UP_MOVE( 1, MOVE_ACID),
LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT),
LEVEL_UP_MOVE(12, MOVE_MEGA_DRAIN),
LEVEL_UP_MOVE(14, MOVE_POISON_POWDER),
@@ -1099,44 +1088,41 @@ static const struct LevelUpMove sGloomLevelUpLearnset[] = {
static const struct LevelUpMove sVileplumeLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_PETAL_BLIZZARD),
- LEVEL_UP_MOVE( 1, MOVE_PETAL_BLIZZARD),
- LEVEL_UP_MOVE( 1, MOVE_AROMATHERAPY),
+ LEVEL_UP_MOVE( 1, MOVE_ACID),
+ LEVEL_UP_MOVE( 1, MOVE_ABSORB),
LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN),
+ LEVEL_UP_MOVE( 1, MOVE_GROWTH),
LEVEL_UP_MOVE( 1, MOVE_POISON_POWDER),
LEVEL_UP_MOVE( 1, MOVE_STUN_SPORE),
LEVEL_UP_MOVE( 1, MOVE_SLEEP_POWDER),
- LEVEL_UP_MOVE( 1, MOVE_GIGA_DRAIN),
- LEVEL_UP_MOVE( 1, MOVE_TOXIC),
- LEVEL_UP_MOVE( 1, MOVE_MOONBLAST),
- LEVEL_UP_MOVE( 1, MOVE_GRASSY_TERRAIN),
- LEVEL_UP_MOVE( 1, MOVE_MOONLIGHT),
LEVEL_UP_MOVE( 1, MOVE_PETAL_DANCE),
- LEVEL_UP_MOVE( 1, MOVE_ABSORB),
- LEVEL_UP_MOVE( 1, MOVE_GROWTH),
- LEVEL_UP_MOVE( 1, MOVE_ACID),
+ LEVEL_UP_MOVE( 1, MOVE_TOXIC),
+ LEVEL_UP_MOVE( 1, MOVE_GIGA_DRAIN),
LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT),
+ LEVEL_UP_MOVE( 1, MOVE_MOONLIGHT),
+ LEVEL_UP_MOVE( 1, MOVE_GRASSY_TERRAIN),
+ LEVEL_UP_MOVE( 1, MOVE_MOONBLAST),
LEVEL_UP_END
};
#if P_GEN_2_CROSS_EVOS
static const struct LevelUpMove sBellossomLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_PETAL_BLIZZARD),
- LEVEL_UP_MOVE( 1, MOVE_PETAL_BLIZZARD),
- LEVEL_UP_MOVE( 1, MOVE_QUIVER_DANCE),
+ LEVEL_UP_MOVE( 1, MOVE_ACID),
+ LEVEL_UP_MOVE( 1, MOVE_ABSORB),
LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN),
+ LEVEL_UP_MOVE( 1, MOVE_GROWTH),
LEVEL_UP_MOVE( 1, MOVE_POISON_POWDER),
LEVEL_UP_MOVE( 1, MOVE_STUN_SPORE),
LEVEL_UP_MOVE( 1, MOVE_SLEEP_POWDER),
- LEVEL_UP_MOVE( 1, MOVE_GIGA_DRAIN),
- LEVEL_UP_MOVE( 1, MOVE_TOXIC),
- LEVEL_UP_MOVE( 1, MOVE_MOONBLAST),
- LEVEL_UP_MOVE( 1, MOVE_GRASSY_TERRAIN),
- LEVEL_UP_MOVE( 1, MOVE_MOONLIGHT),
LEVEL_UP_MOVE( 1, MOVE_PETAL_DANCE),
- LEVEL_UP_MOVE( 1, MOVE_ABSORB),
- LEVEL_UP_MOVE( 1, MOVE_GROWTH),
- LEVEL_UP_MOVE( 1, MOVE_ACID),
+ LEVEL_UP_MOVE( 1, MOVE_TOXIC),
+ LEVEL_UP_MOVE( 1, MOVE_GIGA_DRAIN),
LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT),
+ LEVEL_UP_MOVE( 1, MOVE_MOONLIGHT),
+ LEVEL_UP_MOVE( 1, MOVE_QUIVER_DANCE),
+ LEVEL_UP_MOVE( 1, MOVE_GRASSY_TERRAIN),
+ LEVEL_UP_MOVE( 1, MOVE_MOONBLAST),
LEVEL_UP_END
};
#endif //P_GEN_2_CROSS_EVOS
@@ -1624,9 +1610,9 @@ static const struct LevelUpMove sPoliwagLevelUpLearnset[] = {
};
static const struct LevelUpMove sPoliwhirlLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS),
- LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_MUD_SHOT),
LEVEL_UP_MOVE(18, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE(24, MOVE_RAIN_DANCE),
@@ -1639,43 +1625,39 @@ static const struct LevelUpMove sPoliwhirlLevelUpLearnset[] = {
};
static const struct LevelUpMove sPoliwrathLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_SUBMISSION),
- LEVEL_UP_MOVE( 1, MOVE_SUBMISSION),
- LEVEL_UP_MOVE( 1, MOVE_CIRCLE_THROW),
- LEVEL_UP_MOVE( 1, MOVE_MIND_READER),
- LEVEL_UP_MOVE( 1, MOVE_DYNAMIC_PUNCH),
- LEVEL_UP_MOVE( 1, MOVE_BUBBLE_BEAM),
- LEVEL_UP_MOVE( 1, MOVE_RAIN_DANCE),
- LEVEL_UP_MOVE( 1, MOVE_BODY_SLAM),
- LEVEL_UP_MOVE( 1, MOVE_EARTH_POWER),
- LEVEL_UP_MOVE( 1, MOVE_HYDRO_PUMP),
- LEVEL_UP_MOVE( 1, MOVE_BELLY_DRUM),
+ LEVEL_UP_MOVE( 0, MOVE_DYNAMIC_PUNCH),
+ LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_DOUBLE_EDGE),
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
- LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS),
- LEVEL_UP_MOVE( 1, MOVE_POUND),
+ LEVEL_UP_MOVE( 1, MOVE_HYDRO_PUMP),
+ LEVEL_UP_MOVE( 1, MOVE_BELLY_DRUM),
+ LEVEL_UP_MOVE( 1, MOVE_RAIN_DANCE),
LEVEL_UP_MOVE( 1, MOVE_MUD_SHOT),
+ LEVEL_UP_MOVE( 1, MOVE_EARTH_POWER),
+ LEVEL_UP_MOVE( 1, MOVE_CIRCLE_THROW),
+ LEVEL_UP_MOVE( 1, MOVE_BODY_SLAM),
+ LEVEL_UP_MOVE( 1, MOVE_BUBBLE_BEAM),
+ LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS),
LEVEL_UP_END
};
#if P_GEN_2_CROSS_EVOS
static const struct LevelUpMove sPolitoedLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_BOUNCE),
- LEVEL_UP_MOVE( 1, MOVE_BOUNCE),
- LEVEL_UP_MOVE( 1, MOVE_SWAGGER),
- LEVEL_UP_MOVE( 1, MOVE_HYPER_VOICE),
- LEVEL_UP_MOVE( 1, MOVE_PERISH_SONG),
- LEVEL_UP_MOVE( 1, MOVE_BUBBLE_BEAM),
- LEVEL_UP_MOVE( 1, MOVE_RAIN_DANCE),
LEVEL_UP_MOVE( 1, MOVE_BODY_SLAM),
- LEVEL_UP_MOVE( 1, MOVE_EARTH_POWER),
- LEVEL_UP_MOVE( 1, MOVE_HYDRO_PUMP),
- LEVEL_UP_MOVE( 1, MOVE_BELLY_DRUM),
LEVEL_UP_MOVE( 1, MOVE_DOUBLE_EDGE),
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
+ LEVEL_UP_MOVE( 1, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS),
- LEVEL_UP_MOVE( 1, MOVE_POUND),
+ LEVEL_UP_MOVE( 1, MOVE_PERISH_SONG),
+ LEVEL_UP_MOVE( 1, MOVE_SWAGGER),
+ LEVEL_UP_MOVE( 1, MOVE_HYPER_VOICE),
LEVEL_UP_MOVE( 1, MOVE_MUD_SHOT),
+ LEVEL_UP_MOVE( 1, MOVE_EARTH_POWER),
+ LEVEL_UP_MOVE( 1, MOVE_POUND),
+ LEVEL_UP_MOVE( 1, MOVE_HYDRO_PUMP),
+ LEVEL_UP_MOVE( 1, MOVE_BELLY_DRUM),
+ LEVEL_UP_MOVE( 1, MOVE_RAIN_DANCE),
LEVEL_UP_END
};
#endif //P_GEN_2_CROSS_EVOS
@@ -1800,15 +1782,15 @@ static const struct LevelUpMove sBellsproutLevelUpLearnset[] = {
LEVEL_UP_MOVE(39, MOVE_RAZOR_LEAF),
LEVEL_UP_MOVE(41, MOVE_POISON_JAB),
LEVEL_UP_MOVE(47, MOVE_SLAM),
+ LEVEL_UP_MOVE(52, MOVE_POWER_WHIP),
LEVEL_UP_END
};
+
static const struct LevelUpMove sWeepinbellLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP),
- LEVEL_UP_MOVE( 1, MOVE_GROWTH),
LEVEL_UP_MOVE( 1, MOVE_WRAP),
- LEVEL_UP_MOVE( 7, MOVE_GROWTH),
- LEVEL_UP_MOVE(11, MOVE_WRAP),
+ LEVEL_UP_MOVE( 1, MOVE_GROWTH),
LEVEL_UP_MOVE(13, MOVE_SLEEP_POWDER),
LEVEL_UP_MOVE(15, MOVE_POISON_POWDER),
LEVEL_UP_MOVE(17, MOVE_STUN_SPORE),
@@ -1819,29 +1801,21 @@ static const struct LevelUpMove sWeepinbellLevelUpLearnset[] = {
LEVEL_UP_MOVE(44, MOVE_RAZOR_LEAF),
LEVEL_UP_MOVE(47, MOVE_POISON_JAB),
LEVEL_UP_MOVE(54, MOVE_SLAM),
+ LEVEL_UP_MOVE(58, MOVE_POWER_WHIP),
LEVEL_UP_END
};
static const struct LevelUpMove sVictreebelLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_LEAF_TORNADO),
- LEVEL_UP_MOVE( 1, MOVE_LEAF_TORNADO),
+ LEVEL_UP_MOVE( 0, MOVE_LEAF_STORM),
LEVEL_UP_MOVE( 1, MOVE_STOCKPILE),
- LEVEL_UP_MOVE( 1, MOVE_SWALLOW),
LEVEL_UP_MOVE( 1, MOVE_SPIT_UP),
+ LEVEL_UP_MOVE( 1, MOVE_SWALLOW),
+ LEVEL_UP_MOVE( 1, MOVE_GASTRO_ACID),
+ LEVEL_UP_MOVE( 1, MOVE_POWER_WHIP),
LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP),
+ LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF),
LEVEL_UP_MOVE( 1, MOVE_SLEEP_POWDER),
LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT),
- LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF),
- LEVEL_UP_MOVE( 1, MOVE_GROWTH),
- LEVEL_UP_MOVE( 1, MOVE_WRAP),
- LEVEL_UP_MOVE( 1, MOVE_POISON_POWDER),
- LEVEL_UP_MOVE( 1, MOVE_STUN_SPORE),
- LEVEL_UP_MOVE( 1, MOVE_ACID),
- LEVEL_UP_MOVE( 1, MOVE_KNOCK_OFF),
- LEVEL_UP_MOVE( 1, MOVE_GASTRO_ACID),
- LEVEL_UP_MOVE( 1, MOVE_POISON_JAB),
- LEVEL_UP_MOVE( 1, MOVE_SLAM),
- LEVEL_UP_MOVE(32, MOVE_LEAF_STORM),
LEVEL_UP_MOVE(44, MOVE_LEAF_BLADE),
LEVEL_UP_END
};
@@ -1867,11 +1841,11 @@ static const struct LevelUpMove sTentacoolLevelUpLearnset[] = {
};
static const struct LevelUpMove sTentacruelLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_REFLECT_TYPE),
+ LEVEL_UP_MOVE( 1, MOVE_WRAP),
LEVEL_UP_MOVE( 1, MOVE_POISON_STING),
- LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
LEVEL_UP_MOVE( 1, MOVE_ACID),
- LEVEL_UP_MOVE( 1, MOVE_WRAP),
+ LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
+ LEVEL_UP_MOVE( 1, MOVE_REFLECT_TYPE),
LEVEL_UP_MOVE(12, MOVE_SUPERSONIC),
LEVEL_UP_MOVE(16, MOVE_WATER_PULSE),
LEVEL_UP_MOVE(20, MOVE_SCREECH),
@@ -1890,13 +1864,11 @@ static const struct LevelUpMove sTentacruelLevelUpLearnset[] = {
static const struct LevelUpMove sGeodudeLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
- LEVEL_UP_MOVE( 4, MOVE_SANDSTORM),
LEVEL_UP_MOVE( 6, MOVE_ROCK_POLISH),
LEVEL_UP_MOVE(10, MOVE_ROLLOUT),
- LEVEL_UP_MOVE(12, MOVE_HARDEN),
+ LEVEL_UP_MOVE(12, MOVE_BULLDOZE),
LEVEL_UP_MOVE(16, MOVE_ROCK_THROW),
LEVEL_UP_MOVE(18, MOVE_SMACK_DOWN),
- LEVEL_UP_MOVE(22, MOVE_BULLDOZE),
LEVEL_UP_MOVE(24, MOVE_SELF_DESTRUCT),
LEVEL_UP_MOVE(28, MOVE_STEALTH_ROCK),
LEVEL_UP_MOVE(30, MOVE_ROCK_BLAST),
@@ -1911,13 +1883,10 @@ static const struct LevelUpMove sGravelerLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE( 1, MOVE_ROCK_POLISH),
- LEVEL_UP_MOVE( 4, MOVE_SANDSTORM),
- LEVEL_UP_MOVE( 6, MOVE_ROCK_POLISH),
LEVEL_UP_MOVE(10, MOVE_ROLLOUT),
- LEVEL_UP_MOVE(12, MOVE_HARDEN),
+ LEVEL_UP_MOVE(12, MOVE_BULLDOZE),
LEVEL_UP_MOVE(16, MOVE_ROCK_THROW),
LEVEL_UP_MOVE(18, MOVE_SMACK_DOWN),
- LEVEL_UP_MOVE(22, MOVE_BULLDOZE),
LEVEL_UP_MOVE(24, MOVE_SELF_DESTRUCT),
LEVEL_UP_MOVE(30, MOVE_STEALTH_ROCK),
LEVEL_UP_MOVE(34, MOVE_ROCK_BLAST),
@@ -1929,14 +1898,10 @@ static const struct LevelUpMove sGravelerLevelUpLearnset[] = {
};
static const struct LevelUpMove sGolemLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_HEAVY_SLAM),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE( 1, MOVE_ROCK_POLISH),
- LEVEL_UP_MOVE( 4, MOVE_SANDSTORM),
- LEVEL_UP_MOVE( 6, MOVE_ROCK_POLISH),
- LEVEL_UP_MOVE(10, MOVE_ROLLOUT),
- LEVEL_UP_MOVE(12, MOVE_HARDEN),
+ LEVEL_UP_MOVE( 1, MOVE_HEAVY_SLAM),
LEVEL_UP_MOVE(16, MOVE_ROCK_THROW),
LEVEL_UP_MOVE(18, MOVE_SMACK_DOWN),
LEVEL_UP_MOVE(22, MOVE_BULLDOZE),
@@ -1947,7 +1912,6 @@ static const struct LevelUpMove sGolemLevelUpLearnset[] = {
LEVEL_UP_MOVE(44, MOVE_EXPLOSION),
LEVEL_UP_MOVE(50, MOVE_DOUBLE_EDGE),
LEVEL_UP_MOVE(54, MOVE_STONE_EDGE),
- LEVEL_UP_MOVE(60, MOVE_HEAVY_SLAM),
LEVEL_UP_END
};
@@ -1977,8 +1941,6 @@ static const struct LevelUpMove sGravelerAlolanLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE( 1, MOVE_CHARGE),
LEVEL_UP_MOVE( 1, MOVE_ROCK_POLISH),
- LEVEL_UP_MOVE( 4, MOVE_CHARGE),
- LEVEL_UP_MOVE( 6, MOVE_ROCK_POLISH),
LEVEL_UP_MOVE(10, MOVE_ROLLOUT),
LEVEL_UP_MOVE(12, MOVE_SPARK),
LEVEL_UP_MOVE(16, MOVE_ROCK_THROW),
@@ -1995,14 +1957,11 @@ static const struct LevelUpMove sGravelerAlolanLevelUpLearnset[] = {
};
static const struct LevelUpMove sGolemAlolanLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_HEAVY_SLAM),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE( 1, MOVE_CHARGE),
LEVEL_UP_MOVE( 1, MOVE_ROCK_POLISH),
- LEVEL_UP_MOVE( 4, MOVE_CHARGE),
- LEVEL_UP_MOVE( 6, MOVE_ROCK_POLISH),
- LEVEL_UP_MOVE(10, MOVE_STEAMROLLER),
+ LEVEL_UP_MOVE( 1, MOVE_HEAVY_SLAM),
LEVEL_UP_MOVE(12, MOVE_SPARK),
LEVEL_UP_MOVE(16, MOVE_ROCK_THROW),
LEVEL_UP_MOVE(18, MOVE_SMACK_DOWN),
@@ -2014,7 +1973,6 @@ static const struct LevelUpMove sGolemAlolanLevelUpLearnset[] = {
LEVEL_UP_MOVE(44, MOVE_EXPLOSION),
LEVEL_UP_MOVE(50, MOVE_DOUBLE_EDGE),
LEVEL_UP_MOVE(54, MOVE_STONE_EDGE),
- LEVEL_UP_MOVE(60, MOVE_HEAVY_SLAM),
LEVEL_UP_END
};
#endif //P_ALOLAN_FORMS
@@ -2124,6 +2082,7 @@ static const struct LevelUpMove sSlowpokeLevelUpLearnset[] = {
};
static const struct LevelUpMove sSlowbroLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_FUTURE_SIGHT),
LEVEL_UP_MOVE( 1, MOVE_WITHDRAW),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
@@ -2147,6 +2106,8 @@ static const struct LevelUpMove sSlowbroLevelUpLearnset[] = {
#if P_GEN_2_CROSS_EVOS
static const struct LevelUpMove sSlowkingLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_FUTURE_SIGHT),
+ LEVEL_UP_MOVE( 1, MOVE_CHILLY_RECEPTION),
LEVEL_UP_MOVE( 1, MOVE_CURSE),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
@@ -2218,6 +2179,9 @@ static const struct LevelUpMove sSlowbroGalarianLevelUpLearnset[] = {
#if P_GEN_2_CROSS_EVOS
static const struct LevelUpMove sSlowkingGalarianLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_EERIE_SPELL),
+ LEVEL_UP_MOVE( 1, MOVE_TOXIC),
+ LEVEL_UP_MOVE( 1, MOVE_FUTURE_SIGHT),
+ LEVEL_UP_MOVE( 1, MOVE_CHILLY_RECEPTION),
LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT),
LEVEL_UP_MOVE( 1, MOVE_POWER_GEM),
LEVEL_UP_MOVE( 1, MOVE_CURSE),
@@ -2378,45 +2342,37 @@ static const struct LevelUpMove sSirfetchdLevelUpLearnset[] = {
#if P_FAMILY_DODUO
static const struct LevelUpMove sDoduoLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_PECK),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
+ LEVEL_UP_MOVE( 1, MOVE_PECK),
LEVEL_UP_MOVE( 5, MOVE_QUICK_ATTACK),
- LEVEL_UP_MOVE( 8, MOVE_LEER),
- LEVEL_UP_MOVE(12, MOVE_FURY_ATTACK),
- LEVEL_UP_MOVE(15, MOVE_WING_ATTACK),
- LEVEL_UP_MOVE(19, MOVE_PLUCK),
- LEVEL_UP_MOVE(22, MOVE_DOUBLE_HIT),
- LEVEL_UP_MOVE(26, MOVE_AGILITY),
- LEVEL_UP_MOVE(29, MOVE_UPROAR),
- LEVEL_UP_MOVE(33, MOVE_ACUPRESSURE),
- LEVEL_UP_MOVE(36, MOVE_SWORDS_DANCE),
- LEVEL_UP_MOVE(40, MOVE_LUNGE),
- LEVEL_UP_MOVE(43, MOVE_DRILL_PECK),
- LEVEL_UP_MOVE(47, MOVE_ENDEAVOR),
- LEVEL_UP_MOVE(50, MOVE_THRASH),
+ LEVEL_UP_MOVE( 9, MOVE_FURY_ATTACK),
+ LEVEL_UP_MOVE(14, MOVE_PLUCK),
+ LEVEL_UP_MOVE(19, MOVE_DOUBLE_HIT),
+ LEVEL_UP_MOVE(23, MOVE_AGILITY),
+ LEVEL_UP_MOVE(27, MOVE_UPROAR),
+ LEVEL_UP_MOVE(30, MOVE_ACUPRESSURE),
+ LEVEL_UP_MOVE(33, MOVE_SWORDS_DANCE),
+ LEVEL_UP_MOVE(36, MOVE_DRILL_PECK),
+ LEVEL_UP_MOVE(39, MOVE_ENDEAVOR),
+ LEVEL_UP_MOVE(43, MOVE_THRASH),
LEVEL_UP_END
};
static const struct LevelUpMove sDodrioLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_TRI_ATTACK),
- LEVEL_UP_MOVE( 1, MOVE_TRI_ATTACK),
- LEVEL_UP_MOVE( 1, MOVE_PECK),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
+ LEVEL_UP_MOVE( 1, MOVE_PECK),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
- LEVEL_UP_MOVE( 5, MOVE_QUICK_ATTACK),
- LEVEL_UP_MOVE( 8, MOVE_LEER),
LEVEL_UP_MOVE(12, MOVE_FURY_ATTACK),
- LEVEL_UP_MOVE(15, MOVE_WING_ATTACK),
- LEVEL_UP_MOVE(19, MOVE_PLUCK),
- LEVEL_UP_MOVE(22, MOVE_DOUBLE_HIT),
- LEVEL_UP_MOVE(26, MOVE_AGILITY),
- LEVEL_UP_MOVE(29, MOVE_UPROAR),
- LEVEL_UP_MOVE(34, MOVE_ACUPRESSURE),
- LEVEL_UP_MOVE(38, MOVE_SWORDS_DANCE),
- LEVEL_UP_MOVE(43, MOVE_LUNGE),
- LEVEL_UP_MOVE(47, MOVE_DRILL_PECK),
- LEVEL_UP_MOVE(52, MOVE_ENDEAVOR),
- LEVEL_UP_MOVE(56, MOVE_THRASH),
+ LEVEL_UP_MOVE(15, MOVE_PLUCK),
+ LEVEL_UP_MOVE(19, MOVE_DOUBLE_HIT),
+ LEVEL_UP_MOVE(23, MOVE_AGILITY),
+ LEVEL_UP_MOVE(26, MOVE_UPROAR),
+ LEVEL_UP_MOVE(30, MOVE_ACUPRESSURE),
+ LEVEL_UP_MOVE(34, MOVE_SWORDS_DANCE),
+ LEVEL_UP_MOVE(38, MOVE_DRILL_PECK),
+ LEVEL_UP_MOVE(43, MOVE_ENDEAVOR),
+ LEVEL_UP_MOVE(50, MOVE_THRASH),
LEVEL_UP_END
};
#endif //P_FAMILY_DODUO
@@ -2425,7 +2381,7 @@ static const struct LevelUpMove sDodrioLevelUpLearnset[] = {
static const struct LevelUpMove sSeelLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_HEADBUTT),
LEVEL_UP_MOVE( 3, MOVE_GROWL),
- LEVEL_UP_MOVE( 7, MOVE_WATER_GUN),
+ LEVEL_UP_MOVE( 7, MOVE_CHARM),
LEVEL_UP_MOVE(11, MOVE_ICY_WIND),
LEVEL_UP_MOVE(13, MOVE_ENCORE),
LEVEL_UP_MOVE(17, MOVE_ICE_SHARD),
@@ -2439,21 +2395,15 @@ static const struct LevelUpMove sSeelLevelUpLearnset[] = {
LEVEL_UP_MOVE(43, MOVE_AQUA_TAIL),
LEVEL_UP_MOVE(47, MOVE_ICE_BEAM),
LEVEL_UP_MOVE(51, MOVE_SAFEGUARD),
- LEVEL_UP_MOVE(53, MOVE_HAIL),
+ LEVEL_UP_MOVE(53, MOVE_SNOWSCAPE),
LEVEL_UP_END
};
static const struct LevelUpMove sDewgongLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_SHEER_COLD),
- LEVEL_UP_MOVE( 1, MOVE_SHEER_COLD),
LEVEL_UP_MOVE( 1, MOVE_HEADBUTT),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
- LEVEL_UP_MOVE( 1, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE( 1, MOVE_ICY_WIND),
- LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
- LEVEL_UP_MOVE( 3, MOVE_GROWL),
- LEVEL_UP_MOVE( 7, MOVE_BUBBLE_BEAM),
- LEVEL_UP_MOVE(11, MOVE_ICY_WIND),
LEVEL_UP_MOVE(13, MOVE_ENCORE),
LEVEL_UP_MOVE(17, MOVE_ICE_SHARD),
LEVEL_UP_MOVE(21, MOVE_REST),
@@ -2466,7 +2416,7 @@ static const struct LevelUpMove sDewgongLevelUpLearnset[] = {
LEVEL_UP_MOVE(49, MOVE_AQUA_TAIL),
LEVEL_UP_MOVE(55, MOVE_ICE_BEAM),
LEVEL_UP_MOVE(61, MOVE_SAFEGUARD),
- LEVEL_UP_MOVE(65, MOVE_HAIL),
+ LEVEL_UP_MOVE(65, MOVE_SNOWSCAPE),
LEVEL_UP_END
};
#endif //P_FAMILY_SEEL
@@ -2900,48 +2850,48 @@ static const struct LevelUpMove sExeggcuteLevelUpLearnset[] = {
static const struct LevelUpMove sExeggutorLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_STOMP),
- LEVEL_UP_MOVE( 1, MOVE_STOMP),
- LEVEL_UP_MOVE( 1, MOVE_SEED_BOMB),
- LEVEL_UP_MOVE( 1, MOVE_PSYSHOCK),
- LEVEL_UP_MOVE( 1, MOVE_WOOD_HAMMER),
+ LEVEL_UP_MOVE( 1, MOVE_GROWTH),
LEVEL_UP_MOVE( 1, MOVE_LEAF_STORM),
- LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN),
- LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
- LEVEL_UP_MOVE( 1, MOVE_SYNTHESIS),
+ LEVEL_UP_MOVE( 1, MOVE_SEED_BOMB),
+ LEVEL_UP_MOVE( 1, MOVE_WORRY_SEED),
LEVEL_UP_MOVE( 1, MOVE_BULLET_SEED),
- LEVEL_UP_MOVE( 1, MOVE_GIGA_DRAIN),
LEVEL_UP_MOVE( 1, MOVE_EXTRASENSORY),
LEVEL_UP_MOVE( 1, MOVE_UPROAR),
- LEVEL_UP_MOVE( 1, MOVE_WORRY_SEED),
- LEVEL_UP_MOVE( 1, MOVE_SOLAR_BEAM),
- LEVEL_UP_MOVE( 1, MOVE_ABSORB),
- LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS),
+ LEVEL_UP_MOVE( 1, MOVE_SYNTHESIS),
+ LEVEL_UP_MOVE( 1, MOVE_PSYSHOCK),
LEVEL_UP_MOVE( 1, MOVE_REFLECT),
+ LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS),
+ LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
+ LEVEL_UP_MOVE( 1, MOVE_SOLAR_BEAM),
LEVEL_UP_MOVE( 1, MOVE_LEECH_SEED),
+ LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN),
+ LEVEL_UP_MOVE( 1, MOVE_ABSORB),
+ LEVEL_UP_MOVE( 1, MOVE_WOOD_HAMMER),
+ LEVEL_UP_MOVE( 1, MOVE_GIGA_DRAIN),
LEVEL_UP_END
};
#if P_ALOLAN_FORMS
static const struct LevelUpMove sExeggutorAlolanLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_DRAGON_HAMMER),
- LEVEL_UP_MOVE( 1, MOVE_DRAGON_HAMMER),
- LEVEL_UP_MOVE( 1, MOVE_SEED_BOMB),
- LEVEL_UP_MOVE( 1, MOVE_PSYSHOCK),
+ LEVEL_UP_MOVE( 1, MOVE_GROWTH),
LEVEL_UP_MOVE( 1, MOVE_WOOD_HAMMER),
LEVEL_UP_MOVE( 1, MOVE_LEAF_STORM),
- LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN),
- LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
- LEVEL_UP_MOVE( 1, MOVE_SYNTHESIS),
+ LEVEL_UP_MOVE( 1, MOVE_SEED_BOMB),
+ LEVEL_UP_MOVE( 1, MOVE_WORRY_SEED),
LEVEL_UP_MOVE( 1, MOVE_BULLET_SEED),
- LEVEL_UP_MOVE( 1, MOVE_GIGA_DRAIN),
LEVEL_UP_MOVE( 1, MOVE_EXTRASENSORY),
LEVEL_UP_MOVE( 1, MOVE_UPROAR),
- LEVEL_UP_MOVE( 1, MOVE_WORRY_SEED),
- LEVEL_UP_MOVE( 1, MOVE_SOLAR_BEAM),
- LEVEL_UP_MOVE( 1, MOVE_ABSORB),
- LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS),
+ LEVEL_UP_MOVE( 1, MOVE_SYNTHESIS),
+ LEVEL_UP_MOVE( 1, MOVE_GIGA_DRAIN),
LEVEL_UP_MOVE( 1, MOVE_REFLECT),
+ LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS),
+ LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
+ LEVEL_UP_MOVE( 1, MOVE_SOLAR_BEAM),
LEVEL_UP_MOVE( 1, MOVE_LEECH_SEED),
+ LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN),
+ LEVEL_UP_MOVE( 1, MOVE_PSYSHOCK),
+ LEVEL_UP_MOVE( 1, MOVE_ABSORB),
LEVEL_UP_END
};
#endif //P_ALOLAN_FORMS
@@ -3015,50 +2965,46 @@ static const struct LevelUpMove sMarowakAlolanLevelUpLearnset[] = {
#if P_GEN_2_CROSS_EVOS
static const struct LevelUpMove sTyrogueLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
- LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND),
- LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT),
LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY),
+ LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT),
+ LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND),
LEVEL_UP_END
};
#endif //P_GEN_2_CROSS_EVOS
static const struct LevelUpMove sHitmonleeLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_BRICK_BREAK),
- LEVEL_UP_MOVE( 1, MOVE_BRICK_BREAK),
- LEVEL_UP_MOVE( 1, MOVE_FEINT),
- LEVEL_UP_MOVE( 1, MOVE_LOW_SWEEP),
+ LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND),
- LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT),
LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY),
+ LEVEL_UP_MOVE( 1, MOVE_LOW_SWEEP),
LEVEL_UP_MOVE( 4, MOVE_DOUBLE_KICK),
LEVEL_UP_MOVE( 8, MOVE_LOW_KICK),
LEVEL_UP_MOVE(12, MOVE_ENDURE),
- LEVEL_UP_MOVE(16, MOVE_REVENGE),
+ LEVEL_UP_MOVE(16, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE(21, MOVE_WIDE_GUARD),
LEVEL_UP_MOVE(24, MOVE_BLAZE_KICK),
- LEVEL_UP_MOVE(28, MOVE_MIND_READER),
+ LEVEL_UP_MOVE(28, MOVE_FEINT),
LEVEL_UP_MOVE(32, MOVE_MEGA_KICK),
LEVEL_UP_MOVE(36, MOVE_CLOSE_COMBAT),
LEVEL_UP_MOVE(40, MOVE_REVERSAL),
LEVEL_UP_MOVE(44, MOVE_HIGH_JUMP_KICK),
+ LEVEL_UP_MOVE(50, MOVE_AXE_KICK),
LEVEL_UP_END
};
static const struct LevelUpMove sHitmonchanLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_DRAIN_PUNCH),
- LEVEL_UP_MOVE( 1, MOVE_DRAIN_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_FEINT),
- LEVEL_UP_MOVE( 1, MOVE_VACUUM_WAVE),
- LEVEL_UP_MOVE( 1, MOVE_BULLET_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND),
LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT),
LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY),
LEVEL_UP_MOVE( 4, MOVE_MACH_PUNCH),
- LEVEL_UP_MOVE( 8, MOVE_POWER_UP_PUNCH),
+ LEVEL_UP_MOVE( 8, MOVE_VACUUM_WAVE),
LEVEL_UP_MOVE(12, MOVE_DETECT),
- LEVEL_UP_MOVE(16, MOVE_REVENGE),
+ LEVEL_UP_MOVE(16, MOVE_BULLET_PUNCH),
LEVEL_UP_MOVE(21, MOVE_QUICK_GUARD),
LEVEL_UP_MOVE(24, MOVE_THUNDER_PUNCH),
LEVEL_UP_MOVE(24, MOVE_ICE_PUNCH),
@@ -3074,17 +3020,15 @@ static const struct LevelUpMove sHitmonchanLevelUpLearnset[] = {
#if P_GEN_2_CROSS_EVOS
static const struct LevelUpMove sHitmontopLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_TRIPLE_KICK),
- LEVEL_UP_MOVE( 1, MOVE_TRIPLE_KICK),
- LEVEL_UP_MOVE( 1, MOVE_FEINT),
- LEVEL_UP_MOVE( 1, MOVE_RAPID_SPIN),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
+ LEVEL_UP_MOVE( 1, MOVE_FEINT),
LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND),
- LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT),
LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY),
+ LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT),
LEVEL_UP_MOVE( 4, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 8, MOVE_GYRO_BALL),
LEVEL_UP_MOVE(12, MOVE_DETECT),
- LEVEL_UP_MOVE(16, MOVE_REVENGE),
+ LEVEL_UP_MOVE(16, MOVE_RAPID_SPIN),
LEVEL_UP_MOVE(21, MOVE_WIDE_GUARD),
LEVEL_UP_MOVE(21, MOVE_QUICK_GUARD),
LEVEL_UP_MOVE(24, MOVE_SUCKER_PUNCH),
@@ -3136,8 +3080,8 @@ static const struct LevelUpMove sLickilickyLevelUpLearnset[] = {
#if P_FAMILY_KOFFING
static const struct LevelUpMove sKoffingLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_POISON_GAS),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
+ LEVEL_UP_MOVE( 1, MOVE_POISON_GAS),
LEVEL_UP_MOVE( 4, MOVE_SMOG),
LEVEL_UP_MOVE( 8, MOVE_SMOKESCREEN),
LEVEL_UP_MOVE(12, MOVE_CLEAR_SMOG),
@@ -3156,12 +3100,11 @@ static const struct LevelUpMove sKoffingLevelUpLearnset[] = {
static const struct LevelUpMove sWeezingLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_DOUBLE_HIT),
- LEVEL_UP_MOVE( 1, MOVE_DOUBLE_HIT),
- LEVEL_UP_MOVE( 1, MOVE_HEAT_WAVE),
- LEVEL_UP_MOVE( 1, MOVE_POISON_GAS),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
- LEVEL_UP_MOVE( 1, MOVE_SMOG),
LEVEL_UP_MOVE( 1, MOVE_SMOKESCREEN),
+ LEVEL_UP_MOVE( 1, MOVE_SMOG),
+ LEVEL_UP_MOVE( 1, MOVE_POISON_GAS),
+ LEVEL_UP_MOVE( 1, MOVE_HEAT_WAVE),
LEVEL_UP_MOVE(12, MOVE_CLEAR_SMOG),
LEVEL_UP_MOVE(16, MOVE_ASSURANCE),
LEVEL_UP_MOVE(20, MOVE_SLUDGE),
@@ -3179,21 +3122,19 @@ static const struct LevelUpMove sWeezingLevelUpLearnset[] = {
#if P_GALARIAN_FORMS
static const struct LevelUpMove sWeezingGalarianLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_DOUBLE_HIT),
- LEVEL_UP_MOVE( 1, MOVE_DOUBLE_HIT),
LEVEL_UP_MOVE( 1, MOVE_STRANGE_STEAM),
LEVEL_UP_MOVE( 1, MOVE_DEFOG),
LEVEL_UP_MOVE( 1, MOVE_HEAT_WAVE),
- LEVEL_UP_MOVE( 1, MOVE_SMOG),
- LEVEL_UP_MOVE( 1, MOVE_SMOKESCREEN),
- LEVEL_UP_MOVE( 1, MOVE_HAZE),
+ LEVEL_UP_MOVE( 1, MOVE_AROMATIC_MIST),
LEVEL_UP_MOVE( 1, MOVE_POISON_GAS),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
- LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND),
- LEVEL_UP_MOVE( 1, MOVE_AROMATIC_MIST),
+ LEVEL_UP_MOVE( 1, MOVE_SMOG),
+ LEVEL_UP_MOVE( 1, MOVE_HAZE),
+ LEVEL_UP_MOVE( 1, MOVE_SMOKESCREEN),
LEVEL_UP_MOVE(12, MOVE_CLEAR_SMOG),
LEVEL_UP_MOVE(16, MOVE_ASSURANCE),
LEVEL_UP_MOVE(20, MOVE_SLUDGE),
- LEVEL_UP_MOVE(24, MOVE_AROMATHERAPY),
+ LEVEL_UP_MOVE(24, MOVE_FAIRY_WIND),
LEVEL_UP_MOVE(28, MOVE_SELF_DESTRUCT),
LEVEL_UP_MOVE(32, MOVE_SLUDGE_BOMB),
LEVEL_UP_MOVE(38, MOVE_TOXIC),
@@ -3228,7 +3169,6 @@ static const struct LevelUpMove sRhyhornLevelUpLearnset[] = {
static const struct LevelUpMove sRhydonLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_HAMMER_ARM),
- LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 1, MOVE_SMACK_DOWN),
@@ -3248,9 +3188,9 @@ static const struct LevelUpMove sRhydonLevelUpLearnset[] = {
#if P_GEN_4_CROSS_EVOS
static const struct LevelUpMove sRhyperiorLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
+ LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM),
LEVEL_UP_MOVE( 1, MOVE_SMACK_DOWN),
LEVEL_UP_MOVE( 1, MOVE_BULLDOZE),
LEVEL_UP_MOVE(15, MOVE_HORN_ATTACK),
@@ -3402,15 +3342,15 @@ static const struct LevelUpMove sKangaskhanLevelUpLearnset[] = {
#if P_FAMILY_HORSEA
static const struct LevelUpMove sHorseaLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
LEVEL_UP_MOVE( 1, MOVE_LEER),
+ LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
LEVEL_UP_MOVE( 5, MOVE_SMOKESCREEN),
LEVEL_UP_MOVE(10, MOVE_TWISTER),
LEVEL_UP_MOVE(15, MOVE_FOCUS_ENERGY),
LEVEL_UP_MOVE(20, MOVE_DRAGON_BREATH),
LEVEL_UP_MOVE(25, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE(30, MOVE_AGILITY),
- LEVEL_UP_MOVE(35, MOVE_LASER_FOCUS),
+ LEVEL_UP_MOVE(35, MOVE_WATER_PULSE),
LEVEL_UP_MOVE(40, MOVE_DRAGON_PULSE),
LEVEL_UP_MOVE(45, MOVE_HYDRO_PUMP),
LEVEL_UP_MOVE(50, MOVE_DRAGON_DANCE),
@@ -3419,15 +3359,15 @@ static const struct LevelUpMove sHorseaLevelUpLearnset[] = {
};
static const struct LevelUpMove sSeadraLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
LEVEL_UP_MOVE( 1, MOVE_LEER),
+ LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
LEVEL_UP_MOVE( 1, MOVE_SMOKESCREEN),
LEVEL_UP_MOVE( 1, MOVE_TWISTER),
LEVEL_UP_MOVE(15, MOVE_FOCUS_ENERGY),
LEVEL_UP_MOVE(20, MOVE_DRAGON_BREATH),
LEVEL_UP_MOVE(25, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE(30, MOVE_AGILITY),
- LEVEL_UP_MOVE(37, MOVE_LASER_FOCUS),
+ LEVEL_UP_MOVE(37, MOVE_WATER_PULSE),
LEVEL_UP_MOVE(44, MOVE_DRAGON_PULSE),
LEVEL_UP_MOVE(51, MOVE_HYDRO_PUMP),
LEVEL_UP_MOVE(58, MOVE_DRAGON_DANCE),
@@ -3437,21 +3377,22 @@ static const struct LevelUpMove sSeadraLevelUpLearnset[] = {
#if P_GEN_2_CROSS_EVOS
static const struct LevelUpMove sKingdraLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_WHIRLPOOL),
- LEVEL_UP_MOVE( 1, MOVE_YAWN),
- LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
LEVEL_UP_MOVE( 1, MOVE_LEER),
+ LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
LEVEL_UP_MOVE( 1, MOVE_SMOKESCREEN),
LEVEL_UP_MOVE( 1, MOVE_TWISTER),
+ LEVEL_UP_MOVE( 1, MOVE_WHIRLPOOL),
+ LEVEL_UP_MOVE( 1, MOVE_YAWN),
LEVEL_UP_MOVE(15, MOVE_FOCUS_ENERGY),
LEVEL_UP_MOVE(20, MOVE_DRAGON_BREATH),
LEVEL_UP_MOVE(25, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE(30, MOVE_AGILITY),
- LEVEL_UP_MOVE(37, MOVE_LASER_FOCUS),
+ LEVEL_UP_MOVE(37, MOVE_WATER_PULSE),
LEVEL_UP_MOVE(44, MOVE_DRAGON_PULSE),
LEVEL_UP_MOVE(51, MOVE_HYDRO_PUMP),
LEVEL_UP_MOVE(58, MOVE_DRAGON_DANCE),
LEVEL_UP_MOVE(65, MOVE_RAIN_DANCE),
+ LEVEL_UP_MOVE(72, MOVE_WAVE_CRASH),
LEVEL_UP_END
};
#endif //P_GEN_2_CROSS_EVOS
@@ -3755,8 +3696,8 @@ static const struct LevelUpMove sJynxLevelUpLearnset[] = {
#if P_FAMILY_ELECTABUZZ
#if P_GEN_2_CROSS_EVOS
static const struct LevelUpMove sElekidLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_LEER),
+ LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 4, MOVE_THUNDER_SHOCK),
LEVEL_UP_MOVE( 8, MOVE_CHARGE),
LEVEL_UP_MOVE(12, MOVE_SWIFT),
@@ -3774,9 +3715,9 @@ static const struct LevelUpMove sElekidLevelUpLearnset[] = {
#endif //P_GEN_2_CROSS_EVOS
static const struct LevelUpMove sElectabuzzLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK),
+ LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_CHARGE),
LEVEL_UP_MOVE(12, MOVE_SWIFT),
LEVEL_UP_MOVE(16, MOVE_SHOCK_WAVE),
@@ -3794,10 +3735,9 @@ static const struct LevelUpMove sElectabuzzLevelUpLearnset[] = {
#if P_GEN_4_CROSS_EVOS
static const struct LevelUpMove sElectivireLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_WILD_CHARGE),
- LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK),
+ LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_CHARGE),
LEVEL_UP_MOVE(12, MOVE_SWIFT),
LEVEL_UP_MOVE(16, MOVE_SHOCK_WAVE),
@@ -3818,8 +3758,8 @@ static const struct LevelUpMove sElectivireLevelUpLearnset[] = {
#if P_FAMILY_MAGMAR
#if P_GEN_2_CROSS_EVOS
static const struct LevelUpMove sMagbyLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_SMOG),
LEVEL_UP_MOVE( 1, MOVE_LEER),
+ LEVEL_UP_MOVE( 1, MOVE_SMOG),
LEVEL_UP_MOVE( 4, MOVE_EMBER),
LEVEL_UP_MOVE( 8, MOVE_SMOKESCREEN),
LEVEL_UP_MOVE(12, MOVE_CLEAR_SMOG),
@@ -3837,10 +3777,10 @@ static const struct LevelUpMove sMagbyLevelUpLearnset[] = {
#endif //P_GEN_2_CROSS_EVOS
static const struct LevelUpMove sMagmarLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_SMOG),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_SMOKESCREEN),
+ LEVEL_UP_MOVE( 1, MOVE_SMOG),
LEVEL_UP_MOVE(12, MOVE_CLEAR_SMOG),
LEVEL_UP_MOVE(16, MOVE_FLAME_WHEEL),
LEVEL_UP_MOVE(20, MOVE_CONFUSE_RAY),
@@ -3857,10 +3797,10 @@ static const struct LevelUpMove sMagmarLevelUpLearnset[] = {
#if P_GEN_4_CROSS_EVOS
static const struct LevelUpMove sMagmortarLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_SMOG),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_SMOKESCREEN),
+ LEVEL_UP_MOVE( 1, MOVE_SMOG),
LEVEL_UP_MOVE(12, MOVE_CLEAR_SMOG),
LEVEL_UP_MOVE(16, MOVE_FLAME_WHEEL),
LEVEL_UP_MOVE(20, MOVE_CONFUSE_RAY),
@@ -4295,7 +4235,7 @@ static const struct LevelUpMove sPorygonLevelUpLearnset[] = {
LEVEL_UP_MOVE(35, MOVE_RECOVER),
LEVEL_UP_MOVE(40, MOVE_DISCHARGE),
LEVEL_UP_MOVE(45, MOVE_TRI_ATTACK),
- LEVEL_UP_MOVE(50, MOVE_MAGIC_COAT),
+ LEVEL_UP_MOVE(50, MOVE_DOUBLE_EDGE),
LEVEL_UP_MOVE(55, MOVE_LOCK_ON),
LEVEL_UP_MOVE(60, MOVE_ZAP_CANNON),
LEVEL_UP_END
@@ -4303,8 +4243,8 @@ static const struct LevelUpMove sPorygonLevelUpLearnset[] = {
#if P_GEN_2_CROSS_EVOS
static const struct LevelUpMove sPorygon2LevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
+ LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE( 1, MOVE_CONVERSION),
LEVEL_UP_MOVE( 1, MOVE_RECYCLE),
LEVEL_UP_MOVE( 1, MOVE_MAGNET_RISE),
@@ -4315,22 +4255,21 @@ static const struct LevelUpMove sPorygon2LevelUpLearnset[] = {
LEVEL_UP_MOVE(35, MOVE_RECOVER),
LEVEL_UP_MOVE(40, MOVE_DISCHARGE),
LEVEL_UP_MOVE(45, MOVE_TRI_ATTACK),
- LEVEL_UP_MOVE(50, MOVE_MAGIC_COAT),
- LEVEL_UP_MOVE(55, MOVE_LOCK_ON),
- LEVEL_UP_MOVE(60, MOVE_ZAP_CANNON),
- LEVEL_UP_MOVE(65, MOVE_HYPER_BEAM),
+ LEVEL_UP_MOVE(50, MOVE_LOCK_ON),
+ LEVEL_UP_MOVE(55, MOVE_ZAP_CANNON),
+ LEVEL_UP_MOVE(60, MOVE_HYPER_BEAM),
LEVEL_UP_END
};
#if P_GEN_4_CROSS_EVOS
static const struct LevelUpMove sPorygonZLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_TRICK_ROOM),
+ LEVEL_UP_MOVE( 1, MOVE_CONVERSION),
LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE( 1, MOVE_MAGNET_RISE),
+ LEVEL_UP_MOVE( 1, MOVE_RECYCLE),
+ LEVEL_UP_MOVE( 1, MOVE_TRICK_ROOM),
LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
- LEVEL_UP_MOVE( 1, MOVE_CONVERSION),
- LEVEL_UP_MOVE( 1, MOVE_RECYCLE),
- LEVEL_UP_MOVE( 1, MOVE_MAGNET_RISE),
LEVEL_UP_MOVE(15, MOVE_THUNDER_SHOCK),
LEVEL_UP_MOVE(20, MOVE_PSYBEAM),
LEVEL_UP_MOVE(25, MOVE_CONVERSION_2),
@@ -4338,7 +4277,7 @@ static const struct LevelUpMove sPorygonZLevelUpLearnset[] = {
LEVEL_UP_MOVE(35, MOVE_RECOVER),
LEVEL_UP_MOVE(40, MOVE_DISCHARGE),
LEVEL_UP_MOVE(45, MOVE_TRI_ATTACK),
- LEVEL_UP_MOVE(50, MOVE_MAGIC_COAT),
+ LEVEL_UP_MOVE(50, MOVE_DOUBLE_EDGE),
LEVEL_UP_MOVE(55, MOVE_LOCK_ON),
LEVEL_UP_MOVE(60, MOVE_ZAP_CANNON),
LEVEL_UP_MOVE(65, MOVE_HYPER_BEAM),
@@ -4453,8 +4392,8 @@ static const struct LevelUpMove sAerodactylLevelUpLearnset[] = {
#if P_FAMILY_SNORLAX
#if P_GEN_4_CROSS_EVOS
static const struct LevelUpMove sMunchlaxLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_LICK),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
+ LEVEL_UP_MOVE( 1, MOVE_LICK),
LEVEL_UP_MOVE( 4, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE( 8, MOVE_RECYCLE),
LEVEL_UP_MOVE(12, MOVE_COVET),
@@ -4474,24 +4413,24 @@ static const struct LevelUpMove sMunchlaxLevelUpLearnset[] = {
#endif //P_GEN_4_CROSS_EVOS
static const struct LevelUpMove sSnorlaxLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_RECYCLE),
- LEVEL_UP_MOVE( 1, MOVE_COVET),
- LEVEL_UP_MOVE( 1, MOVE_STOCKPILE),
+ LEVEL_UP_MOVE( 1, MOVE_TACKLE),
+ LEVEL_UP_MOVE( 1, MOVE_LAST_RESORT),
LEVEL_UP_MOVE( 1, MOVE_SWALLOW),
LEVEL_UP_MOVE( 1, MOVE_SCREECH),
- LEVEL_UP_MOVE( 1, MOVE_FLING),
- LEVEL_UP_MOVE( 1, MOVE_METRONOME),
- LEVEL_UP_MOVE( 1, MOVE_FLAIL),
- LEVEL_UP_MOVE( 1, MOVE_LAST_RESORT),
- LEVEL_UP_MOVE( 1, MOVE_LICK),
- LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
+ LEVEL_UP_MOVE( 1, MOVE_METRONOME),
+ LEVEL_UP_MOVE( 1, MOVE_LICK),
+ LEVEL_UP_MOVE( 1, MOVE_FLING),
+ LEVEL_UP_MOVE( 1, MOVE_RECYCLE),
+ LEVEL_UP_MOVE( 1, MOVE_STOCKPILE),
+ LEVEL_UP_MOVE( 1, MOVE_FLAIL),
+ LEVEL_UP_MOVE( 1, MOVE_COVET),
LEVEL_UP_MOVE( 1, MOVE_BLOCK),
LEVEL_UP_MOVE(12, MOVE_YAWN),
LEVEL_UP_MOVE(16, MOVE_BITE),
- LEVEL_UP_MOVE(20, MOVE_REST),
LEVEL_UP_MOVE(20, MOVE_SNORE),
LEVEL_UP_MOVE(20, MOVE_SLEEP_TALK),
+ LEVEL_UP_MOVE(20, MOVE_REST),
LEVEL_UP_MOVE(24, MOVE_CRUNCH),
LEVEL_UP_MOVE(28, MOVE_BODY_SLAM),
LEVEL_UP_MOVE(32, MOVE_HEAVY_SLAM),
@@ -4747,12 +4686,12 @@ static const struct LevelUpMove sChikoritaLevelUpLearnset[] = {
LEVEL_UP_MOVE(12, MOVE_SYNTHESIS),
LEVEL_UP_MOVE(17, MOVE_REFLECT),
LEVEL_UP_MOVE(20, MOVE_MAGICAL_LEAF),
- LEVEL_UP_MOVE(23, MOVE_NATURE_POWER),
+ LEVEL_UP_MOVE(23, MOVE_LEECH_SEED),
LEVEL_UP_MOVE(28, MOVE_SWEET_SCENT),
LEVEL_UP_MOVE(31, MOVE_LIGHT_SCREEN),
LEVEL_UP_MOVE(34, MOVE_BODY_SLAM),
LEVEL_UP_MOVE(39, MOVE_SAFEGUARD),
- LEVEL_UP_MOVE(42, MOVE_AROMATHERAPY),
+ LEVEL_UP_MOVE(42, MOVE_GIGA_DRAIN),
LEVEL_UP_MOVE(45, MOVE_SOLAR_BEAM),
LEVEL_UP_END
};
@@ -4762,42 +4701,36 @@ static const struct LevelUpMove sBayleefLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF),
LEVEL_UP_MOVE( 1, MOVE_POISON_POWDER),
- LEVEL_UP_MOVE( 6, MOVE_RAZOR_LEAF),
- LEVEL_UP_MOVE( 9, MOVE_POISON_POWDER),
LEVEL_UP_MOVE(12, MOVE_SYNTHESIS),
LEVEL_UP_MOVE(18, MOVE_REFLECT),
LEVEL_UP_MOVE(22, MOVE_MAGICAL_LEAF),
- LEVEL_UP_MOVE(26, MOVE_NATURE_POWER),
+ LEVEL_UP_MOVE(26, MOVE_LEECH_SEED),
LEVEL_UP_MOVE(32, MOVE_SWEET_SCENT),
LEVEL_UP_MOVE(36, MOVE_LIGHT_SCREEN),
LEVEL_UP_MOVE(40, MOVE_BODY_SLAM),
LEVEL_UP_MOVE(46, MOVE_SAFEGUARD),
- LEVEL_UP_MOVE(50, MOVE_AROMATHERAPY),
+ LEVEL_UP_MOVE(50, MOVE_GIGA_DRAIN),
LEVEL_UP_MOVE(54, MOVE_SOLAR_BEAM),
LEVEL_UP_END
};
static const struct LevelUpMove sMeganiumLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_PETAL_DANCE),
- LEVEL_UP_MOVE( 1, MOVE_PETAL_DANCE),
- LEVEL_UP_MOVE( 1, MOVE_PETAL_BLIZZARD),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF),
LEVEL_UP_MOVE( 1, MOVE_POISON_POWDER),
- LEVEL_UP_MOVE( 6, MOVE_RAZOR_LEAF),
- LEVEL_UP_MOVE( 9, MOVE_POISON_POWDER),
+ LEVEL_UP_MOVE( 1, MOVE_PETAL_BLIZZARD),
LEVEL_UP_MOVE(12, MOVE_SYNTHESIS),
LEVEL_UP_MOVE(18, MOVE_REFLECT),
LEVEL_UP_MOVE(22, MOVE_MAGICAL_LEAF),
- LEVEL_UP_MOVE(26, MOVE_NATURE_POWER),
+ LEVEL_UP_MOVE(26, MOVE_LEECH_SEED),
LEVEL_UP_MOVE(34, MOVE_SWEET_SCENT),
LEVEL_UP_MOVE(40, MOVE_LIGHT_SCREEN),
LEVEL_UP_MOVE(46, MOVE_BODY_SLAM),
LEVEL_UP_MOVE(54, MOVE_SAFEGUARD),
- LEVEL_UP_MOVE(60, MOVE_AROMATHERAPY),
- LEVEL_UP_MOVE(66, MOVE_SOLAR_BEAM),
- LEVEL_UP_MOVE(70, MOVE_PETAL_BLIZZARD),
+ LEVEL_UP_MOVE(60, MOVE_GIGA_DRAIN),
+ LEVEL_UP_MOVE(65, MOVE_SOLAR_BEAM),
LEVEL_UP_END
};
#endif //P_FAMILY_CHIKORITA
@@ -4894,18 +4827,16 @@ static const struct LevelUpMove sTotodileLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 6, MOVE_WATER_GUN),
- LEVEL_UP_MOVE( 8, MOVE_MUD_SLAP),
- LEVEL_UP_MOVE(13, MOVE_BITE),
- LEVEL_UP_MOVE(15, MOVE_SCARY_FACE),
- LEVEL_UP_MOVE(20, MOVE_ICE_FANG),
+ LEVEL_UP_MOVE( 9, MOVE_BITE),
+ LEVEL_UP_MOVE(13, MOVE_SCARY_FACE),
+ LEVEL_UP_MOVE(19, MOVE_ICE_FANG),
LEVEL_UP_MOVE(22, MOVE_FLAIL),
LEVEL_UP_MOVE(27, MOVE_CRUNCH),
- LEVEL_UP_MOVE(29, MOVE_LOW_KICK),
- LEVEL_UP_MOVE(34, MOVE_SLASH),
- LEVEL_UP_MOVE(36, MOVE_SCREECH),
- LEVEL_UP_MOVE(41, MOVE_THRASH),
- LEVEL_UP_MOVE(43, MOVE_AQUA_TAIL),
- LEVEL_UP_MOVE(48, MOVE_SUPERPOWER),
+ LEVEL_UP_MOVE(30, MOVE_SLASH),
+ LEVEL_UP_MOVE(33, MOVE_SCREECH),
+ LEVEL_UP_MOVE(37, MOVE_THRASH),
+ LEVEL_UP_MOVE(41, MOVE_AQUA_TAIL),
+ LEVEL_UP_MOVE(45, MOVE_SUPERPOWER),
LEVEL_UP_MOVE(50, MOVE_HYDRO_PUMP),
LEVEL_UP_END
};
@@ -4914,43 +4845,36 @@ static const struct LevelUpMove sCroconawLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
- LEVEL_UP_MOVE( 6, MOVE_WATER_GUN),
- LEVEL_UP_MOVE( 8, MOVE_MUD_SLAP),
LEVEL_UP_MOVE(13, MOVE_BITE),
LEVEL_UP_MOVE(15, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(21, MOVE_ICE_FANG),
LEVEL_UP_MOVE(24, MOVE_FLAIL),
LEVEL_UP_MOVE(30, MOVE_CRUNCH),
- LEVEL_UP_MOVE(33, MOVE_LOW_KICK),
- LEVEL_UP_MOVE(39, MOVE_SLASH),
- LEVEL_UP_MOVE(42, MOVE_SCREECH),
- LEVEL_UP_MOVE(48, MOVE_THRASH),
- LEVEL_UP_MOVE(51, MOVE_AQUA_TAIL),
- LEVEL_UP_MOVE(57, MOVE_SUPERPOWER),
- LEVEL_UP_MOVE(60, MOVE_HYDRO_PUMP),
+ LEVEL_UP_MOVE(34, MOVE_SLASH),
+ LEVEL_UP_MOVE(37, MOVE_SCREECH),
+ LEVEL_UP_MOVE(42, MOVE_THRASH),
+ LEVEL_UP_MOVE(47, MOVE_AQUA_TAIL),
+ LEVEL_UP_MOVE(50, MOVE_SUPERPOWER),
+ LEVEL_UP_MOVE(55, MOVE_HYDRO_PUMP),
LEVEL_UP_END
};
static const struct LevelUpMove sFeraligatrLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_AGILITY),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
- LEVEL_UP_MOVE( 1, MOVE_MUD_SLAP),
- LEVEL_UP_MOVE( 6, MOVE_WATER_GUN),
- LEVEL_UP_MOVE( 8, MOVE_MUD_SLAP),
+ LEVEL_UP_MOVE( 1, MOVE_AGILITY),
LEVEL_UP_MOVE(13, MOVE_BITE),
LEVEL_UP_MOVE(15, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(21, MOVE_ICE_FANG),
LEVEL_UP_MOVE(24, MOVE_FLAIL),
LEVEL_UP_MOVE(32, MOVE_CRUNCH),
- LEVEL_UP_MOVE(37, MOVE_LOW_KICK),
- LEVEL_UP_MOVE(45, MOVE_SLASH),
- LEVEL_UP_MOVE(50, MOVE_SCREECH),
- LEVEL_UP_MOVE(58, MOVE_THRASH),
- LEVEL_UP_MOVE(63, MOVE_AQUA_TAIL),
- LEVEL_UP_MOVE(71, MOVE_SUPERPOWER),
- LEVEL_UP_MOVE(76, MOVE_HYDRO_PUMP),
+ LEVEL_UP_MOVE(37, MOVE_SLASH),
+ LEVEL_UP_MOVE(44, MOVE_SCREECH),
+ LEVEL_UP_MOVE(51, MOVE_THRASH),
+ LEVEL_UP_MOVE(59, MOVE_AQUA_TAIL),
+ LEVEL_UP_MOVE(65, MOVE_SUPERPOWER),
+ LEVEL_UP_MOVE(70, MOVE_HYDRO_PUMP),
LEVEL_UP_END
};
#endif //P_FAMILY_TOTODILE
@@ -4958,7 +4882,6 @@ static const struct LevelUpMove sFeraligatrLevelUpLearnset[] = {
#if P_FAMILY_SENTRET
static const struct LevelUpMove sSentretLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
- LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 4, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE( 7, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE(13, MOVE_FURY_SWIPES),
@@ -4969,21 +4892,17 @@ static const struct LevelUpMove sSentretLevelUpLearnset[] = {
LEVEL_UP_MOVE(31, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE(36, MOVE_AMNESIA),
LEVEL_UP_MOVE(39, MOVE_BATON_PASS),
- LEVEL_UP_MOVE(42, MOVE_REVERSAL),
+ LEVEL_UP_MOVE(42, MOVE_DOUBLE_EDGE),
LEVEL_UP_MOVE(47, MOVE_HYPER_VOICE),
LEVEL_UP_END
};
static const struct LevelUpMove sFurretLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_AGILITY),
- LEVEL_UP_MOVE( 1, MOVE_AGILITY),
- LEVEL_UP_MOVE( 1, MOVE_COIL),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
- LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
- LEVEL_UP_MOVE( 1, MOVE_GROWL),
- LEVEL_UP_MOVE( 4, MOVE_DEFENSE_CURL),
- LEVEL_UP_MOVE( 7, MOVE_QUICK_ATTACK),
+ LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
+ LEVEL_UP_MOVE( 1, MOVE_COIL),
LEVEL_UP_MOVE(13, MOVE_FURY_SWIPES),
LEVEL_UP_MOVE(17, MOVE_HELPING_HAND),
LEVEL_UP_MOVE(21, MOVE_FOLLOW_ME),
@@ -4992,7 +4911,7 @@ static const struct LevelUpMove sFurretLevelUpLearnset[] = {
LEVEL_UP_MOVE(36, MOVE_SUCKER_PUNCH),
LEVEL_UP_MOVE(42, MOVE_AMNESIA),
LEVEL_UP_MOVE(46, MOVE_BATON_PASS),
- LEVEL_UP_MOVE(50, MOVE_REVERSAL),
+ LEVEL_UP_MOVE(50, MOVE_DOUBLE_EDGE),
LEVEL_UP_MOVE(56, MOVE_HYPER_VOICE),
LEVEL_UP_END
};
@@ -5000,13 +4919,13 @@ static const struct LevelUpMove sFurretLevelUpLearnset[] = {
#if P_FAMILY_HOOTHOOT
static const struct LevelUpMove sHoothootLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_PECK),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
+ LEVEL_UP_MOVE( 1, MOVE_PECK),
LEVEL_UP_MOVE( 3, MOVE_TACKLE),
LEVEL_UP_MOVE( 6, MOVE_ECHOED_VOICE),
LEVEL_UP_MOVE( 9, MOVE_CONFUSION),
LEVEL_UP_MOVE(12, MOVE_REFLECT),
- LEVEL_UP_MOVE(15, MOVE_PSYCHO_SHIFT),
+ LEVEL_UP_MOVE(15, MOVE_DEFOG),
LEVEL_UP_MOVE(18, MOVE_AIR_SLASH),
LEVEL_UP_MOVE(21, MOVE_EXTRASENSORY),
LEVEL_UP_MOVE(24, MOVE_TAKE_DOWN),
@@ -5019,14 +4938,14 @@ static const struct LevelUpMove sHoothootLevelUpLearnset[] = {
};
static const struct LevelUpMove sNoctowlLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_SKY_ATTACK),
- LEVEL_UP_MOVE( 1, MOVE_PECK),
- LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
+ LEVEL_UP_MOVE( 1, MOVE_GROWL),
+ LEVEL_UP_MOVE( 1, MOVE_PECK),
+ LEVEL_UP_MOVE( 1, MOVE_SKY_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_ECHOED_VOICE),
LEVEL_UP_MOVE( 9, MOVE_CONFUSION),
LEVEL_UP_MOVE(12, MOVE_REFLECT),
- LEVEL_UP_MOVE(15, MOVE_PSYCHO_SHIFT),
+ LEVEL_UP_MOVE(15, MOVE_DEFOG),
LEVEL_UP_MOVE(18, MOVE_AIR_SLASH),
LEVEL_UP_MOVE(23, MOVE_EXTRASENSORY),
LEVEL_UP_MOVE(28, MOVE_TAKE_DOWN),
@@ -5090,50 +5009,45 @@ static const struct LevelUpMove sSpinarakLevelUpLearnset[] = {
LEVEL_UP_MOVE(19, MOVE_SHADOW_SNEAK),
LEVEL_UP_MOVE(22, MOVE_FURY_SWIPES),
LEVEL_UP_MOVE(26, MOVE_SUCKER_PUNCH),
- LEVEL_UP_MOVE(29, MOVE_LEECH_LIFE),
- LEVEL_UP_MOVE(33, MOVE_AGILITY),
- LEVEL_UP_MOVE(36, MOVE_PIN_MISSILE),
- LEVEL_UP_MOVE(40, MOVE_PSYCHIC),
- LEVEL_UP_MOVE(43, MOVE_POISON_JAB),
- LEVEL_UP_MOVE(47, MOVE_CROSS_POISON),
- LEVEL_UP_MOVE(50, MOVE_STICKY_WEB),
- LEVEL_UP_MOVE(54, MOVE_TOXIC_THREAD),
+ LEVEL_UP_MOVE(29, MOVE_AGILITY),
+ LEVEL_UP_MOVE(33, MOVE_PIN_MISSILE),
+ LEVEL_UP_MOVE(36, MOVE_PSYCHIC),
+ LEVEL_UP_MOVE(40, MOVE_POISON_JAB),
+ LEVEL_UP_MOVE(44, MOVE_CROSS_POISON),
+ LEVEL_UP_MOVE(47, MOVE_STICKY_WEB),
+ LEVEL_UP_MOVE(51, MOVE_TOXIC_THREAD),
LEVEL_UP_END
};
static const struct LevelUpMove sAriadosLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_SWORDS_DANCE),
- LEVEL_UP_MOVE( 1, MOVE_SWORDS_DANCE),
- LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY),
- LEVEL_UP_MOVE( 1, MOVE_VENOM_DRENCH),
- LEVEL_UP_MOVE( 1, MOVE_FELL_STINGER),
- LEVEL_UP_MOVE( 1, MOVE_BUG_BITE),
LEVEL_UP_MOVE( 1, MOVE_POISON_STING),
- LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT),
+ LEVEL_UP_MOVE( 1, MOVE_FELL_STINGER),
LEVEL_UP_MOVE( 1, MOVE_ABSORB),
- LEVEL_UP_MOVE( 5, MOVE_ABSORB),
+ LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT),
+ LEVEL_UP_MOVE( 1, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY),
LEVEL_UP_MOVE( 8, MOVE_INFESTATION),
LEVEL_UP_MOVE(12, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(15, MOVE_NIGHT_SHADE),
LEVEL_UP_MOVE(19, MOVE_SHADOW_SNEAK),
LEVEL_UP_MOVE(23, MOVE_FURY_SWIPES),
LEVEL_UP_MOVE(28, MOVE_SUCKER_PUNCH),
- LEVEL_UP_MOVE(32, MOVE_LEECH_LIFE),
- LEVEL_UP_MOVE(37, MOVE_AGILITY),
- LEVEL_UP_MOVE(41, MOVE_PIN_MISSILE),
- LEVEL_UP_MOVE(46, MOVE_PSYCHIC),
- LEVEL_UP_MOVE(50, MOVE_POISON_JAB),
- LEVEL_UP_MOVE(55, MOVE_CROSS_POISON),
- LEVEL_UP_MOVE(58, MOVE_STICKY_WEB),
- LEVEL_UP_MOVE(63, MOVE_TOXIC_THREAD),
+ LEVEL_UP_MOVE(31, MOVE_AGILITY),
+ LEVEL_UP_MOVE(35, MOVE_PIN_MISSILE),
+ LEVEL_UP_MOVE(41, MOVE_PSYCHIC),
+ LEVEL_UP_MOVE(46, MOVE_POISON_JAB),
+ LEVEL_UP_MOVE(50, MOVE_CROSS_POISON),
+ LEVEL_UP_MOVE(54, MOVE_STICKY_WEB),
+ LEVEL_UP_MOVE(59, MOVE_TOXIC_THREAD),
LEVEL_UP_END
};
#endif //P_FAMILY_SPINARAK
#if P_FAMILY_CHINCHOU
static const struct LevelUpMove sChinchouLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC),
+ LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
LEVEL_UP_MOVE( 4, MOVE_ELECTRO_BALL),
LEVEL_UP_MOVE( 8, MOVE_THUNDER_WAVE),
LEVEL_UP_MOVE(12, MOVE_BUBBLE_BEAM),
@@ -5150,16 +5064,13 @@ static const struct LevelUpMove sChinchouLevelUpLearnset[] = {
static const struct LevelUpMove sLanturnLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_SWALLOW),
- LEVEL_UP_MOVE( 0, MOVE_STOCKPILE),
LEVEL_UP_MOVE( 0, MOVE_SPIT_UP),
- LEVEL_UP_MOVE( 1, MOVE_STOCKPILE),
- LEVEL_UP_MOVE( 1, MOVE_SWALLOW),
- LEVEL_UP_MOVE( 1, MOVE_SPIT_UP),
+ LEVEL_UP_MOVE( 0, MOVE_STOCKPILE),
LEVEL_UP_MOVE( 1, MOVE_EERIE_IMPULSE),
- LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC),
- LEVEL_UP_MOVE( 1, MOVE_ELECTRO_BALL),
+ LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE),
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRO_BALL),
LEVEL_UP_MOVE(12, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE(16, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE(20, MOVE_SPARK),
@@ -5534,13 +5445,10 @@ static const struct LevelUpMove sAipomLevelUpLearnset[] = {
#if P_GEN_4_CROSS_EVOS
static const struct LevelUpMove sAmbipomLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_DUAL_CHOP),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
- LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK),
+ LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
- LEVEL_UP_MOVE( 4, MOVE_SAND_ATTACK),
- LEVEL_UP_MOVE( 8, MOVE_ASTONISH),
LEVEL_UP_MOVE(11, MOVE_BATON_PASS),
LEVEL_UP_MOVE(15, MOVE_TICKLE),
LEVEL_UP_MOVE(18, MOVE_FURY_SWIPES),
@@ -5599,14 +5507,13 @@ static const struct LevelUpMove sSunfloraLevelUpLearnset[] = {
#if P_FAMILY_YANMA
static const struct LevelUpMove sYanmaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
- LEVEL_UP_MOVE( 1, MOVE_GUST),
LEVEL_UP_MOVE( 6, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE(11, MOVE_DOUBLE_TEAM),
- LEVEL_UP_MOVE(14, MOVE_AERIAL_ACE),
+ LEVEL_UP_MOVE(14, MOVE_AIR_CUTTER),
LEVEL_UP_MOVE(17, MOVE_DETECT),
LEVEL_UP_MOVE(22, MOVE_SUPERSONIC),
LEVEL_UP_MOVE(27, MOVE_UPROAR),
- LEVEL_UP_MOVE(30, MOVE_STRING_SHOT),
+ LEVEL_UP_MOVE(30, MOVE_BUG_BITE),
LEVEL_UP_MOVE(33, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(38, MOVE_HYPNOSIS),
LEVEL_UP_MOVE(43, MOVE_WING_ATTACK),
@@ -5619,30 +5526,22 @@ static const struct LevelUpMove sYanmaLevelUpLearnset[] = {
#if P_GEN_4_CROSS_EVOS
static const struct LevelUpMove sYanmegaLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_BUG_BUZZ),
- LEVEL_UP_MOVE( 1, MOVE_AIR_SLASH),
- LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
- LEVEL_UP_MOVE( 1, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
- LEVEL_UP_MOVE( 1, MOVE_GUST),
- LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM),
- LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS),
- LEVEL_UP_MOVE( 1, MOVE_WING_ATTACK),
- LEVEL_UP_MOVE( 6, MOVE_QUICK_ATTACK),
- LEVEL_UP_MOVE(11, MOVE_DOUBLE_TEAM),
- LEVEL_UP_MOVE(14, MOVE_AERIAL_ACE),
+ LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE( 1, MOVE_AIR_SLASH),
+ LEVEL_UP_MOVE( 1, MOVE_BUG_BUZZ),
+ LEVEL_UP_MOVE(14, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE(17, MOVE_DETECT),
LEVEL_UP_MOVE(22, MOVE_SUPERSONIC),
LEVEL_UP_MOVE(27, MOVE_UPROAR),
- LEVEL_UP_MOVE(30, MOVE_STRING_SHOT),
+ LEVEL_UP_MOVE(30, MOVE_BUG_BITE),
LEVEL_UP_MOVE(33, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(38, MOVE_FEINT),
LEVEL_UP_MOVE(43, MOVE_SLASH),
LEVEL_UP_MOVE(46, MOVE_SCREECH),
LEVEL_UP_MOVE(49, MOVE_U_TURN),
- LEVEL_UP_MOVE(54, MOVE_AIR_SLASH),
- LEVEL_UP_MOVE(57, MOVE_BUG_BUZZ),
LEVEL_UP_END
};
#endif //P_GEN_4_CROSS_EVOS
@@ -5963,45 +5862,35 @@ static const struct LevelUpMove sGligarLevelUpLearnset[] = {
LEVEL_UP_MOVE(10, MOVE_KNOCK_OFF),
LEVEL_UP_MOVE(13, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE(16, MOVE_FURY_CUTTER),
- LEVEL_UP_MOVE(19, MOVE_MUD_SLAP),
+ LEVEL_UP_MOVE(19, MOVE_POISON_TAIL),
LEVEL_UP_MOVE(22, MOVE_ACROBATICS),
LEVEL_UP_MOVE(27, MOVE_SLASH),
LEVEL_UP_MOVE(30, MOVE_U_TURN),
LEVEL_UP_MOVE(35, MOVE_SCREECH),
LEVEL_UP_MOVE(40, MOVE_X_SCISSOR),
- LEVEL_UP_MOVE(45, MOVE_EARTHQUAKE),
+ LEVEL_UP_MOVE(45, MOVE_CRABHAMMER),
LEVEL_UP_MOVE(50, MOVE_SWORDS_DANCE),
- LEVEL_UP_MOVE(55, MOVE_GUILLOTINE),
LEVEL_UP_END
};
#if P_GEN_4_CROSS_EVOS
static const struct LevelUpMove sGliscorLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_GUILLOTINE),
+ LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK),
+ LEVEL_UP_MOVE( 1, MOVE_HARDEN),
+ LEVEL_UP_MOVE( 1, MOVE_POISON_JAB),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
- LEVEL_UP_MOVE( 1, MOVE_POISON_JAB),
- LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK),
- LEVEL_UP_MOVE( 1, MOVE_HARDEN),
- LEVEL_UP_MOVE( 1, MOVE_KNOCK_OFF),
- LEVEL_UP_MOVE( 1, MOVE_POISON_STING),
- LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
- LEVEL_UP_MOVE( 1, MOVE_SLASH),
- LEVEL_UP_MOVE( 4, MOVE_SAND_ATTACK),
- LEVEL_UP_MOVE( 7, MOVE_HARDEN),
- LEVEL_UP_MOVE(10, MOVE_KNOCK_OFF),
LEVEL_UP_MOVE(13, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE(16, MOVE_FURY_CUTTER),
- LEVEL_UP_MOVE(19, MOVE_MUD_SLAP),
+ LEVEL_UP_MOVE(19, MOVE_KNOCK_OFF),
LEVEL_UP_MOVE(22, MOVE_ACROBATICS),
LEVEL_UP_MOVE(27, MOVE_NIGHT_SLASH),
LEVEL_UP_MOVE(30, MOVE_U_TURN),
LEVEL_UP_MOVE(35, MOVE_SCREECH),
LEVEL_UP_MOVE(40, MOVE_X_SCISSOR),
- LEVEL_UP_MOVE(45, MOVE_EARTHQUAKE),
+ LEVEL_UP_MOVE(45, MOVE_CRABHAMMER),
LEVEL_UP_MOVE(50, MOVE_SWORDS_DANCE),
- LEVEL_UP_MOVE(55, MOVE_GUILLOTINE),
LEVEL_UP_END
};
#endif //P_GEN_4_CROSS_EVOS
@@ -6009,18 +5898,19 @@ static const struct LevelUpMove sGliscorLevelUpLearnset[] = {
#if P_FAMILY_SNUBBULL
static const struct LevelUpMove sSnubbullLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
- LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
- LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
- LEVEL_UP_MOVE( 1, MOVE_SCARY_FACE),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
+ LEVEL_UP_MOVE( 1, MOVE_GROWL),
+ LEVEL_UP_MOVE( 1, MOVE_SCARY_FACE),
LEVEL_UP_MOVE( 1, MOVE_CHARM),
+ LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
LEVEL_UP_MOVE( 7, MOVE_BITE),
LEVEL_UP_MOVE(13, MOVE_LICK),
LEVEL_UP_MOVE(19, MOVE_HEADBUTT),
LEVEL_UP_MOVE(25, MOVE_ROAR),
- LEVEL_UP_MOVE(31, MOVE_TAUNT),
+ LEVEL_UP_MOVE(31, MOVE_LAST_RESORT),
LEVEL_UP_MOVE(37, MOVE_PLAY_ROUGH),
LEVEL_UP_MOVE(43, MOVE_PAYBACK),
LEVEL_UP_MOVE(49, MOVE_CRUNCH),
@@ -6029,22 +5919,22 @@ static const struct LevelUpMove sSnubbullLevelUpLearnset[] = {
static const struct LevelUpMove sGranbullLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_OUTRAGE),
- LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
- LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
- LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
- LEVEL_UP_MOVE( 1, MOVE_SCARY_FACE),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
+ LEVEL_UP_MOVE( 1, MOVE_GROWL),
+ LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_SCARY_FACE),
+ LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
LEVEL_UP_MOVE( 1, MOVE_CHARM),
+ LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
LEVEL_UP_MOVE( 7, MOVE_BITE),
LEVEL_UP_MOVE(13, MOVE_LICK),
LEVEL_UP_MOVE(19, MOVE_HEADBUTT),
LEVEL_UP_MOVE(27, MOVE_ROAR),
- LEVEL_UP_MOVE(35, MOVE_TAUNT),
+ LEVEL_UP_MOVE(35, MOVE_LAST_RESORT),
LEVEL_UP_MOVE(43, MOVE_PLAY_ROUGH),
LEVEL_UP_MOVE(51, MOVE_PAYBACK),
LEVEL_UP_MOVE(59, MOVE_CRUNCH),
- LEVEL_UP_MOVE(67, MOVE_OUTRAGE),
LEVEL_UP_END
};
#endif //P_FAMILY_SNUBBULL
@@ -6220,10 +6110,10 @@ static const struct LevelUpMove sSneaselHisuianLevelUpLearnset[] = {
static const struct LevelUpMove sSneaslerLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_DIRE_CLAW),
- LEVEL_UP_MOVE( 1, MOVE_FLING),
+ LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_ROCK_SMASH),
- LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
+ LEVEL_UP_MOVE( 1, MOVE_FLING),
LEVEL_UP_MOVE( 6, MOVE_TAUNT),
LEVEL_UP_MOVE(12, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE(18, MOVE_METAL_CLAW),
@@ -6304,6 +6194,7 @@ static const struct LevelUpMove sUrsalunaLevelUpLearnset[] = {
};
static const struct LevelUpMove sUrsalunaBloodmoonLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_MOONLIGHT),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_LICK),
@@ -6327,14 +6218,14 @@ static const struct LevelUpMove sUrsalunaBloodmoonLevelUpLearnset[] = {
#if P_FAMILY_SLUGMA
static const struct LevelUpMove sSlugmaLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_YAWN),
LEVEL_UP_MOVE( 1, MOVE_SMOG),
+ LEVEL_UP_MOVE( 1, MOVE_YAWN),
LEVEL_UP_MOVE( 6, MOVE_EMBER),
LEVEL_UP_MOVE( 8, MOVE_ROCK_THROW),
LEVEL_UP_MOVE(13, MOVE_HARDEN),
- LEVEL_UP_MOVE(15, MOVE_INCINERATE),
LEVEL_UP_MOVE(20, MOVE_CLEAR_SMOG),
LEVEL_UP_MOVE(22, MOVE_ANCIENT_POWER),
+ LEVEL_UP_MOVE(27, MOVE_INCINERATE),
LEVEL_UP_MOVE(29, MOVE_ROCK_SLIDE),
LEVEL_UP_MOVE(34, MOVE_LAVA_PLUME),
LEVEL_UP_MOVE(36, MOVE_AMNESIA),
@@ -6347,25 +6238,21 @@ static const struct LevelUpMove sSlugmaLevelUpLearnset[] = {
static const struct LevelUpMove sMagcargoLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_SHELL_SMASH),
- LEVEL_UP_MOVE( 1, MOVE_SHELL_SMASH),
- LEVEL_UP_MOVE( 1, MOVE_EARTH_POWER),
- LEVEL_UP_MOVE( 1, MOVE_YAWN),
- LEVEL_UP_MOVE( 1, MOVE_SMOG),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW),
- LEVEL_UP_MOVE( 6, MOVE_EMBER),
- LEVEL_UP_MOVE( 8, MOVE_ROCK_THROW),
+ LEVEL_UP_MOVE( 1, MOVE_SMOG),
+ LEVEL_UP_MOVE( 1, MOVE_YAWN),
+ LEVEL_UP_MOVE( 1, MOVE_EARTH_POWER),
LEVEL_UP_MOVE(13, MOVE_HARDEN),
- LEVEL_UP_MOVE(15, MOVE_INCINERATE),
LEVEL_UP_MOVE(20, MOVE_CLEAR_SMOG),
LEVEL_UP_MOVE(22, MOVE_ANCIENT_POWER),
+ LEVEL_UP_MOVE(27, MOVE_INCINERATE),
LEVEL_UP_MOVE(29, MOVE_ROCK_SLIDE),
LEVEL_UP_MOVE(34, MOVE_LAVA_PLUME),
LEVEL_UP_MOVE(36, MOVE_AMNESIA),
LEVEL_UP_MOVE(43, MOVE_BODY_SLAM),
LEVEL_UP_MOVE(47, MOVE_RECOVER),
LEVEL_UP_MOVE(54, MOVE_FLAMETHROWER),
- LEVEL_UP_MOVE(58, MOVE_EARTH_POWER),
LEVEL_UP_END
};
#endif //P_FAMILY_SLUGMA
@@ -6389,12 +6276,11 @@ static const struct LevelUpMove sSwinubLevelUpLearnset[] = {
static const struct LevelUpMove sPiloswineLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_ICE_FANG),
- LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
- LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
- LEVEL_UP_MOVE( 1, MOVE_MUD_SLAP),
- LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW),
LEVEL_UP_MOVE( 1, MOVE_FLAIL),
+ LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW),
+ LEVEL_UP_MOVE( 1, MOVE_MUD_SLAP),
+ LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(15, MOVE_ICE_SHARD),
LEVEL_UP_MOVE(20, MOVE_MIST),
LEVEL_UP_MOVE(25, MOVE_ENDURE),
@@ -6410,13 +6296,12 @@ static const struct LevelUpMove sPiloswineLevelUpLearnset[] = {
#if P_GEN_4_CROSS_EVOS
static const struct LevelUpMove sMamoswineLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_DOUBLE_HIT),
- LEVEL_UP_MOVE( 1, MOVE_DOUBLE_HIT),
- LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
- LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
- LEVEL_UP_MOVE( 1, MOVE_MUD_SLAP),
- LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW),
LEVEL_UP_MOVE( 1, MOVE_FLAIL),
+ LEVEL_UP_MOVE( 1, MOVE_POWDER_SNOW),
+ LEVEL_UP_MOVE( 1, MOVE_MUD_SLAP),
+ LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER),
+ LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
LEVEL_UP_MOVE(15, MOVE_ICE_SHARD),
LEVEL_UP_MOVE(20, MOVE_MIST),
LEVEL_UP_MOVE(25, MOVE_ENDURE),
@@ -6581,8 +6466,8 @@ static const struct LevelUpMove sMantineLevelUpLearnset[] = {
#if P_FAMILY_SKARMORY
static const struct LevelUpMove sSkarmoryLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_PECK),
LEVEL_UP_MOVE( 1, MOVE_LEER),
+ LEVEL_UP_MOVE( 1, MOVE_PECK),
LEVEL_UP_MOVE( 4, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE( 8, MOVE_FURY_ATTACK),
LEVEL_UP_MOVE(12, MOVE_METAL_CLAW),
@@ -6590,7 +6475,7 @@ static const struct LevelUpMove sSkarmoryLevelUpLearnset[] = {
LEVEL_UP_MOVE(20, MOVE_WING_ATTACK),
LEVEL_UP_MOVE(24, MOVE_SLASH),
LEVEL_UP_MOVE(28, MOVE_STEEL_WING),
- LEVEL_UP_MOVE(32, MOVE_AUTOTOMIZE),
+ LEVEL_UP_MOVE(32, MOVE_PAYBACK),
LEVEL_UP_MOVE(36, MOVE_DRILL_PECK),
LEVEL_UP_MOVE(40, MOVE_METAL_SOUND),
LEVEL_UP_MOVE(44, MOVE_SPIKES),
@@ -6723,6 +6608,7 @@ static const struct LevelUpMove sWyrdeerLevelUpLearnset[] = {
#if P_FAMILY_SMEARGLE
static const struct LevelUpMove sSmeargleLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SKETCH),
LEVEL_UP_MOVE(11, MOVE_SKETCH),
LEVEL_UP_MOVE(21, MOVE_SKETCH),
LEVEL_UP_MOVE(31, MOVE_SKETCH),
@@ -6757,10 +6643,10 @@ static const struct LevelUpMove sMiltankLevelUpLearnset[] = {
#if P_FAMILY_RAIKOU
static const struct LevelUpMove sRaikouLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_EXTREME_SPEED),
- LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_CHARGE),
+ LEVEL_UP_MOVE( 1, MOVE_EXTREME_SPEED),
+ LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 6, MOVE_SPARK),
LEVEL_UP_MOVE(12, MOVE_BITE),
@@ -6783,9 +6669,9 @@ static const struct LevelUpMove sRaikouLevelUpLearnset[] = {
static const struct LevelUpMove sEnteiLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_SACRED_FIRE),
LEVEL_UP_MOVE( 1, MOVE_EXTREME_SPEED),
- LEVEL_UP_MOVE( 1, MOVE_EMBER),
- LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_STOMP),
+ LEVEL_UP_MOVE( 1, MOVE_LEER),
+ LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_SMOKESCREEN),
LEVEL_UP_MOVE( 6, MOVE_FLAME_WHEEL),
LEVEL_UP_MOVE(12, MOVE_BITE),
@@ -6806,12 +6692,12 @@ static const struct LevelUpMove sEnteiLevelUpLearnset[] = {
#if P_FAMILY_SUICUNE
static const struct LevelUpMove sSuicuneLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_SHEER_COLD),
LEVEL_UP_MOVE( 1, MOVE_EXTREME_SPEED),
- LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
- LEVEL_UP_MOVE( 1, MOVE_LEER),
+ LEVEL_UP_MOVE( 1, MOVE_SHEER_COLD),
LEVEL_UP_MOVE( 1, MOVE_GUST),
+ LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_MIST),
+ LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
LEVEL_UP_MOVE( 6, MOVE_WATER_PULSE),
LEVEL_UP_MOVE(12, MOVE_BITE),
LEVEL_UP_MOVE(18, MOVE_CALM_MIND),
@@ -6903,8 +6789,8 @@ static const struct LevelUpMove sLugiaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_DRAGON_RUSH),
LEVEL_UP_MOVE( 1, MOVE_GUST),
LEVEL_UP_MOVE( 1, MOVE_WHIRLWIND),
- LEVEL_UP_MOVE( 1, MOVE_WEATHER_BALL),
LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER),
+ LEVEL_UP_MOVE( 1, MOVE_WEATHER_BALL),
LEVEL_UP_MOVE( 9, MOVE_MIST),
LEVEL_UP_MOVE(18, MOVE_SAFEGUARD),
LEVEL_UP_MOVE(27, MOVE_CALM_MIND),
@@ -6923,8 +6809,8 @@ static const struct LevelUpMove sLugiaLevelUpLearnset[] = {
static const struct LevelUpMove sHoOhLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_GUST),
LEVEL_UP_MOVE( 1, MOVE_WHIRLWIND),
- LEVEL_UP_MOVE( 1, MOVE_WEATHER_BALL),
LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER),
+ LEVEL_UP_MOVE( 1, MOVE_WEATHER_BALL),
LEVEL_UP_MOVE( 9, MOVE_LIFE_DEW),
LEVEL_UP_MOVE(18, MOVE_SAFEGUARD),
LEVEL_UP_MOVE(27, MOVE_CALM_MIND),
@@ -6935,7 +6821,7 @@ static const struct LevelUpMove sHoOhLevelUpLearnset[] = {
LEVEL_UP_MOVE(72, MOVE_FIRE_BLAST),
LEVEL_UP_MOVE(81, MOVE_FUTURE_SIGHT),
LEVEL_UP_MOVE(90, MOVE_SKY_ATTACK),
- LEVEL_UP_MOVE(99, MOVE_BURN_UP),
+ LEVEL_UP_MOVE(99, MOVE_OVERHEAT),
LEVEL_UP_END
};
#endif //P_FAMILY_HO_OH
@@ -6979,14 +6865,14 @@ static const struct LevelUpMove sTreeckoLevelUpLearnset[] = {
};
static const struct LevelUpMove sGrovyleLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_FURY_CUTTER),
LEVEL_UP_MOVE( 1, MOVE_FALSE_SWIPE),
+ LEVEL_UP_MOVE( 1, MOVE_FURY_CUTTER),
LEVEL_UP_MOVE( 1, MOVE_X_SCISSOR),
LEVEL_UP_MOVE( 1, MOVE_ENERGY_BALL),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_LEER),
- LEVEL_UP_MOVE( 1, MOVE_LEAFAGE),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
+ LEVEL_UP_MOVE( 1, MOVE_LEAFAGE),
LEVEL_UP_MOVE( 9, MOVE_MEGA_DRAIN),
LEVEL_UP_MOVE(12, MOVE_DETECT),
LEVEL_UP_MOVE(15, MOVE_QUICK_GUARD),
@@ -7002,16 +6888,16 @@ static const struct LevelUpMove sGrovyleLevelUpLearnset[] = {
};
static const struct LevelUpMove sSceptileLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_DUAL_CHOP),
- LEVEL_UP_MOVE( 1, MOVE_DUAL_CHOP),
- LEVEL_UP_MOVE( 1, MOVE_FURY_CUTTER),
+ LEVEL_UP_MOVE( 0, MOVE_LEAF_BLADE),
LEVEL_UP_MOVE( 1, MOVE_FALSE_SWIPE),
+ LEVEL_UP_MOVE( 1, MOVE_FURY_CUTTER),
LEVEL_UP_MOVE( 1, MOVE_X_SCISSOR),
LEVEL_UP_MOVE( 1, MOVE_ENERGY_BALL),
+ LEVEL_UP_MOVE( 1, MOVE_SHED_TAIL),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_LEER),
- LEVEL_UP_MOVE( 1, MOVE_LEAFAGE),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
+ LEVEL_UP_MOVE( 1, MOVE_LEAFAGE),
LEVEL_UP_MOVE( 5, MOVE_MEGA_DRAIN),
LEVEL_UP_MOVE(12, MOVE_DETECT),
LEVEL_UP_MOVE(15, MOVE_QUICK_GUARD),
@@ -7019,10 +6905,9 @@ static const struct LevelUpMove sSceptileLevelUpLearnset[] = {
LEVEL_UP_MOVE(25, MOVE_GIGA_DRAIN),
LEVEL_UP_MOVE(30, MOVE_SLAM),
LEVEL_UP_MOVE(35, MOVE_DOUBLE_TEAM),
- LEVEL_UP_MOVE(42, MOVE_LEAF_BLADE),
- LEVEL_UP_MOVE(49, MOVE_SCREECH),
- LEVEL_UP_MOVE(56, MOVE_ENDEAVOR),
- LEVEL_UP_MOVE(63, MOVE_LEAF_STORM),
+ LEVEL_UP_MOVE(42, MOVE_SCREECH),
+ LEVEL_UP_MOVE(49, MOVE_ENDEAVOR),
+ LEVEL_UP_MOVE(56, MOVE_LEAF_STORM),
LEVEL_UP_END
};
#endif //P_FAMILY_TREECKO
@@ -7049,7 +6934,6 @@ static const struct LevelUpMove sTorchicLevelUpLearnset[] = {
static const struct LevelUpMove sCombuskenLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_DOUBLE_KICK),
- LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK),
LEVEL_UP_MOVE( 1, MOVE_FLAMETHROWER),
LEVEL_UP_MOVE( 1, MOVE_FEATHER_DANCE),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
@@ -7071,15 +6955,14 @@ static const struct LevelUpMove sCombuskenLevelUpLearnset[] = {
};
static const struct LevelUpMove sBlazikenLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_CLOSE_COMBAT),
- LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK),
+ LEVEL_UP_MOVE( 0, MOVE_BLAZE_KICK),
LEVEL_UP_MOVE( 1, MOVE_FIRE_PUNCH),
- LEVEL_UP_MOVE( 1, MOVE_BRAVE_BIRD),
+ LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_FLAMETHROWER),
LEVEL_UP_MOVE( 1, MOVE_FEATHER_DANCE),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
+ LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
- LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 9, MOVE_FLAME_CHARGE),
LEVEL_UP_MOVE(12, MOVE_DETECT),
@@ -7088,10 +6971,10 @@ static const struct LevelUpMove sBlazikenLevelUpLearnset[] = {
LEVEL_UP_MOVE(25, MOVE_SLASH),
LEVEL_UP_MOVE(30, MOVE_BOUNCE),
LEVEL_UP_MOVE(35, MOVE_FOCUS_ENERGY),
- LEVEL_UP_MOVE(42, MOVE_BLAZE_KICK),
- LEVEL_UP_MOVE(49, MOVE_BULK_UP),
- LEVEL_UP_MOVE(56, MOVE_REVERSAL),
- LEVEL_UP_MOVE(63, MOVE_FLARE_BLITZ),
+ LEVEL_UP_MOVE(42, MOVE_BULK_UP),
+ LEVEL_UP_MOVE(49, MOVE_REVERSAL),
+ LEVEL_UP_MOVE(56, MOVE_FLARE_BLITZ),
+ LEVEL_UP_MOVE(63, MOVE_BRAVE_BIRD),
LEVEL_UP_END
};
#endif //P_FAMILY_TORCHIC
@@ -7118,13 +7001,10 @@ static const struct LevelUpMove sMudkipLevelUpLearnset[] = {
static const struct LevelUpMove sMarshtompLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_MUD_SHOT),
- LEVEL_UP_MOVE( 1, MOVE_MUD_SHOT),
- LEVEL_UP_MOVE( 1, MOVE_EARTHQUAKE),
- LEVEL_UP_MOVE( 1, MOVE_SURF),
+ LEVEL_UP_MOVE( 1, MOVE_ROCK_SMASH),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
- LEVEL_UP_MOVE( 1, MOVE_ROCK_SMASH),
LEVEL_UP_MOVE( 9, MOVE_ROCK_THROW),
LEVEL_UP_MOVE(12, MOVE_PROTECT),
LEVEL_UP_MOVE(15, MOVE_SUPERSONIC),
@@ -7140,14 +7020,14 @@ static const struct LevelUpMove sMarshtompLevelUpLearnset[] = {
};
static const struct LevelUpMove sSwampertLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_MUD_SHOT),
- LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM),
- LEVEL_UP_MOVE( 1, MOVE_EARTHQUAKE),
LEVEL_UP_MOVE( 1, MOVE_SURF),
+ LEVEL_UP_MOVE( 1, MOVE_EARTHQUAKE),
+ LEVEL_UP_MOVE( 1, MOVE_ROCK_SMASH),
+ LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
- LEVEL_UP_MOVE( 1, MOVE_ROCK_SMASH),
+ LEVEL_UP_MOVE( 1, MOVE_MUD_SHOT),
LEVEL_UP_MOVE( 9, MOVE_ROCK_THROW),
LEVEL_UP_MOVE(12, MOVE_PROTECT),
LEVEL_UP_MOVE(15, MOVE_SUPERSONIC),
@@ -7169,44 +7049,37 @@ static const struct LevelUpMove sPoochyenaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 4, MOVE_HOWL),
LEVEL_UP_MOVE( 7, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE(10, MOVE_BITE),
- LEVEL_UP_MOVE(13, MOVE_MUD_SLAP),
+ LEVEL_UP_MOVE(13, MOVE_LEER),
LEVEL_UP_MOVE(16, MOVE_ROAR),
LEVEL_UP_MOVE(19, MOVE_SWAGGER),
LEVEL_UP_MOVE(22, MOVE_ASSURANCE),
LEVEL_UP_MOVE(25, MOVE_SCARY_FACE),
- LEVEL_UP_MOVE(28, MOVE_HEADBUTT),
- LEVEL_UP_MOVE(31, MOVE_TAUNT),
- LEVEL_UP_MOVE(34, MOVE_CRUNCH),
- LEVEL_UP_MOVE(37, MOVE_YAWN),
- LEVEL_UP_MOVE(40, MOVE_TAKE_DOWN),
- LEVEL_UP_MOVE(43, MOVE_SUCKER_PUNCH),
- LEVEL_UP_MOVE(46, MOVE_PLAY_ROUGH),
+ LEVEL_UP_MOVE(28, MOVE_TAUNT),
+ LEVEL_UP_MOVE(31, MOVE_CRUNCH),
+ LEVEL_UP_MOVE(34, MOVE_YAWN),
+ LEVEL_UP_MOVE(36, MOVE_TAKE_DOWN),
+ LEVEL_UP_MOVE(40, MOVE_SUCKER_PUNCH),
+ LEVEL_UP_MOVE(44, MOVE_PLAY_ROUGH),
LEVEL_UP_END
};
static const struct LevelUpMove sMightyenaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_SNARL),
- LEVEL_UP_MOVE( 1, MOVE_SNARL),
+ LEVEL_UP_MOVE( 1, MOVE_CRUNCH),
LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
- LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
- LEVEL_UP_MOVE( 1, MOVE_CRUNCH),
+ LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
LEVEL_UP_MOVE( 1, MOVE_THIEF),
- LEVEL_UP_MOVE( 1, MOVE_TACKLE),
- LEVEL_UP_MOVE( 1, MOVE_HOWL),
LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_BITE),
- LEVEL_UP_MOVE( 4, MOVE_HOWL),
- LEVEL_UP_MOVE( 7, MOVE_SAND_ATTACK),
- LEVEL_UP_MOVE(10, MOVE_BITE),
- LEVEL_UP_MOVE(13, MOVE_MUD_SLAP),
+ LEVEL_UP_MOVE( 1, MOVE_TACKLE),
+ LEVEL_UP_MOVE(13, MOVE_HOWL),
+ LEVEL_UP_MOVE(13, MOVE_LEER),
LEVEL_UP_MOVE(16, MOVE_ROAR),
LEVEL_UP_MOVE(20, MOVE_SWAGGER),
LEVEL_UP_MOVE(24, MOVE_ASSURANCE),
LEVEL_UP_MOVE(28, MOVE_SCARY_FACE),
- LEVEL_UP_MOVE(32, MOVE_HEADBUTT),
LEVEL_UP_MOVE(36, MOVE_TAUNT),
- LEVEL_UP_MOVE(40, MOVE_CRUNCH),
LEVEL_UP_MOVE(44, MOVE_YAWN),
LEVEL_UP_MOVE(48, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(52, MOVE_SUCKER_PUNCH),
@@ -7397,15 +7270,15 @@ static const struct LevelUpMove sDustoxLevelUpLearnset[] = {
#if P_FAMILY_LOTAD
static const struct LevelUpMove sLotadLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
+ LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
LEVEL_UP_MOVE( 3, MOVE_ABSORB),
LEVEL_UP_MOVE( 6, MOVE_WATER_GUN),
LEVEL_UP_MOVE( 9, MOVE_MIST),
LEVEL_UP_MOVE(12, MOVE_MEGA_DRAIN),
LEVEL_UP_MOVE(16, MOVE_FLAIL),
LEVEL_UP_MOVE(20, MOVE_BUBBLE_BEAM),
- LEVEL_UP_MOVE(24, MOVE_NATURE_POWER),
+ LEVEL_UP_MOVE(24, MOVE_LEECH_SEED),
LEVEL_UP_MOVE(28, MOVE_GIGA_DRAIN),
LEVEL_UP_MOVE(33, MOVE_RAIN_DANCE),
LEVEL_UP_MOVE(38, MOVE_ZEN_HEADBUTT),
@@ -7414,21 +7287,20 @@ static const struct LevelUpMove sLotadLevelUpLearnset[] = {
};
static const struct LevelUpMove sLombreLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_GROWL),
+ LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
+ LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
LEVEL_UP_MOVE( 1, MOVE_TEETER_DANCE),
- LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT),
+ LEVEL_UP_MOVE( 1, MOVE_ABSORB),
LEVEL_UP_MOVE( 1, MOVE_KNOCK_OFF),
+ LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT),
LEVEL_UP_MOVE( 1, MOVE_FLAIL),
- LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
- LEVEL_UP_MOVE( 1, MOVE_GROWL),
- LEVEL_UP_MOVE( 1, MOVE_ABSORB),
- LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
LEVEL_UP_MOVE( 9, MOVE_MIST),
LEVEL_UP_MOVE(12, MOVE_MEGA_DRAIN),
LEVEL_UP_MOVE(18, MOVE_FURY_SWIPES),
LEVEL_UP_MOVE(24, MOVE_BUBBLE_BEAM),
- LEVEL_UP_MOVE(30, MOVE_NATURE_POWER),
+ LEVEL_UP_MOVE(30, MOVE_LEECH_SEED),
LEVEL_UP_MOVE(36, MOVE_GIGA_DRAIN),
- LEVEL_UP_MOVE(43, MOVE_RAIN_DANCE),
LEVEL_UP_MOVE(50, MOVE_ZEN_HEADBUTT),
LEVEL_UP_MOVE(57, MOVE_ENERGY_BALL),
LEVEL_UP_MOVE(64, MOVE_HYDRO_PUMP),
@@ -7436,24 +7308,22 @@ static const struct LevelUpMove sLombreLevelUpLearnset[] = {
};
static const struct LevelUpMove sLudicoloLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_TEETER_DANCE),
- LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT),
- LEVEL_UP_MOVE( 1, MOVE_KNOCK_OFF),
- LEVEL_UP_MOVE( 1, MOVE_FLAIL),
+ LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_MIST),
+ LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
+ LEVEL_UP_MOVE( 1, MOVE_HYDRO_PUMP),
+ LEVEL_UP_MOVE( 1, MOVE_ABSORB),
LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN),
LEVEL_UP_MOVE( 1, MOVE_FURY_SWIPES),
- LEVEL_UP_MOVE( 1, MOVE_BUBBLE_BEAM),
- LEVEL_UP_MOVE( 1, MOVE_NATURE_POWER),
- LEVEL_UP_MOVE( 1, MOVE_GIGA_DRAIN),
- LEVEL_UP_MOVE( 1, MOVE_RAIN_DANCE),
- LEVEL_UP_MOVE( 1, MOVE_ZEN_HEADBUTT),
- LEVEL_UP_MOVE( 1, MOVE_ENERGY_BALL),
- LEVEL_UP_MOVE( 1, MOVE_HYDRO_PUMP),
+ LEVEL_UP_MOVE( 1, MOVE_FLAIL),
+ LEVEL_UP_MOVE( 1, MOVE_KNOCK_OFF),
+ LEVEL_UP_MOVE( 1, MOVE_TEETER_DANCE),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
- LEVEL_UP_MOVE( 1, MOVE_GROWL),
- LEVEL_UP_MOVE( 1, MOVE_ABSORB),
- LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
+ LEVEL_UP_MOVE( 1, MOVE_ENERGY_BALL),
+ LEVEL_UP_MOVE( 1, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT),
+ LEVEL_UP_MOVE( 1, MOVE_RAIN_DANCE),
+ LEVEL_UP_MOVE( 1, MOVE_BUBBLE_BEAM),
LEVEL_UP_END
};
#endif //P_FAMILY_LOTAD
@@ -7468,7 +7338,7 @@ static const struct LevelUpMove sSeedotLevelUpLearnset[] = {
LEVEL_UP_MOVE(12, MOVE_ROLLOUT),
LEVEL_UP_MOVE(15, MOVE_MEGA_DRAIN),
LEVEL_UP_MOVE(18, MOVE_PAYBACK),
- LEVEL_UP_MOVE(21, MOVE_NATURE_POWER),
+ LEVEL_UP_MOVE(21, MOVE_HEADBUTT),
LEVEL_UP_MOVE(24, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE(27, MOVE_SYNTHESIS),
LEVEL_UP_MOVE(30, MOVE_SUCKER_PUNCH),
@@ -7478,22 +7348,20 @@ static const struct LevelUpMove sSeedotLevelUpLearnset[] = {
static const struct LevelUpMove sNuzleafLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_RAZOR_LEAF),
- LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF),
- LEVEL_UP_MOVE( 1, MOVE_AIR_CUTTER),
- LEVEL_UP_MOVE( 1, MOVE_TORMENT),
- LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT),
- LEVEL_UP_MOVE( 1, MOVE_SWAGGER),
- LEVEL_UP_MOVE( 1, MOVE_SYNTHESIS),
- LEVEL_UP_MOVE( 1, MOVE_EXPLOSION),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
- LEVEL_UP_MOVE( 1, MOVE_HARDEN),
LEVEL_UP_MOVE( 1, MOVE_ABSORB),
+ LEVEL_UP_MOVE( 1, MOVE_HARDEN),
+ LEVEL_UP_MOVE( 1, MOVE_EXPLOSION),
+ LEVEL_UP_MOVE( 1, MOVE_SWAGGER),
+ LEVEL_UP_MOVE( 1, MOVE_AIR_CUTTER),
+ LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT),
+ LEVEL_UP_MOVE( 1, MOVE_TORMENT),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
LEVEL_UP_MOVE( 9, MOVE_GROWTH),
LEVEL_UP_MOVE(12, MOVE_ROLLOUT),
LEVEL_UP_MOVE(18, MOVE_MEGA_DRAIN),
LEVEL_UP_MOVE(24, MOVE_PAYBACK),
- LEVEL_UP_MOVE(30, MOVE_NATURE_POWER),
+ LEVEL_UP_MOVE(30, MOVE_SYNTHESIS),
LEVEL_UP_MOVE(36, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE(43, MOVE_EXTRASENSORY),
LEVEL_UP_MOVE(50, MOVE_SUCKER_PUNCH),
@@ -7502,30 +7370,28 @@ static const struct LevelUpMove sNuzleafLevelUpLearnset[] = {
};
static const struct LevelUpMove sShiftryLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_LEAF_TORNADO),
- LEVEL_UP_MOVE( 1, MOVE_LEAF_TORNADO),
- LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF),
- LEVEL_UP_MOVE( 1, MOVE_AIR_CUTTER),
- LEVEL_UP_MOVE( 1, MOVE_TORMENT),
- LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT),
- LEVEL_UP_MOVE( 1, MOVE_SWAGGER),
+ LEVEL_UP_MOVE( 0, MOVE_LEAF_BLADE),
LEVEL_UP_MOVE( 1, MOVE_WHIRLWIND),
- LEVEL_UP_MOVE( 1, MOVE_HURRICANE),
- LEVEL_UP_MOVE( 1, MOVE_SYNTHESIS),
- LEVEL_UP_MOVE( 1, MOVE_EXPLOSION),
+ LEVEL_UP_MOVE( 1, MOVE_TACKLE),
+ LEVEL_UP_MOVE( 1, MOVE_ABSORB),
+ LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN),
LEVEL_UP_MOVE( 1, MOVE_GROWTH),
+ LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF),
+ LEVEL_UP_MOVE( 1, MOVE_HARDEN),
+ LEVEL_UP_MOVE( 1, MOVE_EXPLOSION),
LEVEL_UP_MOVE( 1, MOVE_ROLLOUT),
- LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN),
- LEVEL_UP_MOVE( 1, MOVE_PAYBACK),
- LEVEL_UP_MOVE( 1, MOVE_NATURE_POWER),
- LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
+ LEVEL_UP_MOVE( 1, MOVE_SWAGGER),
+ LEVEL_UP_MOVE( 1, MOVE_SYNTHESIS),
+ LEVEL_UP_MOVE( 1, MOVE_BEAT_UP),
+ LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT),
+ LEVEL_UP_MOVE( 1, MOVE_TORMENT),
+ LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
LEVEL_UP_MOVE( 1, MOVE_EXTRASENSORY),
LEVEL_UP_MOVE( 1, MOVE_SUCKER_PUNCH),
- LEVEL_UP_MOVE( 1, MOVE_LEAF_BLADE),
- LEVEL_UP_MOVE( 1, MOVE_TACKLE),
- LEVEL_UP_MOVE( 1, MOVE_HARDEN),
- LEVEL_UP_MOVE( 1, MOVE_ABSORB),
- LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
+ LEVEL_UP_MOVE( 1, MOVE_AIR_CUTTER),
+ LEVEL_UP_MOVE( 1, MOVE_PAYBACK),
+ LEVEL_UP_MOVE( 1, MOVE_HURRICANE),
LEVEL_UP_END
};
#endif //P_FAMILY_SEEDOT
@@ -7767,6 +7633,7 @@ static const struct LevelUpMove sShroomishLevelUpLearnset[] = {
static const struct LevelUpMove sBreloomLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_MACH_PUNCH),
+ LEVEL_UP_MOVE( 1, MOVE_SPORE),
LEVEL_UP_MOVE( 1, MOVE_STUN_SPORE),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_ABSORB),
@@ -8024,27 +7891,21 @@ static const struct LevelUpMove sNosepassLevelUpLearnset[] = {
LEVEL_UP_MOVE(34, MOVE_SANDSTORM),
LEVEL_UP_MOVE(37, MOVE_EARTH_POWER),
LEVEL_UP_MOVE(40, MOVE_STONE_EDGE),
- LEVEL_UP_MOVE(43, MOVE_LOCK_ON),
LEVEL_UP_MOVE(43, MOVE_ZAP_CANNON),
+ LEVEL_UP_MOVE(43, MOVE_LOCK_ON),
LEVEL_UP_END
};
#if P_GEN_4_CROSS_EVOS
static const struct LevelUpMove sProbopassLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_TRI_ATTACK),
- LEVEL_UP_MOVE( 1, MOVE_TRI_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_MAGNETIC_FLUX),
LEVEL_UP_MOVE( 1, MOVE_MAGNET_RISE),
LEVEL_UP_MOVE( 1, MOVE_GRAVITY),
+ LEVEL_UP_MOVE( 1, MOVE_BLOCK),
LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD),
- LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE),
- LEVEL_UP_MOVE( 1, MOVE_BLOCK),
- LEVEL_UP_MOVE( 1, MOVE_HARDEN),
- LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW),
- LEVEL_UP_MOVE( 4, MOVE_IRON_DEFENSE),
- LEVEL_UP_MOVE( 7, MOVE_BLOCK),
- LEVEL_UP_MOVE(10, MOVE_SMACK_DOWN),
+ LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE(13, MOVE_THUNDER_WAVE),
LEVEL_UP_MOVE(16, MOVE_REST),
LEVEL_UP_MOVE(19, MOVE_SPARK),
@@ -8055,9 +7916,8 @@ static const struct LevelUpMove sProbopassLevelUpLearnset[] = {
LEVEL_UP_MOVE(34, MOVE_SANDSTORM),
LEVEL_UP_MOVE(37, MOVE_EARTH_POWER),
LEVEL_UP_MOVE(40, MOVE_STONE_EDGE),
- LEVEL_UP_MOVE(43, MOVE_LOCK_ON),
LEVEL_UP_MOVE(43, MOVE_ZAP_CANNON),
- LEVEL_UP_MOVE(50, MOVE_BODY_PRESS),
+ LEVEL_UP_MOVE(43, MOVE_LOCK_ON),
LEVEL_UP_END
};
#endif //P_GEN_4_CROSS_EVOS
@@ -8303,19 +8163,18 @@ static const struct LevelUpMove sManectricLevelUpLearnset[] = {
#if P_FAMILY_PLUSLE
static const struct LevelUpMove sPlusleLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_NUZZLE),
+ LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE),
- LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 4, MOVE_HELPING_HAND),
LEVEL_UP_MOVE( 7, MOVE_SPARK),
LEVEL_UP_MOVE(10, MOVE_ENCORE),
- LEVEL_UP_MOVE(13, MOVE_SKILL_SWAP),
+ LEVEL_UP_MOVE(13, MOVE_SWITCHEROO),
LEVEL_UP_MOVE(16, MOVE_SWIFT),
LEVEL_UP_MOVE(19, MOVE_ELECTRO_BALL),
LEVEL_UP_MOVE(22, MOVE_COPYCAT),
- LEVEL_UP_MOVE(25, MOVE_CHARM),
- LEVEL_UP_MOVE(28, MOVE_CHARGE),
+ LEVEL_UP_MOVE(26, MOVE_CHARGE),
LEVEL_UP_MOVE(31, MOVE_DISCHARGE),
LEVEL_UP_MOVE(34, MOVE_BATON_PASS),
LEVEL_UP_MOVE(37, MOVE_AGILITY),
@@ -8330,10 +8189,10 @@ static const struct LevelUpMove sPlusleLevelUpLearnset[] = {
#if P_FAMILY_MINUN
static const struct LevelUpMove sMinunLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_NUZZLE),
+ LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE),
- LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 4, MOVE_HELPING_HAND),
LEVEL_UP_MOVE( 7, MOVE_SPARK),
LEVEL_UP_MOVE(10, MOVE_ENCORE),
@@ -8341,8 +8200,7 @@ static const struct LevelUpMove sMinunLevelUpLearnset[] = {
LEVEL_UP_MOVE(16, MOVE_SWIFT),
LEVEL_UP_MOVE(19, MOVE_ELECTRO_BALL),
LEVEL_UP_MOVE(22, MOVE_COPYCAT),
- LEVEL_UP_MOVE(25, MOVE_FAKE_TEARS),
- LEVEL_UP_MOVE(28, MOVE_CHARGE),
+ LEVEL_UP_MOVE(26, MOVE_CHARGE),
LEVEL_UP_MOVE(31, MOVE_DISCHARGE),
LEVEL_UP_MOVE(34, MOVE_BATON_PASS),
LEVEL_UP_MOVE(37, MOVE_AGILITY),
@@ -8356,7 +8214,6 @@ static const struct LevelUpMove sMinunLevelUpLearnset[] = {
#if P_FAMILY_VOLBEAT_ILLUMISE
static const struct LevelUpMove sVolbeatLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 5, MOVE_DOUBLE_TEAM),
LEVEL_UP_MOVE( 8, MOVE_CONFUSE_RAY),
@@ -8364,20 +8221,19 @@ static const struct LevelUpMove sVolbeatLevelUpLearnset[] = {
LEVEL_UP_MOVE(15, MOVE_STRUGGLE_BUG),
LEVEL_UP_MOVE(19, MOVE_MOONLIGHT),
LEVEL_UP_MOVE(22, MOVE_TAIL_GLOW),
- LEVEL_UP_MOVE(26, MOVE_ENCORE),
- LEVEL_UP_MOVE(29, MOVE_PROTECT),
- LEVEL_UP_MOVE(33, MOVE_ZEN_HEADBUTT),
- LEVEL_UP_MOVE(36, MOVE_HELPING_HAND),
- LEVEL_UP_MOVE(40, MOVE_BUG_BUZZ),
- LEVEL_UP_MOVE(43, MOVE_PLAY_ROUGH),
- LEVEL_UP_MOVE(47, MOVE_DOUBLE_EDGE),
- LEVEL_UP_MOVE(50, MOVE_INFESTATION),
+ LEVEL_UP_MOVE(26, MOVE_PROTECT),
+ LEVEL_UP_MOVE(29, MOVE_ZEN_HEADBUTT),
+ LEVEL_UP_MOVE(33, MOVE_HELPING_HAND),
+ LEVEL_UP_MOVE(36, MOVE_BUG_BUZZ),
+ LEVEL_UP_MOVE(40, MOVE_PLAY_ROUGH),
+ LEVEL_UP_MOVE(43, MOVE_DOUBLE_EDGE),
+ LEVEL_UP_MOVE(47, MOVE_INFESTATION),
LEVEL_UP_END
};
static const struct LevelUpMove sIllumiseLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
+ LEVEL_UP_MOVE( 1, MOVE_PLAY_NICE),
LEVEL_UP_MOVE( 5, MOVE_SWEET_SCENT),
LEVEL_UP_MOVE( 9, MOVE_CHARM),
LEVEL_UP_MOVE(12, MOVE_QUICK_ATTACK),
@@ -8390,8 +8246,7 @@ static const struct LevelUpMove sIllumiseLevelUpLearnset[] = {
LEVEL_UP_MOVE(36, MOVE_HELPING_HAND),
LEVEL_UP_MOVE(40, MOVE_BUG_BUZZ),
LEVEL_UP_MOVE(43, MOVE_PLAY_ROUGH),
- LEVEL_UP_MOVE(47, MOVE_COVET),
- LEVEL_UP_MOVE(50, MOVE_INFESTATION),
+ LEVEL_UP_MOVE(47, MOVE_INFESTATION),
LEVEL_UP_END
};
#endif //P_FAMILY_VOLBEAT_ILLUMISE
@@ -8704,7 +8559,6 @@ static const struct LevelUpMove sSpindaLevelUpLearnset[] = {
static const struct LevelUpMove sTrapinchLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
- LEVEL_UP_MOVE( 4, MOVE_LASER_FOCUS),
LEVEL_UP_MOVE( 8, MOVE_BITE),
LEVEL_UP_MOVE(12, MOVE_MUD_SLAP),
LEVEL_UP_MOVE(16, MOVE_SAND_TOMB),
@@ -8721,17 +8575,15 @@ static const struct LevelUpMove sTrapinchLevelUpLearnset[] = {
static const struct LevelUpMove sVibravaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_DRAGON_BREATH),
- LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH),
- LEVEL_UP_MOVE( 1, MOVE_LASER_FOCUS),
- LEVEL_UP_MOVE( 1, MOVE_BULLDOZE),
- LEVEL_UP_MOVE( 1, MOVE_DIG),
+ LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC),
+ LEVEL_UP_MOVE( 1, MOVE_FISSURE),
LEVEL_UP_MOVE( 1, MOVE_CRUNCH),
LEVEL_UP_MOVE( 1, MOVE_SUPERPOWER),
- LEVEL_UP_MOVE( 1, MOVE_FISSURE),
- LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
- LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC),
+ LEVEL_UP_MOVE( 1, MOVE_BULLDOZE),
+ LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_BITE),
+ LEVEL_UP_MOVE( 1, MOVE_DIG),
LEVEL_UP_MOVE(12, MOVE_MUD_SLAP),
LEVEL_UP_MOVE(16, MOVE_SAND_TOMB),
LEVEL_UP_MOVE(20, MOVE_DRAGON_TAIL),
@@ -8748,21 +8600,18 @@ static const struct LevelUpMove sVibravaLevelUpLearnset[] = {
static const struct LevelUpMove sFlygonLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_DRAGON_CLAW),
- LEVEL_UP_MOVE( 1, MOVE_OUTRAGE),
- LEVEL_UP_MOVE( 1, MOVE_DRAGON_CLAW),
- LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH),
- LEVEL_UP_MOVE( 1, MOVE_DRAGON_DANCE),
- LEVEL_UP_MOVE( 1, MOVE_FEINT),
- LEVEL_UP_MOVE( 1, MOVE_LASER_FOCUS),
- LEVEL_UP_MOVE( 1, MOVE_BULLDOZE),
+ LEVEL_UP_MOVE( 1, MOVE_BITE),
+ LEVEL_UP_MOVE( 1, MOVE_FISSURE),
LEVEL_UP_MOVE( 1, MOVE_DIG),
LEVEL_UP_MOVE( 1, MOVE_CRUNCH),
LEVEL_UP_MOVE( 1, MOVE_SUPERPOWER),
- LEVEL_UP_MOVE( 1, MOVE_FISSURE),
- LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
+ LEVEL_UP_MOVE( 1, MOVE_DRAGON_DANCE),
+ LEVEL_UP_MOVE( 1, MOVE_FEINT),
+ LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC),
- LEVEL_UP_MOVE( 1, MOVE_BITE),
+ LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH),
+ LEVEL_UP_MOVE( 1, MOVE_BULLDOZE),
LEVEL_UP_MOVE(12, MOVE_MUD_SLAP),
LEVEL_UP_MOVE(16, MOVE_SAND_TOMB),
LEVEL_UP_MOVE(20, MOVE_DRAGON_TAIL),
@@ -8864,6 +8713,18 @@ static const struct LevelUpMove sAltariaLevelUpLearnset[] = {
#if P_FAMILY_ZANGOOSE
static const struct LevelUpMove sZangooseLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK),
+ LEVEL_UP_MOVE( 1, MOVE_DISABLE),
+ LEVEL_UP_MOVE( 1, MOVE_COUNTER),
+ LEVEL_UP_MOVE( 1, MOVE_FURY_SWIPES),
+ LEVEL_UP_MOVE( 1, MOVE_CURSE),
+ LEVEL_UP_MOVE( 1, MOVE_FLAIL),
+ LEVEL_UP_MOVE( 1, MOVE_BELLY_DRUM),
+ LEVEL_UP_MOVE( 1, MOVE_FEINT),
+ LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE( 1, MOVE_DOUBLE_HIT),
+ LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD),
+ LEVEL_UP_MOVE( 1, MOVE_FINAL_GAMBIT),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 5, MOVE_QUICK_ATTACK),
@@ -9009,10 +8870,9 @@ static const struct LevelUpMove sCorphishLevelUpLearnset[] = {
static const struct LevelUpMove sCrawdauntLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_SWIFT),
- LEVEL_UP_MOVE( 1, MOVE_SWIFT),
+ LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
LEVEL_UP_MOVE( 1, MOVE_HARDEN),
- LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_TAUNT),
LEVEL_UP_MOVE(12, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE(16, MOVE_KNOCK_OFF),
@@ -9163,12 +9023,11 @@ static const struct LevelUpMove sFeebasLevelUpLearnset[] = {
static const struct LevelUpMove sMiloticLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_WATER_PULSE),
- LEVEL_UP_MOVE( 1, MOVE_WATER_PULSE),
- LEVEL_UP_MOVE( 1, MOVE_FLAIL),
- LEVEL_UP_MOVE( 1, MOVE_SPLASH),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_WRAP),
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
+ LEVEL_UP_MOVE( 1, MOVE_SPLASH),
+ LEVEL_UP_MOVE( 1, MOVE_FLAIL),
LEVEL_UP_MOVE( 4, MOVE_DISARMING_VOICE),
LEVEL_UP_MOVE( 8, MOVE_TWISTER),
LEVEL_UP_MOVE(12, MOVE_AQUA_RING),
@@ -9268,8 +9127,8 @@ static const struct LevelUpMove sBanetteLevelUpLearnset[] = {
#if P_FAMILY_DUSKULL
static const struct LevelUpMove sDuskullLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
LEVEL_UP_MOVE( 1, MOVE_LEER),
+ LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
LEVEL_UP_MOVE( 4, MOVE_DISABLE),
LEVEL_UP_MOVE( 8, MOVE_SHADOW_SNEAK),
LEVEL_UP_MOVE(12, MOVE_CONFUSE_RAY),
@@ -9286,16 +9145,15 @@ static const struct LevelUpMove sDuskullLevelUpLearnset[] = {
static const struct LevelUpMove sDusclopsLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_SHADOW_PUNCH),
- LEVEL_UP_MOVE( 1, MOVE_SHADOW_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_FIRE_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_ICE_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_PUNCH),
- LEVEL_UP_MOVE( 1, MOVE_GRAVITY),
LEVEL_UP_MOVE( 1, MOVE_BIND),
- LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_DISABLE),
LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK),
+ LEVEL_UP_MOVE( 1, MOVE_GRAVITY),
+ LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
LEVEL_UP_MOVE(12, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE(16, MOVE_NIGHT_SHADE),
LEVEL_UP_MOVE(20, MOVE_PAYBACK),
@@ -9310,16 +9168,16 @@ static const struct LevelUpMove sDusclopsLevelUpLearnset[] = {
#if P_GEN_4_CROSS_EVOS
static const struct LevelUpMove sDusknoirLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_SHADOW_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_FIRE_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_ICE_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_PUNCH),
- LEVEL_UP_MOVE( 1, MOVE_GRAVITY),
LEVEL_UP_MOVE( 1, MOVE_BIND),
- LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_DISABLE),
LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK),
+ LEVEL_UP_MOVE( 1, MOVE_GRAVITY),
+ LEVEL_UP_MOVE( 1, MOVE_SHADOW_PUNCH),
+ LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
LEVEL_UP_MOVE(12, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE(16, MOVE_NIGHT_SHADE),
LEVEL_UP_MOVE(20, MOVE_PAYBACK),
@@ -9372,18 +9230,13 @@ static const struct LevelUpMove sChinglingLevelUpLearnset[] = {
#endif //P_GEN_4_CROSS_EVOS
static const struct LevelUpMove sChimechoLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_HEALING_WISH),
LEVEL_UP_MOVE( 1, MOVE_WRAP),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
- LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
- LEVEL_UP_MOVE( 1, MOVE_LAST_RESORT),
- LEVEL_UP_MOVE( 1, MOVE_ENTRAINMENT),
- LEVEL_UP_MOVE( 4, MOVE_GROWL),
- LEVEL_UP_MOVE( 7, MOVE_ASTONISH),
- LEVEL_UP_MOVE(10, MOVE_CONFUSION),
+ LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
+ LEVEL_UP_MOVE( 1, MOVE_HEALING_WISH),
LEVEL_UP_MOVE(13, MOVE_YAWN),
- LEVEL_UP_MOVE(16, MOVE_LIGHT_SCREEN),
+ LEVEL_UP_MOVE(16, MOVE_STORED_POWER),
LEVEL_UP_MOVE(19, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(22, MOVE_EXTRASENSORY),
LEVEL_UP_MOVE(27, MOVE_HEAL_BELL),
@@ -9391,8 +9244,6 @@ static const struct LevelUpMove sChimechoLevelUpLearnset[] = {
LEVEL_UP_MOVE(37, MOVE_SAFEGUARD),
LEVEL_UP_MOVE(42, MOVE_DOUBLE_EDGE),
LEVEL_UP_MOVE(47, MOVE_HEAL_PULSE),
- LEVEL_UP_MOVE(52, MOVE_PSYCHIC),
- LEVEL_UP_MOVE(57, MOVE_HEALING_WISH),
LEVEL_UP_END
};
#endif //P_FAMILY_CHIMECHO
@@ -9709,12 +9560,11 @@ static const struct LevelUpMove sBeldumLevelUpLearnset[] = {
};
static const struct LevelUpMove sMetangLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 0, MOVE_METAL_CLAW),
LEVEL_UP_MOVE( 0, MOVE_CONFUSION),
- LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
- LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW),
- LEVEL_UP_MOVE( 1, MOVE_BULLET_PUNCH),
+ LEVEL_UP_MOVE( 0, MOVE_METAL_CLAW),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
+ LEVEL_UP_MOVE( 1, MOVE_BULLET_PUNCH),
+ LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS),
LEVEL_UP_MOVE( 6, MOVE_ZEN_HEADBUTT),
LEVEL_UP_MOVE(12, MOVE_MAGNET_RISE),
LEVEL_UP_MOVE(18, MOVE_FLASH_CANNON),
@@ -9730,11 +9580,12 @@ static const struct LevelUpMove sMetangLevelUpLearnset[] = {
static const struct LevelUpMove sMetagrossLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_HAMMER_ARM),
- LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM),
+ LEVEL_UP_MOVE( 1, MOVE_EXPLOSION),
+ LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS),
+ LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW),
LEVEL_UP_MOVE( 1, MOVE_BULLET_PUNCH),
- LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 6, MOVE_ZEN_HEADBUTT),
LEVEL_UP_MOVE(12, MOVE_MAGNET_RISE),
LEVEL_UP_MOVE(16, MOVE_FLASH_CANNON),
@@ -9751,8 +9602,8 @@ static const struct LevelUpMove sMetagrossLevelUpLearnset[] = {
#if P_FAMILY_REGIROCK
static const struct LevelUpMove sRegirockLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_CHARGE_BEAM),
LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW),
+ LEVEL_UP_MOVE( 1, MOVE_CHARGE_BEAM),
LEVEL_UP_MOVE( 6, MOVE_BULLDOZE),
LEVEL_UP_MOVE(12, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(18, MOVE_STOMP),
@@ -9772,8 +9623,8 @@ static const struct LevelUpMove sRegirockLevelUpLearnset[] = {
#if P_FAMILY_REGICE
static const struct LevelUpMove sRegiceLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_CHARGE_BEAM),
LEVEL_UP_MOVE( 1, MOVE_ICY_WIND),
+ LEVEL_UP_MOVE( 1, MOVE_CHARGE_BEAM),
LEVEL_UP_MOVE( 6, MOVE_BULLDOZE),
LEVEL_UP_MOVE(12, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(18, MOVE_STOMP),
@@ -9793,16 +9644,16 @@ static const struct LevelUpMove sRegiceLevelUpLearnset[] = {
#if P_FAMILY_REGISTEEL
static const struct LevelUpMove sRegisteelLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_CHARGE_BEAM),
LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW),
+ LEVEL_UP_MOVE( 1, MOVE_CHARGE_BEAM),
LEVEL_UP_MOVE( 6, MOVE_BULLDOZE),
LEVEL_UP_MOVE(12, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(18, MOVE_STOMP),
- LEVEL_UP_MOVE(24, MOVE_IRON_HEAD),
LEVEL_UP_MOVE(24, MOVE_FLASH_CANNON),
+ LEVEL_UP_MOVE(24, MOVE_IRON_HEAD),
LEVEL_UP_MOVE(30, MOVE_CURSE),
- LEVEL_UP_MOVE(36, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE(36, MOVE_AMNESIA),
+ LEVEL_UP_MOVE(36, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE(42, MOVE_HAMMER_ARM),
LEVEL_UP_MOVE(48, MOVE_HEAVY_SLAM),
LEVEL_UP_MOVE(54, MOVE_SUPERPOWER),
@@ -9816,8 +9667,8 @@ static const struct LevelUpMove sRegisteelLevelUpLearnset[] = {
#if P_FAMILY_LATIAS
static const struct LevelUpMove sLatiasLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_STORED_POWER),
LEVEL_UP_MOVE( 1, MOVE_CHARM),
+ LEVEL_UP_MOVE( 1, MOVE_STORED_POWER),
LEVEL_UP_MOVE( 5, MOVE_HELPING_HAND),
LEVEL_UP_MOVE(10, MOVE_RECOVER),
LEVEL_UP_MOVE(15, MOVE_CONFUSION),
@@ -9832,15 +9683,14 @@ static const struct LevelUpMove sLatiasLevelUpLearnset[] = {
LEVEL_UP_MOVE(60, MOVE_PSYCHIC),
LEVEL_UP_MOVE(65, MOVE_GUARD_SPLIT),
LEVEL_UP_MOVE(70, MOVE_HEALING_WISH),
- LEVEL_UP_MOVE(75, MOVE_PSYCHO_SHIFT),
LEVEL_UP_END
};
#endif //P_FAMILY_LATIAS
#if P_FAMILY_LATIOS
static const struct LevelUpMove sLatiosLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_STORED_POWER),
LEVEL_UP_MOVE( 1, MOVE_DRAGON_DANCE),
+ LEVEL_UP_MOVE( 1, MOVE_STORED_POWER),
LEVEL_UP_MOVE( 5, MOVE_HELPING_HAND),
LEVEL_UP_MOVE(10, MOVE_RECOVER),
LEVEL_UP_MOVE(15, MOVE_CONFUSION),
@@ -9855,7 +9705,6 @@ static const struct LevelUpMove sLatiosLevelUpLearnset[] = {
LEVEL_UP_MOVE(60, MOVE_PSYCHIC),
LEVEL_UP_MOVE(65, MOVE_POWER_SPLIT),
LEVEL_UP_MOVE(70, MOVE_MEMENTO),
- LEVEL_UP_MOVE(75, MOVE_PSYCHO_SHIFT),
LEVEL_UP_END
};
#endif //P_FAMILY_LATIOS
@@ -9926,7 +9775,6 @@ static const struct LevelUpMove sJirachiLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
LEVEL_UP_MOVE( 1, MOVE_WISH),
LEVEL_UP_MOVE( 7, MOVE_SWIFT),
- LEVEL_UP_MOVE(14, MOVE_HELPING_HAND),
LEVEL_UP_MOVE(21, MOVE_LIFE_DEW),
LEVEL_UP_MOVE(28, MOVE_ZEN_HEADBUTT),
LEVEL_UP_MOVE(35, MOVE_GRAVITY),
@@ -9945,15 +9793,15 @@ static const struct LevelUpMove sJirachiLevelUpLearnset[] = {
#if P_FAMILY_DEOXYS
static const struct LevelUpMove sDeoxysNormalLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_WRAP),
+ LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 7, MOVE_NIGHT_SHADE),
LEVEL_UP_MOVE(13, MOVE_TELEPORT),
LEVEL_UP_MOVE(19, MOVE_KNOCK_OFF),
- LEVEL_UP_MOVE(25, MOVE_TOXIC_SPIKES),
+ LEVEL_UP_MOVE(25, MOVE_PSYSHOCK),
LEVEL_UP_MOVE(31, MOVE_PSYCHIC),
- LEVEL_UP_MOVE(37, MOVE_SWITCHEROO),
- LEVEL_UP_MOVE(43, MOVE_PSYCHO_SHIFT),
+ LEVEL_UP_MOVE(37, MOVE_GRAVITY),
+ LEVEL_UP_MOVE(43, MOVE_SKILL_SWAP),
LEVEL_UP_MOVE(49, MOVE_ZEN_HEADBUTT),
LEVEL_UP_MOVE(55, MOVE_COSMIC_POWER),
LEVEL_UP_MOVE(61, MOVE_RECOVER),
@@ -9963,15 +9811,15 @@ static const struct LevelUpMove sDeoxysNormalLevelUpLearnset[] = {
};
static const struct LevelUpMove sDeoxysAttackLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_WRAP),
+ LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 7, MOVE_NIGHT_SHADE),
LEVEL_UP_MOVE(13, MOVE_TELEPORT),
LEVEL_UP_MOVE(19, MOVE_TAUNT),
- LEVEL_UP_MOVE(25, MOVE_TOXIC_SPIKES),
+ LEVEL_UP_MOVE(25, MOVE_PSYSHOCK),
LEVEL_UP_MOVE(31, MOVE_PSYCHIC),
LEVEL_UP_MOVE(37, MOVE_SUPERPOWER),
- LEVEL_UP_MOVE(43, MOVE_PSYCHO_SHIFT),
+ LEVEL_UP_MOVE(43, MOVE_SKILL_SWAP),
LEVEL_UP_MOVE(49, MOVE_ZEN_HEADBUTT),
LEVEL_UP_MOVE(55, MOVE_COSMIC_POWER),
LEVEL_UP_MOVE(61, MOVE_ZAP_CANNON),
@@ -9981,18 +9829,18 @@ static const struct LevelUpMove sDeoxysAttackLevelUpLearnset[] = {
};
static const struct LevelUpMove sDeoxysDefenseLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_WRAP),
+ LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 7, MOVE_NIGHT_SHADE),
LEVEL_UP_MOVE(13, MOVE_TELEPORT),
LEVEL_UP_MOVE(19, MOVE_KNOCK_OFF),
LEVEL_UP_MOVE(25, MOVE_SPIKES),
LEVEL_UP_MOVE(31, MOVE_PSYCHIC),
- LEVEL_UP_MOVE(37, MOVE_SWITCHEROO),
- LEVEL_UP_MOVE(43, MOVE_PSYCHO_SHIFT),
+ LEVEL_UP_MOVE(37, MOVE_PROTECT),
+ LEVEL_UP_MOVE(43, MOVE_SKILL_SWAP),
LEVEL_UP_MOVE(49, MOVE_ZEN_HEADBUTT),
- LEVEL_UP_MOVE(55, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE(55, MOVE_AMNESIA),
+ LEVEL_UP_MOVE(55, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE(61, MOVE_RECOVER),
LEVEL_UP_MOVE(67, MOVE_PSYCHO_BOOST),
LEVEL_UP_MOVE(73, MOVE_COUNTER),
@@ -10001,15 +9849,15 @@ static const struct LevelUpMove sDeoxysDefenseLevelUpLearnset[] = {
};
static const struct LevelUpMove sDeoxysSpeedLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_WRAP),
+ LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 7, MOVE_NIGHT_SHADE),
LEVEL_UP_MOVE(13, MOVE_DOUBLE_TEAM),
LEVEL_UP_MOVE(19, MOVE_KNOCK_OFF),
- LEVEL_UP_MOVE(25, MOVE_TOXIC_SPIKES),
+ LEVEL_UP_MOVE(25, MOVE_PSYSHOCK),
LEVEL_UP_MOVE(31, MOVE_PSYCHIC),
LEVEL_UP_MOVE(37, MOVE_SWIFT),
- LEVEL_UP_MOVE(43, MOVE_PSYCHO_SHIFT),
+ LEVEL_UP_MOVE(43, MOVE_SKILL_SWAP),
LEVEL_UP_MOVE(49, MOVE_ZEN_HEADBUTT),
LEVEL_UP_MOVE(55, MOVE_AGILITY),
LEVEL_UP_MOVE(61, MOVE_RECOVER),
@@ -10023,8 +9871,7 @@ static const struct LevelUpMove sDeoxysSpeedLevelUpLearnset[] = {
static const struct LevelUpMove sTurtwigLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 5, MOVE_WITHDRAW),
- LEVEL_UP_MOVE( 6, MOVE_LEAFAGE),
- LEVEL_UP_MOVE(10, MOVE_GROWTH),
+ LEVEL_UP_MOVE( 9, MOVE_ABSORB),
LEVEL_UP_MOVE(13, MOVE_RAZOR_LEAF),
LEVEL_UP_MOVE(17, MOVE_CURSE),
LEVEL_UP_MOVE(21, MOVE_BITE),
@@ -10039,11 +9886,8 @@ static const struct LevelUpMove sTurtwigLevelUpLearnset[] = {
static const struct LevelUpMove sGrotleLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
- LEVEL_UP_MOVE( 1, MOVE_WITHDRAW),
LEVEL_UP_MOVE( 1, MOVE_ABSORB),
- LEVEL_UP_MOVE( 5, MOVE_WITHDRAW),
- LEVEL_UP_MOVE( 6, MOVE_LEAFAGE),
- LEVEL_UP_MOVE(10, MOVE_GROWTH),
+ LEVEL_UP_MOVE( 1, MOVE_WITHDRAW),
LEVEL_UP_MOVE(13, MOVE_RAZOR_LEAF),
LEVEL_UP_MOVE(17, MOVE_CURSE),
LEVEL_UP_MOVE(22, MOVE_BITE),
@@ -10058,16 +9902,11 @@ static const struct LevelUpMove sGrotleLevelUpLearnset[] = {
static const struct LevelUpMove sTorterraLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_EARTHQUAKE),
- LEVEL_UP_MOVE( 1, MOVE_EARTHQUAKE),
- LEVEL_UP_MOVE( 1, MOVE_WOOD_HAMMER),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
- LEVEL_UP_MOVE( 1, MOVE_WITHDRAW),
LEVEL_UP_MOVE( 1, MOVE_ABSORB),
LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF),
- LEVEL_UP_MOVE( 5, MOVE_WITHDRAW),
- LEVEL_UP_MOVE( 6, MOVE_LEAFAGE),
- LEVEL_UP_MOVE(10, MOVE_GROWTH),
- LEVEL_UP_MOVE(13, MOVE_RAZOR_LEAF),
+ LEVEL_UP_MOVE( 1, MOVE_WITHDRAW),
+ LEVEL_UP_MOVE( 1, MOVE_WOOD_HAMMER),
LEVEL_UP_MOVE(17, MOVE_CURSE),
LEVEL_UP_MOVE(22, MOVE_BITE),
LEVEL_UP_MOVE(27, MOVE_MEGA_DRAIN),
@@ -10076,6 +9915,7 @@ static const struct LevelUpMove sTorterraLevelUpLearnset[] = {
LEVEL_UP_MOVE(45, MOVE_CRUNCH),
LEVEL_UP_MOVE(51, MOVE_GIGA_DRAIN),
LEVEL_UP_MOVE(57, MOVE_LEAF_STORM),
+ LEVEL_UP_MOVE(63, MOVE_HEADLONG_RUSH),
LEVEL_UP_END
};
#endif //P_FAMILY_TURTWIG
@@ -10084,9 +9924,8 @@ static const struct LevelUpMove sTorterraLevelUpLearnset[] = {
static const struct LevelUpMove sChimcharLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_LEER),
- LEVEL_UP_MOVE( 6, MOVE_EMBER),
+ LEVEL_UP_MOVE( 7, MOVE_EMBER),
LEVEL_UP_MOVE( 9, MOVE_TAUNT),
- LEVEL_UP_MOVE(12, MOVE_POWER_UP_PUNCH),
LEVEL_UP_MOVE(15, MOVE_FURY_SWIPES),
LEVEL_UP_MOVE(17, MOVE_FLAME_WHEEL),
LEVEL_UP_MOVE(23, MOVE_NASTY_PLOT),
@@ -10101,16 +9940,10 @@ static const struct LevelUpMove sChimcharLevelUpLearnset[] = {
static const struct LevelUpMove sMonfernoLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_MACH_PUNCH),
- LEVEL_UP_MOVE( 1, MOVE_MACH_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
- LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT),
- LEVEL_UP_MOVE( 1, MOVE_FACADE),
- LEVEL_UP_MOVE( 1, MOVE_FLAMETHROWER),
- LEVEL_UP_MOVE( 7, MOVE_EMBER),
LEVEL_UP_MOVE( 9, MOVE_TAUNT),
- LEVEL_UP_MOVE(12, MOVE_POWER_UP_PUNCH),
LEVEL_UP_MOVE(16, MOVE_FURY_SWIPES),
LEVEL_UP_MOVE(19, MOVE_FLAME_WHEEL),
LEVEL_UP_MOVE(26, MOVE_FEINT),
@@ -10125,29 +9958,21 @@ static const struct LevelUpMove sMonfernoLevelUpLearnset[] = {
static const struct LevelUpMove sInfernapeLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_CLOSE_COMBAT),
- LEVEL_UP_MOVE( 1, MOVE_CLOSE_COMBAT),
- LEVEL_UP_MOVE( 1, MOVE_MACH_PUNCH),
- LEVEL_UP_MOVE( 1, MOVE_FLARE_BLITZ),
+ LEVEL_UP_MOVE( 1, MOVE_TAUNT),
+ LEVEL_UP_MOVE( 1, MOVE_SLACK_OFF),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
- LEVEL_UP_MOVE( 1, MOVE_TAUNT),
- LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT),
- LEVEL_UP_MOVE( 1, MOVE_FACADE),
- LEVEL_UP_MOVE( 1, MOVE_FLAMETHROWER),
- LEVEL_UP_MOVE( 1, MOVE_TORMENT),
- LEVEL_UP_MOVE( 1, MOVE_SLACK_OFF),
- LEVEL_UP_MOVE( 7, MOVE_EMBER),
- LEVEL_UP_MOVE( 9, MOVE_TAUNT),
- LEVEL_UP_MOVE(12, MOVE_POWER_UP_PUNCH),
+ LEVEL_UP_MOVE( 1, MOVE_MACH_PUNCH),
LEVEL_UP_MOVE(16, MOVE_FURY_SWIPES),
LEVEL_UP_MOVE(19, MOVE_FLAME_WHEEL),
LEVEL_UP_MOVE(26, MOVE_FEINT),
- LEVEL_UP_MOVE(29, MOVE_U_TURN),
+ LEVEL_UP_MOVE(29, MOVE_TORMENT),
LEVEL_UP_MOVE(42, MOVE_FIRE_SPIN),
+ LEVEL_UP_MOVE(47, MOVE_FLARE_BLITZ),
LEVEL_UP_MOVE(52, MOVE_ACROBATICS),
LEVEL_UP_MOVE(58, MOVE_CALM_MIND),
- LEVEL_UP_MOVE(68, MOVE_FLARE_BLITZ),
+ LEVEL_UP_MOVE(65, MOVE_RAGING_FURY),
LEVEL_UP_END
};
#endif //P_FAMILY_CHIMCHAR
@@ -10156,7 +9981,7 @@ static const struct LevelUpMove sInfernapeLevelUpLearnset[] = {
static const struct LevelUpMove sPiplupLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 4, MOVE_GROWL),
- LEVEL_UP_MOVE( 6, MOVE_WATER_GUN),
+ LEVEL_UP_MOVE( 8, MOVE_WATER_GUN),
LEVEL_UP_MOVE(11, MOVE_CHARM),
LEVEL_UP_MOVE(15, MOVE_PECK),
LEVEL_UP_MOVE(18, MOVE_BUBBLE_BEAM),
@@ -10172,13 +9997,9 @@ static const struct LevelUpMove sPiplupLevelUpLearnset[] = {
static const struct LevelUpMove sPrinplupLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_METAL_CLAW),
- LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
- LEVEL_UP_MOVE( 1, MOVE_POUND),
- LEVEL_UP_MOVE( 4, MOVE_GROWL),
- LEVEL_UP_MOVE( 8, MOVE_WATER_GUN),
- LEVEL_UP_MOVE(11, MOVE_CHARM),
+ LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
LEVEL_UP_MOVE(15, MOVE_PECK),
LEVEL_UP_MOVE(19, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE(24, MOVE_SWAGGER),
@@ -10193,14 +10014,10 @@ static const struct LevelUpMove sPrinplupLevelUpLearnset[] = {
static const struct LevelUpMove sEmpoleonLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_AQUA_JET),
- LEVEL_UP_MOVE( 1, MOVE_AQUA_JET),
- LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
- LEVEL_UP_MOVE( 1, MOVE_POUND),
- LEVEL_UP_MOVE( 1, MOVE_CHARM),
- LEVEL_UP_MOVE( 4, MOVE_GROWL),
- LEVEL_UP_MOVE( 8, MOVE_WATER_GUN),
+ LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
+ LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW),
LEVEL_UP_MOVE(11, MOVE_SWORDS_DANCE),
LEVEL_UP_MOVE(15, MOVE_PECK),
LEVEL_UP_MOVE(19, MOVE_BUBBLE_BEAM),
@@ -10211,6 +10028,7 @@ static const struct LevelUpMove sEmpoleonLevelUpLearnset[] = {
LEVEL_UP_MOVE(46, MOVE_MIST),
LEVEL_UP_MOVE(52, MOVE_DRILL_PECK),
LEVEL_UP_MOVE(59, MOVE_HYDRO_PUMP),
+ LEVEL_UP_MOVE(66, MOVE_WAVE_CRASH),
LEVEL_UP_END
};
#endif //P_FAMILY_PIPLUP
@@ -10398,11 +10216,11 @@ static const struct LevelUpMove sCranidosLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_HEADBUTT),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 6, MOVE_FOCUS_ENERGY),
- LEVEL_UP_MOVE(10, MOVE_ROCK_POLISH),
+ LEVEL_UP_MOVE(10, MOVE_ROCK_SMASH),
LEVEL_UP_MOVE(15, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(19, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(24, MOVE_ASSURANCE),
- LEVEL_UP_MOVE(28, MOVE_SWORDS_DANCE),
+ LEVEL_UP_MOVE(28, MOVE_SLAM),
LEVEL_UP_MOVE(33, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(37, MOVE_ZEN_HEADBUTT),
LEVEL_UP_MOVE(42, MOVE_SCREECH),
@@ -10411,16 +10229,15 @@ static const struct LevelUpMove sCranidosLevelUpLearnset[] = {
};
static const struct LevelUpMove sRampardosLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_ENDEAVOR),
+ LEVEL_UP_MOVE( 0, MOVE_ENDEAVOR),
LEVEL_UP_MOVE( 1, MOVE_HEADBUTT),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY),
- LEVEL_UP_MOVE( 6, MOVE_FOCUS_ENERGY),
- LEVEL_UP_MOVE(10, MOVE_ROCK_POLISH),
+ LEVEL_UP_MOVE(10, MOVE_ROCK_SMASH),
LEVEL_UP_MOVE(15, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(19, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(24, MOVE_ASSURANCE),
- LEVEL_UP_MOVE(28, MOVE_SWORDS_DANCE),
+ LEVEL_UP_MOVE(28, MOVE_SLAM),
LEVEL_UP_MOVE(36, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE(43, MOVE_ZEN_HEADBUTT),
LEVEL_UP_MOVE(51, MOVE_SCREECH),
@@ -10448,13 +10265,11 @@ static const struct LevelUpMove sShieldonLevelUpLearnset[] = {
static const struct LevelUpMove sBastiodonLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_BLOCK),
- LEVEL_UP_MOVE( 1, MOVE_BLOCK),
+ LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_PROTECT),
LEVEL_UP_MOVE( 1, MOVE_TAUNT),
LEVEL_UP_MOVE( 1, MOVE_METAL_SOUND),
- LEVEL_UP_MOVE( 6, MOVE_TAUNT),
- LEVEL_UP_MOVE(10, MOVE_METAL_SOUND),
LEVEL_UP_MOVE(15, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE(19, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE(24, MOVE_SWAGGER),
@@ -11332,6 +11147,16 @@ static const struct LevelUpMove sRotomLevelUpLearnset[] = {
#if P_FAMILY_UXIE
static const struct LevelUpMove sUxieLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_TRI_ATTACK),
+ LEVEL_UP_MOVE( 1, MOVE_SNORE),
+ LEVEL_UP_MOVE( 1, MOVE_SAFEGUARD),
+ LEVEL_UP_MOVE( 1, MOVE_IRON_TAIL),
+ LEVEL_UP_MOVE( 1, MOVE_PSYCHO_CUT),
+ LEVEL_UP_MOVE( 1, MOVE_WONDER_ROOM),
+ LEVEL_UP_MOVE( 1, MOVE_MAGIC_ROOM),
+ LEVEL_UP_MOVE( 1, MOVE_ROUND),
+ LEVEL_UP_MOVE( 1, MOVE_ALLY_SWITCH),
+ LEVEL_UP_MOVE( 1, MOVE_EXPANDING_FORCE),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
LEVEL_UP_MOVE( 1, MOVE_REST),
LEVEL_UP_MOVE( 7, MOVE_SWIFT),
@@ -11352,6 +11177,16 @@ static const struct LevelUpMove sUxieLevelUpLearnset[] = {
#if P_FAMILY_MESPRIT
static const struct LevelUpMove sMespritLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_TRI_ATTACK),
+ LEVEL_UP_MOVE( 1, MOVE_SNORE),
+ LEVEL_UP_MOVE( 1, MOVE_SAFEGUARD),
+ LEVEL_UP_MOVE( 1, MOVE_IRON_TAIL),
+ LEVEL_UP_MOVE( 1, MOVE_PSYCHO_CUT),
+ LEVEL_UP_MOVE( 1, MOVE_WONDER_ROOM),
+ LEVEL_UP_MOVE( 1, MOVE_MAGIC_ROOM),
+ LEVEL_UP_MOVE( 1, MOVE_ROUND),
+ LEVEL_UP_MOVE( 1, MOVE_ALLY_SWITCH),
+ LEVEL_UP_MOVE( 1, MOVE_EXPANDING_FORCE),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
LEVEL_UP_MOVE( 1, MOVE_REST),
LEVEL_UP_MOVE( 7, MOVE_SWIFT),
@@ -11372,6 +11207,19 @@ static const struct LevelUpMove sMespritLevelUpLearnset[] = {
#if P_FAMILY_AZELF
static const struct LevelUpMove sAzelfLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SELF_DESTRUCT),
+ LEVEL_UP_MOVE( 1, MOVE_TRI_ATTACK),
+ LEVEL_UP_MOVE( 1, MOVE_SNORE),
+ LEVEL_UP_MOVE( 1, MOVE_SAFEGUARD),
+ LEVEL_UP_MOVE( 1, MOVE_IRON_TAIL),
+ LEVEL_UP_MOVE( 1, MOVE_PAYBACK),
+ LEVEL_UP_MOVE( 1, MOVE_ASSURANCE),
+ LEVEL_UP_MOVE( 1, MOVE_PSYCHO_CUT),
+ LEVEL_UP_MOVE( 1, MOVE_WONDER_ROOM),
+ LEVEL_UP_MOVE( 1, MOVE_MAGIC_ROOM),
+ LEVEL_UP_MOVE( 1, MOVE_ROUND),
+ LEVEL_UP_MOVE( 1, MOVE_ALLY_SWITCH),
+ LEVEL_UP_MOVE( 1, MOVE_EXPANDING_FORCE),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
LEVEL_UP_MOVE( 1, MOVE_REST),
LEVEL_UP_MOVE( 7, MOVE_SWIFT),
@@ -11452,7 +11300,7 @@ static const struct LevelUpMove sRegigigasLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE( 6, MOVE_PAYBACK),
- LEVEL_UP_MOVE(12, MOVE_REVENGE),
+ LEVEL_UP_MOVE(12, MOVE_FACADE),
LEVEL_UP_MOVE(18, MOVE_STOMP),
LEVEL_UP_MOVE(24, MOVE_PROTECT),
LEVEL_UP_MOVE(30, MOVE_KNOCK_OFF),
@@ -11521,12 +11369,14 @@ static const struct LevelUpMove sPhioneLevelUpLearnset[] = {
LEVEL_UP_MOVE(54, MOVE_AQUA_RING),
LEVEL_UP_MOVE(61, MOVE_DIVE),
LEVEL_UP_MOVE(69, MOVE_RAIN_DANCE),
+ LEVEL_UP_MOVE(75, MOVE_TAKE_HEART),
LEVEL_UP_END
};
static const struct LevelUpMove sManaphyLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_TAIL_GLOW),
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
+ LEVEL_UP_MOVE( 1, MOVE_TAIL_GLOW),
+ LEVEL_UP_MOVE( 1, MOVE_HEART_SWAP),
LEVEL_UP_MOVE( 9, MOVE_CHARM),
LEVEL_UP_MOVE(16, MOVE_SUPERSONIC),
LEVEL_UP_MOVE(24, MOVE_BUBBLE_BEAM),
@@ -11536,19 +11386,18 @@ static const struct LevelUpMove sManaphyLevelUpLearnset[] = {
LEVEL_UP_MOVE(54, MOVE_AQUA_RING),
LEVEL_UP_MOVE(61, MOVE_DIVE),
LEVEL_UP_MOVE(69, MOVE_RAIN_DANCE),
- LEVEL_UP_MOVE(76, MOVE_HEART_SWAP),
+ LEVEL_UP_MOVE(76, MOVE_TAKE_HEART),
LEVEL_UP_END
};
#endif //P_FAMILY_MANAPHY
#if P_FAMILY_DARKRAI
static const struct LevelUpMove sDarkraiLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE( 1, MOVE_DISABLE),
LEVEL_UP_MOVE(11, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE(20, MOVE_HYPNOSIS),
LEVEL_UP_MOVE(29, MOVE_SUCKER_PUNCH),
- LEVEL_UP_MOVE(38, MOVE_FOUL_PLAY),
+ LEVEL_UP_MOVE(38, MOVE_NIGHT_SHADE),
LEVEL_UP_MOVE(47, MOVE_DOUBLE_TEAM),
LEVEL_UP_MOVE(57, MOVE_HAZE),
LEVEL_UP_MOVE(66, MOVE_DARK_VOID),
@@ -11566,11 +11415,12 @@ static const struct LevelUpMove sShayminLandLevelUpLearnset[] = {
LEVEL_UP_MOVE(19, MOVE_LEECH_SEED),
LEVEL_UP_MOVE(28, MOVE_SYNTHESIS),
LEVEL_UP_MOVE(37, MOVE_SWEET_SCENT),
+ LEVEL_UP_MOVE(46, MOVE_PLAY_ROUGH),
LEVEL_UP_MOVE(55, MOVE_WORRY_SEED),
- LEVEL_UP_MOVE(64, MOVE_AROMATHERAPY),
- LEVEL_UP_MOVE(68, MOVE_HEALING_WISH),
+ LEVEL_UP_MOVE(64, MOVE_GRASSY_TERRAIN),
LEVEL_UP_MOVE(73, MOVE_ENERGY_BALL),
LEVEL_UP_MOVE(82, MOVE_SWEET_KISS),
+ LEVEL_UP_MOVE(91, MOVE_HEALING_WISH),
LEVEL_UP_MOVE(100, MOVE_SEED_FLARE),
LEVEL_UP_END
};
@@ -11581,7 +11431,7 @@ static const struct LevelUpMove sShayminSkyLevelUpLearnset[] = {
LEVEL_UP_MOVE(19, MOVE_LEECH_SEED),
LEVEL_UP_MOVE(28, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE(37, MOVE_SWEET_SCENT),
- LEVEL_UP_MOVE(46, MOVE_HEALING_WISH),
+ LEVEL_UP_MOVE(46, MOVE_PLAY_ROUGH),
LEVEL_UP_MOVE(55, MOVE_WORRY_SEED),
LEVEL_UP_MOVE(64, MOVE_AIR_SLASH),
LEVEL_UP_MOVE(73, MOVE_ENERGY_BALL),
@@ -11641,60 +11491,51 @@ static const struct LevelUpMove sSnivyLevelUpLearnset[] = {
LEVEL_UP_MOVE( 7, MOVE_VINE_WHIP),
LEVEL_UP_MOVE(10, MOVE_WRAP),
LEVEL_UP_MOVE(13, MOVE_GROWTH),
- LEVEL_UP_MOVE(16, MOVE_LEAF_TORNADO),
+ LEVEL_UP_MOVE(16, MOVE_MAGICAL_LEAF),
LEVEL_UP_MOVE(19, MOVE_LEECH_SEED),
LEVEL_UP_MOVE(22, MOVE_MEGA_DRAIN),
LEVEL_UP_MOVE(25, MOVE_SLAM),
LEVEL_UP_MOVE(28, MOVE_LEAF_BLADE),
LEVEL_UP_MOVE(31, MOVE_COIL),
LEVEL_UP_MOVE(34, MOVE_GIGA_DRAIN),
- LEVEL_UP_MOVE(37, MOVE_WRING_OUT),
- LEVEL_UP_MOVE(40, MOVE_GASTRO_ACID),
- LEVEL_UP_MOVE(43, MOVE_LEAF_STORM),
+ LEVEL_UP_MOVE(37, MOVE_GASTRO_ACID),
+ LEVEL_UP_MOVE(40, MOVE_LEAF_STORM),
LEVEL_UP_END
};
static const struct LevelUpMove sServineLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_TACKLE),
- LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP),
+ LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_WRAP),
- LEVEL_UP_MOVE( 4, MOVE_LEER),
- LEVEL_UP_MOVE( 7, MOVE_VINE_WHIP),
- LEVEL_UP_MOVE(10, MOVE_WRAP),
+ LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE(13, MOVE_GROWTH),
- LEVEL_UP_MOVE(16, MOVE_LEAF_TORNADO),
+ LEVEL_UP_MOVE(16, MOVE_MAGICAL_LEAF),
LEVEL_UP_MOVE(20, MOVE_LEECH_SEED),
LEVEL_UP_MOVE(24, MOVE_MEGA_DRAIN),
LEVEL_UP_MOVE(28, MOVE_SLAM),
LEVEL_UP_MOVE(32, MOVE_LEAF_BLADE),
LEVEL_UP_MOVE(36, MOVE_COIL),
LEVEL_UP_MOVE(40, MOVE_GIGA_DRAIN),
- LEVEL_UP_MOVE(44, MOVE_WRING_OUT),
- LEVEL_UP_MOVE(48, MOVE_GASTRO_ACID),
- LEVEL_UP_MOVE(52, MOVE_LEAF_STORM),
+ LEVEL_UP_MOVE(44, MOVE_GASTRO_ACID),
+ LEVEL_UP_MOVE(48, MOVE_LEAF_STORM),
LEVEL_UP_END
};
static const struct LevelUpMove sSerperiorLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_TACKLE),
- LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP),
+ LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_WRAP),
- LEVEL_UP_MOVE( 4, MOVE_LEER),
- LEVEL_UP_MOVE( 7, MOVE_VINE_WHIP),
- LEVEL_UP_MOVE(10, MOVE_WRAP),
+ LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE(13, MOVE_GROWTH),
- LEVEL_UP_MOVE(16, MOVE_LEAF_TORNADO),
+ LEVEL_UP_MOVE(16, MOVE_MAGICAL_LEAF),
LEVEL_UP_MOVE(20, MOVE_LEECH_SEED),
LEVEL_UP_MOVE(24, MOVE_MEGA_DRAIN),
LEVEL_UP_MOVE(28, MOVE_SLAM),
LEVEL_UP_MOVE(32, MOVE_LEAF_BLADE),
LEVEL_UP_MOVE(38, MOVE_COIL),
LEVEL_UP_MOVE(44, MOVE_GIGA_DRAIN),
- LEVEL_UP_MOVE(50, MOVE_WRING_OUT),
- LEVEL_UP_MOVE(56, MOVE_GASTRO_ACID),
- LEVEL_UP_MOVE(62, MOVE_LEAF_STORM),
+ LEVEL_UP_MOVE(50, MOVE_GASTRO_ACID),
+ LEVEL_UP_MOVE(56, MOVE_LEAF_STORM),
LEVEL_UP_END
};
#endif //P_FAMILY_SNIVY
@@ -11704,7 +11545,7 @@ static const struct LevelUpMove sTepigLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 3, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 7, MOVE_EMBER),
- LEVEL_UP_MOVE( 9, MOVE_ODOR_SLEUTH),
+ LEVEL_UP_MOVE( 9, MOVE_ENDURE),
LEVEL_UP_MOVE(13, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE(15, MOVE_FLAME_CHARGE),
LEVEL_UP_MOVE(19, MOVE_SMOG),
@@ -11721,14 +11562,10 @@ static const struct LevelUpMove sTepigLevelUpLearnset[] = {
static const struct LevelUpMove sPigniteLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_ARM_THRUST),
- LEVEL_UP_MOVE( 1, MOVE_ARM_THRUST),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
- LEVEL_UP_MOVE( 1, MOVE_ODOR_SLEUTH),
- LEVEL_UP_MOVE( 3, MOVE_TAIL_WHIP),
- LEVEL_UP_MOVE( 7, MOVE_EMBER),
- LEVEL_UP_MOVE( 9, MOVE_ODOR_SLEUTH),
+ LEVEL_UP_MOVE( 1, MOVE_ENDURE),
LEVEL_UP_MOVE(13, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE(15, MOVE_FLAME_CHARGE),
LEVEL_UP_MOVE(20, MOVE_SMOG),
@@ -11744,15 +11581,12 @@ static const struct LevelUpMove sPigniteLevelUpLearnset[] = {
};
static const struct LevelUpMove sEmboarLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_ARM_THRUST),
+ LEVEL_UP_MOVE( 1, MOVE_ENDURE),
LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
- LEVEL_UP_MOVE( 1, MOVE_ODOR_SLEUTH),
- LEVEL_UP_MOVE( 3, MOVE_TAIL_WHIP),
- LEVEL_UP_MOVE( 7, MOVE_EMBER),
- LEVEL_UP_MOVE( 9, MOVE_ODOR_SLEUTH),
+ LEVEL_UP_MOVE( 1, MOVE_ARM_THRUST),
LEVEL_UP_MOVE(13, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE(15, MOVE_FLAME_CHARGE),
LEVEL_UP_MOVE(20, MOVE_SMOG),
@@ -12188,35 +12022,28 @@ static const struct LevelUpMove sBlitzleLevelUpLearnset[] = {
LEVEL_UP_MOVE(11, MOVE_SHOCK_WAVE),
LEVEL_UP_MOVE(15, MOVE_THUNDER_WAVE),
LEVEL_UP_MOVE(18, MOVE_FLAME_CHARGE),
- LEVEL_UP_MOVE(22, MOVE_PURSUIT),
- LEVEL_UP_MOVE(25, MOVE_SPARK),
- LEVEL_UP_MOVE(29, MOVE_STOMP),
- LEVEL_UP_MOVE(32, MOVE_DISCHARGE),
- LEVEL_UP_MOVE(36, MOVE_AGILITY),
- LEVEL_UP_MOVE(39, MOVE_WILD_CHARGE),
- LEVEL_UP_MOVE(43, MOVE_THRASH),
+ LEVEL_UP_MOVE(22, MOVE_SPARK),
+ LEVEL_UP_MOVE(25, MOVE_STOMP),
+ LEVEL_UP_MOVE(29, MOVE_DISCHARGE),
+ LEVEL_UP_MOVE(33, MOVE_AGILITY),
+ LEVEL_UP_MOVE(35, MOVE_WILD_CHARGE),
+ LEVEL_UP_MOVE(40, MOVE_THRASH),
LEVEL_UP_END
};
static const struct LevelUpMove sZebstrikaLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_ION_DELUGE),
- LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
- LEVEL_UP_MOVE( 1, MOVE_CHARGE),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE),
- LEVEL_UP_MOVE( 4, MOVE_TAIL_WHIP),
- LEVEL_UP_MOVE( 8, MOVE_CHARGE),
+ LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
+ LEVEL_UP_MOVE( 1, MOVE_CHARGE),
LEVEL_UP_MOVE(11, MOVE_SHOCK_WAVE),
- LEVEL_UP_MOVE(15, MOVE_THUNDER_WAVE),
LEVEL_UP_MOVE(18, MOVE_FLAME_CHARGE),
- LEVEL_UP_MOVE(22, MOVE_PURSUIT),
LEVEL_UP_MOVE(25, MOVE_SPARK),
LEVEL_UP_MOVE(31, MOVE_STOMP),
LEVEL_UP_MOVE(36, MOVE_DISCHARGE),
LEVEL_UP_MOVE(42, MOVE_AGILITY),
LEVEL_UP_MOVE(47, MOVE_WILD_CHARGE),
LEVEL_UP_MOVE(53, MOVE_THRASH),
- LEVEL_UP_MOVE(58, MOVE_ION_DELUGE),
LEVEL_UP_END
};
#endif //P_FAMILY_BLITZLE
@@ -12334,10 +12161,9 @@ static const struct LevelUpMove sDrilburLevelUpLearnset[] = {
static const struct LevelUpMove sExcadrillLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_HORN_DRILL),
- LEVEL_UP_MOVE( 1, MOVE_HORN_DRILL),
+ LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_MUD_SLAP),
LEVEL_UP_MOVE( 1, MOVE_RAPID_SPIN),
- LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS),
LEVEL_UP_MOVE(12, MOVE_FURY_SWIPES),
LEVEL_UP_MOVE(16, MOVE_METAL_CLAW),
@@ -12545,25 +12371,25 @@ static const struct LevelUpMove sSewaddleLevelUpLearnset[] = {
static const struct LevelUpMove sSwadloonLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_PROTECT),
- LEVEL_UP_MOVE( 1, MOVE_PROTECT),
- LEVEL_UP_MOVE( 1, MOVE_GRASS_WHISTLE),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
+ LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF),
LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT),
LEVEL_UP_MOVE( 1, MOVE_BUG_BITE),
- LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF),
+ LEVEL_UP_MOVE(22, MOVE_STRUGGLE_BUG),
+ LEVEL_UP_MOVE(29, MOVE_ENDURE),
+ LEVEL_UP_MOVE(31, MOVE_STICKY_WEB),
+ LEVEL_UP_MOVE(36, MOVE_BUG_BUZZ),
+ LEVEL_UP_MOVE(43, MOVE_FLAIL),
LEVEL_UP_END
};
static const struct LevelUpMove sLeavannyLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_SLASH),
- LEVEL_UP_MOVE( 1, MOVE_SLASH),
- LEVEL_UP_MOVE( 1, MOVE_FALSE_SWIPE),
- LEVEL_UP_MOVE( 1, MOVE_TACKLE),
- LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT),
LEVEL_UP_MOVE( 1, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF),
- LEVEL_UP_MOVE( 8, MOVE_BUG_BITE),
- LEVEL_UP_MOVE(15, MOVE_RAZOR_LEAF),
+ LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT),
+ LEVEL_UP_MOVE( 1, MOVE_FALSE_SWIPE),
LEVEL_UP_MOVE(22, MOVE_STRUGGLE_BUG),
LEVEL_UP_MOVE(29, MOVE_FELL_STINGER),
LEVEL_UP_MOVE(32, MOVE_HELPING_HAND),
@@ -12636,8 +12462,8 @@ static const struct LevelUpMove sScolipedeLevelUpLearnset[] = {
#if P_FAMILY_COTTONEE
static const struct LevelUpMove sCottoneeLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_ABSORB),
LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND),
+ LEVEL_UP_MOVE( 1, MOVE_ABSORB),
LEVEL_UP_MOVE( 3, MOVE_FAIRY_WIND),
LEVEL_UP_MOVE( 6, MOVE_STUN_SPORE),
LEVEL_UP_MOVE(12, MOVE_MEGA_DRAIN),
@@ -12657,28 +12483,28 @@ static const struct LevelUpMove sCottoneeLevelUpLearnset[] = {
};
static const struct LevelUpMove sWhimsicottLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_GUST),
- LEVEL_UP_MOVE( 1, MOVE_TAILWIND),
LEVEL_UP_MOVE( 1, MOVE_MOONBLAST),
- LEVEL_UP_MOVE( 1, MOVE_MEMENTO),
LEVEL_UP_MOVE( 1, MOVE_HURRICANE),
- LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN),
- LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF),
- LEVEL_UP_MOVE( 1, MOVE_GROWTH),
- LEVEL_UP_MOVE( 1, MOVE_POISON_POWDER),
- LEVEL_UP_MOVE( 1, MOVE_GIGA_DRAIN),
- LEVEL_UP_MOVE( 1, MOVE_CHARM),
- LEVEL_UP_MOVE( 1, MOVE_LEECH_SEED),
- LEVEL_UP_MOVE( 1, MOVE_COTTON_SPORE),
+ LEVEL_UP_MOVE( 1, MOVE_COTTON_GUARD),
LEVEL_UP_MOVE( 1, MOVE_ENERGY_BALL),
- LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
+ LEVEL_UP_MOVE( 1, MOVE_TAILWIND),
LEVEL_UP_MOVE( 1, MOVE_ENDEAVOR),
- LEVEL_UP_MOVE( 1, MOVE_COTTON_GUARD),
+ LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND),
+ LEVEL_UP_MOVE( 1, MOVE_MEMENTO),
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
+ LEVEL_UP_MOVE( 1, MOVE_CHARM),
+ LEVEL_UP_MOVE( 1, MOVE_GIGA_DRAIN),
+ LEVEL_UP_MOVE( 1, MOVE_COTTON_SPORE),
+ LEVEL_UP_MOVE( 1, MOVE_STUN_SPORE),
+ LEVEL_UP_MOVE( 1, MOVE_POISON_POWDER),
LEVEL_UP_MOVE( 1, MOVE_SOLAR_BEAM),
+ LEVEL_UP_MOVE( 1, MOVE_RAZOR_LEAF),
+ LEVEL_UP_MOVE( 1, MOVE_GROWTH),
+ LEVEL_UP_MOVE( 1, MOVE_LEECH_SEED),
+ LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN),
LEVEL_UP_MOVE( 1, MOVE_ABSORB),
- LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND),
LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND),
- LEVEL_UP_MOVE( 1, MOVE_STUN_SPORE),
+ LEVEL_UP_MOVE( 1, MOVE_GUST),
LEVEL_UP_END
};
#endif //P_FAMILY_COTTONEE
@@ -13030,13 +12856,13 @@ static const struct LevelUpMove sCrustleLevelUpLearnset[] = {
#if P_FAMILY_SCRAGGY
static const struct LevelUpMove sScraggyLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_LOW_KICK),
LEVEL_UP_MOVE( 1, MOVE_LEER),
+ LEVEL_UP_MOVE( 1, MOVE_LOW_KICK),
LEVEL_UP_MOVE( 4, MOVE_PAYBACK),
LEVEL_UP_MOVE( 8, MOVE_HEADBUTT),
LEVEL_UP_MOVE(12, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE(16, MOVE_FACADE),
- LEVEL_UP_MOVE(20, MOVE_PROTECT),
+ LEVEL_UP_MOVE(20, MOVE_TORMENT),
LEVEL_UP_MOVE(24, MOVE_BEAT_UP),
LEVEL_UP_MOVE(28, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(32, MOVE_BRICK_BREAK),
@@ -13049,13 +12875,13 @@ static const struct LevelUpMove sScraggyLevelUpLearnset[] = {
};
static const struct LevelUpMove sScraftyLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_LOW_KICK),
+ LEVEL_UP_MOVE( 1, MOVE_HEADBUTT),
LEVEL_UP_MOVE( 1, MOVE_LEER),
+ LEVEL_UP_MOVE( 1, MOVE_LOW_KICK),
LEVEL_UP_MOVE( 1, MOVE_PAYBACK),
- LEVEL_UP_MOVE( 1, MOVE_HEADBUTT),
LEVEL_UP_MOVE(12, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE(16, MOVE_FACADE),
- LEVEL_UP_MOVE(20, MOVE_PROTECT),
+ LEVEL_UP_MOVE(20, MOVE_TORMENT),
LEVEL_UP_MOVE(24, MOVE_BEAT_UP),
LEVEL_UP_MOVE(28, MOVE_SCARY_FACE),
LEVEL_UP_MOVE(32, MOVE_BRICK_BREAK),
@@ -13361,7 +13187,6 @@ static const struct LevelUpMove sZoruaHisuianLevelUpLearnset[] = {
LEVEL_UP_MOVE(16, MOVE_CURSE),
LEVEL_UP_MOVE(20, MOVE_TAUNT),
LEVEL_UP_MOVE(24, MOVE_KNOCK_OFF),
- LEVEL_UP_MOVE(28, MOVE_SPITE),
LEVEL_UP_MOVE(32, MOVE_AGILITY),
LEVEL_UP_MOVE(36, MOVE_SHADOW_BALL),
LEVEL_UP_MOVE(40, MOVE_BITTER_MALICE),
@@ -13412,22 +13237,22 @@ static const struct LevelUpMove sMinccinoLevelUpLearnset[] = {
};
static const struct LevelUpMove sCinccinoLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_BULLET_SEED),
- LEVEL_UP_MOVE( 1, MOVE_ROCK_BLAST),
- LEVEL_UP_MOVE( 1, MOVE_SING),
- LEVEL_UP_MOVE( 1, MOVE_CHARM),
+ LEVEL_UP_MOVE( 0, MOVE_TAIL_SLAP),
+ LEVEL_UP_MOVE( 1, MOVE_SLAM),
LEVEL_UP_MOVE( 1, MOVE_SWIFT),
LEVEL_UP_MOVE( 1, MOVE_ENCORE),
- LEVEL_UP_MOVE( 1, MOVE_AFTER_YOU),
- LEVEL_UP_MOVE( 1, MOVE_TAIL_SLAP),
- LEVEL_UP_MOVE( 1, MOVE_TICKLE),
- LEVEL_UP_MOVE( 1, MOVE_SLAM),
+ LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND),
LEVEL_UP_MOVE( 1, MOVE_HYPER_VOICE),
+ LEVEL_UP_MOVE( 1, MOVE_TICKLE),
+ LEVEL_UP_MOVE( 1, MOVE_ROCK_BLAST),
LEVEL_UP_MOVE( 1, MOVE_LAST_RESORT),
- LEVEL_UP_MOVE( 1, MOVE_POUND),
- LEVEL_UP_MOVE( 1, MOVE_BABY_DOLL_EYES),
- LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND),
+ LEVEL_UP_MOVE( 1, MOVE_AFTER_YOU),
LEVEL_UP_MOVE( 1, MOVE_ECHOED_VOICE),
+ LEVEL_UP_MOVE( 1, MOVE_BABY_DOLL_EYES),
+ LEVEL_UP_MOVE( 1, MOVE_POUND),
+ LEVEL_UP_MOVE( 1, MOVE_SING),
+ LEVEL_UP_MOVE( 1, MOVE_CHARM),
+ LEVEL_UP_MOVE( 1, MOVE_BULLET_SEED),
LEVEL_UP_END
};
#endif //P_FAMILY_MINCCINO
@@ -13489,8 +13314,8 @@ static const struct LevelUpMove sGothitelleLevelUpLearnset[] = {
#if P_FAMILY_SOLOSIS
static const struct LevelUpMove sSolosisLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_PROTECT),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
+ LEVEL_UP_MOVE( 1, MOVE_PROTECT),
LEVEL_UP_MOVE( 4, MOVE_RECOVER),
LEVEL_UP_MOVE( 8, MOVE_ENDEAVOR),
LEVEL_UP_MOVE(12, MOVE_PSYBEAM),
@@ -13508,9 +13333,9 @@ static const struct LevelUpMove sSolosisLevelUpLearnset[] = {
};
static const struct LevelUpMove sDuosionLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_PROTECT),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
LEVEL_UP_MOVE( 1, MOVE_RECOVER),
+ LEVEL_UP_MOVE( 1, MOVE_PROTECT),
LEVEL_UP_MOVE( 1, MOVE_ENDEAVOR),
LEVEL_UP_MOVE(12, MOVE_PSYBEAM),
LEVEL_UP_MOVE(16, MOVE_CHARM),
@@ -13528,10 +13353,9 @@ static const struct LevelUpMove sDuosionLevelUpLearnset[] = {
static const struct LevelUpMove sReuniclusLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_HAMMER_ARM),
- LEVEL_UP_MOVE( 1, MOVE_HAMMER_ARM),
- LEVEL_UP_MOVE( 1, MOVE_PROTECT),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
LEVEL_UP_MOVE( 1, MOVE_RECOVER),
+ LEVEL_UP_MOVE( 1, MOVE_PROTECT),
LEVEL_UP_MOVE( 1, MOVE_ENDEAVOR),
LEVEL_UP_MOVE(12, MOVE_PSYBEAM),
LEVEL_UP_MOVE(16, MOVE_CHARM),
@@ -13551,7 +13375,6 @@ static const struct LevelUpMove sReuniclusLevelUpLearnset[] = {
#if P_FAMILY_DUCKLETT
static const struct LevelUpMove sDucklettLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
- LEVEL_UP_MOVE( 3, MOVE_WATER_SPORT),
LEVEL_UP_MOVE( 6, MOVE_DEFOG),
LEVEL_UP_MOVE( 9, MOVE_WING_ATTACK),
LEVEL_UP_MOVE(13, MOVE_WATER_PULSE),
@@ -13569,13 +13392,9 @@ static const struct LevelUpMove sDucklettLevelUpLearnset[] = {
};
static const struct LevelUpMove sSwannaLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_WING_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
- LEVEL_UP_MOVE( 1, MOVE_WATER_SPORT),
LEVEL_UP_MOVE( 1, MOVE_DEFOG),
- LEVEL_UP_MOVE( 1, MOVE_WING_ATTACK),
- LEVEL_UP_MOVE( 3, MOVE_WATER_SPORT),
- LEVEL_UP_MOVE( 6, MOVE_DEFOG),
- LEVEL_UP_MOVE( 9, MOVE_WING_ATTACK),
LEVEL_UP_MOVE(13, MOVE_WATER_PULSE),
LEVEL_UP_MOVE(15, MOVE_AERIAL_ACE),
LEVEL_UP_MOVE(19, MOVE_BUBBLE_BEAM),
@@ -13869,11 +13688,10 @@ static const struct LevelUpMove sJoltikLevelUpLearnset[] = {
static const struct LevelUpMove sGalvantulaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_STICKY_WEB),
- LEVEL_UP_MOVE( 1, MOVE_STICKY_WEB),
LEVEL_UP_MOVE( 1, MOVE_ABSORB),
LEVEL_UP_MOVE( 1, MOVE_FURY_CUTTER),
- LEVEL_UP_MOVE( 1, MOVE_ELECTROWEB),
LEVEL_UP_MOVE( 1, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE( 1, MOVE_ELECTROWEB),
LEVEL_UP_MOVE(12, MOVE_STRING_SHOT),
LEVEL_UP_MOVE(16, MOVE_THUNDER_WAVE),
LEVEL_UP_MOVE(20, MOVE_ELECTRO_BALL),
@@ -14065,8 +13883,8 @@ static const struct LevelUpMove sBeheeyemLevelUpLearnset[] = {
#if P_FAMILY_LITWICK
static const struct LevelUpMove sLitwickLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
LEVEL_UP_MOVE( 1, MOVE_SMOG),
+ LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
LEVEL_UP_MOVE( 4, MOVE_EMBER),
LEVEL_UP_MOVE( 8, MOVE_MINIMIZE),
LEVEL_UP_MOVE(12, MOVE_CONFUSE_RAY),
@@ -14085,10 +13903,10 @@ static const struct LevelUpMove sLitwickLevelUpLearnset[] = {
};
static const struct LevelUpMove sLampentLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
- LEVEL_UP_MOVE( 1, MOVE_SMOG),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_MINIMIZE),
+ LEVEL_UP_MOVE( 1, MOVE_SMOG),
+ LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
LEVEL_UP_MOVE(12, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE(16, MOVE_HEX),
LEVEL_UP_MOVE(20, MOVE_WILL_O_WISP),
@@ -14105,22 +13923,22 @@ static const struct LevelUpMove sLampentLevelUpLearnset[] = {
};
static const struct LevelUpMove sChandelureLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY),
- LEVEL_UP_MOVE( 1, MOVE_HEX),
- LEVEL_UP_MOVE( 1, MOVE_WILL_O_WISP),
+ LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_FIRE_SPIN),
LEVEL_UP_MOVE( 1, MOVE_NIGHT_SHADE),
+ LEVEL_UP_MOVE( 1, MOVE_MINIMIZE),
+ LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY),
+ LEVEL_UP_MOVE( 1, MOVE_SMOG),
LEVEL_UP_MOVE( 1, MOVE_CURSE),
- LEVEL_UP_MOVE( 1, MOVE_SHADOW_BALL),
- LEVEL_UP_MOVE( 1, MOVE_INFERNO),
- LEVEL_UP_MOVE( 1, MOVE_IMPRISON),
LEVEL_UP_MOVE( 1, MOVE_PAIN_SPLIT),
- LEVEL_UP_MOVE( 1, MOVE_OVERHEAT),
+ LEVEL_UP_MOVE( 1, MOVE_SHADOW_BALL),
+ LEVEL_UP_MOVE( 1, MOVE_WILL_O_WISP),
LEVEL_UP_MOVE( 1, MOVE_MEMENTO),
+ LEVEL_UP_MOVE( 1, MOVE_IMPRISON),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
- LEVEL_UP_MOVE( 1, MOVE_SMOG),
- LEVEL_UP_MOVE( 1, MOVE_EMBER),
- LEVEL_UP_MOVE( 1, MOVE_MINIMIZE),
+ LEVEL_UP_MOVE( 1, MOVE_OVERHEAT),
+ LEVEL_UP_MOVE( 1, MOVE_HEX),
+ LEVEL_UP_MOVE( 1, MOVE_INFERNO),
LEVEL_UP_END
};
#endif //P_FAMILY_LITWICK
@@ -14372,11 +14190,11 @@ static const struct LevelUpMove sMienfooLevelUpLearnset[] = {
};
static const struct LevelUpMove sMienshaoLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD),
LEVEL_UP_MOVE( 1, MOVE_POUND),
+ LEVEL_UP_MOVE( 1, MOVE_REVERSAL),
LEVEL_UP_MOVE( 1, MOVE_DETECT),
LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT),
- LEVEL_UP_MOVE( 1, MOVE_REVERSAL),
+ LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD),
LEVEL_UP_MOVE(15, MOVE_FURY_SWIPES),
LEVEL_UP_MOVE(20, MOVE_WIDE_GUARD),
LEVEL_UP_MOVE(25, MOVE_FORCE_PALM),
@@ -14432,12 +14250,12 @@ static const struct LevelUpMove sGolettLevelUpLearnset[] = {
};
static const struct LevelUpMove sGolurkLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_HIGH_HORSEPOWER),
- LEVEL_UP_MOVE( 1, MOVE_FOCUS_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_MUD_SLAP),
- LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
- LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
+ LEVEL_UP_MOVE( 1, MOVE_FOCUS_PUNCH),
LEVEL_UP_MOVE( 1, MOVE_POUND),
+ LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
+ LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
+ LEVEL_UP_MOVE( 1, MOVE_HIGH_HORSEPOWER),
LEVEL_UP_MOVE(12, MOVE_SHADOW_PUNCH),
LEVEL_UP_MOVE(16, MOVE_CURSE),
LEVEL_UP_MOVE(20, MOVE_NIGHT_SHADE),
@@ -14620,13 +14438,12 @@ static const struct LevelUpMove sVullabyLevelUpLearnset[] = {
static const struct LevelUpMove sMandibuzzLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_BONE_RUSH),
- LEVEL_UP_MOVE( 1, MOVE_BONE_RUSH),
- LEVEL_UP_MOVE( 1, MOVE_SKY_ATTACK),
- LEVEL_UP_MOVE( 1, MOVE_TOXIC),
LEVEL_UP_MOVE( 1, MOVE_GUST),
LEVEL_UP_MOVE( 1, MOVE_LEER),
- LEVEL_UP_MOVE( 1, MOVE_FLATTER),
+ LEVEL_UP_MOVE( 1, MOVE_TOXIC),
+ LEVEL_UP_MOVE( 1, MOVE_SKY_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_PLUCK),
+ LEVEL_UP_MOVE( 1, MOVE_FLATTER),
LEVEL_UP_MOVE(18, MOVE_TAILWIND),
LEVEL_UP_MOVE(24, MOVE_KNOCK_OFF),
LEVEL_UP_MOVE(30, MOVE_IRON_DEFENSE),
@@ -14761,7 +14578,6 @@ static const struct LevelUpMove sLarvestaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 6, MOVE_FLAME_CHARGE),
LEVEL_UP_MOVE(12, MOVE_STRUGGLE_BUG),
LEVEL_UP_MOVE(18, MOVE_FLAME_WHEEL),
- LEVEL_UP_MOVE(24, MOVE_BUG_BITE),
LEVEL_UP_MOVE(30, MOVE_SCREECH),
LEVEL_UP_MOVE(36, MOVE_LEECH_LIFE),
LEVEL_UP_MOVE(42, MOVE_BUG_BUZZ),
@@ -14801,8 +14617,8 @@ static const struct LevelUpMove sVolcaronaLevelUpLearnset[] = {
#if P_FAMILY_COBALION
static const struct LevelUpMove sCobalionLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_LEER),
+ LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND),
LEVEL_UP_MOVE( 1, MOVE_WORK_UP),
LEVEL_UP_MOVE( 7, MOVE_METAL_CLAW),
@@ -14821,8 +14637,8 @@ static const struct LevelUpMove sCobalionLevelUpLearnset[] = {
#if P_FAMILY_TERRAKION
static const struct LevelUpMove sTerrakionLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_LEER),
+ LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND),
LEVEL_UP_MOVE( 1, MOVE_WORK_UP),
LEVEL_UP_MOVE( 7, MOVE_SMACK_DOWN),
@@ -14841,8 +14657,9 @@ static const struct LevelUpMove sTerrakionLevelUpLearnset[] = {
#if P_FAMILY_VIRIZION
static const struct LevelUpMove sVirizionLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
+ LEVEL_UP_MOVE( 1, MOVE_TAKE_DOWN),
LEVEL_UP_MOVE( 1, MOVE_LEER),
+ LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND),
LEVEL_UP_MOVE( 1, MOVE_WORK_UP),
LEVEL_UP_MOVE( 7, MOVE_MAGICAL_LEAF),
@@ -14850,7 +14667,7 @@ static const struct LevelUpMove sVirizionLevelUpLearnset[] = {
LEVEL_UP_MOVE(21, MOVE_DOUBLE_KICK),
LEVEL_UP_MOVE(28, MOVE_RETALIATE),
LEVEL_UP_MOVE(35, MOVE_GIGA_DRAIN),
- LEVEL_UP_MOVE(42, MOVE_TAKE_DOWN),
+ LEVEL_UP_MOVE(42, MOVE_SYNTHESIS),
LEVEL_UP_MOVE(49, MOVE_SACRED_SWORD),
LEVEL_UP_MOVE(56, MOVE_SWORDS_DANCE),
LEVEL_UP_MOVE(63, MOVE_LEAF_BLADE),
@@ -14908,9 +14725,9 @@ static const struct LevelUpMove sThundurusLevelUpLearnset[] = {
#if P_FAMILY_RESHIRAM
static const struct LevelUpMove sReshiramLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH),
- LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR),
LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR),
LEVEL_UP_MOVE( 8, MOVE_SLASH),
LEVEL_UP_MOVE(16, MOVE_CRUNCH),
LEVEL_UP_MOVE(24, MOVE_EXTRASENSORY),
@@ -14929,9 +14746,9 @@ static const struct LevelUpMove sReshiramLevelUpLearnset[] = {
#if P_FAMILY_ZEKROM
static const struct LevelUpMove sZekromLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH),
- LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR),
LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
+ LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR),
LEVEL_UP_MOVE( 8, MOVE_SLASH),
LEVEL_UP_MOVE(16, MOVE_CRUNCH),
LEVEL_UP_MOVE(24, MOVE_ZEN_HEADBUTT),
@@ -14973,8 +14790,8 @@ static const struct LevelUpMove sLandorusLevelUpLearnset[] = {
#if P_FAMILY_KYUREM
static const struct LevelUpMove sKyuremLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH),
- LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR),
LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER),
+ LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR),
LEVEL_UP_MOVE( 1, MOVE_FREEZE_DRY),
LEVEL_UP_MOVE( 8, MOVE_SLASH),
LEVEL_UP_MOVE(16, MOVE_ENDEAVOR),
@@ -14993,8 +14810,8 @@ static const struct LevelUpMove sKyuremLevelUpLearnset[] = {
#if P_FUSION_FORMS
static const struct LevelUpMove sKyuremWhiteLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH),
- LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR),
LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER),
+ LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR),
LEVEL_UP_MOVE( 1, MOVE_FREEZE_DRY),
LEVEL_UP_MOVE( 8, MOVE_SLASH),
LEVEL_UP_MOVE(16, MOVE_ENDEAVOR),
@@ -15014,8 +14831,8 @@ static const struct LevelUpMove sKyuremWhiteLevelUpLearnset[] = {
#if P_FUSION_FORMS
static const struct LevelUpMove sKyuremBlackLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH),
- LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR),
LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER),
+ LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR),
LEVEL_UP_MOVE( 1, MOVE_FREEZE_DRY),
LEVEL_UP_MOVE( 8, MOVE_SLASH),
LEVEL_UP_MOVE(16, MOVE_ENDEAVOR),
@@ -15035,11 +14852,11 @@ static const struct LevelUpMove sKyuremBlackLevelUpLearnset[] = {
#if P_FAMILY_KELDEO
static const struct LevelUpMove sKeldeoLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_SECRET_SWORD),
- LEVEL_UP_MOVE( 1, MOVE_AQUA_JET),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND),
+ LEVEL_UP_MOVE( 1, MOVE_AQUA_JET),
LEVEL_UP_MOVE( 1, MOVE_WORK_UP),
+ LEVEL_UP_MOVE( 1, MOVE_SECRET_SWORD),
LEVEL_UP_MOVE( 7, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE(14, MOVE_QUICK_GUARD),
LEVEL_UP_MOVE(21, MOVE_DOUBLE_KICK),
@@ -15497,6 +15314,7 @@ static const struct LevelUpMove sFloetteEternalFlowerLevelUpLearnset[] = {
LEVEL_UP_MOVE(38, MOVE_SYNTHESIS),
LEVEL_UP_MOVE(43, MOVE_MISTY_TERRAIN),
LEVEL_UP_MOVE(46, MOVE_MOONBLAST),
+ LEVEL_UP_MOVE(50, MOVE_LIGHT_OF_RUIN),
LEVEL_UP_MOVE(51, MOVE_PETAL_DANCE),
LEVEL_UP_MOVE(58, MOVE_SOLAR_BEAM),
LEVEL_UP_END
@@ -15638,10 +15456,10 @@ static const struct LevelUpMove sEspurrLevelUpLearnset[] = {
static const struct LevelUpMove sMeowsticMaleLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_MEAN_LOOK),
+ LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE),
+ LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_LEER),
- LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT),
- LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE),
LEVEL_UP_MOVE( 9, MOVE_CONFUSION),
LEVEL_UP_MOVE(12, MOVE_HELPING_HAND),
LEVEL_UP_MOVE(15, MOVE_CHARM),
@@ -15661,10 +15479,10 @@ static const struct LevelUpMove sMeowsticMaleLevelUpLearnset[] = {
static const struct LevelUpMove sMeowsticFemaleLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_MAGICAL_LEAF),
- LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
- LEVEL_UP_MOVE( 1, MOVE_LEER),
- LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT),
LEVEL_UP_MOVE( 1, MOVE_DISARMING_VOICE),
+ LEVEL_UP_MOVE( 1, MOVE_FAKE_OUT),
+ LEVEL_UP_MOVE( 1, MOVE_LEER),
+ LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 9, MOVE_CONFUSION),
LEVEL_UP_MOVE(12, MOVE_STORED_POWER),
LEVEL_UP_MOVE(15, MOVE_CHARGE_BEAM),
@@ -15827,8 +15645,8 @@ static const struct LevelUpMove sSlurpuffLevelUpLearnset[] = {
#if P_FAMILY_INKAY
static const struct LevelUpMove sInkayLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_PECK),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
+ LEVEL_UP_MOVE( 1, MOVE_PECK),
LEVEL_UP_MOVE( 3, MOVE_HYPNOSIS),
LEVEL_UP_MOVE( 6, MOVE_WRAP),
LEVEL_UP_MOVE( 9, MOVE_PAYBACK),
@@ -15846,11 +15664,11 @@ static const struct LevelUpMove sInkayLevelUpLearnset[] = {
};
static const struct LevelUpMove sMalamarLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_REVERSAL),
- LEVEL_UP_MOVE( 1, MOVE_PECK),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
- LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS),
LEVEL_UP_MOVE( 1, MOVE_WRAP),
+ LEVEL_UP_MOVE( 1, MOVE_PECK),
+ LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS),
+ LEVEL_UP_MOVE( 1, MOVE_REVERSAL),
LEVEL_UP_MOVE( 9, MOVE_PAYBACK),
LEVEL_UP_MOVE(12, MOVE_PLUCK),
LEVEL_UP_MOVE(15, MOVE_PSYBEAM),
@@ -16285,8 +16103,8 @@ static const struct LevelUpMove sKlefkiLevelUpLearnset[] = {
#if P_FAMILY_PHANTUMP
static const struct LevelUpMove sPhantumpLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
+ LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
LEVEL_UP_MOVE( 4, MOVE_BRANCH_POKE),
LEVEL_UP_MOVE( 8, MOVE_LEECH_SEED),
LEVEL_UP_MOVE(12, MOVE_CONFUSE_RAY),
@@ -16305,11 +16123,10 @@ static const struct LevelUpMove sPhantumpLevelUpLearnset[] = {
static const struct LevelUpMove sTrevenantLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_SHADOW_CLAW),
- LEVEL_UP_MOVE( 1, MOVE_SHADOW_CLAW),
- LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
- LEVEL_UP_MOVE( 1, MOVE_BRANCH_POKE),
LEVEL_UP_MOVE( 1, MOVE_LEECH_SEED),
+ LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
+ LEVEL_UP_MOVE( 1, MOVE_BRANCH_POKE),
LEVEL_UP_MOVE(12, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE(16, MOVE_WILL_O_WISP),
LEVEL_UP_MOVE(20, MOVE_HEX),
@@ -16765,14 +16582,13 @@ static const struct LevelUpMove sTorracatLevelUpLearnset[] = {
static const struct LevelUpMove sIncineroarLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_DARKEST_LARIAT),
- LEVEL_UP_MOVE( 1, MOVE_DARKEST_LARIAT),
- LEVEL_UP_MOVE( 1, MOVE_CROSS_CHOP),
- LEVEL_UP_MOVE( 1, MOVE_THROAT_CHOP),
- LEVEL_UP_MOVE( 1, MOVE_BULK_UP),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
+ LEVEL_UP_MOVE( 1, MOVE_THROAT_CHOP),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_LICK),
+ LEVEL_UP_MOVE( 1, MOVE_CROSS_CHOP),
+ LEVEL_UP_MOVE( 1, MOVE_BULK_UP),
LEVEL_UP_MOVE( 9, MOVE_ROAR),
LEVEL_UP_MOVE(12, MOVE_FURY_SWIPES),
LEVEL_UP_MOVE(15, MOVE_BITE),
@@ -16826,7 +16642,6 @@ static const struct LevelUpMove sBrionneLevelUpLearnset[] = {
static const struct LevelUpMove sPrimarinaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_SPARKLING_ARIA),
- LEVEL_UP_MOVE( 1, MOVE_SPARKLING_ARIA),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
@@ -16864,14 +16679,11 @@ static const struct LevelUpMove sPikipekLevelUpLearnset[] = {
};
static const struct LevelUpMove sTrumbeakLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_ROCK_BLAST),
- LEVEL_UP_MOVE( 1, MOVE_PECK),
- LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_ECHOED_VOICE),
+ LEVEL_UP_MOVE( 1, MOVE_GROWL),
+ LEVEL_UP_MOVE( 1, MOVE_PECK),
LEVEL_UP_MOVE( 1, MOVE_ROCK_SMASH),
- LEVEL_UP_MOVE( 3, MOVE_GROWL),
- LEVEL_UP_MOVE( 7, MOVE_ECHOED_VOICE),
- LEVEL_UP_MOVE( 9, MOVE_ROCK_SMASH),
+ LEVEL_UP_MOVE( 1, MOVE_ROCK_BLAST),
LEVEL_UP_MOVE(13, MOVE_SUPERSONIC),
LEVEL_UP_MOVE(16, MOVE_PLUCK),
LEVEL_UP_MOVE(21, MOVE_ROOST),
@@ -16886,15 +16698,11 @@ static const struct LevelUpMove sTrumbeakLevelUpLearnset[] = {
static const struct LevelUpMove sToucannonLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_BEAK_BLAST),
- LEVEL_UP_MOVE( 1, MOVE_BEAK_BLAST),
- LEVEL_UP_MOVE( 1, MOVE_ROCK_BLAST),
- LEVEL_UP_MOVE( 1, MOVE_PECK),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
- LEVEL_UP_MOVE( 1, MOVE_ECHOED_VOICE),
+ LEVEL_UP_MOVE( 1, MOVE_PECK),
LEVEL_UP_MOVE( 1, MOVE_ROCK_SMASH),
- LEVEL_UP_MOVE( 3, MOVE_GROWL),
- LEVEL_UP_MOVE( 7, MOVE_ECHOED_VOICE),
- LEVEL_UP_MOVE( 9, MOVE_ROCK_SMASH),
+ LEVEL_UP_MOVE( 1, MOVE_ROCK_BLAST),
+ LEVEL_UP_MOVE( 1, MOVE_ECHOED_VOICE),
LEVEL_UP_MOVE(13, MOVE_SUPERSONIC),
LEVEL_UP_MOVE(16, MOVE_PLUCK),
LEVEL_UP_MOVE(21, MOVE_ROOST),
@@ -16963,10 +16771,9 @@ static const struct LevelUpMove sGrubbinLevelUpLearnset[] = {
static const struct LevelUpMove sCharjabugLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_CHARGE),
- LEVEL_UP_MOVE( 1, MOVE_CHARGE),
LEVEL_UP_MOVE( 1, MOVE_VISE_GRIP),
- LEVEL_UP_MOVE( 1, MOVE_MUD_SLAP),
LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT),
+ LEVEL_UP_MOVE( 1, MOVE_MUD_SLAP),
LEVEL_UP_MOVE( 1, MOVE_BUG_BITE),
LEVEL_UP_MOVE(15, MOVE_BITE),
LEVEL_UP_MOVE(23, MOVE_SPARK),
@@ -16981,17 +16788,16 @@ static const struct LevelUpMove sCharjabugLevelUpLearnset[] = {
static const struct LevelUpMove sVikavoltLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_THUNDERBOLT),
- LEVEL_UP_MOVE( 1, MOVE_THUNDERBOLT),
- LEVEL_UP_MOVE( 1, MOVE_CHARGE),
- LEVEL_UP_MOVE( 1, MOVE_X_SCISSOR),
- LEVEL_UP_MOVE( 1, MOVE_CRUNCH),
- LEVEL_UP_MOVE( 1, MOVE_DIG),
- LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE),
- LEVEL_UP_MOVE( 1, MOVE_DISCHARGE),
LEVEL_UP_MOVE( 1, MOVE_VISE_GRIP),
+ LEVEL_UP_MOVE( 1, MOVE_DIG),
LEVEL_UP_MOVE( 1, MOVE_MUD_SLAP),
- LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT),
+ LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE),
+ LEVEL_UP_MOVE( 1, MOVE_X_SCISSOR),
LEVEL_UP_MOVE( 1, MOVE_BUG_BITE),
+ LEVEL_UP_MOVE( 1, MOVE_STRING_SHOT),
+ LEVEL_UP_MOVE( 1, MOVE_CRUNCH),
+ LEVEL_UP_MOVE( 1, MOVE_CHARGE),
+ LEVEL_UP_MOVE( 1, MOVE_DISCHARGE),
LEVEL_UP_MOVE(15, MOVE_BITE),
LEVEL_UP_MOVE(23, MOVE_SPARK),
LEVEL_UP_MOVE(29, MOVE_STICKY_WEB),
@@ -17069,7 +16875,7 @@ static const struct LevelUpMove sCutieflyLevelUpLearnset[] = {
LEVEL_UP_MOVE(12, MOVE_SWEET_SCENT),
LEVEL_UP_MOVE(18, MOVE_DRAINING_KISS),
LEVEL_UP_MOVE(24, MOVE_STRUGGLE_BUG),
- LEVEL_UP_MOVE(30, MOVE_AROMATHERAPY),
+ LEVEL_UP_MOVE(30, MOVE_COVET),
LEVEL_UP_MOVE(36, MOVE_SWITCHEROO),
LEVEL_UP_MOVE(42, MOVE_DAZZLING_GLEAM),
LEVEL_UP_MOVE(48, MOVE_BUG_BUZZ),
@@ -17079,15 +16885,13 @@ static const struct LevelUpMove sCutieflyLevelUpLearnset[] = {
static const struct LevelUpMove sRibombeeLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_POLLEN_PUFF),
- LEVEL_UP_MOVE( 1, MOVE_POLLEN_PUFF),
- LEVEL_UP_MOVE( 1, MOVE_COVET),
LEVEL_UP_MOVE( 1, MOVE_ABSORB),
- LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND),
LEVEL_UP_MOVE( 1, MOVE_STUN_SPORE),
LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT),
+ LEVEL_UP_MOVE( 1, MOVE_FAIRY_WIND),
LEVEL_UP_MOVE(18, MOVE_DRAINING_KISS),
LEVEL_UP_MOVE(24, MOVE_STRUGGLE_BUG),
- LEVEL_UP_MOVE(32, MOVE_AROMATHERAPY),
+ LEVEL_UP_MOVE(32, MOVE_COVET),
LEVEL_UP_MOVE(40, MOVE_SWITCHEROO),
LEVEL_UP_MOVE(48, MOVE_DAZZLING_GLEAM),
LEVEL_UP_MOVE(56, MOVE_BUG_BUZZ),
@@ -17298,11 +17102,11 @@ static const struct LevelUpMove sDewpiderLevelUpLearnset[] = {
};
static const struct LevelUpMove sAraquanidLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD),
+ LEVEL_UP_MOVE( 1, MOVE_BITE),
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
- LEVEL_UP_MOVE( 1, MOVE_INFESTATION),
LEVEL_UP_MOVE( 1, MOVE_BUG_BITE),
- LEVEL_UP_MOVE( 1, MOVE_BITE),
+ LEVEL_UP_MOVE( 1, MOVE_WIDE_GUARD),
+ LEVEL_UP_MOVE( 1, MOVE_INFESTATION),
LEVEL_UP_MOVE(12, MOVE_BUBBLE_BEAM),
LEVEL_UP_MOVE(16, MOVE_AQUA_RING),
LEVEL_UP_MOVE(20, MOVE_HEADBUTT),
@@ -17529,7 +17333,7 @@ static const struct LevelUpMove sComfeyLevelUpLearnset[] = {
LEVEL_UP_MOVE( 3, MOVE_VINE_WHIP),
LEVEL_UP_MOVE( 6, MOVE_HELPING_HAND),
LEVEL_UP_MOVE( 9, MOVE_DRAINING_KISS),
- LEVEL_UP_MOVE(12, MOVE_FLOWER_SHIELD),
+ LEVEL_UP_MOVE(12, MOVE_CHARM),
LEVEL_UP_MOVE(15, MOVE_MAGICAL_LEAF),
LEVEL_UP_MOVE(18, MOVE_SYNTHESIS),
LEVEL_UP_MOVE(21, MOVE_LEECH_SEED),
@@ -17537,7 +17341,7 @@ static const struct LevelUpMove sComfeyLevelUpLearnset[] = {
LEVEL_UP_MOVE(27, MOVE_SWEET_KISS),
LEVEL_UP_MOVE(30, MOVE_FLORAL_HEALING),
LEVEL_UP_MOVE(33, MOVE_PETAL_BLIZZARD),
- LEVEL_UP_MOVE(36, MOVE_AROMATHERAPY),
+ LEVEL_UP_MOVE(36, MOVE_BIND),
LEVEL_UP_MOVE(39, MOVE_PLAY_ROUGH),
LEVEL_UP_MOVE(42, MOVE_SWEET_SCENT),
LEVEL_UP_MOVE(45, MOVE_PETAL_DANCE),
@@ -17731,7 +17535,7 @@ static const struct LevelUpMove sMiniorLevelUpLearnset[] = {
LEVEL_UP_MOVE(22, MOVE_SELF_DESTRUCT),
LEVEL_UP_MOVE(24, MOVE_STEALTH_ROCK),
LEVEL_UP_MOVE(29, MOVE_TAKE_DOWN),
- LEVEL_UP_MOVE(31, MOVE_AUTOTOMIZE),
+ LEVEL_UP_MOVE(31, MOVE_ROCK_POLISH),
LEVEL_UP_MOVE(36, MOVE_COSMIC_POWER),
LEVEL_UP_MOVE(38, MOVE_POWER_GEM),
LEVEL_UP_MOVE(43, MOVE_DOUBLE_EDGE),
@@ -17902,7 +17706,6 @@ static const struct LevelUpMove sJangmoOLevelUpLearnset[] = {
};
static const struct LevelUpMove sHakamoOLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_AUTOTOMIZE),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_PROTECT),
@@ -17922,9 +17725,7 @@ static const struct LevelUpMove sHakamoOLevelUpLearnset[] = {
static const struct LevelUpMove sKommoOLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_CLANGING_SCALES),
- LEVEL_UP_MOVE( 1, MOVE_CLANGING_SCALES),
LEVEL_UP_MOVE( 1, MOVE_BELLY_DRUM),
- LEVEL_UP_MOVE( 1, MOVE_AUTOTOMIZE),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_PROTECT),
@@ -18047,17 +17848,15 @@ static const struct LevelUpMove sCosmogLevelUpLearnset[] = {
static const struct LevelUpMove sCosmoemLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_COSMIC_POWER),
- LEVEL_UP_MOVE( 1, MOVE_COSMIC_POWER),
LEVEL_UP_MOVE( 1, MOVE_TELEPORT),
LEVEL_UP_END
};
static const struct LevelUpMove sSolgaleoLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_SUNSTEEL_STRIKE),
- LEVEL_UP_MOVE( 1, MOVE_SUNSTEEL_STRIKE),
- LEVEL_UP_MOVE( 1, MOVE_COSMIC_POWER),
LEVEL_UP_MOVE( 1, MOVE_TELEPORT),
LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW),
+ LEVEL_UP_MOVE( 1, MOVE_COSMIC_POWER),
LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR),
LEVEL_UP_MOVE( 7, MOVE_IRON_HEAD),
LEVEL_UP_MOVE(14, MOVE_METAL_SOUND),
@@ -18076,23 +17875,21 @@ static const struct LevelUpMove sSolgaleoLevelUpLearnset[] = {
static const struct LevelUpMove sLunalaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_MOONGEIST_BEAM),
- LEVEL_UP_MOVE( 1, MOVE_MOONGEIST_BEAM),
- LEVEL_UP_MOVE( 1, MOVE_COSMIC_POWER),
- LEVEL_UP_MOVE( 1, MOVE_TELEPORT),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
LEVEL_UP_MOVE( 1, MOVE_HYPNOSIS),
+ LEVEL_UP_MOVE( 1, MOVE_TELEPORT),
+ LEVEL_UP_MOVE( 1, MOVE_COSMIC_POWER),
LEVEL_UP_MOVE( 7, MOVE_NIGHT_SHADE),
LEVEL_UP_MOVE(14, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE(21, MOVE_AIR_SLASH),
LEVEL_UP_MOVE(28, MOVE_SHADOW_BALL),
LEVEL_UP_MOVE(35, MOVE_MOONLIGHT),
LEVEL_UP_MOVE(42, MOVE_NIGHT_DAZE),
- LEVEL_UP_MOVE(49, MOVE_MAGIC_COAT),
+ LEVEL_UP_MOVE(49, MOVE_PSYCHIC),
LEVEL_UP_MOVE(56, MOVE_MOONBLAST),
LEVEL_UP_MOVE(63, MOVE_PHANTOM_FORCE),
LEVEL_UP_MOVE(70, MOVE_DREAM_EATER),
LEVEL_UP_MOVE(77, MOVE_WIDE_GUARD),
- LEVEL_UP_MOVE(84, MOVE_HYPER_BEAM),
LEVEL_UP_END
};
#endif //P_FAMILY_COSMOG
@@ -18255,12 +18052,11 @@ static const struct LevelUpMove sGuzzlordLevelUpLearnset[] = {
#if P_FAMILY_NECROZMA
static const struct LevelUpMove sNecrozmaLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_MOONLIGHT),
+ LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
+ LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW),
LEVEL_UP_MOVE( 1, MOVE_MORNING_SUN),
+ LEVEL_UP_MOVE( 1, MOVE_MOONLIGHT),
LEVEL_UP_MOVE( 1, MOVE_CHARGE_BEAM),
- LEVEL_UP_MOVE( 1, MOVE_GRAVITY),
- LEVEL_UP_MOVE( 1, MOVE_METAL_CLAW),
- LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
LEVEL_UP_MOVE( 8, MOVE_STEALTH_ROCK),
LEVEL_UP_MOVE(16, MOVE_SLASH),
LEVEL_UP_MOVE(24, MOVE_NIGHT_SLASH),
@@ -18270,7 +18066,7 @@ static const struct LevelUpMove sNecrozmaLevelUpLearnset[] = {
LEVEL_UP_MOVE(56, MOVE_IRON_DEFENSE),
LEVEL_UP_MOVE(64, MOVE_POWER_GEM),
LEVEL_UP_MOVE(72, MOVE_PHOTON_GEYSER),
- LEVEL_UP_MOVE(80, MOVE_AUTOTOMIZE),
+ LEVEL_UP_MOVE(80, MOVE_GRAVITY),
LEVEL_UP_MOVE(88, MOVE_PRISMATIC_LASER),
LEVEL_UP_END
};
@@ -19018,6 +18814,7 @@ static const struct LevelUpMove sAppletunLevelUpLearnset[] = {
#if P_GEN_9_CROSS_EVOS
static const struct LevelUpMove sDipplinLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_DOUBLE_HIT),
+ LEVEL_UP_MOVE( 1, MOVE_INFESTATION),
LEVEL_UP_MOVE( 1, MOVE_WITHDRAW),
LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT),
LEVEL_UP_MOVE( 1, MOVE_RECYCLE),
@@ -19037,6 +18834,9 @@ static const struct LevelUpMove sDipplinLevelUpLearnset[] = {
static const struct LevelUpMove sHydrappleLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_FICKLE_BEAM),
+ LEVEL_UP_MOVE( 1, MOVE_YAWN),
+ LEVEL_UP_MOVE( 1, MOVE_DOUBLE_HIT),
+ LEVEL_UP_MOVE( 1, MOVE_INFESTATION),
LEVEL_UP_MOVE( 1, MOVE_WITHDRAW),
LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT),
LEVEL_UP_MOVE( 1, MOVE_RECYCLE),
@@ -19096,8 +18896,8 @@ static const struct LevelUpMove sCramorantLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_BELCH),
LEVEL_UP_MOVE( 1, MOVE_PECK),
LEVEL_UP_MOVE( 1, MOVE_STOCKPILE),
- LEVEL_UP_MOVE( 1, MOVE_SWALLOW),
LEVEL_UP_MOVE( 1, MOVE_SPIT_UP),
+ LEVEL_UP_MOVE( 1, MOVE_SWALLOW),
LEVEL_UP_MOVE( 7, MOVE_WATER_GUN),
LEVEL_UP_MOVE(14, MOVE_FURY_ATTACK),
LEVEL_UP_MOVE(21, MOVE_PLUCK),
@@ -19432,7 +19232,7 @@ static const struct LevelUpMove sMilceryLevelUpLearnset[] = {
LEVEL_UP_MOVE( 5, MOVE_SWEET_KISS),
LEVEL_UP_MOVE(10, MOVE_SWEET_SCENT),
LEVEL_UP_MOVE(15, MOVE_DRAINING_KISS),
- LEVEL_UP_MOVE(20, MOVE_AROMATHERAPY),
+ LEVEL_UP_MOVE(20, MOVE_CHARM),
LEVEL_UP_MOVE(25, MOVE_ATTRACT),
LEVEL_UP_MOVE(30, MOVE_ACID_ARMOR),
LEVEL_UP_MOVE(35, MOVE_DAZZLING_GLEAM),
@@ -19444,13 +19244,12 @@ static const struct LevelUpMove sMilceryLevelUpLearnset[] = {
static const struct LevelUpMove sAlcremieLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_DECORATE),
- LEVEL_UP_MOVE( 1, MOVE_DECORATE),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
- LEVEL_UP_MOVE( 1, MOVE_AROMATIC_MIST),
LEVEL_UP_MOVE( 1, MOVE_SWEET_KISS),
LEVEL_UP_MOVE( 1, MOVE_SWEET_SCENT),
+ LEVEL_UP_MOVE( 1, MOVE_AROMATIC_MIST),
LEVEL_UP_MOVE(15, MOVE_DRAINING_KISS),
- LEVEL_UP_MOVE(20, MOVE_AROMATHERAPY),
+ LEVEL_UP_MOVE(20, MOVE_CHARM),
LEVEL_UP_MOVE(25, MOVE_ATTRACT),
LEVEL_UP_MOVE(30, MOVE_ACID_ARMOR),
LEVEL_UP_MOVE(35, MOVE_DAZZLING_GLEAM),
@@ -19605,8 +19404,8 @@ static const struct LevelUpMove sIndeedeeFemaleLevelUpLearnset[] = {
#if P_FAMILY_MORPEKO
static const struct LevelUpMove sMorpekoLevelUpLearnset[] = {
- LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
+ LEVEL_UP_MOVE( 1, MOVE_THUNDER_SHOCK),
LEVEL_UP_MOVE( 5, MOVE_LEER),
LEVEL_UP_MOVE(10, MOVE_POWER_TRIP),
LEVEL_UP_MOVE(15, MOVE_QUICK_ATTACK),
@@ -20079,29 +19878,30 @@ static const struct LevelUpMove sCalyrexLevelUpLearnset[] = {
#if P_FUSION_FORMS
static const struct LevelUpMove sCalyrexIceRiderLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_GLACIAL_LANCE),
- LEVEL_UP_MOVE( 1, MOVE_TACKLE),
- LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
- LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK),
- LEVEL_UP_MOVE( 1, MOVE_AVALANCHE),
- LEVEL_UP_MOVE( 1, MOVE_STOMP),
- LEVEL_UP_MOVE( 1, MOVE_TORMENT),
- LEVEL_UP_MOVE( 1, MOVE_MIST),
LEVEL_UP_MOVE( 1, MOVE_ICICLE_CRASH),
- LEVEL_UP_MOVE( 1, MOVE_TAKE_DOWN),
+ LEVEL_UP_MOVE( 1, MOVE_AVALANCHE),
LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE),
- LEVEL_UP_MOVE( 1, MOVE_THRASH),
LEVEL_UP_MOVE( 1, MOVE_TAUNT),
- LEVEL_UP_MOVE( 1, MOVE_DOUBLE_EDGE),
- LEVEL_UP_MOVE( 1, MOVE_SWORDS_DANCE),
- LEVEL_UP_MOVE( 1, MOVE_POUND),
- LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN),
+ LEVEL_UP_MOVE( 1, MOVE_TORMENT),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
LEVEL_UP_MOVE( 1, MOVE_GROWTH),
+ LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN),
+ LEVEL_UP_MOVE( 1, MOVE_POUND),
+ LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
+ LEVEL_UP_MOVE( 1, MOVE_SWORDS_DANCE),
+ LEVEL_UP_MOVE( 1, MOVE_DOUBLE_EDGE),
+ LEVEL_UP_MOVE( 1, MOVE_THRASH),
+ LEVEL_UP_MOVE( 1, MOVE_STOMP),
+ LEVEL_UP_MOVE( 1, MOVE_TAKE_DOWN),
+ LEVEL_UP_MOVE( 1, MOVE_TACKLE),
+ LEVEL_UP_MOVE( 1, MOVE_MIST),
+ LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK),
LEVEL_UP_MOVE( 8, MOVE_LIFE_DEW),
LEVEL_UP_MOVE(16, MOVE_GIGA_DRAIN),
LEVEL_UP_MOVE(24, MOVE_PSYSHOCK),
LEVEL_UP_MOVE(32, MOVE_HELPING_HAND),
- LEVEL_UP_MOVE(40, MOVE_AROMATHERAPY),
+ LEVEL_UP_MOVE(40, MOVE_GRASSY_TERRAIN),
+ LEVEL_UP_MOVE(40, MOVE_PSYCHIC_TERRAIN),
LEVEL_UP_MOVE(48, MOVE_ENERGY_BALL),
LEVEL_UP_MOVE(56, MOVE_PSYCHIC),
LEVEL_UP_MOVE(64, MOVE_LEECH_SEED),
@@ -20115,29 +19915,30 @@ static const struct LevelUpMove sCalyrexIceRiderLevelUpLearnset[] = {
#if P_FUSION_FORMS
static const struct LevelUpMove sCalyrexShadowRiderLevelUpLearnset[] = {
LEVEL_UP_MOVE( 1, MOVE_ASTRAL_BARRAGE),
- LEVEL_UP_MOVE( 1, MOVE_TACKLE),
- LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
- LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK),
LEVEL_UP_MOVE( 1, MOVE_HEX),
- LEVEL_UP_MOVE( 1, MOVE_STOMP),
- LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY),
- LEVEL_UP_MOVE( 1, MOVE_HAZE),
+ LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT),
LEVEL_UP_MOVE( 1, MOVE_SHADOW_BALL),
- LEVEL_UP_MOVE( 1, MOVE_TAKE_DOWN),
+ LEVEL_UP_MOVE( 1, MOVE_HAZE),
+ LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY),
+ LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
+ LEVEL_UP_MOVE( 1, MOVE_GROWTH),
+ LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN),
LEVEL_UP_MOVE( 1, MOVE_AGILITY),
- LEVEL_UP_MOVE( 1, MOVE_THRASH),
+ LEVEL_UP_MOVE( 1, MOVE_STOMP),
+ LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK),
LEVEL_UP_MOVE( 1, MOVE_DISABLE),
- LEVEL_UP_MOVE( 1, MOVE_DOUBLE_EDGE),
- LEVEL_UP_MOVE( 1, MOVE_NASTY_PLOT),
+ LEVEL_UP_MOVE( 1, MOVE_TACKLE),
+ LEVEL_UP_MOVE( 1, MOVE_TAKE_DOWN),
+ LEVEL_UP_MOVE( 1, MOVE_THRASH),
LEVEL_UP_MOVE( 1, MOVE_POUND),
- LEVEL_UP_MOVE( 1, MOVE_MEGA_DRAIN),
- LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
- LEVEL_UP_MOVE( 1, MOVE_GROWTH),
+ LEVEL_UP_MOVE( 1, MOVE_DOUBLE_EDGE),
+ LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
LEVEL_UP_MOVE( 8, MOVE_LIFE_DEW),
LEVEL_UP_MOVE(16, MOVE_GIGA_DRAIN),
LEVEL_UP_MOVE(24, MOVE_PSYSHOCK),
LEVEL_UP_MOVE(32, MOVE_HELPING_HAND),
- LEVEL_UP_MOVE(40, MOVE_AROMATHERAPY),
+ LEVEL_UP_MOVE(40, MOVE_GRASSY_TERRAIN),
+ LEVEL_UP_MOVE(40, MOVE_PSYCHIC_TERRAIN),
LEVEL_UP_MOVE(48, MOVE_ENERGY_BALL),
LEVEL_UP_MOVE(56, MOVE_PSYCHIC),
LEVEL_UP_MOVE(64, MOVE_LEECH_SEED),
@@ -20210,6 +20011,8 @@ static const struct LevelUpMove sFloragatoLevelUpLearnset[] = {
static const struct LevelUpMove sMeowscaradaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_FLOWER_TRICK),
+ LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM),
+ LEVEL_UP_MOVE( 1, MOVE_TRICK),
LEVEL_UP_MOVE( 1, MOVE_LEAFAGE),
LEVEL_UP_MOVE( 1, MOVE_SCRATCH),
LEVEL_UP_MOVE( 1, MOVE_TAIL_WHIP),
@@ -20268,6 +20071,8 @@ static const struct LevelUpMove sCrocalorLevelUpLearnset[] = {
static const struct LevelUpMove sSkeledirgeLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_TORCH_SONG),
+ LEVEL_UP_MOVE( 1, MOVE_SING),
+ LEVEL_UP_MOVE( 1, MOVE_YAWN),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_LEER),
@@ -20327,6 +20132,7 @@ static const struct LevelUpMove sQuaxwellLevelUpLearnset[] = {
static const struct LevelUpMove sQuaquavalLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_AQUA_STEP),
+ LEVEL_UP_MOVE( 1, MOVE_COUNTER),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_GROWL),
LEVEL_UP_MOVE( 1, MOVE_WATER_GUN),
@@ -20811,6 +20617,10 @@ static const struct LevelUpMove sArmarougeLevelUpLearnset[] = {
static const struct LevelUpMove sCeruledgeLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_SHADOW_CLAW),
+ LEVEL_UP_MOVE( 1, MOVE_NIGHT_SLASH),
+ LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK),
+ LEVEL_UP_MOVE( 1, MOVE_QUICK_GUARD),
+ LEVEL_UP_MOVE( 1, MOVE_SOLAR_BLADE),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
@@ -21147,6 +20957,8 @@ static const struct LevelUpMove sRellorLevelUpLearnset[] = {
static const struct LevelUpMove sRabscaLevelUpLearnset[] = {
LEVEL_UP_MOVE( 0, MOVE_REVIVAL_BLESSING),
+ LEVEL_UP_MOVE( 1, MOVE_SAFEGUARD),
+ LEVEL_UP_MOVE( 1, MOVE_PSYCH_UP),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
LEVEL_UP_MOVE( 1, MOVE_CONFUSION),
@@ -21673,6 +21485,7 @@ static const struct LevelUpMove sGreatTuskLevelUpLearnset[] = {
#if P_FAMILY_SCREAM_TAIL
static const struct LevelUpMove sScreamTailLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_POUND),
LEVEL_UP_MOVE( 1, MOVE_SING),
LEVEL_UP_MOVE( 1, MOVE_DISABLE),
@@ -21695,6 +21508,7 @@ static const struct LevelUpMove sScreamTailLevelUpLearnset[] = {
#if P_FAMILY_BRUTE_BONNET
static const struct LevelUpMove sBruteBonnetLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_ABSORB),
LEVEL_UP_MOVE( 1, MOVE_GROWTH),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
@@ -21716,6 +21530,7 @@ static const struct LevelUpMove sBruteBonnetLevelUpLearnset[] = {
#if P_FAMILY_FLUTTER_MANE
static const struct LevelUpMove sFlutterManeLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_CONFUSE_RAY),
LEVEL_UP_MOVE( 1, MOVE_SPITE),
LEVEL_UP_MOVE( 1, MOVE_ASTONISH),
@@ -21738,6 +21553,7 @@ static const struct LevelUpMove sFlutterManeLevelUpLearnset[] = {
#if P_FAMILY_SLITHER_WING
static const struct LevelUpMove sSlitherWingLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_GUST),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
LEVEL_UP_MOVE( 1, MOVE_BUG_BITE),
@@ -21761,6 +21577,7 @@ static const struct LevelUpMove sSlitherWingLevelUpLearnset[] = {
#if P_FAMILY_SANDY_SHOCKS
static const struct LevelUpMove sSandyShocksLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_THUNDER_WAVE),
LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_SUPERSONIC),
@@ -21806,6 +21623,7 @@ static const struct LevelUpMove sIronTreadsLevelUpLearnset[] = {
#if P_FAMILY_IRON_BUNDLE
static const struct LevelUpMove sIronBundleLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_PRESENT),
LEVEL_UP_MOVE( 7, MOVE_POWDER_SNOW),
LEVEL_UP_MOVE(14, MOVE_WHIRLPOOL),
@@ -21826,6 +21644,7 @@ static const struct LevelUpMove sIronBundleLevelUpLearnset[] = {
#if P_FAMILY_IRON_HANDS
static const struct LevelUpMove sIronHandsLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_SAND_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_TACKLE),
LEVEL_UP_MOVE( 1, MOVE_FOCUS_ENERGY),
@@ -21872,6 +21691,7 @@ static const struct LevelUpMove sIronJugulisLevelUpLearnset[] = {
#if P_FAMILY_IRON_MOTH
static const struct LevelUpMove sIronMothLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_GUST),
LEVEL_UP_MOVE( 1, MOVE_WHIRLWIND),
LEVEL_UP_MOVE( 1, MOVE_EMBER),
@@ -21895,11 +21715,12 @@ static const struct LevelUpMove sIronMothLevelUpLearnset[] = {
#if P_FAMILY_IRON_THORNS
static const struct LevelUpMove sIronThornsLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_ROCK_THROW),
LEVEL_UP_MOVE( 1, MOVE_FIRE_FANG),
LEVEL_UP_MOVE( 1, MOVE_ICE_FANG),
- LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
LEVEL_UP_MOVE( 1, MOVE_IRON_DEFENSE),
+ LEVEL_UP_MOVE( 1, MOVE_THUNDER_FANG),
LEVEL_UP_MOVE( 7, MOVE_SCREECH),
LEVEL_UP_MOVE(21, MOVE_ROCK_TOMB),
LEVEL_UP_MOVE(28, MOVE_BITE),
@@ -22096,6 +21917,10 @@ static const struct LevelUpMove sChiYuLevelUpLearnset[] = {
#if P_FAMILY_ROARING_MOON
static const struct LevelUpMove sRoaringMoonLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
+ LEVEL_UP_MOVE( 1, MOVE_JAW_LOCK),
+ LEVEL_UP_MOVE( 1, MOVE_BREAKING_SWIPE),
+ LEVEL_UP_MOVE( 1, MOVE_SCALE_SHOT),
LEVEL_UP_MOVE( 1, MOVE_DRAGON_BREATH),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_BITE),
@@ -22119,6 +21944,7 @@ static const struct LevelUpMove sRoaringMoonLevelUpLearnset[] = {
#if P_FAMILY_IRON_VALIANT
static const struct LevelUpMove sIronValiantLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_DISABLE),
LEVEL_UP_MOVE( 1, MOVE_DOUBLE_TEAM),
LEVEL_UP_MOVE( 1, MOVE_SHADOW_SNEAK),
@@ -22134,8 +21960,8 @@ static const struct LevelUpMove sIronValiantLevelUpLearnset[] = {
LEVEL_UP_MOVE(63, MOVE_CLOSE_COMBAT),
LEVEL_UP_MOVE(70, MOVE_KNOCK_OFF),
LEVEL_UP_MOVE(77, MOVE_DESTINY_BOND),
- LEVEL_UP_MOVE(84, MOVE_QUICK_GUARD),
LEVEL_UP_MOVE(84, MOVE_WIDE_GUARD),
+ LEVEL_UP_MOVE(84, MOVE_QUICK_GUARD),
LEVEL_UP_MOVE(91, MOVE_SPIRIT_BREAK),
LEVEL_UP_END
};
@@ -22187,6 +22013,8 @@ static const struct LevelUpMove sMiraidonLevelUpLearnset[] = {
#if P_FAMILY_WALKING_WAKE
static const struct LevelUpMove sWalkingWakeLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
+ LEVEL_UP_MOVE( 1, MOVE_HONE_CLAWS),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_ROAR),
LEVEL_UP_MOVE( 1, MOVE_TWISTER),
@@ -22208,6 +22036,8 @@ static const struct LevelUpMove sWalkingWakeLevelUpLearnset[] = {
#if P_FAMILY_IRON_LEAVES
static const struct LevelUpMove sIronLeavesLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_QUASH),
+ LEVEL_UP_MOVE( 1, MOVE_ELECTRIC_TERRAIN),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
LEVEL_UP_MOVE( 1, MOVE_HELPING_HAND),
@@ -22315,8 +22145,8 @@ static const struct LevelUpMove sFezandipitiLevelUpLearnset[] = {
LEVEL_UP_MOVE(32, MOVE_CROSS_POISON),
LEVEL_UP_MOVE(40, MOVE_TAIL_SLAP),
LEVEL_UP_MOVE(48, MOVE_BEAT_UP),
- LEVEL_UP_MOVE(56, MOVE_FLATTER),
LEVEL_UP_MOVE(56, MOVE_SWAGGER),
+ LEVEL_UP_MOVE(56, MOVE_FLATTER),
LEVEL_UP_MOVE(64, MOVE_ROOST),
LEVEL_UP_MOVE(72, MOVE_MOONBLAST),
LEVEL_UP_END
@@ -22325,6 +22155,10 @@ static const struct LevelUpMove sFezandipitiLevelUpLearnset[] = {
#if P_FAMILY_OGERPON
static const struct LevelUpMove sOgerponLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK),
+ LEVEL_UP_MOVE( 1, MOVE_COUNTER),
+ LEVEL_UP_MOVE( 1, MOVE_RETALIATE),
+ LEVEL_UP_MOVE( 1, MOVE_HORN_LEECH),
LEVEL_UP_MOVE( 1, MOVE_VINE_WHIP),
LEVEL_UP_MOVE( 1, MOVE_LEECH_SEED),
LEVEL_UP_MOVE( 1, MOVE_QUICK_ATTACK),
@@ -22346,6 +22180,9 @@ static const struct LevelUpMove sOgerponLevelUpLearnset[] = {
#if P_FAMILY_GOUGING_FIRE
static const struct LevelUpMove sGougingFireLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_DOUBLE_KICK),
+ LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER),
+ LEVEL_UP_MOVE( 1, MOVE_NOBLE_ROAR),
LEVEL_UP_MOVE( 1, MOVE_STOMP),
LEVEL_UP_MOVE( 1, MOVE_LEER),
LEVEL_UP_MOVE( 1, MOVE_INCINERATE),
@@ -22369,6 +22206,7 @@ static const struct LevelUpMove sGougingFireLevelUpLearnset[] = {
#if P_FAMILY_RAGING_BOLT
static const struct LevelUpMove sRagingBoltLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_ANCIENT_POWER),
LEVEL_UP_MOVE( 1, MOVE_TWISTER),
LEVEL_UP_MOVE( 1, MOVE_SUNNY_DAY),
LEVEL_UP_MOVE( 1, MOVE_SHOCK_WAVE),
@@ -22456,6 +22294,9 @@ static const struct LevelUpMove sTerapagosLevelUpLearnset[] = {
#if P_FAMILY_PECHARUNT
static const struct LevelUpMove sPecharuntLevelUpLearnset[] = {
+ LEVEL_UP_MOVE( 1, MOVE_DEFENSE_CURL),
+ LEVEL_UP_MOVE( 1, MOVE_ROLLOUT),
+ LEVEL_UP_MOVE( 1, MOVE_MEAN_LOOK),
LEVEL_UP_MOVE( 1, MOVE_SMOG),
LEVEL_UP_MOVE( 1, MOVE_POISON_GAS),
LEVEL_UP_MOVE( 1, MOVE_MEMENTO),
diff --git a/src/data/pokemon/species_info.h b/src/data/pokemon/species_info.h
index c9bfa7a24643..4f21223eee3d 100644
--- a/src/data/pokemon/species_info.h
+++ b/src/data/pokemon/species_info.h
@@ -11,6 +11,45 @@
#define FOOTPRINT(sprite)
#endif
+#define SIZE_32x32 1
+#define SIZE_64x64 0
+
+// Set .compressed = OW_GFX_COMPRESS
+#define COMP OW_GFX_COMPRESS
+
+#if OW_POKEMON_OBJECT_EVENTS
+#if OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+#define OVERWORLD_PAL(...) \
+ .overworldPalette = DEFAULT(NULL, __VA_ARGS__), \
+ .overworldShinyPalette = DEFAULT_2(NULL, __VA_ARGS__),
+#else
+#define OVERWORLD_PAL(...)
+#endif //OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+
+#define OVERWORLD(picTable, _size, shadow, _tracks, ...) \
+.overworldData = { \
+ .tileTag = TAG_NONE, \
+ .paletteTag = OBJ_EVENT_PAL_TAG_DYNAMIC, \
+ .reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE, \
+ .size = (_size == SIZE_32x32 ? 512 : 2048), \
+ .width = (_size == SIZE_32x32 ? 32 : 64), \
+ .height = (_size == SIZE_32x32 ? 32 : 64), \
+ .paletteSlot = PALSLOT_NPC_1, \
+ .shadowSize = shadow, \
+ .inanimate = FALSE, \
+ .compressed = COMP, \
+ .tracks = _tracks, \
+ .oam = (_size == SIZE_32x32 ? &gObjectEventBaseOam_32x32 : &gObjectEventBaseOam_64x64), \
+ .subspriteTables = (_size == SIZE_32x32 ? sOamTables_32x32 : sOamTables_64x64), \
+ .anims = sAnimTable_Following, \
+ .images = picTable, \
+ .affineAnims = gDummySpriteAffineAnimTable, \
+}, \
+ OVERWORLD_PAL(__VA_ARGS__)
+#else
+#define OVERWORLD(picTable, _size, shadow, _tracks, ...)
+#endif //OW_POKEMON_OBJECT_EVENTS
+
// Maximum value for a female Pokémon is 254 (MON_FEMALE) which is 100% female.
// 255 (MON_GENDERLESS) is reserved for genderless Pokémon.
#define PERCENT_FEMALE(percent) min(254, ((percent * 255) / 100))
@@ -21,6 +60,12 @@
#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] =
@@ -50,8 +95,29 @@ const struct SpeciesInfo gSpeciesInfo[] =
.iconSprite = gMonIcon_QuestionMark,
.iconPalIndex = 0,
FOOTPRINT(QuestionMark)
+ #if OW_POKEMON_OBJECT_EVENTS
+ .overworldData = {
+ .tileTag = TAG_NONE,
+ .paletteTag = OBJ_EVENT_PAL_TAG_SUBSTITUTE,
+ .reflectionPaletteTag = OBJ_EVENT_PAL_TAG_NONE,
+ .size = 512,
+ .width = 32,
+ .height = 32,
+ .paletteSlot = PALSLOT_NPC_1,
+ .shadowSize = SHADOW_SIZE_M,
+ .inanimate = FALSE,
+ .compressed = COMP,
+ .tracks = TRACKS_FOOT,
+ .oam = &gObjectEventBaseOam_32x32,
+ .subspriteTables = sOamTables_32x32,
+ .anims = sAnimTable_Following,
+ .images = sPicTable_Substitute,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ },
+ #endif
.levelUpLearnset = sNoneLevelUpLearnset,
.teachableLearnset = sNoneTeachableLearnset,
+ .eggMoveLearnset = sNoneEggMoveLearnset,
},
#include "species_info/gen_1_families.h"
diff --git a/src/data/pokemon/species_info/gen_1_families.h b/src/data/pokemon/species_info/gen_1_families.h
index 30f87a606774..d420c5176796 100644
--- a/src/data/pokemon/species_info/gen_1_families.h
+++ b/src/data/pokemon/species_info/gen_1_families.h
@@ -52,8 +52,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Bulbasaur,
.iconPalIndex = 4,
FOOTPRINT(Bulbasaur)
+ OVERWORLD(
+ sPicTable_Bulbasaur,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Bulbasaur,
+ gShinyOverworldPalette_Bulbasaur
+ )
.levelUpLearnset = sBulbasaurLevelUpLearnset,
.teachableLearnset = sBulbasaurTeachableLearnset,
+ .eggMoveLearnset = sBulbasaurEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 16, SPECIES_IVYSAUR}),
},
@@ -106,6 +115,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Ivysaur,
.iconPalIndex = 4,
FOOTPRINT(Ivysaur)
+ OVERWORLD(
+ sPicTable_Ivysaur,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Ivysaur,
+ gShinyOverworldPalette_Ivysaur
+ )
.levelUpLearnset = sIvysaurLevelUpLearnset,
.teachableLearnset = sIvysaurTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 32, SPECIES_VENUSAUR}),
@@ -170,6 +187,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Venusaur,
.iconPalIndex = 4,
FOOTPRINT(Venusaur)
+ OVERWORLD(
+ sPicTable_Venusaur,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Venusaur,
+ gShinyOverworldPalette_Venusaur
+ )
.levelUpLearnset = sVenusaurLevelUpLearnset,
.teachableLearnset = sVenusaurTeachableLearnset,
.formSpeciesIdTable = sVenusaurFormSpeciesIdTable,
@@ -341,8 +366,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Charmander,
.iconPalIndex = 0,
FOOTPRINT(Charmander)
+ OVERWORLD(
+ sPicTable_Charmander,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Charmander,
+ gShinyOverworldPalette_Charmander
+ )
.levelUpLearnset = sCharmanderLevelUpLearnset,
.teachableLearnset = sCharmanderTeachableLearnset,
+ .eggMoveLearnset = sCharmanderEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 16, SPECIES_CHARMELEON}),
},
@@ -395,6 +429,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Charmeleon,
.iconPalIndex = 0,
FOOTPRINT(Charmeleon)
+ OVERWORLD(
+ sPicTable_Charmeleon,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Charmeleon,
+ gShinyOverworldPalette_Charmeleon
+ )
.levelUpLearnset = sCharmeleonLevelUpLearnset,
.teachableLearnset = sCharmeleonTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 36, SPECIES_CHARIZARD}),
@@ -454,6 +496,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Charizard,
.iconPalIndex = 0,
FOOTPRINT(Charizard)
+ OVERWORLD(
+ sPicTable_Charizard,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Charizard,
+ gShinyOverworldPalette_Charizard
+ )
.levelUpLearnset = sCharizardLevelUpLearnset,
.teachableLearnset = sCharizardTeachableLearnset,
.formSpeciesIdTable = sCharizardFormSpeciesIdTable,
@@ -678,8 +728,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Squirtle,
.iconPalIndex = 0,
FOOTPRINT(Squirtle)
+ OVERWORLD(
+ sPicTable_Squirtle,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Squirtle,
+ gShinyOverworldPalette_Squirtle
+ )
.levelUpLearnset = sSquirtleLevelUpLearnset,
.teachableLearnset = sSquirtleTeachableLearnset,
+ .eggMoveLearnset = sSquirtleEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 16, SPECIES_WARTORTLE}),
},
@@ -732,6 +791,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Wartortle,
.iconPalIndex = 2,
FOOTPRINT(Wartortle)
+ OVERWORLD(
+ sPicTable_Wartortle,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Wartortle,
+ gShinyOverworldPalette_Wartortle
+ )
.levelUpLearnset = sWartortleLevelUpLearnset,
.teachableLearnset = sWartortleTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 36, SPECIES_BLASTOISE}),
@@ -792,6 +859,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Blastoise,
.iconPalIndex = 2,
FOOTPRINT(Blastoise)
+ OVERWORLD(
+ sPicTable_Blastoise,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Blastoise,
+ gShinyOverworldPalette_Blastoise
+ )
.levelUpLearnset = sBlastoiseLevelUpLearnset,
.teachableLearnset = sBlastoiseTeachableLearnset,
.formSpeciesIdTable = sBlastoiseFormSpeciesIdTable,
@@ -962,6 +1037,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Caterpie,
.iconPalIndex = 1,
FOOTPRINT(Caterpie)
+ OVERWORLD(
+ sPicTable_Caterpie,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SPOT,
+ gOverworldPalette_Caterpie,
+ gShinyOverworldPalette_Caterpie
+ )
.tmIlliterate = TRUE,
.levelUpLearnset = sCaterpieLevelUpLearnset,
.teachableLearnset = sCaterpieTeachableLearnset,
@@ -1016,6 +1099,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Metapod,
.iconPalIndex = 1,
FOOTPRINT(Metapod)
+ OVERWORLD(
+ sPicTable_Metapod,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SPOT,
+ gOverworldPalette_Metapod,
+ gShinyOverworldPalette_Metapod
+ )
.tmIlliterate = TRUE,
.levelUpLearnset = sMetapodLevelUpLearnset,
.teachableLearnset = sMetapodTeachableLearnset,
@@ -1087,6 +1178,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Butterfree,
.iconPalIndex = 0,
FOOTPRINT(Butterfree)
+ OVERWORLD(
+ sPicTable_Butterfree,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Butterfree,
+ gShinyOverworldPalette_Butterfree
+ )
.levelUpLearnset = sButterfreeLevelUpLearnset,
.teachableLearnset = sButterfreeTeachableLearnset,
.formSpeciesIdTable = sButterfreeFormSpeciesIdTable,
@@ -1204,6 +1303,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Weedle,
.iconPalIndex = 2,
FOOTPRINT(Weedle)
+ OVERWORLD(
+ sPicTable_Weedle,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SPOT,
+ gOverworldPalette_Weedle,
+ gShinyOverworldPalette_Weedle
+ )
.tmIlliterate = TRUE,
.levelUpLearnset = sWeedleLevelUpLearnset,
.teachableLearnset = sWeedleTeachableLearnset,
@@ -1259,6 +1366,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Kakuna,
.iconPalIndex = 2,
FOOTPRINT(Kakuna)
+ OVERWORLD(
+ sPicTable_Kakuna,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SPOT,
+ gOverworldPalette_Kakuna,
+ gShinyOverworldPalette_Kakuna
+ )
.tmIlliterate = TRUE,
.levelUpLearnset = sKakunaLevelUpLearnset,
.teachableLearnset = sKakunaTeachableLearnset,
@@ -1326,6 +1441,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Beedrill,
.iconPalIndex = 2,
FOOTPRINT(Beedrill)
+ OVERWORLD(
+ sPicTable_Beedrill,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Beedrill,
+ gShinyOverworldPalette_Beedrill
+ )
.levelUpLearnset = sBeedrillLevelUpLearnset,
.teachableLearnset = sBeedrillTeachableLearnset,
.formSpeciesIdTable = sBeedrillFormSpeciesIdTable,
@@ -1446,8 +1569,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Pidgey,
.iconPalIndex = 0,
FOOTPRINT(Pidgey)
+ OVERWORLD(
+ sPicTable_Pidgey,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Pidgey,
+ gShinyOverworldPalette_Pidgey
+ )
.levelUpLearnset = sPidgeyLevelUpLearnset,
.teachableLearnset = sPidgeyTeachableLearnset,
+ .eggMoveLearnset = sPidgeyEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 18, SPECIES_PIDGEOTTO}),
},
@@ -1504,6 +1636,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Pidgeotto,
.iconPalIndex = 0,
FOOTPRINT(Pidgeotto)
+ OVERWORLD(
+ sPicTable_Pidgeotto,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Pidgeotto,
+ gShinyOverworldPalette_Pidgeotto
+ )
.levelUpLearnset = sPidgeottoLevelUpLearnset,
.teachableLearnset = sPidgeottoTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 36, SPECIES_PIDGEOT}),
@@ -1572,6 +1712,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Pidgeot,
.iconPalIndex = 0,
FOOTPRINT(Pidgeot)
+ OVERWORLD(
+ sPicTable_Pidgeot,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Pidgeot,
+ gShinyOverworldPalette_Pidgeot
+ )
.levelUpLearnset = sPidgeotLevelUpLearnset,
.teachableLearnset = sPidgeotTeachableLearnset,
.formSpeciesIdTable = sPidgeotFormSpeciesIdTable,
@@ -1689,8 +1837,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Rattata,
.iconPalIndex = 2,
FOOTPRINT(Rattata)
+ OVERWORLD(
+ sPicTable_Rattata,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Rattata,
+ gShinyOverworldPalette_Rattata
+ )
.levelUpLearnset = sRattataLevelUpLearnset,
.teachableLearnset = sRattataTeachableLearnset,
+ .eggMoveLearnset = sRattataEggMoveLearnset,
.formSpeciesIdTable = sRattataFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_LEVEL, 20, SPECIES_RATICATE}),
},
@@ -1747,6 +1904,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Raticate,
.iconPalIndex = 2,
FOOTPRINT(Raticate)
+ OVERWORLD(
+ sPicTable_Raticate,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Raticate,
+ gShinyOverworldPalette_Raticate
+ )
.levelUpLearnset = sRaticateLevelUpLearnset,
.teachableLearnset = sRaticateTeachableLearnset,
.formSpeciesIdTable = sRaticateFormSpeciesIdTable,
@@ -1802,9 +1967,18 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_RattataAlolan,
.iconPalIndex = 2,
FOOTPRINT(Rattata)
+ OVERWORLD(
+ sPicTable_RattataAlolan,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_RattataAlolan,
+ gShinyOverworldPalette_RattataAlolan
+ )
.isAlolanForm = TRUE,
.levelUpLearnset = sRattataAlolanLevelUpLearnset,
.teachableLearnset = sRattataAlolanTeachableLearnset,
+ .eggMoveLearnset = sRattataAlolanEggMoveLearnset,
.formSpeciesIdTable = sRattataFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_LEVEL_NIGHT, 20, SPECIES_RATICATE_ALOLAN},
{EVO_NONE, 0, SPECIES_RATICATE_ALOLAN_TOTEM}),
@@ -1855,6 +2029,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_RaticateAlolan,
.iconPalIndex = 2,
FOOTPRINT(Raticate)
+ OVERWORLD(
+ sPicTable_RaticateAlolan,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_RaticateAlolan,
+ gShinyOverworldPalette_RaticateAlolan
+ )
.isAlolanForm = TRUE,
.levelUpLearnset = sRaticateAlolanLevelUpLearnset,
.teachableLearnset = sRaticateAlolanTeachableLearnset,
@@ -1965,8 +2147,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Spearow,
.iconPalIndex = 0,
FOOTPRINT(Spearow)
+ OVERWORLD(
+ sPicTable_Spearow,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Spearow,
+ gShinyOverworldPalette_Spearow
+ )
.levelUpLearnset = sSpearowLevelUpLearnset,
.teachableLearnset = sSpearowTeachableLearnset,
+ .eggMoveLearnset = sSpearowEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 25, SPECIES_FEAROW}),
},
@@ -2021,6 +2212,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Fearow,
.iconPalIndex = 0,
FOOTPRINT(Fearow)
+ OVERWORLD(
+ sPicTable_Fearow,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Fearow,
+ gShinyOverworldPalette_Fearow
+ )
.levelUpLearnset = sFearowLevelUpLearnset,
.teachableLearnset = sFearowTeachableLearnset,
},
@@ -2076,9 +2275,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Ekans,
.iconPalIndex = 2,
FOOTPRINT(Ekans)
+ OVERWORLD(
+ sPicTable_Ekans,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SLITHER,
+ gOverworldPalette_Ekans,
+ gShinyOverworldPalette_Ekans
+ )
.levelUpLearnset = sEkansLevelUpLearnset,
.teachableLearnset = sEkansTeachableLearnset,
- .evolutions = EVOLUTION({EVO_LEVEL, 26, SPECIES_ARBOK}),
+ .evolutions = EVOLUTION({EVO_LEVEL, 22, SPECIES_ARBOK}),
},
[SPECIES_ARBOK] =
@@ -2135,6 +2342,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Arbok,
.iconPalIndex = 2,
FOOTPRINT(Arbok)
+ OVERWORLD(
+ sPicTable_Arbok,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SLITHER,
+ gOverworldPalette_Arbok,
+ gShinyOverworldPalette_Arbok
+ )
.levelUpLearnset = sArbokLevelUpLearnset,
.teachableLearnset = sArbokTeachableLearnset,
},
@@ -2187,8 +2402,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Pichu,
.iconPalIndex = 1,
FOOTPRINT(Pichu)
+ OVERWORLD(
+ sPicTable_Pichu,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Pichu,
+ gShinyOverworldPalette_Pichu
+ )
.levelUpLearnset = sPichuLevelUpLearnset,
.teachableLearnset = sPichuTeachableLearnset,
+ .eggMoveLearnset = sPichuEggMoveLearnset,
.formSpeciesIdTable = sPichuFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_FRIENDSHIP, 0, SPECIES_PIKACHU}),
},
@@ -2238,8 +2462,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_PichuSpikyEared,
.iconPalIndex = 1,
FOOTPRINT(Pichu)
+ OVERWORLD(
+ sPicTable_PichuSpikyEared,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_PichuSpikyEared,
+ gShinyOverworldPalette_PichuSpikyEared
+ )
.levelUpLearnset = sPichuLevelUpLearnset,
.teachableLearnset = sPichuTeachableLearnset,
+ .eggMoveLearnset = sPichuEggMoveLearnset,
.formSpeciesIdTable = sPichuFormSpeciesIdTable,
},
#endif //P_GEN_2_CROSS_EVOS
@@ -2305,6 +2538,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSpriteFemale = gMonIcon_PikachuF,
.iconPalIndexFemale = 2,
#endif
+ OVERWORLD(
+ sPicTable_Pikachu,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Pikachu,
+ gShinyOverworldPalette_Pikachu
+ )
FOOTPRINT(Pikachu)
.levelUpLearnset = sPikachuLevelUpLearnset,
.teachableLearnset = sPikachuTeachableLearnset,
@@ -3237,6 +3478,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Raichu,
.iconPalIndex = 0,
FOOTPRINT(Raichu)
+ OVERWORLD(
+ sPicTable_Raichu,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Raichu,
+ gShinyOverworldPalette_Raichu
+ )
.levelUpLearnset = sRaichuLevelUpLearnset,
.teachableLearnset = sRaichuTeachableLearnset,
.formSpeciesIdTable = sRaichuFormSpeciesIdTable,
@@ -3292,6 +3541,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_RaichuAlolan,
.iconPalIndex = 2,
FOOTPRINT(Raichu)
+ OVERWORLD(
+ sPicTable_RaichuAlolan,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_RaichuAlolan,
+ gShinyOverworldPalette_RaichuAlolan
+ )
.isAlolanForm = TRUE,
.levelUpLearnset = sRaichuAlolanLevelUpLearnset,
.teachableLearnset = sRaichuAlolanTeachableLearnset,
@@ -3350,8 +3607,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Sandshrew,
.iconPalIndex = 2,
FOOTPRINT(Sandshrew)
+ OVERWORLD(
+ sPicTable_Sandshrew,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Sandshrew,
+ gShinyOverworldPalette_Sandshrew
+ )
.levelUpLearnset = sSandshrewLevelUpLearnset,
.teachableLearnset = sSandshrewTeachableLearnset,
+ .eggMoveLearnset = sSandshrewEggMoveLearnset,
.formSpeciesIdTable = sSandshrewFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_LEVEL, 27, SPECIES_SANDSLASH}),
},
@@ -3405,6 +3671,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Sandslash,
.iconPalIndex = 2,
FOOTPRINT(Sandslash)
+ OVERWORLD(
+ sPicTable_Sandslash,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Sandslash,
+ gShinyOverworldPalette_Sandslash
+ )
.levelUpLearnset = sSandslashLevelUpLearnset,
.teachableLearnset = sSandslashTeachableLearnset,
.formSpeciesIdTable = sSandslashFormSpeciesIdTable,
@@ -3460,9 +3734,18 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_SandshrewAlolan,
.iconPalIndex = 0,
FOOTPRINT(Sandshrew)
+ OVERWORLD(
+ sPicTable_SandshrewAlolan,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_SandshrewAlolan,
+ gShinyOverworldPalette_SandshrewAlolan
+ )
.isAlolanForm = TRUE,
.levelUpLearnset = sSandshrewAlolanLevelUpLearnset,
.teachableLearnset = sSandshrewAlolanTeachableLearnset,
+ .eggMoveLearnset = sSandshrewAlolanEggMoveLearnset,
.formSpeciesIdTable = sSandshrewFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_ICE_STONE, SPECIES_SANDSLASH_ALOLAN}),
},
@@ -3516,6 +3799,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_SandslashAlolan,
.iconPalIndex = 0,
FOOTPRINT(Sandslash)
+ OVERWORLD(
+ sPicTable_SandslashAlolan,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_SandslashAlolan,
+ gShinyOverworldPalette_SandslashAlolan
+ )
.isAlolanForm = TRUE,
.levelUpLearnset = sSandslashAlolanLevelUpLearnset,
.teachableLearnset = sSandslashAlolanTeachableLearnset,
@@ -3578,8 +3869,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_NidoranF,
.iconPalIndex = 0,
FOOTPRINT(NidoranF)
+ OVERWORLD(
+ sPicTable_NidoranF,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_NidoranF,
+ gShinyOverworldPalette_NidoranF
+ )
.levelUpLearnset = sNidoranFLevelUpLearnset,
.teachableLearnset = sNidoranFTeachableLearnset,
+ .eggMoveLearnset = sNidoranFEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 16, SPECIES_NIDORINA}),
},
@@ -3635,6 +3935,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Nidorina,
.iconPalIndex = 0,
FOOTPRINT(Nidorina)
+ OVERWORLD(
+ sPicTable_Nidorina,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Nidorina,
+ gShinyOverworldPalette_Nidorina
+ )
.levelUpLearnset = sNidorinaLevelUpLearnset,
.teachableLearnset = sNidorinaTeachableLearnset,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_MOON_STONE, SPECIES_NIDOQUEEN}),
@@ -3700,6 +4008,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Nidoqueen,
.iconPalIndex = 2,
FOOTPRINT(Nidoqueen)
+ OVERWORLD(
+ sPicTable_Nidoqueen,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Nidoqueen,
+ gShinyOverworldPalette_Nidoqueen
+ )
.levelUpLearnset = sNidoqueenLevelUpLearnset,
.teachableLearnset = sNidoqueenTeachableLearnset,
},
@@ -3756,8 +4072,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_NidoranM,
.iconPalIndex = 2,
FOOTPRINT(NidoranM)
+ OVERWORLD(
+ sPicTable_NidoranM,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_NidoranM,
+ gShinyOverworldPalette_NidoranM
+ )
.levelUpLearnset = sNidoranMLevelUpLearnset,
.teachableLearnset = sNidoranMTeachableLearnset,
+ .eggMoveLearnset = sNidoranMEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 16, SPECIES_NIDORINO}),
},
@@ -3813,6 +4138,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Nidorino,
.iconPalIndex = 2,
FOOTPRINT(Nidorino)
+ OVERWORLD(
+ sPicTable_Nidorino,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Nidorino,
+ gShinyOverworldPalette_Nidorino
+ )
.levelUpLearnset = sNidorinoLevelUpLearnset,
.teachableLearnset = sNidorinoTeachableLearnset,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_MOON_STONE, SPECIES_NIDOKING}),
@@ -3879,6 +4212,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Nidoking,
.iconPalIndex = 2,
FOOTPRINT(Nidoking)
+ OVERWORLD(
+ sPicTable_Nidoking,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Nidoking,
+ gShinyOverworldPalette_Nidoking
+ )
.levelUpLearnset = sNidokingLevelUpLearnset,
.teachableLearnset = sNidokingTeachableLearnset,
},
@@ -3946,8 +4287,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Cleffa,
.iconPalIndex = 0,
FOOTPRINT(Cleffa)
+ OVERWORLD(
+ sPicTable_Cleffa,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Cleffa,
+ gShinyOverworldPalette_Cleffa
+ )
.levelUpLearnset = sCleffaLevelUpLearnset,
.teachableLearnset = sCleffaTeachableLearnset,
+ .eggMoveLearnset = sCleffaEggMoveLearnset,
.evolutions = EVOLUTION({EVO_FRIENDSHIP, 0, SPECIES_CLEFAIRY}),
},
#endif //P_GEN_2_CROSS_EVOS
@@ -4006,6 +4356,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Clefairy,
.iconPalIndex = 0,
FOOTPRINT(Clefairy)
+ OVERWORLD(
+ sPicTable_Clefairy,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Clefairy,
+ gShinyOverworldPalette_Clefairy
+ )
.levelUpLearnset = sClefairyLevelUpLearnset,
.teachableLearnset = sClefairyTeachableLearnset,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_MOON_STONE, SPECIES_CLEFABLE}),
@@ -4073,6 +4431,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Clefable,
.iconPalIndex = 0,
FOOTPRINT(Clefable)
+ OVERWORLD(
+ sPicTable_Clefable,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Clefable,
+ gShinyOverworldPalette_Clefable
+ )
.levelUpLearnset = sClefableLevelUpLearnset,
.teachableLearnset = sClefableTeachableLearnset,
},
@@ -4128,8 +4494,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Vulpix,
.iconPalIndex = 5,
FOOTPRINT(Vulpix)
+ OVERWORLD(
+ sPicTable_Vulpix,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Vulpix,
+ gShinyOverworldPalette_Vulpix
+ )
.levelUpLearnset = sVulpixLevelUpLearnset,
.teachableLearnset = sVulpixTeachableLearnset,
+ .eggMoveLearnset = sVulpixEggMoveLearnset,
.formSpeciesIdTable = sVulpixFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_FIRE_STONE, SPECIES_NINETALES}),
},
@@ -4184,6 +4559,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Ninetales,
.iconPalIndex = 3,
FOOTPRINT(Ninetales)
+ OVERWORLD(
+ sPicTable_Ninetales,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Ninetales,
+ gShinyOverworldPalette_Ninetales
+ )
.levelUpLearnset = sNinetalesLevelUpLearnset,
.teachableLearnset = sNinetalesTeachableLearnset,
.formSpeciesIdTable = sNinetalesFormSpeciesIdTable,
@@ -4239,9 +4622,18 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_VulpixAlolan,
.iconPalIndex = 2,
FOOTPRINT(Vulpix)
+ OVERWORLD(
+ sPicTable_VulpixAlolan,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_VulpixAlolan,
+ gShinyOverworldPalette_VulpixAlolan
+ )
.isAlolanForm = TRUE,
.levelUpLearnset = sVulpixAlolanLevelUpLearnset,
.teachableLearnset = sVulpixAlolanTeachableLearnset,
+ .eggMoveLearnset = sVulpixAlolanEggMoveLearnset,
.formSpeciesIdTable = sVulpixFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_ICE_STONE, SPECIES_NINETALES_ALOLAN}),
},
@@ -4296,6 +4688,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_NinetalesAlolan,
.iconPalIndex = 2,
FOOTPRINT(Ninetales)
+ OVERWORLD(
+ sPicTable_NinetalesAlolan,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_NinetalesAlolan,
+ gShinyOverworldPalette_NinetalesAlolan
+ )
.isAlolanForm = TRUE,
.levelUpLearnset = sNinetalesAlolanLevelUpLearnset,
.teachableLearnset = sNinetalesAlolanTeachableLearnset,
@@ -4365,8 +4765,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Igglybuff,
.iconPalIndex = 1,
FOOTPRINT(Igglybuff)
+ OVERWORLD(
+ sPicTable_Igglybuff,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Igglybuff,
+ gShinyOverworldPalette_Igglybuff
+ )
.levelUpLearnset = sIgglybuffLevelUpLearnset,
.teachableLearnset = sIgglybuffTeachableLearnset,
+ .eggMoveLearnset = sIgglybuffEggMoveLearnset,
.evolutions = EVOLUTION({EVO_FRIENDSHIP, 0, SPECIES_JIGGLYPUFF}),
},
#endif //P_GEN_2_CROSS_EVOS
@@ -4425,6 +4834,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Jigglypuff,
.iconPalIndex = 0,
FOOTPRINT(Jigglypuff)
+ OVERWORLD(
+ sPicTable_Jigglypuff,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Jigglypuff,
+ gShinyOverworldPalette_Jigglypuff
+ )
.levelUpLearnset = sJigglypuffLevelUpLearnset,
.teachableLearnset = sJigglypuffTeachableLearnset,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_MOON_STONE, SPECIES_WIGGLYTUFF}),
@@ -4492,6 +4909,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Wigglytuff,
.iconPalIndex = 0,
FOOTPRINT(Wigglytuff)
+ OVERWORLD(
+ sPicTable_Wigglytuff,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Wigglytuff,
+ gShinyOverworldPalette_Wigglytuff
+ )
.levelUpLearnset = sWigglytuffLevelUpLearnset,
.teachableLearnset = sWigglytuffTeachableLearnset,
},
@@ -4551,8 +4976,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Zubat,
.iconPalIndex = 2,
FOOTPRINT(Zubat)
+ OVERWORLD(
+ sPicTable_Zubat,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Zubat,
+ gShinyOverworldPalette_Zubat
+ )
.levelUpLearnset = sZubatLevelUpLearnset,
.teachableLearnset = sZubatTeachableLearnset,
+ .eggMoveLearnset = sZubatEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 22, SPECIES_GOLBAT}),
},
@@ -4609,6 +5043,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Golbat,
.iconPalIndex = 2,
FOOTPRINT(Golbat)
+ OVERWORLD(
+ sPicTable_Golbat,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Golbat,
+ gShinyOverworldPalette_Golbat
+ )
.levelUpLearnset = sGolbatLevelUpLearnset,
.teachableLearnset = sGolbatTeachableLearnset,
.evolutions = EVOLUTION({EVO_FRIENDSHIP, 0, SPECIES_CROBAT}),
@@ -4670,6 +5112,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Crobat,
.iconPalIndex = 2,
FOOTPRINT(Crobat)
+ OVERWORLD(
+ sPicTable_Crobat,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Crobat,
+ gShinyOverworldPalette_Crobat
+ )
.levelUpLearnset = sCrobatLevelUpLearnset,
.teachableLearnset = sCrobatTeachableLearnset,
},
@@ -4726,8 +5176,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Oddish,
.iconPalIndex = 4,
FOOTPRINT(Oddish)
+ OVERWORLD(
+ sPicTable_Oddish,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Oddish,
+ gShinyOverworldPalette_Oddish
+ )
.levelUpLearnset = sOddishLevelUpLearnset,
.teachableLearnset = sOddishTeachableLearnset,
+ .eggMoveLearnset = sOddishEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 21, SPECIES_GLOOM}),
},
@@ -4784,6 +5243,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Gloom,
.iconPalIndex = 0,
FOOTPRINT(Gloom)
+ OVERWORLD(
+ sPicTable_Gloom,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Gloom,
+ gShinyOverworldPalette_Gloom
+ )
.levelUpLearnset = sGloomLevelUpLearnset,
.teachableLearnset = sGloomTeachableLearnset,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_LEAF_STONE, SPECIES_VILEPLUME},
@@ -4851,6 +5318,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Vileplume,
.iconPalIndex = 0,
FOOTPRINT(Vileplume)
+ OVERWORLD(
+ sPicTable_Vileplume,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Vileplume,
+ gShinyOverworldPalette_Vileplume
+ )
.levelUpLearnset = sVileplumeLevelUpLearnset,
.teachableLearnset = sVileplumeTeachableLearnset,
},
@@ -4913,6 +5388,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Bellossom,
.iconPalIndex = 1,
FOOTPRINT(Bellossom)
+ OVERWORLD(
+ sPicTable_Bellossom,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Bellossom,
+ gShinyOverworldPalette_Bellossom
+ )
.levelUpLearnset = sBellossomLevelUpLearnset,
.teachableLearnset = sBellossomTeachableLearnset,
},
@@ -4975,8 +5458,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Paras,
.iconPalIndex = 0,
FOOTPRINT(Paras)
+ OVERWORLD(
+ sPicTable_Paras,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_BUG,
+ gOverworldPalette_Paras,
+ gShinyOverworldPalette_Paras
+ )
.levelUpLearnset = sParasLevelUpLearnset,
.teachableLearnset = sParasTeachableLearnset,
+ .eggMoveLearnset = sParasEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 24, SPECIES_PARASECT}),
},
@@ -5036,6 +5528,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Parasect,
.iconPalIndex = 0,
FOOTPRINT(Parasect)
+ OVERWORLD(
+ sPicTable_Parasect,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_BUG,
+ gOverworldPalette_Parasect,
+ gShinyOverworldPalette_Parasect
+ )
.levelUpLearnset = sParasectLevelUpLearnset,
.teachableLearnset = sParasectTeachableLearnset,
},
@@ -5095,8 +5595,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Venonat,
.iconPalIndex = 2,
FOOTPRINT(Venonat)
+ OVERWORLD(
+ sPicTable_Venonat,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Venonat,
+ gShinyOverworldPalette_Venonat
+ )
.levelUpLearnset = sVenonatLevelUpLearnset,
.teachableLearnset = sVenonatTeachableLearnset,
+ .eggMoveLearnset = sVenonatEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 31, SPECIES_VENOMOTH}),
},
@@ -5155,6 +5664,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Venomoth,
.iconPalIndex = 2,
FOOTPRINT(Venomoth)
+ OVERWORLD(
+ sPicTable_Venomoth,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Venomoth,
+ gShinyOverworldPalette_Venomoth
+ )
.levelUpLearnset = sVenomothLevelUpLearnset,
.teachableLearnset = sVenomothTeachableLearnset,
},
@@ -5222,8 +5739,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Diglett,
.iconPalIndex = 2,
FOOTPRINT(Diglett)
+ OVERWORLD(
+ sPicTable_Diglett,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Diglett,
+ gShinyOverworldPalette_Diglett
+ )
.levelUpLearnset = sDiglettLevelUpLearnset,
.teachableLearnset = sDiglettTeachableLearnset,
+ .eggMoveLearnset = sDiglettEggMoveLearnset,
.formSpeciesIdTable = sDiglettFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_LEVEL, 26, SPECIES_DUGTRIO}),
},
@@ -5278,6 +5804,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Dugtrio,
.iconPalIndex = 2,
FOOTPRINT(Dugtrio)
+ OVERWORLD(
+ sPicTable_Dugtrio,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Dugtrio,
+ gShinyOverworldPalette_Dugtrio
+ )
.levelUpLearnset = sDugtrioLevelUpLearnset,
.teachableLearnset = sDugtrioTeachableLearnset,
.formSpeciesIdTable = sDugtrioFormSpeciesIdTable,
@@ -5333,9 +5867,18 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_DiglettAlolan,
.iconPalIndex = 2,
FOOTPRINT(Diglett)
+ OVERWORLD(
+ sPicTable_DiglettAlolan,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_DiglettAlolan,
+ gShinyOverworldPalette_DiglettAlolan
+ )
.isAlolanForm = TRUE,
.levelUpLearnset = sDiglettAlolanLevelUpLearnset,
.teachableLearnset = sDiglettAlolanTeachableLearnset,
+ .eggMoveLearnset = sDiglettAlolanEggMoveLearnset,
.formSpeciesIdTable = sDiglettFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_LEVEL, 26, SPECIES_DUGTRIO_ALOLAN}),
},
@@ -5390,6 +5933,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_DugtrioAlolan,
.iconPalIndex = 2,
FOOTPRINT(Dugtrio)
+ OVERWORLD(
+ sPicTable_DugtrioAlolan,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_DugtrioAlolan,
+ gShinyOverworldPalette_DugtrioAlolan
+ )
.isAlolanForm = TRUE,
.levelUpLearnset = sDugtrioAlolanLevelUpLearnset,
.teachableLearnset = sDugtrioAlolanTeachableLearnset,
@@ -5453,8 +6004,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Meowth,
.iconPalIndex = 1,
FOOTPRINT(Meowth)
+ OVERWORLD(
+ sPicTable_Meowth,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Meowth,
+ gShinyOverworldPalette_Meowth
+ )
.levelUpLearnset = sMeowthLevelUpLearnset,
.teachableLearnset = sMeowthTeachableLearnset,
+ .eggMoveLearnset = sMeowthEggMoveLearnset,
.formSpeciesIdTable = sMeowthFormSpeciesIdTable,
.formChangeTable = sMeowthFormChangeTable,
.evolutions = EVOLUTION({EVO_LEVEL, 28, SPECIES_PERSIAN}),
@@ -5514,6 +6074,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Persian,
.iconPalIndex = 1,
FOOTPRINT(Persian)
+ OVERWORLD(
+ sPicTable_Persian,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Persian,
+ gShinyOverworldPalette_Persian
+ )
.levelUpLearnset = sPersianLevelUpLearnset,
.teachableLearnset = sPersianTeachableLearnset,
.formSpeciesIdTable = sPersianFormSpeciesIdTable,
@@ -5569,9 +6137,18 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_MeowthAlolan,
.iconPalIndex = 2,
FOOTPRINT(Meowth)
+ OVERWORLD(
+ sPicTable_MeowthAlolan,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_MeowthAlolan,
+ gShinyOverworldPalette_MeowthAlolan
+ )
.isAlolanForm = TRUE,
.levelUpLearnset = sMeowthAlolanLevelUpLearnset,
.teachableLearnset = sMeowthAlolanTeachableLearnset,
+ .eggMoveLearnset = sMeowthAlolanEggMoveLearnset,
.formSpeciesIdTable = sMeowthFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_FRIENDSHIP, 0, SPECIES_PERSIAN_ALOLAN}),
},
@@ -5625,6 +6202,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_PersianAlolan,
.iconPalIndex = 2,
FOOTPRINT(Persian)
+ OVERWORLD(
+ sPicTable_PersianAlolan,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_PersianAlolan,
+ gShinyOverworldPalette_PersianAlolan
+ )
.isAlolanForm = TRUE,
.levelUpLearnset = sPersianAlolanLevelUpLearnset,
.teachableLearnset = sPersianAlolanTeachableLearnset,
@@ -5681,9 +6266,18 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_MeowthGalarian,
.iconPalIndex = 0,
FOOTPRINT(Meowth)
+ OVERWORLD(
+ sPicTable_MeowthGalarian,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_MeowthGalarian,
+ gShinyOverworldPalette_MeowthGalarian
+ )
.isGalarianForm = TRUE,
.levelUpLearnset = sMeowthGalarianLevelUpLearnset,
.teachableLearnset = sMeowthGalarianTeachableLearnset,
+ .eggMoveLearnset = sMeowthGalarianEggMoveLearnset,
.formSpeciesIdTable = sMeowthFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_LEVEL, 28, SPECIES_PERRSERKER}),
},
@@ -5735,6 +6329,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Perrserker,
.iconPalIndex = 2,
FOOTPRINT(Perrserker)
+ OVERWORLD(
+ sPicTable_Perrserker,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Perrserker,
+ gShinyOverworldPalette_Perrserker
+ )
.levelUpLearnset = sPerrserkerLevelUpLearnset,
.teachableLearnset = sPerrserkerTeachableLearnset,
},
@@ -5793,6 +6395,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.isGigantamax = TRUE,
.levelUpLearnset = sMeowthLevelUpLearnset,
.teachableLearnset = sMeowthTeachableLearnset,
+ .eggMoveLearnset = sMeowthEggMoveLearnset,
.formSpeciesIdTable = sMeowthFormSpeciesIdTable,
.formChangeTable = sMeowthFormChangeTable,
},
@@ -5848,8 +6451,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Psyduck,
.iconPalIndex = 1,
FOOTPRINT(Psyduck)
+ OVERWORLD(
+ sPicTable_Psyduck,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Psyduck,
+ gShinyOverworldPalette_Psyduck
+ )
.levelUpLearnset = sPsyduckLevelUpLearnset,
.teachableLearnset = sPsyduckTeachableLearnset,
+ .eggMoveLearnset = sPsyduckEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 33, SPECIES_GOLDUCK}),
},
@@ -5901,6 +6513,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Golduck,
.iconPalIndex = 0,
FOOTPRINT(Golduck)
+ OVERWORLD(
+ sPicTable_Golduck,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Golduck,
+ gShinyOverworldPalette_Golduck
+ )
.levelUpLearnset = sGolduckLevelUpLearnset,
.teachableLearnset = sGolduckTeachableLearnset,
},
@@ -5960,8 +6580,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Mankey,
.iconPalIndex = 1,
FOOTPRINT(Mankey)
+ OVERWORLD(
+ sPicTable_Mankey,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Mankey,
+ gShinyOverworldPalette_Mankey
+ )
.levelUpLearnset = sMankeyLevelUpLearnset,
.teachableLearnset = sMankeyTeachableLearnset,
+ .eggMoveLearnset = sMankeyEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 28, SPECIES_PRIMEAPE}),
},
@@ -6017,9 +6646,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Primeape,
.iconPalIndex = 2,
FOOTPRINT(Primeape)
+ OVERWORLD(
+ sPicTable_Primeape,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Primeape,
+ gShinyOverworldPalette_Primeape
+ )
.levelUpLearnset = sPrimeapeLevelUpLearnset,
.teachableLearnset = sPrimeapeTeachableLearnset,
- .evolutions = EVOLUTION({EVO_LEVEL_MOVE_TWENTY_TIMES, MOVE_RAGE_FIST, SPECIES_ANNIHILAPE}),
+ .evolutions = EVOLUTION({EVO_USE_MOVE_TWENTY_TIMES, MOVE_RAGE_FIST, SPECIES_ANNIHILAPE}),
},
#if P_GEN_9_CROSS_EVOS
@@ -6127,8 +6764,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Growlithe,
.iconPalIndex = 3,
FOOTPRINT(Growlithe)
+ OVERWORLD(
+ sPicTable_Growlithe,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Growlithe,
+ gShinyOverworldPalette_Growlithe
+ )
.levelUpLearnset = sGrowlitheLevelUpLearnset,
.teachableLearnset = sGrowlitheTeachableLearnset,
+ .eggMoveLearnset = sGrowlitheEggMoveLearnset,
.formSpeciesIdTable = sGrowlitheFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_FIRE_STONE, SPECIES_ARCANINE}),
},
@@ -6182,6 +6828,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Arcanine,
.iconPalIndex = 3,
FOOTPRINT(Arcanine)
+ OVERWORLD(
+ sPicTable_Arcanine,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Arcanine,
+ gShinyOverworldPalette_Arcanine
+ )
.levelUpLearnset = sArcanineLevelUpLearnset,
.teachableLearnset = sArcanineTeachableLearnset,
.formSpeciesIdTable = sArcanineFormSpeciesIdTable,
@@ -6236,6 +6890,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_GrowlitheHisuian,
.iconPalIndex = 0,
FOOTPRINT(Growlithe)
+ OVERWORLD(
+ sPicTable_GrowlitheHisuian,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_GrowlitheHisuian,
+ gShinyOverworldPalette_GrowlitheHisuian
+ )
.isHisuianForm = TRUE,
.levelUpLearnset = sGrowlitheHisuianLevelUpLearnset,
.teachableLearnset = sGrowlitheHisuianTeachableLearnset,
@@ -6291,6 +6953,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_ArcanineHisuian,
.iconPalIndex = 0,
FOOTPRINT(Arcanine)
+ OVERWORLD(
+ sPicTable_ArcanineHisuian,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_ArcanineHisuian,
+ gShinyOverworldPalette_ArcanineHisuian
+ )
.isHisuianForm = TRUE,
.levelUpLearnset = sArcanineHisuianLevelUpLearnset,
.teachableLearnset = sArcanineHisuianTeachableLearnset,
@@ -6349,8 +7019,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Poliwag,
.iconPalIndex = 0,
FOOTPRINT(Poliwag)
+ OVERWORLD(
+ sPicTable_Poliwag,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Poliwag,
+ gShinyOverworldPalette_Poliwag
+ )
.levelUpLearnset = sPoliwagLevelUpLearnset,
.teachableLearnset = sPoliwagTeachableLearnset,
+ .eggMoveLearnset = sPoliwagEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 25, SPECIES_POLIWHIRL}),
},
@@ -6405,6 +7084,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Poliwhirl,
.iconPalIndex = 0,
FOOTPRINT(Poliwhirl)
+ OVERWORLD(
+ sPicTable_Poliwhirl,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Poliwhirl,
+ gShinyOverworldPalette_Poliwhirl
+ )
.levelUpLearnset = sPoliwhirlLevelUpLearnset,
.teachableLearnset = sPoliwhirlTeachableLearnset,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_WATER_STONE, SPECIES_POLIWRATH},
@@ -6470,6 +7157,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Poliwrath,
.iconPalIndex = 0,
FOOTPRINT(Poliwrath)
+ OVERWORLD(
+ sPicTable_Poliwrath,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Poliwrath,
+ gShinyOverworldPalette_Poliwrath
+ )
.levelUpLearnset = sPoliwrathLevelUpLearnset,
.teachableLearnset = sPoliwrathTeachableLearnset,
},
@@ -6536,6 +7231,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Politoed,
.iconPalIndex = 1,
FOOTPRINT(Politoed)
+ OVERWORLD(
+ sPicTable_Politoed,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Politoed,
+ gShinyOverworldPalette_Politoed
+ )
.levelUpLearnset = sPolitoedLevelUpLearnset,
.teachableLearnset = sPolitoedTeachableLearnset,
},
@@ -6598,8 +7301,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Abra,
.iconPalIndex = 2,
FOOTPRINT(Abra)
+ OVERWORLD(
+ sPicTable_Abra,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Abra,
+ gShinyOverworldPalette_Abra
+ )
.levelUpLearnset = sAbraLevelUpLearnset,
.teachableLearnset = sAbraTeachableLearnset,
+ .eggMoveLearnset = sAbraEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 16, SPECIES_KADABRA}),
},
@@ -6657,6 +7369,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Kadabra,
.iconPalIndex = 2,
FOOTPRINT(Kadabra)
+ OVERWORLD(
+ sPicTable_Kadabra,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Kadabra,
+ gShinyOverworldPalette_Kadabra
+ )
.levelUpLearnset = sKadabraLevelUpLearnset,
.teachableLearnset = sKadabraTeachableLearnset,
.evolutions = EVOLUTION({EVO_TRADE, 0, SPECIES_ALAKAZAM},
@@ -6726,6 +7446,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Alakazam,
.iconPalIndex = 2,
FOOTPRINT(Alakazam)
+ OVERWORLD(
+ sPicTable_Alakazam,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Alakazam,
+ gShinyOverworldPalette_Alakazam
+ )
.levelUpLearnset = sAlakazamLevelUpLearnset,
.teachableLearnset = sAlakazamTeachableLearnset,
.formSpeciesIdTable = sAlakazamFormSpeciesIdTable,
@@ -6851,8 +7579,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Machop,
.iconPalIndex = 0,
FOOTPRINT(Machop)
+ OVERWORLD(
+ sPicTable_Machop,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Machop,
+ gShinyOverworldPalette_Machop
+ )
.levelUpLearnset = sMachopLevelUpLearnset,
.teachableLearnset = sMachopTeachableLearnset,
+ .eggMoveLearnset = sMachopEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 28, SPECIES_MACHOKE}),
},
@@ -6910,6 +7647,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Machoke,
.iconPalIndex = 2,
FOOTPRINT(Machoke)
+ OVERWORLD(
+ sPicTable_Machoke,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Machoke,
+ gShinyOverworldPalette_Machoke
+ )
.levelUpLearnset = sMachokeLevelUpLearnset,
.teachableLearnset = sMachokeTeachableLearnset,
.evolutions = EVOLUTION({EVO_TRADE, 0, SPECIES_MACHAMP},
@@ -6977,6 +7722,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Machamp,
.iconPalIndex = 0,
FOOTPRINT(Machamp)
+ OVERWORLD(
+ sPicTable_Machamp,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Machamp,
+ gShinyOverworldPalette_Machamp
+ )
.levelUpLearnset = sMachampLevelUpLearnset,
.teachableLearnset = sMachampTeachableLearnset,
.formSpeciesIdTable = sMachampFormSpeciesIdTable,
@@ -7095,8 +7848,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Bellsprout,
.iconPalIndex = 1,
FOOTPRINT(Bellsprout)
+ OVERWORLD(
+ sPicTable_Bellsprout,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Bellsprout,
+ gShinyOverworldPalette_Bellsprout
+ )
.levelUpLearnset = sBellsproutLevelUpLearnset,
.teachableLearnset = sBellsproutTeachableLearnset,
+ .eggMoveLearnset = sBellsproutEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 21, SPECIES_WEEPINBELL}),
},
@@ -7149,6 +7911,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Weepinbell,
.iconPalIndex = 1,
FOOTPRINT(Weepinbell)
+ OVERWORLD(
+ sPicTable_Weepinbell,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SPOT,
+ gOverworldPalette_Weepinbell,
+ gShinyOverworldPalette_Weepinbell
+ )
.levelUpLearnset = sWeepinbellLevelUpLearnset,
.teachableLearnset = sWeepinbellTeachableLearnset,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_LEAF_STONE, SPECIES_VICTREEBEL}),
@@ -7210,6 +7980,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Victreebel,
.iconPalIndex = 1,
FOOTPRINT(Victreebel)
+ OVERWORLD(
+ sPicTable_Victreebel,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SPOT,
+ gOverworldPalette_Victreebel,
+ gShinyOverworldPalette_Victreebel
+ )
.levelUpLearnset = sVictreebelLevelUpLearnset,
.teachableLearnset = sVictreebelTeachableLearnset,
},
@@ -7265,8 +8043,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Tentacool,
.iconPalIndex = 0,
FOOTPRINT(Tentacool)
+ OVERWORLD(
+ sPicTable_Tentacool,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SPOT,
+ gOverworldPalette_Tentacool,
+ gShinyOverworldPalette_Tentacool
+ )
.levelUpLearnset = sTentacoolLevelUpLearnset,
.teachableLearnset = sTentacoolTeachableLearnset,
+ .eggMoveLearnset = sTentacoolEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_TENTACRUEL}),
},
@@ -7319,6 +8106,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Tentacruel,
.iconPalIndex = 0,
FOOTPRINT(Tentacruel)
+ OVERWORLD(
+ sPicTable_Tentacruel,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_BUG,
+ gOverworldPalette_Tentacruel,
+ gShinyOverworldPalette_Tentacruel
+ )
.levelUpLearnset = sTentacruelLevelUpLearnset,
.teachableLearnset = sTentacruelTeachableLearnset,
},
@@ -7396,8 +8191,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Geodude,
.iconPalIndex = 1,
FOOTPRINT(Geodude)
+ OVERWORLD(
+ sPicTable_Geodude,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SPOT,
+ gOverworldPalette_Geodude,
+ gShinyOverworldPalette_Geodude
+ )
.levelUpLearnset = sGeodudeLevelUpLearnset,
.teachableLearnset = sGeodudeTeachableLearnset,
+ .eggMoveLearnset = sGeodudeEggMoveLearnset,
.formSpeciesIdTable = sGeodudeFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_LEVEL, 25, SPECIES_GRAVELER}),
},
@@ -7451,6 +8255,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Graveler,
.iconPalIndex = 1,
FOOTPRINT(Graveler)
+ OVERWORLD(
+ sPicTable_Graveler,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Graveler,
+ gShinyOverworldPalette_Graveler
+ )
.levelUpLearnset = sGravelerLevelUpLearnset,
.teachableLearnset = sGravelerTeachableLearnset,
.formSpeciesIdTable = sGravelerFormSpeciesIdTable,
@@ -7507,6 +8319,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Golem,
.iconPalIndex = 2,
FOOTPRINT(Golem)
+ OVERWORLD(
+ sPicTable_Golem,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Golem,
+ gShinyOverworldPalette_Golem
+ )
.levelUpLearnset = sGolemLevelUpLearnset,
.teachableLearnset = sGolemTeachableLearnset,
.formSpeciesIdTable = sGolemFormSpeciesIdTable,
@@ -7563,9 +8383,18 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_GeodudeAlolan,
.iconPalIndex = 2,
FOOTPRINT(Geodude)
+ OVERWORLD(
+ sPicTable_GeodudeAlolan,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_GeodudeAlolan,
+ gShinyOverworldPalette_GeodudeAlolan
+ )
.isAlolanForm = TRUE,
.levelUpLearnset = sGeodudeAlolanLevelUpLearnset,
.teachableLearnset = sGeodudeAlolanTeachableLearnset,
+ .eggMoveLearnset = sGeodudeAlolanEggMoveLearnset,
.formSpeciesIdTable = sGeodudeFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_LEVEL, 25, SPECIES_GRAVELER_ALOLAN}),
},
@@ -7619,6 +8448,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_GravelerAlolan,
.iconPalIndex = 2,
FOOTPRINT(Graveler)
+ OVERWORLD(
+ sPicTable_GravelerAlolan,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_GravelerAlolan,
+ gShinyOverworldPalette_GravelerAlolan
+ )
.isAlolanForm = TRUE,
.levelUpLearnset = sGravelerAlolanLevelUpLearnset,
.teachableLearnset = sGravelerAlolanTeachableLearnset,
@@ -7676,6 +8513,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_GolemAlolan,
.iconPalIndex = 2,
FOOTPRINT(Golem)
+ OVERWORLD(
+ sPicTable_GolemAlolan,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_GolemAlolan,
+ gShinyOverworldPalette_GolemAlolan
+ )
.isAlolanForm = TRUE,
.levelUpLearnset = sGolemAlolanLevelUpLearnset,
.teachableLearnset = sGolemAlolanTeachableLearnset,
@@ -7734,8 +8579,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Ponyta,
.iconPalIndex = 3,
FOOTPRINT(Ponyta)
+ OVERWORLD(
+ sPicTable_Ponyta,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Ponyta,
+ gShinyOverworldPalette_Ponyta
+ )
.levelUpLearnset = sPonytaLevelUpLearnset,
.teachableLearnset = sPonytaTeachableLearnset,
+ .eggMoveLearnset = sPonytaEggMoveLearnset,
.formSpeciesIdTable = sPonytaFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_LEVEL, 40, SPECIES_RAPIDASH}),
},
@@ -7788,6 +8642,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Rapidash,
.iconPalIndex = 3,
FOOTPRINT(Rapidash)
+ OVERWORLD(
+ sPicTable_Rapidash,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Rapidash,
+ gShinyOverworldPalette_Rapidash
+ )
.levelUpLearnset = sRapidashLevelUpLearnset,
.teachableLearnset = sRapidashTeachableLearnset,
.formSpeciesIdTable = sRapidashFormSpeciesIdTable,
@@ -7842,9 +8704,18 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_PonytaGalarian,
.iconPalIndex = 2,
FOOTPRINT(Ponyta)
+ OVERWORLD(
+ sPicTable_PonytaGalarian,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_PonytaGalarian,
+ gShinyOverworldPalette_PonytaGalarian
+ )
.isGalarianForm = TRUE,
.levelUpLearnset = sPonytaGalarianLevelUpLearnset,
.teachableLearnset = sPonytaGalarianTeachableLearnset,
+ .eggMoveLearnset = sPonytaGalarianEggMoveLearnset,
.formSpeciesIdTable = sPonytaFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_LEVEL, 40, SPECIES_RAPIDASH_GALARIAN}),
},
@@ -7897,6 +8768,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_RapidashGalarian,
.iconPalIndex = 2,
FOOTPRINT(Rapidash)
+ OVERWORLD(
+ sPicTable_RapidashGalarian,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_RapidashGalarian,
+ gShinyOverworldPalette_RapidashGalarian
+ )
.isGalarianForm = TRUE,
.levelUpLearnset = sRapidashGalarianLevelUpLearnset,
.teachableLearnset = sRapidashGalarianTeachableLearnset,
@@ -7955,8 +8834,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Slowpoke,
.iconPalIndex = 0,
FOOTPRINT(Slowpoke)
+ OVERWORLD(
+ sPicTable_Slowpoke,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Slowpoke,
+ gShinyOverworldPalette_Slowpoke
+ )
.levelUpLearnset = sSlowpokeLevelUpLearnset,
.teachableLearnset = sSlowpokeTeachableLearnset,
+ .eggMoveLearnset = sSlowpokeEggMoveLearnset,
.formSpeciesIdTable = sSlowpokeFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_LEVEL, 37, SPECIES_SLOWBRO},
{EVO_TRADE_ITEM, ITEM_KINGS_ROCK, SPECIES_SLOWKING},
@@ -8012,6 +8900,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Slowbro,
.iconPalIndex = 0,
FOOTPRINT(Slowbro)
+ OVERWORLD(
+ sPicTable_Slowbro,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Slowbro,
+ gShinyOverworldPalette_Slowbro
+ )
.levelUpLearnset = sSlowbroLevelUpLearnset,
.teachableLearnset = sSlowbroTeachableLearnset,
.formSpeciesIdTable = sSlowbroFormSpeciesIdTable,
@@ -8068,6 +8964,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Slowking,
.iconPalIndex = 0,
FOOTPRINT(Slowking)
+ OVERWORLD(
+ sPicTable_Slowking,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Slowking,
+ gShinyOverworldPalette_Slowking
+ )
.levelUpLearnset = sSlowkingLevelUpLearnset,
.teachableLearnset = sSlowkingTeachableLearnset,
.formSpeciesIdTable = sSlowkingFormSpeciesIdTable,
@@ -8181,9 +9085,18 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_SlowpokeGalarian,
.iconPalIndex = 0,
FOOTPRINT(Slowpoke)
+ OVERWORLD(
+ sPicTable_SlowpokeGalarian,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_SlowpokeGalarian,
+ gShinyOverworldPalette_SlowpokeGalarian
+ )
.isGalarianForm = TRUE,
.levelUpLearnset = sSlowpokeGalarianLevelUpLearnset,
.teachableLearnset = sSlowpokeGalarianTeachableLearnset,
+ .eggMoveLearnset = sSlowpokeGalarianEggMoveLearnset,
.formSpeciesIdTable = sSlowpokeFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_GALARICA_CUFF, SPECIES_SLOWBRO_GALARIAN},
{EVO_ITEM, ITEM_GALARICA_WREATH, SPECIES_SLOWKING_GALARIAN}),
@@ -8238,6 +9151,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_SlowbroGalarian,
.iconPalIndex = 0,
FOOTPRINT(Slowbro)
+ OVERWORLD(
+ sPicTable_SlowbroGalarian,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_SlowbroGalarian,
+ gShinyOverworldPalette_SlowbroGalarian
+ )
.isGalarianForm = TRUE,
.levelUpLearnset = sSlowbroGalarianLevelUpLearnset,
.teachableLearnset = sSlowbroGalarianTeachableLearnset,
@@ -8293,6 +9214,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_SlowkingGalarian,
.iconPalIndex = 0,
FOOTPRINT(Slowking)
+ OVERWORLD(
+ sPicTable_SlowkingGalarian,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_SlowkingGalarian,
+ gShinyOverworldPalette_SlowkingGalarian
+ )
.isGalarianForm = TRUE,
.levelUpLearnset = sSlowkingGalarianLevelUpLearnset,
.teachableLearnset = sSlowkingGalarianTeachableLearnset,
@@ -8353,6 +9282,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Magnemite,
.iconPalIndex = 0,
FOOTPRINT(Magnemite)
+ OVERWORLD(
+ sPicTable_Magnemite,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Magnemite,
+ gShinyOverworldPalette_Magnemite
+ )
.levelUpLearnset = sMagnemiteLevelUpLearnset,
.teachableLearnset = sMagnemiteTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_MAGNETON}),
@@ -8408,6 +9345,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Magneton,
.iconPalIndex = 0,
FOOTPRINT(Magneton)
+ OVERWORLD(
+ sPicTable_Magneton,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Magneton,
+ gShinyOverworldPalette_Magneton
+ )
.levelUpLearnset = sMagnetonLevelUpLearnset,
.teachableLearnset = sMagnetonTeachableLearnset,
.evolutions = EVOLUTION({EVO_MAPSEC, MAPSEC_NEW_MAUVILLE, SPECIES_MAGNEZONE},
@@ -8471,6 +9416,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Magnezone,
.iconPalIndex = 0,
FOOTPRINT(Magnezone)
+ OVERWORLD(
+ sPicTable_Magnezone,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Magnezone,
+ gShinyOverworldPalette_Magnezone
+ )
.levelUpLearnset = sMagnezoneLevelUpLearnset,
.teachableLearnset = sMagnezoneTeachableLearnset,
},
@@ -8537,8 +9490,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Farfetchd,
.iconPalIndex = 1,
FOOTPRINT(Farfetchd)
+ OVERWORLD(
+ sPicTable_Farfetchd,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Farfetchd,
+ gShinyOverworldPalette_Farfetchd
+ )
.levelUpLearnset = sFarfetchdLevelUpLearnset,
.teachableLearnset = sFarfetchdTeachableLearnset,
+ .eggMoveLearnset = sFarfetchdEggMoveLearnset,
.formSpeciesIdTable = sFarfetchdFormSpeciesIdTable,
},
@@ -8592,9 +9554,18 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_FarfetchdGalarian,
.iconPalIndex = 1,
FOOTPRINT(Farfetchd)
+ OVERWORLD(
+ sPicTable_FarfetchdGalarian,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_FarfetchdGalarian,
+ gShinyOverworldPalette_FarfetchdGalarian
+ )
.isGalarianForm = TRUE,
.levelUpLearnset = sFarfetchdGalarianLevelUpLearnset,
.teachableLearnset = sFarfetchdGalarianTeachableLearnset,
+ .eggMoveLearnset = sFarfetchdGalarianEggMoveLearnset,
.formSpeciesIdTable = sFarfetchdFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_CRITICAL_HITS, 3, SPECIES_SIRFETCHD}),
},
@@ -8648,6 +9619,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Sirfetchd,
.iconPalIndex = 1,
FOOTPRINT(Sirfetchd)
+ OVERWORLD(
+ sPicTable_Sirfetchd,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Sirfetchd,
+ gShinyOverworldPalette_Sirfetchd
+ )
.levelUpLearnset = sSirfetchdLevelUpLearnset,
.teachableLearnset = sSirfetchdTeachableLearnset,
},
@@ -8708,8 +9687,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Doduo,
.iconPalIndex = 2,
FOOTPRINT(Doduo)
+ OVERWORLD(
+ sPicTable_Doduo,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Doduo,
+ gShinyOverworldPalette_Doduo
+ )
.levelUpLearnset = sDoduoLevelUpLearnset,
.teachableLearnset = sDoduoTeachableLearnset,
+ .eggMoveLearnset = sDoduoEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 31, SPECIES_DODRIO}),
},
@@ -8772,6 +9760,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Dodrio,
.iconPalIndex = 2,
FOOTPRINT(Dodrio)
+ OVERWORLD(
+ sPicTable_Dodrio,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Dodrio,
+ gShinyOverworldPalette_Dodrio
+ )
.levelUpLearnset = sDodrioLevelUpLearnset,
.teachableLearnset = sDodrioTeachableLearnset,
},
@@ -8830,8 +9826,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Seel,
.iconPalIndex = 0,
FOOTPRINT(Seel)
+ OVERWORLD(
+ sPicTable_Seel,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SLITHER,
+ gOverworldPalette_Seel,
+ gShinyOverworldPalette_Seel
+ )
.levelUpLearnset = sSeelLevelUpLearnset,
.teachableLearnset = sSeelTeachableLearnset,
+ .eggMoveLearnset = sSeelEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 34, SPECIES_DEWGONG}),
},
@@ -8887,6 +9892,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Dewgong,
.iconPalIndex = 2,
FOOTPRINT(Dewgong)
+ OVERWORLD(
+ sPicTable_Dewgong,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Dewgong,
+ gShinyOverworldPalette_Dewgong
+ )
.levelUpLearnset = sDewgongLevelUpLearnset,
.teachableLearnset = sDewgongTeachableLearnset,
},
@@ -8942,8 +9955,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Grimer,
.iconPalIndex = 2,
FOOTPRINT(Grimer)
+ OVERWORLD(
+ sPicTable_Grimer,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SLITHER,
+ gOverworldPalette_Grimer,
+ gShinyOverworldPalette_Grimer
+ )
.levelUpLearnset = sGrimerLevelUpLearnset,
.teachableLearnset = sGrimerTeachableLearnset,
+ .eggMoveLearnset = sGrimerEggMoveLearnset,
.formSpeciesIdTable = sGrimerFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_LEVEL, 38, SPECIES_MUK}),
},
@@ -8999,6 +10021,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Muk,
.iconPalIndex = 2,
FOOTPRINT(Muk)
+ OVERWORLD(
+ sPicTable_Muk,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SLITHER,
+ gOverworldPalette_Muk,
+ gShinyOverworldPalette_Muk
+ )
.levelUpLearnset = sMukLevelUpLearnset,
.teachableLearnset = sMukTeachableLearnset,
.formSpeciesIdTable = sMukFormSpeciesIdTable,
@@ -9054,9 +10084,18 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_GrimerAlolan,
.iconPalIndex = 1,
FOOTPRINT(Grimer)
+ OVERWORLD(
+ sPicTable_GrimerAlolan,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_GrimerAlolan,
+ gShinyOverworldPalette_GrimerAlolan
+ )
.isAlolanForm = TRUE,
.levelUpLearnset = sGrimerAlolanLevelUpLearnset,
.teachableLearnset = sGrimerAlolanTeachableLearnset,
+ .eggMoveLearnset = sGrimerAlolanEggMoveLearnset,
.formSpeciesIdTable = sGrimerFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_LEVEL, 38, SPECIES_MUK_ALOLAN}),
},
@@ -9112,6 +10151,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_MukAlolan,
.iconPalIndex = 0,
FOOTPRINT(Muk)
+ OVERWORLD(
+ sPicTable_MukAlolan,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_MukAlolan,
+ gShinyOverworldPalette_MukAlolan
+ )
.isAlolanForm = TRUE,
.levelUpLearnset = sMukAlolanLevelUpLearnset,
.teachableLearnset = sMukAlolanTeachableLearnset,
@@ -9176,8 +10223,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Shellder,
.iconPalIndex = 2,
FOOTPRINT(Shellder)
+ OVERWORLD(
+ sPicTable_Shellder,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SPOT,
+ gOverworldPalette_Shellder,
+ gShinyOverworldPalette_Shellder
+ )
.levelUpLearnset = sShellderLevelUpLearnset,
.teachableLearnset = sShellderTeachableLearnset,
+ .eggMoveLearnset = sShellderEggMoveLearnset,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_WATER_STONE, SPECIES_CLOYSTER}),
},
@@ -9235,6 +10291,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Cloyster,
.iconPalIndex = 2,
FOOTPRINT(Cloyster)
+ OVERWORLD(
+ sPicTable_Cloyster,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Cloyster,
+ gShinyOverworldPalette_Cloyster
+ )
.levelUpLearnset = sCloysterLevelUpLearnset,
.teachableLearnset = sCloysterTeachableLearnset,
},
@@ -9290,8 +10354,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Gastly,
.iconPalIndex = 2,
FOOTPRINT(Gastly)
+ OVERWORLD(
+ sPicTable_Gastly,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Gastly,
+ gShinyOverworldPalette_Gastly
+ )
.levelUpLearnset = sGastlyLevelUpLearnset,
.teachableLearnset = sGastlyTeachableLearnset,
+ .eggMoveLearnset = sGastlyEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 25, SPECIES_HAUNTER}),
},
@@ -9345,6 +10418,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Haunter,
.iconPalIndex = 2,
FOOTPRINT(Haunter)
+ OVERWORLD(
+ sPicTable_Haunter,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Haunter,
+ gShinyOverworldPalette_Haunter
+ )
.levelUpLearnset = sHaunterLevelUpLearnset,
.teachableLearnset = sHaunterTeachableLearnset,
.evolutions = EVOLUTION({EVO_TRADE, 0, SPECIES_GENGAR},
@@ -9411,6 +10492,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Gengar,
.iconPalIndex = 2,
FOOTPRINT(Gengar)
+ OVERWORLD(
+ sPicTable_Gengar,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Gengar,
+ gShinyOverworldPalette_Gengar
+ )
.levelUpLearnset = sGengarLevelUpLearnset,
.teachableLearnset = sGengarTeachableLearnset,
.formSpeciesIdTable = sGengarFormSpeciesIdTable,
@@ -9581,8 +10670,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Onix,
.iconPalIndex = 2,
FOOTPRINT(Onix)
+ OVERWORLD(
+ sPicTable_Onix,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SLITHER,
+ gOverworldPalette_Onix,
+ gShinyOverworldPalette_Onix
+ )
.levelUpLearnset = sOnixLevelUpLearnset,
.teachableLearnset = sOnixTeachableLearnset,
+ .eggMoveLearnset = sOnixEggMoveLearnset,
.evolutions = EVOLUTION({EVO_TRADE_ITEM, ITEM_METAL_COAT, SPECIES_STEELIX},
{EVO_ITEM, ITEM_METAL_COAT, SPECIES_STEELIX}),
},
@@ -9642,6 +10740,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Steelix,
.iconPalIndex = 0,
FOOTPRINT(Steelix)
+ OVERWORLD(
+ sPicTable_Steelix,
+ SIZE_64x64,
+ SHADOW_SIZE_M,
+ TRACKS_SLITHER,
+ gOverworldPalette_Steelix,
+ gShinyOverworldPalette_Steelix
+ )
.levelUpLearnset = sSteelixLevelUpLearnset,
.teachableLearnset = sSteelixTeachableLearnset,
.formSpeciesIdTable = sSteelixFormSpeciesIdTable,
@@ -9762,8 +10868,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Drowzee,
.iconPalIndex = 2,
FOOTPRINT(Drowzee)
+ OVERWORLD(
+ sPicTable_Drowzee,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Drowzee,
+ gShinyOverworldPalette_Drowzee
+ )
.levelUpLearnset = sDrowzeeLevelUpLearnset,
.teachableLearnset = sDrowzeeTeachableLearnset,
+ .eggMoveLearnset = sDrowzeeEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 26, SPECIES_HYPNO}),
},
@@ -9824,6 +10939,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Hypno,
.iconPalIndex = 2,
FOOTPRINT(Hypno)
+ OVERWORLD(
+ sPicTable_Hypno,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Hypno,
+ gShinyOverworldPalette_Hypno
+ )
.levelUpLearnset = sHypnoLevelUpLearnset,
.teachableLearnset = sHypnoTeachableLearnset,
},
@@ -9878,8 +11001,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Krabby,
.iconPalIndex = 0,
FOOTPRINT(Krabby)
+ OVERWORLD(
+ sPicTable_Krabby,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Krabby,
+ gShinyOverworldPalette_Krabby
+ )
.levelUpLearnset = sKrabbyLevelUpLearnset,
.teachableLearnset = sKrabbyTeachableLearnset,
+ .eggMoveLearnset = sKrabbyEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 28, SPECIES_KINGLER}),
},
@@ -9933,6 +11065,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Kingler,
.iconPalIndex = 0,
FOOTPRINT(Kingler)
+ OVERWORLD(
+ sPicTable_Kingler,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Kingler,
+ gShinyOverworldPalette_Kingler
+ )
.levelUpLearnset = sKinglerLevelUpLearnset,
.teachableLearnset = sKinglerTeachableLearnset,
.formSpeciesIdTable = sKinglerFormSpeciesIdTable,
@@ -10055,6 +11195,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Voltorb,
.iconPalIndex = 0,
FOOTPRINT(Voltorb)
+ OVERWORLD(
+ sPicTable_Voltorb,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SPOT,
+ gOverworldPalette_Voltorb,
+ gShinyOverworldPalette_Voltorb
+ )
.levelUpLearnset = sVoltorbLevelUpLearnset,
.teachableLearnset = sVoltorbTeachableLearnset,
.formSpeciesIdTable = sVoltorbFormSpeciesIdTable,
@@ -10109,6 +11257,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Electrode,
.iconPalIndex = 0,
FOOTPRINT(Electrode)
+ OVERWORLD(
+ sPicTable_Electrode,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SPOT,
+ gOverworldPalette_Electrode,
+ gShinyOverworldPalette_Electrode
+ )
.levelUpLearnset = sElectrodeLevelUpLearnset,
.teachableLearnset = sElectrodeTeachableLearnset,
.formSpeciesIdTable = sElectrodeFormSpeciesIdTable,
@@ -10163,6 +11319,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_VoltorbHisuian,
.iconPalIndex = 0,
FOOTPRINT(Voltorb)
+ OVERWORLD(
+ sPicTable_VoltorbHisuian,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_VoltorbHisuian,
+ gShinyOverworldPalette_VoltorbHisuian
+ )
.isHisuianForm = TRUE,
.levelUpLearnset = sVoltorbHisuianLevelUpLearnset,
.teachableLearnset = sVoltorbHisuianTeachableLearnset,
@@ -10218,6 +11382,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_ElectrodeHisuian,
.iconPalIndex = 1,
FOOTPRINT(Electrode)
+ OVERWORLD(
+ sPicTable_ElectrodeHisuian,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_ElectrodeHisuian,
+ gShinyOverworldPalette_ElectrodeHisuian
+ )
.isHisuianForm = TRUE,
.levelUpLearnset = sElectrodeHisuianLevelUpLearnset,
.teachableLearnset = sElectrodeHisuianTeachableLearnset,
@@ -10276,8 +11448,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Exeggcute,
.iconPalIndex = 0,
FOOTPRINT(Exeggcute)
+ OVERWORLD(
+ sPicTable_Exeggcute,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SPOT,
+ gOverworldPalette_Exeggcute,
+ gShinyOverworldPalette_Exeggcute
+ )
.levelUpLearnset = sExeggcuteLevelUpLearnset,
.teachableLearnset = sExeggcuteTeachableLearnset,
+ .eggMoveLearnset = sExeggcuteEggMoveLearnset,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_LEAF_STONE, SPECIES_EXEGGUTOR},
{EVO_ITEM, ITEM_SUN_STONE, SPECIES_EXEGGUTOR_ALOLAN}),
},
@@ -10340,6 +11521,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Exeggutor,
.iconPalIndex = 1,
FOOTPRINT(Exeggutor)
+ OVERWORLD(
+ sPicTable_Exeggutor,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Exeggutor,
+ gShinyOverworldPalette_Exeggutor
+ )
.levelUpLearnset = sExeggutorLevelUpLearnset,
.teachableLearnset = sExeggutorTeachableLearnset,
.formSpeciesIdTable = sExeggutorFormSpeciesIdTable,
@@ -10394,6 +11583,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_ExeggutorAlolan,
.iconPalIndex = 1,
FOOTPRINT(Exeggutor)
+ OVERWORLD(
+ sPicTable_ExeggutorAlolan,
+ SIZE_64x64,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_ExeggutorAlolan,
+ gShinyOverworldPalette_ExeggutorAlolan
+ )
.isAlolanForm = TRUE,
.levelUpLearnset = sExeggutorAlolanLevelUpLearnset,
.teachableLearnset = sExeggutorAlolanTeachableLearnset,
@@ -10453,8 +11650,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Cubone,
.iconPalIndex = 2,
FOOTPRINT(Cubone)
+ OVERWORLD(
+ sPicTable_Cubone,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Cubone,
+ gShinyOverworldPalette_Cubone
+ )
.levelUpLearnset = sCuboneLevelUpLearnset,
.teachableLearnset = sCuboneTeachableLearnset,
+ .eggMoveLearnset = sCuboneEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 28, SPECIES_MAROWAK},
{EVO_NONE, 0, SPECIES_MAROWAK_ALOLAN},
{EVO_NONE, 0, SPECIES_MAROWAK_ALOLAN_TOTEM}),
@@ -10509,6 +11715,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Marowak,
.iconPalIndex = 2,
FOOTPRINT(Marowak)
+ OVERWORLD(
+ sPicTable_Marowak,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Marowak,
+ gShinyOverworldPalette_Marowak
+ )
.levelUpLearnset = sMarowakLevelUpLearnset,
.teachableLearnset = sMarowakTeachableLearnset,
.formSpeciesIdTable = sMarowakFormSpeciesIdTable,
@@ -10560,6 +11774,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_MarowakAlolan,
.iconPalIndex = 1,
FOOTPRINT(Marowak)
+ OVERWORLD(
+ sPicTable_MarowakAlolan,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_MarowakAlolan,
+ gShinyOverworldPalette_MarowakAlolan
+ )
.isAlolanForm = TRUE,
.levelUpLearnset = sMarowakAlolanLevelUpLearnset,
.teachableLearnset = sMarowakAlolanTeachableLearnset,
@@ -10674,8 +11896,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Tyrogue,
.iconPalIndex = 2,
FOOTPRINT(Tyrogue)
+ OVERWORLD(
+ sPicTable_Tyrogue,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Tyrogue,
+ gShinyOverworldPalette_Tyrogue
+ )
.levelUpLearnset = sTyrogueLevelUpLearnset,
.teachableLearnset = sTyrogueTeachableLearnset,
+ .eggMoveLearnset = sTyrogueEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL_ATK_LT_DEF, 20, SPECIES_HITMONCHAN},
{EVO_LEVEL_ATK_GT_DEF, 20, SPECIES_HITMONLEE},
{EVO_LEVEL_ATK_EQ_DEF, 20, SPECIES_HITMONTOP}),
@@ -10734,6 +11965,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Hitmonlee,
.iconPalIndex = 2,
FOOTPRINT(Hitmonlee)
+ OVERWORLD(
+ sPicTable_Hitmonlee,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Hitmonlee,
+ gShinyOverworldPalette_Hitmonlee
+ )
.levelUpLearnset = sHitmonleeLevelUpLearnset,
.teachableLearnset = sHitmonleeTeachableLearnset,
},
@@ -10790,6 +12029,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Hitmonchan,
.iconPalIndex = 2,
FOOTPRINT(Hitmonchan)
+ OVERWORLD(
+ sPicTable_Hitmonchan,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Hitmonchan,
+ gShinyOverworldPalette_Hitmonchan
+ )
.levelUpLearnset = sHitmonchanLevelUpLearnset,
.teachableLearnset = sHitmonchanTeachableLearnset,
},
@@ -10847,6 +12094,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Hitmontop,
.iconPalIndex = 2,
FOOTPRINT(Hitmontop)
+ OVERWORLD(
+ sPicTable_Hitmontop,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Hitmontop,
+ gShinyOverworldPalette_Hitmontop
+ )
.levelUpLearnset = sHitmontopLevelUpLearnset,
.teachableLearnset = sHitmontopTeachableLearnset,
},
@@ -10903,8 +12158,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Lickitung,
.iconPalIndex = 0,
FOOTPRINT(Lickitung)
+ OVERWORLD(
+ sPicTable_Lickitung,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Lickitung,
+ gShinyOverworldPalette_Lickitung
+ )
.levelUpLearnset = sLickitungLevelUpLearnset,
.teachableLearnset = sLickitungTeachableLearnset,
+ .eggMoveLearnset = sLickitungEggMoveLearnset,
.evolutions = EVOLUTION({EVO_MOVE, MOVE_ROLLOUT, SPECIES_LICKILICKY}),
},
@@ -10958,6 +12222,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Lickilicky,
.iconPalIndex = 1,
FOOTPRINT(Lickilicky)
+ OVERWORLD(
+ sPicTable_Lickilicky,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Lickilicky,
+ gShinyOverworldPalette_Lickilicky
+ )
.levelUpLearnset = sLickilickyLevelUpLearnset,
.teachableLearnset = sLickilickyTeachableLearnset,
},
@@ -11019,8 +12291,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Koffing,
.iconPalIndex = 2,
FOOTPRINT(Koffing)
+ OVERWORLD(
+ sPicTable_Koffing,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Koffing,
+ gShinyOverworldPalette_Koffing
+ )
.levelUpLearnset = sKoffingLevelUpLearnset,
.teachableLearnset = sKoffingTeachableLearnset,
+ .eggMoveLearnset = sKoffingEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 35, SPECIES_WEEZING},
{EVO_NONE, 0, SPECIES_WEEZING_GALARIAN}),
},
@@ -11080,6 +12361,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Weezing,
.iconPalIndex = 2,
FOOTPRINT(Weezing)
+ OVERWORLD(
+ sPicTable_Weezing,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Weezing,
+ gShinyOverworldPalette_Weezing
+ )
.levelUpLearnset = sWeezingLevelUpLearnset,
.teachableLearnset = sWeezingTeachableLearnset,
.formSpeciesIdTable = sWeezingFormSpeciesIdTable,
@@ -11137,6 +12426,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_WeezingGalarian,
.iconPalIndex = 1,
FOOTPRINT(Weezing)
+ OVERWORLD(
+ sPicTable_WeezingGalarian,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_WeezingGalarian,
+ gShinyOverworldPalette_WeezingGalarian
+ )
.isGalarianForm = TRUE,
.levelUpLearnset = sWeezingGalarianLevelUpLearnset,
.teachableLearnset = sWeezingGalarianTeachableLearnset,
@@ -11198,8 +12495,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Rhyhorn,
.iconPalIndex = 1,
FOOTPRINT(Rhyhorn)
+ OVERWORLD(
+ sPicTable_Rhyhorn,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Rhyhorn,
+ gShinyOverworldPalette_Rhyhorn
+ )
.levelUpLearnset = sRhyhornLevelUpLearnset,
.teachableLearnset = sRhyhornTeachableLearnset,
+ .eggMoveLearnset = sRhyhornEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 42, SPECIES_RHYDON}),
},
@@ -11255,6 +12561,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Rhydon,
.iconPalIndex = 1,
FOOTPRINT(Rhydon)
+ OVERWORLD(
+ sPicTable_Rhydon,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Rhydon,
+ gShinyOverworldPalette_Rhydon
+ )
.levelUpLearnset = sRhydonLevelUpLearnset,
.teachableLearnset = sRhydonTeachableLearnset,
.evolutions = EVOLUTION({EVO_TRADE_ITEM, ITEM_PROTECTOR, SPECIES_RHYPERIOR},
@@ -11320,6 +12634,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Rhyperior,
.iconPalIndex = 0,
FOOTPRINT(Rhyperior)
+ OVERWORLD(
+ sPicTable_Rhyperior,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Rhyperior,
+ gShinyOverworldPalette_Rhyperior
+ )
.levelUpLearnset = sRhyperiorLevelUpLearnset,
.teachableLearnset = sRhyperiorTeachableLearnset,
},
@@ -11377,8 +12699,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Happiny,
.iconPalIndex = 0,
FOOTPRINT(Happiny)
+ OVERWORLD(
+ sPicTable_Happiny,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Happiny,
+ gShinyOverworldPalette_Happiny
+ )
.levelUpLearnset = sHappinyLevelUpLearnset,
.teachableLearnset = sHappinyTeachableLearnset,
+ .eggMoveLearnset = sHappinyEggMoveLearnset,
.evolutions = EVOLUTION({EVO_ITEM_HOLD_DAY, ITEM_OVAL_STONE, SPECIES_CHANSEY},
{EVO_ITEM_DAY, ITEM_OVAL_STONE, SPECIES_CHANSEY}),
},
@@ -11433,8 +12764,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Chansey,
.iconPalIndex = 0,
FOOTPRINT(Chansey)
+ OVERWORLD(
+ sPicTable_Chansey,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Chansey,
+ gShinyOverworldPalette_Chansey
+ )
.levelUpLearnset = sChanseyLevelUpLearnset,
.teachableLearnset = sChanseyTeachableLearnset,
+ .eggMoveLearnset = sChanseyEggMoveLearnset,
.evolutions = EVOLUTION({EVO_FRIENDSHIP, 0, SPECIES_BLISSEY}),
},
@@ -11488,6 +12828,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Blissey,
.iconPalIndex = 0,
FOOTPRINT(Blissey)
+ OVERWORLD(
+ sPicTable_Blissey,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Blissey,
+ gShinyOverworldPalette_Blissey
+ )
.levelUpLearnset = sBlisseyLevelUpLearnset,
.teachableLearnset = sBlisseyTeachableLearnset,
},
@@ -11547,8 +12895,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Tangela,
.iconPalIndex = 0,
FOOTPRINT(Tangela)
+ OVERWORLD(
+ sPicTable_Tangela,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Tangela,
+ gShinyOverworldPalette_Tangela
+ )
.levelUpLearnset = sTangelaLevelUpLearnset,
.teachableLearnset = sTangelaTeachableLearnset,
+ .eggMoveLearnset = sTangelaEggMoveLearnset,
.evolutions = EVOLUTION({EVO_MOVE, MOVE_ANCIENT_POWER, SPECIES_TANGROWTH}),
},
@@ -11603,6 +12960,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Tangrowth,
.iconPalIndex = 0,
FOOTPRINT(Tangrowth)
+ OVERWORLD(
+ sPicTable_Tangrowth,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Tangrowth,
+ gShinyOverworldPalette_Tangrowth
+ )
.levelUpLearnset = sTangrowthLevelUpLearnset,
.teachableLearnset = sTangrowthTeachableLearnset,
},
@@ -11658,8 +13023,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Kangaskhan,
.iconPalIndex = 2,
FOOTPRINT(Kangaskhan)
+ OVERWORLD(
+ sPicTable_Kangaskhan,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Kangaskhan,
+ gShinyOverworldPalette_Kangaskhan
+ )
.levelUpLearnset = sKangaskhanLevelUpLearnset,
.teachableLearnset = sKangaskhanTeachableLearnset,
+ .eggMoveLearnset = sKangaskhanEggMoveLearnset,
.formSpeciesIdTable = sKangaskhanFormSpeciesIdTable,
.formChangeTable = sKangaskhanFormChangeTable,
},
@@ -11716,6 +13090,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.isMegaEvolution = TRUE,
.levelUpLearnset = sKangaskhanLevelUpLearnset,
.teachableLearnset = sKangaskhanTeachableLearnset,
+ .eggMoveLearnset = sKangaskhanEggMoveLearnset,
.formSpeciesIdTable = sKangaskhanFormSpeciesIdTable,
.formChangeTable = sKangaskhanFormChangeTable,
},
@@ -11776,8 +13151,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Horsea,
.iconPalIndex = 0,
FOOTPRINT(Horsea)
+ OVERWORLD(
+ sPicTable_Horsea,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SPOT,
+ gOverworldPalette_Horsea,
+ gShinyOverworldPalette_Horsea
+ )
.levelUpLearnset = sHorseaLevelUpLearnset,
.teachableLearnset = sHorseaTeachableLearnset,
+ .eggMoveLearnset = sHorseaEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 32, SPECIES_SEADRA}),
},
@@ -11835,6 +13219,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Seadra,
.iconPalIndex = 0,
FOOTPRINT(Seadra)
+ OVERWORLD(
+ sPicTable_Seadra,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SPOT,
+ gOverworldPalette_Seadra,
+ gShinyOverworldPalette_Seadra
+ )
.levelUpLearnset = sSeadraLevelUpLearnset,
.teachableLearnset = sSeadraTeachableLearnset,
.evolutions = EVOLUTION({EVO_TRADE_ITEM, ITEM_DRAGON_SCALE, SPECIES_KINGDRA},
@@ -11903,6 +13295,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Kingdra,
.iconPalIndex = 0,
FOOTPRINT(Kingdra)
+ OVERWORLD(
+ sPicTable_Kingdra,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SPOT,
+ gOverworldPalette_Kingdra,
+ gShinyOverworldPalette_Kingdra
+ )
.levelUpLearnset = sKingdraLevelUpLearnset,
.teachableLearnset = sKingdraTeachableLearnset,
},
@@ -11963,8 +13363,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Goldeen,
.iconPalIndex = 0,
FOOTPRINT(Goldeen)
+ OVERWORLD(
+ sPicTable_Goldeen,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SPOT,
+ gOverworldPalette_Goldeen,
+ gShinyOverworldPalette_Goldeen
+ )
.levelUpLearnset = sGoldeenLevelUpLearnset,
.teachableLearnset = sGoldeenTeachableLearnset,
+ .eggMoveLearnset = sGoldeenEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 33, SPECIES_SEAKING}),
},
@@ -12021,6 +13430,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Seaking,
.iconPalIndex = 0,
FOOTPRINT(Seaking)
+ OVERWORLD(
+ sPicTable_Seaking,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SPOT,
+ gOverworldPalette_Seaking,
+ gShinyOverworldPalette_Seaking
+ )
.levelUpLearnset = sSeakingLevelUpLearnset,
.teachableLearnset = sSeakingTeachableLearnset,
},
@@ -12078,6 +13495,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Staryu,
.iconPalIndex = 2,
FOOTPRINT(Staryu)
+ OVERWORLD(
+ sPicTable_Staryu,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Staryu,
+ gShinyOverworldPalette_Staryu
+ )
.levelUpLearnset = sStaryuLevelUpLearnset,
.teachableLearnset = sStaryuTeachableLearnset,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_WATER_STONE, SPECIES_STARMIE}),
@@ -12133,6 +13558,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Starmie,
.iconPalIndex = 2,
FOOTPRINT(Starmie)
+ OVERWORLD(
+ sPicTable_Starmie,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Starmie,
+ gShinyOverworldPalette_Starmie
+ )
.levelUpLearnset = sStarmieLevelUpLearnset,
.teachableLearnset = sStarmieTeachableLearnset,
},
@@ -12196,8 +13629,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_MimeJr,
.iconPalIndex = 0,
FOOTPRINT(MimeJr)
+ OVERWORLD(
+ sPicTable_MimeJr,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_MimeJr,
+ gShinyOverworldPalette_MimeJr
+ )
.levelUpLearnset = sMimeJrLevelUpLearnset,
.teachableLearnset = sMimeJrTeachableLearnset,
+ .eggMoveLearnset = sMimeJrEggMoveLearnset,
.evolutions = EVOLUTION({EVO_MOVE, MOVE_MIMIC, SPECIES_MR_MIME},
{EVO_NONE, 0, SPECIES_MR_MIME_GALARIAN}),
},
@@ -12255,8 +13697,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_MrMime,
.iconPalIndex = 0,
FOOTPRINT(MrMime)
+ OVERWORLD(
+ sPicTable_MrMime,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_MrMime,
+ gShinyOverworldPalette_MrMime
+ )
.levelUpLearnset = sMrMimeLevelUpLearnset,
.teachableLearnset = sMrMimeTeachableLearnset,
+ .eggMoveLearnset = sMrMimeEggMoveLearnset,
.formSpeciesIdTable = sMrMimeFormSpeciesIdTable,
},
@@ -12309,9 +13760,18 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_MrMimeGalarian,
.iconPalIndex = 0,
FOOTPRINT(MrMime)
+ OVERWORLD(
+ sPicTable_MrMimeGalarian,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_MrMimeGalarian,
+ gShinyOverworldPalette_MrMimeGalarian
+ )
.isGalarianForm = TRUE,
.levelUpLearnset = sMrMimeGalarianLevelUpLearnset,
.teachableLearnset = sMrMimeGalarianTeachableLearnset,
+ .eggMoveLearnset = sMrMimeGalarianEggMoveLearnset,
.formSpeciesIdTable = sMrMimeFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_LEVEL, 42, SPECIES_MR_RIME}),
},
@@ -12363,6 +13823,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_MrRime,
.iconPalIndex = 0,
FOOTPRINT(MrRime)
+ OVERWORLD(
+ sPicTable_MrRime,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_MrRime,
+ gShinyOverworldPalette_MrRime
+ )
.levelUpLearnset = sMrRimeLevelUpLearnset,
.teachableLearnset = sMrRimeTeachableLearnset,
},
@@ -12425,8 +13893,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Scyther,
.iconPalIndex = 1,
FOOTPRINT(Scyther)
+ OVERWORLD(
+ sPicTable_Scyther,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Scyther,
+ gShinyOverworldPalette_Scyther
+ )
.levelUpLearnset = sScytherLevelUpLearnset,
.teachableLearnset = sScytherTeachableLearnset,
+ .eggMoveLearnset = sScytherEggMoveLearnset,
.evolutions = EVOLUTION({EVO_TRADE_ITEM, ITEM_METAL_COAT, SPECIES_SCIZOR},
{EVO_ITEM, ITEM_BLACK_AUGURITE, SPECIES_KLEAVOR},
{EVO_ITEM, ITEM_METAL_COAT, SPECIES_SCIZOR}),
@@ -12488,6 +13965,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Scizor,
.iconPalIndex = 0,
FOOTPRINT(Scizor)
+ OVERWORLD(
+ sPicTable_Scizor,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Scizor,
+ gShinyOverworldPalette_Scizor
+ )
.levelUpLearnset = sScizorLevelUpLearnset,
.teachableLearnset = sScizorTeachableLearnset,
.formSpeciesIdTable = sScizorFormSpeciesIdTable,
@@ -12601,6 +14086,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Kleavor,
.iconPalIndex = 2,
FOOTPRINT(Kleavor)
+ OVERWORLD(
+ sPicTable_Kleavor,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Kleavor,
+ gShinyOverworldPalette_Kleavor
+ )
.levelUpLearnset = sKleavorLevelUpLearnset,
.teachableLearnset = sKleavorTeachableLearnset,
},
@@ -12662,8 +14155,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Smoochum,
.iconPalIndex = 1,
FOOTPRINT(Smoochum)
+ OVERWORLD(
+ sPicTable_Smoochum,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Smoochum,
+ gShinyOverworldPalette_Smoochum
+ )
.levelUpLearnset = sSmoochumLevelUpLearnset,
.teachableLearnset = sSmoochumTeachableLearnset,
+ .eggMoveLearnset = sSmoochumEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_JYNX}),
},
#endif //P_GEN_2_CROSS_EVOS
@@ -12720,6 +14222,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Jynx,
.iconPalIndex = 2,
FOOTPRINT(Jynx)
+ OVERWORLD(
+ sPicTable_Jynx,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Jynx,
+ gShinyOverworldPalette_Jynx
+ )
.levelUpLearnset = sJynxLevelUpLearnset,
.teachableLearnset = sJynxTeachableLearnset,
},
@@ -12777,8 +14287,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Elekid,
.iconPalIndex = 1,
FOOTPRINT(Elekid)
+ OVERWORLD(
+ sPicTable_Elekid,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Elekid,
+ gShinyOverworldPalette_Elekid
+ )
.levelUpLearnset = sElekidLevelUpLearnset,
.teachableLearnset = sElekidTeachableLearnset,
+ .eggMoveLearnset = sElekidEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_ELECTABUZZ}),
},
#endif //P_GEN_2_CROSS_EVOS
@@ -12833,6 +14352,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Electabuzz,
.iconPalIndex = 1,
FOOTPRINT(Electabuzz)
+ OVERWORLD(
+ sPicTable_Electabuzz,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Electabuzz,
+ gShinyOverworldPalette_Electabuzz
+ )
.levelUpLearnset = sElectabuzzLevelUpLearnset,
.teachableLearnset = sElectabuzzTeachableLearnset,
.evolutions = EVOLUTION({EVO_TRADE_ITEM, ITEM_ELECTIRIZER, SPECIES_ELECTIVIRE},
@@ -12895,6 +14422,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Electivire,
.iconPalIndex = 1,
FOOTPRINT(Electivire)
+ OVERWORLD(
+ sPicTable_Electivire,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Electivire,
+ gShinyOverworldPalette_Electivire
+ )
.levelUpLearnset = sElectivireLevelUpLearnset,
.teachableLearnset = sElectivireTeachableLearnset,
},
@@ -12953,8 +14488,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Magby,
.iconPalIndex = 0,
FOOTPRINT(Magby)
+ OVERWORLD(
+ sPicTable_Magby,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Magby,
+ gShinyOverworldPalette_Magby
+ )
.levelUpLearnset = sMagbyLevelUpLearnset,
.teachableLearnset = sMagbyTeachableLearnset,
+ .eggMoveLearnset = sMagbyEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_MAGMAR}),
},
#endif //P_GEN_2_CROSS_EVOS
@@ -13008,6 +14552,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Magmar,
.iconPalIndex = 0,
FOOTPRINT(Magmar)
+ OVERWORLD(
+ sPicTable_Magmar,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Magmar,
+ gShinyOverworldPalette_Magmar
+ )
.levelUpLearnset = sMagmarLevelUpLearnset,
.teachableLearnset = sMagmarTeachableLearnset,
.evolutions = EVOLUTION({EVO_TRADE_ITEM, ITEM_MAGMARIZER, SPECIES_MAGMORTAR},
@@ -13071,6 +14623,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Magmortar,
.iconPalIndex = 0,
FOOTPRINT(Magmortar)
+ OVERWORLD(
+ sPicTable_Magmortar,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Magmortar,
+ gShinyOverworldPalette_Magmortar
+ )
.levelUpLearnset = sMagmortarLevelUpLearnset,
.teachableLearnset = sMagmortarTeachableLearnset,
},
@@ -13130,8 +14690,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Pinsir,
.iconPalIndex = 2,
FOOTPRINT(Pinsir)
+ OVERWORLD(
+ sPicTable_Pinsir,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Pinsir,
+ gShinyOverworldPalette_Pinsir
+ )
.levelUpLearnset = sPinsirLevelUpLearnset,
.teachableLearnset = sPinsirTeachableLearnset,
+ .eggMoveLearnset = sPinsirEggMoveLearnset,
.formSpeciesIdTable = sPinsirFormSpeciesIdTable,
.formChangeTable = sPinsirFormChangeTable,
},
@@ -13189,6 +14758,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.isMegaEvolution = TRUE,
.levelUpLearnset = sPinsirLevelUpLearnset,
.teachableLearnset = sPinsirTeachableLearnset,
+ .eggMoveLearnset = sPinsirEggMoveLearnset,
.formSpeciesIdTable = sPinsirFormSpeciesIdTable,
.formChangeTable = sPinsirFormChangeTable,
},
@@ -13250,6 +14820,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Tauros,
.iconPalIndex = 2,
FOOTPRINT(Tauros)
+ OVERWORLD(
+ sPicTable_Tauros,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Tauros,
+ gShinyOverworldPalette_Tauros
+ )
.levelUpLearnset = sTaurosLevelUpLearnset,
.teachableLearnset = sTaurosTeachableLearnset,
.formSpeciesIdTable = sTaurosFormSpeciesIdTable,
@@ -13307,6 +14885,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.isPaldeanForm = TRUE,
.levelUpLearnset = sTaurosPaldeanCombatBreedLevelUpLearnset,
.teachableLearnset = sTaurosPaldeanCombatBreedTeachableLearnset,
+ .eggMoveLearnset = sTaurosPaldeanCombatBreedEggMoveLearnset,
.formSpeciesIdTable = sTaurosFormSpeciesIdTable,
},
@@ -13361,6 +14940,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.isPaldeanForm = TRUE,
.levelUpLearnset = sTaurosPaldeanBlazeBreedLevelUpLearnset,
.teachableLearnset = sTaurosPaldeanBlazeBreedTeachableLearnset,
+ .eggMoveLearnset = sTaurosPaldeanBlazeBreedEggMoveLearnset,
.formSpeciesIdTable = sTaurosFormSpeciesIdTable,
},
@@ -13415,6 +14995,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.isPaldeanForm = TRUE,
.levelUpLearnset = sTaurosPaldeanAquaBreedLevelUpLearnset,
.teachableLearnset = sTaurosPaldeanAquaBreedTeachableLearnset,
+ .eggMoveLearnset = sTaurosPaldeanAquaBreedEggMoveLearnset,
.formSpeciesIdTable = sTaurosFormSpeciesIdTable,
},
#endif //P_PALDEAN_FORMS
@@ -13473,6 +15054,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Magikarp,
.iconPalIndex = 0,
FOOTPRINT(Magikarp)
+ OVERWORLD(
+ sPicTable_Magikarp,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SPOT,
+ gOverworldPalette_Magikarp,
+ gShinyOverworldPalette_Magikarp
+ )
.tmIlliterate = TRUE,
.levelUpLearnset = sMagikarpLevelUpLearnset,
.teachableLearnset = sMagikarpTeachableLearnset,
@@ -13531,6 +15120,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Gyarados,
.iconPalIndex = 0,
FOOTPRINT(Gyarados)
+ OVERWORLD(
+ sPicTable_Gyarados,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SLITHER,
+ gOverworldPalette_Gyarados,
+ gShinyOverworldPalette_Gyarados
+ )
.levelUpLearnset = sGyaradosLevelUpLearnset,
.teachableLearnset = sGyaradosTeachableLearnset,
.formSpeciesIdTable = sGyaradosFormSpeciesIdTable,
@@ -13647,8 +15244,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Lapras,
.iconPalIndex = 2,
FOOTPRINT(Lapras)
+ OVERWORLD(
+ sPicTable_Lapras,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SLITHER,
+ gOverworldPalette_Lapras,
+ gShinyOverworldPalette_Lapras
+ )
.levelUpLearnset = sLaprasLevelUpLearnset,
.teachableLearnset = sLaprasTeachableLearnset,
+ .eggMoveLearnset = sLaprasEggMoveLearnset,
.formSpeciesIdTable = sLaprasFormSpeciesIdTable,
.formChangeTable = sLaprasFormChangeTable,
},
@@ -13707,6 +15313,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.isGigantamax = TRUE,
.levelUpLearnset = sLaprasLevelUpLearnset,
.teachableLearnset = sLaprasTeachableLearnset,
+ .eggMoveLearnset = sLaprasEggMoveLearnset,
.formSpeciesIdTable = sLaprasFormSpeciesIdTable,
.formChangeTable = sLaprasFormChangeTable,
},
@@ -13764,6 +15371,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Ditto,
.iconPalIndex = 2,
FOOTPRINT(Ditto)
+ OVERWORLD(
+ sPicTable_Ditto,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SLITHER,
+ gOverworldPalette_Ditto,
+ gShinyOverworldPalette_Ditto
+ )
.tmIlliterate = TRUE,
.levelUpLearnset = sDittoLevelUpLearnset,
.teachableLearnset = sDittoTeachableLearnset,
@@ -13823,8 +15438,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Eevee,
.iconPalIndex = 2,
FOOTPRINT(Eevee)
+ OVERWORLD(
+ sPicTable_Eevee,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Eevee,
+ gShinyOverworldPalette_Eevee
+ )
.levelUpLearnset = sEeveeLevelUpLearnset,
.teachableLearnset = sEeveeTeachableLearnset,
+ .eggMoveLearnset = sEeveeEggMoveLearnset,
.formSpeciesIdTable = sEeveeFormSpeciesIdTable,
.formChangeTable = sEeveeFormChangeTable,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_THUNDER_STONE, SPECIES_JOLTEON},
@@ -13891,6 +15515,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.isGigantamax = TRUE,
.levelUpLearnset = sEeveeLevelUpLearnset,
.teachableLearnset = sEeveeTeachableLearnset,
+ .eggMoveLearnset = sEeveeEggMoveLearnset,
.formSpeciesIdTable = sEeveeFormSpeciesIdTable,
.formChangeTable = sEeveeFormChangeTable,
},
@@ -13952,6 +15577,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.allPerfectIVs = TRUE,
.levelUpLearnset = sEeveeLevelUpLearnset,
.teachableLearnset = sEeveeTeachableLearnset,
+ .eggMoveLearnset = sEeveeEggMoveLearnset,
.formSpeciesIdTable = sEeveeFormSpeciesIdTable,
},
@@ -14003,6 +15629,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Vaporeon,
.iconPalIndex = 0,
FOOTPRINT(Vaporeon)
+ OVERWORLD(
+ sPicTable_Vaporeon,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Vaporeon,
+ gShinyOverworldPalette_Vaporeon
+ )
.levelUpLearnset = sVaporeonLevelUpLearnset,
.teachableLearnset = sVaporeonTeachableLearnset,
},
@@ -14055,6 +15689,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Jolteon,
.iconPalIndex = 2,
FOOTPRINT(Jolteon)
+ OVERWORLD(
+ sPicTable_Jolteon,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Jolteon,
+ gShinyOverworldPalette_Jolteon
+ )
.levelUpLearnset = sJolteonLevelUpLearnset,
.teachableLearnset = sJolteonTeachableLearnset,
},
@@ -14107,6 +15749,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Flareon,
.iconPalIndex = 3,
FOOTPRINT(Flareon)
+ OVERWORLD(
+ sPicTable_Flareon,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Flareon,
+ gShinyOverworldPalette_Flareon
+ )
.levelUpLearnset = sFlareonLevelUpLearnset,
.teachableLearnset = sFlareonTeachableLearnset,
},
@@ -14160,6 +15810,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Espeon,
.iconPalIndex = 2,
FOOTPRINT(Espeon)
+ OVERWORLD(
+ sPicTable_Espeon,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Espeon,
+ gShinyOverworldPalette_Espeon
+ )
.levelUpLearnset = sEspeonLevelUpLearnset,
.teachableLearnset = sEspeonTeachableLearnset,
},
@@ -14212,6 +15870,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Umbreon,
.iconPalIndex = 0,
FOOTPRINT(Umbreon)
+ OVERWORLD(
+ sPicTable_Umbreon,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Umbreon,
+ gShinyOverworldPalette_Umbreon
+ )
.levelUpLearnset = sUmbreonLevelUpLearnset,
.teachableLearnset = sUmbreonTeachableLearnset,
},
@@ -14266,6 +15932,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Leafeon,
.iconPalIndex = 1,
FOOTPRINT(Leafeon)
+ OVERWORLD(
+ sPicTable_Leafeon,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Leafeon,
+ gShinyOverworldPalette_Leafeon
+ )
.levelUpLearnset = sLeafeonLevelUpLearnset,
.teachableLearnset = sLeafeonTeachableLearnset,
},
@@ -14318,6 +15992,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Glaceon,
.iconPalIndex = 0,
FOOTPRINT(Glaceon)
+ OVERWORLD(
+ sPicTable_Glaceon,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Glaceon,
+ gShinyOverworldPalette_Glaceon
+ )
.levelUpLearnset = sGlaceonLevelUpLearnset,
.teachableLearnset = sGlaceonTeachableLearnset,
},
@@ -14373,6 +16055,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Sylveon,
.iconPalIndex = 0,
FOOTPRINT(Sylveon)
+ OVERWORLD(
+ sPicTable_Sylveon,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Sylveon,
+ gShinyOverworldPalette_Sylveon
+ )
.levelUpLearnset = sSylveonLevelUpLearnset,
.teachableLearnset = sSylveonTeachableLearnset,
},
@@ -14432,6 +16122,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Porygon,
.iconPalIndex = 0,
FOOTPRINT(Porygon)
+ OVERWORLD(
+ sPicTable_Porygon,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Porygon,
+ gShinyOverworldPalette_Porygon
+ )
.levelUpLearnset = sPorygonLevelUpLearnset,
.teachableLearnset = sPorygonTeachableLearnset,
.evolutions = EVOLUTION({EVO_TRADE_ITEM, ITEM_UPGRADE, SPECIES_PORYGON2},
@@ -14492,6 +16190,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Porygon2,
.iconPalIndex = 0,
FOOTPRINT(Porygon2)
+ OVERWORLD(
+ sPicTable_Porygon2,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Porygon2,
+ gShinyOverworldPalette_Porygon2
+ )
.levelUpLearnset = sPorygon2LevelUpLearnset,
.teachableLearnset = sPorygon2TeachableLearnset,
.evolutions = EVOLUTION({EVO_TRADE_ITEM, ITEM_DUBIOUS_DISC, SPECIES_PORYGON_Z},
@@ -14554,6 +16260,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_PorygonZ,
.iconPalIndex = 0,
FOOTPRINT(PorygonZ)
+ OVERWORLD(
+ sPicTable_PorygonZ,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_PorygonZ,
+ gShinyOverworldPalette_PorygonZ
+ )
.levelUpLearnset = sPorygonZLevelUpLearnset,
.teachableLearnset = sPorygonZTeachableLearnset,
},
@@ -14616,8 +16330,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Omanyte,
.iconPalIndex = 0,
FOOTPRINT(Omanyte)
+ OVERWORLD(
+ sPicTable_Omanyte,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SPOT,
+ gOverworldPalette_Omanyte,
+ gShinyOverworldPalette_Omanyte
+ )
.levelUpLearnset = sOmanyteLevelUpLearnset,
.teachableLearnset = sOmanyteTeachableLearnset,
+ .eggMoveLearnset = sOmanyteEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 40, SPECIES_OMASTAR}),
},
@@ -14669,6 +16392,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Omastar,
.iconPalIndex = 0,
FOOTPRINT(Omastar)
+ OVERWORLD(
+ sPicTable_Omastar,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Omastar,
+ gShinyOverworldPalette_Omastar
+ )
.levelUpLearnset = sOmastarLevelUpLearnset,
.teachableLearnset = sOmastarTeachableLearnset,
},
@@ -14729,8 +16460,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Kabuto,
.iconPalIndex = 2,
FOOTPRINT(Kabuto)
+ OVERWORLD(
+ sPicTable_Kabuto,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_BUG,
+ gOverworldPalette_Kabuto,
+ gShinyOverworldPalette_Kabuto
+ )
.levelUpLearnset = sKabutoLevelUpLearnset,
.teachableLearnset = sKabutoTeachableLearnset,
+ .eggMoveLearnset = sKabutoEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 40, SPECIES_KABUTOPS}),
},
@@ -14788,6 +16528,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Kabutops,
.iconPalIndex = 2,
FOOTPRINT(Kabutops)
+ OVERWORLD(
+ sPicTable_Kabutops,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Kabutops,
+ gShinyOverworldPalette_Kabutops
+ )
.levelUpLearnset = sKabutopsLevelUpLearnset,
.teachableLearnset = sKabutopsTeachableLearnset,
},
@@ -14843,8 +16591,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Aerodactyl,
.iconPalIndex = 2,
FOOTPRINT(Aerodactyl)
+ OVERWORLD(
+ sPicTable_Aerodactyl,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Aerodactyl,
+ gShinyOverworldPalette_Aerodactyl
+ )
.levelUpLearnset = sAerodactylLevelUpLearnset,
.teachableLearnset = sAerodactylTeachableLearnset,
+ .eggMoveLearnset = sAerodactylEggMoveLearnset,
.formSpeciesIdTable = sAerodactylFormSpeciesIdTable,
.formChangeTable = sAerodactylFormChangeTable,
},
@@ -14901,6 +16658,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.isMegaEvolution = TRUE,
.levelUpLearnset = sAerodactylLevelUpLearnset,
.teachableLearnset = sAerodactylTeachableLearnset,
+ .eggMoveLearnset = sAerodactylEggMoveLearnset,
.formSpeciesIdTable = sAerodactylFormSpeciesIdTable,
.formChangeTable = sAerodactylFormChangeTable,
},
@@ -14959,8 +16717,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Munchlax,
.iconPalIndex = 3,
FOOTPRINT(Munchlax)
+ OVERWORLD(
+ sPicTable_Munchlax,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Munchlax,
+ gShinyOverworldPalette_Munchlax
+ )
.levelUpLearnset = sMunchlaxLevelUpLearnset,
.teachableLearnset = sMunchlaxTeachableLearnset,
+ .eggMoveLearnset = sMunchlaxEggMoveLearnset,
.evolutions = EVOLUTION({EVO_FRIENDSHIP, 0, SPECIES_SNORLAX}),
},
#endif //P_GEN_4_CROSS_EVOS
@@ -15015,8 +16782,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Snorlax,
.iconPalIndex = 3,
FOOTPRINT(Snorlax)
+ OVERWORLD(
+ sPicTable_Snorlax,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Snorlax,
+ gShinyOverworldPalette_Snorlax
+ )
.levelUpLearnset = sSnorlaxLevelUpLearnset,
.teachableLearnset = sSnorlaxTeachableLearnset,
+ .eggMoveLearnset = sSnorlaxEggMoveLearnset,
.formSpeciesIdTable = sSnorlaxFormSpeciesIdTable,
.formChangeTable = sSnorlaxFormChangeTable,
},
@@ -15075,6 +16851,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.isGigantamax = TRUE,
.levelUpLearnset = sSnorlaxLevelUpLearnset,
.teachableLearnset = sSnorlaxTeachableLearnset,
+ .eggMoveLearnset = sSnorlaxEggMoveLearnset,
.formSpeciesIdTable = sSnorlaxFormSpeciesIdTable,
.formChangeTable = sSnorlaxFormChangeTable,
},
@@ -15136,6 +16913,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Articuno,
.iconPalIndex = 2,
FOOTPRINT(Articuno)
+ OVERWORLD(
+ sPicTable_Articuno,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Articuno,
+ gShinyOverworldPalette_Articuno
+ )
.isLegendary = TRUE,
.levelUpLearnset = sArticunoLevelUpLearnset,
.teachableLearnset = sArticunoTeachableLearnset,
@@ -15192,6 +16977,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_ArticunoGalarian,
.iconPalIndex = 2,
FOOTPRINT(Articuno)
+ OVERWORLD(
+ sPicTable_ArticunoGalarian,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_ArticunoGalarian,
+ gShinyOverworldPalette_ArticunoGalarian
+ )
.isLegendary = TRUE,
.isGalarianForm = TRUE,
.levelUpLearnset = sArticunoGalarianLevelUpLearnset,
@@ -15261,6 +17054,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Zapdos,
.iconPalIndex = 0,
FOOTPRINT(Zapdos)
+ OVERWORLD(
+ sPicTable_Zapdos,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Zapdos,
+ gShinyOverworldPalette_Zapdos
+ )
.isLegendary = TRUE,
.levelUpLearnset = sZapdosLevelUpLearnset,
.teachableLearnset = sZapdosTeachableLearnset,
@@ -15316,6 +17117,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_ZapdosGalarian,
.iconPalIndex = 0,
FOOTPRINT(Zapdos)
+ OVERWORLD(
+ sPicTable_ZapdosGalarian,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_ZapdosGalarian,
+ gShinyOverworldPalette_ZapdosGalarian
+ )
.isLegendary = TRUE,
.isGalarianForm = TRUE,
.levelUpLearnset = sZapdosGalarianLevelUpLearnset,
@@ -15380,6 +17189,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Moltres,
.iconPalIndex = 0,
FOOTPRINT(Moltres)
+ OVERWORLD(
+ sPicTable_Moltres,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Moltres,
+ gShinyOverworldPalette_Moltres
+ )
.isLegendary = TRUE,
.levelUpLearnset = sMoltresLevelUpLearnset,
.teachableLearnset = sMoltresTeachableLearnset,
@@ -15435,6 +17252,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_MoltresGalarian,
.iconPalIndex = 0,
FOOTPRINT(Moltres)
+ OVERWORLD(
+ sPicTable_MoltresGalarian,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_MoltresGalarian,
+ gShinyOverworldPalette_MoltresGalarian
+ )
.isLegendary = TRUE,
.isGalarianForm = TRUE,
.levelUpLearnset = sMoltresGalarianLevelUpLearnset,
@@ -15494,8 +17319,17 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Dratini,
.iconPalIndex = 0,
FOOTPRINT(Dratini)
+ OVERWORLD(
+ sPicTable_Dratini,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SLITHER,
+ gOverworldPalette_Dratini,
+ gShinyOverworldPalette_Dratini
+ )
.levelUpLearnset = sDratiniLevelUpLearnset,
.teachableLearnset = sDratiniTeachableLearnset,
+ .eggMoveLearnset = sDratiniEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_DRAGONAIR}),
},
@@ -15548,6 +17382,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Dragonair,
.iconPalIndex = 0,
FOOTPRINT(Dragonair)
+ OVERWORLD(
+ sPicTable_Dragonair,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SLITHER,
+ gOverworldPalette_Dragonair,
+ gShinyOverworldPalette_Dragonair
+ )
.levelUpLearnset = sDragonairLevelUpLearnset,
.teachableLearnset = sDragonairTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 55, SPECIES_DRAGONITE}),
@@ -15608,6 +17450,14 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Dragonite,
.iconPalIndex = 2,
FOOTPRINT(Dragonite)
+ OVERWORLD(
+ sPicTable_Dragonite,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Dragonite,
+ gShinyOverworldPalette_Dragonite
+ )
.levelUpLearnset = sDragoniteLevelUpLearnset,
.teachableLearnset = sDragoniteTeachableLearnset,
},
@@ -15668,7 +17518,16 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Mewtwo,
.iconPalIndex = 2,
FOOTPRINT(Mewtwo)
+ OVERWORLD(
+ sPicTable_Mewtwo,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Mewtwo,
+ gShinyOverworldPalette_Mewtwo
+ )
.isLegendary = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sMewtwoLevelUpLearnset,
.teachableLearnset = sMewtwoTeachableLearnset,
.formSpeciesIdTable = sMewtwoFormSpeciesIdTable,
@@ -15726,6 +17585,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
FOOTPRINT(Mewtwo)
.isLegendary = TRUE,
.isMegaEvolution = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sMewtwoLevelUpLearnset,
.teachableLearnset = sMewtwoTeachableLearnset,
.formSpeciesIdTable = sMewtwoFormSpeciesIdTable,
@@ -15783,6 +17643,7 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
FOOTPRINT(Mewtwo)
.isLegendary = TRUE,
.isMegaEvolution = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sMewtwoLevelUpLearnset,
.teachableLearnset = sMewtwoTeachableLearnset,
.formSpeciesIdTable = sMewtwoFormSpeciesIdTable,
@@ -15849,7 +17710,16 @@ const struct SpeciesInfo gSpeciesInfoGen1[] =
.iconSprite = gMonIcon_Mew,
.iconPalIndex = 0,
FOOTPRINT(Mew)
+ OVERWORLD(
+ sPicTable_Mew,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Mew,
+ gShinyOverworldPalette_Mew
+ )
.isMythical = TRUE,
+ .isFrontierBanned = TRUE,
.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 ba27e61c1215..d749cc9b907b 100644
--- a/src/data/pokemon/species_info/gen_2_families.h
+++ b/src/data/pokemon/species_info/gen_2_families.h
@@ -52,8 +52,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Chikorita,
.iconPalIndex = 1,
FOOTPRINT(Chikorita)
+ OVERWORLD(
+ sPicTable_Chikorita,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Chikorita,
+ gShinyOverworldPalette_Chikorita
+ )
.levelUpLearnset = sChikoritaLevelUpLearnset,
.teachableLearnset = sChikoritaTeachableLearnset,
+ .eggMoveLearnset = sChikoritaEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 16, SPECIES_BAYLEEF}),
},
@@ -106,6 +115,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Bayleef,
.iconPalIndex = 1,
FOOTPRINT(Bayleef)
+ OVERWORLD(
+ sPicTable_Bayleef,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Bayleef,
+ gShinyOverworldPalette_Bayleef
+ )
.levelUpLearnset = sBayleefLevelUpLearnset,
.teachableLearnset = sBayleefTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 32, SPECIES_MEGANIUM}),
@@ -170,6 +187,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Meganium,
.iconPalIndex = 1,
FOOTPRINT(Meganium)
+ OVERWORLD(
+ sPicTable_Meganium,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Meganium,
+ gShinyOverworldPalette_Meganium
+ )
.levelUpLearnset = sMeganiumLevelUpLearnset,
.teachableLearnset = sMeganiumTeachableLearnset,
},
@@ -224,8 +249,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Cyndaquil,
.iconPalIndex = 3,
FOOTPRINT(Cyndaquil)
+ OVERWORLD(
+ sPicTable_Cyndaquil,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Cyndaquil,
+ gShinyOverworldPalette_Cyndaquil
+ )
.levelUpLearnset = sCyndaquilLevelUpLearnset,
.teachableLearnset = sCyndaquilTeachableLearnset,
+ .eggMoveLearnset = sCyndaquilEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 14, SPECIES_QUILAVA}),
},
@@ -278,6 +312,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Quilava,
.iconPalIndex = 3,
FOOTPRINT(Quilava)
+ OVERWORLD(
+ sPicTable_Quilava,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Quilava,
+ gShinyOverworldPalette_Quilava
+ )
.levelUpLearnset = sQuilavaLevelUpLearnset,
.teachableLearnset = sQuilavaTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 36, SPECIES_TYPHLOSION},
@@ -341,6 +383,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Typhlosion,
.iconPalIndex = 3,
FOOTPRINT(Typhlosion)
+ OVERWORLD(
+ sPicTable_Typhlosion,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Typhlosion,
+ gShinyOverworldPalette_Typhlosion
+ )
.levelUpLearnset = sTyphlosionLevelUpLearnset,
.teachableLearnset = sTyphlosionTeachableLearnset,
.formSpeciesIdTable = sTyphlosionFormSpeciesIdTable,
@@ -395,6 +445,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_TyphlosionHisuian,
.iconPalIndex = 1,
FOOTPRINT(Typhlosion)
+ OVERWORLD(
+ sPicTable_TyphlosionHisuian,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_TyphlosionHisuian,
+ gShinyOverworldPalette_TyphlosionHisuian
+ )
.isHisuianForm = TRUE,
.levelUpLearnset = sTyphlosionHisuianLevelUpLearnset,
.teachableLearnset = sTyphlosionHisuianTeachableLearnset,
@@ -452,8 +510,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Totodile,
.iconPalIndex = 0,
FOOTPRINT(Totodile)
+ OVERWORLD(
+ sPicTable_Totodile,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Totodile,
+ gShinyOverworldPalette_Totodile
+ )
.levelUpLearnset = sTotodileLevelUpLearnset,
.teachableLearnset = sTotodileTeachableLearnset,
+ .eggMoveLearnset = sTotodileEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 18, SPECIES_CROCONAW}),
},
@@ -507,6 +574,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Croconaw,
.iconPalIndex = 0,
FOOTPRINT(Croconaw)
+ OVERWORLD(
+ sPicTable_Croconaw,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Croconaw,
+ gShinyOverworldPalette_Croconaw
+ )
.levelUpLearnset = sCroconawLevelUpLearnset,
.teachableLearnset = sCroconawTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_FERALIGATR}),
@@ -568,6 +643,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Feraligatr,
.iconPalIndex = 0,
FOOTPRINT(Feraligatr)
+ OVERWORLD(
+ sPicTable_Feraligatr,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Feraligatr,
+ gShinyOverworldPalette_Feraligatr
+ )
.levelUpLearnset = sFeraligatrLevelUpLearnset,
.teachableLearnset = sFeraligatrTeachableLearnset,
},
@@ -622,8 +705,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Sentret,
.iconPalIndex = 2,
FOOTPRINT(Sentret)
+ OVERWORLD(
+ sPicTable_Sentret,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Sentret,
+ gShinyOverworldPalette_Sentret
+ )
.levelUpLearnset = sSentretLevelUpLearnset,
.teachableLearnset = sSentretTeachableLearnset,
+ .eggMoveLearnset = sSentretEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 15, SPECIES_FURRET}),
},
@@ -675,6 +767,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Furret,
.iconPalIndex = 2,
FOOTPRINT(Furret)
+ OVERWORLD(
+ sPicTable_Furret,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Furret,
+ gShinyOverworldPalette_Furret
+ )
.levelUpLearnset = sFurretLevelUpLearnset,
.teachableLearnset = sFurretTeachableLearnset,
},
@@ -729,8 +829,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Hoothoot,
.iconPalIndex = 2,
FOOTPRINT(Hoothoot)
+ OVERWORLD(
+ sPicTable_Hoothoot,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Hoothoot,
+ gShinyOverworldPalette_Hoothoot
+ )
.levelUpLearnset = sHoothootLevelUpLearnset,
.teachableLearnset = sHoothootTeachableLearnset,
+ .eggMoveLearnset = sHoothootEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 20, SPECIES_NOCTOWL}),
},
@@ -788,6 +897,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Noctowl,
.iconPalIndex = 2,
FOOTPRINT(Noctowl)
+ OVERWORLD(
+ sPicTable_Noctowl,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Noctowl,
+ gShinyOverworldPalette_Noctowl
+ )
.levelUpLearnset = sNoctowlLevelUpLearnset,
.teachableLearnset = sNoctowlTeachableLearnset,
},
@@ -846,8 +963,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Ledyba,
.iconPalIndex = 0,
FOOTPRINT(Ledyba)
+ OVERWORLD(
+ sPicTable_Ledyba,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_BUG,
+ gOverworldPalette_Ledyba,
+ gShinyOverworldPalette_Ledyba
+ )
.levelUpLearnset = sLedybaLevelUpLearnset,
.teachableLearnset = sLedybaTeachableLearnset,
+ .eggMoveLearnset = sLedybaEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 25, SPECIES_LEDIAN}),
},
@@ -904,6 +1030,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Ledian,
.iconPalIndex = 0,
FOOTPRINT(Ledian)
+ OVERWORLD(
+ sPicTable_Ledian,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Ledian,
+ gShinyOverworldPalette_Ledian
+ )
.levelUpLearnset = sLedianLevelUpLearnset,
.teachableLearnset = sLedianTeachableLearnset,
},
@@ -958,8 +1092,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Spinarak,
.iconPalIndex = 1,
FOOTPRINT(Spinarak)
+ OVERWORLD(
+ sPicTable_Spinarak,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_BUG,
+ gOverworldPalette_Spinarak,
+ gShinyOverworldPalette_Spinarak
+ )
.levelUpLearnset = sSpinarakLevelUpLearnset,
.teachableLearnset = sSpinarakTeachableLearnset,
+ .eggMoveLearnset = sSpinarakEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 22, SPECIES_ARIADOS}),
},
@@ -1017,6 +1160,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Ariados,
.iconPalIndex = 0,
FOOTPRINT(Ariados)
+ OVERWORLD(
+ sPicTable_Ariados,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_BUG,
+ gOverworldPalette_Ariados,
+ gShinyOverworldPalette_Ariados
+ )
.levelUpLearnset = sAriadosLevelUpLearnset,
.teachableLearnset = sAriadosTeachableLearnset,
},
@@ -1072,8 +1223,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Chinchou,
.iconPalIndex = 2,
FOOTPRINT(Chinchou)
+ OVERWORLD(
+ sPicTable_Chinchou,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SPOT,
+ gOverworldPalette_Chinchou,
+ gShinyOverworldPalette_Chinchou
+ )
.levelUpLearnset = sChinchouLevelUpLearnset,
.teachableLearnset = sChinchouTeachableLearnset,
+ .eggMoveLearnset = sChinchouEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 27, SPECIES_LANTURN}),
},
@@ -1126,6 +1286,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Lanturn,
.iconPalIndex = 0,
FOOTPRINT(Lanturn)
+ OVERWORLD(
+ sPicTable_Lanturn,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SPOT,
+ gOverworldPalette_Lanturn,
+ gShinyOverworldPalette_Lanturn
+ )
.levelUpLearnset = sLanturnLevelUpLearnset,
.teachableLearnset = sLanturnTeachableLearnset,
},
@@ -1182,8 +1350,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Togepi,
.iconPalIndex = 0,
FOOTPRINT(Togepi)
+ OVERWORLD(
+ sPicTable_Togepi,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Togepi,
+ gShinyOverworldPalette_Togepi
+ )
.levelUpLearnset = sTogepiLevelUpLearnset,
.teachableLearnset = sTogepiTeachableLearnset,
+ .eggMoveLearnset = sTogepiEggMoveLearnset,
.evolutions = EVOLUTION({EVO_FRIENDSHIP, 0, SPECIES_TOGETIC}),
},
@@ -1235,6 +1412,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Togetic,
.iconPalIndex = 0,
FOOTPRINT(Togetic)
+ OVERWORLD(
+ sPicTable_Togetic,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Togetic,
+ gShinyOverworldPalette_Togetic
+ )
.levelUpLearnset = sTogeticLevelUpLearnset,
.teachableLearnset = sTogeticTeachableLearnset,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_SHINY_STONE, SPECIES_TOGEKISS}),
@@ -1298,6 +1483,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Togekiss,
.iconPalIndex = 2,
FOOTPRINT(Togekiss)
+ OVERWORLD(
+ sPicTable_Togekiss,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Togekiss,
+ gShinyOverworldPalette_Togekiss
+ )
.levelUpLearnset = sTogekissLevelUpLearnset,
.teachableLearnset = sTogekissTeachableLearnset,
},
@@ -1354,8 +1547,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Natu,
.iconPalIndex = 1,
FOOTPRINT(Natu)
+ OVERWORLD(
+ sPicTable_Natu,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Natu,
+ gShinyOverworldPalette_Natu
+ )
.levelUpLearnset = sNatuLevelUpLearnset,
.teachableLearnset = sNatuTeachableLearnset,
+ .eggMoveLearnset = sNatuEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 25, SPECIES_XATU}),
},
@@ -1410,6 +1612,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Xatu,
.iconPalIndex = 1,
FOOTPRINT(Xatu)
+ OVERWORLD(
+ sPicTable_Xatu,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Xatu,
+ gShinyOverworldPalette_Xatu
+ )
.levelUpLearnset = sXatuLevelUpLearnset,
.teachableLearnset = sXatuTeachableLearnset,
},
@@ -1465,8 +1675,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Mareep,
.iconPalIndex = 0,
FOOTPRINT(Mareep)
+ OVERWORLD(
+ sPicTable_Mareep,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Mareep,
+ gShinyOverworldPalette_Mareep
+ )
.levelUpLearnset = sMareepLevelUpLearnset,
.teachableLearnset = sMareepTeachableLearnset,
+ .eggMoveLearnset = sMareepEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 15, SPECIES_FLAAFFY}),
},
@@ -1518,6 +1737,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Flaaffy,
.iconPalIndex = 0,
FOOTPRINT(Flaaffy)
+ OVERWORLD(
+ sPicTable_Flaaffy,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Flaaffy,
+ gShinyOverworldPalette_Flaaffy
+ )
.levelUpLearnset = sFlaaffyLevelUpLearnset,
.teachableLearnset = sFlaaffyTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_AMPHAROS}),
@@ -1582,6 +1809,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Ampharos,
.iconPalIndex = 0,
FOOTPRINT(Ampharos)
+ OVERWORLD(
+ sPicTable_Ampharos,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Ampharos,
+ gShinyOverworldPalette_Ampharos
+ )
.levelUpLearnset = sAmpharosLevelUpLearnset,
.teachableLearnset = sAmpharosTeachableLearnset,
.formSpeciesIdTable = sAmpharosFormSpeciesIdTable,
@@ -1700,8 +1935,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Azurill,
.iconPalIndex = 0,
FOOTPRINT(Azurill)
+ OVERWORLD(
+ sPicTable_Azurill,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Azurill,
+ gShinyOverworldPalette_Azurill
+ )
.levelUpLearnset = sAzurillLevelUpLearnset,
.teachableLearnset = sAzurillTeachableLearnset,
+ .eggMoveLearnset = sAzurillEggMoveLearnset,
.evolutions = EVOLUTION({EVO_FRIENDSHIP, 0, SPECIES_MARILL}),
},
#endif //P_GEN_3_CROSS_EVOS
@@ -1758,8 +2002,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Marill,
.iconPalIndex = 0,
FOOTPRINT(Marill)
+ OVERWORLD(
+ sPicTable_Marill,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Marill,
+ gShinyOverworldPalette_Marill
+ )
.levelUpLearnset = sMarillLevelUpLearnset,
.teachableLearnset = sMarillTeachableLearnset,
+ .eggMoveLearnset = sMarillEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 18, SPECIES_AZUMARILL}),
},
@@ -1823,6 +2076,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Azumarill,
.iconPalIndex = 0,
FOOTPRINT(Azumarill)
+ OVERWORLD(
+ sPicTable_Azumarill,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Azumarill,
+ gShinyOverworldPalette_Azumarill
+ )
.levelUpLearnset = sAzumarillLevelUpLearnset,
.teachableLearnset = sAzumarillTeachableLearnset,
},
@@ -1878,8 +2139,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Bonsly,
.iconPalIndex = 1,
FOOTPRINT(Bonsly)
+ OVERWORLD(
+ sPicTable_Bonsly,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Bonsly,
+ gShinyOverworldPalette_Bonsly
+ )
.levelUpLearnset = sBonslyLevelUpLearnset,
.teachableLearnset = sBonslyTeachableLearnset,
+ .eggMoveLearnset = sBonslyEggMoveLearnset,
.evolutions = EVOLUTION({EVO_MOVE, MOVE_MIMIC, SPECIES_SUDOWOODO}),
},
#endif //P_GEN_4_CROSS_EVOS
@@ -1936,8 +2206,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Sudowoodo,
.iconPalIndex = 1,
FOOTPRINT(Sudowoodo)
+ OVERWORLD(
+ sPicTable_Sudowoodo,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Sudowoodo,
+ gShinyOverworldPalette_Sudowoodo
+ )
.levelUpLearnset = sSudowoodoLevelUpLearnset,
.teachableLearnset = sSudowoodoTeachableLearnset,
+ .eggMoveLearnset = sSudowoodoEggMoveLearnset,
},
#endif //P_FAMILY_SUDOWOODO
@@ -1995,8 +2274,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Hoppip,
.iconPalIndex = 1,
FOOTPRINT(Hoppip)
+ OVERWORLD(
+ sPicTable_Hoppip,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Hoppip,
+ gShinyOverworldPalette_Hoppip
+ )
.levelUpLearnset = sHoppipLevelUpLearnset,
.teachableLearnset = sHoppipTeachableLearnset,
+ .eggMoveLearnset = sHoppipEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 18, SPECIES_SKIPLOOM}),
},
@@ -2053,6 +2341,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Skiploom,
.iconPalIndex = 1,
FOOTPRINT(Skiploom)
+ OVERWORLD(
+ sPicTable_Skiploom,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Skiploom,
+ gShinyOverworldPalette_Skiploom
+ )
.levelUpLearnset = sSkiploomLevelUpLearnset,
.teachableLearnset = sSkiploomTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 27, SPECIES_JUMPLUFF}),
@@ -2119,6 +2415,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Jumpluff,
.iconPalIndex = 2,
FOOTPRINT(Jumpluff)
+ OVERWORLD(
+ sPicTable_Jumpluff,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Jumpluff,
+ gShinyOverworldPalette_Jumpluff
+ )
.levelUpLearnset = sJumpluffLevelUpLearnset,
.teachableLearnset = sJumpluffTeachableLearnset,
},
@@ -2177,8 +2481,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Aipom,
.iconPalIndex = 2,
FOOTPRINT(Aipom)
+ OVERWORLD(
+ sPicTable_Aipom,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Aipom,
+ gShinyOverworldPalette_Aipom
+ )
.levelUpLearnset = sAipomLevelUpLearnset,
.teachableLearnset = sAipomTeachableLearnset,
+ .eggMoveLearnset = sAipomEggMoveLearnset,
.evolutions = EVOLUTION({EVO_MOVE, MOVE_DOUBLE_HIT, SPECIES_AMBIPOM}),
},
@@ -2235,6 +2548,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Ambipom,
.iconPalIndex = 2,
FOOTPRINT(Ambipom)
+ OVERWORLD(
+ sPicTable_Ambipom,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Ambipom,
+ gShinyOverworldPalette_Ambipom
+ )
.levelUpLearnset = sAmbipomLevelUpLearnset,
.teachableLearnset = sAmbipomTeachableLearnset,
},
@@ -2294,8 +2615,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Sunkern,
.iconPalIndex = 1,
FOOTPRINT(Sunkern)
+ OVERWORLD(
+ sPicTable_Sunkern,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SPOT,
+ gOverworldPalette_Sunkern,
+ gShinyOverworldPalette_Sunkern
+ )
.levelUpLearnset = sSunkernLevelUpLearnset,
.teachableLearnset = sSunkernTeachableLearnset,
+ .eggMoveLearnset = sSunkernEggMoveLearnset,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_SUN_STONE, SPECIES_SUNFLORA}),
},
@@ -2351,6 +2681,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Sunflora,
.iconPalIndex = 1,
FOOTPRINT(Sunflora)
+ OVERWORLD(
+ sPicTable_Sunflora,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Sunflora,
+ gShinyOverworldPalette_Sunflora
+ )
.levelUpLearnset = sSunfloraLevelUpLearnset,
.teachableLearnset = sSunfloraTeachableLearnset,
},
@@ -2407,8 +2745,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Yanma,
.iconPalIndex = 1,
FOOTPRINT(Yanma)
+ OVERWORLD(
+ sPicTable_Yanma,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Yanma,
+ gShinyOverworldPalette_Yanma
+ )
.levelUpLearnset = sYanmaLevelUpLearnset,
.teachableLearnset = sYanmaTeachableLearnset,
+ .eggMoveLearnset = sYanmaEggMoveLearnset,
.evolutions = EVOLUTION({EVO_MOVE, MOVE_ANCIENT_POWER, SPECIES_YANMEGA}),
},
@@ -2463,6 +2810,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Yanmega,
.iconPalIndex = 1,
FOOTPRINT(Yanmega)
+ OVERWORLD(
+ sPicTable_Yanmega,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Yanmega,
+ gShinyOverworldPalette_Yanmega
+ )
.levelUpLearnset = sYanmegaLevelUpLearnset,
.teachableLearnset = sYanmegaTeachableLearnset,
},
@@ -2522,8 +2877,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Wooper,
.iconPalIndex = 0,
FOOTPRINT(Wooper)
+ OVERWORLD(
+ sPicTable_Wooper,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Wooper,
+ gShinyOverworldPalette_Wooper
+ )
.levelUpLearnset = sWooperLevelUpLearnset,
.teachableLearnset = sWooperTeachableLearnset,
+ .eggMoveLearnset = sWooperEggMoveLearnset,
.formSpeciesIdTable = sWooperFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_LEVEL, 20, SPECIES_QUAGSIRE}),
},
@@ -2580,6 +2944,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Quagsire,
.iconPalIndex = 0,
FOOTPRINT(Quagsire)
+ OVERWORLD(
+ sPicTable_Quagsire,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Quagsire,
+ gShinyOverworldPalette_Quagsire
+ )
.levelUpLearnset = sQuagsireLevelUpLearnset,
.teachableLearnset = sQuagsireTeachableLearnset,
},
@@ -2636,6 +3008,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.isPaldeanForm = TRUE,
.levelUpLearnset = sWooperPaldeanLevelUpLearnset,
.teachableLearnset = sWooperPaldeanTeachableLearnset,
+ .eggMoveLearnset = sWooperPaldeanEggMoveLearnset,
.formSpeciesIdTable = sWooperFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_LEVEL, 20, SPECIES_CLODSIRE}),
},
@@ -2752,8 +3125,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Murkrow,
.iconPalIndex = 2,
FOOTPRINT(Murkrow)
+ OVERWORLD(
+ sPicTable_Murkrow,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Murkrow,
+ gShinyOverworldPalette_Murkrow
+ )
.levelUpLearnset = sMurkrowLevelUpLearnset,
.teachableLearnset = sMurkrowTeachableLearnset,
+ .eggMoveLearnset = sMurkrowEggMoveLearnset,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_DUSK_STONE, SPECIES_HONCHKROW}),
},
@@ -2806,6 +3188,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Honchkrow,
.iconPalIndex = 2,
FOOTPRINT(Honchkrow)
+ OVERWORLD(
+ sPicTable_Honchkrow,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Honchkrow,
+ gShinyOverworldPalette_Honchkrow
+ )
.levelUpLearnset = sHonchkrowLevelUpLearnset,
.teachableLearnset = sHonchkrowTeachableLearnset,
},
@@ -2863,8 +3253,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Misdreavus,
.iconPalIndex = 0,
FOOTPRINT(Misdreavus)
+ OVERWORLD(
+ sPicTable_Misdreavus,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Misdreavus,
+ gShinyOverworldPalette_Misdreavus
+ )
.levelUpLearnset = sMisdreavusLevelUpLearnset,
.teachableLearnset = sMisdreavusTeachableLearnset,
+ .eggMoveLearnset = sMisdreavusEggMoveLearnset,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_DUSK_STONE, SPECIES_MISMAGIUS}),
},
@@ -2919,6 +3318,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Mismagius,
.iconPalIndex = 2,
FOOTPRINT(Mismagius)
+ OVERWORLD(
+ sPicTable_Mismagius,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Mismagius,
+ gShinyOverworldPalette_Mismagius
+ )
.levelUpLearnset = sMismagiusLevelUpLearnset,
.teachableLearnset = sMismagiusTeachableLearnset,
},
@@ -2973,6 +3380,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Unown ##letter, \
.iconPalIndex = 0, \
FOOTPRINT(Unown) \
+ OVERWORLD( \
+ sPicTable_Unown ##letter, \
+ SIZE_32x32, \
+ SHADOW_SIZE_M, \
+ TRACKS_NONE, \
+ gOverworldPalette_Unown, \
+ gShinyOverworldPalette_Unown, \
+ ) \
.levelUpLearnset = sUnownLevelUpLearnset, \
.teachableLearnset = sUnownTeachableLearnset, \
.tmIlliterate = TRUE, \
@@ -3060,6 +3475,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Wynaut,
.iconPalIndex = 0,
FOOTPRINT(Wynaut)
+ OVERWORLD(
+ sPicTable_Wynaut,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Wynaut,
+ gShinyOverworldPalette_Wynaut
+ )
.tmIlliterate = TRUE,
.levelUpLearnset = sWynautLevelUpLearnset,
.teachableLearnset = sWynautTeachableLearnset,
@@ -3123,6 +3546,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconPalIndexFemale = 0,
#endif
FOOTPRINT(Wobbuffet)
+ OVERWORLD(
+ sPicTable_Wobbuffet,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Wobbuffet,
+ gShinyOverworldPalette_Wobbuffet
+ )
.tmIlliterate = TRUE,
.levelUpLearnset = sWobbuffetLevelUpLearnset,
.teachableLearnset = sWobbuffetTeachableLearnset,
@@ -3182,8 +3613,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Girafarig,
.iconPalIndex = 1,
FOOTPRINT(Girafarig)
+ OVERWORLD(
+ sPicTable_Girafarig,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Girafarig,
+ gShinyOverworldPalette_Girafarig
+ )
.levelUpLearnset = sGirafarigLevelUpLearnset,
.teachableLearnset = sGirafarigTeachableLearnset,
+ .eggMoveLearnset = sGirafarigEggMoveLearnset,
.evolutions = EVOLUTION({EVO_MOVE, MOVE_TWIN_BEAM, SPECIES_FARIGIRAF}),
},
@@ -3291,8 +3731,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Pineco,
.iconPalIndex = 0,
FOOTPRINT(Pineco)
+ OVERWORLD(
+ sPicTable_Pineco,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SPOT,
+ gOverworldPalette_Pineco,
+ gShinyOverworldPalette_Pineco
+ )
.levelUpLearnset = sPinecoLevelUpLearnset,
.teachableLearnset = sPinecoTeachableLearnset,
+ .eggMoveLearnset = sPinecoEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 31, SPECIES_FORRETRESS}),
},
@@ -3344,6 +3793,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Forretress,
.iconPalIndex = 2,
FOOTPRINT(Forretress)
+ OVERWORLD(
+ sPicTable_Forretress,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SPOT,
+ gOverworldPalette_Forretress,
+ gShinyOverworldPalette_Forretress
+ )
.levelUpLearnset = sForretressLevelUpLearnset,
.teachableLearnset = sForretressTeachableLearnset,
},
@@ -3405,8 +3862,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Dunsparce,
.iconPalIndex = 0,
FOOTPRINT(Dunsparce)
+ OVERWORLD(
+ sPicTable_Dunsparce,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SPOT,
+ gOverworldPalette_Dunsparce,
+ gShinyOverworldPalette_Dunsparce
+ )
.levelUpLearnset = sDunsparceLevelUpLearnset,
.teachableLearnset = sDunsparceTeachableLearnset,
+ .eggMoveLearnset = sDunsparceEggMoveLearnset,
.evolutions = EVOLUTION({EVO_MOVE_TWO_SEGMENT, MOVE_HYPER_DRILL, SPECIES_DUDUNSPARCE_TWO_SEGMENT},
{EVO_MOVE_THREE_SEGMENT, MOVE_HYPER_DRILL, SPECIES_DUDUNSPARCE_THREE_SEGMENT}),
},
@@ -3431,7 +3897,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 = _("Dudunsprce"),
+ .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Dudunsprce", "Dudunsparce"),
.cryId = CRY_DUDUNSPARCE,
.natDexNum = NATIONAL_DEX_DUDUNSPARCE,
.categoryName = _("Land Snake"),
@@ -3484,7 +3950,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 = _("Dudunsprce"),
+ .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Dudunsprce", "Dudunsparce"),
.cryId = CRY_DUDUNSPARCE,
.natDexNum = NATIONAL_DEX_DUDUNSPARCE,
.categoryName = _("Land Snake"),
@@ -3574,8 +4040,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Gligar,
.iconPalIndex = 0,
FOOTPRINT(Gligar)
+ OVERWORLD(
+ sPicTable_Gligar,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Gligar,
+ gShinyOverworldPalette_Gligar
+ )
.levelUpLearnset = sGligarLevelUpLearnset,
.teachableLearnset = sGligarTeachableLearnset,
+ .eggMoveLearnset = sGligarEggMoveLearnset,
.evolutions = EVOLUTION({EVO_ITEM_HOLD_NIGHT, ITEM_RAZOR_FANG, SPECIES_GLISCOR},
{EVO_ITEM_NIGHT, ITEM_RAZOR_FANG, SPECIES_GLISCOR}),
},
@@ -3630,6 +4105,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Gliscor,
.iconPalIndex = 2,
FOOTPRINT(Gliscor)
+ OVERWORLD(
+ sPicTable_Gliscor,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Gliscor,
+ gShinyOverworldPalette_Gliscor
+ )
.levelUpLearnset = sGliscorLevelUpLearnset,
.teachableLearnset = sGliscorTeachableLearnset,
},
@@ -3689,8 +4172,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Snubbull,
.iconPalIndex = 0,
FOOTPRINT(Snubbull)
+ OVERWORLD(
+ sPicTable_Snubbull,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Snubbull,
+ gShinyOverworldPalette_Snubbull
+ )
.levelUpLearnset = sSnubbullLevelUpLearnset,
.teachableLearnset = sSnubbullTeachableLearnset,
+ .eggMoveLearnset = sSnubbullEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 23, SPECIES_GRANBULL}),
},
@@ -3750,6 +4242,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Granbull,
.iconPalIndex = 2,
FOOTPRINT(Granbull)
+ OVERWORLD(
+ sPicTable_Granbull,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Granbull,
+ gShinyOverworldPalette_Granbull
+ )
.levelUpLearnset = sGranbullLevelUpLearnset,
.teachableLearnset = sGranbullTeachableLearnset,
},
@@ -3815,8 +4315,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Qwilfish,
.iconPalIndex = 0,
FOOTPRINT(Qwilfish)
+ OVERWORLD(
+ sPicTable_Qwilfish,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SPOT,
+ gOverworldPalette_Qwilfish,
+ gShinyOverworldPalette_Qwilfish
+ )
.levelUpLearnset = sQwilfishLevelUpLearnset,
.teachableLearnset = sQwilfishTeachableLearnset,
+ .eggMoveLearnset = sQwilfishEggMoveLearnset,
.formSpeciesIdTable = sQwilfishFormSpeciesIdTable,
},
@@ -3871,6 +4380,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_QwilfishHisuian,
.iconPalIndex = 1,
FOOTPRINT(Qwilfish)
+ OVERWORLD(
+ sPicTable_QwilfishHisuian,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_QwilfishHisuian,
+ gShinyOverworldPalette_QwilfishHisuian
+ )
.isHisuianForm = TRUE,
.levelUpLearnset = sQwilfishHisuianLevelUpLearnset,
.teachableLearnset = sQwilfishHisuianTeachableLearnset,
@@ -3926,6 +4443,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Overqwil,
.iconPalIndex = 2,
FOOTPRINT(Overqwil)
+ OVERWORLD(
+ sPicTable_Overqwil,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Overqwil,
+ gShinyOverworldPalette_Overqwil
+ )
.levelUpLearnset = sOverqwilLevelUpLearnset,
.teachableLearnset = sOverqwilTeachableLearnset,
},
@@ -3988,8 +4513,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Shuckle,
.iconPalIndex = 1,
FOOTPRINT(Shuckle)
+ OVERWORLD(
+ sPicTable_Shuckle,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Shuckle,
+ gShinyOverworldPalette_Shuckle
+ )
.levelUpLearnset = sShuckleLevelUpLearnset,
.teachableLearnset = sShuckleTeachableLearnset,
+ .eggMoveLearnset = sShuckleEggMoveLearnset,
},
#endif //P_FAMILY_SHUCKLE
@@ -4046,8 +4580,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Heracross,
.iconPalIndex = 0,
FOOTPRINT(Heracross)
+ OVERWORLD(
+ sPicTable_Heracross,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Heracross,
+ gShinyOverworldPalette_Heracross
+ )
.levelUpLearnset = sHeracrossLevelUpLearnset,
.teachableLearnset = sHeracrossTeachableLearnset,
+ .eggMoveLearnset = sHeracrossEggMoveLearnset,
.formSpeciesIdTable = sHeracrossFormSpeciesIdTable,
.formChangeTable = sHeracrossFormChangeTable,
},
@@ -4104,6 +4647,7 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.isMegaEvolution = TRUE,
.levelUpLearnset = sHeracrossLevelUpLearnset,
.teachableLearnset = sHeracrossTeachableLearnset,
+ .eggMoveLearnset = sHeracrossEggMoveLearnset,
.formSpeciesIdTable = sHeracrossFormSpeciesIdTable,
.formChangeTable = sHeracrossFormChangeTable,
},
@@ -4165,8 +4709,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Sneasel,
.iconPalIndex = 0,
FOOTPRINT(Sneasel)
+ OVERWORLD(
+ sPicTable_Sneasel,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Sneasel,
+ gShinyOverworldPalette_Sneasel
+ )
.levelUpLearnset = sSneaselLevelUpLearnset,
.teachableLearnset = sSneaselTeachableLearnset,
+ .eggMoveLearnset = sSneaselEggMoveLearnset,
.formSpeciesIdTable = sSneaselFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_ITEM_HOLD_NIGHT, ITEM_RAZOR_CLAW, SPECIES_WEAVILE},
{EVO_ITEM_NIGHT, ITEM_RAZOR_CLAW, SPECIES_WEAVILE}),
@@ -4227,6 +4780,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Weavile,
.iconPalIndex = 0,
FOOTPRINT(Weavile)
+ OVERWORLD(
+ sPicTable_Weavile,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Weavile,
+ gShinyOverworldPalette_Weavile
+ )
.levelUpLearnset = sWeavileLevelUpLearnset,
.teachableLearnset = sWeavileTeachableLearnset,
},
@@ -4287,6 +4848,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_SneaselHisuian,
.iconPalIndex = 0,
FOOTPRINT(Sneasel)
+ OVERWORLD(
+ sPicTable_SneaselHisuian,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_SneaselHisuian,
+ gShinyOverworldPalette_SneaselHisuian
+ )
.isHisuianForm = TRUE,
.levelUpLearnset = sSneaselHisuianLevelUpLearnset,
.teachableLearnset = sSneaselHisuianTeachableLearnset,
@@ -4343,6 +4912,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Sneasler,
.iconPalIndex = 2,
FOOTPRINT(Sneasler)
+ OVERWORLD(
+ sPicTable_Sneasler,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Sneasler,
+ gShinyOverworldPalette_Sneasler
+ )
.levelUpLearnset = sSneaslerLevelUpLearnset,
.teachableLearnset = sSneaslerTeachableLearnset,
},
@@ -4404,8 +4981,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Teddiursa,
.iconPalIndex = 0,
FOOTPRINT(Teddiursa)
+ OVERWORLD(
+ sPicTable_Teddiursa,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Teddiursa,
+ gShinyOverworldPalette_Teddiursa
+ )
.levelUpLearnset = sTeddiursaLevelUpLearnset,
.teachableLearnset = sTeddiursaTeachableLearnset,
+ .eggMoveLearnset = sTeddiursaEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_URSARING}),
},
@@ -4465,6 +5051,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Ursaring,
.iconPalIndex = 2,
FOOTPRINT(Ursaring)
+ OVERWORLD(
+ sPicTable_Ursaring,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Ursaring,
+ gShinyOverworldPalette_Ursaring
+ )
.levelUpLearnset = sUrsaringLevelUpLearnset,
.teachableLearnset = sUrsaringTeachableLearnset,
.evolutions = EVOLUTION({EVO_ITEM_NIGHT, ITEM_PEAT_BLOCK, SPECIES_URSALUNA},
@@ -4519,6 +5113,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Ursaluna,
.iconPalIndex = 2,
FOOTPRINT(Ursaluna)
+ OVERWORLD(
+ sPicTable_Ursaluna,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Ursaluna,
+ gShinyOverworldPalette_Ursaluna
+ )
.levelUpLearnset = sUrsalunaLevelUpLearnset,
.teachableLearnset = sUrsalunaTeachableLearnset,
.formSpeciesIdTable = sUrsalunaFormSpeciesIdTable,
@@ -4628,8 +5230,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Slugma,
.iconPalIndex = 0,
FOOTPRINT(Slugma)
+ OVERWORLD(
+ sPicTable_Slugma,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SLITHER,
+ gOverworldPalette_Slugma,
+ gShinyOverworldPalette_Slugma
+ )
.levelUpLearnset = sSlugmaLevelUpLearnset,
.teachableLearnset = sSlugmaTeachableLearnset,
+ .eggMoveLearnset = sSlugmaEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 38, SPECIES_MAGCARGO}),
},
@@ -4688,6 +5299,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Magcargo,
.iconPalIndex = 0,
FOOTPRINT(Magcargo)
+ OVERWORLD(
+ sPicTable_Magcargo,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SLITHER,
+ gOverworldPalette_Magcargo,
+ gShinyOverworldPalette_Magcargo
+ )
.levelUpLearnset = sMagcargoLevelUpLearnset,
.teachableLearnset = sMagcargoTeachableLearnset,
},
@@ -4746,8 +5365,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Swinub,
.iconPalIndex = 2,
FOOTPRINT(Swinub)
+ OVERWORLD(
+ sPicTable_Swinub,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Swinub,
+ gShinyOverworldPalette_Swinub
+ )
.levelUpLearnset = sSwinubLevelUpLearnset,
.teachableLearnset = sSwinubTeachableLearnset,
+ .eggMoveLearnset = sSwinubEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 33, SPECIES_PILOSWINE}),
},
@@ -4808,6 +5436,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Piloswine,
.iconPalIndex = 2,
FOOTPRINT(Piloswine)
+ OVERWORLD(
+ sPicTable_Piloswine,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Piloswine,
+ gShinyOverworldPalette_Piloswine
+ )
.levelUpLearnset = sPiloswineLevelUpLearnset,
.teachableLearnset = sPiloswineTeachableLearnset,
.evolutions = EVOLUTION({EVO_MOVE, MOVE_ANCIENT_POWER, SPECIES_MAMOSWINE}),
@@ -4870,6 +5506,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Mamoswine,
.iconPalIndex = 2,
FOOTPRINT(Mamoswine)
+ OVERWORLD(
+ sPicTable_Mamoswine,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Mamoswine,
+ gShinyOverworldPalette_Mamoswine
+ )
.levelUpLearnset = sMamoswineLevelUpLearnset,
.teachableLearnset = sMamoswineTeachableLearnset,
},
@@ -4937,8 +5581,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Corsola,
.iconPalIndex = 0,
FOOTPRINT(Corsola)
+ OVERWORLD(
+ sPicTable_Corsola,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Corsola,
+ gShinyOverworldPalette_Corsola
+ )
.levelUpLearnset = sCorsolaLevelUpLearnset,
.teachableLearnset = sCorsolaTeachableLearnset,
+ .eggMoveLearnset = sCorsolaEggMoveLearnset,
.formSpeciesIdTable = sCorsolaFormSpeciesIdTable,
},
@@ -4991,9 +5644,18 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_CorsolaGalarian,
.iconPalIndex = 0,
FOOTPRINT(Corsola)
+ OVERWORLD(
+ sPicTable_CorsolaGalarian,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_CorsolaGalarian,
+ gShinyOverworldPalette_CorsolaGalarian
+ )
.isGalarianForm = TRUE,
.levelUpLearnset = sCorsolaGalarianLevelUpLearnset,
.teachableLearnset = sCorsolaGalarianTeachableLearnset,
+ .eggMoveLearnset = sCorsolaGalarianEggMoveLearnset,
.formSpeciesIdTable = sCorsolaFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_LEVEL, 38, SPECIES_CURSOLA}),
},
@@ -5046,6 +5708,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Cursola,
.iconPalIndex = 0,
FOOTPRINT(Cursola)
+ OVERWORLD(
+ sPicTable_Cursola,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Cursola,
+ gShinyOverworldPalette_Cursola
+ )
.levelUpLearnset = sCursolaLevelUpLearnset,
.teachableLearnset = sCursolaTeachableLearnset,
},
@@ -5105,8 +5775,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Remoraid,
.iconPalIndex = 0,
FOOTPRINT(Remoraid)
+ OVERWORLD(
+ sPicTable_Remoraid,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SPOT,
+ gOverworldPalette_Remoraid,
+ gShinyOverworldPalette_Remoraid
+ )
.levelUpLearnset = sRemoraidLevelUpLearnset,
.teachableLearnset = sRemoraidTeachableLearnset,
+ .eggMoveLearnset = sRemoraidEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 25, SPECIES_OCTILLERY}),
},
@@ -5168,6 +5847,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Octillery,
.iconPalIndex = 0,
FOOTPRINT(Octillery)
+ OVERWORLD(
+ sPicTable_Octillery,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SLITHER,
+ gOverworldPalette_Octillery,
+ gShinyOverworldPalette_Octillery
+ )
.levelUpLearnset = sOctilleryLevelUpLearnset,
.teachableLearnset = sOctilleryTeachableLearnset,
},
@@ -5222,8 +5909,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Delibird,
.iconPalIndex = 1,
FOOTPRINT(Delibird)
+ OVERWORLD(
+ sPicTable_Delibird,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Delibird,
+ gShinyOverworldPalette_Delibird
+ )
.levelUpLearnset = sDelibirdLevelUpLearnset,
.teachableLearnset = sDelibirdTeachableLearnset,
+ .eggMoveLearnset = sDelibirdEggMoveLearnset,
},
#endif //P_FAMILY_DELIBIRD
@@ -5277,8 +5973,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Mantyke,
.iconPalIndex = 0,
FOOTPRINT(Mantyke)
+ OVERWORLD(
+ sPicTable_Mantyke,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Mantyke,
+ gShinyOverworldPalette_Mantyke
+ )
.levelUpLearnset = sMantykeLevelUpLearnset,
.teachableLearnset = sMantykeTeachableLearnset,
+ .eggMoveLearnset = sMantykeEggMoveLearnset,
.evolutions = EVOLUTION({EVO_SPECIFIC_MON_IN_PARTY, SPECIES_REMORAID, SPECIES_MANTINE}),
},
#endif //P_GEN_4_CROSS_EVOS
@@ -5338,8 +6043,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Mantine,
.iconPalIndex = 2,
FOOTPRINT(Mantine)
+ OVERWORLD(
+ sPicTable_Mantine,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Mantine,
+ gShinyOverworldPalette_Mantine
+ )
.levelUpLearnset = sMantineLevelUpLearnset,
.teachableLearnset = sMantineTeachableLearnset,
+ .eggMoveLearnset = sMantineEggMoveLearnset,
},
#endif //P_FAMILY_MANTINE
@@ -5393,8 +6107,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Skarmory,
.iconPalIndex = 0,
FOOTPRINT(Skarmory)
+ OVERWORLD(
+ sPicTable_Skarmory,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Skarmory,
+ gShinyOverworldPalette_Skarmory
+ )
.levelUpLearnset = sSkarmoryLevelUpLearnset,
.teachableLearnset = sSkarmoryTeachableLearnset,
+ .eggMoveLearnset = sSkarmoryEggMoveLearnset,
},
#endif //P_FAMILY_SKARMORY
@@ -5447,8 +6170,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Houndour,
.iconPalIndex = 0,
FOOTPRINT(Houndour)
+ OVERWORLD(
+ sPicTable_Houndour,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Houndour,
+ gShinyOverworldPalette_Houndour
+ )
.levelUpLearnset = sHoundourLevelUpLearnset,
.teachableLearnset = sHoundourTeachableLearnset,
+ .eggMoveLearnset = sHoundourEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 24, SPECIES_HOUNDOOM}),
},
@@ -5504,6 +6236,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Houndoom,
.iconPalIndex = 0,
FOOTPRINT(Houndoom)
+ OVERWORLD(
+ sPicTable_Houndoom,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Houndoom,
+ gShinyOverworldPalette_Houndoom
+ )
.levelUpLearnset = sHoundoomLevelUpLearnset,
.teachableLearnset = sHoundoomTeachableLearnset,
.formSpeciesIdTable = sHoundoomFormSpeciesIdTable,
@@ -5616,8 +6356,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Phanpy,
.iconPalIndex = 0,
FOOTPRINT(Phanpy)
+ OVERWORLD(
+ sPicTable_Phanpy,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Phanpy,
+ gShinyOverworldPalette_Phanpy
+ )
.levelUpLearnset = sPhanpyLevelUpLearnset,
.teachableLearnset = sPhanpyTeachableLearnset,
+ .eggMoveLearnset = sPhanpyEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 25, SPECIES_DONPHAN}),
},
@@ -5674,6 +6423,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Donphan,
.iconPalIndex = 0,
FOOTPRINT(Donphan)
+ OVERWORLD(
+ sPicTable_Donphan,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Donphan,
+ gShinyOverworldPalette_Donphan
+ )
.levelUpLearnset = sDonphanLevelUpLearnset,
.teachableLearnset = sDonphanTeachableLearnset,
},
@@ -5732,9 +6489,18 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Stantler,
.iconPalIndex = 2,
FOOTPRINT(Stantler)
+ OVERWORLD(
+ sPicTable_Stantler,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Stantler,
+ gShinyOverworldPalette_Stantler
+ )
.levelUpLearnset = sStantlerLevelUpLearnset,
.teachableLearnset = sStantlerTeachableLearnset,
- .evolutions = EVOLUTION({EVO_LEVEL_MOVE_TWENTY_TIMES, MOVE_PSYSHIELD_BASH, SPECIES_WYRDEER}),
+ .eggMoveLearnset = sStantlerEggMoveLearnset,
+ .evolutions = EVOLUTION({EVO_USE_MOVE_TWENTY_TIMES, MOVE_PSYSHIELD_BASH, SPECIES_WYRDEER}),
},
#if P_GEN_8_CROSS_EVOS
@@ -5787,6 +6553,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Wyrdeer,
.iconPalIndex = 2,
FOOTPRINT(Wyrdeer)
+ OVERWORLD(
+ sPicTable_Wyrdeer,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Wyrdeer,
+ gShinyOverworldPalette_Wyrdeer
+ )
.levelUpLearnset = sWyrdeerLevelUpLearnset,
.teachableLearnset = sWyrdeerTeachableLearnset,
},
@@ -5846,6 +6620,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Smeargle,
.iconPalIndex = 1,
FOOTPRINT(Smeargle)
+ OVERWORLD(
+ sPicTable_Smeargle,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Smeargle,
+ gShinyOverworldPalette_Smeargle
+ )
.tmIlliterate = TRUE,
.levelUpLearnset = sSmeargleLevelUpLearnset,
.teachableLearnset = sSmeargleTeachableLearnset,
@@ -5907,8 +6689,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Miltank,
.iconPalIndex = 0,
FOOTPRINT(Miltank)
+ OVERWORLD(
+ sPicTable_Miltank,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Miltank,
+ gShinyOverworldPalette_Miltank
+ )
.levelUpLearnset = sMiltankLevelUpLearnset,
.teachableLearnset = sMiltankTeachableLearnset,
+ .eggMoveLearnset = sMiltankEggMoveLearnset,
},
#endif //P_FAMILY_MILTANK
@@ -5972,6 +6763,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Raikou,
.iconPalIndex = 2,
FOOTPRINT(Raikou)
+ OVERWORLD(
+ sPicTable_Raikou,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Raikou,
+ gShinyOverworldPalette_Raikou
+ )
.isLegendary = TRUE,
.levelUpLearnset = sRaikouLevelUpLearnset,
.teachableLearnset = sRaikouTeachableLearnset,
@@ -6038,6 +6837,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Entei,
.iconPalIndex = 2,
FOOTPRINT(Entei)
+ OVERWORLD(
+ sPicTable_Entei,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Entei,
+ gShinyOverworldPalette_Entei
+ )
.isLegendary = TRUE,
.levelUpLearnset = sEnteiLevelUpLearnset,
.teachableLearnset = sEnteiTeachableLearnset,
@@ -6104,6 +6911,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Suicune,
.iconPalIndex = 2,
FOOTPRINT(Suicune)
+ OVERWORLD(
+ sPicTable_Suicune,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Suicune,
+ gShinyOverworldPalette_Suicune
+ )
.isLegendary = TRUE,
.levelUpLearnset = sSuicuneLevelUpLearnset,
.teachableLearnset = sSuicuneTeachableLearnset,
@@ -6159,8 +6974,17 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Larvitar,
.iconPalIndex = 1,
FOOTPRINT(Larvitar)
+ OVERWORLD(
+ sPicTable_Larvitar,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Larvitar,
+ gShinyOverworldPalette_Larvitar
+ )
.levelUpLearnset = sLarvitarLevelUpLearnset,
.teachableLearnset = sLarvitarTeachableLearnset,
+ .eggMoveLearnset = sLarvitarEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_PUPITAR}),
},
@@ -6212,6 +7036,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Pupitar,
.iconPalIndex = 2,
FOOTPRINT(Pupitar)
+ OVERWORLD(
+ sPicTable_Pupitar,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SPOT,
+ gOverworldPalette_Pupitar,
+ gShinyOverworldPalette_Pupitar
+ )
.levelUpLearnset = sPupitarLevelUpLearnset,
.teachableLearnset = sPupitarTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 55, SPECIES_TYRANITAR}),
@@ -6272,6 +7104,14 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Tyranitar,
.iconPalIndex = 4,
FOOTPRINT(Tyranitar)
+ OVERWORLD(
+ sPicTable_Tyranitar,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Tyranitar,
+ gShinyOverworldPalette_Tyranitar
+ )
.levelUpLearnset = sTyranitarLevelUpLearnset,
.teachableLearnset = sTyranitarTeachableLearnset,
.formSpeciesIdTable = sTyranitarFormSpeciesIdTable,
@@ -6393,7 +7233,16 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Lugia,
.iconPalIndex = 0,
FOOTPRINT(Lugia)
+ OVERWORLD(
+ sPicTable_Lugia,
+ SIZE_64x64,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Lugia,
+ gShinyOverworldPalette_Lugia
+ )
.isLegendary = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sLugiaLevelUpLearnset,
.teachableLearnset = sLugiaTeachableLearnset,
},
@@ -6457,7 +7306,16 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_HoOh,
.iconPalIndex = 1,
FOOTPRINT(HoOh)
+ OVERWORLD(
+ sPicTable_HoOh,
+ SIZE_64x64,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_HoOh,
+ gShinyOverworldPalette_HoOh
+ )
.isLegendary = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sHoOhLevelUpLearnset,
.teachableLearnset = sHoOhTeachableLearnset,
},
@@ -6521,7 +7379,16 @@ const struct SpeciesInfo gSpeciesInfoGen2[] =
.iconSprite = gMonIcon_Celebi,
.iconPalIndex = 1,
FOOTPRINT(Celebi)
+ OVERWORLD(
+ sPicTable_Celebi,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Celebi,
+ gShinyOverworldPalette_Celebi
+ )
.isMythical = TRUE,
+ .isFrontierBanned = TRUE,
.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 ad759b9a6dc9..edc77bf7a6b6 100644
--- a/src/data/pokemon/species_info/gen_3_families.h
+++ b/src/data/pokemon/species_info/gen_3_families.h
@@ -52,8 +52,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Treecko,
.iconPalIndex = 1,
FOOTPRINT(Treecko)
+ OVERWORLD(
+ sPicTable_Treecko,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Treecko,
+ gShinyOverworldPalette_Treecko
+ )
.levelUpLearnset = sTreeckoLevelUpLearnset,
.teachableLearnset = sTreeckoTeachableLearnset,
+ .eggMoveLearnset = sTreeckoEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 16, SPECIES_GROVYLE}),
},
@@ -105,6 +114,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Grovyle,
.iconPalIndex = 1,
FOOTPRINT(Grovyle)
+ OVERWORLD(
+ sPicTable_Grovyle,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Grovyle,
+ gShinyOverworldPalette_Grovyle
+ )
.levelUpLearnset = sGrovyleLevelUpLearnset,
.teachableLearnset = sGrovyleTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 36, SPECIES_SCEPTILE}),
@@ -164,6 +181,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Sceptile,
.iconPalIndex = 1,
FOOTPRINT(Sceptile)
+ OVERWORLD(
+ sPicTable_Sceptile,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Sceptile,
+ gShinyOverworldPalette_Sceptile
+ )
.levelUpLearnset = sSceptileLevelUpLearnset,
.teachableLearnset = sSceptileTeachableLearnset,
.formSpeciesIdTable = sSceptileFormSpeciesIdTable,
@@ -279,8 +304,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Torchic,
.iconPalIndex = 0,
FOOTPRINT(Torchic)
+ OVERWORLD(
+ sPicTable_Torchic,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Torchic,
+ gShinyOverworldPalette_Torchic
+ )
.levelUpLearnset = sTorchicLevelUpLearnset,
.teachableLearnset = sTorchicTeachableLearnset,
+ .eggMoveLearnset = sTorchicEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 16, SPECIES_COMBUSKEN}),
},
@@ -337,6 +371,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Combusken,
.iconPalIndex = 0,
FOOTPRINT(Combusken)
+ OVERWORLD(
+ sPicTable_Combusken,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Combusken,
+ gShinyOverworldPalette_Combusken
+ )
.levelUpLearnset = sCombuskenLevelUpLearnset,
.teachableLearnset = sCombuskenTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 36, SPECIES_BLAZIKEN}),
@@ -400,6 +442,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Blaziken,
.iconPalIndex = 0,
FOOTPRINT(Blaziken)
+ OVERWORLD(
+ sPicTable_Blaziken,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Blaziken,
+ gShinyOverworldPalette_Blaziken
+ )
.levelUpLearnset = sBlazikenLevelUpLearnset,
.teachableLearnset = sBlazikenTeachableLearnset,
.formSpeciesIdTable = sBlazikenFormSpeciesIdTable,
@@ -513,8 +563,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Mudkip,
.iconPalIndex = 0,
FOOTPRINT(Mudkip)
+ OVERWORLD(
+ sPicTable_Mudkip,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Mudkip,
+ gShinyOverworldPalette_Mudkip
+ )
.levelUpLearnset = sMudkipLevelUpLearnset,
.teachableLearnset = sMudkipTeachableLearnset,
+ .eggMoveLearnset = sMudkipEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 16, SPECIES_MARSHTOMP}),
},
@@ -566,6 +625,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Marshtomp,
.iconPalIndex = 0,
FOOTPRINT(Marshtomp)
+ OVERWORLD(
+ sPicTable_Marshtomp,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Marshtomp,
+ gShinyOverworldPalette_Marshtomp
+ )
.levelUpLearnset = sMarshtompLevelUpLearnset,
.teachableLearnset = sMarshtompTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 36, SPECIES_SWAMPERT}),
@@ -625,6 +692,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Swampert,
.iconPalIndex = 0,
FOOTPRINT(Swampert)
+ OVERWORLD(
+ sPicTable_Swampert,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Swampert,
+ gShinyOverworldPalette_Swampert
+ )
.levelUpLearnset = sSwampertLevelUpLearnset,
.teachableLearnset = sSwampertTeachableLearnset,
.formSpeciesIdTable = sSwampertFormSpeciesIdTable,
@@ -748,8 +823,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Poochyena,
.iconPalIndex = 2,
FOOTPRINT(Poochyena)
+ OVERWORLD(
+ sPicTable_Poochyena,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Poochyena,
+ gShinyOverworldPalette_Poochyena
+ )
.levelUpLearnset = sPoochyenaLevelUpLearnset,
.teachableLearnset = sPoochyenaTeachableLearnset,
+ .eggMoveLearnset = sPoochyenaEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 18, SPECIES_MIGHTYENA}),
},
@@ -805,6 +889,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Mightyena,
.iconPalIndex = 2,
FOOTPRINT(Mightyena)
+ OVERWORLD(
+ sPicTable_Mightyena,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Mightyena,
+ gShinyOverworldPalette_Mightyena
+ )
.levelUpLearnset = sMightyenaLevelUpLearnset,
.teachableLearnset = sMightyenaTeachableLearnset,
},
@@ -873,8 +965,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Zigzagoon,
.iconPalIndex = 2,
FOOTPRINT(Zigzagoon)
+ OVERWORLD(
+ sPicTable_Zigzagoon,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Zigzagoon,
+ gShinyOverworldPalette_Zigzagoon
+ )
.levelUpLearnset = sZigzagoonLevelUpLearnset,
.teachableLearnset = sZigzagoonTeachableLearnset,
+ .eggMoveLearnset = sZigzagoonEggMoveLearnset,
.formSpeciesIdTable = sZigzagoonFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_LEVEL, 20, SPECIES_LINOONE}),
},
@@ -933,6 +1034,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Linoone,
.iconPalIndex = 2,
FOOTPRINT(Linoone)
+ OVERWORLD(
+ sPicTable_Linoone,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Linoone,
+ gShinyOverworldPalette_Linoone
+ )
.levelUpLearnset = sLinooneLevelUpLearnset,
.teachableLearnset = sLinooneTeachableLearnset,
.formSpeciesIdTable = sLinooneFormSpeciesIdTable,
@@ -987,9 +1096,18 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_ZigzagoonGalarian,
.iconPalIndex = 0,
FOOTPRINT(Zigzagoon)
+ OVERWORLD(
+ sPicTable_ZigzagoonGalarian,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_ZigzagoonGalarian,
+ gShinyOverworldPalette_ZigzagoonGalarian
+ )
.isGalarianForm = TRUE,
.levelUpLearnset = sZigzagoonGalarianLevelUpLearnset,
.teachableLearnset = sZigzagoonGalarianTeachableLearnset,
+ .eggMoveLearnset = sZigzagoonGalarianEggMoveLearnset,
.formSpeciesIdTable = sZigzagoonFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_LEVEL, 20, SPECIES_LINOONE_GALARIAN}),
},
@@ -1042,6 +1160,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_LinooneGalarian,
.iconPalIndex = 0,
FOOTPRINT(Linoone)
+ OVERWORLD(
+ sPicTable_LinooneGalarian,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_LinooneGalarian,
+ gShinyOverworldPalette_LinooneGalarian
+ )
.isGalarianForm = TRUE,
.levelUpLearnset = sLinooneGalarianLevelUpLearnset,
.teachableLearnset = sLinooneGalarianTeachableLearnset,
@@ -1097,6 +1223,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Obstagoon,
.iconPalIndex = 0,
FOOTPRINT(Obstagoon)
+ OVERWORLD(
+ sPicTable_Obstagoon,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Obstagoon,
+ gShinyOverworldPalette_Obstagoon
+ )
.levelUpLearnset = sObstagoonLevelUpLearnset,
.teachableLearnset = sObstagoonTeachableLearnset,
},
@@ -1160,6 +1294,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Wurmple,
.iconPalIndex = 0,
FOOTPRINT(Wurmple)
+ OVERWORLD(
+ sPicTable_Wurmple,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_BUG,
+ gOverworldPalette_Wurmple,
+ gShinyOverworldPalette_Wurmple
+ )
.tmIlliterate = TRUE,
.levelUpLearnset = sWurmpleLevelUpLearnset,
.teachableLearnset = sWurmpleTeachableLearnset,
@@ -1215,6 +1357,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Silcoon,
.iconPalIndex = 2,
FOOTPRINT(Silcoon)
+ OVERWORLD(
+ sPicTable_Silcoon,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_BUG,
+ gOverworldPalette_Silcoon,
+ gShinyOverworldPalette_Silcoon
+ )
.tmIlliterate = TRUE,
.levelUpLearnset = sSilcoonLevelUpLearnset,
.teachableLearnset = sSilcoonTeachableLearnset,
@@ -1283,6 +1433,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Beautifly,
.iconPalIndex = 0,
FOOTPRINT(Beautifly)
+ OVERWORLD(
+ sPicTable_Beautifly,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Beautifly,
+ gShinyOverworldPalette_Beautifly
+ )
.levelUpLearnset = sBeautiflyLevelUpLearnset,
.teachableLearnset = sBeautiflyTeachableLearnset,
},
@@ -1341,6 +1499,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Cascoon,
.iconPalIndex = 2,
FOOTPRINT(Cascoon)
+ OVERWORLD(
+ sPicTable_Cascoon,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_BUG,
+ gOverworldPalette_Cascoon,
+ gShinyOverworldPalette_Cascoon
+ )
.tmIlliterate = TRUE,
.levelUpLearnset = sCascoonLevelUpLearnset,
.teachableLearnset = sCascoonTeachableLearnset,
@@ -1411,6 +1577,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Dustox,
.iconPalIndex = 5,
FOOTPRINT(Dustox)
+ OVERWORLD(
+ sPicTable_Dustox,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Dustox,
+ gShinyOverworldPalette_Dustox
+ )
.levelUpLearnset = sDustoxLevelUpLearnset,
.teachableLearnset = sDustoxTeachableLearnset,
},
@@ -1466,8 +1640,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Lotad,
.iconPalIndex = 4,
FOOTPRINT(Lotad)
+ OVERWORLD(
+ sPicTable_Lotad,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Lotad,
+ gShinyOverworldPalette_Lotad
+ )
.levelUpLearnset = sLotadLevelUpLearnset,
.teachableLearnset = sLotadTeachableLearnset,
+ .eggMoveLearnset = sLotadEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 14, SPECIES_LOMBRE}),
},
@@ -1520,6 +1703,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Lombre,
.iconPalIndex = 1,
FOOTPRINT(Lombre)
+ OVERWORLD(
+ sPicTable_Lombre,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Lombre,
+ gShinyOverworldPalette_Lombre
+ )
.levelUpLearnset = sLombreLevelUpLearnset,
.teachableLearnset = sLombreTeachableLearnset,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_WATER_STONE, SPECIES_LUDICOLO}),
@@ -1584,6 +1775,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Ludicolo,
.iconPalIndex = 1,
FOOTPRINT(Ludicolo)
+ OVERWORLD(
+ sPicTable_Ludicolo,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Ludicolo,
+ gShinyOverworldPalette_Ludicolo
+ )
.levelUpLearnset = sLudicoloLevelUpLearnset,
.teachableLearnset = sLudicoloTeachableLearnset,
},
@@ -1639,8 +1838,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Seedot,
.iconPalIndex = 2,
FOOTPRINT(Seedot)
+ OVERWORLD(
+ sPicTable_Seedot,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Seedot,
+ gShinyOverworldPalette_Seedot
+ )
.levelUpLearnset = sSeedotLevelUpLearnset,
.teachableLearnset = sSeedotTeachableLearnset,
+ .eggMoveLearnset = sSeedotEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 14, SPECIES_NUZLEAF}),
},
@@ -1697,6 +1905,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Nuzleaf,
.iconPalIndex = 1,
FOOTPRINT(Nuzleaf)
+ OVERWORLD(
+ sPicTable_Nuzleaf,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Nuzleaf,
+ gShinyOverworldPalette_Nuzleaf
+ )
.levelUpLearnset = sNuzleafLevelUpLearnset,
.teachableLearnset = sNuzleafTeachableLearnset,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_LEAF_STONE, SPECIES_SHIFTRY}),
@@ -1765,6 +1981,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Shiftry,
.iconPalIndex = 5,
FOOTPRINT(Shiftry)
+ OVERWORLD(
+ sPicTable_Shiftry,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Shiftry,
+ gShinyOverworldPalette_Shiftry
+ )
.levelUpLearnset = sShiftryLevelUpLearnset,
.teachableLearnset = sShiftryTeachableLearnset,
},
@@ -1819,8 +2043,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Taillow,
.iconPalIndex = 2,
FOOTPRINT(Taillow)
+ OVERWORLD(
+ sPicTable_Taillow,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Taillow,
+ gShinyOverworldPalette_Taillow
+ )
.levelUpLearnset = sTaillowLevelUpLearnset,
.teachableLearnset = sTaillowTeachableLearnset,
+ .eggMoveLearnset = sTaillowEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 22, SPECIES_SWELLOW}),
},
@@ -1878,6 +2111,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Swellow,
.iconPalIndex = 2,
FOOTPRINT(Swellow)
+ OVERWORLD(
+ sPicTable_Swellow,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Swellow,
+ gShinyOverworldPalette_Swellow
+ )
.levelUpLearnset = sSwellowLevelUpLearnset,
.teachableLearnset = sSwellowTeachableLearnset,
},
@@ -1938,8 +2179,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Wingull,
.iconPalIndex = 0,
FOOTPRINT(Wingull)
+ OVERWORLD(
+ sPicTable_Wingull,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Wingull,
+ gShinyOverworldPalette_Wingull
+ )
.levelUpLearnset = sWingullLevelUpLearnset,
.teachableLearnset = sWingullTeachableLearnset,
+ .eggMoveLearnset = sWingullEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 25, SPECIES_PELIPPER}),
},
@@ -2003,6 +2253,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Pelipper,
.iconPalIndex = 2,
FOOTPRINT(Pelipper)
+ OVERWORLD(
+ sPicTable_Pelipper,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Pelipper,
+ gShinyOverworldPalette_Pelipper
+ )
.levelUpLearnset = sPelipperLevelUpLearnset,
.teachableLearnset = sPelipperTeachableLearnset,
},
@@ -2065,8 +2323,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Ralts,
.iconPalIndex = 1,
FOOTPRINT(Ralts)
+ OVERWORLD(
+ sPicTable_Ralts,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Ralts,
+ gShinyOverworldPalette_Ralts
+ )
.levelUpLearnset = sRaltsLevelUpLearnset,
.teachableLearnset = sRaltsTeachableLearnset,
+ .eggMoveLearnset = sRaltsEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 20, SPECIES_KIRLIA}),
},
@@ -2118,6 +2385,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Kirlia,
.iconPalIndex = 1,
FOOTPRINT(Kirlia)
+ OVERWORLD(
+ sPicTable_Kirlia,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Kirlia,
+ gShinyOverworldPalette_Kirlia
+ )
.levelUpLearnset = sKirliaLevelUpLearnset,
.teachableLearnset = sKirliaTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_GARDEVOIR},
@@ -2178,6 +2453,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Gardevoir,
.iconPalIndex = 1,
FOOTPRINT(Gardevoir)
+ OVERWORLD(
+ sPicTable_Gardevoir,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Gardevoir,
+ gShinyOverworldPalette_Gardevoir
+ )
.levelUpLearnset = sGardevoirLevelUpLearnset,
.teachableLearnset = sGardevoirTeachableLearnset,
.formSpeciesIdTable = sGardevoirFormSpeciesIdTable,
@@ -2300,6 +2583,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Gallade,
.iconPalIndex = 1,
FOOTPRINT(Gallade)
+ OVERWORLD(
+ sPicTable_Gallade,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Gallade,
+ gShinyOverworldPalette_Gallade
+ )
.levelUpLearnset = sGalladeLevelUpLearnset,
.teachableLearnset = sGalladeTeachableLearnset,
.formSpeciesIdTable = sGalladeFormSpeciesIdTable,
@@ -2415,8 +2706,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Surskit,
.iconPalIndex = 0,
FOOTPRINT(Surskit)
+ OVERWORLD(
+ sPicTable_Surskit,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_BUG,
+ gOverworldPalette_Surskit,
+ gShinyOverworldPalette_Surskit
+ )
.levelUpLearnset = sSurskitLevelUpLearnset,
.teachableLearnset = sSurskitTeachableLearnset,
+ .eggMoveLearnset = sSurskitEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 22, SPECIES_MASQUERAIN}),
},
@@ -2477,6 +2777,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Masquerain,
.iconPalIndex = 0,
FOOTPRINT(Masquerain)
+ OVERWORLD(
+ sPicTable_Masquerain,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Masquerain,
+ gShinyOverworldPalette_Masquerain
+ )
.levelUpLearnset = sMasquerainLevelUpLearnset,
.teachableLearnset = sMasquerainTeachableLearnset,
},
@@ -2537,8 +2845,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Shroomish,
.iconPalIndex = 1,
FOOTPRINT(Shroomish)
+ OVERWORLD(
+ sPicTable_Shroomish,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Shroomish,
+ gShinyOverworldPalette_Shroomish
+ )
.levelUpLearnset = sShroomishLevelUpLearnset,
.teachableLearnset = sShroomishTeachableLearnset,
+ .eggMoveLearnset = sShroomishEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 23, SPECIES_BRELOOM}),
},
@@ -2596,6 +2913,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Breloom,
.iconPalIndex = 1,
FOOTPRINT(Breloom)
+ OVERWORLD(
+ sPicTable_Breloom,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Breloom,
+ gShinyOverworldPalette_Breloom
+ )
.levelUpLearnset = sBreloomLevelUpLearnset,
.teachableLearnset = sBreloomTeachableLearnset,
},
@@ -2650,8 +2975,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Slakoth,
.iconPalIndex = 2,
FOOTPRINT(Slakoth)
+ OVERWORLD(
+ sPicTable_Slakoth,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Slakoth,
+ gShinyOverworldPalette_Slakoth
+ )
.levelUpLearnset = sSlakothLevelUpLearnset,
.teachableLearnset = sSlakothTeachableLearnset,
+ .eggMoveLearnset = sSlakothEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 18, SPECIES_VIGOROTH}),
},
@@ -2703,6 +3037,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Vigoroth,
.iconPalIndex = 2,
FOOTPRINT(Vigoroth)
+ OVERWORLD(
+ sPicTable_Vigoroth,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Vigoroth,
+ gShinyOverworldPalette_Vigoroth
+ )
.levelUpLearnset = sVigorothLevelUpLearnset,
.teachableLearnset = sVigorothTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 36, SPECIES_SLAKING}),
@@ -2762,6 +3104,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Slaking,
.iconPalIndex = 2,
FOOTPRINT(Slaking)
+ OVERWORLD(
+ sPicTable_Slaking,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Slaking,
+ gShinyOverworldPalette_Slaking
+ )
.levelUpLearnset = sSlakingLevelUpLearnset,
.teachableLearnset = sSlakingTeachableLearnset,
},
@@ -2817,8 +3167,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Nincada,
.iconPalIndex = 1,
FOOTPRINT(Nincada)
+ OVERWORLD(
+ sPicTable_Nincada,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_BUG,
+ gOverworldPalette_Nincada,
+ gShinyOverworldPalette_Nincada
+ )
.levelUpLearnset = sNincadaLevelUpLearnset,
.teachableLearnset = sNincadaTeachableLearnset,
+ .eggMoveLearnset = sNincadaEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL_NINJASK, 20, SPECIES_NINJASK},
{EVO_LEVEL_SHEDINJA, 20, SPECIES_SHEDINJA}),
},
@@ -2872,6 +3231,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Ninjask,
.iconPalIndex = 1,
FOOTPRINT(Ninjask)
+ OVERWORLD(
+ sPicTable_Ninjask,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Ninjask,
+ gShinyOverworldPalette_Ninjask
+ )
.levelUpLearnset = sNinjaskLevelUpLearnset,
.teachableLearnset = sNinjaskTeachableLearnset,
},
@@ -2925,6 +3292,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Shedinja,
.iconPalIndex = 1,
FOOTPRINT(Shedinja)
+ OVERWORLD(
+ sPicTable_Shedinja,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Shedinja,
+ gShinyOverworldPalette_Shedinja
+ )
.levelUpLearnset = sShedinjaLevelUpLearnset,
.teachableLearnset = sShedinjaTeachableLearnset,
},
@@ -2979,8 +3354,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Whismur,
.iconPalIndex = 1,
FOOTPRINT(Whismur)
+ OVERWORLD(
+ sPicTable_Whismur,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Whismur,
+ gShinyOverworldPalette_Whismur
+ )
.levelUpLearnset = sWhismurLevelUpLearnset,
.teachableLearnset = sWhismurTeachableLearnset,
+ .eggMoveLearnset = sWhismurEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 20, SPECIES_LOUDRED}),
},
@@ -3032,6 +3416,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Loudred,
.iconPalIndex = 2,
FOOTPRINT(Loudred)
+ OVERWORLD(
+ sPicTable_Loudred,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Loudred,
+ gShinyOverworldPalette_Loudred
+ )
.levelUpLearnset = sLoudredLevelUpLearnset,
.teachableLearnset = sLoudredTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 40, SPECIES_EXPLOUD}),
@@ -3093,6 +3485,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Exploud,
.iconPalIndex = 2,
FOOTPRINT(Exploud)
+ OVERWORLD(
+ sPicTable_Exploud,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Exploud,
+ gShinyOverworldPalette_Exploud
+ )
.levelUpLearnset = sExploudLevelUpLearnset,
.teachableLearnset = sExploudTeachableLearnset,
},
@@ -3148,8 +3548,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Makuhita,
.iconPalIndex = 1,
FOOTPRINT(Makuhita)
+ OVERWORLD(
+ sPicTable_Makuhita,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Makuhita,
+ gShinyOverworldPalette_Makuhita
+ )
.levelUpLearnset = sMakuhitaLevelUpLearnset,
.teachableLearnset = sMakuhitaTeachableLearnset,
+ .eggMoveLearnset = sMakuhitaEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 24, SPECIES_HARIYAMA}),
},
@@ -3202,6 +3611,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Hariyama,
.iconPalIndex = 2,
FOOTPRINT(Hariyama)
+ OVERWORLD(
+ sPicTable_Hariyama,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Hariyama,
+ gShinyOverworldPalette_Hariyama
+ )
.levelUpLearnset = sHariyamaLevelUpLearnset,
.teachableLearnset = sHariyamaTeachableLearnset,
},
@@ -3257,8 +3674,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Nosepass,
.iconPalIndex = 0,
FOOTPRINT(Nosepass)
+ OVERWORLD(
+ sPicTable_Nosepass,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Nosepass,
+ gShinyOverworldPalette_Nosepass
+ )
.levelUpLearnset = sNosepassLevelUpLearnset,
.teachableLearnset = sNosepassTeachableLearnset,
+ .eggMoveLearnset = sNosepassEggMoveLearnset,
.evolutions = EVOLUTION({EVO_MAPSEC, MAPSEC_NEW_MAUVILLE, SPECIES_PROBOPASS},
{EVO_ITEM, ITEM_THUNDER_STONE, SPECIES_PROBOPASS}),
},
@@ -3315,6 +3741,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Probopass,
.iconPalIndex = 0,
FOOTPRINT(Probopass)
+ OVERWORLD(
+ sPicTable_Probopass,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Probopass,
+ gShinyOverworldPalette_Probopass
+ )
.levelUpLearnset = sProbopassLevelUpLearnset,
.teachableLearnset = sProbopassTeachableLearnset,
},
@@ -3375,8 +3809,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Skitty,
.iconPalIndex = 0,
FOOTPRINT(Skitty)
+ OVERWORLD(
+ sPicTable_Skitty,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Skitty,
+ gShinyOverworldPalette_Skitty
+ )
.levelUpLearnset = sSkittyLevelUpLearnset,
.teachableLearnset = sSkittyTeachableLearnset,
+ .eggMoveLearnset = sSkittyEggMoveLearnset,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_MOON_STONE, SPECIES_DELCATTY}),
},
@@ -3439,6 +3882,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Delcatty,
.iconPalIndex = 2,
FOOTPRINT(Delcatty)
+ OVERWORLD(
+ sPicTable_Delcatty,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Delcatty,
+ gShinyOverworldPalette_Delcatty
+ )
.levelUpLearnset = sDelcattyLevelUpLearnset,
.teachableLearnset = sDelcattyTeachableLearnset,
},
@@ -3499,8 +3950,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Sableye,
.iconPalIndex = 2,
FOOTPRINT(Sableye)
+ OVERWORLD(
+ sPicTable_Sableye,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Sableye,
+ gShinyOverworldPalette_Sableye
+ )
.levelUpLearnset = sSableyeLevelUpLearnset,
.teachableLearnset = sSableyeTeachableLearnset,
+ .eggMoveLearnset = sSableyeEggMoveLearnset,
.formSpeciesIdTable = sSableyeFormSpeciesIdTable,
.formChangeTable = sSableyeFormChangeTable,
},
@@ -3557,6 +4017,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.isMegaEvolution = TRUE,
.levelUpLearnset = sSableyeLevelUpLearnset,
.teachableLearnset = sSableyeTeachableLearnset,
+ .eggMoveLearnset = sSableyeEggMoveLearnset,
.formSpeciesIdTable = sSableyeFormSpeciesIdTable,
.formChangeTable = sSableyeFormChangeTable,
},
@@ -3620,8 +4081,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Mawile,
.iconPalIndex = 2,
FOOTPRINT(Mawile)
+ OVERWORLD(
+ sPicTable_Mawile,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Mawile,
+ gShinyOverworldPalette_Mawile
+ )
.levelUpLearnset = sMawileLevelUpLearnset,
.teachableLearnset = sMawileTeachableLearnset,
+ .eggMoveLearnset = sMawileEggMoveLearnset,
.formSpeciesIdTable = sMawileFormSpeciesIdTable,
.formChangeTable = sMawileFormChangeTable,
},
@@ -3679,6 +4149,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.isMegaEvolution = TRUE,
.levelUpLearnset = sMawileLevelUpLearnset,
.teachableLearnset = sMawileTeachableLearnset,
+ .eggMoveLearnset = sMawileEggMoveLearnset,
.formSpeciesIdTable = sMawileFormSpeciesIdTable,
.formChangeTable = sMawileFormChangeTable,
},
@@ -3735,8 +4206,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Aron,
.iconPalIndex = 2,
FOOTPRINT(Aron)
+ OVERWORLD(
+ sPicTable_Aron,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Aron,
+ gShinyOverworldPalette_Aron
+ )
.levelUpLearnset = sAronLevelUpLearnset,
.teachableLearnset = sAronTeachableLearnset,
+ .eggMoveLearnset = sAronEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 32, SPECIES_LAIRON}),
},
@@ -3789,6 +4269,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Lairon,
.iconPalIndex = 2,
FOOTPRINT(Lairon)
+ OVERWORLD(
+ sPicTable_Lairon,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Lairon,
+ gShinyOverworldPalette_Lairon
+ )
.levelUpLearnset = sLaironLevelUpLearnset,
.teachableLearnset = sLaironTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 42, SPECIES_AGGRON}),
@@ -3849,6 +4337,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Aggron,
.iconPalIndex = 2,
FOOTPRINT(Aggron)
+ OVERWORLD(
+ sPicTable_Aggron,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Aggron,
+ gShinyOverworldPalette_Aggron
+ )
.levelUpLearnset = sAggronLevelUpLearnset,
.teachableLearnset = sAggronTeachableLearnset,
.formSpeciesIdTable = sAggronFormSpeciesIdTable,
@@ -3967,8 +4463,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Meditite,
.iconPalIndex = 0,
FOOTPRINT(Meditite)
+ OVERWORLD(
+ sPicTable_Meditite,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Meditite,
+ gShinyOverworldPalette_Meditite
+ )
.levelUpLearnset = sMedititeLevelUpLearnset,
.teachableLearnset = sMedititeTeachableLearnset,
+ .eggMoveLearnset = sMedititeEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 37, SPECIES_MEDICHAM}),
},
@@ -4024,6 +4529,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Medicham,
.iconPalIndex = 0,
FOOTPRINT(Medicham)
+ OVERWORLD(
+ sPicTable_Medicham,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Medicham,
+ gShinyOverworldPalette_Medicham
+ )
.levelUpLearnset = sMedichamLevelUpLearnset,
.teachableLearnset = sMedichamTeachableLearnset,
.formSpeciesIdTable = sMedichamFormSpeciesIdTable,
@@ -4137,8 +4650,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Electrike,
.iconPalIndex = 1,
FOOTPRINT(Electrike)
+ OVERWORLD(
+ sPicTable_Electrike,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Electrike,
+ gShinyOverworldPalette_Electrike
+ )
.levelUpLearnset = sElectrikeLevelUpLearnset,
.teachableLearnset = sElectrikeTeachableLearnset,
+ .eggMoveLearnset = sElectrikeEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 26, SPECIES_MANECTRIC}),
},
@@ -4190,6 +4712,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Manectric,
.iconPalIndex = 0,
FOOTPRINT(Manectric)
+ OVERWORLD(
+ sPicTable_Manectric,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Manectric,
+ gShinyOverworldPalette_Manectric
+ )
.levelUpLearnset = sManectricLevelUpLearnset,
.teachableLearnset = sManectricTeachableLearnset,
.formSpeciesIdTable = sManectricFormSpeciesIdTable,
@@ -4307,8 +4837,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Plusle,
.iconPalIndex = 0,
FOOTPRINT(Plusle)
+ OVERWORLD(
+ sPicTable_Plusle,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Plusle,
+ gShinyOverworldPalette_Plusle
+ )
.levelUpLearnset = sPlusleLevelUpLearnset,
.teachableLearnset = sPlusleTeachableLearnset,
+ .eggMoveLearnset = sPlusleEggMoveLearnset,
},
#endif //P_FAMILY_PLUSLE
@@ -4366,8 +4905,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Minun,
.iconPalIndex = 0,
FOOTPRINT(Minun)
+ OVERWORLD(
+ sPicTable_Minun,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Minun,
+ gShinyOverworldPalette_Minun
+ )
.levelUpLearnset = sMinunLevelUpLearnset,
.teachableLearnset = sMinunTeachableLearnset,
+ .eggMoveLearnset = sMinunEggMoveLearnset,
},
#endif //P_FAMILY_MINUN
@@ -4427,8 +4975,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Volbeat,
.iconPalIndex = 0,
FOOTPRINT(Volbeat)
+ OVERWORLD(
+ sPicTable_Volbeat,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Volbeat,
+ gShinyOverworldPalette_Volbeat
+ )
.levelUpLearnset = sVolbeatLevelUpLearnset,
.teachableLearnset = sVolbeatTeachableLearnset,
+ .eggMoveLearnset = sVolbeatEggMoveLearnset,
},
[SPECIES_ILLUMISE] =
@@ -4490,8 +5047,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Illumise,
.iconPalIndex = 2,
FOOTPRINT(Illumise)
+ OVERWORLD(
+ sPicTable_Illumise,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Illumise,
+ gShinyOverworldPalette_Illumise
+ )
.levelUpLearnset = sIllumiseLevelUpLearnset,
.teachableLearnset = sIllumiseTeachableLearnset,
+ .eggMoveLearnset = sIllumiseEggMoveLearnset,
},
#endif //P_FAMILY_VOLBEAT_ILLUMISE
@@ -4547,8 +5113,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Budew,
.iconPalIndex = 1,
FOOTPRINT(Budew)
+ OVERWORLD(
+ sPicTable_Budew,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Budew,
+ gShinyOverworldPalette_Budew
+ )
.levelUpLearnset = sBudewLevelUpLearnset,
.teachableLearnset = sBudewTeachableLearnset,
+ .eggMoveLearnset = sBudewEggMoveLearnset,
.evolutions = EVOLUTION({EVO_FRIENDSHIP_DAY, 0, SPECIES_ROSELIA}),
},
#endif //P_GEN_4_CROSS_EVOS
@@ -4607,8 +5182,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Roselia,
.iconPalIndex = 4,
FOOTPRINT(Roselia)
+ OVERWORLD(
+ sPicTable_Roselia,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Roselia,
+ gShinyOverworldPalette_Roselia
+ )
.levelUpLearnset = sRoseliaLevelUpLearnset,
.teachableLearnset = sRoseliaTeachableLearnset,
+ .eggMoveLearnset = sRoseliaEggMoveLearnset,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_SHINY_STONE, SPECIES_ROSERADE}),
},
@@ -4675,6 +5259,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Roserade,
.iconPalIndex = 0,
FOOTPRINT(Roserade)
+ OVERWORLD(
+ sPicTable_Roserade,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Roserade,
+ gShinyOverworldPalette_Roserade
+ )
.levelUpLearnset = sRoseradeLevelUpLearnset,
.teachableLearnset = sRoseradeTeachableLearnset,
},
@@ -4736,8 +5328,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Gulpin,
.iconPalIndex = 1,
FOOTPRINT(Gulpin)
+ OVERWORLD(
+ sPicTable_Gulpin,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SPOT,
+ gOverworldPalette_Gulpin,
+ gShinyOverworldPalette_Gulpin
+ )
.levelUpLearnset = sGulpinLevelUpLearnset,
.teachableLearnset = sGulpinTeachableLearnset,
+ .eggMoveLearnset = sGulpinEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 26, SPECIES_SWALOT}),
},
@@ -4795,6 +5396,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Swalot,
.iconPalIndex = 2,
FOOTPRINT(Swalot)
+ OVERWORLD(
+ sPicTable_Swalot,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SLITHER,
+ gOverworldPalette_Swalot,
+ gShinyOverworldPalette_Swalot
+ )
.levelUpLearnset = sSwalotLevelUpLearnset,
.teachableLearnset = sSwalotTeachableLearnset,
},
@@ -4850,8 +5459,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Carvanha,
.iconPalIndex = 0,
FOOTPRINT(Carvanha)
+ OVERWORLD(
+ sPicTable_Carvanha,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Carvanha,
+ gShinyOverworldPalette_Carvanha
+ )
.levelUpLearnset = sCarvanhaLevelUpLearnset,
.teachableLearnset = sCarvanhaTeachableLearnset,
+ .eggMoveLearnset = sCarvanhaEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_SHARPEDO}),
},
@@ -4904,6 +5522,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Sharpedo,
.iconPalIndex = 0,
FOOTPRINT(Sharpedo)
+ OVERWORLD(
+ sPicTable_Sharpedo,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Sharpedo,
+ gShinyOverworldPalette_Sharpedo
+ )
.levelUpLearnset = sSharpedoLevelUpLearnset,
.teachableLearnset = sSharpedoTeachableLearnset,
.formSpeciesIdTable = sSharpedoFormSpeciesIdTable,
@@ -5019,8 +5645,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Wailmer,
.iconPalIndex = 2,
FOOTPRINT(Wailmer)
+ OVERWORLD(
+ sPicTable_Wailmer,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SPOT,
+ gOverworldPalette_Wailmer,
+ gShinyOverworldPalette_Wailmer
+ )
.levelUpLearnset = sWailmerLevelUpLearnset,
.teachableLearnset = sWailmerTeachableLearnset,
+ .eggMoveLearnset = sWailmerEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 40, SPECIES_WAILORD}),
},
@@ -5073,6 +5708,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Wailord,
.iconPalIndex = 0,
FOOTPRINT(Wailord)
+ OVERWORLD(
+ sPicTable_Wailord,
+ SIZE_64x64,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Wailord,
+ gShinyOverworldPalette_Wailord
+ )
.levelUpLearnset = sWailordLevelUpLearnset,
.teachableLearnset = sWailordTeachableLearnset,
},
@@ -5135,8 +5778,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Numel,
.iconPalIndex = 1,
FOOTPRINT(Numel)
+ OVERWORLD(
+ sPicTable_Numel,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Numel,
+ gShinyOverworldPalette_Numel
+ )
.levelUpLearnset = sNumelLevelUpLearnset,
.teachableLearnset = sNumelTeachableLearnset,
+ .eggMoveLearnset = sNumelEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 33, SPECIES_CAMERUPT}),
},
@@ -5197,6 +5849,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Camerupt,
.iconPalIndex = 0,
FOOTPRINT(Camerupt)
+ OVERWORLD(
+ sPicTable_Camerupt,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Camerupt,
+ gShinyOverworldPalette_Camerupt
+ )
.levelUpLearnset = sCameruptLevelUpLearnset,
.teachableLearnset = sCameruptTeachableLearnset,
.formSpeciesIdTable = sCameruptFormSpeciesIdTable,
@@ -5316,8 +5976,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Torkoal,
.iconPalIndex = 2,
FOOTPRINT(Torkoal)
+ OVERWORLD(
+ sPicTable_Torkoal,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Torkoal,
+ gShinyOverworldPalette_Torkoal
+ )
.levelUpLearnset = sTorkoalLevelUpLearnset,
.teachableLearnset = sTorkoalTeachableLearnset,
+ .eggMoveLearnset = sTorkoalEggMoveLearnset,
},
#endif //P_FAMILY_TORKOAL
@@ -5370,8 +6039,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Spoink,
.iconPalIndex = 0,
FOOTPRINT(Spoink)
+ OVERWORLD(
+ sPicTable_Spoink,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SPOT,
+ gOverworldPalette_Spoink,
+ gShinyOverworldPalette_Spoink
+ )
.levelUpLearnset = sSpoinkLevelUpLearnset,
.teachableLearnset = sSpoinkTeachableLearnset,
+ .eggMoveLearnset = sSpoinkEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 32, SPECIES_GRUMPIG}),
},
@@ -5424,6 +6102,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Grumpig,
.iconPalIndex = 2,
FOOTPRINT(Grumpig)
+ OVERWORLD(
+ sPicTable_Grumpig,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Grumpig,
+ gShinyOverworldPalette_Grumpig
+ )
.levelUpLearnset = sGrumpigLevelUpLearnset,
.teachableLearnset = sGrumpigTeachableLearnset,
},
@@ -5483,8 +6169,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Spinda,
.iconPalIndex = 1,
FOOTPRINT(Spinda)
+ OVERWORLD(
+ sPicTable_Spinda,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Spinda,
+ gShinyOverworldPalette_Spinda
+ )
.levelUpLearnset = sSpindaLevelUpLearnset,
.teachableLearnset = sSpindaTeachableLearnset,
+ .eggMoveLearnset = sSpindaEggMoveLearnset,
},
#endif //P_FAMILY_SPINDA
@@ -5542,8 +6237,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Trapinch,
.iconPalIndex = 0,
FOOTPRINT(Trapinch)
+ OVERWORLD(
+ sPicTable_Trapinch,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Trapinch,
+ gShinyOverworldPalette_Trapinch
+ )
.levelUpLearnset = sTrapinchLevelUpLearnset,
.teachableLearnset = sTrapinchTeachableLearnset,
+ .eggMoveLearnset = sTrapinchEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 35, SPECIES_VIBRAVA}),
},
@@ -5600,6 +6304,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Vibrava,
.iconPalIndex = 1,
FOOTPRINT(Vibrava)
+ OVERWORLD(
+ sPicTable_Vibrava,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Vibrava,
+ gShinyOverworldPalette_Vibrava
+ )
.levelUpLearnset = sVibravaLevelUpLearnset,
.teachableLearnset = sVibravaTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 45, SPECIES_FLYGON}),
@@ -5665,6 +6377,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Flygon,
.iconPalIndex = 1,
FOOTPRINT(Flygon)
+ OVERWORLD(
+ sPicTable_Flygon,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Flygon,
+ gShinyOverworldPalette_Flygon
+ )
.levelUpLearnset = sFlygonLevelUpLearnset,
.teachableLearnset = sFlygonTeachableLearnset,
},
@@ -5720,8 +6440,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Cacnea,
.iconPalIndex = 1,
FOOTPRINT(Cacnea)
+ OVERWORLD(
+ sPicTable_Cacnea,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Cacnea,
+ gShinyOverworldPalette_Cacnea
+ )
.levelUpLearnset = sCacneaLevelUpLearnset,
.teachableLearnset = sCacneaTeachableLearnset,
+ .eggMoveLearnset = sCacneaEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 32, SPECIES_CACTURNE}),
},
@@ -5777,6 +6506,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Cacturne,
.iconPalIndex = 1,
FOOTPRINT(Cacturne)
+ OVERWORLD(
+ sPicTable_Cacturne,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Cacturne,
+ gShinyOverworldPalette_Cacturne
+ )
.levelUpLearnset = sCacturneLevelUpLearnset,
.teachableLearnset = sCacturneTeachableLearnset,
},
@@ -5831,8 +6568,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Swablu,
.iconPalIndex = 0,
FOOTPRINT(Swablu)
+ OVERWORLD(
+ sPicTable_Swablu,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Swablu,
+ gShinyOverworldPalette_Swablu
+ )
.levelUpLearnset = sSwabluLevelUpLearnset,
.teachableLearnset = sSwabluTeachableLearnset,
+ .eggMoveLearnset = sSwabluEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 38, SPECIES_ALTARIA}),
},
@@ -5884,6 +6630,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Altaria,
.iconPalIndex = 0,
FOOTPRINT(Altaria)
+ OVERWORLD(
+ sPicTable_Altaria,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Altaria,
+ gShinyOverworldPalette_Altaria
+ )
.levelUpLearnset = sAltariaLevelUpLearnset,
.teachableLearnset = sAltariaTeachableLearnset,
.formSpeciesIdTable = sAltariaFormSpeciesIdTable,
@@ -6000,8 +6754,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Zangoose,
.iconPalIndex = 0,
FOOTPRINT(Zangoose)
+ OVERWORLD(
+ sPicTable_Zangoose,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Zangoose,
+ gShinyOverworldPalette_Zangoose
+ )
.levelUpLearnset = sZangooseLevelUpLearnset,
.teachableLearnset = sZangooseTeachableLearnset,
+ .eggMoveLearnset = sZangooseEggMoveLearnset,
},
#endif //P_FAMILY_ZANGOOSE
@@ -6057,8 +6820,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Seviper,
.iconPalIndex = 2,
FOOTPRINT(Seviper)
+ OVERWORLD(
+ sPicTable_Seviper,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_BIKE_TIRE,
+ gOverworldPalette_Seviper,
+ gShinyOverworldPalette_Seviper
+ )
.levelUpLearnset = sSeviperLevelUpLearnset,
.teachableLearnset = sSeviperTeachableLearnset,
+ .eggMoveLearnset = sSeviperEggMoveLearnset,
},
#endif //P_FAMILY_SEVIPER
@@ -6120,6 +6892,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Lunatone,
.iconPalIndex = 1,
FOOTPRINT(Lunatone)
+ OVERWORLD(
+ sPicTable_Lunatone,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Lunatone,
+ gShinyOverworldPalette_Lunatone
+ )
.levelUpLearnset = sLunatoneLevelUpLearnset,
.teachableLearnset = sLunatoneTeachableLearnset,
},
@@ -6183,6 +6963,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Solrock,
.iconPalIndex = 0,
FOOTPRINT(Solrock)
+ OVERWORLD(
+ sPicTable_Solrock,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Solrock,
+ gShinyOverworldPalette_Solrock
+ )
.levelUpLearnset = sSolrockLevelUpLearnset,
.teachableLearnset = sSolrockTeachableLearnset,
},
@@ -6242,8 +7030,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Barboach,
.iconPalIndex = 0,
FOOTPRINT(Barboach)
+ OVERWORLD(
+ sPicTable_Barboach,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SPOT,
+ gOverworldPalette_Barboach,
+ gShinyOverworldPalette_Barboach
+ )
.levelUpLearnset = sBarboachLevelUpLearnset,
.teachableLearnset = sBarboachTeachableLearnset,
+ .eggMoveLearnset = sBarboachEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_WHISCASH}),
},
@@ -6299,6 +7096,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Whiscash,
.iconPalIndex = 0,
FOOTPRINT(Whiscash)
+ OVERWORLD(
+ sPicTable_Whiscash,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Whiscash,
+ gShinyOverworldPalette_Whiscash
+ )
.levelUpLearnset = sWhiscashLevelUpLearnset,
.teachableLearnset = sWhiscashTeachableLearnset,
},
@@ -6353,8 +7158,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Corphish,
.iconPalIndex = 0,
FOOTPRINT(Corphish)
+ OVERWORLD(
+ sPicTable_Corphish,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Corphish,
+ gShinyOverworldPalette_Corphish
+ )
.levelUpLearnset = sCorphishLevelUpLearnset,
.teachableLearnset = sCorphishTeachableLearnset,
+ .eggMoveLearnset = sCorphishEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_CRAWDAUNT}),
},
@@ -6406,6 +7220,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Crawdaunt,
.iconPalIndex = 0,
FOOTPRINT(Crawdaunt)
+ OVERWORLD(
+ sPicTable_Crawdaunt,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Crawdaunt,
+ gShinyOverworldPalette_Crawdaunt
+ )
.levelUpLearnset = sCrawdauntLevelUpLearnset,
.teachableLearnset = sCrawdauntTeachableLearnset,
},
@@ -6462,6 +7284,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Baltoy,
.iconPalIndex = 2,
FOOTPRINT(Baltoy)
+ OVERWORLD(
+ sPicTable_Baltoy,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SPOT,
+ gOverworldPalette_Baltoy,
+ gShinyOverworldPalette_Baltoy
+ )
.levelUpLearnset = sBaltoyLevelUpLearnset,
.teachableLearnset = sBaltoyTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 36, SPECIES_CLAYDOL}),
@@ -6517,6 +7347,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Claydol,
.iconPalIndex = 0,
FOOTPRINT(Claydol)
+ OVERWORLD(
+ sPicTable_Claydol,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Claydol,
+ gShinyOverworldPalette_Claydol
+ )
.levelUpLearnset = sClaydolLevelUpLearnset,
.teachableLearnset = sClaydolTeachableLearnset,
},
@@ -6578,8 +7416,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Lileep,
.iconPalIndex = 2,
FOOTPRINT(Lileep)
+ OVERWORLD(
+ sPicTable_Lileep,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SLITHER,
+ gOverworldPalette_Lileep,
+ gShinyOverworldPalette_Lileep
+ )
.levelUpLearnset = sLileepLevelUpLearnset,
.teachableLearnset = sLileepTeachableLearnset,
+ .eggMoveLearnset = sLileepEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 40, SPECIES_CRADILY}),
},
@@ -6638,6 +7485,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Cradily,
.iconPalIndex = 1,
FOOTPRINT(Cradily)
+ OVERWORLD(
+ sPicTable_Cradily,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SLITHER,
+ gOverworldPalette_Cradily,
+ gShinyOverworldPalette_Cradily
+ )
.levelUpLearnset = sCradilyLevelUpLearnset,
.teachableLearnset = sCradilyTeachableLearnset,
},
@@ -6698,8 +7553,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Anorith,
.iconPalIndex = 0,
FOOTPRINT(Anorith)
+ OVERWORLD(
+ sPicTable_Anorith,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_BUG,
+ gOverworldPalette_Anorith,
+ gShinyOverworldPalette_Anorith
+ )
.levelUpLearnset = sAnorithLevelUpLearnset,
.teachableLearnset = sAnorithTeachableLearnset,
+ .eggMoveLearnset = sAnorithEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 40, SPECIES_ARMALDO}),
},
@@ -6757,6 +7621,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Armaldo,
.iconPalIndex = 2,
FOOTPRINT(Armaldo)
+ OVERWORLD(
+ sPicTable_Armaldo,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Armaldo,
+ gShinyOverworldPalette_Armaldo
+ )
.levelUpLearnset = sArmaldoLevelUpLearnset,
.teachableLearnset = sArmaldoTeachableLearnset,
},
@@ -6815,8 +7687,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Feebas,
.iconPalIndex = 2,
FOOTPRINT(Feebas)
+ OVERWORLD(
+ sPicTable_Feebas,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SPOT,
+ gOverworldPalette_Feebas,
+ gShinyOverworldPalette_Feebas
+ )
.levelUpLearnset = sFeebasLevelUpLearnset,
.teachableLearnset = sFeebasTeachableLearnset,
+ .eggMoveLearnset = sFeebasEggMoveLearnset,
.evolutions = EVOLUTION({EVO_BEAUTY, 170, SPECIES_MILOTIC},
{EVO_TRADE_ITEM, ITEM_PRISM_SCALE, SPECIES_MILOTIC},
{EVO_ITEM, ITEM_PRISM_SCALE, SPECIES_MILOTIC}),
@@ -6879,6 +7760,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Milotic,
.iconPalIndex = 2,
FOOTPRINT(Milotic)
+ OVERWORLD(
+ sPicTable_Milotic,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SLITHER,
+ gOverworldPalette_Milotic,
+ gShinyOverworldPalette_Milotic
+ )
.levelUpLearnset = sMiloticLevelUpLearnset,
.teachableLearnset = sMiloticTeachableLearnset,
},
@@ -6936,8 +7825,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_CastformNormal,
.iconPalIndex = 0,
FOOTPRINT(Castform)
+ OVERWORLD(
+ sPicTable_CastformNormal,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_CastformNormal,
+ gShinyOverworldPalette_CastformNormal
+ )
.levelUpLearnset = sCastformLevelUpLearnset,
.teachableLearnset = sCastformTeachableLearnset,
+ .eggMoveLearnset = sCastformEggMoveLearnset,
.formSpeciesIdTable = sCastformFormSpeciesIdTable,
.formChangeTable = sCastformFormChangeTable,
},
@@ -6993,8 +7891,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_CastformSunny,
.iconPalIndex = 0,
FOOTPRINT(Castform)
+ OVERWORLD(
+ sPicTable_CastformSunny,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_CastformSunny,
+ gShinyOverworldPalette_CastformSunny
+ )
.levelUpLearnset = sCastformLevelUpLearnset,
.teachableLearnset = sCastformTeachableLearnset,
+ .eggMoveLearnset = sCastformEggMoveLearnset,
.formSpeciesIdTable = sCastformFormSpeciesIdTable,
.formChangeTable = sCastformFormChangeTable,
},
@@ -7050,8 +7957,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_CastformRainy,
.iconPalIndex = 0,
FOOTPRINT(Castform)
+ OVERWORLD(
+ sPicTable_CastformRainy,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_CastformRainy,
+ gShinyOverworldPalette_CastformRainy
+ )
.levelUpLearnset = sCastformLevelUpLearnset,
.teachableLearnset = sCastformTeachableLearnset,
+ .eggMoveLearnset = sCastformEggMoveLearnset,
.formSpeciesIdTable = sCastformFormSpeciesIdTable,
.formChangeTable = sCastformFormChangeTable,
},
@@ -7107,8 +8023,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_CastformSnowy,
.iconPalIndex = 0,
FOOTPRINT(Castform)
+ OVERWORLD(
+ sPicTable_CastformSnowy,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_CastformSnowy,
+ gShinyOverworldPalette_CastformSnowy
+ )
.levelUpLearnset = sCastformLevelUpLearnset,
.teachableLearnset = sCastformTeachableLearnset,
+ .eggMoveLearnset = sCastformEggMoveLearnset,
.formSpeciesIdTable = sCastformFormSpeciesIdTable,
.formChangeTable = sCastformFormChangeTable,
},
@@ -7168,8 +8093,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Kecleon,
.iconPalIndex = 1,
FOOTPRINT(Kecleon)
+ OVERWORLD(
+ sPicTable_Kecleon,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Kecleon,
+ gShinyOverworldPalette_Kecleon
+ )
.levelUpLearnset = sKecleonLevelUpLearnset,
.teachableLearnset = sKecleonTeachableLearnset,
+ .eggMoveLearnset = sKecleonEggMoveLearnset,
},
#endif //P_FAMILY_KECLEON
@@ -7228,8 +8162,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Shuppet,
.iconPalIndex = 0,
FOOTPRINT(Shuppet)
+ OVERWORLD(
+ sPicTable_Shuppet,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Shuppet,
+ gShinyOverworldPalette_Shuppet
+ )
.levelUpLearnset = sShuppetLevelUpLearnset,
.teachableLearnset = sShuppetTeachableLearnset,
+ .eggMoveLearnset = sShuppetEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 37, SPECIES_BANETTE}),
},
@@ -7286,6 +8229,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Banette,
.iconPalIndex = 0,
FOOTPRINT(Banette)
+ OVERWORLD(
+ sPicTable_Banette,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Banette,
+ gShinyOverworldPalette_Banette
+ )
.levelUpLearnset = sBanetteLevelUpLearnset,
.teachableLearnset = sBanetteTeachableLearnset,
.formSpeciesIdTable = sBanetteFormSpeciesIdTable,
@@ -7407,8 +8358,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Duskull,
.iconPalIndex = 0,
FOOTPRINT(Duskull)
+ OVERWORLD(
+ sPicTable_Duskull,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Duskull,
+ gShinyOverworldPalette_Duskull
+ )
.levelUpLearnset = sDuskullLevelUpLearnset,
.teachableLearnset = sDuskullTeachableLearnset,
+ .eggMoveLearnset = sDuskullEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 37, SPECIES_DUSCLOPS}),
},
@@ -7467,6 +8427,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Dusclops,
.iconPalIndex = 0,
FOOTPRINT(Dusclops)
+ OVERWORLD(
+ sPicTable_Dusclops,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Dusclops,
+ gShinyOverworldPalette_Dusclops
+ )
.levelUpLearnset = sDusclopsLevelUpLearnset,
.teachableLearnset = sDusclopsTeachableLearnset,
.evolutions = EVOLUTION({EVO_TRADE_ITEM, ITEM_REAPER_CLOTH, SPECIES_DUSKNOIR},
@@ -7535,6 +8503,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Dusknoir,
.iconPalIndex = 2,
FOOTPRINT(Dusknoir)
+ OVERWORLD(
+ sPicTable_Dusknoir,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Dusknoir,
+ gShinyOverworldPalette_Dusknoir
+ )
.levelUpLearnset = sDusknoirLevelUpLearnset,
.teachableLearnset = sDusknoirTeachableLearnset,
},
@@ -7594,8 +8570,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Tropius,
.iconPalIndex = 1,
FOOTPRINT(Tropius)
+ OVERWORLD(
+ sPicTable_Tropius,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Tropius,
+ gShinyOverworldPalette_Tropius
+ )
.levelUpLearnset = sTropiusLevelUpLearnset,
.teachableLearnset = sTropiusTeachableLearnset,
+ .eggMoveLearnset = sTropiusEggMoveLearnset,
},
#endif //P_FAMILY_TROPIUS
@@ -7650,8 +8635,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Chingling,
.iconPalIndex = 1,
FOOTPRINT(Chingling)
+ OVERWORLD(
+ sPicTable_Chingling,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Chingling,
+ gShinyOverworldPalette_Chingling
+ )
.levelUpLearnset = sChinglingLevelUpLearnset,
.teachableLearnset = sChinglingTeachableLearnset,
+ .eggMoveLearnset = sChinglingEggMoveLearnset,
.evolutions = EVOLUTION({EVO_FRIENDSHIP_NIGHT, 0, SPECIES_CHIMECHO}),
},
#endif //P_GEN_4_CROSS_EVOS
@@ -7713,8 +8707,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Chimecho,
.iconPalIndex = 0,
FOOTPRINT(Chimecho)
+ OVERWORLD(
+ sPicTable_Chimecho,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Chimecho,
+ gShinyOverworldPalette_Chimecho
+ )
.levelUpLearnset = sChimechoLevelUpLearnset,
.teachableLearnset = sChimechoTeachableLearnset,
+ .eggMoveLearnset = sChimechoEggMoveLearnset,
},
#endif //P_FAMILY_CHIMECHO
@@ -7773,8 +8776,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Absol,
.iconPalIndex = 0,
FOOTPRINT(Absol)
+ OVERWORLD(
+ sPicTable_Absol,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Absol,
+ gShinyOverworldPalette_Absol
+ )
.levelUpLearnset = sAbsolLevelUpLearnset,
.teachableLearnset = sAbsolTeachableLearnset,
+ .eggMoveLearnset = sAbsolEggMoveLearnset,
.formSpeciesIdTable = sAbsolFormSpeciesIdTable,
.formChangeTable = sAbsolFormChangeTable,
},
@@ -7832,6 +8844,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.isMegaEvolution = TRUE,
.levelUpLearnset = sAbsolLevelUpLearnset,
.teachableLearnset = sAbsolTeachableLearnset,
+ .eggMoveLearnset = sAbsolEggMoveLearnset,
.formSpeciesIdTable = sAbsolFormSpeciesIdTable,
.formChangeTable = sAbsolFormChangeTable,
},
@@ -7893,8 +8906,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Snorunt,
.iconPalIndex = 2,
FOOTPRINT(Snorunt)
+ OVERWORLD(
+ sPicTable_Snorunt,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Snorunt,
+ gShinyOverworldPalette_Snorunt
+ )
.levelUpLearnset = sSnoruntLevelUpLearnset,
.teachableLearnset = sSnoruntTeachableLearnset,
+ .eggMoveLearnset = sSnoruntEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 42, SPECIES_GLALIE},
{EVO_ITEM_FEMALE, ITEM_DAWN_STONE, SPECIES_FROSLASS}),
},
@@ -7952,6 +8974,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Glalie,
.iconPalIndex = 0,
FOOTPRINT(Glalie)
+ OVERWORLD(
+ sPicTable_Glalie,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Glalie,
+ gShinyOverworldPalette_Glalie
+ )
.levelUpLearnset = sGlalieLevelUpLearnset,
.teachableLearnset = sGlalieTeachableLearnset,
.formSpeciesIdTable = sGlalieFormSpeciesIdTable,
@@ -8065,6 +9095,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Froslass,
.iconPalIndex = 0,
FOOTPRINT(Froslass)
+ OVERWORLD(
+ sPicTable_Froslass,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Froslass,
+ gShinyOverworldPalette_Froslass
+ )
.levelUpLearnset = sFroslassLevelUpLearnset,
.teachableLearnset = sFroslassTeachableLearnset,
},
@@ -8125,8 +9163,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Spheal,
.iconPalIndex = 2,
FOOTPRINT(Spheal)
+ OVERWORLD(
+ sPicTable_Spheal,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Spheal,
+ gShinyOverworldPalette_Spheal
+ )
.levelUpLearnset = sSphealLevelUpLearnset,
.teachableLearnset = sSphealTeachableLearnset,
+ .eggMoveLearnset = sSphealEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 26, SPECIES_SEALEO}),
},
@@ -8182,6 +9229,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Sealeo,
.iconPalIndex = 2,
FOOTPRINT(Sealeo)
+ OVERWORLD(
+ sPicTable_Sealeo,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Sealeo,
+ gShinyOverworldPalette_Sealeo
+ )
.levelUpLearnset = sSealeoLevelUpLearnset,
.teachableLearnset = sSealeoTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 54, SPECIES_WALREIN}),
@@ -8245,6 +9300,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Walrein,
.iconPalIndex = 0,
FOOTPRINT(Walrein)
+ OVERWORLD(
+ sPicTable_Walrein,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Walrein,
+ gShinyOverworldPalette_Walrein
+ )
.levelUpLearnset = sWalreinLevelUpLearnset,
.teachableLearnset = sWalreinTeachableLearnset,
},
@@ -8301,8 +9364,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Clamperl,
.iconPalIndex = 0,
FOOTPRINT(Clamperl)
+ OVERWORLD(
+ sPicTable_Clamperl,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SPOT,
+ gOverworldPalette_Clamperl,
+ gShinyOverworldPalette_Clamperl
+ )
.levelUpLearnset = sClamperlLevelUpLearnset,
.teachableLearnset = sClamperlTeachableLearnset,
+ .eggMoveLearnset = sClamperlEggMoveLearnset,
.evolutions = EVOLUTION({EVO_TRADE_ITEM, ITEM_DEEP_SEA_TOOTH, SPECIES_HUNTAIL},
{EVO_TRADE_ITEM, ITEM_DEEP_SEA_SCALE, SPECIES_GOREBYSS},
{EVO_ITEM, ITEM_DEEP_SEA_TOOTH, SPECIES_HUNTAIL},
@@ -8359,6 +9431,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Huntail,
.iconPalIndex = 0,
FOOTPRINT(Huntail)
+ OVERWORLD(
+ sPicTable_Huntail,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SLITHER,
+ gOverworldPalette_Huntail,
+ gShinyOverworldPalette_Huntail
+ )
.levelUpLearnset = sHuntailLevelUpLearnset,
.teachableLearnset = sHuntailTeachableLearnset,
},
@@ -8412,6 +9492,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Gorebyss,
.iconPalIndex = 0,
FOOTPRINT(Gorebyss)
+ OVERWORLD(
+ sPicTable_Gorebyss,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SLITHER,
+ gOverworldPalette_Gorebyss,
+ gShinyOverworldPalette_Gorebyss
+ )
.levelUpLearnset = sGorebyssLevelUpLearnset,
.teachableLearnset = sGorebyssTeachableLearnset,
},
@@ -8472,8 +9560,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Relicanth,
.iconPalIndex = 2,
FOOTPRINT(Relicanth)
+ OVERWORLD(
+ sPicTable_Relicanth,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Relicanth,
+ gShinyOverworldPalette_Relicanth
+ )
.levelUpLearnset = sRelicanthLevelUpLearnset,
.teachableLearnset = sRelicanthTeachableLearnset,
+ .eggMoveLearnset = sRelicanthEggMoveLearnset,
},
#endif //P_FAMILY_RELICANTH
@@ -8527,8 +9624,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Luvdisc,
.iconPalIndex = 0,
FOOTPRINT(Luvdisc)
+ OVERWORLD(
+ sPicTable_Luvdisc,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_SPOT,
+ gOverworldPalette_Luvdisc,
+ gShinyOverworldPalette_Luvdisc
+ )
.levelUpLearnset = sLuvdiscLevelUpLearnset,
.teachableLearnset = sLuvdiscTeachableLearnset,
+ .eggMoveLearnset = sLuvdiscEggMoveLearnset,
},
#endif //P_FAMILY_LUVDISC
@@ -8582,8 +9688,17 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Bagon,
.iconPalIndex = 0,
FOOTPRINT(Bagon)
+ OVERWORLD(
+ sPicTable_Bagon,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Bagon,
+ gShinyOverworldPalette_Bagon
+ )
.levelUpLearnset = sBagonLevelUpLearnset,
.teachableLearnset = sBagonTeachableLearnset,
+ .eggMoveLearnset = sBagonEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_SHELGON}),
},
@@ -8636,6 +9751,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Shelgon,
.iconPalIndex = 2,
FOOTPRINT(Shelgon)
+ OVERWORLD(
+ sPicTable_Shelgon,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Shelgon,
+ gShinyOverworldPalette_Shelgon
+ )
.levelUpLearnset = sShelgonLevelUpLearnset,
.teachableLearnset = sShelgonTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 50, SPECIES_SALAMENCE}),
@@ -8697,6 +9820,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Salamence,
.iconPalIndex = 0,
FOOTPRINT(Salamence)
+ OVERWORLD(
+ sPicTable_Salamence,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Salamence,
+ gShinyOverworldPalette_Salamence
+ )
.levelUpLearnset = sSalamenceLevelUpLearnset,
.teachableLearnset = sSalamenceTeachableLearnset,
.formSpeciesIdTable = sSalamenceFormSpeciesIdTable,
@@ -8813,6 +9944,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Beldum,
.iconPalIndex = 0,
FOOTPRINT(Beldum)
+ OVERWORLD(
+ sPicTable_Beldum,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Beldum,
+ gShinyOverworldPalette_Beldum
+ )
.tmIlliterate = TRUE,
.levelUpLearnset = sBeldumLevelUpLearnset,
.teachableLearnset = sBeldumTeachableLearnset,
@@ -8868,6 +10007,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Metang,
.iconPalIndex = 0,
FOOTPRINT(Metang)
+ OVERWORLD(
+ sPicTable_Metang,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Metang,
+ gShinyOverworldPalette_Metang
+ )
.levelUpLearnset = sMetangLevelUpLearnset,
.teachableLearnset = sMetangTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 45, SPECIES_METAGROSS}),
@@ -8928,6 +10075,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Metagross,
.iconPalIndex = 0,
FOOTPRINT(Metagross)
+ OVERWORLD(
+ sPicTable_Metagross,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Metagross,
+ gShinyOverworldPalette_Metagross
+ )
.levelUpLearnset = sMetagrossLevelUpLearnset,
.teachableLearnset = sMetagrossTeachableLearnset,
.formSpeciesIdTable = sMetagrossFormSpeciesIdTable,
@@ -9049,6 +10204,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Regirock,
.iconPalIndex = 2,
FOOTPRINT(Regirock)
+ OVERWORLD(
+ sPicTable_Regirock,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Regirock,
+ gShinyOverworldPalette_Regirock
+ )
.isLegendary = TRUE,
.levelUpLearnset = sRegirockLevelUpLearnset,
.teachableLearnset = sRegirockTeachableLearnset,
@@ -9110,6 +10273,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Regice,
.iconPalIndex = 0,
FOOTPRINT(Regice)
+ OVERWORLD(
+ sPicTable_Regice,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Regice,
+ gShinyOverworldPalette_Regice
+ )
.isLegendary = TRUE,
.levelUpLearnset = sRegiceLevelUpLearnset,
.teachableLearnset = sRegiceTeachableLearnset,
@@ -9172,6 +10343,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Registeel,
.iconPalIndex = 2,
FOOTPRINT(Registeel)
+ OVERWORLD(
+ sPicTable_Registeel,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Registeel,
+ gShinyOverworldPalette_Registeel
+ )
.isLegendary = TRUE,
.levelUpLearnset = sRegisteelLevelUpLearnset,
.teachableLearnset = sRegisteelTeachableLearnset,
@@ -9234,6 +10413,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Latias,
.iconPalIndex = 0,
FOOTPRINT(Latias)
+ OVERWORLD(
+ sPicTable_Latias,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Latias,
+ gShinyOverworldPalette_Latias
+ )
.isLegendary = TRUE,
.levelUpLearnset = sLatiasLevelUpLearnset,
.teachableLearnset = sLatiasTeachableLearnset,
@@ -9357,6 +10544,14 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Latios,
.iconPalIndex = 0,
FOOTPRINT(Latios)
+ OVERWORLD(
+ sPicTable_Latios,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Latios,
+ gShinyOverworldPalette_Latios
+ )
.isLegendary = TRUE,
.levelUpLearnset = sLatiosLevelUpLearnset,
.teachableLearnset = sLatiosTeachableLearnset,
@@ -9480,7 +10675,16 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Kyogre,
.iconPalIndex = 2,
FOOTPRINT(Kyogre)
+ OVERWORLD(
+ sPicTable_Kyogre,
+ SIZE_64x64,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Kyogre,
+ gShinyOverworldPalette_Kyogre
+ )
.isLegendary = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sKyogreLevelUpLearnset,
.teachableLearnset = sKyogreTeachableLearnset,
.formSpeciesIdTable = sKyogreFormSpeciesIdTable,
@@ -9537,6 +10741,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
FOOTPRINT(Kyogre)
.isLegendary = TRUE,
.isPrimalReversion = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sKyogreLevelUpLearnset,
.teachableLearnset = sKyogreTeachableLearnset,
.formSpeciesIdTable = sKyogreFormSpeciesIdTable,
@@ -9600,7 +10805,16 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Groudon,
.iconPalIndex = 0,
FOOTPRINT(Groudon)
+ OVERWORLD(
+ sPicTable_Groudon,
+ SIZE_64x64,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Groudon,
+ gShinyOverworldPalette_Groudon
+ )
.isLegendary = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sGroudonLevelUpLearnset,
.teachableLearnset = sGroudonTeachableLearnset,
.formSpeciesIdTable = sGroudonFormSpeciesIdTable,
@@ -9658,6 +10872,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
FOOTPRINT(Groudon)
.isLegendary = TRUE,
.isPrimalReversion = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sGroudonLevelUpLearnset,
.teachableLearnset = sGroudonTeachableLearnset,
.formSpeciesIdTable = sGroudonFormSpeciesIdTable,
@@ -9724,7 +10939,16 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Rayquaza,
.iconPalIndex = 1,
FOOTPRINT(Rayquaza)
+ OVERWORLD(
+ sPicTable_Rayquaza,
+ SIZE_64x64,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Rayquaza,
+ gShinyOverworldPalette_Rayquaza
+ )
.isLegendary = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sRayquazaLevelUpLearnset,
.teachableLearnset = sRayquazaTeachableLearnset,
.formSpeciesIdTable = sRayquazaFormSpeciesIdTable,
@@ -9784,6 +11008,7 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
FOOTPRINT(Rayquaza)
.isLegendary = TRUE,
.isMegaEvolution = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sRayquazaLevelUpLearnset,
.teachableLearnset = sRayquazaTeachableLearnset,
.formSpeciesIdTable = sRayquazaFormSpeciesIdTable,
@@ -9850,7 +11075,16 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_Jirachi,
.iconPalIndex = 0,
FOOTPRINT(Jirachi)
+ OVERWORLD(
+ sPicTable_Jirachi,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_Jirachi,
+ gShinyOverworldPalette_Jirachi
+ )
.isMythical = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sJirachiLevelUpLearnset,
.teachableLearnset = sJirachiTeachableLearnset,
},
@@ -9911,7 +11145,16 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_DeoxysNormal,
.iconPalIndex = 0,
FOOTPRINT(Deoxys)
+ OVERWORLD(
+ sPicTable_DeoxysNormal,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_DeoxysNormal,
+ gShinyOverworldPalette_DeoxysNormal
+ )
.isMythical = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sDeoxysNormalLevelUpLearnset,
.teachableLearnset = sDeoxysNormalTeachableLearnset,
.formSpeciesIdTable = sDeoxysFormSpeciesIdTable,
@@ -9963,7 +11206,16 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_DeoxysAttack,
.iconPalIndex = 0,
FOOTPRINT(Deoxys)
+ OVERWORLD(
+ sPicTable_DeoxysAttack,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_DeoxysAttack,
+ gShinyOverworldPalette_DeoxysAttack
+ )
.isMythical = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sDeoxysAttackLevelUpLearnset,
.teachableLearnset = sDeoxysAttackTeachableLearnset,
.formSpeciesIdTable = sDeoxysFormSpeciesIdTable,
@@ -10015,7 +11267,16 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_DeoxysDefense,
.iconPalIndex = 0,
FOOTPRINT(Deoxys)
+ OVERWORLD(
+ sPicTable_DeoxysDefense,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_DeoxysDefense,
+ gShinyOverworldPalette_DeoxysDefense
+ )
.isMythical = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sDeoxysDefenseLevelUpLearnset,
.teachableLearnset = sDeoxysDefenseTeachableLearnset,
.formSpeciesIdTable = sDeoxysFormSpeciesIdTable,
@@ -10067,7 +11328,16 @@ const struct SpeciesInfo gSpeciesInfoGen3[] =
.iconSprite = gMonIcon_DeoxysSpeed,
.iconPalIndex = 0,
FOOTPRINT(Deoxys)
+ OVERWORLD(
+ sPicTable_DeoxysSpeed,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_DeoxysSpeed,
+ gShinyOverworldPalette_DeoxysSpeed
+ )
.isMythical = TRUE,
+ .isFrontierBanned = TRUE,
.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 a8795d698e5d..6b37bb2065f1 100644
--- a/src/data/pokemon/species_info/gen_4_families.h
+++ b/src/data/pokemon/species_info/gen_4_families.h
@@ -52,8 +52,17 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Turtwig,
.iconPalIndex = 1,
FOOTPRINT(Turtwig)
+ OVERWORLD(
+ sPicTable_Turtwig,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Turtwig,
+ gShinyOverworldPalette_Turtwig
+ )
.levelUpLearnset = sTurtwigLevelUpLearnset,
.teachableLearnset = sTurtwigTeachableLearnset,
+ .eggMoveLearnset = sTurtwigEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 18, SPECIES_GROTLE}),
},
@@ -106,6 +115,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Grotle,
.iconPalIndex = 1,
FOOTPRINT(Grotle)
+ OVERWORLD(
+ sPicTable_Grotle,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Grotle,
+ gShinyOverworldPalette_Grotle
+ )
.levelUpLearnset = sGrotleLevelUpLearnset,
.teachableLearnset = sGrotleTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 32, SPECIES_TORTERRA}),
@@ -167,6 +184,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Torterra,
.iconPalIndex = 1,
FOOTPRINT(Torterra)
+ OVERWORLD(
+ sPicTable_Torterra,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Torterra,
+ gShinyOverworldPalette_Torterra
+ )
.levelUpLearnset = sTorterraLevelUpLearnset,
.teachableLearnset = sTorterraTeachableLearnset,
},
@@ -222,8 +247,17 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Chimchar,
.iconPalIndex = 1,
FOOTPRINT(Chimchar)
+ OVERWORLD(
+ sPicTable_Chimchar,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Chimchar,
+ gShinyOverworldPalette_Chimchar
+ )
.levelUpLearnset = sChimcharLevelUpLearnset,
.teachableLearnset = sChimcharTeachableLearnset,
+ .eggMoveLearnset = sChimcharEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 14, SPECIES_MONFERNO}),
},
@@ -277,6 +311,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Monferno,
.iconPalIndex = 0,
FOOTPRINT(Monferno)
+ OVERWORLD(
+ sPicTable_Monferno,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Monferno,
+ gShinyOverworldPalette_Monferno
+ )
.levelUpLearnset = sMonfernoLevelUpLearnset,
.teachableLearnset = sMonfernoTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 36, SPECIES_INFERNAPE}),
@@ -338,6 +380,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Infernape,
.iconPalIndex = 0,
FOOTPRINT(Infernape)
+ OVERWORLD(
+ sPicTable_Infernape,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Infernape,
+ gShinyOverworldPalette_Infernape
+ )
.levelUpLearnset = sInfernapeLevelUpLearnset,
.teachableLearnset = sInfernapeTeachableLearnset,
},
@@ -396,8 +446,17 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Piplup,
.iconPalIndex = 0,
FOOTPRINT(Piplup)
+ OVERWORLD(
+ sPicTable_Piplup,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Piplup,
+ gShinyOverworldPalette_Piplup
+ )
.levelUpLearnset = sPiplupLevelUpLearnset,
.teachableLearnset = sPiplupTeachableLearnset,
+ .eggMoveLearnset = sPiplupEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 16, SPECIES_PRINPLUP}),
},
@@ -453,6 +512,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Prinplup,
.iconPalIndex = 0,
FOOTPRINT(Prinplup)
+ OVERWORLD(
+ sPicTable_Prinplup,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Prinplup,
+ gShinyOverworldPalette_Prinplup
+ )
.levelUpLearnset = sPrinplupLevelUpLearnset,
.teachableLearnset = sPrinplupTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 36, SPECIES_EMPOLEON}),
@@ -516,6 +583,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Empoleon,
.iconPalIndex = 0,
FOOTPRINT(Empoleon)
+ OVERWORLD(
+ sPicTable_Empoleon,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Empoleon,
+ gShinyOverworldPalette_Empoleon
+ )
.levelUpLearnset = sEmpoleonLevelUpLearnset,
.teachableLearnset = sEmpoleonTeachableLearnset,
},
@@ -578,8 +653,17 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Starly,
.iconPalIndex = 0,
FOOTPRINT(Starly)
+ OVERWORLD(
+ sPicTable_Starly,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Starly,
+ gShinyOverworldPalette_Starly
+ )
.levelUpLearnset = sStarlyLevelUpLearnset,
.teachableLearnset = sStarlyTeachableLearnset,
+ .eggMoveLearnset = sStarlyEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 14, SPECIES_STARAVIA}),
},
@@ -635,6 +719,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Staravia,
.iconPalIndex = 0,
FOOTPRINT(Staravia)
+ OVERWORLD(
+ sPicTable_Staravia,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Staravia,
+ gShinyOverworldPalette_Staravia
+ )
.levelUpLearnset = sStaraviaLevelUpLearnset,
.teachableLearnset = sStaraviaTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 34, SPECIES_STARAPTOR}),
@@ -698,6 +790,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Staraptor,
.iconPalIndex = 0,
FOOTPRINT(Staraptor)
+ OVERWORLD(
+ sPicTable_Staraptor,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Staraptor,
+ gShinyOverworldPalette_Staraptor
+ )
.levelUpLearnset = sStaraptorLevelUpLearnset,
.teachableLearnset = sStaraptorTeachableLearnset,
},
@@ -756,8 +856,17 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Bidoof,
.iconPalIndex = 2,
FOOTPRINT(Bidoof)
+ OVERWORLD(
+ sPicTable_Bidoof,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Bidoof,
+ gShinyOverworldPalette_Bidoof
+ )
.levelUpLearnset = sBidoofLevelUpLearnset,
.teachableLearnset = sBidoofTeachableLearnset,
+ .eggMoveLearnset = sBidoofEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 15, SPECIES_BIBAREL}),
},
@@ -811,6 +920,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Bibarel,
.iconPalIndex = 2,
FOOTPRINT(Bibarel)
+ OVERWORLD(
+ sPicTable_Bibarel,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Bibarel,
+ gShinyOverworldPalette_Bibarel
+ )
.levelUpLearnset = sBibarelLevelUpLearnset,
.teachableLearnset = sBibarelTeachableLearnset,
},
@@ -870,6 +987,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Kricketot,
.iconPalIndex = 2,
FOOTPRINT(Kricketot)
+ OVERWORLD(
+ sPicTable_Kricketot,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Kricketot,
+ gShinyOverworldPalette_Kricketot
+ )
.tmIlliterate = TRUE,
.levelUpLearnset = sKricketotLevelUpLearnset,
.teachableLearnset = sKricketotTeachableLearnset,
@@ -929,6 +1054,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Kricketune,
.iconPalIndex = 2,
FOOTPRINT(Kricketune)
+ OVERWORLD(
+ sPicTable_Kricketune,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Kricketune,
+ gShinyOverworldPalette_Kricketune
+ )
.levelUpLearnset = sKricketuneLevelUpLearnset,
.teachableLearnset = sKricketuneTeachableLearnset,
},
@@ -987,8 +1120,17 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Shinx,
.iconPalIndex = 0,
FOOTPRINT(Shinx)
+ OVERWORLD(
+ sPicTable_Shinx,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Shinx,
+ gShinyOverworldPalette_Shinx
+ )
.levelUpLearnset = sShinxLevelUpLearnset,
.teachableLearnset = sShinxTeachableLearnset,
+ .eggMoveLearnset = sShinxEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 15, SPECIES_LUXIO}),
},
@@ -1044,6 +1186,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Luxio,
.iconPalIndex = 0,
FOOTPRINT(Luxio)
+ OVERWORLD(
+ sPicTable_Luxio,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Luxio,
+ gShinyOverworldPalette_Luxio
+ )
.levelUpLearnset = sLuxioLevelUpLearnset,
.teachableLearnset = sLuxioTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_LUXRAY}),
@@ -1107,6 +1257,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Luxray,
.iconPalIndex = 0,
FOOTPRINT(Luxray)
+ OVERWORLD(
+ sPicTable_Luxray,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Luxray,
+ gShinyOverworldPalette_Luxray
+ )
.levelUpLearnset = sLuxrayLevelUpLearnset,
.teachableLearnset = sLuxrayTeachableLearnset,
},
@@ -1161,8 +1319,17 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Cranidos,
.iconPalIndex = 0,
FOOTPRINT(Cranidos)
+ OVERWORLD(
+ sPicTable_Cranidos,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Cranidos,
+ gShinyOverworldPalette_Cranidos
+ )
.levelUpLearnset = sCranidosLevelUpLearnset,
.teachableLearnset = sCranidosTeachableLearnset,
+ .eggMoveLearnset = sCranidosEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_RAMPARDOS}),
},
@@ -1214,6 +1381,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Rampardos,
.iconPalIndex = 0,
FOOTPRINT(Rampardos)
+ OVERWORLD(
+ sPicTable_Rampardos,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Rampardos,
+ gShinyOverworldPalette_Rampardos
+ )
.levelUpLearnset = sRampardosLevelUpLearnset,
.teachableLearnset = sRampardosTeachableLearnset,
},
@@ -1268,8 +1443,17 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Shieldon,
.iconPalIndex = 1,
FOOTPRINT(Shieldon)
+ OVERWORLD(
+ sPicTable_Shieldon,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Shieldon,
+ gShinyOverworldPalette_Shieldon
+ )
.levelUpLearnset = sShieldonLevelUpLearnset,
.teachableLearnset = sShieldonTeachableLearnset,
+ .eggMoveLearnset = sShieldonEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_BASTIODON}),
},
@@ -1321,6 +1505,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Bastiodon,
.iconPalIndex = 1,
FOOTPRINT(Bastiodon)
+ OVERWORLD(
+ sPicTable_Bastiodon,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Bastiodon,
+ gShinyOverworldPalette_Bastiodon
+ )
.levelUpLearnset = sBastiodonLevelUpLearnset,
.teachableLearnset = sBastiodonTeachableLearnset,
},
@@ -1376,6 +1568,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_BurmyPlantCloak,
.iconPalIndex = 1,
FOOTPRINT(Burmy)
+ OVERWORLD(
+ sPicTable_BurmyPlantCloak,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_BurmyPlantCloak,
+ gShinyOverworldPalette_BurmyPlantCloak
+ )
.tmIlliterate = TRUE,
.levelUpLearnset = sBurmyLevelUpLearnset,
.teachableLearnset = sBurmyTeachableLearnset,
@@ -1434,6 +1634,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_BurmySandyCloak,
.iconPalIndex = 1,
FOOTPRINT(Burmy)
+ OVERWORLD(
+ sPicTable_BurmySandyCloak,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_BurmySandyCloak,
+ gShinyOverworldPalette_BurmySandyCloak
+ )
.tmIlliterate = TRUE,
.levelUpLearnset = sBurmyLevelUpLearnset,
.teachableLearnset = sBurmyTeachableLearnset,
@@ -1492,6 +1700,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_BurmyTrashCloak,
.iconPalIndex = 0,
FOOTPRINT(Burmy)
+ OVERWORLD(
+ sPicTable_BurmyTrashCloak,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_BurmyTrashCloak,
+ gShinyOverworldPalette_BurmyTrashCloak
+ )
.tmIlliterate = TRUE,
.levelUpLearnset = sBurmyLevelUpLearnset,
.teachableLearnset = sBurmyTeachableLearnset,
@@ -1551,6 +1767,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_WormadamPlantCloak,
.iconPalIndex = 1,
FOOTPRINT(Wormadam)
+ OVERWORLD(
+ sPicTable_WormadamPlantCloak,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_WormadamPlantCloak,
+ gShinyOverworldPalette_WormadamPlantCloak
+ )
.levelUpLearnset = sWormadamPlantCloakLevelUpLearnset,
.teachableLearnset = sWormadamPlantCloakTeachableLearnset,
.formSpeciesIdTable = sWormadamFormSpeciesIdTable,
@@ -1606,6 +1830,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_WormadamSandyCloak,
.iconPalIndex = 1,
FOOTPRINT(Wormadam)
+ OVERWORLD(
+ sPicTable_WormadamSandyCloak,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_WormadamSandyCloak,
+ gShinyOverworldPalette_WormadamSandyCloak
+ )
.levelUpLearnset = sWormadamSandyCloakLevelUpLearnset,
.teachableLearnset = sWormadamSandyCloakTeachableLearnset,
.formSpeciesIdTable = sWormadamFormSpeciesIdTable,
@@ -1662,6 +1894,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_WormadamTrashCloak,
.iconPalIndex = 0,
FOOTPRINT(Wormadam)
+ OVERWORLD(
+ sPicTable_WormadamTrashCloak,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_WormadamTrashCloak,
+ gShinyOverworldPalette_WormadamTrashCloak
+ )
.levelUpLearnset = sWormadamTrashCloakLevelUpLearnset,
.teachableLearnset = sWormadamTrashCloakTeachableLearnset,
.formSpeciesIdTable = sWormadamFormSpeciesIdTable,
@@ -1714,6 +1954,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Mothim, \
.iconPalIndex = 0, \
FOOTPRINT(Mothim) \
+ OVERWORLD( \
+ sPicTable_Mothim, \
+ SIZE_32x32, \
+ SHADOW_SIZE_M, \
+ TRACKS_FOOT, \
+ gOverworldPalette_Mothim, \
+ gShinyOverworldPalette_Mothim \
+ ) \
.levelUpLearnset = sMothimLevelUpLearnset, \
.teachableLearnset = sMothimTeachableLearnset, \
.formSpeciesIdTable = sMothimFormSpeciesIdTable, \
@@ -1777,6 +2025,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Combee,
.iconPalIndex = 0,
FOOTPRINT(Combee)
+ OVERWORLD(
+ sPicTable_Combee,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Combee,
+ gShinyOverworldPalette_Combee
+ )
.tmIlliterate = TRUE,
.levelUpLearnset = sCombeeLevelUpLearnset,
.teachableLearnset = sCombeeTeachableLearnset,
@@ -1834,6 +2090,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Vespiquen,
.iconPalIndex = 0,
FOOTPRINT(Vespiquen)
+ OVERWORLD(
+ sPicTable_Vespiquen,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Vespiquen,
+ gShinyOverworldPalette_Vespiquen
+ )
.levelUpLearnset = sVespiquenLevelUpLearnset,
.teachableLearnset = sVespiquenTeachableLearnset,
},
@@ -1890,8 +2154,17 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Pachirisu,
.iconPalIndex = 0,
FOOTPRINT(Pachirisu)
+ OVERWORLD(
+ sPicTable_Pachirisu,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Pachirisu,
+ gShinyOverworldPalette_Pachirisu
+ )
.levelUpLearnset = sPachirisuLevelUpLearnset,
.teachableLearnset = sPachirisuTeachableLearnset,
+ .eggMoveLearnset = sPachirisuEggMoveLearnset,
},
#endif //P_FAMILY_PACHIRISU
@@ -1946,8 +2219,17 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Buizel,
.iconPalIndex = 0,
FOOTPRINT(Buizel)
+ OVERWORLD(
+ sPicTable_Buizel,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Buizel,
+ gShinyOverworldPalette_Buizel
+ )
.levelUpLearnset = sBuizelLevelUpLearnset,
.teachableLearnset = sBuizelTeachableLearnset,
+ .eggMoveLearnset = sBuizelEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 26, SPECIES_FLOATZEL}),
},
@@ -2001,6 +2283,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Floatzel,
.iconPalIndex = 0,
FOOTPRINT(Floatzel)
+ OVERWORLD(
+ sPicTable_Floatzel,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Floatzel,
+ gShinyOverworldPalette_Floatzel
+ )
.levelUpLearnset = sFloatzelLevelUpLearnset,
.teachableLearnset = sFloatzelTeachableLearnset,
},
@@ -2056,8 +2346,17 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Cherubi,
.iconPalIndex = 1,
FOOTPRINT(Cherubi)
+ OVERWORLD(
+ sPicTable_Cherubi,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Cherubi,
+ gShinyOverworldPalette_Cherubi
+ )
.levelUpLearnset = sCherubiLevelUpLearnset,
.teachableLearnset = sCherubiTeachableLearnset,
+ .eggMoveLearnset = sCherubiEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 25, SPECIES_CHERRIM_OVERCAST}),
},
@@ -2110,6 +2409,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_CherrimOvercast,
.iconPalIndex = 0,
FOOTPRINT(Cherrim)
+ OVERWORLD(
+ sPicTable_CherrimOvercast,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_CherrimOvercast,
+ gShinyOverworldPalette_CherrimOvercast
+ )
.levelUpLearnset = sCherrimLevelUpLearnset,
.teachableLearnset = sCherrimTeachableLearnset,
.formSpeciesIdTable = sCherrimFormSpeciesIdTable,
@@ -2221,8 +2528,17 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_ShellosWestSea,
.iconPalIndex = 0,
FOOTPRINT(Shellos)
+ OVERWORLD(
+ sPicTable_ShellosWestSea,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_ShellosWestSea,
+ gShinyOverworldPalette_ShellosWestSea
+ )
.levelUpLearnset = sShellosLevelUpLearnset,
.teachableLearnset = sShellosTeachableLearnset,
+ .eggMoveLearnset = sShellosEggMoveLearnset,
.formSpeciesIdTable = sShellosFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_GASTRODON_WEST_SEA}),
},
@@ -2275,8 +2591,17 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_ShellosEastSea,
.iconPalIndex = 0,
FOOTPRINT(Shellos)
+ OVERWORLD(
+ sPicTable_ShellosEastSea,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_ShellosEastSea,
+ gShinyOverworldPalette_ShellosEastSea
+ )
.levelUpLearnset = sShellosLevelUpLearnset,
.teachableLearnset = sShellosTeachableLearnset,
+ .eggMoveLearnset = sShellosEggMoveLearnset,
.formSpeciesIdTable = sShellosFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_GASTRODON_EAST_SEA}),
},
@@ -2329,6 +2654,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_GastrodonWestSea,
.iconPalIndex = 0,
FOOTPRINT(Gastrodon)
+ OVERWORLD(
+ sPicTable_GastrodonWestSea,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_GastrodonWestSea,
+ gShinyOverworldPalette_GastrodonWestSea
+ )
.levelUpLearnset = sGastrodonLevelUpLearnset,
.teachableLearnset = sGastrodonTeachableLearnset,
.formSpeciesIdTable = sGastrodonFormSpeciesIdTable,
@@ -2382,6 +2715,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_GastrodonEastSea,
.iconPalIndex = 0,
FOOTPRINT(Gastrodon)
+ OVERWORLD(
+ sPicTable_GastrodonEastSea,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_GastrodonEastSea,
+ gShinyOverworldPalette_GastrodonEastSea
+ )
.levelUpLearnset = sGastrodonLevelUpLearnset,
.teachableLearnset = sGastrodonTeachableLearnset,
.formSpeciesIdTable = sGastrodonFormSpeciesIdTable,
@@ -2438,8 +2779,17 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Drifloon,
.iconPalIndex = 2,
FOOTPRINT(Drifloon)
+ OVERWORLD(
+ sPicTable_Drifloon,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Drifloon,
+ gShinyOverworldPalette_Drifloon
+ )
.levelUpLearnset = sDrifloonLevelUpLearnset,
.teachableLearnset = sDrifloonTeachableLearnset,
+ .eggMoveLearnset = sDrifloonEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 28, SPECIES_DRIFBLIM}),
},
@@ -2492,6 +2842,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Drifblim,
.iconPalIndex = 2,
FOOTPRINT(Drifblim)
+ OVERWORLD(
+ sPicTable_Drifblim,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Drifblim,
+ gShinyOverworldPalette_Drifblim
+ )
.levelUpLearnset = sDrifblimLevelUpLearnset,
.teachableLearnset = sDrifblimTeachableLearnset,
},
@@ -2546,8 +2904,17 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Buneary,
.iconPalIndex = 2,
FOOTPRINT(Buneary)
+ OVERWORLD(
+ sPicTable_Buneary,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Buneary,
+ gShinyOverworldPalette_Buneary
+ )
.levelUpLearnset = sBunearyLevelUpLearnset,
.teachableLearnset = sBunearyTeachableLearnset,
+ .eggMoveLearnset = sBunearyEggMoveLearnset,
.evolutions = EVOLUTION({EVO_FRIENDSHIP, 0, SPECIES_LOPUNNY}),
},
@@ -2599,6 +2966,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Lopunny,
.iconPalIndex = 2,
FOOTPRINT(Lopunny)
+ OVERWORLD(
+ sPicTable_Lopunny,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Lopunny,
+ gShinyOverworldPalette_Lopunny
+ )
.levelUpLearnset = sLopunnyLevelUpLearnset,
.teachableLearnset = sLopunnyTeachableLearnset,
.formSpeciesIdTable = sLopunnyFormSpeciesIdTable,
@@ -2712,8 +3087,17 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Glameow,
.iconPalIndex = 0,
FOOTPRINT(Glameow)
+ OVERWORLD(
+ sPicTable_Glameow,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Glameow,
+ gShinyOverworldPalette_Glameow
+ )
.levelUpLearnset = sGlameowLevelUpLearnset,
.teachableLearnset = sGlameowTeachableLearnset,
+ .eggMoveLearnset = sGlameowEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 38, SPECIES_PURUGLY}),
},
@@ -2765,6 +3149,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Purugly,
.iconPalIndex = 0,
FOOTPRINT(Purugly)
+ OVERWORLD(
+ sPicTable_Purugly,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Purugly,
+ gShinyOverworldPalette_Purugly
+ )
.levelUpLearnset = sPuruglyLevelUpLearnset,
.teachableLearnset = sPuruglyTeachableLearnset,
},
@@ -2819,8 +3211,17 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Stunky,
.iconPalIndex = 2,
FOOTPRINT(Stunky)
+ OVERWORLD(
+ sPicTable_Stunky,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Stunky,
+ gShinyOverworldPalette_Stunky
+ )
.levelUpLearnset = sStunkyLevelUpLearnset,
.teachableLearnset = sStunkyTeachableLearnset,
+ .eggMoveLearnset = sStunkyEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 34, SPECIES_SKUNTANK}),
},
@@ -2872,6 +3273,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Skuntank,
.iconPalIndex = 2,
FOOTPRINT(Skuntank)
+ OVERWORLD(
+ sPicTable_Skuntank,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Skuntank,
+ gShinyOverworldPalette_Skuntank
+ )
.levelUpLearnset = sSkuntankLevelUpLearnset,
.teachableLearnset = sSkuntankTeachableLearnset,
},
@@ -2928,6 +3337,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Bronzor,
.iconPalIndex = 0,
FOOTPRINT(Bronzor)
+ OVERWORLD(
+ sPicTable_Bronzor,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Bronzor,
+ gShinyOverworldPalette_Bronzor
+ )
.levelUpLearnset = sBronzorLevelUpLearnset,
.teachableLearnset = sBronzorTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 33, SPECIES_BRONZONG}),
@@ -2984,6 +3401,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Bronzong,
.iconPalIndex = 0,
FOOTPRINT(Bronzong)
+ OVERWORLD(
+ sPicTable_Bronzong,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Bronzong,
+ gShinyOverworldPalette_Bronzong
+ )
.levelUpLearnset = sBronzongLevelUpLearnset,
.teachableLearnset = sBronzongTeachableLearnset,
},
@@ -3039,8 +3464,17 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Chatot,
.iconPalIndex = 0,
FOOTPRINT(Chatot)
+ OVERWORLD(
+ sPicTable_Chatot,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Chatot,
+ gShinyOverworldPalette_Chatot
+ )
.levelUpLearnset = sChatotLevelUpLearnset,
.teachableLearnset = sChatotTeachableLearnset,
+ .eggMoveLearnset = sChatotEggMoveLearnset,
},
#endif //P_FAMILY_CHATOT
@@ -3094,8 +3528,17 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Spiritomb,
.iconPalIndex = 5,
FOOTPRINT(Spiritomb)
+ OVERWORLD(
+ sPicTable_Spiritomb,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Spiritomb,
+ gShinyOverworldPalette_Spiritomb
+ )
.levelUpLearnset = sSpiritombLevelUpLearnset,
.teachableLearnset = sSpiritombTeachableLearnset,
+ .eggMoveLearnset = sSpiritombEggMoveLearnset,
},
#endif //P_FAMILY_SPIRITOMB
@@ -3152,8 +3595,17 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Gible,
.iconPalIndex = 0,
FOOTPRINT(Gible)
+ OVERWORLD(
+ sPicTable_Gible,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Gible,
+ gShinyOverworldPalette_Gible
+ )
.levelUpLearnset = sGibleLevelUpLearnset,
.teachableLearnset = sGibleTeachableLearnset,
+ .eggMoveLearnset = sGibleEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 24, SPECIES_GABITE}),
},
@@ -3209,6 +3661,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Gabite,
.iconPalIndex = 0,
FOOTPRINT(Gabite)
+ OVERWORLD(
+ sPicTable_Gabite,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Gabite,
+ gShinyOverworldPalette_Gabite
+ )
.levelUpLearnset = sGabiteLevelUpLearnset,
.teachableLearnset = sGabiteTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 48, SPECIES_GARCHOMP}),
@@ -3270,6 +3730,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Garchomp,
.iconPalIndex = 0,
FOOTPRINT(Garchomp)
+ OVERWORLD(
+ sPicTable_Garchomp,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Garchomp,
+ gShinyOverworldPalette_Garchomp
+ )
.levelUpLearnset = sGarchompLevelUpLearnset,
.teachableLearnset = sGarchompTeachableLearnset,
.formSpeciesIdTable = sGarchompFormSpeciesIdTable,
@@ -3383,8 +3851,17 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Riolu,
.iconPalIndex = 2,
FOOTPRINT(Riolu)
+ OVERWORLD(
+ sPicTable_Riolu,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Riolu,
+ gShinyOverworldPalette_Riolu
+ )
.levelUpLearnset = sRioluLevelUpLearnset,
.teachableLearnset = sRioluTeachableLearnset,
+ .eggMoveLearnset = sRioluEggMoveLearnset,
.evolutions = EVOLUTION({EVO_FRIENDSHIP_DAY, 0, SPECIES_LUCARIO}),
},
@@ -3437,6 +3914,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Lucario,
.iconPalIndex = 2,
FOOTPRINT(Lucario)
+ OVERWORLD(
+ sPicTable_Lucario,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Lucario,
+ gShinyOverworldPalette_Lucario
+ )
.levelUpLearnset = sLucarioLevelUpLearnset,
.teachableLearnset = sLucarioTeachableLearnset,
.formSpeciesIdTable = sLucarioFormSpeciesIdTable,
@@ -3557,8 +4042,17 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconPalIndexFemale = 1,
#endif
FOOTPRINT(Hippopotas)
+ OVERWORLD(
+ sPicTable_Hippopotas,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Hippopotas,
+ gShinyOverworldPalette_Hippopotas
+ )
.levelUpLearnset = sHippopotasLevelUpLearnset,
.teachableLearnset = sHippopotasTeachableLearnset,
+ .eggMoveLearnset = sHippopotasEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 34, SPECIES_HIPPOWDON}),
},
@@ -3616,6 +4110,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconPalIndexFemale = 1,
#endif
FOOTPRINT(Hippowdon)
+ OVERWORLD(
+ sPicTable_Hippowdon,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Hippowdon,
+ gShinyOverworldPalette_Hippowdon
+ )
.levelUpLearnset = sHippowdonLevelUpLearnset,
.teachableLearnset = sHippowdonTeachableLearnset,
},
@@ -3671,8 +4173,17 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Skorupi,
.iconPalIndex = 0,
FOOTPRINT(Skorupi)
+ OVERWORLD(
+ sPicTable_Skorupi,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Skorupi,
+ gShinyOverworldPalette_Skorupi
+ )
.levelUpLearnset = sSkorupiLevelUpLearnset,
.teachableLearnset = sSkorupiTeachableLearnset,
+ .eggMoveLearnset = sSkorupiEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 40, SPECIES_DRAPION}),
},
@@ -3725,6 +4236,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Drapion,
.iconPalIndex = 2,
FOOTPRINT(Drapion)
+ OVERWORLD(
+ sPicTable_Drapion,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Drapion,
+ gShinyOverworldPalette_Drapion
+ )
.levelUpLearnset = sDrapionLevelUpLearnset,
.teachableLearnset = sDrapionTeachableLearnset,
},
@@ -3784,8 +4303,17 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Croagunk,
.iconPalIndex = 0,
FOOTPRINT(Croagunk)
+ OVERWORLD(
+ sPicTable_Croagunk,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Croagunk,
+ gShinyOverworldPalette_Croagunk
+ )
.levelUpLearnset = sCroagunkLevelUpLearnset,
.teachableLearnset = sCroagunkTeachableLearnset,
+ .eggMoveLearnset = sCroagunkEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 37, SPECIES_TOXICROAK}),
},
@@ -3842,6 +4370,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Toxicroak,
.iconPalIndex = 0,
FOOTPRINT(Toxicroak)
+ OVERWORLD(
+ sPicTable_Toxicroak,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Toxicroak,
+ gShinyOverworldPalette_Toxicroak
+ )
.levelUpLearnset = sToxicroakLevelUpLearnset,
.teachableLearnset = sToxicroakTeachableLearnset,
},
@@ -3897,8 +4433,17 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Carnivine,
.iconPalIndex = 1,
FOOTPRINT(Carnivine)
+ OVERWORLD(
+ sPicTable_Carnivine,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Carnivine,
+ gShinyOverworldPalette_Carnivine
+ )
.levelUpLearnset = sCarnivineLevelUpLearnset,
.teachableLearnset = sCarnivineTeachableLearnset,
+ .eggMoveLearnset = sCarnivineEggMoveLearnset,
},
#endif //P_FAMILY_CARNIVINE
@@ -3955,8 +4500,17 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Finneon,
.iconPalIndex = 0,
FOOTPRINT(Finneon)
+ OVERWORLD(
+ sPicTable_Finneon,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Finneon,
+ gShinyOverworldPalette_Finneon
+ )
.levelUpLearnset = sFinneonLevelUpLearnset,
.teachableLearnset = sFinneonTeachableLearnset,
+ .eggMoveLearnset = sFinneonEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 31, SPECIES_LUMINEON}),
},
@@ -4012,6 +4566,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Lumineon,
.iconPalIndex = 0,
FOOTPRINT(Lumineon)
+ OVERWORLD(
+ sPicTable_Lumineon,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Lumineon,
+ gShinyOverworldPalette_Lumineon
+ )
.levelUpLearnset = sLumineonLevelUpLearnset,
.teachableLearnset = sLumineonTeachableLearnset,
},
@@ -4071,8 +4633,17 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Snover,
.iconPalIndex = 1,
FOOTPRINT(Snover)
+ OVERWORLD(
+ sPicTable_Snover,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Snover,
+ gShinyOverworldPalette_Snover
+ )
.levelUpLearnset = sSnoverLevelUpLearnset,
.teachableLearnset = sSnoverTeachableLearnset,
+ .eggMoveLearnset = sSnoverEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 40, SPECIES_ABOMASNOW}),
},
@@ -4128,6 +4699,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Abomasnow,
.iconPalIndex = 1,
FOOTPRINT(Abomasnow)
+ OVERWORLD(
+ sPicTable_Abomasnow,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Abomasnow,
+ gShinyOverworldPalette_Abomasnow
+ )
.levelUpLearnset = sAbomasnowLevelUpLearnset,
.teachableLearnset = sAbomasnowTeachableLearnset,
.formSpeciesIdTable = sAbomasnowFormSpeciesIdTable,
@@ -4245,6 +4824,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Rotom,
.iconPalIndex = 0,
FOOTPRINT(Rotom)
+ OVERWORLD(
+ sPicTable_Rotom,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Rotom,
+ gShinyOverworldPalette_Rotom
+ )
.levelUpLearnset = sRotomLevelUpLearnset,
.teachableLearnset = sRotomTeachableLearnset,
.formSpeciesIdTable = sRotomFormSpeciesIdTable,
@@ -4309,6 +4896,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_RotomHeat,
.iconPalIndex = 0,
FOOTPRINT(Rotom)
+ OVERWORLD(
+ sPicTable_RotomHeat,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_RotomHeat,
+ gShinyOverworldPalette_RotomHeat
+ )
.levelUpLearnset = sRotomLevelUpLearnset,
.teachableLearnset = sRotomTeachableLearnset,
.formSpeciesIdTable = sRotomFormSpeciesIdTable,
@@ -4366,6 +4961,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_RotomWash,
.iconPalIndex = 0,
FOOTPRINT(Rotom)
+ OVERWORLD(
+ sPicTable_RotomWash,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_RotomWash,
+ gShinyOverworldPalette_RotomWash
+ )
.levelUpLearnset = sRotomLevelUpLearnset,
.teachableLearnset = sRotomTeachableLearnset,
.formSpeciesIdTable = sRotomFormSpeciesIdTable,
@@ -4422,6 +5025,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_RotomFrost,
.iconPalIndex = 5,
FOOTPRINT(Rotom)
+ OVERWORLD(
+ sPicTable_RotomFrost,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_RotomFrost,
+ gShinyOverworldPalette_RotomFrost
+ )
.levelUpLearnset = sRotomLevelUpLearnset,
.teachableLearnset = sRotomTeachableLearnset,
.formSpeciesIdTable = sRotomFormSpeciesIdTable,
@@ -4479,6 +5090,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_RotomFan,
.iconPalIndex = 0,
FOOTPRINT(Rotom)
+ OVERWORLD(
+ sPicTable_RotomFan,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_RotomFan,
+ gShinyOverworldPalette_RotomFan
+ )
.levelUpLearnset = sRotomLevelUpLearnset,
.teachableLearnset = sRotomTeachableLearnset,
.formSpeciesIdTable = sRotomFormSpeciesIdTable,
@@ -4535,6 +5154,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_RotomMow,
.iconPalIndex = 0,
FOOTPRINT(Rotom)
+ OVERWORLD(
+ sPicTable_RotomMow,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_RotomMow,
+ gShinyOverworldPalette_RotomMow
+ )
.levelUpLearnset = sRotomLevelUpLearnset,
.teachableLearnset = sRotomTeachableLearnset,
.formSpeciesIdTable = sRotomFormSpeciesIdTable,
@@ -4599,6 +5226,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Uxie,
.iconPalIndex = 0,
FOOTPRINT(Uxie)
+ OVERWORLD(
+ sPicTable_Uxie,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Uxie,
+ gShinyOverworldPalette_Uxie
+ )
.isLegendary = TRUE,
.levelUpLearnset = sUxieLevelUpLearnset,
.teachableLearnset = sUxieTeachableLearnset,
@@ -4663,6 +5298,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Mesprit,
.iconPalIndex = 0,
FOOTPRINT(Mesprit)
+ OVERWORLD(
+ sPicTable_Mesprit,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Mesprit,
+ gShinyOverworldPalette_Mesprit
+ )
.isLegendary = TRUE,
.levelUpLearnset = sMespritLevelUpLearnset,
.teachableLearnset = sMespritTeachableLearnset,
@@ -4726,6 +5369,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Azelf,
.iconPalIndex = 0,
FOOTPRINT(Azelf)
+ OVERWORLD(
+ sPicTable_Azelf,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Azelf,
+ gShinyOverworldPalette_Azelf
+ )
.isLegendary = TRUE,
.levelUpLearnset = sAzelfLevelUpLearnset,
.teachableLearnset = sAzelfTeachableLearnset,
@@ -4789,7 +5440,16 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Dialga,
.iconPalIndex = 2,
FOOTPRINT(Dialga)
+ OVERWORLD(
+ sPicTable_Dialga,
+ SIZE_64x64,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Dialga,
+ gShinyOverworldPalette_Dialga
+ )
.isLegendary = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sDialgaLevelUpLearnset,
.teachableLearnset = sDialgaTeachableLearnset,
.formSpeciesIdTable = sDialgaFormSpeciesIdTable,
@@ -4844,7 +5504,16 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_DialgaOrigin,
.iconPalIndex = 0,
FOOTPRINT(Dialga)
+ OVERWORLD(
+ sPicTable_DialgaOrigin,
+ SIZE_64x64,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_DialgaOrigin,
+ gShinyOverworldPalette_DialgaOrigin
+ )
.isLegendary = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sDialgaLevelUpLearnset,
.teachableLearnset = sDialgaTeachableLearnset,
.formSpeciesIdTable = sDialgaFormSpeciesIdTable,
@@ -4909,7 +5578,16 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Palkia,
.iconPalIndex = 2,
FOOTPRINT(Palkia)
+ OVERWORLD(
+ sPicTable_Palkia,
+ SIZE_64x64,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Palkia,
+ gShinyOverworldPalette_Palkia
+ )
.isLegendary = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sPalkiaLevelUpLearnset,
.teachableLearnset = sPalkiaTeachableLearnset,
.formSpeciesIdTable = sPalkiaFormSpeciesIdTable,
@@ -4964,7 +5642,16 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_PalkiaOrigin,
.iconPalIndex = 2,
FOOTPRINT(Palkia)
+ OVERWORLD(
+ sPicTable_PalkiaOrigin,
+ SIZE_64x64,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_PalkiaOrigin,
+ gShinyOverworldPalette_PalkiaOrigin
+ )
.isLegendary = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sPalkiaLevelUpLearnset,
.teachableLearnset = sPalkiaTeachableLearnset,
.formSpeciesIdTable = sPalkiaFormSpeciesIdTable,
@@ -5027,6 +5714,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Heatran,
.iconPalIndex = 0,
FOOTPRINT(Heatran)
+ OVERWORLD(
+ sPicTable_Heatran,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Heatran,
+ gShinyOverworldPalette_Heatran
+ )
.isLegendary = TRUE,
.levelUpLearnset = sHeatranLevelUpLearnset,
.teachableLearnset = sHeatranTeachableLearnset,
@@ -5088,6 +5783,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Regigigas,
.iconPalIndex = 0,
FOOTPRINT(Regigigas)
+ OVERWORLD(
+ sPicTable_Regigigas,
+ SIZE_64x64,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Regigigas,
+ gShinyOverworldPalette_Regigigas
+ )
.isLegendary = TRUE,
.levelUpLearnset = sRegigigasLevelUpLearnset,
.teachableLearnset = sRegigigasTeachableLearnset,
@@ -5151,7 +5854,16 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_GiratinaAltered,
.iconPalIndex = 0,
FOOTPRINT(GiratinaAltered)
+ OVERWORLD(
+ sPicTable_GiratinaAltered,
+ SIZE_64x64,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_GiratinaAltered,
+ gShinyOverworldPalette_GiratinaAltered
+ )
.isLegendary = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sGiratinaLevelUpLearnset,
.teachableLearnset = sGiratinaTeachableLearnset,
.formSpeciesIdTable = sGiratinaFormSpeciesIdTable,
@@ -5207,7 +5919,16 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_GiratinaOrigin,
.iconPalIndex = 0,
FOOTPRINT(GiratinaOrigin)
+ OVERWORLD(
+ sPicTable_GiratinaOrigin,
+ SIZE_64x64,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_GiratinaOrigin,
+ gShinyOverworldPalette_GiratinaOrigin
+ )
.isLegendary = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sGiratinaLevelUpLearnset,
.teachableLearnset = sGiratinaTeachableLearnset,
.formSpeciesIdTable = sGiratinaFormSpeciesIdTable,
@@ -5271,6 +5992,14 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Cresselia,
.iconPalIndex = 0,
FOOTPRINT(Cresselia)
+ OVERWORLD(
+ sPicTable_Cresselia,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Cresselia,
+ gShinyOverworldPalette_Cresselia
+ )
.isLegendary = TRUE,
.levelUpLearnset = sCresseliaLevelUpLearnset,
.teachableLearnset = sCresseliaTeachableLearnset,
@@ -5333,7 +6062,16 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Phione,
.iconPalIndex = 0,
FOOTPRINT(Phione)
+ OVERWORLD(
+ sPicTable_Phione,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Phione,
+ gShinyOverworldPalette_Phione
+ )
.isMythical = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sPhioneLevelUpLearnset,
.teachableLearnset = sPhioneTeachableLearnset,
},
@@ -5393,7 +6131,16 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Manaphy,
.iconPalIndex = 0,
FOOTPRINT(Manaphy)
+ OVERWORLD(
+ sPicTable_Manaphy,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Manaphy,
+ gShinyOverworldPalette_Manaphy
+ )
.isMythical = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sManaphyLevelUpLearnset,
.teachableLearnset = sManaphyTeachableLearnset,
},
@@ -5456,7 +6203,16 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_Darkrai,
.iconPalIndex = 0,
FOOTPRINT(Darkrai)
+ OVERWORLD(
+ sPicTable_Darkrai,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Darkrai,
+ gShinyOverworldPalette_Darkrai
+ )
.isMythical = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sDarkraiLevelUpLearnset,
.teachableLearnset = sDarkraiTeachableLearnset,
},
@@ -5521,7 +6277,16 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconSprite = gMonIcon_ShayminLand,
.iconPalIndex = 1,
FOOTPRINT(Shaymin)
+ OVERWORLD(
+ sPicTable_ShayminLand,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_ShayminLand,
+ gShinyOverworldPalette_ShayminLand
+ )
.isMythical = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sShayminLandLevelUpLearnset,
.teachableLearnset = sShayminLandTeachableLearnset,
.formSpeciesIdTable = sShayminFormSpeciesIdTable,
@@ -5584,6 +6349,7 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
.iconPalIndex = 1,
FOOTPRINT(Shaymin)
.isMythical = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sShayminSkyLevelUpLearnset,
.teachableLearnset = sShayminSkyTeachableLearnset,
.formSpeciesIdTable = sShayminFormSpeciesIdTable,
@@ -5599,76 +6365,93 @@ const struct SpeciesInfo gSpeciesInfoGen4[] =
#else
#define ARCEUS_EXP_YIELD 255
#endif
+#if P_ARCEUS_UNIQUE_FORM_ICONS >= GEN_9
+ #define ARCEUS_ICON(typeName, iconPal) \
+ .iconSprite = gMonIcon_Arceus ##typeName, \
+ .iconPalIndex = iconPal,
+#else
+ #define ARCEUS_ICON(typeName, iconPal) \
+ .iconSprite = gMonIcon_ArceusNormal, \
+ .iconPalIndex = 1,
+#endif
-#define ARCEUS_SPECIES_INFO(type, typeName) \
- { \
- .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, \
- .iconSprite = gMonIcon_Arceus, \
- .iconPalIndex = 1, \
- FOOTPRINT(Arceus) \
- .levelUpLearnset = sArceusLevelUpLearnset, \
- .teachableLearnset = sArceusTeachableLearnset, \
- .formSpeciesIdTable = sArceusFormSpeciesIdTable, \
- .formChangeTable = sArceusFormChangeTable, \
- .isMythical = 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) \
+ 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, \
}
- [SPECIES_ARCEUS_NORMAL] = ARCEUS_SPECIES_INFO(TYPE_NORMAL, Normal),
- [SPECIES_ARCEUS_FIGHTING] = ARCEUS_SPECIES_INFO(TYPE_FIGHTING, Fighting),
- [SPECIES_ARCEUS_FLYING] = ARCEUS_SPECIES_INFO(TYPE_FLYING, Flying),
- [SPECIES_ARCEUS_POISON] = ARCEUS_SPECIES_INFO(TYPE_POISON, Poison),
- [SPECIES_ARCEUS_GROUND] = ARCEUS_SPECIES_INFO(TYPE_GROUND, Ground),
- [SPECIES_ARCEUS_ROCK] = ARCEUS_SPECIES_INFO(TYPE_ROCK, Rock),
- [SPECIES_ARCEUS_BUG] = ARCEUS_SPECIES_INFO(TYPE_BUG, Bug),
- [SPECIES_ARCEUS_GHOST] = ARCEUS_SPECIES_INFO(TYPE_GHOST, Ghost),
- [SPECIES_ARCEUS_STEEL] = ARCEUS_SPECIES_INFO(TYPE_STEEL, Steel),
- [SPECIES_ARCEUS_FIRE] = ARCEUS_SPECIES_INFO(TYPE_FIRE, Fire),
- [SPECIES_ARCEUS_WATER] = ARCEUS_SPECIES_INFO(TYPE_WATER, Water),
- [SPECIES_ARCEUS_GRASS] = ARCEUS_SPECIES_INFO(TYPE_GRASS, Grass),
- [SPECIES_ARCEUS_ELECTRIC] = ARCEUS_SPECIES_INFO(TYPE_ELECTRIC, Electric),
- [SPECIES_ARCEUS_PSYCHIC] = ARCEUS_SPECIES_INFO(TYPE_PSYCHIC, Psychic),
- [SPECIES_ARCEUS_ICE] = ARCEUS_SPECIES_INFO(TYPE_ICE, Ice),
- [SPECIES_ARCEUS_DRAGON] = ARCEUS_SPECIES_INFO(TYPE_DRAGON, Dragon),
- [SPECIES_ARCEUS_DARK] = ARCEUS_SPECIES_INFO(TYPE_DARK, Dark),
- [SPECIES_ARCEUS_FAIRY] = ARCEUS_SPECIES_INFO(TYPE_FAIRY, Fairy),
+ [SPECIES_ARCEUS_NORMAL] = ARCEUS_SPECIES_INFO(TYPE_NORMAL, Normal, 1),
+ [SPECIES_ARCEUS_FIGHTING] = ARCEUS_SPECIES_INFO(TYPE_FIGHTING, Fighting, 1),
+ [SPECIES_ARCEUS_FLYING] = ARCEUS_SPECIES_INFO(TYPE_FLYING, Flying, 2),
+ [SPECIES_ARCEUS_POISON] = ARCEUS_SPECIES_INFO(TYPE_POISON, Poison, 2),
+ [SPECIES_ARCEUS_GROUND] = ARCEUS_SPECIES_INFO(TYPE_GROUND, Ground, 1),
+ [SPECIES_ARCEUS_ROCK] = ARCEUS_SPECIES_INFO(TYPE_ROCK, Rock, 2),
+ [SPECIES_ARCEUS_BUG] = ARCEUS_SPECIES_INFO(TYPE_BUG, Bug, 1),
+ [SPECIES_ARCEUS_GHOST] = ARCEUS_SPECIES_INFO(TYPE_GHOST, Ghost, 2),
+ [SPECIES_ARCEUS_STEEL] = ARCEUS_SPECIES_INFO(TYPE_STEEL, Steel, 0),
+ [SPECIES_ARCEUS_FIRE] = ARCEUS_SPECIES_INFO(TYPE_FIRE, Fire, 0),
+ [SPECIES_ARCEUS_WATER] = ARCEUS_SPECIES_INFO(TYPE_WATER, Water, 0),
+ [SPECIES_ARCEUS_GRASS] = ARCEUS_SPECIES_INFO(TYPE_GRASS, Grass, 1),
+ [SPECIES_ARCEUS_ELECTRIC] = ARCEUS_SPECIES_INFO(TYPE_ELECTRIC, Electric, 3),
+ [SPECIES_ARCEUS_PSYCHIC] = ARCEUS_SPECIES_INFO(TYPE_PSYCHIC, Psychic, 1),
+ [SPECIES_ARCEUS_ICE] = ARCEUS_SPECIES_INFO(TYPE_ICE, Ice, 0),
+ [SPECIES_ARCEUS_DRAGON] = ARCEUS_SPECIES_INFO(TYPE_DRAGON, Dragon, 0),
+ [SPECIES_ARCEUS_DARK] = ARCEUS_SPECIES_INFO(TYPE_DARK, Dark, 0),
+ [SPECIES_ARCEUS_FAIRY] = ARCEUS_SPECIES_INFO(TYPE_FAIRY, Fairy, 0),
#endif //P_FAMILY_ARCEUS
#ifdef __INTELLISENSE__
diff --git a/src/data/pokemon/species_info/gen_5_families.h b/src/data/pokemon/species_info/gen_5_families.h
index 0a2e19a52009..9cadb187eb2b 100644
--- a/src/data/pokemon/species_info/gen_5_families.h
+++ b/src/data/pokemon/species_info/gen_5_families.h
@@ -52,7 +52,16 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Victini,
.iconPalIndex = 0,
FOOTPRINT(Victini)
+ OVERWORLD(
+ sPicTable_Victini,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Victini,
+ gShinyOverworldPalette_Victini
+ )
.isMythical = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sVictiniLevelUpLearnset,
.teachableLearnset = sVictiniTeachableLearnset,
},
@@ -107,8 +116,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Snivy,
.iconPalIndex = 1,
FOOTPRINT(Snivy)
+ OVERWORLD(
+ sPicTable_Snivy,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Snivy,
+ gShinyOverworldPalette_Snivy
+ )
.levelUpLearnset = sSnivyLevelUpLearnset,
.teachableLearnset = sSnivyTeachableLearnset,
+ .eggMoveLearnset = sSnivyEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 17, SPECIES_SERVINE}),
},
@@ -160,6 +178,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Servine,
.iconPalIndex = 1,
FOOTPRINT(Servine)
+ OVERWORLD(
+ sPicTable_Servine,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Servine,
+ gShinyOverworldPalette_Servine
+ )
.levelUpLearnset = sServineLevelUpLearnset,
.teachableLearnset = sServineTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 36, SPECIES_SERPERIOR}),
@@ -213,6 +239,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Serperior,
.iconPalIndex = 1,
FOOTPRINT(Serperior)
+ OVERWORLD(
+ sPicTable_Serperior,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Serperior,
+ gShinyOverworldPalette_Serperior
+ )
.levelUpLearnset = sSerperiorLevelUpLearnset,
.teachableLearnset = sSerperiorTeachableLearnset,
},
@@ -267,8 +301,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Tepig,
.iconPalIndex = 0,
FOOTPRINT(Tepig)
+ OVERWORLD(
+ sPicTable_Tepig,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Tepig,
+ gShinyOverworldPalette_Tepig
+ )
.levelUpLearnset = sTepigLevelUpLearnset,
.teachableLearnset = sTepigTeachableLearnset,
+ .eggMoveLearnset = sTepigEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 17, SPECIES_PIGNITE}),
},
@@ -320,6 +363,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Pignite,
.iconPalIndex = 0,
FOOTPRINT(Pignite)
+ OVERWORLD(
+ sPicTable_Pignite,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Pignite,
+ gShinyOverworldPalette_Pignite
+ )
.levelUpLearnset = sPigniteLevelUpLearnset,
.teachableLearnset = sPigniteTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 36, SPECIES_EMBOAR}),
@@ -374,6 +425,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Emboar,
.iconPalIndex = 0,
FOOTPRINT(Emboar)
+ OVERWORLD(
+ sPicTable_Emboar,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Emboar,
+ gShinyOverworldPalette_Emboar
+ )
.levelUpLearnset = sEmboarLevelUpLearnset,
.teachableLearnset = sEmboarTeachableLearnset,
},
@@ -428,8 +487,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Oshawott,
.iconPalIndex = 0,
FOOTPRINT(Oshawott)
+ OVERWORLD(
+ sPicTable_Oshawott,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Oshawott,
+ gShinyOverworldPalette_Oshawott
+ )
.levelUpLearnset = sOshawottLevelUpLearnset,
.teachableLearnset = sOshawottTeachableLearnset,
+ .eggMoveLearnset = sOshawottEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 17, SPECIES_DEWOTT}),
},
@@ -481,6 +549,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Dewott,
.iconPalIndex = 0,
FOOTPRINT(Dewott)
+ OVERWORLD(
+ sPicTable_Dewott,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Dewott,
+ gShinyOverworldPalette_Dewott
+ )
.levelUpLearnset = sDewottLevelUpLearnset,
.teachableLearnset = sDewottTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 36, SPECIES_SAMUROTT},
@@ -535,6 +611,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Samurott,
.iconPalIndex = 2,
FOOTPRINT(Samurott)
+ OVERWORLD(
+ sPicTable_Samurott,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Samurott,
+ gShinyOverworldPalette_Samurott
+ )
.levelUpLearnset = sSamurottLevelUpLearnset,
.teachableLearnset = sSamurottTeachableLearnset,
.formSpeciesIdTable = sSamurottFormSpeciesIdTable,
@@ -589,6 +673,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_SamurottHisuian,
.iconPalIndex = 0,
FOOTPRINT(Samurott)
+ OVERWORLD(
+ sPicTable_SamurottHisuian,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_SamurottHisuian,
+ gShinyOverworldPalette_SamurottHisuian
+ )
.isHisuianForm = TRUE,
.levelUpLearnset = sSamurottHisuianLevelUpLearnset,
.teachableLearnset = sSamurottHisuianTeachableLearnset,
@@ -646,8 +738,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Patrat,
.iconPalIndex = 2,
FOOTPRINT(Patrat)
+ OVERWORLD(
+ sPicTable_Patrat,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Patrat,
+ gShinyOverworldPalette_Patrat
+ )
.levelUpLearnset = sPatratLevelUpLearnset,
.teachableLearnset = sPatratTeachableLearnset,
+ .eggMoveLearnset = sPatratEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 20, SPECIES_WATCHOG}),
},
@@ -699,6 +800,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Watchog,
.iconPalIndex = 2,
FOOTPRINT(Watchog)
+ OVERWORLD(
+ sPicTable_Watchog,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Watchog,
+ gShinyOverworldPalette_Watchog
+ )
.levelUpLearnset = sWatchogLevelUpLearnset,
.teachableLearnset = sWatchogTeachableLearnset,
},
@@ -753,8 +862,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Lillipup,
.iconPalIndex = 2,
FOOTPRINT(Lillipup)
+ OVERWORLD(
+ sPicTable_Lillipup,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Lillipup,
+ gShinyOverworldPalette_Lillipup
+ )
.levelUpLearnset = sLillipupLevelUpLearnset,
.teachableLearnset = sLillipupTeachableLearnset,
+ .eggMoveLearnset = sLillipupEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 16, SPECIES_HERDIER}),
},
@@ -806,6 +924,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Herdier,
.iconPalIndex = 2,
FOOTPRINT(Herdier)
+ OVERWORLD(
+ sPicTable_Herdier,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Herdier,
+ gShinyOverworldPalette_Herdier
+ )
.levelUpLearnset = sHerdierLevelUpLearnset,
.teachableLearnset = sHerdierTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 32, SPECIES_STOUTLAND}),
@@ -865,6 +991,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Stoutland,
.iconPalIndex = 2,
FOOTPRINT(Stoutland)
+ OVERWORLD(
+ sPicTable_Stoutland,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Stoutland,
+ gShinyOverworldPalette_Stoutland
+ )
.levelUpLearnset = sStoutlandLevelUpLearnset,
.teachableLearnset = sStoutlandTeachableLearnset,
},
@@ -919,8 +1053,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Purrloin,
.iconPalIndex = 0,
FOOTPRINT(Purrloin)
+ OVERWORLD(
+ sPicTable_Purrloin,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Purrloin,
+ gShinyOverworldPalette_Purrloin
+ )
.levelUpLearnset = sPurrloinLevelUpLearnset,
.teachableLearnset = sPurrloinTeachableLearnset,
+ .eggMoveLearnset = sPurrloinEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 20, SPECIES_LIEPARD}),
},
@@ -972,6 +1115,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Liepard,
.iconPalIndex = 0,
FOOTPRINT(Liepard)
+ OVERWORLD(
+ sPicTable_Liepard,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Liepard,
+ gShinyOverworldPalette_Liepard
+ )
.levelUpLearnset = sLiepardLevelUpLearnset,
.teachableLearnset = sLiepardTeachableLearnset,
},
@@ -1026,8 +1177,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Pansage,
.iconPalIndex = 1,
FOOTPRINT(Pansage)
+ OVERWORLD(
+ sPicTable_Pansage,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Pansage,
+ gShinyOverworldPalette_Pansage
+ )
.levelUpLearnset = sPansageLevelUpLearnset,
.teachableLearnset = sPansageTeachableLearnset,
+ .eggMoveLearnset = sPansageEggMoveLearnset,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_LEAF_STONE, SPECIES_SIMISAGE}),
},
@@ -1079,6 +1239,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Simisage,
.iconPalIndex = 1,
FOOTPRINT(Simisage)
+ OVERWORLD(
+ sPicTable_Simisage,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Simisage,
+ gShinyOverworldPalette_Simisage
+ )
.levelUpLearnset = sSimisageLevelUpLearnset,
.teachableLearnset = sSimisageTeachableLearnset,
},
@@ -1134,8 +1302,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Pansear,
.iconPalIndex = 2,
FOOTPRINT(Pansear)
+ OVERWORLD(
+ sPicTable_Pansear,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Pansear,
+ gShinyOverworldPalette_Pansear
+ )
.levelUpLearnset = sPansearLevelUpLearnset,
.teachableLearnset = sPansearTeachableLearnset,
+ .eggMoveLearnset = sPansearEggMoveLearnset,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_FIRE_STONE, SPECIES_SIMISEAR}),
},
@@ -1188,6 +1365,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Simisear,
.iconPalIndex = 2,
FOOTPRINT(Simisear)
+ OVERWORLD(
+ sPicTable_Simisear,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Simisear,
+ gShinyOverworldPalette_Simisear
+ )
.levelUpLearnset = sSimisearLevelUpLearnset,
.teachableLearnset = sSimisearTeachableLearnset,
},
@@ -1242,8 +1427,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Panpour,
.iconPalIndex = 2,
FOOTPRINT(Panpour)
+ OVERWORLD(
+ sPicTable_Panpour,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Panpour,
+ gShinyOverworldPalette_Panpour
+ )
.levelUpLearnset = sPanpourLevelUpLearnset,
.teachableLearnset = sPanpourTeachableLearnset,
+ .eggMoveLearnset = sPanpourEggMoveLearnset,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_WATER_STONE, SPECIES_SIMIPOUR}),
},
@@ -1295,6 +1489,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Simipour,
.iconPalIndex = 2,
FOOTPRINT(Simipour)
+ OVERWORLD(
+ sPicTable_Simipour,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Simipour,
+ gShinyOverworldPalette_Simipour
+ )
.levelUpLearnset = sSimipourLevelUpLearnset,
.teachableLearnset = sSimipourTeachableLearnset,
},
@@ -1350,8 +1552,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Munna,
.iconPalIndex = 0,
FOOTPRINT(Munna)
+ OVERWORLD(
+ sPicTable_Munna,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Munna,
+ gShinyOverworldPalette_Munna
+ )
.levelUpLearnset = sMunnaLevelUpLearnset,
.teachableLearnset = sMunnaTeachableLearnset,
+ .eggMoveLearnset = sMunnaEggMoveLearnset,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_MOON_STONE, SPECIES_MUSHARNA}),
},
@@ -1404,6 +1615,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Musharna,
.iconPalIndex = 0,
FOOTPRINT(Musharna)
+ OVERWORLD(
+ sPicTable_Musharna,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Musharna,
+ gShinyOverworldPalette_Musharna
+ )
.levelUpLearnset = sMusharnaLevelUpLearnset,
.teachableLearnset = sMusharnaTeachableLearnset,
},
@@ -1458,8 +1677,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Pidove,
.iconPalIndex = 0,
FOOTPRINT(Pidove)
+ OVERWORLD(
+ sPicTable_Pidove,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Pidove,
+ gShinyOverworldPalette_Pidove
+ )
.levelUpLearnset = sPidoveLevelUpLearnset,
.teachableLearnset = sPidoveTeachableLearnset,
+ .eggMoveLearnset = sPidoveEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 21, SPECIES_TRANQUILL}),
},
@@ -1511,6 +1739,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Tranquill,
.iconPalIndex = 0,
FOOTPRINT(Tranquill)
+ OVERWORLD(
+ sPicTable_Tranquill,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Tranquill,
+ gShinyOverworldPalette_Tranquill
+ )
.levelUpLearnset = sTranquillLevelUpLearnset,
.teachableLearnset = sTranquillTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 32, SPECIES_UNFEZANT}),
@@ -1578,6 +1814,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconPalIndex = 1,
.iconPalIndexFemale = 1,
FOOTPRINT(Unfezant)
+ OVERWORLD(
+ sPicTable_Unfezant,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Unfezant,
+ gShinyOverworldPalette_Unfezant
+ )
.levelUpLearnset = sUnfezantLevelUpLearnset,
.teachableLearnset = sUnfezantTeachableLearnset,
},
@@ -1632,8 +1876,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Blitzle,
.iconPalIndex = 2,
FOOTPRINT(Blitzle)
+ OVERWORLD(
+ sPicTable_Blitzle,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Blitzle,
+ gShinyOverworldPalette_Blitzle
+ )
.levelUpLearnset = sBlitzleLevelUpLearnset,
.teachableLearnset = sBlitzleTeachableLearnset,
+ .eggMoveLearnset = sBlitzleEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 27, SPECIES_ZEBSTRIKA}),
},
@@ -1685,6 +1938,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Zebstrika,
.iconPalIndex = 2,
FOOTPRINT(Zebstrika)
+ OVERWORLD(
+ sPicTable_Zebstrika,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Zebstrika,
+ gShinyOverworldPalette_Zebstrika
+ )
.levelUpLearnset = sZebstrikaLevelUpLearnset,
.teachableLearnset = sZebstrikaTeachableLearnset,
},
@@ -1745,8 +2006,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Roggenrola,
.iconPalIndex = 2,
FOOTPRINT(Roggenrola)
+ OVERWORLD(
+ sPicTable_Roggenrola,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Roggenrola,
+ gShinyOverworldPalette_Roggenrola
+ )
.levelUpLearnset = sRoggenrolaLevelUpLearnset,
.teachableLearnset = sRoggenrolaTeachableLearnset,
+ .eggMoveLearnset = sRoggenrolaEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 25, SPECIES_BOLDORE}),
},
@@ -1805,6 +2075,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Boldore,
.iconPalIndex = 0,
FOOTPRINT(Boldore)
+ OVERWORLD(
+ sPicTable_Boldore,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Boldore,
+ gShinyOverworldPalette_Boldore
+ )
.levelUpLearnset = sBoldoreLevelUpLearnset,
.teachableLearnset = sBoldoreTeachableLearnset,
.evolutions = EVOLUTION({EVO_TRADE, 0, SPECIES_GIGALITH},
@@ -1871,6 +2149,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Gigalith,
.iconPalIndex = 0,
FOOTPRINT(Gigalith)
+ OVERWORLD(
+ sPicTable_Gigalith,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Gigalith,
+ gShinyOverworldPalette_Gigalith
+ )
.levelUpLearnset = sGigalithLevelUpLearnset,
.teachableLearnset = sGigalithTeachableLearnset,
},
@@ -1926,8 +2212,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Woobat,
.iconPalIndex = 0,
FOOTPRINT(Woobat)
+ OVERWORLD(
+ sPicTable_Woobat,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Woobat,
+ gShinyOverworldPalette_Woobat
+ )
.levelUpLearnset = sWoobatLevelUpLearnset,
.teachableLearnset = sWoobatTeachableLearnset,
+ .eggMoveLearnset = sWoobatEggMoveLearnset,
.evolutions = EVOLUTION({EVO_FRIENDSHIP, 0, SPECIES_SWOOBAT}),
},
@@ -1980,6 +2275,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Swoobat,
.iconPalIndex = 0,
FOOTPRINT(Swoobat)
+ OVERWORLD(
+ sPicTable_Swoobat,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Swoobat,
+ gShinyOverworldPalette_Swoobat
+ )
.levelUpLearnset = sSwoobatLevelUpLearnset,
.teachableLearnset = sSwoobatTeachableLearnset,
},
@@ -2035,8 +2338,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Drilbur,
.iconPalIndex = 0,
FOOTPRINT(Drilbur)
+ OVERWORLD(
+ sPicTable_Drilbur,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Drilbur,
+ gShinyOverworldPalette_Drilbur
+ )
.levelUpLearnset = sDrilburLevelUpLearnset,
.teachableLearnset = sDrilburTeachableLearnset,
+ .eggMoveLearnset = sDrilburEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 31, SPECIES_EXCADRILL}),
},
@@ -2089,6 +2401,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Excadrill,
.iconPalIndex = 0,
FOOTPRINT(Excadrill)
+ OVERWORLD(
+ sPicTable_Excadrill,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Excadrill,
+ gShinyOverworldPalette_Excadrill
+ )
.levelUpLearnset = sExcadrillLevelUpLearnset,
.teachableLearnset = sExcadrillTeachableLearnset,
},
@@ -2145,8 +2465,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Audino,
.iconPalIndex = 1,
FOOTPRINT(Audino)
+ OVERWORLD(
+ sPicTable_Audino,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Audino,
+ gShinyOverworldPalette_Audino
+ )
.levelUpLearnset = sAudinoLevelUpLearnset,
.teachableLearnset = sAudinoTeachableLearnset,
+ .eggMoveLearnset = sAudinoEggMoveLearnset,
.formSpeciesIdTable = sAudinoFormSpeciesIdTable,
.formChangeTable = sAudinoFormChangeTable,
},
@@ -2205,6 +2534,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.isMegaEvolution = TRUE,
.levelUpLearnset = sAudinoLevelUpLearnset,
.teachableLearnset = sAudinoTeachableLearnset,
+ .eggMoveLearnset = sAudinoEggMoveLearnset,
.formSpeciesIdTable = sAudinoFormSpeciesIdTable,
.formChangeTable = sAudinoFormChangeTable,
},
@@ -2260,8 +2590,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Timburr,
.iconPalIndex = 1,
FOOTPRINT(Timburr)
+ OVERWORLD(
+ sPicTable_Timburr,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Timburr,
+ gShinyOverworldPalette_Timburr
+ )
.levelUpLearnset = sTimburrLevelUpLearnset,
.teachableLearnset = sTimburrTeachableLearnset,
+ .eggMoveLearnset = sTimburrEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 25, SPECIES_GURDURR}),
},
@@ -2313,6 +2652,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Gurdurr,
.iconPalIndex = 1,
FOOTPRINT(Gurdurr)
+ OVERWORLD(
+ sPicTable_Gurdurr,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Gurdurr,
+ gShinyOverworldPalette_Gurdurr
+ )
.levelUpLearnset = sGurdurrLevelUpLearnset,
.teachableLearnset = sGurdurrTeachableLearnset,
.evolutions = EVOLUTION({EVO_TRADE, 0, SPECIES_CONKELDURR},
@@ -2367,6 +2714,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Conkeldurr,
.iconPalIndex = 1,
FOOTPRINT(Conkeldurr)
+ OVERWORLD(
+ sPicTable_Conkeldurr,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Conkeldurr,
+ gShinyOverworldPalette_Conkeldurr
+ )
.levelUpLearnset = sConkeldurrLevelUpLearnset,
.teachableLearnset = sConkeldurrTeachableLearnset,
},
@@ -2421,8 +2776,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Tympole,
.iconPalIndex = 2,
FOOTPRINT(Tympole)
+ OVERWORLD(
+ sPicTable_Tympole,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Tympole,
+ gShinyOverworldPalette_Tympole
+ )
.levelUpLearnset = sTympoleLevelUpLearnset,
.teachableLearnset = sTympoleTeachableLearnset,
+ .eggMoveLearnset = sTympoleEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 25, SPECIES_PALPITOAD}),
},
@@ -2474,6 +2838,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Palpitoad,
.iconPalIndex = 2,
FOOTPRINT(Palpitoad)
+ OVERWORLD(
+ sPicTable_Palpitoad,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Palpitoad,
+ gShinyOverworldPalette_Palpitoad
+ )
.levelUpLearnset = sPalpitoadLevelUpLearnset,
.teachableLearnset = sPalpitoadTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 36, SPECIES_SEISMITOAD}),
@@ -2533,6 +2905,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Seismitoad,
.iconPalIndex = 0,
FOOTPRINT(Seismitoad)
+ OVERWORLD(
+ sPicTable_Seismitoad,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Seismitoad,
+ gShinyOverworldPalette_Seismitoad
+ )
.levelUpLearnset = sSeismitoadLevelUpLearnset,
.teachableLearnset = sSeismitoadTeachableLearnset,
},
@@ -2588,6 +2968,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Throh,
.iconPalIndex = 0,
FOOTPRINT(Throh)
+ OVERWORLD(
+ sPicTable_Throh,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Throh,
+ gShinyOverworldPalette_Throh
+ )
.levelUpLearnset = sThrohLevelUpLearnset,
.teachableLearnset = sThrohTeachableLearnset,
},
@@ -2644,6 +3032,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Sawk,
.iconPalIndex = 0,
FOOTPRINT(Sawk)
+ OVERWORLD(
+ sPicTable_Sawk,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Sawk,
+ gShinyOverworldPalette_Sawk
+ )
.levelUpLearnset = sSawkLevelUpLearnset,
.teachableLearnset = sSawkTeachableLearnset,
},
@@ -2699,8 +3095,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Sewaddle,
.iconPalIndex = 1,
FOOTPRINT(Sewaddle)
+ OVERWORLD(
+ sPicTable_Sewaddle,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Sewaddle,
+ gShinyOverworldPalette_Sewaddle
+ )
.levelUpLearnset = sSewaddleLevelUpLearnset,
.teachableLearnset = sSewaddleTeachableLearnset,
+ .eggMoveLearnset = sSewaddleEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 20, SPECIES_SWADLOON}),
},
@@ -2753,6 +3158,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Swadloon,
.iconPalIndex = 1,
FOOTPRINT(Swadloon)
+ OVERWORLD(
+ sPicTable_Swadloon,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Swadloon,
+ gShinyOverworldPalette_Swadloon
+ )
.levelUpLearnset = sSwadloonLevelUpLearnset,
.teachableLearnset = sSwadloonTeachableLearnset,
.evolutions = EVOLUTION({EVO_FRIENDSHIP, 0, SPECIES_LEAVANNY}),
@@ -2813,6 +3226,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Leavanny,
.iconPalIndex = 1,
FOOTPRINT(Leavanny)
+ OVERWORLD(
+ sPicTable_Leavanny,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Leavanny,
+ gShinyOverworldPalette_Leavanny
+ )
.levelUpLearnset = sLeavannyLevelUpLearnset,
.teachableLearnset = sLeavannyTeachableLearnset,
},
@@ -2872,8 +3293,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Venipede,
.iconPalIndex = 1,
FOOTPRINT(Venipede)
+ OVERWORLD(
+ sPicTable_Venipede,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Venipede,
+ gShinyOverworldPalette_Venipede
+ )
.levelUpLearnset = sVenipedeLevelUpLearnset,
.teachableLearnset = sVenipedeTeachableLearnset,
+ .eggMoveLearnset = sVenipedeEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 22, SPECIES_WHIRLIPEDE}),
},
@@ -2930,6 +3360,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Whirlipede,
.iconPalIndex = 2,
FOOTPRINT(Whirlipede)
+ OVERWORLD(
+ sPicTable_Whirlipede,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Whirlipede,
+ gShinyOverworldPalette_Whirlipede
+ )
.levelUpLearnset = sWhirlipedeLevelUpLearnset,
.teachableLearnset = sWhirlipedeTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_SCOLIPEDE}),
@@ -2994,6 +3432,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Scolipede,
.iconPalIndex = 2,
FOOTPRINT(Scolipede)
+ OVERWORLD(
+ sPicTable_Scolipede,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Scolipede,
+ gShinyOverworldPalette_Scolipede
+ )
.levelUpLearnset = sScolipedeLevelUpLearnset,
.teachableLearnset = sScolipedeTeachableLearnset,
},
@@ -3055,8 +3501,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Cottonee,
.iconPalIndex = 1,
FOOTPRINT(Cottonee)
+ OVERWORLD(
+ sPicTable_Cottonee,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Cottonee,
+ gShinyOverworldPalette_Cottonee
+ )
.levelUpLearnset = sCottoneeLevelUpLearnset,
.teachableLearnset = sCottoneeTeachableLearnset,
+ .eggMoveLearnset = sCottoneeEggMoveLearnset,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_SUN_STONE, SPECIES_WHIMSICOTT}),
},
@@ -3109,6 +3564,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Whimsicott,
.iconPalIndex = 1,
FOOTPRINT(Whimsicott)
+ OVERWORLD(
+ sPicTable_Whimsicott,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Whimsicott,
+ gShinyOverworldPalette_Whimsicott
+ )
.levelUpLearnset = sWhimsicottLevelUpLearnset,
.teachableLearnset = sWhimsicottTeachableLearnset,
},
@@ -3165,8 +3628,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Petilil,
.iconPalIndex = 1,
FOOTPRINT(Petilil)
+ OVERWORLD(
+ sPicTable_Petilil,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Petilil,
+ gShinyOverworldPalette_Petilil
+ )
.levelUpLearnset = sPetililLevelUpLearnset,
.teachableLearnset = sPetililTeachableLearnset,
+ .eggMoveLearnset = sPetililEggMoveLearnset,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_SUN_STONE, SPECIES_LILLIGANT},
{EVO_NONE, 0, SPECIES_LILLIGANT_HISUIAN}),
},
@@ -3221,6 +3693,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Lilligant,
.iconPalIndex = 1,
FOOTPRINT(Lilligant)
+ OVERWORLD(
+ sPicTable_Lilligant,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Lilligant,
+ gShinyOverworldPalette_Lilligant
+ )
.levelUpLearnset = sLilligantLevelUpLearnset,
.teachableLearnset = sLilligantTeachableLearnset,
.formSpeciesIdTable = sLilligantFormSpeciesIdTable,
@@ -3278,6 +3758,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_LilligantHisuian,
.iconPalIndex = 1,
FOOTPRINT(Lilligant)
+ OVERWORLD(
+ sPicTable_LilligantHisuian,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_LilligantHisuian,
+ gShinyOverworldPalette_LilligantHisuian
+ )
.isHisuianForm = TRUE,
.levelUpLearnset = sLilligantHisuianLevelUpLearnset,
.teachableLearnset = sLilligantHisuianTeachableLearnset,
@@ -3337,8 +3825,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_BasculinRedStriped,
.iconPalIndex = 1,
FOOTPRINT(Basculin)
+ OVERWORLD(
+ sPicTable_BasculinRedStriped,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_BasculinRedStriped,
+ gShinyOverworldPalette_BasculinRedStriped
+ )
.levelUpLearnset = sBasculinLevelUpLearnset,
.teachableLearnset = sBasculinTeachableLearnset,
+ .eggMoveLearnset = sBasculinEggMoveLearnset,
.formSpeciesIdTable = sBasculinFormSpeciesIdTable,
},
@@ -3392,8 +3889,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_BasculinBlueStriped,
.iconPalIndex = 0,
FOOTPRINT(Basculin)
+ OVERWORLD(
+ sPicTable_BasculinBlueStriped,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_BasculinBlueStriped,
+ gShinyOverworldPalette_BasculinBlueStriped
+ )
.levelUpLearnset = sBasculinLevelUpLearnset,
.teachableLearnset = sBasculinTeachableLearnset,
+ .eggMoveLearnset = sBasculinEggMoveLearnset,
.formSpeciesIdTable = sBasculinFormSpeciesIdTable,
},
@@ -3448,11 +3954,19 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_BasculinWhiteStriped,
.iconPalIndex = 0,
FOOTPRINT(Basculin)
+ OVERWORLD(
+ sPicTable_BasculinWhiteStriped,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_BasculinWhiteStriped,
+ gShinyOverworldPalette_BasculinWhiteStriped
+ )
.levelUpLearnset = sBasculinWhiteStripedLevelUpLearnset,
.teachableLearnset = sBasculinWhiteStripedTeachableLearnset,
.formSpeciesIdTable = sBasculinFormSpeciesIdTable,
- .evolutions = EVOLUTION({EVO_LEVEL_RECOIL_DAMAGE_MALE, 294, SPECIES_BASCULEGION_MALE},
- {EVO_LEVEL_RECOIL_DAMAGE_FEMALE, 294, SPECIES_BASCULEGION_FEMALE}),
+ .evolutions = EVOLUTION({EVO_RECOIL_DAMAGE_MALE, 294, SPECIES_BASCULEGION_MALE},
+ {EVO_RECOIL_DAMAGE_FEMALE, 294, SPECIES_BASCULEGION_FEMALE}),
},
[SPECIES_BASCULEGION_MALE] =
@@ -3474,7 +3988,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 = _("Bsculegion"),
+ .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Bsculegion", "Basculegion"),
.cryId = CRY_BASCULEGION,
.natDexNum = NATIONAL_DEX_BASCULEGION,
.categoryName = _("Big Fish"),
@@ -3504,6 +4018,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_BasculegionMale,
.iconPalIndex = 1,
FOOTPRINT(Basculegion)
+ OVERWORLD(
+ sPicTable_BasculegionMale,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_BasculegionMale,
+ gShinyOverworldPalette_BasculegionMale
+ )
.levelUpLearnset = sBasculegionLevelUpLearnset,
.teachableLearnset = sBasculegionTeachableLearnset,
.formSpeciesIdTable = sBasculegionFormSpeciesIdTable,
@@ -3528,7 +4050,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 = _("Bsculegion"),
+ .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Bsculegion", "Basculegion"),
.cryId = CRY_BASCULEGION,
.natDexNum = NATIONAL_DEX_BASCULEGION,
.categoryName = _("Big Fish"),
@@ -3557,6 +4079,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_BasculegionFemale,
.iconPalIndex = 0,
FOOTPRINT(Basculegion)
+ OVERWORLD(
+ sPicTable_BasculegionFemale,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_BasculegionFemale,
+ gShinyOverworldPalette_BasculegionFemale
+ )
.levelUpLearnset = sBasculegionLevelUpLearnset,
.teachableLearnset = sBasculegionTeachableLearnset,
.formSpeciesIdTable = sBasculegionFormSpeciesIdTable,
@@ -3614,8 +4144,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Sandile,
.iconPalIndex = 1,
FOOTPRINT(Sandile)
+ OVERWORLD(
+ sPicTable_Sandile,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Sandile,
+ gShinyOverworldPalette_Sandile
+ )
.levelUpLearnset = sSandileLevelUpLearnset,
.teachableLearnset = sSandileTeachableLearnset,
+ .eggMoveLearnset = sSandileEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 29, SPECIES_KROKOROK}),
},
@@ -3668,6 +4207,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Krokorok,
.iconPalIndex = 1,
FOOTPRINT(Krokorok)
+ OVERWORLD(
+ sPicTable_Krokorok,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Krokorok,
+ gShinyOverworldPalette_Krokorok
+ )
.levelUpLearnset = sKrokorokLevelUpLearnset,
.teachableLearnset = sKrokorokTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 40, SPECIES_KROOKODILE}),
@@ -3728,6 +4275,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Krookodile,
.iconPalIndex = 0,
FOOTPRINT(Krookodile)
+ OVERWORLD(
+ sPicTable_Krookodile,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Krookodile,
+ gShinyOverworldPalette_Krookodile
+ )
.levelUpLearnset = sKrookodileLevelUpLearnset,
.teachableLearnset = sKrookodileTeachableLearnset,
},
@@ -3782,8 +4337,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Darumaka,
.iconPalIndex = 0,
FOOTPRINT(Darumaka)
+ OVERWORLD(
+ sPicTable_Darumaka,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Darumaka,
+ gShinyOverworldPalette_Darumaka
+ )
.levelUpLearnset = sDarumakaLevelUpLearnset,
.teachableLearnset = sDarumakaTeachableLearnset,
+ .eggMoveLearnset = sDarumakaEggMoveLearnset,
.formSpeciesIdTable = sDarumakaFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_LEVEL, 35, SPECIES_DARMANITAN_STANDARD_MODE}),
},
@@ -3836,6 +4400,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_DarmanitanStandardMode,
.iconPalIndex = 0,
FOOTPRINT(Darmanitan)
+ OVERWORLD(
+ sPicTable_DarmanitanStandardMode,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_DarmanitanStandardMode,
+ gShinyOverworldPalette_DarmanitanStandardMode
+ )
.levelUpLearnset = sDarmanitanLevelUpLearnset,
.teachableLearnset = sDarmanitanTeachableLearnset,
.formSpeciesIdTable = sDarmanitanFormSpeciesIdTable,
@@ -3944,9 +4516,18 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_DarumakaGalarian,
.iconPalIndex = 0,
FOOTPRINT(Darumaka)
+ OVERWORLD(
+ sPicTable_DarumakaGalarian,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_DarumakaGalarian,
+ gShinyOverworldPalette_DarumakaGalarian
+ )
.isGalarianForm = TRUE,
.levelUpLearnset = sDarumakaGalarianLevelUpLearnset,
.teachableLearnset = sDarumakaGalarianTeachableLearnset,
+ .eggMoveLearnset = sDarumakaGalarianEggMoveLearnset,
.formSpeciesIdTable = sDarumakaFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_ICE_STONE, SPECIES_DARMANITAN_GALARIAN_STANDARD_MODE}),
},
@@ -3999,6 +4580,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_DarmanitanGalarianStandardMode,
.iconPalIndex = 0,
FOOTPRINT(Darmanitan)
+ OVERWORLD(
+ sPicTable_DarmanitanGalarianStandardMode,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_DarmanitanGalarianStandardMode,
+ gShinyOverworldPalette_DarmanitanGalarianStandardMode
+ )
.isGalarianForm = TRUE,
.levelUpLearnset = sDarmanitanGalarianLevelUpLearnset,
.teachableLearnset = sDarmanitanGalarianTeachableLearnset,
@@ -4113,8 +4702,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Maractus,
.iconPalIndex = 1,
FOOTPRINT(Maractus)
+ OVERWORLD(
+ sPicTable_Maractus,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Maractus,
+ gShinyOverworldPalette_Maractus
+ )
.levelUpLearnset = sMaractusLevelUpLearnset,
.teachableLearnset = sMaractusTeachableLearnset,
+ .eggMoveLearnset = sMaractusEggMoveLearnset,
},
#endif //P_FAMILY_MARACTUS
@@ -4168,8 +4766,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Dwebble,
.iconPalIndex = 0,
FOOTPRINT(Dwebble)
+ OVERWORLD(
+ sPicTable_Dwebble,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Dwebble,
+ gShinyOverworldPalette_Dwebble
+ )
.levelUpLearnset = sDwebbleLevelUpLearnset,
.teachableLearnset = sDwebbleTeachableLearnset,
+ .eggMoveLearnset = sDwebbleEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 34, SPECIES_CRUSTLE}),
},
@@ -4222,6 +4829,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Crustle,
.iconPalIndex = 2,
FOOTPRINT(Crustle)
+ OVERWORLD(
+ sPicTable_Crustle,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Crustle,
+ gShinyOverworldPalette_Crustle
+ )
.levelUpLearnset = sCrustleLevelUpLearnset,
.teachableLearnset = sCrustleTeachableLearnset,
},
@@ -4277,8 +4892,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Scraggy,
.iconPalIndex = 2,
FOOTPRINT(Scraggy)
+ OVERWORLD(
+ sPicTable_Scraggy,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Scraggy,
+ gShinyOverworldPalette_Scraggy
+ )
.levelUpLearnset = sScraggyLevelUpLearnset,
.teachableLearnset = sScraggyTeachableLearnset,
+ .eggMoveLearnset = sScraggyEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 39, SPECIES_SCRAFTY}),
},
@@ -4332,6 +4956,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Scrafty,
.iconPalIndex = 0,
FOOTPRINT(Scrafty)
+ OVERWORLD(
+ sPicTable_Scrafty,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Scrafty,
+ gShinyOverworldPalette_Scrafty
+ )
.levelUpLearnset = sScraftyLevelUpLearnset,
.teachableLearnset = sScraftyTeachableLearnset,
},
@@ -4387,8 +5019,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Sigilyph,
.iconPalIndex = 0,
FOOTPRINT(Sigilyph)
+ OVERWORLD(
+ sPicTable_Sigilyph,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Sigilyph,
+ gShinyOverworldPalette_Sigilyph
+ )
.levelUpLearnset = sSigilyphLevelUpLearnset,
.teachableLearnset = sSigilyphTeachableLearnset,
+ .eggMoveLearnset = sSigilyphEggMoveLearnset,
},
#endif //P_FAMILY_SIGILYPH
@@ -4443,8 +5084,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Yamask,
.iconPalIndex = 0,
FOOTPRINT(Yamask)
+ OVERWORLD(
+ sPicTable_Yamask,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Yamask,
+ gShinyOverworldPalette_Yamask
+ )
.levelUpLearnset = sYamaskLevelUpLearnset,
.teachableLearnset = sYamaskTeachableLearnset,
+ .eggMoveLearnset = sYamaskEggMoveLearnset,
.formSpeciesIdTable = sYamaskFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_LEVEL, 34, SPECIES_COFAGRIGUS}),
},
@@ -4498,6 +5148,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Cofagrigus,
.iconPalIndex = 0,
FOOTPRINT(Cofagrigus)
+ OVERWORLD(
+ sPicTable_Cofagrigus,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Cofagrigus,
+ gShinyOverworldPalette_Cofagrigus
+ )
.levelUpLearnset = sCofagrigusLevelUpLearnset,
.teachableLearnset = sCofagrigusTeachableLearnset,
},
@@ -4552,9 +5210,18 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_YamaskGalarian,
.iconPalIndex = 2,
FOOTPRINT(Yamask)
+ OVERWORLD(
+ sPicTable_YamaskGalarian,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_YamaskGalarian,
+ gShinyOverworldPalette_YamaskGalarian
+ )
.isGalarianForm = TRUE,
.levelUpLearnset = sYamaskGalarianLevelUpLearnset,
.teachableLearnset = sYamaskGalarianTeachableLearnset,
+ .eggMoveLearnset = sYamaskGalarianEggMoveLearnset,
.formSpeciesIdTable = sYamaskFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_SCRIPT_TRIGGER_DMG, 49, SPECIES_RUNERIGUS}),
},
@@ -4607,6 +5274,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Runerigus,
.iconPalIndex = 2,
FOOTPRINT(Runerigus)
+ OVERWORLD(
+ sPicTable_Runerigus,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Runerigus,
+ gShinyOverworldPalette_Runerigus
+ )
.levelUpLearnset = sRunerigusLevelUpLearnset,
.teachableLearnset = sRunerigusTeachableLearnset,
},
@@ -4662,8 +5337,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Tirtouga,
.iconPalIndex = 2,
FOOTPRINT(Tirtouga)
+ OVERWORLD(
+ sPicTable_Tirtouga,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Tirtouga,
+ gShinyOverworldPalette_Tirtouga
+ )
.levelUpLearnset = sTirtougaLevelUpLearnset,
.teachableLearnset = sTirtougaTeachableLearnset,
+ .eggMoveLearnset = sTirtougaEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 37, SPECIES_CARRACOSTA}),
},
@@ -4715,6 +5399,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Carracosta,
.iconPalIndex = 2,
FOOTPRINT(Carracosta)
+ OVERWORLD(
+ sPicTable_Carracosta,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Carracosta,
+ gShinyOverworldPalette_Carracosta
+ )
.levelUpLearnset = sCarracostaLevelUpLearnset,
.teachableLearnset = sCarracostaTeachableLearnset,
},
@@ -4769,8 +5461,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Archen,
.iconPalIndex = 0,
FOOTPRINT(Archen)
+ OVERWORLD(
+ sPicTable_Archen,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Archen,
+ gShinyOverworldPalette_Archen
+ )
.levelUpLearnset = sArchenLevelUpLearnset,
.teachableLearnset = sArchenTeachableLearnset,
+ .eggMoveLearnset = sArchenEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 37, SPECIES_ARCHEOPS}),
},
@@ -4823,6 +5524,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Archeops,
.iconPalIndex = 0,
FOOTPRINT(Archeops)
+ OVERWORLD(
+ sPicTable_Archeops,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Archeops,
+ gShinyOverworldPalette_Archeops
+ )
.levelUpLearnset = sArcheopsLevelUpLearnset,
.teachableLearnset = sArcheopsTeachableLearnset,
},
@@ -4878,8 +5587,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Trubbish,
.iconPalIndex = 1,
FOOTPRINT(Trubbish)
+ OVERWORLD(
+ sPicTable_Trubbish,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Trubbish,
+ gShinyOverworldPalette_Trubbish
+ )
.levelUpLearnset = sTrubbishLevelUpLearnset,
.teachableLearnset = sTrubbishTeachableLearnset,
+ .eggMoveLearnset = sTrubbishEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 36, SPECIES_GARBODOR}),
},
@@ -4934,6 +5652,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Garbodor,
.iconPalIndex = 1,
FOOTPRINT(Garbodor)
+ OVERWORLD(
+ sPicTable_Garbodor,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Garbodor,
+ gShinyOverworldPalette_Garbodor
+ )
.levelUpLearnset = sGarbodorLevelUpLearnset,
.teachableLearnset = sGarbodorTeachableLearnset,
.formSpeciesIdTable = sGarbodorFormSpeciesIdTable,
@@ -5050,8 +5776,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Zorua,
.iconPalIndex = 0,
FOOTPRINT(Zorua)
+ OVERWORLD(
+ sPicTable_Zorua,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Zorua,
+ gShinyOverworldPalette_Zorua
+ )
.levelUpLearnset = sZoruaLevelUpLearnset,
.teachableLearnset = sZoruaTeachableLearnset,
+ .eggMoveLearnset = sZoruaEggMoveLearnset,
.formSpeciesIdTable = sZoruaFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_ZOROARK}),
},
@@ -5104,6 +5839,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Zoroark,
.iconPalIndex = 0,
FOOTPRINT(Zoroark)
+ OVERWORLD(
+ sPicTable_Zoroark,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Zoroark,
+ gShinyOverworldPalette_Zoroark
+ )
.levelUpLearnset = sZoroarkLevelUpLearnset,
.teachableLearnset = sZoroarkTeachableLearnset,
.formSpeciesIdTable = sZoroarkFormSpeciesIdTable,
@@ -5158,6 +5901,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_ZoruaHisuian,
.iconPalIndex = 0,
FOOTPRINT(Zorua)
+ OVERWORLD(
+ sPicTable_ZoruaHisuian,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_ZoruaHisuian,
+ gShinyOverworldPalette_ZoruaHisuian
+ )
.isHisuianForm = TRUE,
.levelUpLearnset = sZoruaHisuianLevelUpLearnset,
.teachableLearnset = sZoruaHisuianTeachableLearnset,
@@ -5213,6 +5964,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_ZoroarkHisuian,
.iconPalIndex = 0,
FOOTPRINT(Zoroark)
+ OVERWORLD(
+ sPicTable_ZoroarkHisuian,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_ZoroarkHisuian,
+ gShinyOverworldPalette_ZoroarkHisuian
+ )
.isHisuianForm = TRUE,
.levelUpLearnset = sZoroarkHisuianLevelUpLearnset,
.teachableLearnset = sZoroarkHisuianTeachableLearnset,
@@ -5270,8 +6029,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Minccino,
.iconPalIndex = 0,
FOOTPRINT(Minccino)
+ OVERWORLD(
+ sPicTable_Minccino,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Minccino,
+ gShinyOverworldPalette_Minccino
+ )
.levelUpLearnset = sMinccinoLevelUpLearnset,
.teachableLearnset = sMinccinoTeachableLearnset,
+ .eggMoveLearnset = sMinccinoEggMoveLearnset,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_SHINY_STONE, SPECIES_CINCCINO}),
},
@@ -5324,6 +6092,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Cinccino,
.iconPalIndex = 0,
FOOTPRINT(Cinccino)
+ OVERWORLD(
+ sPicTable_Cinccino,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Cinccino,
+ gShinyOverworldPalette_Cinccino
+ )
.levelUpLearnset = sCinccinoLevelUpLearnset,
.teachableLearnset = sCinccinoTeachableLearnset,
},
@@ -5382,8 +6158,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Gothita,
.iconPalIndex = 2,
FOOTPRINT(Gothita)
+ OVERWORLD(
+ sPicTable_Gothita,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Gothita,
+ gShinyOverworldPalette_Gothita
+ )
.levelUpLearnset = sGothitaLevelUpLearnset,
.teachableLearnset = sGothitaTeachableLearnset,
+ .eggMoveLearnset = sGothitaEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 32, SPECIES_GOTHORITA}),
},
@@ -5439,6 +6224,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Gothorita,
.iconPalIndex = 2,
FOOTPRINT(Gothorita)
+ OVERWORLD(
+ sPicTable_Gothorita,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Gothorita,
+ gShinyOverworldPalette_Gothorita
+ )
.levelUpLearnset = sGothoritaLevelUpLearnset,
.teachableLearnset = sGothoritaTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 41, SPECIES_GOTHITELLE}),
@@ -5496,6 +6289,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Gothitelle,
.iconPalIndex = 2,
FOOTPRINT(Gothitelle)
+ OVERWORLD(
+ sPicTable_Gothitelle,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Gothitelle,
+ gShinyOverworldPalette_Gothitelle
+ )
.levelUpLearnset = sGothitelleLevelUpLearnset,
.teachableLearnset = sGothitelleTeachableLearnset,
},
@@ -5552,8 +6353,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Solosis,
.iconPalIndex = 1,
FOOTPRINT(Solosis)
+ OVERWORLD(
+ sPicTable_Solosis,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Solosis,
+ gShinyOverworldPalette_Solosis
+ )
.levelUpLearnset = sSolosisLevelUpLearnset,
.teachableLearnset = sSolosisTeachableLearnset,
+ .eggMoveLearnset = sSolosisEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 32, SPECIES_DUOSION}),
},
@@ -5606,6 +6416,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Duosion,
.iconPalIndex = 1,
FOOTPRINT(Duosion)
+ OVERWORLD(
+ sPicTable_Duosion,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Duosion,
+ gShinyOverworldPalette_Duosion
+ )
.levelUpLearnset = sDuosionLevelUpLearnset,
.teachableLearnset = sDuosionTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 41, SPECIES_REUNICLUS}),
@@ -5660,6 +6478,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Reuniclus,
.iconPalIndex = 1,
FOOTPRINT(Reuniclus)
+ OVERWORLD(
+ sPicTable_Reuniclus,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Reuniclus,
+ gShinyOverworldPalette_Reuniclus
+ )
.levelUpLearnset = sReuniclusLevelUpLearnset,
.teachableLearnset = sReuniclusTeachableLearnset,
},
@@ -5714,8 +6540,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Ducklett,
.iconPalIndex = 0,
FOOTPRINT(Ducklett)
+ OVERWORLD(
+ sPicTable_Ducklett,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Ducklett,
+ gShinyOverworldPalette_Ducklett
+ )
.levelUpLearnset = sDucklettLevelUpLearnset,
.teachableLearnset = sDucklettTeachableLearnset,
+ .eggMoveLearnset = sDucklettEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 35, SPECIES_SWANNA}),
},
@@ -5767,6 +6602,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Swanna,
.iconPalIndex = 2,
FOOTPRINT(Swanna)
+ OVERWORLD(
+ sPicTable_Swanna,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Swanna,
+ gShinyOverworldPalette_Swanna
+ )
.levelUpLearnset = sSwannaLevelUpLearnset,
.teachableLearnset = sSwannaTeachableLearnset,
},
@@ -5826,8 +6669,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Vanillite,
.iconPalIndex = 0,
FOOTPRINT(Vanillite)
+ OVERWORLD(
+ sPicTable_Vanillite,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Vanillite,
+ gShinyOverworldPalette_Vanillite
+ )
.levelUpLearnset = sVanilliteLevelUpLearnset,
.teachableLearnset = sVanilliteTeachableLearnset,
+ .eggMoveLearnset = sVanilliteEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 35, SPECIES_VANILLISH}),
},
@@ -5884,6 +6736,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Vanillish,
.iconPalIndex = 2,
FOOTPRINT(Vanillish)
+ OVERWORLD(
+ sPicTable_Vanillish,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Vanillish,
+ gShinyOverworldPalette_Vanillish
+ )
.levelUpLearnset = sVanillishLevelUpLearnset,
.teachableLearnset = sVanillishTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 47, SPECIES_VANILLUXE}),
@@ -5942,6 +6802,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Vanilluxe,
.iconPalIndex = 2,
FOOTPRINT(Vanilluxe)
+ OVERWORLD(
+ sPicTable_Vanilluxe,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Vanilluxe,
+ gShinyOverworldPalette_Vanilluxe
+ )
.levelUpLearnset = sVanilluxeLevelUpLearnset,
.teachableLearnset = sVanilluxeTeachableLearnset,
},
@@ -5996,8 +6864,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_DeerlingSpring,
.iconPalIndex = 1,
FOOTPRINT(Deerling)
+ OVERWORLD(
+ sPicTable_DeerlingSpring,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_DeerlingSpring,
+ gShinyOverworldPalette_DeerlingSpring
+ )
.levelUpLearnset = sDeerlingLevelUpLearnset,
.teachableLearnset = sDeerlingTeachableLearnset,
+ .eggMoveLearnset = sDeerlingEggMoveLearnset,
.formSpeciesIdTable = sDeerlingFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_LEVEL, 34, SPECIES_SAWSBUCK_SPRING}),
},
@@ -6050,8 +6927,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_DeerlingSummer,
.iconPalIndex = 1,
FOOTPRINT(Deerling)
+ OVERWORLD(
+ sPicTable_DeerlingSummer,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_DeerlingSummer,
+ gShinyOverworldPalette_DeerlingSummer
+ )
.levelUpLearnset = sDeerlingLevelUpLearnset,
.teachableLearnset = sDeerlingTeachableLearnset,
+ .eggMoveLearnset = sDeerlingEggMoveLearnset,
.formSpeciesIdTable = sDeerlingFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_LEVEL, 34, SPECIES_SAWSBUCK_SUMMER}),
},
@@ -6104,8 +6990,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_DeerlingAutumn,
.iconPalIndex = 0,
FOOTPRINT(Deerling)
+ OVERWORLD(
+ sPicTable_DeerlingAutumn,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_DeerlingAutumn,
+ gShinyOverworldPalette_DeerlingAutumn
+ )
.levelUpLearnset = sDeerlingLevelUpLearnset,
.teachableLearnset = sDeerlingTeachableLearnset,
+ .eggMoveLearnset = sDeerlingEggMoveLearnset,
.formSpeciesIdTable = sDeerlingFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_LEVEL, 34, SPECIES_SAWSBUCK_AUTUMN}),
},
@@ -6158,8 +7053,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_DeerlingWinter,
.iconPalIndex = 2,
FOOTPRINT(Deerling)
+ OVERWORLD(
+ sPicTable_DeerlingWinter,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_DeerlingWinter,
+ gShinyOverworldPalette_DeerlingWinter
+ )
.levelUpLearnset = sDeerlingLevelUpLearnset,
.teachableLearnset = sDeerlingTeachableLearnset,
+ .eggMoveLearnset = sDeerlingEggMoveLearnset,
.formSpeciesIdTable = sDeerlingFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_LEVEL, 34, SPECIES_SAWSBUCK_WINTER}),
},
@@ -6212,6 +7116,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_SawsbuckSpring,
.iconPalIndex = 1,
FOOTPRINT(Sawsbuck)
+ OVERWORLD(
+ sPicTable_SawsbuckSpring,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_SawsbuckSpring,
+ gShinyOverworldPalette_SawsbuckSpring
+ )
.levelUpLearnset = sSawsbuckLevelUpLearnset,
.teachableLearnset = sSawsbuckTeachableLearnset,
.formSpeciesIdTable = sSawsbuckFormSpeciesIdTable,
@@ -6265,6 +7177,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_SawsbuckSummer,
.iconPalIndex = 1,
FOOTPRINT(Sawsbuck)
+ OVERWORLD(
+ sPicTable_SawsbuckSummer,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_SawsbuckSummer,
+ gShinyOverworldPalette_SawsbuckSummer
+ )
.levelUpLearnset = sSawsbuckLevelUpLearnset,
.teachableLearnset = sSawsbuckTeachableLearnset,
.formSpeciesIdTable = sSawsbuckFormSpeciesIdTable,
@@ -6318,6 +7238,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_SawsbuckAutumn,
.iconPalIndex = 1,
FOOTPRINT(Sawsbuck)
+ OVERWORLD(
+ sPicTable_SawsbuckAutumn,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_SawsbuckAutumn,
+ gShinyOverworldPalette_SawsbuckAutumn
+ )
.levelUpLearnset = sSawsbuckLevelUpLearnset,
.teachableLearnset = sSawsbuckTeachableLearnset,
.formSpeciesIdTable = sSawsbuckFormSpeciesIdTable,
@@ -6371,6 +7299,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_SawsbuckWinter,
.iconPalIndex = 1,
FOOTPRINT(Sawsbuck)
+ OVERWORLD(
+ sPicTable_SawsbuckWinter,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_SawsbuckWinter,
+ gShinyOverworldPalette_SawsbuckWinter
+ )
.levelUpLearnset = sSawsbuckLevelUpLearnset,
.teachableLearnset = sSawsbuckTeachableLearnset,
.formSpeciesIdTable = sSawsbuckFormSpeciesIdTable,
@@ -6428,8 +7364,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Emolga,
.iconPalIndex = 2,
FOOTPRINT(Emolga)
+ OVERWORLD(
+ sPicTable_Emolga,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Emolga,
+ gShinyOverworldPalette_Emolga
+ )
.levelUpLearnset = sEmolgaLevelUpLearnset,
.teachableLearnset = sEmolgaTeachableLearnset,
+ .eggMoveLearnset = sEmolgaEggMoveLearnset,
},
#endif //P_FAMILY_EMOLGA
@@ -6482,8 +7427,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Karrablast,
.iconPalIndex = 0,
FOOTPRINT(Karrablast)
+ OVERWORLD(
+ sPicTable_Karrablast,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Karrablast,
+ gShinyOverworldPalette_Karrablast
+ )
.levelUpLearnset = sKarrablastLevelUpLearnset,
.teachableLearnset = sKarrablastTeachableLearnset,
+ .eggMoveLearnset = sKarrablastEggMoveLearnset,
.evolutions = EVOLUTION({EVO_TRADE_SPECIFIC_MON, SPECIES_SHELMET, SPECIES_ESCAVALIER}),
},
@@ -6535,6 +7489,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Escavalier,
.iconPalIndex = 0,
FOOTPRINT(Escavalier)
+ OVERWORLD(
+ sPicTable_Escavalier,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Escavalier,
+ gShinyOverworldPalette_Escavalier
+ )
.levelUpLearnset = sEscavalierLevelUpLearnset,
.teachableLearnset = sEscavalierTeachableLearnset,
},
@@ -6591,8 +7553,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Foongus,
.iconPalIndex = 0,
FOOTPRINT(Foongus)
+ OVERWORLD(
+ sPicTable_Foongus,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Foongus,
+ gShinyOverworldPalette_Foongus
+ )
.levelUpLearnset = sFoongusLevelUpLearnset,
.teachableLearnset = sFoongusTeachableLearnset,
+ .eggMoveLearnset = sFoongusEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 39, SPECIES_AMOONGUSS}),
},
@@ -6647,6 +7618,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Amoonguss,
.iconPalIndex = 1,
FOOTPRINT(Amoonguss)
+ OVERWORLD(
+ sPicTable_Amoonguss,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Amoonguss,
+ gShinyOverworldPalette_Amoonguss
+ )
.levelUpLearnset = sAmoongussLevelUpLearnset,
.teachableLearnset = sAmoongussTeachableLearnset,
},
@@ -6709,8 +7688,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconPalIndex = 0,
.iconPalIndexFemale = 1,
FOOTPRINT(Frillish)
+ OVERWORLD(
+ sPicTable_Frillish,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Frillish,
+ gShinyOverworldPalette_Frillish
+ )
.levelUpLearnset = sFrillishLevelUpLearnset,
.teachableLearnset = sFrillishTeachableLearnset,
+ .eggMoveLearnset = sFrillishEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 40, SPECIES_JELLICENT}),
},
@@ -6770,6 +7758,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconPalIndex = 0,
.iconPalIndexFemale = 1,
FOOTPRINT(Jellicent)
+ OVERWORLD(
+ sPicTable_Jellicent,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Jellicent,
+ gShinyOverworldPalette_Jellicent
+ )
.levelUpLearnset = sJellicentLevelUpLearnset,
.teachableLearnset = sJellicentTeachableLearnset,
},
@@ -6824,8 +7820,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Alomomola,
.iconPalIndex = 0,
FOOTPRINT(Alomomola)
+ OVERWORLD(
+ sPicTable_Alomomola,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Alomomola,
+ gShinyOverworldPalette_Alomomola
+ )
.levelUpLearnset = sAlomomolaLevelUpLearnset,
.teachableLearnset = sAlomomolaTeachableLearnset,
+ .eggMoveLearnset = sAlomomolaEggMoveLearnset,
},
#endif //P_FAMILY_ALOMOMOLA
@@ -6878,8 +7883,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Joltik,
.iconPalIndex = 0,
FOOTPRINT(Joltik)
+ OVERWORLD(
+ sPicTable_Joltik,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Joltik,
+ gShinyOverworldPalette_Joltik
+ )
.levelUpLearnset = sJoltikLevelUpLearnset,
.teachableLearnset = sJoltikTeachableLearnset,
+ .eggMoveLearnset = sJoltikEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 36, SPECIES_GALVANTULA}),
},
@@ -6931,6 +7945,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Galvantula,
.iconPalIndex = 2,
FOOTPRINT(Galvantula)
+ OVERWORLD(
+ sPicTable_Galvantula,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Galvantula,
+ gShinyOverworldPalette_Galvantula
+ )
.levelUpLearnset = sGalvantulaLevelUpLearnset,
.teachableLearnset = sGalvantulaTeachableLearnset,
},
@@ -6986,8 +8008,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Ferroseed,
.iconPalIndex = 1,
FOOTPRINT(Ferroseed)
+ OVERWORLD(
+ sPicTable_Ferroseed,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Ferroseed,
+ gShinyOverworldPalette_Ferroseed
+ )
.levelUpLearnset = sFerroseedLevelUpLearnset,
.teachableLearnset = sFerroseedTeachableLearnset,
+ .eggMoveLearnset = sFerroseedEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 40, SPECIES_FERROTHORN}),
},
@@ -7045,6 +8076,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Ferrothorn,
.iconPalIndex = 1,
FOOTPRINT(Ferrothorn)
+ OVERWORLD(
+ sPicTable_Ferrothorn,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Ferrothorn,
+ gShinyOverworldPalette_Ferrothorn
+ )
.levelUpLearnset = sFerrothornLevelUpLearnset,
.teachableLearnset = sFerrothornTeachableLearnset,
},
@@ -7101,6 +8140,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Klink,
.iconPalIndex = 0,
FOOTPRINT(Klink)
+ OVERWORLD(
+ sPicTable_Klink,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Klink,
+ gShinyOverworldPalette_Klink
+ )
.levelUpLearnset = sKlinkLevelUpLearnset,
.teachableLearnset = sKlinkTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 38, SPECIES_KLANG}),
@@ -7156,6 +8203,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Klang,
.iconPalIndex = 0,
FOOTPRINT(Klang)
+ OVERWORLD(
+ sPicTable_Klang,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Klang,
+ gShinyOverworldPalette_Klang
+ )
.levelUpLearnset = sKlangLevelUpLearnset,
.teachableLearnset = sKlangTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 49, SPECIES_KLINKLANG}),
@@ -7211,6 +8266,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Klinklang,
.iconPalIndex = 0,
FOOTPRINT(Klinklang)
+ OVERWORLD(
+ sPicTable_Klinklang,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Klinklang,
+ gShinyOverworldPalette_Klinklang
+ )
.levelUpLearnset = sKlinklangLevelUpLearnset,
.teachableLearnset = sKlinklangTeachableLearnset,
},
@@ -7266,6 +8329,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Tynamo,
.iconPalIndex = 0,
FOOTPRINT(Tynamo)
+ OVERWORLD(
+ sPicTable_Tynamo,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Tynamo,
+ gShinyOverworldPalette_Tynamo
+ )
.tmIlliterate = TRUE,
.levelUpLearnset = sTynamoLevelUpLearnset,
.teachableLearnset = sTynamoTeachableLearnset,
@@ -7321,6 +8392,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Eelektrik,
.iconPalIndex = 0,
FOOTPRINT(Eelektrik)
+ OVERWORLD(
+ sPicTable_Eelektrik,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Eelektrik,
+ gShinyOverworldPalette_Eelektrik
+ )
.levelUpLearnset = sEelektrikLevelUpLearnset,
.teachableLearnset = sEelektrikTeachableLearnset,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_THUNDER_STONE, SPECIES_EELEKTROSS}),
@@ -7375,6 +8454,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Eelektross,
.iconPalIndex = 0,
FOOTPRINT(Eelektross)
+ OVERWORLD(
+ sPicTable_Eelektross,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Eelektross,
+ gShinyOverworldPalette_Eelektross
+ )
.levelUpLearnset = sEelektrossLevelUpLearnset,
.teachableLearnset = sEelektrossTeachableLearnset,
},
@@ -7429,8 +8516,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Elgyem,
.iconPalIndex = 0,
FOOTPRINT(Elgyem)
+ OVERWORLD(
+ sPicTable_Elgyem,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Elgyem,
+ gShinyOverworldPalette_Elgyem
+ )
.levelUpLearnset = sElgyemLevelUpLearnset,
.teachableLearnset = sElgyemTeachableLearnset,
+ .eggMoveLearnset = sElgyemEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 42, SPECIES_BEHEEYEM}),
},
@@ -7482,6 +8578,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Beheeyem,
.iconPalIndex = 2,
FOOTPRINT(Beheeyem)
+ OVERWORLD(
+ sPicTable_Beheeyem,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Beheeyem,
+ gShinyOverworldPalette_Beheeyem
+ )
.levelUpLearnset = sBeheeyemLevelUpLearnset,
.teachableLearnset = sBeheeyemTeachableLearnset,
},
@@ -7541,8 +8645,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Litwick,
.iconPalIndex = 2,
FOOTPRINT(Litwick)
+ OVERWORLD(
+ sPicTable_Litwick,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Litwick,
+ gShinyOverworldPalette_Litwick
+ )
.levelUpLearnset = sLitwickLevelUpLearnset,
.teachableLearnset = sLitwickTeachableLearnset,
+ .eggMoveLearnset = sLitwickEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 41, SPECIES_LAMPENT}),
},
@@ -7599,6 +8712,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Lampent,
.iconPalIndex = 2,
FOOTPRINT(Lampent)
+ OVERWORLD(
+ sPicTable_Lampent,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Lampent,
+ gShinyOverworldPalette_Lampent
+ )
.levelUpLearnset = sLampentLevelUpLearnset,
.teachableLearnset = sLampentTeachableLearnset,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_DUSK_STONE, SPECIES_CHANDELURE}),
@@ -7657,6 +8778,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Chandelure,
.iconPalIndex = 2,
FOOTPRINT(Chandelure)
+ OVERWORLD(
+ sPicTable_Chandelure,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Chandelure,
+ gShinyOverworldPalette_Chandelure
+ )
.levelUpLearnset = sChandelureLevelUpLearnset,
.teachableLearnset = sChandelureTeachableLearnset,
},
@@ -7711,8 +8840,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Axew,
.iconPalIndex = 1,
FOOTPRINT(Axew)
+ OVERWORLD(
+ sPicTable_Axew,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Axew,
+ gShinyOverworldPalette_Axew
+ )
.levelUpLearnset = sAxewLevelUpLearnset,
.teachableLearnset = sAxewTeachableLearnset,
+ .eggMoveLearnset = sAxewEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 38, SPECIES_FRAXURE}),
},
@@ -7764,6 +8902,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Fraxure,
.iconPalIndex = 1,
FOOTPRINT(Fraxure)
+ OVERWORLD(
+ sPicTable_Fraxure,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Fraxure,
+ gShinyOverworldPalette_Fraxure
+ )
.levelUpLearnset = sFraxureLevelUpLearnset,
.teachableLearnset = sFraxureTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 48, SPECIES_HAXORUS}),
@@ -7817,6 +8963,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Haxorus,
.iconPalIndex = 2,
FOOTPRINT(Haxorus)
+ OVERWORLD(
+ sPicTable_Haxorus,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Haxorus,
+ gShinyOverworldPalette_Haxorus
+ )
.levelUpLearnset = sHaxorusLevelUpLearnset,
.teachableLearnset = sHaxorusTeachableLearnset,
},
@@ -7875,8 +9029,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Cubchoo,
.iconPalIndex = 0,
FOOTPRINT(Cubchoo)
+ OVERWORLD(
+ sPicTable_Cubchoo,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Cubchoo,
+ gShinyOverworldPalette_Cubchoo
+ )
.levelUpLearnset = sCubchooLevelUpLearnset,
.teachableLearnset = sCubchooTeachableLearnset,
+ .eggMoveLearnset = sCubchooEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 37, SPECIES_BEARTIC}),
},
@@ -7932,6 +9095,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Beartic,
.iconPalIndex = 0,
FOOTPRINT(Beartic)
+ OVERWORLD(
+ sPicTable_Beartic,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Beartic,
+ gShinyOverworldPalette_Beartic
+ )
.levelUpLearnset = sBearticLevelUpLearnset,
.teachableLearnset = sBearticTeachableLearnset,
},
@@ -7988,6 +9159,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Cryogonal,
.iconPalIndex = 0,
FOOTPRINT(Cryogonal)
+ OVERWORLD(
+ sPicTable_Cryogonal,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Cryogonal,
+ gShinyOverworldPalette_Cryogonal
+ )
.levelUpLearnset = sCryogonalLevelUpLearnset,
.teachableLearnset = sCryogonalTeachableLearnset,
},
@@ -8042,8 +9221,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Shelmet,
.iconPalIndex = 1,
FOOTPRINT(Shelmet)
+ OVERWORLD(
+ sPicTable_Shelmet,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Shelmet,
+ gShinyOverworldPalette_Shelmet
+ )
.levelUpLearnset = sShelmetLevelUpLearnset,
.teachableLearnset = sShelmetTeachableLearnset,
+ .eggMoveLearnset = sShelmetEggMoveLearnset,
.evolutions = EVOLUTION({EVO_TRADE_SPECIFIC_MON, SPECIES_KARRABLAST, SPECIES_ACCELGOR}),
},
@@ -8095,6 +9283,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Accelgor,
.iconPalIndex = 1,
FOOTPRINT(Accelgor)
+ OVERWORLD(
+ sPicTable_Accelgor,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Accelgor,
+ gShinyOverworldPalette_Accelgor
+ )
.levelUpLearnset = sAccelgorLevelUpLearnset,
.teachableLearnset = sAccelgorTeachableLearnset,
},
@@ -8150,8 +9346,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Stunfisk,
.iconPalIndex = 2,
FOOTPRINT(Stunfisk)
+ OVERWORLD(
+ sPicTable_Stunfisk,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Stunfisk,
+ gShinyOverworldPalette_Stunfisk
+ )
.levelUpLearnset = sStunfiskLevelUpLearnset,
.teachableLearnset = sStunfiskTeachableLearnset,
+ .eggMoveLearnset = sStunfiskEggMoveLearnset,
.formSpeciesIdTable = sStunfiskFormSpeciesIdTable,
},
@@ -8204,9 +9409,18 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_StunfiskGalarian,
.iconPalIndex = 1,
FOOTPRINT(Stunfisk)
+ OVERWORLD(
+ sPicTable_StunfiskGalarian,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_StunfiskGalarian,
+ gShinyOverworldPalette_StunfiskGalarian
+ )
.isGalarianForm = TRUE,
.levelUpLearnset = sStunfiskGalarianLevelUpLearnset,
.teachableLearnset = sStunfiskGalarianTeachableLearnset,
+ .eggMoveLearnset = sStunfiskGalarianEggMoveLearnset,
.formSpeciesIdTable = sStunfiskFormSpeciesIdTable,
},
#endif //P_GALARIAN_FORMS
@@ -8261,8 +9475,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Mienfoo,
.iconPalIndex = 1,
FOOTPRINT(Mienfoo)
+ OVERWORLD(
+ sPicTable_Mienfoo,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Mienfoo,
+ gShinyOverworldPalette_Mienfoo
+ )
.levelUpLearnset = sMienfooLevelUpLearnset,
.teachableLearnset = sMienfooTeachableLearnset,
+ .eggMoveLearnset = sMienfooEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 50, SPECIES_MIENSHAO}),
},
@@ -8314,6 +9537,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Mienshao,
.iconPalIndex = 2,
FOOTPRINT(Mienshao)
+ OVERWORLD(
+ sPicTable_Mienshao,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Mienshao,
+ gShinyOverworldPalette_Mienshao
+ )
.levelUpLearnset = sMienshaoLevelUpLearnset,
.teachableLearnset = sMienshaoTeachableLearnset,
},
@@ -8369,8 +9600,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Druddigon,
.iconPalIndex = 0,
FOOTPRINT(Druddigon)
+ OVERWORLD(
+ sPicTable_Druddigon,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Druddigon,
+ gShinyOverworldPalette_Druddigon
+ )
.levelUpLearnset = sDruddigonLevelUpLearnset,
.teachableLearnset = sDruddigonTeachableLearnset,
+ .eggMoveLearnset = sDruddigonEggMoveLearnset,
},
#endif //P_FAMILY_DRUDDIGON
@@ -8425,6 +9665,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Golett,
.iconPalIndex = 0,
FOOTPRINT(Golett)
+ OVERWORLD(
+ sPicTable_Golett,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Golett,
+ gShinyOverworldPalette_Golett
+ )
.levelUpLearnset = sGolettLevelUpLearnset,
.teachableLearnset = sGolettTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 43, SPECIES_GOLURK}),
@@ -8480,6 +9728,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Golurk,
.iconPalIndex = 0,
FOOTPRINT(Golurk)
+ OVERWORLD(
+ sPicTable_Golurk,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Golurk,
+ gShinyOverworldPalette_Golurk
+ )
.levelUpLearnset = sGolurkLevelUpLearnset,
.teachableLearnset = sGolurkTeachableLearnset,
},
@@ -8534,8 +9790,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Pawniard,
.iconPalIndex = 0,
FOOTPRINT(Pawniard)
+ OVERWORLD(
+ sPicTable_Pawniard,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Pawniard,
+ gShinyOverworldPalette_Pawniard
+ )
.levelUpLearnset = sPawniardLevelUpLearnset,
.teachableLearnset = sPawniardTeachableLearnset,
+ .eggMoveLearnset = sPawniardEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 52, SPECIES_BISHARP}),
},
@@ -8588,9 +9853,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Bisharp,
.iconPalIndex = 0,
FOOTPRINT(Bisharp)
+ OVERWORLD(
+ sPicTable_Bisharp,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Bisharp,
+ gShinyOverworldPalette_Bisharp
+ )
.levelUpLearnset = sBisharpLevelUpLearnset,
.teachableLearnset = sBisharpTeachableLearnset,
- .evolutions = EVOLUTION({EVO_NONE, 0, SPECIES_KINGAMBIT}),
+ .evolutions = EVOLUTION({EVO_DEFEAT_THREE_WITH_ITEM, ITEM_LEADERS_CREST, SPECIES_KINGAMBIT}),
},
#if P_GEN_9_CROSS_EVOS
@@ -8697,8 +9970,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Bouffalant,
.iconPalIndex = 2,
FOOTPRINT(Bouffalant)
+ OVERWORLD(
+ sPicTable_Bouffalant,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Bouffalant,
+ gShinyOverworldPalette_Bouffalant
+ )
.levelUpLearnset = sBouffalantLevelUpLearnset,
.teachableLearnset = sBouffalantTeachableLearnset,
+ .eggMoveLearnset = sBouffalantEggMoveLearnset,
},
#endif //P_FAMILY_BOUFFALANT
@@ -8751,6 +10033,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Rufflet,
.iconPalIndex = 2,
FOOTPRINT(Rufflet)
+ OVERWORLD(
+ sPicTable_Rufflet,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Rufflet,
+ gShinyOverworldPalette_Rufflet
+ )
.levelUpLearnset = sRuffletLevelUpLearnset,
.teachableLearnset = sRuffletTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 54, SPECIES_BRAVIARY},
@@ -8806,6 +10096,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Braviary,
.iconPalIndex = 0,
FOOTPRINT(Braviary)
+ OVERWORLD(
+ sPicTable_Braviary,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Braviary,
+ gShinyOverworldPalette_Braviary
+ )
.levelUpLearnset = sBraviaryLevelUpLearnset,
.teachableLearnset = sBraviaryTeachableLearnset,
.formSpeciesIdTable = sBraviaryFormSpeciesIdTable,
@@ -8860,6 +10158,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_BraviaryHisuian,
.iconPalIndex = 2,
FOOTPRINT(Braviary)
+ OVERWORLD(
+ sPicTable_BraviaryHisuian,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_BraviaryHisuian,
+ gShinyOverworldPalette_BraviaryHisuian
+ )
.isHisuianForm = TRUE,
.levelUpLearnset = sBraviaryHisuianLevelUpLearnset,
.teachableLearnset = sBraviaryHisuianTeachableLearnset,
@@ -8917,8 +10223,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Vullaby,
.iconPalIndex = 0,
FOOTPRINT(Vullaby)
+ OVERWORLD(
+ sPicTable_Vullaby,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Vullaby,
+ gShinyOverworldPalette_Vullaby
+ )
.levelUpLearnset = sVullabyLevelUpLearnset,
.teachableLearnset = sVullabyTeachableLearnset,
+ .eggMoveLearnset = sVullabyEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 54, SPECIES_MANDIBUZZ}),
},
@@ -8970,6 +10285,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Mandibuzz,
.iconPalIndex = 1,
FOOTPRINT(Mandibuzz)
+ OVERWORLD(
+ sPicTable_Mandibuzz,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Mandibuzz,
+ gShinyOverworldPalette_Mandibuzz
+ )
.levelUpLearnset = sMandibuzzLevelUpLearnset,
.teachableLearnset = sMandibuzzTeachableLearnset,
},
@@ -9024,8 +10347,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Heatmor,
.iconPalIndex = 2,
FOOTPRINT(Heatmor)
+ OVERWORLD(
+ sPicTable_Heatmor,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Heatmor,
+ gShinyOverworldPalette_Heatmor
+ )
.levelUpLearnset = sHeatmorLevelUpLearnset,
.teachableLearnset = sHeatmorTeachableLearnset,
+ .eggMoveLearnset = sHeatmorEggMoveLearnset,
},
#endif //P_FAMILY_HEATMOR
@@ -9078,8 +10410,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Durant,
.iconPalIndex = 0,
FOOTPRINT(Durant)
+ OVERWORLD(
+ sPicTable_Durant,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Durant,
+ gShinyOverworldPalette_Durant
+ )
.levelUpLearnset = sDurantLevelUpLearnset,
.teachableLearnset = sDurantTeachableLearnset,
+ .eggMoveLearnset = sDurantEggMoveLearnset,
},
#endif //P_FAMILY_DURANT
@@ -9132,8 +10473,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Deino,
.iconPalIndex = 2,
FOOTPRINT(Deino)
+ OVERWORLD(
+ sPicTable_Deino,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Deino,
+ gShinyOverworldPalette_Deino
+ )
.levelUpLearnset = sDeinoLevelUpLearnset,
.teachableLearnset = sDeinoTeachableLearnset,
+ .eggMoveLearnset = sDeinoEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 50, SPECIES_ZWEILOUS}),
},
@@ -9185,6 +10535,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Zweilous,
.iconPalIndex = 2,
FOOTPRINT(Zweilous)
+ OVERWORLD(
+ sPicTable_Zweilous,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Zweilous,
+ gShinyOverworldPalette_Zweilous
+ )
.levelUpLearnset = sZweilousLevelUpLearnset,
.teachableLearnset = sZweilousTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 64, SPECIES_HYDREIGON}),
@@ -9239,6 +10597,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Hydreigon,
.iconPalIndex = 2,
FOOTPRINT(Hydreigon)
+ OVERWORLD(
+ sPicTable_Hydreigon,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Hydreigon,
+ gShinyOverworldPalette_Hydreigon
+ )
.levelUpLearnset = sHydreigonLevelUpLearnset,
.teachableLearnset = sHydreigonTeachableLearnset,
},
@@ -9293,8 +10659,17 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Larvesta,
.iconPalIndex = 0,
FOOTPRINT(Larvesta)
+ OVERWORLD(
+ sPicTable_Larvesta,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Larvesta,
+ gShinyOverworldPalette_Larvesta
+ )
.levelUpLearnset = sLarvestaLevelUpLearnset,
.teachableLearnset = sLarvestaTeachableLearnset,
+ .eggMoveLearnset = sLarvestaEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 59, SPECIES_VOLCARONA}),
},
@@ -9349,6 +10724,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Volcarona,
.iconPalIndex = 0,
FOOTPRINT(Volcarona)
+ OVERWORLD(
+ sPicTable_Volcarona,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Volcarona,
+ gShinyOverworldPalette_Volcarona
+ )
.levelUpLearnset = sVolcaronaLevelUpLearnset,
.teachableLearnset = sVolcaronaTeachableLearnset,
},
@@ -9403,6 +10786,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Cobalion,
.iconPalIndex = 0,
FOOTPRINT(Cobalion)
+ OVERWORLD(
+ sPicTable_Cobalion,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Cobalion,
+ gShinyOverworldPalette_Cobalion
+ )
.isLegendary = TRUE,
.levelUpLearnset = sCobalionLevelUpLearnset,
.teachableLearnset = sCobalionTeachableLearnset,
@@ -9458,6 +10849,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Terrakion,
.iconPalIndex = 2,
FOOTPRINT(Terrakion)
+ OVERWORLD(
+ sPicTable_Terrakion,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Terrakion,
+ gShinyOverworldPalette_Terrakion
+ )
.isLegendary = TRUE,
.levelUpLearnset = sTerrakionLevelUpLearnset,
.teachableLearnset = sTerrakionTeachableLearnset,
@@ -9513,6 +10912,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Virizion,
.iconPalIndex = 1,
FOOTPRINT(Virizion)
+ OVERWORLD(
+ sPicTable_Virizion,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Virizion,
+ gShinyOverworldPalette_Virizion
+ )
.isLegendary = TRUE,
.levelUpLearnset = sVirizionLevelUpLearnset,
.teachableLearnset = sVirizionTeachableLearnset,
@@ -9569,6 +10976,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_TornadusIncarnate,
.iconPalIndex = 1,
FOOTPRINT(Tornadus)
+ OVERWORLD(
+ sPicTable_TornadusIncarnate,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_TornadusIncarnate,
+ gShinyOverworldPalette_TornadusIncarnate
+ )
.isLegendary = TRUE,
.levelUpLearnset = sTornadusLevelUpLearnset,
.teachableLearnset = sTornadusTeachableLearnset,
@@ -9682,6 +11097,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_ThundurusIncarnate,
.iconPalIndex = 0,
FOOTPRINT(Thundurus)
+ OVERWORLD(
+ sPicTable_ThundurusIncarnate,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_ThundurusIncarnate,
+ gShinyOverworldPalette_ThundurusIncarnate
+ )
.isLegendary = TRUE,
.levelUpLearnset = sThundurusLevelUpLearnset,
.teachableLearnset = sThundurusTeachableLearnset,
@@ -9795,7 +11218,16 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Reshiram,
.iconPalIndex = 0,
FOOTPRINT(Reshiram)
+ OVERWORLD(
+ sPicTable_Reshiram,
+ SIZE_64x64,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Reshiram,
+ gShinyOverworldPalette_Reshiram
+ )
.isLegendary = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sReshiramLevelUpLearnset,
.teachableLearnset = sReshiramTeachableLearnset,
},
@@ -9850,7 +11282,16 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Zekrom,
.iconPalIndex = 2,
FOOTPRINT(Zekrom)
+ OVERWORLD(
+ sPicTable_Zekrom,
+ SIZE_64x64,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Zekrom,
+ gShinyOverworldPalette_Zekrom
+ )
.isLegendary = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sZekromLevelUpLearnset,
.teachableLearnset = sZekromTeachableLearnset,
},
@@ -9906,6 +11347,14 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_LandorusIncarnate,
.iconPalIndex = 0,
FOOTPRINT(Landorus)
+ OVERWORLD(
+ sPicTable_LandorusIncarnate,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_LandorusIncarnate,
+ gShinyOverworldPalette_LandorusIncarnate
+ )
.isLegendary = TRUE,
.levelUpLearnset = sLandorusLevelUpLearnset,
.teachableLearnset = sLandorusTeachableLearnset,
@@ -10021,7 +11470,16 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_Kyurem,
.iconPalIndex = 0,
FOOTPRINT(Kyurem)
+ OVERWORLD(
+ sPicTable_Kyurem,
+ SIZE_64x64,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Kyurem,
+ gShinyOverworldPalette_Kyurem
+ )
.isLegendary = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sKyuremLevelUpLearnset,
.teachableLearnset = sKyuremTeachableLearnset,
.formSpeciesIdTable = sKyuremFormSpeciesIdTable,
@@ -10085,6 +11543,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
FOOTPRINT(Kyurem)
.isLegendary = TRUE,
.cannotBeTraded = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sKyuremWhiteLevelUpLearnset,
.teachableLearnset = sKyuremTeachableLearnset,
.formSpeciesIdTable = sKyuremFormSpeciesIdTable,
@@ -10147,6 +11606,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
FOOTPRINT(Kyurem)
.isLegendary = TRUE,
.cannotBeTraded = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sKyuremBlackLevelUpLearnset,
.teachableLearnset = sKyuremTeachableLearnset,
.formSpeciesIdTable = sKyuremFormSpeciesIdTable,
@@ -10203,7 +11663,16 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_KeldeoOrdinary,
.iconPalIndex = 0,
FOOTPRINT(Keldeo)
+ OVERWORLD(
+ sPicTable_KeldeoOrdinary,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_KeldeoOrdinary,
+ gShinyOverworldPalette_KeldeoOrdinary
+ )
.isMythical = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sKeldeoLevelUpLearnset,
.teachableLearnset = sKeldeoTeachableLearnset,
.formSpeciesIdTable = sKeldeoFormSpeciesIdTable,
@@ -10260,6 +11729,7 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconPalIndex = 0,
FOOTPRINT(Keldeo)
.isMythical = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sKeldeoLevelUpLearnset,
.teachableLearnset = sKeldeoTeachableLearnset,
.formSpeciesIdTable = sKeldeoFormSpeciesIdTable,
@@ -10322,7 +11792,16 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_MeloettaAria,
.iconPalIndex = 4,
FOOTPRINT(Meloetta)
+ OVERWORLD(
+ sPicTable_MeloettaAria,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_MeloettaAria,
+ gShinyOverworldPalette_MeloettaAria
+ )
.isMythical = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sMeloettaLevelUpLearnset,
.teachableLearnset = sMeloettaTeachableLearnset,
.formSpeciesIdTable = sMeloettaFormSpeciesIdTable,
@@ -10382,7 +11861,16 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.iconSprite = gMonIcon_MeloettaPirouette,
.iconPalIndex = 0,
FOOTPRINT(Meloetta)
+ OVERWORLD(
+ sPicTable_MeloettaPirouette,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_MeloettaPirouette,
+ gShinyOverworldPalette_MeloettaPirouette
+ )
.isMythical = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sMeloettaLevelUpLearnset,
.teachableLearnset = sMeloettaTeachableLearnset,
.formSpeciesIdTable = sMeloettaFormSpeciesIdTable,
@@ -10437,11 +11925,20 @@ const struct SpeciesInfo gSpeciesInfoGen5[] =
.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, \
}
[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 5c1b41a6104c..648fb7f12e15 100644
--- a/src/data/pokemon/species_info/gen_6_families.h
+++ b/src/data/pokemon/species_info/gen_6_families.h
@@ -52,8 +52,17 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Chespin,
.iconPalIndex = 1,
FOOTPRINT(Chespin)
+ OVERWORLD(
+ sPicTable_Chespin,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Chespin,
+ gShinyOverworldPalette_Chespin
+ )
.levelUpLearnset = sChespinLevelUpLearnset,
.teachableLearnset = sChespinTeachableLearnset,
+ .eggMoveLearnset = sChespinEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 16, SPECIES_QUILLADIN}),
},
@@ -105,6 +114,14 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Quilladin,
.iconPalIndex = 1,
FOOTPRINT(Quilladin)
+ OVERWORLD(
+ sPicTable_Quilladin,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Quilladin,
+ gShinyOverworldPalette_Quilladin
+ )
.levelUpLearnset = sQuilladinLevelUpLearnset,
.teachableLearnset = sQuilladinTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 36, SPECIES_CHESNAUGHT}),
@@ -158,6 +175,14 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Chesnaught,
.iconPalIndex = 1,
FOOTPRINT(Chesnaught)
+ OVERWORLD(
+ sPicTable_Chesnaught,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Chesnaught,
+ gShinyOverworldPalette_Chesnaught
+ )
.levelUpLearnset = sChesnaughtLevelUpLearnset,
.teachableLearnset = sChesnaughtTeachableLearnset,
},
@@ -212,8 +237,17 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Fennekin,
.iconPalIndex = 0,
FOOTPRINT(Fennekin)
+ OVERWORLD(
+ sPicTable_Fennekin,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Fennekin,
+ gShinyOverworldPalette_Fennekin
+ )
.levelUpLearnset = sFennekinLevelUpLearnset,
.teachableLearnset = sFennekinTeachableLearnset,
+ .eggMoveLearnset = sFennekinEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 16, SPECIES_BRAIXEN}),
},
@@ -265,6 +299,14 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Braixen,
.iconPalIndex = 0,
FOOTPRINT(Braixen)
+ OVERWORLD(
+ sPicTable_Braixen,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Braixen,
+ gShinyOverworldPalette_Braixen
+ )
.levelUpLearnset = sBraixenLevelUpLearnset,
.teachableLearnset = sBraixenTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 36, SPECIES_DELPHOX}),
@@ -318,6 +360,14 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Delphox,
.iconPalIndex = 0,
FOOTPRINT(Delphox)
+ OVERWORLD(
+ sPicTable_Delphox,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Delphox,
+ gShinyOverworldPalette_Delphox
+ )
.levelUpLearnset = sDelphoxLevelUpLearnset,
.teachableLearnset = sDelphoxTeachableLearnset,
},
@@ -372,8 +422,17 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Froakie,
.iconPalIndex = 0,
FOOTPRINT(Froakie)
+ OVERWORLD(
+ sPicTable_Froakie,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Froakie,
+ gShinyOverworldPalette_Froakie
+ )
.levelUpLearnset = sFroakieLevelUpLearnset,
.teachableLearnset = sFroakieTeachableLearnset,
+ .eggMoveLearnset = sFroakieEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 16, SPECIES_FROGADIER}),
},
@@ -425,6 +484,14 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Frogadier,
.iconPalIndex = 0,
FOOTPRINT(Frogadier)
+ OVERWORLD(
+ sPicTable_Frogadier,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Frogadier,
+ gShinyOverworldPalette_Frogadier
+ )
.levelUpLearnset = sFrogadierLevelUpLearnset,
.teachableLearnset = sFrogadierTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 36, SPECIES_GRENINJA}),
@@ -475,6 +542,14 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Greninja,
.iconPalIndex = 0,
FOOTPRINT(Greninja)
+ OVERWORLD(
+ sPicTable_Greninja,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Greninja,
+ gShinyOverworldPalette_Greninja
+ )
.levelUpLearnset = sGreninjaLevelUpLearnset,
.teachableLearnset = sGreninjaTeachableLearnset,
.formSpeciesIdTable = sGreninjaFormSpeciesIdTable,
@@ -525,6 +600,14 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Greninja,
.iconPalIndex = 0,
FOOTPRINT(Greninja)
+ OVERWORLD(
+ sPicTable_Greninja,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Greninja,
+ gShinyOverworldPalette_Greninja
+ )
.levelUpLearnset = sGreninjaLevelUpLearnset,
.teachableLearnset = sGreninjaTeachableLearnset,
.formSpeciesIdTable = sGreninjaFormSpeciesIdTable,
@@ -636,8 +719,17 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Bunnelby,
.iconPalIndex = 2,
FOOTPRINT(Bunnelby)
+ OVERWORLD(
+ sPicTable_Bunnelby,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Bunnelby,
+ gShinyOverworldPalette_Bunnelby
+ )
.levelUpLearnset = sBunnelbyLevelUpLearnset,
.teachableLearnset = sBunnelbyTeachableLearnset,
+ .eggMoveLearnset = sBunnelbyEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 20, SPECIES_DIGGERSBY}),
},
@@ -689,6 +781,14 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Diggersby,
.iconPalIndex = 2,
FOOTPRINT(Diggersby)
+ OVERWORLD(
+ sPicTable_Diggersby,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Diggersby,
+ gShinyOverworldPalette_Diggersby
+ )
.levelUpLearnset = sDiggersbyLevelUpLearnset,
.teachableLearnset = sDiggersbyTeachableLearnset,
},
@@ -743,8 +843,17 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Fletchling,
.iconPalIndex = 2,
FOOTPRINT(Fletchling)
+ OVERWORLD(
+ sPicTable_Fletchling,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Fletchling,
+ gShinyOverworldPalette_Fletchling
+ )
.levelUpLearnset = sFletchlingLevelUpLearnset,
.teachableLearnset = sFletchlingTeachableLearnset,
+ .eggMoveLearnset = sFletchlingEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 17, SPECIES_FLETCHINDER}),
},
@@ -767,7 +876,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 = _("Flechinder"),
+ .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Flechinder", "Fletchinder"),
.cryId = CRY_FLETCHINDER,
.natDexNum = NATIONAL_DEX_FLETCHINDER,
.categoryName = _("Ember"),
@@ -797,6 +906,14 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Fletchinder,
.iconPalIndex = 2,
FOOTPRINT(Fletchinder)
+ OVERWORLD(
+ sPicTable_Fletchinder,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Fletchinder,
+ gShinyOverworldPalette_Fletchinder
+ )
.levelUpLearnset = sFletchinderLevelUpLearnset,
.teachableLearnset = sFletchinderTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 35, SPECIES_TALONFLAME}),
@@ -851,6 +968,14 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Talonflame,
.iconPalIndex = 2,
FOOTPRINT(Talonflame)
+ OVERWORLD(
+ sPicTable_Talonflame,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Talonflame,
+ gShinyOverworldPalette_Talonflame
+ )
.levelUpLearnset = sTalonflameLevelUpLearnset,
.teachableLearnset = sTalonflameTeachableLearnset,
},
@@ -901,9 +1026,18 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Scatterbug, \
.iconPalIndex = 1, \
FOOTPRINT(Scatterbug) \
+ OVERWORLD( \
+ sPicTable_Scatterbug, \
+ SIZE_32x32, \
+ SHADOW_SIZE_M, \
+ TRACKS_FOOT, \
+ gOverworldPalette_Scatterbug, \
+ gShinyOverworldPalette_Scatterbug \
+ ) \
.tmIlliterate = TRUE, \
.levelUpLearnset = sScatterbugLevelUpLearnset, \
.teachableLearnset = sScatterbugTeachableLearnset, \
+ .eggMoveLearnset = sScatterbugEggMoveLearnset, \
.formSpeciesIdTable = sScatterbugFormSpeciesIdTable, \
.evolutions = EVOLUTION({EVO_LEVEL, 9, SPECIES_SPEWPA_##evolution}), \
} \
@@ -973,6 +1107,14 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Spewpa, \
.iconPalIndex = 1, \
FOOTPRINT(Spewpa) \
+ OVERWORLD( \
+ sPicTable_Spewpa, \
+ SIZE_32x32, \
+ SHADOW_SIZE_M, \
+ TRACKS_FOOT, \
+ gOverworldPalette_Spewpa, \
+ gShinyOverworldPalette_Spewpa \
+ ) \
.tmIlliterate = TRUE, \
.levelUpLearnset = sSpewpaLevelUpLearnset, \
.teachableLearnset = sSpewpaTeachableLearnset, \
@@ -1046,6 +1188,14 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Vivillon ##form, \
.iconPalIndex = iconPal, \
FOOTPRINT(Vivillon) \
+ OVERWORLD( \
+ sPicTable_Vivillon ##form, \
+ SIZE_32x32, \
+ SHADOW_SIZE_M, \
+ TRACKS_FOOT, \
+ gOverworldPalette_Vivillon ##form, \
+ gShinyOverworldPalette_Vivillon ##form \
+ ) \
.levelUpLearnset = sVivillonLevelUpLearnset, \
.teachableLearnset = sVivillonTeachableLearnset, \
.formSpeciesIdTable = sVivillonFormSpeciesIdTable
@@ -1281,8 +1431,17 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Litleo,
.iconPalIndex = 2,
FOOTPRINT(Litleo)
+ OVERWORLD(
+ sPicTable_Litleo,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Litleo,
+ gShinyOverworldPalette_Litleo
+ )
.levelUpLearnset = sLitleoLevelUpLearnset,
.teachableLearnset = sLitleoTeachableLearnset,
+ .eggMoveLearnset = sLitleoEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 35, SPECIES_PYROAR}),
},
@@ -1340,6 +1499,14 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconPalIndex = 2,
.iconPalIndexFemale = 2,
FOOTPRINT(Pyroar)
+ OVERWORLD(
+ sPicTable_Pyroar,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Pyroar,
+ gShinyOverworldPalette_Pyroar
+ )
.levelUpLearnset = sPyroarLevelUpLearnset,
.teachableLearnset = sPyroarTeachableLearnset,
},
@@ -1389,8 +1556,17 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Flabebe##Form##Flower, \
.iconPalIndex = iconPal, \
FOOTPRINT(Flabebe) \
+ OVERWORLD( \
+ sPicTable_Flabebe##Form##Flower, \
+ SIZE_32x32, \
+ SHADOW_SIZE_M, \
+ TRACKS_FOOT, \
+ gOverworldPalette_Flabebe##Form##Flower, \
+ gShinyOverworldPalette_Flabebe##Form##Flower \
+ ) \
.levelUpLearnset = sFlabebeLevelUpLearnset, \
.teachableLearnset = sFlabebeTeachableLearnset, \
+ .eggMoveLearnset = sFlabebeEggMoveLearnset, \
.formSpeciesIdTable = sFlabebeFormSpeciesIdTable, \
.evolutions = EVOLUTION({EVO_LEVEL, 19, SPECIES_FLOETTE_ ##FORM##_FLOWER})
@@ -1467,6 +1643,14 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Floette##form##Flower, \
.iconPalIndex = iconPal, \
FOOTPRINT(Floette) \
+ OVERWORLD( \
+ sPicTable_Floette ##form##Flower, \
+ SIZE_32x32, \
+ SHADOW_SIZE_M, \
+ TRACKS_FOOT, \
+ gOverworldPalette_Floette ##form##Flower, \
+ gShinyOverworldPalette_Floette ##form##Flower \
+ ) \
.formSpeciesIdTable = sFloetteFormSpeciesIdTable
#define FLOETTE_NORMAL_INFO(form, FORM, iconPal) \
@@ -1606,6 +1790,14 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Florges##Form##Flower, \
.iconPalIndex = iconPal, \
FOOTPRINT(Florges) \
+ OVERWORLD( \
+ sPicTable_Florges ##Form##Flower, \
+ SIZE_32x32, \
+ SHADOW_SIZE_M, \
+ TRACKS_FOOT, \
+ gOverworldPalette_Florges ##Form##Flower, \
+ gShinyOverworldPalette_Florges ##Form##Flower \
+ ) \
.levelUpLearnset = sFlorgesLevelUpLearnset, \
.teachableLearnset = sFlorgesTeachableLearnset, \
.formSpeciesIdTable = sFlorgesFormSpeciesIdTable
@@ -1705,8 +1897,17 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Skiddo,
.iconPalIndex = 1,
FOOTPRINT(Skiddo)
+ OVERWORLD(
+ sPicTable_Skiddo,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Skiddo,
+ gShinyOverworldPalette_Skiddo
+ )
.levelUpLearnset = sSkiddoLevelUpLearnset,
.teachableLearnset = sSkiddoTeachableLearnset,
+ .eggMoveLearnset = sSkiddoEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 32, SPECIES_GOGOAT}),
},
@@ -1758,6 +1959,14 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Gogoat,
.iconPalIndex = 1,
FOOTPRINT(Gogoat)
+ OVERWORLD(
+ sPicTable_Gogoat,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Gogoat,
+ gShinyOverworldPalette_Gogoat
+ )
.levelUpLearnset = sGogoatLevelUpLearnset,
.teachableLearnset = sGogoatTeachableLearnset,
},
@@ -1813,8 +2022,17 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Pancham,
.iconPalIndex = 1,
FOOTPRINT(Pancham)
+ OVERWORLD(
+ sPicTable_Pancham,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Pancham,
+ gShinyOverworldPalette_Pancham
+ )
.levelUpLearnset = sPanchamLevelUpLearnset,
.teachableLearnset = sPanchamTeachableLearnset,
+ .eggMoveLearnset = sPanchamEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL_DARK_TYPE_MON_IN_PARTY, 32, SPECIES_PANGORO}),
},
@@ -1867,6 +2085,14 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Pangoro,
.iconPalIndex = 1,
FOOTPRINT(Pangoro)
+ OVERWORLD(
+ sPicTable_Pangoro,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Pangoro,
+ gShinyOverworldPalette_Pangoro
+ )
.levelUpLearnset = sPangoroLevelUpLearnset,
.teachableLearnset = sPangoroTeachableLearnset,
},
@@ -1918,9 +2144,19 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Furfrou##_form, \
.iconPalIndex = _iconIdx, \
FOOTPRINT(Furfrou) \
+ OVERWORLD( \
+ sPicTable_Furfrou##_form, \
+ SIZE_32x32, \
+ SHADOW_SIZE_M, \
+ TRACKS_FOOT, \
+ gOverworldPalette_Furfrou##_form, \
+ gShinyOverworldPalette_Furfrou##_form \
+ ) \
.levelUpLearnset = sFurfrouLevelUpLearnset, \
.teachableLearnset = sFurfrouTeachableLearnset, \
+ .eggMoveLearnset = sFurfrouEggMoveLearnset, \
.formSpeciesIdTable = sFurfrouFormSpeciesIdTable, \
+ .formChangeTable = sFurfrouFormChangeTable, \
}
[SPECIES_FURFROU_NATURAL] = FURFROU_MISC_INFO(Natural, FALSE, 48, 3, 56, 0, 0),
@@ -1984,8 +2220,17 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Espurr,
.iconPalIndex = 2,
FOOTPRINT(Espurr)
+ OVERWORLD(
+ sPicTable_Espurr,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Espurr,
+ gShinyOverworldPalette_Espurr
+ )
.levelUpLearnset = sEspurrLevelUpLearnset,
.teachableLearnset = sEspurrTeachableLearnset,
+ .eggMoveLearnset = sEspurrEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL_MALE, 25, SPECIES_MEOWSTIC_MALE},
{EVO_LEVEL_FEMALE, 25, SPECIES_MEOWSTIC_FEMALE}),
},
@@ -2038,6 +2283,14 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_MeowsticMale,
.iconPalIndex = 0,
FOOTPRINT(Meowstic)
+ OVERWORLD(
+ sPicTable_MeowsticMale,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_MeowsticMale,
+ gShinyOverworldPalette_MeowsticMale
+ )
.levelUpLearnset = sMeowsticMaleLevelUpLearnset,
.teachableLearnset = sMeowsticMaleTeachableLearnset,
.formSpeciesIdTable = sMeowsticFormSpeciesIdTable,
@@ -2091,6 +2344,14 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_MeowsticFemale,
.iconPalIndex = 0,
FOOTPRINT(Meowstic)
+ OVERWORLD(
+ sPicTable_MeowsticFemale,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_MeowsticFemale,
+ gShinyOverworldPalette_MeowsticFemale
+ )
.levelUpLearnset = sMeowsticFemaleLevelUpLearnset,
.teachableLearnset = sMeowsticFemaleTeachableLearnset,
.formSpeciesIdTable = sMeowsticFormSpeciesIdTable,
@@ -2147,8 +2408,17 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Honedge,
.iconPalIndex = 2,
FOOTPRINT(Honedge)
+ OVERWORLD(
+ sPicTable_Honedge,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Honedge,
+ gShinyOverworldPalette_Honedge
+ )
.levelUpLearnset = sHonedgeLevelUpLearnset,
.teachableLearnset = sHonedgeTeachableLearnset,
+ .eggMoveLearnset = sHonedgeEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 35, SPECIES_DOUBLADE}),
},
@@ -2201,6 +2471,14 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Doublade,
.iconPalIndex = 2,
FOOTPRINT(Doublade)
+ OVERWORLD(
+ sPicTable_Doublade,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Doublade,
+ gShinyOverworldPalette_Doublade
+ )
.levelUpLearnset = sDoubladeLevelUpLearnset,
.teachableLearnset = sDoubladeTeachableLearnset,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_DUSK_STONE, SPECIES_AEGISLASH_SHIELD}),
@@ -2258,6 +2536,14 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_AegislashShield,
.iconPalIndex = 2,
FOOTPRINT(Aegislash)
+ OVERWORLD(
+ sPicTable_AegislashShield,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_AegislashShield,
+ gShinyOverworldPalette_AegislashShield
+ )
.levelUpLearnset = sAegislashLevelUpLearnset,
.teachableLearnset = sAegislashTeachableLearnset,
.formSpeciesIdTable = sAegislashFormSpeciesIdTable,
@@ -2376,8 +2662,17 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Spritzee,
.iconPalIndex = 0,
FOOTPRINT(Spritzee)
+ OVERWORLD(
+ sPicTable_Spritzee,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Spritzee,
+ gShinyOverworldPalette_Spritzee
+ )
.levelUpLearnset = sSpritzeeLevelUpLearnset,
.teachableLearnset = sSpritzeeTeachableLearnset,
+ .eggMoveLearnset = sSpritzeeEggMoveLearnset,
.evolutions = EVOLUTION({EVO_TRADE_ITEM, ITEM_SACHET, SPECIES_AROMATISSE},
{EVO_ITEM, ITEM_SACHET, SPECIES_AROMATISSE}),
},
@@ -2430,6 +2725,14 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Aromatisse,
.iconPalIndex = 0,
FOOTPRINT(Aromatisse)
+ OVERWORLD(
+ sPicTable_Aromatisse,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Aromatisse,
+ gShinyOverworldPalette_Aromatisse
+ )
.levelUpLearnset = sAromatisseLevelUpLearnset,
.teachableLearnset = sAromatisseTeachableLearnset,
},
@@ -2484,8 +2787,17 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Swirlix,
.iconPalIndex = 1,
FOOTPRINT(Swirlix)
+ OVERWORLD(
+ sPicTable_Swirlix,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Swirlix,
+ gShinyOverworldPalette_Swirlix
+ )
.levelUpLearnset = sSwirlixLevelUpLearnset,
.teachableLearnset = sSwirlixTeachableLearnset,
+ .eggMoveLearnset = sSwirlixEggMoveLearnset,
.evolutions = EVOLUTION({EVO_TRADE_ITEM, ITEM_WHIPPED_DREAM, SPECIES_SLURPUFF},
{EVO_ITEM, ITEM_WHIPPED_DREAM, SPECIES_SLURPUFF}),
},
@@ -2538,6 +2850,14 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Slurpuff,
.iconPalIndex = 1,
FOOTPRINT(Slurpuff)
+ OVERWORLD(
+ sPicTable_Slurpuff,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Slurpuff,
+ gShinyOverworldPalette_Slurpuff
+ )
.levelUpLearnset = sSlurpuffLevelUpLearnset,
.teachableLearnset = sSlurpuffTeachableLearnset,
},
@@ -2593,8 +2913,17 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Inkay,
.iconPalIndex = 0,
FOOTPRINT(Inkay)
+ OVERWORLD(
+ sPicTable_Inkay,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Inkay,
+ gShinyOverworldPalette_Inkay
+ )
.levelUpLearnset = sInkayLevelUpLearnset,
.teachableLearnset = sInkayTeachableLearnset,
+ .eggMoveLearnset = sInkayEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_MALAMAR}),
},
@@ -2646,6 +2975,14 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Malamar,
.iconPalIndex = 2,
FOOTPRINT(Malamar)
+ OVERWORLD(
+ sPicTable_Malamar,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Malamar,
+ gShinyOverworldPalette_Malamar
+ )
.levelUpLearnset = sMalamarLevelUpLearnset,
.teachableLearnset = sMalamarTeachableLearnset,
},
@@ -2700,8 +3037,17 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Binacle,
.iconPalIndex = 2,
FOOTPRINT(Binacle)
+ OVERWORLD(
+ sPicTable_Binacle,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Binacle,
+ gShinyOverworldPalette_Binacle
+ )
.levelUpLearnset = sBinacleLevelUpLearnset,
.teachableLearnset = sBinacleTeachableLearnset,
+ .eggMoveLearnset = sBinacleEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 39, SPECIES_BARBARACLE}),
},
@@ -2754,6 +3100,14 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Barbaracle,
.iconPalIndex = 2,
FOOTPRINT(Barbaracle)
+ OVERWORLD(
+ sPicTable_Barbaracle,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Barbaracle,
+ gShinyOverworldPalette_Barbaracle
+ )
.levelUpLearnset = sBarbaracleLevelUpLearnset,
.teachableLearnset = sBarbaracleTeachableLearnset,
},
@@ -2808,8 +3162,17 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Skrelp,
.iconPalIndex = 2,
FOOTPRINT(Skrelp)
+ OVERWORLD(
+ sPicTable_Skrelp,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Skrelp,
+ gShinyOverworldPalette_Skrelp
+ )
.levelUpLearnset = sSkrelpLevelUpLearnset,
.teachableLearnset = sSkrelpTeachableLearnset,
+ .eggMoveLearnset = sSkrelpEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 48, SPECIES_DRAGALGE}),
},
@@ -2861,6 +3224,14 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Dragalge,
.iconPalIndex = 5,
FOOTPRINT(Dragalge)
+ OVERWORLD(
+ sPicTable_Dragalge,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Dragalge,
+ gShinyOverworldPalette_Dragalge
+ )
.levelUpLearnset = sDragalgeLevelUpLearnset,
.teachableLearnset = sDragalgeTeachableLearnset,
},
@@ -2916,8 +3287,17 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Clauncher,
.iconPalIndex = 0,
FOOTPRINT(Clauncher)
+ OVERWORLD(
+ sPicTable_Clauncher,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Clauncher,
+ gShinyOverworldPalette_Clauncher
+ )
.levelUpLearnset = sClauncherLevelUpLearnset,
.teachableLearnset = sClauncherTeachableLearnset,
+ .eggMoveLearnset = sClauncherEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 37, SPECIES_CLAWITZER}),
},
@@ -2970,6 +3350,14 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Clawitzer,
.iconPalIndex = 0,
FOOTPRINT(Clawitzer)
+ OVERWORLD(
+ sPicTable_Clawitzer,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Clawitzer,
+ gShinyOverworldPalette_Clawitzer
+ )
.levelUpLearnset = sClawitzerLevelUpLearnset,
.teachableLearnset = sClawitzerTeachableLearnset,
},
@@ -3024,8 +3412,17 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Helioptile,
.iconPalIndex = 2,
FOOTPRINT(Helioptile)
+ OVERWORLD(
+ sPicTable_Helioptile,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Helioptile,
+ gShinyOverworldPalette_Helioptile
+ )
.levelUpLearnset = sHelioptileLevelUpLearnset,
.teachableLearnset = sHelioptileTeachableLearnset,
+ .eggMoveLearnset = sHelioptileEggMoveLearnset,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_SUN_STONE, SPECIES_HELIOLISK}),
},
@@ -3078,6 +3475,14 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Heliolisk,
.iconPalIndex = 2,
FOOTPRINT(Heliolisk)
+ OVERWORLD(
+ sPicTable_Heliolisk,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Heliolisk,
+ gShinyOverworldPalette_Heliolisk
+ )
.levelUpLearnset = sHelioliskLevelUpLearnset,
.teachableLearnset = sHelioliskTeachableLearnset,
},
@@ -3132,8 +3537,17 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Tyrunt,
.iconPalIndex = 2,
FOOTPRINT(Tyrunt)
+ OVERWORLD(
+ sPicTable_Tyrunt,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Tyrunt,
+ gShinyOverworldPalette_Tyrunt
+ )
.levelUpLearnset = sTyruntLevelUpLearnset,
.teachableLearnset = sTyruntTeachableLearnset,
+ .eggMoveLearnset = sTyruntEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL_DAY, 39, SPECIES_TYRANTRUM}),
},
@@ -3185,6 +3599,14 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Tyrantrum,
.iconPalIndex = 0,
FOOTPRINT(Tyrantrum)
+ OVERWORLD(
+ sPicTable_Tyrantrum,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Tyrantrum,
+ gShinyOverworldPalette_Tyrantrum
+ )
.levelUpLearnset = sTyrantrumLevelUpLearnset,
.teachableLearnset = sTyrantrumTeachableLearnset,
},
@@ -3239,8 +3661,17 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Amaura,
.iconPalIndex = 0,
FOOTPRINT(Amaura)
+ OVERWORLD(
+ sPicTable_Amaura,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Amaura,
+ gShinyOverworldPalette_Amaura
+ )
.levelUpLearnset = sAmauraLevelUpLearnset,
.teachableLearnset = sAmauraTeachableLearnset,
+ .eggMoveLearnset = sAmauraEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL_NIGHT, 39, SPECIES_AURORUS}),
},
@@ -3292,6 +3723,14 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Aurorus,
.iconPalIndex = 0,
FOOTPRINT(Aurorus)
+ OVERWORLD(
+ sPicTable_Aurorus,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Aurorus,
+ gShinyOverworldPalette_Aurorus
+ )
.levelUpLearnset = sAurorusLevelUpLearnset,
.teachableLearnset = sAurorusTeachableLearnset,
},
@@ -3351,8 +3790,17 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Hawlucha,
.iconPalIndex = 0,
FOOTPRINT(Hawlucha)
+ OVERWORLD(
+ sPicTable_Hawlucha,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Hawlucha,
+ gShinyOverworldPalette_Hawlucha
+ )
.levelUpLearnset = sHawluchaLevelUpLearnset,
.teachableLearnset = sHawluchaTeachableLearnset,
+ .eggMoveLearnset = sHawluchaEggMoveLearnset,
},
#endif //P_FAMILY_HAWLUCHA
@@ -3405,8 +3853,17 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Dedenne,
.iconPalIndex = 0,
FOOTPRINT(Dedenne)
+ OVERWORLD(
+ sPicTable_Dedenne,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Dedenne,
+ gShinyOverworldPalette_Dedenne
+ )
.levelUpLearnset = sDedenneLevelUpLearnset,
.teachableLearnset = sDedenneTeachableLearnset,
+ .eggMoveLearnset = sDedenneEggMoveLearnset,
},
#endif //P_FAMILY_DEDENNE
@@ -3461,6 +3918,14 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Carbink,
.iconPalIndex = 2,
FOOTPRINT(Carbink)
+ OVERWORLD(
+ sPicTable_Carbink,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Carbink,
+ gShinyOverworldPalette_Carbink
+ )
.levelUpLearnset = sCarbinkLevelUpLearnset,
.teachableLearnset = sCarbinkTeachableLearnset,
},
@@ -3516,8 +3981,17 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Goomy,
.iconPalIndex = 5,
FOOTPRINT(Goomy)
+ OVERWORLD(
+ sPicTable_Goomy,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Goomy,
+ gShinyOverworldPalette_Goomy
+ )
.levelUpLearnset = sGoomyLevelUpLearnset,
.teachableLearnset = sGoomyTeachableLearnset,
+ .eggMoveLearnset = sGoomyEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 40, SPECIES_SLIGGOO},
{EVO_NONE, 0, SPECIES_SLIGGOO_HISUIAN}),
},
@@ -3571,6 +4045,14 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Sliggoo,
.iconPalIndex = 5,
FOOTPRINT(Sliggoo)
+ OVERWORLD(
+ sPicTable_Sliggoo,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Sliggoo,
+ gShinyOverworldPalette_Sliggoo
+ )
.levelUpLearnset = sSliggooLevelUpLearnset,
.teachableLearnset = sSliggooTeachableLearnset,
.formSpeciesIdTable = sSliggooFormSpeciesIdTable,
@@ -3626,6 +4108,14 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Goodra,
.iconPalIndex = 5,
FOOTPRINT(Goodra)
+ OVERWORLD(
+ sPicTable_Goodra,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Goodra,
+ gShinyOverworldPalette_Goodra
+ )
.levelUpLearnset = sGoodraLevelUpLearnset,
.teachableLearnset = sGoodraTeachableLearnset,
.formSpeciesIdTable = sGoodraFormSpeciesIdTable,
@@ -3681,6 +4171,14 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_SliggooHisuian,
.iconPalIndex = 2,
FOOTPRINT(Sliggoo)
+ OVERWORLD(
+ sPicTable_SliggooHisuian,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_SliggooHisuian,
+ gShinyOverworldPalette_SliggooHisuian
+ )
.isHisuianForm = TRUE,
.levelUpLearnset = sSliggooHisuianLevelUpLearnset,
.teachableLearnset = sSliggooHisuianTeachableLearnset,
@@ -3737,6 +4235,14 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_GoodraHisuian,
.iconPalIndex = 2,
FOOTPRINT(Goodra)
+ OVERWORLD(
+ sPicTable_GoodraHisuian,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_GoodraHisuian,
+ gShinyOverworldPalette_GoodraHisuian
+ )
.isHisuianForm = TRUE,
.levelUpLearnset = sGoodraHisuianLevelUpLearnset,
.teachableLearnset = sGoodraHisuianTeachableLearnset,
@@ -3796,8 +4302,17 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Klefki,
.iconPalIndex = 0,
FOOTPRINT(Klefki)
+ OVERWORLD(
+ sPicTable_Klefki,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Klefki,
+ gShinyOverworldPalette_Klefki
+ )
.levelUpLearnset = sKlefkiLevelUpLearnset,
.teachableLearnset = sKlefkiTeachableLearnset,
+ .eggMoveLearnset = sKlefkiEggMoveLearnset,
},
#endif //P_FAMILY_KLEFKI
@@ -3851,8 +4366,17 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Phantump,
.iconPalIndex = 1,
FOOTPRINT(Phantump)
+ OVERWORLD(
+ sPicTable_Phantump,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Phantump,
+ gShinyOverworldPalette_Phantump
+ )
.levelUpLearnset = sPhantumpLevelUpLearnset,
.teachableLearnset = sPhantumpTeachableLearnset,
+ .eggMoveLearnset = sPhantumpEggMoveLearnset,
.evolutions = EVOLUTION({EVO_TRADE, 0, SPECIES_TREVENANT},
{EVO_ITEM, ITEM_LINKING_CORD, SPECIES_TREVENANT}),
},
@@ -3905,6 +4429,14 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Trevenant,
.iconPalIndex = 1,
FOOTPRINT(Trevenant)
+ OVERWORLD(
+ sPicTable_Trevenant,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Trevenant,
+ gShinyOverworldPalette_Trevenant
+ )
.levelUpLearnset = sTrevenantLevelUpLearnset,
.teachableLearnset = sTrevenantTeachableLearnset,
},
@@ -3959,8 +4491,17 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Pumpkaboo,
.iconPalIndex = 2,
FOOTPRINT(Pumpkaboo)
+ OVERWORLD(
+ sPicTable_PumpkabooAverage,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Pumpkaboo,
+ gShinyOverworldPalette_Pumpkaboo
+ )
.levelUpLearnset = sPumpkabooLevelUpLearnset,
.teachableLearnset = sPumpkabooTeachableLearnset,
+ .eggMoveLearnset = sPumpkabooEggMoveLearnset,
.formSpeciesIdTable = sPumpkabooFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_TRADE, 0, SPECIES_GOURGEIST_AVERAGE},
{EVO_ITEM, ITEM_LINKING_CORD, SPECIES_GOURGEIST_AVERAGE}),
@@ -4015,6 +4556,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
FOOTPRINT(Pumpkaboo)
.levelUpLearnset = sPumpkabooLevelUpLearnset,
.teachableLearnset = sPumpkabooTeachableLearnset,
+ .eggMoveLearnset = sPumpkabooEggMoveLearnset,
.formSpeciesIdTable = sPumpkabooFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_TRADE, 0, SPECIES_GOURGEIST_SMALL},
{EVO_ITEM, ITEM_LINKING_CORD, SPECIES_GOURGEIST_SMALL}),
@@ -4069,6 +4611,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
FOOTPRINT(Pumpkaboo)
.levelUpLearnset = sPumpkabooLevelUpLearnset,
.teachableLearnset = sPumpkabooTeachableLearnset,
+ .eggMoveLearnset = sPumpkabooEggMoveLearnset,
.formSpeciesIdTable = sPumpkabooFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_TRADE, 0, SPECIES_GOURGEIST_LARGE},
{EVO_ITEM, ITEM_LINKING_CORD, SPECIES_GOURGEIST_LARGE}),
@@ -4125,6 +4668,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
FOOTPRINT(Pumpkaboo)
.levelUpLearnset = sPumpkabooLevelUpLearnset,
.teachableLearnset = sPumpkabooTeachableLearnset,
+ .eggMoveLearnset = sPumpkabooEggMoveLearnset,
.formSpeciesIdTable = sPumpkabooFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_TRADE, 0, SPECIES_GOURGEIST_SUPER},
{EVO_ITEM, ITEM_LINKING_CORD, SPECIES_GOURGEIST_SUPER}),
@@ -4178,6 +4722,14 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Gourgeist,
.iconPalIndex = 2,
FOOTPRINT(Gourgeist)
+ OVERWORLD(
+ sPicTable_GourgeistAverage,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Gourgeist,
+ gShinyOverworldPalette_Gourgeist
+ )
.levelUpLearnset = sGourgeistLevelUpLearnset,
.teachableLearnset = sGourgeistTeachableLearnset,
.formSpeciesIdTable = sGourgeistFormSpeciesIdTable,
@@ -4400,8 +4952,17 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Bergmite,
.iconPalIndex = 0,
FOOTPRINT(Bergmite)
+ OVERWORLD(
+ sPicTable_Bergmite,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Bergmite,
+ gShinyOverworldPalette_Bergmite
+ )
.levelUpLearnset = sBergmiteLevelUpLearnset,
.teachableLearnset = sBergmiteTeachableLearnset,
+ .eggMoveLearnset = sBergmiteEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 37, SPECIES_AVALUGG},
{EVO_NONE, 0, SPECIES_AVALUGG_HISUIAN}),
},
@@ -4454,6 +5015,14 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Avalugg,
.iconPalIndex = 0,
FOOTPRINT(Avalugg)
+ OVERWORLD(
+ sPicTable_Avalugg,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Avalugg,
+ gShinyOverworldPalette_Avalugg
+ )
.levelUpLearnset = sAvaluggLevelUpLearnset,
.teachableLearnset = sAvaluggTeachableLearnset,
.formSpeciesIdTable = sAvaluggFormSpeciesIdTable,
@@ -4507,6 +5076,14 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_AvaluggHisuian,
.iconPalIndex = 5,
FOOTPRINT(Avalugg)
+ OVERWORLD(
+ sPicTable_AvaluggHisuian,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_AvaluggHisuian,
+ gShinyOverworldPalette_AvaluggHisuian
+ )
.isHisuianForm = TRUE,
.levelUpLearnset = sAvaluggHisuianLevelUpLearnset,
.teachableLearnset = sAvaluggHisuianTeachableLearnset,
@@ -4569,8 +5146,17 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Noibat,
.iconPalIndex = 2,
FOOTPRINT(Noibat)
+ OVERWORLD(
+ sPicTable_Noibat,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Noibat,
+ gShinyOverworldPalette_Noibat
+ )
.levelUpLearnset = sNoibatLevelUpLearnset,
.teachableLearnset = sNoibatTeachableLearnset,
+ .eggMoveLearnset = sNoibatEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 48, SPECIES_NOIVERN}),
},
@@ -4626,6 +5212,14 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Noivern,
.iconPalIndex = 2,
FOOTPRINT(Noivern)
+ OVERWORLD(
+ sPicTable_Noivern,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Noivern,
+ gShinyOverworldPalette_Noivern
+ )
.levelUpLearnset = sNoivernLevelUpLearnset,
.teachableLearnset = sNoivernTeachableLearnset,
},
@@ -4676,7 +5270,16 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_XerneasNeutral,
.iconPalIndex = 0,
FOOTPRINT(Xerneas)
+ OVERWORLD(
+ sPicTable_XerneasNeutral,
+ SIZE_64x64,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_XerneasNeutral,
+ gShinyOverworldPalette_XerneasNeutral
+ )
.isLegendary = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sXerneasLevelUpLearnset,
.teachableLearnset = sXerneasTeachableLearnset,
.formSpeciesIdTable = sXerneasFormSpeciesIdTable,
@@ -4727,7 +5330,16 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_XerneasActive,
.iconPalIndex = 0,
FOOTPRINT(Xerneas)
+ OVERWORLD(
+ sPicTable_XerneasActive,
+ SIZE_64x64,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_XerneasNeutral,
+ gShinyOverworldPalette_XerneasNeutral
+ )
.isLegendary = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sXerneasLevelUpLearnset,
.teachableLearnset = sXerneasTeachableLearnset,
.formSpeciesIdTable = sXerneasFormSpeciesIdTable,
@@ -4785,7 +5397,16 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Yveltal,
.iconPalIndex = 0,
FOOTPRINT(Yveltal)
+ OVERWORLD(
+ sPicTable_Yveltal,
+ SIZE_64x64,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Yveltal,
+ gShinyOverworldPalette_Yveltal
+ )
.isLegendary = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sYveltalLevelUpLearnset,
.teachableLearnset = sYveltalTeachableLearnset,
},
@@ -4837,7 +5458,16 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Zygarde50,
.iconPalIndex = 1,
FOOTPRINT(Zygarde)
+ OVERWORLD(
+ sPicTable_Zygarde50,
+ SIZE_64x64,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Zygarde50,
+ gShinyOverworldPalette_Zygarde50
+ )
.isLegendary = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sZygardeLevelUpLearnset,
.teachableLearnset = sZygardeTeachableLearnset,
.formSpeciesIdTable = sZygardeFormSpeciesIdTable,
@@ -4888,13 +5518,22 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Zygarde50,
.iconPalIndex = 1,
FOOTPRINT(Zygarde)
+ OVERWORLD(
+ sPicTable_Zygarde50,
+ SIZE_64x64,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Zygarde50,
+ gShinyOverworldPalette_Zygarde50
+ )
.isLegendary = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sZygardeLevelUpLearnset,
.teachableLearnset = sZygardeTeachableLearnset,
.formSpeciesIdTable = sZygardeFormSpeciesIdTable,
.formChangeTable = sZygarde50PowerConstructFormChangeTable,
},
- [SPECIES_ZYGARDE_10_AURA_BREAK] =
+ [SPECIES_ZYGARDE_10_AURA_BREAK] =
{
.baseHP = 54,
.baseAttack = 100,
@@ -4940,6 +5579,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconPalIndex = 1,
FOOTPRINT(Zygarde)
.isLegendary = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sZygardeLevelUpLearnset,
.teachableLearnset = sZygardeTeachableLearnset,
.formSpeciesIdTable = sZygardeFormSpeciesIdTable,
@@ -4992,6 +5632,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconPalIndex = 1,
FOOTPRINT(Zygarde)
.isLegendary = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sZygardeLevelUpLearnset,
.teachableLearnset = sZygardeTeachableLearnset,
.formSpeciesIdTable = sZygardeFormSpeciesIdTable,
@@ -5048,6 +5689,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconPalIndex = 1,
FOOTPRINT(Zygarde)
.isLegendary = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sZygardeLevelUpLearnset,
.teachableLearnset = sZygardeTeachableLearnset,
.formSpeciesIdTable = sZygardeFormSpeciesIdTable,
@@ -5105,7 +5747,16 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Diancie,
.iconPalIndex = 1,
FOOTPRINT(Diancie)
+ OVERWORLD(
+ sPicTable_Diancie,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Diancie,
+ gShinyOverworldPalette_Diancie
+ )
.isMythical = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sDiancieLevelUpLearnset,
.teachableLearnset = sDiancieTeachableLearnset,
.formSpeciesIdTable = sDiancieFormSpeciesIdTable,
@@ -5164,6 +5815,7 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
FOOTPRINT(Diancie)
.isMythical = TRUE,
.isMegaEvolution = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sDiancieLevelUpLearnset,
.teachableLearnset = sDiancieTeachableLearnset,
.formSpeciesIdTable = sDiancieFormSpeciesIdTable,
@@ -5222,7 +5874,16 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_HoopaConfined,
.iconPalIndex = 0,
FOOTPRINT(Hoopa)
+ OVERWORLD(
+ sPicTable_HoopaConfined,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_HoopaConfined,
+ gShinyOverworldPalette_HoopaConfined
+ )
.isMythical = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sHoopaConfinedLevelUpLearnset,
.teachableLearnset = sHoopaConfinedTeachableLearnset,
.formSpeciesIdTable = sHoopaFormSpeciesIdTable,
@@ -5278,7 +5939,16 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_HoopaUnbound,
.iconPalIndex = 0,
FOOTPRINT(Hoopa)
+ OVERWORLD(
+ sPicTable_HoopaUnbound,
+ SIZE_64x64,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_HoopaUnbound,
+ gShinyOverworldPalette_HoopaUnbound
+ )
.isMythical = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sHoopaUnboundLevelUpLearnset,
.teachableLearnset = sHoopaUnboundTeachableLearnset,
.formSpeciesIdTable = sHoopaFormSpeciesIdTable,
@@ -5335,7 +6005,16 @@ const struct SpeciesInfo gSpeciesInfoGen6[] =
.iconSprite = gMonIcon_Volcanion,
.iconPalIndex = 0,
FOOTPRINT(Volcanion)
+ OVERWORLD(
+ sPicTable_Volcanion,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Volcanion,
+ gShinyOverworldPalette_Volcanion
+ )
.isMythical = TRUE,
+ .isFrontierBanned = TRUE,
.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 629ad59aa9db..4669051d046c 100644
--- a/src/data/pokemon/species_info/gen_7_families.h
+++ b/src/data/pokemon/species_info/gen_7_families.h
@@ -52,8 +52,17 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Rowlet,
.iconPalIndex = 0,
FOOTPRINT(Rowlet)
+ OVERWORLD(
+ sPicTable_Rowlet,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Rowlet,
+ gShinyOverworldPalette_Rowlet
+ )
.levelUpLearnset = sRowletLevelUpLearnset,
.teachableLearnset = sRowletTeachableLearnset,
+ .eggMoveLearnset = sRowletEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 17, SPECIES_DARTRIX}),
},
@@ -106,6 +115,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Dartrix,
.iconPalIndex = 1,
FOOTPRINT(Dartrix)
+ OVERWORLD(
+ sPicTable_Dartrix,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Dartrix,
+ gShinyOverworldPalette_Dartrix
+ )
.levelUpLearnset = sDartrixLevelUpLearnset,
.teachableLearnset = sDartrixTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 34, SPECIES_DECIDUEYE},
@@ -160,6 +177,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Decidueye,
.iconPalIndex = 1,
FOOTPRINT(Decidueye)
+ OVERWORLD(
+ sPicTable_Decidueye,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Decidueye,
+ gShinyOverworldPalette_Decidueye
+ )
.levelUpLearnset = sDecidueyeLevelUpLearnset,
.teachableLearnset = sDecidueyeTeachableLearnset,
.formSpeciesIdTable = sDecidueyeFormSpeciesIdTable,
@@ -214,6 +239,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_DecidueyeHisuian,
.iconPalIndex = 0,
FOOTPRINT(Decidueye)
+ OVERWORLD(
+ sPicTable_DecidueyeHisuian,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_DecidueyeHisuian,
+ gShinyOverworldPalette_DecidueyeHisuian
+ )
.isHisuianForm = TRUE,
.levelUpLearnset = sDecidueyeHisuianLevelUpLearnset,
.teachableLearnset = sDecidueyeHisuianTeachableLearnset,
@@ -271,8 +304,17 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Litten,
.iconPalIndex = 0,
FOOTPRINT(Litten)
+ OVERWORLD(
+ sPicTable_Litten,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Litten,
+ gShinyOverworldPalette_Litten
+ )
.levelUpLearnset = sLittenLevelUpLearnset,
.teachableLearnset = sLittenTeachableLearnset,
+ .eggMoveLearnset = sLittenEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 17, SPECIES_TORRACAT}),
},
@@ -324,6 +366,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Torracat,
.iconPalIndex = 0,
FOOTPRINT(Torracat)
+ OVERWORLD(
+ sPicTable_Torracat,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Torracat,
+ gShinyOverworldPalette_Torracat
+ )
.levelUpLearnset = sTorracatLevelUpLearnset,
.teachableLearnset = sTorracatTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 34, SPECIES_INCINEROAR}),
@@ -377,6 +427,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Incineroar,
.iconPalIndex = 0,
FOOTPRINT(Incineroar)
+ OVERWORLD(
+ sPicTable_Incineroar,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Incineroar,
+ gShinyOverworldPalette_Incineroar
+ )
.levelUpLearnset = sIncineroarLevelUpLearnset,
.teachableLearnset = sIncineroarTeachableLearnset,
},
@@ -431,8 +489,17 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Popplio,
.iconPalIndex = 0,
FOOTPRINT(Popplio)
+ OVERWORLD(
+ sPicTable_Popplio,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Popplio,
+ gShinyOverworldPalette_Popplio
+ )
.levelUpLearnset = sPopplioLevelUpLearnset,
.teachableLearnset = sPopplioTeachableLearnset,
+ .eggMoveLearnset = sPopplioEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 17, SPECIES_BRIONNE}),
},
@@ -484,6 +551,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Brionne,
.iconPalIndex = 0,
FOOTPRINT(Brionne)
+ OVERWORLD(
+ sPicTable_Brionne,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Brionne,
+ gShinyOverworldPalette_Brionne
+ )
.levelUpLearnset = sBrionneLevelUpLearnset,
.teachableLearnset = sBrionneTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 34, SPECIES_PRIMARINA}),
@@ -537,6 +612,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Primarina,
.iconPalIndex = 0,
FOOTPRINT(Primarina)
+ OVERWORLD(
+ sPicTable_Primarina,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Primarina,
+ gShinyOverworldPalette_Primarina
+ )
.levelUpLearnset = sPrimarinaLevelUpLearnset,
.teachableLearnset = sPrimarinaTeachableLearnset,
},
@@ -592,8 +675,17 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Pikipek,
.iconPalIndex = 2,
FOOTPRINT(Pikipek)
+ OVERWORLD(
+ sPicTable_Pikipek,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Pikipek,
+ gShinyOverworldPalette_Pikipek
+ )
.levelUpLearnset = sPikipekLevelUpLearnset,
.teachableLearnset = sPikipekTeachableLearnset,
+ .eggMoveLearnset = sPikipekEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 14, SPECIES_TRUMBEAK}),
},
@@ -646,6 +738,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Trumbeak,
.iconPalIndex = 0,
FOOTPRINT(Trumbeak)
+ OVERWORLD(
+ sPicTable_Trumbeak,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Trumbeak,
+ gShinyOverworldPalette_Trumbeak
+ )
.levelUpLearnset = sTrumbeakLevelUpLearnset,
.teachableLearnset = sTrumbeakTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 28, SPECIES_TOUCANNON}),
@@ -700,6 +800,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Toucannon,
.iconPalIndex = 0,
FOOTPRINT(Toucannon)
+ OVERWORLD(
+ sPicTable_Toucannon,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Toucannon,
+ gShinyOverworldPalette_Toucannon
+ )
.levelUpLearnset = sToucannonLevelUpLearnset,
.teachableLearnset = sToucannonTeachableLearnset,
},
@@ -755,8 +863,17 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Yungoos,
.iconPalIndex = 2,
FOOTPRINT(Yungoos)
+ OVERWORLD(
+ sPicTable_Yungoos,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Yungoos,
+ gShinyOverworldPalette_Yungoos
+ )
.levelUpLearnset = sYungoosLevelUpLearnset,
.teachableLearnset = sYungoosTeachableLearnset,
+ .eggMoveLearnset = sYungoosEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL_DAY, 20, SPECIES_GUMSHOOS}),
},
@@ -805,6 +922,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Gumshoos,
.iconPalIndex = 2,
FOOTPRINT(Gumshoos)
+ OVERWORLD(
+ sPicTable_Gumshoos,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Gumshoos,
+ gShinyOverworldPalette_Gumshoos
+ )
.levelUpLearnset = sGumshoosLevelUpLearnset,
.teachableLearnset = sGumshoosTeachableLearnset,
.formSpeciesIdTable = sGumshoosFormSpeciesIdTable,
@@ -855,6 +980,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Gumshoos,
.iconPalIndex = 2,
FOOTPRINT(Gumshoos)
+ OVERWORLD(
+ sPicTable_Gumshoos,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Gumshoos,
+ gShinyOverworldPalette_Gumshoos
+ )
.isTotem = TRUE,
.levelUpLearnset = sGumshoosLevelUpLearnset,
.teachableLearnset = sGumshoosTeachableLearnset,
@@ -911,8 +1044,17 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Grubbin,
.iconPalIndex = 0,
FOOTPRINT(Grubbin)
+ OVERWORLD(
+ sPicTable_Grubbin,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Grubbin,
+ gShinyOverworldPalette_Grubbin
+ )
.levelUpLearnset = sGrubbinLevelUpLearnset,
.teachableLearnset = sGrubbinTeachableLearnset,
+ .eggMoveLearnset = sGrubbinEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 20, SPECIES_CHARJABUG}),
},
@@ -965,6 +1107,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Charjabug,
.iconPalIndex = 1,
FOOTPRINT(Charjabug)
+ OVERWORLD(
+ sPicTable_Charjabug,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Charjabug,
+ gShinyOverworldPalette_Charjabug
+ )
.levelUpLearnset = sCharjabugLevelUpLearnset,
.teachableLearnset = sCharjabugTeachableLearnset,
.evolutions = EVOLUTION({EVO_MAPSEC, MAPSEC_NEW_MAUVILLE, SPECIES_VIKAVOLT},
@@ -1017,6 +1167,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Vikavolt,
.iconPalIndex = 0,
FOOTPRINT(Vikavolt)
+ OVERWORLD(
+ sPicTable_Vikavolt,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Vikavolt,
+ gShinyOverworldPalette_Vikavolt
+ )
.levelUpLearnset = sVikavoltLevelUpLearnset,
.teachableLearnset = sVikavoltTeachableLearnset,
.formSpeciesIdTable = sVikavoltFormSpeciesIdTable,
@@ -1067,6 +1225,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Vikavolt,
.iconPalIndex = 0,
FOOTPRINT(Vikavolt)
+ OVERWORLD(
+ sPicTable_Vikavolt,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Vikavolt,
+ gShinyOverworldPalette_Vikavolt
+ )
.isTotem = TRUE,
.levelUpLearnset = sVikavoltLevelUpLearnset,
.teachableLearnset = sVikavoltTeachableLearnset,
@@ -1124,8 +1290,17 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Crabrawler,
.iconPalIndex = 2,
FOOTPRINT(Crabrawler)
+ OVERWORLD(
+ sPicTable_Crabrawler,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Crabrawler,
+ gShinyOverworldPalette_Crabrawler
+ )
.levelUpLearnset = sCrabrawlerLevelUpLearnset,
.teachableLearnset = sCrabrawlerTeachableLearnset,
+ .eggMoveLearnset = sCrabrawlerEggMoveLearnset,
.evolutions = EVOLUTION({EVO_SPECIFIC_MAP, MAP_SHOAL_CAVE_LOW_TIDE_ICE_ROOM, SPECIES_CRABOMINABLE},
{EVO_ITEM, ITEM_ICE_STONE, SPECIES_CRABOMINABLE}),
},
@@ -1150,7 +1325,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 = _("Crabminabl"),
+ .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Crabminabl", "Crabominable"),
.cryId = CRY_CRABOMINABLE,
.natDexNum = NATIONAL_DEX_CRABOMINABLE,
.categoryName = _("Woolly Crab"),
@@ -1179,6 +1354,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Crabominable,
.iconPalIndex = 2,
FOOTPRINT(Crabominable)
+ OVERWORLD(
+ sPicTable_Crabominable,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Crabominable,
+ gShinyOverworldPalette_Crabominable
+ )
.levelUpLearnset = sCrabominableLevelUpLearnset,
.teachableLearnset = sCrabominableTeachableLearnset,
},
@@ -1234,8 +1417,17 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_OricorioBaile,
.iconPalIndex = 0,
FOOTPRINT(Oricorio)
+ OVERWORLD(
+ sPicTable_OricorioBaile,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_OricorioBaile,
+ gShinyOverworldPalette_OricorioBaile
+ )
.levelUpLearnset = sOricorioLevelUpLearnset,
.teachableLearnset = sOricorioTeachableLearnset,
+ .eggMoveLearnset = sOricorioEggMoveLearnset,
.formSpeciesIdTable = sOricorioFormSpeciesIdTable,
.formChangeTable = sOricorioFormChangeTable,
},
@@ -1291,6 +1483,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
FOOTPRINT(Oricorio)
.levelUpLearnset = sOricorioLevelUpLearnset,
.teachableLearnset = sOricorioTeachableLearnset,
+ .eggMoveLearnset = sOricorioEggMoveLearnset,
.formSpeciesIdTable = sOricorioFormSpeciesIdTable,
.formChangeTable = sOricorioFormChangeTable,
},
@@ -1346,6 +1539,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
FOOTPRINT(Oricorio)
.levelUpLearnset = sOricorioLevelUpLearnset,
.teachableLearnset = sOricorioTeachableLearnset,
+ .eggMoveLearnset = sOricorioEggMoveLearnset,
.formSpeciesIdTable = sOricorioFormSpeciesIdTable,
.formChangeTable = sOricorioFormChangeTable,
},
@@ -1401,6 +1595,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
FOOTPRINT(Oricorio)
.levelUpLearnset = sOricorioLevelUpLearnset,
.teachableLearnset = sOricorioTeachableLearnset,
+ .eggMoveLearnset = sOricorioEggMoveLearnset,
.formSpeciesIdTable = sOricorioFormSpeciesIdTable,
.formChangeTable = sOricorioFormChangeTable,
},
@@ -1457,8 +1652,17 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Cutiefly,
.iconPalIndex = 2,
FOOTPRINT(Cutiefly)
+ OVERWORLD(
+ sPicTable_Cutiefly,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Cutiefly,
+ gShinyOverworldPalette_Cutiefly
+ )
.levelUpLearnset = sCutieflyLevelUpLearnset,
.teachableLearnset = sCutieflyTeachableLearnset,
+ .eggMoveLearnset = sCutieflyEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 25, SPECIES_RIBOMBEE},
{EVO_NONE, 0, SPECIES_RIBOMBEE_TOTEM}),
},
@@ -1509,6 +1713,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Ribombee,
.iconPalIndex = 2,
FOOTPRINT(Ribombee)
+ OVERWORLD(
+ sPicTable_Ribombee,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Ribombee,
+ gShinyOverworldPalette_Ribombee
+ )
.levelUpLearnset = sRibombeeLevelUpLearnset,
.teachableLearnset = sRibombeeTeachableLearnset,
.formSpeciesIdTable = sRibombeeFormSpeciesIdTable,
@@ -1560,6 +1772,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Ribombee,
.iconPalIndex = 2,
FOOTPRINT(Ribombee)
+ OVERWORLD(
+ sPicTable_Ribombee,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Ribombee,
+ gShinyOverworldPalette_Ribombee
+ )
.isTotem = TRUE,
.levelUpLearnset = sRibombeeLevelUpLearnset,
.teachableLearnset = sRibombeeTeachableLearnset,
@@ -1612,8 +1832,17 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Rockruff,
.iconPalIndex = 2,
FOOTPRINT(Rockruff)
+ OVERWORLD(
+ sPicTable_Rockruff,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Rockruff,
+ gShinyOverworldPalette_Rockruff
+ )
.levelUpLearnset = sRockruffLevelUpLearnset,
.teachableLearnset = sRockruffTeachableLearnset,
+ .eggMoveLearnset = sRockruffEggMoveLearnset,
.formSpeciesIdTable = sRockruffFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_LEVEL_DAY, 25, SPECIES_LYCANROC_MIDDAY},
{EVO_LEVEL_NIGHT, 25, SPECIES_LYCANROC_MIDNIGHT}),
@@ -1663,8 +1892,17 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Rockruff,
.iconPalIndex = 2,
FOOTPRINT(Rockruff)
+ OVERWORLD(
+ sPicTable_Rockruff,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Rockruff,
+ gShinyOverworldPalette_Rockruff
+ )
.levelUpLearnset = sRockruffLevelUpLearnset,
.teachableLearnset = sRockruffTeachableLearnset,
+ .eggMoveLearnset = sRockruffEggMoveLearnset,
.formSpeciesIdTable = sRockruffFormSpeciesIdTable,
.evolutions = EVOLUTION({EVO_LEVEL_DUSK, 25, SPECIES_LYCANROC_DUSK}),
},
@@ -1717,6 +1955,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_LycanrocMidday,
.iconPalIndex = 2,
FOOTPRINT(Lycanroc)
+ OVERWORLD(
+ sPicTable_LycanrocMidday,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_LycanrocMidday,
+ gShinyOverworldPalette_LycanrocMidday
+ )
.levelUpLearnset = sLycanrocMiddayLevelUpLearnset,
.teachableLearnset = sLycanrocMiddayTeachableLearnset,
.formSpeciesIdTable = sLycanrocFormSpeciesIdTable,
@@ -1770,6 +2016,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_LycanrocMidnight,
.iconPalIndex = 0,
FOOTPRINT(Lycanroc)
+ OVERWORLD(
+ sPicTable_LycanrocMidnight,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_LycanrocMidnight,
+ gShinyOverworldPalette_LycanrocMidnight
+ )
.levelUpLearnset = sLycanrocMidnightLevelUpLearnset,
.teachableLearnset = sLycanrocMidnightTeachableLearnset,
.formSpeciesIdTable = sLycanrocFormSpeciesIdTable,
@@ -1823,6 +2077,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_LycanrocDusk,
.iconPalIndex = 0,
FOOTPRINT(Lycanroc)
+ OVERWORLD(
+ sPicTable_LycanrocDusk,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_LycanrocDusk,
+ gShinyOverworldPalette_LycanrocDusk
+ )
.levelUpLearnset = sLycanrocDuskLevelUpLearnset,
.teachableLearnset = sLycanrocDuskTeachableLearnset,
.formSpeciesIdTable = sLycanrocFormSpeciesIdTable,
@@ -1879,8 +2141,17 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_WishiwashiSolo,
.iconPalIndex = 2,
FOOTPRINT(Wishiwashi)
+ OVERWORLD(
+ sPicTable_WishiwashiSolo,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_WishiwashiSolo,
+ gShinyOverworldPalette_WishiwashiSolo
+ )
.levelUpLearnset = sWishiwashiLevelUpLearnset,
.teachableLearnset = sWishiwashiTeachableLearnset,
+ .eggMoveLearnset = sWishiwashiEggMoveLearnset,
.formSpeciesIdTable = sWishiwashiFormSpeciesIdTable,
.formChangeTable = sWishiwashiFormChangeTable,
},
@@ -1935,6 +2206,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
FOOTPRINT(Wishiwashi)
.levelUpLearnset = sWishiwashiLevelUpLearnset,
.teachableLearnset = sWishiwashiTeachableLearnset,
+ .eggMoveLearnset = sWishiwashiEggMoveLearnset,
.formSpeciesIdTable = sWishiwashiFormSpeciesIdTable,
.formChangeTable = sWishiwashiFormChangeTable,
},
@@ -1990,8 +2262,17 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Mareanie,
.iconPalIndex = 2,
FOOTPRINT(Mareanie)
+ OVERWORLD(
+ sPicTable_Mareanie,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Mareanie,
+ gShinyOverworldPalette_Mareanie
+ )
.levelUpLearnset = sMareanieLevelUpLearnset,
.teachableLearnset = sMareanieTeachableLearnset,
+ .eggMoveLearnset = sMareanieEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 38, SPECIES_TOXAPEX}),
},
@@ -2044,6 +2325,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Toxapex,
.iconPalIndex = 0,
FOOTPRINT(Toxapex)
+ OVERWORLD(
+ sPicTable_Toxapex,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Toxapex,
+ gShinyOverworldPalette_Toxapex
+ )
.levelUpLearnset = sToxapexLevelUpLearnset,
.teachableLearnset = sToxapexTeachableLearnset,
},
@@ -2099,8 +2388,17 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Mudbray,
.iconPalIndex = 2,
FOOTPRINT(Mudbray)
+ OVERWORLD(
+ sPicTable_Mudbray,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Mudbray,
+ gShinyOverworldPalette_Mudbray
+ )
.levelUpLearnset = sMudbrayLevelUpLearnset,
.teachableLearnset = sMudbrayTeachableLearnset,
+ .eggMoveLearnset = sMudbrayEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_MUDSDALE}),
},
@@ -2153,6 +2451,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Mudsdale,
.iconPalIndex = 0,
FOOTPRINT(Mudsdale)
+ OVERWORLD(
+ sPicTable_Mudsdale,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Mudsdale,
+ gShinyOverworldPalette_Mudsdale
+ )
.levelUpLearnset = sMudsdaleLevelUpLearnset,
.teachableLearnset = sMudsdaleTeachableLearnset,
},
@@ -2208,8 +2514,17 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Dewpider,
.iconPalIndex = 0,
FOOTPRINT(Dewpider)
+ OVERWORLD(
+ sPicTable_Dewpider,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Dewpider,
+ gShinyOverworldPalette_Dewpider
+ )
.levelUpLearnset = sDewpiderLevelUpLearnset,
.teachableLearnset = sDewpiderTeachableLearnset,
+ .eggMoveLearnset = sDewpiderEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 22, SPECIES_ARAQUANID},
{EVO_NONE, 0, SPECIES_ARAQUANID_TOTEM}),
},
@@ -2259,6 +2574,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Araquanid,
.iconPalIndex = 2,
FOOTPRINT(Araquanid)
+ OVERWORLD(
+ sPicTable_Araquanid,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Araquanid,
+ gShinyOverworldPalette_Araquanid
+ )
.levelUpLearnset = sAraquanidLevelUpLearnset,
.teachableLearnset = sAraquanidTeachableLearnset,
.formSpeciesIdTable = sAraquanidFormSpeciesIdTable,
@@ -2309,6 +2632,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Araquanid,
.iconPalIndex = 2,
FOOTPRINT(Araquanid)
+ OVERWORLD(
+ sPicTable_Araquanid,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Araquanid,
+ gShinyOverworldPalette_Araquanid
+ )
.isTotem = TRUE,
.levelUpLearnset = sAraquanidLevelUpLearnset,
.teachableLearnset = sAraquanidTeachableLearnset,
@@ -2366,8 +2697,17 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Fomantis,
.iconPalIndex = 1,
FOOTPRINT(Fomantis)
+ OVERWORLD(
+ sPicTable_Fomantis,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Fomantis,
+ gShinyOverworldPalette_Fomantis
+ )
.levelUpLearnset = sFomantisLevelUpLearnset,
.teachableLearnset = sFomantisTeachableLearnset,
+ .eggMoveLearnset = sFomantisEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL_DAY, 34, SPECIES_LURANTIS},
{EVO_NONE, 0, SPECIES_LURANTIS_TOTEM}),
},
@@ -2417,6 +2757,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Lurantis,
.iconPalIndex = 1,
FOOTPRINT(Lurantis)
+ OVERWORLD(
+ sPicTable_Lurantis,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Lurantis,
+ gShinyOverworldPalette_Lurantis
+ )
.levelUpLearnset = sLurantisLevelUpLearnset,
.teachableLearnset = sLurantisTeachableLearnset,
.formSpeciesIdTable = sLurantisFormSpeciesIdTable,
@@ -2467,6 +2815,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Lurantis,
.iconPalIndex = 1,
FOOTPRINT(Lurantis)
+ OVERWORLD(
+ sPicTable_Lurantis,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Lurantis,
+ gShinyOverworldPalette_Lurantis
+ )
.isTotem = TRUE,
.levelUpLearnset = sLurantisLevelUpLearnset,
.teachableLearnset = sLurantisTeachableLearnset,
@@ -2525,8 +2881,17 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Morelull,
.iconPalIndex = 0,
FOOTPRINT(Morelull)
+ OVERWORLD(
+ sPicTable_Morelull,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Morelull,
+ gShinyOverworldPalette_Morelull
+ )
.levelUpLearnset = sMorelullLevelUpLearnset,
.teachableLearnset = sMorelullTeachableLearnset,
+ .eggMoveLearnset = sMorelullEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 24, SPECIES_SHIINOTIC}),
},
@@ -2580,6 +2945,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Shiinotic,
.iconPalIndex = 1,
FOOTPRINT(Shiinotic)
+ OVERWORLD(
+ sPicTable_Shiinotic,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Shiinotic,
+ gShinyOverworldPalette_Shiinotic
+ )
.levelUpLearnset = sShiinoticLevelUpLearnset,
.teachableLearnset = sShiinoticTeachableLearnset,
},
@@ -2635,8 +3008,17 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Salandit,
.iconPalIndex = 2,
FOOTPRINT(Salandit)
+ OVERWORLD(
+ sPicTable_Salandit,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Salandit,
+ gShinyOverworldPalette_Salandit
+ )
.levelUpLearnset = sSalanditLevelUpLearnset,
.teachableLearnset = sSalanditTeachableLearnset,
+ .eggMoveLearnset = sSalanditEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL_FEMALE, 33, SPECIES_SALAZZLE},
{EVO_NONE, 0, SPECIES_SALAZZLE_TOTEM}),
},
@@ -2686,6 +3068,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Salazzle,
.iconPalIndex = 0,
FOOTPRINT(Salazzle)
+ OVERWORLD(
+ sPicTable_Salazzle,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Salazzle,
+ gShinyOverworldPalette_Salazzle
+ )
.levelUpLearnset = sSalazzleLevelUpLearnset,
.teachableLearnset = sSalazzleTeachableLearnset,
.formSpeciesIdTable = sSalanditFormSpeciesIdTable,
@@ -2736,6 +3126,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Salazzle,
.iconPalIndex = 0,
FOOTPRINT(Salazzle)
+ OVERWORLD(
+ sPicTable_Salazzle,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Salazzle,
+ gShinyOverworldPalette_Salazzle
+ )
.isTotem = TRUE,
.levelUpLearnset = sSalazzleLevelUpLearnset,
.teachableLearnset = sSalazzleTeachableLearnset,
@@ -2792,8 +3190,17 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Stufful,
.iconPalIndex = 0,
FOOTPRINT(Stufful)
+ OVERWORLD(
+ sPicTable_Stufful,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Stufful,
+ gShinyOverworldPalette_Stufful
+ )
.levelUpLearnset = sStuffulLevelUpLearnset,
.teachableLearnset = sStuffulTeachableLearnset,
+ .eggMoveLearnset = sStuffulEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 27, SPECIES_BEWEAR}),
},
@@ -2845,6 +3252,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Bewear,
.iconPalIndex = 0,
FOOTPRINT(Bewear)
+ OVERWORLD(
+ sPicTable_Bewear,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Bewear,
+ gShinyOverworldPalette_Bewear
+ )
.levelUpLearnset = sBewearLevelUpLearnset,
.teachableLearnset = sBewearTeachableLearnset,
},
@@ -2900,8 +3315,17 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Bounsweet,
.iconPalIndex = 1,
FOOTPRINT(Bounsweet)
+ OVERWORLD(
+ sPicTable_Bounsweet,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Bounsweet,
+ gShinyOverworldPalette_Bounsweet
+ )
.levelUpLearnset = sBounsweetLevelUpLearnset,
.teachableLearnset = sBounsweetTeachableLearnset,
+ .eggMoveLearnset = sBounsweetEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 18, SPECIES_STEENEE}),
},
@@ -2955,6 +3379,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Steenee,
.iconPalIndex = 1,
FOOTPRINT(Steenee)
+ OVERWORLD(
+ sPicTable_Steenee,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Steenee,
+ gShinyOverworldPalette_Steenee
+ )
.levelUpLearnset = sSteeneeLevelUpLearnset,
.teachableLearnset = sSteeneeTeachableLearnset,
.evolutions = EVOLUTION({EVO_MOVE, MOVE_STOMP, SPECIES_TSAREENA}),
@@ -3010,6 +3442,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Tsareena,
.iconPalIndex = 1,
FOOTPRINT(Tsareena)
+ OVERWORLD(
+ sPicTable_Tsareena,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Tsareena,
+ gShinyOverworldPalette_Tsareena
+ )
.levelUpLearnset = sTsareenaLevelUpLearnset,
.teachableLearnset = sTsareenaTeachableLearnset,
},
@@ -3067,8 +3507,17 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Comfey,
.iconPalIndex = 1,
FOOTPRINT(Comfey)
+ OVERWORLD(
+ sPicTable_Comfey,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Comfey,
+ gShinyOverworldPalette_Comfey
+ )
.levelUpLearnset = sComfeyLevelUpLearnset,
.teachableLearnset = sComfeyTeachableLearnset,
+ .eggMoveLearnset = sComfeyEggMoveLearnset,
},
#endif //P_FAMILY_COMFEY
@@ -3121,8 +3570,17 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Oranguru,
.iconPalIndex = 0,
FOOTPRINT(Oranguru)
+ OVERWORLD(
+ sPicTable_Oranguru,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Oranguru,
+ gShinyOverworldPalette_Oranguru
+ )
.levelUpLearnset = sOranguruLevelUpLearnset,
.teachableLearnset = sOranguruTeachableLearnset,
+ .eggMoveLearnset = sOranguruEggMoveLearnset,
},
#endif //P_FAMILY_ORANGURU
@@ -3175,8 +3633,17 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Passimian,
.iconPalIndex = 1,
FOOTPRINT(Passimian)
+ OVERWORLD(
+ sPicTable_Passimian,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Passimian,
+ gShinyOverworldPalette_Passimian
+ )
.levelUpLearnset = sPassimianLevelUpLearnset,
.teachableLearnset = sPassimianTeachableLearnset,
+ .eggMoveLearnset = sPassimianEggMoveLearnset,
},
#endif //P_FAMILY_PASSIMIAN
@@ -3229,8 +3696,17 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Wimpod,
.iconPalIndex = 2,
FOOTPRINT(Wimpod)
+ OVERWORLD(
+ sPicTable_Wimpod,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Wimpod,
+ gShinyOverworldPalette_Wimpod
+ )
.levelUpLearnset = sWimpodLevelUpLearnset,
.teachableLearnset = sWimpodTeachableLearnset,
+ .eggMoveLearnset = sWimpodEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_GOLISOPOD}),
},
@@ -3282,6 +3758,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Golisopod,
.iconPalIndex = 2,
FOOTPRINT(Golisopod)
+ OVERWORLD(
+ sPicTable_Golisopod,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Golisopod,
+ gShinyOverworldPalette_Golisopod
+ )
.levelUpLearnset = sGolisopodLevelUpLearnset,
.teachableLearnset = sGolisopodTeachableLearnset,
},
@@ -3337,8 +3821,17 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Sandygast,
.iconPalIndex = 1,
FOOTPRINT(Sandygast)
+ OVERWORLD(
+ sPicTable_Sandygast,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Sandygast,
+ gShinyOverworldPalette_Sandygast
+ )
.levelUpLearnset = sSandygastLevelUpLearnset,
.teachableLearnset = sSandygastTeachableLearnset,
+ .eggMoveLearnset = sSandygastEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 42, SPECIES_PALOSSAND}),
},
@@ -3391,6 +3884,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Palossand,
.iconPalIndex = 2,
FOOTPRINT(Palossand)
+ OVERWORLD(
+ sPicTable_Palossand,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Palossand,
+ gShinyOverworldPalette_Palossand
+ )
.levelUpLearnset = sPalossandLevelUpLearnset,
.teachableLearnset = sPalossandTeachableLearnset,
},
@@ -3445,8 +3946,17 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Pyukumuku,
.iconPalIndex = 0,
FOOTPRINT(Pyukumuku)
+ OVERWORLD(
+ sPicTable_Pyukumuku,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Pyukumuku,
+ gShinyOverworldPalette_Pyukumuku
+ )
.levelUpLearnset = sPyukumukuLevelUpLearnset,
.teachableLearnset = sPyukumukuTeachableLearnset,
+ .eggMoveLearnset = sPyukumukuEggMoveLearnset,
},
#endif //P_FAMILY_PYUKUMUKU
@@ -3499,6 +4009,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_TypeNull,
.iconPalIndex = 0,
FOOTPRINT(Type_Null)
+ OVERWORLD(
+ sPicTable_TypeNull,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_TypeNull,
+ gShinyOverworldPalette_TypeNull
+ )
.isLegendary = TRUE,
.levelUpLearnset = sTypeNullLevelUpLearnset,
.teachableLearnset = sTypeNullTeachableLearnset,
@@ -3552,6 +4070,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.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, \
@@ -3608,32 +4134,40 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.teachableLearnset = sMiniorTeachableLearnset, \
.formSpeciesIdTable = sMiniorFormSpeciesIdTable
-#define MINIOR_METEOR_SPECIES_INFO(Form) \
- { \
- .baseHP = 60, \
- .baseAttack = 60, \
- .baseDefense = 100, \
- .baseSpeed = 60, \
- .baseSpAttack = 60, \
- .baseSpDefense = 100, \
- .weight = 400, \
- .description = gMiniorMeteorPokedexText, \
- .frontPic = gMonFrontPic_MiniorMeteor, \
- .frontPicSize = MON_COORDS_SIZE(48, 40), \
- .frontPicYOffset = 14, \
- .frontAnimFrames = sAnims_MiniorMeteor, \
- .frontAnimId = ANIM_TUMBLING_FRONT_FLIP_TWICE, \
- .enemyMonElevation = 17, \
- .backPic = gMonBackPic_MiniorMeteor, \
- .backPicSize = MON_COORDS_SIZE(56, 40), \
- .backPicYOffset = 14, \
- /*.backAnimId = BACK_ANIM_NONE,*/ \
- .palette = gMonPalette_MiniorMeteor, \
- .shinyPalette = gMonShinyPalette_MiniorMeteor, \
- .iconSprite = gMonIcon_MiniorMeteor, \
- .iconPalIndex = 0, \
- .formChangeTable = sMinior ##Form##FormChangeTable, \
- MINIOR_MISC_INFO(BODY_COLOR_BROWN), \
+#define MINIOR_METEOR_SPECIES_INFO(Form) \
+ { \
+ .baseHP = 60, \
+ .baseAttack = 60, \
+ .baseDefense = 100, \
+ .baseSpeed = 60, \
+ .baseSpAttack = 60, \
+ .baseSpDefense = 100, \
+ .weight = 400, \
+ .description = gMiniorMeteorPokedexText, \
+ .frontPic = gMonFrontPic_MiniorMeteor, \
+ .frontPicSize = MON_COORDS_SIZE(48, 40), \
+ .frontPicYOffset = 14, \
+ .frontAnimFrames = sAnims_MiniorMeteor, \
+ .frontAnimId = ANIM_TUMBLING_FRONT_FLIP_TWICE, \
+ .enemyMonElevation = 17, \
+ .backPic = gMonBackPic_MiniorMeteor, \
+ .backPicSize = MON_COORDS_SIZE(56, 40), \
+ .backPicYOffset = 14, \
+ /*.backAnimId = BACK_ANIM_NONE,*/ \
+ .palette = gMonPalette_MiniorMeteor, \
+ .shinyPalette = gMonShinyPalette_MiniorMeteor, \
+ .iconSprite = gMonIcon_MiniorMeteor, \
+ .iconPalIndex = 0, \
+ OVERWORLD( \
+ sPicTable_MiniorMeteor, \
+ SIZE_32x32, \
+ SHADOW_SIZE_M, \
+ TRACKS_FOOT, \
+ gOverworldPalette_MiniorMeteor, \
+ gShinyOverworldPalette_MiniorMeteor \
+ ) \
+ .formChangeTable = sMinior ##Form##FormChangeTable, \
+ MINIOR_MISC_INFO(BODY_COLOR_BROWN), \
}
#define MINIOR_CORE_SPECIES_INFO(Form, color, iconPal) \
@@ -3729,8 +4263,17 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Komala,
.iconPalIndex = 2,
FOOTPRINT(Komala)
+ OVERWORLD(
+ sPicTable_Komala,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Komala,
+ gShinyOverworldPalette_Komala
+ )
.levelUpLearnset = sKomalaLevelUpLearnset,
.teachableLearnset = sKomalaTeachableLearnset,
+ .eggMoveLearnset = sKomalaEggMoveLearnset,
},
#endif //P_FAMILY_KOMALA
@@ -3784,8 +4327,17 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Turtonator,
.iconPalIndex = 0,
FOOTPRINT(Turtonator)
+ OVERWORLD(
+ sPicTable_Turtonator,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Turtonator,
+ gShinyOverworldPalette_Turtonator
+ )
.levelUpLearnset = sTurtonatorLevelUpLearnset,
.teachableLearnset = sTurtonatorTeachableLearnset,
+ .eggMoveLearnset = sTurtonatorEggMoveLearnset,
},
#endif //P_FAMILY_TURTONATOR
@@ -3835,8 +4387,17 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Togedemaru,
.iconPalIndex = 2,
FOOTPRINT(Togedemaru)
+ OVERWORLD(
+ sPicTable_Togedemaru,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Togedemaru,
+ gShinyOverworldPalette_Togedemaru
+ )
.levelUpLearnset = sTogedemaruLevelUpLearnset,
.teachableLearnset = sTogedemaruTeachableLearnset,
+ .eggMoveLearnset = sTogedemaruEggMoveLearnset,
.formSpeciesIdTable = sTogedemaruFormSpeciesIdTable,
},
@@ -3885,9 +4446,18 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Togedemaru,
.iconPalIndex = 2,
FOOTPRINT(Togedemaru)
+ OVERWORLD(
+ sPicTable_Togedemaru,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Togedemaru,
+ gShinyOverworldPalette_Togedemaru
+ )
.isTotem = TRUE,
.levelUpLearnset = sTogedemaruLevelUpLearnset,
.teachableLearnset = sTogedemaruTeachableLearnset,
+ .eggMoveLearnset = sTogedemaruEggMoveLearnset,
.formSpeciesIdTable = sTogedemaruFormSpeciesIdTable,
},
#endif //P_FAMILY_TOGEDEMARU
@@ -3938,8 +4508,17 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_MimikyuDisguised,
.iconPalIndex = 1,
FOOTPRINT(Mimikyu)
+ OVERWORLD(
+ sPicTable_MimikyuDisguised,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_MimikyuDisguised,
+ gShinyOverworldPalette_MimikyuDisguised
+ )
.levelUpLearnset = sMimikyuLevelUpLearnset,
.teachableLearnset = sMimikyuTeachableLearnset,
+ .eggMoveLearnset = sMimikyuEggMoveLearnset,
.formSpeciesIdTable = sMimikyuFormSpeciesIdTable,
.formChangeTable = sMimikyuFormChangeTable,
},
@@ -3991,6 +4570,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
FOOTPRINT(Mimikyu)
.levelUpLearnset = sMimikyuLevelUpLearnset,
.teachableLearnset = sMimikyuTeachableLearnset,
+ .eggMoveLearnset = sMimikyuEggMoveLearnset,
.formSpeciesIdTable = sMimikyuFormSpeciesIdTable,
.formChangeTable = sMimikyuFormChangeTable,
},
@@ -4043,6 +4623,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.isTotem = TRUE,
.levelUpLearnset = sMimikyuLevelUpLearnset,
.teachableLearnset = sMimikyuTeachableLearnset,
+ .eggMoveLearnset = sMimikyuEggMoveLearnset,
.formSpeciesIdTable = sMimikyuFormSpeciesIdTable,
.formChangeTable = sMimikyuTotemFormChangeTable,
},
@@ -4095,6 +4676,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.isTotem = TRUE,
.levelUpLearnset = sMimikyuLevelUpLearnset,
.teachableLearnset = sMimikyuTeachableLearnset,
+ .eggMoveLearnset = sMimikyuEggMoveLearnset,
.formSpeciesIdTable = sMimikyuFormSpeciesIdTable,
.formChangeTable = sMimikyuTotemFormChangeTable,
},
@@ -4150,8 +4732,17 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Bruxish,
.iconPalIndex = 0,
FOOTPRINT(Bruxish)
+ OVERWORLD(
+ sPicTable_Bruxish,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Bruxish,
+ gShinyOverworldPalette_Bruxish
+ )
.levelUpLearnset = sBruxishLevelUpLearnset,
.teachableLearnset = sBruxishTeachableLearnset,
+ .eggMoveLearnset = sBruxishEggMoveLearnset,
},
#endif //P_FAMILY_BRUXISH
@@ -4205,8 +4796,17 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Drampa,
.iconPalIndex = 0,
FOOTPRINT(Drampa)
+ OVERWORLD(
+ sPicTable_Drampa,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Drampa,
+ gShinyOverworldPalette_Drampa
+ )
.levelUpLearnset = sDrampaLevelUpLearnset,
.teachableLearnset = sDrampaTeachableLearnset,
+ .eggMoveLearnset = sDrampaEggMoveLearnset,
},
#endif //P_FAMILY_DRAMPA
@@ -4261,6 +4861,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Dhelmise,
.iconPalIndex = 1,
FOOTPRINT(Dhelmise)
+ OVERWORLD(
+ sPicTable_Dhelmise,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Dhelmise,
+ gShinyOverworldPalette_Dhelmise
+ )
.levelUpLearnset = sDhelmiseLevelUpLearnset,
.teachableLearnset = sDhelmiseTeachableLearnset,
},
@@ -4316,8 +4924,17 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_JangmoO,
.iconPalIndex = 2,
FOOTPRINT(JangmoO)
+ OVERWORLD(
+ sPicTable_JangmoO,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_JangmoO,
+ gShinyOverworldPalette_JangmoO
+ )
.levelUpLearnset = sJangmoOLevelUpLearnset,
.teachableLearnset = sJangmoOTeachableLearnset,
+ .eggMoveLearnset = sJangmoOEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 35, SPECIES_HAKAMO_O}),
},
@@ -4370,6 +4987,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_HakamoO,
.iconPalIndex = 2,
FOOTPRINT(HakamoO)
+ OVERWORLD(
+ sPicTable_HakamoO,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_HakamoO,
+ gShinyOverworldPalette_HakamoO
+ )
.levelUpLearnset = sHakamoOLevelUpLearnset,
.teachableLearnset = sHakamoOTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 45, SPECIES_KOMMO_O},
@@ -4421,6 +5046,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_KommoO,
.iconPalIndex = 2,
FOOTPRINT(KommoO)
+ OVERWORLD(
+ sPicTable_KommoO,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_KommoO,
+ gShinyOverworldPalette_KommoO
+ )
.levelUpLearnset = sKommoOLevelUpLearnset,
.teachableLearnset = sKommoOTeachableLearnset,
.formSpeciesIdTable = sKommoOFormSpeciesIdTable,
@@ -4471,6 +5104,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_KommoO,
.iconPalIndex = 2,
FOOTPRINT(KommoO)
+ OVERWORLD(
+ sPicTable_KommoO,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_KommoO,
+ gShinyOverworldPalette_KommoO
+ )
.isTotem = TRUE,
.levelUpLearnset = sKommoOLevelUpLearnset,
.teachableLearnset = sKommoOTeachableLearnset,
@@ -4527,7 +5168,15 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_TapuKoko,
.iconSprite = gMonIcon_TapuKoko,
.iconPalIndex = 0,
- FOOTPRINT(Tapu_Koko)
+ FOOTPRINT(TapuKoko)
+ OVERWORLD(
+ sPicTable_TapuKoko,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_TapuKoko,
+ gShinyOverworldPalette_TapuKoko
+ )
.isLegendary = TRUE,
.levelUpLearnset = sTapuKokoLevelUpLearnset,
.teachableLearnset = sTapuKokoTeachableLearnset,
@@ -4583,7 +5232,15 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_TapuLele,
.iconSprite = gMonIcon_TapuLele,
.iconPalIndex = 0,
- FOOTPRINT(Tapu_Lele)
+ FOOTPRINT(TapuLele)
+ OVERWORLD(
+ sPicTable_TapuLele,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_TapuLele,
+ gShinyOverworldPalette_TapuLele
+ )
.isLegendary = TRUE,
.levelUpLearnset = sTapuLeleLevelUpLearnset,
.teachableLearnset = sTapuLeleTeachableLearnset,
@@ -4639,7 +5296,15 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_TapuBulu,
.iconSprite = gMonIcon_TapuBulu,
.iconPalIndex = 2,
- FOOTPRINT(Tapu_Bulu)
+ FOOTPRINT(TapuBulu)
+ OVERWORLD(
+ sPicTable_TapuBulu,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_TapuBulu,
+ gShinyOverworldPalette_TapuBulu
+ )
.isLegendary = TRUE,
.levelUpLearnset = sTapuBuluLevelUpLearnset,
.teachableLearnset = sTapuBuluTeachableLearnset,
@@ -4696,7 +5361,15 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.shinyPalette = gMonShinyPalette_TapuFini,
.iconSprite = gMonIcon_TapuFini,
.iconPalIndex = 0,
- FOOTPRINT(Tapu_Fini)
+ FOOTPRINT(TapuFini)
+ OVERWORLD(
+ sPicTable_TapuFini,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_TapuFini,
+ gShinyOverworldPalette_TapuFini
+ )
.isLegendary = TRUE,
.levelUpLearnset = sTapuFiniLevelUpLearnset,
.teachableLearnset = sTapuFiniTeachableLearnset,
@@ -4753,8 +5426,17 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Cosmog,
.iconPalIndex = 2,
FOOTPRINT(Cosmog)
+ OVERWORLD(
+ sPicTable_Cosmog,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Cosmog,
+ gShinyOverworldPalette_Cosmog
+ )
.isLegendary = TRUE,
.tmIlliterate = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sCosmogLevelUpLearnset,
.teachableLearnset = sCosmogTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 43, SPECIES_COSMOEM}),
@@ -4810,8 +5492,17 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Cosmoem,
.iconPalIndex = 0,
FOOTPRINT(Cosmoem)
+ OVERWORLD(
+ sPicTable_Cosmoem,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Cosmoem,
+ gShinyOverworldPalette_Cosmoem
+ )
.isLegendary = TRUE,
.tmIlliterate = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sCosmoemLevelUpLearnset,
.teachableLearnset = sCosmoemTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL_DAY, 53, SPECIES_SOLGALEO},
@@ -4866,7 +5557,16 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Solgaleo,
.iconPalIndex = 0,
FOOTPRINT(Solgaleo)
+ OVERWORLD(
+ sPicTable_Solgaleo,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Solgaleo,
+ gShinyOverworldPalette_Solgaleo
+ )
.isLegendary = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sSolgaleoLevelUpLearnset,
.teachableLearnset = sSolgaleoTeachableLearnset,
},
@@ -4920,7 +5620,16 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Lunala,
.iconPalIndex = 2,
FOOTPRINT(Lunala)
+ OVERWORLD(
+ sPicTable_Lunala,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Lunala,
+ gShinyOverworldPalette_Lunala
+ )
.isLegendary = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sLunalaLevelUpLearnset,
.teachableLearnset = sLunalaTeachableLearnset,
},
@@ -4976,6 +5685,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Nihilego,
.iconPalIndex = 0,
FOOTPRINT(Nihilego)
+ OVERWORLD(
+ sPicTable_Nihilego,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Nihilego,
+ gShinyOverworldPalette_Nihilego
+ )
.isUltraBeast = TRUE,
.levelUpLearnset = sNihilegoLevelUpLearnset,
.teachableLearnset = sNihilegoTeachableLearnset,
@@ -5032,6 +5749,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Buzzwole,
.iconPalIndex = 0,
FOOTPRINT(Buzzwole)
+ OVERWORLD(
+ sPicTable_Buzzwole,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Buzzwole,
+ gShinyOverworldPalette_Buzzwole
+ )
.isUltraBeast = TRUE,
.levelUpLearnset = sBuzzwoleLevelUpLearnset,
.teachableLearnset = sBuzzwoleTeachableLearnset,
@@ -5087,6 +5812,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Pheromosa,
.iconPalIndex = 2,
FOOTPRINT(Pheromosa)
+ OVERWORLD(
+ sPicTable_Pheromosa,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Pheromosa,
+ gShinyOverworldPalette_Pheromosa
+ )
.isUltraBeast = TRUE,
.levelUpLearnset = sPheromosaLevelUpLearnset,
.teachableLearnset = sPheromosaTeachableLearnset,
@@ -5142,6 +5875,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Xurkitree,
.iconPalIndex = 0,
FOOTPRINT(Xurkitree)
+ OVERWORLD(
+ sPicTable_Xurkitree,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Xurkitree,
+ gShinyOverworldPalette_Xurkitree
+ )
.isUltraBeast = TRUE,
.levelUpLearnset = sXurkitreeLevelUpLearnset,
.teachableLearnset = sXurkitreeTeachableLearnset,
@@ -5199,6 +5940,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Celesteela,
.iconPalIndex = 0,
FOOTPRINT(Celesteela)
+ OVERWORLD(
+ sPicTable_Celesteela,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Celesteela,
+ gShinyOverworldPalette_Celesteela
+ )
.isUltraBeast = TRUE,
.levelUpLearnset = sCelesteelaLevelUpLearnset,
.teachableLearnset = sCelesteelaTeachableLearnset,
@@ -5255,6 +6004,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Kartana,
.iconPalIndex = 0,
FOOTPRINT(Kartana)
+ OVERWORLD(
+ sPicTable_Kartana,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Kartana,
+ gShinyOverworldPalette_Kartana
+ )
.isUltraBeast = TRUE,
.levelUpLearnset = sKartanaLevelUpLearnset,
.teachableLearnset = sKartanaTeachableLearnset,
@@ -5310,6 +6067,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Guzzlord,
.iconPalIndex = 0,
FOOTPRINT(Guzzlord)
+ OVERWORLD(
+ sPicTable_Guzzlord,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Guzzlord,
+ gShinyOverworldPalette_Guzzlord
+ )
.isUltraBeast = TRUE,
.levelUpLearnset = sGuzzlordLevelUpLearnset,
.teachableLearnset = sGuzzlordTeachableLearnset,
@@ -5368,7 +6133,16 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Necrozma,
.iconPalIndex = 0,
FOOTPRINT(Necrozma)
+ OVERWORLD(
+ sPicTable_Necrozma,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Necrozma,
+ gShinyOverworldPalette_Necrozma
+ )
.isLegendary = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sNecrozmaLevelUpLearnset,
.teachableLearnset = sNecrozmaTeachableLearnset,
.formSpeciesIdTable = sNecrozmaFormSpeciesIdTable,
@@ -5424,8 +6198,17 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_NecrozmaDuskMane,
.iconPalIndex = 0,
FOOTPRINT(Necrozma)
+ OVERWORLD(
+ sPicTable_NecrozmaDuskMane,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_NecrozmaDuskMane,
+ gShinyOverworldPalette_NecrozmaDuskMane
+ )
.isLegendary = TRUE,
.cannotBeTraded = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sNecrozmaLevelUpLearnset,
.teachableLearnset = sNecrozmaTeachableLearnset,
.formSpeciesIdTable = sNecrozmaFormSpeciesIdTable,
@@ -5482,8 +6265,17 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_NecrozmaDawnWings,
.iconPalIndex = 0,
FOOTPRINT(Necrozma)
+ OVERWORLD(
+ sPicTable_NecrozmaDawnWings,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_NecrozmaDawnWings,
+ gShinyOverworldPalette_NecrozmaDawnWings
+ )
.isLegendary = TRUE,
.cannotBeTraded = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sNecrozmaLevelUpLearnset,
.teachableLearnset = sNecrozmaTeachableLearnset,
.formSpeciesIdTable = sNecrozmaFormSpeciesIdTable,
@@ -5546,6 +6338,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.isLegendary = TRUE,
.isUltraBurst = TRUE,
.cannotBeTraded = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sNecrozmaLevelUpLearnset,
.teachableLearnset = sNecrozmaTeachableLearnset,
.formSpeciesIdTable = sNecrozmaFormSpeciesIdTable,
@@ -5603,7 +6396,16 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Magearna,
.iconPalIndex = 0,
FOOTPRINT(Magearna)
+ OVERWORLD(
+ sPicTable_Magearna,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Magearna,
+ gShinyOverworldPalette_Magearna
+ )
.isMythical = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sMagearnaLevelUpLearnset,
.teachableLearnset = sMagearnaTeachableLearnset,
.formSpeciesIdTable = sMagearnaFormSpeciesIdTable,
@@ -5657,6 +6459,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconPalIndex = 0,
FOOTPRINT(Magearna)
.isMythical = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sMagearnaLevelUpLearnset,
.teachableLearnset = sMagearnaTeachableLearnset,
.formSpeciesIdTable = sMagearnaFormSpeciesIdTable,
@@ -5714,7 +6517,16 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Marshadow,
.iconPalIndex = 0,
FOOTPRINT(Marshadow)
+ OVERWORLD(
+ sPicTable_Marshadow,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Marshadow,
+ gShinyOverworldPalette_Marshadow
+ )
.isMythical = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sMarshadowLevelUpLearnset,
.teachableLearnset = sMarshadowTeachableLearnset,
},
@@ -5769,6 +6581,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Poipole,
.iconPalIndex = 0,
FOOTPRINT(Poipole)
+ OVERWORLD(
+ sPicTable_Poipole,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Poipole,
+ gShinyOverworldPalette_Poipole
+ )
.isUltraBeast = TRUE,
.levelUpLearnset = sPoipoleLevelUpLearnset,
.teachableLearnset = sPoipoleTeachableLearnset,
@@ -5823,6 +6643,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Naganadel,
.iconPalIndex = 0,
FOOTPRINT(Naganadel)
+ OVERWORLD(
+ sPicTable_Naganadel,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Naganadel,
+ gShinyOverworldPalette_Naganadel
+ )
.isUltraBeast = TRUE,
.levelUpLearnset = sNaganadelLevelUpLearnset,
.teachableLearnset = sNaganadelTeachableLearnset,
@@ -5878,6 +6706,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Stakataka,
.iconPalIndex = 0,
FOOTPRINT(Stakataka)
+ OVERWORLD(
+ sPicTable_Stakataka,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Stakataka,
+ gShinyOverworldPalette_Stakataka
+ )
.isUltraBeast = TRUE,
.levelUpLearnset = sStakatakaLevelUpLearnset,
.teachableLearnset = sStakatakaTeachableLearnset,
@@ -5905,7 +6741,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.abilities = { ABILITY_BEAST_BOOST, ABILITY_NONE, ABILITY_NONE },
.bodyColor = BODY_COLOR_WHITE,
.noFlip = TRUE,
- .speciesName = _("Blacephaln"),
+ .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Blacephaln", "Blacephalon"),
.cryId = CRY_BLACEPHALON,
.natDexNum = NATIONAL_DEX_BLACEPHALON,
.categoryName = _("Fireworks"),
@@ -5933,6 +6769,14 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Blacephalon,
.iconPalIndex = 0,
FOOTPRINT(Blacephalon)
+ OVERWORLD(
+ sPicTable_Blacephalon,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Blacephalon,
+ gShinyOverworldPalette_Blacephalon
+ )
.isUltraBeast = TRUE,
.levelUpLearnset = sBlacephalonLevelUpLearnset,
.teachableLearnset = sBlacephalonTeachableLearnset,
@@ -5987,7 +6831,16 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Zeraora,
.iconPalIndex = 0,
FOOTPRINT(Zeraora)
+ OVERWORLD(
+ sPicTable_Zeraora,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Zeraora,
+ gShinyOverworldPalette_Zeraora
+ )
.isMythical = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sZeraoraLevelUpLearnset,
.teachableLearnset = sZeraoraTeachableLearnset,
},
@@ -6041,7 +6894,16 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Meltan,
.iconPalIndex = 2,
FOOTPRINT(Meltan)
+ OVERWORLD(
+ sPicTable_Meltan,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Meltan,
+ gShinyOverworldPalette_Meltan
+ )
.isMythical = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sMeltanLevelUpLearnset,
.teachableLearnset = sMeltanTeachableLearnset,
},
@@ -6093,7 +6955,16 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
.iconSprite = gMonIcon_Melmetal,
.iconPalIndex = 2,
FOOTPRINT(Melmetal)
+ OVERWORLD(
+ sPicTable_Melmetal,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Melmetal,
+ gShinyOverworldPalette_Melmetal
+ )
.isMythical = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sMelmetalLevelUpLearnset,
.teachableLearnset = sMelmetalTeachableLearnset,
.formSpeciesIdTable = sMelmetalFormSpeciesIdTable,
@@ -6151,6 +7022,7 @@ const struct SpeciesInfo gSpeciesInfoGen7[] =
FOOTPRINT(Melmetal)
.isMythical = TRUE,
.isGigantamax = TRUE,
+ .isFrontierBanned = TRUE,
.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 10a1774d0d70..bb878e1fed27 100644
--- a/src/data/pokemon/species_info/gen_8_families.h
+++ b/src/data/pokemon/species_info/gen_8_families.h
@@ -52,8 +52,17 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Grookey,
.iconPalIndex = 1,
FOOTPRINT(Grookey)
+ OVERWORLD(
+ sPicTable_Grookey,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Grookey,
+ gShinyOverworldPalette_Grookey
+ )
.levelUpLearnset = sGrookeyLevelUpLearnset,
.teachableLearnset = sGrookeyTeachableLearnset,
+ .eggMoveLearnset = sGrookeyEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 16, SPECIES_THWACKEY}),
},
@@ -104,6 +113,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Thwackey,
.iconPalIndex = 1,
FOOTPRINT(Thwackey)
+ OVERWORLD(
+ sPicTable_Thwackey,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Thwackey,
+ gShinyOverworldPalette_Thwackey
+ )
.levelUpLearnset = sThwackeyLevelUpLearnset,
.teachableLearnset = sThwackeyTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 35, SPECIES_RILLABOOM}),
@@ -156,6 +173,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Rillaboom,
.iconPalIndex = 1,
FOOTPRINT(Rillaboom)
+ OVERWORLD(
+ sPicTable_Rillaboom,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Rillaboom,
+ gShinyOverworldPalette_Rillaboom
+ )
.levelUpLearnset = sRillaboomLevelUpLearnset,
.teachableLearnset = sRillaboomTeachableLearnset,
.formSpeciesIdTable = sRillaboomFormSpeciesIdTable,
@@ -268,8 +293,17 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Scorbunny,
.iconPalIndex = 0,
FOOTPRINT(Scorbunny)
+ OVERWORLD(
+ sPicTable_Scorbunny,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Scorbunny,
+ gShinyOverworldPalette_Scorbunny
+ )
.levelUpLearnset = sScorbunnyLevelUpLearnset,
.teachableLearnset = sScorbunnyTeachableLearnset,
+ .eggMoveLearnset = sScorbunnyEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 16, SPECIES_RABOOT}),
},
@@ -320,6 +354,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Raboot,
.iconPalIndex = 0,
FOOTPRINT(Raboot)
+ OVERWORLD(
+ sPicTable_Raboot,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Raboot,
+ gShinyOverworldPalette_Raboot
+ )
.levelUpLearnset = sRabootLevelUpLearnset,
.teachableLearnset = sRabootTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 35, SPECIES_CINDERACE}),
@@ -373,6 +415,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Cinderace,
.iconPalIndex = 0,
FOOTPRINT(Cinderace)
+ OVERWORLD(
+ sPicTable_Cinderace,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Cinderace,
+ gShinyOverworldPalette_Cinderace
+ )
.levelUpLearnset = sCinderaceLevelUpLearnset,
.teachableLearnset = sCinderaceTeachableLearnset,
.formSpeciesIdTable = sCinderaceFormSpeciesIdTable,
@@ -487,8 +537,17 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Sobble,
.iconPalIndex = 2,
FOOTPRINT(Sobble)
+ OVERWORLD(
+ sPicTable_Sobble,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Sobble,
+ gShinyOverworldPalette_Sobble
+ )
.levelUpLearnset = sSobbleLevelUpLearnset,
.teachableLearnset = sSobbleTeachableLearnset,
+ .eggMoveLearnset = sSobbleEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 16, SPECIES_DRIZZILE}),
},
@@ -539,6 +598,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Drizzile,
.iconPalIndex = 2,
FOOTPRINT(Drizzile)
+ OVERWORLD(
+ sPicTable_Drizzile,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Drizzile,
+ gShinyOverworldPalette_Drizzile
+ )
.levelUpLearnset = sDrizzileLevelUpLearnset,
.teachableLearnset = sDrizzileTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 35, SPECIES_INTELEON}),
@@ -592,6 +659,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Inteleon,
.iconPalIndex = 0,
FOOTPRINT(Inteleon)
+ OVERWORLD(
+ sPicTable_Inteleon,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Inteleon,
+ gShinyOverworldPalette_Inteleon
+ )
.levelUpLearnset = sInteleonLevelUpLearnset,
.teachableLearnset = sInteleonTeachableLearnset,
.formSpeciesIdTable = sInteleonFormSpeciesIdTable,
@@ -705,8 +780,17 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Skwovet,
.iconPalIndex = 2,
FOOTPRINT(Skwovet)
+ OVERWORLD(
+ sPicTable_Skwovet,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Skwovet,
+ gShinyOverworldPalette_Skwovet
+ )
.levelUpLearnset = sSkwovetLevelUpLearnset,
.teachableLearnset = sSkwovetTeachableLearnset,
+ .eggMoveLearnset = sSkwovetEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 24, SPECIES_GREEDENT}),
},
@@ -759,6 +843,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Greedent,
.iconPalIndex = 0,
FOOTPRINT(Greedent)
+ OVERWORLD(
+ sPicTable_Greedent,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Greedent,
+ gShinyOverworldPalette_Greedent
+ )
.levelUpLearnset = sGreedentLevelUpLearnset,
.teachableLearnset = sGreedentTeachableLearnset,
},
@@ -813,8 +905,17 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Rookidee,
.iconPalIndex = 0,
FOOTPRINT(Rookidee)
+ OVERWORLD(
+ sPicTable_Rookidee,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Rookidee,
+ gShinyOverworldPalette_Rookidee
+ )
.levelUpLearnset = sRookideeLevelUpLearnset,
.teachableLearnset = sRookideeTeachableLearnset,
+ .eggMoveLearnset = sRookideeEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 18, SPECIES_CORVISQUIRE}),
},
@@ -837,7 +938,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 = _("Corvisquir"),
+ .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Corvisquir", "Corvisquire"),
.cryId = CRY_CORVISQUIRE,
.natDexNum = NATIONAL_DEX_CORVISQUIRE,
.categoryName = _("Raven"),
@@ -867,6 +968,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Corvisquire,
.iconPalIndex = 0,
FOOTPRINT(Corvisquire)
+ OVERWORLD(
+ sPicTable_Corvisquire,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Corvisquire,
+ gShinyOverworldPalette_Corvisquire
+ )
.levelUpLearnset = sCorvisquireLevelUpLearnset,
.teachableLearnset = sCorvisquireTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 38, SPECIES_CORVIKNIGHT}),
@@ -891,7 +1000,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 = HANDLE_EXPANDED_SPECIES_NAME("Corviknigh", "Corviknight"),
.cryId = CRY_CORVIKNIGHT,
.natDexNum = NATIONAL_DEX_CORVIKNIGHT,
.categoryName = _("Raven"),
@@ -920,6 +1029,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Corviknight,
.iconPalIndex = 0,
FOOTPRINT(Corviknight)
+ OVERWORLD(
+ sPicTable_Corviknight,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Corviknight,
+ gShinyOverworldPalette_Corviknight
+ )
.levelUpLearnset = sCorviknightLevelUpLearnset,
.teachableLearnset = sCorviknightTeachableLearnset,
.formSpeciesIdTable = sCorviknightFormSpeciesIdTable,
@@ -1032,9 +1149,18 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Blipbug,
.iconPalIndex = 0,
FOOTPRINT(Blipbug)
+ OVERWORLD(
+ sPicTable_Blipbug,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Blipbug,
+ gShinyOverworldPalette_Blipbug
+ )
.tmIlliterate = TRUE,
.levelUpLearnset = sBlipbugLevelUpLearnset,
.teachableLearnset = sBlipbugTeachableLearnset,
+ .eggMoveLearnset = sBlipbugEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 10, SPECIES_DOTTLER}),
},
@@ -1087,6 +1213,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Dottler,
.iconPalIndex = 2,
FOOTPRINT(Dottler)
+ OVERWORLD(
+ sPicTable_Dottler,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Dottler,
+ gShinyOverworldPalette_Dottler
+ )
.levelUpLearnset = sDottlerLevelUpLearnset,
.teachableLearnset = sDottlerTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_ORBEETLE}),
@@ -1142,6 +1276,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Orbeetle,
.iconPalIndex = 0,
FOOTPRINT(Orbeetle)
+ OVERWORLD(
+ sPicTable_Orbeetle,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Orbeetle,
+ gShinyOverworldPalette_Orbeetle
+ )
.levelUpLearnset = sOrbeetleLevelUpLearnset,
.teachableLearnset = sOrbeetleTeachableLearnset,
.formSpeciesIdTable = sOrbeetleFormSpeciesIdTable,
@@ -1256,8 +1398,17 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Nickit,
.iconPalIndex = 2,
FOOTPRINT(Nickit)
+ OVERWORLD(
+ sPicTable_Nickit,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Nickit,
+ gShinyOverworldPalette_Nickit
+ )
.levelUpLearnset = sNickitLevelUpLearnset,
.teachableLearnset = sNickitTeachableLearnset,
+ .eggMoveLearnset = sNickitEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 18, SPECIES_THIEVUL}),
},
@@ -1309,6 +1460,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Thievul,
.iconPalIndex = 2,
FOOTPRINT(Thievul)
+ OVERWORLD(
+ sPicTable_Thievul,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Thievul,
+ gShinyOverworldPalette_Thievul
+ )
.levelUpLearnset = sThievulLevelUpLearnset,
.teachableLearnset = sThievulTeachableLearnset,
},
@@ -1363,8 +1522,17 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Gossifleur,
.iconPalIndex = 1,
FOOTPRINT(Gossifleur)
+ OVERWORLD(
+ sPicTable_Gossifleur,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Gossifleur,
+ gShinyOverworldPalette_Gossifleur
+ )
.levelUpLearnset = sGossifleurLevelUpLearnset,
.teachableLearnset = sGossifleurTeachableLearnset,
+ .eggMoveLearnset = sGossifleurEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 20, SPECIES_ELDEGOSS}),
},
@@ -1416,6 +1584,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Eldegoss,
.iconPalIndex = 1,
FOOTPRINT(Eldegoss)
+ OVERWORLD(
+ sPicTable_Eldegoss,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Eldegoss,
+ gShinyOverworldPalette_Eldegoss
+ )
.levelUpLearnset = sEldegossLevelUpLearnset,
.teachableLearnset = sEldegossTeachableLearnset,
},
@@ -1470,8 +1646,17 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Wooloo,
.iconPalIndex = 0,
FOOTPRINT(Wooloo)
+ OVERWORLD(
+ sPicTable_Wooloo,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Wooloo,
+ gShinyOverworldPalette_Wooloo
+ )
.levelUpLearnset = sWoolooLevelUpLearnset,
.teachableLearnset = sWoolooTeachableLearnset,
+ .eggMoveLearnset = sWoolooEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 24, SPECIES_DUBWOOL}),
},
@@ -1523,6 +1708,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Dubwool,
.iconPalIndex = 2,
FOOTPRINT(Dubwool)
+ OVERWORLD(
+ sPicTable_Dubwool,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Dubwool,
+ gShinyOverworldPalette_Dubwool
+ )
.levelUpLearnset = sDubwoolLevelUpLearnset,
.teachableLearnset = sDubwoolTeachableLearnset,
},
@@ -1576,8 +1769,17 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Chewtle,
.iconPalIndex = 0,
FOOTPRINT(Chewtle)
+ OVERWORLD(
+ sPicTable_Chewtle,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Chewtle,
+ gShinyOverworldPalette_Chewtle
+ )
.levelUpLearnset = sChewtleLevelUpLearnset,
.teachableLearnset = sChewtleTeachableLearnset,
+ .eggMoveLearnset = sChewtleEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 22, SPECIES_DREDNAW}),
},
@@ -1628,6 +1830,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Drednaw,
.iconPalIndex = 0,
FOOTPRINT(Drednaw)
+ OVERWORLD(
+ sPicTable_Drednaw,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Drednaw,
+ gShinyOverworldPalette_Drednaw
+ )
.levelUpLearnset = sDrednawLevelUpLearnset,
.teachableLearnset = sDrednawTeachableLearnset,
.formSpeciesIdTable = sDrednawFormSpeciesIdTable,
@@ -1741,8 +1951,17 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Yamper,
.iconPalIndex = 1,
FOOTPRINT(Yamper)
+ OVERWORLD(
+ sPicTable_Yamper,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Yamper,
+ gShinyOverworldPalette_Yamper
+ )
.levelUpLearnset = sYamperLevelUpLearnset,
.teachableLearnset = sYamperTeachableLearnset,
+ .eggMoveLearnset = sYamperEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 25, SPECIES_BOLTUND}),
},
@@ -1794,6 +2013,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Boltund,
.iconPalIndex = 1,
FOOTPRINT(Boltund)
+ OVERWORLD(
+ sPicTable_Boltund,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Boltund,
+ gShinyOverworldPalette_Boltund
+ )
.levelUpLearnset = sBoltundLevelUpLearnset,
.teachableLearnset = sBoltundTeachableLearnset,
},
@@ -1848,8 +2075,17 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Rolycoly,
.iconPalIndex = 0,
FOOTPRINT(Rolycoly)
+ OVERWORLD(
+ sPicTable_Rolycoly,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Rolycoly,
+ gShinyOverworldPalette_Rolycoly
+ )
.levelUpLearnset = sRolycolyLevelUpLearnset,
.teachableLearnset = sRolycolyTeachableLearnset,
+ .eggMoveLearnset = sRolycolyEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 18, SPECIES_CARKOL}),
},
@@ -1900,6 +2136,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Carkol,
.iconPalIndex = 0,
FOOTPRINT(Carkol)
+ OVERWORLD(
+ sPicTable_Carkol,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Carkol,
+ gShinyOverworldPalette_Carkol
+ )
.levelUpLearnset = sCarkolLevelUpLearnset,
.teachableLearnset = sCarkolTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 34, SPECIES_COALOSSAL}),
@@ -1953,6 +2197,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Coalossal,
.iconPalIndex = 0,
FOOTPRINT(Coalossal)
+ OVERWORLD(
+ sPicTable_Coalossal,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Coalossal,
+ gShinyOverworldPalette_Coalossal
+ )
.levelUpLearnset = sCoalossalLevelUpLearnset,
.teachableLearnset = sCoalossalTeachableLearnset,
.formSpeciesIdTable = sCoalossalFormSpeciesIdTable,
@@ -2066,9 +2318,18 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Applin,
.iconPalIndex = 1,
FOOTPRINT(Applin)
+ OVERWORLD(
+ sPicTable_Applin,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Applin,
+ gShinyOverworldPalette_Applin
+ )
.tmIlliterate = TRUE,
.levelUpLearnset = sApplinLevelUpLearnset,
.teachableLearnset = sApplinTeachableLearnset,
+ .eggMoveLearnset = sApplinEggMoveLearnset,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_TART_APPLE, SPECIES_FLAPPLE},
{EVO_ITEM, ITEM_SWEET_APPLE, SPECIES_APPLETUN},
{EVO_ITEM, ITEM_SYRUPY_APPLE, SPECIES_DIPPLIN}),
@@ -2122,6 +2383,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Flapple,
.iconPalIndex = 1,
FOOTPRINT(Flapple)
+ OVERWORLD(
+ sPicTable_Flapple,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Flapple,
+ gShinyOverworldPalette_Flapple
+ )
.levelUpLearnset = sFlappleLevelUpLearnset,
.teachableLearnset = sFlappleTeachableLearnset,
.formSpeciesIdTable = sFlappleFormSpeciesIdTable,
@@ -2232,6 +2501,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Appletun,
.iconPalIndex = 1,
FOOTPRINT(Appletun)
+ OVERWORLD(
+ sPicTable_Appletun,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Appletun,
+ gShinyOverworldPalette_Appletun
+ )
.levelUpLearnset = sAppletunLevelUpLearnset,
.teachableLearnset = sAppletunTeachableLearnset,
.formSpeciesIdTable = sAppletunFormSpeciesIdTable,
@@ -2450,8 +2727,17 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Silicobra,
.iconPalIndex = 1,
FOOTPRINT(Silicobra)
+ OVERWORLD(
+ sPicTable_Silicobra,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Silicobra,
+ gShinyOverworldPalette_Silicobra
+ )
.levelUpLearnset = sSilicobraLevelUpLearnset,
.teachableLearnset = sSilicobraTeachableLearnset,
+ .eggMoveLearnset = sSilicobraEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 36, SPECIES_SANDACONDA}),
},
@@ -2503,6 +2789,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Sandaconda,
.iconPalIndex = 1,
FOOTPRINT(Sandaconda)
+ OVERWORLD(
+ sPicTable_Sandaconda,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Sandaconda,
+ gShinyOverworldPalette_Sandaconda
+ )
.levelUpLearnset = sSandacondaLevelUpLearnset,
.teachableLearnset = sSandacondaTeachableLearnset,
.formSpeciesIdTable = sSandacondaFormSpeciesIdTable,
@@ -2615,8 +2909,17 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Cramorant,
.iconPalIndex = 0,
FOOTPRINT(Cramorant)
+ OVERWORLD(
+ sPicTable_Cramorant,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Cramorant,
+ gShinyOverworldPalette_Cramorant
+ )
.levelUpLearnset = sCramorantLevelUpLearnset,
.teachableLearnset = sCramorantTeachableLearnset,
+ .eggMoveLearnset = sCramorantEggMoveLearnset,
.formSpeciesIdTable = sCramorantFormSpeciesIdTable,
.formChangeTable = sCramorantFormChangeTable,
},
@@ -2671,6 +2974,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
FOOTPRINT(Cramorant)
.levelUpLearnset = sCramorantLevelUpLearnset,
.teachableLearnset = sCramorantTeachableLearnset,
+ .eggMoveLearnset = sCramorantEggMoveLearnset,
.formSpeciesIdTable = sCramorantFormSpeciesIdTable,
.formChangeTable = sCramorantFormChangeTable,
},
@@ -2725,6 +3029,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
FOOTPRINT(Cramorant)
.levelUpLearnset = sCramorantLevelUpLearnset,
.teachableLearnset = sCramorantTeachableLearnset,
+ .eggMoveLearnset = sCramorantEggMoveLearnset,
.formSpeciesIdTable = sCramorantFormSpeciesIdTable,
.formChangeTable = sCramorantFormChangeTable,
},
@@ -2779,8 +3084,17 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Arrokuda,
.iconPalIndex = 2,
FOOTPRINT(Arrokuda)
+ OVERWORLD(
+ sPicTable_Arrokuda,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Arrokuda,
+ gShinyOverworldPalette_Arrokuda
+ )
.levelUpLearnset = sArrokudaLevelUpLearnset,
.teachableLearnset = sArrokudaTeachableLearnset,
+ .eggMoveLearnset = sArrokudaEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 26, SPECIES_BARRASKEWDA}),
},
@@ -2803,7 +3117,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 = _("Barraskewd"),
+ .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Barraskewd", "Barraskewda"),
.cryId = CRY_BARRASKEWDA,
.natDexNum = NATIONAL_DEX_BARRASKEWDA,
.categoryName = _("Skewer"),
@@ -2832,6 +3146,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Barraskewda,
.iconPalIndex = 2,
FOOTPRINT(Barraskewda)
+ OVERWORLD(
+ sPicTable_Barraskewda,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Barraskewda,
+ gShinyOverworldPalette_Barraskewda
+ )
.levelUpLearnset = sBarraskewdaLevelUpLearnset,
.teachableLearnset = sBarraskewdaTeachableLearnset,
},
@@ -2886,8 +3208,17 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Toxel,
.iconPalIndex = 2,
FOOTPRINT(Toxel)
+ OVERWORLD(
+ sPicTable_Toxel,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Toxel,
+ gShinyOverworldPalette_Toxel
+ )
.levelUpLearnset = sToxelLevelUpLearnset,
.teachableLearnset = sToxelTeachableLearnset,
+ .eggMoveLearnset = sToxelEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL_NATURE_AMPED, 30, SPECIES_TOXTRICITY_AMPED},
{EVO_LEVEL_NATURE_LOW_KEY, 30, SPECIES_TOXTRICITY_LOW_KEY}),
},
@@ -2940,6 +3271,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_ToxtricityAmped,
.iconPalIndex = 2,
FOOTPRINT(Toxtricity)
+ OVERWORLD(
+ sPicTable_ToxtricityAmped,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_ToxtricityAmped,
+ gShinyOverworldPalette_ToxtricityAmped
+ )
.levelUpLearnset = sToxtricityAmpedLevelUpLearnset,
.teachableLearnset = sToxtricityAmpedTeachableLearnset,
.formSpeciesIdTable = sToxtricityFormSpeciesIdTable,
@@ -3046,6 +3385,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_ToxtricityLowKey,
.iconPalIndex = 2,
FOOTPRINT(Toxtricity)
+ OVERWORLD(
+ sPicTable_ToxtricityLowKey,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_ToxtricityLowKey,
+ gShinyOverworldPalette_ToxtricityLowKey
+ )
.levelUpLearnset = sToxtricityLowKeyLevelUpLearnset,
.teachableLearnset = sToxtricityLowKeyTeachableLearnset,
.formSpeciesIdTable = sToxtricityFormSpeciesIdTable,
@@ -3097,6 +3444,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_ToxtricityGigantamax,
.iconPalIndex = 0,
FOOTPRINT(Toxtricity)
+ OVERWORLD(
+ sPicTable_ToxtricityLowKey,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_ToxtricityLowKey,
+ gShinyOverworldPalette_ToxtricityLowKey
+ )
.isGigantamax = TRUE,
.levelUpLearnset = sToxtricityLowKeyLevelUpLearnset,
.teachableLearnset = sToxtricityLowKeyTeachableLearnset,
@@ -3154,8 +3509,17 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Sizzlipede,
.iconPalIndex = 0,
FOOTPRINT(Sizzlipede)
+ OVERWORLD(
+ sPicTable_Sizzlipede,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Sizzlipede,
+ gShinyOverworldPalette_Sizzlipede
+ )
.levelUpLearnset = sSizzlipedeLevelUpLearnset,
.teachableLearnset = sSizzlipedeTeachableLearnset,
+ .eggMoveLearnset = sSizzlipedeEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 28, SPECIES_CENTISKORCH}),
},
@@ -3178,7 +3542,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 = HANDLE_EXPANDED_SPECIES_NAME("Centiskorc", "Centiskorch"),
.cryId = CRY_CENTISKORCH,
.natDexNum = NATIONAL_DEX_CENTISKORCH,
.categoryName = _("Radiator"),
@@ -3207,6 +3571,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Centiskorch,
.iconPalIndex = 0,
FOOTPRINT(Centiskorch)
+ OVERWORLD(
+ sPicTable_Centiskorch,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Centiskorch,
+ gShinyOverworldPalette_Centiskorch
+ )
.levelUpLearnset = sCentiskorchLevelUpLearnset,
.teachableLearnset = sCentiskorchTeachableLearnset,
.formSpeciesIdTable = sCentiskorchFormSpeciesIdTable,
@@ -3320,8 +3692,17 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Clobbopus,
.iconPalIndex = 0,
FOOTPRINT(Clobbopus)
+ OVERWORLD(
+ sPicTable_Clobbopus,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Clobbopus,
+ gShinyOverworldPalette_Clobbopus
+ )
.levelUpLearnset = sClobbopusLevelUpLearnset,
.teachableLearnset = sClobbopusTeachableLearnset,
+ .eggMoveLearnset = sClobbopusEggMoveLearnset,
.evolutions = EVOLUTION({EVO_MOVE, MOVE_TAUNT, SPECIES_GRAPPLOCT}),
},
@@ -3372,6 +3753,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Grapploct,
.iconPalIndex = 2,
FOOTPRINT(Grapploct)
+ OVERWORLD(
+ sPicTable_Grapploct,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Grapploct,
+ gShinyOverworldPalette_Grapploct
+ )
.levelUpLearnset = sGrapploctLevelUpLearnset,
.teachableLearnset = sGrapploctTeachableLearnset,
},
@@ -3426,6 +3815,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Sinistea,
.iconPalIndex = 2,
FOOTPRINT(Sinistea)
+ OVERWORLD(
+ sPicTable_Sinistea,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Sinistea,
+ gShinyOverworldPalette_Sinistea
+ )
.levelUpLearnset = sSinisteaLevelUpLearnset,
.teachableLearnset = sSinisteaTeachableLearnset,
.formSpeciesIdTable = sSinisteaFormSpeciesIdTable,
@@ -3481,6 +3878,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Sinistea,
.iconPalIndex = 2,
FOOTPRINT(Sinistea)
+ OVERWORLD(
+ sPicTable_Sinistea,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Sinistea,
+ gShinyOverworldPalette_Sinistea
+ )
.levelUpLearnset = sSinisteaLevelUpLearnset,
.teachableLearnset = sSinisteaTeachableLearnset,
.formSpeciesIdTable = sSinisteaFormSpeciesIdTable,
@@ -3506,7 +3911,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 = _("Polteageis"),
+ .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Polteageis", "Polteageist"),
.cryId = CRY_POLTEAGEIST,
.natDexNum = NATIONAL_DEX_POLTEAGEIST,
.categoryName = _("Black Tea"),
@@ -3535,6 +3940,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Polteageist,
.iconPalIndex = 2,
FOOTPRINT(Polteageist)
+ OVERWORLD(
+ sPicTable_Polteageist,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Polteageist,
+ gShinyOverworldPalette_Polteageist
+ )
.levelUpLearnset = sPolteageistLevelUpLearnset,
.teachableLearnset = sPolteageistTeachableLearnset,
.formSpeciesIdTable = sPolteageistFormSpeciesIdTable,
@@ -3559,7 +3972,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 = _("Polteageis"),
+ .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Polteageis", "Polteageist"),
.cryId = CRY_POLTEAGEIST,
.natDexNum = NATIONAL_DEX_POLTEAGEIST,
.categoryName = _("Black Tea"),
@@ -3589,6 +4002,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Polteageist,
.iconPalIndex = 2,
FOOTPRINT(Polteageist)
+ OVERWORLD(
+ sPicTable_Polteageist,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Polteageist,
+ gShinyOverworldPalette_Polteageist
+ )
.levelUpLearnset = sPolteageistLevelUpLearnset,
.teachableLearnset = sPolteageistTeachableLearnset,
.formSpeciesIdTable = sPolteageistFormSpeciesIdTable,
@@ -3644,8 +4065,17 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Hatenna,
.iconPalIndex = 0,
FOOTPRINT(Hatenna)
+ OVERWORLD(
+ sPicTable_Hatenna,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Hatenna,
+ gShinyOverworldPalette_Hatenna
+ )
.levelUpLearnset = sHatennaLevelUpLearnset,
.teachableLearnset = sHatennaTeachableLearnset,
+ .eggMoveLearnset = sHatennaEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 32, SPECIES_HATTREM}),
},
@@ -3696,6 +4126,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Hattrem,
.iconPalIndex = 0,
FOOTPRINT(Hattrem)
+ OVERWORLD(
+ sPicTable_Hattrem,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Hattrem,
+ gShinyOverworldPalette_Hattrem
+ )
.levelUpLearnset = sHattremLevelUpLearnset,
.teachableLearnset = sHattremTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 42, SPECIES_HATTERENE}),
@@ -3748,6 +4186,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Hatterene,
.iconPalIndex = 0,
FOOTPRINT(Hatterene)
+ OVERWORLD(
+ sPicTable_Hatterene,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Hatterene,
+ gShinyOverworldPalette_Hatterene
+ )
.levelUpLearnset = sHattereneLevelUpLearnset,
.teachableLearnset = sHattereneTeachableLearnset,
.formSpeciesIdTable = sHattereneFormSpeciesIdTable,
@@ -3861,6 +4307,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Impidimp,
.iconPalIndex = 0,
FOOTPRINT(Impidimp)
+ OVERWORLD(
+ sPicTable_Impidimp,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Impidimp,
+ gShinyOverworldPalette_Impidimp
+ )
.levelUpLearnset = sImpidimpLevelUpLearnset,
.teachableLearnset = sImpidimpTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 32, SPECIES_MORGREM}),
@@ -3914,6 +4368,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Morgrem,
.iconPalIndex = 0,
FOOTPRINT(Morgrem)
+ OVERWORLD(
+ sPicTable_Morgrem,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Morgrem,
+ gShinyOverworldPalette_Morgrem
+ )
.levelUpLearnset = sMorgremLevelUpLearnset,
.teachableLearnset = sMorgremTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 42, SPECIES_GRIMMSNARL}),
@@ -3967,6 +4429,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Grimmsnarl,
.iconPalIndex = 0,
FOOTPRINT(Grimmsnarl)
+ OVERWORLD(
+ sPicTable_Grimmsnarl,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Grimmsnarl,
+ gShinyOverworldPalette_Grimmsnarl
+ )
.levelUpLearnset = sGrimmsnarlLevelUpLearnset,
.teachableLearnset = sGrimmsnarlTeachableLearnset,
.formSpeciesIdTable = sGrimmsnarlFormSpeciesIdTable,
@@ -4080,8 +4550,17 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Milcery,
.iconPalIndex = 1,
FOOTPRINT(Milcery)
+ OVERWORLD(
+ sPicTable_Milcery,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Milcery,
+ gShinyOverworldPalette_Milcery
+ )
.levelUpLearnset = sMilceryLevelUpLearnset,
.teachableLearnset = sMilceryTeachableLearnset,
+ .eggMoveLearnset = sMilceryEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 0, SPECIES_ALCREMIE_STRAWBERRY_VANILLA_CREAM},
{EVO_LEVEL, 0, SPECIES_ALCREMIE_STRAWBERRY_RUBY_CREAM},
{EVO_LEVEL, 0, SPECIES_ALCREMIE_STRAWBERRY_MATCHA_CREAM},
@@ -4140,6 +4619,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_AlcremieStrawberryVanillaCream, /*AlcremieStrawberry##cream##*/ \
.iconPalIndex = 1, \
FOOTPRINT(Alcremie) \
+ OVERWORLD( \
+ sPicTable_AlcremieStrawberry, /*Alcremie ##sweet*/ \
+ SIZE_32x32, \
+ SHADOW_SIZE_M, \
+ TRACKS_FOOT, \
+ gOverworldPalette_AlcremieStrawberryVanillaCream, /*Alcremie ##sweet##cream*/ \
+ gShinyOverworldPalette_AlcremieStrawberryVanillaCream /*Alcremie ##sweet##cream*/ \
+ ) \
.levelUpLearnset = sAlcremieLevelUpLearnset, \
.teachableLearnset = sAlcremieTeachableLearnset, \
.formSpeciesIdTable = sAlcremieFormSpeciesIdTable, \
@@ -4299,6 +4786,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Falinks,
.iconPalIndex = 0,
FOOTPRINT(Falinks)
+ OVERWORLD(
+ sPicTable_Falinks,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Falinks,
+ gShinyOverworldPalette_Falinks
+ )
.levelUpLearnset = sFalinksLevelUpLearnset,
.teachableLearnset = sFalinksTeachableLearnset,
},
@@ -4352,8 +4847,17 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Pincurchin,
.iconPalIndex = 2,
FOOTPRINT(Pincurchin)
+ OVERWORLD(
+ sPicTable_Pincurchin,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Pincurchin,
+ gShinyOverworldPalette_Pincurchin
+ )
.levelUpLearnset = sPincurchinLevelUpLearnset,
.teachableLearnset = sPincurchinTeachableLearnset,
+ .eggMoveLearnset = sPincurchinEggMoveLearnset,
},
#endif //P_FAMILY_PINCURCHIN
@@ -4407,8 +4911,17 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Snom,
.iconPalIndex = 0,
FOOTPRINT(Snom)
+ OVERWORLD(
+ sPicTable_Snom,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Snom,
+ gShinyOverworldPalette_Snom
+ )
.levelUpLearnset = sSnomLevelUpLearnset,
.teachableLearnset = sSnomTeachableLearnset,
+ .eggMoveLearnset = sSnomEggMoveLearnset,
.evolutions = EVOLUTION({EVO_FRIENDSHIP_NIGHT, 0, SPECIES_FROSMOTH}),
},
@@ -4461,6 +4974,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Frosmoth,
.iconPalIndex = 0,
FOOTPRINT(Frosmoth)
+ OVERWORLD(
+ sPicTable_Frosmoth,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Frosmoth,
+ gShinyOverworldPalette_Frosmoth
+ )
.levelUpLearnset = sFrosmothLevelUpLearnset,
.teachableLearnset = sFrosmothTeachableLearnset,
},
@@ -4486,7 +5007,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 = _("Stonjourne"),
+ .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Stonjourne", "Stonjourner"),
.cryId = CRY_STONJOURNER,
.natDexNum = NATIONAL_DEX_STONJOURNER,
.categoryName = _("Big Rock"),
@@ -4515,8 +5036,17 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Stonjourner,
.iconPalIndex = 2,
FOOTPRINT(Stonjourner)
+ OVERWORLD(
+ sPicTable_Stonjourner,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Stonjourner,
+ gShinyOverworldPalette_Stonjourner
+ )
.levelUpLearnset = sStonjournerLevelUpLearnset,
.teachableLearnset = sStonjournerTeachableLearnset,
+ .eggMoveLearnset = sStonjournerEggMoveLearnset,
},
#endif //P_FAMILY_STONJOURNER
@@ -4569,8 +5099,17 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_EiscueIceFace,
.iconPalIndex = 0,
FOOTPRINT(Eiscue)
+ OVERWORLD(
+ sPicTable_EiscueIceFace,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_EiscueIceFace,
+ gShinyOverworldPalette_EiscueIceFace
+ )
.levelUpLearnset = sEiscueLevelUpLearnset,
.teachableLearnset = sEiscueTeachableLearnset,
+ .eggMoveLearnset = sEiscueEggMoveLearnset,
.formSpeciesIdTable = sEiscueFormSpeciesIdTable,
.formChangeTable = sEiscueFormChangeTable,
},
@@ -4625,6 +5164,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
FOOTPRINT(Eiscue)
.levelUpLearnset = sEiscueLevelUpLearnset,
.teachableLearnset = sEiscueTeachableLearnset,
+ .eggMoveLearnset = sEiscueEggMoveLearnset,
.formSpeciesIdTable = sEiscueFormSpeciesIdTable,
.formChangeTable = sEiscueFormChangeTable,
},
@@ -4679,6 +5219,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_IndeedeeMale,
.iconPalIndex = 2,
FOOTPRINT(Indeedee)
+ OVERWORLD(
+ sPicTable_IndeedeeMale,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_IndeedeeMale,
+ gShinyOverworldPalette_IndeedeeMale
+ )
.levelUpLearnset = sIndeedeeMaleLevelUpLearnset,
.teachableLearnset = sIndeedeeMaleTeachableLearnset,
.formSpeciesIdTable = sIndeedeeFormSpeciesIdTable,
@@ -4734,6 +5282,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
FOOTPRINT(Indeedee)
.levelUpLearnset = sIndeedeeFemaleLevelUpLearnset,
.teachableLearnset = sIndeedeeFemaleTeachableLearnset,
+ .eggMoveLearnset = sIndeedeeFemaleEggMoveLearnset,
.formSpeciesIdTable = sIndeedeeFormSpeciesIdTable,
},
#endif //P_FAMILY_INDEEDEE
@@ -4787,8 +5336,17 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_MorpekoFullBelly,
.iconPalIndex = 2,
FOOTPRINT(Morpeko)
+ OVERWORLD(
+ sPicTable_MorpekoFullBelly,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_MorpekoFullBelly,
+ gShinyOverworldPalette_MorpekoFullBelly
+ )
.levelUpLearnset = sMorpekoLevelUpLearnset,
.teachableLearnset = sMorpekoTeachableLearnset,
+ .eggMoveLearnset = sMorpekoEggMoveLearnset,
.formSpeciesIdTable = sMorpekoFormSpeciesIdTable,
.formChangeTable = sMorpekoFormChangeTable,
},
@@ -4843,6 +5401,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
FOOTPRINT(Morpeko)
.levelUpLearnset = sMorpekoLevelUpLearnset,
.teachableLearnset = sMorpekoTeachableLearnset,
+ .eggMoveLearnset = sMorpekoEggMoveLearnset,
.formSpeciesIdTable = sMorpekoFormSpeciesIdTable,
.formChangeTable = sMorpekoFormChangeTable,
},
@@ -4898,8 +5457,17 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Cufant,
.iconPalIndex = 0,
FOOTPRINT(Cufant)
+ OVERWORLD(
+ sPicTable_Cufant,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Cufant,
+ gShinyOverworldPalette_Cufant
+ )
.levelUpLearnset = sCufantLevelUpLearnset,
.teachableLearnset = sCufantTeachableLearnset,
+ .eggMoveLearnset = sCufantEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 34, SPECIES_COPPERAJAH}),
},
@@ -4951,6 +5519,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Copperajah,
.iconPalIndex = 0,
FOOTPRINT(Copperajah)
+ OVERWORLD(
+ sPicTable_Copperajah,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Copperajah,
+ gShinyOverworldPalette_Copperajah
+ )
.levelUpLearnset = sCopperajahLevelUpLearnset,
.teachableLearnset = sCopperajahTeachableLearnset,
.formSpeciesIdTable = sCopperajahFormSpeciesIdTable,
@@ -5065,6 +5641,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Dracozolt,
.iconPalIndex = 1,
FOOTPRINT(Dracozolt)
+ OVERWORLD(
+ sPicTable_Dracozolt,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Dracozolt,
+ gShinyOverworldPalette_Dracozolt
+ )
.levelUpLearnset = sDracozoltLevelUpLearnset,
.teachableLearnset = sDracozoltTeachableLearnset,
},
@@ -5118,6 +5702,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Arctozolt,
.iconPalIndex = 0,
FOOTPRINT(Arctozolt)
+ OVERWORLD(
+ sPicTable_Arctozolt,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Arctozolt,
+ gShinyOverworldPalette_Arctozolt
+ )
.levelUpLearnset = sArctozoltLevelUpLearnset,
.teachableLearnset = sArctozoltTeachableLearnset,
},
@@ -5172,6 +5764,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Dracovish,
.iconPalIndex = 0,
FOOTPRINT(Dracovish)
+ OVERWORLD(
+ sPicTable_Dracovish,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Dracovish,
+ gShinyOverworldPalette_Dracovish
+ )
.levelUpLearnset = sDracovishLevelUpLearnset,
.teachableLearnset = sDracovishTeachableLearnset,
},
@@ -5226,6 +5826,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Arctovish,
.iconPalIndex = 0,
FOOTPRINT(Arctovish)
+ OVERWORLD(
+ sPicTable_Arctovish,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Arctovish,
+ gShinyOverworldPalette_Arctovish
+ )
.levelUpLearnset = sArctovishLevelUpLearnset,
.teachableLearnset = sArctovishTeachableLearnset,
},
@@ -5279,8 +5887,17 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Duraludon,
.iconPalIndex = 0,
FOOTPRINT(Duraludon)
+ OVERWORLD(
+ sPicTable_Duraludon,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Duraludon,
+ gShinyOverworldPalette_Duraludon
+ )
.levelUpLearnset = sDuraludonLevelUpLearnset,
.teachableLearnset = sDuraludonTeachableLearnset,
+ .eggMoveLearnset = sDuraludonEggMoveLearnset,
.formSpeciesIdTable = sDuraludonFormSpeciesIdTable,
.formChangeTable = sDuraludonFormChangeTable,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_METAL_ALLOY, SPECIES_ARCHALUDON}),
@@ -5338,6 +5955,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.isGigantamax = TRUE,
.levelUpLearnset = sDuraludonLevelUpLearnset,
.teachableLearnset = sDuraludonTeachableLearnset,
+ .eggMoveLearnset = sDuraludonEggMoveLearnset,
.formSpeciesIdTable = sDuraludonFormSpeciesIdTable,
.formChangeTable = sDuraludonFormChangeTable,
},
@@ -5448,8 +6066,17 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Dreepy,
.iconPalIndex = 0,
FOOTPRINT(Dreepy)
+ OVERWORLD(
+ sPicTable_Dreepy,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Dreepy,
+ gShinyOverworldPalette_Dreepy
+ )
.levelUpLearnset = sDreepyLevelUpLearnset,
.teachableLearnset = sDreepyTeachableLearnset,
+ .eggMoveLearnset = sDreepyEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 50, SPECIES_DRAKLOAK}),
},
@@ -5501,6 +6128,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Drakloak,
.iconPalIndex = 0,
FOOTPRINT(Drakloak)
+ OVERWORLD(
+ sPicTable_Drakloak,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Drakloak,
+ gShinyOverworldPalette_Drakloak
+ )
.levelUpLearnset = sDrakloakLevelUpLearnset,
.teachableLearnset = sDrakloakTeachableLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 60, SPECIES_DRAGAPULT}),
@@ -5555,6 +6190,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Dragapult,
.iconPalIndex = 0,
FOOTPRINT(Dragapult)
+ OVERWORLD(
+ sPicTable_Dragapult,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Dragapult,
+ gShinyOverworldPalette_Dragapult
+ )
.levelUpLearnset = sDragapultLevelUpLearnset,
.teachableLearnset = sDragapultTeachableLearnset,
},
@@ -5608,7 +6251,16 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_ZacianHeroOfManyBattles,
.iconPalIndex = 2,
FOOTPRINT(Zacian)
+ OVERWORLD(
+ sPicTable_ZacianHeroOfManyBattles,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_ZacianHeroOfManyBattles,
+ gShinyOverworldPalette_ZacianHeroOfManyBattles
+ )
.isLegendary = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sZacianLevelUpLearnset,
.teachableLearnset = sZacianTeachableLearnset,
.formSpeciesIdTable = sZacianFormSpeciesIdTable,
@@ -5663,7 +6315,16 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_ZacianCrownedSword,
.iconPalIndex = 2,
FOOTPRINT(Zacian)
+ OVERWORLD(
+ sPicTable_ZacianCrownedSword,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_ZacianCrownedSword,
+ gShinyOverworldPalette_ZacianCrownedSword
+ )
.isLegendary = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sZacianLevelUpLearnset,
.teachableLearnset = sZacianTeachableLearnset,
.formSpeciesIdTable = sZacianFormSpeciesIdTable,
@@ -5720,7 +6381,16 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_ZamazentaHeroOfManyBattles,
.iconPalIndex = 2,
FOOTPRINT(Zamazenta)
+ OVERWORLD(
+ sPicTable_ZamazentaHeroOfManyBattles,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_ZamazentaHeroOfManyBattles,
+ gShinyOverworldPalette_ZamazentaHeroOfManyBattles
+ )
.isLegendary = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sZamazentaLevelUpLearnset,
.teachableLearnset = sZamazentaTeachableLearnset,
.formSpeciesIdTable = sZamazentaFormSpeciesIdTable,
@@ -5775,7 +6445,16 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_ZamazentaCrownedShield,
.iconPalIndex = 2,
FOOTPRINT(Zamazenta)
+ OVERWORLD(
+ sPicTable_ZamazentaCrownedShield,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_ZamazentaCrownedShield,
+ gShinyOverworldPalette_ZamazentaCrownedShield
+ )
.isLegendary = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sZamazentaLevelUpLearnset,
.teachableLearnset = sZamazentaTeachableLearnset,
.formSpeciesIdTable = sZamazentaFormSpeciesIdTable,
@@ -5833,7 +6512,16 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Eternatus,
.iconPalIndex = 0,
FOOTPRINT(Eternatus)
+ OVERWORLD(
+ sPicTable_Eternatus,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Eternatus,
+ gShinyOverworldPalette_Eternatus
+ )
.isLegendary = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sEternatusLevelUpLearnset,
.teachableLearnset = sEternatusTeachableLearnset,
.formSpeciesIdTable = sEternatusFormSpeciesIdTable,
@@ -5889,6 +6577,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconPalIndex = 0,
FOOTPRINT(Eternatus)
.isLegendary = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sEternatusLevelUpLearnset,
.teachableLearnset = sEternatusTeachableLearnset,
.formSpeciesIdTable = sEternatusFormSpeciesIdTable,
@@ -5943,6 +6632,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Kubfu,
.iconPalIndex = 1,
FOOTPRINT(Kubfu)
+ OVERWORLD(
+ sPicTable_Kubfu,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Kubfu,
+ gShinyOverworldPalette_Kubfu
+ )
.isLegendary = TRUE,
.levelUpLearnset = sKubfuLevelUpLearnset,
.teachableLearnset = sKubfuTeachableLearnset,
@@ -6000,6 +6697,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Urshifu,
.iconPalIndex = 2,
FOOTPRINT(Urshifu)
+ OVERWORLD(
+ sPicTable_Urshifu,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Urshifu,
+ gShinyOverworldPalette_Urshifu
+ )
.isLegendary = TRUE,
.levelUpLearnset = sUrshifuSingleStrikeStyleLevelUpLearnset,
.teachableLearnset = sUrshifuSingleStrikeStyleTeachableLearnset,
@@ -6112,6 +6817,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Urshifu,
.iconPalIndex = 2,
FOOTPRINT(Urshifu)
+ OVERWORLD(
+ sPicTable_Urshifu,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Urshifu,
+ gShinyOverworldPalette_Urshifu
+ )
.isLegendary = TRUE,
.levelUpLearnset = sUrshifuRapidStrikeStyleLevelUpLearnset,
.teachableLearnset = sUrshifuRapidStrikeStyleTeachableLearnset,
@@ -6227,7 +6940,16 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Zarude,
.iconPalIndex = 1,
FOOTPRINT(Zarude)
+ OVERWORLD(
+ sPicTable_Zarude,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Zarude,
+ gShinyOverworldPalette_Zarude
+ )
.isMythical = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sZarudeLevelUpLearnset,
.teachableLearnset = sZarudeTeachableLearnset,
.formSpeciesIdTable = sZarudeFormSpeciesIdTable,
@@ -6281,6 +7003,7 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconPalIndex = 1,
FOOTPRINT(Zarude)
.isMythical = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sZarudeLevelUpLearnset,
.teachableLearnset = sZarudeTeachableLearnset,
.formSpeciesIdTable = sZarudeFormSpeciesIdTable,
@@ -6337,6 +7060,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Regieleki,
.iconPalIndex = 0,
FOOTPRINT(Regieleki)
+ OVERWORLD(
+ sPicTable_Regieleki,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Regieleki,
+ gShinyOverworldPalette_Regieleki
+ )
.isLegendary = TRUE,
.levelUpLearnset = sRegielekiLevelUpLearnset,
.teachableLearnset = sRegielekiTeachableLearnset,
@@ -6393,6 +7124,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Regidrago,
.iconPalIndex = 0,
FOOTPRINT(Regidrago)
+ OVERWORLD(
+ sPicTable_Regidrago,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Regidrago,
+ gShinyOverworldPalette_Regidrago
+ )
.isLegendary = TRUE,
.levelUpLearnset = sRegidragoLevelUpLearnset,
.teachableLearnset = sRegidragoTeachableLearnset,
@@ -6447,6 +7186,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Glastrier,
.iconPalIndex = 0,
FOOTPRINT(Glastrier)
+ OVERWORLD(
+ sPicTable_Glastrier,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Glastrier,
+ gShinyOverworldPalette_Glastrier
+ )
.isLegendary = TRUE,
.levelUpLearnset = sGlastrierLevelUpLearnset,
.teachableLearnset = sGlastrierTeachableLearnset,
@@ -6502,6 +7249,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Spectrier,
.iconPalIndex = 0,
FOOTPRINT(Spectrier)
+ OVERWORLD(
+ sPicTable_Spectrier,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Spectrier,
+ gShinyOverworldPalette_Spectrier
+ )
.isLegendary = TRUE,
.levelUpLearnset = sSpectrierLevelUpLearnset,
.teachableLearnset = sSpectrierTeachableLearnset,
@@ -6557,7 +7312,16 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_Calyrex,
.iconPalIndex = 0,
FOOTPRINT(Calyrex)
+ OVERWORLD(
+ sPicTable_Calyrex,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_Calyrex,
+ gShinyOverworldPalette_Calyrex
+ )
.isLegendary = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sCalyrexLevelUpLearnset,
.teachableLearnset = sCalyrexTeachableLearnset,
.formSpeciesIdTable = sCalyrexFormSpeciesIdTable,
@@ -6612,8 +7376,17 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_CalyrexIceRider,
.iconPalIndex = 0,
FOOTPRINT(Calyrex)
+ OVERWORLD(
+ sPicTable_CalyrexIceRider,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_CalyrexIceRider,
+ gShinyOverworldPalette_CalyrexIceRider
+ )
.isLegendary = TRUE,
.cannotBeTraded = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sCalyrexIceRiderLevelUpLearnset,
.teachableLearnset = sCalyrexIceRiderTeachableLearnset,
.formSpeciesIdTable = sCalyrexFormSpeciesIdTable,
@@ -6667,8 +7440,17 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_CalyrexShadowRider,
.iconPalIndex = 0,
FOOTPRINT(Calyrex)
+ OVERWORLD(
+ sPicTable_CalyrexShadowRider,
+ SIZE_32x32,
+ SHADOW_SIZE_M,
+ TRACKS_FOOT,
+ gOverworldPalette_CalyrexShadowRider,
+ gShinyOverworldPalette_CalyrexShadowRider
+ )
.isLegendary = TRUE,
.cannotBeTraded = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sCalyrexShadowRiderLevelUpLearnset,
.teachableLearnset = sCalyrexShadowRiderTeachableLearnset,
.formSpeciesIdTable = sCalyrexFormSpeciesIdTable,
@@ -6726,6 +7508,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_EnamorusIncarnate,
.iconPalIndex = 1,
FOOTPRINT(Enamorus)
+ OVERWORLD(
+ sPicTable_EnamorusIncarnate,
+ SIZE_64x64,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_EnamorusIncarnate,
+ gShinyOverworldPalette_EnamorusIncarnate
+ )
.isLegendary = TRUE,
.levelUpLearnset = sEnamorusLevelUpLearnset,
.teachableLearnset = sEnamorusTeachableLearnset,
@@ -6780,6 +7570,14 @@ const struct SpeciesInfo gSpeciesInfoGen8[] =
.iconSprite = gMonIcon_EnamorusTherian,
.iconPalIndex = 1,
FOOTPRINT(Enamorus)
+ OVERWORLD(
+ sPicTable_EnamorusTherian,
+ SIZE_64x64,
+ SHADOW_SIZE_M,
+ TRACKS_NONE,
+ gOverworldPalette_EnamorusTherian,
+ gShinyOverworldPalette_EnamorusTherian
+ )
.isLegendary = TRUE,
.levelUpLearnset = sEnamorusLevelUpLearnset,
.teachableLearnset = sEnamorusTeachableLearnset,
diff --git a/src/data/pokemon/species_info/gen_9_families.h b/src/data/pokemon/species_info/gen_9_families.h
index 8110770ffd43..a59dd88fe26f 100644
--- a/src/data/pokemon/species_info/gen_9_families.h
+++ b/src/data/pokemon/species_info/gen_9_families.h
@@ -54,6 +54,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Sprigatito)
.levelUpLearnset = sSprigatitoLevelUpLearnset,
.teachableLearnset = sSprigatitoTeachableLearnset,
+ .eggMoveLearnset = sSprigatitoEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 16, SPECIES_FLORAGATO}),
},
@@ -129,7 +130,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 = _("Meowscarad"),
+ .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Meowscarad", "Meowscarada"),
.cryId = CRY_MEOWSCARADA,
.natDexNum = NATIONAL_DEX_MEOWSCARADA,
.categoryName = _("Magician"),
@@ -214,6 +215,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Fuecoco)
.levelUpLearnset = sFuecocoLevelUpLearnset,
.teachableLearnset = sFuecocoTeachableLearnset,
+ .eggMoveLearnset = sFuecocoEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 16, SPECIES_CROCALOR}),
},
@@ -374,6 +376,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Quaxly)
.levelUpLearnset = sQuaxlyLevelUpLearnset,
.teachableLearnset = sQuaxlyTeachableLearnset,
+ .eggMoveLearnset = sQuaxlyEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 16, SPECIES_QUAXWELL}),
},
@@ -534,6 +537,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Lechonk)
.levelUpLearnset = sLechonkLevelUpLearnset,
.teachableLearnset = sLechonkTeachableLearnset,
+ .eggMoveLearnset = sLechonkEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL_MALE, 18, SPECIES_OINKOLOGNE_MALE},
{EVO_LEVEL_FEMALE, 18, SPECIES_OINKOLOGNE_FEMALE}),
},
@@ -695,6 +699,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Tarountula)
.levelUpLearnset = sTarountulaLevelUpLearnset,
.teachableLearnset = sTarountulaTeachableLearnset,
+ .eggMoveLearnset = sTarountulaEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 15, SPECIES_SPIDOPS}),
},
@@ -802,6 +807,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Nymble)
.levelUpLearnset = sNymbleLevelUpLearnset,
.teachableLearnset = sNymbleTeachableLearnset,
+ .eggMoveLearnset = sNymbleEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 24, SPECIES_LOKIX}),
},
@@ -909,6 +915,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Pawmi)
.levelUpLearnset = sPawmiLevelUpLearnset,
.teachableLearnset = sPawmiTeachableLearnset,
+ .eggMoveLearnset = sPawmiEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 18, SPECIES_PAWMO}),
},
@@ -962,7 +969,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Pawmo)
.levelUpLearnset = sPawmoLevelUpLearnset,
.teachableLearnset = sPawmoTeachableLearnset,
- .evolutions = EVOLUTION({EVO_NONE, 0, SPECIES_PAWMOT}),
+ .evolutions = EVOLUTION({EVO_OVERWORLD_STEPS, 1000, SPECIES_PAWMOT}),
},
[SPECIES_PAWMOT] =
@@ -1069,6 +1076,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Tandemaus)
.levelUpLearnset = sTandemausLevelUpLearnset,
.teachableLearnset = sTandemausTeachableLearnset,
+ .eggMoveLearnset = sTandemausEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL_FAMILY_OF_FOUR, 25, SPECIES_MAUSHOLD_FAMILY_OF_FOUR},
{EVO_LEVEL_FAMILY_OF_THREE, 25, SPECIES_MAUSHOLD_FAMILY_OF_THREE}),
},
@@ -1230,6 +1238,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Fidough)
.levelUpLearnset = sFidoughLevelUpLearnset,
.teachableLearnset = sFidoughTeachableLearnset,
+ .eggMoveLearnset = sFidoughEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 26, SPECIES_DACHSBUN}),
},
@@ -1337,6 +1346,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Smoliv)
.levelUpLearnset = sSmolivLevelUpLearnset,
.teachableLearnset = sSmolivTeachableLearnset,
+ .eggMoveLearnset = sSmolivEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 25, SPECIES_DOLLIV}),
},
@@ -1466,7 +1476,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_FLYING),
.abilities = { ABILITY_INTIMIDATE, ABILITY_HUSTLE, ABILITY_GUTS },
.bodyColor = BODY_COLOR_GREEN,
- .speciesName = _("Sqawkabily"),
+ .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Sqawkabily", "Squawkabilly"),
.cryId = CRY_SQUAWKABILLY,
.natDexNum = NATIONAL_DEX_SQUAWKABILLY,
.categoryName = _("Parrot"),
@@ -1497,6 +1507,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Squawkabilly)
.levelUpLearnset = sSquawkabillyLevelUpLearnset,
.teachableLearnset = sSquawkabillyTeachableLearnset,
+ .eggMoveLearnset = sSquawkabillyEggMoveLearnset,
.formSpeciesIdTable = sSquawkabillyFormSpeciesIdTable,
},
@@ -1519,7 +1530,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.eggGroups = MON_EGG_GROUPS(EGG_GROUP_FLYING),
.abilities = { ABILITY_INTIMIDATE, ABILITY_HUSTLE, ABILITY_GUTS },
.bodyColor = BODY_COLOR_BLUE,
- .speciesName = _("Sqawkabily"),
+ .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Sqawkabily", "Squawkabilly"),
.cryId = CRY_SQUAWKABILLY,
.natDexNum = NATIONAL_DEX_SQUAWKABILLY,
.categoryName = _("Parrot"),
@@ -1550,6 +1561,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Squawkabilly)
.levelUpLearnset = sSquawkabillyLevelUpLearnset,
.teachableLearnset = sSquawkabillyTeachableLearnset,
+ .eggMoveLearnset = sSquawkabillyEggMoveLearnset,
.formSpeciesIdTable = sSquawkabillyFormSpeciesIdTable,
},
@@ -1572,7 +1584,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 = _("Sqawkabily"),
+ .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Sqawkabily", "Squawkabilly"),
.cryId = CRY_SQUAWKABILLY,
.natDexNum = NATIONAL_DEX_SQUAWKABILLY,
.categoryName = _("Parrot"),
@@ -1603,6 +1615,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Squawkabilly)
.levelUpLearnset = sSquawkabillyLevelUpLearnset,
.teachableLearnset = sSquawkabillyTeachableLearnset,
+ .eggMoveLearnset = sSquawkabillyEggMoveLearnset,
.formSpeciesIdTable = sSquawkabillyFormSpeciesIdTable,
},
@@ -1625,7 +1638,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 = _("Sqawkabily"),
+ .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Sqawkabily", "Squawkabilly"),
.cryId = CRY_SQUAWKABILLY,
.natDexNum = NATIONAL_DEX_SQUAWKABILLY,
.categoryName = _("Parrot"),
@@ -1656,6 +1669,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Squawkabilly)
.levelUpLearnset = sSquawkabillyLevelUpLearnset,
.teachableLearnset = sSquawkabillyTeachableLearnset,
+ .eggMoveLearnset = sSquawkabillyEggMoveLearnset,
.formSpeciesIdTable = sSquawkabillyFormSpeciesIdTable,
},
#endif //P_FAMILY_SQUAWKABILLY
@@ -1711,6 +1725,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Nacli)
.levelUpLearnset = sNacliLevelUpLearnset,
.teachableLearnset = sNacliTeachableLearnset,
+ .eggMoveLearnset = sNacliEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 24, SPECIES_NACLSTACK}),
},
@@ -1750,7 +1765,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,
@@ -1803,12 +1818,12 @@ 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,
@@ -1871,6 +1886,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Charcadet)
.levelUpLearnset = sCharcadetLevelUpLearnset,
.teachableLearnset = sCharcadetTeachableLearnset,
+ .eggMoveLearnset = sCharcadetEggMoveLearnset,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_AUSPICIOUS_ARMOR, SPECIES_ARMAROUGE},
{EVO_ITEM, ITEM_MALICIOUS_ARMOR, SPECIES_CERULEDGE}),
},
@@ -2032,6 +2048,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Tadbulb)
.levelUpLearnset = sTadbulbLevelUpLearnset,
.teachableLearnset = sTadbulbTeachableLearnset,
+ .eggMoveLearnset = sTadbulbEggMoveLearnset,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_THUNDER_STONE, SPECIES_BELLIBOLT}),
},
@@ -2139,6 +2156,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Wattrel)
.levelUpLearnset = sWattrelLevelUpLearnset,
.teachableLearnset = sWattrelTeachableLearnset,
+ .eggMoveLearnset = sWattrelEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 25, SPECIES_KILOWATTREL}),
},
@@ -2161,7 +2179,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 = _("Kilowatrel"),
+ .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Kilowatrel", "Kilowattrel"),
.cryId = CRY_KILOWATTREL,
.natDexNum = NATIONAL_DEX_KILOWATTREL,
.categoryName = _("Frigatebird"),
@@ -2246,6 +2264,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Maschiff)
.levelUpLearnset = sMaschiffLevelUpLearnset,
.teachableLearnset = sMaschiffTeachableLearnset,
+ .eggMoveLearnset = sMaschiffEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_MABOSSTIFF}),
},
@@ -2353,6 +2372,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Shroodle)
.levelUpLearnset = sShroodleLevelUpLearnset,
.teachableLearnset = sShroodleTeachableLearnset,
+ .eggMoveLearnset = sShroodleEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 28, SPECIES_GRAFAIAI}),
},
@@ -2460,7 +2480,8 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Bramblin)
.levelUpLearnset = sBramblinLevelUpLearnset,
.teachableLearnset = sBramblinTeachableLearnset,
- .evolutions = EVOLUTION({EVO_NONE, 0, SPECIES_BRAMBLEGHAST}),
+ .eggMoveLearnset = sBramblinEggMoveLearnset,
+ .evolutions = EVOLUTION({EVO_OVERWORLD_STEPS, 1000, SPECIES_BRAMBLEGHAST}),
},
[SPECIES_BRAMBLEGHAST] =
@@ -2482,7 +2503,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 = _("Brmblghast"),
+ .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Brmblghast", "Brambleghast"),
.cryId = CRY_BRAMBLEGHAST,
.natDexNum = NATIONAL_DEX_BRAMBLEGHAST,
.categoryName = _("Tumbleweed"),
@@ -2569,6 +2590,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Toedscool)
.levelUpLearnset = sToedscoolLevelUpLearnset,
.teachableLearnset = sToedscoolTeachableLearnset,
+ .eggMoveLearnset = sToedscoolEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 30, SPECIES_TOEDSCRUEL}),
},
@@ -2678,6 +2700,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Klawf)
.levelUpLearnset = sKlawfLevelUpLearnset,
.teachableLearnset = sKlawfTeachableLearnset,
+ .eggMoveLearnset = sKlawfEggMoveLearnset,
},
#endif //P_FAMILY_KLAWF
@@ -2732,6 +2755,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Capsakid)
.levelUpLearnset = sCapsakidLevelUpLearnset,
.teachableLearnset = sCapsakidTeachableLearnset,
+ .eggMoveLearnset = sCapsakidEggMoveLearnset,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_FIRE_STONE, SPECIES_SCOVILLAIN}),
},
@@ -2839,7 +2863,8 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Rellor)
.levelUpLearnset = sRellorLevelUpLearnset,
.teachableLearnset = sRellorTeachableLearnset,
- .evolutions = EVOLUTION({EVO_NONE, 0, SPECIES_RABSCA}),
+ .eggMoveLearnset = sRellorEggMoveLearnset,
+ .evolutions = EVOLUTION({EVO_OVERWORLD_STEPS, 1000, SPECIES_RABSCA}),
},
[SPECIES_RABSCA] =
@@ -2946,6 +2971,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Flittle)
.levelUpLearnset = sFlittleLevelUpLearnset,
.teachableLearnset = sFlittleTeachableLearnset,
+ .eggMoveLearnset = sFlittleEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 35, SPECIES_ESPATHRA}),
},
@@ -3053,6 +3079,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Tinkatink)
.levelUpLearnset = sTinkatinkLevelUpLearnset,
.teachableLearnset = sTinkatinkTeachableLearnset,
+ .eggMoveLearnset = sTinkatinkEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 24, SPECIES_TINKATUFF}),
},
@@ -3212,6 +3239,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Wiglett)
.levelUpLearnset = sWiglettLevelUpLearnset,
.teachableLearnset = sWiglettTeachableLearnset,
+ .eggMoveLearnset = sWiglettEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 26, SPECIES_WUGTRIO}),
},
@@ -3319,6 +3347,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Bombirdier)
.levelUpLearnset = sBombirdierLevelUpLearnset,
.teachableLearnset = sBombirdierTeachableLearnset,
+ .eggMoveLearnset = sBombirdierEggMoveLearnset,
},
#endif //P_FAMILY_BOMBIRDIER
@@ -3372,6 +3401,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Finizen)
.levelUpLearnset = sFinizenLevelUpLearnset,
.teachableLearnset = sFinizenTeachableLearnset,
+ .eggMoveLearnset = sFinizenEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 38, SPECIES_PALAFIN_ZERO}),
},
@@ -3535,6 +3565,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Varoom)
.levelUpLearnset = sVaroomLevelUpLearnset,
.teachableLearnset = sVaroomTeachableLearnset,
+ .eggMoveLearnset = sVaroomEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 40, SPECIES_REVAVROOM}),
},
@@ -3642,6 +3673,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Cyclizar)
.levelUpLearnset = sCyclizarLevelUpLearnset,
.teachableLearnset = sCyclizarTeachableLearnset,
+ .eggMoveLearnset = sCyclizarEggMoveLearnset,
},
#endif //P_FAMILY_CYCLIZAR
@@ -3696,6 +3728,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Orthworm)
.levelUpLearnset = sOrthwormLevelUpLearnset,
.teachableLearnset = sOrthwormTeachableLearnset,
+ .eggMoveLearnset = sOrthwormEggMoveLearnset,
},
#endif //P_FAMILY_ORTHWORM
@@ -3751,6 +3784,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Glimmet)
.levelUpLearnset = sGlimmetLevelUpLearnset,
.teachableLearnset = sGlimmetTeachableLearnset,
+ .eggMoveLearnset = sGlimmetEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 35, SPECIES_GLIMMORA}),
},
@@ -3859,6 +3893,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Greavard)
.levelUpLearnset = sGreavardLevelUpLearnset,
.teachableLearnset = sGreavardTeachableLearnset,
+ .eggMoveLearnset = sGreavardEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL_NIGHT, 30, SPECIES_HOUNDSTONE}),
},
@@ -3966,6 +4001,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Flamigo)
.levelUpLearnset = sFlamigoLevelUpLearnset,
.teachableLearnset = sFlamigoTeachableLearnset,
+ .eggMoveLearnset = sFlamigoEggMoveLearnset,
},
#endif //P_FAMILY_FLAMIGO
@@ -4020,6 +4056,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Cetoddle)
.levelUpLearnset = sCetoddleLevelUpLearnset,
.teachableLearnset = sCetoddleTeachableLearnset,
+ .eggMoveLearnset = sCetoddleEggMoveLearnset,
.evolutions = EVOLUTION({EVO_ITEM, ITEM_ICE_STONE, SPECIES_CETITAN}),
},
@@ -4128,6 +4165,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Veluza)
.levelUpLearnset = sVeluzaLevelUpLearnset,
.teachableLearnset = sVeluzaTeachableLearnset,
+ .eggMoveLearnset = sVeluzaEggMoveLearnset,
},
#endif //P_FAMILY_VELUZA
@@ -4183,6 +4221,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Dondozo)
.levelUpLearnset = sDondozoLevelUpLearnset,
.teachableLearnset = sDondozoTeachableLearnset,
+ .eggMoveLearnset = sDondozoEggMoveLearnset,
},
#endif //P_FAMILY_DONDOZO
@@ -4237,6 +4276,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Tatsugiri)
.levelUpLearnset = sTatsugiriLevelUpLearnset,
.teachableLearnset = sTatsugiriTeachableLearnset,
+ .eggMoveLearnset = sTatsugiriEggMoveLearnset,
.formSpeciesIdTable = sTatsugiriFormSpeciesIdTable,
},
@@ -4289,6 +4329,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Tatsugiri)
.levelUpLearnset = sTatsugiriLevelUpLearnset,
.teachableLearnset = sTatsugiriTeachableLearnset,
+ .eggMoveLearnset = sTatsugiriEggMoveLearnset,
.formSpeciesIdTable = sTatsugiriFormSpeciesIdTable,
},
@@ -4341,6 +4382,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Tatsugiri)
.levelUpLearnset = sTatsugiriLevelUpLearnset,
.teachableLearnset = sTatsugiriTeachableLearnset,
+ .eggMoveLearnset = sTatsugiriEggMoveLearnset,
.formSpeciesIdTable = sTatsugiriFormSpeciesIdTable,
},
#endif //P_FAMILY_TATSUGIRI
@@ -4395,7 +4437,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.iconSprite = gMonIcon_GreatTusk,
.iconPalIndex = 0,
FOOTPRINT(GreatTusk)
- .isParadoxForm = TRUE,
+ .isParadox = TRUE,
.levelUpLearnset = sGreatTuskLevelUpLearnset,
.teachableLearnset = sGreatTuskTeachableLearnset,
},
@@ -4422,7 +4464,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 = _("ScreamTail"),
+ .speciesName = HANDLE_EXPANDED_SPECIES_NAME("ScreamTail", "Scream Tail"),
.cryId = CRY_SCREAM_TAIL,
.natDexNum = NATIONAL_DEX_SCREAM_TAIL,
.categoryName = _("Paradox"),
@@ -4451,7 +4493,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.iconSprite = gMonIcon_ScreamTail,
.iconPalIndex = 0,
FOOTPRINT(ScreamTail)
- .isParadoxForm = TRUE,
+ .isParadox = TRUE,
.levelUpLearnset = sScreamTailLevelUpLearnset,
.teachableLearnset = sScreamTailTeachableLearnset,
},
@@ -4478,7 +4520,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 = _("BruteBonet"),
+ .speciesName = HANDLE_EXPANDED_SPECIES_NAME("BruteBonet", "Brute Bonnet"),
.cryId = CRY_BRUTE_BONNET,
.natDexNum = NATIONAL_DEX_BRUTE_BONNET,
.categoryName = _("Paradox"),
@@ -4507,7 +4549,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.iconSprite = gMonIcon_BruteBonnet,
.iconPalIndex = 1,
FOOTPRINT(BruteBonnet)
- .isParadoxForm = TRUE,
+ .isParadox = TRUE,
.levelUpLearnset = sBruteBonnetLevelUpLearnset,
.teachableLearnset = sBruteBonnetTeachableLearnset,
},
@@ -4536,7 +4578,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 = _("FluttrMane"),
+ .speciesName = HANDLE_EXPANDED_SPECIES_NAME("FluttrMane", "Flutter Mane"),
.cryId = CRY_FLUTTER_MANE,
.natDexNum = NATIONAL_DEX_FLUTTER_MANE,
.categoryName = _("Paradox"),
@@ -4566,7 +4608,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.iconSprite = gMonIcon_FlutterMane,
.iconPalIndex = 2,
FOOTPRINT(FlutterMane)
- .isParadoxForm = TRUE,
+ .isParadox = TRUE,
.levelUpLearnset = sFlutterManeLevelUpLearnset,
.teachableLearnset = sFlutterManeTeachableLearnset,
},
@@ -4593,7 +4635,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 = _("SlithrWing"),
+ .speciesName = HANDLE_EXPANDED_SPECIES_NAME("SlithrWing", "Slither Wing"),
.cryId = CRY_SLITHER_WING,
.natDexNum = NATIONAL_DEX_SLITHER_WING,
.categoryName = _("Paradox"),
@@ -4621,7 +4663,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.iconSprite = gMonIcon_SlitherWing,
.iconPalIndex = 1,
FOOTPRINT(SlitherWing)
- .isParadoxForm = TRUE,
+ .isParadox = TRUE,
.levelUpLearnset = sSlitherWingLevelUpLearnset,
.teachableLearnset = sSlitherWingTeachableLearnset,
},
@@ -4648,7 +4690,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 = _("SndyShocks"),
+ .speciesName = HANDLE_EXPANDED_SPECIES_NAME("SndyShocks", "Sandy Shocks"),
.cryId = CRY_SANDY_SHOCKS,
.natDexNum = NATIONAL_DEX_SANDY_SHOCKS,
.categoryName = _("Paradox"),
@@ -4677,7 +4719,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.iconSprite = gMonIcon_SandyShocks,
.iconPalIndex = 0,
FOOTPRINT(SandyShocks)
- .isParadoxForm = TRUE,
+ .isParadox = TRUE,
.levelUpLearnset = sSandyShocksLevelUpLearnset,
.teachableLearnset = sSandyShocksTeachableLearnset,
},
@@ -4704,7 +4746,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 = _("IronTreads"),
+ .speciesName = HANDLE_EXPANDED_SPECIES_NAME("IronTreads", "Iron Treads"),
.cryId = CRY_IRON_TREADS,
.natDexNum = NATIONAL_DEX_IRON_TREADS,
.categoryName = _("Paradox"),
@@ -4733,7 +4775,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.iconSprite = gMonIcon_IronTreads,
.iconPalIndex = 1,
FOOTPRINT(IronTreads)
- .isParadoxForm = TRUE,
+ .isParadox = TRUE,
.levelUpLearnset = sIronTreadsLevelUpLearnset,
.teachableLearnset = sIronTreadsTeachableLearnset,
},
@@ -4760,7 +4802,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 = _("IronBundle"),
+ .speciesName = HANDLE_EXPANDED_SPECIES_NAME("IronBundle", "Iron Bundle"),
.cryId = CRY_IRON_BUNDLE,
.natDexNum = NATIONAL_DEX_IRON_BUNDLE,
.categoryName = _("Paradox"),
@@ -4789,7 +4831,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.iconSprite = gMonIcon_IronBundle,
.iconPalIndex = 0,
FOOTPRINT(IronBundle)
- .isParadoxForm = TRUE,
+ .isParadox = TRUE,
.levelUpLearnset = sIronBundleLevelUpLearnset,
.teachableLearnset = sIronBundleTeachableLearnset,
},
@@ -4845,7 +4887,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.iconSprite = gMonIcon_IronHands,
.iconPalIndex = 0,
FOOTPRINT(IronHands)
- .isParadoxForm = TRUE,
+ .isParadox = TRUE,
.levelUpLearnset = sIronHandsLevelUpLearnset,
.teachableLearnset = sIronHandsTeachableLearnset,
},
@@ -4872,7 +4914,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 = _("IronJuguls"),
+ .speciesName = HANDLE_EXPANDED_SPECIES_NAME("IronJuguls", "Iron Jugulis"),
.cryId = CRY_IRON_JUGULIS,
.natDexNum = NATIONAL_DEX_IRON_JUGULIS,
.categoryName = _("Paradox"),
@@ -4902,7 +4944,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.iconSprite = gMonIcon_IronJugulis,
.iconPalIndex = 0,
FOOTPRINT(IronJugulis)
- .isParadoxForm = TRUE,
+ .isParadox = TRUE,
.levelUpLearnset = sIronJugulisLevelUpLearnset,
.teachableLearnset = sIronJugulisTeachableLearnset,
},
@@ -4959,7 +5001,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.iconSprite = gMonIcon_IronMoth,
.iconPalIndex = 3,
FOOTPRINT(IronMoth)
- .isParadoxForm = TRUE,
+ .isParadox = TRUE,
.levelUpLearnset = sIronMothLevelUpLearnset,
.teachableLearnset = sIronMothTeachableLearnset,
},
@@ -4986,7 +5028,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 = _("IronThorns"),
+ .speciesName = HANDLE_EXPANDED_SPECIES_NAME("IronThorns", "Iron Thorns"),
.cryId = CRY_IRON_THORNS,
.natDexNum = NATIONAL_DEX_IRON_THORNS,
.categoryName = _("Paradox"),
@@ -5015,7 +5057,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.iconSprite = gMonIcon_IronThorns,
.iconPalIndex = 1,
FOOTPRINT(IronThorns)
- .isParadoxForm = TRUE,
+ .isParadox = TRUE,
.levelUpLearnset = sIronThornsLevelUpLearnset,
.teachableLearnset = sIronThornsTeachableLearnset,
},
@@ -5072,6 +5114,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
FOOTPRINT(Frigibax)
.levelUpLearnset = sFrigibaxLevelUpLearnset,
.teachableLearnset = sFrigibaxTeachableLearnset,
+ .eggMoveLearnset = sFrigibaxEggMoveLearnset,
.evolutions = EVOLUTION({EVO_LEVEL, 35, SPECIES_ARCTIBAX}),
},
@@ -5233,7 +5276,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.levelUpLearnset = sGimmighoulLevelUpLearnset,
.teachableLearnset = sGimmighoulTeachableLearnset,
.formSpeciesIdTable = sGimmighoulFormSpeciesIdTable,
- .evolutions = EVOLUTION({EVO_NONE, 0, SPECIES_GHOLDENGO}),
+ .evolutions = EVOLUTION({EVO_ITEM_COUNT_999, ITEM_GIMMIGHOUL_COIN, SPECIES_GHOLDENGO}),
},
[SPECIES_GIMMIGHOUL_ROAMING] =
@@ -5287,7 +5330,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.levelUpLearnset = sGimmighoulLevelUpLearnset,
.teachableLearnset = sGimmighoulTeachableLearnset,
.formSpeciesIdTable = sGimmighoulFormSpeciesIdTable,
- .evolutions = EVOLUTION({EVO_NONE, 0, SPECIES_GHOLDENGO}),
+ .evolutions = EVOLUTION({EVO_ITEM_COUNT_999, ITEM_GIMMIGHOUL_COIN, SPECIES_GHOLDENGO}),
},
[SPECIES_GHOLDENGO] =
@@ -5585,7 +5628,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 = _("RoarngMoon"),
+ .speciesName = HANDLE_EXPANDED_SPECIES_NAME("RoarngMoon", "Roaring Moon"),
.cryId = CRY_ROARING_MOON,
.natDexNum = NATIONAL_DEX_ROARING_MOON,
.categoryName = _("Paradox"),
@@ -5615,7 +5658,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.iconSprite = gMonIcon_RoaringMoon,
.iconPalIndex = 0,
FOOTPRINT(RoaringMoon)
- .isParadoxForm = TRUE,
+ .isParadox = TRUE,
.levelUpLearnset = sRoaringMoonLevelUpLearnset,
.teachableLearnset = sRoaringMoonTeachableLearnset,
},
@@ -5642,7 +5685,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 = _("IronVliant"),
+ .speciesName = HANDLE_EXPANDED_SPECIES_NAME("IronVliant", "Iron Valiant"),
.cryId = CRY_IRON_VALIANT,
.natDexNum = NATIONAL_DEX_IRON_VALIANT,
.categoryName = _("Paradox"),
@@ -5670,7 +5713,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.iconSprite = gMonIcon_IronValiant,
.iconPalIndex = 1,
FOOTPRINT(IronValiant)
- .isParadoxForm = TRUE,
+ .isParadox = TRUE,
.levelUpLearnset = sIronValiantLevelUpLearnset,
.teachableLearnset = sIronValiantTeachableLearnset,
},
@@ -5726,7 +5769,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.iconPalIndex = 0,
FOOTPRINT(Koraidon)
.isLegendary = TRUE,
- .isParadoxForm = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sKoraidonLevelUpLearnset,
.teachableLearnset = sKoraidonTeachableLearnset,
},
@@ -5782,7 +5825,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.iconPalIndex = 2,
FOOTPRINT(Miraidon)
.isLegendary = TRUE,
- .isParadoxForm = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sMiraidonLevelUpLearnset,
.teachableLearnset = sMiraidonTeachableLearnset,
},
@@ -5809,7 +5852,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 = _("WalkngWake"),
+ .speciesName = HANDLE_EXPANDED_SPECIES_NAME("WalkngWake", "Walking Wake"),
.cryId = CRY_WALKING_WAKE,
.natDexNum = NATIONAL_DEX_WALKING_WAKE,
.categoryName = _("Paradox"),
@@ -5837,7 +5880,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.iconSprite = gMonIcon_WalkingWake,
.iconPalIndex = 2,
FOOTPRINT(WalkingWake)
- .isParadoxForm = TRUE,
+ .isParadox = TRUE,
.levelUpLearnset = sWalkingWakeLevelUpLearnset,
.teachableLearnset = sWalkingWakeTeachableLearnset,
},
@@ -5864,7 +5907,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 = _("IronLeaves"),
+ .speciesName = HANDLE_EXPANDED_SPECIES_NAME("IronLeaves", "Iron Leaves"),
.cryId = CRY_IRON_LEAVES,
.natDexNum = NATIONAL_DEX_IRON_LEAVES,
.categoryName = _("Paradox"),
@@ -5892,7 +5935,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.iconSprite = gMonIcon_IronLeaves,
.iconPalIndex = 1,
FOOTPRINT(IronLeaves)
- .isParadoxForm = TRUE,
+ .isParadox = TRUE,
.levelUpLearnset = sIronLeavesLevelUpLearnset,
.teachableLearnset = sIronLeavesTeachableLearnset,
},
@@ -5918,7 +5961,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 = _("Ptchageist"),
+ .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Ptchageist", "Poltchageist"),
.cryId = CRY_POLTCHAGEIST,
.natDexNum = NATIONAL_DEX_POLTCHAGEIST,
.categoryName = _("Matcha"),
@@ -5971,7 +6014,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 = _("Ptchageist"),
+ .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Ptchageist", "Poltchageist"),
.cryId = CRY_POLTCHAGEIST,
.natDexNum = NATIONAL_DEX_POLTCHAGEIST,
.categoryName = _("Matcha"),
@@ -6242,7 +6285,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 = _("Fezndipiti"),
+ .speciesName = HANDLE_EXPANDED_SPECIES_NAME("Fezndipiti", "Fezandipiti"),
.cryId = CRY_FEZANDIPITI,
.natDexNum = NATIONAL_DEX_FEZANDIPITI,
.categoryName = _("Retainer"),
@@ -6278,66 +6321,68 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
#endif //P_FAMILY_FEZANDIPITI
#if P_FAMILY_OGERPON
-#define OGERPON_SPECIES_INFO(Form, type, ability, color, iconpalette) \
- { \
- .baseHP = 80, \
- .baseAttack = 120, \
- .baseDefense = 84, \
- .baseSpeed = 110, \
- .baseSpAttack = 60, \
- .baseSpDefense = 96, \
- .types = MON_TYPES(TYPE_GRASS, type), \
- .catchRate = 5, \
- .expYield = 275, \
- .evYield_Attack = 3, \
- .genderRatio = MON_FEMALE, \
- .eggCycles = 10, \
- .friendship = STANDARD_FRIENDSHIP, \
- .growthRate = GROWTH_SLOW, \
- .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), \
- .abilities = { ability, ABILITY_NONE }, \
- .bodyColor = color, \
- .speciesName = _("Ogerpon"), \
- .cryId = CRY_OGERPON, \
- .natDexNum = NATIONAL_DEX_OGERPON, \
- .categoryName = _("Mask"), \
- .height = 12, \
- .weight = 398, \
- .description = gOgerpon##Form##PokedexText, \
- .pokemonScale = 356, \
- .pokemonOffset = 17, \
- .trainerScale = 256, \
- .trainerOffset = 0, \
- .frontPic = gMonFrontPic_Ogerpon##Form, \
- .frontPicSize = MON_COORDS_SIZE(64, 64), \
- .frontPicYOffset = 0, \
- .frontAnimFrames = sAnims_Ogerpon, \
- /*.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,*/ \
- .backPic = gMonBackPic_Ogerpon##Form, \
- .backPicSize = MON_COORDS_SIZE(64, 64), \
- .backPicYOffset = 16, \
- /*.backAnimId = BACK_ANIM_NONE,*/ \
- .palette = gMonPalette_Ogerpon##Form, \
- .shinyPalette = gMonShinyPalette_Ogerpon##Form, \
- .iconSprite = gMonIcon_Ogerpon##Form, \
- .iconPalIndex = iconpalette, \
- FOOTPRINT(Ogerpon) \
- .levelUpLearnset = sOgerponLevelUpLearnset, \
- .teachableLearnset = sOgerponTeachableLearnset, \
- .formSpeciesIdTable = sOgerponFormSpeciesIdTable, \
- .formChangeTable = sOgerponFormChangeTable, \
- .isLegendary = TRUE, \
+#define OGERPON_SPECIES_INFO(Form1, Form2, type, ability, color, iconpalette, isTeraform) \
+ { \
+ .baseHP = 80, \
+ .baseAttack = 120, \
+ .baseDefense = 84, \
+ .baseSpeed = 110, \
+ .baseSpAttack = 60, \
+ .baseSpDefense = 96, \
+ .types = MON_TYPES(TYPE_GRASS, type), \
+ .forceTeraType = type, \
+ .catchRate = 5, \
+ .expYield = 275, \
+ .evYield_Attack = 3, \
+ .genderRatio = MON_FEMALE, \
+ .eggCycles = 10, \
+ .friendship = STANDARD_FRIENDSHIP, \
+ .growthRate = GROWTH_SLOW, \
+ .eggGroups = MON_EGG_GROUPS(EGG_GROUP_NO_EGGS_DISCOVERED), \
+ .abilities = { ability, ABILITY_NONE }, \
+ .bodyColor = color, \
+ .speciesName = _("Ogerpon"), \
+ .cryId = CRY_OGERPON, \
+ .natDexNum = NATIONAL_DEX_OGERPON, \
+ .categoryName = _("Mask"), \
+ .height = 12, \
+ .weight = 398, \
+ .description = gOgerpon##Form1##MaskPokedexText, \
+ .pokemonScale = 356, \
+ .pokemonOffset = 17, \
+ .trainerScale = 256, \
+ .trainerOffset = 0, \
+ .frontPic = gMonFrontPic_Ogerpon##Form1##Form2, \
+ .frontPicSize = MON_COORDS_SIZE(64, 64), \
+ .frontPicYOffset = 0, \
+ .frontAnimFrames = sAnims_Ogerpon, \
+ /*.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,*/ \
+ .backPic = gMonBackPic_Ogerpon##Form1##Form2, \
+ .backPicSize = MON_COORDS_SIZE(64, 64), \
+ .backPicYOffset = 0, \
+ /*.backAnimId = BACK_ANIM_NONE,*/ \
+ .palette = gMonPalette_Ogerpon##Form1##Form2, \
+ .shinyPalette = gMonShinyPalette_Ogerpon##Form1##Form2, \
+ .iconSprite = gMonIcon_Ogerpon##Form1##Mask, \
+ .iconPalIndex = iconpalette, \
+ FOOTPRINT(Ogerpon) \
+ .levelUpLearnset = sOgerponLevelUpLearnset, \
+ .teachableLearnset = sOgerponTeachableLearnset, \
+ .formSpeciesIdTable = sOgerponFormSpeciesIdTable, \
+ .formChangeTable = sOgerponFormChangeTable, \
+ .isLegendary = TRUE, \
+ .isTeraForm = isTeraform, \
}
- [SPECIES_OGERPON_TEAL_MASK] = OGERPON_SPECIES_INFO(TealMask, TYPE_GRASS, ABILITY_DEFIANT, BODY_COLOR_GREEN, 1),
- [SPECIES_OGERPON_WELLSPRING_MASK] = OGERPON_SPECIES_INFO(WellspringMask, TYPE_WATER, ABILITY_WATER_ABSORB, BODY_COLOR_BLUE, 0),
- [SPECIES_OGERPON_HEARTHFLAME_MASK] = OGERPON_SPECIES_INFO(HearthflameMask, TYPE_FIRE, ABILITY_MOLD_BREAKER, BODY_COLOR_RED, 0),
- [SPECIES_OGERPON_CORNERSTONE_MASK] = OGERPON_SPECIES_INFO(CornerstoneMask, TYPE_ROCK, ABILITY_STURDY, BODY_COLOR_GRAY, 0),
+ [SPECIES_OGERPON_TEAL_MASK] = OGERPON_SPECIES_INFO(Teal, Mask, TYPE_GRASS, ABILITY_DEFIANT, BODY_COLOR_GREEN, 1, FALSE),
+ [SPECIES_OGERPON_WELLSPRING_MASK] = OGERPON_SPECIES_INFO(Wellspring, Mask, TYPE_WATER, ABILITY_WATER_ABSORB, BODY_COLOR_BLUE, 0, FALSE),
+ [SPECIES_OGERPON_HEARTHFLAME_MASK] = OGERPON_SPECIES_INFO(Hearthflame, Mask, TYPE_FIRE, ABILITY_MOLD_BREAKER, BODY_COLOR_RED, 0, FALSE),
+ [SPECIES_OGERPON_CORNERSTONE_MASK] = OGERPON_SPECIES_INFO(Cornerstone, Mask, TYPE_ROCK, ABILITY_STURDY, BODY_COLOR_GRAY, 0, FALSE),
#if P_TERA_FORMS
- [SPECIES_OGERPON_TEAL_MASK_TERA] = OGERPON_SPECIES_INFO(TealMask, TYPE_GRASS, ABILITY_EMBODY_ASPECT_TEAL_MASK, BODY_COLOR_GREEN, 1),
- [SPECIES_OGERPON_WELLSPRING_MASK_TERA] = OGERPON_SPECIES_INFO(WellspringMask, TYPE_WATER, ABILITY_EMBODY_ASPECT_WELLSPRING_MASK, BODY_COLOR_BLUE, 0),
- [SPECIES_OGERPON_HEARTHFLAME_MASK_TERA] = OGERPON_SPECIES_INFO(HearthflameMask, TYPE_FIRE, ABILITY_EMBODY_ASPECT_HEARTHFLAME_MASK, BODY_COLOR_RED, 0),
- [SPECIES_OGERPON_CORNERSTONE_MASK_TERA] = OGERPON_SPECIES_INFO(CornerstoneMask, TYPE_ROCK, ABILITY_EMBODY_ASPECT_CORNERSTONE_MASK, BODY_COLOR_GRAY, 0),
+ [SPECIES_OGERPON_TEAL_MASK_TERA] = OGERPON_SPECIES_INFO(Teal, MaskTera, TYPE_GRASS, ABILITY_EMBODY_ASPECT_TEAL_MASK, BODY_COLOR_GREEN, 1, TRUE),
+ [SPECIES_OGERPON_WELLSPRING_MASK_TERA] = OGERPON_SPECIES_INFO(Wellspring, MaskTera, TYPE_WATER, ABILITY_EMBODY_ASPECT_WELLSPRING_MASK, BODY_COLOR_BLUE, 0, TRUE),
+ [SPECIES_OGERPON_HEARTHFLAME_MASK_TERA] = OGERPON_SPECIES_INFO(Hearthflame, MaskTera, TYPE_FIRE, ABILITY_EMBODY_ASPECT_HEARTHFLAME_MASK, BODY_COLOR_RED, 0, TRUE),
+ [SPECIES_OGERPON_CORNERSTONE_MASK_TERA] = OGERPON_SPECIES_INFO(Cornerstone, MaskTera, TYPE_ROCK, ABILITY_EMBODY_ASPECT_CORNERSTONE_MASK, BODY_COLOR_GRAY, 0, TRUE),
#endif //P_TERA_FORMS
#endif //P_FAMILY_OGERPON
@@ -6363,7 +6408,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 = _("GouginFire"),
+ .speciesName = HANDLE_EXPANDED_SPECIES_NAME("GouginFire", "Gouging Fire"),
.cryId = CRY_GOUGING_FIRE,
.natDexNum = NATIONAL_DEX_GOUGING_FIRE,
.categoryName = _("Paradox"),
@@ -6392,7 +6437,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.iconSprite = gMonIcon_GougingFire,
.iconPalIndex = 5,
FOOTPRINT(GougingFire)
- .isParadoxForm = TRUE,
+ .isParadox = TRUE,
.levelUpLearnset = sGougingFireLevelUpLearnset,
.teachableLearnset = sGougingFireTeachableLearnset,
},
@@ -6419,7 +6464,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 = _("RagingBolt"),
+ .speciesName = HANDLE_EXPANDED_SPECIES_NAME("RagingBolt", "Raging Bolt"),
.cryId = CRY_RAGING_BOLT,
.natDexNum = NATIONAL_DEX_RAGING_BOLT,
.categoryName = _("Paradox"),
@@ -6448,7 +6493,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.iconSprite = gMonIcon_RagingBolt,
.iconPalIndex = 2,
FOOTPRINT(RagingBolt)
- .isParadoxForm = TRUE,
+ .isParadox = TRUE,
.levelUpLearnset = sRagingBoltLevelUpLearnset,
.teachableLearnset = sRagingBoltTeachableLearnset,
},
@@ -6475,7 +6520,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 = _("IronBouldr"),
+ .speciesName = HANDLE_EXPANDED_SPECIES_NAME("IronBouldr", "Iron Boulder"),
.cryId = CRY_IRON_BOULDER,
.natDexNum = NATIONAL_DEX_IRON_BOULDER,
.categoryName = _("Paradox"),
@@ -6503,7 +6548,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.iconSprite = gMonIcon_IronBoulder,
.iconPalIndex = 5,
FOOTPRINT(IronBoulder)
- .isParadoxForm = TRUE,
+ .isParadox = TRUE,
.levelUpLearnset = sIronBoulderLevelUpLearnset,
.teachableLearnset = sIronBoulderTeachableLearnset,
},
@@ -6559,7 +6604,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.iconSprite = gMonIcon_IronCrown,
.iconPalIndex = 3,
FOOTPRINT(IronCrown)
- .isParadoxForm = TRUE,
+ .isParadox = TRUE,
.levelUpLearnset = sIronCrownLevelUpLearnset,
.teachableLearnset = sIronCrownTeachableLearnset,
},
@@ -6575,6 +6620,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.baseSpAttack = 65,
.baseSpDefense = 85,
.types = MON_TYPES(TYPE_NORMAL),
+ .forceTeraType = TYPE_STELLAR,
.catchRate = 255,
.expYield = 90,
.evYield_Defense = 1,
@@ -6616,6 +6662,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.iconPalIndex = 0,
FOOTPRINT(TerapagosNormal)
.isLegendary = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sTerapagosLevelUpLearnset,
.teachableLearnset = sTerapagosTeachableLearnset,
.formSpeciesIdTable = sTerapagosFormSpeciesIdTable,
@@ -6631,6 +6678,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.baseSpAttack = 105,
.baseSpDefense = 110,
.types = MON_TYPES(TYPE_NORMAL),
+ .forceTeraType = TYPE_STELLAR,
.catchRate = 255,
.expYield = 120,
.evYield_Defense = 2,
@@ -6673,6 +6721,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.iconPalIndex = 0,
FOOTPRINT(TerapagosTerastal)
.isLegendary = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sTerapagosLevelUpLearnset,
.teachableLearnset = sTerapagosTeachableLearnset,
.formSpeciesIdTable = sTerapagosFormSpeciesIdTable,
@@ -6688,6 +6737,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.baseSpAttack = 130,
.baseSpDefense = 110,
.types = MON_TYPES(TYPE_NORMAL),
+ .forceTeraType = TYPE_STELLAR,
.catchRate = 255,
.expYield = 140,
.evYield_HP = 3,
@@ -6713,21 +6763,23 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.pokemonOffset = 0,
.trainerScale = 365,
.trainerOffset = 7,
- //.frontPic = gMonFrontPic_TerapagosStellar,
- //.frontPicSize = MON_COORDS_SIZE(64, 64),
+ .frontPic = gMonFrontPic_TerapagosStellar,
+ .frontPicSize = MON_COORDS_SIZE(64, 64),
.frontPicYOffset = 0,
.frontAnimFrames = sAnims_TerapagosStellar,
//.frontAnimId = ANIM_V_SQUISH_AND_BOUNCE,
- //.backPic = gMonBackPic_TerapagosStellar,
- //.backPicSize = MON_COORDS_SIZE(64, 64),
+ .backPic = gMonBackPic_TerapagosStellar,
+ .backPicSize = MON_COORDS_SIZE(64, 64),
.backPicYOffset = 0,
//.backAnimId = BACK_ANIM_NONE,
- //.palette = gMonPalette_TerapagosStellar,
- //.shinyPalette = gMonShinyPalette_TerapagosStellar,
+ .palette = gMonPalette_TerapagosStellar,
+ .shinyPalette = gMonShinyPalette_TerapagosStellar,
.iconSprite = gMonIcon_TerapagosStellar,
.iconPalIndex = 0,
FOOTPRINT(TerapagosStellar)
.isLegendary = TRUE,
+ .isTeraForm = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sTerapagosLevelUpLearnset,
.teachableLearnset = sTerapagosTeachableLearnset,
.formSpeciesIdTable = sTerapagosFormSpeciesIdTable,
@@ -6785,6 +6837,7 @@ const struct SpeciesInfo gSpeciesInfoGen9[] =
.iconPalIndex = 0,
FOOTPRINT(Pecharunt)
.isMythical = TRUE,
+ .isFrontierBanned = TRUE,
.levelUpLearnset = sPecharuntLevelUpLearnset,
.teachableLearnset = sPecharuntTeachableLearnset,
},
diff --git a/src/data/text/follower_messages.h b/src/data/text/follower_messages.h
new file mode 100644
index 000000000000..638df64d8800
--- /dev/null
+++ b/src/data/text/follower_messages.h
@@ -0,0 +1,301 @@
+extern const u8 EventScript_FollowerIsShivering[];
+extern const u8 EventScript_FollowerNostalgia[];
+extern const u8 EventScript_FollowerHopping[];
+extern const u8 EventScript_FollowerJumpOnPlayer[];
+extern const u8 EventScript_FollowerCuddling[];
+extern const u8 EventScript_FollowerShiverCuddling[];
+extern const u8 EventScript_FollowerGetCloser[];
+extern const u8 EventScript_FollowerPokingPlayer[];
+extern const u8 EventScript_FollowerLookAround[];
+extern const u8 EventScript_FollowerLookAway[];
+extern const u8 EventScript_FollowerLookAwayBark[];
+extern const u8 EventScript_FollowerLookAwayPoke[];
+extern const u8 EventScript_FollowerPokeGround[];
+extern const u8 EventScript_FollowerStartled[];
+extern const u8 EventScript_FollowerFastHopping[];
+extern const u8 EventScript_FollowerDizzy[];
+extern const u8 EventScript_FollowerLookAroundScared[];
+extern const u8 EventScript_FollowerDance[];
+extern const u8 EventScript_FollowerLookUp[];
+
+// 'Generic', unconditional happy messages
+static const u8 sHappyMsg00[] = _("{STR_VAR_1} began poking you in the\nstomach.");
+static const u8 sHappyMsg01[] = _("{STR_VAR_1} is happy but shy.");
+static const u8 sHappyMsg02[] = _("{STR_VAR_1} is coming along happily.");
+static const u8 sHappyMsg03[] = _("{STR_VAR_1} is composed.");
+static const u8 sHappyMsg04[] = _("{STR_VAR_1} seems to be feeling\ngreat about walking with you!");
+static const u8 sHappyMsg05[] = _("{STR_VAR_1} is glowing with health.");
+static const u8 sHappyMsg06[] = _("{STR_VAR_1} looks very happy.");
+static const u8 sHappyMsg07[] = _("{STR_VAR_1} put in extra effort.");
+static const u8 sHappyMsg08[] = _("{STR_VAR_1} is smelling the scents\nof the surrounding air.");
+static const u8 sHappyMsg09[] = _("{STR_VAR_1} is jumping for joy!");
+static const u8 sHappyMsg10[] = _("{STR_VAR_1} is still feeling great!");
+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 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!");
+static const u8 sHappyMsg19[] = _("{STR_VAR_1} is so happy that it\ncan't stand still!");
+static const u8 sHappyMsg20[] = _("{STR_VAR_1} nodded slowly.");
+static const u8 sHappyMsg21[] = _("{STR_VAR_1} is very eager!");
+static const u8 sHappyMsg22[] = _("{STR_VAR_1} is wandering around and\nlistening to the different sounds.");
+static const u8 sHappyMsg23[] = _("{STR_VAR_1} looks very interested.");
+static const u8 sHappyMsg24[] = _("{STR_VAR_1} is somehow forcing\nitself to keep going.");
+static const u8 sHappyMsg25[] = _("{STR_VAR_1} gave you a sunny look!");
+static const u8 sHappyMsg26[] = _("{STR_VAR_1} gives you a happy look\nand a smile.");
+static const u8 sHappyMsg27[] = _("Your POKéMON is smelling the scent\nof flowers.");
+static const u8 sHappyMsg28[] = _("{STR_VAR_1} seems very happy to see\nyou!");
+static const u8 sHappyMsg29[] = _("{STR_VAR_1} faced this way and\ngrinned.");
+static const u8 sHappyMsg30[] = _("{STR_VAR_1} happily cuddled up to\nyou!");
+// Conditional messages begin here, index 31
+static const u8 sHappyMsg31[] = _("Your POKéMON seems happy about the\ngreat weather.");
+static const u8 sHappyMsg32[] = _("{STR_VAR_1} is very composed and\nsure of itself!");
+
+const struct FollowerMsgInfo gFollowerHappyMessages[] = {
+ {sHappyMsg00, EventScript_FollowerPokingPlayer},
+ {sHappyMsg01}, {sHappyMsg02}, {sHappyMsg03}, {sHappyMsg04}, {sHappyMsg05}, {sHappyMsg06}, {sHappyMsg07},
+ {sHappyMsg08, EventScript_FollowerLookAround},
+ {sHappyMsg09, EventScript_FollowerHopping},
+ {sHappyMsg10}, {sHappyMsg11},
+ {sHappyMsg12, EventScript_FollowerPokingPlayer},
+ {sHappyMsg13, EventScript_FollowerLookAround},
+ {sHappyMsg14}, {sHappyMsg15},
+ {sHappyMsg16, EventScript_FollowerCuddling},
+ {sHappyMsg17}, {sHappyMsg18},
+ {sHappyMsg19, EventScript_FollowerFastHopping},
+ {sHappyMsg20}, {sHappyMsg21}, {sHappyMsg22}, {sHappyMsg23}, {sHappyMsg24}, {sHappyMsg25}, {sHappyMsg26}, {sHappyMsg27}, {sHappyMsg28}, {sHappyMsg29},
+ {sHappyMsg30, EventScript_FollowerCuddling},
+ {sHappyMsg31}, {sHappyMsg32},
+};
+
+// Unconditional neutral messages
+static const u8 sNeutralMsg00[] = _("{STR_VAR_1} is steadily poking at\nthe ground.");
+static const u8 sNeutralMsg01[] = _("{STR_VAR_1} is standing guard.");
+static const u8 sNeutralMsg02[] = _("{STR_VAR_1} is staring patiently at\nnothing at all.");
+static const u8 sNeutralMsg03[] = _("{STR_VAR_1} is wandering around.");
+static const u8 sNeutralMsg04[] = _("Your POKéMON yawned loudly!");
+static const u8 sNeutralMsg05[] = _("Your POKéMON is looking around\nrestlessly.");
+static const u8 sNeutralMsg06[] = _("{STR_VAR_1} is looking this way and\nsmiling.");
+static const u8 sNeutralMsg07[] = _("{STR_VAR_1} is gazing around\nrestlessly.");
+static const u8 sNeutralMsg08[] = _("{STR_VAR_1} let out a battle cry.");
+static const u8 sNeutralMsg09[] = _("{STR_VAR_1} danced a wonderful\ndance!");
+static const u8 sNeutralMsg10[] = _("{STR_VAR_1} is very eager.");
+static const u8 sNeutralMsg11[] = _("{STR_VAR_1} is staring intently into\nthe distance.");
+static const u8 sNeutralMsg12[] = _("{STR_VAR_1} is on the lookout!");
+static const u8 sNeutralMsg13[] = _("{STR_VAR_1} looked off into the\ndistance and barked!");
+
+const struct FollowerMsgInfo gFollowerNeutralMessages[] = {
+ {sNeutralMsg00, EventScript_FollowerPokeGround},
+ {sNeutralMsg01},
+ {sNeutralMsg02, EventScript_FollowerLookAway},
+ {sNeutralMsg03, EventScript_FollowerLookAround},
+ {sNeutralMsg04},
+ {sNeutralMsg05, EventScript_FollowerLookAround},
+ {sNeutralMsg06}, {sNeutralMsg07}, {sNeutralMsg08},
+ {sNeutralMsg09, EventScript_FollowerDance},
+ {sNeutralMsg10},
+ {sNeutralMsg11, EventScript_FollowerLookAway},
+ {sNeutralMsg12},
+ {sNeutralMsg13, EventScript_FollowerLookAwayBark},
+};
+
+// Unconditional sad messages
+static const u8 sSadMsg00[] = _("{STR_VAR_1} is dizzy.");
+static const u8 sSadMsg01[] = _("{STR_VAR_1} is stepping on your\nfeet!");
+static const u8 sSadMsg02[] = _("{STR_VAR_1} seems a little tired.");
+// Conditional messages begin, index 3
+static const u8 sSadMsg03[] = _("{STR_VAR_1} is not happy.");
+static const u8 sSadMsg04[] = _("{STR_VAR_1} is going to fall down!\n");
+static const u8 sSadMsg05[] = _("{STR_VAR_1} seems to be about to\nfall over!");
+static const u8 sSadMsg06[] = _("{STR_VAR_1} is trying very hard to\nkeep up with you…");
+static const u8 sSadMsg07[] = _("{STR_VAR_1} is nervous.");
+
+const struct FollowerMsgInfo gFollowerSadMessages[] = {
+ {sSadMsg00, EventScript_FollowerDizzy},
+ {sSadMsg01}, {sSadMsg02},
+ {sSadMsg03}, {sSadMsg04}, {sSadMsg05}, {sSadMsg06}, {sSadMsg07},
+};
+
+// Unconditional upset messages
+static const u8 sUpsetMsg00[] = _("{STR_VAR_1} seems unhappy somehow…");
+static const u8 sUpsetMsg01[] = _("{STR_VAR_1} is making an unhappy\nface.");
+static const u8 sUpsetMsg02[] = _("…Your POKéMON seems a little\ncold.");
+// Conditional messages, index 3
+static const u8 sUpsetMsg03[] = _("{STR_VAR_1} is taking shelter in the\ngrass from the rain.");
+
+const struct FollowerMsgInfo gFollowerUpsetMessages[] = {
+ {sUpsetMsg00}, {sUpsetMsg01},
+ {sUpsetMsg02, EventScript_FollowerIsShivering},
+ {sUpsetMsg03},
+};
+
+// 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\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.");
+
+const struct FollowerMsgInfo gFollowerAngryMessages[] = {
+ {sAngryMsg00}, {sAngryMsg01}, {sAngryMsg02},
+ {sAngryMsg03, EventScript_FollowerLookAway},
+ {sAngryMsg04},
+};
+
+// Unconditional pensive messages
+static const u8 sPensiveMsg00[] = _("{STR_VAR_1} is looking down\nsteadily.");
+static const u8 sPensiveMsg01[] = _("{STR_VAR_1} is surveying the area.");
+static const u8 sPensiveMsg02[] = _("{STR_VAR_1} is peering down.");
+static const u8 sPensiveMsg03[] = _("{STR_VAR_1} is somehow fighting off\nsleep…");
+static const u8 sPensiveMsg04[] = _("{STR_VAR_1} seems to be wandering\naround.");
+static const u8 sPensiveMsg05[] = _("{STR_VAR_1} is looking around\nabsentmindedly.");
+static const u8 sPensiveMsg06[] = _("{STR_VAR_1} yawned very loudly!");
+static const u8 sPensiveMsg07[] = _("{STR_VAR_1} is relaxing comfortably.");
+static const u8 sPensiveMsg08[] = _("{STR_VAR_1} is staring steadfastly\nat your face.");
+static const u8 sPensiveMsg09[] = _("{STR_VAR_1} is staring intently at\nyour face.");
+static const u8 sPensiveMsg10[] = _("{STR_VAR_1} is focusing its\nattention on you.");
+static const u8 sPensiveMsg11[] = _("{STR_VAR_1} is staring into the\ndepths.");
+static const u8 sPensiveMsg12[] = _("{STR_VAR_1} is sniffing at the\nground.");
+static const u8 sPensiveMsg13[] = _("Your POKéMON is staring intently at\nnothing.");
+static const u8 sPensiveMsg14[] = _("{STR_VAR_1} focused with a sharp\ngaze!");
+static const u8 sPensiveMsg15[] = _("{STR_VAR_1} is concentrating.");
+static const u8 sPensiveMsg16[] = _("{STR_VAR_1} faced this way and\nnodded.");
+static const u8 sPensiveMsg17[] = _("{STR_VAR_1} seems a bit nervous…");
+static const u8 sPensiveMsg18[] = _("{STR_VAR_1} is looking at your\nfootprints.");
+static const u8 sPensiveMsg19[] = _("{STR_VAR_1} is staring straight into\nyour eyes.");
+
+const struct FollowerMsgInfo gFollowerPensiveMessages[] = {
+ {sPensiveMsg00},
+ {sPensiveMsg01, EventScript_FollowerLookAround},
+ {sPensiveMsg02}, {sPensiveMsg03}, {sPensiveMsg04},
+ {sPensiveMsg05, EventScript_FollowerLookAround},
+ {sPensiveMsg06}, {sPensiveMsg07}, {sPensiveMsg08}, {sPensiveMsg09}, {sPensiveMsg10},
+ {sPensiveMsg11, EventScript_FollowerLookAway},
+ {sPensiveMsg12, EventScript_FollowerPokeGround},
+ {sPensiveMsg13, EventScript_FollowerLookAway},
+ {sPensiveMsg14}, {sPensiveMsg15}, {sPensiveMsg16}, {sPensiveMsg17}, {sPensiveMsg18}, {sPensiveMsg19},
+};
+
+// All 'love' messages are unconditional
+static const u8 sLoveMsg00[] = _("{STR_VAR_1} suddenly started walking\ncloser!");
+static const u8 sLoveMsg01[] = _("{STR_VAR_1} cheeks are becoming\nrosy!");
+static const u8 sLoveMsg02[] = _("Woah! {STR_VAR_1} suddenly hugged\nyou!");
+static const u8 sLoveMsg03[] = _("Woah! {STR_VAR_1} is suddenly\nplayful!");
+static const u8 sLoveMsg04[] = _("{STR_VAR_1} is rubbing against your\nlegs!");
+static const u8 sLoveMsg05[] = _("{STR_VAR_1} blushes.");
+static const u8 sLoveMsg06[] = _("Ah! {STR_VAR_1} cuddles you!");
+static const u8 sLoveMsg07[] = _("{STR_VAR_1} is regarding you with\nadoration!");
+static const u8 sLoveMsg08[] = _("{STR_VAR_1} got closer to you.");
+static const u8 sLoveMsg09[] = _("{STR_VAR_1} is keeping close to your\nfeet.");
+
+const struct FollowerMsgInfo gFollowerLoveMessages[] = {
+ {sLoveMsg00, EventScript_FollowerGetCloser},
+ {sLoveMsg01},
+ {sLoveMsg02, EventScript_FollowerCuddling},
+ {sLoveMsg03},
+ {sLoveMsg04, EventScript_FollowerCuddling},
+ {sLoveMsg05},
+ {sLoveMsg06, EventScript_FollowerCuddling},
+ {sLoveMsg07},
+ {sLoveMsg08, EventScript_FollowerGetCloser},
+ {sLoveMsg09},
+};
+
+// Unconditional surprised messages
+static const u8 sSurpriseMsg00[] = _("{STR_VAR_1} is in danger of falling\nover!");
+static const u8 sSurpriseMsg01[] = _("{STR_VAR_1} bumped into you!");
+static const u8 sSurpriseMsg02[] = _("{STR_VAR_1} doesn't seem to be used\nto its own name yet.");
+static const u8 sSurpriseMsg03[] = _("{STR_VAR_1} is peering down.");
+static const u8 sSurpriseMsg04[] = _("Your POKéMON stumbled and nearly\nfell!");
+static const u8 sSurpriseMsg05[] = _("{STR_VAR_1} feels something and is\nhowling!");
+static const u8 sSurpriseMsg06[] = _("{STR_VAR_1} seems refreshed!");
+static const u8 sSurpriseMsg07[] = _("{STR_VAR_1} suddenly turned around\nand started barking!");
+static const u8 sSurpriseMsg08[] = _("{STR_VAR_1} suddenly turned around!");
+static const u8 sSurpriseMsg09[] = _("Your POKéMON was surprised that you\nsuddenly spoke to it!");
+static const u8 sSurpriseMsg10[] = _("Sniff sniff, something smells really\ngood!");
+static const u8 sSurpriseMsg11[] = _("{STR_VAR_1} feels refreshed.");
+static const u8 sSurpriseMsg12[] = _("{STR_VAR_1} is wobbling and seems\nabout to fall over.");
+static const u8 sSurpriseMsg13[] = _("{STR_VAR_1} is in danger of falling\nover.");
+static const u8 sSurpriseMsg14[] = _("{STR_VAR_1} is walking along\ncautiously.");
+static const u8 sSurpriseMsg15[] = _("{STR_VAR_1} is getting tense with\nnervous energy.");
+static const u8 sSurpriseMsg16[] = _("{STR_VAR_1} sensed something strange\nand was surprised!");
+static const u8 sSurpriseMsg17[] = _("{STR_VAR_1} is scared and snuggled\nup to you!");
+static const u8 sSurpriseMsg18[] = _("{STR_VAR_1} is feeling an unusual\npresence…");
+static const u8 sSurpriseMsg19[] = _("{STR_VAR_1} is getting tense with\nnervous energy.");
+// Conditional messages, index 20
+static const u8 sSurpriseMsg20[] = _("{STR_VAR_1} seems to be very\nsurprised that it is raining!");
+
+const struct FollowerMsgInfo gFollowerSurpriseMessages[] = {
+ {sSurpriseMsg00},
+ {sSurpriseMsg01, EventScript_FollowerPokingPlayer},
+ {sSurpriseMsg02}, {sSurpriseMsg03}, {sSurpriseMsg04}, {sSurpriseMsg05}, {sSurpriseMsg06},
+ {sSurpriseMsg07, EventScript_FollowerLookAwayBark},
+ {sSurpriseMsg08, EventScript_FollowerLookAway},
+ {sSurpriseMsg09},
+ {sSurpriseMsg10, EventScript_FollowerLookAround},
+ {sSurpriseMsg11}, {sSurpriseMsg12}, {sSurpriseMsg13}, {sSurpriseMsg14}, {sSurpriseMsg15}, {sSurpriseMsg16},
+ {sSurpriseMsg17, EventScript_FollowerCuddling},
+ {sSurpriseMsg18},
+ {sSurpriseMsg19, EventScript_FollowerLookAround},
+ {sSurpriseMsg20},
+};
+
+// Unconditional curious messages
+static const u8 sCuriousMsg00[] = _("Your POKéMON is looking around\nrestlessly for something.");
+static const u8 sCuriousMsg01[] = _("Your POKéMON wasn't watching where\nit was going and ran into you!");
+static const u8 sCuriousMsg02[] = _("Sniff, sniff! Is there something\nnearby?");
+static const u8 sCuriousMsg03[] = _("{STR_VAR_1} is rolling a pebble\naround playfully.");
+static const u8 sCuriousMsg04[] = _("{STR_VAR_1} is wandering around and\nsearching for something.");
+static const u8 sCuriousMsg05[] = _("{STR_VAR_1} is sniffing at you.");
+static const u8 sCuriousMsg06[] = _("{STR_VAR_1} seems to be a little\nhesitant…");
+
+const struct FollowerMsgInfo gFollowerCuriousMessages[] = {
+ {sCuriousMsg00, EventScript_FollowerLookAround},
+ {sCuriousMsg01, EventScript_FollowerPokingPlayer},
+ {sCuriousMsg02}, {sCuriousMsg03},
+ {sCuriousMsg04, EventScript_FollowerLookAround},
+ {sCuriousMsg05}, {sCuriousMsg06},
+};
+
+// Unconditional music messages
+static const u8 sMusicMsg00[] = _("{STR_VAR_1} is showing off its\nagility!");
+static const u8 sMusicMsg01[] = _("{STR_VAR_1} is moving around\nhappily!");
+static const u8 sMusicMsg02[] = _("Woah! {STR_VAR_1} suddenly started\ndancing in happiness!");
+static const u8 sMusicMsg03[] = _("{STR_VAR_1} is steadily keeping up\nwith you!");
+static const u8 sMusicMsg04[] = _("{STR_VAR_1} seems to want to play\nwith you.");
+static const u8 sMusicMsg05[] = _("{STR_VAR_1} is happy skipping about.");
+static const u8 sMusicMsg06[] = _("{STR_VAR_1} is singing and humming.");
+static const u8 sMusicMsg07[] = _("{STR_VAR_1} is nipping at your feet!");
+static const u8 sMusicMsg08[] = _("{STR_VAR_1} turns around and looks\nat you.");
+static const u8 sMusicMsg09[] = _("{STR_VAR_1} is working hard to show\noff its mighty power!");
+static const u8 sMusicMsg10[] = _("Whoa! {STR_VAR_1} suddenly danced in\nhappiness!");
+static const u8 sMusicMsg11[] = _("{STR_VAR_1} is cheerful!");
+static const u8 sMusicMsg12[] = _("{STR_VAR_1} is jumping around in a\ncarefree way!");
+static const u8 sMusicMsg13[] = _("Your POKéMON seems to be smelling a\nnostalgically familiar scent…");
+// Conditional music messages, index 14
+static const u8 sMusicMsg14[] = _("{STR_VAR_1} is very happy about the\nrain.");
+
+const struct FollowerMsgInfo gFollowerMusicMessages[] = {
+ {sMusicMsg00, EventScript_FollowerLookAround},
+ {sMusicMsg01},
+ {sMusicMsg02, EventScript_FollowerDance},
+ {sMusicMsg03},
+ {sMusicMsg04, EventScript_FollowerHopping},
+ {sMusicMsg05, EventScript_FollowerHopping},
+ {sMusicMsg06}, {sMusicMsg07}, {sMusicMsg08}, {sMusicMsg09},
+ {sMusicMsg10, EventScript_FollowerDance},
+ {sMusicMsg11},
+ {sMusicMsg12, EventScript_FollowerHopping},
+ {sMusicMsg13, EventScript_FollowerNostalgia},
+ {sMusicMsg14}
+};
+
+
+static const u8 sPoisonedMsg00[] = _("{STR_VAR_1} is shivering with the\neffects of being poisoned.");
+
+const struct FollowerMsgInfo gFollowerPoisonedMessages[] = {
+ {sPoisonedMsg00, EventScript_FollowerIsShivering},
+};
diff --git a/src/data/trainers.party b/src/data/trainers.party
new file mode 100644
index 000000000000..c5d2626b3d52
--- /dev/null
+++ b/src/data/trainers.party
@@ -0,0 +1,16875 @@
+/*
+Trainers and their parties defined with Competetive Syntax.
+Compatible with Pokemon Showdown exports.
+https://github.com/smogon/pokemon-showdown/blob/master/sim/TEAMS.md
+
+A trainer specification starts with "=== TRAINER_XXXX ==="
+and includes everything until the next line that starts with "==="
+or the file ends.
+A blank line is required between the trainer and their Pokemon
+and between their Pokemon.
+TRAINER_XXXX is how the trainer is referred to within code.
+
+Fields with description and/or example of usage
+Required fields for trainers:
+ - Name
+ - Pic
+Optional (but still recommended) fields for trainers:
+ - Class (if not specified, PkMn Trainer will be used)
+ - Gender (Male/Female, affects random gender weights of party if not specified)
+ - Music
+ - Items (Some Item / Another Item / Third Item)
+ (Can also be specified with ITEM_SOME_ITEM)
+ - Double Battle (Yes/No, defaults to No)
+ - AI (Ai Flag / Another Flag / Third Flag / ...
+ see "constants/battle_ai.h" for all flags)
+ - Mugshot (enable Mugshots during battle transition
+ set to one of Purple, Green, Pink, Blue or Yellow)
+ - Starting Status (see include/constants/battle.h for values)
+
+Pokemon are then specified using the Showdown Export format.
+If a field is not specified, it will use it's default value.
+
+Required fields for Pokemon:
+ - Species (Either as SPECIES_ABRA or Abra)
+ This line also specifies Gender, Nickname and Held item.
+ Alfred (Abra) (M) @ Eviolite
+ Roberta (SPECIES_ABRA) (F) @ ITEM_CHOICE_SPECS
+ Both lines are valid. Gender (M) or (F) must use a capital letter.
+ Nickname length is limited to 10 characters using standard letters.
+ With narrow font it's increased to 12. Longer strings will be silently shortened.
+
+Optional fields for Pokemon:
+ - Level (Number between 1 and 100, defaults to 100)
+ - Ability (Ability Name or ABILITY_ABILITY_NAME)
+ - IVs (0 HP / 1 Atk / 2 Def / 3 SpA / 4 SpD / 5 Spe, defaults to all 31)
+ (Order does not matter)
+ - EVs (252 HP / 128 Spe / 48 Def, defaults to all 0, is not capped at 512 total)
+ (Order does not matter)
+ - Ball (Poke Ball or ITEM_POKE_BALL, defaults to Poke Ball
+ - Happiness (Number between 1 and 255)
+ - Nature (Rash or NATURE_RASH, defaults to Hardy)
+ - Shiny (Yes/No, defaults to No)
+ - Dynamax Level (Number between 0 and 10, default 10, also sets "shouldDynamax" to True)
+ - Gigantamax (Yes/No, sets to Gigantamax factor)
+ (doesn't do anything to Pokemon without a Gigantamax form, also sets "shouldDynamax" to True)
+ - Tera Type (Set to a Type, either Fire or TYPE_FIRE, also sets "shouldTerastal" to True)
+Moves are defined with a - (dash) followed by a single space, then the move name.
+Either "- Tackle" or "- MOVE_TACKLE" works. One move per line.
+Moves have to be the last lines of a Pokemon.
+If no moves are specified, the Pokemon will use the last 4 moves it learns
+through levelup at its level.
+
+Default IVs and Level can be changed in the "main" function of tools/trainerproc/main.c
+
+This file is processed with a custom preprocessor.
+*/
+
+/*
+Comments can be added as C comment blocks
+// cannot be used as comments
+*/
+
+/*Comments can also be on a single line*/
+
+
+=== TRAINER_NONE ===
+Name:
+Class: Pkmn Trainer 1
+Pic: Hiker
+Gender: Male
+Music: Male
+Double Battle: No
+
+=== TRAINER_SAWYER_1 ===
+Name: SAWYER
+Class: Hiker
+Pic: Hiker
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Geodude
+Level: 21
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_AQUA_HIDEOUT_1 ===
+Name: GRUNT
+Class: Team Aqua
+Pic: Aqua Grunt M
+Gender: Male
+Music: Aqua
+Double Battle: No
+AI: Check Bad Move
+
+Poochyena
+Level: 32
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_AQUA_HIDEOUT_2 ===
+Name: GRUNT
+Class: Team Aqua
+Pic: Aqua Grunt M
+Gender: Male
+Music: Aqua
+Double Battle: No
+AI: Check Bad Move
+
+Zubat
+Level: 31
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Carvanha
+Level: 31
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_AQUA_HIDEOUT_3 ===
+Name: GRUNT
+Class: Team Aqua
+Pic: Aqua Grunt M
+Gender: Male
+Music: Aqua
+Double Battle: No
+AI: Check Bad Move
+
+Zubat
+Level: 32
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_AQUA_HIDEOUT_4 ===
+Name: GRUNT
+Class: Team Aqua
+Pic: Aqua Grunt M
+Gender: Male
+Music: Aqua
+Double Battle: No
+AI: Check Bad Move
+
+Carvanha
+Level: 32
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_SEAFLOOR_CAVERN_1 ===
+Name: GRUNT
+Class: Team Aqua
+Pic: Aqua Grunt M
+Gender: Male
+Music: Aqua
+Double Battle: No
+AI: Check Bad Move
+
+Poochyena
+Level: 36
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_SEAFLOOR_CAVERN_2 ===
+Name: GRUNT
+Class: Team Aqua
+Pic: Aqua Grunt M
+Gender: Male
+Music: Aqua
+Double Battle: No
+AI: Check Bad Move
+
+Carvanha
+Level: 36
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_SEAFLOOR_CAVERN_3 ===
+Name: GRUNT
+Class: Team Aqua
+Pic: Aqua Grunt M
+Gender: Male
+Music: Aqua
+Double Battle: No
+AI: Check Bad Move
+
+Zubat
+Level: 36
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GABRIELLE_1 ===
+Name: GABRIELLE
+Class: Pkmn Breeder
+Pic: Pokemon Breeder F
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Skitty
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Poochyena
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Zigzagoon
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Lotad
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Seedot
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Taillow
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_PETALBURG_WOODS ===
+Name: GRUNT
+Class: Team Aqua
+Pic: Aqua Grunt M
+Gender: Male
+Music: Aqua
+Double Battle: No
+AI: Check Bad Move
+
+Poochyena
+Level: 9
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_MARCEL ===
+Name: MARCEL
+Class: Cooltrainer
+Pic: Cooltrainer M
+Gender: Male
+Music: Cool
+Items: Hyper Potion
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Manectric
+Level: 29
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Shiftry
+Level: 29
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_ALBERTO ===
+Name: ALBERTO
+Class: Bird Keeper
+Pic: Bird Keeper
+Gender: Male
+Music: Cool
+Double Battle: No
+AI: Check Bad Move
+
+Pelipper
+Level: 30
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Xatu
+Level: 30
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_ED ===
+Name: ED
+Class: Collector
+Pic: Collector
+Gender: Male
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move
+
+Zangoose
+Level: 30
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Seviper
+Level: 30
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_SEAFLOOR_CAVERN_4 ===
+Name: GRUNT
+Class: Team Aqua
+Pic: Aqua Grunt F
+Gender: Female
+Music: Aqua
+Double Battle: No
+AI: Check Bad Move
+
+Carvanha
+Level: 36
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_DECLAN ===
+Name: DECLAN
+Class: Swimmer M
+Pic: Swimmer M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Gyarados
+Level: 34
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_RUSTURF_TUNNEL ===
+Name: GRUNT
+Class: Team Aqua
+Pic: Aqua Grunt M
+Gender: Male
+Music: Aqua
+Double Battle: No
+AI: Check Bad Move
+
+Poochyena
+Level: 11
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_WEATHER_INST_1 ===
+Name: GRUNT
+Class: Team Aqua
+Pic: Aqua Grunt M
+Gender: Male
+Music: Aqua
+Double Battle: No
+AI: Check Bad Move
+
+Zubat
+Level: 27
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Poochyena
+Level: 27
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_WEATHER_INST_2 ===
+Name: GRUNT
+Class: Team Aqua
+Pic: Aqua Grunt M
+Gender: Male
+Music: Aqua
+Double Battle: No
+AI: Check Bad Move
+
+Poochyena
+Level: 27
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Carvanha
+Level: 27
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_WEATHER_INST_3 ===
+Name: GRUNT
+Class: Team Aqua
+Pic: Aqua Grunt M
+Gender: Male
+Music: Aqua
+Double Battle: No
+AI: Check Bad Move
+
+Poochyena
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Zubat
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Carvanha
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_MUSEUM_1 ===
+Name: GRUNT
+Class: Team Aqua
+Pic: Aqua Grunt M
+Gender: Male
+Music: Aqua
+Double Battle: No
+AI: Check Bad Move
+
+Carvanha
+Level: 15
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_MUSEUM_2 ===
+Name: GRUNT
+Class: Team Aqua
+Pic: Aqua Grunt M
+Gender: Male
+Music: Aqua
+Double Battle: No
+AI: Check Bad Move
+
+Zubat
+Level: 14
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Carvanha
+Level: 14
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_SPACE_CENTER_1 ===
+Name: GRUNT
+Class: Team Magma
+Pic: Magma Grunt M
+Gender: Male
+Music: Magma
+Double Battle: No
+AI: Check Bad Move
+
+Numel
+Level: 32
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_MT_PYRE_1 ===
+Name: GRUNT
+Class: Team Aqua
+Pic: Aqua Grunt M
+Gender: Male
+Music: Aqua
+Double Battle: No
+AI: Check Bad Move
+
+Zubat
+Level: 32
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_MT_PYRE_2 ===
+Name: GRUNT
+Class: Team Aqua
+Pic: Aqua Grunt M
+Gender: Male
+Music: Aqua
+Double Battle: No
+AI: Check Bad Move
+
+Carvanha
+Level: 32
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_MT_PYRE_3 ===
+Name: GRUNT
+Class: Team Aqua
+Pic: Aqua Grunt M
+Gender: Male
+Music: Aqua
+Double Battle: No
+AI: Check Bad Move
+
+Poochyena
+Level: 30
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Carvanha
+Level: 30
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_WEATHER_INST_4 ===
+Name: GRUNT
+Class: Team Aqua
+Pic: Aqua Grunt F
+Gender: Female
+Music: Aqua
+Double Battle: No
+AI: Check Bad Move
+
+Carvanha
+Level: 28
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_AQUA_HIDEOUT_5 ===
+Name: GRUNT
+Class: Team Aqua
+Pic: Aqua Grunt F
+Gender: Female
+Music: Aqua
+Double Battle: No
+AI: Check Bad Move
+
+Carvanha
+Level: 32
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_AQUA_HIDEOUT_6 ===
+Name: GRUNT
+Class: Team Aqua
+Pic: Aqua Grunt F
+Gender: Female
+Music: Aqua
+Double Battle: No
+AI: Check Bad Move
+
+Zubat
+Level: 32
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_FREDRICK ===
+Name: FREDRICK
+Class: Expert
+Pic: Expert M
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Makuhita
+Level: 30
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Machoke
+Level: 30
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_MATT ===
+Name: MATT
+Class: Aqua Admin
+Pic: Aqua Admin M
+Gender: Male
+Music: Aqua
+Items: Super Potion
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Mightyena
+Level: 34
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+Golbat
+Level: 34
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+=== TRAINER_ZANDER ===
+Name: ZANDER
+Class: Black Belt
+Pic: Black Belt
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Hariyama
+Level: 31
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_SHELLY_WEATHER_INSTITUTE ===
+Name: SHELLY
+Class: Aqua Admin
+Pic: Aqua Admin F
+Gender: Female
+Music: Aqua
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Carvanha
+Level: 28
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+Mightyena
+Level: 28
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+=== TRAINER_SHELLY_SEAFLOOR_CAVERN ===
+Name: SHELLY
+Class: Aqua Admin
+Pic: Aqua Admin F
+Gender: Female
+Music: Aqua
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Sharpedo
+Level: 37
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Mightyena
+Level: 37
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_ARCHIE ===
+Name: ARCHIE
+Class: Aqua Leader
+Pic: Aqua Leader Archie
+Gender: Male
+Music: Aqua
+Items: Super Potion / Super Potion
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Mightyena
+Level: 41
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+Crobat
+Level: 41
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+Sharpedo
+Level: 43
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+=== TRAINER_LEAH ===
+Name: LEAH
+Class: Hex Maniac
+Pic: Hex Maniac
+Gender: Female
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move
+
+Spoink
+Level: 31
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_DAISY ===
+Name: DAISY
+Class: Aroma Lady
+Pic: Aroma Lady
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Shroomish
+Level: 14
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Roselia
+Level: 14
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_ROSE_1 ===
+Name: ROSE
+Class: Aroma Lady
+Pic: Aroma Lady
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Roselia
+Level: 14
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Shroomish
+Level: 14
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Roselia
+Level: 14
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_FELIX ===
+Name: FELIX
+Class: Cooltrainer
+Pic: Cooltrainer M
+Gender: Male
+Music: Cool
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Medicham
+Level: 43
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Psychic
+
+Claydol
+Level: 43
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Skill Swap
+- Earthquake
+
+=== TRAINER_VIOLET ===
+Name: VIOLET
+Class: Aroma Lady
+Pic: Aroma Lady
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Roselia
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Gloom
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_ROSE_2 ===
+Name: ROSE
+Class: Aroma Lady
+Pic: Aroma Lady
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Shroomish
+Level: 26
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Roselia
+Level: 26
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_ROSE_3 ===
+Name: ROSE
+Class: Aroma Lady
+Pic: Aroma Lady
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Shroomish
+Level: 28
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Gloom
+Level: 28
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Roselia
+Level: 28
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+=== TRAINER_ROSE_4 ===
+Name: ROSE
+Class: Aroma Lady
+Pic: Aroma Lady
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Shroomish
+Level: 31
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Gloom
+Level: 31
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Roselia
+Level: 31
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+=== TRAINER_ROSE_5 ===
+Name: ROSE
+Class: Aroma Lady
+Pic: Aroma Lady
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Breloom
+Level: 34
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Gloom
+Level: 34
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Roselia
+Level: 34
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+=== TRAINER_DUSTY_1 ===
+Name: DUSTY
+Class: Ruin Maniac
+Pic: Ruin Maniac
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Sandslash
+Level: 23
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+- Dig
+- Slash
+- Sand Attack
+- Poison Sting
+
+=== TRAINER_CHIP ===
+Name: CHIP
+Class: Ruin Maniac
+Pic: Ruin Maniac
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Baltoy
+Level: 27
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+- Psybeam
+- Self Destruct
+- Sandstorm
+- Ancient Power
+
+Sandshrew
+Level: 27
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+- Dig
+- Slash
+- Sand Attack
+- Poison Sting
+
+Sandslash
+Level: 27
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+- Dig
+- Slash
+- Sand Attack
+- Poison Sting
+
+=== TRAINER_FOSTER ===
+Name: FOSTER
+Class: Ruin Maniac
+Pic: Ruin Maniac
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Sandshrew
+Level: 25
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+- Dig
+- Slash
+- Sand Attack
+- Poison Sting
+
+Sandslash
+Level: 25
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+- Dig
+- Slash
+- Sand Attack
+- Poison Sting
+
+=== TRAINER_DUSTY_2 ===
+Name: DUSTY
+Class: Ruin Maniac
+Pic: Ruin Maniac
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Sandslash
+Level: 27
+IVs: 7 HP / 7 Atk / 7 Def / 7 SpA / 7 SpD / 7 Spe
+- Dig
+- Slash
+- Sand Attack
+- Poison Sting
+
+=== TRAINER_DUSTY_3 ===
+Name: DUSTY
+Class: Ruin Maniac
+Pic: Ruin Maniac
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Sandslash
+Level: 30
+IVs: 8 HP / 8 Atk / 8 Def / 8 SpA / 8 SpD / 8 Spe
+- Dig
+- Slash
+- Sand Attack
+- Poison Sting
+
+=== TRAINER_DUSTY_4 ===
+Name: DUSTY
+Class: Ruin Maniac
+Pic: Ruin Maniac
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Sandslash
+Level: 33
+IVs: 9 HP / 9 Atk / 9 Def / 9 SpA / 9 SpD / 9 Spe
+- Dig
+- Slash
+- Sand Attack
+- Poison Sting
+
+=== TRAINER_DUSTY_5 ===
+Name: DUSTY
+Class: Ruin Maniac
+Pic: Ruin Maniac
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Sandslash
+Level: 36
+IVs: 10 HP / 10 Atk / 10 Def / 10 SpA / 10 SpD / 10 Spe
+- Dig
+- Slash
+- Sand Attack
+- Poison Sting
+
+=== TRAINER_GABBY_AND_TY_1 ===
+Name: GABBY & TY
+Class: Interviewer
+Pic: Interviewer
+Gender: Male
+Music: Interviewer
+Double Battle: Yes
+AI: Check Bad Move
+
+Magnemite
+Level: 17
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+Whismur
+Level: 17
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+=== TRAINER_GABBY_AND_TY_2 ===
+Name: GABBY & TY
+Class: Interviewer
+Pic: Interviewer
+Gender: Male
+Music: Interviewer
+Double Battle: Yes
+AI: Check Bad Move
+
+Magnemite
+Level: 27
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Loudred
+Level: 27
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_GABBY_AND_TY_3 ===
+Name: GABBY & TY
+Class: Interviewer
+Pic: Interviewer
+Gender: Male
+Music: Interviewer
+Double Battle: Yes
+AI: Check Bad Move
+
+Magneton
+Level: 30
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+Loudred
+Level: 30
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+=== TRAINER_GABBY_AND_TY_4 ===
+Name: GABBY & TY
+Class: Interviewer
+Pic: Interviewer
+Gender: Male
+Music: Interviewer
+Double Battle: Yes
+AI: Check Bad Move
+
+Magneton
+Level: 33
+IVs: 24 HP / 24 Atk / 24 Def / 24 SpA / 24 SpD / 24 Spe
+
+Loudred
+Level: 33
+IVs: 24 HP / 24 Atk / 24 Def / 24 SpA / 24 SpD / 24 Spe
+
+=== TRAINER_GABBY_AND_TY_5 ===
+Name: GABBY & TY
+Class: Interviewer
+Pic: Interviewer
+Gender: Male
+Music: Interviewer
+Double Battle: Yes
+AI: Check Bad Move
+
+Magneton
+Level: 36
+IVs: 30 HP / 30 Atk / 30 Def / 30 SpA / 30 SpD / 30 Spe
+
+Loudred
+Level: 36
+IVs: 30 HP / 30 Atk / 30 Def / 30 SpA / 30 SpD / 30 Spe
+
+=== TRAINER_GABBY_AND_TY_6 ===
+Name: GABBY & TY
+Class: Interviewer
+Pic: Interviewer
+Gender: Male
+Music: Interviewer
+Double Battle: Yes
+AI: Check Bad Move
+
+Magneton
+Level: 39
+IVs: 30 HP / 30 Atk / 30 Def / 30 SpA / 30 SpD / 30 Spe
+- Sonic Boom
+- Thunder Wave
+- Metal Sound
+- Thunderbolt
+
+Exploud
+Level: 39
+IVs: 30 HP / 30 Atk / 30 Def / 30 SpA / 30 SpD / 30 Spe
+- Astonish
+- Stomp
+- Supersonic
+- Hyper Voice
+
+=== TRAINER_LOLA_1 ===
+Name: LOLA
+Class: Tuber F
+Pic: Tuber F
+Gender: Female
+Music: Girl
+Double Battle: No
+AI: Check Bad Move
+
+Azurill
+Level: 12
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Azurill
+Level: 12
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_AUSTINA ===
+Name: AUSTINA
+Class: Tuber F
+Pic: Tuber F
+Gender: Female
+Music: Girl
+Double Battle: No
+AI: Check Bad Move
+
+Marill
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GWEN ===
+Name: GWEN
+Class: Tuber F
+Pic: Tuber F
+Gender: Female
+Music: Girl
+Double Battle: No
+AI: Check Bad Move
+
+Marill
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_LOLA_2 ===
+Name: LOLA
+Class: Tuber F
+Pic: Tuber F
+Gender: Female
+Music: Girl
+Double Battle: No
+AI: Check Bad Move
+
+Marill
+Level: 26
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Marill
+Level: 26
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_LOLA_3 ===
+Name: LOLA
+Class: Tuber F
+Pic: Tuber F
+Gender: Female
+Music: Girl
+Double Battle: No
+AI: Check Bad Move
+
+Marill
+Level: 29
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Marill
+Level: 29
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+=== TRAINER_LOLA_4 ===
+Name: LOLA
+Class: Tuber F
+Pic: Tuber F
+Gender: Female
+Music: Girl
+Double Battle: No
+AI: Check Bad Move
+
+Marill
+Level: 32
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Marill
+Level: 32
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+=== TRAINER_LOLA_5 ===
+Name: LOLA
+Class: Tuber F
+Pic: Tuber F
+Gender: Female
+Music: Girl
+Double Battle: No
+AI: Check Bad Move
+
+Azumarill
+Level: 35
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Azumarill
+Level: 35
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+=== TRAINER_RICKY_1 ===
+Name: RICKY
+Class: Tuber M
+Pic: Tuber M
+Gender: Male
+Music: Girl
+Double Battle: No
+AI: Check Bad Move
+
+Zigzagoon
+Level: 13
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+- Sand Attack
+- Headbutt
+- Tail Whip
+- Surf
+
+=== TRAINER_SIMON ===
+Name: SIMON
+Class: Tuber M
+Pic: Tuber M
+Gender: Male
+Music: Girl
+Double Battle: No
+AI: Check Bad Move
+
+Azurill
+Level: 12
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Marill
+Level: 12
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_CHARLIE ===
+Name: CHARLIE
+Class: Tuber M
+Pic: Tuber M
+Gender: Male
+Music: Girl
+Double Battle: No
+AI: Check Bad Move
+
+Marill
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_RICKY_2 ===
+Name: RICKY
+Class: Tuber M
+Pic: Tuber M
+Gender: Male
+Music: Girl
+Double Battle: No
+AI: Check Bad Move
+
+Linoone
+Level: 27
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+- Sand Attack
+- Pin Missile
+- Tail Whip
+- Surf
+
+=== TRAINER_RICKY_3 ===
+Name: RICKY
+Class: Tuber M
+Pic: Tuber M
+Gender: Male
+Music: Girl
+Double Battle: No
+AI: Check Bad Move
+
+Linoone
+Level: 30
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+- Sand Attack
+- Pin Missile
+- Tail Whip
+- Surf
+
+=== TRAINER_RICKY_4 ===
+Name: RICKY
+Class: Tuber M
+Pic: Tuber M
+Gender: Male
+Music: Girl
+Double Battle: No
+AI: Check Bad Move
+
+Linoone
+Level: 33
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+- Sand Attack
+- Pin Missile
+- Tail Whip
+- Surf
+
+=== TRAINER_RICKY_5 ===
+Name: RICKY
+Class: Tuber M
+Pic: Tuber M
+Gender: Male
+Music: Girl
+Double Battle: No
+AI: Check Bad Move
+
+Linoone
+Level: 36
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+- Sand Attack
+- Pin Missile
+- Tail Whip
+- Surf
+
+=== TRAINER_RANDALL ===
+Name: RANDALL
+Class: Cooltrainer
+Pic: Cooltrainer M
+Gender: Male
+Music: Cool
+Items: Hyper Potion
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Swellow
+Level: 26
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Quick Attack
+- Agility
+- Wing Attack
+
+=== TRAINER_PARKER ===
+Name: PARKER
+Class: Cooltrainer
+Pic: Cooltrainer M
+Gender: Male
+Music: Cool
+Items: Hyper Potion
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Spinda
+Level: 26
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Teeter Dance
+- Dizzy Punch
+- Focus Punch
+
+=== TRAINER_GEORGE ===
+Name: GEORGE
+Class: Cooltrainer
+Pic: Cooltrainer M
+Gender: Male
+Music: Cool
+Items: Hyper Potion
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Slakoth @ Sitrus Berry
+Level: 26
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Slack Off
+- Counter
+- Shadow Ball
+
+=== TRAINER_BERKE ===
+Name: BERKE
+Class: Cooltrainer
+Pic: Cooltrainer M
+Gender: Male
+Music: Cool
+Items: Hyper Potion
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Vigoroth
+Level: 26
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Focus Energy
+- Slash
+
+=== TRAINER_BRAXTON ===
+Name: BRAXTON
+Class: Cooltrainer
+Pic: Cooltrainer M
+Gender: Male
+Music: Cool
+Items: Hyper Potion
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Swellow
+Level: 28
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+- Focus Energy
+- Quick Attack
+- Wing Attack
+- Endeavor
+
+Trapinch
+Level: 28
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+- Bite
+- Dig
+- Feint Attack
+- Sand Tomb
+
+Wailmer
+Level: 28
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+- Rollout
+- Whirlpool
+- Astonish
+- Water Pulse
+
+Magneton
+Level: 28
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+- Thunderbolt
+- Supersonic
+- Thunder Wave
+- Sonic Boom
+
+Shiftry
+Level: 28
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+- Giga Drain
+- Feint Attack
+- Double Team
+- Swagger
+
+=== TRAINER_VINCENT ===
+Name: VINCENT
+Class: Cooltrainer
+Pic: Cooltrainer M
+Gender: Male
+Music: Cool
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Sableye
+Level: 44
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Medicham
+Level: 44
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Sharpedo
+Level: 44
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_LEROY ===
+Name: LEROY
+Class: Cooltrainer
+Pic: Cooltrainer M
+Gender: Male
+Music: Cool
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Mawile
+Level: 46
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Starmie
+Level: 46
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_WILTON_1 ===
+Name: WILTON
+Class: Cooltrainer
+Pic: Cooltrainer M
+Gender: Male
+Music: Cool
+Items: Super Potion
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Electrike
+Level: 17
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Wailmer
+Level: 17
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Makuhita
+Level: 17
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_EDGAR ===
+Name: EDGAR
+Class: Cooltrainer
+Pic: Cooltrainer M
+Gender: Male
+Music: Cool
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Cacturne
+Level: 43
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Pelipper
+Level: 43
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_ALBERT ===
+Name: ALBERT
+Class: Cooltrainer
+Pic: Cooltrainer M
+Gender: Male
+Music: Cool
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Magneton
+Level: 43
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Muk
+Level: 43
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_SAMUEL ===
+Name: SAMUEL
+Class: Cooltrainer
+Pic: Cooltrainer M
+Gender: Male
+Music: Cool
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Swellow
+Level: 42
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Mawile
+Level: 42
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Kadabra
+Level: 42
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_VITO ===
+Name: VITO
+Class: Cooltrainer
+Pic: Cooltrainer M
+Gender: Male
+Music: Cool
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Dodrio
+Level: 42
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Kadabra
+Level: 42
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Electrode
+Level: 42
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Shiftry
+Level: 42
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_OWEN ===
+Name: OWEN
+Class: Cooltrainer
+Pic: Cooltrainer M
+Gender: Male
+Music: Cool
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Kecleon
+Level: 42
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Graveler
+Level: 42
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Wailord
+Level: 42
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_WILTON_2 ===
+Name: WILTON
+Class: Cooltrainer
+Pic: Cooltrainer M
+Gender: Male
+Music: Cool
+Items: Hyper Potion
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Electrike
+Level: 26
+IVs: 13 HP / 13 Atk / 13 Def / 13 SpA / 13 SpD / 13 Spe
+
+Wailmer
+Level: 26
+IVs: 13 HP / 13 Atk / 13 Def / 13 SpA / 13 SpD / 13 Spe
+
+Makuhita
+Level: 26
+IVs: 13 HP / 13 Atk / 13 Def / 13 SpA / 13 SpD / 13 Spe
+
+=== TRAINER_WILTON_3 ===
+Name: WILTON
+Class: Cooltrainer
+Pic: Cooltrainer M
+Gender: Male
+Music: Cool
+Items: Hyper Potion
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Manectric
+Level: 29
+IVs: 14 HP / 14 Atk / 14 Def / 14 SpA / 14 SpD / 14 Spe
+
+Wailmer
+Level: 29
+IVs: 14 HP / 14 Atk / 14 Def / 14 SpA / 14 SpD / 14 Spe
+
+Makuhita
+Level: 29
+IVs: 14 HP / 14 Atk / 14 Def / 14 SpA / 14 SpD / 14 Spe
+
+=== TRAINER_WILTON_4 ===
+Name: WILTON
+Class: Cooltrainer
+Pic: Cooltrainer M
+Gender: Male
+Music: Cool
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Manectric
+Level: 32
+IVs: 15 HP / 15 Atk / 15 Def / 15 SpA / 15 SpD / 15 Spe
+
+Wailmer
+Level: 32
+IVs: 15 HP / 15 Atk / 15 Def / 15 SpA / 15 SpD / 15 Spe
+
+Makuhita
+Level: 32
+IVs: 15 HP / 15 Atk / 15 Def / 15 SpA / 15 SpD / 15 Spe
+
+=== TRAINER_WILTON_5 ===
+Name: WILTON
+Class: Cooltrainer
+Pic: Cooltrainer M
+Gender: Male
+Music: Cool
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Manectric
+Level: 35
+IVs: 17 HP / 17 Atk / 17 Def / 17 SpA / 17 SpD / 17 Spe
+
+Wailmer
+Level: 35
+IVs: 17 HP / 17 Atk / 17 Def / 17 SpA / 17 SpD / 17 Spe
+
+Hariyama
+Level: 35
+IVs: 17 HP / 17 Atk / 17 Def / 17 SpA / 17 SpD / 17 Spe
+
+=== TRAINER_WARREN ===
+Name: WARREN
+Class: Cooltrainer
+Pic: Cooltrainer M
+Gender: Male
+Music: Cool
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Graveler
+Level: 33
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Ludicolo
+Level: 33
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_MARY ===
+Name: MARY
+Class: Cooltrainer
+Pic: Cooltrainer F
+Gender: Female
+Music: Cool
+Items: Hyper Potion
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Delcatty
+Level: 26
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Feint Attack
+- Shock Wave
+
+=== TRAINER_ALEXIA ===
+Name: ALEXIA
+Class: Cooltrainer
+Pic: Cooltrainer F
+Gender: Female
+Music: Cool
+Items: Hyper Potion
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Wigglytuff
+Level: 26
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Defense Curl
+- Double Edge
+- Shadow Ball
+
+=== TRAINER_JODY ===
+Name: JODY
+Class: Cooltrainer
+Pic: Cooltrainer F
+Gender: Female
+Music: Cool
+Items: Hyper Potion
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Setup First Turn
+
+Zangoose
+Level: 26
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Swords Dance
+- Slash
+
+=== TRAINER_WENDY ===
+Name: WENDY
+Class: Cooltrainer
+Pic: Cooltrainer F
+Gender: Female
+Music: Cool
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Setup First Turn
+
+Mawile
+Level: 29
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+- Baton Pass
+- Feint Attack
+- Fake Tears
+- Bite
+
+Roselia
+Level: 29
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+- Mega Drain
+- Magical Leaf
+- Grass Whistle
+- Leech Seed
+
+Pelipper
+Level: 29
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+- Fly
+- Water Gun
+- Mist
+- Protect
+
+=== TRAINER_KEIRA ===
+Name: KEIRA
+Class: Cooltrainer
+Pic: Cooltrainer F
+Gender: Female
+Music: Cool
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Setup First Turn
+
+Lairon
+Level: 45
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Manectric
+Level: 45
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_BROOKE_1 ===
+Name: BROOKE
+Class: Cooltrainer
+Pic: Cooltrainer F
+Gender: Female
+Music: Cool
+Items: Super Potion
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Wingull
+Level: 17
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Numel
+Level: 17
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Roselia
+Level: 17
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_JENNIFER ===
+Name: JENNIFER
+Class: Cooltrainer
+Pic: Cooltrainer F
+Gender: Female
+Music: Cool
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Sableye
+Level: 30
+IVs: 24 HP / 24 Atk / 24 Def / 24 SpA / 24 SpD / 24 Spe
+
+=== TRAINER_HOPE ===
+Name: HOPE
+Class: Cooltrainer
+Pic: Cooltrainer F
+Gender: Female
+Music: Cool
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Roselia
+Level: 45
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_SHANNON ===
+Name: SHANNON
+Class: Cooltrainer
+Pic: Cooltrainer F
+Gender: Female
+Music: Cool
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Claydol
+Level: 45
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_MICHELLE ===
+Name: MICHELLE
+Class: Cooltrainer
+Pic: Cooltrainer F
+Gender: Female
+Music: Cool
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Torkoal
+Level: 42
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Medicham
+Level: 42
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Ludicolo
+Level: 42
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_CAROLINE ===
+Name: CAROLINE
+Class: Cooltrainer
+Pic: Cooltrainer F
+Gender: Female
+Music: Cool
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Skarmory
+Level: 43
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Sableye
+Level: 43
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_JULIE ===
+Name: JULIE
+Class: Cooltrainer
+Pic: Cooltrainer F
+Gender: Female
+Music: Cool
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Sandslash
+Level: 42
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Ninetales
+Level: 42
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Tropius
+Level: 42
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_BROOKE_2 ===
+Name: BROOKE
+Class: Cooltrainer
+Pic: Cooltrainer F
+Gender: Female
+Music: Cool
+Items: Hyper Potion
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Wingull
+Level: 26
+IVs: 13 HP / 13 Atk / 13 Def / 13 SpA / 13 SpD / 13 Spe
+
+Numel
+Level: 26
+IVs: 13 HP / 13 Atk / 13 Def / 13 SpA / 13 SpD / 13 Spe
+
+Roselia
+Level: 26
+IVs: 13 HP / 13 Atk / 13 Def / 13 SpA / 13 SpD / 13 Spe
+
+=== TRAINER_BROOKE_3 ===
+Name: BROOKE
+Class: Cooltrainer
+Pic: Cooltrainer F
+Gender: Female
+Music: Cool
+Items: Hyper Potion
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Pelipper
+Level: 29
+IVs: 14 HP / 14 Atk / 14 Def / 14 SpA / 14 SpD / 14 Spe
+
+Numel
+Level: 29
+IVs: 14 HP / 14 Atk / 14 Def / 14 SpA / 14 SpD / 14 Spe
+
+Roselia
+Level: 29
+IVs: 14 HP / 14 Atk / 14 Def / 14 SpA / 14 SpD / 14 Spe
+
+=== TRAINER_BROOKE_4 ===
+Name: BROOKE
+Class: Cooltrainer
+Pic: Cooltrainer F
+Gender: Female
+Music: Cool
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Pelipper
+Level: 32
+IVs: 15 HP / 15 Atk / 15 Def / 15 SpA / 15 SpD / 15 Spe
+
+Numel
+Level: 32
+IVs: 15 HP / 15 Atk / 15 Def / 15 SpA / 15 SpD / 15 Spe
+
+Roselia
+Level: 32
+IVs: 15 HP / 15 Atk / 15 Def / 15 SpA / 15 SpD / 15 Spe
+
+=== TRAINER_BROOKE_5 ===
+Name: BROOKE
+Class: Cooltrainer
+Pic: Cooltrainer F
+Gender: Female
+Music: Cool
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Pelipper
+Level: 34
+IVs: 17 HP / 17 Atk / 17 Def / 17 SpA / 17 SpD / 17 Spe
+
+Camerupt
+Level: 34
+IVs: 17 HP / 17 Atk / 17 Def / 17 SpA / 17 SpD / 17 Spe
+
+Roselia
+Level: 34
+IVs: 17 HP / 17 Atk / 17 Def / 17 SpA / 17 SpD / 17 Spe
+
+=== TRAINER_PATRICIA ===
+Name: PATRICIA
+Class: Hex Maniac
+Pic: Hex Maniac
+Gender: Female
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move
+
+Banette
+Level: 41
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Lunatone
+Level: 41
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_KINDRA ===
+Name: KINDRA
+Class: Hex Maniac
+Pic: Hex Maniac
+Gender: Female
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move
+
+Duskull
+Level: 30
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Shuppet
+Level: 30
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_TAMMY ===
+Name: TAMMY
+Class: Hex Maniac
+Pic: Hex Maniac
+Gender: Female
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move
+
+Duskull
+Level: 29
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Shuppet
+Level: 29
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_VALERIE_1 ===
+Name: VALERIE
+Class: Hex Maniac
+Pic: Hex Maniac
+Gender: Female
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move
+
+Sableye
+Level: 32
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_TASHA ===
+Name: TASHA
+Class: Hex Maniac
+Pic: Hex Maniac
+Gender: Female
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move
+
+Shuppet
+Level: 32
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+=== TRAINER_VALERIE_2 ===
+Name: VALERIE
+Class: Hex Maniac
+Pic: Hex Maniac
+Gender: Female
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move
+
+Sableye
+Level: 31
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Spoink
+Level: 31
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_VALERIE_3 ===
+Name: VALERIE
+Class: Hex Maniac
+Pic: Hex Maniac
+Gender: Female
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move
+
+Spoink
+Level: 35
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Sableye
+Level: 35
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+=== TRAINER_VALERIE_4 ===
+Name: VALERIE
+Class: Hex Maniac
+Pic: Hex Maniac
+Gender: Female
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move
+
+Spoink
+Level: 40
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Sableye
+Level: 40
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+=== TRAINER_VALERIE_5 ===
+Name: VALERIE
+Class: Hex Maniac
+Pic: Hex Maniac
+Gender: Female
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move
+
+Duskull
+Level: 42
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Sableye
+Level: 42
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Grumpig
+Level: 42
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+=== TRAINER_CINDY_1 ===
+Name: CINDY
+Class: Lady
+Pic: Lady
+Gender: Female
+Music: Female
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move
+
+Zigzagoon @ Nugget
+Level: 7
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_DAPHNE ===
+Name: DAPHNE
+Class: Lady
+Pic: Lady
+Gender: Female
+Music: Female
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move
+
+Luvdisc @ Nugget
+Level: 39
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+- Attract
+- Sweet Kiss
+- Flail
+- Water Pulse
+
+Luvdisc @ Nugget
+Level: 39
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+- Attract
+- Safeguard
+- Take Down
+- Water Pulse
+
+=== TRAINER_GRUNT_SPACE_CENTER_2 ===
+Name: GRUNT
+Class: Team Magma
+Pic: Magma Grunt M
+Gender: Male
+Music: Magma
+Double Battle: No
+AI: Check Bad Move
+
+Mightyena
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Mightyena
+Level: 28
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Numel
+Level: 30
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_CINDY_2 ===
+Name: CINDY
+Class: Lady
+Pic: Lady
+Gender: Female
+Music: Female
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move
+
+Zigzagoon @ Nugget
+Level: 11
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Tackle
+- Tail Whip
+
+=== TRAINER_BRIANNA ===
+Name: BRIANNA
+Class: Lady
+Pic: Lady
+Gender: Female
+Music: Female
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move
+
+Seaking @ Nugget
+Level: 40
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+=== TRAINER_NAOMI ===
+Name: NAOMI
+Class: Lady
+Pic: Lady
+Gender: Female
+Music: Female
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move
+
+Roselia @ Nugget
+Level: 45
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_CINDY_3 ===
+Name: CINDY
+Class: Lady
+Pic: Lady
+Gender: Female
+Music: Female
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move
+
+Linoone @ Nugget
+Level: 27
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_CINDY_4 ===
+Name: CINDY
+Class: Lady
+Pic: Lady
+Gender: Female
+Music: Female
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move
+
+Linoone @ Nugget
+Level: 30
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+=== TRAINER_CINDY_5 ===
+Name: CINDY
+Class: Lady
+Pic: Lady
+Gender: Female
+Music: Female
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move
+
+Linoone @ Nugget
+Level: 33
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+=== TRAINER_CINDY_6 ===
+Name: CINDY
+Class: Lady
+Pic: Lady
+Gender: Female
+Music: Female
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move
+
+Linoone @ Nugget
+Level: 36
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+- Fury Swipes
+- Mud Sport
+- Odor Sleuth
+- Sand Attack
+
+=== TRAINER_MELISSA ===
+Name: MELISSA
+Class: Beauty
+Pic: Beauty
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Marill
+Level: 21
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_SHEILA ===
+Name: SHEILA
+Class: Beauty
+Pic: Beauty
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Shroomish
+Level: 21
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_SHIRLEY ===
+Name: SHIRLEY
+Class: Beauty
+Pic: Beauty
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Numel
+Level: 21
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_JESSICA_1 ===
+Name: JESSICA
+Class: Beauty
+Pic: Beauty
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Kecleon
+Level: 29
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Bind
+- Lick
+- Fury Swipes
+- Feint Attack
+
+Seviper
+Level: 29
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Poison Tail
+- Screech
+- Glare
+- Crunch
+
+=== TRAINER_CONNIE ===
+Name: CONNIE
+Class: Beauty
+Pic: Beauty
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Goldeen
+Level: 40
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_BRIDGET ===
+Name: BRIDGET
+Class: Beauty
+Pic: Beauty
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Azumarill
+Level: 40
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+=== TRAINER_OLIVIA ===
+Name: OLIVIA
+Class: Beauty
+Pic: Beauty
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Clamperl
+Level: 35
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+- Iron Defense
+- Whirlpool
+- Rain Dance
+- Water Pulse
+
+Corphish
+Level: 37
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+- Taunt
+- Crabhammer
+- Water Pulse
+
+Lombre
+Level: 39
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+- Uproar
+- Fury Swipes
+- Fake Out
+- Water Pulse
+
+=== TRAINER_TIFFANY ===
+Name: TIFFANY
+Class: Beauty
+Pic: Beauty
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Carvanha
+Level: 39
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Sharpedo
+Level: 39
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_JESSICA_2 ===
+Name: JESSICA
+Class: Beauty
+Pic: Beauty
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Kecleon
+Level: 35
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+- Bind
+- Lick
+- Fury Swipes
+- Feint Attack
+
+Seviper
+Level: 35
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+- Poison Tail
+- Screech
+- Glare
+- Crunch
+
+=== TRAINER_JESSICA_3 ===
+Name: JESSICA
+Class: Beauty
+Pic: Beauty
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Kecleon
+Level: 38
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+- Bind
+- Lick
+- Fury Swipes
+- Feint Attack
+
+Seviper
+Level: 38
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+- Poison Tail
+- Screech
+- Glare
+- Crunch
+
+=== TRAINER_JESSICA_4 ===
+Name: JESSICA
+Class: Beauty
+Pic: Beauty
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Kecleon
+Level: 41
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+- Bind
+- Lick
+- Fury Swipes
+- Feint Attack
+
+Seviper
+Level: 41
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+- Poison Tail
+- Screech
+- Glare
+- Crunch
+
+=== TRAINER_JESSICA_5 ===
+Name: JESSICA
+Class: Beauty
+Pic: Beauty
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Kecleon
+Level: 44
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+- Bind
+- Lick
+- Fury Swipes
+- Feint Attack
+
+Seviper
+Level: 44
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+- Poison Tail
+- Screech
+- Glare
+- Crunch
+
+=== TRAINER_WINSTON_1 ===
+Name: WINSTON
+Class: Rich Boy
+Pic: Rich Boy
+Gender: Male
+Music: Rich
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move
+
+Zigzagoon @ Nugget
+Level: 7
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_MOLLIE ===
+Name: MOLLIE
+Class: Expert
+Pic: Expert F
+Gender: Female
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Whiscash
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Meditite
+Level: 33
+IVs: 24 HP / 24 Atk / 24 Def / 24 SpA / 24 SpD / 24 Spe
+
+=== TRAINER_GARRET ===
+Name: GARRET
+Class: Rich Boy
+Pic: Rich Boy
+Gender: Male
+Music: Rich
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move
+
+Azumarill @ Nugget
+Level: 45
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_WINSTON_2 ===
+Name: WINSTON
+Class: Rich Boy
+Pic: Rich Boy
+Gender: Male
+Music: Rich
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move
+
+Linoone @ Nugget
+Level: 27
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_WINSTON_3 ===
+Name: WINSTON
+Class: Rich Boy
+Pic: Rich Boy
+Gender: Male
+Music: Rich
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move
+
+Linoone @ Nugget
+Level: 30
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_WINSTON_4 ===
+Name: WINSTON
+Class: Rich Boy
+Pic: Rich Boy
+Gender: Male
+Music: Rich
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move
+
+Linoone @ Nugget
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_WINSTON_5 ===
+Name: WINSTON
+Class: Rich Boy
+Pic: Rich Boy
+Gender: Male
+Music: Rich
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move
+
+Linoone @ Nugget
+Level: 36
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Fury Swipes
+- Mud Sport
+- Odor Sleuth
+- Sand Attack
+
+=== TRAINER_STEVE_1 ===
+Name: STEVE
+Class: Pokemaniac
+Pic: Pokemaniac
+Gender: Male
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move
+
+Aron
+Level: 19
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_THALIA_1 ===
+Name: THALIA
+Class: Beauty
+Pic: Beauty
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Wailmer
+Level: 25
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Horsea
+Level: 25
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_MARK ===
+Name: MARK
+Class: Pokemaniac
+Pic: Pokemaniac
+Gender: Male
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move
+
+Rhyhorn
+Level: 31
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_MT_CHIMNEY_1 ===
+Name: GRUNT
+Class: Team Magma
+Pic: Magma Grunt F
+Gender: Female
+Music: Magma
+Double Battle: No
+AI: Check Bad Move
+
+Numel
+Level: 20
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_STEVE_2 ===
+Name: STEVE
+Class: Pokemaniac
+Pic: Pokemaniac
+Gender: Male
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move
+
+Lairon
+Level: 27
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_STEVE_3 ===
+Name: STEVE
+Class: Pokemaniac
+Pic: Pokemaniac
+Gender: Male
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move
+
+Lairon
+Level: 29
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Rhyhorn
+Level: 29
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+=== TRAINER_STEVE_4 ===
+Name: STEVE
+Class: Pokemaniac
+Pic: Pokemaniac
+Gender: Male
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move
+
+Lairon
+Level: 32
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Rhyhorn
+Level: 32
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+=== TRAINER_STEVE_5 ===
+Name: STEVE
+Class: Pokemaniac
+Pic: Pokemaniac
+Gender: Male
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move
+
+Aggron
+Level: 35
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Rhydon
+Level: 35
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+=== TRAINER_LUIS ===
+Name: LUIS
+Class: Swimmer M
+Pic: Swimmer M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Carvanha
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_DOMINIK ===
+Name: DOMINIK
+Class: Swimmer M
+Pic: Swimmer M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Tentacool
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_DOUGLAS ===
+Name: DOUGLAS
+Class: Swimmer M
+Pic: Swimmer M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Tentacool
+Level: 24
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Tentacool
+Level: 24
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_DARRIN ===
+Name: DARRIN
+Class: Swimmer M
+Pic: Swimmer M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Tentacool
+Level: 24
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Wingull
+Level: 24
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Tentacool
+Level: 24
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_TONY_1 ===
+Name: TONY
+Class: Swimmer M
+Pic: Swimmer M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Carvanha
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_JEROME ===
+Name: JEROME
+Class: Swimmer M
+Pic: Swimmer M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Tentacruel
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_MATTHEW ===
+Name: MATTHEW
+Class: Swimmer M
+Pic: Swimmer M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Carvanha
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_DAVID ===
+Name: DAVID
+Class: Swimmer M
+Pic: Swimmer M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Tentacool
+Level: 25
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Carvanha
+Level: 25
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_SPENCER ===
+Name: SPENCER
+Class: Swimmer M
+Pic: Swimmer M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Tentacool
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Wingull
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_ROLAND ===
+Name: ROLAND
+Class: Swimmer M
+Pic: Swimmer M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Carvanha
+Level: 34
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_NOLEN ===
+Name: NOLEN
+Class: Swimmer M
+Pic: Swimmer M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Tentacruel
+Level: 34
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_STAN ===
+Name: STAN
+Class: Swimmer M
+Pic: Swimmer M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Horsea
+Level: 34
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_BARRY ===
+Name: BARRY
+Class: Swimmer M
+Pic: Swimmer M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Gyarados
+Level: 34
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_DEAN ===
+Name: DEAN
+Class: Swimmer M
+Pic: Swimmer M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Carvanha
+Level: 31
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Wingull
+Level: 31
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Carvanha
+Level: 31
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_RODNEY ===
+Name: RODNEY
+Class: Swimmer M
+Pic: Swimmer M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Gyarados
+Level: 34
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_RICHARD ===
+Name: RICHARD
+Class: Swimmer M
+Pic: Swimmer M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Pelipper
+Level: 34
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_HERMAN ===
+Name: HERMAN
+Class: Swimmer M
+Pic: Swimmer M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Wingull
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Tentacruel
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_SANTIAGO ===
+Name: SANTIAGO
+Class: Swimmer M
+Pic: Swimmer M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Tentacruel
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Wailmer
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GILBERT ===
+Name: GILBERT
+Class: Swimmer M
+Pic: Swimmer M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Sharpedo
+Level: 34
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_FRANKLIN ===
+Name: FRANKLIN
+Class: Swimmer M
+Pic: Swimmer M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Sealeo
+Level: 34
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_KEVIN ===
+Name: KEVIN
+Class: Swimmer M
+Pic: Swimmer M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Spheal
+Level: 34
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_JACK ===
+Name: JACK
+Class: Swimmer M
+Pic: Swimmer M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Gyarados
+Level: 34
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_DUDLEY ===
+Name: DUDLEY
+Class: Swimmer M
+Pic: Swimmer M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Tentacool
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Wingull
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Tentacruel
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_CHAD ===
+Name: CHAD
+Class: Swimmer M
+Pic: Swimmer M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Tentacool
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Wailmer
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_TONY_2 ===
+Name: TONY
+Class: Swimmer M
+Pic: Swimmer M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Sharpedo
+Level: 30
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_TONY_3 ===
+Name: TONY
+Class: Swimmer M
+Pic: Swimmer M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Sharpedo
+Level: 33
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+=== TRAINER_TONY_4 ===
+Name: TONY
+Class: Swimmer M
+Pic: Swimmer M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Staryu
+Level: 34
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Sharpedo
+Level: 36
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+=== TRAINER_TONY_5 ===
+Name: TONY
+Class: Swimmer M
+Pic: Swimmer M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Starmie
+Level: 37
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Sharpedo
+Level: 39
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+=== TRAINER_TAKAO ===
+Name: TAKAO
+Class: Black Belt
+Pic: Black Belt
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Machop
+Level: 13
+IVs: 15 HP / 15 Atk / 15 Def / 15 SpA / 15 SpD / 15 Spe
+
+=== TRAINER_HITOSHI ===
+Name: HITOSHI
+Class: Black Belt
+Pic: Black Belt
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Machop
+Level: 32
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+Machoke
+Level: 32
+IVs: 24 HP / 24 Atk / 24 Def / 24 SpA / 24 SpD / 24 Spe
+
+=== TRAINER_KIYO ===
+Name: KIYO
+Class: Black Belt
+Pic: Black Belt
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Hariyama
+Level: 34
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_KOICHI ===
+Name: KOICHI
+Class: Black Belt
+Pic: Black Belt
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Machop
+Level: 24
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Machoke
+Level: 28
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+=== TRAINER_NOB_1 ===
+Name: NOB
+Class: Black Belt
+Pic: Black Belt
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Machop
+Level: 19
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_NOB_2 ===
+Name: NOB
+Class: Black Belt
+Pic: Black Belt
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Machoke
+Level: 27
+IVs: 13 HP / 13 Atk / 13 Def / 13 SpA / 13 SpD / 13 Spe
+
+=== TRAINER_NOB_3 ===
+Name: NOB
+Class: Black Belt
+Pic: Black Belt
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Machop
+Level: 29
+IVs: 14 HP / 14 Atk / 14 Def / 14 SpA / 14 SpD / 14 Spe
+
+Machoke
+Level: 29
+IVs: 14 HP / 14 Atk / 14 Def / 14 SpA / 14 SpD / 14 Spe
+
+=== TRAINER_NOB_4 ===
+Name: NOB
+Class: Black Belt
+Pic: Black Belt
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Machop
+Level: 31
+IVs: 15 HP / 15 Atk / 15 Def / 15 SpA / 15 SpD / 15 Spe
+
+Machoke
+Level: 31
+IVs: 15 HP / 15 Atk / 15 Def / 15 SpA / 15 SpD / 15 Spe
+
+Machoke
+Level: 31
+IVs: 15 HP / 15 Atk / 15 Def / 15 SpA / 15 SpD / 15 Spe
+
+=== TRAINER_NOB_5 ===
+Name: NOB
+Class: Black Belt
+Pic: Black Belt
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Machop
+Level: 33
+IVs: 17 HP / 17 Atk / 17 Def / 17 SpA / 17 SpD / 17 Spe
+
+Machoke
+Level: 33
+IVs: 17 HP / 17 Atk / 17 Def / 17 SpA / 17 SpD / 17 Spe
+
+Machoke
+Level: 33
+IVs: 17 HP / 17 Atk / 17 Def / 17 SpA / 17 SpD / 17 Spe
+
+Machamp @ Black Belt
+Level: 33
+IVs: 17 HP / 17 Atk / 17 Def / 17 SpA / 17 SpD / 17 Spe
+
+=== TRAINER_YUJI ===
+Name: YUJI
+Class: Black Belt
+Pic: Black Belt
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Makuhita
+Level: 26
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Machoke
+Level: 26
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_DAISUKE ===
+Name: DAISUKE
+Class: Black Belt
+Pic: Black Belt
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Machop
+Level: 19
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_ATSUSHI ===
+Name: ATSUSHI
+Class: Black Belt
+Pic: Black Belt
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Hariyama
+Level: 32
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_KIRK ===
+Name: KIRK
+Class: Guitarist
+Pic: Guitarist
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Electrike
+Level: 17
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+- Quick Attack
+- Thunder Wave
+- Spark
+- Leer
+
+Voltorb
+Level: 17
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+- Charge
+- Shock Wave
+- Screech
+
+=== TRAINER_GRUNT_AQUA_HIDEOUT_7 ===
+Name: GRUNT
+Class: Team Aqua
+Pic: Aqua Grunt F
+Gender: Female
+Music: Aqua
+Double Battle: No
+AI: Check Bad Move
+
+Poochyena
+Level: 31
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Zubat
+Level: 31
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_AQUA_HIDEOUT_8 ===
+Name: GRUNT
+Class: Team Aqua
+Pic: Aqua Grunt M
+Gender: Male
+Music: Aqua
+Double Battle: No
+AI: Check Bad Move
+
+Carvanha
+Level: 32
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_SHAWN ===
+Name: SHAWN
+Class: Guitarist
+Pic: Guitarist
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Voltorb
+Level: 17
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Magnemite
+Level: 17
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_FERNANDO_1 ===
+Name: FERNANDO
+Class: Guitarist
+Pic: Guitarist
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Electrike
+Level: 30
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Loudred
+Level: 30
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_DALTON_1 ===
+Name: DALTON
+Class: Guitarist
+Pic: Guitarist
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Magnemite
+Level: 15
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Whismur
+Level: 15
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_DALTON_2 ===
+Name: DALTON
+Class: Guitarist
+Pic: Guitarist
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Magnemite
+Level: 25
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Whismur
+Level: 25
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Magnemite
+Level: 25
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_DALTON_3 ===
+Name: DALTON
+Class: Guitarist
+Pic: Guitarist
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Magnemite
+Level: 28
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Loudred
+Level: 28
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Magnemite
+Level: 28
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+=== TRAINER_DALTON_4 ===
+Name: DALTON
+Class: Guitarist
+Pic: Guitarist
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Magneton
+Level: 31
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Loudred
+Level: 31
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Magneton
+Level: 31
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+=== TRAINER_DALTON_5 ===
+Name: DALTON
+Class: Guitarist
+Pic: Guitarist
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Magneton
+Level: 34
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Exploud
+Level: 34
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Magneton
+Level: 34
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+=== TRAINER_COLE ===
+Name: COLE
+Class: Kindler
+Pic: Kindler
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Numel
+Level: 23
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_JEFF ===
+Name: JEFF
+Class: Kindler
+Pic: Kindler
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Slugma
+Level: 22
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Slugma
+Level: 22
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_AXLE ===
+Name: AXLE
+Class: Kindler
+Pic: Kindler
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Numel
+Level: 23
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_JACE ===
+Name: JACE
+Class: Kindler
+Pic: Kindler
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Slugma
+Level: 23
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_KEEGAN ===
+Name: KEEGAN
+Class: Kindler
+Pic: Kindler
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Slugma
+Level: 23
+IVs: 14 HP / 14 Atk / 14 Def / 14 SpA / 14 SpD / 14 Spe
+
+=== TRAINER_BERNIE_1 ===
+Name: BERNIE
+Class: Kindler
+Pic: Kindler
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Slugma
+Level: 18
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Wingull
+Level: 18
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_BERNIE_2 ===
+Name: BERNIE
+Class: Kindler
+Pic: Kindler
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Slugma
+Level: 26
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Wingull
+Level: 26
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_BERNIE_3 ===
+Name: BERNIE
+Class: Kindler
+Pic: Kindler
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Slugma
+Level: 29
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Pelipper
+Level: 29
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+=== TRAINER_BERNIE_4 ===
+Name: BERNIE
+Class: Kindler
+Pic: Kindler
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Slugma
+Level: 32
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Pelipper
+Level: 32
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+=== TRAINER_BERNIE_5 ===
+Name: BERNIE
+Class: Kindler
+Pic: Kindler
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Magcargo
+Level: 35
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Pelipper
+Level: 35
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+=== TRAINER_DREW ===
+Name: DREW
+Class: Camper
+Pic: Camper
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Sandshrew
+Level: 23
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Dig
+- Sand Attack
+- Poison Sting
+- Slash
+
+=== TRAINER_BEAU ===
+Name: BEAU
+Class: Camper
+Pic: Camper
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Baltoy
+Level: 21
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Rapid Spin
+- Mud Slap
+- Psybeam
+- Rock Tomb
+
+Sandshrew
+Level: 21
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Poison Sting
+- Sand Attack
+- Scratch
+- Dig
+
+Baltoy
+Level: 21
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Rapid Spin
+- Mud Slap
+- Psybeam
+- Rock Tomb
+
+=== TRAINER_LARRY ===
+Name: LARRY
+Class: Camper
+Pic: Camper
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Nuzleaf
+Level: 18
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_SHANE ===
+Name: SHANE
+Class: Camper
+Pic: Camper
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Sandshrew
+Level: 18
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Nuzleaf
+Level: 18
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_JUSTIN ===
+Name: JUSTIN
+Class: Camper
+Pic: Camper
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Kecleon
+Level: 24
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_ETHAN_1 ===
+Name: ETHAN
+Class: Camper
+Pic: Camper
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Zigzagoon
+Level: 20
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Taillow
+Level: 20
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_AUTUMN ===
+Name: AUTUMN
+Class: Picnicker
+Pic: Picnicker
+Gender: Female
+Music: Girl
+Double Battle: No
+AI: Check Bad Move
+
+Shroomish
+Level: 21
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_TRAVIS ===
+Name: TRAVIS
+Class: Camper
+Pic: Camper
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Sandshrew
+Level: 18
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_ETHAN_2 ===
+Name: ETHAN
+Class: Camper
+Pic: Camper
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Zigzagoon
+Level: 26
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Taillow
+Level: 26
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_ETHAN_3 ===
+Name: ETHAN
+Class: Camper
+Pic: Camper
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Linoone
+Level: 29
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Swellow
+Level: 29
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+=== TRAINER_ETHAN_4 ===
+Name: ETHAN
+Class: Camper
+Pic: Camper
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Sandshrew
+Level: 31
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Swellow
+Level: 31
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Linoone
+Level: 31
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+=== TRAINER_ETHAN_5 ===
+Name: ETHAN
+Class: Camper
+Pic: Camper
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Swellow
+Level: 34
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Sandslash
+Level: 34
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Linoone
+Level: 34
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+=== TRAINER_BRENT ===
+Name: BRENT
+Class: Bug Maniac
+Pic: Bug Maniac
+Gender: Male
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move
+
+Surskit
+Level: 26
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_DONALD ===
+Name: DONALD
+Class: Bug Maniac
+Pic: Bug Maniac
+Gender: Male
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move
+
+Wurmple
+Level: 24
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Silcoon
+Level: 24
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Beautifly
+Level: 24
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_TAYLOR ===
+Name: TAYLOR
+Class: Bug Maniac
+Pic: Bug Maniac
+Gender: Male
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move
+
+Wurmple
+Level: 27
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Cascoon
+Level: 27
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Dustox
+Level: 27
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_JEFFREY_1 ===
+Name: JEFFREY
+Class: Bug Maniac
+Pic: Bug Maniac
+Gender: Male
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move
+
+Surskit
+Level: 27
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Surskit
+Level: 27
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Surskit
+Level: 27
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_DEREK ===
+Name: DEREK
+Class: Bug Maniac
+Pic: Bug Maniac
+Gender: Male
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move
+
+Dustox
+Level: 16
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+Beautifly
+Level: 16
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+=== TRAINER_JEFFREY_2 ===
+Name: JEFFREY
+Class: Bug Maniac
+Pic: Bug Maniac
+Gender: Male
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move
+
+Surskit
+Level: 31
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Surskit
+Level: 31
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Surskit
+Level: 31
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_JEFFREY_3 ===
+Name: JEFFREY
+Class: Bug Maniac
+Pic: Bug Maniac
+Gender: Male
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move
+
+Surskit
+Level: 34
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Surskit
+Level: 34
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Masquerain
+Level: 34
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+=== TRAINER_JEFFREY_4 ===
+Name: JEFFREY
+Class: Bug Maniac
+Pic: Bug Maniac
+Gender: Male
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move
+
+Surskit
+Level: 36
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Wurmple
+Level: 36
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Surskit
+Level: 36
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Masquerain
+Level: 36
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+=== TRAINER_JEFFREY_5 ===
+Name: JEFFREY
+Class: Bug Maniac
+Pic: Bug Maniac
+Gender: Male
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move
+
+Surskit
+Level: 38
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Dustox
+Level: 38
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Surskit
+Level: 38
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Masquerain @ Silver Powder
+Level: 38
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Beautifly
+Level: 38
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+=== TRAINER_EDWARD ===
+Name: EDWARD
+Class: Psychic
+Pic: Psychic M
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Abra
+Level: 15
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Hidden Power
+
+=== TRAINER_PRESTON ===
+Name: PRESTON
+Class: Psychic
+Pic: Psychic M
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Kirlia
+Level: 36
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_VIRGIL ===
+Name: VIRGIL
+Class: Psychic
+Pic: Psychic M
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Ralts
+Level: 36
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_BLAKE ===
+Name: BLAKE
+Class: Psychic
+Pic: Psychic M
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Girafarig
+Level: 36
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_WILLIAM ===
+Name: WILLIAM
+Class: Psychic
+Pic: Psychic M
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Ralts
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Ralts
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Kirlia
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_JOSHUA ===
+Name: JOSHUA
+Class: Psychic
+Pic: Psychic M
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Kadabra
+Level: 41
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Solrock
+Level: 41
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_CAMERON_1 ===
+Name: CAMERON
+Class: Psychic
+Pic: Psychic M
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Solrock
+Level: 31
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_CAMERON_2 ===
+Name: CAMERON
+Class: Psychic
+Pic: Psychic M
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Kadabra
+Level: 33
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Solrock
+Level: 33
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_CAMERON_3 ===
+Name: CAMERON
+Class: Psychic
+Pic: Psychic M
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Kadabra
+Level: 38
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Solrock
+Level: 38
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+=== TRAINER_CAMERON_4 ===
+Name: CAMERON
+Class: Psychic
+Pic: Psychic M
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Kadabra
+Level: 41
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Solrock
+Level: 41
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+=== TRAINER_CAMERON_5 ===
+Name: CAMERON
+Class: Psychic
+Pic: Psychic M
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Solrock
+Level: 45
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Alakazam
+Level: 45
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+=== TRAINER_JACLYN ===
+Name: JACLYN
+Class: Psychic
+Pic: Psychic F
+Gender: Female
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Abra
+Level: 16
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Hidden Power
+
+=== TRAINER_HANNAH ===
+Name: HANNAH
+Class: Psychic
+Pic: Psychic F
+Gender: Female
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Kirlia
+Level: 36
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_SAMANTHA ===
+Name: SAMANTHA
+Class: Psychic
+Pic: Psychic F
+Gender: Female
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Xatu
+Level: 36
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_MAURA ===
+Name: MAURA
+Class: Psychic
+Pic: Psychic F
+Gender: Female
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Kadabra
+Level: 36
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_KAYLA ===
+Name: KAYLA
+Class: Psychic
+Pic: Psychic F
+Gender: Female
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Wobbuffet
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Natu
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Kadabra
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_ALEXIS ===
+Name: ALEXIS
+Class: Psychic
+Pic: Psychic F
+Gender: Female
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Kirlia
+Level: 41
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Xatu
+Level: 41
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_JACKI_1 ===
+Name: JACKI
+Class: Psychic
+Pic: Psychic F
+Gender: Female
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Kadabra
+Level: 30
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Lunatone
+Level: 30
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_JACKI_2 ===
+Name: JACKI
+Class: Psychic
+Pic: Psychic F
+Gender: Female
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Kadabra
+Level: 34
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Lunatone
+Level: 34
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_JACKI_3 ===
+Name: JACKI
+Class: Psychic
+Pic: Psychic F
+Gender: Female
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Kadabra
+Level: 37
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Lunatone
+Level: 37
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+=== TRAINER_JACKI_4 ===
+Name: JACKI
+Class: Psychic
+Pic: Psychic F
+Gender: Female
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Kadabra
+Level: 40
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Lunatone
+Level: 40
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+=== TRAINER_JACKI_5 ===
+Name: JACKI
+Class: Psychic
+Pic: Psychic F
+Gender: Female
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Lunatone
+Level: 43
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Alakazam
+Level: 43
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+=== TRAINER_WALTER_1 ===
+Name: WALTER
+Class: Gentleman
+Pic: Gentleman
+Gender: Male
+Music: Rich
+Double Battle: No
+AI: Check Bad Move
+
+Manectric
+Level: 29
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_MICAH ===
+Name: MICAH
+Class: Gentleman
+Pic: Gentleman
+Gender: Male
+Music: Rich
+Double Battle: No
+AI: Check Bad Move
+
+Manectric
+Level: 44
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Manectric
+Level: 44
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_THOMAS ===
+Name: THOMAS
+Class: Gentleman
+Pic: Gentleman
+Gender: Male
+Music: Rich
+Double Battle: No
+AI: Check Bad Move
+
+Zangoose
+Level: 45
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_WALTER_2 ===
+Name: WALTER
+Class: Gentleman
+Pic: Gentleman
+Gender: Male
+Music: Rich
+Double Battle: No
+AI: Check Bad Move
+
+Manectric
+Level: 34
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_WALTER_3 ===
+Name: WALTER
+Class: Gentleman
+Pic: Gentleman
+Gender: Male
+Music: Rich
+Double Battle: No
+AI: Check Bad Move
+
+Linoone
+Level: 36
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+- Headbutt
+- Sand Attack
+- Odor Sleuth
+- Fury Swipes
+
+Manectric
+Level: 36
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+- Quick Attack
+- Spark
+- Odor Sleuth
+- Roar
+
+=== TRAINER_WALTER_4 ===
+Name: WALTER
+Class: Gentleman
+Pic: Gentleman
+Gender: Male
+Music: Rich
+Double Battle: No
+AI: Check Bad Move
+
+Linoone
+Level: 39
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+- Headbutt
+- Sand Attack
+- Odor Sleuth
+- Fury Swipes
+
+Manectric
+Level: 39
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+- Quick Attack
+- Spark
+- Odor Sleuth
+
+=== TRAINER_WALTER_5 ===
+Name: WALTER
+Class: Gentleman
+Pic: Gentleman
+Gender: Male
+Music: Rich
+Double Battle: No
+AI: Check Bad Move
+
+Linoone
+Level: 41
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+- Headbutt
+- Sand Attack
+- Odor Sleuth
+- Fury Swipes
+
+Golduck
+Level: 41
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+- Fury Swipes
+- Disable
+- Confusion
+- Psych Up
+
+Manectric
+Level: 41
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+- Quick Attack
+- Spark
+- Odor Sleuth
+- Roar
+
+=== TRAINER_SIDNEY ===
+Name: SIDNEY
+Class: Elite Four
+Pic: Elite Four Sidney
+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
+Mugshot: Purple
+
+Mightyena
+Level: 46
+IVs: 30 HP / 30 Atk / 30 Def / 30 SpA / 30 SpD / 30 Spe
+- Roar
+- Double Edge
+- Sand Attack
+- Crunch
+
+Shiftry
+Level: 48
+IVs: 30 HP / 30 Atk / 30 Def / 30 SpA / 30 SpD / 30 Spe
+- Torment
+- Double Team
+- Swagger
+- Extrasensory
+
+Cacturne
+Level: 46
+IVs: 30 HP / 30 Atk / 30 Def / 30 SpA / 30 SpD / 30 Spe
+- Leech Seed
+- Feint Attack
+- Needle Arm
+- Cotton Spore
+
+Crawdaunt
+Level: 48
+IVs: 30 HP / 30 Atk / 30 Def / 30 SpA / 30 SpD / 30 Spe
+- Surf
+- Swords Dance
+- Strength
+- Facade
+
+Absol @ Sitrus Berry
+Level: 49
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Aerial Ace
+- Rock Slide
+- Swords Dance
+- Slash
+
+=== TRAINER_PHOEBE ===
+Name: PHOEBE
+Class: Elite Four
+Pic: Elite Four Phoebe
+Gender: Female
+Music: Elite Four
+Items: Full Restore / Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+Mugshot: Green
+
+Dusclops
+Level: 48
+IVs: 30 HP / 30 Atk / 30 Def / 30 SpA / 30 SpD / 30 Spe
+- Shadow Punch
+- Confuse Ray
+- Curse
+- Protect
+
+Banette
+Level: 49
+IVs: 30 HP / 30 Atk / 30 Def / 30 SpA / 30 SpD / 30 Spe
+- Shadow Ball
+- Grudge
+- Will O Wisp
+- Feint Attack
+
+Sableye
+Level: 50
+IVs: 30 HP / 30 Atk / 30 Def / 30 SpA / 30 SpD / 30 Spe
+- Shadow Ball
+- Double Team
+- Night Shade
+- Feint Attack
+
+Banette
+Level: 49
+IVs: 30 HP / 30 Atk / 30 Def / 30 SpA / 30 SpD / 30 Spe
+- Shadow Ball
+- Psychic
+- Thunderbolt
+- Facade
+
+Dusclops @ Sitrus Berry
+Level: 51
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Shadow Ball
+- Ice Beam
+- Rock Slide
+- Earthquake
+
+=== TRAINER_GLACIA ===
+Name: GLACIA
+Class: Elite Four
+Pic: Elite Four Glacia
+Gender: Female
+Music: Elite Four
+Items: Full Restore / Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+Mugshot: Pink
+
+Sealeo
+Level: 50
+IVs: 30 HP / 30 Atk / 30 Def / 30 SpA / 30 SpD / 30 Spe
+- Encore
+- Body Slam
+- Hail
+- Ice Ball
+
+Glalie
+Level: 50
+IVs: 30 HP / 30 Atk / 30 Def / 30 SpA / 30 SpD / 30 Spe
+- Light Screen
+- Crunch
+- Icy Wind
+- Ice Beam
+
+Sealeo
+Level: 52
+IVs: 30 HP / 30 Atk / 30 Def / 30 SpA / 30 SpD / 30 Spe
+- Attract
+- Double Edge
+- Hail
+- Blizzard
+
+Glalie
+Level: 52
+IVs: 30 HP / 30 Atk / 30 Def / 30 SpA / 30 SpD / 30 Spe
+- Shadow Ball
+- Explosion
+- Hail
+- Ice Beam
+
+Walrein @ Sitrus Berry
+Level: 53
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Surf
+- Body Slam
+- Ice Beam
+- Sheer Cold
+
+=== TRAINER_DRAKE ===
+Name: DRAKE
+Class: Elite Four
+Pic: Elite Four Drake
+Gender: Male
+Music: Elite Four
+Items: Full Restore / Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+Mugshot: Blue
+
+Shelgon
+Level: 52
+IVs: 30 HP / 30 Atk / 30 Def / 30 SpA / 30 SpD / 30 Spe
+- Rock Tomb
+- Dragon Claw
+- Protect
+- Double Edge
+
+Altaria
+Level: 54
+IVs: 30 HP / 30 Atk / 30 Def / 30 SpA / 30 SpD / 30 Spe
+- Double Edge
+- Dragon Breath
+- Dragon Dance
+- Aerial Ace
+
+Kingdra
+Level: 53
+IVs: 30 HP / 30 Atk / 30 Def / 30 SpA / 30 SpD / 30 Spe
+- Smokescreen
+- Dragon Dance
+- Surf
+- Body Slam
+
+Flygon
+Level: 53
+IVs: 30 HP / 30 Atk / 30 Def / 30 SpA / 30 SpD / 30 Spe
+- Flamethrower
+- Crunch
+- Dragon Breath
+- Earthquake
+
+Salamence @ Sitrus Berry
+Level: 55
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Flamethrower
+- Dragon Claw
+- Rock Slide
+- Crunch
+
+=== TRAINER_ROXANNE_1 ===
+Name: ROXANNE
+Class: Leader
+Pic: Leader Roxanne
+Gender: Female
+Music: Female
+Items: Potion / Potion
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Geodude
+Level: 12
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+- Tackle
+- Defense Curl
+- Rock Throw
+- Rock Tomb
+
+Geodude
+Level: 12
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+- Tackle
+- Defense Curl
+- Rock Throw
+- Rock Tomb
+
+Nosepass @ Oran Berry
+Level: 15
+IVs: 24 HP / 24 Atk / 24 Def / 24 SpA / 24 SpD / 24 Spe
+- Block
+- Harden
+- Tackle
+- Rock Tomb
+
+=== TRAINER_BRAWLY_1 ===
+Name: BRAWLY
+Class: Leader
+Pic: Leader Brawly
+Gender: Male
+Music: Male
+Items: Super Potion / Super Potion
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Machop
+Level: 16
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+- Karate Chop
+- Low Kick
+- Seismic Toss
+- Bulk Up
+
+Meditite
+Level: 16
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+- Focus Punch
+- Light Screen
+- Reflect
+- Bulk Up
+
+Makuhita @ Sitrus Berry
+Level: 19
+IVs: 24 HP / 24 Atk / 24 Def / 24 SpA / 24 SpD / 24 Spe
+- Arm Thrust
+- Vital Throw
+- Reversal
+- Bulk Up
+
+=== TRAINER_WATTSON_1 ===
+Name: WATTSON
+Class: Leader
+Pic: Leader Wattson
+Gender: Male
+Music: Male
+Items: Super Potion / Super Potion
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Voltorb
+Level: 20
+IVs: 24 HP / 24 Atk / 24 Def / 24 SpA / 24 SpD / 24 Spe
+- Rollout
+- Spark
+- Self Destruct
+- Shock Wave
+
+Electrike
+Level: 20
+IVs: 24 HP / 24 Atk / 24 Def / 24 SpA / 24 SpD / 24 Spe
+- Shock Wave
+- Leer
+- Quick Attack
+- Howl
+
+Magneton
+Level: 22
+IVs: 26 HP / 26 Atk / 26 Def / 26 SpA / 26 SpD / 26 Spe
+- Supersonic
+- Shock Wave
+- Thunder Wave
+- Sonic Boom
+
+Manectric @ Sitrus Berry
+Level: 24
+IVs: 30 HP / 30 Atk / 30 Def / 30 SpA / 30 SpD / 30 Spe
+- Quick Attack
+- Thunder Wave
+- Shock Wave
+- Howl
+
+=== TRAINER_FLANNERY_1 ===
+Name: FLANNERY
+Class: Leader
+Pic: Leader Flannery
+Gender: Female
+Music: Female
+Items: Hyper Potion / Hyper Potion
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Numel
+Level: 24
+IVs: 24 HP / 24 Atk / 24 Def / 24 SpA / 24 SpD / 24 Spe
+- Overheat
+- Take Down
+- Magnitude
+- Sunny Day
+
+Slugma
+Level: 24
+IVs: 24 HP / 24 Atk / 24 Def / 24 SpA / 24 SpD / 24 Spe
+- Overheat
+- Smog
+- Light Screen
+- Sunny Day
+
+Camerupt
+Level: 26
+IVs: 30 HP / 30 Atk / 30 Def / 30 SpA / 30 SpD / 30 Spe
+- Overheat
+- Tackle
+- Sunny Day
+- Attract
+
+Torkoal @ White Herb
+Level: 29
+IVs: 30 HP / 30 Atk / 30 Def / 30 SpA / 30 SpD / 30 Spe
+- Overheat
+- Sunny Day
+- Body Slam
+- Attract
+
+=== TRAINER_NORMAN_1 ===
+Name: NORMAN
+Class: Leader
+Pic: Leader Norman
+Gender: Male
+Music: Male
+Items: Hyper Potion / Hyper Potion
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Spinda
+Level: 27
+IVs: 24 HP / 24 Atk / 24 Def / 24 SpA / 24 SpD / 24 Spe
+- Teeter Dance
+- Psybeam
+- Facade
+- Encore
+
+Vigoroth
+Level: 27
+IVs: 24 HP / 24 Atk / 24 Def / 24 SpA / 24 SpD / 24 Spe
+- Slash
+- Facade
+- Encore
+- Feint Attack
+
+Linoone
+Level: 29
+IVs: 24 HP / 24 Atk / 24 Def / 24 SpA / 24 SpD / 24 Spe
+- Slash
+- Belly Drum
+- Facade
+- Headbutt
+
+Slaking @ Sitrus Berry
+Level: 31
+IVs: 30 HP / 30 Atk / 30 Def / 30 SpA / 30 SpD / 30 Spe
+- Counter
+- Yawn
+- Facade
+- Feint Attack
+
+=== TRAINER_WINONA_1 ===
+Name: WINONA
+Class: Leader
+Pic: Leader Winona
+Gender: Female
+Music: Female
+Items: Hyper Potion / Hyper Potion
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability / Risky
+
+Swablu
+Level: 29
+IVs: 25 HP / 25 Atk / 25 Def / 25 SpA / 25 SpD / 25 Spe
+- Perish Song
+- Mirror Move
+- Safeguard
+- Aerial Ace
+
+Tropius
+Level: 29
+IVs: 25 HP / 25 Atk / 25 Def / 25 SpA / 25 SpD / 25 Spe
+- Sunny Day
+- Aerial Ace
+- Solar Beam
+- Synthesis
+
+Pelipper
+Level: 30
+IVs: 25 HP / 25 Atk / 25 Def / 25 SpA / 25 SpD / 25 Spe
+- Water Gun
+- Supersonic
+- Protect
+- Aerial Ace
+
+Skarmory
+Level: 31
+IVs: 26 HP / 26 Atk / 26 Def / 26 SpA / 26 SpD / 26 Spe
+- Sand Attack
+- Fury Attack
+- Steel Wing
+- Aerial Ace
+
+Altaria @ Oran Berry
+Level: 33
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Earthquake
+- Dragon Breath
+- Dragon Dance
+- Aerial Ace
+
+=== TRAINER_TATE_AND_LIZA_1 ===
+Name: TATE&LIZA
+Class: Leader
+Pic: Leader Tate And Liza
+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
+
+Claydol
+Level: 41
+IVs: 30 HP / 30 Atk / 30 Def / 30 SpA / 30 SpD / 30 Spe
+- Earthquake
+- Ancient Power
+- Psychic
+- Light Screen
+
+Xatu
+Level: 41
+IVs: 30 HP / 30 Atk / 30 Def / 30 SpA / 30 SpD / 30 Spe
+- Psychic
+- Sunny Day
+- Confuse Ray
+- Calm Mind
+
+Lunatone @ Sitrus Berry
+Level: 42
+IVs: 30 HP / 30 Atk / 30 Def / 30 SpA / 30 SpD / 30 Spe
+- Light Screen
+- Psychic
+- Hypnosis
+- Calm Mind
+
+Solrock @ Sitrus Berry
+Level: 42
+IVs: 30 HP / 30 Atk / 30 Def / 30 SpA / 30 SpD / 30 Spe
+- Sunny Day
+- Solar Beam
+- Psychic
+- Flamethrower
+
+=== TRAINER_JUAN_1 ===
+Name: JUAN
+Class: Leader
+Pic: Leader Juan
+Gender: Male
+Music: Male
+Items: Hyper Potion / Hyper Potion
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Luvdisc
+Level: 41
+IVs: 24 HP / 24 Atk / 24 Def / 24 SpA / 24 SpD / 24 Spe
+- Water Pulse
+- Attract
+- Sweet Kiss
+- Flail
+
+Whiscash
+Level: 41
+IVs: 24 HP / 24 Atk / 24 Def / 24 SpA / 24 SpD / 24 Spe
+- Rain Dance
+- Water Pulse
+- Amnesia
+- Earthquake
+
+Sealeo
+Level: 43
+IVs: 24 HP / 24 Atk / 24 Def / 24 SpA / 24 SpD / 24 Spe
+- Encore
+- Body Slam
+- Aurora Beam
+- Water Pulse
+
+Crawdaunt
+Level: 43
+IVs: 24 HP / 24 Atk / 24 Def / 24 SpA / 24 SpD / 24 Spe
+- Water Pulse
+- Crabhammer
+- Taunt
+- Leer
+
+Kingdra @ Chesto Berry
+Level: 46
+IVs: 30 HP / 30 Atk / 30 Def / 30 SpA / 30 SpD / 30 Spe
+- Water Pulse
+- Double Team
+- Ice Beam
+- Rest
+
+=== TRAINER_JERRY_1 ===
+Name: JERRY
+Class: School Kid
+Pic: School Kid M
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Ralts
+Level: 9
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_TED ===
+Name: TED
+Class: School Kid
+Pic: School Kid M
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Ralts
+Level: 17
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_PAUL ===
+Name: PAUL
+Class: School Kid
+Pic: School Kid M
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Numel
+Level: 15
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Oddish
+Level: 15
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Wingull
+Level: 15
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_JERRY_2 ===
+Name: JERRY
+Class: School Kid
+Pic: School Kid M
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Ralts
+Level: 26
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Meditite
+Level: 26
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+=== TRAINER_JERRY_3 ===
+Name: JERRY
+Class: School Kid
+Pic: School Kid M
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Kirlia
+Level: 29
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Meditite
+Level: 29
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+=== TRAINER_JERRY_4 ===
+Name: JERRY
+Class: School Kid
+Pic: School Kid M
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Kirlia
+Level: 32
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Medicham
+Level: 32
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+=== TRAINER_JERRY_5 ===
+Name: JERRY
+Class: School Kid
+Pic: School Kid M
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Kirlia
+Level: 34
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+Banette
+Level: 34
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+Medicham
+Level: 34
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+=== TRAINER_KAREN_1 ===
+Name: KAREN
+Class: School Kid
+Pic: School Kid F
+Gender: Female
+Music: Girl
+Double Battle: No
+AI: Check Bad Move
+
+Shroomish
+Level: 9
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_GEORGIA ===
+Name: GEORGIA
+Class: School Kid
+Pic: School Kid F
+Gender: Female
+Music: Girl
+Double Battle: No
+AI: Check Bad Move
+
+Shroomish
+Level: 16
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Beautifly
+Level: 16
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_KAREN_2 ===
+Name: KAREN
+Class: School Kid
+Pic: School Kid F
+Gender: Female
+Music: Girl
+Double Battle: No
+AI: Check Bad Move
+
+Shroomish
+Level: 26
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Whismur
+Level: 26
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+=== TRAINER_KAREN_3 ===
+Name: KAREN
+Class: School Kid
+Pic: School Kid F
+Gender: Female
+Music: Girl
+Double Battle: No
+AI: Check Bad Move
+
+Shroomish
+Level: 29
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Loudred
+Level: 29
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+=== TRAINER_KAREN_4 ===
+Name: KAREN
+Class: School Kid
+Pic: School Kid F
+Gender: Female
+Music: Girl
+Double Battle: No
+AI: Check Bad Move
+
+Breloom
+Level: 32
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Loudred
+Level: 32
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+=== TRAINER_KAREN_5 ===
+Name: KAREN
+Class: School Kid
+Pic: School Kid F
+Gender: Female
+Music: Girl
+Double Battle: No
+AI: Check Bad Move
+
+Breloom
+Level: 35
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+Exploud
+Level: 35
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+=== TRAINER_KATE_AND_JOY ===
+Name: KATE & JOY
+Class: Sr And Jr
+Pic: Sr And Jr
+Gender: Male
+Music: Twins
+Double Battle: Yes
+AI: Check Bad Move
+
+Spinda
+Level: 30
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Hypnosis
+- Psybeam
+- Dizzy Punch
+- Teeter Dance
+
+Slaking
+Level: 32
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Focus Punch
+- Yawn
+- Slack Off
+- Feint Attack
+
+=== TRAINER_ANNA_AND_MEG_1 ===
+Name: ANNA & MEG
+Class: Sr And Jr
+Pic: Sr And Jr
+Gender: Male
+Music: Twins
+Double Battle: Yes
+AI: Check Bad Move
+
+Zigzagoon
+Level: 15
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Growl
+- Tail Whip
+- Headbutt
+- Odor Sleuth
+
+Makuhita
+Level: 17
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Tackle
+- Focus Energy
+- Arm Thrust
+
+=== TRAINER_ANNA_AND_MEG_2 ===
+Name: ANNA & MEG
+Class: Sr And Jr
+Pic: Sr And Jr
+Gender: Male
+Music: Twins
+Double Battle: Yes
+AI: Check Bad Move
+
+Zigzagoon
+Level: 28
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+- Growl
+- Tail Whip
+- Headbutt
+- Odor Sleuth
+
+Makuhita
+Level: 30
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+- Tackle
+- Focus Energy
+- Arm Thrust
+
+=== TRAINER_ANNA_AND_MEG_3 ===
+Name: ANNA & MEG
+Class: Sr And Jr
+Pic: Sr And Jr
+Gender: Male
+Music: Twins
+Double Battle: Yes
+AI: Check Bad Move
+
+Zigzagoon
+Level: 31
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+- Growl
+- Tail Whip
+- Headbutt
+- Odor Sleuth
+
+Makuhita
+Level: 33
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+- Tackle
+- Focus Energy
+- Arm Thrust
+
+=== TRAINER_ANNA_AND_MEG_4 ===
+Name: ANNA & MEG
+Class: Sr And Jr
+Pic: Sr And Jr
+Gender: Male
+Music: Twins
+Double Battle: Yes
+AI: Check Bad Move
+
+Linoone
+Level: 34
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+- Growl
+- Tail Whip
+- Headbutt
+- Odor Sleuth
+
+Makuhita
+Level: 36
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+- Tackle
+- Focus Energy
+- Arm Thrust
+
+=== TRAINER_ANNA_AND_MEG_5 ===
+Name: ANNA & MEG
+Class: Sr And Jr
+Pic: Sr And Jr
+Gender: Male
+Music: Twins
+Double Battle: Yes
+AI: Check Bad Move
+
+Linoone
+Level: 36
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+- Growl
+- Tail Whip
+- Headbutt
+- Odor Sleuth
+
+Hariyama
+Level: 38
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+- Tackle
+- Focus Energy
+- Arm Thrust
+
+=== TRAINER_VICTOR ===
+Name: VICTOR
+Class: Winstrate
+Pic: Pokefan M
+Gender: Male
+Music: Twins
+Double Battle: No
+AI: Check Bad Move
+
+Taillow @ Oran Berry
+Level: 16
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Zigzagoon @ Oran Berry
+Level: 16
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+=== TRAINER_MIGUEL_1 ===
+Name: MIGUEL
+Class: Pokefan
+Pic: Pokefan M
+Gender: Male
+Music: Twins
+Double Battle: No
+AI: Check Bad Move
+
+Skitty @ Oran Berry
+Level: 15
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_COLTON ===
+Name: COLTON
+Class: Pokefan
+Pic: Pokefan M
+Gender: Male
+Music: Twins
+Double Battle: No
+AI: Check Bad Move
+
+Skitty @ Oran Berry
+Level: 22
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Assist
+- Charm
+- Feint Attack
+- Heal Bell
+
+Skitty @ Oran Berry
+Level: 36
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Assist
+- Charm
+- Feint Attack
+- Heal Bell
+
+Skitty @ Oran Berry
+Level: 40
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Assist
+- Charm
+- Feint Attack
+- Heal Bell
+
+Skitty @ Oran Berry
+Level: 12
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Assist
+- Charm
+- Feint Attack
+- Heal Bell
+
+Skitty @ Oran Berry
+Level: 30
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Assist
+- Charm
+- Feint Attack
+- Heal Bell
+
+Delcatty @ Oran Berry
+Level: 42
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Assist
+- Charm
+- Feint Attack
+- Heal Bell
+
+=== TRAINER_MIGUEL_2 ===
+Name: MIGUEL
+Class: Pokefan
+Pic: Pokefan M
+Gender: Male
+Music: Twins
+Double Battle: No
+AI: Check Bad Move
+
+Skitty @ Oran Berry
+Level: 29
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_MIGUEL_3 ===
+Name: MIGUEL
+Class: Pokefan
+Pic: Pokefan M
+Gender: Male
+Music: Twins
+Double Battle: No
+AI: Check Bad Move
+
+Skitty @ Oran Berry
+Level: 32
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_MIGUEL_4 ===
+Name: MIGUEL
+Class: Pokefan
+Pic: Pokefan M
+Gender: Male
+Music: Twins
+Double Battle: No
+AI: Check Bad Move
+
+Delcatty @ Oran Berry
+Level: 35
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_MIGUEL_5 ===
+Name: MIGUEL
+Class: Pokefan
+Pic: Pokefan M
+Gender: Male
+Music: Twins
+Double Battle: No
+AI: Check Bad Move
+
+Delcatty @ Sitrus Berry
+Level: 38
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_VICTORIA ===
+Name: VICTORIA
+Class: Winstrate
+Pic: Pokefan F
+Gender: Female
+Music: Twins
+Double Battle: No
+AI: Check Bad Move / Try To Faint
+
+Roselia @ Oran Berry
+Level: 17
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+=== TRAINER_VANESSA ===
+Name: VANESSA
+Class: Pokefan
+Pic: Pokefan F
+Gender: Female
+Music: Twins
+Double Battle: No
+AI: Check Bad Move
+
+Pikachu @ Oran Berry
+Level: 30
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_BETHANY ===
+Name: BETHANY
+Class: Pokefan
+Pic: Pokefan F
+Gender: Female
+Music: Twins
+Double Battle: No
+AI: Check Bad Move
+
+Azurill @ Oran Berry
+Level: 35
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Marill @ Oran Berry
+Level: 37
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Azumarill @ Oran Berry
+Level: 39
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_ISABEL_1 ===
+Name: ISABEL
+Class: Pokefan
+Pic: Pokefan F
+Gender: Female
+Music: Twins
+Double Battle: No
+AI: Check Bad Move
+
+Plusle @ Oran Berry
+Level: 14
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Minun @ Oran Berry
+Level: 14
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_ISABEL_2 ===
+Name: ISABEL
+Class: Pokefan
+Pic: Pokefan F
+Gender: Female
+Music: Twins
+Double Battle: No
+AI: Check Bad Move
+
+Plusle @ Oran Berry
+Level: 26
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Minun @ Oran Berry
+Level: 26
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_ISABEL_3 ===
+Name: ISABEL
+Class: Pokefan
+Pic: Pokefan F
+Gender: Female
+Music: Twins
+Double Battle: No
+AI: Check Bad Move
+
+Plusle @ Oran Berry
+Level: 29
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Minun @ Oran Berry
+Level: 29
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+=== TRAINER_ISABEL_4 ===
+Name: ISABEL
+Class: Pokefan
+Pic: Pokefan F
+Gender: Female
+Music: Twins
+Double Battle: No
+AI: Check Bad Move
+
+Plusle @ Oran Berry
+Level: 32
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Minun @ Oran Berry
+Level: 32
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+=== TRAINER_ISABEL_5 ===
+Name: ISABEL
+Class: Pokefan
+Pic: Pokefan F
+Gender: Female
+Music: Twins
+Double Battle: No
+AI: Check Bad Move
+
+Plusle @ Sitrus Berry
+Level: 35
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Minun @ Sitrus Berry
+Level: 35
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+=== TRAINER_TIMOTHY_1 ===
+Name: TIMOTHY
+Class: Expert
+Pic: Expert M
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Hariyama
+Level: 27
+IVs: 24 HP / 24 Atk / 24 Def / 24 SpA / 24 SpD / 24 Spe
+
+=== TRAINER_TIMOTHY_2 ===
+Name: TIMOTHY
+Class: Expert
+Pic: Expert M
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Hariyama
+Level: 33
+IVs: 25 HP / 25 Atk / 25 Def / 25 SpA / 25 SpD / 25 Spe
+- Arm Thrust
+- Knock Off
+- Sand Attack
+- Dig
+
+=== TRAINER_TIMOTHY_3 ===
+Name: TIMOTHY
+Class: Expert
+Pic: Expert M
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Hariyama
+Level: 36
+IVs: 26 HP / 26 Atk / 26 Def / 26 SpA / 26 SpD / 26 Spe
+- Arm Thrust
+- Knock Off
+- Sand Attack
+- Dig
+
+=== TRAINER_TIMOTHY_4 ===
+Name: TIMOTHY
+Class: Expert
+Pic: Expert M
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Hariyama
+Level: 39
+IVs: 27 HP / 27 Atk / 27 Def / 27 SpA / 27 SpD / 27 Spe
+- Arm Thrust
+- Belly Drum
+- Sand Attack
+- Dig
+
+=== TRAINER_TIMOTHY_5 ===
+Name: TIMOTHY
+Class: Expert
+Pic: Expert M
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Hariyama
+Level: 42
+IVs: 29 HP / 29 Atk / 29 Def / 29 SpA / 29 SpD / 29 Spe
+- Arm Thrust
+- Belly Drum
+- Sand Attack
+- Dig
+
+=== TRAINER_VICKY ===
+Name: VICKY
+Class: Winstrate
+Pic: Expert F
+Gender: Female
+Music: Intense
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Meditite
+Level: 18
+IVs: 24 HP / 24 Atk / 24 Def / 24 SpA / 24 SpD / 24 Spe
+- High Jump Kick
+- Meditate
+- Confusion
+- Detect
+
+=== TRAINER_SHELBY_1 ===
+Name: SHELBY
+Class: Expert
+Pic: Expert F
+Gender: Female
+Music: Intense
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Meditite
+Level: 21
+IVs: 24 HP / 24 Atk / 24 Def / 24 SpA / 24 SpD / 24 Spe
+
+Makuhita
+Level: 21
+IVs: 24 HP / 24 Atk / 24 Def / 24 SpA / 24 SpD / 24 Spe
+
+=== TRAINER_SHELBY_2 ===
+Name: SHELBY
+Class: Expert
+Pic: Expert F
+Gender: Female
+Music: Intense
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Meditite
+Level: 30
+IVs: 25 HP / 25 Atk / 25 Def / 25 SpA / 25 SpD / 25 Spe
+
+Makuhita
+Level: 30
+IVs: 25 HP / 25 Atk / 25 Def / 25 SpA / 25 SpD / 25 Spe
+
+=== TRAINER_SHELBY_3 ===
+Name: SHELBY
+Class: Expert
+Pic: Expert F
+Gender: Female
+Music: Intense
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Medicham
+Level: 33
+IVs: 26 HP / 26 Atk / 26 Def / 26 SpA / 26 SpD / 26 Spe
+
+Hariyama
+Level: 33
+IVs: 26 HP / 26 Atk / 26 Def / 26 SpA / 26 SpD / 26 Spe
+
+=== TRAINER_SHELBY_4 ===
+Name: SHELBY
+Class: Expert
+Pic: Expert F
+Gender: Female
+Music: Intense
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Medicham
+Level: 36
+IVs: 27 HP / 27 Atk / 27 Def / 27 SpA / 27 SpD / 27 Spe
+
+Hariyama
+Level: 36
+IVs: 27 HP / 27 Atk / 27 Def / 27 SpA / 27 SpD / 27 Spe
+
+=== TRAINER_SHELBY_5 ===
+Name: SHELBY
+Class: Expert
+Pic: Expert F
+Gender: Female
+Music: Intense
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Medicham
+Level: 39
+IVs: 29 HP / 29 Atk / 29 Def / 29 SpA / 29 SpD / 29 Spe
+
+Hariyama
+Level: 39
+IVs: 29 HP / 29 Atk / 29 Def / 29 SpA / 29 SpD / 29 Spe
+
+=== TRAINER_CALVIN_1 ===
+Name: CALVIN
+Class: Youngster
+Pic: Youngster
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Poochyena
+Level: 5
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_BILLY ===
+Name: BILLY
+Class: Youngster
+Pic: Youngster
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Zigzagoon
+Level: 5
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Seedot
+Level: 7
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_JOSH ===
+Name: JOSH
+Class: Youngster
+Pic: Youngster
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Geodude
+Level: 10
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+- Tackle
+
+=== TRAINER_TOMMY ===
+Name: TOMMY
+Class: Youngster
+Pic: Youngster
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Geodude
+Level: 8
+IVs: 13 HP / 13 Atk / 13 Def / 13 SpA / 13 SpD / 13 Spe
+
+Geodude
+Level: 8
+IVs: 14 HP / 14 Atk / 14 Def / 14 SpA / 14 SpD / 14 Spe
+
+=== TRAINER_JOEY ===
+Name: JOEY
+Class: Youngster
+Pic: Youngster
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Machop
+Level: 9
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_BEN ===
+Name: BEN
+Class: Youngster
+Pic: Youngster
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Zigzagoon
+Level: 17
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+- Headbutt
+- Sand Attack
+- Growl
+- Thunderbolt
+
+Gulpin
+Level: 17
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+- Amnesia
+- Sludge
+- Yawn
+- Pound
+
+=== TRAINER_QUINCY ===
+Name: QUINCY
+Class: Cooltrainer
+Pic: Cooltrainer M
+Gender: Male
+Music: Cool
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Slaking
+Level: 43
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+- Attract
+- Ice Beam
+- Thunderbolt
+- Flamethrower
+
+Dusclops
+Level: 43
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+- Skill Swap
+- Protect
+- Will O Wisp
+- Toxic
+
+=== TRAINER_KATELYNN ===
+Name: KATELYNN
+Class: Cooltrainer
+Pic: Cooltrainer F
+Gender: Female
+Music: Cool
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Gardevoir
+Level: 43
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+- Skill Swap
+- Psychic
+- Thunderbolt
+- Calm Mind
+
+Slaking
+Level: 43
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+- Earthquake
+- Shadow Ball
+- Aerial Ace
+- Brick Break
+
+=== TRAINER_JAYLEN ===
+Name: JAYLEN
+Class: Youngster
+Pic: Youngster
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Trapinch
+Level: 19
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_DILLON ===
+Name: DILLON
+Class: Youngster
+Pic: Youngster
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Aron
+Level: 19
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_CALVIN_2 ===
+Name: CALVIN
+Class: Youngster
+Pic: Youngster
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Mightyena
+Level: 27
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_CALVIN_3 ===
+Name: CALVIN
+Class: Youngster
+Pic: Youngster
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Swellow
+Level: 28
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Mightyena
+Level: 30
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+=== TRAINER_CALVIN_4 ===
+Name: CALVIN
+Class: Youngster
+Pic: Youngster
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Swellow
+Level: 31
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Linoone
+Level: 29
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Mightyena
+Level: 33
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+=== TRAINER_CALVIN_5 ===
+Name: CALVIN
+Class: Youngster
+Pic: Youngster
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Swellow
+Level: 34
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Linoone
+Level: 32
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Mightyena
+Level: 36
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+=== TRAINER_EDDIE ===
+Name: EDDIE
+Class: Youngster
+Pic: Youngster
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Zigzagoon
+Level: 14
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Zigzagoon
+Level: 16
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_ALLEN ===
+Name: ALLEN
+Class: Youngster
+Pic: Youngster
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Zigzagoon
+Level: 4
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Taillow
+Level: 3
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_TIMMY ===
+Name: TIMMY
+Class: Youngster
+Pic: Youngster
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Aron
+Level: 15
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Electrike
+Level: 13
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_WALLACE ===
+Name: WALLACE
+Class: Champion
+Pic: Champion Wallace
+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
+Mugshot: Yellow
+
+Wailord
+Level: 57
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Rain Dance
+- Water Spout
+- Double Edge
+- Blizzard
+
+Tentacruel
+Level: 55
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Toxic
+- Hydro Pump
+- Sludge Bomb
+- Ice Beam
+
+Ludicolo
+Level: 56
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Giga Drain
+- Surf
+- Leech Seed
+- Double Team
+
+Whiscash
+Level: 56
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Earthquake
+- Surf
+- Amnesia
+- Hyper Beam
+
+Gyarados
+Level: 56
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Dragon Dance
+- Earthquake
+- Hyper Beam
+- Surf
+
+Milotic @ Sitrus Berry
+Level: 58
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Recover
+- Surf
+- Ice Beam
+- Toxic
+
+=== TRAINER_ANDREW ===
+Name: ANDREW
+Class: Fisherman
+Pic: Fisherman
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Magikarp
+Level: 5
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Tentacool
+Level: 10
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Magikarp
+Level: 15
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_IVAN ===
+Name: IVAN
+Class: Fisherman
+Pic: Fisherman
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Magikarp
+Level: 5
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Magikarp
+Level: 6
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Magikarp
+Level: 7
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_CLAUDE ===
+Name: CLAUDE
+Class: Fisherman
+Pic: Fisherman
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Magikarp
+Level: 16
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Goldeen
+Level: 17
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Barboach
+Level: 18
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_ELLIOT_1 ===
+Name: ELLIOT
+Class: Fisherman
+Pic: Fisherman
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Magikarp
+Level: 10
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Tentacool
+Level: 7
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Magikarp
+Level: 10
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_NED ===
+Name: NED
+Class: Fisherman
+Pic: Fisherman
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Tentacool
+Level: 11
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_DALE ===
+Name: DALE
+Class: Fisherman
+Pic: Fisherman
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Tentacool
+Level: 11
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Wailmer
+Level: 14
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Tentacool
+Level: 11
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Wailmer
+Level: 14
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_NOLAN ===
+Name: NOLAN
+Class: Fisherman
+Pic: Fisherman
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Barboach
+Level: 19
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_BARNY ===
+Name: BARNY
+Class: Fisherman
+Pic: Fisherman
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Tentacool
+Level: 25
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Carvanha
+Level: 25
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_WADE ===
+Name: WADE
+Class: Fisherman
+Pic: Fisherman
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Tentacool
+Level: 16
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_CARTER ===
+Name: CARTER
+Class: Fisherman
+Pic: Fisherman
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Wailmer
+Level: 25
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Tentacruel
+Level: 25
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_ELLIOT_2 ===
+Name: ELLIOT
+Class: Fisherman
+Pic: Fisherman
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Tentacool
+Level: 24
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Gyarados
+Level: 27
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Gyarados
+Level: 27
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_ELLIOT_3 ===
+Name: ELLIOT
+Class: Fisherman
+Pic: Fisherman
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Gyarados
+Level: 29
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Carvanha
+Level: 26
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Tentacool
+Level: 26
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Gyarados
+Level: 29
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+=== TRAINER_ELLIOT_4 ===
+Name: ELLIOT
+Class: Fisherman
+Pic: Fisherman
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Gyarados
+Level: 31
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Carvanha
+Level: 30
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Tentacruel
+Level: 30
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Gyarados
+Level: 31
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+=== TRAINER_ELLIOT_5 ===
+Name: ELLIOT
+Class: Fisherman
+Pic: Fisherman
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move / Try To Faint
+
+Gyarados
+Level: 33
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Sharpedo
+Level: 33
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Gyarados
+Level: 33
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Tentacruel
+Level: 35
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+=== TRAINER_RONALD ===
+Name: RONALD
+Class: Fisherman
+Pic: Fisherman
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Magikarp
+Level: 19
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Gyarados
+Level: 21
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Gyarados
+Level: 23
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Gyarados
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Gyarados
+Level: 30
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Gyarados
+Level: 35
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_JACOB ===
+Name: JACOB
+Class: Triathlete
+Pic: Cycling Triathlete M
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Voltorb
+Level: 6
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Voltorb
+Level: 6
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Magnemite
+Level: 14
+IVs: 24 HP / 24 Atk / 24 Def / 24 SpA / 24 SpD / 24 Spe
+
+=== TRAINER_ANTHONY ===
+Name: ANTHONY
+Class: Triathlete
+Pic: Cycling Triathlete M
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Magnemite
+Level: 14
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Magnemite
+Level: 14
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_BENJAMIN_1 ===
+Name: BENJAMIN
+Class: Triathlete
+Pic: Cycling Triathlete M
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Magnemite
+Level: 16
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_BENJAMIN_2 ===
+Name: BENJAMIN
+Class: Triathlete
+Pic: Cycling Triathlete M
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Magnemite
+Level: 30
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_BENJAMIN_3 ===
+Name: BENJAMIN
+Class: Triathlete
+Pic: Cycling Triathlete M
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Magnemite
+Level: 33
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+=== TRAINER_BENJAMIN_4 ===
+Name: BENJAMIN
+Class: Triathlete
+Pic: Cycling Triathlete M
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Magneton
+Level: 36
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+=== TRAINER_BENJAMIN_5 ===
+Name: BENJAMIN
+Class: Triathlete
+Pic: Cycling Triathlete M
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Magneton
+Level: 39
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+=== TRAINER_ABIGAIL_1 ===
+Name: ABIGAIL
+Class: Triathlete
+Pic: Cycling Triathlete F
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Magnemite
+Level: 16
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_JASMINE ===
+Name: JASMINE
+Class: Triathlete
+Pic: Cycling Triathlete F
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Magnemite
+Level: 14
+IVs: 9 HP / 9 Atk / 9 Def / 9 SpA / 9 SpD / 9 Spe
+
+Magnemite
+Level: 14
+IVs: 9 HP / 9 Atk / 9 Def / 9 SpA / 9 SpD / 9 Spe
+
+Voltorb
+Level: 6
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_ABIGAIL_2 ===
+Name: ABIGAIL
+Class: Triathlete
+Pic: Cycling Triathlete F
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Magnemite
+Level: 28
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_ABIGAIL_3 ===
+Name: ABIGAIL
+Class: Triathlete
+Pic: Cycling Triathlete F
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Magnemite
+Level: 31
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+=== TRAINER_ABIGAIL_4 ===
+Name: ABIGAIL
+Class: Triathlete
+Pic: Cycling Triathlete F
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Magneton
+Level: 34
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+=== TRAINER_ABIGAIL_5 ===
+Name: ABIGAIL
+Class: Triathlete
+Pic: Cycling Triathlete F
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Magneton
+Level: 37
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+=== TRAINER_DYLAN_1 ===
+Name: DYLAN
+Class: Triathlete
+Pic: Running Triathlete M
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Doduo
+Level: 17
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_DYLAN_2 ===
+Name: DYLAN
+Class: Triathlete
+Pic: Running Triathlete M
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Doduo
+Level: 28
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_DYLAN_3 ===
+Name: DYLAN
+Class: Triathlete
+Pic: Running Triathlete M
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Doduo
+Level: 31
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+=== TRAINER_DYLAN_4 ===
+Name: DYLAN
+Class: Triathlete
+Pic: Running Triathlete M
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Dodrio
+Level: 34
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+=== TRAINER_DYLAN_5 ===
+Name: DYLAN
+Class: Triathlete
+Pic: Running Triathlete M
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Dodrio
+Level: 37
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+=== TRAINER_MARIA_1 ===
+Name: MARIA
+Class: Triathlete
+Pic: Running Triathlete F
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Doduo
+Level: 17
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_MARIA_2 ===
+Name: MARIA
+Class: Triathlete
+Pic: Running Triathlete F
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Doduo
+Level: 28
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_MARIA_3 ===
+Name: MARIA
+Class: Triathlete
+Pic: Running Triathlete F
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Doduo
+Level: 31
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+=== TRAINER_MARIA_4 ===
+Name: MARIA
+Class: Triathlete
+Pic: Running Triathlete F
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Dodrio
+Level: 34
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+=== TRAINER_MARIA_5 ===
+Name: MARIA
+Class: Triathlete
+Pic: Running Triathlete F
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Dodrio
+Level: 37
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+=== TRAINER_CAMDEN ===
+Name: CAMDEN
+Class: Triathlete
+Pic: Swimming Triathlete M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Staryu
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Staryu
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_DEMETRIUS ===
+Name: DEMETRIUS
+Class: Youngster
+Pic: Youngster
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Zigzagoon
+Level: 25
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Electrike
+Level: 25
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_ISAIAH_1 ===
+Name: ISAIAH
+Class: Triathlete
+Pic: Swimming Triathlete M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Staryu
+Level: 35
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_PABLO_1 ===
+Name: PABLO
+Class: Triathlete
+Pic: Swimming Triathlete M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Staryu
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Staryu
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_CHASE ===
+Name: CHASE
+Class: Triathlete
+Pic: Swimming Triathlete M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Wingull
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Staryu
+Level: 34
+IVs: 9 HP / 9 Atk / 9 Def / 9 SpA / 9 SpD / 9 Spe
+
+=== TRAINER_ISAIAH_2 ===
+Name: ISAIAH
+Class: Triathlete
+Pic: Swimming Triathlete M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Staryu
+Level: 39
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_ISAIAH_3 ===
+Name: ISAIAH
+Class: Triathlete
+Pic: Swimming Triathlete M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Staryu
+Level: 42
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+=== TRAINER_ISAIAH_4 ===
+Name: ISAIAH
+Class: Triathlete
+Pic: Swimming Triathlete M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Starmie
+Level: 45
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+=== TRAINER_ISAIAH_5 ===
+Name: ISAIAH
+Class: Triathlete
+Pic: Swimming Triathlete M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Starmie
+Level: 48
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+=== TRAINER_ISOBEL ===
+Name: ISOBEL
+Class: Triathlete
+Pic: Swimming Triathlete F
+Gender: Female
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Staryu
+Level: 34
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_DONNY ===
+Name: DONNY
+Class: Triathlete
+Pic: Swimming Triathlete F
+Gender: Female
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Wingull
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Staryu
+Level: 34
+IVs: 19 HP / 19 Atk / 19 Def / 19 SpA / 19 SpD / 19 Spe
+
+=== TRAINER_TALIA ===
+Name: TALIA
+Class: Triathlete
+Pic: Swimming Triathlete F
+Gender: Female
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Staryu
+Level: 34
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_KATELYN_1 ===
+Name: KATELYN
+Class: Triathlete
+Pic: Swimming Triathlete F
+Gender: Female
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Staryu
+Level: 35
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_ALLISON ===
+Name: ALLISON
+Class: Triathlete
+Pic: Swimming Triathlete F
+Gender: Female
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Wingull
+Level: 27
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Staryu
+Level: 33
+IVs: 29 HP / 29 Atk / 29 Def / 29 SpA / 29 SpD / 29 Spe
+
+=== TRAINER_KATELYN_2 ===
+Name: KATELYN
+Class: Triathlete
+Pic: Swimming Triathlete F
+Gender: Female
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Staryu
+Level: 39
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_KATELYN_3 ===
+Name: KATELYN
+Class: Triathlete
+Pic: Swimming Triathlete F
+Gender: Female
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Staryu
+Level: 42
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+=== TRAINER_KATELYN_4 ===
+Name: KATELYN
+Class: Triathlete
+Pic: Swimming Triathlete F
+Gender: Female
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Starmie
+Level: 45
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+=== TRAINER_KATELYN_5 ===
+Name: KATELYN
+Class: Triathlete
+Pic: Swimming Triathlete F
+Gender: Female
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Starmie
+Level: 48
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+=== TRAINER_NICOLAS_1 ===
+Name: NICOLAS
+Class: Dragon Tamer
+Pic: Dragon Tamer
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Altaria
+Level: 37
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Altaria
+Level: 37
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_NICOLAS_2 ===
+Name: NICOLAS
+Class: Dragon Tamer
+Pic: Dragon Tamer
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Altaria
+Level: 41
+IVs: 13 HP / 13 Atk / 13 Def / 13 SpA / 13 SpD / 13 Spe
+
+Altaria
+Level: 41
+IVs: 13 HP / 13 Atk / 13 Def / 13 SpA / 13 SpD / 13 Spe
+
+=== TRAINER_NICOLAS_3 ===
+Name: NICOLAS
+Class: Dragon Tamer
+Pic: Dragon Tamer
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Altaria
+Level: 44
+IVs: 14 HP / 14 Atk / 14 Def / 14 SpA / 14 SpD / 14 Spe
+
+Altaria
+Level: 44
+IVs: 14 HP / 14 Atk / 14 Def / 14 SpA / 14 SpD / 14 Spe
+
+=== TRAINER_NICOLAS_4 ===
+Name: NICOLAS
+Class: Dragon Tamer
+Pic: Dragon Tamer
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Bagon
+Level: 46
+IVs: 15 HP / 15 Atk / 15 Def / 15 SpA / 15 SpD / 15 Spe
+
+Altaria
+Level: 46
+IVs: 15 HP / 15 Atk / 15 Def / 15 SpA / 15 SpD / 15 Spe
+
+Altaria
+Level: 46
+IVs: 15 HP / 15 Atk / 15 Def / 15 SpA / 15 SpD / 15 Spe
+
+=== TRAINER_NICOLAS_5 ===
+Name: NICOLAS
+Class: Dragon Tamer
+Pic: Dragon Tamer
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Altaria
+Level: 49
+IVs: 17 HP / 17 Atk / 17 Def / 17 SpA / 17 SpD / 17 Spe
+
+Altaria
+Level: 49
+IVs: 17 HP / 17 Atk / 17 Def / 17 SpA / 17 SpD / 17 Spe
+
+Shelgon @ Dragon Fang
+Level: 49
+IVs: 17 HP / 17 Atk / 17 Def / 17 SpA / 17 SpD / 17 Spe
+
+=== TRAINER_AARON ===
+Name: AARON
+Class: Dragon Tamer
+Pic: Dragon Tamer
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Bagon
+Level: 34
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Dragon Breath
+- Headbutt
+- Focus Energy
+- Ember
+
+=== TRAINER_PERRY ===
+Name: PERRY
+Class: Bird Keeper
+Pic: Bird Keeper
+Gender: Male
+Music: Cool
+Double Battle: No
+AI: Check Bad Move
+
+Wingull
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_HUGH ===
+Name: HUGH
+Class: Bird Keeper
+Pic: Bird Keeper
+Gender: Male
+Music: Cool
+Double Battle: No
+AI: Check Bad Move
+
+Wingull
+Level: 25
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Tropius
+Level: 25
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_PHIL ===
+Name: PHIL
+Class: Bird Keeper
+Pic: Bird Keeper
+Gender: Male
+Music: Cool
+Double Battle: No
+AI: Check Bad Move
+
+Swellow
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_JARED ===
+Name: JARED
+Class: Bird Keeper
+Pic: Bird Keeper
+Gender: Male
+Music: Cool
+Double Battle: No
+AI: Check Bad Move
+
+Doduo
+Level: 27
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Skarmory
+Level: 27
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Tropius
+Level: 27
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_HUMBERTO ===
+Name: HUMBERTO
+Class: Bird Keeper
+Pic: Bird Keeper
+Gender: Male
+Music: Cool
+Double Battle: No
+AI: Check Bad Move
+
+Skarmory
+Level: 30
+IVs: 30 HP / 30 Atk / 30 Def / 30 SpA / 30 SpD / 30 Spe
+
+=== TRAINER_PRESLEY ===
+Name: PRESLEY
+Class: Bird Keeper
+Pic: Bird Keeper
+Gender: Male
+Music: Cool
+Double Battle: No
+AI: Check Bad Move
+
+Tropius
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Xatu
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_EDWARDO ===
+Name: EDWARDO
+Class: Bird Keeper
+Pic: Bird Keeper
+Gender: Male
+Music: Cool
+Double Battle: No
+AI: Check Bad Move
+
+Doduo
+Level: 29
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+Pelipper
+Level: 29
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+=== TRAINER_COLIN ===
+Name: COLIN
+Class: Bird Keeper
+Pic: Bird Keeper
+Gender: Male
+Music: Cool
+Double Battle: No
+AI: Check Bad Move
+
+Wingull
+Level: 28
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Natu
+Level: 28
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_ROBERT_1 ===
+Name: ROBERT
+Class: Bird Keeper
+Pic: Bird Keeper
+Gender: Male
+Music: Cool
+Double Battle: No
+AI: Check Bad Move
+
+Swablu
+Level: 29
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_BENNY ===
+Name: BENNY
+Class: Bird Keeper
+Pic: Bird Keeper
+Gender: Male
+Music: Cool
+Double Battle: No
+AI: Check Bad Move
+
+Swellow
+Level: 36
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Pelipper
+Level: 36
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Xatu
+Level: 36
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_CHESTER ===
+Name: CHESTER
+Class: Bird Keeper
+Pic: Bird Keeper
+Gender: Male
+Music: Cool
+Double Battle: No
+AI: Check Bad Move
+
+Taillow
+Level: 25
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Swellow
+Level: 25
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_ROBERT_2 ===
+Name: ROBERT
+Class: Bird Keeper
+Pic: Bird Keeper
+Gender: Male
+Music: Cool
+Double Battle: No
+AI: Check Bad Move
+
+Natu
+Level: 32
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Swablu
+Level: 32
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_ROBERT_3 ===
+Name: ROBERT
+Class: Bird Keeper
+Pic: Bird Keeper
+Gender: Male
+Music: Cool
+Double Battle: No
+AI: Check Bad Move
+
+Natu
+Level: 35
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Altaria
+Level: 35
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+=== TRAINER_ROBERT_4 ===
+Name: ROBERT
+Class: Bird Keeper
+Pic: Bird Keeper
+Gender: Male
+Music: Cool
+Double Battle: No
+AI: Check Bad Move
+
+Natu
+Level: 38
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Altaria
+Level: 38
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+=== TRAINER_ROBERT_5 ===
+Name: ROBERT
+Class: Bird Keeper
+Pic: Bird Keeper
+Gender: Male
+Music: Cool
+Double Battle: No
+AI: Check Bad Move
+
+Altaria
+Level: 41
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Xatu
+Level: 41
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+=== TRAINER_ALEX ===
+Name: ALEX
+Class: Bird Keeper
+Pic: Bird Keeper
+Gender: Male
+Music: Cool
+Double Battle: No
+AI: Check Bad Move
+
+Natu
+Level: 33
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+Swellow
+Level: 33
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+=== TRAINER_BECK ===
+Name: BECK
+Class: Bird Keeper
+Pic: Bird Keeper
+Gender: Male
+Music: Cool
+Double Battle: No
+AI: Check Bad Move
+
+Tropius
+Level: 34
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_YASU ===
+Name: YASU
+Class: Ninja Boy
+Pic: Ninja Boy
+Gender: Male
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move / Try To Faint
+
+Ninjask
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_TAKASHI ===
+Name: TAKASHI
+Class: Ninja Boy
+Pic: Ninja Boy
+Gender: Male
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move / Try To Faint
+
+Ninjask
+Level: 25
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Koffing
+Level: 25
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_DIANNE ===
+Name: DIANNE
+Class: Cooltrainer
+Pic: Cooltrainer F
+Gender: Female
+Music: Cool
+Items: Full Restore
+Double Battle: No
+
+Claydol
+Level: 43
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Skill Swap
+- Earthquake
+
+Lanturn
+Level: 43
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Thunderbolt
+- Earthquake
+
+=== TRAINER_JANI ===
+Name: JANI
+Class: Tuber F
+Pic: Tuber F
+Gender: Female
+Music: Girl
+Double Battle: No
+
+Marill
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_LAO_1 ===
+Name: LAO
+Class: Ninja Boy
+Pic: Ninja Boy
+Gender: Male
+Music: Suspicious
+Double Battle: No
+
+Koffing
+Level: 17
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Poison Gas
+- Tackle
+- Smog
+- Self Destruct
+
+Koffing
+Level: 17
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Poison Gas
+- Tackle
+- Smog
+- Self Destruct
+
+Koffing
+Level: 17
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Poison Gas
+- Tackle
+- Sludge
+- Self Destruct
+
+=== TRAINER_LUNG ===
+Name: LUNG
+Class: Ninja Boy
+Pic: Ninja Boy
+Gender: Male
+Music: Suspicious
+Double Battle: No
+
+Koffing
+Level: 18
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Ninjask
+Level: 18
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_LAO_2 ===
+Name: LAO
+Class: Ninja Boy
+Pic: Ninja Boy
+Gender: Male
+Music: Suspicious
+Double Battle: No
+
+Koffing
+Level: 24
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Poison Gas
+- Tackle
+- Sludge
+- Self Destruct
+
+Koffing
+Level: 24
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Poison Gas
+- Tackle
+- Sludge
+
+Koffing
+Level: 24
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Poison Gas
+- Tackle
+- Sludge
+- Self Destruct
+
+Koffing
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Tackle
+- Sludge
+
+=== TRAINER_LAO_3 ===
+Name: LAO
+Class: Ninja Boy
+Pic: Ninja Boy
+Gender: Male
+Music: Suspicious
+Double Battle: No
+
+Koffing
+Level: 27
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+- Poison Gas
+- Tackle
+- Sludge
+- Self Destruct
+
+Koffing
+Level: 27
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+- Poison Gas
+- Tackle
+- Sludge
+- Self Destruct
+
+Koffing
+Level: 27
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+- Poison Gas
+- Tackle
+- Sludge
+
+Koffing
+Level: 29
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+- Tackle
+- Sludge
+
+=== TRAINER_LAO_4 ===
+Name: LAO
+Class: Ninja Boy
+Pic: Ninja Boy
+Gender: Male
+Music: Suspicious
+Double Battle: No
+
+Koffing
+Level: 30
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+- Poison Gas
+- Tackle
+- Sludge
+
+Koffing
+Level: 30
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+- Poison Gas
+- Tackle
+- Sludge
+
+Koffing
+Level: 30
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+- Poison Gas
+- Tackle
+- Sludge
+
+Koffing
+Level: 32
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+- Tackle
+- Sludge
+
+=== TRAINER_LAO_5 ===
+Name: LAO
+Class: Ninja Boy
+Pic: Ninja Boy
+Gender: Male
+Music: Suspicious
+Double Battle: No
+
+Koffing
+Level: 33
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+- Poison Gas
+- Tackle
+- Sludge
+
+Koffing
+Level: 33
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+- Poison Gas
+- Tackle
+- Sludge
+- Self Destruct
+
+Koffing
+Level: 33
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+- Poison Gas
+- Tackle
+- Sludge
+- Self Destruct
+
+Weezing @ Smoke Ball
+Level: 35
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+- Tackle
+- Sludge
+
+=== TRAINER_JOCELYN ===
+Name: JOCELYN
+Class: Battle Girl
+Pic: Battle Girl
+Gender: Female
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Meditite
+Level: 13
+IVs: 15 HP / 15 Atk / 15 Def / 15 SpA / 15 SpD / 15 Spe
+
+=== TRAINER_LAURA ===
+Name: LAURA
+Class: Battle Girl
+Pic: Battle Girl
+Gender: Female
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Meditite
+Level: 13
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+=== TRAINER_CYNDY_1 ===
+Name: CYNDY
+Class: Battle Girl
+Pic: Battle Girl
+Gender: Female
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Meditite
+Level: 18
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Makuhita
+Level: 18
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_CORA ===
+Name: CORA
+Class: Battle Girl
+Pic: Battle Girl
+Gender: Female
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Meditite
+Level: 27
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_PAULA ===
+Name: PAULA
+Class: Battle Girl
+Pic: Battle Girl
+Gender: Female
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Breloom
+Level: 27
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_CYNDY_2 ===
+Name: CYNDY
+Class: Battle Girl
+Pic: Battle Girl
+Gender: Female
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Meditite
+Level: 26
+IVs: 13 HP / 13 Atk / 13 Def / 13 SpA / 13 SpD / 13 Spe
+
+Makuhita
+Level: 26
+IVs: 13 HP / 13 Atk / 13 Def / 13 SpA / 13 SpD / 13 Spe
+
+=== TRAINER_CYNDY_3 ===
+Name: CYNDY
+Class: Battle Girl
+Pic: Battle Girl
+Gender: Female
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Meditite
+Level: 29
+IVs: 14 HP / 14 Atk / 14 Def / 14 SpA / 14 SpD / 14 Spe
+
+Makuhita
+Level: 29
+IVs: 14 HP / 14 Atk / 14 Def / 14 SpA / 14 SpD / 14 Spe
+
+=== TRAINER_CYNDY_4 ===
+Name: CYNDY
+Class: Battle Girl
+Pic: Battle Girl
+Gender: Female
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Medicham
+Level: 32
+IVs: 15 HP / 15 Atk / 15 Def / 15 SpA / 15 SpD / 15 Spe
+
+Hariyama
+Level: 32
+IVs: 15 HP / 15 Atk / 15 Def / 15 SpA / 15 SpD / 15 Spe
+
+=== TRAINER_CYNDY_5 ===
+Name: CYNDY
+Class: Battle Girl
+Pic: Battle Girl
+Gender: Female
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Medicham
+Level: 35
+IVs: 17 HP / 17 Atk / 17 Def / 17 SpA / 17 SpD / 17 Spe
+
+Hariyama
+Level: 35
+IVs: 17 HP / 17 Atk / 17 Def / 17 SpA / 17 SpD / 17 Spe
+
+=== TRAINER_MADELINE_1 ===
+Name: MADELINE
+Class: Parasol Lady
+Pic: Parasol Lady
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Numel
+Level: 19
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Ember
+- Tackle
+- Magnitude
+- Sunny Day
+
+=== TRAINER_CLARISSA ===
+Name: CLARISSA
+Class: Parasol Lady
+Pic: Parasol Lady
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Roselia
+Level: 28
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Wailmer
+Level: 28
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_ANGELICA ===
+Name: ANGELICA
+Class: Parasol Lady
+Pic: Parasol Lady
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Castform
+Level: 30
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+- Rain Dance
+- Weather Ball
+- Thunder
+- Water Pulse
+
+=== TRAINER_MADELINE_2 ===
+Name: MADELINE
+Class: Parasol Lady
+Pic: Parasol Lady
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Numel
+Level: 29
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+- Ember
+- Tackle
+- Magnitude
+- Sunny Day
+
+=== TRAINER_MADELINE_3 ===
+Name: MADELINE
+Class: Parasol Lady
+Pic: Parasol Lady
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Numel
+Level: 32
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+- Ember
+- Take Down
+- Magnitude
+- Sunny Day
+
+=== TRAINER_MADELINE_4 ===
+Name: MADELINE
+Class: Parasol Lady
+Pic: Parasol Lady
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Roselia
+Level: 34
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+- Leech Seed
+- Mega Drain
+- Grass Whistle
+- Sunny Day
+
+Numel
+Level: 34
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+- Flamethrower
+- Take Down
+- Magnitude
+- Sunny Day
+
+=== TRAINER_MADELINE_5 ===
+Name: MADELINE
+Class: Parasol Lady
+Pic: Parasol Lady
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Roselia
+Level: 37
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+- Leech Seed
+- Giga Drain
+- Solar Beam
+- Sunny Day
+
+Camerupt
+Level: 37
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+- Flamethrower
+- Take Down
+- Earthquake
+- Sunny Day
+
+=== TRAINER_BEVERLY ===
+Name: BEVERLY
+Class: Swimmer F
+Pic: Swimmer F
+Gender: Female
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Wingull
+Level: 25
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Wailmer
+Level: 25
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_IMANI ===
+Name: IMANI
+Class: Swimmer F
+Pic: Swimmer F
+Gender: Female
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Marill
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_KYLA ===
+Name: KYLA
+Class: Swimmer F
+Pic: Swimmer F
+Gender: Female
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Wailmer
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_DENISE ===
+Name: DENISE
+Class: Swimmer F
+Pic: Swimmer F
+Gender: Female
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Wingull
+Level: 25
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Goldeen
+Level: 25
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_BETH ===
+Name: BETH
+Class: Swimmer F
+Pic: Swimmer F
+Gender: Female
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Goldeen
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_TARA ===
+Name: TARA
+Class: Swimmer F
+Pic: Swimmer F
+Gender: Female
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Horsea
+Level: 25
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Marill
+Level: 25
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_MISSY ===
+Name: MISSY
+Class: Swimmer F
+Pic: Swimmer F
+Gender: Female
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Goldeen
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_ALICE ===
+Name: ALICE
+Class: Swimmer F
+Pic: Swimmer F
+Gender: Female
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Goldeen
+Level: 24
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Wingull
+Level: 24
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Goldeen
+Level: 24
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_JENNY_1 ===
+Name: JENNY
+Class: Swimmer F
+Pic: Swimmer F
+Gender: Female
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Wailmer
+Level: 34
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRACE ===
+Name: GRACE
+Class: Swimmer F
+Pic: Swimmer F
+Gender: Female
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Marill
+Level: 34
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_TANYA ===
+Name: TANYA
+Class: Swimmer F
+Pic: Swimmer F
+Gender: Female
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Luvdisc
+Level: 34
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_SHARON ===
+Name: SHARON
+Class: Swimmer F
+Pic: Swimmer F
+Gender: Female
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Seaking
+Level: 34
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_NIKKI ===
+Name: NIKKI
+Class: Swimmer F
+Pic: Swimmer F
+Gender: Female
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Marill
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Spheal
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_BRENDA ===
+Name: BRENDA
+Class: Swimmer F
+Pic: Swimmer F
+Gender: Female
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Goldeen
+Level: 34
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_KATIE ===
+Name: KATIE
+Class: Swimmer F
+Pic: Swimmer F
+Gender: Female
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Goldeen
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Spheal
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_SUSIE ===
+Name: SUSIE
+Class: Swimmer F
+Pic: Swimmer F
+Gender: Female
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Luvdisc
+Level: 34
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_KARA ===
+Name: KARA
+Class: Swimmer F
+Pic: Swimmer F
+Gender: Female
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Seaking
+Level: 34
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_DANA ===
+Name: DANA
+Class: Swimmer F
+Pic: Swimmer F
+Gender: Female
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Azumarill
+Level: 34
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_SIENNA ===
+Name: SIENNA
+Class: Swimmer F
+Pic: Swimmer F
+Gender: Female
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Luvdisc
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Luvdisc
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_DEBRA ===
+Name: DEBRA
+Class: Swimmer F
+Pic: Swimmer F
+Gender: Female
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Seaking
+Level: 34
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_LINDA ===
+Name: LINDA
+Class: Swimmer F
+Pic: Swimmer F
+Gender: Female
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Horsea
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Seadra
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_KAYLEE ===
+Name: KAYLEE
+Class: Swimmer F
+Pic: Swimmer F
+Gender: Female
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Lanturn
+Level: 34
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Pelipper
+Level: 34
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_LAUREL ===
+Name: LAUREL
+Class: Swimmer F
+Pic: Swimmer F
+Gender: Female
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Luvdisc
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Luvdisc
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_CARLEE ===
+Name: CARLEE
+Class: Swimmer F
+Pic: Swimmer F
+Gender: Female
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Seaking
+Level: 35
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_JENNY_2 ===
+Name: JENNY
+Class: Swimmer F
+Pic: Swimmer F
+Gender: Female
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Wailmer
+Level: 38
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_JENNY_3 ===
+Name: JENNY
+Class: Swimmer F
+Pic: Swimmer F
+Gender: Female
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Wailmer
+Level: 41
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_JENNY_4 ===
+Name: JENNY
+Class: Swimmer F
+Pic: Swimmer F
+Gender: Female
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Staryu
+Level: 43
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Wailmer
+Level: 43
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_JENNY_5 ===
+Name: JENNY
+Class: Swimmer F
+Pic: Swimmer F
+Gender: Female
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Luvdisc
+Level: 45
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Wailmer
+Level: 45
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Starmie
+Level: 45
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_HEIDI ===
+Name: HEIDI
+Class: Picnicker
+Pic: Picnicker
+Gender: Female
+Music: Girl
+Double Battle: No
+AI: Check Bad Move
+
+Sandshrew
+Level: 22
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Dig
+- Sand Attack
+- Poison Sting
+- Slash
+
+Baltoy
+Level: 22
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Rapid Spin
+- Mud Slap
+- Psybeam
+- Rock Tomb
+
+=== TRAINER_BECKY ===
+Name: BECKY
+Class: Picnicker
+Pic: Picnicker
+Gender: Female
+Music: Girl
+Double Battle: No
+AI: Check Bad Move
+
+Sandshrew
+Level: 22
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Sand Attack
+- Poison Sting
+- Slash
+- Dig
+
+Marill
+Level: 22
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Rollout
+- Bubble Beam
+- Tail Whip
+- Defense Curl
+
+=== TRAINER_CAROL ===
+Name: CAROL
+Class: Picnicker
+Pic: Picnicker
+Gender: Female
+Music: Girl
+Double Battle: No
+AI: Check Bad Move
+
+Taillow
+Level: 17
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Lombre
+Level: 17
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_NANCY ===
+Name: NANCY
+Class: Picnicker
+Pic: Picnicker
+Gender: Female
+Music: Girl
+Double Battle: No
+AI: Check Bad Move
+
+Marill
+Level: 18
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Lombre
+Level: 18
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_MARTHA ===
+Name: MARTHA
+Class: Picnicker
+Pic: Picnicker
+Gender: Female
+Music: Girl
+Double Battle: No
+AI: Check Bad Move
+
+Skitty
+Level: 23
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Swablu
+Level: 23
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_DIANA_1 ===
+Name: DIANA
+Class: Picnicker
+Pic: Picnicker
+Gender: Female
+Music: Girl
+Double Battle: No
+AI: Check Bad Move
+
+Shroomish
+Level: 19
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Oddish
+Level: 19
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Swablu
+Level: 19
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_CEDRIC ===
+Name: CEDRIC
+Class: Psychic
+Pic: Psychic M
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Wobbuffet
+Level: 32
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Destiny Bond
+- Safeguard
+- Counter
+- Mirror Coat
+
+=== TRAINER_IRENE ===
+Name: IRENE
+Class: Picnicker
+Pic: Picnicker
+Gender: Female
+Music: Girl
+Double Battle: No
+AI: Check Bad Move
+
+Shroomish
+Level: 17
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Marill
+Level: 17
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_DIANA_2 ===
+Name: DIANA
+Class: Picnicker
+Pic: Picnicker
+Gender: Female
+Music: Girl
+Double Battle: No
+AI: Check Bad Move
+
+Shroomish
+Level: 25
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Gloom
+Level: 25
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Swablu
+Level: 25
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_DIANA_3 ===
+Name: DIANA
+Class: Picnicker
+Pic: Picnicker
+Gender: Female
+Music: Girl
+Double Battle: No
+AI: Check Bad Move
+
+Breloom
+Level: 28
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Gloom
+Level: 28
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Swablu
+Level: 28
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+=== TRAINER_DIANA_4 ===
+Name: DIANA
+Class: Picnicker
+Pic: Picnicker
+Gender: Female
+Music: Girl
+Double Battle: No
+AI: Check Bad Move
+
+Breloom
+Level: 31
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Gloom
+Level: 31
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Swablu
+Level: 31
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+=== TRAINER_DIANA_5 ===
+Name: DIANA
+Class: Picnicker
+Pic: Picnicker
+Gender: Female
+Music: Girl
+Double Battle: No
+AI: Check Bad Move
+
+Breloom
+Level: 40
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Vileplume
+Level: 40
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Altaria
+Level: 40
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+=== TRAINER_AMY_AND_LIV_1 ===
+Name: AMY & LIV
+Class: Twins
+Pic: Twins
+Gender: Male
+Music: Twins
+Double Battle: Yes
+AI: Check Bad Move
+
+Plusle
+Level: 15
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Minun
+Level: 15
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_AMY_AND_LIV_2 ===
+Name: AMY & LIV
+Class: Twins
+Pic: Twins
+Gender: Male
+Music: Twins
+Double Battle: Yes
+AI: Check Bad Move
+
+Plusle
+Level: 27
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Minun
+Level: 27
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_GINA_AND_MIA_1 ===
+Name: GINA & MIA
+Class: Twins
+Pic: Twins
+Gender: Male
+Music: Twins
+Double Battle: Yes
+AI: Check Bad Move
+
+Seedot
+Level: 6
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Lotad
+Level: 6
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_MIU_AND_YUKI ===
+Name: MIU & YUKI
+Class: Twins
+Pic: Twins
+Gender: Male
+Music: Twins
+Double Battle: Yes
+AI: Check Bad Move
+
+Beautifly
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Dustox
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_AMY_AND_LIV_3 ===
+Name: AMY & LIV
+Class: Twins
+Pic: Twins
+Gender: Male
+Music: Twins
+Double Battle: Yes
+AI: Check Bad Move
+
+Plusle
+Level: 9
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Minun
+Level: 9
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GINA_AND_MIA_2 ===
+Name: GINA & MIA
+Class: Twins
+Pic: Twins
+Gender: Male
+Music: Twins
+Double Battle: Yes
+AI: Check Bad Move
+
+Duskull
+Level: 10
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Night Shade
+- Disable
+
+Shroomish
+Level: 10
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Absorb
+- Leech Seed
+
+=== TRAINER_AMY_AND_LIV_4 ===
+Name: AMY & LIV
+Class: Twins
+Pic: Twins
+Gender: Male
+Music: Twins
+Double Battle: Yes
+AI: Check Bad Move
+
+Plusle
+Level: 30
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Minun
+Level: 30
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+=== TRAINER_AMY_AND_LIV_5 ===
+Name: AMY & LIV
+Class: Twins
+Pic: Twins
+Gender: Male
+Music: Twins
+Double Battle: Yes
+AI: Check Bad Move
+
+Plusle
+Level: 33
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+- Spark
+- Charge
+- Fake Tears
+- Helping Hand
+
+Minun
+Level: 33
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+- Spark
+- Charge
+- Charm
+- Helping Hand
+
+=== TRAINER_AMY_AND_LIV_6 ===
+Name: AMY & LIV
+Class: Twins
+Pic: Twins
+Gender: Male
+Music: Twins
+Double Battle: Yes
+AI: Check Bad Move
+
+Plusle
+Level: 36
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+- Thunder
+- Charge
+- Fake Tears
+- Helping Hand
+
+Minun
+Level: 36
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+- Thunder
+- Charge
+- Charm
+- Helping Hand
+
+=== TRAINER_HUEY ===
+Name: HUEY
+Class: Sailor
+Pic: Sailor
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Wingull
+Level: 12
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Machop
+Level: 12
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_EDMOND ===
+Name: EDMOND
+Class: Sailor
+Pic: Sailor
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Wingull
+Level: 13
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_ERNEST_1 ===
+Name: ERNEST
+Class: Sailor
+Pic: Sailor
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Wingull
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Machoke
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_DWAYNE ===
+Name: DWAYNE
+Class: Sailor
+Pic: Sailor
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Wingull
+Level: 11
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Machop
+Level: 11
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Tentacool
+Level: 11
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_PHILLIP ===
+Name: PHILLIP
+Class: Sailor
+Pic: Sailor
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Tentacruel
+Level: 44
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Machoke
+Level: 44
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_LEONARD ===
+Name: LEONARD
+Class: Sailor
+Pic: Sailor
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Machop
+Level: 43
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Pelipper
+Level: 43
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Machoke
+Level: 43
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_DUNCAN ===
+Name: DUNCAN
+Class: Sailor
+Pic: Sailor
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Spheal
+Level: 25
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Machoke
+Level: 25
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_ERNEST_2 ===
+Name: ERNEST
+Class: Sailor
+Pic: Sailor
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Wingull
+Level: 36
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Tentacool
+Level: 36
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Machoke
+Level: 36
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_ERNEST_3 ===
+Name: ERNEST
+Class: Sailor
+Pic: Sailor
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Pelipper
+Level: 39
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Tentacool
+Level: 39
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Machoke
+Level: 39
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+=== TRAINER_ERNEST_4 ===
+Name: ERNEST
+Class: Sailor
+Pic: Sailor
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Pelipper
+Level: 42
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Tentacool
+Level: 42
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Machoke
+Level: 42
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+=== TRAINER_ERNEST_5 ===
+Name: ERNEST
+Class: Sailor
+Pic: Sailor
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Pelipper
+Level: 45
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Machoke
+Level: 45
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Tentacruel
+Level: 45
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+=== TRAINER_ELI ===
+Name: ELI
+Class: Hiker
+Pic: Hiker
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Numel
+Level: 23
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_ANNIKA ===
+Name: ANNIKA
+Class: Pokefan
+Pic: Pokefan F
+Gender: Female
+Music: Twins
+Double Battle: No
+AI: Check Bad Move
+
+Feebas @ Oran Berry
+Level: 39
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+- Flail
+- Water Pulse
+- Return
+- Attract
+
+Feebas @ Oran Berry
+Level: 39
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+- Flail
+- Water Pulse
+- Return
+- Attract
+
+=== TRAINER_JAZMYN ===
+Name: JAZMYN
+Class: Cooltrainer 2
+Pic: Cooltrainer F
+Gender: Female
+Music: Cool
+Items: Hyper Potion
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Absol
+Level: 27
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_JONAS ===
+Name: JONAS
+Class: Ninja Boy
+Pic: Ninja Boy
+Gender: Male
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Koffing
+Level: 31
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Toxic
+- Thunder
+- Self Destruct
+- Sludge Bomb
+
+=== TRAINER_KAYLEY ===
+Name: KAYLEY
+Class: Parasol Lady
+Pic: Parasol Lady
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Castform
+Level: 31
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Sunny Day
+- Weather Ball
+- Flamethrower
+- Solar Beam
+
+=== TRAINER_AURON ===
+Name: AURON
+Class: Expert
+Pic: Expert M
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Manectric
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Machamp
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_KELVIN ===
+Name: KELVIN
+Class: Sailor
+Pic: Sailor
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Machoke
+Level: 33
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+Spheal
+Level: 33
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+=== TRAINER_MARLEY ===
+Name: MARLEY
+Class: Cooltrainer
+Pic: Cooltrainer F
+Gender: Female
+Music: Cool
+Items: Hyper Potion
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Manectric
+Level: 34
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Bite
+- Roar
+- Thunder Wave
+- Thunderbolt
+
+=== TRAINER_REYNA ===
+Name: REYNA
+Class: Battle Girl
+Pic: Battle Girl
+Gender: Female
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Meditite
+Level: 33
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+Hariyama
+Level: 33
+IVs: 24 HP / 24 Atk / 24 Def / 24 SpA / 24 SpD / 24 Spe
+
+=== TRAINER_HUDSON ===
+Name: HUDSON
+Class: Sailor
+Pic: Sailor
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Wailmer
+Level: 34
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_CONOR ===
+Name: CONOR
+Class: Expert
+Pic: Expert M
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Chinchou
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Hariyama
+Level: 33
+IVs: 24 HP / 24 Atk / 24 Def / 24 SpA / 24 SpD / 24 Spe
+
+=== TRAINER_EDWIN_1 ===
+Name: EDWIN
+Class: Collector
+Pic: Collector
+Gender: Male
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move
+
+Lombre
+Level: 14
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Nuzleaf
+Level: 14
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_HECTOR ===
+Name: HECTOR
+Class: Collector
+Pic: Collector
+Gender: Male
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move
+
+Zangoose
+Level: 18
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Seviper
+Level: 18
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_TABITHA_MOSSDEEP ===
+Name: TABITHA
+Class: Magma Admin
+Pic: Magma Admin
+Gender: Male
+Music: Magma
+Double Battle: No
+AI: Check Bad Move
+
+Camerupt
+Level: 36
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Mightyena
+Level: 38
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Golbat
+Level: 40
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_EDWIN_2 ===
+Name: EDWIN
+Class: Collector
+Pic: Collector
+Gender: Male
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move
+
+Lombre
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Nuzleaf
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_EDWIN_3 ===
+Name: EDWIN
+Class: Collector
+Pic: Collector
+Gender: Male
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move
+
+Lombre
+Level: 29
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Nuzleaf
+Level: 29
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_EDWIN_4 ===
+Name: EDWIN
+Class: Collector
+Pic: Collector
+Gender: Male
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move
+
+Lombre
+Level: 32
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Nuzleaf
+Level: 32
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_EDWIN_5 ===
+Name: EDWIN
+Class: Collector
+Pic: Collector
+Gender: Male
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move
+
+Ludicolo
+Level: 35
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Shiftry
+Level: 35
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_WALLY_VR_1 ===
+Name: WALLY
+Class: Rival
+Pic: Wally
+Gender: Male
+Music: Male
+Items: Full Restore / Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Altaria
+Level: 44
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+- Aerial Ace
+- Safeguard
+- Dragon Breath
+- Dragon Dance
+
+Delcatty
+Level: 43
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+- Sing
+- Assist
+- Charm
+- Feint Attack
+
+Roselia
+Level: 44
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+- Magical Leaf
+- Leech Seed
+- Giga Drain
+- Toxic
+
+Magneton
+Level: 41
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+- Supersonic
+- Thunderbolt
+- Tri Attack
+- Screech
+
+Gardevoir
+Level: 45
+IVs: 30 HP / 30 Atk / 30 Def / 30 SpA / 30 SpD / 30 Spe
+- Double Team
+- Calm Mind
+- Psychic
+- Future Sight
+
+=== TRAINER_BRENDAN_ROUTE_103_MUDKIP ===
+Name: BRENDAN
+Class: Rival
+Pic: Brendan
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Treecko
+Level: 5
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_BRENDAN_ROUTE_110_MUDKIP ===
+Name: BRENDAN
+Class: Rival
+Pic: Brendan
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Slugma
+Level: 18
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+Wingull
+Level: 18
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+Grovyle
+Level: 20
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_BRENDAN_ROUTE_119_MUDKIP ===
+Name: BRENDAN
+Class: Rival
+Pic: Brendan
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Slugma
+Level: 29
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Pelipper
+Level: 29
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Grovyle
+Level: 31
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+=== TRAINER_BRENDAN_ROUTE_103_TREECKO ===
+Name: BRENDAN
+Class: Rival
+Pic: Brendan
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Setup First Turn
+
+Torchic
+Level: 5
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_BRENDAN_ROUTE_110_TREECKO ===
+Name: BRENDAN
+Class: Rival
+Pic: Brendan
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Wingull
+Level: 18
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+Lombre
+Level: 18
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+Combusken
+Level: 20
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_BRENDAN_ROUTE_119_TREECKO ===
+Name: BRENDAN
+Class: Rival
+Pic: Brendan
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Pelipper
+Level: 29
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Lombre
+Level: 29
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Combusken
+Level: 31
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+=== TRAINER_BRENDAN_ROUTE_103_TORCHIC ===
+Name: BRENDAN
+Class: Rival
+Pic: Brendan
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Mudkip
+Level: 5
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_BRENDAN_ROUTE_110_TORCHIC ===
+Name: BRENDAN
+Class: Rival
+Pic: Brendan
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Lombre
+Level: 18
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+Slugma
+Level: 18
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+Marshtomp
+Level: 20
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_BRENDAN_ROUTE_119_TORCHIC ===
+Name: BRENDAN
+Class: Rival
+Pic: Brendan
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Lombre
+Level: 29
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Slugma
+Level: 29
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Marshtomp
+Level: 31
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+=== TRAINER_MAY_ROUTE_103_MUDKIP ===
+Name: MAY
+Class: Rival
+Pic: May
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Treecko
+Level: 5
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_MAY_ROUTE_110_MUDKIP ===
+Name: MAY
+Class: Rival
+Pic: May
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Wingull
+Level: 18
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+Slugma
+Level: 18
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+Grovyle
+Level: 20
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_MAY_ROUTE_119_MUDKIP ===
+Name: MAY
+Class: Rival
+Pic: May
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Slugma
+Level: 29
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Lombre
+Level: 29
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Grovyle
+Level: 31
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+=== TRAINER_MAY_ROUTE_103_TREECKO ===
+Name: MAY
+Class: Rival
+Pic: May
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Torchic
+Level: 5
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_MAY_ROUTE_110_TREECKO ===
+Name: MAY
+Class: Rival
+Pic: May
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Wingull
+Level: 18
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+Lombre
+Level: 18
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+Combusken
+Level: 20
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_MAY_ROUTE_119_TREECKO ===
+Name: MAY
+Class: Rival
+Pic: May
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Pelipper
+Level: 29
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Lombre
+Level: 29
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Combusken
+Level: 31
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+=== TRAINER_MAY_ROUTE_103_TORCHIC ===
+Name: MAY
+Class: Rival
+Pic: May
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Mudkip
+Level: 5
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_MAY_ROUTE_110_TORCHIC ===
+Name: MAY
+Class: Rival
+Pic: May
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Lombre
+Level: 18
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+Slugma
+Level: 18
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+Marshtomp
+Level: 20
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_MAY_ROUTE_119_TORCHIC ===
+Name: MAY
+Class: Rival
+Pic: May
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Lombre
+Level: 29
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Slugma
+Level: 29
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Marshtomp
+Level: 31
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+=== TRAINER_ISAAC_1 ===
+Name: ISAAC
+Class: Pkmn Breeder
+Pic: Pokemon Breeder M
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Whismur
+Level: 11
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Zigzagoon
+Level: 11
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Aron
+Level: 11
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Poochyena
+Level: 11
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Taillow
+Level: 11
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Makuhita
+Level: 11
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_DAVIS ===
+Name: DAVIS
+Class: Bug Catcher
+Pic: Bug Catcher
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Pinsir
+Level: 27
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_MITCHELL ===
+Name: MITCHELL
+Class: Cooltrainer
+Pic: Cooltrainer M
+Gender: Male
+Music: Cool
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Lunatone
+Level: 43
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Explosion
+- Reflect
+- Light Screen
+- Psychic
+
+Solrock
+Level: 43
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Explosion
+- Reflect
+- Light Screen
+- Shadow Ball
+
+=== TRAINER_ISAAC_2 ===
+Name: ISAAC
+Class: Pkmn Breeder
+Pic: Pokemon Breeder M
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Loudred
+Level: 22
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Linoone
+Level: 22
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Aron
+Level: 22
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Mightyena
+Level: 22
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Swellow
+Level: 22
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Makuhita
+Level: 22
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_ISAAC_3 ===
+Name: ISAAC
+Class: Pkmn Breeder
+Pic: Pokemon Breeder M
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Loudred
+Level: 25
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Linoone
+Level: 25
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Aron
+Level: 25
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Mightyena
+Level: 25
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Swellow
+Level: 25
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Hariyama
+Level: 25
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+=== TRAINER_ISAAC_4 ===
+Name: ISAAC
+Class: Pkmn Breeder
+Pic: Pokemon Breeder M
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Loudred
+Level: 28
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Linoone
+Level: 28
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Aron
+Level: 28
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Mightyena
+Level: 28
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Swellow
+Level: 28
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Hariyama
+Level: 28
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+=== TRAINER_ISAAC_5 ===
+Name: ISAAC
+Class: Pkmn Breeder
+Pic: Pokemon Breeder M
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Loudred
+Level: 31
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Linoone
+Level: 31
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Lairon
+Level: 31
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Mightyena
+Level: 31
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Swellow
+Level: 31
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Hariyama
+Level: 31
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+=== TRAINER_LYDIA_1 ===
+Name: LYDIA
+Class: Pkmn Breeder
+Pic: Pokemon Breeder F
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Wingull
+Level: 11
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Shroomish
+Level: 11
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Marill
+Level: 11
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Roselia
+Level: 11
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Skitty
+Level: 11
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Goldeen
+Level: 11
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_HALLE ===
+Name: HALLE
+Class: Cooltrainer
+Pic: Cooltrainer F
+Gender: Female
+Music: Cool
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Sableye
+Level: 43
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Absol
+Level: 43
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GARRISON ===
+Name: GARRISON
+Class: Ruin Maniac
+Pic: Ruin Maniac
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Sandslash
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_LYDIA_2 ===
+Name: LYDIA
+Class: Pkmn Breeder
+Pic: Pokemon Breeder F
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Wingull
+Level: 22
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Shroomish
+Level: 22
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Marill
+Level: 22
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Roselia
+Level: 22
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Skitty
+Level: 22
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Goldeen
+Level: 22
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_LYDIA_3 ===
+Name: LYDIA
+Class: Pkmn Breeder
+Pic: Pokemon Breeder F
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Pelipper
+Level: 25
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Breloom
+Level: 25
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Marill
+Level: 25
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Roselia
+Level: 25
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Delcatty
+Level: 25
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Goldeen
+Level: 25
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+=== TRAINER_LYDIA_4 ===
+Name: LYDIA
+Class: Pkmn Breeder
+Pic: Pokemon Breeder F
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Pelipper
+Level: 28
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Breloom
+Level: 28
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Marill
+Level: 28
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Roselia
+Level: 28
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Delcatty
+Level: 28
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Goldeen
+Level: 28
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+=== TRAINER_LYDIA_5 ===
+Name: LYDIA
+Class: Pkmn Breeder
+Pic: Pokemon Breeder F
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Pelipper
+Level: 31
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Breloom
+Level: 31
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Azumarill
+Level: 31
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Roselia
+Level: 31
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Delcatty
+Level: 31
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Seaking
+Level: 31
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+=== TRAINER_JACKSON_1 ===
+Name: JACKSON
+Class: Pkmn Ranger
+Pic: Pokemon Ranger M
+Gender: Male
+Music: Cool
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Breloom
+Level: 27
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+=== TRAINER_LORENZO ===
+Name: LORENZO
+Class: Pkmn Ranger
+Pic: Pokemon Ranger M
+Gender: Male
+Music: Cool
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Seedot
+Level: 28
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+Nuzleaf
+Level: 28
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+Lombre
+Level: 28
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+=== TRAINER_SEBASTIAN ===
+Name: SEBASTIAN
+Class: Pkmn Ranger
+Pic: Pokemon Ranger M
+Gender: Male
+Music: Cool
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Cacturne
+Level: 39
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+=== TRAINER_JACKSON_2 ===
+Name: JACKSON
+Class: Pkmn Ranger
+Pic: Pokemon Ranger M
+Gender: Male
+Music: Cool
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Setup First Turn
+
+Breloom
+Level: 31
+IVs: 7 HP / 7 Atk / 7 Def / 7 SpA / 7 SpD / 7 Spe
+
+=== TRAINER_JACKSON_3 ===
+Name: JACKSON
+Class: Pkmn Ranger
+Pic: Pokemon Ranger M
+Gender: Male
+Music: Cool
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Breloom
+Level: 34
+IVs: 8 HP / 8 Atk / 8 Def / 8 SpA / 8 SpD / 8 Spe
+
+=== TRAINER_JACKSON_4 ===
+Name: JACKSON
+Class: Pkmn Ranger
+Pic: Pokemon Ranger M
+Gender: Male
+Music: Cool
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Setup First Turn
+
+Breloom
+Level: 37
+IVs: 9 HP / 9 Atk / 9 Def / 9 SpA / 9 SpD / 9 Spe
+
+=== TRAINER_JACKSON_5 ===
+Name: JACKSON
+Class: Pkmn Ranger
+Pic: Pokemon Ranger M
+Gender: Male
+Music: Cool
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Kecleon
+Level: 39
+IVs: 10 HP / 10 Atk / 10 Def / 10 SpA / 10 SpD / 10 Spe
+
+Breloom
+Level: 39
+IVs: 10 HP / 10 Atk / 10 Def / 10 SpA / 10 SpD / 10 Spe
+
+=== TRAINER_CATHERINE_1 ===
+Name: CATHERINE
+Class: Pkmn Ranger
+Pic: Pokemon Ranger F
+Gender: Female
+Music: Cool
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Setup First Turn
+
+Gloom
+Level: 26
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+Roselia
+Level: 26
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+=== TRAINER_JENNA ===
+Name: JENNA
+Class: Pkmn Ranger
+Pic: Pokemon Ranger F
+Gender: Female
+Music: Cool
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Setup First Turn
+
+Lotad
+Level: 28
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+Lombre
+Level: 28
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+Nuzleaf
+Level: 28
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+=== TRAINER_SOPHIA ===
+Name: SOPHIA
+Class: Pkmn Ranger
+Pic: Pokemon Ranger F
+Gender: Female
+Music: Cool
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Swablu
+Level: 38
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+Roselia
+Level: 38
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+=== TRAINER_CATHERINE_2 ===
+Name: CATHERINE
+Class: Pkmn Ranger
+Pic: Pokemon Ranger F
+Gender: Female
+Music: Cool
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Setup First Turn
+
+Gloom
+Level: 30
+IVs: 7 HP / 7 Atk / 7 Def / 7 SpA / 7 SpD / 7 Spe
+
+Roselia
+Level: 30
+IVs: 7 HP / 7 Atk / 7 Def / 7 SpA / 7 SpD / 7 Spe
+
+=== TRAINER_CATHERINE_3 ===
+Name: CATHERINE
+Class: Pkmn Ranger
+Pic: Pokemon Ranger F
+Gender: Female
+Music: Cool
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Gloom
+Level: 33
+IVs: 8 HP / 8 Atk / 8 Def / 8 SpA / 8 SpD / 8 Spe
+
+Roselia
+Level: 33
+IVs: 8 HP / 8 Atk / 8 Def / 8 SpA / 8 SpD / 8 Spe
+
+=== TRAINER_CATHERINE_4 ===
+Name: CATHERINE
+Class: Pkmn Ranger
+Pic: Pokemon Ranger F
+Gender: Female
+Music: Cool
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Setup First Turn
+
+Gloom
+Level: 36
+IVs: 9 HP / 9 Atk / 9 Def / 9 SpA / 9 SpD / 9 Spe
+
+Roselia
+Level: 36
+IVs: 9 HP / 9 Atk / 9 Def / 9 SpA / 9 SpD / 9 Spe
+
+=== TRAINER_CATHERINE_5 ===
+Name: CATHERINE
+Class: Pkmn Ranger
+Pic: Pokemon Ranger F
+Gender: Female
+Music: Cool
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Bellossom
+Level: 39
+IVs: 10 HP / 10 Atk / 10 Def / 10 SpA / 10 SpD / 10 Spe
+
+Roselia
+Level: 39
+IVs: 10 HP / 10 Atk / 10 Def / 10 SpA / 10 SpD / 10 Spe
+
+=== TRAINER_JULIO ===
+Name: JULIO
+Class: Triathlete
+Pic: Cycling Triathlete M
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Magnemite
+Level: 21
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_SEAFLOOR_CAVERN_5 ===
+Name: GRUNT
+Class: Team Aqua
+Pic: Aqua Grunt M
+Gender: Male
+Music: Aqua
+Double Battle: No
+AI: Check Bad Move
+
+Mightyena
+Level: 35
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+Golbat
+Level: 35
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+=== TRAINER_GRUNT_UNUSED ===
+Name: GRUNT
+Class: Team Magma
+Pic: Aqua Grunt F
+Gender: Female
+Music: Aqua
+Double Battle: No
+AI: Check Bad Move
+
+Wailmer
+Level: 31
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Zubat
+Level: 31
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_MT_PYRE_4 ===
+Name: GRUNT
+Class: Team Aqua
+Pic: Aqua Grunt F
+Gender: Female
+Music: Aqua
+Double Battle: No
+AI: Check Bad Move
+
+Wailmer
+Level: 30
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Zubat
+Level: 30
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_JAGGED_PASS ===
+Name: GRUNT
+Class: Team Magma
+Pic: Magma Grunt M
+Gender: Male
+Music: Magma
+Double Battle: No
+AI: Check Bad Move
+
+Poochyena
+Level: 22
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+Numel
+Level: 22
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+=== TRAINER_MARC ===
+Name: MARC
+Class: Hiker
+Pic: Hiker
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Geodude
+Level: 8
+IVs: 14 HP / 14 Atk / 14 Def / 14 SpA / 14 SpD / 14 Spe
+
+Geodude
+Level: 8
+IVs: 15 HP / 15 Atk / 15 Def / 15 SpA / 15 SpD / 15 Spe
+
+=== TRAINER_BRENDEN ===
+Name: BRENDEN
+Class: Sailor
+Pic: Sailor
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Machop
+Level: 13
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_LILITH ===
+Name: LILITH
+Class: Battle Girl
+Pic: Battle Girl
+Gender: Female
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Meditite
+Level: 13
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+=== TRAINER_CRISTIAN ===
+Name: CRISTIAN
+Class: Black Belt
+Pic: Black Belt
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Makuhita
+Level: 13
+IVs: 24 HP / 24 Atk / 24 Def / 24 SpA / 24 SpD / 24 Spe
+
+=== TRAINER_SYLVIA ===
+Name: SYLVIA
+Class: Hex Maniac
+Pic: Hex Maniac
+Gender: Female
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move
+
+Meditite
+Level: 36
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_LEONARDO ===
+Name: LEONARDO
+Class: Swimmer M
+Pic: Swimmer M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Carvanha
+Level: 34
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_ATHENA ===
+Name: ATHENA
+Class: Cooltrainer
+Pic: Cooltrainer F
+Gender: Female
+Music: Cool
+Items: Hyper Potion
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Manectric
+Level: 32
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+- Thunder
+- Thunder Wave
+- Quick Attack
+
+Linoone
+Level: 32
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+- Surf
+- Thief
+
+=== TRAINER_HARRISON ===
+Name: HARRISON
+Class: Swimmer M
+Pic: Swimmer M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Tentacruel
+Level: 35
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_MT_CHIMNEY_2 ===
+Name: GRUNT
+Class: Team Magma
+Pic: Magma Grunt M
+Gender: Male
+Music: Magma
+Double Battle: No
+AI: Check Bad Move
+
+Zubat
+Level: 20
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_CLARENCE ===
+Name: CLARENCE
+Class: Swimmer M
+Pic: Swimmer M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Sharpedo
+Level: 34
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_TERRY ===
+Name: TERRY
+Class: Psychic
+Pic: Psychic F
+Gender: Female
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Girafarig
+Level: 37
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_NATE ===
+Name: NATE
+Class: Gentleman
+Pic: Gentleman
+Gender: Male
+Music: Rich
+Double Battle: No
+AI: Check Bad Move
+
+Spoink
+Level: 36
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_KATHLEEN ===
+Name: KATHLEEN
+Class: Hex Maniac
+Pic: Hex Maniac
+Gender: Female
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move
+
+Kadabra
+Level: 36
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_CLIFFORD ===
+Name: CLIFFORD
+Class: Gentleman
+Pic: Gentleman
+Gender: Male
+Music: Rich
+Double Battle: No
+AI: Check Bad Move
+
+Girafarig
+Level: 36
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_NICHOLAS ===
+Name: NICHOLAS
+Class: Psychic
+Pic: Psychic M
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Wobbuffet
+Level: 36
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_SPACE_CENTER_3 ===
+Name: GRUNT
+Class: Team Magma
+Pic: Magma Grunt F
+Gender: Female
+Music: Magma
+Double Battle: No
+AI: Check Bad Move
+
+Zubat
+Level: 31
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Poochyena
+Level: 31
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_SPACE_CENTER_4 ===
+Name: GRUNT
+Class: Team Magma
+Pic: Magma Grunt M
+Gender: Male
+Music: Magma
+Double Battle: No
+AI: Check Bad Move
+
+Baltoy
+Level: 32
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_SPACE_CENTER_5 ===
+Name: GRUNT
+Class: Team Magma
+Pic: Magma Grunt M
+Gender: Male
+Music: Magma
+Double Battle: No
+AI: Check Bad Move
+
+Zubat
+Level: 32
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_SPACE_CENTER_6 ===
+Name: GRUNT
+Class: Team Magma
+Pic: Magma Grunt M
+Gender: Male
+Music: Magma
+Double Battle: No
+AI: Check Bad Move
+
+Mightyena
+Level: 32
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_SPACE_CENTER_7 ===
+Name: GRUNT
+Class: Team Magma
+Pic: Magma Grunt M
+Gender: Male
+Music: Magma
+Double Battle: No
+AI: Check Bad Move
+
+Baltoy
+Level: 32
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_MACEY ===
+Name: MACEY
+Class: Psychic
+Pic: Psychic F
+Gender: Female
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Natu
+Level: 36
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_BRENDAN_RUSTBORO_TREECKO ===
+Name: BRENDAN
+Class: Rival
+Pic: Brendan
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Lotad
+Level: 13
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Torchic
+Level: 15
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+=== TRAINER_BRENDAN_RUSTBORO_MUDKIP ===
+Name: BRENDAN
+Class: Rival
+Pic: Brendan
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Wingull
+Level: 13
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Treecko
+Level: 15
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+=== TRAINER_PAXTON ===
+Name: PAXTON
+Class: Expert
+Pic: Expert M
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Swellow
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Breloom
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_ISABELLA ===
+Name: ISABELLA
+Class: Triathlete
+Pic: Swimming Triathlete F
+Gender: Female
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Staryu
+Level: 34
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_WEATHER_INST_5 ===
+Name: GRUNT
+Class: Team Aqua
+Pic: Aqua Grunt F
+Gender: Female
+Music: Aqua
+Double Battle: No
+AI: Check Bad Move
+
+Zubat
+Level: 27
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Poochyena
+Level: 27
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_TABITHA_MT_CHIMNEY ===
+Name: TABITHA
+Class: Magma Admin
+Pic: Magma Admin
+Gender: Male
+Music: Magma
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Numel
+Level: 18
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+Poochyena
+Level: 20
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+Numel
+Level: 22
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+Zubat
+Level: 22
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+=== TRAINER_JONATHAN ===
+Name: JONATHAN
+Class: Cooltrainer
+Pic: Cooltrainer M
+Gender: Male
+Music: Cool
+Items: Hyper Potion
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Setup First Turn
+
+Kecleon
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Loudred
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_BRENDAN_RUSTBORO_TORCHIC ===
+Name: BRENDAN
+Class: Rival
+Pic: Brendan
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Slugma
+Level: 13
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Mudkip
+Level: 15
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+=== TRAINER_MAY_RUSTBORO_MUDKIP ===
+Name: MAY
+Class: Rival
+Pic: May
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Setup First Turn
+
+Wingull
+Level: 13
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Treecko
+Level: 15
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+=== TRAINER_MAXIE_MAGMA_HIDEOUT ===
+Name: MAXIE
+Class: Magma Leader
+Pic: Magma Leader Maxie
+Gender: Male
+Music: Magma
+Items: Super Potion / Super Potion
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Mightyena
+Level: 37
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+Crobat
+Level: 38
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+Camerupt
+Level: 39
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+=== TRAINER_MAXIE_MT_CHIMNEY ===
+Name: MAXIE
+Class: Magma Leader
+Pic: Magma Leader Maxie
+Gender: Male
+Music: Magma
+Items: Super Potion / Super Potion
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Mightyena
+Level: 24
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+Zubat
+Level: 24
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+Camerupt
+Level: 25
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+=== TRAINER_TIANA ===
+Name: TIANA
+Class: Lass
+Pic: Lass
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Zigzagoon
+Level: 4
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Shroomish
+Level: 4
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_HALEY_1 ===
+Name: HALEY
+Class: Lass
+Pic: Lass
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Lotad
+Level: 6
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Shroomish
+Level: 6
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_JANICE ===
+Name: JANICE
+Class: Lass
+Pic: Lass
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Marill
+Level: 9
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_VIVI ===
+Name: VIVI
+Class: Winstrate
+Pic: Lass
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Marill
+Level: 15
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Shroomish
+Level: 15
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Numel
+Level: 15
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_HALEY_2 ===
+Name: HALEY
+Class: Lass
+Pic: Lass
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Lombre
+Level: 26
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Shroomish
+Level: 26
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_HALEY_3 ===
+Name: HALEY
+Class: Lass
+Pic: Lass
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Lombre
+Level: 29
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Breloom
+Level: 29
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+=== TRAINER_HALEY_4 ===
+Name: HALEY
+Class: Lass
+Pic: Lass
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Lombre
+Level: 32
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Breloom
+Level: 32
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+=== TRAINER_HALEY_5 ===
+Name: HALEY
+Class: Lass
+Pic: Lass
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Swellow
+Level: 34
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Lombre
+Level: 34
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Breloom
+Level: 34
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+=== TRAINER_SALLY ===
+Name: SALLY
+Class: Lass
+Pic: Lass
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Oddish
+Level: 16
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_ROBIN ===
+Name: ROBIN
+Class: Lass
+Pic: Lass
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Skitty
+Level: 14
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Shroomish
+Level: 14
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Marill
+Level: 14
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_ANDREA ===
+Name: ANDREA
+Class: Lass
+Pic: Lass
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Luvdisc
+Level: 40
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_CRISSY ===
+Name: CRISSY
+Class: Lass
+Pic: Lass
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Goldeen
+Level: 39
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Wailmer
+Level: 39
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_RICK ===
+Name: RICK
+Class: Bug Catcher
+Pic: Bug Catcher
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Wurmple
+Level: 4
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Wurmple
+Level: 4
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_LYLE ===
+Name: LYLE
+Class: Bug Catcher
+Pic: Bug Catcher
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Wurmple
+Level: 3
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Wurmple
+Level: 3
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Wurmple
+Level: 3
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Wurmple
+Level: 3
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_JOSE ===
+Name: JOSE
+Class: Bug Catcher
+Pic: Bug Catcher
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Wurmple
+Level: 8
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+Nincada
+Level: 8
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+=== TRAINER_DOUG ===
+Name: DOUG
+Class: Bug Catcher
+Pic: Bug Catcher
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Nincada
+Level: 28
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Ninjask
+Level: 28
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GREG ===
+Name: GREG
+Class: Bug Catcher
+Pic: Bug Catcher
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Volbeat
+Level: 25
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Illumise
+Level: 25
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_KENT ===
+Name: KENT
+Class: Bug Catcher
+Pic: Bug Catcher
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Ninjask
+Level: 25
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_JAMES_1 ===
+Name: JAMES
+Class: Bug Catcher
+Pic: Bug Catcher
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Nincada
+Level: 6
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Nincada
+Level: 6
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_JAMES_2 ===
+Name: JAMES
+Class: Bug Catcher
+Pic: Bug Catcher
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Ninjask
+Level: 27
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_JAMES_3 ===
+Name: JAMES
+Class: Bug Catcher
+Pic: Bug Catcher
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Dustox
+Level: 29
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Ninjask
+Level: 29
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+=== TRAINER_JAMES_4 ===
+Name: JAMES
+Class: Bug Catcher
+Pic: Bug Catcher
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Surskit
+Level: 31
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Dustox
+Level: 31
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Ninjask
+Level: 31
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+=== TRAINER_JAMES_5 ===
+Name: JAMES
+Class: Bug Catcher
+Pic: Bug Catcher
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Surskit
+Level: 33
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Ninjask
+Level: 33
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Dustox
+Level: 33
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Ninjask
+Level: 33
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+=== TRAINER_BRICE ===
+Name: BRICE
+Class: Hiker
+Pic: Hiker
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Numel
+Level: 17
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Machop
+Level: 17
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_TRENT_1 ===
+Name: TRENT
+Class: Hiker
+Pic: Hiker
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Geodude
+Level: 16
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Geodude
+Level: 17
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Geodude
+Level: 16
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_LENNY ===
+Name: LENNY
+Class: Hiker
+Pic: Hiker
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Geodude
+Level: 18
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Machop
+Level: 18
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_LUCAS_1 ===
+Name: LUCAS
+Class: Hiker
+Pic: Hiker
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Geodude
+Level: 18
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Numel
+Level: 18
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_ALAN ===
+Name: ALAN
+Class: Hiker
+Pic: Hiker
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Geodude
+Level: 22
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Nosepass
+Level: 22
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Graveler
+Level: 22
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_CLARK ===
+Name: CLARK
+Class: Hiker
+Pic: Hiker
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Geodude
+Level: 8
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_ERIC ===
+Name: ERIC
+Class: Hiker
+Pic: Hiker
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Geodude
+Level: 20
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Baltoy
+Level: 20
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_LUCAS_2 ===
+Name: LUCAS
+Class: Hiker
+Pic: Hiker
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Wailmer
+Level: 9
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Splash
+- Water Gun
+
+=== TRAINER_MIKE_1 ===
+Name: MIKE
+Class: Hiker
+Pic: Hiker
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Pelipper
+Level: 10
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Gust
+- Growl
+
+Poochyena
+Level: 10
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Bite
+- Scary Face
+
+=== TRAINER_MIKE_2 ===
+Name: MIKE
+Class: Hiker
+Pic: Hiker
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Geodude
+Level: 16
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Geodude
+Level: 16
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Machop
+Level: 16
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_TRENT_2 ===
+Name: TRENT
+Class: Hiker
+Pic: Hiker
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Geodude
+Level: 24
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Geodude
+Level: 24
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Geodude
+Level: 24
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Graveler
+Level: 24
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_TRENT_3 ===
+Name: TRENT
+Class: Hiker
+Pic: Hiker
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Geodude
+Level: 27
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Geodude
+Level: 27
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Graveler
+Level: 27
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Graveler
+Level: 27
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+=== TRAINER_TRENT_4 ===
+Name: TRENT
+Class: Hiker
+Pic: Hiker
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Geodude
+Level: 30
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Graveler
+Level: 30
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Graveler
+Level: 30
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Graveler
+Level: 30
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+=== TRAINER_TRENT_5 ===
+Name: TRENT
+Class: Hiker
+Pic: Hiker
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Graveler
+Level: 33
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Graveler
+Level: 33
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Graveler
+Level: 33
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Golem
+Level: 33
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+=== TRAINER_DEZ_AND_LUKE ===
+Name: DEZ & LUKE
+Class: Young Couple
+Pic: Young Couple
+Gender: Male
+Music: Girl
+Double Battle: Yes
+AI: Check Bad Move
+
+Delcatty
+Level: 31
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Manectric
+Level: 31
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_LEA_AND_JED ===
+Name: LEA & JED
+Class: Young Couple
+Pic: Young Couple
+Gender: Male
+Music: Girl
+Double Battle: Yes
+AI: Check Bad Move
+
+Luvdisc
+Level: 45
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Luvdisc
+Level: 45
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_KIRA_AND_DAN_1 ===
+Name: KIRA & DAN
+Class: Young Couple
+Pic: Young Couple
+Gender: Male
+Music: Girl
+Double Battle: Yes
+AI: Check Bad Move
+
+Volbeat
+Level: 25
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Illumise
+Level: 25
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_KIRA_AND_DAN_2 ===
+Name: KIRA & DAN
+Class: Young Couple
+Pic: Young Couple
+Gender: Male
+Music: Girl
+Double Battle: Yes
+AI: Check Bad Move
+
+Volbeat
+Level: 30
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Illumise
+Level: 30
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_KIRA_AND_DAN_3 ===
+Name: KIRA & DAN
+Class: Young Couple
+Pic: Young Couple
+Gender: Male
+Music: Girl
+Double Battle: Yes
+AI: Check Bad Move
+
+Volbeat
+Level: 33
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Illumise
+Level: 33
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+=== TRAINER_KIRA_AND_DAN_4 ===
+Name: KIRA & DAN
+Class: Young Couple
+Pic: Young Couple
+Gender: Male
+Music: Girl
+Double Battle: Yes
+AI: Check Bad Move
+
+Volbeat
+Level: 36
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Illumise
+Level: 36
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+=== TRAINER_KIRA_AND_DAN_5 ===
+Name: KIRA & DAN
+Class: Young Couple
+Pic: Young Couple
+Gender: Male
+Music: Girl
+Double Battle: Yes
+AI: Check Bad Move
+
+Volbeat
+Level: 39
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Illumise
+Level: 39
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+=== TRAINER_JOHANNA ===
+Name: JOHANNA
+Class: Beauty
+Pic: Beauty
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Goldeen
+Level: 13
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GERALD ===
+Name: GERALD
+Class: Cooltrainer
+Pic: Cooltrainer M
+Gender: Male
+Music: Cool
+Items: Hyper Potion
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Kecleon
+Level: 23
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+- Flamethrower
+- Fury Swipes
+- Feint Attack
+- Bind
+
+=== TRAINER_VIVIAN ===
+Name: VIVIAN
+Class: Battle Girl
+Pic: Battle Girl
+Gender: Female
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Meditite
+Level: 17
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+- Bide
+- Detect
+- Confusion
+- Thunder Punch
+
+Meditite
+Level: 17
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+- Thunder Punch
+- Detect
+- Confusion
+- Meditate
+
+=== TRAINER_DANIELLE ===
+Name: DANIELLE
+Class: Battle Girl
+Pic: Battle Girl
+Gender: Female
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Meditite
+Level: 23
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+- Bide
+- Detect
+- Confusion
+- Fire Punch
+
+=== TRAINER_HIDEO ===
+Name: HIDEO
+Class: Ninja Boy
+Pic: Ninja Boy
+Gender: Male
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move / Try To Faint
+
+Koffing
+Level: 25
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Tackle
+- Self Destruct
+- Sludge
+- Smokescreen
+
+Koffing
+Level: 25
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Tackle
+- Poison Gas
+- Sludge
+- Smokescreen
+
+=== TRAINER_KEIGO ===
+Name: KEIGO
+Class: Ninja Boy
+Pic: Ninja Boy
+Gender: Male
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move / Try To Faint
+
+Koffing
+Level: 28
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Poison Gas
+- Self Destruct
+- Sludge
+- Smokescreen
+
+Ninjask
+Level: 28
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Sand Attack
+- Double Team
+- Fury Cutter
+- Swords Dance
+
+=== TRAINER_RILEY ===
+Name: RILEY
+Class: Ninja Boy
+Pic: Ninja Boy
+Gender: Male
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move / Try To Faint
+
+Nincada
+Level: 28
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Leech Life
+- Fury Swipes
+- Mind Reader
+- Dig
+
+Koffing
+Level: 28
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Tackle
+- Self Destruct
+- Sludge
+- Smokescreen
+
+=== TRAINER_FLINT ===
+Name: FLINT
+Class: Camper
+Pic: Camper
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Swellow
+Level: 29
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+Xatu
+Level: 29
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+=== TRAINER_ASHLEY ===
+Name: ASHLEY
+Class: Picnicker
+Pic: Picnicker
+Gender: Female
+Music: Girl
+Double Battle: No
+AI: Check Bad Move
+
+Swablu
+Level: 27
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Swablu
+Level: 27
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Swablu
+Level: 27
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_WALLY_MAUVILLE ===
+Name: WALLY
+Class: Rival
+Pic: Wally
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Ralts
+Level: 16
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+=== TRAINER_WALLY_VR_2 ===
+Name: WALLY
+Class: Rival
+Pic: Wally
+Gender: Male
+Music: Male
+Items: Full Restore / Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Altaria
+Level: 47
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+- Aerial Ace
+- Safeguard
+- Dragon Breath
+- Dragon Dance
+
+Delcatty
+Level: 46
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+- Sing
+- Assist
+- Charm
+- Feint Attack
+
+Roselia
+Level: 47
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+- Magical Leaf
+- Leech Seed
+- Giga Drain
+- Toxic
+
+Magneton
+Level: 44
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+- Supersonic
+- Thunderbolt
+- Tri Attack
+- Screech
+
+Gardevoir
+Level: 48
+IVs: 30 HP / 30 Atk / 30 Def / 30 SpA / 30 SpD / 30 Spe
+- Double Team
+- Calm Mind
+- Psychic
+- Future Sight
+
+=== TRAINER_WALLY_VR_3 ===
+Name: WALLY
+Class: Rival
+Pic: Wally
+Gender: Male
+Music: Male
+Items: Full Restore / Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Altaria
+Level: 50
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+- Aerial Ace
+- Safeguard
+- Dragon Breath
+- Dragon Dance
+
+Delcatty
+Level: 49
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+- Sing
+- Assist
+- Charm
+- Feint Attack
+
+Roselia
+Level: 50
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+- Magical Leaf
+- Leech Seed
+- Giga Drain
+- Toxic
+
+Magneton
+Level: 47
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+- Supersonic
+- Thunderbolt
+- Tri Attack
+- Screech
+
+Gardevoir
+Level: 51
+IVs: 30 HP / 30 Atk / 30 Def / 30 SpA / 30 SpD / 30 Spe
+- Double Team
+- Calm Mind
+- Psychic
+- Future Sight
+
+=== TRAINER_WALLY_VR_4 ===
+Name: WALLY
+Class: Rival
+Pic: Wally
+Gender: Male
+Music: Male
+Items: Full Restore / Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Altaria
+Level: 53
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+- Aerial Ace
+- Safeguard
+- Dragon Breath
+- Dragon Dance
+
+Delcatty
+Level: 52
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+- Sing
+- Assist
+- Charm
+- Feint Attack
+
+Roselia
+Level: 53
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+- Magical Leaf
+- Leech Seed
+- Giga Drain
+- Toxic
+
+Magneton
+Level: 50
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+- Supersonic
+- Thunderbolt
+- Tri Attack
+- Screech
+
+Gardevoir
+Level: 54
+IVs: 30 HP / 30 Atk / 30 Def / 30 SpA / 30 SpD / 30 Spe
+- Double Team
+- Calm Mind
+- Psychic
+- Future Sight
+
+=== TRAINER_WALLY_VR_5 ===
+Name: WALLY
+Class: Rival
+Pic: Wally
+Gender: Male
+Music: Male
+Items: Full Restore / Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Altaria
+Level: 56
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+- Aerial Ace
+- Safeguard
+- Dragon Breath
+- Dragon Dance
+
+Delcatty
+Level: 55
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+- Sing
+- Assist
+- Charm
+- Feint Attack
+
+Roselia
+Level: 56
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+- Magical Leaf
+- Leech Seed
+- Giga Drain
+- Toxic
+
+Magneton
+Level: 53
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+- Supersonic
+- Thunderbolt
+- Tri Attack
+- Screech
+
+Gardevoir
+Level: 57
+IVs: 30 HP / 30 Atk / 30 Def / 30 SpA / 30 SpD / 30 Spe
+- Double Team
+- Calm Mind
+- Psychic
+- Future Sight
+
+=== TRAINER_BRENDAN_LILYCOVE_MUDKIP ===
+Name: BRENDAN
+Class: Rival
+Pic: Brendan
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Tropius
+Level: 31
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+Slugma
+Level: 32
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+Pelipper
+Level: 32
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+Grovyle
+Level: 34
+IVs: 24 HP / 24 Atk / 24 Def / 24 SpA / 24 SpD / 24 Spe
+
+=== TRAINER_BRENDAN_LILYCOVE_TREECKO ===
+Name: BRENDAN
+Class: Rival
+Pic: Brendan
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Tropius
+Level: 31
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+Pelipper
+Level: 32
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+Ludicolo
+Level: 32
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+Combusken
+Level: 34
+IVs: 24 HP / 24 Atk / 24 Def / 24 SpA / 24 SpD / 24 Spe
+
+=== TRAINER_BRENDAN_LILYCOVE_TORCHIC ===
+Name: BRENDAN
+Class: Rival
+Pic: Brendan
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Tropius
+Level: 31
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+Ludicolo
+Level: 32
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+Slugma
+Level: 32
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+Marshtomp
+Level: 34
+IVs: 24 HP / 24 Atk / 24 Def / 24 SpA / 24 SpD / 24 Spe
+
+=== TRAINER_MAY_LILYCOVE_MUDKIP ===
+Name: MAY
+Class: Rival
+Pic: May
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Tropius
+Level: 31
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+Slugma
+Level: 32
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+Pelipper
+Level: 32
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+Grovyle
+Level: 34
+IVs: 24 HP / 24 Atk / 24 Def / 24 SpA / 24 SpD / 24 Spe
+
+=== TRAINER_MAY_LILYCOVE_TREECKO ===
+Name: MAY
+Class: Rival
+Pic: May
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Tropius
+Level: 31
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+Pelipper
+Level: 32
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+Ludicolo
+Level: 32
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+Combusken
+Level: 34
+IVs: 24 HP / 24 Atk / 24 Def / 24 SpA / 24 SpD / 24 Spe
+
+=== TRAINER_MAY_LILYCOVE_TORCHIC ===
+Name: MAY
+Class: Rival
+Pic: May
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Tropius
+Level: 31
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+Ludicolo
+Level: 32
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+Slugma
+Level: 32
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+Marshtomp
+Level: 34
+IVs: 24 HP / 24 Atk / 24 Def / 24 SpA / 24 SpD / 24 Spe
+
+=== TRAINER_JONAH ===
+Name: JONAH
+Class: Fisherman
+Pic: Fisherman
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Wailmer
+Level: 30
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Tentacool
+Level: 31
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Sharpedo
+Level: 32
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_HENRY ===
+Name: HENRY
+Class: Fisherman
+Pic: Fisherman
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Carvanha
+Level: 31
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Tentacruel
+Level: 34
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_ROGER ===
+Name: ROGER
+Class: Fisherman
+Pic: Fisherman
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Magikarp
+Level: 15
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Magikarp
+Level: 25
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Gyarados
+Level: 35
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_ALEXA ===
+Name: ALEXA
+Class: Cooltrainer
+Pic: Cooltrainer F
+Gender: Female
+Music: Cool
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Gloom
+Level: 34
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Azumarill
+Level: 34
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_RUBEN ===
+Name: RUBEN
+Class: Cooltrainer
+Pic: Cooltrainer M
+Gender: Male
+Music: Cool
+Items: Hyper Potion
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Shiftry
+Level: 34
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Nosepass
+Level: 34
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_KOJI_1 ===
+Name: KOJI
+Class: Black Belt
+Pic: Black Belt
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Machoke
+Level: 34
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_WAYNE ===
+Name: WAYNE
+Class: Fisherman
+Pic: Fisherman
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Tentacool
+Level: 31
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Tentacool
+Level: 31
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Wailmer
+Level: 36
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_AIDAN ===
+Name: AIDAN
+Class: Bird Keeper
+Pic: Bird Keeper
+Gender: Male
+Music: Cool
+Double Battle: No
+AI: Check Bad Move
+
+Swellow
+Level: 32
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Skarmory
+Level: 32
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_REED ===
+Name: REED
+Class: Swimmer M
+Pic: Swimmer M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Spheal
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Sharpedo
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_TISHA ===
+Name: TISHA
+Class: Swimmer F
+Pic: Swimmer F
+Gender: Female
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Chinchou
+Level: 34
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_TORI_AND_TIA ===
+Name: TORI & TIA
+Class: Twins
+Pic: Twins
+Gender: Male
+Music: Twins
+Double Battle: Yes
+AI: Check Bad Move
+
+Spinda
+Level: 19
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Spinda
+Level: 19
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_KIM_AND_IRIS ===
+Name: KIM & IRIS
+Class: Sr And Jr
+Pic: Sr And Jr
+Gender: Male
+Music: Twins
+Double Battle: Yes
+AI: Check Bad Move
+
+Swablu
+Level: 32
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Sing
+- Fury Attack
+- Safeguard
+- Aerial Ace
+
+Numel
+Level: 35
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Flamethrower
+- Take Down
+- Rest
+- Earthquake
+
+=== TRAINER_TYRA_AND_IVY ===
+Name: TYRA & IVY
+Class: Sr And Jr
+Pic: Sr And Jr
+Gender: Male
+Music: Twins
+Double Battle: Yes
+AI: Check Bad Move
+
+Roselia
+Level: 18
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Growth
+- Stun Spore
+- Mega Drain
+- Leech Seed
+
+Graveler
+Level: 20
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Defense Curl
+- Rollout
+- Mud Sport
+- Rock Throw
+
+=== TRAINER_MEL_AND_PAUL ===
+Name: MEL & PAUL
+Class: Young Couple
+Pic: Young Couple
+Gender: Male
+Music: Girl
+Double Battle: Yes
+AI: Check Bad Move
+
+Dustox
+Level: 27
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Gust
+- Psybeam
+- Toxic
+- Protect
+
+Beautifly
+Level: 27
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+- Gust
+- Mega Drain
+- Attract
+- Stun Spore
+
+=== TRAINER_JOHN_AND_JAY_1 ===
+Name: JOHN & JAY
+Class: Old Couple
+Pic: Old Couple
+Gender: Male
+Music: Intense
+Double Battle: Yes
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Medicham
+Level: 39
+IVs: 24 HP / 24 Atk / 24 Def / 24 SpA / 24 SpD / 24 Spe
+- Psychic
+- Fire Punch
+- Psych Up
+- Protect
+
+Hariyama
+Level: 39
+IVs: 24 HP / 24 Atk / 24 Def / 24 SpA / 24 SpD / 24 Spe
+- Focus Punch
+- Rock Tomb
+- Rest
+- Belly Drum
+
+=== TRAINER_JOHN_AND_JAY_2 ===
+Name: JOHN & JAY
+Class: Old Couple
+Pic: Old Couple
+Gender: Male
+Music: Intense
+Double Battle: Yes
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Medicham
+Level: 43
+IVs: 25 HP / 25 Atk / 25 Def / 25 SpA / 25 SpD / 25 Spe
+- Psychic
+- Fire Punch
+- Psych Up
+- Protect
+
+Hariyama
+Level: 43
+IVs: 25 HP / 25 Atk / 25 Def / 25 SpA / 25 SpD / 25 Spe
+- Focus Punch
+- Rock Tomb
+- Rest
+- Belly Drum
+
+=== TRAINER_JOHN_AND_JAY_3 ===
+Name: JOHN & JAY
+Class: Old Couple
+Pic: Old Couple
+Gender: Male
+Music: Intense
+Double Battle: Yes
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Medicham
+Level: 46
+IVs: 26 HP / 26 Atk / 26 Def / 26 SpA / 26 SpD / 26 Spe
+- Psychic
+- Fire Punch
+- Psych Up
+- Protect
+
+Hariyama
+Level: 46
+IVs: 26 HP / 26 Atk / 26 Def / 26 SpA / 26 SpD / 26 Spe
+- Focus Punch
+- Rock Tomb
+- Rest
+- Belly Drum
+
+=== TRAINER_JOHN_AND_JAY_4 ===
+Name: JOHN & JAY
+Class: Old Couple
+Pic: Old Couple
+Gender: Male
+Music: Intense
+Double Battle: Yes
+AI: Check Bad Move / Try To Faint / Setup First Turn
+
+Medicham
+Level: 49
+IVs: 27 HP / 27 Atk / 27 Def / 27 SpA / 27 SpD / 27 Spe
+- Psychic
+- Fire Punch
+- Psych Up
+- Protect
+
+Hariyama
+Level: 49
+IVs: 27 HP / 27 Atk / 27 Def / 27 SpA / 27 SpD / 27 Spe
+- Focus Punch
+- Rock Tomb
+- Rest
+- Belly Drum
+
+=== TRAINER_JOHN_AND_JAY_5 ===
+Name: JOHN & JAY
+Class: Old Couple
+Pic: Old Couple
+Gender: Male
+Music: Intense
+Double Battle: Yes
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Medicham
+Level: 52
+IVs: 29 HP / 29 Atk / 29 Def / 29 SpA / 29 SpD / 29 Spe
+- Psychic
+- Fire Punch
+- Psych Up
+- Protect
+
+Hariyama
+Level: 52
+IVs: 29 HP / 29 Atk / 29 Def / 29 SpA / 29 SpD / 29 Spe
+- Focus Punch
+- Rock Tomb
+- Rest
+- Belly Drum
+
+=== TRAINER_RELI_AND_IAN ===
+Name: RELI & IAN
+Class: Sis And Bro
+Pic: Sis And Bro
+Gender: Male
+Music: Swimmer
+Double Battle: Yes
+AI: Check Bad Move
+
+Azumarill
+Level: 35
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Wingull
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_LILA_AND_ROY_1 ===
+Name: LILA & ROY
+Class: Sis And Bro
+Pic: Sis And Bro
+Gender: Male
+Music: Swimmer
+Double Battle: Yes
+AI: Check Bad Move
+
+Chinchou
+Level: 34
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Carvanha
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_LILA_AND_ROY_2 ===
+Name: LILA & ROY
+Class: Sis And Bro
+Pic: Sis And Bro
+Gender: Male
+Music: Swimmer
+Double Battle: Yes
+AI: Check Bad Move
+
+Chinchou
+Level: 42
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Carvanha
+Level: 40
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_LILA_AND_ROY_3 ===
+Name: LILA & ROY
+Class: Sis And Bro
+Pic: Sis And Bro
+Gender: Male
+Music: Swimmer
+Double Battle: Yes
+AI: Check Bad Move
+
+Lanturn
+Level: 45
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Carvanha
+Level: 43
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_LILA_AND_ROY_4 ===
+Name: LILA & ROY
+Class: Sis And Bro
+Pic: Sis And Bro
+Gender: Male
+Music: Swimmer
+Double Battle: Yes
+AI: Check Bad Move
+
+Lanturn
+Level: 48
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Sharpedo
+Level: 46
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_LILA_AND_ROY_5 ===
+Name: LILA & ROY
+Class: Sis And Bro
+Pic: Sis And Bro
+Gender: Male
+Music: Swimmer
+Double Battle: Yes
+AI: Check Bad Move
+
+Lanturn
+Level: 51
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Sharpedo
+Level: 49
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_LISA_AND_RAY ===
+Name: LISA & RAY
+Class: Sis And Bro
+Pic: Sis And Bro
+Gender: Male
+Music: Swimmer
+Double Battle: Yes
+AI: Check Bad Move
+
+Goldeen
+Level: 27
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Tentacool
+Level: 25
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_CHRIS ===
+Name: CHRIS
+Class: Fisherman
+Pic: Fisherman
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Magikarp
+Level: 29
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Tentacool
+Level: 20
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Feebas
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Carvanha
+Level: 23
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_DAWSON ===
+Name: DAWSON
+Class: Rich Boy
+Pic: Rich Boy
+Gender: Male
+Music: Rich
+Double Battle: No
+AI: Check Bad Move
+
+Zigzagoon @ Nugget
+Level: 8
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Poochyena
+Level: 8
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_SARAH ===
+Name: SARAH
+Class: Lady
+Pic: Lady
+Gender: Female
+Music: Female
+Items: Full Restore
+Double Battle: No
+AI: Check Bad Move
+
+Lotad
+Level: 8
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Zigzagoon @ Nugget
+Level: 8
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_DARIAN ===
+Name: DARIAN
+Class: Fisherman
+Pic: Fisherman
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Magikarp
+Level: 9
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_HAILEY ===
+Name: HAILEY
+Class: Tuber F
+Pic: Tuber F
+Gender: Female
+Music: Girl
+Double Battle: No
+AI: Check Bad Move
+
+Marill
+Level: 13
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_CHANDLER ===
+Name: CHANDLER
+Class: Tuber M
+Pic: Tuber M
+Gender: Male
+Music: Girl
+Double Battle: No
+AI: Check Bad Move
+
+Tentacool
+Level: 12
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Tentacool
+Level: 12
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_KALEB ===
+Name: KALEB
+Class: Pokefan
+Pic: Pokefan M
+Gender: Male
+Music: Twins
+Double Battle: No
+AI: Check Bad Move
+
+Minun @ Oran Berry
+Level: 14
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Plusle @ Oran Berry
+Level: 14
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_JOSEPH ===
+Name: JOSEPH
+Class: Guitarist
+Pic: Guitarist
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Electrike
+Level: 14
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Voltorb
+Level: 14
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_ALYSSA ===
+Name: ALYSSA
+Class: Triathlete
+Pic: Cycling Triathlete F
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Magnemite
+Level: 15
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_MARCOS ===
+Name: MARCOS
+Class: Guitarist
+Pic: Guitarist
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Voltorb
+Level: 15
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_RHETT ===
+Name: RHETT
+Class: Black Belt
+Pic: Black Belt
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Makuhita
+Level: 15
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_TYRON ===
+Name: TYRON
+Class: Camper
+Pic: Camper
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Sandshrew
+Level: 19
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_CELINA ===
+Name: CELINA
+Class: Aroma Lady
+Pic: Aroma Lady
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Roselia
+Level: 18
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_BIANCA ===
+Name: BIANCA
+Class: Picnicker
+Pic: Picnicker
+Gender: Female
+Music: Girl
+Double Battle: No
+AI: Check Bad Move
+
+Shroomish
+Level: 18
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_HAYDEN ===
+Name: HAYDEN
+Class: Kindler
+Pic: Kindler
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Numel
+Level: 18
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_SOPHIE ===
+Name: SOPHIE
+Class: Picnicker
+Pic: Picnicker
+Gender: Female
+Music: Girl
+Double Battle: No
+AI: Check Bad Move
+
+Marill
+Level: 17
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Lombre
+Level: 19
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_COBY ===
+Name: COBY
+Class: Bird Keeper
+Pic: Bird Keeper
+Gender: Male
+Music: Cool
+Double Battle: No
+AI: Check Bad Move
+
+Skarmory
+Level: 17
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Swellow
+Level: 19
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_LAWRENCE ===
+Name: LAWRENCE
+Class: Camper
+Pic: Camper
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Baltoy
+Level: 18
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Sandshrew
+Level: 18
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_WYATT ===
+Name: WYATT
+Class: Pokemaniac
+Pic: Pokemaniac
+Gender: Male
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move
+
+Aron
+Level: 18
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Aron
+Level: 18
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_ANGELINA ===
+Name: ANGELINA
+Class: Picnicker
+Pic: Picnicker
+Gender: Female
+Music: Girl
+Double Battle: No
+AI: Check Bad Move
+
+Lombre
+Level: 18
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Marill
+Level: 18
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_KAI ===
+Name: KAI
+Class: Fisherman
+Pic: Fisherman
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Barboach
+Level: 19
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_CHARLOTTE ===
+Name: CHARLOTTE
+Class: Picnicker
+Pic: Picnicker
+Gender: Female
+Music: Girl
+Double Battle: No
+AI: Check Bad Move
+
+Nuzleaf
+Level: 19
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_DEANDRE ===
+Name: DEANDRE
+Class: Youngster
+Pic: Youngster
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Zigzagoon
+Level: 14
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Aron
+Level: 14
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Electrike
+Level: 14
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_MAGMA_HIDEOUT_1 ===
+Name: GRUNT
+Class: Team Magma
+Pic: Magma Grunt M
+Gender: Male
+Music: Magma
+Double Battle: No
+AI: Check Bad Move
+
+Zubat
+Level: 29
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_MAGMA_HIDEOUT_2 ===
+Name: GRUNT
+Class: Team Magma
+Pic: Magma Grunt M
+Gender: Male
+Music: Magma
+Double Battle: No
+AI: Check Bad Move
+
+Poochyena
+Level: 29
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_MAGMA_HIDEOUT_3 ===
+Name: GRUNT
+Class: Team Magma
+Pic: Magma Grunt M
+Gender: Male
+Music: Magma
+Double Battle: No
+AI: Check Bad Move
+
+Numel
+Level: 29
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_MAGMA_HIDEOUT_4 ===
+Name: GRUNT
+Class: Team Magma
+Pic: Magma Grunt M
+Gender: Male
+Music: Magma
+Double Battle: No
+AI: Check Bad Move
+
+Baltoy
+Level: 28
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Zubat
+Level: 28
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_MAGMA_HIDEOUT_5 ===
+Name: GRUNT
+Class: Team Magma
+Pic: Magma Grunt M
+Gender: Male
+Music: Magma
+Double Battle: No
+AI: Check Bad Move
+
+Baltoy
+Level: 28
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Numel
+Level: 28
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_MAGMA_HIDEOUT_6 ===
+Name: GRUNT
+Class: Team Magma
+Pic: Magma Grunt M
+Gender: Male
+Music: Magma
+Double Battle: No
+AI: Check Bad Move
+
+Mightyena
+Level: 29
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_MAGMA_HIDEOUT_7 ===
+Name: GRUNT
+Class: Team Magma
+Pic: Magma Grunt M
+Gender: Male
+Music: Magma
+Double Battle: No
+AI: Check Bad Move
+
+Zubat
+Level: 29
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_MAGMA_HIDEOUT_8 ===
+Name: GRUNT
+Class: Team Magma
+Pic: Magma Grunt M
+Gender: Male
+Music: Magma
+Double Battle: No
+AI: Check Bad Move
+
+Poochyena
+Level: 29
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_MAGMA_HIDEOUT_9 ===
+Name: GRUNT
+Class: Team Magma
+Pic: Magma Grunt M
+Gender: Male
+Music: Magma
+Double Battle: No
+AI: Check Bad Move
+
+Zubat
+Level: 29
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_MAGMA_HIDEOUT_10 ===
+Name: GRUNT
+Class: Team Magma
+Pic: Magma Grunt M
+Gender: Male
+Music: Magma
+Double Battle: No
+AI: Check Bad Move
+
+Mightyena
+Level: 29
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_MAGMA_HIDEOUT_11 ===
+Name: GRUNT
+Class: Team Magma
+Pic: Magma Grunt M
+Gender: Male
+Music: Magma
+Double Battle: No
+AI: Check Bad Move
+
+Baltoy
+Level: 29
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_MAGMA_HIDEOUT_12 ===
+Name: GRUNT
+Class: Team Magma
+Pic: Magma Grunt M
+Gender: Male
+Music: Magma
+Double Battle: No
+AI: Check Bad Move
+
+Numel
+Level: 29
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_MAGMA_HIDEOUT_13 ===
+Name: GRUNT
+Class: Team Magma
+Pic: Magma Grunt M
+Gender: Male
+Music: Magma
+Double Battle: No
+AI: Check Bad Move
+
+Zubat
+Level: 29
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_MAGMA_HIDEOUT_14 ===
+Name: GRUNT
+Class: Team Magma
+Pic: Magma Grunt F
+Gender: Female
+Music: Magma
+Double Battle: No
+AI: Check Bad Move
+
+Mightyena
+Level: 29
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_MAGMA_HIDEOUT_15 ===
+Name: GRUNT
+Class: Team Magma
+Pic: Magma Grunt F
+Gender: Female
+Music: Magma
+Double Battle: No
+AI: Check Bad Move
+
+Numel
+Level: 29
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRUNT_MAGMA_HIDEOUT_16 ===
+Name: GRUNT
+Class: Team Magma
+Pic: Magma Grunt F
+Gender: Female
+Music: Magma
+Double Battle: No
+AI: Check Bad Move
+
+Baltoy
+Level: 29
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_TABITHA_MAGMA_HIDEOUT ===
+Name: TABITHA
+Class: Magma Admin
+Pic: Magma Admin
+Gender: Male
+Music: Magma
+Double Battle: No
+AI: Check Bad Move
+
+Numel
+Level: 26
+IVs: 9 HP / 9 Atk / 9 Def / 9 SpA / 9 SpD / 9 Spe
+
+Mightyena
+Level: 28
+IVs: 9 HP / 9 Atk / 9 Def / 9 SpA / 9 SpD / 9 Spe
+
+Zubat
+Level: 30
+IVs: 9 HP / 9 Atk / 9 Def / 9 SpA / 9 SpD / 9 Spe
+
+Camerupt
+Level: 33
+IVs: 9 HP / 9 Atk / 9 Def / 9 SpA / 9 SpD / 9 Spe
+
+=== TRAINER_DARCY ===
+Name: DARCY
+Class: Cooltrainer
+Pic: Cooltrainer F
+Gender: Female
+Music: Cool
+Items: Hyper Potion
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Pelipper
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Camerupt
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_MAXIE_MOSSDEEP ===
+Name: MAXIE
+Class: Magma Leader
+Pic: Magma Leader Maxie
+Gender: Male
+Music: Magma
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Mightyena
+Level: 42
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+Crobat
+Level: 43
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+Camerupt
+Level: 44
+IVs: 18 HP / 18 Atk / 18 Def / 18 SpA / 18 SpD / 18 Spe
+
+=== TRAINER_PETE ===
+Name: PETE
+Class: Swimmer M
+Pic: Swimmer M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Tentacool
+Level: 15
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_ISABELLE ===
+Name: ISABELLE
+Class: Swimmer F
+Pic: Swimmer F
+Gender: Female
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Marill
+Level: 15
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_ANDRES_1 ===
+Name: ANDRES
+Class: Ruin Maniac
+Pic: Ruin Maniac
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Sandshrew
+Level: 25
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+Sandshrew
+Level: 25
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+=== TRAINER_JOSUE ===
+Name: JOSUE
+Class: Bird Keeper
+Pic: Bird Keeper
+Gender: Male
+Music: Cool
+Double Battle: No
+AI: Check Bad Move
+
+Taillow
+Level: 25
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+Wingull
+Level: 25
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+=== TRAINER_CAMRON ===
+Name: CAMRON
+Class: Triathlete
+Pic: Swimming Triathlete M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Staryu
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_CORY_1 ===
+Name: CORY
+Class: Sailor
+Pic: Sailor
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Wingull
+Level: 24
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Machop
+Level: 24
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Tentacool
+Level: 24
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_CAROLINA ===
+Name: CAROLINA
+Class: Cooltrainer
+Pic: Cooltrainer F
+Gender: Female
+Music: Cool
+Items: Hyper Potion
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Manectric
+Level: 24
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+Swellow
+Level: 24
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+Manectric
+Level: 24
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+=== TRAINER_ELIJAH ===
+Name: ELIJAH
+Class: Bird Keeper
+Pic: Bird Keeper
+Gender: Male
+Music: Cool
+Double Battle: No
+AI: Check Bad Move
+
+Skarmory
+Level: 25
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Skarmory
+Level: 25
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_CELIA ===
+Name: CELIA
+Class: Picnicker
+Pic: Picnicker
+Gender: Female
+Music: Girl
+Double Battle: No
+AI: Check Bad Move
+
+Marill
+Level: 22
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Lombre
+Level: 22
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_BRYAN ===
+Name: BRYAN
+Class: Ruin Maniac
+Pic: Ruin Maniac
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Sandshrew
+Level: 22
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Sandslash
+Level: 22
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_BRANDEN ===
+Name: BRANDEN
+Class: Camper
+Pic: Camper
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Taillow
+Level: 22
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Nuzleaf
+Level: 22
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_BRYANT ===
+Name: BRYANT
+Class: Kindler
+Pic: Kindler
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Numel
+Level: 18
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Slugma
+Level: 18
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_SHAYLA ===
+Name: SHAYLA
+Class: Aroma Lady
+Pic: Aroma Lady
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Shroomish
+Level: 18
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Roselia
+Level: 18
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_KYRA ===
+Name: KYRA
+Class: Triathlete
+Pic: Running Triathlete F
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Doduo
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Dodrio
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_JAIDEN ===
+Name: JAIDEN
+Class: Ninja Boy
+Pic: Ninja Boy
+Gender: Male
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move
+
+Ninjask
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Gulpin
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_ALIX ===
+Name: ALIX
+Class: Psychic
+Pic: Psychic F
+Gender: Female
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Kadabra
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Kirlia
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_HELENE ===
+Name: HELENE
+Class: Battle Girl
+Pic: Battle Girl
+Gender: Female
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Meditite
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Makuhita
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_MARLENE ===
+Name: MARLENE
+Class: Psychic
+Pic: Psychic F
+Gender: Female
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Meditite
+Level: 18
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Spoink
+Level: 18
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_DEVAN ===
+Name: DEVAN
+Class: Hiker
+Pic: Hiker
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Geodude
+Level: 8
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Geodude
+Level: 8
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_JOHNSON ===
+Name: JOHNSON
+Class: Youngster
+Pic: Youngster
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Shroomish
+Level: 8
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Lotad
+Level: 8
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_MELINA ===
+Name: MELINA
+Class: Triathlete
+Pic: Running Triathlete F
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Doduo
+Level: 17
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_BRANDI ===
+Name: BRANDI
+Class: Psychic
+Pic: Psychic F
+Gender: Female
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Ralts
+Level: 17
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_AISHA ===
+Name: AISHA
+Class: Battle Girl
+Pic: Battle Girl
+Gender: Female
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Meditite
+Level: 17
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_MAKAYLA ===
+Name: MAKAYLA
+Class: Expert
+Pic: Expert F
+Gender: Female
+Music: Intense
+Items: Hyper Potion
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Roselia
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Medicham
+Level: 33
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_FABIAN ===
+Name: FABIAN
+Class: Guitarist
+Pic: Guitarist
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Manectric
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_DAYTON ===
+Name: DAYTON
+Class: Kindler
+Pic: Kindler
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Slugma
+Level: 25
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Numel
+Level: 25
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_RACHEL ===
+Name: RACHEL
+Class: Parasol Lady
+Pic: Parasol Lady
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Goldeen
+Level: 26
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_LEONEL ===
+Name: LEONEL
+Class: Cooltrainer
+Pic: Cooltrainer M
+Gender: Male
+Music: Cool
+Items: Hyper Potion
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Manectric
+Level: 30
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+- Thunder
+- Quick Attack
+- Thunder Wave
+
+=== TRAINER_CALLIE ===
+Name: CALLIE
+Class: Battle Girl
+Pic: Battle Girl
+Gender: Female
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Meditite
+Level: 28
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Makuhita
+Level: 28
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_CALE ===
+Name: CALE
+Class: Bug Maniac
+Pic: Bug Maniac
+Gender: Male
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move
+
+Dustox
+Level: 29
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Beautifly
+Level: 29
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_MYLES ===
+Name: MYLES
+Class: Pkmn Breeder
+Pic: Pokemon Breeder M
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Makuhita
+Level: 25
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Wingull
+Level: 25
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Tropius
+Level: 25
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Zigzagoon
+Level: 25
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Electrike
+Level: 25
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Numel
+Level: 25
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_PAT ===
+Name: PAT
+Class: Pkmn Breeder
+Pic: Pokemon Breeder F
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Poochyena
+Level: 25
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Shroomish
+Level: 25
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Electrike
+Level: 25
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Marill
+Level: 25
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Sandshrew
+Level: 25
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Gulpin
+Level: 25
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_CRISTIN_1 ===
+Name: CRISTIN
+Class: Cooltrainer
+Pic: Cooltrainer F
+Gender: Female
+Music: Cool
+Items: Hyper Potion
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Loudred
+Level: 29
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+Vigoroth
+Level: 29
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_MAY_RUSTBORO_TREECKO ===
+Name: MAY
+Class: Rival
+Pic: May
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Lotad
+Level: 13
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Torchic
+Level: 15
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+=== TRAINER_MAY_RUSTBORO_TORCHIC ===
+Name: MAY
+Class: Rival
+Pic: May
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Torkoal
+Level: 13
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Mudkip
+Level: 15
+IVs: 6 HP / 6 Atk / 6 Def / 6 SpA / 6 SpD / 6 Spe
+
+=== TRAINER_ROXANNE_2 ===
+Name: ROXANNE
+Class: Leader
+Pic: Leader Roxanne
+Gender: Female
+Music: Female
+Items: Full Restore / Full Restore / Full Restore
+Double Battle: Yes
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Golem
+Level: 32
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Protect
+- Rollout
+- Magnitude
+- Explosion
+
+Kabuto @ Sitrus Berry
+Level: 35
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Swords Dance
+- Ice Beam
+- Surf
+- Rock Slide
+
+Onix
+Level: 35
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Iron Tail
+- Explosion
+- Roar
+- Rock Slide
+
+Nosepass @ Sitrus Berry
+Level: 37
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Double Team
+- Explosion
+- Protect
+- Rock Slide
+
+=== TRAINER_ROXANNE_3 ===
+Name: ROXANNE
+Class: Leader
+Pic: Leader Roxanne
+Gender: Female
+Music: Female
+Items: Full Restore / Full Restore / Full Restore
+Double Battle: Yes
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Omanyte
+Level: 37
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Protect
+- Ice Beam
+- Rock Slide
+- Surf
+
+Golem
+Level: 37
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Protect
+- Rollout
+- Magnitude
+- Explosion
+
+Kabutops @ Sitrus Berry
+Level: 40
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Swords Dance
+- Ice Beam
+- Surf
+- Rock Slide
+
+Onix
+Level: 40
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Iron Tail
+- Explosion
+- Roar
+- Rock Slide
+
+Nosepass @ Sitrus Berry
+Level: 42
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Double Team
+- Explosion
+- Protect
+- Rock Slide
+
+=== TRAINER_ROXANNE_4 ===
+Name: ROXANNE
+Class: Leader
+Pic: Leader Roxanne
+Gender: Female
+Music: Female
+Items: Full Restore / Full Restore / Full Restore
+Double Battle: Yes
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Omastar
+Level: 42
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Protect
+- Ice Beam
+- Rock Slide
+- Surf
+
+Golem
+Level: 42
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Protect
+- Rollout
+- Earthquake
+- Explosion
+
+Kabutops @ Sitrus Berry
+Level: 45
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Swords Dance
+- Ice Beam
+- Surf
+- Rock Slide
+
+Onix
+Level: 45
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Iron Tail
+- Explosion
+- Roar
+- Rock Slide
+
+Nosepass @ Sitrus Berry
+Level: 47
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Double Team
+- Explosion
+- Protect
+- Rock Slide
+
+=== TRAINER_ROXANNE_5 ===
+Name: ROXANNE
+Class: Leader
+Pic: Leader Roxanne
+Gender: Female
+Music: Female
+Items: Full Restore / Full Restore / Full Restore
+Double Battle: Yes
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Aerodactyl
+Level: 47
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Rock Slide
+- Hyper Beam
+- Supersonic
+- Protect
+
+Golem
+Level: 47
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Focus Punch
+- Rollout
+- Earthquake
+- Explosion
+
+Omastar
+Level: 47
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Protect
+- Ice Beam
+- Rock Slide
+- Surf
+
+Kabutops @ Sitrus Berry
+Level: 50
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Swords Dance
+- Ice Beam
+- Surf
+- Rock Slide
+
+Steelix
+Level: 50
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Iron Tail
+- Explosion
+- Roar
+- Rock Slide
+
+Nosepass @ Sitrus Berry
+Level: 52
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Double Team
+- Explosion
+- Protect
+- Rock Slide
+
+=== TRAINER_BRAWLY_2 ===
+Name: BRAWLY
+Class: Leader
+Pic: Leader Brawly
+Gender: Male
+Music: Male
+Items: Full Restore / Full Restore / Full Restore
+Double Battle: Yes
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Machamp @ Sitrus Berry
+Level: 33
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Karate Chop
+- Rock Slide
+- Focus Punch
+- Bulk Up
+
+Meditite
+Level: 33
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Psychic
+- Light Screen
+- Reflect
+- Focus Punch
+
+Hitmontop
+Level: 35
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Pursuit
+- Counter
+- Protect
+- Triple Kick
+
+Hariyama @ Sitrus Berry
+Level: 37
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Fake Out
+- Focus Punch
+- Belly Drum
+- Earthquake
+
+=== TRAINER_BRAWLY_3 ===
+Name: BRAWLY
+Class: Leader
+Pic: Leader Brawly
+Gender: Male
+Music: Male
+Items: Full Restore / Full Restore / Full Restore
+Double Battle: Yes
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Machamp @ Sitrus Berry
+Level: 38
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Karate Chop
+- Rock Slide
+- Focus Punch
+- Bulk Up
+
+Medicham
+Level: 38
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Psychic
+- Light Screen
+- Reflect
+- Focus Punch
+
+Hitmontop
+Level: 40
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Pursuit
+- Counter
+- Protect
+- Triple Kick
+
+Hariyama @ Sitrus Berry
+Level: 42
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Fake Out
+- Focus Punch
+- Belly Drum
+- Earthquake
+
+=== TRAINER_BRAWLY_4 ===
+Name: BRAWLY
+Class: Leader
+Pic: Leader Brawly
+Gender: Male
+Music: Male
+Items: Full Restore / Full Restore / Full Restore
+Double Battle: Yes
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Hitmonchan
+Level: 40
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Sky Uppercut
+- Protect
+- Fire Punch
+- Ice Punch
+
+Machamp @ Sitrus Berry
+Level: 43
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Karate Chop
+- Rock Slide
+- Focus Punch
+- Bulk Up
+
+Medicham
+Level: 43
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Focus Punch
+- Light Screen
+- Reflect
+- Psychic
+
+Hitmontop
+Level: 45
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Pursuit
+- Counter
+- Protect
+- Triple Kick
+
+Hariyama @ Sitrus Berry
+Level: 47
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Fake Out
+- Focus Punch
+- Belly Drum
+- Earthquake
+
+=== TRAINER_BRAWLY_5 ===
+Name: BRAWLY
+Class: Leader
+Pic: Leader Brawly
+Gender: Male
+Music: Male
+Items: Full Restore / Full Restore / Full Restore
+Double Battle: Yes
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Hitmonlee
+Level: 46
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Mega Kick
+- Focus Punch
+- Earthquake
+- Bulk Up
+
+Hitmonchan
+Level: 46
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Sky Uppercut
+- Protect
+- Fire Punch
+- Ice Punch
+
+Machamp @ Sitrus Berry
+Level: 48
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Cross Chop
+- Rock Slide
+- Focus Punch
+- Bulk Up
+
+Medicham
+Level: 48
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Focus Punch
+- Light Screen
+- Reflect
+- Psychic
+
+Hitmontop
+Level: 50
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Pursuit
+- Counter
+- Protect
+- Triple Kick
+
+Hariyama @ Sitrus Berry
+Level: 52
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Fake Out
+- Focus Punch
+- Belly Drum
+- Earthquake
+
+=== TRAINER_WATTSON_2 ===
+Name: WATTSON
+Class: Leader
+Pic: Leader Wattson
+Gender: Male
+Music: Male
+Items: Full Restore / Full Restore / Full Restore
+Double Battle: Yes
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Mareep
+Level: 36
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Thunder
+- Protect
+- Thunder Wave
+- Light Screen
+
+Electrode
+Level: 36
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Rollout
+- Thunder
+- Explosion
+- Rain Dance
+
+Magneton @ Sitrus Berry
+Level: 38
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Supersonic
+- Protect
+- Thunder
+- Rain Dance
+
+Manectric @ Sitrus Berry
+Level: 40
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Bite
+- Thunder Wave
+- Thunder
+- Protect
+
+=== TRAINER_WATTSON_3 ===
+Name: WATTSON
+Class: Leader
+Pic: Leader Wattson
+Gender: Male
+Music: Male
+Items: Full Restore / Full Restore / Full Restore
+Double Battle: Yes
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Pikachu
+Level: 39
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Thunder
+- Slam
+- Rain Dance
+- Shock Wave
+
+Flaaffy
+Level: 41
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Thunder
+- Protect
+- Thunder Wave
+- Light Screen
+
+Electrode
+Level: 41
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Rollout
+- Thunder
+- Explosion
+- Rain Dance
+
+Magneton @ Sitrus Berry
+Level: 43
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Supersonic
+- Protect
+- Thunder
+- Rain Dance
+
+Manectric @ Sitrus Berry
+Level: 45
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Bite
+- Thunder Wave
+- Thunder
+- Protect
+
+=== TRAINER_WATTSON_4 ===
+Name: WATTSON
+Class: Leader
+Pic: Leader Wattson
+Gender: Male
+Music: Male
+Items: Full Restore / Full Restore / Full Restore
+Double Battle: Yes
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Raichu
+Level: 44
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Thunder
+- Slam
+- Rain Dance
+- Protect
+
+Ampharos
+Level: 46
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Thunder
+- Protect
+- Thunder Wave
+- Light Screen
+
+Electrode
+Level: 46
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Rollout
+- Thunder
+- Explosion
+- Rain Dance
+
+Magneton @ Sitrus Berry
+Level: 48
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Supersonic
+- Protect
+- Thunder
+- Rain Dance
+
+Manectric @ Sitrus Berry
+Level: 50
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Bite
+- Thunder Wave
+- Thunder
+- Protect
+
+=== TRAINER_WATTSON_5 ===
+Name: WATTSON
+Class: Leader
+Pic: Leader Wattson
+Gender: Male
+Music: Male
+Items: Full Restore / Full Restore / Full Restore
+Double Battle: Yes
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Electabuzz
+Level: 50
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Swift
+- Focus Punch
+- Thunder Punch
+- Light Screen
+
+Raichu
+Level: 51
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Thunder
+- Slam
+- Rain Dance
+- Protect
+
+Ampharos
+Level: 51
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Thunder
+- Protect
+- Thunder Wave
+- Light Screen
+
+Electrode
+Level: 53
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Rollout
+- Thunder
+- Explosion
+- Rain Dance
+
+Magneton @ Sitrus Berry
+Level: 53
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Supersonic
+- Protect
+- Thunder
+- Rain Dance
+
+Manectric @ Sitrus Berry
+Level: 55
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Bite
+- Thunder Wave
+- Thunder
+- Protect
+
+=== TRAINER_FLANNERY_2 ===
+Name: FLANNERY
+Class: Leader
+Pic: Leader Flannery
+Gender: Female
+Music: Female
+Items: Full Restore / Full Restore / Full Restore
+Double Battle: Yes
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Magcargo @ White Herb
+Level: 38
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Overheat
+- Attract
+- Light Screen
+- Rock Slide
+
+Ponyta
+Level: 36
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Flamethrower
+- Attract
+- Solar Beam
+- Bounce
+
+Camerupt @ White Herb
+Level: 38
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Overheat
+- Sunny Day
+- Earthquake
+- Attract
+
+Torkoal @ White Herb
+Level: 40
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Overheat
+- Sunny Day
+- Explosion
+- Attract
+
+=== TRAINER_FLANNERY_3 ===
+Name: FLANNERY
+Class: Leader
+Pic: Leader Flannery
+Gender: Female
+Music: Female
+Items: Full Restore / Full Restore / Full Restore
+Double Battle: Yes
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Growlithe
+Level: 41
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Helping Hand
+- Flamethrower
+- Roar
+- Sunny Day
+
+Magcargo @ White Herb
+Level: 43
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Overheat
+- Attract
+- Light Screen
+- Rock Slide
+
+Ponyta
+Level: 41
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Flamethrower
+- Attract
+- Solar Beam
+- Bounce
+
+Camerupt @ White Herb
+Level: 43
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Overheat
+- Sunny Day
+- Earthquake
+- Attract
+
+Torkoal @ White Herb
+Level: 45
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Overheat
+- Sunny Day
+- Explosion
+- Attract
+
+=== TRAINER_FLANNERY_4 ===
+Name: FLANNERY
+Class: Leader
+Pic: Leader Flannery
+Gender: Female
+Music: Female
+Items: Full Restore / Full Restore / Full Restore
+Double Battle: Yes
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Houndour
+Level: 46
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Roar
+- Solar Beam
+- Taunt
+- Sunny Day
+
+Growlithe
+Level: 46
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Helping Hand
+- Flamethrower
+- Sunny Day
+- Roar
+
+Magcargo @ White Herb
+Level: 48
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Overheat
+- Attract
+- Light Screen
+- Rock Slide
+
+Rapidash
+Level: 46
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Flamethrower
+- Attract
+- Solar Beam
+- Bounce
+
+Camerupt @ White Herb
+Level: 48
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Overheat
+- Sunny Day
+- Earthquake
+- Attract
+
+Torkoal @ White Herb
+Level: 50
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Overheat
+- Sunny Day
+- Explosion
+- Attract
+
+=== TRAINER_FLANNERY_5 ===
+Name: FLANNERY
+Class: Leader
+Pic: Leader Flannery
+Gender: Female
+Music: Female
+Items: Full Restore / Full Restore / Full Restore
+Double Battle: Yes
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Arcanine
+Level: 51
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Helping Hand
+- Flamethrower
+- Sunny Day
+- Roar
+
+Magcargo @ White Herb
+Level: 53
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Overheat
+- Attract
+- Light Screen
+- Rock Slide
+
+Houndoom
+Level: 51
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Roar
+- Solar Beam
+- Taunt
+- Sunny Day
+
+Rapidash
+Level: 51
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Flamethrower
+- Attract
+- Solar Beam
+- Bounce
+
+Camerupt @ White Herb
+Level: 53
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Overheat
+- Sunny Day
+- Earthquake
+- Attract
+
+Torkoal @ White Herb
+Level: 55
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Overheat
+- Sunny Day
+- Explosion
+- Attract
+
+=== TRAINER_NORMAN_2 ===
+Name: NORMAN
+Class: Leader
+Pic: Leader Norman
+Gender: Male
+Music: Male
+Items: Full Restore / Full Restore / Full Restore
+Double Battle: Yes
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Chansey
+Level: 42
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Light Screen
+- Sing
+- Skill Swap
+- Focus Punch
+
+Slaking @ Sitrus Berry
+Level: 42
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Blizzard
+- Shadow Ball
+- Double Edge
+- Fire Blast
+
+Spinda
+Level: 43
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Teeter Dance
+- Skill Swap
+- Facade
+- Hypnosis
+
+Slaking @ Sitrus Berry
+Level: 45
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Hyper Beam
+- Flamethrower
+- Thunderbolt
+- Shadow Ball
+
+=== TRAINER_NORMAN_3 ===
+Name: NORMAN
+Class: Leader
+Pic: Leader Norman
+Gender: Male
+Music: Male
+Items: Full Restore / Full Restore / Full Restore
+Double Battle: Yes
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Slaking @ Sitrus Berry
+Level: 47
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Blizzard
+- Shadow Ball
+- Double Edge
+- Fire Blast
+
+Chansey
+Level: 47
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Light Screen
+- Sing
+- Skill Swap
+- Focus Punch
+
+Kangaskhan
+Level: 45
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Fake Out
+- Dizzy Punch
+- Endure
+- Reversal
+
+Spinda
+Level: 48
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Teeter Dance
+- Skill Swap
+- Facade
+- Hypnosis
+
+Slaking @ Sitrus Berry
+Level: 50
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Hyper Beam
+- Flamethrower
+- Thunderbolt
+- Shadow Ball
+
+=== TRAINER_NORMAN_4 ===
+Name: NORMAN
+Class: Leader
+Pic: Leader Norman
+Gender: Male
+Music: Male
+Items: Full Restore / Full Restore / Full Restore
+Double Battle: Yes
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Slaking @ Sitrus Berry
+Level: 52
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Blizzard
+- Shadow Ball
+- Double Edge
+- Fire Blast
+
+Blissey
+Level: 52
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Light Screen
+- Sing
+- Skill Swap
+- Focus Punch
+
+Kangaskhan
+Level: 50
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Fake Out
+- Dizzy Punch
+- Endure
+- Reversal
+
+Spinda
+Level: 53
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Teeter Dance
+- Skill Swap
+- Facade
+- Hypnosis
+
+Slaking @ Sitrus Berry
+Level: 55
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Hyper Beam
+- Flamethrower
+- Thunderbolt
+- Shadow Ball
+
+=== TRAINER_NORMAN_5 ===
+Name: NORMAN
+Class: Leader
+Pic: Leader Norman
+Gender: Male
+Music: Male
+Items: Full Restore / Full Restore / Full Restore
+Double Battle: Yes
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Slaking @ Sitrus Berry
+Level: 57
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Blizzard
+- Shadow Ball
+- Double Edge
+- Fire Blast
+
+Blissey
+Level: 57
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Protect
+- Sing
+- Skill Swap
+- Focus Punch
+
+Kangaskhan
+Level: 55
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Fake Out
+- Dizzy Punch
+- Endure
+- Reversal
+
+Tauros
+Level: 57
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Take Down
+- Protect
+- Fire Blast
+- Earthquake
+
+Spinda
+Level: 58
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Teeter Dance
+- Skill Swap
+- Facade
+- Hypnosis
+
+Slaking @ Sitrus Berry
+Level: 60
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Hyper Beam
+- Flamethrower
+- Thunderbolt
+- Shadow Ball
+
+=== TRAINER_WINONA_2 ===
+Name: WINONA
+Class: Leader
+Pic: Leader Winona
+Gender: Female
+Music: Female
+Items: Full Restore / Full Restore / Full Restore
+Double Battle: Yes
+AI: Check Bad Move / Try To Faint / Check Viability / Risky
+
+Dratini @ Sitrus Berry
+Level: 40
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Thunder Wave
+- Thunderbolt
+- Protect
+- Ice Beam
+
+Tropius
+Level: 38
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Sunny Day
+- Aerial Ace
+- Solar Beam
+- Earthquake
+
+Pelipper
+Level: 41
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Surf
+- Supersonic
+- Protect
+- Aerial Ace
+
+Skarmory
+Level: 43
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Whirlwind
+- Spikes
+- Steel Wing
+- Aerial Ace
+
+Altaria @ Chesto Berry
+Level: 45
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Aerial Ace
+- Rest
+- Dragon Dance
+- Earthquake
+
+=== TRAINER_WINONA_3 ===
+Name: WINONA
+Class: Leader
+Pic: Leader Winona
+Gender: Female
+Music: Female
+Items: Full Restore / Full Restore / Full Restore
+Double Battle: Yes
+AI: Check Bad Move / Try To Faint / Check Viability / Risky
+
+Hoothoot
+Level: 43
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Hypnosis
+- Psychic
+- Reflect
+- Dream Eater
+
+Tropius
+Level: 43
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Sunny Day
+- Aerial Ace
+- Solar Beam
+- Earthquake
+
+Dragonair @ Sitrus Berry
+Level: 45
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Thunder Wave
+- Thunderbolt
+- Protect
+- Ice Beam
+
+Pelipper
+Level: 46
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Surf
+- Supersonic
+- Protect
+- Aerial Ace
+
+Skarmory
+Level: 48
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Whirlwind
+- Spikes
+- Steel Wing
+- Aerial Ace
+
+Altaria @ Chesto Berry
+Level: 50
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Aerial Ace
+- Rest
+- Dragon Dance
+- Earthquake
+
+=== TRAINER_WINONA_4 ===
+Name: WINONA
+Class: Leader
+Pic: Leader Winona
+Gender: Female
+Music: Female
+Items: Full Restore / Full Restore / Full Restore
+Double Battle: Yes
+AI: Check Bad Move / Try To Faint / Check Viability / Risky
+
+Noctowl
+Level: 48
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Hypnosis
+- Psychic
+- Reflect
+- Dream Eater
+
+Tropius
+Level: 49
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Sunny Day
+- Aerial Ace
+- Solar Beam
+- Earthquake
+
+Dragonair @ Sitrus Berry
+Level: 50
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Thunder Wave
+- Thunderbolt
+- Protect
+- Ice Beam
+
+Pelipper
+Level: 51
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Surf
+- Supersonic
+- Protect
+- Aerial Ace
+
+Skarmory
+Level: 53
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Whirlwind
+- Spikes
+- Steel Wing
+- Aerial Ace
+
+Altaria @ Chesto Berry
+Level: 55
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Aerial Ace
+- Rest
+- Dragon Dance
+- Earthquake
+
+=== TRAINER_WINONA_5 ===
+Name: WINONA
+Class: Leader
+Pic: Leader Winona
+Gender: Female
+Music: Female
+Items: Full Restore / Full Restore / Full Restore
+Double Battle: Yes
+AI: Check Bad Move / Try To Faint / Check Viability / Risky
+
+Noctowl
+Level: 53
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Hypnosis
+- Psychic
+- Reflect
+- Dream Eater
+
+Tropius
+Level: 54
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Sunny Day
+- Aerial Ace
+- Solar Beam
+- Earthquake
+
+Pelipper
+Level: 55
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Surf
+- Supersonic
+- Protect
+- Aerial Ace
+
+Dragonite @ Sitrus Berry
+Level: 55
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Hyper Beam
+- Thunderbolt
+- Earthquake
+- Ice Beam
+
+Skarmory
+Level: 58
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Whirlwind
+- Spikes
+- Steel Wing
+- Aerial Ace
+
+Altaria @ Chesto Berry
+Level: 60
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Sky Attack
+- Rest
+- Dragon Dance
+- Earthquake
+
+=== TRAINER_TATE_AND_LIZA_2 ===
+Name: TATE&LIZA
+Class: Leader
+Pic: Leader Tate And Liza
+Gender: Male
+Music: Female
+Items: Full Restore / Full Restore / Full Restore
+Double Battle: Yes
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Slowpoke
+Level: 48
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Yawn
+- Psychic
+- Calm Mind
+- Protect
+
+Claydol
+Level: 49
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Earthquake
+- Ancient Power
+- Psychic
+- Light Screen
+
+Xatu @ Chesto Berry
+Level: 49
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Psychic
+- Rest
+- Confuse Ray
+- Calm Mind
+
+Lunatone @ Chesto Berry
+Level: 50
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Earthquake
+- Psychic
+- Rest
+- Calm Mind
+
+Solrock @ Sitrus Berry
+Level: 50
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Sunny Day
+- Solar Beam
+- Psychic
+- Flamethrower
+
+=== TRAINER_TATE_AND_LIZA_3 ===
+Name: TATE&LIZA
+Class: Leader
+Pic: Leader Tate And Liza
+Gender: Male
+Music: Female
+Items: Full Restore / Full Restore / Full Restore
+Double Battle: Yes
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Drowzee
+Level: 53
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Hypnosis
+- Dream Eater
+- Headbutt
+- Protect
+
+Slowpoke
+Level: 53
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Yawn
+- Psychic
+- Calm Mind
+- Protect
+
+Claydol
+Level: 54
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Earthquake
+- Explosion
+- Psychic
+- Light Screen
+
+Xatu @ Chesto Berry
+Level: 54
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Psychic
+- Rest
+- Confuse Ray
+- Calm Mind
+
+Lunatone @ Chesto Berry
+Level: 55
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Earthquake
+- Psychic
+- Rest
+- Calm Mind
+
+Solrock @ Sitrus Berry
+Level: 55
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Sunny Day
+- Solar Beam
+- Psychic
+- Flamethrower
+
+=== TRAINER_TATE_AND_LIZA_4 ===
+Name: TATE&LIZA
+Class: Leader
+Pic: Leader Tate And Liza
+Gender: Male
+Music: Female
+Items: Full Restore / Full Restore / Full Restore
+Double Battle: Yes
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Hypno
+Level: 58
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Hypnosis
+- Dream Eater
+- Headbutt
+- Protect
+
+Claydol
+Level: 59
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Earthquake
+- Explosion
+- Psychic
+- Light Screen
+
+Slowpoke
+Level: 58
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Yawn
+- Psychic
+- Calm Mind
+- Protect
+
+Xatu @ Chesto Berry
+Level: 59
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Psychic
+- Rest
+- Confuse Ray
+- Calm Mind
+
+Lunatone @ Chesto Berry
+Level: 60
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Earthquake
+- Psychic
+- Rest
+- Calm Mind
+
+Solrock @ Sitrus Berry
+Level: 60
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Sunny Day
+- Solar Beam
+- Psychic
+- Flamethrower
+
+=== TRAINER_TATE_AND_LIZA_5 ===
+Name: TATE&LIZA
+Class: Leader
+Pic: Leader Tate And Liza
+Gender: Male
+Music: Female
+Items: Full Restore / Full Restore / Full Restore
+Double Battle: Yes
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Hypno
+Level: 63
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Hypnosis
+- Dream Eater
+- Headbutt
+- Protect
+
+Claydol
+Level: 64
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Earthquake
+- Explosion
+- Psychic
+- Light Screen
+
+Slowking
+Level: 63
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Yawn
+- Psychic
+- Calm Mind
+- Protect
+
+Xatu @ Chesto Berry
+Level: 64
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Psychic
+- Rest
+- Confuse Ray
+- Calm Mind
+
+Lunatone @ Chesto Berry
+Level: 65
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Earthquake
+- Psychic
+- Rest
+- Calm Mind
+
+Solrock @ Sitrus Berry
+Level: 65
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Sunny Day
+- Solar Beam
+- Psychic
+- Flamethrower
+
+=== TRAINER_JUAN_2 ===
+Name: JUAN
+Class: Leader
+Pic: Leader Juan
+Gender: Male
+Music: Male
+Items: Full Restore / Full Restore / Full Restore
+Double Battle: Yes
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Poliwag
+Level: 46
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Hypnosis
+- Rain Dance
+- Protect
+- Hydro Pump
+
+Whiscash
+Level: 46
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Rain Dance
+- Water Pulse
+- Double Team
+- Fissure
+
+Walrein
+Level: 48
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Water Pulse
+- Body Slam
+- Protect
+- Ice Beam
+
+Crawdaunt @ Chesto Berry
+Level: 48
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Rest
+- Crabhammer
+- Taunt
+- Double Team
+
+Kingdra @ Chesto Berry
+Level: 51
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Water Pulse
+- Double Team
+- Ice Beam
+- Rest
+
+=== TRAINER_JUAN_3 ===
+Name: JUAN
+Class: Leader
+Pic: Leader Juan
+Gender: Male
+Music: Male
+Items: Full Restore / Full Restore / Full Restore
+Double Battle: Yes
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Poliwhirl
+Level: 50
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Hypnosis
+- Rain Dance
+- Protect
+- Hydro Pump
+
+Whiscash
+Level: 51
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Rain Dance
+- Water Pulse
+- Double Team
+- Fissure
+
+Walrein
+Level: 53
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Water Pulse
+- Body Slam
+- Protect
+- Ice Beam
+
+Crawdaunt @ Chesto Berry
+Level: 53
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Rest
+- Guillotine
+- Taunt
+- Double Team
+
+Kingdra @ Chesto Berry
+Level: 56
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Water Pulse
+- Double Team
+- Ice Beam
+- Rest
+
+=== TRAINER_JUAN_4 ===
+Name: JUAN
+Class: Leader
+Pic: Leader Juan
+Gender: Male
+Music: Male
+Items: Full Restore / Full Restore / Full Restore
+Double Battle: Yes
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Lapras
+Level: 56
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Hydro Pump
+- Perish Song
+- Ice Beam
+- Confuse Ray
+
+Whiscash
+Level: 58
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Rain Dance
+- Water Pulse
+- Double Team
+- Fissure
+
+Poliwhirl
+Level: 56
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Hypnosis
+- Rain Dance
+- Protect
+- Hydro Pump
+
+Walrein
+Level: 58
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Water Pulse
+- Body Slam
+- Protect
+- Ice Beam
+
+Crawdaunt @ Chesto Berry
+Level: 58
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Rest
+- Guillotine
+- Taunt
+- Double Team
+
+Kingdra @ Chesto Berry
+Level: 61
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Water Pulse
+- Double Team
+- Ice Beam
+- Rest
+
+=== TRAINER_JUAN_5 ===
+Name: JUAN
+Class: Leader
+Pic: Leader Juan
+Gender: Male
+Music: Male
+Items: Full Restore / Full Restore / Full Restore
+Double Battle: Yes
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Lapras
+Level: 61
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Hydro Pump
+- Perish Song
+- Ice Beam
+- Confuse Ray
+
+Whiscash
+Level: 63
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Rain Dance
+- Water Pulse
+- Double Team
+- Fissure
+
+Politoed
+Level: 61
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Hypnosis
+- Rain Dance
+- Hydro Pump
+- Perish Song
+
+Walrein
+Level: 63
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Water Pulse
+- Body Slam
+- Protect
+- Sheer Cold
+
+Crawdaunt @ Chesto Berry
+Level: 63
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Rest
+- Guillotine
+- Taunt
+- Double Team
+
+Kingdra @ Chesto Berry
+Level: 66
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Water Pulse
+- Double Team
+- Ice Beam
+- Rest
+
+=== TRAINER_ANGELO ===
+Name: ANGELO
+Class: Bug Maniac
+Pic: Bug Maniac
+Gender: Male
+Music: Suspicious
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Illumise
+Level: 17
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+- Shock Wave
+- Quick Attack
+- Charm
+
+Volbeat
+Level: 17
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+- Shock Wave
+- Quick Attack
+- Confuse Ray
+
+=== TRAINER_DARIUS ===
+Name: DARIUS
+Class: Bird Keeper
+Pic: Bird Keeper
+Gender: Male
+Music: Cool
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Tropius
+Level: 30
+IVs: 24 HP / 24 Atk / 24 Def / 24 SpA / 24 SpD / 24 Spe
+
+=== TRAINER_STEVEN ===
+Name: STEVEN
+Class: Rival
+Pic: Steven
+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
+
+Skarmory
+Level: 77
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Toxic
+- Aerial Ace
+- Spikes
+- Steel Wing
+
+Claydol
+Level: 75
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Reflect
+- Light Screen
+- Ancient Power
+- Earthquake
+
+Aggron
+Level: 76
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Thunder
+- Earthquake
+- Solar Beam
+- Dragon Claw
+
+Cradily
+Level: 76
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Giga Drain
+- Ancient Power
+- Ingrain
+- Confuse Ray
+
+Armaldo
+Level: 76
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Water Pulse
+- Ancient Power
+- Aerial Ace
+- Slash
+
+Metagross @ Sitrus Berry
+Level: 78
+IVs: 31 HP / 31 Atk / 31 Def / 31 SpA / 31 SpD / 31 Spe
+- Earthquake
+- Psychic
+- Meteor Mash
+- Shadow Ball
+
+=== TRAINER_ANABEL ===
+Name: ANABEL
+Class: Salon Maiden
+Pic: Salon Maiden Anabel
+Gender: Female
+Music: Male
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Beldum
+Level: 5
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_TUCKER ===
+Name: TUCKER
+Class: Dome Ace
+Pic: Dome Ace Tucker
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Beldum
+Level: 5
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_SPENSER ===
+Name: SPENSER
+Class: Palace Maven
+Pic: Palace Maven Spenser
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Beldum
+Level: 5
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_GRETA ===
+Name: GRETA
+Class: Arena Tycoon
+Pic: Arena Tycoon Greta
+Gender: Female
+Music: Male
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Beldum
+Level: 5
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_NOLAND ===
+Name: NOLAND
+Class: Factory Head
+Pic: Factory Head Noland
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Beldum
+Level: 5
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_LUCY ===
+Name: LUCY
+Class: Pike Queen
+Pic: Pike Queen Lucy
+Gender: Female
+Music: Male
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Beldum
+Level: 5
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_BRANDON ===
+Name: BRANDON
+Class: Pyramid King
+Pic: Pyramid King Brandon
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Beldum
+Level: 5
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_ANDRES_2 ===
+Name: ANDRES
+Class: Ruin Maniac
+Pic: Ruin Maniac
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Sandshrew
+Level: 31
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Sandshrew
+Level: 31
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_ANDRES_3 ===
+Name: ANDRES
+Class: Ruin Maniac
+Pic: Ruin Maniac
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Nosepass
+Level: 33
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Sandshrew
+Level: 33
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Sandshrew
+Level: 33
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+=== TRAINER_ANDRES_4 ===
+Name: ANDRES
+Class: Ruin Maniac
+Pic: Ruin Maniac
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Nosepass
+Level: 35
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Sandshrew
+Level: 35
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Sandshrew
+Level: 35
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+=== TRAINER_ANDRES_5 ===
+Name: ANDRES
+Class: Ruin Maniac
+Pic: Ruin Maniac
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move
+
+Nosepass
+Level: 37
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Sandslash
+Level: 37
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Sandslash
+Level: 37
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+=== TRAINER_CORY_2 ===
+Name: CORY
+Class: Sailor
+Pic: Sailor
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Wingull
+Level: 30
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Machop
+Level: 30
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Tentacool
+Level: 30
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_CORY_3 ===
+Name: CORY
+Class: Sailor
+Pic: Sailor
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Pelipper
+Level: 32
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Machop
+Level: 32
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Tentacool
+Level: 32
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+=== TRAINER_CORY_4 ===
+Name: CORY
+Class: Sailor
+Pic: Sailor
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Pelipper
+Level: 34
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Machop
+Level: 34
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Tentacruel
+Level: 34
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+=== TRAINER_CORY_5 ===
+Name: CORY
+Class: Sailor
+Pic: Sailor
+Gender: Male
+Music: Male
+Double Battle: No
+AI: Check Bad Move
+
+Pelipper
+Level: 36
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Machoke
+Level: 36
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Tentacruel
+Level: 36
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+=== TRAINER_PABLO_2 ===
+Name: PABLO
+Class: Triathlete
+Pic: Swimming Triathlete M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Staryu
+Level: 37
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Staryu
+Level: 37
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_PABLO_3 ===
+Name: PABLO
+Class: Triathlete
+Pic: Swimming Triathlete M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Wingull
+Level: 39
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Staryu
+Level: 39
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Staryu
+Level: 39
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+=== TRAINER_PABLO_4 ===
+Name: PABLO
+Class: Triathlete
+Pic: Swimming Triathlete M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Pelipper
+Level: 41
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Staryu
+Level: 41
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Staryu
+Level: 41
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+=== TRAINER_PABLO_5 ===
+Name: PABLO
+Class: Triathlete
+Pic: Swimming Triathlete M
+Gender: Male
+Music: Swimmer
+Double Battle: No
+AI: Check Bad Move
+
+Pelipper
+Level: 43
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Starmie
+Level: 43
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Starmie
+Level: 43
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+=== TRAINER_KOJI_2 ===
+Name: KOJI
+Class: Black Belt
+Pic: Black Belt
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Machoke
+Level: 37
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Machoke
+Level: 37
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_KOJI_3 ===
+Name: KOJI
+Class: Black Belt
+Pic: Black Belt
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Makuhita
+Level: 39
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Machoke
+Level: 39
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Machoke
+Level: 39
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+=== TRAINER_KOJI_4 ===
+Name: KOJI
+Class: Black Belt
+Pic: Black Belt
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Hariyama
+Level: 41
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Machoke
+Level: 41
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Machoke
+Level: 41
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+=== TRAINER_KOJI_5 ===
+Name: KOJI
+Class: Black Belt
+Pic: Black Belt
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Hariyama
+Level: 43
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Machamp
+Level: 43
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Machamp
+Level: 43
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+=== TRAINER_CRISTIN_2 ===
+Name: CRISTIN
+Class: Cooltrainer
+Pic: Cooltrainer F
+Gender: Female
+Music: Cool
+Items: Hyper Potion
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Loudred
+Level: 35
+IVs: 13 HP / 13 Atk / 13 Def / 13 SpA / 13 SpD / 13 Spe
+
+Vigoroth
+Level: 35
+IVs: 13 HP / 13 Atk / 13 Def / 13 SpA / 13 SpD / 13 Spe
+
+=== TRAINER_CRISTIN_3 ===
+Name: CRISTIN
+Class: Cooltrainer
+Pic: Cooltrainer F
+Gender: Female
+Music: Cool
+Items: Hyper Potion
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Spinda
+Level: 37
+IVs: 14 HP / 14 Atk / 14 Def / 14 SpA / 14 SpD / 14 Spe
+
+Loudred
+Level: 37
+IVs: 14 HP / 14 Atk / 14 Def / 14 SpA / 14 SpD / 14 Spe
+
+Vigoroth
+Level: 37
+IVs: 14 HP / 14 Atk / 14 Def / 14 SpA / 14 SpD / 14 Spe
+
+=== TRAINER_CRISTIN_4 ===
+Name: CRISTIN
+Class: Cooltrainer
+Pic: Cooltrainer F
+Gender: Female
+Music: Cool
+Items: Hyper Potion
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Spinda
+Level: 39
+IVs: 15 HP / 15 Atk / 15 Def / 15 SpA / 15 SpD / 15 Spe
+
+Loudred
+Level: 39
+IVs: 15 HP / 15 Atk / 15 Def / 15 SpA / 15 SpD / 15 Spe
+
+Vigoroth
+Level: 39
+IVs: 12 HP / 12 Atk / 12 Def / 12 SpA / 12 SpD / 12 Spe
+
+=== TRAINER_CRISTIN_5 ===
+Name: CRISTIN
+Class: Cooltrainer
+Pic: Cooltrainer F
+Gender: Female
+Music: Cool
+Items: Hyper Potion
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Spinda
+Level: 41
+IVs: 17 HP / 17 Atk / 17 Def / 17 SpA / 17 SpD / 17 Spe
+
+Exploud
+Level: 41
+IVs: 17 HP / 17 Atk / 17 Def / 17 SpA / 17 SpD / 17 Spe
+
+Slaking
+Level: 41
+IVs: 17 HP / 17 Atk / 17 Def / 17 SpA / 17 SpD / 17 Spe
+
+=== TRAINER_FERNANDO_2 ===
+Name: FERNANDO
+Class: Guitarist
+Pic: Guitarist
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Electrike
+Level: 35
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Electrike
+Level: 35
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Loudred
+Level: 35
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_FERNANDO_3 ===
+Name: FERNANDO
+Class: Guitarist
+Pic: Guitarist
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Electrike
+Level: 37
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Manectric
+Level: 37
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Loudred
+Level: 37
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+=== TRAINER_FERNANDO_4 ===
+Name: FERNANDO
+Class: Guitarist
+Pic: Guitarist
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Manectric
+Level: 39
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Manectric
+Level: 39
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Loudred
+Level: 39
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+=== TRAINER_FERNANDO_5 ===
+Name: FERNANDO
+Class: Guitarist
+Pic: Guitarist
+Gender: Male
+Music: Intense
+Double Battle: No
+AI: Check Bad Move
+
+Manectric
+Level: 41
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Manectric
+Level: 41
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Exploud
+Level: 41
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+=== TRAINER_SAWYER_2 ===
+Name: SAWYER
+Class: Hiker
+Pic: Hiker
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Geodude
+Level: 26
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Numel
+Level: 26
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_SAWYER_3 ===
+Name: SAWYER
+Class: Hiker
+Pic: Hiker
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Machop
+Level: 28
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Numel
+Level: 28
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Graveler
+Level: 28
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+=== TRAINER_SAWYER_4 ===
+Name: SAWYER
+Class: Hiker
+Pic: Hiker
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Machop
+Level: 30
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Numel
+Level: 30
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Graveler
+Level: 30
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+=== TRAINER_SAWYER_5 ===
+Name: SAWYER
+Class: Hiker
+Pic: Hiker
+Gender: Male
+Music: Hiker
+Double Battle: No
+AI: Check Bad Move / Try To Faint / Check Viability
+
+Machoke
+Level: 33
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Camerupt
+Level: 33
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Golem
+Level: 33
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+=== TRAINER_GABRIELLE_2 ===
+Name: GABRIELLE
+Class: Pkmn Breeder
+Pic: Pokemon Breeder F
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Skitty
+Level: 31
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Mightyena
+Level: 31
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Zigzagoon
+Level: 31
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Lotad
+Level: 31
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Seedot
+Level: 31
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Taillow
+Level: 31
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_GABRIELLE_3 ===
+Name: GABRIELLE
+Class: Pkmn Breeder
+Pic: Pokemon Breeder F
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Skitty
+Level: 33
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Mightyena
+Level: 33
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Linoone
+Level: 33
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Lombre
+Level: 33
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Nuzleaf
+Level: 33
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Taillow
+Level: 33
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+=== TRAINER_GABRIELLE_4 ===
+Name: GABRIELLE
+Class: Pkmn Breeder
+Pic: Pokemon Breeder F
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Delcatty
+Level: 35
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Mightyena
+Level: 35
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Linoone
+Level: 35
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Lombre
+Level: 35
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Nuzleaf
+Level: 35
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Swellow
+Level: 35
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+=== TRAINER_GABRIELLE_5 ===
+Name: GABRIELLE
+Class: Pkmn Breeder
+Pic: Pokemon Breeder F
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Delcatty
+Level: 37
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Mightyena
+Level: 37
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Linoone
+Level: 37
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Ludicolo
+Level: 37
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Shiftry
+Level: 37
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Swellow
+Level: 37
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+=== TRAINER_THALIA_2 ===
+Name: THALIA
+Class: Beauty
+Pic: Beauty
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Wailmer
+Level: 34
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+Horsea
+Level: 34
+IVs: 1 HP / 1 Atk / 1 Def / 1 SpA / 1 SpD / 1 Spe
+
+=== TRAINER_THALIA_3 ===
+Name: THALIA
+Class: Beauty
+Pic: Beauty
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Luvdisc
+Level: 36
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Wailmer
+Level: 36
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+Seadra
+Level: 36
+IVs: 2 HP / 2 Atk / 2 Def / 2 SpA / 2 SpD / 2 Spe
+
+=== TRAINER_THALIA_4 ===
+Name: THALIA
+Class: Beauty
+Pic: Beauty
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Luvdisc
+Level: 38
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Wailmer
+Level: 38
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+Seadra
+Level: 38
+IVs: 3 HP / 3 Atk / 3 Def / 3 SpA / 3 SpD / 3 Spe
+
+=== TRAINER_THALIA_5 ===
+Name: THALIA
+Class: Beauty
+Pic: Beauty
+Gender: Female
+Music: Female
+Double Battle: No
+AI: Check Bad Move
+
+Luvdisc
+Level: 40
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Wailord
+Level: 40
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+Kingdra
+Level: 40
+IVs: 4 HP / 4 Atk / 4 Def / 4 SpA / 4 SpD / 4 Spe
+
+=== TRAINER_MARIELA ===
+Name: MARIELA
+Class: Psychic
+Pic: Psychic F
+Gender: Female
+Music: Intense
+Double Battle: No
+
+Chimecho
+Level: 41
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_ALVARO ===
+Name: ALVARO
+Class: Psychic
+Pic: Psychic M
+Gender: Male
+Music: Intense
+Double Battle: No
+
+Banette
+Level: 41
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Kadabra
+Level: 41
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_EVERETT ===
+Name: EVERETT
+Class: Gentleman
+Pic: Gentleman
+Gender: Male
+Music: Rich
+Double Battle: No
+
+Wobbuffet
+Level: 41
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_RED ===
+Name: RED
+Class: Rival
+Pic: Red
+Gender: Male
+Music: Male
+Double Battle: No
+
+Charmander
+Level: 5
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_LEAF ===
+Name: LEAF
+Class: Rival
+Pic: Leaf
+Gender: Female
+Music: Male
+Double Battle: No
+
+Bulbasaur
+Level: 5
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_BRENDAN_PLACEHOLDER ===
+Name: BRENDAN
+Class: RS Protag
+Pic: RS Brendan
+Gender: Male
+Music: Male
+Double Battle: No
+
+Groudon
+Level: 5
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+=== TRAINER_MAY_PLACEHOLDER ===
+Name: MAY
+Class: RS Protag
+Pic: RS May
+Gender: Female
+Music: Male
+Double Battle: No
+
+Kyogre
+Level: 5
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
diff --git a/src/data/types_info.h b/src/data/types_info.h
new file mode 100644
index 000000000000..f9bd233ca6c4
--- /dev/null
+++ b/src/data/types_info.h
@@ -0,0 +1,423 @@
+#include "constants/battle.h"
+#include "constants/pokemon.h"
+
+#define X UQ_4_12
+#define ______ X(1.0) // Regular effectiveness.
+
+// Type matchup updates. Attacker Defender
+#define STL_RS (B_UPDATED_TYPE_MATCHUPS >= GEN_6 ? X(1.0) : X(0.5)) // Ghost/Dark -> Steel
+#define PSN_RS (B_UPDATED_TYPE_MATCHUPS >= GEN_2 ? X(0.5) : X(2.0)) // Bug -> Poison
+#define BUG_RS (B_UPDATED_TYPE_MATCHUPS >= GEN_2 ? X(1.0) : X(2.0)) // Poison -> Bug
+#define PSY_RS (B_UPDATED_TYPE_MATCHUPS >= GEN_2 ? X(2.0) : X(0.0)) // Ghost -> Psychic
+#define FIR_RS (B_UPDATED_TYPE_MATCHUPS >= GEN_2 ? X(0.5) : X(1.0)) // Ice -> Fire
+
+const uq4_12_t gTypeEffectivenessTable[NUMBER_OF_MON_TYPES][NUMBER_OF_MON_TYPES] =
+{// Defender -->
+ // Attacker None Normal Fighting Flying Poison Ground Rock Bug Ghost Steel Mystery Fire Water Grass Electric Psychic Ice Dragon Dark Fairy Stellar
+ [TYPE_NONE] = {______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______},
+ [TYPE_NORMAL] = {______, ______, ______, ______, ______, ______, X(0.5), ______, X(0.0), X(0.5), ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______},
+ [TYPE_FIGHTING] = {______, X(2.0), ______, X(0.5), X(0.5), ______, X(2.0), X(0.5), X(0.0), X(2.0), ______, ______, ______, ______, ______, X(0.5), X(2.0), ______, X(2.0), X(0.5), ______},
+ [TYPE_FLYING] = {______, ______, X(2.0), ______, ______, ______, X(0.5), X(2.0), ______, X(0.5), ______, ______, ______, X(2.0), X(0.5), ______, ______, ______, ______, ______, ______},
+ [TYPE_POISON] = {______, ______, ______, ______, X(0.5), X(0.5), X(0.5), BUG_RS, X(0.5), X(0.0), ______, ______, ______, X(2.0), ______, ______, ______, ______, ______, X(2.0), ______},
+ [TYPE_GROUND] = {______, ______, ______, X(0.0), X(2.0), ______, X(2.0), X(0.5), ______, X(2.0), ______, X(2.0), ______, X(0.5), X(2.0), ______, ______, ______, ______, ______, ______},
+ [TYPE_ROCK] = {______, ______, X(0.5), X(2.0), ______, X(0.5), ______, X(2.0), ______, X(0.5), ______, X(2.0), ______, ______, ______, ______, X(2.0), ______, ______, ______, ______},
+ [TYPE_BUG] = {______, ______, X(0.5), X(0.5), PSN_RS, ______, ______, ______, X(0.5), X(0.5), ______, X(0.5), ______, X(2.0), ______, X(2.0), ______, ______, X(2.0), X(0.5), ______},
+ [TYPE_GHOST] = {______, X(0.0), ______, ______, ______, ______, ______, ______, X(2.0), STL_RS, ______, ______, ______, ______, ______, PSY_RS, ______, ______, X(0.5), ______, ______},
+ [TYPE_STEEL] = {______, ______, ______, ______, ______, ______, X(2.0), ______, ______, X(0.5), ______, X(0.5), X(0.5), ______, X(0.5), ______, X(2.0), ______, ______, X(2.0), ______},
+ [TYPE_MYSTERY] = {______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______},
+ [TYPE_FIRE] = {______, ______, ______, ______, ______, ______, X(0.5), X(2.0), ______, X(2.0), ______, X(0.5), X(0.5), X(2.0), ______, ______, X(2.0), X(0.5), ______, ______, ______},
+ [TYPE_WATER] = {______, ______, ______, ______, ______, X(2.0), X(2.0), ______, ______, ______, ______, X(2.0), X(0.5), X(0.5), ______, ______, ______, X(0.5), ______, ______, ______},
+ [TYPE_GRASS] = {______, ______, ______, X(0.5), X(0.5), X(2.0), X(2.0), X(0.5), ______, X(0.5), ______, X(0.5), X(2.0), X(0.5), ______, ______, ______, X(0.5), ______, ______, ______},
+ [TYPE_ELECTRIC] = {______, ______, ______, X(2.0), ______, X(0.0), ______, ______, ______, ______, ______, ______, X(2.0), X(0.5), X(0.5), ______, ______, X(0.5), ______, ______, ______},
+ [TYPE_PSYCHIC] = {______, ______, X(2.0), ______, X(2.0), ______, ______, ______, ______, X(0.5), ______, ______, ______, ______, ______, X(0.5), ______, ______, X(0.0), ______, ______},
+ [TYPE_ICE] = {______, ______, ______, X(2.0), ______, X(2.0), ______, ______, ______, X(0.5), ______, FIR_RS, X(0.5), X(2.0), ______, ______, X(0.5), X(2.0), ______, ______, ______},
+ [TYPE_DRAGON] = {______, ______, ______, ______, ______, ______, ______, ______, ______, X(0.5), ______, ______, ______, ______, ______, ______, ______, X(2.0), ______, X(0.0), ______},
+ [TYPE_DARK] = {______, ______, X(0.5), ______, ______, ______, ______, ______, X(2.0), STL_RS, ______, ______, ______, ______, ______, X(2.0), ______, ______, X(0.5), X(0.5), ______},
+ [TYPE_FAIRY] = {______, ______, X(2.0), ______, X(0.5), ______, ______, ______, ______, X(0.5), ______, X(0.5), ______, ______, ______, ______, ______, X(2.0), X(2.0), ______, ______},
+ [TYPE_STELLAR] = {______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______, ______},
+};
+
+#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
+// what data would they need to add in order to have their new types be fully fledged like official types.
+const struct TypeInfo gTypesInfo[NUMBER_OF_MON_TYPES] =
+{
+ [TYPE_NONE] =
+ {
+ .name = _("None"),
+ .generic = _("a move"),
+ .palette = 15, // Uses TYPE_MYSTERY's icon
+ .teraTypeRGBValue = RGB_WHITE,
+ .damageCategory = DAMAGE_CATEGORY_PHYSICAL,
+ .paletteTMHM = gItemIconPalette_NormalTMHM,
+ },
+ [TYPE_NORMAL] =
+ {
+ .name = _("Normal"),
+ .generic = _("a NORMAL move"),
+ .palette = 13,
+ .zMove = MOVE_BREAKNECK_BLITZ,
+ .maxMove = MOVE_MAX_STRIKE,
+ .teraTypeRGBValue = RGB_WHITE, // custom
+ .damageCategory = DAMAGE_CATEGORY_PHYSICAL,
+ .paletteTMHM = gItemIconPalette_NormalTMHM,
+ //.enhanceItem = ITEM_SILK_SCARF,
+ //.berry = ITEM_CHILAN_BERRY,
+ //.gem = ITEM_NORMAL_GEM,
+ //.zCrystal = ITEM_NORMALIUM_Z,
+ //.teraShard = ITEM_NORMAL_TERA_SHARD,
+ //.arceusForm = SPECIES_ARCEUS_NORMAL,
+ },
+ [TYPE_FIGHTING] =
+ {
+ .name = HANDLE_EXPANDED_TYPE_NAME("Fight", "Fighting"),
+ .generic = _("a FIGHTING move"),
+ .palette = 13,
+ .zMove = MOVE_ALL_OUT_PUMMELING,
+ .maxMove = MOVE_MAX_KNUCKLE,
+ .teraTypeRGBValue = RGB(26, 8, 14),
+ .damageCategory = DAMAGE_CATEGORY_PHYSICAL,
+ .paletteTMHM = gItemIconPalette_FightingTMHM,
+ //.enhanceItem = ITEM_BLACK_BELT,
+ //.berry = ITEM_CHOPLE_BERRY,
+ //.gem = ITEM_FIGHTING_GEM,
+ //.zCrystal = ITEM_FIGHTINIUM_Z,
+ //.plate = ITEM_FIST_PLATE,
+ //.memory = ITEM_FIGHTING_MEMORY,
+ //.teraShard = ITEM_FIGHTING_TERA_SHARD,
+ //.arceusForm = SPECIES_ARCEUS_FIGHTING,
+ },
+ [TYPE_FLYING] =
+ {
+ .name = _("Flying"),
+ .generic = _("a FLYING move"),
+ .palette = 14,
+ .zMove = MOVE_SUPERSONIC_SKYSTRIKE,
+ .maxMove = MOVE_MAX_AIRSTREAM,
+ .teraTypeRGBValue = RGB(31, 26, 7),
+ .damageCategory = DAMAGE_CATEGORY_PHYSICAL,
+ .paletteTMHM = gItemIconPalette_FlyingTMHM,
+ //.enhanceItem = ITEM_SHARP_BEAK,
+ //.berry = ITEM_COBA_BERRY,
+ //.gem = ITEM_FLYING_GEM,
+ //.zCrystal = ITEM_FLYINIUM_Z,
+ //.plate = ITEM_SKY_PLATE,
+ //.memory = ITEM_FLYING_MEMORY,
+ //.teraShard = ITEM_FLYING_TERA_SHARD,
+ //.arceusForm = SPECIES_ARCEUS_FLYING,
+ },
+ [TYPE_POISON] =
+ {
+ .name = _("Poison"),
+ .generic = _("a POISON move"),
+ .palette = 14,
+ .zMove = MOVE_ACID_DOWNPOUR,
+ .maxMove = MOVE_MAX_OOZE,
+ .teraTypeRGBValue = RGB(26, 10, 25), // custom
+ .damageCategory = DAMAGE_CATEGORY_PHYSICAL,
+ .paletteTMHM = gItemIconPalette_PoisonTMHM,
+ //.enhanceItem = ITEM_POISON_BARB,
+ //.berry = ITEM_KEBIA_BERRY,
+ //.gem = ITEM_POISON_GEM,
+ //.zCrystal = ITEM_POISONIUM_Z,
+ //.plate = ITEM_TOXIC_PLATE,
+ //.memory = ITEM_POISON_MEMORY,
+ //.teraShard = ITEM_POISON_TERA_SHARD,
+ //.arceusForm = SPECIES_ARCEUS_POISON,
+ },
+ [TYPE_GROUND] =
+ {
+ .name = _("Ground"),
+ .generic = _("a GROUND move"),
+ .palette = 13,
+ .zMove = MOVE_TECTONIC_RAGE,
+ .maxMove = MOVE_MAX_QUAKE,
+ .teraTypeRGBValue = RGB(25, 23, 18),
+ .damageCategory = DAMAGE_CATEGORY_PHYSICAL,
+ .paletteTMHM = gItemIconPalette_GroundTMHM,
+ //.enhanceItem = ITEM_SOFT_SAND,
+ //.berry = ITEM_SHUCA_BERRY,
+ //.gem = ITEM_GROUND_GEM,
+ //.zCrystal = ITEM_GROUNDIUM_Z,
+ //.plate = ITEM_EARTH_PLATE,
+ //.memory = ITEM_GROUND_MEMORY,
+ //.teraShard = ITEM_GROUND_TERA_SHARD,
+ //.arceusForm = SPECIES_ARCEUS_GROUND,
+ },
+ [TYPE_ROCK] =
+ {
+ .name = _("Rock"),
+ .generic = _("a ROCK move"),
+ .palette = 13,
+ .zMove = MOVE_CONTINENTAL_CRUSH,
+ .maxMove = MOVE_MAX_ROCKFALL,
+ .teraTypeRGBValue = RGB(18, 16, 8), // custom
+ .damageCategory = DAMAGE_CATEGORY_PHYSICAL,
+ .paletteTMHM = gItemIconPalette_RockTMHM,
+ //.enhanceItem = ITEM_HARD_STONE,
+ //.berry = ITEM_CHARTI_BERRY,
+ //.gem = ITEM_ROCK_GEM,
+ //.zCrystal = ITEM_ROCKIUM_Z,
+ //.plate = ITEM_STONE_PLATE,
+ //.memory = ITEM_ROCK_MEMORY,
+ //.teraShard = ITEM_ROCK_TERA_SHARD,
+ //.arceusForm = SPECIES_ARCEUS_ROCK,
+ },
+ [TYPE_BUG] =
+ {
+ .name = _("Bug"),
+ .generic = _("a BUG move"),
+ .palette = 15,
+ .zMove = MOVE_SAVAGE_SPIN_OUT,
+ .maxMove = MOVE_MAX_FLUTTERBY,
+ .teraTypeRGBValue = RGB(18, 24, 6),
+ .damageCategory = DAMAGE_CATEGORY_PHYSICAL,
+ .paletteTMHM = gItemIconPalette_BugTMHM,
+ //.enhanceItem = ITEM_SILVER_POWDER,
+ //.berry = ITEM_TANGA_BERRY,
+ //.gem = ITEM_BUG_GEM,
+ //.zCrystal = ITEM_BUGINIUM_Z,
+ //.plate = ITEM_INSECT_PLATE,
+ //.memory = ITEM_BUG_MEMORY,
+ //.teraShard = ITEM_BUG_TERA_SHARD,
+ //.arceusForm = SPECIES_ARCEUS_BUG,
+ },
+ [TYPE_GHOST] =
+ {
+ .name = _("Ghost"),
+ .generic = _("a GHOST move"),
+ .palette = 14,
+ .zMove = MOVE_NEVER_ENDING_NIGHTMARE,
+ .maxMove = MOVE_MAX_PHANTASM,
+ .teraTypeRGBValue = RGB(12, 10, 16),
+ .damageCategory = DAMAGE_CATEGORY_PHYSICAL,
+ .paletteTMHM = gItemIconPalette_GhostTMHM,
+ //.enhanceItem = ITEM_SPELL_TAG,
+ //.berry = ITEM_KASIB_BERRY,
+ //.gem = ITEM_GHOST_GEM,
+ //.zCrystal = ITEM_GHOSTIUM_Z,
+ //.plate = ITEM_SPOOKY_PLATE,
+ //.memory = ITEM_GHOST_MEMORY,
+ //.teraShard = ITEM_GHOST_TERA_SHARD,
+ //.arceusForm = SPECIES_ARCEUS_GHOST,
+ },
+ [TYPE_STEEL] =
+ {
+ .name = _("Steel"),
+ .generic = _("a STEEL move"),
+ .palette = 13,
+ .zMove = MOVE_CORKSCREW_CRASH,
+ .maxMove = MOVE_MAX_STEELSPIKE,
+ .teraTypeRGBValue = RGB(19, 19, 20),
+ .damageCategory = DAMAGE_CATEGORY_PHYSICAL,
+ .paletteTMHM = gItemIconPalette_SteelTMHM,
+ //.enhanceItem = ITEM_METAL_COAT,
+ //.berry = ITEM_BABIRI_BERRY,
+ //.gem = ITEM_STEEL_GEM,
+ //.zCrystal = ITEM_STEELIUM_Z,
+ //.plate = ITEM_IRON_PLATE,
+ //.memory = ITEM_STEEL_MEMORY,
+ //.teraShard = ITEM_STEEL_TERA_SHARD,
+ //.arceusForm = SPECIES_ARCEUS_STEEL,
+ },
+ [TYPE_MYSTERY] =
+ {
+ .name = _("???"),
+ .generic = _("a ??? move"),
+ .palette = 15,
+ .teraTypeRGBValue = RGB_WHITE,
+ .damageCategory = DAMAGE_CATEGORY_SPECIAL,
+ },
+ [TYPE_FIRE] =
+ {
+ .name = _("Fire"),
+ .generic = _("a FIRE move"),
+ .palette = 13,
+ .zMove = MOVE_INFERNO_OVERDRIVE,
+ .maxMove = MOVE_MAX_FLARE,
+ .teraTypeRGBValue = RGB(31, 20, 11),
+ .damageCategory = DAMAGE_CATEGORY_SPECIAL,
+ .paletteTMHM = gItemIconPalette_FireTMHM,
+ //.enhanceItem = ITEM_CHARCOAL,
+ //.berry = ITEM_OCCA_BERRY,
+ //.gem = ITEM_FIRE_GEM,
+ //.zCrystal = ITEM_FIRIUM_Z,
+ //.plate = ITEM_FLAME_PLATE,
+ //.memory = ITEM_FIRE_MEMORY,
+ //.teraShard = ITEM_FIRE_TERA_SHARD,
+ //.arceusForm = SPECIES_ARCEUS_FIRE,
+ },
+ [TYPE_WATER] =
+ {
+ .name = _("Water"),
+ .generic = _("a WATER move"),
+ .palette = 14,
+ .zMove = MOVE_HYDRO_VORTEX,
+ .maxMove = MOVE_MAX_GEYSER,
+ .teraTypeRGBValue = RGB(10, 18, 27),
+ .damageCategory = DAMAGE_CATEGORY_SPECIAL,
+ .paletteTMHM = gItemIconPalette_WaterTMHM,
+ //.enhanceItem = ITEM_MYSTIC_WATER,
+ //.berry = ITEM_PASSHO_BERRY,
+ //.gem = ITEM_WATER_GEM,
+ //.zCrystal = ITEM_WATERIUM_Z,
+ //.plate = ITEM_SPLASH_PLATE,
+ //.memory = ITEM_WATER_MEMORY,
+ //.teraShard = ITEM_WATER_TERA_SHARD,
+ //.arceusForm = SPECIES_ARCEUS_WATER,
+ },
+ [TYPE_GRASS] =
+ {
+ .name = _("Grass"),
+ .generic = _("a GRASS move"),
+ .palette = 15,
+ .zMove = MOVE_BLOOM_DOOM,
+ .maxMove = MOVE_MAX_OVERGROWTH,
+ .teraTypeRGBValue = RGB(12, 24, 11),
+ .damageCategory = DAMAGE_CATEGORY_SPECIAL,
+ .paletteTMHM = gItemIconPalette_GrassTMHM,
+ //.enhanceItem = ITEM_MIRACLE_SEED,
+ //.berry = ITEM_RINDO_BERRY,
+ //.gem = ITEM_GRASS_GEM,
+ //.zCrystal = ITEM_GRASSIUM_Z,
+ //.plate = ITEM_MEADOW_PLATE,
+ //.memory = ITEM_GRASS_MEMORY,
+ //.teraShard = ITEM_GRASS_TERA_SHARD,
+ //.arceusForm = SPECIES_ARCEUS_GRASS,
+ },
+ [TYPE_ELECTRIC] =
+ {
+ .name = HANDLE_EXPANDED_TYPE_NAME("Electr", "Electric"),
+ .generic = _("an ELECTRIC move"),
+ .palette = 13,
+ .zMove = MOVE_GIGAVOLT_HAVOC,
+ .maxMove = MOVE_MAX_LIGHTNING,
+ .teraTypeRGBValue = RGB(30, 26, 7),
+ .damageCategory = DAMAGE_CATEGORY_SPECIAL,
+ .paletteTMHM = gItemIconPalette_ElectricTMHM,
+ //.enhanceItem = ITEM_MAGNET,
+ //.berry = ITEM_WACAN_BERRY,
+ //.gem = ITEM_ELECTRIC_GEM,
+ //.zCrystal = ITEM_ELECTRIUM_Z,
+ //.plate = ITEM_ZAP_PLATE,
+ //.memory = ITEM_ELECTRIC_MEMORY,
+ //.teraShard = ITEM_ELECTRIC_TERA_SHARD,
+ //.arceusForm = SPECIES_ARCEUS_ELECTRIC,
+ },
+ [TYPE_PSYCHIC] =
+ {
+ .name = HANDLE_EXPANDED_TYPE_NAME("Psychc", "Psychic"),
+ .generic = _("a PSYCHIC move"),
+ .palette = 14,
+ .zMove = MOVE_SHATTERED_PSYCHE,
+ .maxMove = MOVE_MAX_MINDSTORM,
+ .teraTypeRGBValue = RGB(31, 14, 15),
+ .damageCategory = DAMAGE_CATEGORY_SPECIAL,
+ .paletteTMHM = gItemIconPalette_PsychicTMHM,
+ //.enhanceItem = ITEM_TWISTED_SPOON,
+ //.berry = ITEM_PAYAPA_BERRY,
+ //.gem = ITEM_PSYCHIC_GEM,
+ //.zCrystal = ITEM_PSYCHIUM_Z,
+ //.plate = ITEM_MIND_PLATE,
+ //.memory = ITEM_PSYCHIC_MEMORY,
+ //.teraShard = ITEM_PSYCHIC_TERA_SHARD,
+ //.arceusForm = SPECIES_ARCEUS_PSYCHIC,
+ },
+ [TYPE_ICE] =
+ {
+ .name = _("Ice"),
+ .generic = _("an ICE move"),
+ .palette = 14,
+ .zMove = MOVE_SUBZERO_SLAMMER,
+ .maxMove = MOVE_MAX_HAILSTORM,
+ .teraTypeRGBValue = RGB(14, 26, 25),
+ .damageCategory = DAMAGE_CATEGORY_SPECIAL,
+ .paletteTMHM = gItemIconPalette_IceTMHM,
+ //.enhanceItem = ITEM_NEVER_MELT_ICE,
+ //.berry = ITEM_YACHE_BERRY,
+ //.gem = ITEM_ICE_GEM,
+ //.zCrystal = ITEM_ICIUM_Z,
+ //.plate = ITEM_ICICLE_PLATE,
+ //.memory = ITEM_ICE_MEMORY,
+ //.teraShard = ITEM_ICE_TERA_SHARD,
+ //.arceusForm = SPECIES_ARCEUS_ICE,
+ },
+ [TYPE_DRAGON] =
+ {
+ .name = _("Dragon"),
+ .generic = _("a DRAGON move"),
+ .palette = 15,
+ .zMove = MOVE_DEVASTATING_DRAKE,
+ .maxMove = MOVE_MAX_WYRMWIND,
+ .teraTypeRGBValue = RGB(10, 18, 27),
+ .damageCategory = DAMAGE_CATEGORY_SPECIAL,
+ .paletteTMHM = gItemIconPalette_DragonTMHM,
+ //.enhanceItem = ITEM_DRAGON_FANG,
+ //.berry = ITEM_HABAN_BERRY,
+ //.gem = ITEM_DRAGON_GEM,
+ //.zCrystal = ITEM_DRAGONIUM_Z,
+ //.plate = ITEM_DRACO_PLATE,
+ //.memory = ITEM_DRAGON_MEMORY,
+ //.teraShard = ITEM_DRAGON_TERA_SHARD,
+ //.arceusForm = SPECIES_ARCEUS_DRAGON,
+ },
+ [TYPE_DARK] =
+ {
+ .name = _("Dark"),
+ .generic = _("a DARK move"),
+ .palette = 13,
+ .zMove = MOVE_BLACK_HOLE_ECLIPSE,
+ .maxMove = MOVE_MAX_DARKNESS,
+ .teraTypeRGBValue = RGB(6, 5, 8),
+ .damageCategory = DAMAGE_CATEGORY_SPECIAL,
+ .paletteTMHM = gItemIconPalette_DarkTMHM,
+ //.enhanceItem = ITEM_BLACK_GLASSES,
+ //.berry = ITEM_COLBUR_BERRY,
+ //.gem = ITEM_DARK_GEM,
+ //.zCrystal = ITEM_DARKINIUM_Z,
+ //.plate = ITEM_DREAD_PLATE,
+ //.memory = ITEM_DARK_MEMORY,
+ //.teraShard = ITEM_DARK_TERA_SHARD,
+ //.arceusForm = SPECIES_ARCEUS_DARK,
+ },
+ [TYPE_FAIRY] =
+ {
+ .name = _("Fairy"),
+ .generic = _("a FAIRY move"),
+ .palette = 14,
+ .zMove = MOVE_TWINKLE_TACKLE,
+ .maxMove = MOVE_MAX_STARFALL,
+ .teraTypeRGBValue = RGB(31, 15, 21),
+ .damageCategory = DAMAGE_CATEGORY_SPECIAL,
+ .paletteTMHM = gItemIconPalette_FairyTMHM,
+ //.enhanceItem = ITEM_FAIRY_FEATHER,
+ //.berry = ITEM_ROSELI_BERRY,
+ //.gem = ITEM_FAIRY_GEM,
+ //.zCrystal = ITEM_FAIRIUM_Z,
+ //.plate = ITEM_PIXIE_PLATE,
+ //.memory = ITEM_FAIRY_MEMORY,
+ //.teraShard = ITEM_FAIRY_TERA_SHARD,
+ //.arceusForm = SPECIES_ARCEUS_FAIRY,
+ },
+ [TYPE_STELLAR] =
+ {
+ .name = HANDLE_EXPANDED_TYPE_NAME("Stellr", "Stellar"),
+ .generic = _("a STELLAR move"),
+ .palette = 15,
+ .zMove = MOVE_BREAKNECK_BLITZ,
+ .maxMove = MOVE_MAX_STRIKE,
+ .teraTypeRGBValue = RGB(10, 18, 27),
+ .paletteTMHM = gItemIconPalette_NormalTMHM, // failsafe
+ // .teraShard = ITEM_STELLAR_TERA_SHARD,
+ },
+};
diff --git a/src/daycare.c b/src/daycare.c
index d007de359ded..e13f993c3f10 100644
--- a/src/daycare.c
+++ b/src/daycare.c
@@ -43,8 +43,6 @@ EWRAM_DATA static u16 sHatchedEggFinalMoves[MAX_MON_MOVES] = {0};
EWRAM_DATA static u16 sHatchedEggEggMoves[EGG_MOVES_ARRAY_COUNT] = {0};
EWRAM_DATA static u16 sHatchedEggMotherMoves[MAX_MON_MOVES] = {0};
-#include "data/pokemon/egg_moves.h"
-
static const struct WindowTemplate sDaycareLevelMenuWindowTemplate =
{
.bg = 0,
@@ -115,11 +113,11 @@ static const u8 *const sCompatibilityMessages[] =
static const u8 sJapaneseEggNickname[] = _("タマゴ"); // "tamago" ("egg" in Japanese)
-u8 *GetMonNickname2(struct Pokemon *mon, u8 *dest)
+u8 *GetMonNicknameVanilla(struct Pokemon *mon, u8 *dest)
{
u8 nickname[POKEMON_NAME_BUFFER_SIZE];
GetMonData(mon, MON_DATA_NICKNAME, nickname);
- return StringCopy_Nickname(dest, nickname);
+ return StringCopyN(dest, nickname, VANILLA_POKEMON_NAME_LENGTH);
}
u8 *GetBoxMonNickname(struct BoxPokemon *mon, u8 *dest)
@@ -253,7 +251,7 @@ static void StorePokemonInDaycare(struct Pokemon *mon, struct DaycareMon *daycar
u8 mailId;
StringCopy(daycareMon->mail.otName, gSaveBlock2Ptr->playerName);
- GetMonNickname2(mon, daycareMon->mail.monName);
+ GetMonNicknameVanilla(mon, daycareMon->mail.monName);
StripExtCtrlCodes(daycareMon->mail.monName);
daycareMon->mail.gameLanguage = GAME_LANGUAGE;
daycareMon->mail.monLanguage = GetMonData(mon, MON_DATA_LANGUAGE);
@@ -453,7 +451,7 @@ static void ClearDaycareMonMail(struct DaycareMail *mail)
for (i = 0; i < PLAYER_NAME_LENGTH + 1; i++)
mail->otName[i] = 0;
- for (i = 0; i < POKEMON_NAME_LENGTH + 1; i++)
+ for (i = 0; i < VANILLA_POKEMON_NAME_LENGTH + 1; i++)
mail->monName[i] = 0;
ClearMail(&mail->message);
@@ -776,29 +774,18 @@ static void InheritAbility(struct Pokemon *egg, struct BoxPokemon *father, struc
// the given array.
static u8 GetEggMoves(struct Pokemon *pokemon, u16 *eggMoves)
{
- u16 eggMoveIdx;
u16 numEggMoves;
u16 species;
- u16 i;
+ u32 i;
+ const u16 *eggMoveLearnset;
numEggMoves = 0;
- eggMoveIdx = 0;
species = GetMonData(pokemon, MON_DATA_SPECIES);
- for (i = 0; i < ARRAY_COUNT(gEggMoves) - 1; i++)
- {
- if (gEggMoves[i] == species + EGG_MOVES_SPECIES_OFFSET)
- {
- eggMoveIdx = i + 1;
- break;
- }
- }
+ eggMoveLearnset = GetSpeciesEggMoves(species);
- for (i = 0; i < EGG_MOVES_ARRAY_COUNT; i++)
+ for (i = 0; eggMoveLearnset[i] != MOVE_UNAVAILABLE; i++)
{
- if (gEggMoves[eggMoveIdx + i] > EGG_MOVES_SPECIES_OFFSET)
- break;
-
- eggMoves[i] = gEggMoves[eggMoveIdx + i];
+ eggMoves[i] = eggMoveLearnset[i];
numEggMoves++;
}
@@ -807,30 +794,16 @@ static u8 GetEggMoves(struct Pokemon *pokemon, u16 *eggMoves)
u8 GetEggMovesBySpecies(u16 species, u16 *eggMoves)
{
- u16 eggMoveIdx;
u16 numEggMoves;
- u16 i;
+ const u16 *eggMoveLearnset;
+ u32 i;
numEggMoves = 0;
- eggMoveIdx = 0;
- for (i = 0; i < ARRAY_COUNT(gEggMoves) - 1; i++)
- {
- if (gEggMoves[i] == species + EGG_MOVES_SPECIES_OFFSET)
- {
- eggMoveIdx = i + 1;
- break;
- }
- }
+ eggMoveLearnset = GetSpeciesEggMoves(species);
- for (i = 0; i < EGG_MOVES_ARRAY_COUNT; i++)
+ for (i = 0; eggMoveLearnset[i] != MOVE_UNAVAILABLE; i++)
{
- if (gEggMoves[eggMoveIdx + i] > EGG_MOVES_SPECIES_OFFSET)
- {
- // TODO: the curly braces around this if statement are required for a matching build.
- break;
- }
-
- eggMoves[i] = gEggMoves[eggMoveIdx + i];
+ eggMoves[i] = eggMoveLearnset[i];
numEggMoves++;
}
@@ -839,26 +812,15 @@ u8 GetEggMovesBySpecies(u16 species, u16 *eggMoves)
bool8 SpeciesCanLearnEggMove(u16 species, u16 move) //Move search PokedexPlus HGSS_Ui
{
- u16 eggMoveIdx;
- u16 i;
- eggMoveIdx = 0;
- for (i = 0; i < ARRAY_COUNT(gEggMoves) - 1; i++)
- {
- if (gEggMoves[i] == species + EGG_MOVES_SPECIES_OFFSET)
- {
- eggMoveIdx = i + 1;
- break;
- }
- }
+ u32 i;
+ const u16 *eggMoveLearnset = GetSpeciesEggMoves(species);
- for (i = 0; i < EGG_MOVES_ARRAY_COUNT; i++)
+ for (i = 0; eggMoveLearnset[i] != MOVE_UNAVAILABLE; i++)
{
- if (gEggMoves[eggMoveIdx + i] > EGG_MOVES_SPECIES_OFFSET)
- return FALSE;
-
- if (move == gEggMoves[eggMoveIdx + i])
+ if (eggMoveLearnset[i] == move)
return TRUE;
}
+
return FALSE;
}
@@ -1038,8 +1000,7 @@ static u16 DetermineEggSpeciesAndParentSlots(struct DayCare *daycare, u8 *parent
{
u16 i;
u16 species[DAYCARE_MON_COUNT];
- u16 eggSpecies, parentSpecies;
- bool8 hasMotherEverstone, hasFatherEverstone;
+ u16 eggSpecies;
for (i = 0; i < DAYCARE_MON_COUNT; i++)
{
@@ -1056,18 +1017,7 @@ static u16 DetermineEggSpeciesAndParentSlots(struct DayCare *daycare, u8 *parent
}
}
- hasMotherEverstone = ItemId_GetHoldEffect(GetBoxMonData(&daycare->mons[0].mon, MON_DATA_HELD_ITEM)) == HOLD_EFFECT_PREVENT_EVOLVE;
- hasFatherEverstone = ItemId_GetHoldEffect(GetBoxMonData(&daycare->mons[1].mon, MON_DATA_HELD_ITEM)) == HOLD_EFFECT_PREVENT_EVOLVE;
-
- if (hasMotherEverstone)
- parentSpecies = species[parentSlots[0]];
- else if (hasFatherEverstone && GET_BASE_SPECIES_ID(GetEggSpecies(species[parentSlots[0]])) == GET_BASE_SPECIES_ID(GetEggSpecies(species[parentSlots[1]])))
- parentSpecies = species[parentSlots[1]];
- else
- parentSpecies = GET_BASE_SPECIES_ID(GetEggSpecies(species[parentSlots[0]]));
-
- eggSpecies = GetEggSpecies(parentSpecies);
-
+ eggSpecies = GetEggSpecies(species[parentSlots[0]]);
if (eggSpecies == SPECIES_NIDORAN_F && daycare->offspringPersonality & EGG_GENDER_MALE)
eggSpecies = SPECIES_NIDORAN_M;
else if (eggSpecies == SPECIES_ILLUMISE && daycare->offspringPersonality & EGG_GENDER_MALE)
@@ -1200,7 +1150,7 @@ static bool8 TryProduceOrHatchEgg(struct DayCare *daycare)
}
// Try to hatch Egg
- if (++daycare->stepCounter == 255)
+ if (++daycare->stepCounter == ((P_EGG_CYCLE_LENGTH >= GEN_8) ? 127 : 255))
{
u32 eggCycles;
u8 toSub = GetEggCyclesToSubtract();
@@ -1381,7 +1331,9 @@ u8 GetDaycareCompatibilityScore(struct DayCare *daycare)
static u8 GetDaycareCompatibilityScoreFromSave(void)
{
- return GetDaycareCompatibilityScore(&gSaveBlock1Ptr->daycare);
+ // Changed to also store result for scripts
+ gSpecialVar_Result = GetDaycareCompatibilityScore(&gSaveBlock1Ptr->daycare);
+ return gSpecialVar_Result;
}
void SetDaycareCompatibilityString(void)
diff --git a/src/debug.c b/src/debug.c
index ba06cd522ee4..f4b6f68840ea 100644
--- a/src/debug.c
+++ b/src/debug.c
@@ -99,6 +99,7 @@ enum UtilDebugMenu
DEBUG_UTIL_MENU_ITEM_CHEAT,
DEBUG_UTIL_MENU_ITEM_EXPANSION_VER,
DEBUG_UTIL_MENU_ITEM_BERRY_FUNCTIONS,
+ DEBUG_UTIL_MENU_ITEM_EWRAM_COUNTERS,
};
enum GivePCBagDebugMenu
@@ -374,6 +375,7 @@ static void DebugAction_Util_Player_Id(u8 taskId);
static void DebugAction_Util_CheatStart(u8 taskId);
static void DebugAction_Util_ExpansionVersion(u8 taskId);
static void DebugAction_Util_BerryFunctions(u8 taskId);
+static void DebugAction_Util_CheckEWRAMCounters(u8 taskId);
static void DebugAction_OpenPCBagFillMenu(u8 taskId);
static void DebugAction_PCBag_Fill_PCBoxes_Fast(u8 taskId);
@@ -476,6 +478,7 @@ extern const u8 Debug_CheckSaveBlock[];
extern const u8 Debug_CheckROMSpace[];
extern const u8 Debug_BoxFilledMessage[];
extern const u8 Debug_ShowExpansionVersion[];
+extern const u8 Debug_EventScript_EWRAMCounters[];
extern const u8 Debug_BerryPestsDisabled[];
extern const u8 Debug_BerryWeedsDisabled[];
@@ -532,6 +535,7 @@ static const u8 sDebugText_Util_Player_Id[] = _("New Trainer ID")
static const u8 sDebugText_Util_CheatStart[] = _("Cheat start");
static const u8 sDebugText_Util_ExpansionVersion[] = _("Expansion Version");
static const u8 sDebugText_Util_BerryFunctions[] = _("Berry Functions…{CLEAR_TO 110}{RIGHT_ARROW}");
+static const u8 sDebugText_Util_EWRAMCounters[] = _("EWRAM Counters…{CLEAR_TO 110}{RIGHT_ARROW}");
// PC/Bag Menu
static const u8 sDebugText_PCBag_Fill[] = _("Fill…{CLEAR_TO 110}{RIGHT_ARROW}");
static const u8 sDebugText_PCBag_Fill_Pc_Fast[] = _("Fill PC Boxes Fast");
@@ -720,6 +724,7 @@ static const struct ListMenuItem sDebugMenu_Items_Utilities[] =
[DEBUG_UTIL_MENU_ITEM_CHEAT] = {sDebugText_Util_CheatStart, DEBUG_UTIL_MENU_ITEM_CHEAT},
[DEBUG_UTIL_MENU_ITEM_EXPANSION_VER] = {sDebugText_Util_ExpansionVersion, DEBUG_UTIL_MENU_ITEM_EXPANSION_VER},
[DEBUG_UTIL_MENU_ITEM_BERRY_FUNCTIONS] = {sDebugText_Util_BerryFunctions, DEBUG_UTIL_MENU_ITEM_BERRY_FUNCTIONS},
+ [DEBUG_UTIL_MENU_ITEM_EWRAM_COUNTERS] = {sDebugText_Util_EWRAMCounters, DEBUG_UTIL_MENU_ITEM_EWRAM_COUNTERS},
};
static const struct ListMenuItem sDebugMenu_Items_PCBag[] =
@@ -889,6 +894,7 @@ static void (*const sDebugMenu_Actions_Utilities[])(u8) =
[DEBUG_UTIL_MENU_ITEM_CHEAT] = DebugAction_Util_CheatStart,
[DEBUG_UTIL_MENU_ITEM_EXPANSION_VER] = DebugAction_Util_ExpansionVersion,
[DEBUG_UTIL_MENU_ITEM_BERRY_FUNCTIONS] = DebugAction_Util_BerryFunctions,
+ [DEBUG_UTIL_MENU_ITEM_EWRAM_COUNTERS] = DebugAction_Util_CheckEWRAMCounters,
};
static void (*const sDebugMenu_Actions_PCBag[])(u8) =
@@ -1344,36 +1350,16 @@ static void Debug_InitDebugBattleData(void)
sDebugBattleData->aiFlags[i] = FALSE;
}
-static void Debug_RefreshListMenu(u8 taskId)
+static void Debug_GenerateListMenuNames(u32 totalItems)
{
- u16 i;
const u8 sColor_Red[] = _("{COLOR RED}");
const u8 sColor_Green[] = _("{COLOR GREEN}");
- u8 totalItems = 0, flagResult = 0;
+ u32 i, flagResult = 0;
u8 const *name = NULL;
- if (sDebugMenuListData->listId == 0)
- {
- gMultiuseListMenuTemplate = sDebugMenu_ListTemplate_FlagsVars;
- totalItems = gMultiuseListMenuTemplate.totalItems;
- }
- else if (sDebugMenuListData->listId == 1 && sDebugBattleData->submenu <= 1)
- {
- gMultiuseListMenuTemplate = sDebugMenu_ListTemplate_Battle_1;
- totalItems = gMultiuseListMenuTemplate.totalItems;
- }
- else if (sDebugMenuListData->listId == 1 && sDebugBattleData->submenu > 1)
- {
- gMultiuseListMenuTemplate = sDebugMenu_ListTemplate_Battle_2;
- totalItems = 7;
- }
-
- // Failsafe to prevent memory corruption
- totalItems = min(totalItems, DEBUG_MAX_MENU_ITEMS);
// Copy item names for all entries but the last (which is Cancel)
- for(i = 0; i < totalItems; i++)
+ for (i = 0; i < totalItems; i++)
{
-
if (sDebugMenuListData->listId == 1 && sDebugBattleData->submenu > 1)
{
u16 species;
@@ -1429,6 +1415,31 @@ static void Debug_RefreshListMenu(u8 taskId)
sDebugMenuListData->listItems[i].name = &sDebugMenuListData->itemNames[i][0];
sDebugMenuListData->listItems[i].id = i;
}
+}
+
+static void Debug_RefreshListMenu(u8 taskId)
+{
+ u8 totalItems = 0;
+
+ if (sDebugMenuListData->listId == 0)
+ {
+ gMultiuseListMenuTemplate = sDebugMenu_ListTemplate_FlagsVars;
+ totalItems = gMultiuseListMenuTemplate.totalItems;
+ }
+ else if (sDebugMenuListData->listId == 1 && sDebugBattleData->submenu <= 1)
+ {
+ gMultiuseListMenuTemplate = sDebugMenu_ListTemplate_Battle_1;
+ totalItems = gMultiuseListMenuTemplate.totalItems;
+ }
+ else if (sDebugMenuListData->listId == 1 && sDebugBattleData->submenu > 1)
+ {
+ gMultiuseListMenuTemplate = sDebugMenu_ListTemplate_Battle_2;
+ totalItems = 7;
+ }
+
+ // Failsafe to prevent memory corruption
+ totalItems = min(totalItems, DEBUG_MAX_MENU_ITEMS);
+ Debug_GenerateListMenuNames(totalItems);
// Set list menu data
gMultiuseListMenuTemplate.items = sDebugMenuListData->listItems;
@@ -1595,7 +1606,8 @@ static void DebugTask_HandleMenuInput_FlagsVars(u8 taskId)
else
{
func(taskId);
- Debug_RedrawListMenu(taskId);
+ Debug_GenerateListMenuNames(gMultiuseListMenuTemplate.totalItems);
+ RedrawListMenu(gTasks[taskId].tMenuTaskId);
}
// Remove TRUE/FALSE window for functions that haven't been assigned flags
@@ -3361,7 +3373,7 @@ static void DebugAction_Give_Pokemon_SelectShiny(u8 taskId)
StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]);
ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 2);
StringCopyPadded(gStringVar3, gStringVar3, CHAR_SPACE, 15);
- StringCopy(gStringVar1, gNatureNamePointers[0]);
+ StringCopy(gStringVar1, gNaturesInfo[0].name);
StringExpandPlaceholders(gStringVar4, sDebugText_PokemonNature);
AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL);
@@ -3397,7 +3409,7 @@ static void DebugAction_Give_Pokemon_SelectNature(u8 taskId)
StringCopy(gStringVar2, gText_DigitIndicator[gTasks[taskId].tDigit]);
ConvertIntToDecimalStringN(gStringVar3, gTasks[taskId].tInput, STR_CONV_MODE_LEADING_ZEROS, 2);
StringCopyPadded(gStringVar3, gStringVar3, CHAR_SPACE, 15);
- StringCopy(gStringVar1, gNatureNamePointers[gTasks[taskId].tInput]);
+ StringCopy(gStringVar1, gNaturesInfo[gTasks[taskId].tInput].name);
StringExpandPlaceholders(gStringVar4, sDebugText_PokemonNature);
AddTextPrinterParameterized(gTasks[taskId].tSubWindowId, DEBUG_MENU_FONT, gStringVar4, 1, 1, 0, NULL);
}
@@ -4096,7 +4108,7 @@ static void DebugAction_PCBag_Fill_PCBoxes_Fast(u8 taskId) //Credit: Sierraffini
StringCopy(speciesName, GetSpeciesName(species));
SetBoxMonData(&boxMon, MON_DATA_NICKNAME, &speciesName);
SetBoxMonData(&boxMon, MON_DATA_SPECIES, &species);
- GiveBoxMonInitialMoveset_Fast(&boxMon);
+ GiveBoxMonInitialMoveset(&boxMon);
gPokemonStoragePtr->boxes[boxId][boxPosition] = boxMon;
}
}
@@ -5107,4 +5119,15 @@ static void DebugAction_Party_ClearParty(u8 taskId)
Debug_DestroyMenu_Full(taskId);
}
+void CheckEWRAMCounters(struct ScriptContext *ctx)
+{
+ ConvertIntToDecimalStringN(gStringVar1, gFollowerSteps, STR_CONV_MODE_LEFT_ALIGN, 5);
+ ConvertIntToDecimalStringN(gStringVar2, gChainFishingDexNavStreak, STR_CONV_MODE_LEFT_ALIGN, 5);
+}
+
+static void DebugAction_Util_CheckEWRAMCounters(u8 taskId)
+{
+ Debug_DestroyMenu_Full_Script(taskId, Debug_EventScript_EWRAMCounters);
+}
+
#endif //DEBUG_OVERWORLD_MENU == TRUE
diff --git a/src/decompress.c b/src/decompress.c
index e08af5790d18..30337f5a8dc3 100644
--- a/src/decompress.c
+++ b/src/decompress.c
@@ -3,7 +3,7 @@
#include "data.h"
#include "decompress.h"
#include "pokemon.h"
-#include "pokemon_debug.h"
+#include "pokemon_sprite_visualizer.h"
#include "text.h"
EWRAM_DATA ALIGNED(4) u8 gDecompressionBuffer[0x4000] = {0};
@@ -18,6 +18,28 @@ void LZDecompressVram(const u32 *src, void *dest)
LZ77UnCompVram(src, dest);
}
+// Checks if `ptr` is likely LZ77 data
+// Checks word-alignment, min/max size, and header byte
+// Returns uncompressed size if true, 0 otherwise
+u32 IsLZ77Data(const void *ptr, u32 minSize, u32 maxSize)
+{
+ const u8 *data = ptr;
+ u32 size;
+ // Compressed data must be word aligned
+ if (((u32)ptr) & 3)
+ return 0;
+ // Check LZ77 header byte
+ // See https://problemkaputt.de/gbatek.htm#biosdecompressionfunctions
+ if (data[0] != 0x10)
+ return 0;
+
+ // Read 24-bit uncompressed size
+ size = data[1] | (data[2] << 8) | (data[3] << 16);
+ if (size >= minSize && size <= maxSize)
+ return size;
+ return 0;
+}
+
u16 LoadCompressedSpriteSheet(const struct CompressedSpriteSheet *src)
{
struct SpriteSheet dest;
@@ -29,6 +51,26 @@ u16 LoadCompressedSpriteSheet(const struct CompressedSpriteSheet *src)
return LoadSpriteSheet(&dest);
}
+// This can be used for either compressed or uncompressed sprite sheets
+u16 LoadCompressedSpriteSheetByTemplate(const struct SpriteTemplate *template, s32 offset)
+{
+ struct SpriteTemplate myTemplate;
+ struct SpriteFrameImage myImage;
+ u32 size;
+
+ // Check for LZ77 header and read uncompressed size, or fallback if not compressed (zero size)
+ if ((size = IsLZ77Data(template->images->data, TILE_SIZE_4BPP, sizeof(gDecompressionBuffer))) == 0)
+ return LoadSpriteSheetByTemplate(template, 0, offset);
+
+ LZ77UnCompWram(template->images->data, gDecompressionBuffer);
+ myImage.data = gDecompressionBuffer;
+ myImage.size = size + offset;
+ myTemplate.images = &myImage;
+ myTemplate.tileTag = template->tileTag;
+
+ return LoadSpriteSheetByTemplate(&myTemplate, 0, offset);
+}
+
void LoadCompressedSpriteSheetOverrideBuffer(const struct CompressedSpriteSheet *src, void *buffer)
{
struct SpriteSheet dest;
diff --git a/src/decoration.c b/src/decoration.c
index 18d6e2e680cd..d450ad7dfba0 100644
--- a/src/decoration.c
+++ b/src/decoration.c
@@ -1370,6 +1370,7 @@ static void Task_PlaceDecoration(u8 taskId)
}
break;
case 1:
+ RemoveFollowingPokemon();
gPaletteFade.bufferTransferDisabled = TRUE;
ConfigureCameraObjectForPlacingDecoration(&sPlaceDecorationGraphicsDataBuffer, gCurDecorationItems[gCurDecorationIndex]);
SetUpDecorationShape(taskId);
@@ -1625,6 +1626,17 @@ static bool8 CanPlaceDecoration(u8 taskId, const struct Decoration *decoration)
}
break;
}
+
+ // If sprite(like), check if there is an available object event slot for it
+ if (decoration->permission == DECORPERM_SPRITE)
+ {
+ for (i = 0; i < NUM_DECORATION_FLAGS; i++)
+ {
+ if (FlagGet(FLAG_DECORATION_1 + i) == TRUE)
+ return TRUE;
+ }
+ return FALSE;
+ }
return TRUE;
}
@@ -2327,6 +2339,7 @@ static void Task_ContinuePuttingAwayDecorations(u8 taskId)
}
break;
case 1:
+ RemoveFollowingPokemon();
SetUpPuttingAwayDecorationPlayerAvatar();
FadeInFromBlack();
tState = 2;
diff --git a/src/digit_obj_util.c b/src/digit_obj_util.c
index f68f0446c3d4..f66dc80cb709 100644
--- a/src/digit_obj_util.c
+++ b/src/digit_obj_util.c
@@ -4,6 +4,7 @@
#include "decompress.h"
#include "main.h"
#include "battle_main.h"
+#include "sprite.h"
struct DigitPrinter
{
@@ -44,29 +45,6 @@ static bool32 SharesPalWithAnyActive(u32 id);
// ewram
static EWRAM_DATA struct DigitPrinterAlloc *sOamWork = {0};
-// const rom data
-static const u8 sTilesPerImage[4][4] =
-{
- [ST_OAM_SQUARE] = {
- [ST_OAM_SIZE_0] = 0x01, // SPRITE_SIZE_8x8
- [ST_OAM_SIZE_1] = 0x04, // SPRITE_SIZE_16x16
- [ST_OAM_SIZE_2] = 0x10, // SPRITE_SIZE_32x32
- [ST_OAM_SIZE_3] = 0x40 // SPRITE_SIZE_64x64
- },
- [ST_OAM_H_RECTANGLE] = {
- [ST_OAM_SIZE_0] = 0x02, // SPRITE_SIZE_16x8
- [ST_OAM_SIZE_1] = 0x04, // SPRITE_SIZE_32x8
- [ST_OAM_SIZE_2] = 0x08, // SPRITE_SIZE_32x16
- [ST_OAM_SIZE_3] = 0x20 // SPRITE_SIZE_64x32
- },
- [ST_OAM_V_RECTANGLE] = {
- [ST_OAM_SIZE_0] = 0x02, // SPRITE_SIZE_8x16
- [ST_OAM_SIZE_1] = 0x04, // SPRITE_SIZE_8x32
- [ST_OAM_SIZE_2] = 0x08, // SPRITE_SIZE_16x32
- [ST_OAM_SIZE_3] = 0x20 // SPRITE_SIZE_32x64
- }
-};
-
// code
bool32 DigitObjUtil_Init(u32 count)
{
@@ -446,5 +424,5 @@ static bool32 SharesPalWithAnyActive(u32 id)
u8 GetTilesPerImage(u32 shape, u32 size)
{
- return sTilesPerImage[shape][size];
+ return 1 << GetSpanPerImage(shape, size);
}
diff --git a/src/egg_hatch.c b/src/egg_hatch.c
index 40f2d29278e7..88f2b329e9c6 100644
--- a/src/egg_hatch.c
+++ b/src/egg_hatch.c
@@ -36,6 +36,7 @@
#include "data.h"
#include "battle.h" // to get rid of later
#include "constants/rgb.h"
+#include "party_menu.h"
#define GFXTAG_EGG 12345
#define GFXTAG_EGG_SHARD 23456
@@ -377,7 +378,7 @@ static void AddHatchedMonToParty(u8 id)
GetSetPokedexFlag(species, FLAG_SET_SEEN);
GetSetPokedexFlag(species, FLAG_SET_CAUGHT);
- GetMonNickname2(mon, gStringVar1);
+ GetMonNickname(mon, gStringVar1);
// A met level of 0 is interpreted on the summary screen as "hatched at"
metLevel = 0;
@@ -650,7 +651,7 @@ static void CB2_EggHatch(void)
break;
case 5:
// "{mon} hatched from egg" message/fanfare
- GetMonNickname2(&gPlayerParty[sEggHatchData->eggPartyId], gStringVar1);
+ GetMonNickname(&gPlayerParty[sEggHatchData->eggPartyId], gStringVar1);
StringExpandPlaceholders(gStringVar4, gText_HatchedFromEgg);
EggHatchPrintMessage(sEggHatchData->windowId, gStringVar4, 0, 3, TEXT_SKIP_DRAW);
PlayFanfare(MUS_EVOLVED);
@@ -668,7 +669,7 @@ static void CB2_EggHatch(void)
break;
case 8:
// Ready the nickname prompt
- GetMonNickname2(&gPlayerParty[sEggHatchData->eggPartyId], gStringVar1);
+ GetMonNickname(&gPlayerParty[sEggHatchData->eggPartyId], gStringVar1);
StringExpandPlaceholders(gStringVar4, gText_NicknameHatchPrompt);
EggHatchPrintMessage(sEggHatchData->windowId, gStringVar4, 0, 2, 1);
sEggHatchData->state++;
@@ -687,7 +688,7 @@ static void CB2_EggHatch(void)
switch (Menu_ProcessInputNoWrapClearOnChoose())
{
case 0: // Yes
- GetMonNickname2(&gPlayerParty[sEggHatchData->eggPartyId], gStringVar3);
+ GetMonNickname(&gPlayerParty[sEggHatchData->eggPartyId], gStringVar3);
species = GetMonData(&gPlayerParty[sEggHatchData->eggPartyId], MON_DATA_SPECIES);
gender = GetMonGender(&gPlayerParty[sEggHatchData->eggPartyId]);
personality = GetMonData(&gPlayerParty[sEggHatchData->eggPartyId], MON_DATA_PERSONALITY, 0);
diff --git a/src/event_data.c b/src/event_data.c
index 5fbe1bd3aa57..33cb02027bd1 100644
--- a/src/event_data.c
+++ b/src/event_data.c
@@ -196,7 +196,7 @@ bool8 VarSet(u16 id, u16 value)
return TRUE;
}
-u8 VarGetObjectEventGraphicsId(u8 id)
+u16 VarGetObjectEventGraphicsId(u8 id)
{
return VarGet(VAR_OBJ_GFX_ID_0 + id);
}
diff --git a/src/event_object_lock.c b/src/event_object_lock.c
index 29575111fbba..3215c61f2c7a 100644
--- a/src/event_object_lock.c
+++ b/src/event_object_lock.c
@@ -151,6 +151,7 @@ static void Task_FreezeObjectAndPlayer(u8 taskId)
void FreezeForApproachingTrainers(void)
{
u8 trainerObjectId1, trainerObjectId2, taskId;
+ struct ObjectEvent *followerObj = GetFollowerObject();
trainerObjectId1 = GetChosenApproachingTrainerObjectEventId(0);
if (gNoOfApproachingTrainers == 2)
@@ -188,6 +189,8 @@ void FreezeForApproachingTrainers(void)
gTasks[taskId].tObjectFrozen = TRUE;
}
}
+ if (followerObj) // Unfreeze follower so it can move behind player
+ UnfreezeObjectEvent(followerObj);
}
bool8 IsFreezeObjectAndPlayerFinished(void)
diff --git a/src/event_object_movement.c b/src/event_object_movement.c
index 10d427e517fb..1edc986c9b18 100644
--- a/src/event_object_movement.c
+++ b/src/event_object_movement.c
@@ -1,9 +1,13 @@
#include "global.h"
#include "malloc.h"
+#include "battle_anim.h"
#include "battle_pyramid.h"
+#include "battle_util.h"
#include "berry.h"
+#include "data.h"
#include "debug.h"
#include "decoration.h"
+#include "decompress.h"
#include "event_data.h"
#include "event_object_movement.h"
#include "event_scripts.h"
@@ -12,24 +16,42 @@
#include "field_effect.h"
#include "field_effect_helpers.h"
#include "field_player_avatar.h"
+#include "field_weather.h"
#include "fieldmap.h"
+#include "follower_helper.h"
+#include "gpu_regs.h"
+#include "graphics.h"
#include "mauville_old_man.h"
#include "metatile_behavior.h"
#include "overworld.h"
#include "palette.h"
+#include "pokemon.h"
+#include "pokeball.h"
#include "random.h"
+#include "region_map.h"
+#include "script.h"
+#include "sound.h"
#include "sprite.h"
#include "task.h"
#include "trainer_see.h"
#include "trainer_hill.h"
#include "util.h"
+#include "wild_encounter.h"
#include "constants/event_object_movement.h"
+#include "constants/abilities.h"
+#include "constants/battle.h"
#include "constants/event_objects.h"
#include "constants/field_effects.h"
#include "constants/items.h"
+#include "constants/map_types.h"
#include "constants/mauville_old_man.h"
+#include "constants/rgb.h"
+#include "constants/region_map_sections.h"
+#include "constants/songs.h"
+#include "constants/species.h"
#include "constants/trainer_types.h"
#include "constants/union_room.h"
+#include "constants/weather.h"
// this file was known as evobjmv.c in Game Freak's original source
@@ -47,6 +69,13 @@ enum {
JUMP_DISTANCE_FAR,
};
+// Used for storing conditional emotes
+struct SpecialEmote
+{
+ u16 index;
+ u8 emotion;
+};
+
// Sprite data used throughout
#define sObjEventId data[0]
#define sTypeFuncId data[1] // Index into corresponding gMovementTypeFuncs_* table
@@ -115,7 +144,10 @@ static void InitObjectPriorityByElevation(struct Sprite *, u8);
static void ObjectEventUpdateSubpriority(struct ObjectEvent *, struct Sprite *);
static void DoTracksGroundEffect_None(struct ObjectEvent *, struct Sprite *, u8);
static void DoTracksGroundEffect_Footprints(struct ObjectEvent *, struct Sprite *, u8);
+static void DoTracksGroundEffect_FootprintsB(struct ObjectEvent*, struct Sprite*, u8);
+static void DoTracksGroundEffect_FootprintsC(struct ObjectEvent*, struct Sprite*, u8);
static void DoTracksGroundEffect_BikeTireTracks(struct ObjectEvent *, struct Sprite *, u8);
+static void DoTracksGroundEffect_SlitherTracks(struct ObjectEvent*, struct Sprite*, u8);
static void DoRippleFieldEffect(struct ObjectEvent *, struct Sprite *);
static void DoGroundEffects_OnSpawn(struct ObjectEvent *, struct Sprite *);
static void DoGroundEffects_OnBeginStep(struct ObjectEvent *, struct Sprite *);
@@ -135,25 +167,26 @@ static void UpdateObjectEventVisibility(struct ObjectEvent *, struct Sprite *);
static void MakeSpriteTemplateFromObjectEventTemplate(const struct ObjectEventTemplate *, struct SpriteTemplate *, const struct SubspriteTable **);
static void GetObjectEventMovingCameraOffset(s16 *, s16 *);
static const struct ObjectEventTemplate *GetObjectEventTemplateByLocalIdAndMap(u8, u8, u8);
-static void LoadObjectEventPalette(u16);
static void RemoveObjectEventIfOutsideView(struct ObjectEvent *);
static void SpawnObjectEventOnReturnToField(u8, s16, s16);
static void SetPlayerAvatarObjectEventIdAndObjectId(u8, u8);
+static u8 UpdateSpritePalette(const struct SpritePalette *spritePalette, struct Sprite *sprite);
static void ResetObjectEventFldEffData(struct ObjectEvent *);
static u8 LoadSpritePaletteIfTagExists(const struct SpritePalette *);
static u8 FindObjectEventPaletteIndexByTag(u16);
-static void _PatchObjectPalette(u16, u8);
static bool8 ObjectEventDoesElevationMatch(struct ObjectEvent *, u8);
static void SpriteCB_CameraObject(struct Sprite *);
static void CameraObject_Init(struct Sprite *);
static void CameraObject_UpdateMove(struct Sprite *);
static void CameraObject_UpdateFrozen(struct Sprite *);
static const struct ObjectEventTemplate *FindObjectEventTemplateByLocalId(u8, const struct ObjectEventTemplate *, u8);
-static void ClearObjectEventMovement(struct ObjectEvent *, struct Sprite *);
static void ObjectEventSetSingleMovement(struct ObjectEvent *, struct Sprite *, u8);
static void SetSpriteDataForNormalStep(struct Sprite *, u8, u8);
static void InitSpriteForFigure8Anim(struct Sprite *);
static bool8 AnimateSpriteInFigure8(struct Sprite *);
+u8 GetDirectionToFace(s16 x1, s16 y1, s16 x2, s16 y2);
+static void FollowerSetGraphics(struct ObjectEvent *, u16, u8, bool8);
+static void ObjectEventSetGraphics(struct ObjectEvent *, const struct ObjectEventGraphicsInfo *);
static void SpriteCB_VirtualObject(struct Sprite *);
static void DoShadowFieldEffect(struct ObjectEvent *);
static void SetJumpSpriteData(struct Sprite *, u8, u8, u8);
@@ -163,9 +196,14 @@ static u8 DoJumpSpriteMovement(struct Sprite *);
static u8 DoJumpSpecialSpriteMovement(struct Sprite *);
static void CreateLevitateMovementTask(struct ObjectEvent *);
static void DestroyLevitateMovementTask(u8);
+static bool8 GetFollowerInfo(u16 *species, u8 *form, u8 *shiny);
+static u8 LoadDynamicFollowerPalette(u16 species, u8 form, bool32 shiny);
+static const struct ObjectEventGraphicsInfo *SpeciesToGraphicsInfo(u16 species, u8 form);
static bool8 NpcTakeStep(struct Sprite *);
static bool8 IsElevationMismatchAt(u8, s16, s16);
static bool8 AreElevationsCompatible(u8, u8);
+static u16 PackGraphicsId(const struct ObjectEventTemplate *template);
+static void CopyObjectGraphicsInfoToSpriteTemplate_WithMovementType(u16 graphicsId, u16 movementType, struct SpriteTemplate *spriteTemplate, const struct SubspriteTable **subspriteTables);
static const struct SpriteFrameImage sPicTable_PechaBerryTree[];
@@ -292,6 +330,7 @@ static void (*const sMovementTypeCallbacks[])(struct Sprite *) =
[MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_UP] = MovementType_WalkSlowlyInPlace,
[MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_LEFT] = MovementType_WalkSlowlyInPlace,
[MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_RIGHT] = MovementType_WalkSlowlyInPlace,
+ [MOVEMENT_TYPE_FOLLOW_PLAYER] = MovementType_FollowPlayer,
};
static const bool8 sMovementTypeHasRange[NUM_MOVEMENT_TYPES] = {
@@ -422,44 +461,6 @@ const u8 gInitialMovementTypeFacingDirections[] = {
[MOVEMENT_TYPE_WALK_SLOWLY_IN_PLACE_RIGHT] = DIR_EAST,
};
-#define OBJ_EVENT_PAL_TAG_BRENDAN 0x1100
-#define OBJ_EVENT_PAL_TAG_BRENDAN_REFLECTION 0x1101
-#define OBJ_EVENT_PAL_TAG_BRIDGE_REFLECTION 0x1102
-#define OBJ_EVENT_PAL_TAG_NPC_1 0x1103
-#define OBJ_EVENT_PAL_TAG_NPC_2 0x1104
-#define OBJ_EVENT_PAL_TAG_NPC_3 0x1105
-#define OBJ_EVENT_PAL_TAG_NPC_4 0x1106
-#define OBJ_EVENT_PAL_TAG_NPC_1_REFLECTION 0x1107
-#define OBJ_EVENT_PAL_TAG_NPC_2_REFLECTION 0x1108
-#define OBJ_EVENT_PAL_TAG_NPC_3_REFLECTION 0x1109
-#define OBJ_EVENT_PAL_TAG_NPC_4_REFLECTION 0x110A
-#define OBJ_EVENT_PAL_TAG_QUINTY_PLUMP 0x110B
-#define OBJ_EVENT_PAL_TAG_QUINTY_PLUMP_REFLECTION 0x110C
-#define OBJ_EVENT_PAL_TAG_TRUCK 0x110D
-#define OBJ_EVENT_PAL_TAG_VIGOROTH 0x110E
-#define OBJ_EVENT_PAL_TAG_ZIGZAGOON 0x110F
-#define OBJ_EVENT_PAL_TAG_MAY 0x1110
-#define OBJ_EVENT_PAL_TAG_MAY_REFLECTION 0x1111
-#define OBJ_EVENT_PAL_TAG_MOVING_BOX 0x1112
-#define OBJ_EVENT_PAL_TAG_CABLE_CAR 0x1113
-#define OBJ_EVENT_PAL_TAG_SSTIDAL 0x1114
-#define OBJ_EVENT_PAL_TAG_PLAYER_UNDERWATER 0x1115
-#define OBJ_EVENT_PAL_TAG_KYOGRE 0x1116
-#define OBJ_EVENT_PAL_TAG_KYOGRE_REFLECTION 0x1117
-#define OBJ_EVENT_PAL_TAG_GROUDON 0x1118
-#define OBJ_EVENT_PAL_TAG_GROUDON_REFLECTION 0x1119
-#define OBJ_EVENT_PAL_TAG_UNUSED 0x111A
-#define OBJ_EVENT_PAL_TAG_SUBMARINE_SHADOW 0x111B
-#define OBJ_EVENT_PAL_TAG_POOCHYENA 0x111C
-#define OBJ_EVENT_PAL_TAG_RED_LEAF 0x111D
-#define OBJ_EVENT_PAL_TAG_DEOXYS 0x111E
-#define OBJ_EVENT_PAL_TAG_BIRTH_ISLAND_STONE 0x111F
-#define OBJ_EVENT_PAL_TAG_HO_OH 0x1120
-#define OBJ_EVENT_PAL_TAG_LUGIA 0x1121
-#define OBJ_EVENT_PAL_TAG_RS_BRENDAN 0x1122
-#define OBJ_EVENT_PAL_TAG_RS_MAY 0x1123
-#define OBJ_EVENT_PAL_TAG_NONE 0x11FF
-
#include "data/object_events/object_event_graphics_info_pointers.h"
#include "data/field_effects/field_effect_object_template_pointers.h"
#include "data/object_events/object_event_pic_tables.h"
@@ -467,6 +468,7 @@ const u8 gInitialMovementTypeFacingDirections[] = {
#include "data/object_events/base_oam.h"
#include "data/object_events/object_event_subsprites.h"
#include "data/object_events/object_event_graphics_info.h"
+#include "data/object_events/object_event_graphics_info_followers.h"
static const struct SpritePalette sObjectEventSpritePalettes[] = {
{gObjectEventPal_Npc1, OBJ_EVENT_PAL_TAG_NPC_1},
@@ -504,6 +506,40 @@ static const struct SpritePalette sObjectEventSpritePalettes[] = {
{gObjectEventPal_Lugia, OBJ_EVENT_PAL_TAG_LUGIA},
{gObjectEventPal_RubySapphireBrendan, OBJ_EVENT_PAL_TAG_RS_BRENDAN},
{gObjectEventPal_RubySapphireMay, OBJ_EVENT_PAL_TAG_RS_MAY},
+#if OW_FOLLOWERS_POKEBALLS
+ {gObjectEventPal_MasterBall, OBJ_EVENT_PAL_TAG_BALL_MASTER},
+ {gObjectEventPal_UltraBall, OBJ_EVENT_PAL_TAG_BALL_ULTRA},
+ {gObjectEventPal_GreatBall, OBJ_EVENT_PAL_TAG_BALL_GREAT},
+ {gObjectEventPal_SafariBall, OBJ_EVENT_PAL_TAG_BALL_SAFARI},
+ {gObjectEventPal_NetBall, OBJ_EVENT_PAL_TAG_BALL_NET},
+ {gObjectEventPal_DiveBall, OBJ_EVENT_PAL_TAG_BALL_DIVE},
+ {gObjectEventPal_NestBall, OBJ_EVENT_PAL_TAG_BALL_NEST},
+ {gObjectEventPal_RepeatBall, OBJ_EVENT_PAL_TAG_BALL_REPEAT},
+ {gObjectEventPal_TimerBall, OBJ_EVENT_PAL_TAG_BALL_TIMER},
+ {gObjectEventPal_LuxuryBall, OBJ_EVENT_PAL_TAG_BALL_LUXURY},
+ {gObjectEventPal_PremierBall, OBJ_EVENT_PAL_TAG_BALL_PREMIER},
+ {gObjectEventPal_DuskBall, OBJ_EVENT_PAL_TAG_BALL_DUSK},
+ {gObjectEventPal_HealBall, OBJ_EVENT_PAL_TAG_BALL_HEAL},
+ {gObjectEventPal_QuickBall, OBJ_EVENT_PAL_TAG_BALL_QUICK},
+ {gObjectEventPal_CherishBall, OBJ_EVENT_PAL_TAG_BALL_CHERISH},
+ {gObjectEventPal_ParkBall, OBJ_EVENT_PAL_TAG_BALL_PARK},
+ {gObjectEventPal_FastBall, OBJ_EVENT_PAL_TAG_BALL_FAST},
+ {gObjectEventPal_LevelBall, OBJ_EVENT_PAL_TAG_BALL_LEVEL},
+ {gObjectEventPal_LureBall, OBJ_EVENT_PAL_TAG_BALL_LURE},
+ {gObjectEventPal_HeavyBall, OBJ_EVENT_PAL_TAG_BALL_HEAVY},
+ {gObjectEventPal_LoveBall, OBJ_EVENT_PAL_TAG_BALL_LOVE},
+ {gObjectEventPal_FriendBall, OBJ_EVENT_PAL_TAG_BALL_FRIEND},
+ {gObjectEventPal_MoonBall, OBJ_EVENT_PAL_TAG_BALL_MOON},
+ {gObjectEventPal_SportBall, OBJ_EVENT_PAL_TAG_BALL_SPORT},
+ {gObjectEventPal_DreamBall, OBJ_EVENT_PAL_TAG_BALL_DREAM},
+ {gObjectEventPal_BeastBall, OBJ_EVENT_PAL_TAG_BALL_BEAST},
+ // Gen VIII
+ #ifdef ITEM_STRANGE_BALL
+ {gObjectEventPal_StrangeBall, OBJ_EVENT_PAL_TAG_BALL_STRANGE},
+ #endif //ITEM_STRANGE_BALL
+#endif //OW_FOLLOWERS_POKEBALLS
+ {gObjectEventPal_Substitute, OBJ_EVENT_PAL_TAG_SUBSTITUTE},
+ {gObjectEventPaletteEmotes, OBJ_EVENT_PAL_TAG_EMOTES},
#ifdef BUGFIX
{NULL, OBJ_EVENT_PAL_TAG_NONE},
#else
@@ -1223,7 +1259,7 @@ u8 GetFirstInactiveObjectEventId(void)
u8 GetObjectEventIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroupId)
{
- if (localId < OBJ_EVENT_ID_PLAYER)
+ if (localId < OBJ_EVENT_ID_FOLLOWER)
return GetObjectEventIdByLocalIdAndMapInternal(localId, mapNum, mapGroupId);
return GetObjectEventIdByLocalId(localId);
@@ -1289,7 +1325,15 @@ static u8 InitObjectEventStateFromTemplate(const struct ObjectEventTemplate *tem
y = template->y + MAP_OFFSET;
objectEvent->active = TRUE;
objectEvent->triggerGroundEffectsOnMove = TRUE;
- objectEvent->graphicsId = template->graphicsId;
+ objectEvent->graphicsId = PackGraphicsId(template);
+ SetObjectEventDynamicGraphicsId(objectEvent);
+ if (objectEvent->graphicsId >= OBJ_EVENT_GFX_MON_BASE)
+ {
+ if (template->script && template->script[0] == 0x7d)
+ objectEvent->shiny = T1_READ_16(&template->script[2]) >> 15;
+ else if (template->trainerRange_berryTreeId)
+ objectEvent->shiny = VarGet(template->trainerRange_berryTreeId) >> 5;
+ }
objectEvent->movementType = template->movementType;
objectEvent->localId = template->localId;
objectEvent->mapNum = mapNum;
@@ -1309,7 +1353,6 @@ static u8 InitObjectEventStateFromTemplate(const struct ObjectEventTemplate *tem
objectEvent->trainerRange_berryTreeId = template->trainerRange_berryTreeId;
objectEvent->previousMovementDirection = gInitialMovementTypeFacingDirections[template->movementType];
SetObjectEventDirection(objectEvent, objectEvent->previousMovementDirection);
- SetObjectEventDynamicGraphicsId(objectEvent);
if (sMovementTypeHasRange[objectEvent->movementType])
{
if (objectEvent->rangeX == 0)
@@ -1374,6 +1417,8 @@ static void RemoveObjectEvent(struct ObjectEvent *objectEvent)
{
objectEvent->active = FALSE;
RemoveObjectEventInternal(objectEvent);
+ // zero potential species info
+ objectEvent->graphicsId = objectEvent->shiny = 0;
}
void RemoveObjectEventByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup)
@@ -1391,7 +1436,25 @@ static void RemoveObjectEventInternal(struct ObjectEvent *objectEvent)
struct SpriteFrameImage image;
image.size = GetObjectEventGraphicsInfo(objectEvent->graphicsId)->size;
gSprites[objectEvent->spriteId].images = ℑ
- DestroySprite(&gSprites[objectEvent->spriteId]);
+ // It's possible that this function is called while the sprite pointed to `== sDummySprite`, i.e during map resume;
+ // In this case, don't free the palette as `paletteNum` is likely blank dummy data
+ if (!gSprites[objectEvent->spriteId].inUse &&
+ !gSprites[objectEvent->spriteId].oam.paletteNum &&
+ gSprites[objectEvent->spriteId].callback == SpriteCallbackDummy)
+ {
+ DestroySprite(&gSprites[objectEvent->spriteId]);
+ }
+ else
+ {
+ u32 paletteNum = gSprites[objectEvent->spriteId].oam.paletteNum;
+ u16 tileStart;
+ if (OW_GFX_COMPRESS)
+ tileStart = gSprites[objectEvent->spriteId].sheetTileStart;
+ DestroySprite(&gSprites[objectEvent->spriteId]);
+ FieldEffectFreePaletteIfUnused(paletteNum);
+ if (OW_GFX_COMPRESS && tileStart)
+ FieldEffectFreeTilesIfUnused(tileStart);
+ }
}
void RemoveAllObjectEventsExceptPlayer(void)
@@ -1405,10 +1468,117 @@ void RemoveAllObjectEventsExceptPlayer(void)
}
}
+// Free a sprite's current tiles and reallocate with a new size
+// Used when changing to a gfx info with a larger size
+static s16 ReallocSpriteTiles(struct Sprite *sprite, u32 byteSize)
+{
+ s16 i;
+ bool32 wasVisible = sprite->invisible;
+ sprite->invisible = TRUE;
+
+ i = CopySprite(sprite, sprite->x, sprite->y, 0xFF);
+ if (i < MAX_SPRITES)
+ {
+ DestroySprite(&gSprites[i]);
+ i = AllocSpriteTiles(byteSize / TILE_SIZE_4BPP);
+ if (i >= 0)
+ {
+ // Fill the allocated area with zeroes
+ // To avoid visual glitches if the frame hasn't been copied yet
+ CpuFastFill16(0, (u8 *)OBJ_VRAM0 + TILE_SIZE_4BPP * i, byteSize);
+ sprite->oam.tileNum = i;
+ }
+ }
+ else
+ {
+ i = -1;
+ }
+
+ sprite->invisible = wasVisible;
+ return i;
+}
+
+u16 LoadSheetGraphicsInfo(const struct ObjectEventGraphicsInfo *info, u16 uuid, struct Sprite *sprite)
+{
+ u16 tag = info->tileTag;
+ if (tag != TAG_NONE || info->compressed)
+ {
+ // sheet-based gfx
+ u32 sheetSpan = GetSpanPerImage(info->oam->shape, info->oam->size);
+ u16 oldTiles = 0;
+ u16 tileStart;
+ bool32 oldInvisible;
+ if (tag == TAG_NONE)
+ tag = COMP_OW_TILE_TAG_BASE + uuid;
+
+ if (sprite)
+ {
+ oldInvisible = sprite->invisible;
+ oldTiles = sprite->sheetTileStart;
+ sprite->sheetTileStart = 0; // mark unused
+ // Note: If sprite was not allocated to use a sheet,
+ // the tiles assigned to it will leak here,
+ // as its tileNum will be repointed to the new tileStart
+ // TODO: Unload static tiles!
+ }
+
+ tileStart = GetSpriteTileStartByTag(tag);
+ // sheet not loaded; unload any old tiles and load it
+ if (tileStart == TAG_NONE)
+ {
+ struct SpriteFrameImage image = {.size = info->size, .data = info->images->data};
+ struct SpriteTemplate template = {.tileTag = tag, .images = &image};
+ // Load, then free, in order to avoid displaying garbage data
+ // before sprite's `sheetTileStart` is repointed
+ tileStart = LoadCompressedSpriteSheetByTemplate(&template, TILE_SIZE_4BPP << sheetSpan);
+ if (oldTiles) {
+ FieldEffectFreeTilesIfUnused(oldTiles);
+ // We weren't able to load the sheet;
+ // retry (after having freed), and set sprite to invisible until done
+ if (tileStart <= 0) {
+ if (sprite)
+ sprite->invisible = TRUE;
+ tileStart = LoadCompressedSpriteSheetByTemplate(&template, TILE_SIZE_4BPP << sheetSpan);
+ }
+ }
+ // sheet loaded; unload any *other* sheet for sprite
+ }
+ else if (oldTiles && oldTiles != tileStart)
+ {
+ FieldEffectFreeTilesIfUnused(oldTiles);
+ }
+
+ if (sprite)
+ {
+ sprite->sheetTileStart = tileStart;
+ sprite->sheetSpan = sheetSpan;
+ sprite->usingSheet = TRUE;
+ sprite->invisible = oldInvisible;
+ }
+ // Going from sheet -> !sheet, reset tile number
+ // (sheet stays loaded)
+ // Note: It's possible to load a non-sheet gfx
+ // larger than the allocated prefix space,
+ // in which case we would have to realloc
+ // TODO: Realloc usingSheet -> !usingSheet larger gfx
+ }
+ else if (sprite && sprite->usingSheet)
+ {
+ sprite->oam.tileNum = sprite->sheetTileStart;
+ sprite->usingSheet = FALSE;
+
+ }
+ else if (sprite && !sprite->sheetTileStart && sprite->oam.size != info->oam->size)
+ {
+ // Not usingSheet and info size differs; realloc tiles
+ ReallocSpriteTiles(sprite, info->images->size);
+ }
+ return tag;
+}
+
static u8 TrySetupObjectEventSprite(const struct ObjectEventTemplate *objectEventTemplate, struct SpriteTemplate *spriteTemplate, u8 mapNum, u8 mapGroup, s16 cameraX, s16 cameraY)
{
u8 spriteId;
- u8 paletteSlot;
u8 objectEventId;
struct Sprite *sprite;
struct ObjectEvent *objectEvent;
@@ -1420,25 +1590,21 @@ static u8 TrySetupObjectEventSprite(const struct ObjectEventTemplate *objectEven
objectEvent = &gObjectEvents[objectEventId];
graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId);
- paletteSlot = graphicsInfo->paletteSlot;
- if (paletteSlot == PALSLOT_PLAYER)
- {
- LoadPlayerObjectReflectionPalette(graphicsInfo->paletteTag, paletteSlot);
- }
- else if (paletteSlot == PALSLOT_NPC_SPECIAL)
- {
- LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag, paletteSlot);
- }
- else if (paletteSlot >= 16)
- {
- paletteSlot -= 16;
- _PatchObjectPalette(graphicsInfo->paletteTag, paletteSlot);
- }
+ if (spriteTemplate->paletteTag != TAG_NONE && spriteTemplate->paletteTag != OBJ_EVENT_PAL_TAG_DYNAMIC)
+ LoadObjectEventPalette(spriteTemplate->paletteTag);
if (objectEvent->movementType == MOVEMENT_TYPE_INVISIBLE)
objectEvent->invisible = TRUE;
- *(u16 *)&spriteTemplate->paletteTag = TAG_NONE;
+ if (OW_GFX_COMPRESS)
+ spriteTemplate->tileTag = LoadSheetGraphicsInfo(graphicsInfo, objectEvent->graphicsId, NULL);
+
+ if (objectEvent->graphicsId >= OBJ_EVENT_GFX_MON_BASE + SPECIES_SHINY_TAG)
+ {
+ objectEvent->shiny = TRUE;
+ objectEvent->graphicsId -= SPECIES_SHINY_TAG;
+ }
+
spriteId = CreateSprite(spriteTemplate, 0, 0, 0);
if (spriteId == MAX_SPRITES)
{
@@ -1447,12 +1613,16 @@ static u8 TrySetupObjectEventSprite(const struct ObjectEventTemplate *objectEven
}
sprite = &gSprites[spriteId];
+ // Use palette from species palette table
+ if (spriteTemplate->paletteTag == OBJ_EVENT_PAL_TAG_DYNAMIC)
+ sprite->oam.paletteNum = LoadDynamicFollowerPalette(OW_SPECIES(objectEvent), OW_FORM(objectEvent), objectEvent->shiny);
+ if (OW_GFX_COMPRESS && sprite->usingSheet)
+ sprite->sheetSpan = GetSpanPerImage(sprite->oam.shape, sprite->oam.size);
GetMapCoordsFromSpritePos(objectEvent->currentCoords.x + cameraX, objectEvent->currentCoords.y + cameraY, &sprite->x, &sprite->y);
sprite->centerToCornerVecX = -(graphicsInfo->width >> 1);
sprite->centerToCornerVecY = -(graphicsInfo->height >> 1);
sprite->x += 8;
sprite->y += 16 + sprite->centerToCornerVecY;
- sprite->oam.paletteNum = paletteSlot;
sprite->coordOffsetEnabled = TRUE;
sprite->sObjEventId = objectEventId;
objectEvent->spriteId = spriteId;
@@ -1465,16 +1635,40 @@ static u8 TrySetupObjectEventSprite(const struct ObjectEventTemplate *objectEven
return objectEventId;
}
+// Pack pokemon form info into a graphicsId, from a template's script
+static u16 PackGraphicsId(const struct ObjectEventTemplate *template)
+{
+ u16 graphicsId = template->graphicsId;
+ u32 form = 0;
+ // set form based on template's script,
+ // if first command is bufferspeciesname
+ if (graphicsId >= OBJ_EVENT_GFX_MON_BASE)
+ {
+ if (template->script && template->script[0] == 0x7d)
+ {
+ form = T1_READ_16(&template->script[2]);
+ form = (form >> 10) & 0x1F;
+ }
+ else if (template->trainerRange_berryTreeId)
+ {
+ form = template->trainerRange_berryTreeId & 0x1F;
+ }
+ graphicsId |= form << OBJ_EVENT_GFX_SPECIES_BITS;
+ }
+ return graphicsId;
+}
+
static u8 TrySpawnObjectEventTemplate(const struct ObjectEventTemplate *objectEventTemplate, u8 mapNum, u8 mapGroup, s16 cameraX, s16 cameraY)
{
u8 objectEventId;
+ u16 graphicsId = PackGraphicsId(objectEventTemplate);
struct SpriteTemplate spriteTemplate;
struct SpriteFrameImage spriteFrameImage;
const struct ObjectEventGraphicsInfo *graphicsInfo;
const struct SubspriteTable *subspriteTables = NULL;
- graphicsInfo = GetObjectEventGraphicsInfo(objectEventTemplate->graphicsId);
- MakeSpriteTemplateFromObjectEventTemplate(objectEventTemplate, &spriteTemplate, &subspriteTables);
+ graphicsInfo = GetObjectEventGraphicsInfo(graphicsId);
+ CopyObjectGraphicsInfoToSpriteTemplate_WithMovementType(graphicsId, objectEventTemplate->movementType, &spriteTemplate, &subspriteTables);
spriteFrameImage.size = graphicsInfo->size;
spriteTemplate.images = &spriteFrameImage;
objectEventId = TrySetupObjectEventSprite(objectEventTemplate, &spriteTemplate, mapNum, mapGroup, cameraX, cameraY);
@@ -1497,7 +1691,7 @@ u8 SpawnSpecialObjectEvent(struct ObjectEventTemplate *objectEventTemplate)
return TrySpawnObjectEventTemplate(objectEventTemplate, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, cameraX, cameraY);
}
-u8 SpawnSpecialObjectEventParameterized(u8 graphicsId, u8 movementBehavior, u8 localId, s16 x, s16 y, u8 elevation)
+u8 SpawnSpecialObjectEventParameterized(u16 graphicsId, u8 movementBehavior, u8 localId, s16 x, s16 y, u8 elevation)
{
struct ObjectEventTemplate objectEventTemplate;
@@ -1549,30 +1743,65 @@ static void CopyObjectGraphicsInfoToSpriteTemplate_WithMovementType(u16 graphics
CopyObjectGraphicsInfoToSpriteTemplate(graphicsId, sMovementTypeCallbacks[movementType], spriteTemplate, subspriteTables);
}
-static void MakeSpriteTemplateFromObjectEventTemplate(const struct ObjectEventTemplate *objectEventTemplate, struct SpriteTemplate *spriteTemplate, const struct SubspriteTable **subspriteTables)
+static void UNUSED MakeSpriteTemplateFromObjectEventTemplate(const struct ObjectEventTemplate *objectEventTemplate, struct SpriteTemplate *spriteTemplate, const struct SubspriteTable **subspriteTables)
{
CopyObjectGraphicsInfoToSpriteTemplate_WithMovementType(objectEventTemplate->graphicsId, objectEventTemplate->movementType, spriteTemplate, subspriteTables);
}
+// Loads information from graphicsId, with shininess separate
+// also can write palette tag to the template
+static u8 LoadDynamicFollowerPaletteFromGraphicsId(u16 graphicsId, bool8 shiny, struct SpriteTemplate *template)
+{
+ u16 species = ((graphicsId & OBJ_EVENT_GFX_SPECIES_MASK) - OBJ_EVENT_GFX_MON_BASE);
+ u8 form = (graphicsId >> OBJ_EVENT_GFX_SPECIES_BITS);
+ u8 paletteNum = LoadDynamicFollowerPalette(species, form, shiny);
+ if (template)
+ template->paletteTag = species;
+ return paletteNum;
+}
+
// Used to create a sprite using a graphicsId associated with object events.
u8 CreateObjectGraphicsSprite(u16 graphicsId, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority)
{
struct SpriteTemplate *spriteTemplate;
const struct SubspriteTable *subspriteTables;
+ const struct ObjectEventGraphicsInfo *graphicsInfo;
struct Sprite *sprite;
u8 spriteId;
+ bool32 isShiny = graphicsId >= SPECIES_SHINY_TAG + OBJ_EVENT_GFX_MON_BASE;
+
+ if (isShiny)
+ graphicsId -= SPECIES_SHINY_TAG;
spriteTemplate = Alloc(sizeof(struct SpriteTemplate));
CopyObjectGraphicsInfoToSpriteTemplate(graphicsId, callback, spriteTemplate, &subspriteTables);
- if (spriteTemplate->paletteTag != TAG_NONE)
+
+ if (spriteTemplate->paletteTag == OBJ_EVENT_PAL_TAG_DYNAMIC)
+ {
+ u32 paletteNum = LoadDynamicFollowerPaletteFromGraphicsId(graphicsId, isShiny, spriteTemplate);
+ spriteTemplate->paletteTag = GetSpritePaletteTagByPaletteNum(paletteNum);
+ }
+ else if (spriteTemplate->paletteTag != TAG_NONE)
+ {
LoadObjectEventPalette(spriteTemplate->paletteTag);
+ }
+ if (OW_GFX_COMPRESS)
+ {
+ graphicsInfo = GetObjectEventGraphicsInfo(graphicsId);
+ // Checking only for compressed here so as not to mess with decorations
+ if (graphicsInfo->compressed)
+ spriteTemplate->tileTag = LoadSheetGraphicsInfo(graphicsInfo, graphicsId, NULL);
+ }
spriteId = CreateSprite(spriteTemplate, x, y, subpriority);
+
Free(spriteTemplate);
if (spriteId != MAX_SPRITES && subspriteTables != NULL)
{
sprite = &gSprites[spriteId];
+ if (OW_GFX_COMPRESS && graphicsInfo->compressed)
+ sprite->sheetSpan = GetSpanPerImage(sprite->oam.shape, sprite->oam.size);
SetSubspriteTables(sprite, subspriteTables);
sprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY;
}
@@ -1587,7 +1816,7 @@ u8 CreateObjectGraphicsSprite(u16 graphicsId, void (*callback)(struct Sprite *),
// A unique id is given as an argument and stored in the sprite data to allow referring back to the same virtual object.
// They can be turned (and, in the case of the Union Room, animated teleporting in and out) but do not have movement types
// or any of the other data normally associated with object events.
-u8 CreateVirtualObject(u8 graphicsId, u8 virtualObjId, s16 x, s16 y, u8 elevation, u8 direction)
+u8 CreateVirtualObject(u16 graphicsId, u8 virtualObjId, s16 x, s16 y, u8 elevation, u8 direction)
{
u8 spriteId;
struct Sprite *sprite;
@@ -1597,10 +1826,12 @@ u8 CreateVirtualObject(u8 graphicsId, u8 virtualObjId, s16 x, s16 y, u8 elevatio
graphicsInfo = GetObjectEventGraphicsInfo(graphicsId);
CopyObjectGraphicsInfoToSpriteTemplate(graphicsId, SpriteCB_VirtualObject, &spriteTemplate, &subspriteTables);
- *(u16 *)&spriteTemplate.paletteTag = TAG_NONE;
x += MAP_OFFSET;
y += MAP_OFFSET;
SetSpritePosToOffsetMapCoords(&x, &y, 8, 16);
+ if (spriteTemplate.paletteTag != TAG_NONE)
+ LoadObjectEventPalette(spriteTemplate.paletteTag);
+
spriteId = CreateSpriteAtEnd(&spriteTemplate, x, y, 0);
if (spriteId != MAX_SPRITES)
{
@@ -1608,17 +1839,10 @@ u8 CreateVirtualObject(u8 graphicsId, u8 virtualObjId, s16 x, s16 y, u8 elevatio
sprite->centerToCornerVecX = -(graphicsInfo->width >> 1);
sprite->centerToCornerVecY = -(graphicsInfo->height >> 1);
sprite->y += sprite->centerToCornerVecY;
- sprite->oam.paletteNum = graphicsInfo->paletteSlot;
- if (sprite->oam.paletteNum >= 16)
- sprite->oam.paletteNum -= 16;
sprite->coordOffsetEnabled = TRUE;
sprite->sVirtualObjId = virtualObjId;
sprite->sVirtualObjElev = elevation;
- if (graphicsInfo->paletteSlot == PALSLOT_NPC_SPECIAL)
- LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag, graphicsInfo->paletteSlot);
- else if (graphicsInfo->paletteSlot >= 16)
- _PatchObjectPalette(graphicsInfo->paletteTag, graphicsInfo->paletteSlot | 0xf0);
if (subspriteTables != NULL)
{
@@ -1632,6 +1856,601 @@ u8 CreateVirtualObject(u8 graphicsId, u8 virtualObjId, s16 x, s16 y, u8 elevatio
return spriteId;
}
+// Return address of first conscious party mon or NULL
+struct Pokemon *GetFirstLiveMon(void)
+{
+ u32 i;
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ if (gPlayerParty[i].hp > 0 && !(gPlayerParty[i].box.isEgg || gPlayerParty[i].box.isBadEgg))
+ return &gPlayerParty[i];
+ }
+ return NULL;
+}
+
+// Return follower ObjectEvent or NULL
+struct ObjectEvent *GetFollowerObject(void)
+{
+ u32 i;
+ for (i = 0; i < OBJECT_EVENTS_COUNT; i++)
+ {
+ if (gObjectEvents[i].localId == OBJ_EVENT_ID_FOLLOWER && gObjectEvents[i].active)
+ return &gObjectEvents[i];
+ }
+ return NULL;
+}
+
+// Return graphicsInfo for a pokemon species & form
+static const struct ObjectEventGraphicsInfo *SpeciesToGraphicsInfo(u16 species, u8 form)
+{
+ const struct ObjectEventGraphicsInfo *graphicsInfo = NULL;
+#if OW_POKEMON_OBJECT_EVENTS
+ switch (species)
+ {
+ case SPECIES_UNOWN: // Letters >A are defined as species >= NUM_SPECIES, so are not contiguous with A
+ form %= NUM_UNOWN_FORMS;
+ graphicsInfo = &gSpeciesInfo[form ? SPECIES_UNOWN_B + form - 1 : species].overworldData;
+ break;
+ default:
+ graphicsInfo = &gSpeciesInfo[species].overworldData;
+ break;
+ }
+ // Try to avoid OOB or undefined access
+ if ((graphicsInfo->tileTag == 0 && species < NUM_SPECIES) || (graphicsInfo->tileTag != TAG_NONE && species >= NUM_SPECIES))
+ {
+ if (OW_SUBSTITUTE_PLACEHOLDER)
+ return &gSpeciesInfo[SPECIES_NONE].overworldData;
+ return NULL;
+ }
+#endif // OW_POKEMON_OBJECT_EVENTS
+ return graphicsInfo;
+}
+
+// Find, or load, the palette for the specified pokemon info
+static u8 LoadDynamicFollowerPalette(u16 species, u8 form, bool32 shiny)
+{
+ u32 paletteNum;
+ // Use standalone palette, unless entry is OOB or NULL (fallback to front-sprite-based)
+#if OW_POKEMON_OBJECT_EVENTS == TRUE && OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ if ((shiny && gSpeciesInfo[species].overworldPalette)
+ || (!shiny && gSpeciesInfo[species].overworldShinyPalette))
+ {
+ struct SpritePalette spritePalette;
+ u16 palTag = shiny ? (species + SPECIES_SHINY_TAG + OBJ_EVENT_PAL_TAG_DYNAMIC) : (species + OBJ_EVENT_PAL_TAG_DYNAMIC);
+ // palette already loaded
+ if ((paletteNum = IndexOfSpritePaletteTag(palTag)) < 16)
+ return paletteNum;
+ spritePalette.tag = palTag;
+ if (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))
+ {
+ // IsLZ77Data guarantees word-alignment, so casting this is safe
+ LZ77UnCompWram((u32*)spritePalette.data, gDecompressionBuffer);
+ spritePalette.data = (void*)gDecompressionBuffer;
+ }
+ paletteNum = LoadSpritePalette(&spritePalette);
+ }
+ else
+#endif //OW_POKEMON_OBJECT_EVENTS == TRUE && OW_PKMN_OBJECTS_SHARE_PALETTES == FALSE
+ {
+ // Note that the shiny palette tag is `species + SPECIES_SHINY_TAG`, which must be increased with more pokemon
+ // so that palette tags do not overlap
+ const u32 *palette = GetMonSpritePalFromSpecies(species, shiny, FALSE); //ETODO
+ // palette already loaded
+ if ((paletteNum = IndexOfSpritePaletteTag(species)) < 16)
+ return paletteNum;
+ // Use matching front sprite's normal/shiny palettes
+ // Load compressed palette
+ LoadCompressedSpritePaletteWithTag(palette, species);
+ paletteNum = IndexOfSpritePaletteTag(species); // Tag is always present
+ }
+
+ if (gWeatherPtr->currWeather != WEATHER_FOG_HORIZONTAL) // don't want to weather blend in fog
+ UpdateSpritePaletteWithWeather(paletteNum);
+ return paletteNum;
+}
+
+// Set graphics & sprite for a follower object event by species & shininess.
+static void FollowerSetGraphics(struct ObjectEvent *objEvent, u16 species, u8 form, bool8 shiny)
+{
+ const struct ObjectEventGraphicsInfo *graphicsInfo = SpeciesToGraphicsInfo(species, form);
+ ObjectEventSetGraphics(objEvent, graphicsInfo);
+ objEvent->graphicsId = (OBJ_EVENT_GFX_MON_BASE + species) & OBJ_EVENT_GFX_SPECIES_MASK;
+ objEvent->graphicsId |= form << OBJ_EVENT_GFX_SPECIES_BITS;
+ objEvent->shiny = shiny;
+ if (graphicsInfo->paletteTag == OBJ_EVENT_PAL_TAG_DYNAMIC) // Use palette from species palette table
+ {
+ struct Sprite *sprite = &gSprites[objEvent->spriteId];
+ // Free palette if otherwise unused
+ sprite->inUse = FALSE;
+ FieldEffectFreePaletteIfUnused(sprite->oam.paletteNum);
+ sprite->inUse = TRUE;
+ sprite->oam.paletteNum = LoadDynamicFollowerPalette(species, form, shiny);
+ }
+ else if (gWeatherPtr->currWeather != WEATHER_FOG_HORIZONTAL) // don't want to weather blend in fog
+ {
+ UpdateSpritePaletteWithWeather(gSprites[objEvent->spriteId].oam.paletteNum);
+ }
+}
+
+// Like FollowerSetGraphics, but does not recenter sprite on a metatile
+// Intended to be used for mid-movement form changes, etc.
+static void RefreshFollowerGraphics(struct ObjectEvent *objEvent)
+{
+ u32 species = OW_SPECIES(objEvent);
+ u32 form = OW_FORM(objEvent);
+ u32 shiny = objEvent->shiny;
+ const struct ObjectEventGraphicsInfo *graphicsInfo = SpeciesToGraphicsInfo(species, form);
+ struct Sprite *sprite = &gSprites[objEvent->spriteId];
+ u32 i = FindObjectEventPaletteIndexByTag(graphicsInfo->paletteTag);
+
+ if (graphicsInfo->oam->size != sprite->oam.size)
+ {
+ if (OW_LARGE_OW_SUPPORT && !OW_GFX_COMPRESS)
+ ReallocSpriteTiles(sprite, graphicsInfo->images->size);
+ // Add difference in Y vectors
+ sprite->y += -(graphicsInfo->height >> 1) - sprite->centerToCornerVecY;
+ }
+
+ if (OW_GFX_COMPRESS)
+ LoadSheetGraphicsInfo(graphicsInfo, objEvent->graphicsId, sprite);
+
+ sprite->oam.shape = graphicsInfo->oam->shape;
+ sprite->oam.size = graphicsInfo->oam->size;
+ sprite->images = graphicsInfo->images;
+ sprite->anims = graphicsInfo->anims;
+ sprite->subspriteTables = graphicsInfo->subspriteTables;
+ objEvent->inanimate = graphicsInfo->inanimate;
+ sprite->centerToCornerVecX = -(graphicsInfo->width >> 1);
+ sprite->centerToCornerVecY = -(graphicsInfo->height >> 1);
+
+ if (graphicsInfo->paletteTag == OBJ_EVENT_PAL_TAG_DYNAMIC)
+ {
+ sprite->inUse = FALSE;
+ FieldEffectFreePaletteIfUnused(sprite->oam.paletteNum);
+ sprite->inUse = TRUE;
+ sprite->oam.paletteNum = LoadDynamicFollowerPalette(species, form, shiny);
+ }
+ else if (i != 0xFF)
+ {
+ UpdateSpritePalette(&sObjectEventSpritePalettes[i], sprite);
+ if (gWeatherPtr->currWeather != WEATHER_FOG_HORIZONTAL) // don't want to weather blend in fog
+ UpdateSpritePaletteWithWeather(sprite->oam.paletteNum);
+ }
+}
+
+static u16 GetOverworldCastformSpecies(void)
+{
+ switch (GetCurrentWeather())
+ {
+ case WEATHER_SUNNY_CLOUDS:
+ case WEATHER_DROUGHT:
+ return SPECIES_CASTFORM_SUNNY;
+ case WEATHER_RAIN:
+ case WEATHER_RAIN_THUNDERSTORM:
+ case WEATHER_DOWNPOUR:
+ return SPECIES_CASTFORM_RAINY;
+ case WEATHER_SNOW:
+ return SPECIES_CASTFORM_SNOWY;
+ }
+ return SPECIES_CASTFORM_NORMAL;
+}
+
+static bool8 GetMonInfo(struct Pokemon *mon, u16 *species, u8 *form, u8 *shiny)
+{
+ *form = 0; // default
+ if (!mon)
+ {
+ *species = SPECIES_NONE;
+ *form = 0;
+ *shiny = 0;
+ return FALSE;
+ }
+ *species = GetMonData(mon, MON_DATA_SPECIES);
+ *shiny = IsMonShiny(mon);
+ switch (*species)
+ {
+ case SPECIES_UNOWN:
+ *form = GET_UNOWN_LETTER(mon->box.personality);
+ break;
+ case SPECIES_CASTFORM: // form is based on overworld weather
+ *species = GetOverworldCastformSpecies();
+ break;
+ }
+ return TRUE;
+}
+
+// Retrieve graphic information about the following pokemon, if any
+static bool8 GetFollowerInfo(u16 *species, u8 *form, u8 *shiny)
+{
+ return GetMonInfo(GetFirstLiveMon(), species, form, shiny);
+}
+
+// Update following pokemon if any
+void UpdateFollowingPokemon(void)
+{
+ struct ObjectEvent *objEvent = GetFollowerObject();
+ struct Sprite *sprite;
+ u16 species;
+ bool8 shiny;
+ u8 form;
+ // Don't spawn follower if:
+ // 1. GetFollowerInfo returns FALSE
+ // 2. Map is indoors and gfx is larger than 32x32
+ // 3. flag is set
+ if (OW_POKEMON_OBJECT_EVENTS == FALSE
+ || OW_FOLLOWERS_ENABLED == FALSE
+ || !GetFollowerInfo(&species, &form, &shiny)
+ || SpeciesToGraphicsInfo(species, form) == NULL
+ || (gMapHeader.mapType == MAP_TYPE_INDOOR && SpeciesToGraphicsInfo(species, form)->oam->size > ST_OAM_SIZE_2)
+ || FlagGet(FLAG_TEMP_HIDE_FOLLOWER))
+ {
+ RemoveFollowingPokemon();
+ return;
+ }
+
+ if (objEvent == NULL)
+ {
+ // Spawn follower
+ u32 objId = gPlayerAvatar.objectEventId;
+ struct ObjectEventTemplate template =
+ {
+ .localId = OBJ_EVENT_ID_FOLLOWER,
+ .graphicsId = OBJ_EVENT_GFX_MON_BASE + species,
+ .flagId = 0,
+ .x = gSaveBlock1Ptr->pos.x,
+ .y = gSaveBlock1Ptr->pos.y,
+ // If player active, copy player elevation
+ .elevation = gObjectEvents[objId].active ? gObjectEvents[objId].currentElevation : 3,
+ .movementType = MOVEMENT_TYPE_FOLLOW_PLAYER,
+ // store form info in template
+ .trainerRange_berryTreeId = (form & 0x1F) | (shiny << 5),
+ };
+ if ((objId = SpawnSpecialObjectEvent(&template)) >= OBJECT_EVENTS_COUNT)
+ return;
+ objEvent = &gObjectEvents[objId];
+ objEvent->invisible = TRUE;
+ }
+ sprite = &gSprites[objEvent->spriteId];
+ // Follower appearance changed; move to player and set invisible
+ if (species != OW_SPECIES(objEvent) || shiny != objEvent->shiny || form != OW_FORM(objEvent))
+ {
+ MoveObjectEventToMapCoords(objEvent,
+ gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.x,
+ gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.y);
+ FollowerSetGraphics(objEvent, species, form, shiny);
+ objEvent->invisible = TRUE;
+ }
+ sprite->data[6] = 0; // set animation data
+}
+
+// Remove follower object. Idempotent.
+void RemoveFollowingPokemon(void)
+{
+ struct ObjectEvent *objectEvent = GetFollowerObject();
+ if (objectEvent == NULL)
+ return;
+ RemoveObjectEvent(objectEvent);
+}
+
+// Determine whether follower *should* be visible
+static bool32 IsFollowerVisible(void)
+{
+ return !(TestPlayerAvatarFlags(FOLLOWER_INVISIBLE_FLAGS)
+ || MetatileBehavior_IsSurfableWaterOrUnderwater(gObjectEvents[gPlayerAvatar.objectEventId].previousMetatileBehavior)
+ || MetatileBehavior_IsForcedMovementTile(gObjectEvents[gPlayerAvatar.objectEventId].currentMetatileBehavior));
+}
+
+static bool8 SpeciesHasType(u16 species, u8 type)
+{
+ return gSpeciesInfo[species].types[0] == type || gSpeciesInfo[species].types[1] == type;
+}
+
+// Display an emote above an object event
+// Note that this is not a movement action
+static void ObjectEventEmote(struct ObjectEvent *objEvent, u8 emotion)
+{
+ emotion %= FOLLOWER_EMOTION_LENGTH;
+ ObjectEventGetLocalIdAndMap(objEvent, &gFieldEffectArguments[0], &gFieldEffectArguments[1], &gFieldEffectArguments[2]);
+ gFieldEffectArguments[7] = emotion;
+ FieldEffectStart(FLDEFF_EMOTE);
+}
+
+// Find and return direction of metatile behavior within distance
+static u32 FindMetatileBehaviorWithinRange(s32 x, s32 y, u32 mb, u8 distance)
+{
+ s32 i;
+
+ for (i = y + 1; i <= y + distance; i++)
+ {
+ if (MapGridGetMetatileBehaviorAt(x, i) == mb)
+ return DIR_SOUTH;
+ }
+
+ for (i = y - 1; i >= y - distance; i--)
+ {
+ if (MapGridGetMetatileBehaviorAt(x, i) == mb)
+ return DIR_NORTH;
+ }
+
+ for (i = x + 1; i <= x + distance; i++)
+ {
+ if (MapGridGetMetatileBehaviorAt(i, y) == mb)
+ return DIR_EAST;
+ }
+
+ for (i = x - 1; i >= x - distance; i--)
+ {
+ if (MapGridGetMetatileBehaviorAt(i, y) == mb)
+ return DIR_WEST;
+ }
+
+ return DIR_NONE;
+}
+
+// Check a single follower message condition
+bool32 CheckMsgCondition(const struct MsgCondition *cond, struct Pokemon *mon, u32 species, struct ObjectEvent *obj)
+{
+ u32 multi;
+ if (species == SPECIES_NONE)
+ species = GetMonData(mon, MON_DATA_SPECIES);
+
+ switch (cond->type)
+ {
+ case MSG_COND_SPECIES:
+ return (cond->data.raw == species);
+ case MSG_COND_TYPE:
+ multi = (SpeciesHasType(species, cond->data.bytes[0]) ||
+ SpeciesHasType(species, cond->data.bytes[1]));
+ // if bytes[2] nonzero,
+ // invert; check that mon has *neither* type!
+ if (cond->data.bytes[2] != 0)
+ return !multi;
+ else
+ return multi;
+ break;
+ case MSG_COND_STATUS:
+ return (cond->data.raw & mon->status);
+ case MSG_COND_MAPSEC:
+ return (cond->data.raw == gMapHeader.regionMapSectionId);
+ case MSG_COND_MAP:
+ return (gSaveBlock1Ptr->location.mapGroup == cond->data.bytes[0] &&
+ gSaveBlock1Ptr->location.mapNum == cond->data.bytes[1]);
+ case MSG_COND_ON_MB:
+ return (obj->currentMetatileBehavior == cond->data.bytes[0] ||
+ obj->currentMetatileBehavior == cond->data.bytes[1]);
+ case MSG_COND_WEATHER:
+ multi = GetCurrentWeather();
+ return (multi == cond->data.bytes[0] || multi == cond->data.bytes[1]);
+ case MSG_COND_MUSIC:
+ return (cond->data.raw == GetCurrentMapMusic());
+ // Added on `lighting` branch
+ // case MSG_COND_TIME_OF_DAY:
+ // break;
+ case MSG_COND_NEAR_MB:
+ multi = FindMetatileBehaviorWithinRange(obj->currentCoords.x,
+ obj->currentCoords.y,
+ cond->data.bytes[0],
+ cond->data.bytes[1]);
+ if (multi)
+ gSpecialVar_Result = multi;
+ return multi;
+ case MSG_COND_NONE:
+ // fallthrough
+ default:
+ return TRUE;
+ }
+}
+
+// Check if follower info can be displayed in the current situation;
+// i.e, if all its conditions match
+bool32 CheckMsgInfo(const struct FollowerMsgInfoExtended *info, struct Pokemon *mon, u32 species, struct ObjectEvent *obj)
+{
+ u32 i;
+
+ if (info->orFlag)
+ {
+ // any condition matches
+ for (i = 0; i < ARRAY_COUNT(info->conditions) && info->conditions[i].type; i++)
+ {
+ if (CheckMsgCondition(&info->conditions[i], mon, species, obj))
+ return TRUE;
+ }
+ return FALSE;
+ }
+ else
+ {
+ // all conditions must match
+ for (i = 0; i < ARRAY_COUNT(info->conditions) && info->conditions[i].type; i++)
+ {
+ if (!CheckMsgCondition(&info->conditions[i], mon, species, obj))
+ return FALSE;
+ }
+ return TRUE;
+ }
+}
+
+// Call an applicable follower message script
+void GetFollowerAction(struct ScriptContext *ctx) // Essentially a big switch for follower messages
+{
+ u32 species;
+ s32 multi;
+ struct SpecialEmote condEmotes[16] = {0};
+ u32 condCount = 0;
+ u32 emotion;
+ struct ObjectEvent *objEvent = GetFollowerObject();
+ struct Pokemon *mon = GetFirstLiveMon();
+ u8 emotion_weight[FOLLOWER_EMOTION_LENGTH] =
+ {
+ [FOLLOWER_EMOTION_HAPPY] = 10,
+ [FOLLOWER_EMOTION_NEUTRAL] = 15,
+ [FOLLOWER_EMOTION_SAD] = 5,
+ [FOLLOWER_EMOTION_UPSET] = 15,
+ [FOLLOWER_EMOTION_ANGRY] = 15,
+ [FOLLOWER_EMOTION_PENSIVE] = 15,
+ [FOLLOWER_EMOTION_LOVE] = 0,
+ [FOLLOWER_EMOTION_SURPRISE] = 10,
+ [FOLLOWER_EMOTION_CURIOUS] = 10,
+ [FOLLOWER_EMOTION_MUSIC] = 15,
+ [FOLLOWER_EMOTION_POISONED] = 0,
+ };
+ u32 i, j;
+ bool32 pickedCondition = FALSE;
+ if (mon == NULL) // failsafe
+ {
+ ScriptCall(ctx, EventScript_FollowerLovesYou);
+ return;
+ }
+ // Set the script to the very end; we'll be calling another script dynamically
+ ScriptJump(ctx, EventScript_FollowerEnd);
+ species = GetMonData(mon, MON_DATA_SPECIES);
+ multi = GetMonData(mon, MON_DATA_FRIENDSHIP);
+ if (multi > 80)
+ {
+ emotion_weight[FOLLOWER_EMOTION_HAPPY] = 20;
+ emotion_weight[FOLLOWER_EMOTION_UPSET] = 5;
+ emotion_weight[FOLLOWER_EMOTION_ANGRY] = 5;
+ emotion_weight[FOLLOWER_EMOTION_LOVE] = 20;
+ emotion_weight[FOLLOWER_EMOTION_MUSIC] = 20;
+ }
+ if (multi > 170)
+ {
+ emotion_weight[FOLLOWER_EMOTION_HAPPY] = 30;
+ emotion_weight[FOLLOWER_EMOTION_LOVE] = 30;
+ }
+ // Special C-based conditions follower
+ // Weather-related
+ if (GetCurrentWeather() == WEATHER_SUNNY_CLOUDS)
+ condEmotes[condCount++] = (struct SpecialEmote) {.emotion = FOLLOWER_EMOTION_HAPPY, .index = 31};
+ // Health & status-related
+ multi = SAFE_DIV(mon->hp * 100, mon->maxHP);
+ if (multi < 20)
+ {
+ emotion_weight[FOLLOWER_EMOTION_SAD] = 30;
+ condEmotes[condCount++] = (struct SpecialEmote) {.emotion = FOLLOWER_EMOTION_SAD, .index = 4};
+ condEmotes[condCount++] = (struct SpecialEmote) {.emotion = FOLLOWER_EMOTION_SAD, .index = 5};
+ }
+ if (multi < 50 || mon->status & STATUS1_PARALYSIS)
+ {
+ emotion_weight[FOLLOWER_EMOTION_SAD] = 30;
+ condEmotes[condCount++] = (struct SpecialEmote) {.emotion = FOLLOWER_EMOTION_SAD, .index = 6};
+ }
+ // Gym type advantage/disadvantage
+ if (GetCurrentMapMusic() == MUS_GYM || GetCurrentMapMusic() == MUS_RG_GYM)
+ {
+ switch (gMapHeader.regionMapSectionId)
+ {
+ case MAPSEC_RUSTBORO_CITY:
+ case MAPSEC_PEWTER_CITY:
+ multi = TYPE_ROCK;
+ break;
+ case MAPSEC_DEWFORD_TOWN:
+ multi = TYPE_FIGHTING;
+ break;
+ case MAPSEC_MAUVILLE_CITY:
+ case MAPSEC_VERMILION_CITY:
+ multi = TYPE_ELECTRIC;
+ break;
+ case MAPSEC_LAVARIDGE_TOWN:
+ case MAPSEC_CINNABAR_ISLAND:
+ multi = TYPE_FIRE;
+ break;
+ case MAPSEC_PETALBURG_CITY:
+ multi = TYPE_NORMAL;
+ break;
+ case MAPSEC_FORTREE_CITY:
+ multi = TYPE_FLYING;
+ break;
+ case MAPSEC_MOSSDEEP_CITY:
+ case MAPSEC_SAFFRON_CITY:
+ multi = TYPE_PSYCHIC;
+ break;
+ case MAPSEC_SOOTOPOLIS_CITY:
+ case MAPSEC_CERULEAN_CITY:
+ multi = TYPE_WATER;
+ break;
+ case MAPSEC_CELADON_CITY:
+ multi = TYPE_GRASS;
+ break;
+ case MAPSEC_FUCHSIA_CITY:
+ multi = TYPE_POISON;
+ break;
+ case MAPSEC_VIRIDIAN_CITY:
+ multi = TYPE_GROUND;
+ break;
+ default:
+ multi = NUMBER_OF_MON_TYPES;
+ }
+ if (multi < NUMBER_OF_MON_TYPES)
+ {
+ multi = GetTypeEffectiveness(mon, multi);
+ if (multi <= UQ_4_12(0.5))
+ condEmotes[condCount++] = (struct SpecialEmote) {.emotion = FOLLOWER_EMOTION_HAPPY, .index = 32};
+ else if (multi >= UQ_4_12(2.0))
+ condEmotes[condCount++] = (struct SpecialEmote) {.emotion = FOLLOWER_EMOTION_SAD, .index = 7};
+ }
+ }
+
+ emotion = RandomWeightedIndex(emotion_weight, FOLLOWER_EMOTION_LENGTH);
+ if ((mon->status & STATUS1_PSN_ANY) && GetMonAbility(mon) != ABILITY_POISON_HEAL)
+ emotion = FOLLOWER_EMOTION_POISONED;
+
+ // end special conditions
+
+ // roll for basic/unconditional message
+ multi = Random() % gFollowerBasicMessages[emotion].length;
+ // (50% chance) Select special condition using reservoir sampling
+ for (i = (Random() & 1) ? condCount : 0, j = 1; i < condCount; i++)
+ {
+ if (condEmotes[i].emotion == emotion && (Random() < 0x10000 / (j++))) // Replace each item with 1/j chance
+ multi = condEmotes[i].index;
+ }
+ // (50% chance) Match *scripted* conditional messages, from follower_helper.c
+ for (i = (Random() & 1) ? COND_MSG_COUNT : 0, j = 1; i < COND_MSG_COUNT; i++)
+ {
+ const struct FollowerMsgInfoExtended *info = &gFollowerConditionalMessages[i];
+ if (!CheckMsgInfo(info, mon, species, objEvent))
+ continue;
+
+ // replace choice with weight/j chance
+ if (Random() < (0x10000 / (j++)) * (info->weight ? info->weight : 1))
+ {
+ multi = i;
+ pickedCondition = TRUE;
+ }
+ }
+ // condition message was chosen
+ if (pickedCondition)
+ {
+ emotion = gFollowerConditionalMessages[multi].emotion;
+ ObjectEventEmote(objEvent, emotion);
+ ctx->data[0] = (u32) gFollowerConditionalMessages[multi].text;
+ // text choices are spread across array; pick a random one
+ if (gFollowerConditionalMessages[multi].textSpread)
+ {
+ for (i = 0; i < 4; i++)
+ {
+ if (!((u32*)gFollowerConditionalMessages[multi].text)[i])
+ break;
+ }
+ ctx->data[0] = i ? ((u32*)gFollowerConditionalMessages[multi].text)[Random() % i] : 0;
+ }
+ ScriptCall(ctx, gFollowerConditionalMessages[multi].script ? gFollowerConditionalMessages[multi].script : gFollowerBasicMessages[emotion].script);
+ return;
+ }
+ // otherwise, a basic or C-based message was picked
+ ObjectEventEmote(objEvent, emotion);
+ ctx->data[0] = (u32) gFollowerBasicMessages[emotion].messages[multi].text; // Load message text
+ ScriptCall(ctx, gFollowerBasicMessages[emotion].messages[multi].script ?
+ gFollowerBasicMessages[emotion].messages[multi].script :
+ gFollowerBasicMessages[emotion].script);
+}
+
void TrySpawnObjectEvents(s16 cameraX, s16 cameraY)
{
u8 i;
@@ -1680,7 +2499,9 @@ void RemoveObjectEventsOutsideView(void)
{
struct ObjectEvent *objectEvent = &gObjectEvents[i];
- if (objectEvent->active && !objectEvent->isPlayer)
+ // Followers should not go OOB, or their sprites may be freed early during a cross-map scripting event,
+ // such as Wally's Ralts catch sequence
+ if (objectEvent->active && !objectEvent->isPlayer && objectEvent->localId != OBJ_EVENT_ID_FOLLOWER)
RemoveObjectEventIfOutsideView(objectEvent);
}
}
@@ -1704,7 +2525,7 @@ static void RemoveObjectEventIfOutsideView(struct ObjectEvent *objectEvent)
void SpawnObjectEventsOnReturnToField(s16 x, s16 y)
{
- u8 i;
+ u32 i;
ClearPlayerAvatarInfo();
for (i = 0; i < OBJECT_EVENTS_COUNT; i++)
@@ -1717,8 +2538,7 @@ void SpawnObjectEventsOnReturnToField(s16 x, s16 y)
static void SpawnObjectEventOnReturnToField(u8 objectEventId, s16 x, s16 y)
{
- u8 i;
- u8 paletteSlot;
+ u32 i;
struct Sprite *sprite;
struct ObjectEvent *objectEvent;
struct SpriteTemplate spriteTemplate;
@@ -1735,31 +2555,23 @@ static void SpawnObjectEventOnReturnToField(u8 objectEventId, s16 x, s16 y)
objectEvent = &gObjectEvents[objectEventId];
subspriteTables = NULL;
graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId);
- spriteFrameImage.size = graphicsInfo->size;
CopyObjectGraphicsInfoToSpriteTemplate_WithMovementType(objectEvent->graphicsId, objectEvent->movementType, &spriteTemplate, &subspriteTables);
+ spriteFrameImage.size = graphicsInfo->size;
spriteTemplate.images = &spriteFrameImage;
-
- *(u16 *)&spriteTemplate.paletteTag = TAG_NONE;
- paletteSlot = graphicsInfo->paletteSlot;
- if (paletteSlot == PALSLOT_PLAYER)
- {
- LoadPlayerObjectReflectionPalette(graphicsInfo->paletteTag, graphicsInfo->paletteSlot);
- }
- else if (paletteSlot == PALSLOT_NPC_SPECIAL)
- {
- LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag, graphicsInfo->paletteSlot);
- }
- else if (paletteSlot >= 16)
- {
- paletteSlot -= 16;
- _PatchObjectPalette(graphicsInfo->paletteTag, paletteSlot);
- }
- *(u16 *)&spriteTemplate.paletteTag = TAG_NONE;
+ if (OW_GFX_COMPRESS)
+ spriteTemplate.tileTag = LoadSheetGraphicsInfo(graphicsInfo, objectEvent->graphicsId, NULL);
+ if (spriteTemplate.paletteTag != TAG_NONE && spriteTemplate.paletteTag != OBJ_EVENT_PAL_TAG_DYNAMIC)
+ LoadObjectEventPalette(spriteTemplate.paletteTag);
i = CreateSprite(&spriteTemplate, 0, 0, 0);
if (i != MAX_SPRITES)
{
sprite = &gSprites[i];
+ // Use palette from species palette table
+ if (spriteTemplate.paletteTag == OBJ_EVENT_PAL_TAG_DYNAMIC)
+ sprite->oam.paletteNum = LoadDynamicFollowerPalette(OW_SPECIES(objectEvent), OW_FORM(objectEvent), objectEvent->shiny);
+ if (OW_GFX_COMPRESS && sprite->usingSheet)
+ sprite->sheetSpan = GetSpanPerImage(sprite->oam.shape, sprite->oam.size);
GetMapCoordsFromSpritePos(x + objectEvent->currentCoords.x, y + objectEvent->currentCoords.y, &sprite->x, &sprite->y);
sprite->centerToCornerVecX = -(graphicsInfo->width >> 1);
sprite->centerToCornerVecY = -(graphicsInfo->height >> 1);
@@ -1774,7 +2586,6 @@ static void SpawnObjectEventOnReturnToField(u8 objectEventId, s16 x, s16 y)
if (subspriteTables != NULL)
SetSubspriteTables(sprite, subspriteTables);
- sprite->oam.paletteNum = paletteSlot;
sprite->coordOffsetEnabled = TRUE;
sprite->sObjEventId = objectEventId;
objectEvent->spriteId = i;
@@ -1807,36 +2618,47 @@ static void SetPlayerAvatarObjectEventIdAndObjectId(u8 objectEventId, u8 spriteI
SetPlayerAvatarExtraStateTransition(gObjectEvents[objectEventId].graphicsId, PLAYER_AVATAR_FLAG_CONTROLLABLE);
}
-void ObjectEventSetGraphicsId(struct ObjectEvent *objectEvent, u8 graphicsId)
+// Update sprite's palette, freeing old palette if necessary
+static u8 UpdateSpritePalette(const struct SpritePalette *spritePalette, struct Sprite *sprite)
{
- const struct ObjectEventGraphicsInfo *graphicsInfo;
- struct Sprite *sprite;
- u8 paletteSlot;
+ // Free palette if otherwise unused
+ sprite->inUse = FALSE;
+ FieldEffectFreePaletteIfUnused(sprite->oam.paletteNum);
+ sprite->inUse = TRUE;
+ return sprite->oam.paletteNum = LoadSpritePalette(spritePalette);
+}
+
+// Find and update based on template's paletteTag
+u8 UpdateSpritePaletteByTemplate(const struct SpriteTemplate *template, struct Sprite *sprite)
+{
+ u8 i = FindObjectEventPaletteIndexByTag(template->paletteTag);
+ if (i == 0xFF)
+ return i;
+ return UpdateSpritePalette(&sObjectEventSpritePalettes[i], sprite);
+}
+
+// Set graphics *by info*
+static void ObjectEventSetGraphics(struct ObjectEvent *objectEvent, const struct ObjectEventGraphicsInfo *graphicsInfo)
+{
+ struct Sprite *sprite = &gSprites[objectEvent->spriteId];
+ u32 i = FindObjectEventPaletteIndexByTag(graphicsInfo->paletteTag);
+ if (i != 0xFF)
+ UpdateSpritePalette(&sObjectEventSpritePalettes[i], sprite);
+
+ // If gfx size changes, we need to reallocate tiles
+ if (OW_LARGE_OW_SUPPORT && !OW_GFX_COMPRESS && graphicsInfo->oam->size != sprite->oam.size)
+ ReallocSpriteTiles(sprite, graphicsInfo->images->size);
+
+ #if OW_GFX_COMPRESS
+ LoadSheetGraphicsInfo(graphicsInfo, objectEvent->graphicsId, sprite);
+ #endif
- graphicsInfo = GetObjectEventGraphicsInfo(graphicsId);
- sprite = &gSprites[objectEvent->spriteId];
- paletteSlot = graphicsInfo->paletteSlot;
- if (paletteSlot == PALSLOT_PLAYER)
- {
- PatchObjectPalette(graphicsInfo->paletteTag, graphicsInfo->paletteSlot);
- }
- else if (paletteSlot == PALSLOT_NPC_SPECIAL)
- {
- LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag, graphicsInfo->paletteSlot);
- }
- else if (paletteSlot >= 16)
- {
- paletteSlot -= 16;
- _PatchObjectPalette(graphicsInfo->paletteTag, paletteSlot);
- }
sprite->oam.shape = graphicsInfo->oam->shape;
sprite->oam.size = graphicsInfo->oam->size;
sprite->images = graphicsInfo->images;
sprite->anims = graphicsInfo->anims;
sprite->subspriteTables = graphicsInfo->subspriteTables;
- sprite->oam.paletteNum = paletteSlot;
objectEvent->inanimate = graphicsInfo->inanimate;
- objectEvent->graphicsId = graphicsId;
SetSpritePosToMapCoords(objectEvent->currentCoords.x, objectEvent->currentCoords.y, &sprite->x, &sprite->y);
sprite->centerToCornerVecX = -(graphicsInfo->width >> 1);
sprite->centerToCornerVecY = -(graphicsInfo->height >> 1);
@@ -1846,7 +2668,14 @@ void ObjectEventSetGraphicsId(struct ObjectEvent *objectEvent, u8 graphicsId)
CameraObjectReset();
}
-void ObjectEventSetGraphicsIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup, u8 graphicsId)
+void ObjectEventSetGraphicsId(struct ObjectEvent *objectEvent, u16 graphicsId)
+{
+ objectEvent->graphicsId = graphicsId;
+ ObjectEventSetGraphics(objectEvent, GetObjectEventGraphicsInfo(graphicsId));
+ objectEvent->graphicsId = graphicsId;
+}
+
+void ObjectEventSetGraphicsIdByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup, u16 graphicsId)
{
u8 objectEventId;
@@ -1877,6 +2706,28 @@ void PlayerObjectTurn(struct PlayerAvatar *playerAvatar, u8 direction)
ObjectEventTurn(&gObjectEvents[playerAvatar->objectEventId], direction);
}
+static void SetBerryTreeGraphicsById(struct ObjectEvent *objectEvent, u8 berryId, u8 berryStage)
+{
+ const u16 graphicsId = gBerryTreeObjectEventGraphicsIdTable[berryStage];
+ const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(graphicsId);
+ struct Sprite *sprite = &gSprites[objectEvent->spriteId];
+ UpdateSpritePalette(&sObjectEventSpritePalettes[gBerryTreePaletteSlotTablePointers[berryId][berryStage]-2], sprite);
+ sprite->oam.shape = graphicsInfo->oam->shape;
+ sprite->oam.size = graphicsInfo->oam->size;
+ sprite->images = gBerryTreePicTablePointers[berryId];
+ sprite->anims = graphicsInfo->anims;
+ sprite->subspriteTables = graphicsInfo->subspriteTables;
+ objectEvent->inanimate = graphicsInfo->inanimate;
+ objectEvent->graphicsId = graphicsId;
+ SetSpritePosToMapCoords(objectEvent->currentCoords.x, objectEvent->currentCoords.y, &sprite->x, &sprite->y);
+ sprite->centerToCornerVecX = -(graphicsInfo->width >> 1);
+ sprite->centerToCornerVecY = -(graphicsInfo->height >> 1);
+ sprite->x += 8;
+ sprite->y += 16 + sprite->centerToCornerVecY;
+ if (objectEvent->trackedByCamera)
+ CameraObjectReset();
+}
+
static void SetBerryTreeGraphics(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
u8 berryStage;
@@ -1894,26 +2745,35 @@ static void SetBerryTreeGraphics(struct ObjectEvent *objectEvent, struct Sprite
if (berryId > ITEM_TO_BERRY(LAST_BERRY_INDEX))
berryId = 0;
- ObjectEventSetGraphicsId(objectEvent, gBerryTreeObjectEventGraphicsIdTable[berryStage]);
- sprite->images = gBerryTreePicTablePointers[berryId];
- sprite->oam.paletteNum = gBerryTreePaletteSlotTablePointers[berryId][berryStage];
+ SetBerryTreeGraphicsById(objectEvent, berryId, berryStage);
StartSpriteAnim(sprite, berryStage);
}
}
-const struct ObjectEventGraphicsInfo *GetObjectEventGraphicsInfo(u8 graphicsId)
+const struct ObjectEventGraphicsInfo *GetObjectEventGraphicsInfo(u16 graphicsId)
{
- u8 bard;
+ u32 form = 0;
- if (graphicsId >= OBJ_EVENT_GFX_VARS)
+ if (graphicsId >= OBJ_EVENT_GFX_VARS && graphicsId <= OBJ_EVENT_GFX_VAR_F)
graphicsId = VarGetObjectEventGraphicsId(graphicsId - OBJ_EVENT_GFX_VARS);
+ if (graphicsId >= OBJ_EVENT_GFX_MON_BASE + SPECIES_SHINY_TAG)
+ graphicsId -= SPECIES_SHINY_TAG;
+ // graphicsId may contain mon form info
+ if (graphicsId > OBJ_EVENT_GFX_SPECIES_MASK)
+ {
+ form = graphicsId >> OBJ_EVENT_GFX_SPECIES_BITS;
+ graphicsId = graphicsId & OBJ_EVENT_GFX_SPECIES_MASK;
+ }
+
if (graphicsId == OBJ_EVENT_GFX_BARD)
{
- bard = GetCurrentMauvilleOldMan();
- return gMauvilleOldManGraphicsInfoPointers[bard];
+ return gMauvilleOldManGraphicsInfoPointers[GetCurrentMauvilleOldMan()];
}
+ if (graphicsId >= OBJ_EVENT_GFX_MON_BASE)
+ return SpeciesToGraphicsInfo(graphicsId - OBJ_EVENT_GFX_MON_BASE, form);
+
if (graphicsId >= NUM_OBJ_EVENT_GFX)
graphicsId = OBJ_EVENT_GFX_NINJA_BOY;
@@ -1922,7 +2782,7 @@ const struct ObjectEventGraphicsInfo *GetObjectEventGraphicsInfo(u8 graphicsId)
static void SetObjectEventDynamicGraphicsId(struct ObjectEvent *objectEvent)
{
- if (objectEvent->graphicsId >= OBJ_EVENT_GFX_VARS)
+ if (objectEvent->graphicsId >= OBJ_EVENT_GFX_VARS && objectEvent->graphicsId <= OBJ_EVENT_GFX_VAR_F)
objectEvent->graphicsId = VarGetObjectEventGraphicsId(objectEvent->graphicsId - OBJ_EVENT_GFX_VARS);
}
@@ -2001,17 +2861,28 @@ void FreeAndReserveObjectSpritePalettes(void)
gReservedSpritePaletteCount = OBJ_PALSLOT_COUNT;
}
-static void LoadObjectEventPalette(u16 paletteTag)
+u8 LoadObjectEventPalette(u16 paletteTag)
{
u16 i = FindObjectEventPaletteIndexByTag(paletteTag);
+ if (i == 0xFF)
+ return i;
+ return LoadSpritePaletteIfTagExists(&sObjectEventSpritePalettes[i]);
+}
-// FindObjectEventPaletteIndexByTag returns 0xFF on failure, not OBJ_EVENT_PAL_TAG_NONE.
-#ifdef BUGFIX
- if (i != 0xFF)
-#else
- if (i != OBJ_EVENT_PAL_TAG_NONE)
-#endif
- LoadSpritePaletteIfTagExists(&sObjectEventSpritePalettes[i]);
+u8 LoadPlayerObjectEventPalette(u8 gender)
+{
+ u16 paletteTag;
+ switch (gender)
+ {
+ default:
+ case MALE:
+ paletteTag = OBJ_EVENT_PAL_TAG_BRENDAN;
+ break;
+ case FEMALE:
+ paletteTag = OBJ_EVENT_PAL_TAG_MAY;
+ break;
+ }
+ return LoadObjectEventPalette(paletteTag);
}
static void UNUSED LoadObjectEventPaletteSet(u16 *paletteTags)
@@ -2024,10 +2895,11 @@ static void UNUSED LoadObjectEventPaletteSet(u16 *paletteTags)
static u8 LoadSpritePaletteIfTagExists(const struct SpritePalette *spritePalette)
{
- if (IndexOfSpritePaletteTag(spritePalette->tag) != 0xFF)
- return 0xFF;
-
- return LoadSpritePalette(spritePalette);
+ u8 paletteNum = IndexOfSpritePaletteTag(spritePalette->tag);
+ if (paletteNum != 0xFF) // don't load twice; return
+ return paletteNum;
+ paletteNum = LoadSpritePalette(spritePalette);
+ return paletteNum;
}
void PatchObjectPalette(u16 paletteTag, u8 paletteSlot)
@@ -2091,11 +2963,6 @@ void LoadSpecialObjectReflectionPalette(u16 tag, u8 slot)
}
}
-static void _PatchObjectPalette(u16 tag, u8 slot)
-{
- PatchObjectPalette(tag, slot);
-}
-
static void UNUSED IncrementObjectEventCoords(struct ObjectEvent *objectEvent, s16 x, s16 y)
{
objectEvent->previousCoords.x = objectEvent->currentCoords.x;
@@ -2362,6 +3229,8 @@ void SetObjectEventDirection(struct ObjectEvent *objectEvent, u8 direction)
static const u8 *GetObjectEventScriptPointerByLocalIdAndMap(u8 localId, u8 mapNum, u8 mapGroup)
{
+ if (localId == OBJ_EVENT_ID_FOLLOWER)
+ return EventScript_Follower;
return GetObjectEventTemplateByLocalIdAndMap(localId, mapNum, mapGroup)->script;
}
@@ -4155,74 +5024,474 @@ bool8 MovementType_CopyPlayer_Step0(struct ObjectEvent *objectEvent, struct Spri
return TRUE;
}
-bool8 MovementType_CopyPlayer_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite)
+bool8 MovementType_CopyPlayer_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite)
+{
+ if (gObjectEvents[gPlayerAvatar.objectEventId].movementActionId == MOVEMENT_ACTION_NONE || gPlayerAvatar.tileTransitionState == T_TILE_CENTER)
+ return FALSE;
+
+ return gCopyPlayerMovementFuncs[PlayerGetCopyableMovement()](objectEvent, sprite, GetPlayerMovementDirection(), NULL);
+}
+
+bool8 MovementType_CopyPlayer_Step2(struct ObjectEvent *objectEvent, struct Sprite *sprite)
+{
+ if (ObjectEventExecSingleMovementAction(objectEvent, sprite))
+ {
+ objectEvent->singleMovementActive = FALSE;
+ sprite->sTypeFuncId = 1;
+ }
+ return FALSE;
+}
+
+bool8 CopyablePlayerMovement_None(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8))
+{
+ return FALSE;
+}
+
+bool8 CopyablePlayerMovement_FaceDirection(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8))
+{
+ ObjectEventSetSingleMovement(objectEvent, sprite, GetFaceDirectionMovementAction(GetCopyDirection(gInitialMovementTypeFacingDirections[objectEvent->movementType], objectEvent->directionSequenceIndex, playerDirection)));
+ objectEvent->singleMovementActive = TRUE;
+ sprite->sTypeFuncId = 2;
+ return TRUE;
+}
+
+bool8 CopyablePlayerMovement_WalkNormal(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8))
+{
+ u32 direction;
+ s16 x;
+ s16 y;
+
+ direction = playerDirection;
+ if (ObjectEventIsFarawayIslandMew(objectEvent))
+ {
+ direction = GetMewMoveDirection();
+ if (direction == DIR_NONE)
+ {
+ direction = playerDirection;
+ direction = GetCopyDirection(gInitialMovementTypeFacingDirections[objectEvent->movementType], objectEvent->directionSequenceIndex, direction);
+ ObjectEventMoveDestCoords(objectEvent, direction, &x, &y);
+ ObjectEventSetSingleMovement(objectEvent, sprite, GetFaceDirectionMovementAction(direction));
+ objectEvent->singleMovementActive = TRUE;
+ sprite->sTypeFuncId = 2;
+ return TRUE;
+ }
+ }
+ else
+ {
+ direction = GetCopyDirection(gInitialMovementTypeFacingDirections[objectEvent->movementType], objectEvent->directionSequenceIndex, direction);
+ }
+ ObjectEventMoveDestCoords(objectEvent, direction, &x, &y);
+ ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkNormalMovementAction(direction));
+
+ if (GetCollisionAtCoords(objectEvent, x, y, direction) || (tileCallback != NULL && !tileCallback(MapGridGetMetatileBehaviorAt(x, y))))
+ ObjectEventSetSingleMovement(objectEvent, sprite, GetFaceDirectionMovementAction(direction));
+
+ objectEvent->singleMovementActive = TRUE;
+ sprite->sTypeFuncId = 2;
+ return TRUE;
+}
+
+bool8 CopyablePlayerMovement_WalkFast(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8))
+{
+ u32 direction;
+ s16 x;
+ s16 y;
+
+ direction = playerDirection;
+ direction = GetCopyDirection(gInitialMovementTypeFacingDirections[objectEvent->movementType], objectEvent->directionSequenceIndex, direction);
+ ObjectEventMoveDestCoords(objectEvent, direction, &x, &y);
+ ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkFastMovementAction(direction));
+
+ if (GetCollisionAtCoords(objectEvent, x, y, direction) || (tileCallback != NULL && !tileCallback(MapGridGetMetatileBehaviorAt(x, y))))
+ ObjectEventSetSingleMovement(objectEvent, sprite, GetFaceDirectionMovementAction(direction));
+
+ objectEvent->singleMovementActive = TRUE;
+ sprite->sTypeFuncId = 2;
+ return TRUE;
+}
+
+bool8 CopyablePlayerMovement_WalkFaster(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8))
+{
+ u32 direction;
+ s16 x;
+ s16 y;
+
+ direction = playerDirection;
+ direction = GetCopyDirection(gInitialMovementTypeFacingDirections[objectEvent->movementType], objectEvent->directionSequenceIndex, direction);
+ ObjectEventMoveDestCoords(objectEvent, direction, &x, &y);
+ ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkFasterMovementAction(direction));
+
+ if (GetCollisionAtCoords(objectEvent, x, y, direction) || (tileCallback != NULL && !tileCallback(MapGridGetMetatileBehaviorAt(x, y))))
+ ObjectEventSetSingleMovement(objectEvent, sprite, GetFaceDirectionMovementAction(direction));
+
+ objectEvent->singleMovementActive = TRUE;
+ sprite->sTypeFuncId = 2;
+ return TRUE;
+}
+
+bool8 CopyablePlayerMovement_Slide(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8))
+{
+ u32 direction;
+ s16 x;
+ s16 y;
+
+ direction = playerDirection;
+ direction = GetCopyDirection(gInitialMovementTypeFacingDirections[objectEvent->movementType], objectEvent->directionSequenceIndex, direction);
+ ObjectEventMoveDestCoords(objectEvent, direction, &x, &y);
+ ObjectEventSetSingleMovement(objectEvent, sprite, GetSlideMovementAction(direction));
+
+ if (GetCollisionAtCoords(objectEvent, x, y, direction) || (tileCallback != NULL && !tileCallback(MapGridGetMetatileBehaviorAt(x, y))))
+ ObjectEventSetSingleMovement(objectEvent, sprite, GetFaceDirectionMovementAction(direction));
+
+ objectEvent->singleMovementActive = TRUE;
+ sprite->sTypeFuncId = 2;
+ return TRUE;
+}
+
+bool8 CopyablePlayerMovement_JumpInPlace(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8))
+{
+ u32 direction;
+
+ direction = playerDirection;
+ direction = GetCopyDirection(gInitialMovementTypeFacingDirections[objectEvent->movementType], objectEvent->directionSequenceIndex, direction);
+ ObjectEventSetSingleMovement(objectEvent, sprite, GetJumpInPlaceMovementAction(direction));
+ objectEvent->singleMovementActive = TRUE;
+ sprite->sTypeFuncId = 2;
+ return TRUE;
+}
+
+bool8 CopyablePlayerMovement_Jump(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8))
+{
+ u32 direction;
+ s16 x;
+ s16 y;
+
+ direction = playerDirection;
+ direction = GetCopyDirection(gInitialMovementTypeFacingDirections[objectEvent->movementType], objectEvent->directionSequenceIndex, direction);
+ ObjectEventMoveDestCoords(objectEvent, direction, &x, &y);
+ ObjectEventSetSingleMovement(objectEvent, sprite, GetJumpMovementAction(direction));
+
+ if (GetCollisionAtCoords(objectEvent, x, y, direction) || (tileCallback != NULL && !tileCallback(MapGridGetMetatileBehaviorAt(x, y))))
+ ObjectEventSetSingleMovement(objectEvent, sprite, GetFaceDirectionMovementAction(direction));
+
+ objectEvent->singleMovementActive = TRUE;
+ sprite->sTypeFuncId = 2;
+ return TRUE;
+}
+
+bool8 CopyablePlayerMovement_Jump2(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8))
+{
+ u32 direction;
+ s16 x;
+ s16 y;
+
+ direction = playerDirection;
+ direction = GetCopyDirection(gInitialMovementTypeFacingDirections[objectEvent->movementType], objectEvent->directionSequenceIndex, direction);
+ x = objectEvent->currentCoords.x;
+ y = objectEvent->currentCoords.y;
+ MoveCoordsInDirection(direction, &x, &y, 2, 2);
+ ObjectEventSetSingleMovement(objectEvent, sprite, GetJump2MovementAction(direction));
+
+ if (GetCollisionAtCoords(objectEvent, x, y, direction) || (tileCallback != NULL && !tileCallback(MapGridGetMetatileBehaviorAt(x, y))))
+ ObjectEventSetSingleMovement(objectEvent, sprite, GetFaceDirectionMovementAction(direction));
+
+ objectEvent->singleMovementActive = TRUE;
+ sprite->sTypeFuncId = 2;
+ return TRUE;
+}
+
+static bool32 EndFollowerTransformEffect(struct ObjectEvent *objectEvent, struct Sprite *sprite)
+{
+ if (!sprite)
+ return FALSE;
+ SetGpuReg(REG_OFFSET_MOSAIC, 0);
+ if (!sprite->data[7])
+ return FALSE;
+ sprite->oam.mosaic = FALSE;
+ sprite->data[7] = 0;
+ return FALSE;
+}
+
+static bool32 TryStartFollowerTransformEffect(struct ObjectEvent *objectEvent, struct Sprite *sprite)
+{
+ u32 multi;
+ if (GET_BASE_SPECIES_ID(OW_SPECIES(objectEvent)) == SPECIES_CASTFORM
+ && OW_SPECIES(objectEvent) != (multi = GetOverworldCastformSpecies()))
+ {
+ sprite->data[7] = TRANSFORM_TYPE_WEATHER << 8;
+ return TRUE;
+ }
+ else if ((Random() & 0xFFFF) < 18 && GetLocalWildMon(FALSE)
+ && (OW_SPECIES(objectEvent) == SPECIES_MEW || OW_SPECIES(objectEvent) == SPECIES_DITTO))
+ {
+ sprite->data[7] = TRANSFORM_TYPE_RANDOM_WILD << 8;
+ PlaySE(SE_M_MINIMIZE);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static bool8 UpdateFollowerTransformEffect(struct ObjectEvent *objectEvent, struct Sprite *sprite)
+{
+ u8 type = sprite->data[7] >> 8;
+ u8 frames = sprite->data[7] & 0xFF;
+ u8 stretch;
+ u32 multi;
+ if (!type)
+ return TryStartFollowerTransformEffect(objectEvent, sprite);
+ sprite->oam.mosaic = TRUE;
+ if (frames < 8)
+ stretch = frames >> 1;
+ else if (frames < 16)
+ stretch = (16 - frames) >> 1;
+ else
+ return EndFollowerTransformEffect(objectEvent, sprite);
+
+ if (frames == 8)
+ {
+ switch (type)
+ {
+ case TRANSFORM_TYPE_PERMANENT:
+ RefreshFollowerGraphics(objectEvent);
+ break;
+ case TRANSFORM_TYPE_WEATHER:
+ multi = objectEvent->graphicsId;
+ objectEvent->graphicsId = GetOverworldCastformSpecies();
+ if (!objectEvent->graphicsId)
+ {
+ objectEvent->graphicsId = multi;
+ break;
+ }
+ objectEvent->graphicsId += OBJ_EVENT_GFX_MON_BASE;
+ RefreshFollowerGraphics(objectEvent);
+ break;
+ case TRANSFORM_TYPE_RANDOM_WILD:
+ multi = objectEvent->graphicsId;
+ objectEvent->graphicsId = GetLocalWildMon(FALSE);
+ if (!objectEvent->graphicsId)
+ {
+ objectEvent->graphicsId = multi;
+ break;
+ }
+ objectEvent->graphicsId += OBJ_EVENT_GFX_MON_BASE;
+ RefreshFollowerGraphics(objectEvent);
+ objectEvent->graphicsId = multi;
+ break;
+ }
+ }
+
+ SetGpuReg(REG_OFFSET_MOSAIC, (stretch << 12) | (stretch << 8));
+ frames++;
+ sprite->data[7] = (sprite->data[7] & 0xFF00) | frames;
+ return TRUE;
+}
+
+movement_type_def(MovementType_FollowPlayer, gMovementTypeFuncs_FollowPlayer)
+
+bool8 MovementType_FollowPlayer_Shadow(struct ObjectEvent *objectEvent, struct Sprite *sprite)
+{
+ ClearObjectEventMovement(objectEvent, sprite);
+ if (!IsFollowerVisible())
+ {
+ // Shadow player's position
+ objectEvent->invisible = TRUE;
+ MoveObjectEventToMapCoords(objectEvent,
+ gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.x,
+ gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.y);
+ objectEvent->triggerGroundEffectsOnMove = FALSE; // Stop endless reflection spawning
+ return FALSE;
+ }
+ // Move follower to player, in case we end up in the shadowing state for only 1 frame
+ // This way the player cannot talk to the invisible follower before it appears
+ if (objectEvent->invisible)
+ {
+ MoveObjectEventToMapCoords(objectEvent,
+ gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.x,
+ gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.y);
+ objectEvent->triggerGroundEffectsOnMove = FALSE; // Stop endless reflection spawning
+ }
+ sprite->sTypeFuncId = 1; // Enter active state; if the player moves the follower will appear
+ return TRUE;
+}
+
+bool8 MovementType_FollowPlayer_Active(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
- if (gObjectEvents[gPlayerAvatar.objectEventId].movementActionId == MOVEMENT_ACTION_NONE || gPlayerAvatar.tileTransitionState == T_TILE_CENTER)
- return FALSE;
-
- return gCopyPlayerMovementFuncs[PlayerGetCopyableMovement()](objectEvent, sprite, GetPlayerMovementDirection(), NULL);
+ if (!IsFollowerVisible())
+ {
+ if (objectEvent->invisible)
+ {
+ // Return to shadowing state
+ sprite->sTypeFuncId = 0;
+ return FALSE;
+ }
+ // Animate entering pokeball
+ ClearObjectEventMovement(objectEvent, sprite);
+ ObjectEventSetSingleMovement(objectEvent, sprite, MOVEMENT_ACTION_ENTER_POKEBALL);
+ objectEvent->singleMovementActive = 1;
+ sprite->sTypeFuncId = 2; // movement action sets state to 0
+ return TRUE;
+ }
+ return gFollowPlayerMovementFuncs[PlayerGetCopyableMovement()](objectEvent, sprite, GetPlayerMovementDirection(), NULL);
}
-bool8 MovementType_CopyPlayer_Step2(struct ObjectEvent *objectEvent, struct Sprite *sprite)
+bool8 MovementType_FollowPlayer_Moving(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
+ #ifdef MB_SIDEWAYS_STAIRS_RIGHT_SIDE
+ // Copied from ObjectEventExecSingleMovementAction
+ if (gMovementActionFuncs[objectEvent->movementActionId][sprite->sActionFuncId](objectEvent, sprite))
+ {
+ objectEvent->movementActionId = MOVEMENT_ACTION_NONE;
+ sprite->sActionFuncId = 0;
+ #else
if (ObjectEventExecSingleMovementAction(objectEvent, sprite))
{
- objectEvent->singleMovementActive = FALSE;
- sprite->sTypeFuncId = 1;
+ #endif
+ objectEvent->singleMovementActive = 0;
+ if (sprite->sTypeFuncId) // restore nonzero state
+ sprite->sTypeFuncId = 1;
+ }
+ else if (objectEvent->movementActionId < MOVEMENT_ACTION_EXIT_POKEBALL)
+ {
+ UpdateFollowerTransformEffect(objectEvent, sprite);
+ if (OW_FOLLOWERS_BOBBING == TRUE && (sprite->data[5] & 7) == 2)
+ sprite->y2 ^= -1;
}
return FALSE;
}
-bool8 CopyablePlayerMovement_None(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8))
+bool8 FollowablePlayerMovement_Idle(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8))
{
+ if (!objectEvent->singleMovementActive)
+ {
+ // walk in place
+ ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkInPlaceNormalMovementAction(objectEvent->facingDirection));
+ sprite->sTypeFuncId = 1;
+ objectEvent->singleMovementActive = 1;
+ return TRUE;
+ }
+ else if (ObjectEventExecSingleMovementAction(objectEvent, sprite))
+ {
+ // finish movement action
+ objectEvent->singleMovementActive = 0;
+ }
+ else if (OW_FOLLOWERS_BOBBING == TRUE && (sprite->data[3] & 7) == 2)
+ {
+ sprite->y2 ^= -1;
+ }
+ UpdateFollowerTransformEffect(objectEvent, sprite);
return FALSE;
}
-bool8 CopyablePlayerMovement_FaceDirection(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8))
-{
- ObjectEventSetSingleMovement(objectEvent, sprite, GetFaceDirectionMovementAction(GetCopyDirection(gInitialMovementTypeFacingDirections[objectEvent->movementType], objectEvent->directionSequenceIndex, playerDirection)));
- objectEvent->singleMovementActive = TRUE;
- sprite->sTypeFuncId = 2;
- return TRUE;
-}
-
-bool8 CopyablePlayerMovement_WalkNormal(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8))
+bool8 FollowablePlayerMovement_Step(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8))
{
u32 direction;
s16 x;
s16 y;
+ s16 targetX;
+ s16 targetY;
+ #ifdef MB_SIDEWAYS_STAIRS_RIGHT_SIDE
+ u32 playerAction = gObjectEvents[gPlayerAvatar.objectEventId].movementActionId;
+ #endif
+
+ targetX = gObjectEvents[gPlayerAvatar.objectEventId].previousCoords.x;
+ targetY = gObjectEvents[gPlayerAvatar.objectEventId].previousCoords.y;
+ x = gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.x;
+ y = gObjectEvents[gPlayerAvatar.objectEventId].currentCoords.y;
+
+ if ((x == targetX && y == targetY) || !IsFollowerVisible()) // don't move on player collision or if not visible
+ return FALSE;
- direction = playerDirection;
- if (ObjectEventIsFarawayIslandMew(objectEvent))
+ x = objectEvent->currentCoords.x;
+ y = objectEvent->currentCoords.y;
+ ClearObjectEventMovement(objectEvent, sprite);
+
+ if (objectEvent->invisible)
{
- direction = GetMewMoveDirection();
- if (direction == DIR_NONE)
+ // Animate exiting pokeball
+ // Player is jumping, but follower is invisible
+ if (PlayerGetCopyableMovement() == COPY_MOVE_JUMP2)
{
- direction = playerDirection;
- direction = GetCopyDirection(gInitialMovementTypeFacingDirections[objectEvent->movementType], objectEvent->directionSequenceIndex, direction);
- ObjectEventMoveDestCoords(objectEvent, direction, &x, &y);
- ObjectEventSetSingleMovement(objectEvent, sprite, GetFaceDirectionMovementAction(direction));
- objectEvent->singleMovementActive = TRUE;
- sprite->sTypeFuncId = 2;
- return TRUE;
+ sprite->sTypeFuncId = 0; // return to shadowing state
+ return FALSE;
}
+ MoveObjectEventToMapCoords(objectEvent, targetX, targetY);
+ ObjectEventSetSingleMovement(objectEvent, sprite, MOVEMENT_ACTION_EXIT_POKEBALL);
+ objectEvent->singleMovementActive = 1;
+ sprite->sTypeFuncId = 2;
+ if (OW_FOLLOWERS_BOBBING == TRUE)
+ sprite->y2 = 0;
+ return TRUE;
}
- else
+ else if (x == targetX && y == targetY)
{
- direction = GetCopyDirection(gInitialMovementTypeFacingDirections[objectEvent->movementType], objectEvent->directionSequenceIndex, direction);
+ // don't move if already in the player's last position
+ return FALSE;
}
- ObjectEventMoveDestCoords(objectEvent, direction, &x, &y);
- ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkNormalMovementAction(direction));
-
- if (GetCollisionAtCoords(objectEvent, x, y, direction) || (tileCallback != NULL && !tileCallback(MapGridGetMetatileBehaviorAt(x, y))))
- ObjectEventSetSingleMovement(objectEvent, sprite, GetFaceDirectionMovementAction(direction));
- objectEvent->singleMovementActive = TRUE;
+ // Follow player
+ direction = GetDirectionToFace(x, y, targetX, targetY);
+ MoveCoords(direction, &x, &y);
+ #ifdef MB_SIDEWAYS_STAIRS_RIGHT_SIDE // https://github.com/ghoulslash/pokeemerald/tree/sideways_stairs
+ GetCollisionAtCoords(objectEvent, x, y, direction); // Sets directionOverwrite for stairs
+ if (GetLedgeJumpDirection(x, y, direction) != DIR_NONE)
+ {
+ // InitJumpRegular will set the proper speed
+ ObjectEventSetSingleMovement(objectEvent, sprite, GetJump2MovementAction(direction));
+ else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_DASH))
+ {
+ // Set follow speed according to player's speed
+ if (playerAction >= MOVEMENT_ACTION_RUN_DOWN_SLOW && playerAction <= MOVEMENT_ACTION_RUN_RIGHT_SLOW)
+ objectEvent->movementActionId = GetWalkNormalMovementAction(direction);
+ else
+ objectEvent->movementActionId = GetWalkFastMovementAction(direction);
+ }
+ else if (PlayerGetCopyableMovement() == COPY_MOVE_JUMP2)
+ {
+ ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkSlowMovementAction(direction));
+ }
+ else
+ {
+ if (playerAction >= MOVEMENT_ACTION_WALK_SLOW_DOWN && playerAction <= MOVEMENT_ACTION_WALK_SLOW_RIGHT)
+ {
+ ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkSlowMovementAction(direction));
+ }
+ else
+ {
+ objectEvent->movementActionId = GetWalkNormalMovementAction(direction);
+ if (OW_FOLLOWERS_BOBBING == TRUE)
+ sprite->y2 = -1;
+ }
+ }
+ sprite->sActionFuncId = 0;
+ #else
+ if (GetLedgeJumpDirection(x, y, direction) != DIR_NONE)
+ {
+ // InitJumpRegular will set the proper speed
+ ObjectEventSetSingleMovement(objectEvent, sprite, GetJump2MovementAction(direction));
+ }
+ else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_DASH))
+ {
+ // Set follow speed according to player's speed
+ ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkFastMovementAction(direction));
+ }
+ else if (PlayerGetCopyableMovement() == COPY_MOVE_JUMP2)
+ {
+ // If *player* jumps, make step take twice as long
+ ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkSlowMovementAction(direction));
+ }
+ else
+ {
+ ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkNormalMovementAction(direction));
+ if (OW_FOLLOWERS_BOBBING == TRUE)
+ sprite->y2 = -1;
+ }
+ #endif
+ objectEvent->singleMovementActive = 1;
sprite->sTypeFuncId = 2;
return TRUE;
}
-bool8 CopyablePlayerMovement_WalkFast(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8))
+bool8 FollowablePlayerMovement_GoSpeed1(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8))
{
u32 direction;
s16 x;
@@ -4232,16 +5501,14 @@ bool8 CopyablePlayerMovement_WalkFast(struct ObjectEvent *objectEvent, struct Sp
direction = GetCopyDirection(gInitialMovementTypeFacingDirections[objectEvent->movementType], objectEvent->directionSequenceIndex, direction);
ObjectEventMoveDestCoords(objectEvent, direction, &x, &y);
ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkFastMovementAction(direction));
-
if (GetCollisionAtCoords(objectEvent, x, y, direction) || (tileCallback != NULL && !tileCallback(MapGridGetMetatileBehaviorAt(x, y))))
ObjectEventSetSingleMovement(objectEvent, sprite, GetFaceDirectionMovementAction(direction));
-
objectEvent->singleMovementActive = TRUE;
sprite->sTypeFuncId = 2;
return TRUE;
}
-bool8 CopyablePlayerMovement_WalkFaster(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8))
+bool8 FollowablePlayerMovement_GoSpeed2(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8))
{
u32 direction;
s16 x;
@@ -4251,16 +5518,14 @@ bool8 CopyablePlayerMovement_WalkFaster(struct ObjectEvent *objectEvent, struct
direction = GetCopyDirection(gInitialMovementTypeFacingDirections[objectEvent->movementType], objectEvent->directionSequenceIndex, direction);
ObjectEventMoveDestCoords(objectEvent, direction, &x, &y);
ObjectEventSetSingleMovement(objectEvent, sprite, GetWalkFasterMovementAction(direction));
-
if (GetCollisionAtCoords(objectEvent, x, y, direction) || (tileCallback != NULL && !tileCallback(MapGridGetMetatileBehaviorAt(x, y))))
ObjectEventSetSingleMovement(objectEvent, sprite, GetFaceDirectionMovementAction(direction));
-
objectEvent->singleMovementActive = TRUE;
sprite->sTypeFuncId = 2;
return TRUE;
}
-bool8 CopyablePlayerMovement_Slide(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8))
+bool8 FollowablePlayerMovement_Slide(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8))
{
u32 direction;
s16 x;
@@ -4270,16 +5535,14 @@ bool8 CopyablePlayerMovement_Slide(struct ObjectEvent *objectEvent, struct Sprit
direction = GetCopyDirection(gInitialMovementTypeFacingDirections[objectEvent->movementType], objectEvent->directionSequenceIndex, direction);
ObjectEventMoveDestCoords(objectEvent, direction, &x, &y);
ObjectEventSetSingleMovement(objectEvent, sprite, GetSlideMovementAction(direction));
-
if (GetCollisionAtCoords(objectEvent, x, y, direction) || (tileCallback != NULL && !tileCallback(MapGridGetMetatileBehaviorAt(x, y))))
ObjectEventSetSingleMovement(objectEvent, sprite, GetFaceDirectionMovementAction(direction));
-
objectEvent->singleMovementActive = TRUE;
sprite->sTypeFuncId = 2;
return TRUE;
}
-bool8 CopyablePlayerMovement_JumpInPlace(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8))
+bool8 FollowablePlayerMovement_JumpInPlace(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8))
{
u32 direction;
@@ -4291,7 +5554,7 @@ bool8 CopyablePlayerMovement_JumpInPlace(struct ObjectEvent *objectEvent, struct
return TRUE;
}
-bool8 CopyablePlayerMovement_Jump(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8))
+bool8 FollowablePlayerMovement_GoSpeed4(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8))
{
u32 direction;
s16 x;
@@ -4301,31 +5564,24 @@ bool8 CopyablePlayerMovement_Jump(struct ObjectEvent *objectEvent, struct Sprite
direction = GetCopyDirection(gInitialMovementTypeFacingDirections[objectEvent->movementType], objectEvent->directionSequenceIndex, direction);
ObjectEventMoveDestCoords(objectEvent, direction, &x, &y);
ObjectEventSetSingleMovement(objectEvent, sprite, GetJumpMovementAction(direction));
-
if (GetCollisionAtCoords(objectEvent, x, y, direction) || (tileCallback != NULL && !tileCallback(MapGridGetMetatileBehaviorAt(x, y))))
ObjectEventSetSingleMovement(objectEvent, sprite, GetFaceDirectionMovementAction(direction));
-
objectEvent->singleMovementActive = TRUE;
sprite->sTypeFuncId = 2;
return TRUE;
}
-bool8 CopyablePlayerMovement_Jump2(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8))
+bool8 FollowablePlayerMovement_Jump(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 playerDirection, bool8 tileCallback(u8))
{
u32 direction;
s16 x;
s16 y;
direction = playerDirection;
- direction = GetCopyDirection(gInitialMovementTypeFacingDirections[objectEvent->movementType], objectEvent->directionSequenceIndex, direction);
x = objectEvent->currentCoords.x;
y = objectEvent->currentCoords.y;
MoveCoordsInDirection(direction, &x, &y, 2, 2);
ObjectEventSetSingleMovement(objectEvent, sprite, GetJump2MovementAction(direction));
-
- if (GetCollisionAtCoords(objectEvent, x, y, direction) || (tileCallback != NULL && !tileCallback(MapGridGetMetatileBehaviorAt(x, y))))
- ObjectEventSetSingleMovement(objectEvent, sprite, GetFaceDirectionMovementAction(direction));
-
objectEvent->singleMovementActive = TRUE;
sprite->sTypeFuncId = 2;
return TRUE;
@@ -4473,7 +5729,7 @@ bool8 MovementType_Invisible_Step2(struct ObjectEvent *objectEvent, struct Sprit
return FALSE;
}
-static void ClearObjectEventMovement(struct ObjectEvent *objectEvent, struct Sprite *sprite)
+void ClearObjectEventMovement(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
objectEvent->singleMovementActive = FALSE;
objectEvent->heldMovementActive = FALSE;
@@ -4623,6 +5879,41 @@ u8 GetDirectionToFace(s16 x, s16 y, s16 targetX, s16 targetY)
return DIR_SOUTH;
}
+// Uses the above, but script accessible, and uses localIds
+void GetDirectionToFaceScript(struct ScriptContext *ctx)
+{
+ u16 *var = GetVarPointer(ScriptReadHalfword(ctx));
+ u8 sourceId = GetObjectEventIdByLocalId(ScriptReadByte(ctx));
+ u8 targetId = GetObjectEventIdByLocalId(ScriptReadByte(ctx));
+ if (var == NULL)
+ return;
+ if (sourceId >= OBJECT_EVENTS_COUNT || targetId >= OBJECT_EVENTS_COUNT)
+ *var = DIR_NONE;
+ else
+ *var = GetDirectionToFace(gObjectEvents[sourceId].currentCoords.x,
+ gObjectEvents[sourceId].currentCoords.y,
+ gObjectEvents[targetId].currentCoords.x,
+ gObjectEvents[targetId].currentCoords.y);
+}
+
+// Whether following pokemon is also the user of the field move
+// Intended to be called before the field effect itself
+void IsFollowerFieldMoveUser(struct ScriptContext *ctx)
+{
+ u16 *var = GetVarPointer(ScriptReadHalfword(ctx));
+ u16 userIndex = gFieldEffectArguments[0]; // field move user index
+ struct Pokemon *follower = GetFirstLiveMon();
+ struct ObjectEvent *obj = GetFollowerObject();
+ if (var == NULL)
+ return;
+ *var = FALSE;
+ if (follower && obj && !obj->invisible)
+ {
+ u16 followIndex = ((u32)follower - (u32)gPlayerParty) / sizeof(struct Pokemon);
+ *var = userIndex == followIndex;
+ }
+}
+
void SetTrainerMovementType(struct ObjectEvent *objectEvent, u8 movementType)
{
objectEvent->movementType = movementType;
@@ -4722,10 +6013,13 @@ static bool8 DoesObjectCollideWithObjectAt(struct ObjectEvent *objectEvent, s16
u8 i;
struct ObjectEvent *curObject;
+ if (objectEvent->localId == OBJ_EVENT_ID_FOLLOWER)
+ return FALSE; // follower cannot collide with other objects, but they can collide with it
+
for (i = 0; i < OBJECT_EVENTS_COUNT; i++)
{
curObject = &gObjectEvents[i];
- if (curObject->active && curObject != objectEvent)
+ if (curObject->active && (curObject->movementType != MOVEMENT_TYPE_FOLLOW_PLAYER || objectEvent != &gObjectEvents[gPlayerAvatar.objectEventId]) && curObject != objectEvent)
{
if ((curObject->currentCoords.x == x && curObject->currentCoords.y == y) || (curObject->previousCoords.x == x && curObject->previousCoords.y == y))
{
@@ -5418,6 +6712,8 @@ enum {
JUMP_TYPE_HIGH,
JUMP_TYPE_LOW,
JUMP_TYPE_NORMAL,
+ JUMP_TYPE_FAST,
+ JUMP_TYPE_FASTER,
};
static void InitJump(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 direction, u8 distance, u8 type)
@@ -5441,6 +6737,13 @@ static void InitJump(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8
static void InitJumpRegular(struct ObjectEvent *objectEvent, struct Sprite *sprite, u8 direction, u8 distance, u8 type)
{
+ // For follower only, match the anim duration of the player's movement, whether dashing, walking or jumping
+ if (objectEvent->localId == OBJ_EVENT_ID_FOLLOWER
+ && type == JUMP_TYPE_HIGH
+ && distance == JUMP_DISTANCE_FAR
+ // In some areas (i.e Meteor Falls), the player can jump as the follower jumps, so preserve type in this case
+ && PlayerGetCopyableMovement() != COPY_MOVE_JUMP2)
+ type = TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_DASH) ? JUMP_TYPE_FASTER : JUMP_TYPE_FAST;
InitJump(objectEvent, sprite, direction, distance, type);
SetStepAnimHandleAlternation(objectEvent, sprite, GetMoveDirectionAnimNum(objectEvent->facingDirection));
DoShadowFieldEffect(objectEvent);
@@ -5731,6 +7034,211 @@ bool8 MovementAction_WalkInPlaceSlowDown_Step0(struct ObjectEvent *objectEvent,
return MovementAction_WalkInPlaceSlow_Step1(objectEvent, sprite);
}
+// Update sprite with a palette filled with a solid color
+static u8 LoadFillColorPalette(u16 color, u16 paletteTag, struct Sprite *sprite)
+{
+ u16 paletteData[16];
+ struct SpritePalette dynamicPalette = {.tag = paletteTag, .data = paletteData};
+ CpuFill16(color, paletteData, PLTT_SIZE_4BPP);
+ return UpdateSpritePalette(&dynamicPalette, sprite);
+}
+
+static void ObjectEventSetPokeballGfx(struct ObjectEvent *objEvent)
+{
+ #if OW_FOLLOWERS_POKEBALLS
+ u32 ball = BALL_POKE;
+ if (objEvent->localId == OBJ_EVENT_ID_FOLLOWER)
+ {
+ struct Pokemon *mon = GetFirstLiveMon();
+ if (mon)
+ ball = ItemIdToBallId(GetMonData(mon, MON_DATA_POKEBALL));
+ }
+
+ if (ball != BALL_POKE && ball < POKEBALL_COUNT)
+ {
+ const struct ObjectEventGraphicsInfo *info = &gPokeballGraphics[ball];
+ if (info->tileTag == TAG_NONE)
+ {
+ ObjectEventSetGraphics(objEvent, info);
+ return;
+ }
+ }
+ #endif //OW_FOLLOWERS_POKEBALLS
+ ObjectEventSetGraphicsId(objEvent, OBJ_EVENT_GFX_POKE_BALL);
+}
+
+#define sDuration data[3]
+#define sSpeedFlip data[6]
+
+bool8 MovementAction_ExitPokeball_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
+{
+ u32 direction = gObjectEvents[gPlayerAvatar.objectEventId].facingDirection;
+ u16 graphicsId = objectEvent->graphicsId;
+ objectEvent->invisible = FALSE;
+ if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_DASH))
+ {
+ // If player is dashing, the pokemon must come out faster
+ StartSpriteAnimInDirection(objectEvent, sprite, direction, GetJumpSpecialDirectionAnimNum(direction));
+ sprite->sDuration = 8;
+ sprite->sSpeedFlip = 0; // fast speed
+ }
+ else
+ {
+ StartSpriteAnimInDirection(objectEvent, sprite, direction, GetMoveDirectionFastestAnimNum(direction));
+ sprite->sDuration = 16;
+ sprite->sSpeedFlip = 1; // normal speed
+ }
+ // If mon's right-facing sprite is h-flipped, we need to use a different affine anim
+ if (direction == DIR_EAST && sprite->anims[ANIM_STD_FACE_EAST]->frame.hFlip)
+ sprite->sSpeedFlip |= 1 << 4;
+ ObjectEventSetPokeballGfx(objectEvent);
+ objectEvent->graphicsId = graphicsId;
+ objectEvent->inanimate = FALSE;
+ return MovementAction_ExitPokeball_Step1(objectEvent, sprite);
+}
+
+static const union AffineAnimCmd sAffineAnim_PokeballExit[] =
+{
+ AFFINEANIMCMD_FRAME(0x40, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x80, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0xC0, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd sAffineAnim_PokeballExitEast[] = // sprite is h-flipped when east
+{
+ AFFINEANIMCMD_FRAME(0xFFC0, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0xFF80, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0xFF40, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd sAffineAnim_PokeballEnter[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0xC0, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x80, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x40, 0x100, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd sAffineAnim_PokeballEnterEast[] = // sprtie is h-flipped when east
+{
+ AFFINEANIMCMD_FRAME(0xFF00, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0xFF40, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0xFF80, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0xFFC0, 0x100, 0, 0),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd *const sAffineAnims_PokeballFollower[] =
+{
+ sAffineAnim_PokeballExit,
+ sAffineAnim_PokeballExitEast,
+ sAffineAnim_PokeballEnter,
+ sAffineAnim_PokeballEnterEast,
+};
+
+bool8 MovementAction_ExitPokeball_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite)
+{
+ // for different speeds, anim steps occur on different frame #s
+ u32 animStepFrame = (sprite->sSpeedFlip & 1) ? 7 : 3; // 0 -> 3, 1 -> 7
+ if (--sprite->sDuration == 0)
+ {
+ sprite->sActionFuncId = 2;
+ sprite->animCmdIndex = 0;
+ sprite->animPaused = TRUE;
+ return TRUE;
+ }
+ // Set graphics, palette, and affine animation
+ else if (sprite->sDuration == animStepFrame)
+ {
+ FollowerSetGraphics(objectEvent, OW_SPECIES(objectEvent), OW_FORM(objectEvent), objectEvent->shiny);
+ LoadFillColorPalette(RGB_WHITE, OBJ_EVENT_PAL_TAG_WHITE, sprite);
+ // Initialize affine animation
+ sprite->affineAnims = sAffineAnims_PokeballFollower;
+ if (OW_LARGE_OW_SUPPORT && !IS_POW_OF_TWO(-sprite->centerToCornerVecX))
+ return FALSE;
+ sprite->affineAnims = sAffineAnims_PokeballFollower;
+ sprite->oam.affineMode = ST_OAM_AFFINE_NORMAL;
+ InitSpriteAffineAnim(sprite);
+ StartSpriteAffineAnim(sprite, sprite->sSpeedFlip >> 4);
+ // Restore original palette & disable affine
+ }
+ else if (sprite->sDuration == (animStepFrame >> 1))
+ {
+ sprite->affineAnimEnded = TRUE;
+ FreeSpriteOamMatrix(sprite);
+ sprite->oam.affineMode = ST_OAM_AFFINE_OFF;
+ FollowerSetGraphics(objectEvent, OW_SPECIES(objectEvent), OW_FORM(objectEvent), objectEvent->shiny);
+ }
+ return FALSE;
+}
+
+bool8 MovementAction_EnterPokeball_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
+{
+ u32 direction = objectEvent->facingDirection;
+ StartSpriteAnimInDirection(objectEvent, sprite, direction, GetMoveDirectionFasterAnimNum(direction));
+ sprite->sDuration = 16;
+ // If mon's right-facing sprite is h-flipped, we need to use a different affine anim
+ if (direction == DIR_EAST && sprite->anims[ANIM_STD_FACE_EAST]->frame.hFlip)
+ sprite->sSpeedFlip = 3;
+ else
+ sprite->sSpeedFlip = 2;
+ EndFollowerTransformEffect(objectEvent, sprite);
+ return MovementAction_EnterPokeball_Step1(objectEvent, sprite);
+}
+
+bool8 MovementAction_EnterPokeball_Step1(struct ObjectEvent *objectEvent, struct Sprite *sprite)
+{
+ u16 graphicsId = objectEvent->graphicsId;
+ if (--sprite->sDuration == 0)
+ {
+ sprite->sActionFuncId = 2;
+ return FALSE;
+ }
+ else if (sprite->sDuration == 11)
+ {
+ // Set palette to white & start affine
+ LoadFillColorPalette(RGB_WHITE, OBJ_EVENT_PAL_TAG_WHITE, sprite);
+ sprite->subspriteTableNum = 0;
+ // Only do affine if sprite width is power of 2
+ // (effect looks weird on sprites composed of subsprites like 48x48, etc)
+ if (OW_LARGE_OW_SUPPORT && !IS_POW_OF_TWO(-sprite->centerToCornerVecX))
+ return FALSE;
+ sprite->affineAnims = sAffineAnims_PokeballFollower;
+ sprite->oam.affineMode = ST_OAM_AFFINE_NORMAL;
+ InitSpriteAffineAnim(sprite);
+ StartSpriteAffineAnim(sprite, sprite->sSpeedFlip);
+ }
+ else if (sprite->sDuration == 7)
+ {
+ // Free white palette and change to pokeball, disable affine
+ sprite->affineAnimEnded = TRUE;
+ FreeSpriteOamMatrix(sprite);
+ sprite->oam.affineMode = ST_OAM_AFFINE_OFF;
+ ObjectEventSetPokeballGfx(objectEvent);
+ objectEvent->graphicsId = graphicsId;
+ objectEvent->inanimate = FALSE;
+ }
+ return FALSE;
+}
+
+bool8 MovementAction_EnterPokeball_Step2(struct ObjectEvent *objectEvent, struct Sprite *sprite)
+{
+ FollowerSetGraphics(objectEvent, OW_SPECIES(objectEvent), OW_FORM(objectEvent), objectEvent->shiny);
+ objectEvent->invisible = TRUE;
+ sprite->sTypeFuncId = 0;
+ sprite->sSpeedFlip = 0;
+ sprite->animPaused = TRUE;
+ return TRUE;
+}
+
+#undef sDuration
+#undef sSpeedFlip
+
bool8 MovementAction_WalkInPlaceSlowUp_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
InitMoveInPlace(objectEvent, sprite, DIR_NORTH, GetMoveDirectionAnimNum(DIR_NORTH), 32);
@@ -6483,6 +7991,7 @@ bool8 MovementAction_EmoteExclamationMark_Step0(struct ObjectEvent *objectEvent,
bool8 MovementAction_EmoteQuestionMark_Step0(struct ObjectEvent *objectEvent, struct Sprite *sprite)
{
ObjectEventGetLocalIdAndMap(objectEvent, &gFieldEffectArguments[0], &gFieldEffectArguments[1], &gFieldEffectArguments[2]);
+ gFieldEffectArguments[7] = -1;
FieldEffectStart(FLDEFF_QUESTION_MARK_ICON);
sprite->sActionFuncId = 1;
return TRUE;
@@ -7735,7 +9244,17 @@ static void UpdateObjectEventElevationAndPriority(struct ObjectEvent *objEvent,
if (objEvent->fixedPriority)
return;
- ObjectEventUpdateElevation(objEvent);
+ ObjectEventUpdateElevation(objEvent, sprite);
+ if (objEvent->localId == OBJ_EVENT_ID_FOLLOWER)
+ {
+ // keep subspriteMode synced with player's
+ // so that it disappears under bridges when they do
+ if (OW_LARGE_OW_SUPPORT)
+ sprite->subspriteMode |= gSprites[gPlayerAvatar.spriteId].subspriteMode & SUBSPRITES_IGNORE_PRIORITY;
+ // if transitioning between elevations, use the player's elevation
+ if (!objEvent->currentElevation)
+ objEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+ }
sprite->subspriteTableNum = sElevationToSubspriteTableNum[objEvent->previousElevation];
sprite->oam.priority = sElevationToPriority[objEvent->previousElevation];
@@ -7752,13 +9271,20 @@ u8 ElevationToPriority(u8 elevation)
return sElevationToPriority[elevation];
}
-void ObjectEventUpdateElevation(struct ObjectEvent *objEvent)
+// Returns current elevation, or 15 for bridges
+void ObjectEventUpdateElevation(struct ObjectEvent *objEvent, struct Sprite *sprite)
{
u8 curElevation = MapGridGetElevationAt(objEvent->currentCoords.x, objEvent->currentCoords.y);
u8 prevElevation = MapGridGetElevationAt(objEvent->previousCoords.x, objEvent->previousCoords.y);
if (curElevation == 15 || prevElevation == 15)
+ {
+ // Ignore subsprite priorities under bridges
+ // so all subsprites will display below it
+ if (OW_LARGE_OW_SUPPORT)
+ sprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY;
return;
+ }
objEvent->currentElevation = curElevation;
@@ -7781,6 +9307,10 @@ static void ObjectEventUpdateSubpriority(struct ObjectEvent *objEvent, struct Sp
if (objEvent->fixedPriority)
return;
+ // If transitioning between elevations, use the player's elevation
+ if (!objEvent->currentElevation && objEvent->localId == OBJ_EVENT_ID_FOLLOWER)
+ objEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+
SetObjectSubpriorityByElevation(objEvent->previousElevation, sprite, 1);
}
@@ -7866,18 +9396,21 @@ static void (*const sGroundEffectTracksFuncs[])(struct ObjectEvent *objEvent, st
[TRACKS_NONE] = DoTracksGroundEffect_None,
[TRACKS_FOOT] = DoTracksGroundEffect_Footprints,
[TRACKS_BIKE_TIRE] = DoTracksGroundEffect_BikeTireTracks,
+ [TRACKS_SLITHER] = DoTracksGroundEffect_SlitherTracks,
+ [TRACKS_SPOT] = DoTracksGroundEffect_FootprintsC,
+ [TRACKS_BUG] = DoTracksGroundEffect_FootprintsB,
};
void GroundEffect_SandTracks(struct ObjectEvent *objEvent, struct Sprite *sprite)
{
const struct ObjectEventGraphicsInfo *info = GetObjectEventGraphicsInfo(objEvent->graphicsId);
- sGroundEffectTracksFuncs[info->tracks](objEvent, sprite, FALSE);
+ sGroundEffectTracksFuncs[objEvent->invisible ? TRACKS_NONE : info->tracks](objEvent, sprite, FALSE);
}
void GroundEffect_DeepSandTracks(struct ObjectEvent *objEvent, struct Sprite *sprite)
{
const struct ObjectEventGraphicsInfo *info = GetObjectEventGraphicsInfo(objEvent->graphicsId);
- sGroundEffectTracksFuncs[info->tracks](objEvent, sprite, TRUE);
+ sGroundEffectTracksFuncs[objEvent->invisible ? TRACKS_NONE : info->tracks](objEvent, sprite, TRUE);
}
static void DoTracksGroundEffect_None(struct ObjectEvent *objEvent, struct Sprite *sprite, bool8 isDeepSand)
@@ -7900,6 +9433,40 @@ static void DoTracksGroundEffect_Footprints(struct ObjectEvent *objEvent, struct
FieldEffectStart(sandFootprints_FieldEffectData[isDeepSand]);
}
+static void DoTracksGroundEffect_FootprintsB(struct ObjectEvent *objEvent, struct Sprite *sprite, bool8 isDeepSand)
+{
+ // First half-word is a Field Effect script id. (gFieldEffectScriptPointers)
+ u16 otherFootprintsA_FieldEffectData[2] = {
+ FLDEFF_TRACKS_SPOT,
+ FLDEFF_TRACKS_SPOT
+ };
+
+ gFieldEffectArguments[0] = objEvent->previousCoords.x;
+ gFieldEffectArguments[1] = objEvent->previousCoords.y;
+ gFieldEffectArguments[2] = 149;
+ gFieldEffectArguments[3] = 2;
+ gFieldEffectArguments[4] = objEvent->facingDirection;
+ gFieldEffectArguments[5] = objEvent->previousMetatileBehavior;
+ FieldEffectStart(otherFootprintsA_FieldEffectData[isDeepSand]);
+}
+
+static void DoTracksGroundEffect_FootprintsC(struct ObjectEvent *objEvent, struct Sprite *sprite, bool8 isDeepSand)
+{
+ // First half-word is a Field Effect script id. (gFieldEffectScriptPointers)
+ u16 otherFootprintsB_FieldEffectData[2] = {
+ FLDEFF_TRACKS_BUG,
+ FLDEFF_TRACKS_BUG
+ };
+
+ gFieldEffectArguments[0] = objEvent->previousCoords.x;
+ gFieldEffectArguments[1] = objEvent->previousCoords.y;
+ gFieldEffectArguments[2] = 149;
+ gFieldEffectArguments[3] = 2;
+ gFieldEffectArguments[4] = objEvent->facingDirection;
+ gFieldEffectArguments[5] = objEvent->previousMetatileBehavior;
+ FieldEffectStart(otherFootprintsB_FieldEffectData[isDeepSand]);
+}
+
static void DoTracksGroundEffect_BikeTireTracks(struct ObjectEvent *objEvent, struct Sprite *sprite, bool8 isDeepSand)
{
// Specifies which bike track shape to show next.
@@ -7927,6 +9494,34 @@ 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},
+ };
+
+ 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);
+ }
+}
+
void GroundEffect_Ripple(struct ObjectEvent *objEvent, struct Sprite *sprite)
{
DoRippleFieldEffect(objEvent, sprite);
@@ -8084,6 +9679,8 @@ static void DoGroundEffects_OnSpawn(struct ObjectEvent *objEvent, struct Sprite
#endif
{
flags = 0;
+ if (OW_LARGE_OW_SUPPORT && !sprite->oam.affineMode)
+ sprite->subspriteMode = SUBSPRITES_ON;
UpdateObjectEventElevationAndPriority(objEvent, sprite);
GetAllGroundEffectFlags_OnSpawn(objEvent, &flags);
SetObjectEventSpriteOamTableForLongGrass(objEvent, sprite);
@@ -8104,6 +9701,8 @@ static void DoGroundEffects_OnBeginStep(struct ObjectEvent *objEvent, struct Spr
#endif
{
flags = 0;
+ if (OW_LARGE_OW_SUPPORT && !sprite->oam.affineMode)
+ sprite->subspriteMode = SUBSPRITES_ON;
UpdateObjectEventElevationAndPriority(objEvent, sprite);
GetAllGroundEffectFlags_OnBeginStep(objEvent, &flags);
SetObjectEventSpriteOamTableForLongGrass(objEvent, sprite);
@@ -8459,12 +10058,14 @@ static void SetJumpSpriteData(struct Sprite *sprite, u8 direction, u8 distance,
static u8 DoJumpSpriteMovement(struct Sprite *sprite)
{
- s16 distanceToTime[] = {
+ s16 distanceToTime[] =
+ {
[JUMP_DISTANCE_IN_PLACE] = 16,
[JUMP_DISTANCE_NORMAL] = 16,
[JUMP_DISTANCE_FAR] = 32,
};
- u8 distanceToShift[] = {
+ u8 distanceToShift[] =
+ {
[JUMP_DISTANCE_IN_PLACE] = 0,
[JUMP_DISTANCE_NORMAL] = 0,
[JUMP_DISTANCE_FAR] = 1,
@@ -8474,7 +10075,22 @@ static u8 DoJumpSpriteMovement(struct Sprite *sprite)
if (sprite->sDistance != JUMP_DISTANCE_IN_PLACE)
Step1(sprite, sprite->sDirection);
- sprite->y2 = GetJumpY(sprite->sTimer >> distanceToShift[sprite->sDistance], sprite->sJumpType);
+ if (sprite->sJumpType == JUMP_TYPE_FASTER)
+ {
+ Step3(sprite, sprite->sDirection);
+ sprite->y2 = GetJumpY(sprite->sTimer >> distanceToShift[sprite->sDistance], JUMP_TYPE_NORMAL);
+ sprite->sTimer += 3;
+ }
+ else if (sprite->sJumpType == JUMP_TYPE_FAST)
+ {
+ Step1(sprite, sprite->sDirection);
+ sprite->y2 = GetJumpY(sprite->sTimer >> distanceToShift[sprite->sDistance], JUMP_TYPE_NORMAL);
+ sprite->sTimer++;
+ }
+ else
+ {
+ sprite->y2 = GetJumpY(sprite->sTimer >> distanceToShift[sprite->sDistance], sprite->sJumpType);
+ }
sprite->sTimer++;
@@ -8626,7 +10242,7 @@ void TurnVirtualObject(u8 virtualObjId, u8 direction)
StartSpriteAnim(&gSprites[spriteId], GetFaceDirectionAnimNum(direction));
}
-void SetVirtualObjectGraphics(u8 virtualObjId, u8 graphicsId)
+void SetVirtualObjectGraphics(u8 virtualObjId, u16 graphicsId)
{
int spriteId = GetVirtualObjectSpriteId(virtualObjId);
@@ -8635,10 +10251,12 @@ void SetVirtualObjectGraphics(u8 virtualObjId, u8 graphicsId)
struct Sprite *sprite = &gSprites[spriteId];
const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(graphicsId);
u16 tileNum = sprite->oam.tileNum;
+ u8 i = FindObjectEventPaletteIndexByTag(graphicsInfo->paletteTag);
+ if (i != 0xFF)
+ UpdateSpritePalette(&sObjectEventSpritePalettes[i], sprite);
sprite->oam = *graphicsInfo->oam;
sprite->oam.tileNum = tileNum;
- sprite->oam.paletteNum = graphicsInfo->paletteSlot;
sprite->images = graphicsInfo->images;
if (graphicsInfo->subspriteTables == NULL)
@@ -8993,3 +10611,26 @@ bool8 MovementAction_EmoteDoubleExclamationMark_Step0(struct ObjectEvent *object
sprite->sActionFuncId = 1;
return TRUE;
}
+
+// Get gfx data from daycare pokemon and store it in vars
+void GetDaycareGraphics(struct ScriptContext *ctx)
+{
+ u16 varGfx[] = {ScriptReadHalfword(ctx), ScriptReadHalfword(ctx)};
+ u16 varForm[] = {ScriptReadHalfword(ctx), ScriptReadHalfword(ctx)};
+ u16 specGfx;
+ u8 form;
+ u8 shiny;
+ s32 i;
+ for (i = 0; i < 2; i++)
+ {
+ GetMonInfo((struct Pokemon *) &gSaveBlock1Ptr->daycare.mons[i].mon, &specGfx, &form, &shiny);
+ if (specGfx == SPECIES_NONE)
+ break;
+ // Assemble gfx ID like FollowerSetGraphics
+ specGfx = (OBJ_EVENT_GFX_MON_BASE + specGfx) & OBJ_EVENT_GFX_SPECIES_MASK;
+ specGfx |= form << OBJ_EVENT_GFX_SPECIES_BITS;
+ VarSet(varGfx[i], specGfx);
+ VarSet(varForm[i], form | (shiny << 5));
+ }
+ gSpecialVar_Result = i;
+}
diff --git a/src/evolution_scene.c b/src/evolution_scene.c
index c5d7e56f0bf6..98879430cb37 100644
--- a/src/evolution_scene.c
+++ b/src/evolution_scene.c
@@ -769,11 +769,13 @@ static void Task_EvolutionScene(u8 taskId)
case EVOSTATE_SET_MON_EVOLVED:
if (IsCryFinished())
{
+ u32 zero = 0;
StringExpandPlaceholders(gStringVar4, gText_CongratsPkmnEvolved);
BattlePutTextOnWindow(gStringVar4, B_WIN_MSG);
PlayBGM(MUS_EVOLVED);
gTasks[taskId].tState++;
SetMonData(mon, MON_DATA_SPECIES, (void *)(&gTasks[taskId].tPostEvoSpecies));
+ SetMonData(mon, MON_DATA_EVOLUTION_TRACKER, &zero);
CalculateMonStats(mon);
EvolutionRenameMon(mon, gTasks[taskId].tPreEvoSpecies, gTasks[taskId].tPostEvoSpecies);
GetSetPokedexFlag(SpeciesToNationalPokedexNum(gTasks[taskId].tPostEvoSpecies), FLAG_SET_SEEN);
@@ -1188,11 +1190,13 @@ static void Task_TradeEvolutionScene(u8 taskId)
case T_EVOSTATE_SET_MON_EVOLVED:
if (IsCryFinished())
{
+ u32 zero = 0;
StringExpandPlaceholders(gStringVar4, gText_CongratsPkmnEvolved);
DrawTextOnTradeWindow(0, gStringVar4, 1);
PlayFanfare(MUS_EVOLVED);
gTasks[taskId].tState++;
SetMonData(mon, MON_DATA_SPECIES, (&gTasks[taskId].tPostEvoSpecies));
+ SetMonData(mon, MON_DATA_EVOLUTION_TRACKER, &zero);
CalculateMonStats(mon);
EvolutionRenameMon(mon, gTasks[taskId].tPreEvoSpecies, gTasks[taskId].tPostEvoSpecies);
GetSetPokedexFlag(SpeciesToNationalPokedexNum(gTasks[taskId].tPostEvoSpecies), FLAG_SET_SEEN);
diff --git a/src/fake_rtc.c b/src/fake_rtc.c
new file mode 100644
index 000000000000..f3f3b74c3960
--- /dev/null
+++ b/src/fake_rtc.c
@@ -0,0 +1,104 @@
+#include "global.h"
+#include "string_util.h"
+#include "strings.h"
+#include "text.h"
+#include "rtc.h"
+#include "fake_rtc.h"
+#include "event_data.h"
+
+struct Time *FakeRtc_GetCurrentTime(void)
+{
+#if OW_USE_FAKE_RTC
+ return &gSaveBlock3Ptr->fakeRTC;
+#else
+ return NULL;
+#endif
+}
+
+void FakeRtc_GetRawInfo(struct SiiRtcInfo *rtc)
+{
+ struct Time* time = FakeRtc_GetCurrentTime();
+ rtc->second = time->seconds;
+ rtc->minute = time->minutes;
+ rtc->hour = time->hours;
+ rtc->day = time->days;
+}
+
+void FakeRtc_TickTimeForward(void)
+{
+ if (!OW_USE_FAKE_RTC)
+ return;
+
+ if (FlagGet(OW_FLAG_PAUSE_TIME))
+ return;
+
+ FakeRtc_AdvanceTimeBy(0, 0, FakeRtc_GetSecondsRatio());
+}
+
+void FakeRtc_AdvanceTimeBy(u32 hours, u32 minutes, u32 seconds)
+{
+ struct Time* time = FakeRtc_GetCurrentTime();
+ seconds += time->seconds;
+ minutes += time->minutes;
+ hours += time->hours;
+
+ while(seconds >= SECONDS_PER_MINUTE)
+ {
+ minutes++;
+ seconds -= SECONDS_PER_MINUTE;
+ }
+
+ while(minutes >= MINUTES_PER_HOUR)
+ {
+ hours++;
+ minutes -= MINUTES_PER_HOUR;
+ }
+
+ while(hours >= HOURS_PER_DAY)
+ {
+ time->days++;
+ hours -= HOURS_PER_DAY;
+ }
+
+ time->seconds = seconds;
+ time->minutes = minutes;
+ time->hours = hours;
+}
+
+void FakeRtc_ManuallySetTime(u32 hour, u32 minute, u32 second)
+{
+ struct Time diff, target;
+ RtcCalcLocalTime();
+
+ target.hours = hour;
+ target.minutes = minute;
+ target.seconds = second;
+ target.days = gLocalTime.days;
+
+ CalcTimeDifference(&diff, &gLocalTime, &target);
+ FakeRtc_AdvanceTimeBy(diff.hours, diff.minutes, diff.seconds);
+}
+
+u32 FakeRtc_GetSecondsRatio(void)
+{
+ return (OW_ALTERED_TIME_RATIO == GEN_8_PLA) ? 60 :
+ (OW_ALTERED_TIME_RATIO == GEN_9) ? 20 :
+ 1;
+}
+
+STATIC_ASSERT((OW_FLAG_PAUSE_TIME == 0 || OW_USE_FAKE_RTC == TRUE), FakeRtcMustBeTrueToPauseTime);
+
+void Script_PauseFakeRtc(void)
+{
+ FlagSet(OW_FLAG_PAUSE_TIME);
+}
+
+void Script_ResumeFakeRtc(void)
+{
+ FlagClear(OW_FLAG_PAUSE_TIME);
+}
+
+void Script_ToggleFakeRtc(void)
+{
+ FlagToggle(OW_FLAG_PAUSE_TIME);
+}
diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c
index d5c252415df9..582617d555a1 100644
--- a/src/field_control_avatar.c
+++ b/src/field_control_avatar.c
@@ -69,6 +69,7 @@ static bool8 TryStartWarpEventScript(struct MapPosition *, u16);
static bool8 TryStartMiscWalkingScripts(u16);
static bool8 TryStartStepCountScript(u16);
static void UpdateFriendshipStepCounter(void);
+static void UpdateFollowerStepCounter(void);
#if OW_POISON_DAMAGE < GEN_5
static bool8 UpdatePoisonStepCounter(void);
#endif // OW_POISON_DAMAGE
@@ -565,6 +566,7 @@ static bool8 TryStartStepCountScript(u16 metatileBehavior)
IncrementRematchStepCounter();
UpdateFriendshipStepCounter();
UpdateFarawayIslandStepCounter();
+ UpdateFollowerStepCounter();
if (!(gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_FORCED_MOVE) && !MetatileBehavior_IsForcedMovementTile(metatileBehavior))
{
@@ -658,6 +660,12 @@ static void UpdateFriendshipStepCounter(void)
}
}
+static void UpdateFollowerStepCounter(void)
+{
+ if (gPlayerPartyCount > 0 && gFollowerSteps < (u16)-1)
+ gFollowerSteps++;
+}
+
void ClearPoisonStepCounter(void)
{
VarSet(VAR_POISON_STEP_COUNTER, 0);
@@ -908,6 +916,16 @@ static s8 GetWarpEventAtPosition(struct MapHeader *mapHeader, u16 x, u16 y, u8 e
return WARP_ID_NONE;
}
+static bool32 ShouldTriggerScriptRun(const struct CoordEvent *coordEvent)
+{
+ u16 *varPtr = GetVarPointer(coordEvent->trigger);
+ // Treat non Vars as flags
+ if (varPtr == NULL)
+ return (FlagGet(coordEvent->trigger) == coordEvent->index);
+ else
+ return (*varPtr == coordEvent->index);
+}
+
static const u8 *TryRunCoordEventScript(const struct CoordEvent *coordEvent)
{
if (coordEvent != NULL)
@@ -922,7 +940,7 @@ static const u8 *TryRunCoordEventScript(const struct CoordEvent *coordEvent)
RunScriptImmediately(coordEvent->script);
return NULL;
}
- if (VarGet(coordEvent->trigger) == (u8)coordEvent->index)
+ if (ShouldTriggerScriptRun(coordEvent))
return coordEvent->script;
}
return NULL;
diff --git a/src/field_effect.c b/src/field_effect.c
index dcfbd5707840..898f19c291fe 100644
--- a/src/field_effect.c
+++ b/src/field_effect.c
@@ -20,6 +20,7 @@
#include "palette.h"
#include "party_menu.h"
#include "pokemon.h"
+#include "pokemon_storage_system.h"
#include "script.h"
#include "sound.h"
#include "sprite.h"
@@ -28,6 +29,7 @@
#include "trig.h"
#include "util.h"
#include "constants/field_effects.h"
+#include "constants/event_objects.h"
#include "constants/event_object_movement.h"
#include "constants/metatile_behaviors.h"
#include "constants/rgb.h"
@@ -68,7 +70,6 @@ static void PokeballGlowEffect_WaitForSound(struct Sprite *);
static void PokeballGlowEffect_Idle(struct Sprite *);
static void SpriteCB_PokeballGlow(struct Sprite *);
-static void FieldCallback_UseFly(void);
static void Task_UseFly(u8);
static void FieldCallback_FlyIntoMap(void);
static void Task_FlyIntoMap(u8);
@@ -939,12 +940,14 @@ u8 CreateMonSprite_FieldMove(u16 species, bool8 isShiny, u32 personality, s16 x,
void FreeResourcesAndDestroySprite(struct Sprite *sprite, u8 spriteId)
{
+ u8 paletteNum = sprite->oam.paletteNum;
ResetPreservedPalettesInWeather();
if (sprite->oam.affineMode != ST_OAM_AFFINE_OFF)
{
FreeOamMatrix(sprite->oam.matrixNum);
}
- FreeAndDestroyMonPicSprite(spriteId);
+ FreeAndDestroyMonPicSpriteNoPalette(spriteId);
+ FieldEffectFreePaletteIfUnused(paletteNum); // Clear palette only if unused, in case follower is using it
}
// r, g, b are between 0 and 16
@@ -1013,10 +1016,10 @@ void MultiplyPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b)
bool8 FldEff_PokecenterHeal(void)
{
- u8 nPokemon;
+ u32 nPokemon;
struct Task *task;
- nPokemon = CalculatePlayerPartyCount();
+ nPokemon = (OW_IGNORE_EGGS_ON_HEAL <= GEN_3) ? CalculatePlayerPartyCount() : CountPartyNonEggMons();
task = &gTasks[CreateTask(Task_PokecenterHeal, 0xff)];
task->tNumMons = nPokemon;
task->tFirstBallX = 93;
@@ -1345,7 +1348,7 @@ void ReturnToFieldFromFlyMapSelect(void)
gFieldCallback = FieldCallback_UseFly;
}
-static void FieldCallback_UseFly(void)
+void FieldCallback_UseFly(void)
{
FadeInFromBlack();
CreateTask(Task_UseFly, 0);
@@ -1562,6 +1565,15 @@ static bool8 FallWarpEffect_End(struct Task *task)
#define tState data[0]
#define tGoingUp data[1]
+static void HideFollowerForFieldEffect(void)
+{
+ struct ObjectEvent *followerObj = GetFollowerObject();
+ if (!followerObj || followerObj->invisible)
+ return;
+ ClearObjectEventMovement(followerObj, &gSprites[followerObj->spriteId]);
+ ObjectEventSetHeldMovement(followerObj, MOVEMENT_ACTION_ENTER_POKEBALL);
+}
+
void StartEscalatorWarp(u8 metatileBehavior, u8 priority)
{
u8 taskId;
@@ -1585,6 +1597,7 @@ static bool8 EscalatorWarpOut_Init(struct Task *task)
FreezeObjectEvents();
CameraObjectFreeze();
StartEscalator(task->tGoingUp);
+ HideFollowerForFieldEffect(); // Hide follower before warping
task->tState++;
return FALSE;
}
@@ -1967,6 +1980,8 @@ static bool8 LavaridgeGymB1FWarpEffect_Init(struct Task *task, struct ObjectEven
objectEvent->fixedPriority = 1;
task->data[1] = 1;
task->data[0]++;
+ if (objectEvent->localId == OBJ_EVENT_ID_PLAYER) // Hide follower before warping
+ HideFollowerForFieldEffect();
return TRUE;
}
@@ -2158,6 +2173,8 @@ static bool8 LavaridgeGym1FWarpEffect_Init(struct Task *task, struct ObjectEvent
gPlayerAvatar.preventStep = TRUE;
objectEvent->fixedPriority = 1;
task->data[0]++;
+ if (objectEvent->localId == OBJ_EVENT_ID_PLAYER) // Hide follower before warping
+ HideFollowerForFieldEffect();
return FALSE;
}
@@ -2243,6 +2260,7 @@ void StartEscapeRopeFieldEffect(void)
{
LockPlayerFieldControls();
FreezeObjectEvents();
+ HideFollowerForFieldEffect(); // hide follower before warping
CreateTask(Task_EscapeRopeWarpOut, 80);
}
@@ -3007,6 +3025,8 @@ static void SurfFieldEffect_Init(struct Task *task)
{
LockPlayerFieldControls();
FreezeObjectEvents();
+ // Put follower into pokeball before using Surf
+ HideFollowerForFieldEffect();
gPlayerAvatar.preventStep = TRUE;
SetPlayerAvatarStateMask(PLAYER_AVATAR_FLAG_SURFING);
PlayerGetDestCoords(&task->tDestX, &task->tDestY);
@@ -3057,13 +3077,15 @@ static void SurfFieldEffect_JumpOnSurfBlob(struct Task *task)
static void SurfFieldEffect_End(struct Task *task)
{
- struct ObjectEvent *objectEvent;
- objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+ struct ObjectEvent *objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+ struct ObjectEvent *followerObject = GetFollowerObject();
if (ObjectEventClearHeldMovementIfFinished(objectEvent))
{
gPlayerAvatar.preventStep = FALSE;
gPlayerAvatar.flags &= ~PLAYER_AVATAR_FLAG_CONTROLLABLE;
ObjectEventSetHeldMovement(objectEvent, GetFaceDirectionMovementAction(objectEvent->movementDirection));
+ if (followerObject)
+ ObjectEventClearHeldMovementIfFinished(followerObject);
SetSurfBlob_BobState(objectEvent->fieldEffectSpriteId, BOB_PLAYER_AND_MON);
UnfreezeObjectEvents();
UnlockPlayerFieldControls();
@@ -3119,7 +3141,7 @@ u8 FldEff_NPCFlyOut(void)
u8 spriteId = CreateSprite(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_BIRD], 0x78, 0, 1);
struct Sprite *sprite = &gSprites[spriteId];
- sprite->oam.paletteNum = 0;
+ sprite->oam.paletteNum = LoadPlayerObjectEventPalette(gSaveBlock2Ptr->playerGender);
sprite->oam.priority = 1;
sprite->callback = SpriteCB_NPCFlyOut;
sprite->data[1] = gFieldEffectArguments[0];
@@ -3301,7 +3323,7 @@ static u8 CreateFlyBirdSprite(void)
struct Sprite *sprite;
spriteId = CreateSprite(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_BIRD], 0xff, 0xb4, 0x1);
sprite = &gSprites[spriteId];
- sprite->oam.paletteNum = 0;
+ sprite->oam.paletteNum = LoadPlayerObjectEventPalette(gSaveBlock2Ptr->playerGender);
sprite->oam.priority = 1;
sprite->callback = SpriteCB_FlyBirdLeaveBall;
return spriteId;
diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c
index ac4dac3ecb0f..1991892a5088 100755
--- a/src/field_effect_helpers.c
+++ b/src/field_effect_helpers.c
@@ -7,18 +7,27 @@
#include "fieldmap.h"
#include "gpu_regs.h"
#include "metatile_behavior.h"
+#include "palette.h"
#include "sound.h"
#include "sprite.h"
#include "trig.h"
+#include "constants/event_objects.h"
#include "constants/field_effects.h"
+#include "constants/rgb.h"
#include "constants/songs.h"
#define OBJ_EVENT_PAL_TAG_NONE 0x11FF // duplicate of define in event_object_movement.c
+#define PAL_TAG_REFLECTION_OFFSET 0x2000 // reflection tag value is paletteTag + 0x2000
+#define PAL_RAW_REFLECTION_OFFSET 0x4000 // raw reflection tag is paletteNum + 0x4000
+#define HIGH_BRIDGE_PAL_TAG 0x4010
+// Build a unique tag for reflection's palette based on based tag, or paletteNum
+#define REFLECTION_PAL_TAG(tag, num) ((tag) == TAG_NONE ? (num) + PAL_RAW_REFLECTION_OFFSET : (tag) + PAL_TAG_REFLECTION_OFFSET)
static void UpdateObjectReflectionSprite(struct Sprite *);
static void LoadObjectReflectionPalette(struct ObjectEvent *objectEvent, struct Sprite *sprite);
-static void LoadObjectHighBridgeReflectionPalette(struct ObjectEvent *, u8);
-static void LoadObjectRegularReflectionPalette(struct ObjectEvent *, u8);
+static void LoadObjectHighBridgeReflectionPalette(struct ObjectEvent *, struct Sprite *sprite);
+static void LoadObjectRegularReflectionPalette(struct ObjectEvent *, struct Sprite *);
+
static void UpdateGrassFieldEffectSubpriority(struct Sprite *, u8, u8);
static void FadeFootprintsTireTracks_Step0(struct Sprite *);
static void FadeFootprintsTireTracks_Step1(struct Sprite *);
@@ -31,6 +40,7 @@ static void SynchroniseSurfPosition(struct ObjectEvent *, struct Sprite *);
static void UpdateBobbingEffect(struct ObjectEvent *, struct Sprite *, struct Sprite *);
static void SpriteCB_UnderwaterSurfBlob(struct Sprite *);
static u32 ShowDisguiseFieldEffect(u8, u8, u8);
+u32 FldEff_Shadow(void);
// Data used by all the field effects that share UpdateJumpImpactEffect
#define sJumpElevation data[0]
@@ -44,6 +54,14 @@ static u32 ShowDisguiseFieldEffect(u8, u8, u8);
#define sReflectionVerticalOffset data[2]
#define sIsStillReflection data[7]
+void SetUpShadow(struct ObjectEvent *objectEvent, struct Sprite *sprite)
+{
+ gFieldEffectArguments[0] = objectEvent->localId;
+ gFieldEffectArguments[1] = gSaveBlock1Ptr->location.mapNum;
+ gFieldEffectArguments[2] = gSaveBlock1Ptr->location.mapGroup;
+ FldEff_Shadow();
+}
+
void SetUpReflection(struct ObjectEvent *objectEvent, struct Sprite *sprite, bool8 stillReflection)
{
struct Sprite *reflectionSprite;
@@ -51,14 +69,14 @@ void SetUpReflection(struct ObjectEvent *objectEvent, struct Sprite *sprite, boo
reflectionSprite = &gSprites[CreateCopySpriteAt(sprite, sprite->x, sprite->y, 152)];
reflectionSprite->callback = UpdateObjectReflectionSprite;
reflectionSprite->oam.priority = 3;
- reflectionSprite->oam.paletteNum = gReflectionEffectPaletteMap[reflectionSprite->oam.paletteNum];
reflectionSprite->usingSheet = TRUE;
reflectionSprite->anims = gDummySpriteAnimTable;
StartSpriteAnim(reflectionSprite, 0);
reflectionSprite->affineAnims = gDummySpriteAffineAnimTable;
reflectionSprite->affineAnimBeginning = TRUE;
- reflectionSprite->subspriteMode = SUBSPRITES_OFF;
- reflectionSprite->sReflectionObjEventId = sprite->data[0];
+ reflectionSprite->subspriteMode = SUBSPRITES_IGNORE_PRIORITY;
+ reflectionSprite->subspriteTableNum = 0;
+ reflectionSprite->sReflectionObjEventId = sprite->sReflectionObjEventId;
reflectionSprite->sReflectionObjEventLocalId = objectEvent->localId;
reflectionSprite->sIsStillReflection = stillReflection;
LoadObjectReflectionPalette(objectEvent, reflectionSprite);
@@ -81,84 +99,162 @@ static void LoadObjectReflectionPalette(struct ObjectEvent *objectEvent, struct
[BRIDGE_TYPE_POND_HIGH - 1] = 44
};
reflectionSprite->sReflectionVerticalOffset = 0;
- if (!GetObjectEventGraphicsInfo(objectEvent->graphicsId)->disableReflectionPaletteLoad
- && ((bridgeType = MetatileBehavior_GetBridgeType(objectEvent->previousMetatileBehavior))
- || (bridgeType = MetatileBehavior_GetBridgeType(objectEvent->currentMetatileBehavior))))
+ if ((bridgeType = MetatileBehavior_GetBridgeType(objectEvent->previousMetatileBehavior))
+ || (bridgeType = MetatileBehavior_GetBridgeType(objectEvent->currentMetatileBehavior)))
{
reflectionSprite->sReflectionVerticalOffset = bridgeReflectionVerticalOffsets[bridgeType - 1];
- LoadObjectHighBridgeReflectionPalette(objectEvent, reflectionSprite->oam.paletteNum);
+ LoadObjectHighBridgeReflectionPalette(objectEvent, reflectionSprite);
}
else
{
- LoadObjectRegularReflectionPalette(objectEvent, reflectionSprite->oam.paletteNum);
+ LoadObjectRegularReflectionPalette(objectEvent, reflectionSprite);
}
}
-static void LoadObjectRegularReflectionPalette(struct ObjectEvent *objectEvent, u8 paletteIndex)
+// Apply a blue tint effect to a palette
+static void ApplyPondFilter(u8 paletteNum, u16 *dest)
{
- const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId);
- if (graphicsInfo->reflectionPaletteTag != OBJ_EVENT_PAL_TAG_NONE)
+ u32 i, r, g, b;
+ // CpuCopy16(gPlttBufferUnfaded + 0x100 + paletteNum * 16, dest, 32);
+ u16 *src = gPlttBufferUnfaded + OBJ_PLTT_ID(paletteNum);
+ *dest++ = *src++; // copy transparency
+ for (i = 0; i < 16 - 1; i++)
{
- if (graphicsInfo->paletteSlot == PALSLOT_PLAYER)
- LoadPlayerObjectReflectionPalette(graphicsInfo->paletteTag, paletteIndex);
- else if (graphicsInfo->paletteSlot == PALSLOT_NPC_SPECIAL)
- LoadSpecialObjectReflectionPalette(graphicsInfo->paletteTag, paletteIndex);
- else
- PatchObjectPalette(GetObjectPaletteTag(paletteIndex), paletteIndex);
- UpdateSpritePaletteWithWeather(paletteIndex);
+ r = GET_R(src[i]);
+ g = GET_G(src[i]);
+ b = GET_B(src[i]);
+ b += 10;
+ if (b > 31)
+ b = 31;
+ *dest++ = RGB2(r, g, b);
}
}
-// When walking on a bridge high above water (Route 120), the reflection is a solid dark blue color.
-// This is so the sprite blends in with the dark water metatile underneath the bridge.
-static void LoadObjectHighBridgeReflectionPalette(struct ObjectEvent *objectEvent, u8 paletteNum)
+// Apply a ice tint effect to a palette
+static void ApplyIceFilter(u8 paletteNum, u16 *dest)
{
- const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(objectEvent->graphicsId);
- if (graphicsInfo->reflectionPaletteTag != OBJ_EVENT_PAL_TAG_NONE)
+ u32 i, r, g, b;
+ // CpuCopy16(gPlttBufferUnfaded + 0x100 + paletteNum * 16, dest, 32);
+ u16 *src = gPlttBufferUnfaded + OBJ_PLTT_ID(paletteNum);
+ *dest++ = *src++; // copy transparency
+ for (i = 0; i < 16 - 1; i++)
{
- PatchObjectPalette(graphicsInfo->reflectionPaletteTag, paletteNum);
+ r = GET_R(src[i]);
+ r -= 5;
+ if (r > 31)
+ r = 0;
+ g = GET_G(src[i]);
+ g += 3;
+ if (g > 31)
+ g = 31;
+ b = GET_B(src[i]);
+ b += 16;
+ if (b > 31)
+ b = 31;
+ *dest++ = RGB2(r, g, b);
+ }
+}
+
+static void LoadObjectRegularReflectionPalette(struct ObjectEvent *objectEvent, struct Sprite *sprite)
+{
+ const struct Sprite *mainSprite = &gSprites[objectEvent->spriteId];
+ u16 baseTag = GetSpritePaletteTagByPaletteNum(mainSprite->oam.paletteNum);
+ u16 paletteTag = REFLECTION_PAL_TAG(baseTag, mainSprite->oam.paletteNum);
+ u8 paletteNum = IndexOfSpritePaletteTag(paletteTag);
+ if (paletteNum <= 16)
+ {
+ // Load filtered palette
+ u16 filteredData[16];
+ struct SpritePalette filteredPal = {.tag = paletteTag, .data = filteredData};
+ if (sprite->sIsStillReflection == FALSE)
+ ApplyPondFilter(mainSprite->oam.paletteNum, filteredData);
+ else
+ ApplyIceFilter(mainSprite->oam.paletteNum, filteredData);
+ paletteNum = LoadSpritePalette(&filteredPal);
UpdateSpritePaletteWithWeather(paletteNum);
}
+ sprite->oam.paletteNum = paletteNum;
+ sprite->oam.objMode = ST_OAM_OBJ_BLEND;
+}
+
+// When walking on a bridge high above water (Route 120), the reflection is a solid dark blue color.
+// This is so the sprite blends in with the dark water metatile underneath the bridge.
+static void LoadObjectHighBridgeReflectionPalette(struct ObjectEvent *objectEvent, struct Sprite *sprite)
+{
+ u16 blueData[16];
+ struct SpritePalette bluePalette = {.tag = HIGH_BRIDGE_PAL_TAG, .data = blueData};
+ CpuFill16(0x55C9, blueData, PLTT_SIZE_4BPP);
+ sprite->oam.paletteNum = LoadSpritePalette(&bluePalette);
+ UpdateSpritePaletteWithWeather(sprite->oam.paletteNum);
}
static void UpdateObjectReflectionSprite(struct Sprite *reflectionSprite)
{
struct ObjectEvent *objectEvent = &gObjectEvents[reflectionSprite->sReflectionObjEventId];
struct Sprite *mainSprite = &gSprites[objectEvent->spriteId];
+
if (!objectEvent->active || !objectEvent->hasReflection || objectEvent->localId != reflectionSprite->sReflectionObjEventLocalId)
{
reflectionSprite->inUse = FALSE;
+ FieldEffectFreePaletteIfUnused(reflectionSprite->oam.paletteNum);
+ return;
}
- else
+
+ // Only filter palette if not using the high bridge blue palette
+ // This is basically a copy of LoadObjectRegularReflectionPalette
+ if (IndexOfSpritePaletteTag(HIGH_BRIDGE_PAL_TAG) != reflectionSprite->oam.paletteNum)
{
- reflectionSprite->oam.paletteNum = gReflectionEffectPaletteMap[mainSprite->oam.paletteNum];
- reflectionSprite->oam.shape = mainSprite->oam.shape;
- reflectionSprite->oam.size = mainSprite->oam.size;
- reflectionSprite->oam.matrixNum = mainSprite->oam.matrixNum | ST_OAM_VFLIP;
- reflectionSprite->oam.tileNum = mainSprite->oam.tileNum;
- reflectionSprite->subspriteTables = mainSprite->subspriteTables;
- reflectionSprite->subspriteTableNum = mainSprite->subspriteTableNum;
- reflectionSprite->invisible = mainSprite->invisible;
- reflectionSprite->x = mainSprite->x;
- reflectionSprite->y = mainSprite->y + GetReflectionVerticalOffset(objectEvent) + reflectionSprite->sReflectionVerticalOffset;
- reflectionSprite->centerToCornerVecX = mainSprite->centerToCornerVecX;
- reflectionSprite->centerToCornerVecY = mainSprite->centerToCornerVecY;
- reflectionSprite->x2 = mainSprite->x2;
- reflectionSprite->y2 = -mainSprite->y2;
- reflectionSprite->coordOffsetEnabled = mainSprite->coordOffsetEnabled;
-
- if (objectEvent->hideReflection == TRUE)
- reflectionSprite->invisible = TRUE;
-
- if (reflectionSprite->sIsStillReflection == FALSE)
+ u16 baseTag = GetSpritePaletteTagByPaletteNum(mainSprite->oam.paletteNum);
+ u16 paletteTag = REFLECTION_PAL_TAG(baseTag, mainSprite->oam.paletteNum);
+ u8 paletteNum = IndexOfSpritePaletteTag(paletteTag);
+ if (paletteNum >= 16)
{
- // Sets the reflection sprite's rot/scale matrix to the appropriate
- // matrix based on whether or not the main sprite is horizontally flipped.
- // If the sprite is facing to the east, then it is flipped, and its matrixNum is 8.
- reflectionSprite->oam.matrixNum = 0;
- if (mainSprite->oam.matrixNum & ST_OAM_HFLIP)
- reflectionSprite->oam.matrixNum = 1;
+ // Build filtered palette
+ u16 filteredData[16];
+ struct SpritePalette filteredPal = {.tag = paletteTag, .data = filteredData};
+ // Free palette if unused
+ reflectionSprite->inUse = FALSE;
+ FieldEffectFreePaletteIfUnused(reflectionSprite->oam.paletteNum);
+ reflectionSprite->inUse = TRUE;
+ if (reflectionSprite->sIsStillReflection == FALSE)
+ ApplyPondFilter(mainSprite->oam.paletteNum, filteredData);
+ else
+ ApplyIceFilter(mainSprite->oam.paletteNum, filteredData);
+ paletteNum = LoadSpritePalette(&filteredPal);
+ UpdateSpritePaletteWithWeather(paletteNum);
}
+ reflectionSprite->oam.paletteNum = paletteNum;
+ }
+ reflectionSprite->oam.shape = mainSprite->oam.shape;
+ reflectionSprite->oam.size = mainSprite->oam.size;
+ reflectionSprite->oam.matrixNum = mainSprite->oam.matrixNum | ST_OAM_VFLIP;
+ reflectionSprite->oam.tileNum = mainSprite->oam.tileNum;
+ reflectionSprite->subspriteTables = mainSprite->subspriteTables;
+ reflectionSprite->invisible = mainSprite->invisible;
+ reflectionSprite->x = mainSprite->x;
+ // sReflectionVerticalOffset is only set for high bridges
+ reflectionSprite->y = mainSprite->y + GetReflectionVerticalOffset(objectEvent) + reflectionSprite->sReflectionVerticalOffset;
+ reflectionSprite->centerToCornerVecX = mainSprite->centerToCornerVecX;
+ reflectionSprite->centerToCornerVecY = mainSprite->centerToCornerVecY;
+ reflectionSprite->x2 = mainSprite->x2;
+ reflectionSprite->y2 = -mainSprite->y2;
+ reflectionSprite->coordOffsetEnabled = mainSprite->coordOffsetEnabled;
+
+ if (objectEvent->hideReflection == TRUE)
+ reflectionSprite->invisible = TRUE;
+
+ // Support "virtual" sprites which can't be rotated via affines
+ if (reflectionSprite->subspriteTables[0].subsprites)
+ {
+ reflectionSprite->oam.affineMode = ST_OAM_AFFINE_OFF;
+ return;
+ }
+ if (reflectionSprite->sIsStillReflection == FALSE)
+ {
+ // Sets the reflection sprite's rot/scale matrix to the correct
+ // water reflection matrix based on the main sprite's facing direction.
+ // If the sprite is facing east, then it's flipped, and its matrixNum is 1.
+ reflectionSprite->oam.matrixNum = (mainSprite->oam.matrixNum & ST_OAM_HFLIP) ? 1 : 0;
}
}
@@ -178,6 +274,8 @@ u8 CreateWarpArrowSprite(void)
if (spriteId != MAX_SPRITES)
{
struct Sprite *sprite = &gSprites[spriteId];
+ // Can use either gender's palette, so try to use the one that should be loaded
+ sprite->oam.paletteNum = LoadPlayerObjectEventPalette(gSaveBlock2Ptr->playerGender);
sprite->oam.priority = 1;
sprite->coordOffsetEnabled = TRUE;
sprite->invisible = TRUE;
@@ -232,16 +330,34 @@ const u16 gShadowVerticalOffsets[] = {
u32 FldEff_Shadow(void)
{
- u8 objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
- const struct ObjectEventGraphicsInfo *graphicsInfo = GetObjectEventGraphicsInfo(gObjectEvents[objectEventId].graphicsId);
- u8 spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[sShadowEffectTemplateIds[graphicsInfo->shadowSize]], 0, 0, 148);
+ u8 objectEventId;
+ const struct ObjectEventGraphicsInfo *graphicsInfo;
+ u8 spriteId;
+ u8 i;
+ for (i = 0; i < MAX_SPRITES; i++)
+ {
+ // Return early if a shadow sprite already exists
+ if (gSprites[i].data[0] == gFieldEffectArguments[0] && gSprites[i].callback == UpdateShadowFieldEffect)
+ return 0;
+ }
+ objectEventId = GetObjectEventIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ graphicsInfo = GetObjectEventGraphicsInfo(gObjectEvents[objectEventId].graphicsId);
+ if (graphicsInfo->shadowSize == SHADOW_SIZE_NONE) // don't create a shadow at all
+ return 0;
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[sShadowEffectTemplateIds[graphicsInfo->shadowSize]], 0, 0, 0x94);
if (spriteId != MAX_SPRITES)
{
+ // SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(8, 12));
+ gSprites[spriteId].oam.objMode = 1; // BLEND
gSprites[spriteId].coordOffsetEnabled = TRUE;
gSprites[spriteId].sLocalId = gFieldEffectArguments[0];
gSprites[spriteId].sMapNum = gFieldEffectArguments[1];
gSprites[spriteId].sMapGroup = gFieldEffectArguments[2];
+ #if OW_LARGE_OW_SUPPORT
+ gSprites[spriteId].sYOffset = gShadowVerticalOffsets[graphicsInfo->shadowSize];
+ #else
gSprites[spriteId].sYOffset = (graphicsInfo->height >> 1) - gShadowVerticalOffsets[graphicsInfo->shadowSize];
+ #endif
}
return 0;
}
@@ -260,13 +376,17 @@ void UpdateShadowFieldEffect(struct Sprite *sprite)
struct Sprite *linkedSprite = &gSprites[objectEvent->spriteId];
sprite->oam.priority = linkedSprite->oam.priority;
sprite->x = linkedSprite->x;
+ #if OW_LARGE_OW_SUPPORT
+ // Read 'live' size from linked sprite
+ sprite->y = linkedSprite->y - linkedSprite->centerToCornerVecY - sprite->sYOffset;
+ #else
sprite->y = linkedSprite->y + sprite->sYOffset;
+ #endif
+ sprite->invisible = linkedSprite->invisible;
if (!objectEvent->active || !objectEvent->hasShadow
|| MetatileBehavior_IsPokeGrass(objectEvent->currentMetatileBehavior)
|| MetatileBehavior_IsSurfableWaterOrUnderwater(objectEvent->currentMetatileBehavior)
- || MetatileBehavior_IsSurfableWaterOrUnderwater(objectEvent->previousMetatileBehavior)
- || MetatileBehavior_IsReflective(objectEvent->currentMetatileBehavior)
- || MetatileBehavior_IsReflective(objectEvent->previousMetatileBehavior))
+ || MetatileBehavior_IsSurfableWaterOrUnderwater(objectEvent->previousMetatileBehavior))
{
FieldEffectStop(sprite, FLDEFF_SHADOW);
}
@@ -585,6 +705,42 @@ u32 FldEff_DeepSandFootprints(void)
return spriteId;
}
+u32 FldEff_TracksBug(void)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_TRACKS_BUG], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data[7] = FLDEFF_TRACKS_BUG;
+ StartSpriteAnim(sprite, gFieldEffectArguments[4]);
+ }
+ return 0;
+}
+
+u32 FldEff_TracksSpot(void)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_TRACKS_SPOT], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data[7] = FLDEFF_TRACKS_SPOT;
+ StartSpriteAnim(sprite, gFieldEffectArguments[4]);
+ }
+ return 0;
+}
+
u32 FldEff_BikeTireTracks(void)
{
u8 spriteId;
@@ -602,6 +758,24 @@ u32 FldEff_BikeTireTracks(void)
return spriteId;
}
+u32 FldEff_TracksSlither(void)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ SetSpritePosToOffsetMapCoords((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_TRACKS_SLITHER], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data[7] = FLDEFF_TRACKS_SLITHER;
+ StartSpriteAnim(sprite, gFieldEffectArguments[4]);
+ }
+ return spriteId;
+}
+
void (*const gFadeFootprintsTireTracksFuncs[])(struct Sprite *) = {
FadeFootprintsTireTracks_Step0,
FadeFootprintsTireTracks_Step1
@@ -1006,8 +1180,9 @@ u32 FldEff_SurfBlob(void)
{
struct Sprite *sprite = &gSprites[spriteId];
sprite->coordOffsetEnabled = TRUE;
- sprite->oam.paletteNum = 0;
sprite->sPlayerObjId = gFieldEffectArguments[2];
+ // Can use either gender's palette, so try to use the one that should be loaded
+ sprite->oam.paletteNum = LoadPlayerObjectEventPalette(gSaveBlock2Ptr->playerGender);
sprite->sVelocity = -1;
sprite->sPrevX = -1;
sprite->sPrevY = -1;
@@ -1296,7 +1471,7 @@ u32 FldEff_BerryTreeGrowthSparkle(void)
struct Sprite *sprite = &gSprites[spriteId];
sprite->coordOffsetEnabled = TRUE;
sprite->oam.priority = gFieldEffectArguments[3];
- sprite->oam.paletteNum = 5;
+ UpdateSpritePaletteByTemplate(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SPARKLE], sprite);
sprite->sWaitFldEff = FLDEFF_BERRY_TREE_GROWTH_SPARKLE;
}
return 0;
@@ -1338,8 +1513,8 @@ static u32 ShowDisguiseFieldEffect(u8 fldEff, u8 fldEffObj, u8 paletteNum)
if (spriteId != MAX_SPRITES)
{
struct Sprite *sprite = &gSprites[spriteId];
+ UpdateSpritePaletteByTemplate(gFieldEffectObjectTemplatePointers[fldEffObj], sprite);
sprite->coordOffsetEnabled ++;
- sprite->oam.paletteNum = paletteNum;
sprite->sFldEff = fldEff;
sprite->sLocalId = gFieldEffectArguments[0];
sprite->sMapNum = gFieldEffectArguments[1];
diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c
index 50438863afb8..0b30a1d7bb47 100644
--- a/src/field_player_avatar.c
+++ b/src/field_player_avatar.c
@@ -122,23 +122,37 @@ static void Task_StopSurfingInit(u8);
static void Task_WaitStopSurfing(u8);
static void Task_Fishing(u8);
-static u8 Fishing_Init(struct Task *);
-static u8 Fishing_GetRodOut(struct Task *);
-static u8 Fishing_WaitBeforeDots(struct Task *);
-static u8 Fishing_InitDots(struct Task *);
-static u8 Fishing_ShowDots(struct Task *);
-static u8 Fishing_CheckForBite(struct Task *);
-static u8 Fishing_GotBite(struct Task *);
-static u8 Fishing_WaitForA(struct Task *);
-static u8 Fishing_CheckMoreDots(struct Task *);
-static u8 Fishing_MonOnHook(struct Task *);
-static u8 Fishing_StartEncounter(struct Task *);
-static u8 Fishing_NotEvenNibble(struct Task *);
-static u8 Fishing_GotAway(struct Task *);
-static u8 Fishing_NoMon(struct Task *);
-static u8 Fishing_PutRodAway(struct Task *);
-static u8 Fishing_EndNoMon(struct Task *);
+static bool32 Fishing_Init(struct Task *);
+static bool32 Fishing_GetRodOut(struct Task *);
+static bool32 Fishing_WaitBeforeDots(struct Task *);
+static bool32 Fishing_InitDots(struct Task *);
+static bool32 Fishing_ShowDots(struct Task *);
+static bool32 Fishing_CheckForBite(struct Task *);
+static bool32 Fishing_GotBite(struct Task *);
+static bool32 Fishing_ChangeMinigame(struct Task *);
+static bool32 Fishing_WaitForA(struct Task *);
+static bool32 Fishing_APressNoMinigame(struct Task *);
+static bool32 Fishing_CheckMoreDots(struct Task *);
+static bool32 Fishing_MonOnHook(struct Task *);
+static bool32 Fishing_StartEncounter(struct Task *);
+static bool32 Fishing_NotEvenNibble(struct Task *);
+static bool32 Fishing_GotAway(struct Task *);
+static bool32 Fishing_NoMon(struct Task *);
+static bool32 Fishing_PutRodAway(struct Task *);
+static bool32 Fishing_EndNoMon(struct Task *);
static void AlignFishingAnimationFrames(void);
+static bool32 DoesFishingMinigameAllowCancel(void);
+static bool32 Fishing_DoesFirstMonInPartyHaveSuctionCupsOrStickyHold(void);
+static bool32 Fishing_RollForBite(bool32);
+static u32 CalculateFishingBiteOdds(bool32);
+static u32 CalculateFishingProximityBoost(u32 odds);
+static void GetCoordinatesAroundBobber(s16[], s16[][AXIS_COUNT], u32);
+static u32 CountQualifyingTiles(s16[][AXIS_COUNT], s16 player[], u8 facingDirection, struct ObjectEvent *objectEvent, bool32 isTileLand[]);
+static bool32 CheckTileQualification(s16 tile[], s16 player[], u32 facingDirection, struct ObjectEvent* objectEvent, bool32 isTileLand[], u32 direction);
+static u32 CountLandTiles(bool32 isTileLand[]);
+static bool32 IsPlayerHere(s16, s16, s16, s16);
+static bool32 IsMetatileBlocking(s16, s16, u32);
+static bool32 IsMetatileLand(s16, s16, u32);
static u8 TrySpinPlayerForWarp(struct ObjectEvent *, s16 *);
@@ -1214,50 +1228,32 @@ void StopPlayerAvatar(void)
}
}
-u8 GetRivalAvatarGraphicsIdByStateIdAndGender(u8 state, u8 gender)
+u16 GetRivalAvatarGraphicsIdByStateIdAndGender(u8 state, u8 gender)
{
return sRivalAvatarGfxIds[state][gender];
}
-u8 GetPlayerAvatarGraphicsIdByStateIdAndGender(u8 state, u8 gender)
+u16 GetPlayerAvatarGraphicsIdByStateIdAndGender(u8 state, u8 gender)
{
return sPlayerAvatarGfxIds[state][gender];
}
-u8 GetFRLGAvatarGraphicsIdByGender(u8 gender)
+u16 GetFRLGAvatarGraphicsIdByGender(u8 gender)
{
return sFRLGAvatarGfxIds[gender];
}
-u8 GetRSAvatarGraphicsIdByGender(u8 gender)
+u16 GetRSAvatarGraphicsIdByGender(u8 gender)
{
return sRSAvatarGfxIds[gender];
}
-u8 GetPlayerAvatarGraphicsIdByStateId(u8 state)
+u16 GetPlayerAvatarGraphicsIdByStateId(u8 state)
{
return GetPlayerAvatarGraphicsIdByStateIdAndGender(state, gPlayerAvatar.gender);
}
-u8 unref_GetRivalAvatarGenderByGraphicsId(u8 gfxId)
-{
- switch (gfxId)
- {
- case OBJ_EVENT_GFX_RIVAL_MAY_NORMAL:
- case OBJ_EVENT_GFX_RIVAL_MAY_MACH_BIKE:
- case OBJ_EVENT_GFX_RIVAL_MAY_ACRO_BIKE:
- case OBJ_EVENT_GFX_RIVAL_MAY_SURFING:
- case OBJ_EVENT_GFX_RIVAL_MAY_FIELD_MOVE:
- case OBJ_EVENT_GFX_MAY_UNDERWATER:
- case OBJ_EVENT_GFX_MAY_FISHING:
- case OBJ_EVENT_GFX_MAY_WATERING:
- return FEMALE;
- default:
- return MALE;
- }
-}
-
-u8 GetPlayerAvatarGenderByGraphicsId(u8 gfxId)
+u8 GetPlayerAvatarGenderByGraphicsId(u16 gfxId)
{
switch (gfxId)
{
@@ -1326,7 +1322,7 @@ void SetPlayerAvatarStateMask(u8 flags)
gPlayerAvatar.flags |= flags;
}
-static u8 GetPlayerAvatarStateTransitionByGraphicsId(u8 graphicsId, u8 gender)
+static u8 GetPlayerAvatarStateTransitionByGraphicsId(u16 graphicsId, u8 gender)
{
u8 i;
@@ -1338,7 +1334,7 @@ static u8 GetPlayerAvatarStateTransitionByGraphicsId(u8 graphicsId, u8 gender)
return PLAYER_AVATAR_FLAG_ON_FOOT;
}
-u8 GetPlayerAvatarGraphicsIdByCurrentState(void)
+u16 GetPlayerAvatarGraphicsIdByCurrentState(void)
{
u8 i;
u8 flags = gPlayerAvatar.flags;
@@ -1351,7 +1347,7 @@ u8 GetPlayerAvatarGraphicsIdByCurrentState(void)
return 0;
}
-void SetPlayerAvatarExtraStateTransition(u8 graphicsId, u8 transitionFlag)
+void SetPlayerAvatarExtraStateTransition(u16 graphicsId, u8 transitionFlag)
{
u8 stateFlag = GetPlayerAvatarStateTransitionByGraphicsId(graphicsId, gPlayerAvatar.gender);
@@ -1682,32 +1678,52 @@ static void Task_WaitStopSurfing(u8 taskId)
#define tPlayerGfxId data[14]
#define tFishingRod data[15]
-// Some states are jumped to directly, labeled below
-#define FISHING_START_ROUND 3
-#define FISHING_GOT_BITE 6
-#define FISHING_ON_HOOK 9
-#define FISHING_NO_BITE 11
-#define FISHING_GOT_AWAY 12
-#define FISHING_SHOW_RESULT 13
-
-static bool8 (*const sFishingStateFuncs[])(struct Task *) =
-{
- Fishing_Init,
- Fishing_GetRodOut,
- Fishing_WaitBeforeDots,
- Fishing_InitDots, // FISHING_START_ROUND
- Fishing_ShowDots,
- Fishing_CheckForBite,
- Fishing_GotBite, // FISHING_GOT_BITE
- Fishing_WaitForA,
- Fishing_CheckMoreDots,
- Fishing_MonOnHook, // FISHING_ON_HOOK
- Fishing_StartEncounter,
- Fishing_NotEvenNibble, // FISHING_NO_BITE
- Fishing_GotAway, // FISHING_GOT_AWAY
- Fishing_NoMon, // FISHING_SHOW_RESULT
- Fishing_PutRodAway,
- Fishing_EndNoMon,
+#define FISHING_PROXIMITY_BOOST 4
+#define FISHING_STICKY_BOOST 36
+#define FISHING_DEFAULT_ODDS 50
+
+enum
+{
+ FISHING_INIT,
+ FISHING_GET_ROD_OUT,
+ FISHING_WAIT_BEFORE_DOTS,
+ FISHING_INIT_DOTS,
+ FISHING_SHOW_DOTS,
+ FISHING_CHECK_FOR_BITE,
+ FISHING_GOT_BITE,
+ FISHING_CHANGE_MINIGAME,
+ FISHING_WAIT_FOR_A,
+ FISHING_A_PRESS_NO_MINIGAME,
+ FISHING_CHECK_MORE_DOTS,
+ FISHING_MON_ON_HOOK,
+ FISHING_START_ENCOUNTER,
+ FISHING_NOT_EVEN_NIBBLE,
+ FISHING_GOT_AWAY,
+ FISHING_NO_MON,
+ FISHING_PUT_ROD_AWAY,
+ FISHING_END_NO_MON,
+};
+
+static bool32 (*const sFishingStateFuncs[])(struct Task *) =
+{
+ [FISHING_INIT] = Fishing_Init,
+ [FISHING_GET_ROD_OUT] = Fishing_GetRodOut,
+ [FISHING_WAIT_BEFORE_DOTS] = Fishing_WaitBeforeDots,
+ [FISHING_INIT_DOTS] = Fishing_InitDots,
+ [FISHING_SHOW_DOTS] = Fishing_ShowDots,
+ [FISHING_CHECK_FOR_BITE] = Fishing_CheckForBite,
+ [FISHING_GOT_BITE] = Fishing_GotBite,
+ [FISHING_CHANGE_MINIGAME] = Fishing_ChangeMinigame,
+ [FISHING_WAIT_FOR_A] = Fishing_WaitForA,
+ [FISHING_A_PRESS_NO_MINIGAME] = Fishing_APressNoMinigame,
+ [FISHING_CHECK_MORE_DOTS] = Fishing_CheckMoreDots,
+ [FISHING_MON_ON_HOOK] = Fishing_MonOnHook,
+ [FISHING_START_ENCOUNTER] = Fishing_StartEncounter,
+ [FISHING_NOT_EVEN_NIBBLE] = Fishing_NotEvenNibble,
+ [FISHING_GOT_AWAY] = Fishing_GotAway,
+ [FISHING_NO_MON] = Fishing_NoMon,
+ [FISHING_PUT_ROD_AWAY] = Fishing_PutRodAway,
+ [FISHING_END_NO_MON] = Fishing_EndNoMon,
};
void StartFishing(u8 rod)
@@ -1724,15 +1740,15 @@ static void Task_Fishing(u8 taskId)
;
}
-static bool8 Fishing_Init(struct Task *task)
+static bool32 Fishing_Init(struct Task *task)
{
LockPlayerFieldControls();
gPlayerAvatar.preventStep = TRUE;
- task->tStep++;
+ task->tStep = FISHING_GET_ROD_OUT;
return FALSE;
}
-static bool8 Fishing_GetRodOut(struct Task *task)
+static bool32 Fishing_GetRodOut(struct Task *task)
{
struct ObjectEvent *playerObjEvent;
const s16 minRounds1[] = {
@@ -1753,27 +1769,27 @@ static bool8 Fishing_GetRodOut(struct Task *task)
ObjectEventClearHeldMovementIfActive(playerObjEvent);
playerObjEvent->enableAnim = TRUE;
SetPlayerAvatarFishing(playerObjEvent->facingDirection);
- task->tStep++;
+ task->tStep = FISHING_WAIT_BEFORE_DOTS;
return FALSE;
}
-static bool8 Fishing_WaitBeforeDots(struct Task *task)
+static bool32 Fishing_WaitBeforeDots(struct Task *task)
{
AlignFishingAnimationFrames();
// Wait one second
task->tFrameCounter++;
if (task->tFrameCounter >= 60)
- task->tStep++;
+ task->tStep = FISHING_INIT_DOTS;
return FALSE;
}
-static bool8 Fishing_InitDots(struct Task *task)
+static bool32 Fishing_InitDots(struct Task *task)
{
u32 randVal;
LoadMessageBoxAndFrameGfx(0, TRUE);
- task->tStep++;
+ task->tStep = FISHING_SHOW_DOTS;
task->tFrameCounter = 0;
task->tNumDots = 0;
randVal = Random();
@@ -1786,7 +1802,7 @@ static bool8 Fishing_InitDots(struct Task *task)
return TRUE;
}
-static bool8 Fishing_ShowDots(struct Task *task)
+static bool32 Fishing_ShowDots(struct Task *task)
{
const u8 dot[] = _("·");
@@ -1794,7 +1810,10 @@ static bool8 Fishing_ShowDots(struct Task *task)
task->tFrameCounter++;
if (JOY_NEW(A_BUTTON))
{
- task->tStep = FISHING_NO_BITE;
+ if (!DoesFishingMinigameAllowCancel())
+ return FALSE;
+
+ task->tStep = FISHING_NOT_EVEN_NIBBLE;
if (task->tRoundsPlayed != 0)
task->tStep = FISHING_GOT_AWAY;
return TRUE;
@@ -1806,9 +1825,9 @@ static bool8 Fishing_ShowDots(struct Task *task)
task->tFrameCounter = 0;
if (task->tNumDots >= task->tDotsRequired)
{
- task->tStep++;
+ task->tStep = FISHING_CHECK_FOR_BITE;
if (task->tRoundsPlayed != 0)
- task->tStep++;
+ task->tStep = FISHING_GOT_BITE;
task->tRoundsPlayed++;
}
else
@@ -1821,55 +1840,64 @@ static bool8 Fishing_ShowDots(struct Task *task)
}
}
-static bool8 Fishing_CheckForBite(struct Task *task)
+static bool32 Fishing_CheckForBite(struct Task *task)
{
- bool8 bite;
+ bool32 bite, firstMonHasSuctionOrSticky;
AlignFishingAnimationFrames();
- task->tStep++;
+ task->tStep = FISHING_GOT_BITE;
bite = FALSE;
if (!DoesCurrentMapHaveFishingMons())
{
- task->tStep = FISHING_NO_BITE;
+ task->tStep = FISHING_NOT_EVEN_NIBBLE;
+ return TRUE;
}
- else
- {
- if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_IS_EGG))
- {
- u16 ability = GetMonAbility(&gPlayerParty[0]);
- if (ability == ABILITY_SUCTION_CUPS || ability == ABILITY_STICKY_HOLD)
- {
- if (Random() % 100 > 14)
- bite = TRUE;
- }
- }
- if (!bite)
- {
- if (Random() & 1)
- task->tStep = FISHING_NO_BITE;
- else
- bite = TRUE;
- }
+ firstMonHasSuctionOrSticky = Fishing_DoesFirstMonInPartyHaveSuctionCupsOrStickyHold();
+
+ if(firstMonHasSuctionOrSticky)
+ bite = Fishing_RollForBite(firstMonHasSuctionOrSticky);
+
+ if (!bite)
+ bite = Fishing_RollForBite(FALSE);
+
+ if (!bite)
+ task->tStep = FISHING_NOT_EVEN_NIBBLE;
+
+ if (bite)
+ StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFishingBiteDirectionAnimNum(GetPlayerFacingDirection()));
- if (bite == TRUE)
- StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFishingBiteDirectionAnimNum(GetPlayerFacingDirection()));
- }
return TRUE;
}
-static bool8 Fishing_GotBite(struct Task *task)
+static bool32 Fishing_GotBite(struct Task *task)
{
AlignFishingAnimationFrames();
AddTextPrinterParameterized(0, FONT_NORMAL, gText_OhABite, 0, 17, 0, NULL);
- task->tStep++;
+ task->tStep = FISHING_CHANGE_MINIGAME;
task->tFrameCounter = 0;
return FALSE;
}
+static bool32 Fishing_ChangeMinigame(struct Task *task)
+{
+ switch (I_FISHING_MINIGAME)
+ {
+ case GEN_1:
+ case GEN_2:
+ task->tStep = FISHING_A_PRESS_NO_MINIGAME;
+ break;
+ case GEN_3:
+ default:
+ task->tStep = FISHING_WAIT_FOR_A;
+ break;
+ }
+ return TRUE;
+}
+
// We have a bite. Now, wait for the player to press A, or the timer to expire.
-static bool8 Fishing_WaitForA(struct Task *task)
+static bool32 Fishing_WaitForA(struct Task *task)
{
const s16 reelTimeouts[3] = {
[OLD_ROD] = 36,
@@ -1882,12 +1910,20 @@ static bool8 Fishing_WaitForA(struct Task *task)
if (task->tFrameCounter >= reelTimeouts[task->tFishingRod])
task->tStep = FISHING_GOT_AWAY;
else if (JOY_NEW(A_BUTTON))
- task->tStep++;
+ task->tStep = FISHING_CHECK_MORE_DOTS;
+ return FALSE;
+}
+
+static bool32 Fishing_APressNoMinigame(struct Task *task)
+{
+ AlignFishingAnimationFrames();
+ if (JOY_NEW(A_BUTTON))
+ task->tStep = FISHING_MON_ON_HOOK;
return FALSE;
}
// Determine if we're going to play the dot game again
-static bool8 Fishing_CheckMoreDots(struct Task *task)
+static bool32 Fishing_CheckMoreDots(struct Task *task)
{
const s16 moreDotsChance[][2] =
{
@@ -1897,10 +1933,10 @@ static bool8 Fishing_CheckMoreDots(struct Task *task)
};
AlignFishingAnimationFrames();
- task->tStep++;
+ task->tStep = FISHING_MON_ON_HOOK;
if (task->tRoundsPlayed < task->tMinRoundsRequired)
{
- task->tStep = FISHING_START_ROUND;
+ task->tStep = FISHING_INIT_DOTS;
}
else if (task->tRoundsPlayed < 2)
{
@@ -1908,22 +1944,22 @@ static bool8 Fishing_CheckMoreDots(struct Task *task)
s16 probability = Random() % 100;
if (moreDotsChance[task->tFishingRod][task->tRoundsPlayed] > probability)
- task->tStep = FISHING_START_ROUND;
+ task->tStep = FISHING_INIT_DOTS;
}
return FALSE;
}
-static bool8 Fishing_MonOnHook(struct Task *task)
+static bool32 Fishing_MonOnHook(struct Task *task)
{
AlignFishingAnimationFrames();
FillWindowPixelBuffer(0, PIXEL_FILL(1));
AddTextPrinterParameterized2(0, FONT_NORMAL, gText_PokemonOnHook, 1, 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
- task->tStep++;
+ task->tStep = FISHING_START_ENCOUNTER;
task->tFrameCounter = 0;
return FALSE;
}
-static bool8 Fishing_StartEncounter(struct Task *task)
+static bool32 Fishing_StartEncounter(struct Task *task)
{
if (task->tFrameCounter == 0)
AlignFishingAnimationFrames();
@@ -1959,34 +1995,36 @@ static bool8 Fishing_StartEncounter(struct Task *task)
return FALSE;
}
-static bool8 Fishing_NotEvenNibble(struct Task *task)
+static bool32 Fishing_NotEvenNibble(struct Task *task)
{
+ gChainFishingDexNavStreak = 0;
AlignFishingAnimationFrames();
StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFishingNoCatchDirectionAnimNum(GetPlayerFacingDirection()));
FillWindowPixelBuffer(0, PIXEL_FILL(1));
AddTextPrinterParameterized2(0, FONT_NORMAL, gText_NotEvenANibble, 1, 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
- task->tStep = FISHING_SHOW_RESULT;
+ task->tStep = FISHING_NO_MON;
return TRUE;
}
-static bool8 Fishing_GotAway(struct Task *task)
+static bool32 Fishing_GotAway(struct Task *task)
{
+ gChainFishingDexNavStreak = 0;
AlignFishingAnimationFrames();
StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], GetFishingNoCatchDirectionAnimNum(GetPlayerFacingDirection()));
FillWindowPixelBuffer(0, PIXEL_FILL(1));
AddTextPrinterParameterized2(0, FONT_NORMAL, gText_ItGotAway, 1, 0, TEXT_COLOR_DARK_GRAY, TEXT_COLOR_WHITE, TEXT_COLOR_LIGHT_GRAY);
- task->tStep++;
+ task->tStep = FISHING_NO_MON;
return TRUE;
}
-static bool8 Fishing_NoMon(struct Task *task)
+static bool32 Fishing_NoMon(struct Task *task)
{
AlignFishingAnimationFrames();
- task->tStep++;
+ task->tStep = FISHING_PUT_ROD_AWAY;
return FALSE;
}
-static bool8 Fishing_PutRodAway(struct Task *task)
+static bool32 Fishing_PutRodAway(struct Task *task)
{
AlignFishingAnimationFrames();
if (gSprites[gPlayerAvatar.spriteId].animEnded)
@@ -1999,12 +2037,12 @@ static bool8 Fishing_PutRodAway(struct Task *task)
SetSurfBlob_PlayerOffset(gObjectEvents[gPlayerAvatar.objectEventId].fieldEffectSpriteId, FALSE, 0);
gSprites[gPlayerAvatar.spriteId].x2 = 0;
gSprites[gPlayerAvatar.spriteId].y2 = 0;
- task->tStep++;
+ task->tStep = FISHING_END_NO_MON;
}
return FALSE;
}
-static bool8 Fishing_EndNoMon(struct Task *task)
+static bool32 Fishing_EndNoMon(struct Task *task)
{
RunTextPrinters();
if (!IsTextPrinterActive(0))
@@ -2019,6 +2057,168 @@ static bool8 Fishing_EndNoMon(struct Task *task)
return FALSE;
}
+static bool32 DoesFishingMinigameAllowCancel(void)
+{
+ switch(I_FISHING_MINIGAME)
+ {
+ case GEN_1:
+ case GEN_2:
+ return FALSE;
+ case GEN_3:
+ default:
+ return TRUE;
+ }
+}
+
+static bool32 Fishing_DoesFirstMonInPartyHaveSuctionCupsOrStickyHold(void)
+{
+ u32 ability;
+
+ if (GetMonData(&gPlayerParty[0], MON_DATA_SANITY_IS_EGG))
+ return FALSE;
+
+ ability = GetMonAbility(&gPlayerParty[0]);
+
+ return (ability == ABILITY_SUCTION_CUPS || ability == ABILITY_STICKY_HOLD);
+}
+
+static bool32 Fishing_RollForBite(bool32 isStickyHold)
+{
+ return ((Random() % 100) > CalculateFishingBiteOdds(isStickyHold));
+}
+
+static u32 CalculateFishingBiteOdds(bool32 isStickyHold)
+{
+ u32 odds = FISHING_DEFAULT_ODDS;
+
+ if (isStickyHold)
+ odds -= FISHING_STICKY_BOOST;
+
+ odds -= CalculateFishingProximityBoost(odds);
+ return odds;
+}
+
+static u32 CalculateFishingProximityBoost(u32 odds)
+{
+ s16 player[AXIS_COUNT], bobber[AXIS_COUNT];
+ s16 surroundingTile[CARDINAL_DIRECTION_COUNT][AXIS_COUNT] = {{0, 0}};
+ bool32 isTileLand[CARDINAL_DIRECTION_COUNT] = {FALSE};
+ u32 facingDirection, numQualifyingTile = 0;
+ struct ObjectEvent *objectEvent;
+
+ if (!I_FISHING_PROXIMITY)
+ return 0;
+
+ objectEvent = &gObjectEvents[gPlayerAvatar.objectEventId];
+
+ player[AXIS_X] = objectEvent->currentCoords.x;
+ player[AXIS_Y] = objectEvent->currentCoords.y;
+ bobber[AXIS_X] = objectEvent->currentCoords.x;
+ bobber[AXIS_Y] = objectEvent->currentCoords.y;
+
+ facingDirection = GetPlayerFacingDirection();
+ MoveCoords(facingDirection, &bobber[AXIS_X], &bobber[AXIS_Y]);
+
+ GetCoordinatesAroundBobber(bobber, surroundingTile, facingDirection);
+ numQualifyingTile = CountQualifyingTiles(surroundingTile, player, facingDirection, objectEvent, isTileLand);
+
+ numQualifyingTile += CountLandTiles(isTileLand);
+
+ return (numQualifyingTile == 3) ? odds : (numQualifyingTile * FISHING_PROXIMITY_BOOST);
+}
+
+static void GetCoordinatesAroundBobber(s16 bobber[], s16 surroundingTile[][AXIS_COUNT], u32 facingDirection)
+{
+ u32 direction;
+
+ for (direction = DIR_SOUTH; direction < CARDINAL_DIRECTION_COUNT; direction++)
+ {
+ surroundingTile[direction][AXIS_X] = bobber[AXIS_X];
+ surroundingTile[direction][AXIS_Y] = bobber[AXIS_Y];
+ MoveCoords(direction, &surroundingTile[direction][AXIS_X], &surroundingTile[direction][AXIS_Y]);
+ }
+}
+
+static u32 CountQualifyingTiles(s16 surroundingTile[][AXIS_COUNT], s16 player[], u8 facingDirection, struct ObjectEvent *objectEvent, bool32 isTileLand[])
+{
+ u32 numQualifyingTile = 0;
+ s16 tile[AXIS_COUNT];
+ u8 direction = DIR_SOUTH;
+
+ for (direction = DIR_SOUTH; direction < CARDINAL_DIRECTION_COUNT; direction++)
+ {
+ tile[AXIS_X] = surroundingTile[direction][AXIS_X];
+ tile[AXIS_Y] = surroundingTile[direction][AXIS_Y];
+
+ if (!CheckTileQualification(tile, player, facingDirection, objectEvent, isTileLand, direction))
+ continue;
+
+ numQualifyingTile++;
+ }
+ return numQualifyingTile;
+}
+
+static bool32 CheckTileQualification(s16 tile[], s16 player[], u32 facingDirection, struct ObjectEvent* objectEvent, bool32 isTileLand[], u32 direction)
+{
+ u32 collison = GetCollisionAtCoords(objectEvent, tile[AXIS_X], tile[AXIS_Y], facingDirection);
+
+ if (IsPlayerHere(tile[AXIS_X], tile[AXIS_Y], player[AXIS_X], player[AXIS_Y]))
+ return FALSE;
+ else if (IsMetatileBlocking(tile[AXIS_X], tile[AXIS_Y], collison))
+ return TRUE;
+ else if (MetatileBehavior_IsSurfableFishableWater(MapGridGetMetatileBehaviorAt(tile[AXIS_X], tile[AXIS_Y])))
+ return FALSE;
+ else if (IsMetatileLand(tile[AXIS_X], tile[AXIS_Y], collison))
+ isTileLand[direction] = TRUE;
+
+ return FALSE;
+}
+
+static u32 CountLandTiles(bool32 isTileLand[])
+{
+ u32 direction, numQualifyingTile = 0;
+
+ for (direction = DIR_SOUTH; direction < CARDINAL_DIRECTION_COUNT; direction++)
+ if (isTileLand[direction])
+ numQualifyingTile++;
+
+ return (numQualifyingTile < 2) ? 0 : numQualifyingTile;
+}
+
+static bool32 IsPlayerHere(s16 x, s16 y, s16 playerX, s16 playerY)
+{
+ return ((x == playerX) && (y == playerY));
+}
+
+static bool32 IsMetatileBlocking(s16 x, s16 y, u32 collison)
+{
+ switch(collison)
+ {
+ case COLLISION_NONE:
+ case COLLISION_STOP_SURFING:
+ case COLLISION_ELEVATION_MISMATCH:
+ return FALSE;
+ default:
+ return TRUE;
+ case COLLISION_OBJECT_EVENT:
+ return (gObjectEvents[GetObjectEventIdByXY(x,y)].inanimate);
+ }
+ return TRUE;
+}
+
+static bool32 IsMetatileLand(s16 x, s16 y, u32 collison)
+{
+ switch(collison)
+ {
+ case COLLISION_NONE:
+ case COLLISION_STOP_SURFING:
+ case COLLISION_ELEVATION_MISMATCH:
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
+
#undef tStep
#undef tFrameCounter
#undef tFishingRod
diff --git a/src/field_poison.c b/src/field_poison.c
index fcbce0b0b257..655bd9ec023c 100644
--- a/src/field_poison.c
+++ b/src/field_poison.c
@@ -3,6 +3,7 @@
#include "battle_pike.h"
#include "battle_pyramid.h"
#include "event_data.h"
+#include "event_object_movement.h"
#include "field_message_box.h"
#include "field_poison.h"
#include "fldeff_misc.h"
@@ -100,6 +101,7 @@ static void Task_TryFieldPoisonWhiteOut(u8 taskId)
else
{
gSpecialVar_Result = FLDPSN_NO_WHITEOUT;
+ UpdateFollowingPokemon();
}
ScriptContext_Enable();
DestroyTask(taskId);
diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c
index 616444116cee..9338fe183d17 100644
--- a/src/field_screen_effect.c
+++ b/src/field_screen_effect.c
@@ -679,6 +679,7 @@ static void Task_DoDoorWarp(u8 taskId)
struct Task *task = &gTasks[taskId];
s16 *x = &task->data[2];
s16 *y = &task->data[3];
+ struct ObjectEvent *followerObject = GetFollowerObject();
switch (task->tState)
{
@@ -686,6 +687,12 @@ static void Task_DoDoorWarp(u8 taskId)
FreezeObjectEvents();
PlayerGetDestCoords(x, y);
PlaySE(GetDoorSoundEffect(*x, *y - 1));
+ if (followerObject)
+ {
+ // Put follower into pokeball
+ ClearObjectEventMovement(followerObject, &gSprites[followerObject->spriteId]);
+ ObjectEventSetHeldMovement(followerObject, MOVEMENT_ACTION_ENTER_POKEBALL);
+ }
task->data[1] = FieldAnimateDoorOpen(*x, *y - 1);
task->tState = 1;
break;
@@ -1162,6 +1169,9 @@ static void Task_OrbEffect(u8 taskId)
tState = 4;
break;
case 4:
+ // If the caller script is delayed after starting the orb effect, a `waitstate` might be reached *after*
+ // we enable the ScriptContext in case 2; enabling it here as well avoids softlocks in this scenario
+ ScriptContext_Enable();
if (--tShakeDelay == 0)
{
s32 panning;
diff --git a/src/field_specials.c b/src/field_specials.c
index 1005d06bf26b..e00aa0380313 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"
@@ -103,7 +104,7 @@ void SetPlayerGotFirstFans(void);
u16 GetNumFansOfPlayerInTrainerFanClub(void);
static void RecordCyclingRoadResults(u32, u8);
-static void LoadLinkPartnerObjectEventSpritePalette(u8, u8, u8);
+static void LoadLinkPartnerObjectEventSpritePalette(u16, u8, u8);
static void Task_PetalburgGymSlideOpenRoomDoors(u8);
static void PetalburgGymSetDoorMetatiles(u8, u16);
static void Task_PCTurnOnEffect(u8);
@@ -580,7 +581,7 @@ void SpawnLinkPartnerObjectEvent(void)
}
}
-static void LoadLinkPartnerObjectEventSpritePalette(u8 graphicsId, u8 localEventId, u8 paletteNum)
+static void LoadLinkPartnerObjectEventSpritePalette(u16 graphicsId, u8 localEventId, u8 paletteNum)
{
u8 adjustedPaletteNum;
// Note: This temp var is necessary; paletteNum += 6 doesn't match.
@@ -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
@@ -2792,41 +2802,13 @@ void SetBattleTowerLinkPlayerGfx(void)
void ShowNatureGirlMessage(void)
{
- static const u8 *const sNatureGirlMessages[NUM_NATURES] = {
- [NATURE_HARDY] = BattleFrontier_Lounge5_Text_NatureGirlHardy,
- [NATURE_LONELY] = BattleFrontier_Lounge5_Text_NatureGirlLonely,
- [NATURE_BRAVE] = BattleFrontier_Lounge5_Text_NatureGirlBrave,
- [NATURE_ADAMANT] = BattleFrontier_Lounge5_Text_NatureGirlAdamant,
- [NATURE_NAUGHTY] = BattleFrontier_Lounge5_Text_NatureGirlNaughty,
- [NATURE_BOLD] = BattleFrontier_Lounge5_Text_NatureGirlBold,
- [NATURE_DOCILE] = BattleFrontier_Lounge5_Text_NatureGirlDocileNaiveQuietQuirky,
- [NATURE_RELAXED] = BattleFrontier_Lounge5_Text_NatureGirlRelaxed,
- [NATURE_IMPISH] = BattleFrontier_Lounge5_Text_NatureGirlImpish,
- [NATURE_LAX] = BattleFrontier_Lounge5_Text_NatureGirlLax,
- [NATURE_TIMID] = BattleFrontier_Lounge5_Text_NatureGirlTimid,
- [NATURE_HASTY] = BattleFrontier_Lounge5_Text_NatureGirlHasty,
- [NATURE_SERIOUS] = BattleFrontier_Lounge5_Text_NatureGirlSerious,
- [NATURE_JOLLY] = BattleFrontier_Lounge5_Text_NatureGirlJolly,
- [NATURE_NAIVE] = BattleFrontier_Lounge5_Text_NatureGirlDocileNaiveQuietQuirky,
- [NATURE_MODEST] = BattleFrontier_Lounge5_Text_NatureGirlModest,
- [NATURE_MILD] = BattleFrontier_Lounge5_Text_NatureGirlMild,
- [NATURE_QUIET] = BattleFrontier_Lounge5_Text_NatureGirlDocileNaiveQuietQuirky,
- [NATURE_BASHFUL] = BattleFrontier_Lounge5_Text_NatureGirlBashful,
- [NATURE_RASH] = BattleFrontier_Lounge5_Text_NatureGirlRash,
- [NATURE_CALM] = BattleFrontier_Lounge5_Text_NatureGirlCalm,
- [NATURE_GENTLE] = BattleFrontier_Lounge5_Text_NatureGirlGentle,
- [NATURE_SASSY] = BattleFrontier_Lounge5_Text_NatureGirlSassy,
- [NATURE_CAREFUL] = BattleFrontier_Lounge5_Text_NatureGirlCareful,
- [NATURE_QUIRKY] = BattleFrontier_Lounge5_Text_NatureGirlDocileNaiveQuietQuirky,
- };
-
u8 nature;
if (gSpecialVar_0x8004 >= PARTY_SIZE)
gSpecialVar_0x8004 = 0;
nature = GetNature(&gPlayerParty[gSpecialVar_0x8004]);
- ShowFieldMessage(sNatureGirlMessages[nature]);
+ ShowFieldMessage(gNaturesInfo[nature].natureGirlMessage);
}
void UpdateFrontierGambler(u16 daysSince)
@@ -3064,7 +3046,8 @@ static void HideFrontierExchangeCornerItemIcon(u16 menu, u16 unused)
case SCROLL_MULTI_BF_EXCHANGE_CORNER_DECOR_VENDOR_2:
case SCROLL_MULTI_BF_EXCHANGE_CORNER_VITAMIN_VENDOR:
case SCROLL_MULTI_BF_EXCHANGE_CORNER_HOLD_ITEM_VENDOR:
- DestroySpriteAndFreeResources(&gSprites[sScrollableMultichoice_ItemSpriteId]);
+ // This makes sure deleting the icon will not clear palettes in use by object events
+ FieldEffectFreeGraphicsResources(&gSprites[sScrollableMultichoice_ItemSpriteId]);
break;
}
sScrollableMultichoice_ItemSpriteId = MAX_SPRITES;
@@ -3205,7 +3188,6 @@ void ScrollableMultichoice_ClosePersistentMenu(void)
#undef tTaskId
#define DEOXYS_ROCK_LEVELS 11
-#define ROCK_PAL_ID 10
void DoDeoxysRockInteraction(void)
{
@@ -3284,9 +3266,8 @@ static void Task_DeoxysRockInteraction(u8 taskId)
static void ChangeDeoxysRockLevel(u8 rockLevel)
{
- u8 objectEventId;
- LoadPalette(&sDeoxysRockPalettes[rockLevel], OBJ_PLTT_ID(ROCK_PAL_ID), PLTT_SIZEOF(4));
- TryGetObjectEventIdByLocalIdAndMap(LOCALID_BIRTH_ISLAND_EXTERIOR_ROCK, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &objectEventId);
+ u8 paletteNum = IndexOfSpritePaletteTag(OBJ_EVENT_PAL_TAG_BIRTH_ISLAND_STONE);
+ LoadPalette(&sDeoxysRockPalettes[rockLevel], OBJ_PLTT_ID(paletteNum), PLTT_SIZEOF(4));
if (rockLevel == 0)
PlaySE(SE_M_CONFUSE_RAY); // Failure sound
@@ -3332,10 +3313,13 @@ void IncrementBirthIslandRockStepCount(void)
}
}
+// called before fade-in
void SetDeoxysRockPalette(void)
{
- LoadPalette(&sDeoxysRockPalettes[(u8)VarGet(VAR_DEOXYS_ROCK_LEVEL)], OBJ_PLTT_ID(ROCK_PAL_ID), PLTT_SIZEOF(4));
- BlendPalettes(1 << (ROCK_PAL_ID + 16), 16, 0);
+ u32 paletteNum = IndexOfSpritePaletteTag(OBJ_EVENT_PAL_TAG_BIRTH_ISLAND_STONE);
+ LoadPalette(&sDeoxysRockPalettes[(u8)VarGet(VAR_DEOXYS_ROCK_LEVEL)], OBJ_PLTT_ID(paletteNum), PLTT_SIZEOF(4));
+ // Set faded to all black, weather blending handled during fade-in
+ CpuFill16(0, &gPlttBufferFaded[OBJ_PLTT_ID(paletteNum)], 32);
}
void SetPCBoxToSendMon(u8 boxId)
diff --git a/src/field_weather.c b/src/field_weather.c
index 118db10bed6e..3c9f642faf02 100644
--- a/src/field_weather.c
+++ b/src/field_weather.c
@@ -134,15 +134,15 @@ static const u8 ALIGNED(2) sBasePaletteColorMapTypes[32] =
// sprite palettes
COLOR_MAP_CONTRAST,
COLOR_MAP_DARK_CONTRAST,
- COLOR_MAP_CONTRAST,
- COLOR_MAP_CONTRAST,
- COLOR_MAP_CONTRAST,
- COLOR_MAP_CONTRAST,
COLOR_MAP_DARK_CONTRAST,
COLOR_MAP_DARK_CONTRAST,
COLOR_MAP_DARK_CONTRAST,
COLOR_MAP_DARK_CONTRAST,
- COLOR_MAP_CONTRAST,
+ COLOR_MAP_DARK_CONTRAST,
+ COLOR_MAP_DARK_CONTRAST,
+ COLOR_MAP_DARK_CONTRAST,
+ COLOR_MAP_DARK_CONTRAST,
+ COLOR_MAP_DARK_CONTRAST,
COLOR_MAP_DARK_CONTRAST,
COLOR_MAP_DARK_CONTRAST,
COLOR_MAP_DARK_CONTRAST,
@@ -251,6 +251,7 @@ static void Task_WeatherMain(u8 taskId)
static void None_Init(void)
{
+ Weather_SetBlendCoeffs(8, 12); // Indoor shadows
gWeatherPtr->targetColorMapIndex = 0;
gWeatherPtr->colorMapStepDelay = 0;
}
@@ -1104,3 +1105,11 @@ void ResetPreservedPalettesInWeather(void)
{
sPaletteColorMapTypes = sBasePaletteColorMapTypes;
}
+
+bool32 IsWeatherAlphaBlend(void)
+{
+ return (gWeatherPtr->currWeather == WEATHER_FOG_HORIZONTAL
+ || gWeatherPtr->currWeather == WEATHER_FOG_DIAGONAL
+ || gWeatherPtr->currWeather == WEATHER_UNDERWATER_BUBBLES
+ || gWeatherPtr->currWeather == WEATHER_UNDERWATER);
+}
diff --git a/src/field_weather_effect.c b/src/field_weather_effect.c
index 325979f86a1c..cf31e862c3c7 100644
--- a/src/field_weather_effect.c
+++ b/src/field_weather_effect.c
@@ -154,6 +154,7 @@ void Sunny_InitVars(void)
{
gWeatherPtr->targetColorMapIndex = 0;
gWeatherPtr->colorMapStepDelay = 20;
+ Weather_SetBlendCoeffs(8, 12);
}
void Sunny_InitAll(void)
@@ -770,7 +771,7 @@ void Snow_InitVars(void)
gWeatherPtr->weatherGfxLoaded = FALSE;
gWeatherPtr->targetColorMapIndex = 0;
gWeatherPtr->colorMapStepDelay = 20;
- gWeatherPtr->targetSnowflakeSpriteCount = 16;
+ gWeatherPtr->targetSnowflakeSpriteCount = NUM_SNOWFLAKE_SPRITES;
gWeatherPtr->snowflakeVisibleCounter = 0;
}
@@ -2604,5 +2605,3 @@ static void UpdateRainCounter(u8 newWeather, u8 oldWeather)
&& (newWeather == WEATHER_RAIN || newWeather == WEATHER_RAIN_THUNDERSTORM))
IncrementGameStat(GAME_STAT_GOT_RAINED_ON);
}
-
-
diff --git a/src/fieldmap.c b/src/fieldmap.c
index 5e8ffec4aa84..7c40c755c4fc 100644
--- a/src/fieldmap.c
+++ b/src/fieldmap.c
@@ -16,6 +16,7 @@
#include "tv.h"
#include "constants/rgb.h"
#include "constants/metatile_behaviors.h"
+#include "wild_encounter.h"
struct ConnectionFlags
{
@@ -140,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_misc.c b/src/fldeff_misc.c
index 513cd13e762e..d3e6982f2950 100644
--- a/src/fldeff_misc.c
+++ b/src/fldeff_misc.c
@@ -1024,7 +1024,7 @@ void DoSecretBaseGlitterMatSparkle(void)
{
gSprites[spriteId].coordOffsetEnabled = TRUE;
gSprites[spriteId].oam.priority = 1;
- gSprites[spriteId].oam.paletteNum = 5;
+ UpdateSpritePaletteByTemplate(gFieldEffectObjectTemplatePointers[FLDEFFOBJ_SPARKLE], &gSprites[spriteId]);
gSprites[spriteId].callback = SpriteCB_GlitterMatSparkle;
gSprites[spriteId].data[0] = 0;
}
diff --git a/src/fldeff_rocksmash.c b/src/fldeff_rocksmash.c
index 27689b02e303..39f64adb877b 100644
--- a/src/fldeff_rocksmash.c
+++ b/src/fldeff_rocksmash.c
@@ -27,7 +27,7 @@ static void Task_DoFieldMove_RunFunc(u8 taskId);
static void FieldCallback_RockSmash(void);
static void FieldMove_RockSmash(void);
-bool8 CheckObjectGraphicsInFrontOfPlayer(u8 graphicsId)
+bool8 CheckObjectGraphicsInFrontOfPlayer(u16 graphicsId)
{
u8 objEventId;
@@ -61,9 +61,11 @@ static void Task_DoFieldMove_Init(u8 taskId)
if (!ObjectEventIsMovementOverridden(&gObjectEvents[objEventId])
|| ObjectEventClearHeldMovementIfFinished(&gObjectEvents[objEventId]))
{
- if (gMapHeader.mapType == MAP_TYPE_UNDERWATER)
+ if (gMapHeader.mapType == MAP_TYPE_UNDERWATER || gFieldEffectArguments[3])
{
- // Skip field move pose underwater
+ // Skip field move pose underwater, or if arg3 is nonzero
+ if (gFieldEffectArguments[3])
+ gFieldEffectArguments[3] = 0;
FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT);
gTasks[taskId].func = Task_DoFieldMove_WaitForMon;
}
diff --git a/src/fldeff_teleport.c b/src/fldeff_teleport.c
index 3f087e5dab22..c17dc9360b81 100644
--- a/src/fldeff_teleport.c
+++ b/src/fldeff_teleport.c
@@ -14,7 +14,7 @@ bool8 SetUpFieldMove_Teleport(void)
{
if (Overworld_MapTypeAllowsTeleportAndFly(gMapHeader.mapType) == TRUE)
{
- gFieldCallback2 = FieldCallback_PrepareFadeInFromMenu;
+ gFieldCallback2 = FieldCallback_PrepareFadeInForTeleport;
gPostMenuFieldCallback = FieldCallback_Teleport;
return TRUE;
}
diff --git a/src/follower_helper.c b/src/follower_helper.c
new file mode 100644
index 000000000000..02b39902ebb7
--- /dev/null
+++ b/src/follower_helper.c
@@ -0,0 +1,369 @@
+#include "global.h"
+#include "data.h"
+#include "event_scripts.h"
+#include "follower_helper.h"
+#include "constants/battle.h"
+#include "constants/followers.h"
+#include "constants/metatile_behaviors.h"
+#include "constants/pokemon.h"
+#include "constants/region_map_sections.h"
+#include "constants/songs.h"
+#include "constants/weather.h"
+
+#define TYPE_NOT_TYPE1 NUMBER_OF_MON_TYPES
+
+// difficult conditional messages follow
+static const u8 sCondMsg00[] = _("{STR_VAR_1} danced happily.");
+static const u8 sCondMsg01[] = _("{STR_VAR_1} danced beautifully.");
+static const u8* const sCelebiTexts[] = {sCondMsg00, sCondMsg01, NULL};
+static const u8 sCondMsg02[] = _("{STR_VAR_1} emitted fire and shouted.");
+static const u8 sCondMsg03[] = _("{STR_VAR_1} is vigorously producing\nfire!");
+static const u8 sCondMsg04[] = _("{STR_VAR_1} spat fire!");
+static const u8 sCondMsg05[] = _("{STR_VAR_1} is vigorously breathing\nfire!");
+static const u8* const sFireTexts[] = {sCondMsg02, sCondMsg03, sCondMsg04, sCondMsg05, NULL};
+static const u8 sCondMsg06[] = _("{STR_VAR_1} is staring straight at\nthe POKéMON LEAGUE.");
+static const u8 sCondMsg07[] = _("Your POKéMON is staring intently at\nthe mountain peak.");
+static const u8 sCondMsg08[] = _("Sniff sniff, something smells good!");
+static const u8 sCondMsg09[] = _("Your POKéMON is surveying the\nshelves restlessly.");
+static const u8 sCondMsg10[] = _("{STR_VAR_1} is staring intently at\nthe shelves.");
+static const u8* const sShopTexts[] = {sCondMsg09, sCondMsg10, NULL};
+static const u8 sCondMsg11[] = _("{STR_VAR_1} focused with a sharp\ngaze!");
+static const u8 sCondMsg12[] = _("{STR_VAR_1} seems very interested in\nthe bicycles.");
+static const u8 sCondMsg13[] = _("{STR_VAR_1} seems to want to touch\nthe machines!");
+static const u8 sCondMsg14[] = _("{STR_VAR_1} is swaying with the\nboat!");
+static const u8 sCondMsg15[] = _("{STR_VAR_1} is dancing along with\nthe rolling of the ship.");
+static const u8 sCondMsg16[] = _("{STR_VAR_1} doesn't want to get off\nthe boat yet!");
+static const u8* const sBoatTexts[] = {sCondMsg14, sCondMsg15, sCondMsg16, NULL};
+static const u8 sCondMsg17[] = _("{STR_VAR_1} is listening to the\nsound of the machines.");
+static const u8* const sMachineTexts[] = {sCondMsg13, sCondMsg17, NULL};
+static const u8 sCondMsg18[] = _("Waah! your POKéMON suddenly splashed\nwater!");
+static const u8 sCondMsg19[] = _("Your POKéMON is blowing sand in the\nair!");
+static const u8 sCondMsg20[] = _("{STR_VAR_1} is playing around,\nplucking bits of grass.");
+static const u8 sCondMsg21[] = _("Your POKéMON is happily looking at\nyour footprints!");
+static const u8 sCondMsg22[] = _("{STR_VAR_1} is feeling nervous and a\ntouch claustrophobic.");
+static const u8 sCondMsg23[] = _("{STR_VAR_1} is cautious about the\nconfined area!");
+static const u8* const sElevatorTexts[] = {sCondMsg22, sCondMsg23, NULL};
+static const u8 sCondMsg24[] = _("A cold wind suddenly blew by!");
+static const u8 sCondMsg25[] = _("Your POKéMON almost slipped and fell\nover!");
+static const u8 sCondMsg26[] = _("Your POKéMON seems surprised to\ntouch ice.");
+static const u8* const sColdTexts[] = {sCondMsg24, sCondMsg25, sCondMsg26, NULL};
+static const u8 sCondMsg27[] = _("Your POKéMON has a flower petal on\nits face!");
+static const u8 sCondMsg28[] = _("{STR_VAR_1} is growling softly.");
+static const u8 sCondMsg29[] = _("{STR_VAR_1} is trembling with fear.");
+static const u8 sCondMsg30[] = _("{STR_VAR_1} seems somehow sad…");
+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 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.");
+static const u8 sCondMsg37[] = _("{STR_VAR_1} seems to be happy about\nthe rain!");
+static const u8 sCondMsg38[] = _("{STR_VAR_1} is staring at its\nreflection in the water.");
+static const u8 sCondMsg39[] = _("{STR_VAR_1} seems to relax as it\nhears the sound of rustling leaves…");
+static const u8 sCondMsg40[] = _("{STR_VAR_1} is gnawing at the ice.");
+static const u8 sCondMsg41[] = _("{STR_VAR_1} is touching the ice.");
+static const u8* const sIceTexts[] = {sCondMsg26, sCondMsg40, sCondMsg41, NULL};
+static const u8 sCondMsg42[] = _("{STR_VAR_1}'s burn looks painful!");
+
+// See the struct definition in follower_helper.h for more info
+const struct FollowerMsgInfoExtended gFollowerConditionalMessages[COND_MSG_COUNT] =
+{
+ [COND_MSG_CELEBI] =
+ {
+ .text = (u8*)sCelebiTexts,
+ .textSpread = 1,
+ .script = EventScript_FollowerDance,
+ .emotion = FOLLOWER_EMOTION_NEUTRAL,
+ .conditions =
+ {
+ MATCH_SPECIES(SPECIES_CELEBI),
+ },
+ },
+ [COND_MSG_FIRE] =
+ {
+ .text = (u8*)sFireTexts,
+ .textSpread = 1,
+ .emotion = FOLLOWER_EMOTION_NEUTRAL,
+ .conditions =
+ {
+ MATCH_TYPES(TYPE_FIRE, TYPE_FIRE),
+ },
+ },
+ [COND_MSG_EVER_GRANDE] =
+ {
+ .text = sCondMsg06,
+ .script = EventScript_FollowerFaceUp,
+ .emotion = FOLLOWER_EMOTION_HAPPY,
+ .conditions =
+ {
+ MATCH_MAP(EVER_GRANDE_CITY),
+ },
+ },
+ [COND_MSG_ROUTE_112] =
+ {
+ .text = sCondMsg07,
+ .emotion = FOLLOWER_EMOTION_HAPPY,
+ .conditions =
+ {
+ MATCH_MAP(ROUTE112),
+ },
+ },
+ [COND_MSG_DAY_CARE] =
+ {
+ .text = sCondMsg08,
+ .script = EventScript_FollowerNostalgia,
+ .emotion = FOLLOWER_EMOTION_NEUTRAL,
+ .conditions =
+ {
+ MATCH_MAP(ROUTE117_POKEMON_DAY_CARE)
+ },
+ },
+ [COND_MSG_MART] =
+ {
+ .text = (u8*)sShopTexts,
+ .textSpread = 1,
+ .script = EventScript_FollowerLookAround,
+ .emotion = FOLLOWER_EMOTION_NEUTRAL,
+ .conditions =
+ {
+ MATCH_MUSIC(MUS_POKE_MART)
+ },
+ },
+ [COND_MSG_VICTORY_ROAD] =
+ {
+ .text = sCondMsg11,
+ .emotion = FOLLOWER_EMOTION_PENSIVE,
+ .conditions =
+ {
+ MATCH_MUSIC(MUS_VICTORY_ROAD)
+ },
+ },
+ [COND_MSG_BIKE_SHOP] =
+ {
+ .text = sCondMsg12,
+ .emotion = FOLLOWER_EMOTION_PENSIVE,
+ .conditions =
+ {
+ MATCH_MAP(MAUVILLE_CITY_BIKE_SHOP)
+ },
+ },
+ [COND_MSG_MACHINES] =
+ {
+ .text = (u8*)sMachineTexts,
+ .textSpread = 1,
+ .emotion = FOLLOWER_EMOTION_MUSIC,
+ .orFlag = 1, // match any of these maps
+ .conditions =
+ {
+ MATCH_MAP(NEW_MAUVILLE_INSIDE),
+ MATCH_MAP(SLATEPORT_CITY_STERNS_SHIPYARD_1F),
+ MATCH_MAP(SLATEPORT_CITY_STERNS_SHIPYARD_2F),
+ },
+ },
+ [COND_MSG_SAILING] =
+ {
+ .text = (u8*)sBoatTexts,
+ .textSpread = 1,
+ .emotion = FOLLOWER_EMOTION_MUSIC,
+ .script = EventScript_FollowerLookAround,
+ .conditions =
+ {
+ MATCH_MUSIC(MUS_SAILING),
+ },
+ },
+ [COND_MSG_PUDDLE] =
+ {
+ .text = sCondMsg18,
+ .script = EventScript_FollowerHopping,
+ .emotion = FOLLOWER_EMOTION_MUSIC,
+ .conditions =
+ {
+ MATCH_ON_MB(MB_SHALLOW_WATER, MB_PUDDLE),
+ },
+ },
+ [COND_MSG_SAND] =
+ {
+ .text = sCondMsg19,
+ .emotion = FOLLOWER_EMOTION_MUSIC,
+ .conditions =
+ {
+ MATCH_ON_MB(MB_SAND, MB_DEEP_SAND),
+ },
+ },
+ [COND_MSG_GRASS] =
+ {
+ .text = sCondMsg20,
+ .emotion = FOLLOWER_EMOTION_MUSIC,
+ .conditions =
+ {
+ MATCH_ON_MB(MB_TALL_GRASS, MB_LONG_GRASS),
+ },
+ },
+ [COND_MSG_FOOTPRINTS] =
+ {
+ .text = sCondMsg21,
+ .emotion = FOLLOWER_EMOTION_MUSIC,
+ .conditions =
+ {
+ MATCH_ON_MB(MB_SAND, MB_FOOTPRINTS),
+ },
+ },
+ [COND_MSG_ELEVATOR] =
+ {
+ .text = (u8*)sElevatorTexts,
+ .textSpread = 1,
+ .emotion = FOLLOWER_EMOTION_SURPRISE,
+ .conditions =
+ {
+ MATCH_MAP(LILYCOVE_CITY_DEPARTMENT_STORE_ELEVATOR),
+ },
+ },
+ [COND_MSG_ICE_ROOM] =
+ {
+ .text = (u8*)sColdTexts,
+ .textSpread = 1,
+ .emotion = FOLLOWER_EMOTION_SURPRISE,
+ .conditions =
+ {
+ MATCH_MAP(SHOAL_CAVE_LOW_TIDE_ICE_ROOM),
+ },
+ },
+ [COND_MSG_ROUTE_117] =
+ {
+ .text = sCondMsg27,
+ .emotion = FOLLOWER_EMOTION_SURPRISE,
+ .conditions =
+ {
+ MATCH_MAP(ROUTE117),
+ },
+ },
+ [COND_MSG_DRAGON_GROWL] =
+ {
+ .text = sCondMsg28,
+ .emotion = FOLLOWER_EMOTION_UPSET,
+ .conditions =
+ {
+ MATCH_TYPES(TYPE_DRAGON, TYPE_DRAGON),
+ MATCH_MAPSEC(MAPSEC_SKY_PILLAR),
+ },
+ },
+ [COND_MSG_FEAR] =
+ {
+ .text = (u8*)sFearTexts,
+ .textSpread = 1,
+ .emotion = FOLLOWER_EMOTION_UPSET,
+ .conditions =
+ {
+ MATCH_NOT_TYPES(TYPE_GHOST, TYPE_GHOST),
+ MATCH_MAPSEC(MAPSEC_MT_PYRE),
+ MATCH_MUSIC(MUS_MT_PYRE),
+ },
+ },
+ [COND_MSG_FIRE_RAIN] =
+ {
+ .text = sCondMsg31,
+ .emotion = FOLLOWER_EMOTION_UPSET,
+ .conditions =
+ {
+ MATCH_TYPES(TYPE_FIRE, TYPE_FIRE),
+ MATCH_WEATHER(WEATHER_RAIN, WEATHER_RAIN_THUNDERSTORM),
+ },
+ },
+ [COND_MSG_FROZEN] =
+ {
+ .text = sCondMsg32,
+ .emotion = FOLLOWER_EMOTION_UPSET,
+ .conditions =
+ {
+ MATCH_STATUS(STATUS1_FREEZE),
+ },
+ },
+ [COND_MSG_SEASIDE] =
+ {
+ .text = (u8*)sSeaTexts,
+ .textSpread = 1,
+ .script = EventScript_FollowerFaceResult,
+ .emotion = FOLLOWER_EMOTION_MUSIC,
+ .conditions =
+ {
+ MATCH_NEAR_MB(MB_OCEAN_WATER, 5),
+ },
+ },
+ [COND_MSG_WATERFALL] =
+ {
+ .text = sCondMsg36,
+ .script = EventScript_FollowerFaceResult,
+ .emotion = FOLLOWER_EMOTION_MUSIC,
+ .conditions =
+ {
+ MATCH_NEAR_MB(MB_WATERFALL, 5),
+ },
+ },
+ [COND_MSG_RAIN] =
+ {
+ .text = sCondMsg37,
+ .emotion = FOLLOWER_EMOTION_MUSIC,
+ .conditions =
+ {
+ MATCH_NOT_TYPES(TYPE_FIRE, TYPE_FIRE),
+ MATCH_WEATHER(WEATHER_RAIN, WEATHER_RAIN_THUNDERSTORM)
+ }
+ },
+ [COND_MSG_REFLECTION] =
+ {
+ .text = sCondMsg38,
+ .script = EventScript_FollowerFaceResult,
+ .emotion = FOLLOWER_EMOTION_PENSIVE,
+ .conditions =
+ {
+ MATCH_NEAR_MB(MB_POND_WATER, 1),
+ },
+ },
+ [COND_MSG_LEAVES] =
+ {
+ .text = sCondMsg39,
+ .emotion = FOLLOWER_EMOTION_PENSIVE,
+ .conditions =
+ {
+ MATCH_MAPSEC(MAPSEC_PETALBURG_WOODS),
+ },
+ },
+ [COND_MSG_ICE] =
+ {
+ .text = (u8*)sIceTexts,
+ .textSpread = 1,
+ .script = EventScript_FollowerFaceResult,
+ .emotion = FOLLOWER_EMOTION_PENSIVE,
+ .conditions =
+ {
+ MATCH_NEAR_MB(MB_ICE, 1),
+ },
+ },
+ [COND_MSG_BURN] =
+ {
+ .text = sCondMsg42,
+ .emotion = FOLLOWER_EMOTION_SAD,
+ .conditions =
+ {
+ MATCH_STATUS(STATUS1_BURN),
+ },
+ },
+};
+
+// Pool of "unconditional" follower messages
+const struct FollowerMessagePool gFollowerBasicMessages[FOLLOWER_EMOTION_LENGTH] =
+{
+ [FOLLOWER_EMOTION_HAPPY] = {gFollowerHappyMessages, EventScript_FollowerGeneric, FOLLOWER_HAPPY_MESSAGE_COUNT},
+ [FOLLOWER_EMOTION_NEUTRAL] = {gFollowerNeutralMessages, EventScript_FollowerGeneric, FOLLOWER_NEUTRAL_MESSAGE_COUNT},
+ [FOLLOWER_EMOTION_SAD] = {gFollowerSadMessages, EventScript_FollowerGeneric, FOLLOWER_SAD_MESSAGE_COUNT},
+ [FOLLOWER_EMOTION_UPSET] = {gFollowerUpsetMessages, EventScript_FollowerGeneric, FOLLOWER_UPSET_MESSAGE_COUNT},
+ [FOLLOWER_EMOTION_ANGRY] = {gFollowerAngryMessages, EventScript_FollowerGeneric, FOLLOWER_ANGRY_MESSAGE_COUNT},
+ [FOLLOWER_EMOTION_PENSIVE] = {gFollowerPensiveMessages, EventScript_FollowerGeneric, FOLLOWER_PENSIVE_MESSAGE_COUNT},
+ [FOLLOWER_EMOTION_LOVE] = {gFollowerLoveMessages, EventScript_FollowerGeneric, FOLLOWER_LOVE_MESSAGE_COUNT},
+ [FOLLOWER_EMOTION_SURPRISE] = {gFollowerSurpriseMessages, EventScript_FollowerGeneric, FOLLOWER_SURPRISE_MESSAGE_COUNT},
+ [FOLLOWER_EMOTION_CURIOUS] = {gFollowerCuriousMessages, EventScript_FollowerGeneric, FOLLOWER_CURIOUS_MESSAGE_COUNT},
+ [FOLLOWER_EMOTION_MUSIC] = {gFollowerMusicMessages, EventScript_FollowerGeneric, FOLLOWER_MUSIC_MESSAGE_COUNT},
+ [FOLLOWER_EMOTION_POISONED] = {gFollowerPoisonedMessages, EventScript_FollowerGeneric, FOLLOWER_POISONED_MESSAGE_COUNT},
+};
diff --git a/src/fonts.c b/src/fonts.c
index 381fd795e962..6bd2d35e83d0 100644
--- a/src/fonts.c
+++ b/src/fonts.c
@@ -180,6 +180,114 @@ ALIGNED(4) const u8 gFontNormalLatinGlyphWidths[] = {
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 3,
};
+ALIGNED(4) const u16 gFontNarrowerLatinGlyphs[] = INCBIN_U16("graphics/fonts/narrower.latfont");
+ALIGNED(4) const u8 gFontNarrowerLatinGlyphWidths[] = {
+ 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4,
+ 8, 4, 4, 4, 5, 5, 4, 4, 3, 4, 4, 4, 4, 4, 4, 3,
+ 4, 4, 4, 4, 4, 6, 4, 4, 4, 5, 4, 5, 8, 6, 6, 3,
+ 3, 3, 3, 3, 8, 8, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 5, 5, 4, 8, 8, 8, 7, 8, 8, 4, 4, 6, 4, 4, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3, 3, 3, 3, 4,
+ 3, 3, 3, 3, 3, 3, 3, 5, 3, 7, 7, 7, 7, 0, 0, 3,
+ 4, 5, 6, 7, 4, 6, 6, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 3, 5, 3,
+ 5, 5, 5, 3, 3, 5, 5, 6, 3, 6, 6, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 5, 5, 4, 4, 4, 4, 4, 4, 4,
+ 4, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 4, 4,
+ 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8,
+ 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 10, 10, 10, 10, 8, 8, 10, 8, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 3,
+};
+
+ALIGNED(4) const u16 gFontSmallNarrowerLatinGlyphs[] = INCBIN_U16("graphics/fonts/small_narrower.latfont");
+ALIGNED(4) const u8 gFontSmallNarrowerLatinGlyphWidths[] = {
+ 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 4, 4, 4, 4, 4,
+ 5, 4, 4, 4, 5, 4, 4, 4, 3, 4, 4, 4, 4, 4, 3, 3,
+ 4, 4, 4, 4, 4, 6, 4, 4, 4, 5, 4, 4, 7, 5, 6, 3,
+ 3, 3, 3, 3, 8, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 5, 4, 3, 7, 7, 7, 8, 8, 8, 8, 4, 5, 4, 4, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3, 3, 3, 3, 4,
+ 3, 3, 3, 3, 3, 3, 3, 5, 3, 8, 8, 8, 8, 0, 0, 3,
+ 4, 5, 6, 7, 4, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 4, 3, 4, 4,
+ 5, 5, 5, 3, 3, 5, 5, 5, 4, 5, 5, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 5, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 3, 4,
+ 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7,
+ 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 8, 8, 8, 8, 8, 7, 8, 7, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 3,
+};
+
+ALIGNED(4) const u16 gFontShortNarrowLatinGlyphs[] = INCBIN_U16("graphics/fonts/short_narrow.latfont");
+ALIGNED(4) const u8 gFontShortNarrowLatinGlyphWidths[] = {
+ 3, 5, 5, 5, 5, 5, 5, 5, 5, 4, 3, 4, 4, 5, 5, 5,
+ 8, 5, 5, 5, 5, 6, 5, 5, 3, 5, 5, 5, 5, 5, 4, 3,
+ 4, 4, 5, 5, 5, 8, 5, 5, 5, 5, 6, 6, 9, 6, 6, 3,
+ 3, 3, 3, 3, 10, 8, 5, 3, 3, 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, 6, 8, 8, 8, 8, 8, 8, 4, 6, 8, 5, 5, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 3, 3, 3, 3, 3, 6,
+ 3, 3, 3, 3, 3, 3, 3, 6, 3, 12, 12, 12, 12, 0, 0, 3,
+ 4, 5, 6, 7, 8, 8, 8, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 8, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 5, 5, 5,
+ 6, 6, 6, 3, 3, 6, 6, 8, 5, 9, 6, 5, 5, 5, 5, 5,
+ 5, 5, 5, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5,
+ 5, 5, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 5, 5,
+ 4, 6, 5, 5, 5, 5, 5, 5, 4, 5, 5, 6, 4, 5, 5, 8,
+ 5, 5, 5, 5, 5, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 12, 12, 12, 12, 8, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
+ 10, 10, 10, 10, 10, 10, 10, 10, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
+ 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 3,
+};
+
ALIGNED(4) const u16 gFontSmallJapaneseGlyphs[] = INCBIN_U16("graphics/fonts/small.hwjpnfont");
ALIGNED(4) const u16 gFontNormalJapaneseGlyphs[] = INCBIN_U16("graphics/fonts/normal.hwjpnfont");
diff --git a/src/frontier_util.c b/src/frontier_util.c
index 7f9b37b95762..ca8c76a0fdf7 100644
--- a/src/frontier_util.c
+++ b/src/frontier_util.c
@@ -623,20 +623,6 @@ static const u8 sFrontierBrainObjEventGfx[NUM_FRONTIER_FACILITIES][2] =
[FRONTIER_FACILITY_PYRAMID] = {OBJ_EVENT_GFX_BRANDON, FALSE},
};
-const u16 gFrontierBannedSpecies[] =
-{
- SPECIES_MEW, SPECIES_MEWTWO,
- SPECIES_HO_OH, SPECIES_LUGIA, SPECIES_CELEBI,
- SPECIES_KYOGRE, SPECIES_GROUDON, SPECIES_RAYQUAZA, SPECIES_JIRACHI, SPECIES_DEOXYS,
- SPECIES_DIALGA, SPECIES_PALKIA, SPECIES_GIRATINA, SPECIES_MANAPHY, SPECIES_PHIONE, SPECIES_DARKRAI, SPECIES_SHAYMIN, SPECIES_ARCEUS,
- SPECIES_VICTINI, SPECIES_RESHIRAM, SPECIES_ZEKROM, SPECIES_KYUREM, SPECIES_KELDEO, SPECIES_MELOETTA, SPECIES_GENESECT,
- SPECIES_XERNEAS, SPECIES_YVELTAL, SPECIES_ZYGARDE, SPECIES_DIANCIE, SPECIES_HOOPA, SPECIES_VOLCANION,
- SPECIES_COSMOG, SPECIES_COSMOEM, SPECIES_SOLGALEO, SPECIES_LUNALA, SPECIES_NECROZMA, SPECIES_MAGEARNA, SPECIES_MARSHADOW, SPECIES_ZERAORA, SPECIES_MELTAN, SPECIES_MELMETAL,
- SPECIES_ZACIAN, SPECIES_ZAMAZENTA, SPECIES_ETERNATUS, SPECIES_CALYREX, SPECIES_ZARUDE,
- SPECIES_KORAIDON, SPECIES_MIRAIDON,
- 0xFFFF
-};
-
static const u8 *const sRecordsWindowChallengeTexts[][2] =
{
[RANKING_HALL_TOWER_SINGLES] = {gText_BattleTower2, gText_FacilitySingle},
@@ -1899,26 +1885,20 @@ static void CheckBattleTypeFlag(void)
#define SPECIES_PER_LINE 3
-static u8 AppendCaughtBannedMonSpeciesName(u16 species, u8 count, s32 numBannedMonsCaught)
+static void AppendCaughtBannedMonSpeciesName(u16 species, u8 count, s32 numBannedMonsCaught)
{
- if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT))
+ if (numBannedMonsCaught == count)
+ StringAppend(gStringVar1, gText_SpaceAndSpace);
+ else if (numBannedMonsCaught > count)
+ StringAppend(gStringVar1, gText_CommaSpace);
+ if ((count % SPECIES_PER_LINE) == 0)
{
- count++;
- if (numBannedMonsCaught == count)
- StringAppend(gStringVar1, gText_SpaceAndSpace);
- else if (numBannedMonsCaught > count)
- StringAppend(gStringVar1, gText_CommaSpace);
- if ((count % SPECIES_PER_LINE) == 0)
- {
- if (count == SPECIES_PER_LINE)
- StringAppend(gStringVar1, gText_NewLine);
- else
- StringAppend(gStringVar1, gText_LineBreak);
- }
- StringAppend(gStringVar1, GetSpeciesName(species));
+ if (count == SPECIES_PER_LINE)
+ StringAppend(gStringVar1, gText_NewLine);
+ else
+ StringAppend(gStringVar1, gText_LineBreak);
}
-
- return count;
+ StringAppend(gStringVar1, GetSpeciesName(species));
}
static void AppendIfValid(u16 species, u16 heldItem, u16 hp, u8 lvlMode, u8 monLevel, u16 *speciesArray, u16 *itemsArray, u8 *count)
@@ -1927,13 +1907,7 @@ static void AppendIfValid(u16 species, u16 heldItem, u16 hp, u8 lvlMode, u8 monL
if (species == SPECIES_EGG || species == SPECIES_NONE)
return;
-
- for (i = 0; gFrontierBannedSpecies[i] != 0xFFFF
- && gFrontierBannedSpecies[i] != GET_BASE_SPECIES_ID(species)
- && IsSpeciesEnabled(gFrontierBannedSpecies[i]); i++)
- ;
-
- if (gFrontierBannedSpecies[i] != 0xFFFF)
+ if (gSpeciesInfo[species].isFrontierBanned)
return;
if (lvlMode == FRONTIER_LVL_50 && monLevel > FRONTIER_MAX_LEVEL_50)
return;
@@ -2019,28 +1993,41 @@ static void CheckPartyIneligibility(void)
if (numEligibleMons < toChoose)
{
- s32 i;
- s32 caughtBannedMons = 0;
- s32 species = gFrontierBannedSpecies[0];
- for (i = 0; species != 0xFFFF; i++, species = gFrontierBannedSpecies[i])
+ u32 i;
+ u32 baseSpecies = 0;
+ u32 totalCaughtBanned = 0;
+ u32 caughtBanned[100] = {0};
+
+ for (i = 0; i < NUM_SPECIES; i++)
{
- if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT))
- caughtBannedMons++;
+ if (totalCaughtBanned >= ARRAY_COUNT(caughtBanned))
+ break;
+ baseSpecies = GET_BASE_SPECIES_ID(i);
+ if (baseSpecies == i)
+ {
+ if (gSpeciesInfo[baseSpecies].isFrontierBanned)
+ {
+ if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(baseSpecies), FLAG_GET_CAUGHT))
+ {
+ caughtBanned[totalCaughtBanned] = baseSpecies;
+ totalCaughtBanned++;
+ }
+ }
+ }
}
gStringVar1[0] = EOS;
gSpecialVar_0x8004 = TRUE;
- count = 0;
- for (i = 0; gFrontierBannedSpecies[i] != 0xFFFF; i++)
- count = AppendCaughtBannedMonSpeciesName(gFrontierBannedSpecies[i], count, caughtBannedMons);
+ for (i = 0; i < totalCaughtBanned; i++)
+ AppendCaughtBannedMonSpeciesName(caughtBanned[i], i+1, totalCaughtBanned);
- if (count == 0)
+ if (totalCaughtBanned == 0)
{
StringAppend(gStringVar1, gText_Space2);
StringAppend(gStringVar1, gText_Are);
}
else
{
- if (count % SPECIES_PER_LINE == SPECIES_PER_LINE - 1)
+ if (totalCaughtBanned % SPECIES_PER_LINE == SPECIES_PER_LINE - 1)
StringAppend(gStringVar1, gText_LineBreak);
else
StringAppend(gStringVar1, gText_Space2);
diff --git a/src/graphics.c b/src/graphics.c
index fee3ead0c860..b1e1a916782d 100644
--- a/src/graphics.c
+++ b/src/graphics.c
@@ -57,6 +57,12 @@ const u32 gBattleAnimSpritePal_QuickGuard[] = INCBIN_U32("graphics/battle_anims/
const u32 gBattleAnimSpriteGfx_AlphaStone[] = INCBIN_U32("graphics/battle_anims/sprites/alpha_stone.4bpp.lz");
const u32 gBattleAnimSpritePal_AlphaStone[] = INCBIN_U32("graphics/battle_anims/sprites/alpha_stone.gbapal.lz");
+const u32 gBattleAnimSpriteGfx_TeraCrystal[] = INCBIN_U32("graphics/battle_anims/sprites/tera_crystal.4bpp.lz");
+const u32 gBattleAnimSpritePal_TeraCrystal[] = INCBIN_U32("graphics/battle_anims/sprites/tera_crystal.gbapal.lz");
+
+const u32 gBattleAnimSpriteGfx_TeraShatter[] = INCBIN_U32("graphics/battle_anims/sprites/tera_shatter.4bpp.lz");
+const u32 gBattleAnimSpritePal_TeraShatter[] = INCBIN_U32("graphics/battle_anims/sprites/tera_shatter.gbapal.lz");
+
const u32 gBattleAnimSpriteGfx_Anchor[] = INCBIN_U32("graphics/battle_anims/sprites/anchor.4bpp.lz");
const u32 gBattleAnimSpriteGfx_Apple[] = INCBIN_U32("graphics/battle_anims/sprites/apple.4bpp.lz");
@@ -75,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");
@@ -87,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");
@@ -120,6 +132,8 @@ const u32 gBattleAnimSpritePal_DragonPulseRing[] = INCBIN_U32("graphics/battle_a
const u32 gBattleAnimSpriteGfx_DreepyMissile[] = INCBIN_U32("graphics/battle_anims/sprites/dreepy_missile.4bpp.lz");
const u32 gBattleAnimSpritePal_DreepyMissile[] = INCBIN_U32("graphics/battle_anims/sprites/dreepy_missile.gbapal.lz");
+const u32 gBattleAnimSpriteGfx_DreepyMissileShiny[] = INCBIN_U32("graphics/battle_anims/sprites/dreepy_missile.4bpp.lz");
+const u32 gBattleAnimSpritePal_DreepyMissileShiny[] = INCBIN_U32("graphics/battle_anims/sprites/dreepy_missile_shiny.gbapal.lz");
const u32 gBattleAnimSpriteGfx_Drill[] = INCBIN_U32("graphics/battle_anims/sprites/drill.4bpp.lz");
const u32 gBattleAnimSpritePal_Drill[] = INCBIN_U32("graphics/battle_anims/sprites/drill.gbapal.lz");
@@ -225,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");
@@ -457,6 +477,12 @@ const u32 gBattleAnimSpriteGfx_SyrupSplat[] = INCBIN_U32("graphics/battle_anims/
const u32 gBattleAnimSpritePal_SyrupRed[] = INCBIN_U32("graphics/battle_anims/sprites/syrup_red.gbapal.lz");
const u32 gBattleAnimSpritePal_SyrupYellow[] = INCBIN_U32("graphics/battle_anims/sprites/syrup_yellow.gbapal.lz");
+const u32 gBattleAnimSpriteGfx_IvyCudgel[] = INCBIN_U32("graphics/battle_anims/sprites/cudgel.4bpp.lz");
+const u32 gBattleAnimSpritePal_IvyCudgelGrass[] = INCBIN_U32("graphics/pokemon/ogerpon/normal.gbapal.lz");
+const u32 gBattleAnimSpritePal_IvyCudgelFire[] = INCBIN_U32("graphics/pokemon/ogerpon/hearthflame/normal.gbapal.lz");
+const u32 gBattleAnimSpritePal_IvyCudgelRock[] = INCBIN_U32("graphics/pokemon/ogerpon/cornerstone/normal.gbapal.lz");
+const u32 gBattleAnimSpritePal_IvyCudgelWater[] = INCBIN_U32("graphics/pokemon/ogerpon/wellspring/normal.gbapal.lz");
+
// old battle interface data, unused
const u32 gOldBattleInterfaceGfx[] = INCBIN_U32("graphics/unused/obi1.4bpp.lz");
@@ -1621,6 +1647,9 @@ const u32 gPartyMenuPokeball_Pal[] = INCBIN_U32("graphics/party_menu/pokeball.gb
const u32 gStatusGfx_Icons[] = INCBIN_U32("graphics/interface/status_icons.4bpp.lz");
const u32 gStatusPal_Icons[] = INCBIN_U32("graphics/interface/status_icons.gbapal.lz");
+const u16 gCategoryIcons_Pal[] = INCBIN_U16("graphics/interface/category_icons.gbapal");
+const u32 gCategoryIcons_Gfx[] = INCBIN_U32("graphics/interface/category_icons.4bpp.lz");
+
const u32 gMoveTypes_Gfx[] = INCBIN_U32("graphics/types/move_types.4bpp.lz");
const u32 gMoveTypes_Pal[] = INCBIN_U32("graphics/types/move_types.gbapal.lz");
diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c
index 80689c264e46..1c3b00f2ef1b 100644
--- a/src/hall_of_fame.c
+++ b/src/hall_of_fame.c
@@ -1167,11 +1167,15 @@ static void HallOfFame_PrintMonInfo(struct HallofFameMon* currMon, u8 unused1, u
}
else
{
- width = GetStringRightAlignXOffset(FONT_NORMAL, text, 0x80);
- AddTextPrinterParameterized3(0, FONT_NORMAL, width, 1, sMonInfoTextColors, TEXT_SKIP_DRAW, text);
+ u32 fontId = GetFontIdToFit(text, FONT_NORMAL, 0, 66);
+ width = GetStringRightAlignXOffset(fontId, text, 0x80);
+ AddTextPrinterParameterized3(0, fontId, width, 1, sMonInfoTextColors, TEXT_SKIP_DRAW, text);
text[0] = CHAR_SLASH;
- stringPtr = StringCopy(text + 1, GetSpeciesName(currMon->species));
+ text[1] = EXT_CTRL_CODE_BEGIN;
+ text[2] = EXT_CTRL_CODE_FONT;
+ text[3] = fontId;
+ stringPtr = StringCopy(text + 4, GetSpeciesName(currMon->species));
if (currMon->species != SPECIES_NIDORAN_M && currMon->species != SPECIES_NIDORAN_F)
{
diff --git a/src/item.c b/src/item.c
index 3fcafccc02dc..6c3742fd76b2 100644
--- a/src/item.c
+++ b/src/item.c
@@ -13,8 +13,10 @@
#include "item_use.h"
#include "battle_pyramid.h"
#include "battle_pyramid_bag.h"
+#include "graphics.h"
#include "constants/battle.h"
#include "constants/items.h"
+#include "constants/moves.h"
#include "constants/item_effects.h"
#include "constants/hold_effects.h"
@@ -81,24 +83,28 @@ void SetBagItemsPointers(void)
gBagPockets[BERRIES_POCKET].capacity = BAG_BERRIES_COUNT;
}
-void CopyItemName(u16 itemId, u8 *dst)
+u8 *CopyItemName(u16 itemId, u8 *dst)
{
- StringCopy(dst, ItemId_GetName(itemId));
+ return StringCopy(dst, ItemId_GetName(itemId));
}
const u8 sText_s[] =_("s");
-void CopyItemNameHandlePlural(u16 itemId, u8 *dst, u32 quantity)
+u8 *CopyItemNameHandlePlural(u16 itemId, u8 *dst, u32 quantity)
{
- u8 *end = StringCopy(dst, ItemId_GetName(itemId)) - 1;
-
- if (quantity < 2)
- return;
-
- if (DoesItemHavePluralName(itemId))
- StringCopy(dst, ItemId_GetPluralName(itemId));
+ if (quantity == 1)
+ {
+ return StringCopy(dst, ItemId_GetName(itemId));
+ }
+ else if (DoesItemHavePluralName(itemId))
+ {
+ return StringCopy(dst, ItemId_GetPluralName(itemId));
+ }
else
- StringAppend(end, sText_s);
+ {
+ u8 *end = StringCopy(dst, ItemId_GetName(itemId));
+ return StringCopy(end, sText_s);
+ }
}
bool8 IsBagPocketNonEmpty(u8 pocket)
@@ -158,6 +164,18 @@ bool8 HasAtLeastOneBerry(void)
return FALSE;
}
+bool8 HasAtLeastOnePokeBall(void)
+{
+ u16 i;
+
+ for (i = FIRST_BALL; i <= LAST_BALL; i++)
+ {
+ if (CheckBagHasItem(i, 1) == TRUE)
+ return TRUE;
+ }
+ return FALSE;
+}
+
bool8 CheckBagHasSpace(u16 itemId, u16 count)
{
if (ItemId_GetPocket(itemId) == POCKET_NONE)
diff --git a/src/item_icon.c b/src/item_icon.c
index fd6f041695e1..14a812b7fa8f 100644
--- a/src/item_icon.c
+++ b/src/item_icon.c
@@ -5,6 +5,8 @@
#include "malloc.h"
#include "sprite.h"
#include "constants/items.h"
+#include "item.h"
+#include "battle_main.h"
// EWRAM vars
EWRAM_DATA u8 *gItemIconDecompressionBuffer = NULL;
@@ -96,14 +98,14 @@ u8 AddItemIconSprite(u16 tilesTag, u16 paletteTag, u16 itemId)
struct CompressedSpritePalette spritePalette;
struct SpriteTemplate *spriteTemplate;
- LZDecompressWram(GetItemIconPicOrPalette(itemId, 0), gItemIconDecompressionBuffer);
+ LZDecompressWram(GetItemIconPic(itemId), gItemIconDecompressionBuffer);
CopyItemIconPicTo4x4Buffer(gItemIconDecompressionBuffer, gItemIcon4x4Buffer);
spriteSheet.data = gItemIcon4x4Buffer;
spriteSheet.size = 0x200;
spriteSheet.tag = tilesTag;
LoadSpriteSheet(&spriteSheet);
- spritePalette.data = GetItemIconPicOrPalette(itemId, 1);
+ spritePalette.data = GetItemIconPalette(itemId);
spritePalette.tag = paletteTag;
LoadCompressedSpritePalette(&spritePalette);
@@ -133,14 +135,14 @@ u8 AddCustomItemIconSprite(const struct SpriteTemplate *customSpriteTemplate, u1
struct CompressedSpritePalette spritePalette;
struct SpriteTemplate *spriteTemplate;
- LZDecompressWram(GetItemIconPicOrPalette(itemId, 0), gItemIconDecompressionBuffer);
+ LZDecompressWram(GetItemIconPic(itemId), gItemIconDecompressionBuffer);
CopyItemIconPicTo4x4Buffer(gItemIconDecompressionBuffer, gItemIcon4x4Buffer);
spriteSheet.data = gItemIcon4x4Buffer;
spriteSheet.size = 0x200;
spriteSheet.tag = tilesTag;
LoadSpriteSheet(&spriteSheet);
- spritePalette.data = GetItemIconPicOrPalette(itemId, 1);
+ spritePalette.data = GetItemIconPalette(itemId);
spritePalette.tag = paletteTag;
LoadCompressedSpritePalette(&spritePalette);
@@ -157,12 +159,30 @@ u8 AddCustomItemIconSprite(const struct SpriteTemplate *customSpriteTemplate, u1
}
}
-const void *GetItemIconPicOrPalette(u16 itemId, u8 which)
+const void *GetItemIconPic(u16 itemId)
{
if (itemId == ITEM_LIST_END)
- itemId = ITEMS_COUNT; // Use last icon, the "return to field" arrow
- else if (itemId >= ITEMS_COUNT)
- itemId = 0;
+ return gItemIcon_ReturnToFieldArrow; // Use last icon, the "return to field" arrow
+ if (itemId >= ITEMS_COUNT)
+ return gItemsInfo[0].iconPic;
+ if (itemId >= ITEM_TM01 && itemId < ITEM_HM01 + NUM_HIDDEN_MACHINES)
+ {
+ if (itemId < ITEM_TM01 + NUM_TECHNICAL_MACHINES)
+ return gItemIcon_TM;
+ return gItemIcon_HM;
+ }
+
+ return gItemsInfo[itemId].iconPic;
+}
+
+const void *GetItemIconPalette(u16 itemId)
+{
+ if (itemId == ITEM_LIST_END)
+ return gItemIconPalette_ReturnToFieldArrow;
+ if (itemId >= ITEMS_COUNT)
+ return gItemsInfo[0].iconPalette;
+ if (itemId >= ITEM_TM01 && itemId < ITEM_HM01 + NUM_HIDDEN_MACHINES)
+ return gTypesInfo[gMovesInfo[gItemsInfo[itemId].secondaryId].type].paletteTMHM;
- return gItemIconTable[itemId][which];
+ return gItemsInfo[itemId].iconPalette;
}
diff --git a/src/item_menu.c b/src/item_menu.c
index 569712cfe625..d885f0a8ec85 100755
--- a/src/item_menu.c
+++ b/src/item_menu.c
@@ -109,7 +109,7 @@ struct ListBuffer1 {
};
struct ListBuffer2 {
- u8 name[MAX_POCKET_ITEMS][ITEM_NAME_LENGTH + 10];
+ u8 name[MAX_POCKET_ITEMS][max(ITEM_NAME_LENGTH, MOVE_NAME_LENGTH) + 15];
};
struct TempWallyBag {
@@ -905,10 +905,12 @@ static void LoadBagItemListBuffers(u8 pocketId)
static void GetItemName(u8 *dest, u16 itemId)
{
+ u8 *end;
switch (gBagPosition.pocket)
{
case TMHM_POCKET:
- StringCopy(gStringVar2, GetMoveName(ItemIdToBattleMoveId(itemId)));
+ end = StringCopy(gStringVar2, GetMoveName(ItemIdToBattleMoveId(itemId)));
+ PrependFontIdToFit(gStringVar2, end, FONT_NARROW, 73);
if (itemId >= ITEM_HM01)
{
// Get HM number
@@ -924,11 +926,13 @@ static void GetItemName(u8 *dest, u16 itemId)
break;
case BERRIES_POCKET:
ConvertIntToDecimalStringN(gStringVar1, itemId - FIRST_BERRY_INDEX + 1, STR_CONV_MODE_LEADING_ZEROS, 2);
- CopyItemName(itemId, gStringVar2);
+ end = CopyItemName(itemId, gStringVar2);
+ PrependFontIdToFit(gStringVar2, end, FONT_NARROW, 73);
StringExpandPlaceholders(dest, gText_NumberItem_TMBerry);
break;
default:
- CopyItemName(itemId, dest);
+ end = CopyItemName(itemId, dest);
+ PrependFontIdToFit(dest, end, FONT_NARROW, 88);
break;
}
}
@@ -1221,7 +1225,7 @@ static void PrintItemSoldAmount(int windowId, int numSold, int moneyEarned)
ConvertIntToDecimalStringN(gStringVar1, numSold, STR_CONV_MODE_LEADING_ZEROS, MAX_ITEM_DIGITS);
StringExpandPlaceholders(gStringVar4, gText_xVar1);
AddTextPrinterParameterized(windowId, FONT_NORMAL, gStringVar4, 0, 1, TEXT_SKIP_DRAW, 0);
- PrintMoneyAmount(windowId, 38, 1, moneyEarned, 0);
+ PrintMoneyAmount(windowId, CalculateMoneyTextHorizontalPosition(moneyEarned), 1, moneyEarned, 0);
}
static void Task_BagMenu_HandleInput(u8 taskId)
@@ -1667,7 +1671,8 @@ static void OpenContextMenu(u8 taskId)
}
else
{
- CopyItemName(gSpecialVar_ItemId, gStringVar1);
+ u8 *end = CopyItemName(gSpecialVar_ItemId, gStringVar1);
+ WrapFontIdToFit(gStringVar1, end, FONT_NORMAL, WindowWidthPx(WIN_DESCRIPTION) - 10 - 6);
StringExpandPlaceholders(gStringVar4, gText_Var1IsSelected);
FillWindowPixelBuffer(WIN_DESCRIPTION, PIXEL_FILL(0));
BagMenu_Print(WIN_DESCRIPTION, FONT_NORMAL, gStringVar4, 3, 1, 0, 0, 0, COLORID_NORMAL);
@@ -1833,7 +1838,8 @@ static void ItemMenu_Toss(u8 taskId)
}
else
{
- CopyItemName(gSpecialVar_ItemId, gStringVar1);
+ u8 *end = CopyItemNameHandlePlural(gSpecialVar_ItemId, gStringVar1, 2);
+ WrapFontIdToFit(gStringVar1, end, FONT_NORMAL, WindowWidthPx(WIN_DESCRIPTION) - 10 - 6);
StringExpandPlaceholders(gStringVar4, gText_TossHowManyVar1s);
FillWindowPixelBuffer(WIN_DESCRIPTION, PIXEL_FILL(0));
BagMenu_Print(WIN_DESCRIPTION, FONT_NORMAL, gStringVar4, 3, 1, 0, 0, 0, COLORID_NORMAL);
@@ -1846,7 +1852,8 @@ static void AskTossItems(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- CopyItemName(gSpecialVar_ItemId, gStringVar1);
+ u8 *end = CopyItemNameHandlePlural(gSpecialVar_ItemId, gStringVar1, tItemCount);
+ WrapFontIdToFit(gStringVar1, end, FONT_NORMAL, WindowWidthPx(WIN_DESCRIPTION) - 10 - 6);
ConvertIntToDecimalStringN(gStringVar2, tItemCount, STR_CONV_MODE_LEFT_ALIGN, MAX_ITEM_DIGITS);
StringExpandPlaceholders(gStringVar4, gText_ConfirmTossItems);
FillWindowPixelBuffer(WIN_DESCRIPTION, PIXEL_FILL(0));
@@ -1889,7 +1896,8 @@ static void ConfirmToss(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- CopyItemName(gSpecialVar_ItemId, gStringVar1);
+ u8 *end = CopyItemNameHandlePlural(gSpecialVar_ItemId, gStringVar1, tItemCount);
+ WrapFontIdToFit(gStringVar1, end, FONT_NORMAL, WindowWidthPx(WIN_DESCRIPTION) - 10 - 6);
ConvertIntToDecimalStringN(gStringVar2, tItemCount, STR_CONV_MODE_LEFT_ALIGN, MAX_ITEM_DIGITS);
StringExpandPlaceholders(gStringVar4, gText_ThrewAwayVar2Var1s);
FillWindowPixelBuffer(WIN_DESCRIPTION, PIXEL_FILL(0));
@@ -2121,7 +2129,7 @@ static void DisplaySellItemPriceAndConfirm(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- ConvertIntToDecimalStringN(gStringVar1, (ItemId_GetPrice(gSpecialVar_ItemId) / ITEM_SELL_FACTOR) * tItemCount, STR_CONV_MODE_LEFT_ALIGN, 6);
+ ConvertIntToDecimalStringN(gStringVar1, (ItemId_GetPrice(gSpecialVar_ItemId) / ITEM_SELL_FACTOR) * tItemCount, STR_CONV_MODE_LEFT_ALIGN, MAX_MONEY_DIGITS);
StringExpandPlaceholders(gStringVar4, gText_ICanPayVar1);
DisplayItemMessage(taskId, FONT_NORMAL, gStringVar4, AskSellItems);
}
@@ -2181,7 +2189,7 @@ static void ConfirmSell(u8 taskId)
s16 *data = gTasks[taskId].data;
CopyItemName(gSpecialVar_ItemId, gStringVar2);
- ConvertIntToDecimalStringN(gStringVar1, (ItemId_GetPrice(gSpecialVar_ItemId) / ITEM_SELL_FACTOR) * tItemCount, STR_CONV_MODE_LEFT_ALIGN, 6);
+ ConvertIntToDecimalStringN(gStringVar1, (ItemId_GetPrice(gSpecialVar_ItemId) / ITEM_SELL_FACTOR) * tItemCount, STR_CONV_MODE_LEFT_ALIGN, MAX_MONEY_DIGITS);
StringExpandPlaceholders(gStringVar4, gText_TurnedOverVar1ForVar2);
DisplayItemMessage(taskId, FONT_NORMAL, gStringVar4, SellItem);
}
@@ -2226,7 +2234,8 @@ static void Task_ItemContext_Deposit(u8 taskId)
}
else
{
- CopyItemName(gSpecialVar_ItemId, gStringVar1);
+ u8 *end = CopyItemNameHandlePlural(gSpecialVar_ItemId, gStringVar1, 2);
+ WrapFontIdToFit(gStringVar1, end, FONT_NORMAL, WindowWidthPx(WIN_DESCRIPTION) - 10 - 6);
StringExpandPlaceholders(gStringVar4, gText_DepositHowManyVar1);
FillWindowPixelBuffer(WIN_DESCRIPTION, PIXEL_FILL(0));
BagMenu_Print(WIN_DESCRIPTION, FONT_NORMAL, gStringVar4, 3, 1, 0, 0, 0, COLORID_NORMAL);
@@ -2273,7 +2282,8 @@ static void TryDepositItem(u8 taskId)
else if (AddPCItem(gSpecialVar_ItemId, tItemCount) == TRUE)
{
// Successfully deposited
- CopyItemName(gSpecialVar_ItemId, gStringVar1);
+ u8 *end = CopyItemNameHandlePlural(gSpecialVar_ItemId, gStringVar1, tItemCount);
+ WrapFontIdToFit(gStringVar1, end, FONT_NORMAL, WindowWidthPx(WIN_DESCRIPTION) - 10 - 6);
ConvertIntToDecimalStringN(gStringVar2, tItemCount, STR_CONV_MODE_LEFT_ALIGN, MAX_ITEM_DIGITS);
StringExpandPlaceholders(gStringVar4, gText_DepositedVar2Var1s);
BagMenu_Print(WIN_DESCRIPTION, FONT_NORMAL, gStringVar4, 3, 1, 0, 0, 0, COLORID_NORMAL);
diff --git a/src/item_use.c b/src/item_use.c
index 502612a18407..fd74b7082b03 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)
{
-
- u16 localX, localY;
- u32 localOffset;
- s32 localLength;
-
- struct MapHeader const *const mapHeader = GetMapHeaderFromConnection(connection);
-
+ s16 connectionX, connectionY;
+ struct MapHeader const *const connectionHeader = 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 615a9bfe3ea6..d2bb3c4105a7 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/libisagbprn.c b/src/libisagbprn.c
index fab9b5990bf0..6724059ff8c7 100644
--- a/src/libisagbprn.c
+++ b/src/libisagbprn.c
@@ -1,7 +1,7 @@
#include
#include
#include "gba/gba.h"
-#include "config.h"
+#include "config/general.h"
#include "malloc.h"
#include "mini_printf.h"
diff --git a/src/lilycove_lady.c b/src/lilycove_lady.c
index e7a5862f074b..5acb9d3a40d6 100644
--- a/src/lilycove_lady.c
+++ b/src/lilycove_lady.c
@@ -49,7 +49,7 @@ void SetLilycoveLadyGfx(void)
if (GetLilycoveLadyId() == LILYCOVE_LADY_CONTEST)
{
lilycoveLady = &gSaveBlock1Ptr->lilycoveLady;
- VarSet(VAR_OBJ_GFX_ID_1, sContestLadyMonGfxId[lilycoveLady->contest.category]);
+ VarSet(VAR_OBJ_GFX_ID_1, sContestLadyValues[lilycoveLady->contest.category].monGfxId);
gSpecialVar_Result = TRUE;
}
else
@@ -396,7 +396,7 @@ static u8 BufferQuizAuthorName(void)
sQuizLadyPtr = &gSaveBlock1Ptr->lilycoveLady.quiz;
if (sQuizLadyPtr->playerName[0] == EOS)
{
- StringCopy_PlayerName(gStringVar1, gText_QuizLady_Lady);
+ StringCopy_PlayerName(gStringVar1, COMPOUND_STRING("Lady"));
authorNameId = QUIZ_AUTHOR_NAME_LADY;
}
else
@@ -695,15 +695,15 @@ bool8 GivePokeblockToContestLady(struct Pokeblock *pokeblock)
static void BufferContestLadyCategoryAndMonName(u8 *category, u8 *nickname)
{
sContestLadyPtr = &gSaveBlock1Ptr->lilycoveLady.contest;
- StringCopy(category, sContestLadyCategoryNames[sContestLadyPtr->category]);
- StringCopy_Nickname(nickname, sContestLadyMonNames[sContestLadyPtr->category]);
+ StringCopy(category, sContestLadyValues[sContestLadyPtr->category].categoryName);
+ StringCopy_Nickname(nickname, sContestLadyValues[sContestLadyPtr->category].monName);
}
void BufferContestLadyMonName(u8 *category, u8 *nickname)
{
sContestLadyPtr = &gSaveBlock1Ptr->lilycoveLady.contest;
*category = sContestLadyPtr->category;
- StringCopy(nickname, sContestLadyMonNames[sContestLadyPtr->category]);
+ StringCopy(nickname, sContestLadyValues[sContestLadyPtr->category].monName);
}
void BufferContestLadyPlayerName(u8 *dest)
@@ -720,7 +720,7 @@ void BufferContestLadyLanguage(u8 *dest)
void BufferContestName(u8 *dest, u8 category)
{
- StringCopy(dest, sContestNames[category]);
+ StringCopy(dest, sContestLadyValues[category].contestName);
}
// Used by the Contest Lady's TV show to determine how well she performed
@@ -775,7 +775,7 @@ void SetContestLadyGivenPokeblock(void)
void GetContestLadyMonSpecies(void)
{
sContestLadyPtr = &gSaveBlock1Ptr->lilycoveLady.contest;
- gSpecialVar_0x8005 = sContestLadyMonSpecies[sContestLadyPtr->category];
+ gSpecialVar_0x8005 = sContestLadyValues[sContestLadyPtr->category].monSpecies;
}
u8 GetContestLadyCategory(void)
diff --git a/src/list_menu.c b/src/list_menu.c
index e83f325161d7..aa65683eddc6 100644
--- a/src/list_menu.c
+++ b/src/list_menu.c
@@ -600,11 +600,14 @@ static void ListMenuPrint(struct ListMenu *list, const u8 *str, u8 x, u8 y)
u8 colors[3];
if (gListMenuOverride.enabled)
{
+ u32 fontId = gListMenuOverride.fontId;
+ if (list->template.textNarrowWidth)
+ fontId = GetFontIdToFit(str, fontId, gListMenuOverride.lettersSpacing, list->template.textNarrowWidth);
colors[0] = gListMenuOverride.fillValue;
colors[1] = gListMenuOverride.cursorPal;
colors[2] = gListMenuOverride.cursorShadowPal;
AddTextPrinterParameterized4(list->template.windowId,
- gListMenuOverride.fontId,
+ fontId,
x, y,
gListMenuOverride.lettersSpacing,
0, colors, TEXT_SKIP_DRAW, str);
@@ -613,11 +616,14 @@ static void ListMenuPrint(struct ListMenu *list, const u8 *str, u8 x, u8 y)
}
else
{
+ u32 fontId = list->template.fontId;
+ if (list->template.textNarrowWidth)
+ fontId = GetFontIdToFit(str, fontId, list->template.lettersSpacing, list->template.textNarrowWidth);
colors[0] = list->template.fillValue;
colors[1] = list->template.cursorPal;
colors[2] = list->template.cursorShadowPal;
AddTextPrinterParameterized4(list->template.windowId,
- list->template.fontId,
+ fontId,
x, y,
list->template.lettersSpacing,
0, colors, TEXT_SKIP_DRAW, str);
diff --git a/src/load_save.c b/src/load_save.c
index 70db12fb98ea..a5f269353834 100644
--- a/src/load_save.c
+++ b/src/load_save.c
@@ -14,6 +14,7 @@
#include "decoration_inventory.h"
#include "agb_flash.h"
#include "event_data.h"
+#include "constants/event_objects.h"
static void ApplyNewEncryptionKeyToAllEncryptedData(u32 encryptionKey);
@@ -198,17 +199,45 @@ void LoadPlayerParty(void)
void SaveObjectEvents(void)
{
int i;
+ u16 graphicsId;
for (i = 0; i < OBJECT_EVENTS_COUNT; i++)
+ {
gSaveBlock1Ptr->objectEvents[i] = gObjectEvents[i];
+ // Swap graphicsId bytes when saving and loading
+ // This keeps compatibility with vanilla,
+ // since the lower graphicsIds will be in the same place as vanilla
+ graphicsId = gObjectEvents[i].graphicsId;
+ 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)
+ gSaveBlock1Ptr->objectEvents[i].active = FALSE;
+ }
}
void LoadObjectEvents(void)
{
int i;
+ u16 graphicsId;
for (i = 0; i < OBJECT_EVENTS_COUNT; i++)
+ {
gObjectEvents[i] = gSaveBlock1Ptr->objectEvents[i];
+ // Swap graphicsId bytes when saving and loading
+ // This keeps compatibility with vanilla,
+ // since the lower graphicsIds will be in the same place as vanilla
+ graphicsId = gObjectEvents[i].graphicsId;
+ gObjectEvents[i].graphicsId = (graphicsId >> 8) | (graphicsId << 8);
+ if (gObjectEvents[i].spriteId != 127)
+ gObjectEvents[i].graphicsId &= 0xFF;
+ gObjectEvents[i].spriteId = 0;
+ // Try to restore saved inactive follower
+ if (gObjectEvents[i].localId == OBJ_EVENT_ID_FOLLOWER &&
+ !gObjectEvents[i].active &&
+ gObjectEvents[i].graphicsId >= OBJ_EVENT_GFX_MON_BASE)
+ gObjectEvents[i].active = TRUE;
+ }
}
void CopyPartyAndObjectsToSave(void)
diff --git a/src/main.c b/src/main.c
index 4bd981639886..b0bba2f3f394 100644
--- a/src/main.c
+++ b/src/main.c
@@ -448,7 +448,18 @@ static void IntrDummy(void)
static void WaitForVBlank(void)
{
gMain.intrCheck &= ~INTR_FLAG_VBLANK;
- VBlankIntrWait();
+
+ if (gWirelessCommType != 0)
+ {
+ // Desynchronization may occur if wireless adapter is connected
+ // and we call VBlankIntrWait();
+ while (!(gMain.intrCheck & INTR_FLAG_VBLANK))
+ ;
+ }
+ else
+ {
+ VBlankIntrWait();
+ }
}
void SetTrainerHillVBlankCounter(u32 *counter)
diff --git a/src/map_name_popup.c b/src/map_name_popup.c
index 725bb80838e4..5cc1f3cfd5d9 100644
--- a/src/map_name_popup.c
+++ b/src/map_name_popup.c
@@ -2,12 +2,16 @@
#include "battle_pyramid.h"
#include "bg.h"
#include "event_data.h"
+#include "field_weather.h"
#include "gpu_regs.h"
+#include "graphics.h"
#include "international_string_util.h"
+#include "main.h"
#include "menu.h"
#include "map_name_popup.h"
#include "palette.h"
#include "region_map.h"
+#include "rtc.h"
#include "start_menu.h"
#include "string_util.h"
#include "task.h"
@@ -16,6 +20,8 @@
#include "constants/layouts.h"
#include "constants/region_map_sections.h"
#include "constants/weather.h"
+#include "config/general.h"
+#include "config/overworld.h"
// enums
enum MapPopUp_Themes
@@ -28,13 +34,18 @@ enum MapPopUp_Themes
MAPPOPUP_THEME_STONE2,
};
+enum MapPopUp_Themes_BW
+{
+ MAPPOPUP_THEME_BW_DEFAULT,
+};
+
// static functions
static void Task_MapNamePopUpWindow(u8 taskId);
static void ShowMapNamePopUpWindow(void);
static void LoadMapNamePopUpWindowBg(void);
// EWRAM
-static EWRAM_DATA u8 sPopupTaskId = 0;
+EWRAM_DATA u8 gPopupTaskId = 0;
// .rodata
static const u8 sMapPopUp_Table[][960] =
@@ -177,6 +188,127 @@ static const u8 sRegionMapSectionId_To_PopUpThemeIdMapping[] =
[MAPSEC_TRAINER_HILL - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_MARBLE
};
+#if OW_POPUP_GENERATION == GEN_5
+// Gen5 assets
+static const u8 sMapPopUpTilesPrimary_BW[] = INCBIN_U8("graphics/map_popup/bw/bw_primary.4bpp");
+static const u8 sMapPopUpTilesSecondary_BW[] = INCBIN_U8("graphics/map_popup/bw/bw_secondary.4bpp");
+static const u16 sMapPopUpTilesPalette_BW_Black[16] = INCBIN_U16("graphics/map_popup/bw/black.gbapal");
+static const u16 sMapPopUpTilesPalette_BW_White[16] = INCBIN_U16("graphics/map_popup/bw/white.gbapal");
+#else
+static const u8 sMapPopUpTilesPrimary_BW[] = {0};
+static const u8 sMapPopUpTilesSecondary_BW[] = {0};
+static const u16 sMapPopUpTilesPalette_BW_Black[] = {0};
+static const u16 sMapPopUpTilesPalette_BW_White[] = {0};
+#endif
+
+static const u8 sRegionMapSectionId_To_PopUpThemeIdMapping_BW[] =
+{
+ [MAPSEC_LITTLEROOT_TOWN] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_OLDALE_TOWN] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_DEWFORD_TOWN] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_LAVARIDGE_TOWN] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_FALLARBOR_TOWN] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_VERDANTURF_TOWN] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_PACIFIDLOG_TOWN] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_PETALBURG_CITY] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_SLATEPORT_CITY] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_MAUVILLE_CITY] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_RUSTBORO_CITY] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_FORTREE_CITY] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_LILYCOVE_CITY] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_MOSSDEEP_CITY] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_SOOTOPOLIS_CITY] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_EVER_GRANDE_CITY] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_ROUTE_101] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_ROUTE_102] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_ROUTE_103] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_ROUTE_104] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_ROUTE_105] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_ROUTE_106] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_ROUTE_107] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_ROUTE_108] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_ROUTE_109] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_ROUTE_110] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_ROUTE_111] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_ROUTE_112] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_ROUTE_113] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_ROUTE_114] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_ROUTE_115] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_ROUTE_116] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_ROUTE_117] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_ROUTE_118] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_ROUTE_119] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_ROUTE_120] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_ROUTE_121] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_ROUTE_122] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_ROUTE_123] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_ROUTE_124] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_ROUTE_125] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_ROUTE_126] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_ROUTE_127] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_ROUTE_128] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_ROUTE_129] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_ROUTE_130] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_ROUTE_131] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_ROUTE_132] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_ROUTE_133] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_ROUTE_134] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_UNDERWATER_124] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_UNDERWATER_126] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_UNDERWATER_127] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_UNDERWATER_128] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_UNDERWATER_SOOTOPOLIS] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_GRANITE_CAVE] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_MT_CHIMNEY] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_SAFARI_ZONE] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_BATTLE_FRONTIER] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_PETALBURG_WOODS] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_RUSTURF_TUNNEL] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_ABANDONED_SHIP] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_NEW_MAUVILLE] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_METEOR_FALLS] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_METEOR_FALLS2] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_MT_PYRE] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_AQUA_HIDEOUT_OLD] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_SHOAL_CAVE] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_SEAFLOOR_CAVERN] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_UNDERWATER_SEAFLOOR_CAVERN] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_VICTORY_ROAD] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_MIRAGE_ISLAND] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_CAVE_OF_ORIGIN] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_SOUTHERN_ISLAND] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_FIERY_PATH] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_FIERY_PATH2] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_JAGGED_PASS] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_JAGGED_PASS2] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_SEALED_CHAMBER] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_UNDERWATER_SEALED_CHAMBER] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_SCORCHED_SLAB] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_ISLAND_CAVE] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_DESERT_RUINS] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_ANCIENT_TOMB] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_INSIDE_OF_TRUCK] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_SKY_PILLAR] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_SECRET_BASE] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_DYNAMIC] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_AQUA_HIDEOUT - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_MAGMA_HIDEOUT - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_MIRAGE_TOWER - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_BIRTH_ISLAND - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_FARAWAY_ISLAND - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_ARTISAN_CAVE - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_MARINE_CAVE - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_UNDERWATER_MARINE_CAVE - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_TERRA_CAVE - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_UNDERWATER_105 - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_UNDERWATER_125 - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_UNDERWATER_129 - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_DESERT_UNDERPASS - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_ALTERING_CAVE - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_NAVEL_ROCK - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_BW_DEFAULT,
+ [MAPSEC_TRAINER_HILL - KANTO_MAPSEC_COUNT] = MAPPOPUP_THEME_BW_DEFAULT,
+};
+
static const u8 sText_PyramidFloor1[] = _("PYRAMID FLOOR 1");
static const u8 sText_PyramidFloor2[] = _("PYRAMID FLOOR 2");
static const u8 sText_PyramidFloor3[] = _("PYRAMID FLOOR 3");
@@ -216,7 +348,7 @@ enum {
STATE_PRINT, // For some reason the first state is numerically last.
};
-#define POPUP_OFFSCREEN_Y 40
+#define POPUP_OFFSCREEN_Y ((OW_POPUP_GENERATION == GEN_5) ? 24 : 40)
#define POPUP_SLIDE_SPEED 2
#define tState data[0]
@@ -232,18 +364,29 @@ void ShowMapNamePopup(void)
if (!FuncIsActiveTask(Task_MapNamePopUpWindow))
{
// New pop up window
- sPopupTaskId = CreateTask(Task_MapNamePopUpWindow, 90);
- SetGpuReg(REG_OFFSET_BG0VOFS, POPUP_OFFSCREEN_Y);
- gTasks[sPopupTaskId].tState = STATE_PRINT;
- gTasks[sPopupTaskId].tYOffset = POPUP_OFFSCREEN_Y;
+ if (OW_POPUP_GENERATION == GEN_5)
+ {
+ gPopupTaskId = CreateTask(Task_MapNamePopUpWindow, 100);
+
+ if (OW_POPUP_BW_ALPHA_BLEND && !IsWeatherAlphaBlend())
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND);
+ }
+ else
+ {
+ gPopupTaskId = CreateTask(Task_MapNamePopUpWindow, 90);
+ SetGpuReg(REG_OFFSET_BG0VOFS, POPUP_OFFSCREEN_Y);
+ }
+
+ gTasks[gPopupTaskId].tState = STATE_PRINT;
+ gTasks[gPopupTaskId].tYOffset = POPUP_OFFSCREEN_Y;
}
else
{
// There's already a pop up window running.
// Hurry the old pop up offscreen so the new one can appear.
- if (gTasks[sPopupTaskId].tState != STATE_SLIDE_OUT)
- gTasks[sPopupTaskId].tState = STATE_SLIDE_OUT;
- gTasks[sPopupTaskId].tIncomingPopUp = TRUE;
+ if (gTasks[gPopupTaskId].tState != STATE_SLIDE_OUT)
+ gTasks[gPopupTaskId].tState = STATE_SLIDE_OUT;
+ gTasks[gPopupTaskId].tIncomingPopUp = TRUE;
}
}
}
@@ -261,6 +404,11 @@ static void Task_MapNamePopUpWindow(u8 taskId)
task->tState = STATE_SLIDE_IN;
task->tPrintTimer = 0;
ShowMapNamePopUpWindow();
+ if (OW_POPUP_GENERATION == GEN_5)
+ {
+ EnableInterrupts(INTR_FLAG_HBLANK);
+ SetHBlankCallback(HBlankCB_DoublePopupWindow);
+ }
}
break;
case STATE_SLIDE_IN:
@@ -270,7 +418,7 @@ static void Task_MapNamePopUpWindow(u8 taskId)
{
task->tYOffset = 0;
task->tState = STATE_WAIT;
- gTasks[sPopupTaskId].data[1] = 0;
+ gTasks[gPopupTaskId].tOnscreenTimer = 0;
}
break;
case STATE_WAIT:
@@ -304,13 +452,16 @@ static void Task_MapNamePopUpWindow(u8 taskId)
break;
case STATE_ERASE:
ClearStdWindowAndFrame(GetMapNamePopUpWindowId(), TRUE);
+ if (OW_POPUP_GENERATION == GEN_5)
+ ClearStdWindowAndFrame(GetSecondaryPopUpWindowId(), TRUE);
task->tState = STATE_END;
break;
case STATE_END:
HideMapNamePopUpWindow();
return;
}
- SetGpuReg(REG_OFFSET_BG0VOFS, task->tYOffset);
+ if (OW_POPUP_GENERATION != GEN_5)
+ SetGpuReg(REG_OFFSET_BG0VOFS, task->tYOffset);
}
void HideMapNamePopUpWindow(void)
@@ -324,8 +475,28 @@ void HideMapNamePopUpWindow(void)
ClearStdWindowAndFrame(GetMapNamePopUpWindowId(), TRUE);
RemoveMapNamePopUpWindow();
}
+
+ if (OW_POPUP_GENERATION == GEN_5)
+ {
+ if (GetSecondaryPopUpWindowId() != WINDOW_NONE)
+ {
+ ClearStdWindowAndFrame(GetSecondaryPopUpWindowId(), TRUE);
+ RemoveSecondaryPopUpWindow();
+ }
+
+ DisableInterrupts(INTR_FLAG_HBLANK);
+ SetHBlankCallback(NULL);
+
+ if (OW_POPUP_BW_ALPHA_BLEND && !IsWeatherAlphaBlend())
+ {
+ SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ | BLDCNT_EFFECT_BLEND);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(8, 10));
+ }
+ }
+
SetGpuReg_ForcedBlank(REG_OFFSET_BG0VOFS, 0);
- DestroyTask(sPopupTaskId);
+ DestroyTask(gPopupTaskId);
}
}
@@ -335,6 +506,7 @@ static void ShowMapNamePopUpWindow(void)
u8 *withoutPrefixPtr;
u8 x;
const u8 *mapDisplayHeaderSource;
+ u8 mapNamePopUpWindowId, secondaryPopUpWindowId;
if (InBattlePyramid())
{
@@ -355,14 +527,46 @@ static void ShowMapNamePopUpWindow(void)
withoutPrefixPtr = &(mapDisplayHeader[3]);
GetMapName(withoutPrefixPtr, gMapHeader.regionMapSectionId, 0);
}
- AddMapNamePopUpWindow();
+
+ if (OW_POPUP_GENERATION == GEN_5)
+ {
+ if (OW_POPUP_BW_ALPHA_BLEND && !IsWeatherAlphaBlend())
+ SetGpuRegBits(REG_OFFSET_WININ, WININ_WIN0_CLR);
+
+ mapNamePopUpWindowId = AddMapNamePopUpWindow();
+ secondaryPopUpWindowId = AddSecondaryPopUpWindow();
+ }
+ else
+ {
+ AddMapNamePopUpWindow();
+ }
+
LoadMapNamePopUpWindowBg();
- x = GetStringCenterAlignXOffset(FONT_NARROW, withoutPrefixPtr, 80);
+
mapDisplayHeader[0] = EXT_CTRL_CODE_BEGIN;
mapDisplayHeader[1] = EXT_CTRL_CODE_HIGHLIGHT;
mapDisplayHeader[2] = TEXT_COLOR_TRANSPARENT;
- AddTextPrinterParameterized(GetMapNamePopUpWindowId(), FONT_NARROW, mapDisplayHeader, x, 3, TEXT_SKIP_DRAW, NULL);
- CopyWindowToVram(GetMapNamePopUpWindowId(), COPYWIN_FULL);
+
+ 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();
+ FormatDecimalTimeWithoutSeconds(withoutPrefixPtr, gLocalTime.hours, gLocalTime.minutes, OW_POPUP_BW_TIME_MODE == OW_POPUP_BW_TIME_24_HR);
+ AddTextPrinterParameterized(secondaryPopUpWindowId, FONT_SMALL, mapDisplayHeader, GetStringRightAlignXOffset(FONT_SMALL, mapDisplayHeader, DISPLAY_WIDTH) - 5, 8, TEXT_SKIP_DRAW, NULL);
+ }
+
+ CopyWindowToVram(mapNamePopUpWindowId, COPYWIN_FULL);
+ CopyWindowToVram(secondaryPopUpWindowId, COPYWIN_FULL);
+ }
+ else
+ {
+ x = GetStringCenterAlignXOffset(FONT_NARROW, withoutPrefixPtr, 80);
+ AddTextPrinterParameterized(GetMapNamePopUpWindowId(), FONT_NARROW, mapDisplayHeader, x, 3, TEXT_SKIP_DRAW, NULL);
+ CopyWindowToVram(GetMapNamePopUpWindowId(), COPYWIN_FULL);
+ }
}
#define TILE_TOP_EDGE_START 0x21D
@@ -402,6 +606,10 @@ static void LoadMapNamePopUpWindowBg(void)
u8 popUpThemeId;
u8 popupWindowId = GetMapNamePopUpWindowId();
u16 regionMapSectionId = gMapHeader.regionMapSectionId;
+ u8 secondaryPopUpWindowId;
+
+ if (OW_POPUP_GENERATION == GEN_5)
+ secondaryPopUpWindowId = GetSecondaryPopUpWindowId();
if (regionMapSectionId >= KANTO_MAPSEC_START)
{
@@ -410,14 +618,37 @@ static void LoadMapNamePopUpWindowBg(void)
else
regionMapSectionId = 0; // Discard kanto region sections;
}
- popUpThemeId = sRegionMapSectionId_To_PopUpThemeIdMapping[regionMapSectionId];
- LoadBgTiles(GetWindowAttribute(popupWindowId, WINDOW_BG), sMapPopUp_OutlineTable[popUpThemeId], 0x400, 0x21D);
- CallWindowFunction(popupWindowId, DrawMapNamePopUpFrame);
- PutWindowTilemap(popupWindowId);
- if (gMapHeader.weather == WEATHER_UNDERWATER_BUBBLES)
- LoadPalette(&sMapPopUp_Palette_Underwater, BG_PLTT_ID(14), sizeof(sMapPopUp_Palette_Underwater));
+ if (OW_POPUP_GENERATION == GEN_5)
+ {
+ popUpThemeId = sRegionMapSectionId_To_PopUpThemeIdMapping_BW[regionMapSectionId];
+ switch (popUpThemeId)
+ {
+ // add additional gen 5-style pop-up themes as cases here
+ case MAPPOPUP_THEME_BW_DEFAULT:
+ if (OW_POPUP_BW_COLOR == OW_POPUP_BW_COLOR_WHITE)
+ LoadPalette(sMapPopUpTilesPalette_BW_White, BG_PLTT_ID(14), sizeof(sMapPopUpTilesPalette_BW_White));
+ else
+ LoadPalette(sMapPopUpTilesPalette_BW_Black, BG_PLTT_ID(14), sizeof(sMapPopUpTilesPalette_BW_Black));
+
+ CopyToWindowPixelBuffer(popupWindowId, sMapPopUpTilesPrimary_BW, sizeof(sMapPopUpTilesPrimary_BW), 0);
+ CopyToWindowPixelBuffer(secondaryPopUpWindowId, sMapPopUpTilesSecondary_BW, sizeof(sMapPopUpTilesSecondary_BW), 0);
+ break;
+ }
+
+ PutWindowTilemap(popupWindowId);
+ PutWindowTilemap(secondaryPopUpWindowId);
+ }
else
- LoadPalette(sMapPopUp_PaletteTable[popUpThemeId], BG_PLTT_ID(14), sizeof(sMapPopUp_PaletteTable[0]));
- BlitBitmapToWindow(popupWindowId, sMapPopUp_Table[popUpThemeId], 0, 0, 80, 24);
+ {
+ popUpThemeId = sRegionMapSectionId_To_PopUpThemeIdMapping[regionMapSectionId];
+ LoadBgTiles(GetWindowAttribute(popupWindowId, WINDOW_BG), sMapPopUp_OutlineTable[popUpThemeId], 0x400, 0x21D);
+ CallWindowFunction(popupWindowId, DrawMapNamePopUpFrame);
+ PutWindowTilemap(popupWindowId);
+ if (gMapHeader.weather == WEATHER_UNDERWATER_BUBBLES)
+ LoadPalette(&sMapPopUp_Palette_Underwater, BG_PLTT_ID(14), sizeof(sMapPopUp_Palette_Underwater));
+ else
+ LoadPalette(sMapPopUp_PaletteTable[popUpThemeId], BG_PLTT_ID(14), sizeof(sMapPopUp_PaletteTable[0]));
+ BlitBitmapToWindow(popupWindowId, sMapPopUp_Table[popUpThemeId], 0, 0, 80, 24);
+ }
}
diff --git a/src/menu.c b/src/menu.c
index a6bd9ae2bcde..ff1970c3f14f 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -4,8 +4,10 @@
#include "blit.h"
#include "dma3.h"
#include "event_data.h"
+#include "field_weather.h"
#include "graphics.h"
#include "main.h"
+#include "map_name_popup.h"
#include "menu.h"
#include "menu_helpers.h"
#include "palette.h"
@@ -18,6 +20,7 @@
#include "task.h"
#include "text_window.h"
#include "window.h"
+#include "config/overworld.h"
#include "constants/songs.h"
#define DLG_WINDOW_PALETTE_NUM 15
@@ -62,6 +65,7 @@ static void task_free_buf_after_copying_tile_data_to_vram(u8 taskId);
static EWRAM_DATA u8 sStartMenuWindowId = 0;
static EWRAM_DATA u8 sMapNamePopupWindowId = 0;
+static EWRAM_DATA u8 sSecondaryPopupWindowId = 0;
static EWRAM_DATA struct Menu sMenu = {0};
static EWRAM_DATA u16 sTileNum = 0;
static EWRAM_DATA u8 sPaletteNum = 0;
@@ -112,6 +116,7 @@ static const u8 sTextColors[] = { TEXT_DYNAMIC_COLOR_6, TEXT_COLOR_WHITE, TEXT_C
static const struct MenuInfoIcon sMenuInfoIcons[] =
{ // { width, height, offset }
{ 12, 12, 0x00 }, // Unused
+ [TYPE_NONE + 1] = { 32, 12, 0xA4 }, // Copy of TYPE_MYSTERY's
[TYPE_NORMAL + 1] = { 32, 12, 0x20 },
[TYPE_FIGHTING + 1] = { 32, 12, 0x64 },
[TYPE_FLYING + 1] = { 32, 12, 0x60 },
@@ -145,6 +150,8 @@ void InitStandardTextBoxWindows(void)
InitWindows(sStandardTextBox_WindowTemplates);
sStartMenuWindowId = WINDOW_NONE;
sMapNamePopupWindowId = WINDOW_NONE;
+ if (OW_POPUP_GENERATION == GEN_5)
+ sSecondaryPopupWindowId = WINDOW_NONE;
}
void FreeAllOverworldWindowBuffers(void)
@@ -521,7 +528,12 @@ static u16 UNUSED GetStandardFrameBaseTileNum(void)
u8 AddMapNamePopUpWindow(void)
{
if (sMapNamePopupWindowId == WINDOW_NONE)
- sMapNamePopupWindowId = AddWindowParameterized(0, 1, 1, 10, 3, 14, 0x107);
+ {
+ if (OW_POPUP_GENERATION == GEN_5)
+ sMapNamePopupWindowId = AddWindowParameterized(0, 0, 0, 30, 3, 14, 0x107);
+ else
+ sMapNamePopupWindowId = AddWindowParameterized(0, 1, 1, 10, 3, 14, 0x107);
+ }
return sMapNamePopupWindowId;
}
@@ -2145,3 +2157,42 @@ void BufferSaveMenuText(u8 textId, u8 *dest, u8 color)
break;
}
}
+
+// BW map pop-ups
+u8 AddSecondaryPopUpWindow(void)
+{
+ if (sSecondaryPopupWindowId == WINDOW_NONE)
+ sSecondaryPopupWindowId = AddWindowParameterized(0, 0, 17, 30, 3, 14, 0x161);
+ return sSecondaryPopupWindowId;
+}
+
+u8 GetSecondaryPopUpWindowId(void)
+{
+ return sSecondaryPopupWindowId;
+}
+
+void RemoveSecondaryPopUpWindow(void)
+{
+ if (sSecondaryPopupWindowId != WINDOW_NONE)
+ {
+ RemoveWindow(sSecondaryPopupWindowId);
+ sSecondaryPopupWindowId = WINDOW_NONE;
+ }
+}
+
+void HBlankCB_DoublePopupWindow(void)
+{
+ u16 offset = gTasks[gPopupTaskId].data[2];
+ u16 scanline = REG_VCOUNT;
+
+ if (scanline < 80 || scanline > 160)
+ {
+ REG_BG0VOFS = offset;
+ if(OW_POPUP_BW_ALPHA_BLEND && !IsWeatherAlphaBlend())
+ REG_BLDALPHA = BLDALPHA_BLEND(15, 5);
+ }
+ else
+ {
+ REG_BG0VOFS = 512 - offset;
+ }
+}
diff --git a/src/menu_specialized.c b/src/menu_specialized.c
index fcb65d9ae73a..a709a878dc0c 100644
--- a/src/menu_specialized.c
+++ b/src/menu_specialized.c
@@ -186,7 +186,8 @@ static const struct ListMenuTemplate sMoveRelearnerMovesListTemplate =
.itemVerticalPadding = 0,
.scrollMultiple = LIST_NO_MULTIPLE_SCROLL,
.fontId = FONT_NORMAL,
- .cursorKind = CURSOR_BLACK_ARROW
+ .cursorKind = CURSOR_BLACK_ARROW,
+ .textNarrowWidth = 68,
};
//--------------
@@ -755,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/mini_printf.c b/src/mini_printf.c
index cab78d761195..7432395b796f 100644
--- a/src/mini_printf.c
+++ b/src/mini_printf.c
@@ -35,7 +35,7 @@
#include "mini_printf.h"
#include "gba/types.h"
#include "gba/defines.h"
-#include "config.h"
+#include "config/general.h"
#include "characters.h"
#include "string_util.h"
diff --git a/src/mirage_tower.c b/src/mirage_tower.c
index 78dec7a15b75..6b541e37accb 100644
--- a/src/mirage_tower.c
+++ b/src/mirage_tower.c
@@ -4,6 +4,7 @@
#include "event_data.h"
#include "event_object_movement.h"
#include "field_camera.h"
+#include "field_effect.h"
#include "fieldmap.h"
#include "gpu_regs.h"
#include "menu.h"
@@ -154,7 +155,7 @@ static const union AnimCmd *const sAnims_FallingFossil[] =
static const struct SpriteTemplate sSpriteTemplate_FallingFossil =
{
.tileTag = TAG_NONE,
- .paletteTag = TAG_NONE,
+ .paletteTag = OBJ_EVENT_PAL_TAG_NPC_1,
.oam = &sOamData_FallingFossil,
.anims = sAnims_FallingFossil,
.images = NULL,
@@ -686,6 +687,7 @@ static void Task_FossilFallAndSink(u8 taskId)
{
struct SpriteTemplate fossilTemplate = sSpriteTemplate_FallingFossil;
fossilTemplate.images = sFallingFossil->frameImage;
+ LoadObjectEventPalette(sSpriteTemplate_FallingFossil.paletteTag);
sFallingFossil->spriteId = CreateSprite(&fossilTemplate, 128, -16, 1);
gSprites[sFallingFossil->spriteId].centerToCornerVecX = 0;
gSprites[sFallingFossil->spriteId].data[0] = gSprites[sFallingFossil->spriteId].x;
@@ -706,6 +708,9 @@ static void Task_FossilFallAndSink(u8 taskId)
// Wait for fossil to finish falling / disintegrating
if (gSprites[sFallingFossil->spriteId].callback != SpriteCallbackDummy)
return;
+ gSprites[sFallingFossil->spriteId].inUse = FALSE;
+ FieldEffectFreePaletteIfUnused(gSprites[sFallingFossil->spriteId].oam.paletteNum);
+ gSprites[sFallingFossil->spriteId].inUse = TRUE;
DestroySprite(&gSprites[sFallingFossil->spriteId]);
FREE_AND_SET_NULL(sFallingFossil->disintegrateRand);;
FREE_AND_SET_NULL(sFallingFossil->frameImage);
diff --git a/src/money.c b/src/money.c
index 321f882ff64a..0a5129c934e7 100644
--- a/src/money.c
+++ b/src/money.c
@@ -9,6 +9,7 @@
#include "sprite.h"
#include "strings.h"
#include "decompress.h"
+#include "tv.h"
EWRAM_DATA static u8 sMoneyBoxWindowId = 0;
EWRAM_DATA static u8 sMoneyLabelSpriteId = 0;
@@ -130,23 +131,33 @@ void SubtractMoneyFromVar0x8005(void)
void PrintMoneyAmountInMoneyBox(u8 windowId, int amount, u8 speed)
{
- PrintMoneyAmount(windowId, 38, 1, amount, speed);
+ PrintMoneyAmount(windowId, CalculateMoneyTextHorizontalPosition(amount), 1, amount, speed);
+}
+
+static u32 CalculateLeadingSpacesForMoney(u32 numDigits)
+{
+ u32 leadingSpaces = CountDigits(INT_MAX) - StringLength(gStringVar1);
+ return (numDigits > 8) ? leadingSpaces : leadingSpaces - 2;
}
void PrintMoneyAmount(u8 windowId, u8 x, u8 y, int amount, u8 speed)
{
- u8 *txtPtr;
- s32 strLength;
+ u8 *txtPtr = gStringVar4;
+ u32 numDigits = CountDigits(amount);
+ u32 maxDigits = (numDigits > 6) ? MAX_MONEY_DIGITS: 6;
+ u32 leadingSpaces;
- ConvertIntToDecimalStringN(gStringVar1, amount, STR_CONV_MODE_LEFT_ALIGN, 6);
+ ConvertIntToDecimalStringN(gStringVar1, amount, STR_CONV_MODE_LEFT_ALIGN, maxDigits);
- strLength = 6 - StringLength(gStringVar1);
- txtPtr = gStringVar4;
+ leadingSpaces = CalculateLeadingSpacesForMoney(numDigits);
- while (strLength-- > 0)
+ while (leadingSpaces-- > 0)
*(txtPtr++) = CHAR_SPACER;
StringExpandPlaceholders(txtPtr, gText_PokedollarVar1);
+
+ if (numDigits > 8)
+ PrependFontIdToFit(gStringVar4, txtPtr + 1 + numDigits, FONT_NORMAL, 54);
AddTextPrinterParameterized(windowId, FONT_NORMAL, gStringVar4, x, y, speed, NULL);
}
@@ -161,6 +172,11 @@ void ChangeAmountInMoneyBox(int amount)
PrintMoneyAmountInMoneyBox(sMoneyBoxWindowId, amount, 0);
}
+u32 CalculateMoneyTextHorizontalPosition(u32 amount)
+{
+ return (CountDigits(amount) > 8) ? 34 : 26;
+}
+
void DrawMoneyBox(int amount, u8 x, u8 y)
{
struct WindowTemplate template;
diff --git a/src/move_relearner.c b/src/move_relearner.c
index e27b46fdf7ca..817dbd16e0dc 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/naming_screen.c b/src/naming_screen.c
index 0f2e2dbb7f94..118d91cfb416 100644
--- a/src/naming_screen.c
+++ b/src/naming_screen.c
@@ -1395,7 +1395,7 @@ static void NamingScreen_NoIcon(void)
static void NamingScreen_CreatePlayerIcon(void)
{
- u8 rivalGfxId;
+ u16 rivalGfxId;
u8 spriteId;
rivalGfxId = GetRivalAvatarGraphicsIdByStateIdAndGender(PLAYER_AVATAR_STATE_NORMAL, sNamingScreen->monSpecies);
@@ -1436,6 +1436,7 @@ static void NamingScreen_CreateWaldaDadIcon(void)
//--------------------------------------------------
static bool8 KeyboardKeyHandler_Character(u8);
+static void SwapKeyboardToLowerAfterFirstCapitalLetter(void);
static bool8 KeyboardKeyHandler_Page(u8);
static bool8 KeyboardKeyHandler_Backspace(u8);
static bool8 KeyboardKeyHandler_OK(u8);
@@ -1480,6 +1481,8 @@ static bool8 KeyboardKeyHandler_Character(u8 input)
{
bool8 textFull = AddTextCharacter();
+ SwapKeyboardToLowerAfterFirstCapitalLetter();
+
SquishCursor();
if (textFull)
{
@@ -1490,6 +1493,20 @@ static bool8 KeyboardKeyHandler_Character(u8 input)
return FALSE;
}
+static void SwapKeyboardToLowerAfterFirstCapitalLetter(void)
+{
+ if (AUTO_LOWERCASE_KEYBOARD < GEN_6)
+ return;
+
+ if (sNamingScreen->currentPage != KBPAGE_LETTERS_UPPER)
+ return;
+
+ if (GetTextEntryPosition() != 1)
+ return;
+
+ MainState_StartPageSwap();
+}
+
static bool8 KeyboardKeyHandler_Page(u8 input)
{
TryStartButtonFlash(BUTTON_PAGE, TRUE, FALSE);
@@ -1710,10 +1727,11 @@ static void DrawNormalTextEntryBox(void)
static void DrawMonTextEntryBox(void)
{
- u8 buffer[32];
+ u8 buffer[64];
- StringCopy(buffer, GetSpeciesName(sNamingScreen->monSpecies));
- StringAppendN(buffer, sNamingScreen->template->title, 15);
+ u8 *end = StringCopy(buffer, GetSpeciesName(sNamingScreen->monSpecies));
+ WrapFontIdToFit(buffer, end, FONT_NORMAL, 128 - 64);
+ StringAppendN(end, sNamingScreen->template->title, 15);
FillWindowPixelBuffer(sNamingScreen->windows[WIN_TEXT_ENTRY_BOX], PIXEL_FILL(1));
AddTextPrinterParameterized(sNamingScreen->windows[WIN_TEXT_ENTRY_BOX], FONT_NORMAL, buffer, 8, 1, 0, 0);
PutWindowTilemap(sNamingScreen->windows[WIN_TEXT_ENTRY_BOX]);
diff --git a/src/new_game.c b/src/new_game.c
index ece85ac544dc..783c6893c8d0 100644
--- a/src/new_game.c
+++ b/src/new_game.c
@@ -181,8 +181,7 @@ void NewGameInitData(void)
gPlayerPartyCount = 0;
ZeroPlayerPartyMons();
ResetPokemonStorageSystem();
- ClearRoamerData();
- ClearRoamerLocationData();
+ DeactivateAllRoamers();
gSaveBlock1Ptr->registeredItem = ITEM_NONE;
ClearBag();
NewGameInitPCItems();
diff --git a/src/overworld.c b/src/overworld.c
index db4b499655df..a9606578dcdc 100644
--- a/src/overworld.c
+++ b/src/overworld.c
@@ -42,6 +42,7 @@
#include "random.h"
#include "roamer.h"
#include "rotating_gate.h"
+#include "rtc.h"
#include "safari_zone.h"
#include "save.h"
#include "save_location.h"
@@ -448,7 +449,7 @@ static void UpdateMiscOverworldStates(void)
ChooseAmbientCrySpecies();
ResetCyclingRoadChallengeData();
UpdateLocationHistoryForRoamer();
- RoamerMoveToOtherLocationSet();
+ MoveAllRoamersToOtherLocationSets();
}
void ResetGameStats(void)
@@ -846,14 +847,22 @@ if (I_VS_SEEKER_CHARGING != 0)
InitSecondaryTilesetAnimation();
UpdateLocationHistoryForRoamer();
- RoamerMove();
+ MoveAllRoamers();
DoCurrentWeather();
ResetFieldTasksArgs();
RunOnResumeMapScript();
- if (gMapHeader.regionMapSectionId != MAPSEC_BATTLE_FRONTIER
- || gMapHeader.regionMapSectionId != sLastMapSectionId)
- ShowMapNamePopup();
+ if (OW_HIDE_REPEAT_MAP_POPUP)
+ {
+ if (gMapHeader.regionMapSectionId != sLastMapSectionId)
+ ShowMapNamePopup();
+ }
+ else
+ {
+ if (gMapHeader.regionMapSectionId != MAPSEC_BATTLE_FRONTIER
+ || gMapHeader.regionMapSectionId != sLastMapSectionId)
+ ShowMapNamePopup();
+ }
}
static void LoadMapFromWarp(bool32 a1)
@@ -897,7 +906,8 @@ if (I_VS_SEEKER_CHARGING != 0)
Overworld_ClearSavedMusic();
RunOnTransitionMapScript();
UpdateLocationHistoryForRoamer();
- RoamerMoveToOtherLocationSet();
+ MoveAllRoamersToOtherLocationSets();
+ gChainFishingDexNavStreak = 0;
if (gMapHeader.mapLayoutId == LAYOUT_BATTLE_FRONTIER_BATTLE_PYRAMID_FLOOR)
InitBattlePyramidMap(FALSE);
else if (InTrainerHill())
@@ -1526,7 +1536,10 @@ void CB2_Overworld(void)
SetVBlankCallback(NULL);
OverworldBasic();
if (fading)
+ {
SetFieldVBlankCallback();
+ return;
+ }
}
void SetMainCallback1(MainCallback cb)
@@ -2005,6 +2018,10 @@ static bool32 ReturnToFieldLocal(u8 *state)
ResetScreenForMapLoad();
ResumeMap(FALSE);
InitObjectEventsReturnToField();
+ if (gFieldCallback == FieldCallback_UseFly)
+ RemoveFollowingPokemon();
+ else
+ UpdateFollowingPokemon();
SetCameraToTrackPlayer();
(*state)++;
break;
@@ -2175,10 +2192,7 @@ static void ResumeMap(bool32 a1)
ResetAllPicSprites();
ResetCameraUpdateInfo();
InstallCameraPanAheadCallback();
- if (!a1)
- InitObjectEventPalettes(0);
- else
- InitObjectEventPalettes(1);
+ FreeAllSpritePalettes();
FieldEffectActiveListClear();
StartWeather();
@@ -2212,6 +2226,7 @@ static void InitObjectEventsLocal(void)
SetPlayerAvatarTransitionFlags(player->transitionFlags);
ResetInitialPlayerAvatarState();
TrySpawnObjectEvents(0, 0);
+ UpdateFollowingPokemon();
TryRunOnWarpIntoMapScript();
}
@@ -3001,7 +3016,7 @@ static void InitLinkPlayerObjectEventPos(struct ObjectEvent *objEvent, s16 x, s1
objEvent->previousCoords.y = y;
SetSpritePosToMapCoords(x, y, &objEvent->initialCoords.x, &objEvent->initialCoords.y);
objEvent->initialCoords.x += 8;
- ObjectEventUpdateElevation(objEvent);
+ ObjectEventUpdateElevation(objEvent, NULL);
}
static void UNUSED SetLinkPlayerObjectRange(u8 linkPlayerId, u8 dir)
@@ -3141,7 +3156,7 @@ static bool8 FacingHandler_DpadMovement(struct LinkPlayerObjectEvent *linkPlayer
{
objEvent->directionSequenceIndex = 16;
ShiftObjectEventCoords(objEvent, x, y);
- ObjectEventUpdateElevation(objEvent);
+ ObjectEventUpdateElevation(objEvent, NULL);
return TRUE;
}
}
diff --git a/src/party_menu.c b/src/party_menu.c
index 7a14d0fb720b..5214ddc2be63 100644
--- a/src/party_menu.c
+++ b/src/party_menu.c
@@ -14,6 +14,7 @@
#include "decompress.h"
#include "easy_chat.h"
#include "event_data.h"
+#include "event_object_movement.h"
#include "evolution_scene.h"
#include "field_control_avatar.h"
#include "field_effect.h"
@@ -2429,6 +2430,11 @@ static void DisplayPartyPokemonBarDetail(u8 windowId, const u8 *str, u8 color, c
AddTextPrinterParameterized3(windowId, FONT_SMALL, align[0], align[1], sFontColorTable[color], 0, str);
}
+static void DisplayPartyPokemonBarDetailToFit(u8 windowId, const u8 *str, u8 color, const u8 *align, u32 width)
+{
+ AddTextPrinterParameterized3(windowId, GetFontIdToFit(str, FONT_SMALL, 0, width), align[0], align[1], sFontColorTable[color], 0, str);
+}
+
static void DisplayPartyPokemonNickname(struct Pokemon *mon, struct PartyMenuBox *menuBox, u8 c)
{
u8 nickname[POKEMON_NAME_LENGTH + 1];
@@ -2438,7 +2444,7 @@ static void DisplayPartyPokemonNickname(struct Pokemon *mon, struct PartyMenuBox
if (c == 1)
menuBox->infoRects->blitFunc(menuBox->windowId, menuBox->infoRects->dimensions[0] >> 3, menuBox->infoRects->dimensions[1] >> 3, menuBox->infoRects->dimensions[2] >> 3, menuBox->infoRects->dimensions[3] >> 3, FALSE);
GetMonNickname(mon, nickname);
- DisplayPartyPokemonBarDetail(menuBox->windowId, nickname, 0, menuBox->infoRects->dimensions);
+ DisplayPartyPokemonBarDetailToFit(menuBox->windowId, nickname, 0, menuBox->infoRects->dimensions, 50);
}
}
@@ -2981,6 +2987,9 @@ static void CB2_ReturnToPartyMenuFromSummaryScreen(void)
static void CursorCb_Switch(u8 taskId)
{
+ // Reset follower steps when the party leader is changed
+ if (gPartyMenu.slotId == 0 || gPartyMenu.slotId2 == 0)
+ gFollowerSteps = 0;
PlaySE(SE_SELECT);
gPartyMenu.action = PARTY_ACTION_SWITCH;
PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[1]);
@@ -4008,6 +4017,13 @@ bool8 FieldCallback_PrepareFadeInFromMenu(void)
return TRUE;
}
+// Same as above, but removes follower pokemon
+bool8 FieldCallback_PrepareFadeInForTeleport(void)
+{
+ RemoveFollowingPokemon();
+ return FieldCallback_PrepareFadeInFromMenu();
+}
+
static void Task_FieldMoveWaitForFade(u8 taskId)
{
if (IsWeatherNotFadingIn() == TRUE)
@@ -5540,20 +5556,28 @@ void ItemUseCB_RareCandy(u8 taskId, TaskFunc task)
if (cannotUseEffect)
{
u16 targetSpecies = SPECIES_NONE;
+ bool32 evoModeNormal = TRUE;
// Resets values to 0 so other means of teaching moves doesn't overwrite levels
sInitialLevel = 0;
sFinalLevel = 0;
if (holdEffectParam == 0)
+ {
targetSpecies = GetEvolutionTargetSpecies(mon, EVO_MODE_NORMAL, ITEM_NONE, NULL);
+ if (targetSpecies == SPECIES_NONE)
+ {
+ targetSpecies = GetEvolutionTargetSpecies(mon, EVO_MODE_CANT_STOP, ITEM_NONE, NULL);
+ evoModeNormal = FALSE;
+ }
+ }
if (targetSpecies != SPECIES_NONE)
{
RemoveBagItem(gSpecialVar_ItemId, 1);
FreePartyPointers();
gCB2_AfterEvolution = gPartyMenu.exitCallback;
- BeginEvolutionScene(mon, targetSpecies, TRUE, gPartyMenu.slotId);
+ BeginEvolutionScene(mon, targetSpecies, evoModeNormal, gPartyMenu.slotId);
DestroyTask(taskId);
}
else
@@ -5727,12 +5751,20 @@ static void CB2_ReturnToPartyMenuUsingRareCandy(void)
static void PartyMenuTryEvolution(u8 taskId)
{
struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId];
- u16 targetSpecies = GetEvolutionTargetSpecies(mon, EVO_MODE_NORMAL, ITEM_NONE, NULL);
+ u16 targetSpecies = SPECIES_NONE;
+ bool32 evoModeNormal = TRUE;
// Resets values to 0 so other means of teaching moves doesn't overwrite levels
sInitialLevel = 0;
sFinalLevel = 0;
+ targetSpecies = GetEvolutionTargetSpecies(mon, EVO_MODE_NORMAL, ITEM_NONE, NULL);
+ if (targetSpecies == SPECIES_NONE)
+ {
+ targetSpecies = GetEvolutionTargetSpecies(mon, EVO_MODE_CANT_STOP, ITEM_NONE, NULL);
+ evoModeNormal = FALSE;
+ }
+
if (targetSpecies != SPECIES_NONE)
{
FreePartyPointers();
@@ -5740,7 +5772,7 @@ static void PartyMenuTryEvolution(u8 taskId)
gCB2_AfterEvolution = CB2_ReturnToPartyMenuUsingRareCandy;
else
gCB2_AfterEvolution = gPartyMenu.exitCallback;
- BeginEvolutionScene(mon, targetSpecies, TRUE, gPartyMenu.slotId);
+ BeginEvolutionScene(mon, targetSpecies, evoModeNormal, gPartyMenu.slotId);
DestroyTask(taskId);
}
else
@@ -6332,6 +6364,7 @@ static void Task_TryItemUseFormChange(u8 taskId)
case 0:
targetSpecies = gTasks[taskId].tTargetSpecies;
SetMonData(mon, MON_DATA_SPECIES, &targetSpecies);
+ TrySetDayLimitToFormChange(mon);
CalculateMonStats(mon);
gTasks[taskId].tState++;
break;
@@ -6897,8 +6930,7 @@ static u8 GetPartySlotEntryStatus(s8 slot)
static bool8 GetBattleEntryEligibility(struct Pokemon *mon)
{
- u16 i = 0;
- u16 species;
+ u32 species;
if (GetMonData(mon, MON_DATA_IS_EGG)
|| GetMonData(mon, MON_DATA_LEVEL) > GetBattleEntryLevelCap()
@@ -6919,11 +6951,8 @@ static bool8 GetBattleEntryEligibility(struct Pokemon *mon)
return TRUE;
default: // Battle Frontier
species = GetMonData(mon, MON_DATA_SPECIES);
- for (; gFrontierBannedSpecies[i] != 0xFFFF; i++)
- {
- if (gFrontierBannedSpecies[i] == GET_BASE_SPECIES_ID(species))
- return FALSE;
- }
+ if (gSpeciesInfo[species].isFrontierBanned)
+ return FALSE;
return TRUE;
}
}
@@ -7736,6 +7765,6 @@ void IsLastMonThatKnowsSurf(void)
}
}
if (AnyStorageMonWithMove(move) != TRUE)
- gSpecialVar_Result = TRUE;
+ gSpecialVar_Result = !P_CAN_FORGET_HIDDEN_MOVE;
}
}
diff --git a/src/play_time.c b/src/play_time.c
index 97f4ac22f962..197b1fbac9a6 100644
--- a/src/play_time.c
+++ b/src/play_time.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "play_time.h"
+#include "fake_rtc.h"
enum
{
@@ -45,6 +46,7 @@ void PlayTimeCounter_Update(void)
gSaveBlock2Ptr->playTimeVBlanks = 0;
gSaveBlock2Ptr->playTimeSeconds++;
+ FakeRtc_TickTimeForward();
if (gSaveBlock2Ptr->playTimeSeconds < 60)
return;
diff --git a/src/player_pc.c b/src/player_pc.c
index a10cb2ac2be1..3dd5fcc36f26 100644
--- a/src/player_pc.c
+++ b/src/player_pc.c
@@ -293,6 +293,7 @@ static const struct ListMenuTemplate sListMenuTemplate_ItemStorage =
.scrollMultiple = LIST_NO_MULTIPLE_SCROLL,
.fontId = FONT_NARROW,
.cursorKind = CURSOR_BLACK_ARROW,
+ .textNarrowWidth = 74,
};
static const struct WindowTemplate sWindowTemplates_ItemStorage[ITEMPC_WIN_COUNT] =
@@ -1349,6 +1350,7 @@ static void ItemStorage_PrintItemQuantity(u8 windowId, u16 value, u32 mode, u8 x
// Start an item Withdraw/Toss
static void ItemStorage_DoItemAction(u8 taskId)
{
+ u8 *end;
s16 *data = gTasks[taskId].data;
u16 pos = gPlayerPCItemPageInfo.cursorPos + gPlayerPCItemPageInfo.itemsAbove;
ItemStorage_RemoveScrollIndicator();
@@ -1364,7 +1366,8 @@ static void ItemStorage_DoItemAction(u8 taskId)
}
// Withdrawing multiple items, show "how many" message
- CopyItemName(gSaveBlock1Ptr->pcItems[pos].itemId, gStringVar1);
+ end = CopyItemNameHandlePlural(gSaveBlock1Ptr->pcItems[pos].itemId, gStringVar1, 2);
+ WrapFontIdToFit(gStringVar1, end, FONT_NORMAL, WindowWidthPx(ITEMPC_WIN_MESSAGE) - 6);
ItemStorage_PrintMessage(ItemStorage_GetMessage(MSG_HOW_MANY_TO_WITHDRAW));
}
else
@@ -1377,7 +1380,8 @@ static void ItemStorage_DoItemAction(u8 taskId)
}
// Tossing multiple items, show "how many" message
- CopyItemName(gSaveBlock1Ptr->pcItems[pos].itemId, gStringVar1);
+ end = CopyItemNameHandlePlural(gSaveBlock1Ptr->pcItems[pos].itemId, gStringVar1, 2);
+ WrapFontIdToFit(gStringVar1, end, FONT_NORMAL, WindowWidthPx(ITEMPC_WIN_MESSAGE) - 6);
ItemStorage_PrintMessage(ItemStorage_GetMessage(MSG_HOW_MANY_TO_TOSS));
}
@@ -1426,7 +1430,8 @@ static void ItemStorage_DoItemWithdraw(u8 taskId)
if (AddBagItem(gSaveBlock1Ptr->pcItems[pos].itemId, tQuantity) == TRUE)
{
// Item withdrawn
- CopyItemName(gSaveBlock1Ptr->pcItems[pos].itemId, gStringVar1);
+ u8 *end = CopyItemNameHandlePlural(gSaveBlock1Ptr->pcItems[pos].itemId, gStringVar1, tQuantity);
+ WrapFontIdToFit(gStringVar1, end, FONT_NORMAL, WindowWidthPx(ITEMPC_WIN_MESSAGE) - 6);
ConvertIntToDecimalStringN(gStringVar2, tQuantity, STR_CONV_MODE_LEFT_ALIGN, 3);
ItemStorage_PrintMessage(ItemStorage_GetMessage(MSG_WITHDREW_ITEM));
gTasks[taskId].func = ItemStorage_HandleRemoveItem;
@@ -1448,7 +1453,8 @@ static void ItemStorage_DoItemToss(u8 taskId)
if (!ItemId_GetImportance(gSaveBlock1Ptr->pcItems[pos].itemId))
{
// Show toss confirmation prompt
- CopyItemName(gSaveBlock1Ptr->pcItems[pos].itemId, gStringVar1);
+ u8 *end = CopyItemNameHandlePlural(gSaveBlock1Ptr->pcItems[pos].itemId, gStringVar1, tQuantity);
+ WrapFontIdToFit(gStringVar1, end, FONT_NORMAL, WindowWidthPx(ITEMPC_WIN_MESSAGE) - 6);
ConvertIntToDecimalStringN(gStringVar2, tQuantity, STR_CONV_MODE_LEFT_ALIGN, 3);
ItemStorage_PrintMessage(ItemStorage_GetMessage(MSG_OKAY_TO_THROW_AWAY));
CreateYesNoMenuWithCallbacks(taskId, &sWindowTemplates_ItemStorage[ITEMPC_WIN_YESNO], 1, 0, 1, 0x214, 0xE, &ItemTossYesNoFuncs);
diff --git a/src/pokeball.c b/src/pokeball.c
index 89568215e947..914455af5a83 100644
--- a/src/pokeball.c
+++ b/src/pokeball.c
@@ -16,8 +16,11 @@
#include "constants/songs.h"
static void Task_DoPokeballSendOutAnim(u8 taskId);
-static void SpriteCB_PlayerMonSendOut_1(struct Sprite *sprite);
-static void SpriteCB_PlayerMonSendOut_2(struct Sprite *sprite);
+static inline void DoPokeballSendOutSoundEffect(u32 battler);
+static inline void *GetOpponentMonSendOutCallback(void);
+static inline bool32 IsBattlerPlayer(u32 battler);
+static void SpriteCB_MonSendOut_1(struct Sprite *sprite);
+static void SpriteCB_MonSendOut_2(struct Sprite *sprite);
static void SpriteCB_OpponentMonSendOut(struct Sprite *sprite);
static void SpriteCB_BallThrow(struct Sprite *sprite);
static void SpriteCB_BallThrow_ReachMon(struct Sprite *sprite);
@@ -548,6 +551,8 @@ static void Task_DoPokeballSendOutAnim(u8 taskId)
{
u32 throwCaseId, ballId, battlerId, ballSpriteId;
bool32 notSendOut = FALSE;
+ u32 throwXoffset = (B_ENEMY_THROW_BALLS >= GEN_6) ? 24 : 0;
+ s32 throwYoffset = (B_ENEMY_THROW_BALLS >= GEN_6) ? -16 : 24;
if (gTasks[taskId].tFrames == 0)
{
@@ -566,18 +571,25 @@ static void Task_DoPokeballSendOutAnim(u8 taskId)
switch (throwCaseId)
{
+ case POKEBALL_PLAYER_SLIDEIN: // don't actually send out, trigger the slide-in animation
+ gBattlerTarget = battlerId;
+ gSprites[ballSpriteId].callback = HandleBallAnimEnd;
+ gSprites[ballSpriteId].invisible = TRUE;
+ break;
case POKEBALL_PLAYER_SENDOUT:
gBattlerTarget = battlerId;
gSprites[ballSpriteId].x = 24;
gSprites[ballSpriteId].y = 68;
- gSprites[ballSpriteId].callback = SpriteCB_PlayerMonSendOut_1;
+ gSprites[ballSpriteId].callback = SpriteCB_MonSendOut_1;
+ DoPokeballSendOutSoundEffect(battlerId);
break;
case POKEBALL_OPPONENT_SENDOUT:
- gSprites[ballSpriteId].x = GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X);
- gSprites[ballSpriteId].y = GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y) + 24;
+ gSprites[ballSpriteId].x = GetBattlerSpriteCoord(battlerId, BATTLER_COORD_X) + throwXoffset;
+ gSprites[ballSpriteId].y = GetBattlerSpriteCoord(battlerId, BATTLER_COORD_Y) + throwYoffset;
gBattlerTarget = battlerId;
gSprites[ballSpriteId].data[0] = 0;
- gSprites[ballSpriteId].callback = SpriteCB_OpponentMonSendOut;
+ gSprites[ballSpriteId].callback = GetOpponentMonSendOutCallback();
+ DoPokeballSendOutSoundEffect(battlerId);
break;
default:
gBattlerTarget = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
@@ -604,6 +616,22 @@ static void Task_DoPokeballSendOutAnim(u8 taskId)
PlaySE(SE_BALL_THROW);
}
+static inline void DoPokeballSendOutSoundEffect(u32 battler)
+{
+ if (IsBattlerPlayer(battler) && B_PLAYER_THROW_BALLS_SOUND < GEN_5)
+ return;
+
+ if (!IsBattlerPlayer(battler) && B_ENEMY_THROW_BALLS_SOUND < GEN_5)
+ return;
+
+ PlaySE(SE_BALL_THROW);
+}
+
+static inline void *GetOpponentMonSendOutCallback(void)
+{
+ return (B_ENEMY_THROW_BALLS >= GEN_6) ? SpriteCB_MonSendOut_1 : SpriteCB_OpponentMonSendOut;
+}
+
// This sequence of functions is very similar to those that get run when
// a Pokéball gets thrown at a wild Pokémon, starting at SpriteCB_Ball_Arc.
// These do not seem to get run.
@@ -1037,6 +1065,13 @@ static void HandleBallAnimEnd(struct Sprite *sprite)
bool8 affineAnimEnded = FALSE;
u8 battlerId = sprite->sBattler;
+ if (sprite->data[7] == POKEBALL_PLAYER_SLIDEIN)
+ {
+ gSprites[gBattlerSpriteIds[sprite->sBattler]].callback = SpriteCB_PlayerMonSlideIn;
+ AnimateSprite(&gSprites[gBattlerSpriteIds[sprite->sBattler]]);
+ gSprites[gBattlerSpriteIds[sprite->sBattler]].data[1] = 0x1000;
+ }
+
gSprites[gBattlerSpriteIds[battlerId]].invisible = FALSE;
if (sprite->animEnded)
sprite->invisible = TRUE;
@@ -1098,23 +1133,33 @@ static void SpriteCB_BallThrow_CaptureMon(struct Sprite *sprite)
}
}
-static void SpriteCB_PlayerMonSendOut_1(struct Sprite *sprite)
+static inline bool32 IsBattlerPlayer(u32 battler)
{
+ return (battler % B_POSITION_PLAYER_RIGHT) ? FALSE : TRUE;
+}
+
+static void SpriteCB_MonSendOut_1(struct Sprite *sprite)
+{
+ bool32 isPlayer = IsBattlerPlayer(sprite->sBattler);
+ u32 coordX = (isPlayer) ? BATTLER_COORD_X_2 : BATTLER_COORD_X;
+ u32 coordY = (isPlayer) ? BATTLER_COORD_Y_PIC_OFFSET : BATTLER_COORD_Y;
+
sprite->data[0] = 25;
- sprite->data[2] = GetBattlerSpriteCoord(sprite->sBattler, BATTLER_COORD_X_2);
- sprite->data[4] = GetBattlerSpriteCoord(sprite->sBattler, BATTLER_COORD_Y_PIC_OFFSET) + 24;
+ sprite->data[2] = GetBattlerSpriteCoord(sprite->sBattler, coordX);
+ sprite->data[4] = GetBattlerSpriteCoord(sprite->sBattler, coordY) + 24;
sprite->data[5] = -30;
sprite->oam.affineParam = sprite->sBattler;
InitAnimArcTranslation(sprite);
- sprite->callback = SpriteCB_PlayerMonSendOut_2;
+ sprite->callback = SpriteCB_MonSendOut_2;
}
#define HIBYTE(x) (((x) >> 8) & 0xFF)
-static void SpriteCB_PlayerMonSendOut_2(struct Sprite *sprite)
+static void SpriteCB_MonSendOut_2(struct Sprite *sprite)
{
u32 r6;
u32 r7;
+ bool32 rightPosition = (IsBattlerPlayer(sprite->sBattler)) ? B_POSITION_PLAYER_RIGHT : B_POSITION_OPPONENT_RIGHT;
if (HIBYTE(sprite->data[7]) >= 35 && HIBYTE(sprite->data[7]) < 80)
{
@@ -1157,7 +1202,7 @@ static void SpriteCB_PlayerMonSendOut_2(struct Sprite *sprite)
sprite->data[0] = 0;
if (IsDoubleBattle() && gBattleSpritesDataPtr->animationData->introAnimActive
- && sprite->sBattler == GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT))
+ && sprite->sBattler == GetBattlerAtPosition(rightPosition))
sprite->callback = SpriteCB_ReleaseMon2FromBall;
else
sprite->callback = SpriteCB_ReleaseMonFromBall;
diff --git a/src/pokeblock_feed.c b/src/pokeblock_feed.c
index 59aed379d8aa..f31896a4cbe3 100644
--- a/src/pokeblock_feed.c
+++ b/src/pokeblock_feed.c
@@ -40,51 +40,9 @@ enum {
NUM_ANIMDATA
};
-enum {
- AFFINE_NONE,
- AFFINE_TURN_UP,
- AFFINE_TURN_UP_AND_DOWN,
- AFFINE_TURN_DOWN,
- AFFINE_TURN_DOWN_SLOW,
- AFFINE_TURN_DOWN_SLIGHT,
- AFFINE_TURN_UP_HIGH,
- AFFINE_UNUSED_1,
- AFFINE_UNUSED_2,
- AFFINE_UNUSED_3,
- NUM_MON_AFFINES,
-};
-
#define MON_X 48
#define MON_Y 80
-// The animation the Pokémon does during the feeding scene depends on their nature.
-// The below values are offsets into sMonPokeblockAnims of the animation data for that nature.
-#define ANIM_HARDY 0
-#define ANIM_LONELY (ANIM_HARDY + 3)
-#define ANIM_BRAVE (ANIM_LONELY + 1)
-#define ANIM_ADAMANT (ANIM_BRAVE + 1)
-#define ANIM_NAUGHTY (ANIM_ADAMANT + 5)
-#define ANIM_BOLD (ANIM_NAUGHTY + 3)
-#define ANIM_DOCILE (ANIM_BOLD + 2)
-#define ANIM_RELAXED (ANIM_DOCILE + 1)
-#define ANIM_IMPISH (ANIM_RELAXED + 2)
-#define ANIM_LAX (ANIM_IMPISH + 1)
-#define ANIM_TIMID (ANIM_LAX + 1)
-#define ANIM_HASTY (ANIM_TIMID + 5)
-#define ANIM_SERIOUS (ANIM_HASTY + 2)
-#define ANIM_JOLLY (ANIM_SERIOUS + 1)
-#define ANIM_NAIVE (ANIM_JOLLY + 1)
-#define ANIM_MODEST (ANIM_NAIVE + 4)
-#define ANIM_MILD (ANIM_MODEST + 3)
-#define ANIM_QUIET (ANIM_MILD + 1)
-#define ANIM_BASHFUL (ANIM_QUIET + 2)
-#define ANIM_RASH (ANIM_BASHFUL + 3)
-#define ANIM_CALM (ANIM_RASH + 3)
-#define ANIM_GENTLE (ANIM_CALM + 1)
-#define ANIM_SASSY (ANIM_GENTLE + 1)
-#define ANIM_CAREFUL (ANIM_SASSY + 1)
-#define ANIM_QUIRKY (ANIM_CAREFUL + 5)
-
struct PokeblockFeed
{
struct Sprite *monSpritePtr;
@@ -141,35 +99,6 @@ static void SpriteCB_ThrownPokeblock(struct Sprite *);
EWRAM_DATA static struct PokeblockFeed *sPokeblockFeed = NULL;
EWRAM_DATA static struct CompressedSpritePalette sPokeblockSpritePal = {0};
-static const u8 sNatureToMonPokeblockAnim[NUM_NATURES][2] =
-{
- [NATURE_HARDY] = { ANIM_HARDY, AFFINE_NONE },
- [NATURE_LONELY] = { ANIM_LONELY, AFFINE_NONE },
- [NATURE_BRAVE] = { ANIM_BRAVE, AFFINE_TURN_UP },
- [NATURE_ADAMANT] = { ANIM_ADAMANT, AFFINE_NONE },
- [NATURE_NAUGHTY] = { ANIM_NAUGHTY, AFFINE_NONE },
- [NATURE_BOLD] = { ANIM_BOLD, AFFINE_NONE },
- [NATURE_DOCILE] = { ANIM_DOCILE, AFFINE_NONE },
- [NATURE_RELAXED] = { ANIM_RELAXED, AFFINE_TURN_UP_AND_DOWN },
- [NATURE_IMPISH] = { ANIM_IMPISH, AFFINE_NONE },
- [NATURE_LAX] = { ANIM_LAX, AFFINE_NONE },
- [NATURE_TIMID] = { ANIM_TIMID, AFFINE_NONE },
- [NATURE_HASTY] = { ANIM_HASTY, AFFINE_NONE },
- [NATURE_SERIOUS] = { ANIM_SERIOUS, AFFINE_TURN_DOWN },
- [NATURE_JOLLY] = { ANIM_JOLLY, AFFINE_NONE },
- [NATURE_NAIVE] = { ANIM_NAIVE, AFFINE_NONE },
- [NATURE_MODEST] = { ANIM_MODEST, AFFINE_TURN_DOWN_SLOW },
- [NATURE_MILD] = { ANIM_MILD, AFFINE_NONE },
- [NATURE_QUIET] = { ANIM_QUIET, AFFINE_NONE },
- [NATURE_BASHFUL] = { ANIM_BASHFUL, AFFINE_NONE },
- [NATURE_RASH] = { ANIM_RASH, AFFINE_NONE },
- [NATURE_CALM] = { ANIM_CALM, AFFINE_NONE },
- [NATURE_GENTLE] = { ANIM_GENTLE, AFFINE_TURN_DOWN_SLIGHT },
- [NATURE_SASSY] = { ANIM_SASSY, AFFINE_TURN_UP_HIGH },
- [NATURE_CAREFUL] = { ANIM_CAREFUL, AFFINE_NONE },
- [NATURE_QUIRKY] = { ANIM_QUIRKY, AFFINE_NONE },
-};
-
// Data for the animation the Pokémon does while readying to jump for the Pokéblock
// Each nature can have up to 8 anim 'stages' it progresses through, and each stage has its own array of data.
// The elements in each array correspond in order to the following:
@@ -996,7 +925,7 @@ static void CalculateMonAnimLength(void)
pokeblockFeed = sPokeblockFeed;
pokeblockFeed->monAnimLength = 1;
- animId = sNatureToMonPokeblockAnim[pokeblockFeed->nature][0];
+ animId = gNaturesInfo[pokeblockFeed->nature].pokeBlockAnim[0];
// Add up the time each stage of the animation will take
for (i = 0; i < 8; i++, animId++)
@@ -1014,7 +943,7 @@ static void UpdateMonAnim(void)
switch (pokeblockFeed->animRunState)
{
case 0:
- pokeblockFeed->animId = sNatureToMonPokeblockAnim[pokeblockFeed->nature][0];
+ pokeblockFeed->animId = gNaturesInfo[pokeblockFeed->nature].pokeBlockAnim[0];
pokeblockFeed->monSpritePtr = &gSprites[pokeblockFeed->monSpriteId_];
pokeblockFeed->savedMonSprite = *pokeblockFeed->monSpritePtr;
pokeblockFeed->animRunState = 10;
@@ -1023,7 +952,7 @@ static void UpdateMonAnim(void)
break;
case 10:
InitMonAnimStage();
- if (sNatureToMonPokeblockAnim[pokeblockFeed->nature][1] != AFFINE_NONE)
+ if (gNaturesInfo[pokeblockFeed->nature].pokeBlockAnim[1] != AFFINE_NONE)
{
// Initialize affine anim
pokeblockFeed->monSpritePtr->oam.affineMode = ST_OAM_AFFINE_DOUBLE;
@@ -1033,13 +962,13 @@ static void UpdateMonAnim(void)
}
pokeblockFeed->animRunState = 50;
case 50:
- if (sNatureToMonPokeblockAnim[pokeblockFeed->nature][1] != AFFINE_NONE)
+ if (gNaturesInfo[pokeblockFeed->nature].pokeBlockAnim[1] != AFFINE_NONE)
{
// Start affine anim
if (!pokeblockFeed->noMonFlip) // double negation, so mon's sprite is flipped
- StartSpriteAffineAnim(pokeblockFeed->monSpritePtr, sNatureToMonPokeblockAnim[pokeblockFeed->nature][1] + NUM_MON_AFFINES);
+ StartSpriteAffineAnim(pokeblockFeed->monSpritePtr, gNaturesInfo[pokeblockFeed->nature].pokeBlockAnim[1] + NUM_MON_AFFINES);
else
- StartSpriteAffineAnim(pokeblockFeed->monSpritePtr, sNatureToMonPokeblockAnim[pokeblockFeed->nature][1]);
+ StartSpriteAffineAnim(pokeblockFeed->monSpritePtr, gNaturesInfo[pokeblockFeed->nature].pokeBlockAnim[1]);
}
pokeblockFeed->animRunState = 60;
break;
diff --git a/src/pokedex.c b/src/pokedex.c
index 8e36c27d4e35..2cf8274db524 100644
--- a/src/pokedex.c
+++ b/src/pokedex.c
@@ -1387,9 +1387,9 @@ static const struct SearchOptionText sDexSearchColorOptions[] =
{},
};
-static const struct SearchOptionText sDexSearchTypeOptions[NUMBER_OF_MON_TYPES + 1] = // + 2 for "None" and terminator, - 1 for Mystery
+static const struct SearchOptionText sDexSearchTypeOptions[] =
{
- {gText_DexEmptyString, gText_DexSearchTypeNone},
+ {gText_DexEmptyString, gTypesInfo[TYPE_NONE].name},
{gText_DexEmptyString, gTypesInfo[TYPE_NORMAL].name},
{gText_DexEmptyString, gTypesInfo[TYPE_FIGHTING].name},
{gText_DexEmptyString, gTypesInfo[TYPE_FLYING].name},
@@ -2337,13 +2337,16 @@ static void CreatePokedexList(u8 dexMode, u8 order)
}
}
-static void PrintMonDexNumAndName(u8 windowId, u8 fontId, const u8 *str, u8 left, u8 top)
+static void PrintMonDexNum(u8 windowId, u8 fontId, const u8 *str, u8 left, u8 top)
{
- u8 color[3];
+ static const u8 color[3] = { TEXT_COLOR_TRANSPARENT, TEXT_DYNAMIC_COLOR_6, TEXT_COLOR_LIGHT_GRAY };
+ AddTextPrinterParameterized4(windowId, fontId, left * 8, (top * 8) + 1, 0, 0, color, TEXT_SKIP_DRAW, str);
+}
- color[0] = TEXT_COLOR_TRANSPARENT;
- color[1] = TEXT_DYNAMIC_COLOR_6;
- color[2] = TEXT_COLOR_LIGHT_GRAY;
+static void PrintMonName(u8 windowId, u8 fontId, const u8 *str, u8 left, u8 top)
+{
+ static const u8 color[3] = { TEXT_COLOR_TRANSPARENT, TEXT_DYNAMIC_COLOR_6, TEXT_COLOR_LIGHT_GRAY };
+ fontId = GetFontIdToFit(str, fontId, 0, 50);
AddTextPrinterParameterized4(windowId, fontId, left * 8, (top * 8) + 1, 0, 0, color, TEXT_SKIP_DRAW, str);
}
@@ -2453,7 +2456,7 @@ static void CreateMonDexNum(u16 entryNum, u8 left, u8 top, u16 unused)
text[offset++] = CHAR_0 + ((dexNum % 1000) % 100) / 10;
text[offset++] = CHAR_0 + ((dexNum % 1000) % 100) % 10;
text[offset++] = EOS;
- PrintMonDexNumAndName(0, FONT_NARROW, text, left, top);
+ PrintMonDexNum(0, FONT_NARROW, text, left, top);
}
static void CreateCaughtBall(bool16 owned, u8 x, u8 y, u16 unused)
@@ -2473,7 +2476,7 @@ static u8 CreateMonName(u16 num, u8 left, u8 top)
str = GetSpeciesName(num);
else
str = sText_TenDashes;
- PrintMonDexNumAndName(0, FONT_NARROW, str, left, top);
+ PrintMonName(0, FONT_NARROW, str, left, top);
return StringLength(str);
}
@@ -4671,7 +4674,7 @@ static void UNUSED UnusedPrintNum(u8 windowId, u16 num, u8 left, u8 top)
static u8 PrintCryScreenSpeciesName(u8 windowId, u16 num, u8 left, u8 top)
{
- u8 str[POKEMON_NAME_LENGTH + 1];
+ u8 str[POKEMON_NAME_BUFFER_SIZE];
u8 i;
for (i = 0; i < ARRAY_COUNT(str); i++)
@@ -4682,6 +4685,7 @@ static u8 PrintCryScreenSpeciesName(u8 windowId, u16 num, u8 left, u8 top)
default:
for (i = 0; GetSpeciesName(num)[i] != EOS && i < POKEMON_NAME_LENGTH; i++)
str[i] = GetSpeciesName(num)[i];
+ WrapFontIdToFit(str, str + i, FONT_NORMAL, 60);
break;
case 0:
for (i = 0; i < 5; i++)
@@ -5004,13 +5008,16 @@ static u8 LoadSearchMenu(void)
return CreateTask(Task_LoadSearchMenu, 0);
}
-static void PrintSearchText(const u8 *str, u32 x, u32 y)
+static void PrintSearchTextToFit(const u8 *str, u32 x, u32 y, u32 width)
{
- u8 color[3];
+ static const u8 color[3] = { TEXT_COLOR_TRANSPARENT, TEXT_DYNAMIC_COLOR_6, TEXT_COLOR_DARK_GRAY };
+ u32 fontId = GetFontIdToFit(str, FONT_NORMAL, 0, width);
+ AddTextPrinterParameterized4(0, fontId, x, y, 0, 0, color, TEXT_SKIP_DRAW, str);
+}
- color[0] = TEXT_COLOR_TRANSPARENT;
- color[1] = TEXT_DYNAMIC_COLOR_6;
- color[2] = TEXT_COLOR_DARK_GRAY;
+static void PrintSearchText(const u8 *str, u32 x, u32 y)
+{
+ static const u8 color[3] = { TEXT_COLOR_TRANSPARENT, TEXT_DYNAMIC_COLOR_6, TEXT_COLOR_DARK_GRAY };
AddTextPrinterParameterized4(0, FONT_NORMAL, x, y, 0, 0, color, TEXT_SKIP_DRAW, str);
}
@@ -5630,10 +5637,10 @@ static void PrintSelectedSearchParameters(u8 taskId)
PrintSearchText(sDexSearchColorOptions[searchParamId].title, 0x2D, 0x21);
searchParamId = gTasks[taskId].tCursorPos_TypeLeft + gTasks[taskId].tScrollOffset_TypeLeft;
- PrintSearchText(sDexSearchTypeOptions[searchParamId].title, 0x2D, 0x31);
+ PrintSearchTextToFit(sDexSearchTypeOptions[searchParamId].title, 0x2D, 0x31, 38);
searchParamId = gTasks[taskId].tCursorPos_TypeRight + gTasks[taskId].tScrollOffset_TypeRight;
- PrintSearchText(sDexSearchTypeOptions[searchParamId].title, 0x5D, 0x31);
+ PrintSearchTextToFit(sDexSearchTypeOptions[searchParamId].title, 0x5D, 0x31, 38);
searchParamId = gTasks[taskId].tCursorPos_Order + gTasks[taskId].tScrollOffset_Order;
PrintSearchText(sDexOrderOptions[searchParamId].title, 0x2D, 0x41);
diff --git a/src/pokedex_area_screen.c b/src/pokedex_area_screen.c
index d5aa3f96c905..4cfb79fb292d 100755
--- a/src/pokedex_area_screen.c
+++ b/src/pokedex_area_screen.c
@@ -250,72 +250,67 @@ static void FindMapsWithMon(u16 species)
if (sPokedexAreaScreen->alteringCaveId >= NUM_ALTERING_CAVE_TABLES)
sPokedexAreaScreen->alteringCaveId = 0;
- roamer = &gSaveBlock1Ptr->roamer;
- if (species != roamer->species)
- {
- sPokedexAreaScreen->numOverworldAreas = 0;
- sPokedexAreaScreen->numSpecialAreas = 0;
+ sPokedexAreaScreen->numOverworldAreas = 0;
+ sPokedexAreaScreen->numSpecialAreas = 0;
- // Check if this species should be hidden from the area map.
- // This only applies to Wynaut, to hide the encounters on Mirage Island.
- for (i = 0; i < ARRAY_COUNT(sSpeciesHiddenFromAreaScreen); i++)
- {
- if (sSpeciesHiddenFromAreaScreen[i] == species)
- return;
- }
+ // Check if this species should be hidden from the area map.
+ // This only applies to Wynaut, to hide the encounters on Mirage Island.
+ for (i = 0; i < ARRAY_COUNT(sSpeciesHiddenFromAreaScreen); i++)
+ {
+ if (sSpeciesHiddenFromAreaScreen[i] == species)
+ return;
+ }
- // Add Pokémon with special encounter circumstances (i.e. not listed
- // in the regular wild encounter table) to the area map.
- // This only applies to Feebas on Route 119, but it was clearly set
- // up to allow handling others.
- for (i = 0; sFeebasData[i][0] != NUM_SPECIES; i++)
+ // Add Pokémon with special encounter circumstances (i.e. not listed
+ // in the regular wild encounter table) to the area map.
+ // This only applies to Feebas on Route 119, but it was clearly set
+ // up to allow handling others.
+ for (i = 0; sFeebasData[i][0] != NUM_SPECIES; i++)
+ {
+ if (species == sFeebasData[i][0])
{
- if (species == sFeebasData[i][0])
+ switch (sFeebasData[i][1])
{
- switch (sFeebasData[i][1])
- {
- case MAP_GROUP_TOWNS_AND_ROUTES:
- SetAreaHasMon(sFeebasData[i][1], sFeebasData[i][2]);
- break;
- case MAP_GROUP_DUNGEONS:
- case MAP_GROUP_SPECIAL_AREA:
- SetSpecialMapHasMon(sFeebasData[i][1], sFeebasData[i][2]);
- break;
- }
+ case MAP_GROUP_TOWNS_AND_ROUTES:
+ SetAreaHasMon(sFeebasData[i][1], sFeebasData[i][2]);
+ break;
+ case MAP_GROUP_DUNGEONS:
+ case MAP_GROUP_SPECIAL_AREA:
+ SetSpecialMapHasMon(sFeebasData[i][1], sFeebasData[i][2]);
+ break;
}
}
+ }
- // Add regular species to the area map
- for (i = 0; gWildMonHeaders[i].mapGroup != MAP_GROUP(UNDEFINED); i++)
+ // Add regular species to the area map
+ for (i = 0; gWildMonHeaders[i].mapGroup != MAP_GROUP(UNDEFINED); i++)
+ {
+ if (MapHasSpecies(&gWildMonHeaders[i], species))
{
- if (MapHasSpecies(&gWildMonHeaders[i], species))
+ switch (gWildMonHeaders[i].mapGroup)
{
- switch (gWildMonHeaders[i].mapGroup)
- {
- case MAP_GROUP_TOWNS_AND_ROUTES:
- SetAreaHasMon(gWildMonHeaders[i].mapGroup, gWildMonHeaders[i].mapNum);
- break;
- case MAP_GROUP_DUNGEONS:
- case MAP_GROUP_SPECIAL_AREA:
- SetSpecialMapHasMon(gWildMonHeaders[i].mapGroup, gWildMonHeaders[i].mapNum);
- break;
- }
+ case MAP_GROUP_TOWNS_AND_ROUTES:
+ SetAreaHasMon(gWildMonHeaders[i].mapGroup, gWildMonHeaders[i].mapNum);
+ break;
+ case MAP_GROUP_DUNGEONS:
+ case MAP_GROUP_SPECIAL_AREA:
+ SetSpecialMapHasMon(gWildMonHeaders[i].mapGroup, gWildMonHeaders[i].mapNum);
+ break;
}
}
}
- else
+
+ // Add roamers to the area map
+ for (i = 0; i < ROAMER_COUNT; i++)
{
- // This is the roamer's species, show where the roamer is currently
- sPokedexAreaScreen->numSpecialAreas = 0;
- if (roamer->active)
- {
- GetRoamerLocation(&sPokedexAreaScreen->overworldAreasWithMons[0].mapGroup, &sPokedexAreaScreen->overworldAreasWithMons[0].mapNum);
- sPokedexAreaScreen->overworldAreasWithMons[0].regionMapSectionId = Overworld_GetMapHeaderByGroupAndId(sPokedexAreaScreen->overworldAreasWithMons[0].mapGroup, sPokedexAreaScreen->overworldAreasWithMons[0].mapNum)->regionMapSectionId;
- sPokedexAreaScreen->numOverworldAreas = 1;
- }
- else
+ roamer = &gSaveBlock1Ptr->roamer[i];
+ if (species == roamer->species && roamer->active)
{
- sPokedexAreaScreen->numOverworldAreas = 0;
+ // This is a roamer's species, show where this roamer is currently
+ struct OverworldArea *roamerLocation = &sPokedexAreaScreen->overworldAreasWithMons[sPokedexAreaScreen->numOverworldAreas];
+ GetRoamerLocation(i, &roamerLocation->mapGroup, &roamerLocation->mapNum);
+ roamerLocation->regionMapSectionId = Overworld_GetMapHeaderByGroupAndId(roamerLocation->mapGroup, roamerLocation->mapNum)->regionMapSectionId;
+ sPokedexAreaScreen->numOverworldAreas++;
}
}
}
diff --git a/src/pokedex_plus_hgss.c b/src/pokedex_plus_hgss.c
index 9afd928e82c5..ac57d4e6ffaa 100644
--- a/src/pokedex_plus_hgss.c
+++ b/src/pokedex_plus_hgss.c
@@ -245,9 +245,12 @@ static const u8 sText_EVO_WATER_SCROLL[] = _("ScrollOfWatrs is used");
static const u8 sText_EVO_ITEM_NIGHT[] = _("{STR_VAR_2} is used, night");
static const u8 sText_EVO_ITEM_DAY[] = _("{STR_VAR_2} is used, day");
static const u8 sText_EVO_ITEM_HOLD[] = _("{LV}{UP_ARROW}, holds {STR_VAR_2}");
-static const u8 sText_EVO_LEVEL_MOVE_TWENTY_TIMES[] = _("{LV}{UP_ARROW} after 20x {STR_VAR_2}");
-static const u8 sText_EVO_LEVEL_RECOIL_DAMAGE_MALE[] = _("{LV}{UP_ARROW} with {STR_VAR_2} recoil, male");
-static const u8 sText_EVO_LEVEL_RECOIL_DAMAGE_FEMALE[] = _("{LV}{UP_ARROW} with {STR_VAR_2} recoil, female");
+static const u8 sText_EVO_USE_MOVE_TWENTY_TIMES[] = _("{LV}{UP_ARROW} after 20x {STR_VAR_2}");
+static const u8 sText_EVO_RECOIL_DAMAGE_MALE[] = _("{LV}{UP_ARROW} with {STR_VAR_2} recoil, male");
+static const u8 sText_EVO_RECOIL_DAMAGE_FEMALE[] = _("{LV}{UP_ARROW} with {STR_VAR_2} recoil, female");
+static const u8 sText_EVO_ITEM_COUNT_999[] = _("{LV}{UP_ARROW} with 999 {STR_VAR_2} in bag");
+static const u8 sText_EVO_DEFEAT_THREE_WITH_ITEM[] = _("{LV}{UP_ARROW} defeating 3 {STR_VAR_3} holding {STR_VAR_2}");
+static const u8 sText_EVO_OVERWORLD_STEPS[] = _("{LV}{UP_ARROW} after {STR_VAR_2} steps");
static const u8 sText_EVO_UNKNOWN[] = _("Method unknown");
static const u8 sText_EVO_NONE[] = _("{STR_VAR_1} has no evolution.");
@@ -622,60 +625,6 @@ static void DestroyCategoryIcon(void);
static u16 NationalPokedexNumToSpeciesHGSS(u16 nationalNum);
-#define TAG_CATEGORY_ICONS 30004
-
-static const u16 sCategoryIcons_Pal[] = INCBIN_U16("graphics/interface/category_icons.gbapal");
-static const u32 sCategoryIcons_Gfx[] = INCBIN_U32("graphics/interface/category_icons.4bpp.lz");
-
-static const struct OamData sOamData_CategoryIcons =
-{
- .size = SPRITE_SIZE(16x16),
- .shape = SPRITE_SHAPE(16x16),
- .priority = 0,
-};
-static const struct CompressedSpriteSheet sSpriteSheet_CategoryIcons =
-{
- .data = sCategoryIcons_Gfx,
- .size = 16*16*3/2,
- .tag = TAG_CATEGORY_ICONS,
-};
-static const struct SpritePalette sSpritePal_CategoryIcons =
-{
- .data = sCategoryIcons_Pal,
- .tag = TAG_CATEGORY_ICONS
-};
-static const union AnimCmd sSpriteAnim_CategoryIcon0[] =
-{
- ANIMCMD_FRAME(0, 0),
- ANIMCMD_END
-};
-static const union AnimCmd sSpriteAnim_CategoryIcon1[] =
-{
- ANIMCMD_FRAME(4, 0),
- ANIMCMD_END
-};
-static const union AnimCmd sSpriteAnim_CategoryIcon2[] =
-{
- ANIMCMD_FRAME(8, 0),
- ANIMCMD_END
-};
-static const union AnimCmd *const sSpriteAnimTable_CategoryIcons[] =
-{
- sSpriteAnim_CategoryIcon0,
- sSpriteAnim_CategoryIcon1,
- sSpriteAnim_CategoryIcon2,
-};
-static const struct SpriteTemplate sSpriteTemplate_CategoryIcons =
-{
- .tileTag = TAG_CATEGORY_ICONS,
- .paletteTag = TAG_CATEGORY_ICONS,
- .oam = &sOamData_CategoryIcons,
- .anims = sSpriteAnimTable_CategoryIcons,
- .images = NULL,
- .affineAnims = gDummySpriteAffineAnimTable,
- .callback = SpriteCallbackDummy
-};
-
//Stat bars by DizzyEgg
#define TAG_STAT_BAR 4097
#define TAG_STAT_BAR_BG 4098
@@ -1953,9 +1902,9 @@ static const struct SearchOptionText sDexSearchColorOptions[] =
{},
};
-static const struct SearchOptionText sDexSearchTypeOptions[NUMBER_OF_MON_TYPES + 1] = // + 2 for "None" and terminator, - 1 for Mystery
+static const struct SearchOptionText sDexSearchTypeOptions[] =
{
- {gText_DexEmptyString, gText_DexSearchTypeNone},
+ {gText_DexEmptyString, gTypesInfo[TYPE_NONE].name},
{gText_DexEmptyString, gTypesInfo[TYPE_NORMAL].name},
{gText_DexEmptyString, gTypesInfo[TYPE_FIGHTING].name},
{gText_DexEmptyString, gTypesInfo[TYPE_FLYING].name},
@@ -4776,7 +4725,7 @@ static void LoadTilesetTilemapHGSS(u8 page)
static u8 ShowCategoryIcon(u32 category)
{
if (sPokedexView->categoryIconSpriteId == 0xFF)
- sPokedexView->categoryIconSpriteId = CreateSprite(&sSpriteTemplate_CategoryIcons, 139, 90, 0);
+ sPokedexView->categoryIconSpriteId = CreateSprite(&gSpriteTemplate_CategoryIcons, 139, 90, 0);
gSprites[sPokedexView->categoryIconSpriteId].invisible = FALSE;
StartSpriteAnim(&gSprites[sPokedexView->categoryIconSpriteId], category);
@@ -4919,8 +4868,8 @@ static void Task_LoadStatsScreen(u8 taskId)
CreateTypeIconSprites();
sPokedexView->categoryIconSpriteId = 0xFF;
LoadCompressedPalette(gMoveTypes_Pal, 0x1D0, 0x60);
- LoadCompressedSpriteSheet(&sSpriteSheet_CategoryIcons);
- LoadSpritePalette(&sSpritePal_CategoryIcons);
+ LoadCompressedSpriteSheet(&gSpriteSheet_CategoryIcons);
+ LoadSpritePalette(&gSpritePal_CategoryIcons);
gMain.state++;
break;
case 4:
@@ -6671,17 +6620,32 @@ static void PrintEvolutionTargetSpeciesAndMethod(u8 taskId, u16 species, u8 dept
CopyItemName(item, gStringVar2);
StringExpandPlaceholders(gStringVar4, sText_EVO_ITEM_HOLD );
break;
- case EVO_LEVEL_MOVE_TWENTY_TIMES:
+ case EVO_USE_MOVE_TWENTY_TIMES:
StringCopy(gStringVar2, GetMoveName(evolutions[i].param));
- StringExpandPlaceholders(gStringVar4, sText_EVO_LEVEL_MOVE_TWENTY_TIMES );
+ StringExpandPlaceholders(gStringVar4, sText_EVO_USE_MOVE_TWENTY_TIMES );
break;
- case EVO_LEVEL_RECOIL_DAMAGE_MALE:
+ case EVO_RECOIL_DAMAGE_MALE:
ConvertIntToDecimalStringN(gStringVar2, evolutions[i].param, STR_CONV_MODE_LEADING_ZEROS, 3);
- StringExpandPlaceholders(gStringVar4, sText_EVO_LEVEL_RECOIL_DAMAGE_MALE);
+ StringExpandPlaceholders(gStringVar4, sText_EVO_RECOIL_DAMAGE_MALE);
break;
- case EVO_LEVEL_RECOIL_DAMAGE_FEMALE:
+ case EVO_RECOIL_DAMAGE_FEMALE:
ConvertIntToDecimalStringN(gStringVar2, evolutions[i].param, STR_CONV_MODE_LEADING_ZEROS, 3);
- StringExpandPlaceholders(gStringVar4, sText_EVO_LEVEL_RECOIL_DAMAGE_FEMALE);
+ StringExpandPlaceholders(gStringVar4, sText_EVO_RECOIL_DAMAGE_FEMALE);
+ break;
+ case EVO_ITEM_COUNT_999:
+ item = evolutions[i].param;
+ CopyItemName(item, gStringVar2);
+ StringExpandPlaceholders(gStringVar4, sText_EVO_ITEM_COUNT_999);
+ break;
+ case EVO_DEFEAT_THREE_WITH_ITEM:
+ item = evolutions[i].param;
+ CopyItemName(item, gStringVar2);
+ StringCopy(gStringVar3, GetSpeciesName(species));
+ StringExpandPlaceholders(gStringVar4, sText_EVO_DEFEAT_THREE_WITH_ITEM);
+ break;
+ case EVO_OVERWORLD_STEPS:
+ ConvertIntToDecimalStringN(gStringVar2, evolutions[i].param, STR_CONV_MODE_LEADING_ZEROS, 4);
+ StringExpandPlaceholders(gStringVar4, sText_EVO_OVERWORLD_STEPS);
break;
default:
StringExpandPlaceholders(gStringVar4, sText_EVO_UNKNOWN);
diff --git a/src/pokemon.c b/src/pokemon.c
index 240dab132286..66fb83332f6c 100644
--- a/src/pokemon.c
+++ b/src/pokemon.c
@@ -12,6 +12,7 @@
#include "battle_z_move.h"
#include "data.h"
#include "event_data.h"
+#include "event_object_movement.h"
#include "evolution_scene.h"
#include "field_specials.h"
#include "field_weather.h"
@@ -46,6 +47,7 @@
#include "constants/battle_script_commands.h"
#include "constants/battle_partner.h"
#include "constants/cries.h"
+#include "constants/event_objects.h"
#include "constants/form_change_types.h"
#include "constants/hold_effects.h"
#include "constants/item_effects.h"
@@ -56,6 +58,7 @@
#include "constants/trainers.h"
#include "constants/union_room.h"
#include "constants/weather.h"
+#include "wild_encounter.h"
#define FRIENDSHIP_EVO_THRESHOLD ((P_FRIENDSHIP_EVO_THRESHOLD >= GEN_9) ? 160 : 220)
@@ -82,6 +85,7 @@ EWRAM_DATA struct Pokemon gEnemyParty[PARTY_SIZE] = {0};
EWRAM_DATA struct SpriteTemplate gMultiuseSpriteTemplate = {0};
EWRAM_DATA static struct MonSpritesGfxManager *sMonSpritesGfxManagers[MON_SPR_GFX_MANAGERS_COUNT] = {NULL};
EWRAM_DATA static u8 sTriedEvolving = 0;
+EWRAM_DATA u16 gFollowerSteps = 0;
#include "data/moves_info.h"
#include "data/abilities.h"
@@ -357,62 +361,316 @@ const struct SpindaSpot gSpindaSpotGraphics[] =
{.x = 34, .y = 26, .image = INCBIN_U16("graphics/pokemon/spinda/spots/spot_3.1bpp")}
};
-const u8 *const gNatureNamePointers[NUM_NATURES] =
-{
- [NATURE_HARDY] = COMPOUND_STRING("Hardy"),
- [NATURE_LONELY] = COMPOUND_STRING("Lonely"),
- [NATURE_BRAVE] = COMPOUND_STRING("Brave"),
- [NATURE_ADAMANT] = COMPOUND_STRING("Adamant"),
- [NATURE_NAUGHTY] = COMPOUND_STRING("Naughty"),
- [NATURE_BOLD] = COMPOUND_STRING("Bold"),
- [NATURE_DOCILE] = COMPOUND_STRING("Docile"),
- [NATURE_RELAXED] = COMPOUND_STRING("Relaxed"),
- [NATURE_IMPISH] = COMPOUND_STRING("Impish"),
- [NATURE_LAX] = COMPOUND_STRING("Lax"),
- [NATURE_TIMID] = COMPOUND_STRING("Timid"),
- [NATURE_HASTY] = COMPOUND_STRING("Hasty"),
- [NATURE_SERIOUS] = COMPOUND_STRING("Serious"),
- [NATURE_JOLLY] = COMPOUND_STRING("Jolly"),
- [NATURE_NAIVE] = COMPOUND_STRING("Naive"),
- [NATURE_MODEST] = COMPOUND_STRING("Modest"),
- [NATURE_MILD] = COMPOUND_STRING("Mild"),
- [NATURE_QUIET] = COMPOUND_STRING("Quiet"),
- [NATURE_BASHFUL] = COMPOUND_STRING("Bashful"),
- [NATURE_RASH] = COMPOUND_STRING("Rash"),
- [NATURE_CALM] = COMPOUND_STRING("Calm"),
- [NATURE_GENTLE] = COMPOUND_STRING("Gentle"),
- [NATURE_SASSY] = COMPOUND_STRING("Sassy"),
- [NATURE_CAREFUL] = COMPOUND_STRING("Careful"),
- [NATURE_QUIRKY] = COMPOUND_STRING("Quirky"),
-};
-
-const s8 gNatureStatTable[NUM_NATURES][NUM_NATURE_STATS] =
-{ // Attack Defense Speed Sp.Atk Sp. Def
- [NATURE_HARDY] = { 0, 0, 0, 0, 0 },
- [NATURE_LONELY] = { +1, -1, 0, 0, 0 },
- [NATURE_BRAVE] = { +1, 0, -1, 0, 0 },
- [NATURE_ADAMANT] = { +1, 0, 0, -1, 0 },
- [NATURE_NAUGHTY] = { +1, 0, 0, 0, -1 },
- [NATURE_BOLD] = { -1, +1, 0, 0, 0 },
- [NATURE_DOCILE] = { 0, 0, 0, 0, 0 },
- [NATURE_RELAXED] = { 0, +1, -1, 0, 0 },
- [NATURE_IMPISH] = { 0, +1, 0, -1, 0 },
- [NATURE_LAX] = { 0, +1, 0, 0, -1 },
- [NATURE_TIMID] = { -1, 0, +1, 0, 0 },
- [NATURE_HASTY] = { 0, -1, +1, 0, 0 },
- [NATURE_SERIOUS] = { 0, 0, 0, 0, 0 },
- [NATURE_JOLLY] = { 0, 0, +1, -1, 0 },
- [NATURE_NAIVE] = { 0, 0, +1, 0, -1 },
- [NATURE_MODEST] = { -1, 0, 0, +1, 0 },
- [NATURE_MILD] = { 0, -1, 0, +1, 0 },
- [NATURE_QUIET] = { 0, 0, -1, +1, 0 },
- [NATURE_BASHFUL] = { 0, 0, 0, 0, 0 },
- [NATURE_RASH] = { 0, 0, 0, +1, -1 },
- [NATURE_CALM] = { -1, 0, 0, 0, +1 },
- [NATURE_GENTLE] = { 0, -1, 0, 0, +1 },
- [NATURE_SASSY] = { 0, 0, -1, 0, +1 },
- [NATURE_CAREFUL] = { 0, 0, 0, -1, +1 },
- [NATURE_QUIRKY] = { 0, 0, 0, 0, 0 },
+// In Battle Palace, moves are chosen based on the pokemons nature rather than by the player
+// Moves are grouped into "Attack", "Defense", or "Support" (see PALACE_MOVE_GROUP_*)
+// Each nature has a certain percent chance of selecting a move from a particular group
+// and a separate percent chance for each group when at or below 50% HP
+// The table below doesn't list percentages for Support because you can subtract the other two
+// Support percentages are listed in comments off to the side instead
+#define PALACE_STYLE(atk, def, atkLow, defLow) {atk, atk + def, atkLow, atkLow + defLow}
+
+const struct NatureInfo gNaturesInfo[NUM_NATURES] =
+{
+ [NATURE_HARDY] =
+ {
+ .name = COMPOUND_STRING("Hardy"),
+ .statUp = STAT_ATK,
+ .statDown = STAT_ATK,
+ .backAnim = 0,
+ .pokeBlockAnim = {ANIM_HARDY, AFFINE_NONE},
+ .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlHardy,
+ .battlePalacePercents = PALACE_STYLE(61, 7, 61, 7), //32% support >= 50% HP, 32% support < 50% HP
+ .battlePalaceFlavorText = B_MSG_EAGER_FOR_MORE,
+ .battlePalaceSmokescreen = PALACE_TARGET_STRONGER,
+ },
+ [NATURE_LONELY] =
+ {
+ .name = COMPOUND_STRING("Lonely"),
+ .statUp = STAT_ATK,
+ .statDown = STAT_DEF,
+ .backAnim = 2,
+ .pokeBlockAnim = {ANIM_LONELY, AFFINE_NONE},
+ .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlLonely,
+ .battlePalacePercents = PALACE_STYLE(20, 25, 84, 8), //55%, 8%
+ .battlePalaceFlavorText = B_MSG_GLINT_IN_EYE,
+ .battlePalaceSmokescreen = PALACE_TARGET_STRONGER,
+ },
+ [NATURE_BRAVE] =
+ {
+ .name = COMPOUND_STRING("Brave"),
+ .statUp = STAT_ATK,
+ .statDown = STAT_SPEED,
+ .backAnim = 0,
+ .pokeBlockAnim = {ANIM_BRAVE, AFFINE_TURN_UP},
+ .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlBrave,
+ .battlePalacePercents = PALACE_STYLE(70, 15, 32, 60), //15%, 8%
+ .battlePalaceFlavorText = B_MSG_GETTING_IN_POS,
+ .battlePalaceSmokescreen = PALACE_TARGET_WEAKER,
+ },
+ [NATURE_ADAMANT] =
+ {
+ .name = COMPOUND_STRING("Adamant"),
+ .statUp = STAT_ATK,
+ .statDown = STAT_SPATK,
+ .backAnim = 0,
+ .pokeBlockAnim = {ANIM_ADAMANT, AFFINE_NONE},
+ .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlAdamant,
+ .battlePalacePercents = PALACE_STYLE(38, 31, 70, 15), //31%, 15%
+ .battlePalaceFlavorText = B_MSG_GLINT_IN_EYE,
+ .battlePalaceSmokescreen = PALACE_TARGET_STRONGER,
+ },
+ [NATURE_NAUGHTY] =
+ {
+ .name = COMPOUND_STRING("Naughty"),
+ .statUp = STAT_ATK,
+ .statDown = STAT_SPDEF,
+ .backAnim = 0,
+ .pokeBlockAnim = {ANIM_NAUGHTY, AFFINE_NONE},
+ .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlNaughty,
+ .battlePalacePercents = PALACE_STYLE(20, 70, 70, 22), //10%, 8%
+ .battlePalaceFlavorText = B_MSG_GLINT_IN_EYE,
+ .battlePalaceSmokescreen = PALACE_TARGET_WEAKER,
+ },
+ [NATURE_BOLD] =
+ {
+ .name = COMPOUND_STRING("Bold"),
+ .statUp = STAT_DEF,
+ .statDown = STAT_ATK,
+ .backAnim = 1,
+ .pokeBlockAnim = {ANIM_BOLD, AFFINE_NONE},
+ .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlBold,
+ .battlePalacePercents = PALACE_STYLE(30, 20, 32, 58), //50%, 10%
+ .battlePalaceFlavorText = B_MSG_GETTING_IN_POS,
+ .battlePalaceSmokescreen = PALACE_TARGET_WEAKER,
+ },
+ [NATURE_DOCILE] =
+ {
+ .name = COMPOUND_STRING("Docile"),
+ .statUp = STAT_DEF,
+ .statDown = STAT_DEF,
+ .backAnim = 1,
+ .pokeBlockAnim = {ANIM_DOCILE, AFFINE_NONE},
+ .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlDocileNaiveQuietQuirky,
+ .battlePalacePercents = PALACE_STYLE(56, 22, 56, 22), //22%, 22%
+ .battlePalaceFlavorText = B_MSG_EAGER_FOR_MORE,
+ .battlePalaceSmokescreen = PALACE_TARGET_RANDOM,
+ },
+ [NATURE_RELAXED] =
+ {
+ .name = COMPOUND_STRING("Relaxed"),
+ .statUp = STAT_DEF,
+ .statDown = STAT_SPEED,
+ .backAnim = 1,
+ .pokeBlockAnim = {ANIM_RELAXED, AFFINE_TURN_UP_AND_DOWN},
+ .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlRelaxed,
+ .battlePalacePercents = PALACE_STYLE(25, 15, 75, 15), //60%, 10%
+ .battlePalaceFlavorText = B_MSG_GLINT_IN_EYE,
+ .battlePalaceSmokescreen = PALACE_TARGET_STRONGER,
+ },
+ [NATURE_IMPISH] =
+ {
+ .name = COMPOUND_STRING("Impish"),
+ .statUp = STAT_DEF,
+ .statDown = STAT_SPATK,
+ .backAnim = 0,
+ .pokeBlockAnim = {ANIM_IMPISH, AFFINE_NONE},
+ .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlImpish,
+ .battlePalacePercents = PALACE_STYLE(69, 6, 28, 55), //25%, 17%
+ .battlePalaceFlavorText = B_MSG_GETTING_IN_POS,
+ .battlePalaceSmokescreen = PALACE_TARGET_STRONGER,
+ },
+ [NATURE_LAX] =
+ {
+ .name = COMPOUND_STRING("Lax"),
+ .statUp = STAT_DEF,
+ .statDown = STAT_SPDEF,
+ .backAnim = 1,
+ .pokeBlockAnim = {ANIM_LAX, AFFINE_NONE},
+ .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlLax,
+ .battlePalacePercents = PALACE_STYLE(35, 10, 29, 6), //55%, 65%
+ .battlePalaceFlavorText = B_MSG_GROWL_DEEPLY,
+ .battlePalaceSmokescreen = PALACE_TARGET_STRONGER,
+ },
+ [NATURE_TIMID] =
+ {
+ .name = COMPOUND_STRING("Timid"),
+ .statUp = STAT_SPEED,
+ .statDown = STAT_ATK,
+ .backAnim = 2,
+ .pokeBlockAnim = {ANIM_TIMID, AFFINE_NONE},
+ .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlTimid,
+ .battlePalacePercents = PALACE_STYLE(62, 10, 30, 20), //28%, 50%
+ .battlePalaceFlavorText = B_MSG_GROWL_DEEPLY,
+ .battlePalaceSmokescreen = PALACE_TARGET_WEAKER,
+ },
+ [NATURE_HASTY] =
+ {
+ .name = COMPOUND_STRING("Hasty"),
+ .statUp = STAT_SPEED,
+ .statDown = STAT_DEF,
+ .backAnim = 0,
+ .pokeBlockAnim = {ANIM_HASTY, AFFINE_NONE},
+ .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlHasty,
+ .battlePalacePercents = PALACE_STYLE(58, 37, 88, 6), //5%, 6%
+ .battlePalaceFlavorText = B_MSG_GLINT_IN_EYE,
+ .battlePalaceSmokescreen = PALACE_TARGET_WEAKER,
+ },
+ [NATURE_SERIOUS] =
+ {
+ .name = COMPOUND_STRING("Serious"),
+ .statUp = STAT_SPEED,
+ .statDown = STAT_SPEED,
+ .backAnim = 1,
+ .pokeBlockAnim = {ANIM_SERIOUS, AFFINE_TURN_DOWN},
+ .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlSerious,
+ .battlePalacePercents = PALACE_STYLE(34, 11, 29, 11), //55%, 60%
+ .battlePalaceFlavorText = B_MSG_EAGER_FOR_MORE,
+ .battlePalaceSmokescreen = PALACE_TARGET_WEAKER,
+ },
+ [NATURE_JOLLY] =
+ {
+ .name = COMPOUND_STRING("Jolly"),
+ .statUp = STAT_SPEED,
+ .statDown = STAT_SPATK,
+ .backAnim = 0,
+ .pokeBlockAnim = {ANIM_JOLLY, AFFINE_NONE},
+ .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlJolly,
+ .battlePalacePercents = PALACE_STYLE(35, 5, 35, 60), //60%, 5%
+ .battlePalaceFlavorText = B_MSG_GETTING_IN_POS,
+ .battlePalaceSmokescreen = PALACE_TARGET_STRONGER,
+ },
+ [NATURE_NAIVE] =
+ {
+ .name = COMPOUND_STRING("Naive"),
+ .statUp = STAT_SPEED,
+ .statDown = STAT_SPDEF,
+ .backAnim = 0,
+ .pokeBlockAnim = {ANIM_NAIVE, AFFINE_NONE},
+ .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlDocileNaiveQuietQuirky,
+ .battlePalacePercents = PALACE_STYLE(56, 22, 56, 22), //22%, 22%
+ .battlePalaceFlavorText = B_MSG_EAGER_FOR_MORE,
+ .battlePalaceSmokescreen = PALACE_TARGET_RANDOM,
+ },
+ [NATURE_MODEST] =
+ {
+ .name = COMPOUND_STRING("Modest"),
+ .statUp = STAT_SPATK,
+ .statDown = STAT_ATK,
+ .backAnim = 2,
+ .pokeBlockAnim = {ANIM_MODEST, AFFINE_TURN_DOWN_SLOW},
+ .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlModest,
+ .battlePalacePercents = PALACE_STYLE(35, 45, 34, 60), //20%, 6%
+ .battlePalaceFlavorText = B_MSG_GETTING_IN_POS,
+ .battlePalaceSmokescreen = PALACE_TARGET_WEAKER,
+ },
+ [NATURE_MILD] =
+ {
+ .name = COMPOUND_STRING("Mild"),
+ .statUp = STAT_SPATK,
+ .statDown = STAT_DEF,
+ .backAnim = 2,
+ .pokeBlockAnim = {ANIM_MILD, AFFINE_NONE},
+ .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlMild,
+ .battlePalacePercents = PALACE_STYLE(44, 50, 34, 6), //6%, 60%
+ .battlePalaceFlavorText = B_MSG_GROWL_DEEPLY,
+ .battlePalaceSmokescreen = PALACE_TARGET_STRONGER,
+ },
+ [NATURE_QUIET] =
+ {
+ .name = COMPOUND_STRING("Quiet"),
+ .statUp = STAT_SPATK,
+ .statDown = STAT_SPEED,
+ .backAnim = 2,
+ .pokeBlockAnim = {ANIM_QUIET, AFFINE_NONE},
+ .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlDocileNaiveQuietQuirky,
+ .battlePalacePercents = PALACE_STYLE(56, 22, 56, 22), //22%, 22%
+ .battlePalaceFlavorText = B_MSG_EAGER_FOR_MORE,
+ .battlePalaceSmokescreen = PALACE_TARGET_WEAKER,
+ },
+ [NATURE_BASHFUL] =
+ {
+ .name = COMPOUND_STRING("Bashful"),
+ .statUp = STAT_SPATK,
+ .statDown = STAT_SPATK,
+ .backAnim = 2,
+ .pokeBlockAnim = {ANIM_BASHFUL, AFFINE_NONE},
+ .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlBashful,
+ .battlePalacePercents = PALACE_STYLE(30, 58, 30, 58), //12%, 12%
+ .battlePalaceFlavorText = B_MSG_EAGER_FOR_MORE,
+ .battlePalaceSmokescreen = PALACE_TARGET_WEAKER,
+ },
+ [NATURE_RASH] =
+ {
+ .name = COMPOUND_STRING("Rash"),
+ .statUp = STAT_SPATK,
+ .statDown = STAT_SPDEF,
+ .backAnim = 1,
+ .pokeBlockAnim = {ANIM_RASH, AFFINE_NONE},
+ .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlRash,
+ .battlePalacePercents = PALACE_STYLE(30, 13, 27, 6), //57%, 67%
+ .battlePalaceFlavorText = B_MSG_GROWL_DEEPLY,
+ .battlePalaceSmokescreen = PALACE_TARGET_STRONGER,
+ },
+ [NATURE_CALM] =
+ {
+ .name = COMPOUND_STRING("Calm"),
+ .statUp = STAT_SPDEF,
+ .statDown = STAT_ATK,
+ .backAnim = 1,
+ .pokeBlockAnim = {ANIM_CALM, AFFINE_NONE},
+ .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlCalm,
+ .battlePalacePercents = PALACE_STYLE(40, 50, 25, 62), //10%, 13%
+ .battlePalaceFlavorText = B_MSG_GETTING_IN_POS,
+ .battlePalaceSmokescreen = PALACE_TARGET_STRONGER,
+ },
+ [NATURE_GENTLE] =
+ {
+ .name = COMPOUND_STRING("Gentle"),
+ .statUp = STAT_SPDEF,
+ .statDown = STAT_DEF,
+ .backAnim = 2,
+ .pokeBlockAnim = {ANIM_GENTLE, AFFINE_TURN_DOWN_SLIGHT},
+ .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlGentle,
+ .battlePalacePercents = PALACE_STYLE(18, 70, 90, 5), //12%, 5%
+ .battlePalaceFlavorText = B_MSG_GLINT_IN_EYE,
+ .battlePalaceSmokescreen = PALACE_TARGET_STRONGER,
+ },
+ [NATURE_SASSY] =
+ {
+ .name = COMPOUND_STRING("Sassy"),
+ .statUp = STAT_SPDEF,
+ .statDown = STAT_SPEED,
+ .backAnim = 1,
+ .pokeBlockAnim = {ANIM_SASSY, AFFINE_TURN_UP_HIGH},
+ .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlSassy,
+ .battlePalacePercents = PALACE_STYLE(88, 6, 22, 20), //6%, 58%
+ .battlePalaceFlavorText = B_MSG_GROWL_DEEPLY,
+ .battlePalaceSmokescreen = PALACE_TARGET_WEAKER,
+ },
+ [NATURE_CAREFUL] =
+ {
+ .name = COMPOUND_STRING("Careful"),
+ .statUp = STAT_SPDEF,
+ .statDown = STAT_SPATK,
+ .backAnim = 2,
+ .pokeBlockAnim = {ANIM_CAREFUL, AFFINE_NONE},
+ .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlCareful,
+ .battlePalacePercents = PALACE_STYLE(42, 50, 42, 5), //8%, 53%
+ .battlePalaceFlavorText = B_MSG_GROWL_DEEPLY,
+ .battlePalaceSmokescreen = PALACE_TARGET_WEAKER,
+ },
+ [NATURE_QUIRKY] =
+ {
+ .name = COMPOUND_STRING("Quirky"),
+ .statUp = STAT_SPDEF,
+ .statDown = STAT_SPDEF,
+ .backAnim = 1,
+ .pokeBlockAnim = {ANIM_QUIRKY, AFFINE_NONE},
+ .natureGirlMessage = BattleFrontier_Lounge5_Text_NatureGirlDocileNaiveQuietQuirky,
+ .battlePalacePercents = PALACE_STYLE(56, 22, 56, 22), //22%, 22%
+ .battlePalaceFlavorText = B_MSG_EAGER_FOR_MORE,
+ .battlePalaceSmokescreen = PALACE_TARGET_STRONGER,
+ },
};
#include "data/graphics/pokemon.h"
@@ -442,9 +700,11 @@ const s8 gNatureStatTable[NUM_NATURES][NUM_NATURE_STATS] =
#endif
#include "data/pokemon/teachable_learnsets.h"
+#include "data/pokemon/egg_moves.h"
#include "data/pokemon/form_species_tables.h"
#include "data/pokemon/form_change_tables.h"
#include "data/pokemon/form_change_table_pointers.h"
+#include "data/object_events/object_event_pic_tables_followers.h"
#include "data/pokemon/species_info.h"
@@ -743,6 +1003,20 @@ static const u32 sCompressedStatuses[] =
// - The maximum PP.
// - The maximum HP.
// - The maximum form countdown.
+
+// The following STATIC_ASSERT will prevent developers from compiling the game if the value of the constant on the left does not fit within the number of bits defined in PokemonSubstruct0 (currently located in include/pokemon.h).
+
+// To successfully compile, developers will need to do one of the following:
+// 1) Decrease the size of the constant.
+// 2) Increase the number of bits both on the struct AND in the corresponding assert. This will likely break user's saves unless there is free space after the member that is being adjsted.
+// 3) Repurpose unused IDs.
+
+// EXAMPLES
+// If a developer has added enough new items so that ITEMS_COUNT now equals 1200, they could...
+// 1) remove new items until ITEMS_COUNT is 1023, the max value that will fit in 10 bits.
+// 2) change heldItem:10 to heldItem:11 AND change the below assert for ITEMS_COUNT to check for (1 << 11).
+// 3) repurpose IDs from other items that aren't being used, like ITEM_GOLD_TEETH or ITEM_SS_TICKET until ITEMS_COUNT equals 1023, the max value that will fit in 10 bits.
+
STATIC_ASSERT(NUM_SPECIES < (1 << 11), PokemonSubstruct0_species_TooSmall);
STATIC_ASSERT(NUMBER_OF_MON_TYPES + 1 <= (1 << 5), PokemonSubstruct0_teraType_TooSmall);
STATIC_ASSERT(ITEMS_COUNT < (1 << 10), PokemonSubstruct0_heldItem_TooSmall);
@@ -870,6 +1144,14 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV,
{
isShiny = TRUE;
}
+ else if (P_ONLY_OBTAINABLE_SHINIES && InBattlePyramid())
+ {
+ isShiny = FALSE;
+ }
+ else if (P_NO_SHINIES_WITHOUT_POKEBALLS && !HasAtLeastOnePokeBall())
+ {
+ isShiny = FALSE;
+ }
else
{
u32 totalRerolls = 0;
@@ -877,6 +1159,8 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV,
totalRerolls += I_SHINY_CHARM_ADDITIONAL_ROLLS;
if (LURE_STEP_COUNT != 0)
totalRerolls += 1;
+ if (I_FISHING_CHAIN && gIsFishingEncounter)
+ totalRerolls += CalculateChainFishingShinyRolls();
while (GET_SHINY_VALUE(value, personality) >= SHINY_ODDS && totalRerolls > 0)
{
@@ -922,7 +1206,8 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV,
else
{
u32 iv;
- value = Random();
+ u32 ivRandom = Random32();
+ value = (u16)ivRandom;
iv = value & MAX_IV_MASK;
SetBoxMonData(boxMon, MON_DATA_HP_IV, &iv);
@@ -931,7 +1216,7 @@ void CreateBoxMon(struct BoxPokemon *boxMon, u16 species, u8 level, u8 fixedIV,
iv = (value & (MAX_IV_MASK << 10)) >> 10;
SetBoxMonData(boxMon, MON_DATA_DEF_IV, &iv);
- value = Random();
+ value = (u16)(ivRandom >> 16);
iv = value & MAX_IV_MASK;
SetBoxMonData(boxMon, MON_DATA_SPEED_IV, &iv);
@@ -1331,7 +1616,7 @@ void ConvertPokemonToBattleTowerPokemon(struct Pokemon *mon, struct BattleTowerP
dest->spDefenseIV = GetMonData(mon, MON_DATA_SPDEF_IV, NULL);
dest->abilityNum = GetMonData(mon, MON_DATA_ABILITY_NUM, NULL);
dest->personality = GetMonData(mon, MON_DATA_PERSONALITY, NULL);
- GetMonData(mon, MON_DATA_NICKNAME, dest->nickname);
+ GetMonData(mon, MON_DATA_NICKNAME10, dest->nickname);
}
static void CreateEventMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u8 hasFixedPersonality, u32 fixedPersonality, u8 otIdType, u32 fixedOtId)
@@ -1661,30 +1946,7 @@ void GiveMonInitialMoveset(struct Pokemon *mon)
GiveBoxMonInitialMoveset(&mon->box);
}
-void GiveBoxMonInitialMoveset(struct BoxPokemon *boxMon)
-{
- u16 species = GetBoxMonData(boxMon, MON_DATA_SPECIES, NULL);
- s32 level = GetLevelFromBoxMonExp(boxMon);
- s32 i;
- const struct LevelUpMove *learnset = GetSpeciesLevelUpLearnset(species);
-
- for (i = 0; learnset[i].move != LEVEL_UP_MOVE_END; i++)
- {
- if (learnset[i].level > level)
- break;
- if (learnset[i].level == 0)
- continue;
- if (GiveMoveToBoxMon(boxMon, learnset[i].move) == MON_HAS_MAX_MOVES)
- DeleteFirstMoveAndGiveMoveToBoxMon(boxMon, learnset[i].move);
- }
-}
-
-void GiveMonInitialMoveset_Fast(struct Pokemon *mon)
-{
- GiveBoxMonInitialMoveset_Fast(&mon->box);
-}
-
-void GiveBoxMonInitialMoveset_Fast(struct BoxPokemon *boxMon) //Credit: AsparagusEduardo
+void GiveBoxMonInitialMoveset(struct BoxPokemon *boxMon) //Credit: AsparagusEduardo
{
u16 species = GetBoxMonData(boxMon, MON_DATA_SPECIES, NULL);
s32 level = GetLevelFromBoxMonExp(boxMon);
@@ -2131,8 +2393,8 @@ u32 GetMonData2(struct Pokemon *mon, s32 field)
struct EvolutionTrackerBitfield
{
u16 a: 5;
- u16 b: 4;
- u16 unused: 7;
+ u16 b: 5;
+ u16 unused: 6;
};
union EvolutionTracker
@@ -2175,6 +2437,7 @@ u32 GetBoxMonData3(struct BoxPokemon *boxMon, s32 field, u8 *data)
switch (field)
{
case MON_DATA_NICKNAME:
+ case MON_DATA_NICKNAME10:
{
if (boxMon->isBadEgg)
{
@@ -2215,7 +2478,7 @@ u32 GetBoxMonData3(struct BoxPokemon *boxMon, s32 field, u8 *data)
// so if both are 0 we assume that this is a vanilla
// Pokémon and replace them with EOS. This means that
// two CHAR_SPACE at the end of a nickname are trimmed.
- if (POKEMON_NAME_LENGTH >= 12)
+ if (field != MON_DATA_NICKNAME10 && POKEMON_NAME_LENGTH >= 12)
{
if (substruct0->nickname11 == 0 && substruct0->nickname12 == 0)
{
@@ -2520,18 +2783,20 @@ u32 GetBoxMonData3(struct BoxPokemon *boxMon, s32 field, u8 *data)
retVal = substruct3->gigantamaxFactor;
break;
case MON_DATA_TERA_TYPE:
- {
- if (substruct0->teraType == 0)
+ if (gSpeciesInfo[substruct0->species].forceTeraType)
+ {
+ retVal = gSpeciesInfo[substruct0->species].forceTeraType;
+ }
+ else if (substruct0->teraType == TYPE_NONE) // Tera Type hasn't been modified so we can just use the personality
{
const u8 *types = gSpeciesInfo[substruct0->species].types;
retVal = (boxMon->personality & 0x1) == 0 ? types[0] : types[1];
}
else
{
- retVal = substruct0->teraType - 1;
+ retVal = substruct0->teraType;
}
break;
- }
case MON_DATA_EVOLUTION_TRACKER:
evoTracker.asField.a = substruct1->evolutionTracker1;
evoTracker.asField.b = substruct1->evolutionTracker2;
@@ -2601,6 +2866,9 @@ u32 GetBoxMonData3(struct BoxPokemon *boxMon, s32 field, u8 *data)
retVal = nature ^ boxMon->hiddenNatureModifier;
break;
}
+ case MON_DATA_DAYS_SINCE_FORM_CHANGE:
+ retVal = boxMon->daysSinceFormChange;
+ break;
default:
break;
}
@@ -2709,14 +2977,23 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg)
switch (field)
{
case MON_DATA_NICKNAME:
+ case MON_DATA_NICKNAME10:
{
s32 i;
for (i = 0; i < min(sizeof(boxMon->nickname), POKEMON_NAME_LENGTH); i++)
boxMon->nickname[i] = data[i];
- if (POKEMON_NAME_LENGTH >= 11)
- substruct0->nickname11 = data[10];
- if (POKEMON_NAME_LENGTH >= 12)
- substruct0->nickname12 = data[11];
+ if (field != MON_DATA_NICKNAME10)
+ {
+ if (POKEMON_NAME_LENGTH >= 11)
+ substruct0->nickname11 = data[10];
+ if (POKEMON_NAME_LENGTH >= 12)
+ substruct0->nickname12 = data[11];
+ }
+ else
+ {
+ substruct0->nickname11 = EOS;
+ substruct0->nickname12 = EOS;
+ }
break;
}
case MON_DATA_SPECIES:
@@ -2948,7 +3225,7 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg)
{
u32 teraType;
SET8(teraType);
- substruct0->teraType = 1 + teraType;
+ substruct0->teraType = teraType;
break;
}
case MON_DATA_EVOLUTION_TRACKER:
@@ -3026,6 +3303,9 @@ void SetBoxMonData(struct BoxPokemon *boxMon, s32 field, const void *dataArg)
boxMon->hiddenNatureModifier = nature ^ hiddenNature;
break;
}
+ case MON_DATA_DAYS_SINCE_FORM_CHANGE:
+ SET8(boxMon->daysSinceFormChange);
+ break;
}
}
@@ -3128,6 +3408,9 @@ u8 GetMonsStateToDoubles(void)
s32 i;
CalculatePlayerPartyCount();
+ if (OW_DOUBLE_APPROACH_WITH_ONE_MON)
+ return PLAYER_HAS_TWO_USABLE_MONS;
+
if (gPlayerPartyCount == 1)
return gPlayerPartyCount; // PLAYER_HAS_ONE_MON
@@ -3315,6 +3598,14 @@ const u16 *GetSpeciesTeachableLearnset(u16 species)
return learnset;
}
+const u16 *GetSpeciesEggMoves(u16 species)
+{
+ const u16 *learnset = gSpeciesInfo[SanitizeSpeciesId(species)].eggMoveLearnset;
+ if (learnset == NULL)
+ return gSpeciesInfo[SPECIES_NONE].eggMoveLearnset;
+ return learnset;
+}
+
const struct Evolution *GetSpeciesEvolutions(u16 species)
{
const struct Evolution *evolutions = gSpeciesInfo[SanitizeSpeciesId(species)].evolutions;
@@ -3391,9 +3682,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);
@@ -4402,18 +4693,47 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 mode, u16 evolutionItem, s
consumeItem = TRUE;
}
break;
- case EVO_LEVEL_MOVE_TWENTY_TIMES:
+ case EVO_USE_MOVE_TWENTY_TIMES:
if (evolutionTracker >= 20)
targetSpecies = evolutions[i].targetSpecies;
break;
- case EVO_LEVEL_RECOIL_DAMAGE_MALE:
+ case EVO_RECOIL_DAMAGE_MALE:
if (evolutionTracker >= evolutions[i].param && GetMonGender(mon) == MON_MALE)
targetSpecies = evolutions[i].targetSpecies;
break;
- case EVO_LEVEL_RECOIL_DAMAGE_FEMALE:
+ case EVO_RECOIL_DAMAGE_FEMALE:
if (evolutionTracker >= evolutions[i].param && GetMonGender(mon) == MON_FEMALE)
targetSpecies = evolutions[i].targetSpecies;
break;
+ case EVO_DEFEAT_THREE_WITH_ITEM:
+ if (evolutionTracker >= 3)
+ targetSpecies = evolutions[i].targetSpecies;
+ break;
+ case EVO_OVERWORLD_STEPS:
+ if (mon == GetFirstLiveMon() && gFollowerSteps >= evolutions[i].param)
+ targetSpecies = evolutions[i].targetSpecies;
+ break;
+ }
+ }
+ break;
+ case EVO_MODE_CANT_STOP:
+ level = GetMonData(mon, MON_DATA_LEVEL, 0);
+ friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, 0);
+
+ for (i = 0; evolutions[i].method != EVOLUTIONS_END; i++)
+ {
+ if (SanitizeSpeciesId(evolutions[i].targetSpecies) == SPECIES_NONE)
+ continue;
+
+ switch (evolutions[i].method)
+ {
+ case EVO_ITEM_COUNT_999:
+ if (CheckBagHasItem(evolutions[i].param, 999))
+ {
+ targetSpecies = evolutions[i].targetSpecies;
+ RemoveBagItem(evolutions[i].param, 999);
+ }
+ break;
}
}
break;
@@ -4788,38 +5108,15 @@ u8 GetTrainerEncounterMusicId(u16 trainerOpponentId)
u16 ModifyStatByNature(u8 nature, u16 stat, u8 statIndex)
{
-// Because this is a u16 it will be unable to store the
-// result of the multiplication for any stat > 595 for a
-// positive nature and > 728 for a negative nature.
-// Neither occur in the base game, but this can happen if
-// any Nature-affected base stat is increased to a value
-// above 248. The closest by default is Shuckle at 230.
-#ifdef BUGFIX
- u32 retVal;
-#else
- u16 retVal;
-#endif
-
// Don't modify HP, Accuracy, or Evasion by nature
- if (statIndex <= STAT_HP || statIndex > NUM_NATURE_STATS)
+ if (statIndex <= STAT_HP || statIndex > NUM_NATURE_STATS || gNaturesInfo[nature].statUp == gNaturesInfo[nature].statDown)
+ return stat;
+ else if (statIndex == gNaturesInfo[nature].statUp)
+ return stat * 110 / 100;
+ else if (statIndex == gNaturesInfo[nature].statDown)
+ return stat * 90 / 100;
+ else
return stat;
-
- switch (gNatureStatTable[nature][statIndex - 1])
- {
- case 1:
- retVal = stat * 110;
- retVal /= 100;
- break;
- case -1:
- retVal = stat * 90;
- retVal /= 100;
- break;
- default:
- retVal = stat;
- break;
- }
-
- return retVal;
}
void AdjustFriendship(struct Pokemon *mon, u8 event)
@@ -5513,12 +5810,17 @@ const u32 *GetMonFrontSpritePal(struct Pokemon *mon)
}
const u32 *GetMonSpritePalFromSpeciesAndPersonality(u16 species, bool32 isShiny, u32 personality)
+{
+ return GetMonSpritePalFromSpecies(species, isShiny, IsPersonalityFemale(species, personality));
+}
+
+const u32 *GetMonSpritePalFromSpecies(u16 species, bool32 isShiny, bool32 isFemale)
{
species = SanitizeSpeciesId(species);
if (isShiny)
{
- if (gSpeciesInfo[species].shinyPaletteFemale != NULL && IsPersonalityFemale(species, personality))
+ if (gSpeciesInfo[species].shinyPaletteFemale != NULL && isFemale)
return gSpeciesInfo[species].shinyPaletteFemale;
else if (gSpeciesInfo[species].shinyPalette != NULL)
return gSpeciesInfo[species].shinyPalette;
@@ -5527,7 +5829,7 @@ const u32 *GetMonSpritePalFromSpeciesAndPersonality(u16 species, bool32 isShiny,
}
else
{
- if (gSpeciesInfo[species].paletteFemale != NULL && IsPersonalityFemale(species, personality))
+ if (gSpeciesInfo[species].paletteFemale != NULL && isFemale)
return gSpeciesInfo[species].paletteFemale;
else if (gSpeciesInfo[species].palette != NULL)
return gSpeciesInfo[species].palette;
@@ -5539,6 +5841,10 @@ const u32 *GetMonSpritePalFromSpeciesAndPersonality(u16 species, bool32 isShiny,
bool8 IsMoveHM(u16 move)
{
int i = 0;
+
+ if (P_CAN_FORGET_HIDDEN_MOVE)
+ return FALSE;
+
while (sHMMoves[i] != HM_MOVES_END)
{
if (sHMMoves[i++] == move)
@@ -5647,9 +5953,9 @@ static inline bool32 CanFirstMonBoostHeldItemRarity(void)
return FALSE;
ability = GetMonAbility(&gPlayerParty[0]);
- if ((OW_COMPOUND_EYES < GEN_9) && ability == ABILITY_COMPOUND_EYES)
+ if (ability == ABILITY_COMPOUND_EYES)
return TRUE;
- else if ((OW_SUPER_LUCK == GEN_8) && ability == ABILITY_SUPER_LUCK)
+ else if ((OW_SUPER_LUCK >= GEN_8) && ability == ABILITY_SUPER_LUCK)
return TRUE;
return FALSE;
}
@@ -5947,7 +6253,7 @@ void HandleSetPokedexFlag(u16 nationalNum, u8 caseId, u32 personality)
bool8 HasTwoFramesAnimation(u16 species)
{
- return species != SPECIES_UNOWN;
+ return P_TWO_FRAME_FRONT_SPRITES && species != SPECIES_UNOWN;
}
static bool8 ShouldSkipFriendshipChange(void)
@@ -6240,6 +6546,7 @@ u16 GetFormChangeTargetSpeciesBoxMon(struct BoxPokemon *boxMon, u16 method, u32
break;
case FORM_CHANGE_WITHDRAW:
case FORM_CHANGE_FAINT:
+ case FORM_CHANGE_DAYS_PASSED:
targetSpecies = formChanges[i].targetSpecies;
break;
case FORM_CHANGE_STATUS:
@@ -6267,6 +6574,22 @@ u16 GetFormChangeTargetSpeciesBoxMon(struct BoxPokemon *boxMon, u16 method, u32
return targetSpecies;
}
+void TrySetDayLimitToFormChange(struct Pokemon *mon)
+{
+ u32 i;
+ u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL);
+ const struct FormChange *formChanges = GetSpeciesFormChanges(species);
+
+ for (i = 0; formChanges[i].method != FORM_CHANGE_TERMINATOR; i++)
+ {
+ if (formChanges[i].method == FORM_CHANGE_DAYS_PASSED && species != formChanges[i].targetSpecies)
+ {
+ SetMonData(mon, MON_DATA_DAYS_SINCE_FORM_CHANGE, &formChanges[i].param1);
+ break;
+ }
+ }
+}
+
bool32 DoesSpeciesHaveFormChangeMethod(u16 species, u16 method)
{
u32 i;
@@ -6545,8 +6868,8 @@ void HealBoxPokemon(struct BoxPokemon *boxMon)
u16 GetCryIdBySpecies(u16 species)
{
species = SanitizeSpeciesId(species);
- if (gSpeciesInfo[species].cryId >= CRY_COUNT)
- return 0;
+ if (P_CRIES_ENABLED == FALSE || gSpeciesInfo[species].cryId >= CRY_COUNT)
+ return CRY_NONE;
return gSpeciesInfo[species].cryId;
}
@@ -6573,3 +6896,48 @@ const u8 *GetMoveName(u16 moveId)
{
return gMovesInfo[moveId].name;
}
+
+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[moveId].battleAnimScript;
+}
+
+void UpdateDaysPassedSinceFormChange(u16 days)
+{
+ u32 i;
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ struct Pokemon *mon = &gPlayerParty[i];
+ u8 daysSinceFormChange;
+
+ if (!GetMonData(mon, MON_DATA_SPECIES, 0))
+ continue;
+
+ daysSinceFormChange = GetMonData(mon, MON_DATA_DAYS_SINCE_FORM_CHANGE, 0);
+ if (daysSinceFormChange == 0)
+ continue;
+
+ if (daysSinceFormChange > days)
+ daysSinceFormChange -= days;
+ else
+ daysSinceFormChange = 0;
+
+ SetMonData(mon, MON_DATA_DAYS_SINCE_FORM_CHANGE, &daysSinceFormChange);
+
+ if (daysSinceFormChange == 0)
+ {
+ u16 targetSpecies = GetFormChangeTargetSpecies(mon, FORM_CHANGE_DAYS_PASSED, 0);
+
+ if (targetSpecies != SPECIES_NONE)
+ {
+ SetMonData(mon, MON_DATA_SPECIES, &targetSpecies);
+ CalculateMonStats(mon);
+ }
+ }
+ }
+}
diff --git a/src/pokemon_animation.c b/src/pokemon_animation.c
index acf3d4b91f9b..d7c0bb343c5e 100644
--- a/src/pokemon_animation.c
+++ b/src/pokemon_animation.c
@@ -428,35 +428,6 @@ static const u8 sBackAnimationIds[] =
[(BACK_ANIM_SHAKE_GLOW_BLUE - 1) * 3] = ANIM_SHAKE_GLOW_BLUE_FAST, ANIM_SHAKE_GLOW_BLUE, ANIM_SHAKE_GLOW_BLUE_SLOW,
};
-static const u8 sBackAnimNatureModTable[NUM_NATURES] =
-{
- [NATURE_HARDY] = 0,
- [NATURE_LONELY] = 2,
- [NATURE_BRAVE] = 0,
- [NATURE_ADAMANT] = 0,
- [NATURE_NAUGHTY] = 0,
- [NATURE_BOLD] = 1,
- [NATURE_DOCILE] = 1,
- [NATURE_RELAXED] = 1,
- [NATURE_IMPISH] = 0,
- [NATURE_LAX] = 1,
- [NATURE_TIMID] = 2,
- [NATURE_HASTY] = 0,
- [NATURE_SERIOUS] = 1,
- [NATURE_JOLLY] = 0,
- [NATURE_NAIVE] = 0,
- [NATURE_MODEST] = 2,
- [NATURE_MILD] = 2,
- [NATURE_QUIET] = 2,
- [NATURE_BASHFUL] = 2,
- [NATURE_RASH] = 1,
- [NATURE_CALM] = 1,
- [NATURE_GENTLE] = 2,
- [NATURE_SASSY] = 1,
- [NATURE_CAREFUL] = 2,
- [NATURE_QUIRKY] = 1,
-};
-
static const union AffineAnimCmd sMonAffineAnim_0[] =
{
AFFINEANIMCMD_FRAME(256, 256, 0, 0),
@@ -579,7 +550,7 @@ void LaunchAnimationTaskForBackSprite(struct Sprite *sprite, u8 backAnimSet)
nature = GetNature(&gPlayerParty[gBattlerPartyIndexes[battlerId]]);
// * 3 below because each back anim has 3 variants depending on nature
- animId = 3 * backAnimSet + sBackAnimNatureModTable[nature];
+ animId = 3 * backAnimSet + gNaturesInfo[nature].backAnim;
gTasks[taskId].tAnimId = sBackAnimationIds[animId];
}
diff --git a/src/pokemon_icon.c b/src/pokemon_icon.c
index d7f9e24029e2..639f24327a77 100644
--- a/src/pokemon_icon.c
+++ b/src/pokemon_icon.c
@@ -2,7 +2,7 @@
#include "graphics.h"
#include "mail.h"
#include "palette.h"
-#include "pokemon_debug.h"
+#include "pokemon_sprite_visualizer.h"
#include "pokemon_icon.h"
#include "sprite.h"
#include "data.h"
diff --git a/src/pokemon_debug.c b/src/pokemon_sprite_visualizer.c
similarity index 89%
rename from src/pokemon_debug.c
rename to src/pokemon_sprite_visualizer.c
index 3f2291141744..c83716aeda74 100644
--- a/src/pokemon_debug.c
+++ b/src/pokemon_sprite_visualizer.c
@@ -8,6 +8,7 @@
#include "constants/songs.h"
#include "data.h"
#include "decompress.h"
+#include "event_object_movement.h"
#include "field_weather.h"
#include "gpu_regs.h"
#include "graphics.h"
@@ -24,7 +25,7 @@
#include "pokedex.h"
#include "pokemon.h"
#include "pokemon_animation.h"
-#include "pokemon_debug.h"
+#include "pokemon_sprite_visualizer.h"
#include "pokemon_icon.h"
#include "reset_rtc_screen.h"
#include "scanline_effect.h"
@@ -38,8 +39,9 @@
#include "trainer_pokemon_sprites.h"
#include "constants/items.h"
+#include "constants/event_objects.h"
-#if DEBUG_POKEMON_MENU == TRUE
+#if DEBUG_POKEMON_SPRITE_VISUALIZER == TRUE
extern const struct BattleBackground sBattleTerrainTable[];
extern const struct CompressedSpriteSheet gSpriteSheet_EnemyShadow;
extern const struct SpriteTemplate gSpriteTemplate_EnemyShadow;
@@ -47,13 +49,44 @@ extern const struct SpritePalette sSpritePalettes_HealthBoxHealthBar[2];
extern const struct UCoords8 sBattlerCoords[][MAX_BATTLERS_COUNT] ;
static const u16 sBgColor[] = {RGB_WHITE};
-static struct PokemonDebugMenu *GetStructPtr(u8 taskId)
+static struct PokemonSpriteVisualizer *GetStructPtr(u8 taskId)
{
u8 *taskDataPtr = (u8 *)(&gTasks[taskId].data[0]);
- return (struct PokemonDebugMenu*)(T1_READ_PTR(taskDataPtr));
+ return (struct PokemonSpriteVisualizer*)(T1_READ_PTR(taskDataPtr));
}
+static const union AnimCmd sAnim_Follower_1[] =
+{
+ ANIMCMD_FRAME(0, 30),
+ ANIMCMD_FRAME(1, 30),
+ ANIMCMD_FRAME(0, 30),
+ ANIMCMD_FRAME(1, 30),
+ ANIMCMD_FRAME(0, 10),
+ ANIMCMD_FRAME(2, 30),
+ ANIMCMD_FRAME(3, 30),
+ ANIMCMD_FRAME(2, 30),
+ ANIMCMD_FRAME(3, 30),
+ ANIMCMD_FRAME(2, 10),
+ ANIMCMD_FRAME(4, 30),
+ ANIMCMD_FRAME(5, 30),
+ ANIMCMD_FRAME(4, 30),
+ ANIMCMD_FRAME(5, 30),
+ ANIMCMD_FRAME(4, 10),
+ ANIMCMD_FRAME(4, 30, .hFlip = TRUE),
+ ANIMCMD_FRAME(5, 30, .hFlip = TRUE),
+ ANIMCMD_FRAME(4, 30, .hFlip = TRUE),
+ ANIMCMD_FRAME(5, 30, .hFlip = TRUE),
+ ANIMCMD_FRAME(4, 10, .hFlip = TRUE),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const sAnims_Follower[] =
+{
+ sAnim_GeneralFrame0,
+ sAnim_Follower_1,
+};
+
//BgTemplates
static const struct BgTemplate sBgTemplates[] =
{
@@ -96,7 +129,7 @@ static const struct BgTemplate sBgTemplates[] =
};
//WindowTemplates
-static const struct WindowTemplate sPokemonDebugWindowTemplate[] =
+static const struct WindowTemplate sPokemonSpriteVisualizerWindowTemplate[] =
{
[WIN_NAME_NUMBERS] = {
.bg = 0,
@@ -365,16 +398,16 @@ const u8 gBattleBackgroundTerrainNames[][26] =
[BATTLE_TERRAIN_PLAIN] = _("NORMAL - PLAIN "),
};
//Function declarations
-static void PrintDigitChars(struct PokemonDebugMenu *data);
-static void SetUpModifyArrows(struct PokemonDebugMenu *data);
-static void UpdateBattlerValue(struct PokemonDebugMenu *data);
+static void PrintDigitChars(struct PokemonSpriteVisualizer *data);
+static void SetUpModifyArrows(struct PokemonSpriteVisualizer *data);
+static void UpdateBattlerValue(struct PokemonSpriteVisualizer *data);
static void ValueToCharDigits(u8 *charDigits, u32 newValue, u8 maxDigits);
-static bool32 TryMoveDigit(struct PokemonDebugModifyArrows *modArrows, bool32 moveUp);
-static void CB2_Debug_Runner(void);
-static void ResetBGs_Debug_Menu(u16);
-static void Handle_Input_Debug_Pokemon(u8);
-static void ReloadPokemonSprites(struct PokemonDebugMenu *data);
-static void Exit_Debug_Pokemon(u8);
+static bool32 TryMoveDigit(struct PokemonSpriteVisualizerModifyArrows *modArrows, bool32 moveUp);
+static void CB2_PokemonSpriteVisualizerRunner(void);
+static void ResetBGs_PokemonSpriteVisualizer(u16);
+static void HandleInput_PokemonSpriteVisualizer(u8);
+static void ReloadPokemonSprites(struct PokemonSpriteVisualizer *data);
+static void Exit_PokemonSpriteVisualizer(u8);
//Text handling functions
static void UNUSED PadString(const u8 *src, u8 *dst)
@@ -390,7 +423,7 @@ static void UNUSED PadString(const u8 *src, u8 *dst)
dst[i] = EOS;
}
-static void PrintInstructionsOnWindow(struct PokemonDebugMenu *data)
+static void PrintInstructionsOnWindow(struct PokemonSpriteVisualizer *data)
{
u8 fontId = 0;
u8 x = 2;
@@ -470,7 +503,7 @@ static void SetStructPtr(u8 taskId, void *ptr)
//Digit and arrow functions
#define VAL_U16 0
-static void PrintDigitChars(struct PokemonDebugMenu *data)
+static void PrintDigitChars(struct PokemonSpriteVisualizer *data)
{
s32 i;
u16 species = data->modifyArrows.currValue;
@@ -539,7 +572,7 @@ static void ValueToCharDigits(u8 *charDigits, u32 newValue, u8 maxDigits)
charDigits[i] = valueDigits[i] + CHAR_0;
}
-static void SetArrowInvisibility(struct PokemonDebugMenu *data)
+static void SetArrowInvisibility(struct PokemonSpriteVisualizer *data)
{
switch (data->currentSubmenu)
{
@@ -564,7 +597,7 @@ static void SetArrowInvisibility(struct PokemonDebugMenu *data)
}
}
-static void SetUpModifyArrows(struct PokemonDebugMenu *data)
+static void SetUpModifyArrows(struct PokemonSpriteVisualizer *data)
{
LoadSpritePalette(&gSpritePalette_Arrow);
data->modifyArrows.arrowSpriteId[0] = CreateSprite(&gSpriteTemplate_Arrow, MODIFY_DIGITS_ARROW_X, MODIFY_DIGITS_ARROW1_Y, 0);
@@ -582,7 +615,7 @@ static void SetUpModifyArrows(struct PokemonDebugMenu *data)
ValueToCharDigits(data->modifyArrows.charDigits, data->modifyArrows.currValue, data->modifyArrows.maxDigits);
}
-static void SetUpOptionArrows(struct PokemonDebugMenu *data)
+static void SetUpOptionArrows(struct PokemonSpriteVisualizer *data)
{
LoadSpritePalette(&gSpritePalette_Arrow);
data->optionArrows.arrowSpriteId[0] = CreateSprite(&gSpriteTemplate_Arrow, OPTIONS_ARROW_1_X, OPTIONS_ARROW_Y, 0);
@@ -593,7 +626,7 @@ static void SetUpOptionArrows(struct PokemonDebugMenu *data)
gSprites[data->optionArrows.arrowSpriteId[0]].invisible = TRUE;
}
-static void SetUpYPosModifyArrows(struct PokemonDebugMenu *data)
+static void SetUpYPosModifyArrows(struct PokemonSpriteVisualizer *data)
{
LoadSpritePalette(&gSpritePalette_Arrow);
data->yPosModifyArrows.arrowSpriteId[0] = CreateSprite(&gSpriteTemplate_Arrow, OPTIONS_ARROW_1_X, OPTIONS_ARROW_Y, 0);
@@ -604,7 +637,7 @@ static void SetUpYPosModifyArrows(struct PokemonDebugMenu *data)
gSprites[data->yPosModifyArrows.arrowSpriteId[0]].invisible = TRUE;
}
-static bool32 TryMoveDigit(struct PokemonDebugModifyArrows *modArrows, bool32 moveUp)
+static bool32 TryMoveDigit(struct PokemonSpriteVisualizerModifyArrows *modArrows, bool32 moveUp)
{
s32 i;
u8 charDigits[MODIFY_DIGITS_MAX];
@@ -668,7 +701,7 @@ static bool32 TryMoveDigit(struct PokemonDebugModifyArrows *modArrows, bool32 mo
}
}
-static void UpdateBattlerValue(struct PokemonDebugMenu *data)
+static void UpdateBattlerValue(struct PokemonSpriteVisualizer *data)
{
switch (data->modifyArrows.typeOfVal)
{
@@ -678,59 +711,17 @@ static void UpdateBattlerValue(struct PokemonDebugMenu *data)
}
}
-//Sprite functions
-static const u32 *GetMonSpritePalStructCustom(u16 species, bool8 isFemale, bool8 isShiny)
-{
- if (isShiny)
- {
- if (gSpeciesInfo[species].shinyPaletteFemale != NULL && isFemale)
- return gSpeciesInfo[species].shinyPaletteFemale;
- else if (gSpeciesInfo[species].shinyPalette != NULL)
- return gSpeciesInfo[species].shinyPalette;
- else
- return gSpeciesInfo[SPECIES_NONE].shinyPalette;
- }
- else
- {
- if (gSpeciesInfo[species].paletteFemale != NULL && isFemale)
- return gSpeciesInfo[species].paletteFemale;
- else if (gSpeciesInfo[species].palette != NULL)
- return gSpeciesInfo[species].palette;
- else
- return gSpeciesInfo[SPECIES_NONE].palette;
- }
-}
-
static void BattleLoadOpponentMonSpriteGfxCustom(u16 species, bool8 isFemale, bool8 isShiny, u8 battlerId)
{
- const void *lzPaletteData;
- u16 paletteOffset = 0x100 + battlerId * 16;;
-
- if (isShiny)
- {
- if (gSpeciesInfo[species].shinyPaletteFemale != NULL && isFemale)
- lzPaletteData = gSpeciesInfo[species].shinyPaletteFemale;
- else if (gSpeciesInfo[species].shinyPalette != NULL)
- lzPaletteData = gSpeciesInfo[species].shinyPalette;
- else
- lzPaletteData = gSpeciesInfo[SPECIES_NONE].shinyPalette;
- }
- else
- {
- if (gSpeciesInfo[species].paletteFemale != NULL && isFemale)
- lzPaletteData = gSpeciesInfo[species].paletteFemale;
- else if (gSpeciesInfo[species].palette != NULL)
- lzPaletteData = gSpeciesInfo[species].palette;
- else
- lzPaletteData = gSpeciesInfo[SPECIES_NONE].palette;
- }
+ const u32 *lzPaletteData = GetMonSpritePalFromSpecies(species, isShiny, isFemale);
+ u16 paletteOffset = OBJ_PLTT_ID(battlerId);
LZDecompressWram(lzPaletteData, gDecompressionBuffer);
- LoadPalette(gDecompressionBuffer, paletteOffset, 0x20);
- LoadPalette(gDecompressionBuffer, 0x80 + battlerId * 16, 0x20);
+ LoadPalette(gDecompressionBuffer, paletteOffset, PLTT_SIZE_4BPP);
+ LoadPalette(gDecompressionBuffer, BG_PLTT_ID(8) + BG_PLTT_ID(battlerId), PLTT_SIZE_4BPP);
}
-static void SetConstSpriteValues(struct PokemonDebugMenu *data)
+static void SetConstSpriteValues(struct PokemonSpriteVisualizer *data)
{
u16 species = data->currentmonId;
data->constSpriteValues.frontPicCoords = gSpeciesInfo[species].frontPicYOffset;
@@ -738,7 +729,7 @@ static void SetConstSpriteValues(struct PokemonDebugMenu *data)
data->constSpriteValues.backPicCoords = gSpeciesInfo[species].backPicYOffset;
}
-static void ResetOffsetSpriteValues(struct PokemonDebugMenu *data)
+static void ResetOffsetSpriteValues(struct PokemonSpriteVisualizer *data)
{
data->offsetsSpriteValues.offset_back_picCoords = 0;
data->offsetsSpriteValues.offset_front_picCoords = 0;
@@ -766,7 +757,7 @@ static u8 GetBattlerSpriteFinal_YCustom(u16 species, s8 offset_picCoords, s8 off
return y;
}
-static void UpdateShadowSpriteInvisible(struct PokemonDebugMenu *data)
+static void UpdateShadowSpriteInvisible(struct PokemonSpriteVisualizer *data)
{
if (data->constSpriteValues.frontElevation + data->offsetsSpriteValues.offset_front_elevation == 0)
gSprites[data->frontShadowSpriteId].invisible = TRUE;
@@ -783,7 +774,36 @@ static void SpriteCB_EnemyShadowCustom(struct Sprite *shadowSprite)
shadowSprite->x2 = battlerSprite->x2;
}
-static void LoadAndCreateEnemyShadowSpriteCustom(struct PokemonDebugMenu *data, u16 species)
+static void SpriteCB_Follower(struct Sprite *sprite)
+{
+ if (sprite->animDelayCounter == 0)
+ {
+ sprite->animDelayCounter = 60;
+ switch (sprite->animNum)
+ {
+ default:
+ case 0:
+ case 1:
+ StartSpriteAnim(sprite, GetFaceDirectionAnimNum(DIR_NORTH));
+ break;
+ case 2:
+ StartSpriteAnim(sprite, GetFaceDirectionAnimNum(DIR_WEST));
+ break;
+ case 3:
+ StartSpriteAnim(sprite, GetFaceDirectionAnimNum(DIR_EAST));
+ break;
+ case 4:
+ StartSpriteAnim(sprite, GetFaceDirectionAnimNum(DIR_SOUTH));
+ break;
+ }
+ }
+ else
+ {
+ sprite->animDelayCounter--;
+ }
+}
+
+static void LoadAndCreateEnemyShadowSpriteCustom(struct PokemonSpriteVisualizer *data, u16 species)
{
u8 x, y;
bool8 invisible = FALSE;
@@ -883,7 +903,7 @@ static void LoadBattleBg(u8 battleBgType, u8 battleTerrain)
}
static void PrintBattleBgName(u8 taskId)
{
- struct PokemonDebugMenu *data = GetStructPtr(taskId);
+ struct PokemonSpriteVisualizer *data = GetStructPtr(taskId);
u8 fontId = 0;
u8 text[30+1];
@@ -895,7 +915,7 @@ static void PrintBattleBgName(u8 taskId)
}
static void UpdateBattleBg(u8 taskId, bool8 increment)
{
- struct PokemonDebugMenu *data = GetStructPtr(taskId);
+ struct PokemonSpriteVisualizer *data = GetStructPtr(taskId);
if (data->battleBgType == MAP_BATTLE_SCENE_NORMAL)
{
@@ -951,7 +971,7 @@ static void UpdateBattleBg(u8 taskId, bool8 increment)
// Main functions
static void UpdateMonAnimNames(u8 taskId)
{
- struct PokemonDebugMenu *data = GetStructPtr(taskId);
+ struct PokemonSpriteVisualizer *data = GetStructPtr(taskId);
u8 frontAnim = data->animIdFront;
u8 backAnim = data->animIdBack;
u8 text[34];
@@ -974,7 +994,7 @@ static void UpdateMonAnimNames(u8 taskId)
PrintBattleBgName(taskId);
}
-static void UpdateYPosOffsetText(struct PokemonDebugMenu *data)
+static void UpdateYPosOffsetText(struct PokemonSpriteVisualizer *data)
{
u8 text[34];
u8 fontId = 0;
@@ -1025,12 +1045,12 @@ static void UpdateYPosOffsetText(struct PokemonDebugMenu *data)
AddTextPrinterParameterized(WIN_BOTTOM_RIGHT, fontId, text, x_new_val, y, 0, NULL);
}
-static void ResetPokemonDebugWindows(void)
+static void ResetPokemonSpriteVisualizerWindows(void)
{
u8 i;
FreeAllWindowBuffers();
- InitWindows(sPokemonDebugWindowTemplate);
+ InitWindows(sPokemonSpriteVisualizerWindowTemplate);
for (i = 0; i < WIN_END + 1; i++)
{
@@ -1043,11 +1063,11 @@ static void ResetPokemonDebugWindows(void)
#define MALE_PERSONALITY 0xFE
#define FEMALE_PERSONALITY 0X0
-void CB2_Debug_Pokemon(void)
+void CB2_Pokemon_Sprite_Visualizer(void)
{
u8 taskId;
const u32 *palette;
- struct PokemonDebugMenu *data;
+ struct PokemonSpriteVisualizer *data;
u16 species;
s16 offset_y;
u8 front_x = sBattlerCoords[0][1].x;
@@ -1059,7 +1079,7 @@ void CB2_Debug_Pokemon(void)
default:
SetVBlankCallback(NULL);
FreeMonSpritesGfx();
- ResetBGs_Debug_Menu(0);
+ ResetBGs_PokemonSpriteVisualizer(0);
DmaFillLarge16(3, 0, (u8 *)VRAM, VRAM_SIZE, 0x1000)
DmaClear32(3, OAM, OAM_SIZE);
DmaClear16(3, PLTT, PLTT_SIZE);
@@ -1083,7 +1103,7 @@ void CB2_Debug_Pokemon(void)
gMain.state++;
break;
case 2:
- ResetPokemonDebugWindows();
+ ResetPokemonSpriteVisualizerWindows();
gMain.state++;
break;
case 3:
@@ -1099,9 +1119,9 @@ void CB2_Debug_Pokemon(void)
ShowBg(3);
//input task handler
- taskId = CreateTask(Handle_Input_Debug_Pokemon, 0);
+ taskId = CreateTask(HandleInput_PokemonSpriteVisualizer, 0);
- data = AllocZeroed(sizeof(struct PokemonDebugMenu));
+ data = AllocZeroed(sizeof(struct PokemonSpriteVisualizer));
SetStructPtr(taskId, data);
data->currentmonId = SPECIES_BULBASAUR;
@@ -1111,7 +1131,7 @@ void CB2_Debug_Pokemon(void)
PrintInstructionsOnWindow(data);
//Palettes
- palette = GetMonSpritePalStructCustom(species, data->isFemale, data->isShiny);
+ palette = GetMonSpritePalFromSpecies(species, data->isShiny, data->isFemale);
LoadCompressedSpritePaletteWithTag(palette, species);
//Front
HandleLoadSpecialPokePic(TRUE, gMonSpritesGfxPtr->spritesGfx[1], species, (data->isFemale ? FEMALE_PERSONALITY : MALE_PERSONALITY));
@@ -1133,15 +1153,20 @@ void CB2_Debug_Pokemon(void)
BattleLoadOpponentMonSpriteGfxCustom(species, data->isFemale, data->isShiny, 4);
SetMultiuseSpriteTemplateToPokemon(species, 2);
offset_y = gSpeciesInfo[species].backPicYOffset;
- data->backspriteId = CreateSprite(&gMultiuseSpriteTemplate, DEBUG_MON_BACK_X, DEBUG_MON_BACK_Y + offset_y, 0);
+ data->backspriteId = CreateSprite(&gMultiuseSpriteTemplate, VISUALIZER_MON_BACK_X, VISUALIZER_MON_BACK_Y + offset_y, 0);
gSprites[data->backspriteId].oam.paletteNum = 4;
gSprites[data->backspriteId].callback = SpriteCallbackDummy;
gSprites[data->backspriteId].oam.priority = 0;
//Icon Sprite
- data->iconspriteId = CreateMonIcon(species, SpriteCB_MonIcon, DEBUG_ICON_X, DEBUG_ICON_Y, 4, (data->isFemale ? FEMALE_PERSONALITY : MALE_PERSONALITY));
+ data->iconspriteId = CreateMonIcon(species, SpriteCB_MonIcon, VISUALIZER_ICON_X, VISUALIZER_ICON_Y, 4, (data->isFemale ? FEMALE_PERSONALITY : MALE_PERSONALITY));
gSprites[data->iconspriteId].oam.priority = 0;
+ //Follower Sprite
+ data->followerspriteId = CreateObjectGraphicsSprite(OBJ_EVENT_GFX_MON_BASE + species, SpriteCB_Follower, VISUALIZER_FOLLOWER_X, VISUALIZER_FOLLOWER_Y, 0);
+ gSprites[data->followerspriteId].oam.priority = 0;
+ gSprites[data->followerspriteId].anims = sAnims_Follower;
+
//Modify Arrows
SetUpModifyArrows(data);
PrintDigitChars(data);
@@ -1169,13 +1194,13 @@ void CB2_Debug_Pokemon(void)
case 4:
EnableInterrupts(1);
SetVBlankCallback(VBlankCB);
- SetMainCallback2(CB2_Debug_Runner);
+ SetMainCallback2(CB2_PokemonSpriteVisualizerRunner);
m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 0x80);
break;
}
}
-static void CB2_Debug_Runner(void)
+static void CB2_PokemonSpriteVisualizerRunner(void)
{
RunTasks();
AnimateSprites();
@@ -1183,7 +1208,7 @@ static void CB2_Debug_Runner(void)
UpdatePaletteFade();
}
-static void ResetBGs_Debug_Menu(u16 a)
+static void ResetBGs_PokemonSpriteVisualizer(u16 a)
{
if (!(a & DISPCNT_BG0_ON))
{
@@ -1222,11 +1247,11 @@ static void ResetBGs_Debug_Menu(u16 a)
}
}
-static void ApplyOffsetSpriteValues(struct PokemonDebugMenu *data)
+static void ApplyOffsetSpriteValues(struct PokemonSpriteVisualizer *data)
{
u16 species = data->currentmonId;
//Back
- gSprites[data->backspriteId].y = DEBUG_MON_BACK_Y + gSpeciesInfo[species].backPicYOffset + data->offsetsSpriteValues.offset_back_picCoords;
+ gSprites[data->backspriteId].y = VISUALIZER_MON_BACK_Y + gSpeciesInfo[species].backPicYOffset + data->offsetsSpriteValues.offset_back_picCoords;
//Front
gSprites[data->frontspriteId].y = GetBattlerSpriteFinal_YCustom(species, data->offsetsSpriteValues.offset_front_picCoords, data->offsetsSpriteValues.offset_front_elevation);
@@ -1236,7 +1261,7 @@ static void ApplyOffsetSpriteValues(struct PokemonDebugMenu *data)
static void UpdateSubmenuOneOptionValue(u8 taskId, bool8 increment)
{
- struct PokemonDebugMenu *data = GetStructPtr(taskId);
+ struct PokemonSpriteVisualizer *data = GetStructPtr(taskId);
u8 option = data->submenuYpos[1];
switch (option)
@@ -1281,7 +1306,7 @@ static void UpdateSubmenuOneOptionValue(u8 taskId, bool8 increment)
case 3:
if (GetSpeciesFormTable(data->currentmonId) != NULL)
{
- struct PokemonDebugModifyArrows *modArrows = &data->modifyArrows;
+ struct PokemonSpriteVisualizerModifyArrows *modArrows = &data->modifyArrows;
u8 formId = GetFormIdFromFormSpeciesId(data->currentmonId);
const u16 *formTable = GetSpeciesFormTable(data->currentmonId);
if (increment)
@@ -1324,7 +1349,7 @@ static void UpdateSubmenuOneOptionValue(u8 taskId, bool8 increment)
static void UpdateSubmenuTwoOptionValue(u8 taskId, bool8 increment)
{
- struct PokemonDebugMenu *data = GetStructPtr(taskId);
+ struct PokemonSpriteVisualizer *data = GetStructPtr(taskId);
u16 species = data->currentmonId;
u8 option = data->submenuYpos[2];
s8 offset;
@@ -1349,7 +1374,7 @@ static void UpdateSubmenuTwoOptionValue(u8 taskId, bool8 increment)
offset -= 1;
}
data->offsetsSpriteValues.offset_back_picCoords = offset;
- gSprites[data->backspriteId].y = DEBUG_MON_BACK_Y + gSpeciesInfo[species].backPicYOffset + offset;
+ gSprites[data->backspriteId].y = VISUALIZER_MON_BACK_Y + gSpeciesInfo[species].backPicYOffset + offset;
break;
case 1: //Front picCoords
offset = data->offsetsSpriteValues.offset_front_picCoords;
@@ -1420,9 +1445,9 @@ static void Task_AnimateAfterDelay(u8 taskId)
}
}
-static void Handle_Input_Debug_Pokemon(u8 taskId)
+static void HandleInput_PokemonSpriteVisualizer(u8 taskId)
{
- struct PokemonDebugMenu *data = GetStructPtr(taskId);
+ struct PokemonSpriteVisualizer *data = GetStructPtr(taskId);
struct Sprite *Frontsprite = &gSprites[data->frontspriteId];
struct Sprite *Backsprite = &gSprites[data->backspriteId];
@@ -1483,7 +1508,7 @@ static void Handle_Input_Debug_Pokemon(u8 taskId)
else if (JOY_NEW(B_BUTTON))
{
BeginNormalPaletteFade(PALETTES_ALL, 0, 0, 0x10, RGB_BLACK);
- gTasks[taskId].func = Exit_Debug_Pokemon;
+ gTasks[taskId].func = Exit_PokemonSpriteVisualizer;
PlaySE(SE_PC_OFF);
}
else if (JOY_NEW(DPAD_DOWN))
@@ -1637,7 +1662,7 @@ static void Handle_Input_Debug_Pokemon(u8 taskId)
#undef sDelay
#undef sAnimId
-static void ReloadPokemonSprites(struct PokemonDebugMenu *data)
+static void ReloadPokemonSprites(struct PokemonSpriteVisualizer *data)
{
const u32 *palette;
u16 species = data->currentmonId;
@@ -1648,6 +1673,7 @@ static void ReloadPokemonSprites(struct PokemonDebugMenu *data)
DestroySprite(&gSprites[data->frontspriteId]);
DestroySprite(&gSprites[data->backspriteId]);
DestroySprite(&gSprites[data->iconspriteId]);
+ DestroySprite(&gSprites[data->followerspriteId]);
FreeMonSpritesGfx();
ResetSpriteData();
@@ -1663,7 +1689,7 @@ static void ReloadPokemonSprites(struct PokemonDebugMenu *data)
PrintInstructionsOnWindow(data);
//Palettes
- palette = GetMonSpritePalStructCustom(species, data->isFemale, data->isShiny);
+ palette = GetMonSpritePalFromSpecies(species, data->isShiny, data->isFemale);
LoadCompressedSpritePaletteWithTag(palette, species);
//Front
HandleLoadSpecialPokePic(TRUE, gMonSpritesGfxPtr->spritesGfx[1], species, (data->isFemale ? FEMALE_PERSONALITY : MALE_PERSONALITY));
@@ -1683,15 +1709,24 @@ static void ReloadPokemonSprites(struct PokemonDebugMenu *data)
BattleLoadOpponentMonSpriteGfxCustom(species, data->isFemale, data->isShiny, 5);
SetMultiuseSpriteTemplateToPokemon(species, 2);
offset_y = gSpeciesInfo[species].backPicYOffset;
- data->backspriteId = CreateSprite(&gMultiuseSpriteTemplate, DEBUG_MON_BACK_X, DEBUG_MON_BACK_Y + offset_y, 0);
+ data->backspriteId = CreateSprite(&gMultiuseSpriteTemplate, VISUALIZER_MON_BACK_X, VISUALIZER_MON_BACK_Y + offset_y, 0);
gSprites[data->backspriteId].oam.paletteNum = 5;
gSprites[data->backspriteId].callback = SpriteCallbackDummy;
gSprites[data->backspriteId].oam.priority = 0;
//Icon Sprite
- data->iconspriteId = CreateMonIcon(species, SpriteCB_MonIcon, DEBUG_ICON_X, DEBUG_ICON_Y, 4, (data->isFemale ? FEMALE_PERSONALITY : MALE_PERSONALITY));
+ data->iconspriteId = CreateMonIcon(species, SpriteCB_MonIcon, VISUALIZER_ICON_X, VISUALIZER_ICON_Y, 4, (data->isFemale ? FEMALE_PERSONALITY : MALE_PERSONALITY));
gSprites[data->iconspriteId].oam.priority = 0;
+ //Follower Sprite
+ data->followerspriteId = CreateObjectGraphicsSprite(OBJ_EVENT_GFX_MON_BASE + species + (data->isShiny ? SPECIES_SHINY_TAG : 0),
+ SpriteCB_Follower,
+ VISUALIZER_FOLLOWER_X,
+ VISUALIZER_FOLLOWER_Y,
+ 0);
+ gSprites[data->followerspriteId].oam.priority = 0;
+ gSprites[data->followerspriteId].anims = sAnims_Follower;
+
//Modify Arrows
LoadSpritePalette(&gSpritePalette_Arrow);
data->modifyArrows.arrowSpriteId[0] = CreateSprite(&gSpriteTemplate_Arrow, MODIFY_DIGITS_ARROW_X + (data->modifyArrows.currentDigit * 6), MODIFY_DIGITS_ARROW1_Y, 0);
@@ -1716,11 +1751,11 @@ static void ReloadPokemonSprites(struct PokemonDebugMenu *data)
CopyWindowToVram(WIN_FOOTPRINT, COPYWIN_GFX);
}
-static void Exit_Debug_Pokemon(u8 taskId)
+static void Exit_PokemonSpriteVisualizer(u8 taskId)
{
if (!gPaletteFade.active)
{
- struct PokemonDebugMenu *data = GetStructPtr(taskId);
+ struct PokemonSpriteVisualizer *data = GetStructPtr(taskId);
Free(data);
FreeMonSpritesGfx();
DestroyTask(taskId);
diff --git a/src/pokemon_storage_system.c b/src/pokemon_storage_system.c
index 1bcc89244c14..fe65df011485 100644
--- a/src/pokemon_storage_system.c
+++ b/src/pokemon_storage_system.c
@@ -6,6 +6,7 @@
#include "dma3.h"
#include "dynamic_placeholder_text_util.h"
#include "event_data.h"
+#include "event_object_movement.h"
#include "field_screen_effect.h"
#include "field_weather.h"
#include "fldeff_misc.h"
@@ -53,9 +54,19 @@
// PC main menu options
enum {
+#if OW_PC_MOVE_ORDER <= GEN_3
OPTION_WITHDRAW,
OPTION_DEPOSIT,
OPTION_MOVE_MONS,
+#elif OW_PC_MOVE_ORDER >= GEN_4 && OW_PC_MOVE_ORDER <= GEN_6_XY
+ OPTION_DEPOSIT,
+ OPTION_WITHDRAW,
+ OPTION_MOVE_MONS,
+#elif OW_PC_MOVE_ORDER >= GEN_7
+ OPTION_MOVE_MONS,
+ OPTION_DEPOSIT,
+ OPTION_WITHDRAW,
+#endif
OPTION_MOVE_ITEMS,
OPTION_EXIT,
OPTIONS_COUNT
@@ -717,8 +728,6 @@ static void MultiMove_DeselectColumn(u8, u8, u8);
// Move Items mode
static bool32 IsItemIconAtPosition(u8, u8);
-static const u32 *GetItemIconPic(u16);
-static const u32 *GetItemIconPalette(u16);
static u8 GetNewItemIconIdx(void);
static void SetItemIconPosition(u8, u8, u8);
static void LoadItemIconGfx(u8, const u32 *, const u32 *);
@@ -1428,9 +1437,9 @@ s16 GetFirstFreeBoxSpot(u8 boxId)
return -1; // all spots are taken
}
-u8 CountPartyNonEggMons(void)
+u32 CountPartyNonEggMons(void)
{
- u16 i, count;
+ u32 i, count;
for (i = 0, count = 0; i < PARTY_SIZE; i++)
{
@@ -4019,16 +4028,16 @@ static void PrintDisplayMonInfo(void)
FillWindowPixelBuffer(WIN_DISPLAY_INFO, PIXEL_FILL(1));
if (sStorage->boxOption != OPTION_MOVE_ITEMS)
{
- AddTextPrinterParameterized(WIN_DISPLAY_INFO, FONT_NORMAL, sStorage->displayMonNameText, 6, 0, TEXT_SKIP_DRAW, NULL);
- AddTextPrinterParameterized(WIN_DISPLAY_INFO, FONT_SHORT, sStorage->displayMonSpeciesName, 6, 15, TEXT_SKIP_DRAW, NULL);
+ AddTextPrinterParameterized(WIN_DISPLAY_INFO, GetFontIdToFit(sStorage->displayMonNameText, FONT_NORMAL, 0, WindowWidthPx(WIN_DISPLAY_INFO) - 6), sStorage->displayMonNameText, 6, 0, TEXT_SKIP_DRAW, NULL);
+ AddTextPrinterParameterized(WIN_DISPLAY_INFO, GetFontIdToFit(sStorage->displayMonNameText, FONT_SHORT, 0, WindowWidthPx(WIN_DISPLAY_INFO) - 12), sStorage->displayMonSpeciesName, 6, 15, TEXT_SKIP_DRAW, NULL);
AddTextPrinterParameterized(WIN_DISPLAY_INFO, FONT_SHORT, sStorage->displayMonGenderLvlText, 10, 29, TEXT_SKIP_DRAW, NULL);
- AddTextPrinterParameterized(WIN_DISPLAY_INFO, FONT_SMALL, sStorage->displayMonItemName, 6, 43, TEXT_SKIP_DRAW, NULL);
+ AddTextPrinterParameterized(WIN_DISPLAY_INFO, GetFontIdToFit(sStorage->displayMonItemName, FONT_SMALL, 0, WindowWidthPx(WIN_DISPLAY_INFO) - 6), sStorage->displayMonItemName, 6, 43, TEXT_SKIP_DRAW, NULL);
}
else
{
- AddTextPrinterParameterized(WIN_DISPLAY_INFO, FONT_SMALL, sStorage->displayMonItemName, 6, 0, TEXT_SKIP_DRAW, NULL);
- AddTextPrinterParameterized(WIN_DISPLAY_INFO, FONT_NORMAL, sStorage->displayMonNameText, 6, 13, TEXT_SKIP_DRAW, NULL);
- AddTextPrinterParameterized(WIN_DISPLAY_INFO, FONT_SHORT, sStorage->displayMonSpeciesName, 6, 28, TEXT_SKIP_DRAW, NULL);
+ AddTextPrinterParameterized(WIN_DISPLAY_INFO, GetFontIdToFit(sStorage->displayMonItemName, FONT_SMALL, 0, WindowWidthPx(WIN_DISPLAY_INFO) - 6), sStorage->displayMonItemName, 6, 0, TEXT_SKIP_DRAW, NULL);
+ AddTextPrinterParameterized(WIN_DISPLAY_INFO, GetFontIdToFit(sStorage->displayMonNameText, FONT_NORMAL, 0, WindowWidthPx(WIN_DISPLAY_INFO) - 6), sStorage->displayMonNameText, 6, 13, TEXT_SKIP_DRAW, NULL);
+ AddTextPrinterParameterized(WIN_DISPLAY_INFO, GetFontIdToFit(sStorage->displayMonSpeciesName, FONT_SHORT, 0, WindowWidthPx(WIN_DISPLAY_INFO) - 12), sStorage->displayMonSpeciesName, 6, 28, TEXT_SKIP_DRAW, NULL);
AddTextPrinterParameterized(WIN_DISPLAY_INFO, FONT_SHORT, sStorage->displayMonGenderLvlText, 10, 42, TEXT_SKIP_DRAW, NULL);
}
@@ -6404,9 +6413,15 @@ static void RefreshDisplayMon(void)
static void SetMovingMonData(u8 boxId, u8 position)
{
if (boxId == TOTAL_BOXES_COUNT)
+ {
sStorage->movingMon = gPlayerParty[sCursorPosition];
+ if (&gPlayerParty[sCursorPosition] == GetFirstLiveMon())
+ gFollowerSteps = 0;
+ }
else
+ {
BoxMonAtToMon(boxId, position, &sStorage->movingMon);
+ }
PurgeMonOrBoxMon(boxId, position);
sMovingMonOrigBoxId = boxId;
@@ -6419,9 +6434,15 @@ static void SetPlacedMonData(u8 boxId, u8 position)
HealPokemon(&sStorage->movingMon);
if (boxId == TOTAL_BOXES_COUNT)
+ {
gPlayerParty[position] = sStorage->movingMon;
+ if (&gPlayerParty[position] == GetFirstLiveMon())
+ gFollowerSteps = 0;
+ }
else
+ {
SetBoxMonAt(boxId, position, &sStorage->movingMon.box);
+ }
}
static void PurgeMonOrBoxMon(u8 boxId, u8 position)
@@ -6509,6 +6530,7 @@ static bool8 TryHideReleaseMon(void)
static void ReleaseMon(void)
{
u8 boxId;
+ u16 item = ITEM_NONE;
DestroyReleaseMonIcon();
if (sIsMonBeingMoved)
@@ -6518,11 +6540,21 @@ static void ReleaseMon(void)
else
{
if (sCursorArea == CURSOR_AREA_IN_PARTY)
+ {
boxId = TOTAL_BOXES_COUNT;
+ if (OW_PC_RELEASE_ITEM >= GEN_8)
+ item = GetMonData(&gPlayerParty[sCursorPosition], MON_DATA_HELD_ITEM);
+ }
else
+ {
boxId = StorageGetCurrentBox();
+ if (OW_PC_RELEASE_ITEM >= GEN_8)
+ item = GetBoxMonDataAt(boxId, sCursorPosition, MON_DATA_HELD_ITEM);
+ }
PurgeMonOrBoxMon(boxId, sCursorPosition);
+ if (item != ITEM_NONE)
+ AddBagItem(item, 1);
}
TryRefreshDisplayMon();
}
@@ -9253,16 +9285,6 @@ static void SetItemIconActive(u8 id, bool8 active)
sStorage->itemIcons[id].sprite->invisible = (active == FALSE);
}
-static const u32 *GetItemIconPic(u16 itemId)
-{
- return GetItemIconPicOrPalette(itemId, 0);
-}
-
-static const u32 *GetItemIconPalette(u16 itemId)
-{
- return GetItemIconPicOrPalette(itemId, 1);
-}
-
static void PrintItemDescription(void)
{
const u8 *description;
diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c
index d47d5d7f2719..e81ef0b0669f 100644
--- a/src/pokemon_summary_screen.c
+++ b/src/pokemon_summary_screen.c
@@ -28,7 +28,7 @@
#include "palette.h"
#include "pokeball.h"
#include "pokemon.h"
-#include "pokemon_debug.h"
+#include "pokemon_sprite_visualizer.h"
#include "pokemon_storage_system.h"
#include "pokemon_summary_screen.h"
#include "region_map.h"
@@ -740,9 +740,6 @@ static const u8 sMovesPPLayout[] = _("{PP}{DYNAMIC 0}/{DYNAMIC 1}");
#define TAG_MON_MARKINGS 30003
#define TAG_CATEGORY_ICONS 30004
-static const u16 sCategoryIcons_Pal[] = INCBIN_U16("graphics/interface/category_icons.gbapal");
-static const u32 sCategoryIcons_Gfx[] = INCBIN_U32("graphics/interface/category_icons.4bpp.lz");
-
static const struct OamData sOamData_CategoryIcons =
{
.size = SPRITE_SIZE(16x16),
@@ -750,16 +747,16 @@ static const struct OamData sOamData_CategoryIcons =
.priority = 0,
};
-static const struct CompressedSpriteSheet sSpriteSheet_CategoryIcons =
+const struct CompressedSpriteSheet gSpriteSheet_CategoryIcons =
{
- .data = sCategoryIcons_Gfx,
+ .data = gCategoryIcons_Gfx,
.size = 16*16*3/2,
.tag = TAG_CATEGORY_ICONS,
};
-static const struct SpritePalette sSpritePal_CategoryIcons =
+const struct SpritePalette gSpritePal_CategoryIcons =
{
- .data = sCategoryIcons_Pal,
+ .data = gCategoryIcons_Pal,
.tag = TAG_CATEGORY_ICONS
};
@@ -788,7 +785,7 @@ static const union AnimCmd *const sSpriteAnimTable_CategoryIcons[] =
sSpriteAnim_CategoryIcon2,
};
-static const struct SpriteTemplate sSpriteTemplate_CategoryIcons =
+const struct SpriteTemplate gSpriteTemplate_CategoryIcons =
{
.tileTag = TAG_CATEGORY_ICONS,
.paletteTag = TAG_CATEGORY_ICONS,
@@ -815,6 +812,10 @@ static const struct OamData sOamData_MoveTypes =
.paletteNum = 0,
.affineParam = 0,
};
+static const union AnimCmd sSpriteAnim_TypeNone[] = {
+ ANIMCMD_FRAME(TYPE_NONE * 8, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
static const union AnimCmd sSpriteAnim_TypeNormal[] = {
ANIMCMD_FRAME(TYPE_NORMAL * 8, 0, FALSE, FALSE),
ANIMCMD_END
@@ -891,6 +892,10 @@ static const union AnimCmd sSpriteAnim_TypeFairy[] = {
ANIMCMD_FRAME(TYPE_FAIRY * 8, 0, FALSE, FALSE),
ANIMCMD_END
};
+static const union AnimCmd sSpriteAnim_TypeStellar[] = {
+ ANIMCMD_FRAME(TYPE_STELLAR * 8, 0, FALSE, FALSE),
+ ANIMCMD_END
+};
static const union AnimCmd sSpriteAnim_CategoryCool[] = {
ANIMCMD_FRAME((CONTEST_CATEGORY_COOL + NUMBER_OF_MON_TYPES) * 8, 0, FALSE, FALSE),
ANIMCMD_END
@@ -912,30 +917,32 @@ static const union AnimCmd sSpriteAnim_CategoryTough[] = {
ANIMCMD_END
};
static const union AnimCmd *const sSpriteAnimTable_MoveTypes[NUMBER_OF_MON_TYPES + CONTEST_CATEGORIES_COUNT] = {
- sSpriteAnim_TypeNormal,
- sSpriteAnim_TypeFighting,
- sSpriteAnim_TypeFlying,
- sSpriteAnim_TypePoison,
- sSpriteAnim_TypeGround,
- sSpriteAnim_TypeRock,
- sSpriteAnim_TypeBug,
- sSpriteAnim_TypeGhost,
- sSpriteAnim_TypeSteel,
- sSpriteAnim_TypeMystery,
- sSpriteAnim_TypeFire,
- sSpriteAnim_TypeWater,
- sSpriteAnim_TypeGrass,
- sSpriteAnim_TypeElectric,
- sSpriteAnim_TypePsychic,
- sSpriteAnim_TypeIce,
- sSpriteAnim_TypeDragon,
- sSpriteAnim_TypeDark,
- sSpriteAnim_TypeFairy,
- sSpriteAnim_CategoryCool,
- sSpriteAnim_CategoryBeauty,
- sSpriteAnim_CategoryCute,
- sSpriteAnim_CategorySmart,
- sSpriteAnim_CategoryTough,
+ [TYPE_NONE] = sSpriteAnim_TypeNone,
+ [TYPE_NORMAL] = sSpriteAnim_TypeNormal,
+ [TYPE_FIGHTING] = sSpriteAnim_TypeFighting,
+ [TYPE_FLYING] = sSpriteAnim_TypeFlying,
+ [TYPE_POISON] = sSpriteAnim_TypePoison,
+ [TYPE_GROUND] = sSpriteAnim_TypeGround,
+ [TYPE_ROCK] = sSpriteAnim_TypeRock,
+ [TYPE_BUG] = sSpriteAnim_TypeBug,
+ [TYPE_GHOST] = sSpriteAnim_TypeGhost,
+ [TYPE_STEEL] = sSpriteAnim_TypeSteel,
+ [TYPE_MYSTERY] = sSpriteAnim_TypeMystery,
+ [TYPE_FIRE] = sSpriteAnim_TypeFire,
+ [TYPE_WATER] = sSpriteAnim_TypeWater,
+ [TYPE_GRASS] = sSpriteAnim_TypeGrass,
+ [TYPE_ELECTRIC] = sSpriteAnim_TypeElectric,
+ [TYPE_PSYCHIC] = sSpriteAnim_TypePsychic,
+ [TYPE_ICE] = sSpriteAnim_TypeIce,
+ [TYPE_DRAGON] = sSpriteAnim_TypeDragon,
+ [TYPE_DARK] = sSpriteAnim_TypeDark,
+ [TYPE_FAIRY] = sSpriteAnim_TypeFairy,
+ [TYPE_STELLAR] = sSpriteAnim_TypeStellar,
+ [NUMBER_OF_MON_TYPES + CONTEST_CATEGORY_COOL] = sSpriteAnim_CategoryCool,
+ [NUMBER_OF_MON_TYPES + CONTEST_CATEGORY_BEAUTY] = sSpriteAnim_CategoryBeauty,
+ [NUMBER_OF_MON_TYPES + CONTEST_CATEGORY_CUTE] = sSpriteAnim_CategoryCute,
+ [NUMBER_OF_MON_TYPES + CONTEST_CATEGORY_SMART] = sSpriteAnim_CategorySmart,
+ [NUMBER_OF_MON_TYPES + CONTEST_CATEGORY_TOUGH] = sSpriteAnim_CategoryTough,
};
const struct CompressedSpriteSheet gSpriteSheet_MoveTypes =
@@ -1137,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(&sSpriteTemplate_CategoryIcons, 48, 129, 0);
+ sMonSummaryScreen->categoryIconSpriteId = CreateSprite(&gSpriteTemplate_CategoryIcons, 48, 129, 0);
gSprites[sMonSummaryScreen->categoryIconSpriteId].invisible = FALSE;
StartSpriteAnim(&gSprites[sMonSummaryScreen->categoryIconSpriteId], category);
@@ -1432,8 +1439,8 @@ static bool8 DecompressGraphics(void)
break;
case 12:
LoadCompressedPalette(gMoveTypes_Pal, OBJ_PLTT_ID(13), 3 * PLTT_SIZE_4BPP);
- LoadCompressedSpriteSheet(&sSpriteSheet_CategoryIcons);
- LoadSpritePalette(&sSpritePal_CategoryIcons);
+ LoadCompressedSpriteSheet(&gSpriteSheet_CategoryIcons);
+ LoadSpritePalette(&gSpritePal_CategoryIcons);
sMonSummaryScreen->switchCounter = 0;
return TRUE;
}
@@ -1633,10 +1640,10 @@ static void Task_HandleInput(u8 taskId)
PlaySE(SE_SELECT);
BeginCloseSummaryScreen(taskId);
}
- #if DEBUG_POKEMON_MENU == TRUE
+ #if DEBUG_POKEMON_SPRITE_VISUALIZER == TRUE
else if (JOY_NEW(SELECT_BUTTON) && !gMain.inBattle)
{
- sMonSummaryScreen->callback = CB2_Debug_Pokemon;
+ sMonSummaryScreen->callback = CB2_Pokemon_Sprite_Visualizer;
StopPokemonAnimations();
PlaySE(SE_SELECT);
CloseSummaryScreen(taskId);
@@ -2795,9 +2802,25 @@ static void ResetWindows(void)
sMonSummaryScreen->windowIds[i] = WINDOW_NONE;
}
+static void PrintTextOnWindowWithFont(u8 windowId, const u8 *string, u8 x, u8 y, u8 lineSpacing, u8 colorId, u32 fontId)
+{
+ AddTextPrinterParameterized4(windowId, fontId, x, y, 0, lineSpacing, sTextColors[colorId], 0, string);
+}
+
static void PrintTextOnWindow(u8 windowId, const u8 *string, u8 x, u8 y, u8 lineSpacing, u8 colorId)
{
- AddTextPrinterParameterized4(windowId, FONT_NORMAL, x, y, 0, lineSpacing, sTextColors[colorId], 0, string);
+ PrintTextOnWindowWithFont(windowId, string, x, y, lineSpacing, colorId, FONT_NORMAL);
+}
+
+static void PrintTextOnWindowToFitPx(u8 windowId, const u8 *string, u8 x, u8 y, u8 lineSpacing, u8 colorId, u32 width)
+{
+ u32 fontId = GetFontIdToFit(string, FONT_NORMAL, 0, width);
+ PrintTextOnWindowWithFont(windowId, string, x, y, lineSpacing, colorId, fontId);
+}
+
+static void PrintTextOnWindowToFit(u8 windowId, const u8 *string, u8 x, u8 y, u8 lineSpacing, u8 colorId)
+{
+ PrintTextOnWindowToFitPx(windowId, string, x, y, lineSpacing, colorId, WindowWidthPx(windowId));
}
static void PrintMonInfo(void)
@@ -2814,7 +2837,6 @@ static void PrintMonInfo(void)
static void PrintNotEggInfo(void)
{
- u8 strArray[16];
struct Pokemon *mon = &sMonSummaryScreen->currentMon;
struct PokeSummary *summary = &sMonSummaryScreen->summary;
u16 dexNum = SpeciesToPokedexNum(summary->species);
@@ -2850,10 +2872,9 @@ static void PrintNotEggInfo(void)
StringAppend(gStringVar1, gStringVar2);
PrintTextOnWindow(PSS_LABEL_WINDOW_PORTRAIT_SPECIES, gStringVar1, 24, 17, 0, 1);
GetMonNickname(mon, gStringVar1);
- PrintTextOnWindow(PSS_LABEL_WINDOW_PORTRAIT_NICKNAME, gStringVar1, 0, 1, 0, 1);
- strArray[0] = CHAR_SLASH;
- StringCopy(&strArray[1], &GetSpeciesName(summary->species2)[0]);
- PrintTextOnWindow(PSS_LABEL_WINDOW_PORTRAIT_SPECIES, strArray, 0, 1, 0, 1);
+ PrintTextOnWindowToFitPx(PSS_LABEL_WINDOW_PORTRAIT_NICKNAME, gStringVar1, 0, 1, 0, 1, WindowWidthPx(PSS_LABEL_WINDOW_PORTRAIT_NICKNAME) - 9);
+ PrintTextOnWindow(PSS_LABEL_WINDOW_PORTRAIT_SPECIES, gText_Slash, 0, 1, 0, 1);
+ PrintTextOnWindowToFitPx(PSS_LABEL_WINDOW_PORTRAIT_SPECIES, GetSpeciesName(summary->species2), 6, 1, 0, 1, WindowWidthPx(PSS_LABEL_WINDOW_PORTRAIT_SPECIES) - 9);
PrintGenderSymbol(mon, summary->species2);
PutWindowTilemap(PSS_LABEL_WINDOW_PORTRAIT_NICKNAME);
PutWindowTilemap(PSS_LABEL_WINDOW_PORTRAIT_SPECIES);
@@ -3242,7 +3263,7 @@ static void PrintMonTrainerMemo(void)
static void BufferNatureString(void)
{
struct PokemonSummaryScreenData *sumStruct = sMonSummaryScreen;
- DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, gNatureNamePointers[sumStruct->summary.nature]);
+ DynamicPlaceholderTextUtil_SetPlaceholderPtr(2, gNaturesInfo[sumStruct->summary.nature].name);
DynamicPlaceholderTextUtil_SetPlaceholderPtr(5, gText_EmptyString5);
}
@@ -3415,6 +3436,7 @@ static void Task_PrintSkillsPage(u8 taskId)
static void PrintHeldItemName(void)
{
const u8 *text;
+ u32 fontId;
int x;
if (sMonSummaryScreen->summary.item == ITEM_ENIGMA_BERRY_E_READER
@@ -3433,8 +3455,9 @@ static void PrintHeldItemName(void)
text = gStringVar1;
}
- x = GetStringCenterAlignXOffset(FONT_NORMAL, text, 72) + 6;
- PrintTextOnWindow(AddWindowFromTemplateList(sPageSkillsTemplate, PSS_DATA_WINDOW_SKILLS_HELD_ITEM), text, x, 1, 0, 0);
+ fontId = GetFontIdToFit(text, FONT_NORMAL, 0, WindowTemplateWidthPx(&sPageSkillsTemplate[PSS_DATA_WINDOW_SKILLS_HELD_ITEM]) - 8);
+ x = GetStringCenterAlignXOffset(fontId, text, 72) + 6;
+ PrintTextOnWindowWithFont(AddWindowFromTemplateList(sPageSkillsTemplate, PSS_DATA_WINDOW_SKILLS_HELD_ITEM), text, x, 1, 0, 0, fontId);
}
static void PrintRibbonCount(void)
@@ -3457,19 +3480,21 @@ static void PrintRibbonCount(void)
PrintTextOnWindow(AddWindowFromTemplateList(sPageSkillsTemplate, PSS_DATA_WINDOW_SKILLS_RIBBON_COUNT), text, x, 1, 0, 0);
}
-static void BufferStat(u8 *dst, s8 natureMod, u32 stat, u32 strId, u32 n)
+static void BufferStat(u8 *dst, u8 statIndex, u32 stat, u32 strId, u32 n)
{
static const u8 sTextNatureDown[] = _("{COLOR}{08}");
static const u8 sTextNatureUp[] = _("{COLOR}{05}");
static const u8 sTextNatureNeutral[] = _("{COLOR}{01}");
u8 *txtPtr;
- if (natureMod == 0 || !SUMMARY_SCREEN_NATURE_COLORS)
+ if (statIndex == 0 || !SUMMARY_SCREEN_NATURE_COLORS || gNaturesInfo[sMonSummaryScreen->summary.mintNature].statUp == gNaturesInfo[sMonSummaryScreen->summary.mintNature].statDown)
txtPtr = StringCopy(dst, sTextNatureNeutral);
- else if (natureMod > 0)
+ else if (statIndex == gNaturesInfo[sMonSummaryScreen->summary.mintNature].statUp)
txtPtr = StringCopy(dst, sTextNatureUp);
- else
+ else if (statIndex == gNaturesInfo[sMonSummaryScreen->summary.mintNature].statDown)
txtPtr = StringCopy(dst, sTextNatureDown);
+ else
+ txtPtr = StringCopy(dst, sTextNatureNeutral);
ConvertIntToDecimalStringN(txtPtr, stat, STR_CONV_MODE_RIGHT_ALIGN, n);
DynamicPlaceholderTextUtil_SetPlaceholderPtr(strId, dst);
@@ -3481,13 +3506,12 @@ static void BufferLeftColumnStats(void)
u8 *maxHPString = Alloc(20);
u8 *attackString = Alloc(20);
u8 *defenseString = Alloc(20);
- const s8 *natureMod = gNatureStatTable[sMonSummaryScreen->summary.mintNature];
DynamicPlaceholderTextUtil_Reset();
BufferStat(currentHPString, 0, sMonSummaryScreen->summary.currentHP, 0, 3);
BufferStat(maxHPString, 0, sMonSummaryScreen->summary.maxHP, 1, 3);
- BufferStat(attackString, natureMod[STAT_ATK - 1], sMonSummaryScreen->summary.atk, 2, 7);
- BufferStat(defenseString, natureMod[STAT_DEF - 1], sMonSummaryScreen->summary.def, 3, 7);
+ BufferStat(attackString, STAT_ATK, sMonSummaryScreen->summary.atk, 2, 7);
+ BufferStat(defenseString, STAT_DEF, sMonSummaryScreen->summary.def, 3, 7);
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, sStatsLeftColumnLayout);
Free(currentHPString);
@@ -3503,12 +3527,10 @@ static void PrintLeftColumnStats(void)
static void BufferRightColumnStats(void)
{
- const s8 *natureMod = gNatureStatTable[sMonSummaryScreen->summary.mintNature];
-
DynamicPlaceholderTextUtil_Reset();
- BufferStat(gStringVar1, natureMod[STAT_SPATK - 1], sMonSummaryScreen->summary.spatk, 0, 3);
- BufferStat(gStringVar2, natureMod[STAT_SPDEF - 1], sMonSummaryScreen->summary.spdef, 1, 3);
- BufferStat(gStringVar3, natureMod[STAT_SPEED - 1], sMonSummaryScreen->summary.speed, 2, 3);
+ BufferStat(gStringVar1, STAT_SPATK, sMonSummaryScreen->summary.spatk, 0, 3);
+ BufferStat(gStringVar2, STAT_SPDEF, sMonSummaryScreen->summary.spdef, 1, 3);
+ BufferStat(gStringVar3, STAT_SPEED, sMonSummaryScreen->summary.speed, 2, 3);
DynamicPlaceholderTextUtil_ExpandPlaceholders(gStringVar4, sStatsRightColumnLayout);
}
@@ -3618,7 +3640,7 @@ static void PrintMoveNameAndPP(u8 moveIndex)
if (move != 0)
{
pp = CalculatePPWithBonus(move, summary->ppBonuses, moveIndex);
- PrintTextOnWindow(moveNameWindowId, GetMoveName(move), 0, moveIndex * 16 + 1, 0, 1);
+ PrintTextOnWindowToFit(moveNameWindowId, GetMoveName(move), 0, moveIndex * 16 + 1, 0, 1);
ConvertIntToDecimalStringN(gStringVar1, summary->pp[moveIndex], STR_CONV_MODE_RIGHT_ALIGN, 2);
ConvertIntToDecimalStringN(gStringVar2, pp, STR_CONV_MODE_RIGHT_ALIGN, 2);
DynamicPlaceholderTextUtil_Reset();
@@ -3786,9 +3808,9 @@ static void PrintNewMoveDetailsOrCancelText(void)
u16 move = sMonSummaryScreen->newMove;
if (sMonSummaryScreen->currPageIndex == PSS_PAGE_BATTLE_MOVES)
- PrintTextOnWindow(windowId1, GetMoveName(move), 0, 65, 0, 6);
+ PrintTextOnWindowToFit(windowId1, GetMoveName(move), 0, 65, 0, 6);
else
- PrintTextOnWindow(windowId1, GetMoveName(move), 0, 65, 0, 5);
+ PrintTextOnWindowToFit(windowId1, GetMoveName(move), 0, 65, 0, 5);
ConvertIntToDecimalStringN(gStringVar1, gMovesInfo[move].pp, STR_CONV_MODE_RIGHT_ALIGN, 2);
DynamicPlaceholderTextUtil_Reset();
diff --git a/src/pokenav_conditions.c b/src/pokenav_conditions.c
index 19cfe38b95d5..382ddde41324 100644
--- a/src/pokenav_conditions.c
+++ b/src/pokenav_conditions.c
@@ -372,6 +372,8 @@ static u8 *CopyConditionMonNameGender(u8 *str, u16 listId, bool8 skipPadding)
while (*str_ != EOS)
(str_++);
+ str_ = WrapFontIdToFit(str, str_, FONT_NORMAL, 57);
+
*(str_++) = EXT_CTRL_CODE_BEGIN;
*(str_++) = EXT_CTRL_CODE_SKIP;
*(str_++) = 60;
diff --git a/src/pokenav_conditions_search_results.c b/src/pokenav_conditions_search_results.c
index 24fe966dc329..9afb2bb2d9c5 100644
--- a/src/pokenav_conditions_search_results.c
+++ b/src/pokenav_conditions_search_results.c
@@ -692,8 +692,9 @@ static void BufferSearchMonListItem(struct PokenavMonListItem * item, u8 *dest)
{
u8 gender;
u8 level;
- u8 *s;
+ u8 *s, *end;
const u8 *genderStr;
+ u32 fontId;
// Mon is in party
if (item->boxId == TOTAL_BOXES_COUNT)
@@ -712,8 +713,6 @@ static void BufferSearchMonListItem(struct PokenavMonListItem * item, u8 *dest)
GetBoxMonData(mon, MON_DATA_NICKNAME, gStringVar3);
}
- StringGet_Nickname(gStringVar3);
- dest = GetStringClearToWidth(dest, FONT_NORMAL, gStringVar3, 60);
switch (gender)
{
default:
@@ -726,6 +725,11 @@ static void BufferSearchMonListItem(struct PokenavMonListItem * item, u8 *dest)
genderStr = sText_FemaleSymbol;
break;
}
+ end = StringGet_Nickname(gStringVar3);
+ fontId = GetFontIdToFit(gStringVar3, FONT_NORMAL, 0, 60);
+ WrapFontIdToFit(gStringVar3, end, FONT_NORMAL, 60);
+ dest = GetStringClearToWidth(dest, fontId, gStringVar3, 60);
+
s = StringCopy(gStringVar1, genderStr);
*s++ = CHAR_SLASH;
*s++ = CHAR_EXTRA_SYMBOL;
diff --git a/src/pokenav_ribbons_list.c b/src/pokenav_ribbons_list.c
index 72783b0972d1..834dc926ad0a 100644
--- a/src/pokenav_ribbons_list.c
+++ b/src/pokenav_ribbons_list.c
@@ -699,9 +699,10 @@ static void BufferRibbonMonInfoText(struct PokenavListItem * listItem, u8 *dest)
{
u8 gender;
u8 level;
- u8 *s;
+ u8 *s, *end;
const u8 *genderStr;
struct PokenavMonListItem * item = (struct PokenavMonListItem *)listItem;
+ u32 fontId;
// Mon is in party
if (item->boxId == TOTAL_BOXES_COUNT)
@@ -720,8 +721,6 @@ static void BufferRibbonMonInfoText(struct PokenavListItem * listItem, u8 *dest)
GetBoxMonData(mon, MON_DATA_NICKNAME, gStringVar3);
}
- StringGet_Nickname(gStringVar3);
- dest = GetStringClearToWidth(dest, FONT_NORMAL, gStringVar3, 60);
switch (gender)
{
default:
@@ -734,6 +733,10 @@ static void BufferRibbonMonInfoText(struct PokenavListItem * listItem, u8 *dest)
genderStr = sText_FemaleSymbol;
break;
}
+ end = StringGet_Nickname(gStringVar3);
+ fontId = GetFontIdToFit(gStringVar3, FONT_NORMAL, 0, 60);
+ WrapFontIdToFit(gStringVar3, end, FONT_NORMAL, 60);
+ dest = GetStringClearToWidth(dest, fontId, gStringVar3, 60);
s = StringCopy(gStringVar1, genderStr);
*s++ = CHAR_SLASH;
diff --git a/src/pokenav_ribbons_summary.c b/src/pokenav_ribbons_summary.c
index 1ff55dc187c6..bba1c3600cb0 100644
--- a/src/pokenav_ribbons_summary.c
+++ b/src/pokenav_ribbons_summary.c
@@ -878,7 +878,6 @@ static void PrintRibbbonsSummaryMonInfo(struct Pokenav_RibbonsSummaryMenu *menu)
FillWindowPixelBuffer(windowId, PIXEL_FILL(1));
GetMonNicknameLevelGender(gStringVar3, &level, &gender);
- AddTextPrinterParameterized(windowId, FONT_NORMAL, gStringVar3, 0, 1, TEXT_SKIP_DRAW, NULL);
switch (gender)
{
case MON_MALE:
@@ -891,6 +890,7 @@ static void PrintRibbbonsSummaryMonInfo(struct Pokenav_RibbonsSummaryMenu *menu)
genderTxt = sGenderlessIconString;
break;
}
+ AddTextPrinterParameterized(windowId, GetFontIdToFit(gStringVar3, FONT_NORMAL, 0, 60), gStringVar3, 0, 1, TEXT_SKIP_DRAW, NULL);
txtPtr = StringCopy(gStringVar1, genderTxt);
*(txtPtr++) = CHAR_SLASH;
diff --git a/src/random.c b/src/random.c
index 3ec3638fe190..9d43ae37408f 100644
--- a/src/random.c
+++ b/src/random.c
@@ -239,3 +239,22 @@ const void *RandomElementArrayDefault(enum RandomTag tag, const void *array, siz
{
return (const u8 *)array + size * RandomUniformDefault(tag, 0, count - 1);
}
+
+// Returns a random index according to a list of weights
+u8 RandomWeightedIndex(u8 *weights, u8 length)
+{
+ u32 i;
+ u16 randomValue;
+ u16 weightSum = 0;
+ for (i = 0; i < length; i++)
+ weightSum += weights[i];
+ randomValue = weightSum > 0 ? Random() % weightSum : 0;
+ weightSum = 0;
+ for (i = 0; i < length; i++)
+ {
+ weightSum += weights[i];
+ if (randomValue <= weightSum)
+ return i;
+ }
+ return 0;
+}
diff --git a/src/rayquaza_scene.c b/src/rayquaza_scene.c
index 3264b22bdf08..b3e0276f1d4a 100644
--- a/src/rayquaza_scene.c
+++ b/src/rayquaza_scene.c
@@ -1,5 +1,6 @@
#include "global.h"
#include "rayquaza_scene.h"
+#include "event_object_movement.h"
#include "sprite.h"
#include "task.h"
#include "graphics.h"
@@ -15,6 +16,7 @@
#include "sound.h"
#include "constants/songs.h"
#include "constants/rgb.h"
+#include "constants/event_objects.h"
#include "random.h"
/*
@@ -1296,9 +1298,15 @@ void DoRayquazaScene(u8 animId, bool8 endEarly, void (*exitCallback)(void))
static void CB2_InitRayquazaScene(void)
{
+ u32 i;
SetVBlankHBlankCallbacksToNull();
ClearScheduledBgCopiesToVram();
ScanlineEffect_Stop();
+ for (i = 0; i < OBJECT_EVENTS_COUNT; i++)
+ {
+ if (gObjectEvents[i].graphicsId == OBJ_EVENT_GFX_RAYQUAZA)
+ gObjectEvents[i].invisible = FALSE;
+ }
FreeAllSpritePalettes();
ResetPaletteFade();
ResetSpriteData();
diff --git a/src/roamer.c b/src/roamer.c
index daa70dcb9494..dc5977cc3164 100644
--- a/src/roamer.c
+++ b/src/roamer.c
@@ -14,9 +14,10 @@ enum
MAP_NUM, // map number
};
-#define ROAMER (&gSaveBlock1Ptr->roamer)
-EWRAM_DATA static u8 sLocationHistory[3][2] = {0};
-EWRAM_DATA static u8 sRoamerLocation[2] = {0};
+#define ROAMER(index) (&gSaveBlock1Ptr->roamer[index])
+EWRAM_DATA static u8 sLocationHistory[ROAMER_COUNT][3][2] = {0};
+EWRAM_DATA static u8 sRoamerLocation[ROAMER_COUNT][2] = {0};
+EWRAM_DATA u8 gEncounteredRoamerIndex = 0;
#define ___ MAP_NUM(UNDEFINED) // For empty spots in the location table
@@ -61,122 +62,166 @@ static const u8 sRoamerLocations[][6] =
#define NUM_LOCATION_SETS (ARRAY_COUNT(sRoamerLocations) - 1)
#define NUM_LOCATIONS_PER_SET (ARRAY_COUNT(sRoamerLocations[0]))
-void ClearRoamerData(void)
+void DeactivateAllRoamers(void)
{
- memset(ROAMER, 0, sizeof(*ROAMER));
- ROAMER->species = SPECIES_LATIAS;
+ u32 i;
+
+ for (i = 0; i < ROAMER_COUNT; i++)
+ SetRoamerInactive(i);
}
-void ClearRoamerLocationData(void)
+static void ClearRoamerLocationHistory(u32 roamerIndex)
{
- u8 i;
+ u32 i;
- for (i = 0; i < ARRAY_COUNT(sLocationHistory); i++)
+ for (i = 0; i < ARRAY_COUNT(sLocationHistory[roamerIndex]); i++)
{
- sLocationHistory[i][MAP_GRP] = 0;
- sLocationHistory[i][MAP_NUM] = 0;
+ sLocationHistory[roamerIndex][i][MAP_GRP] = 0;
+ sLocationHistory[roamerIndex][i][MAP_NUM] = 0;
}
+}
- sRoamerLocation[MAP_GRP] = 0;
- sRoamerLocation[MAP_NUM] = 0;
+void MoveAllRoamersToOtherLocationSets(void)
+{
+ u32 i;
+
+ for (i = 0; i < ROAMER_COUNT; i++)
+ RoamerMoveToOtherLocationSet(i);
}
-static void CreateInitialRoamerMon(bool16 createLatios)
+void MoveAllRoamers(void)
{
- if (!createLatios)
- ROAMER->species = SPECIES_LATIAS;
- else
- ROAMER->species = SPECIES_LATIOS;
-
- CreateMon(&gEnemyParty[0], ROAMER->species, 40, USE_RANDOM_IVS, FALSE, 0, OT_ID_PLAYER_ID, 0);
- ROAMER->level = 40;
- ROAMER->statusA = 0;
- ROAMER->statusB = 0;
- ROAMER->active = TRUE;
- ROAMER->ivs = GetMonData(&gEnemyParty[0], MON_DATA_IVS);
- ROAMER->personality = GetMonData(&gEnemyParty[0], MON_DATA_PERSONALITY);
- ROAMER->hp = GetMonData(&gEnemyParty[0], MON_DATA_MAX_HP);
- ROAMER->cool = GetMonData(&gEnemyParty[0], MON_DATA_COOL);
- ROAMER->beauty = GetMonData(&gEnemyParty[0], MON_DATA_BEAUTY);
- ROAMER->cute = GetMonData(&gEnemyParty[0], MON_DATA_CUTE);
- ROAMER->smart = GetMonData(&gEnemyParty[0], MON_DATA_SMART);
- ROAMER->tough = GetMonData(&gEnemyParty[0], MON_DATA_TOUGH);
- sRoamerLocation[MAP_GRP] = ROAMER_MAP_GROUP;
- sRoamerLocation[MAP_NUM] = sRoamerLocations[Random() % NUM_LOCATION_SETS][0];
+ u32 i;
+
+ for (i = 0; i < ROAMER_COUNT; i++)
+ RoamerMove(i);
+}
+
+static void CreateInitialRoamerMon(u8 index, u16 species, u8 level)
+{
+ ClearRoamerLocationHistory(index);
+ CreateMon(&gEnemyParty[0], species, level, USE_RANDOM_IVS, FALSE, 0, OT_ID_PLAYER_ID, 0);
+ ROAMER(index)->ivs = GetMonData(&gEnemyParty[0], MON_DATA_IVS);
+ ROAMER(index)->personality = GetMonData(&gEnemyParty[0], MON_DATA_PERSONALITY);
+ ROAMER(index)->species = species;
+ ROAMER(index)->level = level;
+ ROAMER(index)->statusA = 0;
+ ROAMER(index)->statusB = 0;
+ ROAMER(index)->hp = GetMonData(&gEnemyParty[0], MON_DATA_MAX_HP);
+ ROAMER(index)->cool = GetMonData(&gEnemyParty[0], MON_DATA_COOL);
+ ROAMER(index)->beauty = GetMonData(&gEnemyParty[0], MON_DATA_BEAUTY);
+ ROAMER(index)->cute = GetMonData(&gEnemyParty[0], MON_DATA_CUTE);
+ ROAMER(index)->smart = GetMonData(&gEnemyParty[0], MON_DATA_SMART);
+ ROAMER(index)->tough = GetMonData(&gEnemyParty[0], MON_DATA_TOUGH);
+ ROAMER(index)->active = TRUE;
+ sRoamerLocation[index][MAP_GRP] = ROAMER_MAP_GROUP;
+ sRoamerLocation[index][MAP_NUM] = sRoamerLocations[Random() % NUM_LOCATION_SETS][0];
+}
+
+static u8 GetFirstInactiveRoamerIndex(void)
+{
+ u32 i;
+
+ for (i = 0; i < ROAMER_COUNT; i++)
+ {
+ if (!ROAMER(i)->active)
+ return i;
+ }
+ return ROAMER_COUNT;
+}
+
+bool8 TryAddRoamer(u16 species, u8 level)
+{
+ u8 index = GetFirstInactiveRoamerIndex();
+
+ if (index < ROAMER_COUNT)
+ {
+ // Create the roamer and stop searching
+ CreateInitialRoamerMon(index, species, level);
+ return TRUE;
+ }
+
+ // Maximum active roamers found: do nothing and let the calling function know
+ return FALSE;
}
// gSpecialVar_0x8004 here corresponds to the options in the multichoice MULTI_TV_LATI (0 for 'Red', 1 for 'Blue')
void InitRoamer(void)
{
- ClearRoamerData();
- ClearRoamerLocationData();
- CreateInitialRoamerMon(gSpecialVar_0x8004);
+ if (gSpecialVar_0x8004 == 0) // Red
+ TryAddRoamer(SPECIES_LATIAS, 40);
+ else
+ TryAddRoamer(SPECIES_LATIOS, 40);
}
void UpdateLocationHistoryForRoamer(void)
{
- sLocationHistory[2][MAP_GRP] = sLocationHistory[1][MAP_GRP];
- sLocationHistory[2][MAP_NUM] = sLocationHistory[1][MAP_NUM];
+ u32 i;
+
+ for (i = 0; i < ROAMER_COUNT; i++)
+ {
+ sLocationHistory[i][2][MAP_GRP] = sLocationHistory[i][1][MAP_GRP];
+ sLocationHistory[i][2][MAP_NUM] = sLocationHistory[i][1][MAP_NUM];
- sLocationHistory[1][MAP_GRP] = sLocationHistory[0][MAP_GRP];
- sLocationHistory[1][MAP_NUM] = sLocationHistory[0][MAP_NUM];
+ sLocationHistory[i][1][MAP_GRP] = sLocationHistory[i][0][MAP_GRP];
+ sLocationHistory[i][1][MAP_NUM] = sLocationHistory[i][0][MAP_NUM];
- sLocationHistory[0][MAP_GRP] = gSaveBlock1Ptr->location.mapGroup;
- sLocationHistory[0][MAP_NUM] = gSaveBlock1Ptr->location.mapNum;
+ sLocationHistory[i][0][MAP_GRP] = gSaveBlock1Ptr->location.mapGroup;
+ sLocationHistory[i][0][MAP_NUM] = gSaveBlock1Ptr->location.mapNum;
+ }
}
-void RoamerMoveToOtherLocationSet(void)
+void RoamerMoveToOtherLocationSet(u32 roamerIndex)
{
u8 mapNum = 0;
- if (!ROAMER->active)
+ if (!ROAMER(roamerIndex)->active)
return;
- sRoamerLocation[MAP_GRP] = ROAMER_MAP_GROUP;
+ sRoamerLocation[roamerIndex][MAP_GRP] = ROAMER_MAP_GROUP;
// Choose a location set that starts with a map
// different from the roamer's current map
- while (1)
+ do
{
mapNum = sRoamerLocations[Random() % NUM_LOCATION_SETS][0];
- if (sRoamerLocation[MAP_NUM] != mapNum)
+ if (sRoamerLocation[roamerIndex][MAP_NUM] != mapNum)
{
- sRoamerLocation[MAP_NUM] = mapNum;
+ sRoamerLocation[roamerIndex][MAP_NUM] = mapNum;
return;
}
- }
+ } while (sRoamerLocation[roamerIndex][MAP_NUM] == mapNum);
+ sRoamerLocation[roamerIndex][MAP_NUM] = mapNum;
}
-void RoamerMove(void)
+void RoamerMove(u32 roamerIndex)
{
u8 locSet = 0;
if ((Random() % 16) == 0)
{
- RoamerMoveToOtherLocationSet();
+ RoamerMoveToOtherLocationSet(roamerIndex);
}
else
{
- if (!ROAMER->active)
+ if (!ROAMER(roamerIndex)->active)
return;
while (locSet < NUM_LOCATION_SETS)
{
// Find the location set that starts with the roamer's current map
- if (sRoamerLocation[MAP_NUM] == sRoamerLocations[locSet][0])
+ if (sRoamerLocation[roamerIndex][MAP_NUM] == sRoamerLocations[locSet][0])
{
u8 mapNum;
- while (1)
+ // Choose a new map (excluding the first) within this set
+ // Also exclude a map if the roamer was there 2 moves ago
+ do
{
- // Choose a new map (excluding the first) within this set
- // Also exclude a map if the roamer was there 2 moves ago
mapNum = sRoamerLocations[locSet][(Random() % (NUM_LOCATIONS_PER_SET - 1)) + 1];
- if (!(sLocationHistory[2][MAP_GRP] == ROAMER_MAP_GROUP
- && sLocationHistory[2][MAP_NUM] == mapNum)
- && mapNum != MAP_NUM(UNDEFINED))
- break;
- }
- sRoamerLocation[MAP_NUM] = mapNum;
+ } while ((sLocationHistory[roamerIndex][2][MAP_GRP] == ROAMER_MAP_GROUP
+ && sLocationHistory[roamerIndex][2][MAP_NUM] == mapNum)
+ || mapNum == MAP_NUM(UNDEFINED));
+ sRoamerLocation[roamerIndex][MAP_NUM] = mapNum;
return;
}
locSet++;
@@ -184,60 +229,65 @@ void RoamerMove(void)
}
}
-bool8 IsRoamerAt(u8 mapGroup, u8 mapNum)
+bool8 IsRoamerAt(u32 roamerIndex, u8 mapGroup, u8 mapNum)
{
- if (ROAMER->active && mapGroup == sRoamerLocation[MAP_GRP] && mapNum == sRoamerLocation[MAP_NUM])
+ if (ROAMER(roamerIndex)->active && mapGroup == sRoamerLocation[roamerIndex][MAP_GRP] && mapNum == sRoamerLocation[roamerIndex][MAP_NUM])
return TRUE;
else
return FALSE;
}
-void CreateRoamerMonInstance(void)
+void CreateRoamerMonInstance(u32 roamerIndex)
{
- u32 status = ROAMER->statusA + (ROAMER->statusB << 8);
+ u32 status = ROAMER(roamerIndex)->statusA + (ROAMER(roamerIndex)->statusB << 8);
struct Pokemon *mon = &gEnemyParty[0];
ZeroEnemyPartyMons();
- CreateMonWithIVsPersonality(mon, ROAMER->species, ROAMER->level, ROAMER->ivs, ROAMER->personality);
+ CreateMonWithIVsPersonality(mon, ROAMER(roamerIndex)->species, ROAMER(roamerIndex)->level, ROAMER(roamerIndex)->ivs, ROAMER(roamerIndex)->personality);
+ // The roamer's status field is u16, but SetMonData expects status to be u32, so will set the roamer's status
+ // using the status field and the following 3 bytes (cool, beauty, and cute).
SetMonData(mon, MON_DATA_STATUS, &status);
- SetMonData(mon, MON_DATA_HP, &ROAMER->hp);
- SetMonData(mon, MON_DATA_COOL, &ROAMER->cool);
- SetMonData(mon, MON_DATA_BEAUTY, &ROAMER->beauty);
- SetMonData(mon, MON_DATA_CUTE, &ROAMER->cute);
- SetMonData(mon, MON_DATA_SMART, &ROAMER->smart);
- SetMonData(mon, MON_DATA_TOUGH, &ROAMER->tough);
+ SetMonData(mon, MON_DATA_HP, &ROAMER(roamerIndex)->hp);
+ SetMonData(mon, MON_DATA_COOL, &ROAMER(roamerIndex)->cool);
+ SetMonData(mon, MON_DATA_BEAUTY, &ROAMER(roamerIndex)->beauty);
+ SetMonData(mon, MON_DATA_CUTE, &ROAMER(roamerIndex)->cute);
+ SetMonData(mon, MON_DATA_SMART, &ROAMER(roamerIndex)->smart);
+ SetMonData(mon, MON_DATA_TOUGH, &ROAMER(roamerIndex)->tough);
}
bool8 TryStartRoamerEncounter(void)
{
- if (IsRoamerAt(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum) == TRUE && (Random() % 4) == 0)
- {
- CreateRoamerMonInstance();
- return TRUE;
- }
- else
+ u32 i;
+
+ for (i = 0; i < ROAMER_COUNT; i++)
{
- return FALSE;
+ if (IsRoamerAt(i, gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum) == TRUE && (Random() % 4) == 0)
+ {
+ CreateRoamerMonInstance(i);
+ gEncounteredRoamerIndex = i;
+ return TRUE;
+ }
}
+ return FALSE;
}
void UpdateRoamerHPStatus(struct Pokemon *mon)
{
u32 status = GetMonData(mon, MON_DATA_STATUS);
- ROAMER->hp = GetMonData(mon, MON_DATA_HP);
- ROAMER->statusA = status;
- ROAMER->statusB = status >> 8;
+ ROAMER(gEncounteredRoamerIndex)->hp = GetMonData(mon, MON_DATA_HP);
+ ROAMER(gEncounteredRoamerIndex)->statusA = status;
+ ROAMER(gEncounteredRoamerIndex)->statusB = status >> 8;
- RoamerMoveToOtherLocationSet();
+ RoamerMoveToOtherLocationSet(gEncounteredRoamerIndex);
}
-void SetRoamerInactive(void)
+void SetRoamerInactive(u32 roamerIndex)
{
- ROAMER->active = FALSE;
+ ROAMER(roamerIndex)->active = FALSE;
}
-void GetRoamerLocation(u8 *mapGroup, u8 *mapNum)
+void GetRoamerLocation(u32 roamerIndex, u8 *mapGroup, u8 *mapNum)
{
- *mapGroup = sRoamerLocation[MAP_GRP];
- *mapNum = sRoamerLocation[MAP_NUM];
+ *mapGroup = sRoamerLocation[roamerIndex][MAP_GRP];
+ *mapNum = sRoamerLocation[roamerIndex][MAP_NUM];
}
diff --git a/src/rotating_gate.c b/src/rotating_gate.c
index 0b0c68a836d4..57cb9fa7eb0b 100644
--- a/src/rotating_gate.c
+++ b/src/rotating_gate.c
@@ -6,6 +6,7 @@
#include "sound.h"
#include "sprite.h"
#include "constants/songs.h"
+#include "constants/event_objects.h"
#define ROTATING_GATE_TILE_TAG 0x1300
#define ROTATING_GATE_PUZZLE_MAX 12
@@ -461,11 +462,10 @@ static const union AffineAnimCmd *const sSpriteAffineAnimTable_RotatingGate[] =
sSpriteAffineAnim_RotatingClockwise270to360Faster,
};
-
static const struct SpriteTemplate sSpriteTemplate_RotatingGateLarge =
{
.tileTag = ROTATING_GATE_TILE_TAG,
- .paletteTag = TAG_NONE,
+ .paletteTag = OBJ_EVENT_PAL_TAG_NPC_1,
.oam = &sOamData_RotatingGateLarge,
.anims = sSpriteAnimTable_RotatingGateLarge,
.images = NULL,
@@ -476,7 +476,7 @@ static const struct SpriteTemplate sSpriteTemplate_RotatingGateLarge =
static const struct SpriteTemplate sSpriteTemplate_RotatingGateRegular =
{
.tileTag = ROTATING_GATE_TILE_TAG,
- .paletteTag = TAG_NONE,
+ .paletteTag = OBJ_EVENT_PAL_TAG_NPC_1,
.oam = &sOamData_RotatingGateRegular,
.anims = sSpriteAnimTable_RotatingGateRegular,
.images = NULL,
@@ -740,7 +740,7 @@ static u8 RotatingGate_CreateGate(u8 gateId, s16 deltaX, s16 deltaY)
template.tileTag = gate->shape + ROTATING_GATE_TILE_TAG;
- spriteId = CreateSprite(&template, 0, 0, 0x94);
+ spriteId = CreateSprite(&template, 0, 0, 0x93);
if (spriteId == MAX_SPRITES)
return MAX_SPRITES;
@@ -748,6 +748,7 @@ static u8 RotatingGate_CreateGate(u8 gateId, s16 deltaX, s16 deltaY)
y = gate->y + MAP_OFFSET;
sprite = &gSprites[spriteId];
+ UpdateSpritePaletteByTemplate(&template, sprite);
sprite->data[0] = gateId;
sprite->coordOffsetEnabled = 1;
diff --git a/src/rtc.c b/src/rtc.c
index a90c9aa89b64..5ccafec621bd 100644
--- a/src/rtc.c
+++ b/src/rtc.c
@@ -1,7 +1,9 @@
#include "global.h"
#include "rtc.h"
#include "string_util.h"
+#include "strings.h"
#include "text.h"
+#include "fake_rtc.h"
// iwram bss
static u16 sErrorStatus;
@@ -45,6 +47,9 @@ void RtcRestoreInterrupts(void)
u32 ConvertBcdToBinary(u8 bcd)
{
+ if (OW_USE_FAKE_RTC)
+ return bcd;
+
if (bcd > 0x9F)
return 0xFF;
@@ -88,14 +93,22 @@ u16 ConvertDateToDayCount(u8 year, u8 month, u8 day)
u16 RtcGetDayCount(struct SiiRtcInfo *rtc)
{
- u8 year = ConvertBcdToBinary(rtc->year);
- u8 month = ConvertBcdToBinary(rtc->month);
- u8 day = ConvertBcdToBinary(rtc->day);
+ u8 year, month, day;
+
+ if (OW_USE_FAKE_RTC)
+ return rtc->day;
+
+ year = ConvertBcdToBinary(rtc->year);
+ month = ConvertBcdToBinary(rtc->month);
+ day = ConvertBcdToBinary(rtc->day);
return ConvertDateToDayCount(year, month, day);
}
void RtcInit(void)
{
+ if (OW_USE_FAKE_RTC)
+ return;
+
sErrorStatus = 0;
RtcDisableInterrupts();
@@ -120,12 +133,14 @@ void RtcInit(void)
u16 RtcGetErrorStatus(void)
{
- return sErrorStatus;
+ return (OW_USE_FAKE_RTC) ? 0 : sErrorStatus;
}
void RtcGetInfo(struct SiiRtcInfo *rtc)
{
- if (sErrorStatus & RTC_ERR_FLAG_MASK)
+ if (OW_USE_FAKE_RTC)
+ FakeRtc_GetRawInfo(rtc);
+ else if (sErrorStatus & RTC_ERR_FLAG_MASK)
*rtc = sRtcDummy;
else
RtcGetRawInfo(rtc);
@@ -158,6 +173,9 @@ u16 RtcCheckInfo(struct SiiRtcInfo *rtc)
s32 month;
s32 value;
+ if (OW_USE_FAKE_RTC)
+ return 0;
+
if (rtc->status & SIIRTCINFO_POWER)
errorFlags |= RTC_ERR_POWER_FAILURE;
@@ -210,6 +228,12 @@ u16 RtcCheckInfo(struct SiiRtcInfo *rtc)
void RtcReset(void)
{
+ if (OW_USE_FAKE_RTC)
+ {
+ memset(FakeRtc_GetCurrentTime(), 0, sizeof(struct Time));
+ return;
+ }
+
RtcDisableInterrupts();
SiiRtcReset();
RtcRestoreInterrupts();
@@ -364,3 +388,33 @@ u32 RtcGetLocalDayCount(void)
{
return RtcGetDayCount(&sRtc);
}
+
+void FormatDecimalTimeWithoutSeconds(u8 *txtPtr, s8 hour, s8 minute, bool32 is24Hour)
+{
+ if (is24Hour)
+ {
+ txtPtr = ConvertIntToDecimalStringN(txtPtr, hour, STR_CONV_MODE_LEADING_ZEROS, 2);
+ *txtPtr++ = CHAR_COLON;
+ txtPtr = ConvertIntToDecimalStringN(txtPtr, minute, STR_CONV_MODE_LEADING_ZEROS, 2);
+ }
+ else
+ {
+ if (hour == 0)
+ txtPtr = ConvertIntToDecimalStringN(txtPtr, 12, STR_CONV_MODE_LEADING_ZEROS, 2);
+ else if (hour < 13)
+ txtPtr = ConvertIntToDecimalStringN(txtPtr, hour, STR_CONV_MODE_LEADING_ZEROS, 2);
+ else
+ txtPtr = ConvertIntToDecimalStringN(txtPtr, hour - 12, STR_CONV_MODE_LEADING_ZEROS, 2);
+
+ *txtPtr++ = CHAR_COLON;
+ txtPtr = ConvertIntToDecimalStringN(txtPtr, minute, STR_CONV_MODE_LEADING_ZEROS, 2);
+ txtPtr = StringAppend(txtPtr, gText_Space);
+ if (hour < 12)
+ txtPtr = StringAppend(txtPtr, gText_AM);
+ else
+ txtPtr = StringAppend(txtPtr, gText_PM);
+ }
+
+ *txtPtr++ = EOS;
+ *txtPtr = EOS;
+}
diff --git a/src/scrcmd.c b/src/scrcmd.c
index f3922954b1eb..ff3225aed1b0 100644
--- a/src/scrcmd.c
+++ b/src/scrcmd.c
@@ -15,6 +15,7 @@
#include "field_effect.h"
#include "event_object_lock.h"
#include "event_object_movement.h"
+#include "event_scripts.h"
#include "field_message_box.h"
#include "field_player_avatar.h"
#include "field_screen_effect.h"
@@ -107,6 +108,7 @@ bool8 ScrCmd_nop1(struct ScriptContext *ctx)
bool8 ScrCmd_end(struct ScriptContext *ctx)
{
+ FlagClear(FLAG_SAFE_FOLLOWER_MOVEMENT);
StopScript(ctx);
return FALSE;
}
@@ -292,6 +294,7 @@ bool8 ScrCmd_returnram(struct ScriptContext *ctx)
bool8 ScrCmd_endram(struct ScriptContext *ctx)
{
+ FlagClear(FLAG_SAFE_FOLLOWER_MOVEMENT);
ClearRamScript();
StopScript(ctx);
return TRUE;
@@ -996,10 +999,29 @@ bool8 ScrCmd_fadeinbgm(struct ScriptContext *ctx)
bool8 ScrCmd_applymovement(struct ScriptContext *ctx)
{
u16 localId = VarGet(ScriptReadHalfword(ctx));
- const void *movementScript = (const void *)ScriptReadWord(ctx);
+ const u8 *movementScript = (const u8 *)ScriptReadWord(ctx);
+ struct ObjectEvent *objEvent;
+ // When applying script movements to follower, it may have frozen animation that must be cleared
+ if (localId == OBJ_EVENT_ID_FOLLOWER && (objEvent = GetFollowerObject()) && objEvent->frozen)
+ {
+ ClearObjectEventMovement(objEvent, &gSprites[objEvent->spriteId]);
+ gSprites[objEvent->spriteId].animCmdIndex = 0; // Reset start frame of animation
+ }
ScriptMovement_StartObjectMovementScript(localId, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, movementScript);
sMovingNpcId = localId;
+ objEvent = GetFollowerObject();
+ // Force follower into pokeball
+ if (localId != OBJ_EVENT_ID_FOLLOWER
+ && !FlagGet(FLAG_SAFE_FOLLOWER_MOVEMENT)
+ && (movementScript < Common_Movement_FollowerSafeStart || movementScript > Common_Movement_FollowerSafeEnd)
+ && (objEvent = GetFollowerObject())
+ && !objEvent->invisible)
+ {
+ ClearObjectEventMovement(objEvent, &gSprites[objEvent->spriteId]);
+ gSprites[objEvent->spriteId].animCmdIndex = 0; // Reset start frame of animation
+ ScriptMovement_StartObjectMovementScript(OBJ_EVENT_ID_FOLLOWER, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, EnterPokeballMovement);
+ }
return FALSE;
}
@@ -1017,7 +1039,16 @@ bool8 ScrCmd_applymovementat(struct ScriptContext *ctx)
static bool8 WaitForMovementFinish(void)
{
- return ScriptMovement_IsObjectMovementFinished(sMovingNpcId, sMovingNpcMapNum, sMovingNpcMapGroup);
+ if (ScriptMovement_IsObjectMovementFinished(sMovingNpcId, sMovingNpcMapNum, sMovingNpcMapGroup))
+ {
+ struct ObjectEvent *objEvent = GetFollowerObject();
+ // If the follower is still entering the pokeball, wait for it to finish too
+ // This prevents a `release` after this script command from getting the follower stuck in an intermediate state
+ if (sMovingNpcId != OBJ_EVENT_ID_FOLLOWER && objEvent && ObjectEventGetHeldMovementActionId(objEvent) == MOVEMENT_ACTION_ENTER_POKEBALL)
+ return ScriptMovement_IsObjectMovementFinished(objEvent->localId, objEvent->mapNum, objEvent->mapGroup);
+ return TRUE;
+ }
+ return FALSE;
}
bool8 ScrCmd_waitmovement(struct ScriptContext *ctx)
@@ -1180,10 +1211,10 @@ bool8 ScrCmd_setobjectmovementtype(struct ScriptContext *ctx)
bool8 ScrCmd_createvobject(struct ScriptContext *ctx)
{
- u8 graphicsId = ScriptReadByte(ctx);
+ u16 graphicsId = ScriptReadHalfword(ctx);
u8 virtualObjId = ScriptReadByte(ctx);
u16 x = VarGet(ScriptReadHalfword(ctx));
- u32 y = VarGet(ScriptReadHalfword(ctx));
+ u16 y = VarGet(ScriptReadHalfword(ctx));
u8 elevation = ScriptReadByte(ctx);
u8 direction = ScriptReadByte(ctx);
@@ -1216,7 +1247,7 @@ bool8 ScrCmd_lockall(struct ScriptContext *ctx)
}
}
-// lock freezes all object events except the player and the selected object immediately.
+// lock freezes all object events except the player, follower, and the selected object immediately.
// The player and selected object are frozen after waiting for their current movement to finish.
bool8 ScrCmd_lock(struct ScriptContext *ctx)
{
@@ -1226,16 +1257,22 @@ bool8 ScrCmd_lock(struct ScriptContext *ctx)
}
else
{
+ struct ObjectEvent *followerObj = GetFollowerObject();
if (gObjectEvents[gSelectedObjectEvent].active)
{
FreezeObjects_WaitForPlayerAndSelected();
SetupNativeScript(ctx, IsFreezeSelectedObjectAndPlayerFinished);
+ // follower is being talked to; keep it frozen
+ if (gObjectEvents[gSelectedObjectEvent].localId == OBJ_EVENT_ID_FOLLOWER)
+ followerObj = NULL;
}
else
{
FreezeObjects_WaitForPlayer();
SetupNativeScript(ctx, IsFreezePlayerFinished);
}
+ if (followerObj) // Unfreeze follower object
+ UnfreezeObjectEvent(followerObj);
return TRUE;
}
}
@@ -1243,6 +1280,10 @@ bool8 ScrCmd_lock(struct ScriptContext *ctx)
bool8 ScrCmd_releaseall(struct ScriptContext *ctx)
{
u8 playerObjectId;
+ struct ObjectEvent *followerObject = GetFollowerObject();
+ // Release follower from movement iff it exists and is in the shadowing state
+ if (followerObject && gSprites[followerObject->spriteId].data[1] == 0)
+ ClearObjectEventMovement(followerObject, &gSprites[followerObject->spriteId]);
HideFieldMessageBox();
playerObjectId = GetObjectEventIdByLocalIdAndMap(OBJ_EVENT_ID_PLAYER, 0, 0);
@@ -1255,6 +1296,10 @@ bool8 ScrCmd_releaseall(struct ScriptContext *ctx)
bool8 ScrCmd_release(struct ScriptContext *ctx)
{
u8 playerObjectId;
+ struct ObjectEvent *followerObject = GetFollowerObject();
+ // Release follower from movement iff it exists and is in the shadowing state
+ if (followerObject && gSprites[followerObject->spriteId].data[1] == 0)
+ ClearObjectEventMovement(followerObject, &gSprites[followerObject->spriteId]);
HideFieldMessageBox();
if (gObjectEvents[gSelectedObjectEvent].active)
@@ -1648,7 +1693,7 @@ bool8 ScrCmd_vmessage(struct ScriptContext *ctx)
bool8 ScrCmd_bufferspeciesname(struct ScriptContext *ctx)
{
u8 stringVarIndex = ScriptReadByte(ctx);
- u16 species = VarGet(ScriptReadHalfword(ctx));
+ u16 species = VarGet(ScriptReadHalfword(ctx)) & OBJ_EVENT_GFX_SPECIES_MASK; // ignore possible shiny / form bits
StringCopy(sScriptStringVars[stringVarIndex], GetSpeciesName(species));
return FALSE;
@@ -1665,6 +1710,14 @@ bool8 ScrCmd_bufferleadmonspeciesname(struct ScriptContext *ctx)
return FALSE;
}
+void BufferFirstLiveMonNickname(struct ScriptContext *ctx)
+{
+ u8 stringVarIndex = ScriptReadByte(ctx);
+
+ GetMonData(GetFirstLiveMon(), MON_DATA_NICKNAME, sScriptStringVars[stringVarIndex]);
+ StringGet_Nickname(sScriptStringVars[stringVarIndex]);
+}
+
bool8 ScrCmd_bufferpartymonnick(struct ScriptContext *ctx)
{
u8 stringVarIndex = ScriptReadByte(ctx);
@@ -2129,6 +2182,11 @@ bool8 ScrCmd_playmoncry(struct ScriptContext *ctx)
return FALSE;
}
+void PlayFirstMonCry(struct ScriptContext *ctx)
+{
+ PlayCry_Script(GetMonData(GetFirstLiveMon(), MON_DATA_SPECIES), CRY_MODE_NORMAL);
+}
+
bool8 ScrCmd_waitmoncry(struct ScriptContext *ctx)
{
SetupNativeScript(ctx, IsCryFinished);
@@ -2410,3 +2468,7 @@ bool8 ScrCmd_warpwhitefade(struct ScriptContext *ctx)
return TRUE;
}
+void ScriptSetDoubleBattleFlag(struct ScriptContext *ctx)
+{
+ sIsScriptedWildDouble = TRUE;
+}
diff --git a/src/script_menu.c b/src/script_menu.c
index b78f1ef112c1..706c4ac71517 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_pokemon_util.c b/src/script_pokemon_util.c
index 31e40fa31a6f..3d2c7d640cc3 100644
--- a/src/script_pokemon_util.c
+++ b/src/script_pokemon_util.c
@@ -7,6 +7,7 @@
#include "decompress.h"
#include "event_data.h"
#include "international_string_util.h"
+#include "item.h"
#include "link.h"
#include "link_rfu.h"
#include "main.h"
@@ -38,6 +39,10 @@ void HealPlayerParty(void)
HealPokemon(&gPlayerParty[i]);
if (OW_PC_HEAL >= GEN_8)
HealPlayerBoxes();
+
+ // Recharge Tera Orb, if possible.
+ if (B_FLAG_TERA_ORB_CHARGED != 0 && CheckBagHasItem(ITEM_TERA_ORB, 1))
+ FlagSet(B_FLAG_TERA_ORB_CHARGED);
}
static void HealPlayerBoxes(void)
@@ -289,7 +294,30 @@ void ToggleGigantamaxFactor(struct ScriptContext *ctx)
}
}
-u32 ScriptGiveMonParameterized(u16 species, u8 level, u16 item, u8 ball, u8 nature, u8 abilityNum, u8 gender, u8 *evs, u8 *ivs, u16 *moves, bool8 isShiny, bool8 ggMaxFactor, u8 teraType)
+void CheckTeraType(struct ScriptContext *ctx)
+{
+ u32 partyIndex = VarGet(ScriptReadHalfword(ctx));
+
+ gSpecialVar_Result = TYPE_NONE;
+
+ if (partyIndex < PARTY_SIZE)
+ gSpecialVar_Result = GetMonData(&gPlayerParty[partyIndex], MON_DATA_TERA_TYPE);
+}
+
+void SetTeraType(struct ScriptContext *ctx)
+{
+ u32 type = ScriptReadByte(ctx);
+ u32 partyIndex = VarGet(ScriptReadHalfword(ctx));
+
+ if (type < NUMBER_OF_MON_TYPES && partyIndex < PARTY_SIZE)
+ SetMonData(&gPlayerParty[partyIndex], MON_DATA_TERA_TYPE, &type);
+}
+
+/* Creates a Pokemon via script
+ * if side/slot are assigned, it will create the mon at the assigned party location
+ * if slot == PARTY_SIZE, it will give the mon to first available party or storage slot
+ */
+static u32 ScriptGiveMonParameterized(u8 side, u8 slot, u16 species, u8 level, u16 item, u8 ball, u8 nature, u8 abilityNum, u8 gender, u8 *evs, u8 *ivs, u16 *moves, bool8 isShiny, bool8 ggMaxFactor, u8 teraType)
{
u16 nationalDexNum;
int sentToPc;
@@ -328,7 +356,7 @@ u32 ScriptGiveMonParameterized(u16 species, u8 level, u16 item, u8 ball, u8 natu
// tera type
if (teraType >= NUMBER_OF_MON_TYPES)
- teraType = gSpeciesInfo[species].types[0];
+ teraType = TYPE_NONE;
SetMonData(&mon, MON_DATA_TERA_TYPE, &teraType);
// EV and IV
@@ -368,7 +396,7 @@ u32 ScriptGiveMonParameterized(u16 species, u8 level, u16 item, u8 ball, u8 natu
SetMonData(&mon, MON_DATA_ABILITY_NUM, &abilityNum);
// ball
- if (ball >= POKEBALL_COUNT)
+ if (ball > LAST_BALL)
ball = ITEM_POKE_BALL;
SetMonData(&mon, MON_DATA_POKEBALL, &ball);
@@ -384,34 +412,43 @@ u32 ScriptGiveMonParameterized(u16 species, u8 level, u16 item, u8 ball, u8 natu
SetMonData(&mon, MON_DATA_OT_NAME, gSaveBlock2Ptr->playerName);
SetMonData(&mon, MON_DATA_OT_GENDER, &gSaveBlock2Ptr->playerGender);
- // find empty party slot to decide whether the Pokémon goes to the Player's party or the storage system.
- for (i = 0; i < PARTY_SIZE; i++)
- {
- if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, NULL) == SPECIES_NONE)
- break;
- }
- if (i >= PARTY_SIZE)
+ if (slot < PARTY_SIZE)
{
- sentToPc = CopyMonToPC(&mon);
+ if (side == 0)
+ CopyMon(&gPlayerParty[slot], &mon, sizeof(struct Pokemon));
+ else
+ CopyMon(&gEnemyParty[slot], &mon, sizeof(struct Pokemon));
+ sentToPc = MON_GIVEN_TO_PARTY;
}
else
{
- sentToPc = MON_GIVEN_TO_PARTY;
- CopyMon(&gPlayerParty[i], &mon, sizeof(mon));
- gPlayerPartyCount = i + 1;
+ // find empty party slot to decide whether the Pokémon goes to the Player's party or the storage system.
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, NULL) == SPECIES_NONE)
+ break;
+ }
+ if (i >= PARTY_SIZE)
+ {
+ sentToPc = CopyMonToPC(&mon);
+ }
+ else
+ {
+ sentToPc = MON_GIVEN_TO_PARTY;
+ CopyMon(&gPlayerParty[i], &mon, sizeof(mon));
+ gPlayerPartyCount = i + 1;
+ }
}
- // set pokédex flags
- nationalDexNum = SpeciesToNationalPokedexNum(species);
- switch (sentToPc)
+ if (side == 0)
{
- case MON_GIVEN_TO_PARTY:
- case MON_GIVEN_TO_PC:
- GetSetPokedexFlag(nationalDexNum, FLAG_SET_SEEN);
- GetSetPokedexFlag(nationalDexNum, FLAG_SET_CAUGHT);
- break;
- case MON_CANT_GIVE:
- break;
+ // set pokédex flags
+ nationalDexNum = SpeciesToNationalPokedexNum(species);
+ if (sentToPc != MON_CANT_GIVE)
+ {
+ GetSetPokedexFlag(nationalDexNum, FLAG_SET_SEEN);
+ GetSetPokedexFlag(nationalDexNum, FLAG_SET_CAUGHT);
+ }
}
return sentToPc;
@@ -424,13 +461,17 @@ u32 ScriptGiveMon(u16 species, u8 level, u16 item)
MAX_PER_STAT_IVS + 1, MAX_PER_STAT_IVS + 1, MAX_PER_STAT_IVS + 1}; // ScriptGiveMonParameterized won't touch the stats' IV.
u16 moves[MAX_MON_MOVES] = {MOVE_NONE, MOVE_NONE, MOVE_NONE, MOVE_NONE};
- return ScriptGiveMonParameterized(species, level, item, ITEM_POKE_BALL, NUM_NATURES, NUM_ABILITY_PERSONALITY, MON_GENDERLESS, evs, ivs, moves, FALSE, FALSE, NUMBER_OF_MON_TYPES);
+ return ScriptGiveMonParameterized(0, PARTY_SIZE, species, level, item, ITEM_POKE_BALL, NUM_NATURES, NUM_ABILITY_PERSONALITY, MON_GENDERLESS, evs, ivs, moves, FALSE, FALSE, NUMBER_OF_MON_TYPES);
}
#define PARSE_FLAG(n, default_) (flags & (1 << (n))) ? VarGet(ScriptReadHalfword(ctx)) : (default_)
-void ScrCmd_givemon(struct ScriptContext *ctx)
+/* Give or create a mon to either player or opponent
+ */
+void ScrCmd_createmon(struct ScriptContext *ctx)
{
+ u8 side = ScriptReadByte(ctx);
+ u8 slot = ScriptReadByte(ctx);
u16 species = VarGet(ScriptReadHalfword(ctx));
u8 level = VarGet(ScriptReadHalfword(ctx));
@@ -446,12 +487,12 @@ void ScrCmd_givemon(struct ScriptContext *ctx)
u8 speedEv = PARSE_FLAG(8, 0);
u8 spAtkEv = PARSE_FLAG(9, 0);
u8 spDefEv = PARSE_FLAG(10, 0);
- u8 hpIv = PARSE_FLAG(11, Random() % MAX_PER_STAT_IVS + 1);
- u8 atkIv = PARSE_FLAG(12, Random() % MAX_PER_STAT_IVS + 1);
- u8 defIv = PARSE_FLAG(13, Random() % MAX_PER_STAT_IVS + 1);
- u8 speedIv = PARSE_FLAG(14, Random() % MAX_PER_STAT_IVS + 1);
- u8 spAtkIv = PARSE_FLAG(15, Random() % MAX_PER_STAT_IVS + 1);
- u8 spDefIv = PARSE_FLAG(16, Random() % MAX_PER_STAT_IVS + 1);
+ u8 hpIv = PARSE_FLAG(11, Random() % (MAX_PER_STAT_IVS + 1));
+ u8 atkIv = PARSE_FLAG(12, Random() % (MAX_PER_STAT_IVS + 1));
+ u8 defIv = PARSE_FLAG(13, Random() % (MAX_PER_STAT_IVS + 1));
+ u8 speedIv = PARSE_FLAG(14, Random() % (MAX_PER_STAT_IVS + 1));
+ u8 spAtkIv = PARSE_FLAG(15, Random() % (MAX_PER_STAT_IVS + 1));
+ u8 spDefIv = PARSE_FLAG(16, Random() % (MAX_PER_STAT_IVS + 1));
u16 move1 = PARSE_FLAG(17, MOVE_NONE);
u16 move2 = PARSE_FLAG(18, MOVE_NONE);
u16 move3 = PARSE_FLAG(19, MOVE_NONE);
@@ -464,7 +505,7 @@ void ScrCmd_givemon(struct ScriptContext *ctx)
u8 ivs[NUM_STATS] = {hpIv, atkIv, defIv, speedIv, spAtkIv, spDefIv};
u16 moves[MAX_MON_MOVES] = {move1, move2, move3, move4};
- gSpecialVar_Result = ScriptGiveMonParameterized(species, level, item, ball, nature, abilityNum, gender, evs, ivs, moves, isShiny, ggMaxFactor, teraType);
+ gSpecialVar_Result = ScriptGiveMonParameterized(side, slot, species, level, item, ball, nature, abilityNum, gender, evs, ivs, moves, isShiny, ggMaxFactor, teraType);
}
#undef PARSE_FLAG
diff --git a/src/secret_base.c b/src/secret_base.c
index 264cd9435a5a..7e0c1ae10738 100644
--- a/src/secret_base.c
+++ b/src/secret_base.c
@@ -159,7 +159,7 @@ static const struct YesNoFuncTable sDeleteRegistryYesNoFuncs =
.noFunc = DeleteRegistry_No,
};
-static const u8 sSecretBaseOwnerGfxIds[10] =
+static const u16 sSecretBaseOwnerGfxIds[10] =
{
// Male
OBJ_EVENT_GFX_YOUNGSTER,
diff --git a/src/shop.c b/src/shop.c
index f72736c89f3d..77f2039e3b52 100644
--- a/src/shop.c
+++ b/src/shop.c
@@ -34,6 +34,7 @@
#include "text_window.h"
#include "tv.h"
#include "constants/decorations.h"
+#include "constants/event_objects.h"
#include "constants/items.h"
#include "constants/metatile_behaviors.h"
#include "constants/rgb.h"
@@ -216,7 +217,8 @@ static const struct ListMenuTemplate sShopBuyMenuListTemplate =
.itemVerticalPadding = 0,
.scrollMultiple = LIST_NO_MULTIPLE_SCROLL,
.fontId = FONT_NARROW,
- .cursorKind = CURSOR_BLACK_ARROW
+ .cursorKind = CURSOR_BLACK_ARROW,
+ .textNarrowWidth = 84,
};
static const struct BgTemplate sShopBuyMenuBgTemplates[] =
@@ -868,7 +870,8 @@ static void BuyMenuCollectObjectEventData(void)
{
u8 objEventId = GetObjectEventIdByXY(facingX - 4 + x, facingY - 2 + y);
- if (objEventId != OBJECT_EVENTS_COUNT)
+ // skip if invalid or an overworld pokemon that is not following the player
+ if (objEventId != OBJECT_EVENTS_COUNT && !(gObjectEvents[objEventId].active && gObjectEvents[objEventId].graphicsId >= OBJ_EVENT_GFX_MON_BASE && gObjectEvents[objEventId].localId != OBJ_EVENT_ID_FOLLOWER))
{
sShopData->viewportObjects[numObjects][OBJ_EVENT_ID] = objEventId;
sShopData->viewportObjects[numObjects][X_COORD] = x;
@@ -902,7 +905,12 @@ static void BuyMenuDrawObjectEvents(void)
u8 i;
u8 spriteId;
const struct ObjectEventGraphicsInfo *graphicsInfo;
+ u8 weatherTemp = gWeatherPtr->palProcessingState;
+ // This function runs during fadeout, so the weather palette processing state must be temporarily changed,
+ // so that time-blending will work properly
+ if (weatherTemp == WEATHER_PAL_STATE_SCREEN_FADING_OUT)
+ gWeatherPtr->palProcessingState = WEATHER_PAL_STATE_IDLE;
for (i = 0; i < OBJECT_EVENTS_COUNT; i++)
{
if (sShopData->viewportObjects[i][OBJ_EVENT_ID] == OBJECT_EVENTS_COUNT)
@@ -925,6 +933,9 @@ static void BuyMenuDrawObjectEvents(void)
StartSpriteAnim(&gSprites[spriteId], sShopData->viewportObjects[i][ANIM_NUM]);
}
+
+ gWeatherPtr->palProcessingState = weatherTemp; // restore weather state
+ CpuFastCopy(gPlttBufferFaded + 16*16, gPlttBufferUnfaded + 16*16, PLTT_BUFFER_SIZE);
}
static bool8 BuyMenuCheckIfObjectEventOverlapsMenuBg(s16 *object)
@@ -1024,7 +1035,7 @@ static void Task_BuyMenu(u8 taskId)
else
{
StringCopy(gStringVar1, gDecorations[itemId].name);
- ConvertIntToDecimalStringN(gStringVar2, sShopData->totalCost, STR_CONV_MODE_LEFT_ALIGN, 6);
+ ConvertIntToDecimalStringN(gStringVar2, sShopData->totalCost, STR_CONV_MODE_LEFT_ALIGN, MAX_MONEY_DIGITS);
if (sMartInfo.martType == MART_TYPE_DECOR)
StringExpandPlaceholders(gStringVar4, gText_Var1IsItThatllBeVar2);
@@ -1086,7 +1097,7 @@ static void Task_BuyHowManyDialogueHandleInput(u8 taskId)
PutWindowTilemap(WIN_ITEM_LIST);
CopyItemName(tItemId, gStringVar1);
ConvertIntToDecimalStringN(gStringVar2, tItemCount, STR_CONV_MODE_LEFT_ALIGN, MAX_ITEM_DIGITS);
- ConvertIntToDecimalStringN(gStringVar3, sShopData->totalCost, STR_CONV_MODE_LEFT_ALIGN, 6);
+ ConvertIntToDecimalStringN(gStringVar3, sShopData->totalCost, STR_CONV_MODE_LEFT_ALIGN, MAX_MONEY_DIGITS);
BuyMenuDisplayMessage(taskId, gText_Var1AndYouWantedVar2, BuyMenuConfirmPurchase);
}
else if (JOY_NEW(B_BUTTON))
@@ -1215,7 +1226,7 @@ static void BuyMenuPrintItemQuantityAndPrice(u8 taskId)
s16 *data = gTasks[taskId].data;
FillWindowPixelBuffer(WIN_QUANTITY_PRICE, PIXEL_FILL(1));
- PrintMoneyAmount(WIN_QUANTITY_PRICE, 38, 1, sShopData->totalCost, TEXT_SKIP_DRAW);
+ PrintMoneyAmount(WIN_QUANTITY_PRICE, CalculateMoneyTextHorizontalPosition(sShopData->totalCost), 1, sShopData->totalCost, TEXT_SKIP_DRAW);
ConvertIntToDecimalStringN(gStringVar1, tItemCount, STR_CONV_MODE_LEADING_ZEROS, MAX_ITEM_DIGITS);
StringExpandPlaceholders(gStringVar4, gText_xVar1);
BuyMenuPrint(WIN_QUANTITY_PRICE, gStringVar4, 0, 1, 0, COLORID_NORMAL);
diff --git a/src/siirtc.c b/src/siirtc.c
index 1536aecb4234..a29a62da2666 100644
--- a/src/siirtc.c
+++ b/src/siirtc.c
@@ -4,7 +4,7 @@
#include "gba/gba.h"
#include "siirtc.h"
-#include "config.h"
+#include "config/general.h"
#define STATUS_INTFE 0x02 // frequency interrupt enable
#define STATUS_INTME 0x08 // per-minute interrupt enable
diff --git a/src/sound.c b/src/sound.c
index c6f01c8ad26b..548e48f163a9 100644
--- a/src/sound.c
+++ b/src/sound.c
@@ -5,6 +5,7 @@
#include "m4a.h"
#include "main.h"
#include "pokemon.h"
+#include "constants/cries.h"
#include "constants/songs.h"
#include "task.h"
@@ -460,7 +461,7 @@ void PlayCryInternal(u16 species, s8 pan, s8 volume, u8 priority, u8 mode)
SetPokemonCryPriority(priority);
species = GetCryIdBySpecies(species);
- if (species != 0)
+ if (species != CRY_NONE)
{
species--;
gMPlay_PokemonCry = SetPokemonCryTone(reverse ? &gCryTable_Reverse[species] : &gCryTable[species]);
diff --git a/src/strings.c b/src/strings.c
index 46067a7fe83b..254378d37920 100644
--- a/src/strings.c
+++ b/src/strings.c
@@ -220,20 +220,20 @@ const u8 gText_xVar1[] = _("×{STR_VAR_1}");
const u8 gText_Berry2[] = _(" BERRY"); // Unused
const u8 gText_Coins[] = _("{STR_VAR_1} COINS");
const u8 gText_CloseBag[] = _("CLOSE BAG");
-const u8 gText_Var1IsSelected[] = _("{STR_VAR_1} is\nselected.");
+const u8 gText_Var1IsSelected[] = _("{STR_VAR_1}\nis selected.");
const u8 gText_CantWriteMail[] = _("You can't write\nMAIL here.");
const u8 gText_NoPokemon[] = _("There is no\nPOKéMON.");
const u8 gText_MoveVar1Where[] = _("Move the\n{STR_VAR_1}\nwhere?");
const u8 gText_Var1CantBeHeld[] = _("The {STR_VAR_1} can't be held.");
const u8 gText_Var1CantBeHeldHere[] = _("The {STR_VAR_1} can't be held\nhere.");
-const u8 gText_DepositHowManyVar1[] = _("Deposit how many\n{STR_VAR_1}(s)?");
-const u8 gText_DepositedVar2Var1s[] = _("Deposited {STR_VAR_2}\n{STR_VAR_1}(s).");
+const u8 gText_DepositHowManyVar1[] = _("Deposit how many\n{STR_VAR_1}?");
+const u8 gText_DepositedVar2Var1s[] = _("Deposited {STR_VAR_2}\n{STR_VAR_1}.");
const u8 gText_NoRoomForItems[] = _("There's no room to\nstore items.");
const u8 gText_CantStoreImportantItems[] = _("Important items\ncan't be stored in\nthe PC!");
const u8 gText_TooImportantToToss[] = _("That's much too\nimportant to toss\nout!");
-const u8 gText_TossHowManyVar1s[] = _("Toss out how many\n{STR_VAR_1}(s)?");
-const u8 gText_ThrewAwayVar2Var1s[] = _("Threw away {STR_VAR_2}\n{STR_VAR_1}(s).");
-const u8 gText_ConfirmTossItems[] = _("Is it okay to\nthrow away {STR_VAR_2}\n{STR_VAR_1}(s)?");
+const u8 gText_TossHowManyVar1s[] = _("Toss out how many\n{STR_VAR_1}?");
+const u8 gText_ThrewAwayVar2Var1s[] = _("Threw away {STR_VAR_2}\n{STR_VAR_1}.");
+const u8 gText_ConfirmTossItems[] = _("Is it okay to\nthrow away {STR_VAR_2}\n{STR_VAR_1}?");
const u8 gText_DadsAdvice[] = _("DAD's advice…\n{PLAYER}, there's a time and place for\leverything!{PAUSE_UNTIL_PRESS}");
const u8 gText_CantDismountBike[] = _("You can't dismount your BIKE here.{PAUSE_UNTIL_PRESS}");
const u8 gText_ItemFinderNearby[] = _("Huh?\nThe ITEMFINDER's responding!\pThere's an item buried around here!{PAUSE_UNTIL_PRESS}");
@@ -596,8 +596,8 @@ const u8 gText_TakeOutItemsFromPC[] = _("Take out items from the PC.");
const u8 gText_ThrowAwayItemsInPC[] = _("Throw away items stored in the PC.");
const u8 gText_NoItems[] = _("There are no items.{PAUSE_UNTIL_PRESS}");
const u8 gText_NoRoomInBag[] = _("There is no more\nroom in the BAG.");
-const u8 gText_WithdrawHowManyItems[] = _("Withdraw how many\n{STR_VAR_1}(s)?");
-const u8 gText_WithdrawXItems[] = _("Withdrew {STR_VAR_2}\n{STR_VAR_1}(s).");
+const u8 gText_WithdrawHowManyItems[] = _("Withdraw how many\n{STR_VAR_1}?");
+const u8 gText_WithdrawXItems[] = _("Withdrew {STR_VAR_2}\n{STR_VAR_1}.");
const u8 gText_Read[] = _("READ");
const u8 gText_MoveToBag[] = _("MOVE TO BAG");
const u8 gText_Give2[] = _("GIVE");
@@ -1609,23 +1609,6 @@ const u8 gText_PkmnsNickname[] = _("{STR_VAR_1}'s nickname?");
const u8 gText_TellHimTheWords[] = _("Tell him the words.");
const u8 gText_MoveOkBack[] = _("{DPAD_NONE}MOVE {A_BUTTON}OK {B_BUTTON}BACK");
const u8 gText_CallCantBeMadeHere[] = _("A call can't be made from here.");
-const u8 gText_ContestLady_Handsome[] = _("HANDSOME");
-const u8 gText_ContestLady_Vinny[] = _("VINNY");
-const u8 gText_ContestLady_Moreme[] = _("MOREME");
-const u8 gText_ContestLady_Ironhard[] = _("IRONHARD");
-const u8 gText_ContestLady_Muscle[] = _("MUSCLE");
-const u8 gText_ContestLady_Coolness[] = _("coolness");
-const u8 gText_ContestLady_Beauty[] = _("beauty");
-const u8 gText_ContestLady_Cuteness[] = _("cuteness");
-const u8 gText_ContestLady_Smartness[] = _("smartness");
-const u8 gText_ContestLady_Toughness[] = _("toughness");
-const u8 gText_QuizLady_Lady[] = _("Lady");
-const u8 gText_FavorLady_Slippery[] = _("slippery");
-const u8 gText_FavorLady_Roundish[] = _("roundish");
-const u8 gText_FavorLady_Whamish[] = _("wham-ish");
-const u8 gText_FavorLady_Shiny[] = _("shiny");
-const u8 gText_FavorLady_Sticky[] = _("sticky");
-const u8 gText_FavorLady_Pointy[] = _("pointy");
const u8 gText_RentalPkmn2[] = _("RENTAL POKéMON");
const u8 gText_SelectFirstPkmn[] = _("Select the first POKéMON.");
const u8 gText_SelectSecondPkmn[] = _("Select the second POKéMON.");
@@ -1849,3 +1832,5 @@ const u8 gText_ExpShareOff[] = _("The Exp. Share has been turned off.{PAUSE_UNTI
const u8 gText_BasePointsResetToZero[] = _("{STR_VAR_1}'s base points\nwere all reset to zero!{PAUSE_UNTIL_PRESS}");
const u8 gText_Fertilize[] = _("FERTILIZE");
const u8 gText_PlantBerry[] = _("PLANT BERRY");
+const u8 gText_AM[] = _("AM");
+const u8 gText_PM[] = _("PM");
diff --git a/src/trainer_card.c b/src/trainer_card.c
index 225e8241ac0e..29e94bfe9f19 100755
--- a/src/trainer_card.c
+++ b/src/trainer_card.c
@@ -1045,7 +1045,7 @@ static void PrintMoneyOnCard(void)
else
AddTextPrinterParameterized3(WIN_CARD_TEXT, FONT_NORMAL, 16, 57, sTrainerCardTextColors, TEXT_SKIP_DRAW, gText_TrainerCardMoney);
- ConvertIntToDecimalStringN(gStringVar1, sData->trainerCard.money, STR_CONV_MODE_LEFT_ALIGN, 6);
+ ConvertIntToDecimalStringN(gStringVar1, sData->trainerCard.money, STR_CONV_MODE_LEFT_ALIGN, MAX_MONEY_DIGITS);
StringExpandPlaceholders(gStringVar4, gText_PokedollarVar1);
if (!sData->isHoenn)
{
diff --git a/src/trainer_pokemon_sprites.c b/src/trainer_pokemon_sprites.c
index 06b21d05cf2c..675c7643c805 100644
--- a/src/trainer_pokemon_sprites.c
+++ b/src/trainer_pokemon_sprites.c
@@ -251,7 +251,7 @@ u16 CreateMonPicSprite_Affine(u16 species, bool8 isShiny, u32 personality, u8 fl
return spriteId;
}
-static u16 FreeAndDestroyPicSpriteInternal(u16 spriteId)
+static u16 FreeAndDestroyPicSpriteInternal(u16 spriteId, bool8 clearPalette)
{
u8 i;
u8 *framePics;
@@ -267,7 +267,7 @@ static u16 FreeAndDestroyPicSpriteInternal(u16 spriteId)
framePics = sSpritePics[i].frames;
images = sSpritePics[i].images;
- if (sSpritePics[i].paletteTag != TAG_NONE)
+ if (clearPalette && sSpritePics[i].paletteTag != TAG_NONE)
FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(gSprites[spriteId].oam.paletteNum));
DestroySprite(&gSprites[spriteId]);
Free(framePics);
@@ -307,7 +307,12 @@ u16 CreateMonPicSprite(u16 species, bool8 isShiny, u32 personality, bool8 isFron
u16 FreeAndDestroyMonPicSprite(u16 spriteId)
{
- return FreeAndDestroyPicSpriteInternal(spriteId);
+ return FreeAndDestroyPicSpriteInternal(spriteId, TRUE);
+}
+
+u16 FreeAndDestroyMonPicSpriteNoPalette(u16 spriteId)
+{
+ return FreeAndDestroyPicSpriteInternal(spriteId, FALSE);
}
static u16 UNUSED LoadMonPicInWindow(u16 species, bool8 isShiny, u32 personality, bool8 isFrontPic, u8 paletteSlot, u8 windowId)
@@ -328,7 +333,7 @@ u16 CreateTrainerPicSprite(u16 species, bool8 isFrontPic, s16 x, s16 y, u8 palet
u16 FreeAndDestroyTrainerPicSprite(u16 spriteId)
{
- return FreeAndDestroyPicSpriteInternal(spriteId);
+ return FreeAndDestroyPicSpriteInternal(spriteId, TRUE);
}
static u16 UNUSED LoadTrainerPicInWindow(u16 species, bool8 isFrontPic, u8 paletteSlot, u8 windowId)
diff --git a/src/trainer_see.c b/src/trainer_see.c
index 7a88d3cf4678..67ab2ebe1d22 100644
--- a/src/trainer_see.c
+++ b/src/trainer_see.c
@@ -64,6 +64,8 @@ static const u8 sEmotion_QuestionMarkGfx[] = INCBIN_U8("graphics/field_effects/p
static const u8 sEmotion_HeartGfx[] = INCBIN_U8("graphics/field_effects/pics/emotion_heart.4bpp");
static const u8 sEmotion_DoubleExclamationMarkGfx[] = INCBIN_U8("graphics/field_effects/pics/emotion_double_exclamation.4bpp");
static const u8 sEmotion_XGfx[] = INCBIN_U8("graphics/field_effects/pics/emote_x.4bpp");
+// HGSS emote graphics ripped by Lemon on The Spriters Resource: https://www.spriters-resource.com/ds_dsi/pokemonheartgoldsoulsilver/sheet/30497/
+static const u8 sEmotion_Gfx[] = INCBIN_U8("graphics/misc/emotes.4bpp");
static u8 (*const sDirectionalApproachDistanceFuncs[])(struct ObjectEvent *trainerObj, s16 range, s16 x, s16 y) =
{
@@ -157,6 +159,120 @@ static const struct SpriteFrameImage sSpriteImageTable_HeartIcon[] =
}
};
+static const struct SpriteFrameImage sSpriteImageTable_Emotes[] =
+{
+ overworld_frame(sEmotion_Gfx, 2, 2, 0), // FOLLOWER_EMOTION_HAPPY
+ overworld_frame(sEmotion_Gfx, 2, 2, 1), // FOLLOWER_EMOTION_HAPPY
+ overworld_frame(sEmotion_Gfx, 2, 2, 2), // FOLLOWER_EMOTION_NEUTRAL
+ overworld_frame(sEmotion_Gfx, 2, 2, 3), // FOLLOWER_EMOTION_NEUTRAL
+ overworld_frame(sEmotion_Gfx, 2, 2, 4), // FOLLOWER_EMOTION_SAD
+ overworld_frame(sEmotion_Gfx, 2, 2, 5), // FOLLOWER_EMOTION_SAD
+ overworld_frame(sEmotion_Gfx, 2, 2, 6), // FOLLOWER_EMOTION_UPSET
+ overworld_frame(sEmotion_Gfx, 2, 2, 7), // FOLLOWER_EMOTION_UPSET
+ overworld_frame(sEmotion_Gfx, 2, 2, 8), // FOLLOWER_EMOTION_ANGRY
+ overworld_frame(sEmotion_Gfx, 2, 2, 9), // FOLLOWER_EMOTION_ANGRY
+ overworld_frame(sEmotion_Gfx, 2, 2, 10), // FOLLOWER_EMOTION_PENSIVE
+ overworld_frame(sEmotion_Gfx, 2, 2, 11), // FOLLOWER_EMOTION_PENSIVE
+ overworld_frame(sEmotion_Gfx, 2, 2, 12), // FOLLOWER_EMOTION_LOVE
+ overworld_frame(sEmotion_Gfx, 2, 2, 13), // FOLLOWER_EMOTION_LOVE
+ overworld_frame(sEmotion_Gfx, 2, 2, 14), // FOLLOWER_EMOTION_SURPRISE
+ overworld_frame(sEmotion_Gfx, 2, 2, 15), // FOLLOWER_EMOTION_SURPRISE
+ overworld_frame(sEmotion_Gfx, 2, 2, 16), // FOLLOWER_EMOTION_CURIOUS
+ overworld_frame(sEmotion_Gfx, 2, 2, 17), // FOLLOWER_EMOTION_CURIOUS
+ overworld_frame(sEmotion_Gfx, 2, 2, 18), // FOLLOWER_EMOTION_MUSIC
+ overworld_frame(sEmotion_Gfx, 2, 2, 19), // FOLLOWER_EMOTION_MUSIC
+ overworld_frame(sEmotion_Gfx, 2, 2, 20), // FOLLOWER_EMOTION_POISONED
+ overworld_frame(sEmotion_Gfx, 2, 2, 21), // FOLLOWER_EMOTION_POISONED
+};
+
+static const union AnimCmd sSpriteAnim_Emotes0[] =
+{
+ ANIMCMD_FRAME(0*2, 30),
+ ANIMCMD_FRAME(0*2+1, 25),
+ ANIMCMD_FRAME(0*2, 30),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_Emotes1[] =
+{
+ ANIMCMD_FRAME(1*2, 30),
+ ANIMCMD_FRAME(1*2+1, 25),
+ ANIMCMD_FRAME(1*2, 30),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_Emotes2[] =
+{
+ ANIMCMD_FRAME(2*2, 30),
+ ANIMCMD_FRAME(2*2+1, 25),
+ ANIMCMD_FRAME(2*2, 30),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_Emotes3[] =
+{
+ ANIMCMD_FRAME(3*2, 30),
+ ANIMCMD_FRAME(3*2+1, 25),
+ ANIMCMD_FRAME(3*2, 30),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_Emotes4[] =
+{
+ ANIMCMD_FRAME(4*2, 30),
+ ANIMCMD_FRAME(4*2+1, 25),
+ ANIMCMD_FRAME(4*2, 30),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_Emotes5[] =
+{
+ ANIMCMD_FRAME(5*2, 30),
+ ANIMCMD_FRAME(5*2+1, 25),
+ ANIMCMD_FRAME(5*2, 30),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_Emotes6[] =
+{
+ ANIMCMD_FRAME(6*2, 30),
+ ANIMCMD_FRAME(6*2+1, 25),
+ ANIMCMD_FRAME(6*2, 30),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_Emotes7[] =
+{
+ ANIMCMD_FRAME(7*2, 30),
+ ANIMCMD_FRAME(7*2+1, 25),
+ ANIMCMD_FRAME(7*2, 30),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_Emotes8[] =
+{
+ ANIMCMD_FRAME(8*2, 30),
+ ANIMCMD_FRAME(8*2+1, 25),
+ ANIMCMD_FRAME(8*2, 30),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_Emotes9[] =
+{
+ ANIMCMD_FRAME(9*2, 30),
+ ANIMCMD_FRAME(9*2+1, 25),
+ ANIMCMD_FRAME(9*2, 30),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_Emotes10[] =
+{
+ ANIMCMD_FRAME(10*2, 30),
+ ANIMCMD_FRAME(10*2+1, 25),
+ ANIMCMD_FRAME(10*2, 30),
+ ANIMCMD_END
+};
+
static const union AnimCmd sSpriteAnim_Icons1[] =
{
ANIMCMD_FRAME(0, 60),
@@ -190,10 +306,25 @@ static const union AnimCmd *const sSpriteAnimTable_Icons[] =
sSpriteAnim_Icons4
};
+static const union AnimCmd *const sSpriteAnimTable_Emotes[] =
+{
+ sSpriteAnim_Emotes0,
+ sSpriteAnim_Emotes1,
+ sSpriteAnim_Emotes2,
+ sSpriteAnim_Emotes3,
+ sSpriteAnim_Emotes4,
+ sSpriteAnim_Emotes5,
+ sSpriteAnim_Emotes6,
+ sSpriteAnim_Emotes7,
+ sSpriteAnim_Emotes8,
+ sSpriteAnim_Emotes9,
+ sSpriteAnim_Emotes10,
+};
+
static const struct SpriteTemplate sSpriteTemplate_ExclamationQuestionMark =
{
.tileTag = TAG_NONE,
- .paletteTag = TAG_NONE,
+ .paletteTag = OBJ_EVENT_PAL_TAG_MAY,
.oam = &sOamData_Icons,
.anims = sSpriteAnimTable_Icons,
.images = sSpriteImageTable_ExclamationQuestionMark,
@@ -204,7 +335,7 @@ static const struct SpriteTemplate sSpriteTemplate_ExclamationQuestionMark =
static const struct SpriteTemplate sSpriteTemplate_HeartIcon =
{
.tileTag = TAG_NONE,
- .paletteTag = FLDEFF_PAL_TAG_GENERAL_0,
+ .paletteTag = OBJ_EVENT_PAL_TAG_NPC_1,
.oam = &sOamData_Icons,
.anims = sSpriteAnimTable_Icons,
.images = sSpriteImageTable_HeartIcon,
@@ -212,6 +343,17 @@ static const struct SpriteTemplate sSpriteTemplate_HeartIcon =
.callback = SpriteCB_TrainerIcons
};
+static const struct SpriteTemplate sSpriteTemplate_Emote =
+{
+ .tileTag = TAG_NONE,
+ .paletteTag = OBJ_EVENT_PAL_TAG_EMOTES,
+ .oam = &sOamData_Icons,
+ .anims = sSpriteAnimTable_Emotes,
+ .images = sSpriteImageTable_Emotes,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_TrainerIcons
+};
+
// code
bool8 CheckForTrainersWantingBattle(void)
{
@@ -726,17 +868,35 @@ u8 FldEff_ExclamationMarkIcon(void)
u8 spriteId = CreateSpriteAtEnd(&sSpriteTemplate_ExclamationQuestionMark, 0, 0, 0x53);
if (spriteId != MAX_SPRITES)
+ {
SetIconSpriteData(&gSprites[spriteId], FLDEFF_EXCLAMATION_MARK_ICON, 0);
+ UpdateSpritePaletteByTemplate(&sSpriteTemplate_ExclamationQuestionMark, &gSprites[spriteId]);
+ }
return 0;
}
u8 FldEff_QuestionMarkIcon(void)
{
- u8 spriteId = CreateSpriteAtEnd(&sSpriteTemplate_ExclamationQuestionMark, 0, 0, 0x52);
+ u8 spriteId;
+ if (gFieldEffectArguments[7] >= 0)
+ {
+ // Use follower emotes
+ u8 emotion = gFieldEffectArguments[7];
+ spriteId = CreateSpriteAtEnd(&sSpriteTemplate_Emote, 0, 0, 0x52);
+ if (spriteId == MAX_SPRITES)
+ return 0;
+ SetIconSpriteData(&gSprites[spriteId], FLDEFF_EMOTE, emotion); // Set animation based on emotion
+ UpdateSpritePaletteByTemplate(&sSpriteTemplate_Emote, &gSprites[spriteId]);
+ return 0;
+ }
+ spriteId = CreateSpriteAtEnd(&sSpriteTemplate_ExclamationQuestionMark, 0, 0, 0x52);
if (spriteId != MAX_SPRITES)
+ {
SetIconSpriteData(&gSprites[spriteId], FLDEFF_QUESTION_MARK_ICON, 1);
+ UpdateSpritePaletteByTemplate(&sSpriteTemplate_ExclamationQuestionMark, &gSprites[spriteId]);
+ }
return 0;
}
@@ -750,7 +910,7 @@ u8 FldEff_HeartIcon(void)
struct Sprite *sprite = &gSprites[spriteId];
SetIconSpriteData(sprite, FLDEFF_HEART_ICON, 0);
- sprite->oam.paletteNum = 2;
+ UpdateSpritePaletteByTemplate(&sSpriteTemplate_HeartIcon, sprite);
}
return 0;
diff --git a/src/tv.c b/src/tv.c
index 215af04dced4..e0f910eaaf89 100644
--- a/src/tv.c
+++ b/src/tv.c
@@ -1455,7 +1455,7 @@ void BravoTrainerPokemonProfile_BeforeInterview2(u8 contestStandingPlace)
show->bravoTrainer.contestCategory = gSpecialVar_ContestCategory;
show->bravoTrainer.contestRank = gSpecialVar_ContestRank;
show->bravoTrainer.species = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_SPECIES, NULL);
- GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_NICKNAME, show->bravoTrainer.pokemonNickname);
+ GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_NICKNAME10, show->bravoTrainer.pokemonNickname);
StripExtCtrlCodes(show->bravoTrainer.pokemonNickname);
show->bravoTrainer.pokemonNameLanguage = GetMonData(&gPlayerParty[gContestMonPartyIndex], MON_DATA_LANGUAGE);
}
@@ -1536,7 +1536,7 @@ void PutNameRaterShowOnTheAir(void)
show->nameRaterShow.random2 = Random() % 2;
show->nameRaterShow.randomSpecies = GetRandomDifferentSpeciesSeenByPlayer(show->nameRaterShow.species);
StringCopy(show->nameRaterShow.trainerName, gSaveBlock2Ptr->playerName);
- GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_NICKNAME, show->nameRaterShow.pokemonName);
+ GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_NICKNAME10, show->nameRaterShow.pokemonName);
StripExtCtrlCodes(show->nameRaterShow.pokemonName);
StorePlayerIdInNormalShow(show);
show->nameRaterShow.language = gGameLanguage;
@@ -1612,7 +1612,7 @@ static void InterviewAfter_PkmnFanClubOpinions(void)
show->fanclubOpinions.friendshipHighNybble = GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_FRIENDSHIP, NULL) >> 4;
show->fanclubOpinions.questionAsked = gSpecialVar_0x8007;
StringCopy(show->fanclubOpinions.playerName, gSaveBlock2Ptr->playerName);
- GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_NICKNAME, show->fanclubOpinions.nickname);
+ GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_NICKNAME10, show->fanclubOpinions.nickname);
StripExtCtrlCodes(show->fanclubOpinions.nickname);
show->fanclubOpinions.species = GetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_SPECIES, NULL);
StorePlayerIdInNormalShow(show);
@@ -2229,7 +2229,7 @@ void TryPutSpotTheCutiesOnAir(struct Pokemon *pokemon, u8 ribbonMonDataIdx)
show->cuties.kind = TVSHOW_CUTIES;
show->cuties.active = FALSE; // NOTE: Show is not active until passed via Record Mix.
StringCopy(show->cuties.playerName, gSaveBlock2Ptr->playerName);
- GetMonData(pokemon, MON_DATA_NICKNAME, show->cuties.nickname);
+ GetMonData(pokemon, MON_DATA_NICKNAME10, show->cuties.nickname);
StripExtCtrlCodes(show->cuties.nickname);
show->cuties.nRibbons = GetRibbonCount(pokemon);
show->cuties.selectedRibbon = MonDataIdxToRibbon(ribbonMonDataIdx);
@@ -2760,16 +2760,14 @@ void ConvertIntToDecimalString(u8 varIdx, int value)
size_t CountDigits(int value)
{
- if (value / 10 == 0) return 1;
- if (value / 100 == 0) return 2;
- if (value / 1000 == 0) return 3;
- if (value / 10000 == 0) return 4;
- if (value / 100000 == 0) return 5;
- if (value / 1000000 == 0) return 6;
- if (value / 10000000 == 0) return 7;
- if (value / 100000000 == 0) return 8;
+ u32 count = 0;
- return 1;
+ while (value > 0)
+ {
+ value /= 10;
+ count++;
+ }
+ return count;
}
static void SmartShopper_BufferPurchaseTotal(u8 varIdx, TVShow *show)
diff --git a/src/union_room_player_avatar.c b/src/union_room_player_avatar.c
index 31f535310d15..6a2d6081c161 100644
--- a/src/union_room_player_avatar.c
+++ b/src/union_room_player_avatar.c
@@ -23,9 +23,8 @@ static u8 CreateTask_AnimateUnionRoomPlayers(void);
static u32 IsUnionRoomPlayerInvisible(u32, u32);
static void SetUnionRoomObjectFacingDirection(s32, s32, u8);
-// + 2 is just to match, those elements are empty and never read
// Graphics ids should correspond with the classes in gUnionRoomFacilityClasses
-static const u8 sUnionRoomObjGfxIds[GENDER_COUNT][NUM_UNION_ROOM_CLASSES + 2] = {
+static const u16 sUnionRoomObjGfxIds[GENDER_COUNT][NUM_UNION_ROOM_CLASSES] = {
[MALE] = {
OBJ_EVENT_GFX_MAN_3,
OBJ_EVENT_GFX_BLACK_BELT,
@@ -131,7 +130,7 @@ static bool32 IsPlayerStandingStill(void)
}
// Gender and trainer id are used to determine which sprite a player appears as
-static u8 GetUnionRoomPlayerGraphicsId(u32 gender, u32 id)
+static u16 GetUnionRoomPlayerGraphicsId(u32 gender, u32 id)
{
return sUnionRoomObjGfxIds[gender][id % NUM_UNION_ROOM_CLASSES];
}
@@ -442,7 +441,7 @@ static bool32 IsUnionRoomPlayerInvisible(u32 leaderId, u32 memberId)
return IsVirtualObjectInvisible(UR_PLAYER_SPRITE_ID(leaderId, memberId) - UR_SPRITE_START_ID);
}
-static void SpawnGroupMember(u32 leaderId, u32 memberId, u8 graphicsId, struct RfuGameData * gameData)
+static void SpawnGroupMember(u32 leaderId, u32 memberId, u16 graphicsId, struct RfuGameData * gameData)
{
s32 x, y;
s32 id = UR_PLAYER_SPRITE_ID(leaderId, memberId);
diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c
index c9d5c56e5c04..7d6af9bd794a 100644
--- a/src/use_pokeblock.c
+++ b/src/use_pokeblock.c
@@ -1393,7 +1393,7 @@ static void UpdateMonInfoText(u16 loadId, bool8 firstPrint)
partyIndex = GetPartyIdFromSelectionId(sMenu->info.curSelection);
nature = GetNature(&gPlayerParty[partyIndex]);
str = StringCopy(sMenu->info.natureText, gText_NatureSlash);
- str = StringCopy(str, gNatureNamePointers[nature]);
+ str = StringCopy(str, gNaturesInfo[nature].name);
AddTextPrinterParameterized3(WIN_NATURE, FONT_NORMAL, 2, 1, sNatureTextColors, 0, sMenu->info.natureText);
}
diff --git a/src/vs_seeker.c b/src/vs_seeker.c
index 30dcb74ce0c4..771c01dc7235 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 474c5ef560fe..ae7770aa3a34 100644
--- a/src/wild_encounter.c
+++ b/src/wild_encounter.c
@@ -51,6 +51,7 @@ enum {
static u16 FeebasRandom(void);
static void FeebasSeedRng(u16 seed);
+static void UpdateChainFishingStreak();
static bool8 IsWildLevelAllowedByRepel(u8 level);
static void ApplyFluteEncounterRateMod(u32 *encRate);
static void ApplyCleanseTagEncounterRateMod(u32 *encRate);
@@ -66,6 +67,7 @@ EWRAM_DATA static u8 sWildEncountersDisabled = 0;
EWRAM_DATA static u32 sFeebasRngValue = 0;
EWRAM_DATA bool8 gIsFishingEncounter = 0;
EWRAM_DATA bool8 gIsSurfingEncounter = 0;
+EWRAM_DATA u8 gChainFishingDexNavStreak = 0;
#include "data/wild_encounters.h"
@@ -404,10 +406,9 @@ u8 PickWildMonNature(void)
}
}
// check synchronize for a Pokémon with the same ability
- if (OW_SYNCHRONIZE_NATURE < GEN_9
- && !GetMonData(&gPlayerParty[0], MON_DATA_SANITY_IS_EGG)
+ if (!GetMonData(&gPlayerParty[0], MON_DATA_SANITY_IS_EGG)
&& GetMonAbility(&gPlayerParty[0]) == ABILITY_SYNCHRONIZE
- && (OW_SYNCHRONIZE_NATURE == GEN_8 || Random() % 2 == 0))
+ && (OW_SYNCHRONIZE_NATURE >= GEN_8 || Random() % 2 == 0))
{
return GetMonData(&gPlayerParty[0], MON_DATA_PERSONALITY) % NUM_NATURES;
}
@@ -418,10 +419,9 @@ u8 PickWildMonNature(void)
static void CreateWildMon(u16 species, u8 level)
{
- bool32 checkCuteCharm;
+ bool32 checkCuteCharm = TRUE;
ZeroEnemyPartyMons();
- checkCuteCharm = OW_CUTE_CHARM < GEN_9;
switch (gSpeciesInfo[species].genderRatio)
{
@@ -467,33 +467,33 @@ static bool8 TryGenerateWildMon(const struct WildPokemonInfo *wildMonInfo, u8 ar
switch (area)
{
case WILD_AREA_LAND:
- if (OW_MAGNET_PULL < GEN_9 && TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_STEEL, ABILITY_MAGNET_PULL, &wildMonIndex, LAND_WILD_COUNT))
+ if (TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_STEEL, ABILITY_MAGNET_PULL, &wildMonIndex, LAND_WILD_COUNT))
break;
- if (OW_STATIC < GEN_9 && TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_ELECTRIC, ABILITY_STATIC, &wildMonIndex, LAND_WILD_COUNT))
+ if (TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_ELECTRIC, ABILITY_STATIC, &wildMonIndex, LAND_WILD_COUNT))
break;
- if (OW_LIGHTNING_ROD == GEN_8 && TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_ELECTRIC, ABILITY_LIGHTNING_ROD, &wildMonIndex, LAND_WILD_COUNT))
+ if (OW_LIGHTNING_ROD >= GEN_8 && TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_ELECTRIC, ABILITY_LIGHTNING_ROD, &wildMonIndex, LAND_WILD_COUNT))
break;
- if (OW_FLASH_FIRE == GEN_8 && TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_FIRE, ABILITY_FLASH_FIRE, &wildMonIndex, LAND_WILD_COUNT))
+ if (OW_FLASH_FIRE >= GEN_8 && TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_FIRE, ABILITY_FLASH_FIRE, &wildMonIndex, LAND_WILD_COUNT))
break;
- if (OW_HARVEST == GEN_8 && TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_GRASS, ABILITY_HARVEST, &wildMonIndex, LAND_WILD_COUNT))
+ if (OW_HARVEST >= GEN_8 && TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_GRASS, ABILITY_HARVEST, &wildMonIndex, LAND_WILD_COUNT))
break;
- if (OW_STORM_DRAIN == GEN_8 && TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_WATER, ABILITY_STORM_DRAIN, &wildMonIndex, LAND_WILD_COUNT))
+ if (OW_STORM_DRAIN >= GEN_8 && TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_WATER, ABILITY_STORM_DRAIN, &wildMonIndex, LAND_WILD_COUNT))
break;
wildMonIndex = ChooseWildMonIndex_Land();
break;
case WILD_AREA_WATER:
- if (OW_MAGNET_PULL < GEN_9 && TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_STEEL, ABILITY_MAGNET_PULL, &wildMonIndex, WATER_WILD_COUNT))
+ if (TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_STEEL, ABILITY_MAGNET_PULL, &wildMonIndex, WATER_WILD_COUNT))
break;
- if (OW_STATIC < GEN_9 && TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_ELECTRIC, ABILITY_STATIC, &wildMonIndex, WATER_WILD_COUNT))
+ if (TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_ELECTRIC, ABILITY_STATIC, &wildMonIndex, WATER_WILD_COUNT))
break;
- if (OW_LIGHTNING_ROD == GEN_8 && TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_ELECTRIC, ABILITY_LIGHTNING_ROD, &wildMonIndex, WATER_WILD_COUNT))
+ if (OW_LIGHTNING_ROD >= GEN_8 && TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_ELECTRIC, ABILITY_LIGHTNING_ROD, &wildMonIndex, WATER_WILD_COUNT))
break;
- if (OW_FLASH_FIRE == GEN_8 && TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_FIRE, ABILITY_FLASH_FIRE, &wildMonIndex, WATER_WILD_COUNT))
+ if (OW_FLASH_FIRE >= GEN_8 && TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_FIRE, ABILITY_FLASH_FIRE, &wildMonIndex, WATER_WILD_COUNT))
break;
- if (OW_HARVEST == GEN_8 && TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_GRASS, ABILITY_HARVEST, &wildMonIndex, WATER_WILD_COUNT))
+ if (OW_HARVEST >= GEN_8 && TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_GRASS, ABILITY_HARVEST, &wildMonIndex, WATER_WILD_COUNT))
break;
- if (OW_STORM_DRAIN == GEN_8 && TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_WATER, ABILITY_STORM_DRAIN, &wildMonIndex, WATER_WILD_COUNT))
+ if (OW_STORM_DRAIN >= GEN_8 && TRY_GET_ABILITY_INFLUENCED_WILD_MON_INDEX(wildMonInfo->wildPokemon, TYPE_WATER, ABILITY_STORM_DRAIN, &wildMonIndex, WATER_WILD_COUNT))
break;
wildMonIndex = ChooseWildMonIndex_WaterRock();
@@ -516,10 +516,12 @@ static bool8 TryGenerateWildMon(const struct WildPokemonInfo *wildMonInfo, u8 ar
static u16 GenerateFishingWildMon(const struct WildPokemonInfo *wildMonInfo, u8 rod)
{
u8 wildMonIndex = ChooseWildMonIndex_Fishing(rod);
+ u16 wildMonSpecies = wildMonInfo->wildPokemon[wildMonIndex].species;
u8 level = ChooseWildMonLevel(wildMonInfo->wildPokemon, wildMonIndex, WILD_AREA_FISHING);
- CreateWildMon(wildMonInfo->wildPokemon[wildMonIndex].species, level);
- return wildMonInfo->wildPokemon[wildMonIndex].species;
+ UpdateChainFishingStreak();
+ CreateWildMon(wildMonSpecies, level);
+ return wildMonSpecies;
}
static bool8 SetUpMassOutbreakEncounter(u8 flags)
@@ -574,7 +576,7 @@ static bool8 WildEncounterCheck(u32 encounterRate, bool8 ignoreAbility)
encounterRate = encounterRate * 3 / 4;
else if (ability == ABILITY_STENCH)
encounterRate /= 2;
- else if (ability == ABILITY_ILLUMINATE && OW_ILLUMINATE < GEN_9)
+ else if (ability == ABILITY_ILLUMINATE)
encounterRate *= 2;
else if (ability == ABILITY_WHITE_SMOKE)
encounterRate /= 2;
@@ -586,7 +588,7 @@ static bool8 WildEncounterCheck(u32 encounterRate, bool8 ignoreAbility)
encounterRate /= 2;
else if (ability == ABILITY_QUICK_FEET)
encounterRate /= 2;
- else if (ability == ABILITY_INFILTRATOR && OW_INFILTRATOR == GEN_8)
+ else if (ability == ABILITY_INFILTRATOR && OW_INFILTRATOR >= GEN_8)
encounterRate /= 2;
else if (ability == ABILITY_NO_GUARD)
encounterRate *= 2;
@@ -669,9 +671,9 @@ bool8 StandardWildEncounter(u16 curMetatileBehavior, u16 prevMetatileBehavior)
else if (WildEncounterCheck(gWildMonHeaders[headerId].landMonsInfo->encounterRate, FALSE) != TRUE)
return FALSE;
- if (TryStartRoamerEncounter() == TRUE)
+ if (TryStartRoamerEncounter())
{
- roamer = &gSaveBlock1Ptr->roamer;
+ roamer = &gSaveBlock1Ptr->roamer[gEncounteredRoamerIndex];
if (!IsWildLevelAllowedByRepel(roamer->level))
return FALSE;
@@ -718,9 +720,9 @@ bool8 StandardWildEncounter(u16 curMetatileBehavior, u16 prevMetatileBehavior)
else if (WildEncounterCheck(gWildMonHeaders[headerId].waterMonsInfo->encounterRate, FALSE) != TRUE)
return FALSE;
- if (TryStartRoamerEncounter() == TRUE)
+ if (TryStartRoamerEncounter())
{
- roamer = &gSaveBlock1Ptr->roamer;
+ roamer = &gSaveBlock1Ptr->roamer[gEncounteredRoamerIndex];
if (!IsWildLevelAllowedByRepel(roamer->level))
return FALSE;
@@ -820,7 +822,7 @@ bool8 SweetScentWildEncounter(void)
if (gWildMonHeaders[headerId].landMonsInfo == NULL)
return FALSE;
- if (TryStartRoamerEncounter() == TRUE)
+ if (TryStartRoamerEncounter())
{
BattleSetup_StartRoamerBattle();
return TRUE;
@@ -841,7 +843,7 @@ bool8 SweetScentWildEncounter(void)
if (gWildMonHeaders[headerId].waterMonsInfo == NULL)
return FALSE;
- if (TryStartRoamerEncounter() == TRUE)
+ if (TryStartRoamerEncounter())
{
BattleSetup_StartRoamerBattle();
return TRUE;
@@ -866,10 +868,27 @@ bool8 DoesCurrentMapHaveFishingMons(void)
return FALSE;
}
+u32 CalculateChainFishingShinyRolls(void)
+{
+ return (2 * min(gChainFishingDexNavStreak, FISHING_CHAIN_SHINY_STREAK_MAX));
+}
+
+static void UpdateChainFishingStreak()
+{
+ if (!I_FISHING_CHAIN)
+ return;
+
+ if (gChainFishingDexNavStreak >= FISHING_CHAIN_LENGTH_MAX)
+ return;
+
+ gChainFishingDexNavStreak++;
+}
+
void FishingWildEncounter(u8 rod)
{
u16 species;
+ gIsFishingEncounter = TRUE;
if (CheckFeebas() == TRUE)
{
u8 level = ChooseWildMonLevel(&sWildFeebas, 0, WILD_AREA_FISHING);
@@ -881,9 +900,9 @@ void FishingWildEncounter(u8 rod)
{
species = GenerateFishingWildMon(gWildMonHeaders[GetCurrentMapWildMonHeaderId()].fishingMonsInfo, rod);
}
+
IncrementGameStat(GAME_STAT_FISHING_ENCOUNTERS);
SetPokemonAnglerSpecies(species);
- gIsFishingEncounter = TRUE;
BattleSetup_StartWildBattle();
}
diff --git a/test/battle/ability/adaptability.c b/test/battle/ability/adaptability.c
new file mode 100644
index 000000000000..fecdc6b7e26f
--- /dev/null
+++ b/test/battle/ability/adaptability.c
@@ -0,0 +1,46 @@
+#include "global.h"
+#include "test/battle.h"
+
+TO_DO_BATTLE_TEST("Adaptability increases same-type attack bonus from x1.5 to x2");
+
+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 000000000000..8a5f889a662a
--- /dev/null
+++ b/test/battle/ability/aerilate.c
@@ -0,0 +1,33 @@
+#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!");
+ }
+}
+
+TO_DO_BATTLE_TEST("Aerilate can not turn certain moves into Flying type moves");
+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 000000000000..65c0be7dfd2f
--- /dev/null
+++ b/test/battle/ability/aftermath.c
@@ -0,0 +1,4 @@
+#include "global.h"
+#include "test/battle.h"
+
+TO_DO_BATTLE_TEST("Aftermath damages the attacker by 1/4th of its max HP if they faint the target has this ability by a contact move");
diff --git a/test/battle/ability/air_lock.c b/test/battle/ability/air_lock.c
new file mode 100644
index 000000000000..0201e86a20fb
--- /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 000000000000..44c42ae2d59e
--- /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 0b13b9df4bcf..270d66f28e82 100644
--- a/test/battle/ability/anger_point.c
+++ b/test/battle/ability/anger_point.c
@@ -37,7 +37,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,7 +47,9 @@ 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")
+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+)")
{
ASSUME(gMovesInfo[MOVE_FROST_BREATH].alwaysCriticalHit);
ASSUME(gMovesInfo[MOVE_SUBSTITUTE].effect == EFFECT_SUBSTITUTE);
@@ -62,7 +64,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 f0d11d757649..c5b490216b2f 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 000000000000..a15ff153d9a9
--- /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 000000000000..ef0d5b7d8cb6
--- /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 000000000000..dc53fa149225
--- /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 000000000000..0d5367bf378e
--- /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/aura_break.c b/test/battle/ability/aura_break.c
new file mode 100644
index 000000000000..93b21421e419
--- /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/beads_of_ruin.c b/test/battle/ability/beads_of_ruin.c
index f7c9c267dceb..bb05031fe3ea 100644
--- a/test/battle/ability/beads_of_ruin.c
+++ b/test/battle/ability/beads_of_ruin.c
@@ -67,7 +67,7 @@ SINGLE_BATTLE_TEST("Beads of Ruin's message displays correctly after all battler
HP_BAR(player, hp: 0);
ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, player);
// Everyone faints.
- MESSAGE("Go! Wobbuffet!");
+ SEND_IN_MESSAGE("Wobbuffet");
MESSAGE("2 sent out Chi-Yu!");
ABILITY_POPUP(opponent, ABILITY_BEADS_OF_RUIN);
MESSAGE("Foe Chi-Yu's Beads of Ruin weakened the Sp. Def of all surrounding Pokémon!");
diff --git a/test/battle/ability/chilling_neigh.c b/test/battle/ability/chilling_neigh.c
new file mode 100644
index 000000000000..03be77000b76
--- /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 000000000000..493a197638be
--- /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 5dd4eff5db2d..dc82be67b434 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!");
@@ -400,7 +400,7 @@ SINGLE_BATTLE_TEST("Clear Body, Full Metal Body, and White Smoke don't prevent S
MESSAGE("Foe Torkoal used Celebrate!");
else
MESSAGE("Foe Metang used Celebrate!");
- MESSAGE("Wobbuffet used SpectrlThief!");
+ MESSAGE("Wobbuffet used Spectral Thief!");
ANIMATION(ANIM_TYPE_MOVE, MOVE_SPECTRAL_THIEF, player);
NOT ABILITY_POPUP(opponent, ability);
MESSAGE("Wobbuffet used Celebrate!");
diff --git a/test/battle/ability/cloud_nine.c b/test/battle/ability/cloud_nine.c
index dfe5611fc4be..887769a5ec7b 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/color_change.c b/test/battle/ability/color_change.c
index b7828bb978af..86c009e8ac37 100644
--- a/test/battle/ability/color_change.c
+++ b/test/battle/ability/color_change.c
@@ -73,7 +73,7 @@ SINGLE_BATTLE_TEST("Color Change changes the user to Electric type if hit by a m
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYCHO_CUT, player);
ABILITY_POPUP(opponent, ABILITY_COLOR_CHANGE);
- MESSAGE("Foe Wobbuffet's Color Change made it the Electr type!");
+ MESSAGE("Foe Wobbuffet's Color Change made it the Electric type!");
}
}
@@ -90,7 +90,7 @@ SINGLE_BATTLE_TEST("Color Change changes the type when a Pokemon is hit by Futur
ANIMATION(ANIM_TYPE_MOVE, MOVE_FUTURE_SIGHT, player);
MESSAGE("Foe Snorlax took the Future Sight attack!");
ABILITY_POPUP(opponent, ABILITY_COLOR_CHANGE);
- MESSAGE("Foe Snorlax's Color Change made it the Psychc type!");
+ MESSAGE("Foe Snorlax's Color Change made it the Psychic type!");
}
}
diff --git a/test/battle/ability/comatose.c b/test/battle/ability/comatose.c
index bd991c258eb9..cc65e9afac7e 100644
--- a/test/battle/ability/comatose.c
+++ b/test/battle/ability/comatose.c
@@ -34,7 +34,10 @@ SINGLE_BATTLE_TEST("Comatose may be suppressed if pokemon transformed into a pok
PARAMETRIZE { move = MOVE_THUNDER_WAVE; }
GIVEN {
- PLAYER(SPECIES_KOMALA) { Ability(ABILITY_COMATOSE); Speed(30); }
+ // FIXME: Explicit moves currently required here because Ditto
+ // expects to find Celebrate in slot 1 during the second turn
+ // (after transforming).
+ PLAYER(SPECIES_KOMALA) { Ability(ABILITY_COMATOSE); Speed(30); Moves(MOVE_CELEBRATE, MOVE_GASTRO_ACID, move); }
OPPONENT(SPECIES_DITTO) { Speed(20); }
} WHEN {
TURN { MOVE(player, MOVE_GASTRO_ACID); MOVE(opponent, MOVE_TRANSFORM); }
diff --git a/test/battle/ability/contrary.c b/test/battle/ability/contrary.c
index 4df0bc39ed0e..d257a7a34430 100644
--- a/test/battle/ability/contrary.c
+++ b/test/battle/ability/contrary.c
@@ -82,7 +82,7 @@ SINGLE_BATTLE_TEST("Contrary raises stats after using a move which would normall
PARAMETRIZE { ability = ABILITY_CONTRARY; }
PARAMETRIZE { ability = ABILITY_TANGLED_FEET; }
GIVEN {
- ASSUME(MoveHasAdditionalEffectSelf(MOVE_OVERHEAT, MOVE_EFFECT_SP_ATK_TWO_DOWN) == TRUE);
+ ASSUME(MoveHasAdditionalEffectSelf(MOVE_OVERHEAT, MOVE_EFFECT_SP_ATK_MINUS_2) == TRUE);
ASSUME(gMovesInfo[MOVE_OVERHEAT].category == DAMAGE_CATEGORY_SPECIAL);
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_SPINDA) { Ability(ability); }
diff --git a/test/battle/ability/cute_charm.c b/test/battle/ability/cute_charm.c
index af9815e75081..06eb4cf84284 100644
--- a/test/battle/ability/cute_charm.c
+++ b/test/battle/ability/cute_charm.c
@@ -45,3 +45,22 @@ SINGLE_BATTLE_TEST("Cute Charm cannot infatuate same gender")
ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player);
}
}
+
+SINGLE_BATTLE_TEST("Cute Charm triggers 30% of the time")
+{
+ PASSES_RANDOMLY(3, 10, RNG_CUTE_CHARM);
+ GIVEN {
+ ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_4);
+ ASSUME(gMovesInfo[MOVE_TACKLE].makesContact);
+ PLAYER(SPECIES_WOBBUFFET) { Gender(MON_MALE); }
+ OPPONENT(SPECIES_CLEFAIRY) { Gender(MON_FEMALE); Ability(ABILITY_CUTE_CHARM); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_TACKLE); }
+ TURN { MOVE(player, MOVE_TACKLE); }
+ } SCENE {
+ ABILITY_POPUP(opponent, ABILITY_CUTE_CHARM);
+ ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_INFATUATION, player);
+ MESSAGE("Foe Clefairy's Cute Charm infatuated Wobbuffet!");
+ MESSAGE("Wobbuffet is in love with Foe Clefairy!");
+ }
+}
diff --git a/test/battle/ability/damp.c b/test/battle/ability/damp.c
index 9a3b795f2ae1..b567293aa09b 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 f54f7ab76ae7..660a719c6928 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/dauntless_shield.c b/test/battle/ability/dauntless_shield.c
index f412011c651e..ff7cc723acb3 100644
--- a/test/battle/ability/dauntless_shield.c
+++ b/test/battle/ability/dauntless_shield.c
@@ -56,7 +56,7 @@ SINGLE_BATTLE_TEST("Dauntless Shield activates when it's no longer effected by N
} SCENE {
ABILITY_POPUP(player, ABILITY_NEUTRALIZING_GAS);
MESSAGE("Neutralizing Gas filled the area!");
- MESSAGE("Weezing, that's enough! Come back!");
+ SWITCH_OUT_MESSAGE("Weezing");
MESSAGE("The effects of Neutralizing Gas wore off!");
ABILITY_POPUP(opponent, ABILITY_DAUNTLESS_SHIELD);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
diff --git a/test/battle/ability/defiant.c b/test/battle/ability/defiant.c
index d464dd2443f3..79136a559d59 100644
--- a/test/battle/ability/defiant.c
+++ b/test/battle/ability/defiant.c
@@ -128,7 +128,7 @@ SINGLE_BATTLE_TEST("Defiant activates after Sticky Web lowers Speed")
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, opponent);
// Switch-in - Sticky Web activates
- MESSAGE("Go! Mankey!");
+ 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!");
@@ -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 7d3e36bf7857..c4f79d8fe350 100644
--- a/test/battle/ability/disguise.c
+++ b/test/battle/ability/disguise.c
@@ -121,3 +121,16 @@ SINGLE_BATTLE_TEST("Disguised Mimikyu takes damage from Rough Skin without break
EXPECT_EQ(player->species, SPECIES_MIMIKYU_DISGUISED);
}
}
+
+SINGLE_BATTLE_TEST("Disguised Mimikyu is ignored by Mold Breaker")
+{
+ GIVEN {
+ PLAYER(SPECIES_MIMIKYU_DISGUISED) { Ability(ABILITY_DISGUISE); }
+ OPPONENT(SPECIES_PINSIR) { Ability(ABILITY_MOLD_BREAKER); }
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_AERIAL_ACE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_AERIAL_ACE, opponent);
+ NOT ABILITY_POPUP(player, ABILITY_DISGUISE);
+ }
+}
diff --git a/test/battle/ability/download.c b/test/battle/ability/download.c
index 4a6daf8d189d..9fecda400d3b 100644
--- a/test/battle/ability/download.c
+++ b/test/battle/ability/download.c
@@ -73,7 +73,7 @@ SINGLE_BATTLE_TEST("Download doesn't activate if target hasn't been sent out yet
ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, player);
// Everyone faints.
- MESSAGE("Go! Porygon!");
+ SEND_IN_MESSAGE("Porygon");
NONE_OF {
ABILITY_POPUP(player, ABILITY_DOWNLOAD);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
diff --git a/test/battle/ability/drought.c b/test/battle/ability/drought.c
new file mode 100644
index 000000000000..bbe4dbe853a1
--- /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 368e4b80470b..5709a58a9448 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/effect_spore.c b/test/battle/ability/effect_spore.c
new file mode 100644
index 000000000000..107cd086757f
--- /dev/null
+++ b/test/battle/ability/effect_spore.c
@@ -0,0 +1,90 @@
+#include "global.h"
+#include "test/battle.h"
+
+SINGLE_BATTLE_TEST("Effect Spore only inflicts status on contact")
+{
+ u32 move;
+
+ PARAMETRIZE { move = MOVE_TACKLE; }
+ PARAMETRIZE { move = MOVE_SWIFT; }
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_TACKLE].makesContact);
+ ASSUME(!gMovesInfo[MOVE_SWIFT].makesContact);
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_BRELOOM) { Ability(ABILITY_EFFECT_SPORE); }
+ } WHEN {
+ TURN { MOVE(player, move, WITH_RNG(RNG_EFFECT_SPORE, 1)); }
+ TURN {}
+ } SCENE {
+ if (gMovesInfo[move].makesContact) {
+ ABILITY_POPUP(opponent, ABILITY_EFFECT_SPORE);
+ ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, player);
+ MESSAGE("Wobbuffet was poisoned by Foe Breloom's Effect Spore!");
+ STATUS_ICON(player, poison: TRUE);
+ } else {
+ NONE_OF {
+ ABILITY_POPUP(opponent, ABILITY_EFFECT_SPORE);
+ ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, player);
+ MESSAGE("Wobbuffet was poisoned by Foe Breloom's Effect Spore!");
+ STATUS_ICON(player, poison: TRUE);
+ }
+ }
+ }
+}
+
+SINGLE_BATTLE_TEST("Effect Spore causes poison 9% of the time")
+{
+ PASSES_RANDOMLY(9, 100, RNG_EFFECT_SPORE);
+ GIVEN {
+ ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_5);
+ ASSUME(gMovesInfo[MOVE_TACKLE].makesContact);
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_BRELOOM) { Ability(ABILITY_EFFECT_SPORE); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_TACKLE); }
+ TURN {}
+ } SCENE {
+ ABILITY_POPUP(opponent, ABILITY_EFFECT_SPORE);
+ ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, player);
+ MESSAGE("Wobbuffet was poisoned by Foe Breloom's Effect Spore!");
+ STATUS_ICON(player, poison: TRUE);
+ }
+}
+
+SINGLE_BATTLE_TEST("Effect Spore causes paralysis 10% of the time")
+{
+ PASSES_RANDOMLY(10, 100, RNG_EFFECT_SPORE);
+ GIVEN {
+ ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_5);
+ ASSUME(gMovesInfo[MOVE_TACKLE].makesContact);
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_BRELOOM) { Ability(ABILITY_EFFECT_SPORE); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_TACKLE); }
+ TURN {}
+ } SCENE {
+ ABILITY_POPUP(opponent, ABILITY_EFFECT_SPORE);
+ ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PRZ, player);
+ MESSAGE("Foe Breloom's Effect Spore paralyzed Wobbuffet! It may be unable to move!");
+ STATUS_ICON(player, paralysis: TRUE);
+ }
+}
+
+SINGLE_BATTLE_TEST("Effect Spore causes sleep 11% of the time")
+{
+ PASSES_RANDOMLY(11, 100, RNG_EFFECT_SPORE);
+ GIVEN {
+ ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_5);
+ ASSUME(gMovesInfo[MOVE_TACKLE].makesContact);
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_BRELOOM) { Ability(ABILITY_EFFECT_SPORE); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_TACKLE); }
+ TURN {}
+ } SCENE {
+ ABILITY_POPUP(opponent, ABILITY_EFFECT_SPORE);
+ ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_SLP, player);
+ MESSAGE("Foe Breloom's Effect Spore made Wobbuffet sleep!");
+ STATUS_ICON(player, sleep: TRUE);
+ }
+}
diff --git a/test/battle/ability/embody_aspect.c b/test/battle/ability/embody_aspect.c
index 728ba8cb9432..a2427875f6a0 100644
--- a/test/battle/ability/embody_aspect.c
+++ b/test/battle/ability/embody_aspect.c
@@ -50,7 +50,7 @@ SINGLE_BATTLE_TEST("Embody Aspect activates when it's no longer effected by Neut
} SCENE {
ABILITY_POPUP(player, ABILITY_NEUTRALIZING_GAS);
MESSAGE("Neutralizing Gas filled the area!");
- MESSAGE("Weezing, that's enough! Come back!");
+ SWITCH_OUT_MESSAGE("Weezing");
MESSAGE("The effects of Neutralizing Gas wore off!");
ABILITY_POPUP(opponent, ABILITY_EMBODY_ASPECT_TEAL_MASK);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
diff --git a/test/battle/ability/flame_body.c b/test/battle/ability/flame_body.c
index 84d2cd48f254..f44fb91724a4 100644
--- a/test/battle/ability/flame_body.c
+++ b/test/battle/ability/flame_body.c
@@ -29,3 +29,21 @@ SINGLE_BATTLE_TEST("Flame Body inflicts burn on contact")
}
}
}
+
+SINGLE_BATTLE_TEST("Flame Body triggers 30% of the time")
+{
+ PASSES_RANDOMLY(3, 10, RNG_FLAME_BODY);
+ GIVEN {
+ ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_4);
+ ASSUME(gMovesInfo[MOVE_TACKLE].makesContact);
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_MAGMAR) { Ability(ABILITY_FLAME_BODY); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_TACKLE); }
+ } SCENE {
+ ABILITY_POPUP(opponent, ABILITY_FLAME_BODY);
+ ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, player);
+ MESSAGE("Foe Magmar's Flame Body burned Wobbuffet!");
+ STATUS_ICON(player, burn: TRUE);
+ }
+}
diff --git a/test/battle/ability/flower_gift.c b/test/battle/ability/flower_gift.c
index 2c1006e3f571..68712641e09d 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;
@@ -143,7 +147,7 @@ SINGLE_BATTLE_TEST("Flower Gift transforms Cherrim back when it switches out")
ABILITY_POPUP(player, ABILITY_FLOWER_GIFT);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player);
MESSAGE("Cherrim transformed!");
- MESSAGE("Cherrim, that's enough! Come back!");
+ SWITCH_OUT_MESSAGE("Cherrim");
} THEN {
EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_CHERRIM);
}
diff --git a/test/battle/ability/forecast.c b/test/battle/ability/forecast.c
index f87e34a532be..24a0eed95779 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!");
@@ -368,7 +371,7 @@ SINGLE_BATTLE_TEST("Forecast transforms Castform back when it switches out")
ABILITY_POPUP(player, ABILITY_FORECAST);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player);
MESSAGE("Castform transformed!");
- MESSAGE("Castform, that's enough! Come back!");
+ SWITCH_OUT_MESSAGE("Castform");
} THEN {
EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_SPECIES), SPECIES_CASTFORM);
}
@@ -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/frisk.c b/test/battle/ability/frisk.c
index dd6d0f691f64..385ab7e1f909 100644
--- a/test/battle/ability/frisk.c
+++ b/test/battle/ability/frisk.c
@@ -37,9 +37,9 @@ SINGLE_BATTLE_TEST("Frisk triggers in a Single Battle")
DOUBLE_BATTLE_TEST("Frisk triggers for player in a Double Battle after switching-in after fainting")
{
- bool32 targetLeft;
- PARAMETRIZE { targetLeft = TRUE; }
- PARAMETRIZE { targetLeft = FALSE; }
+ struct BattlePokemon *target = NULL;
+ PARAMETRIZE { target = playerLeft; }
+ PARAMETRIZE { target = playerRight; }
GIVEN {
ASSUME(gMovesInfo[MOVE_POUND].power != 0);
@@ -49,20 +49,20 @@ DOUBLE_BATTLE_TEST("Frisk triggers for player in a Double Battle after switching
OPPONENT(SPECIES_WYNAUT) { Item(ITEM_POTION); }
OPPONENT(SPECIES_WYNAUT);
} WHEN {
- TURN { MOVE(opponentLeft, MOVE_POUND, target: targetLeft ? playerLeft : playerRight); SEND_OUT(targetLeft ? playerLeft : playerRight, 2); }
+ TURN { MOVE(opponentLeft, MOVE_POUND, target: target); SEND_OUT(target, 2); }
} SCENE {
MESSAGE("Foe Wynaut used Pound!");
MESSAGE("Wobbuffet fainted!");
- ABILITY_POPUP(targetLeft ? playerLeft : playerRight, ABILITY_FRISK);
+ ABILITY_POPUP(target, ABILITY_FRISK);
MESSAGE("Furret frisked Foe Wynaut and found its Potion!");
}
}
DOUBLE_BATTLE_TEST("Frisk triggers for opponent in a Double Battle after switching-in after fainting")
{
- bool32 targetLeft;
- PARAMETRIZE { targetLeft = TRUE; }
- PARAMETRIZE { targetLeft = FALSE; }
+ struct BattlePokemon *target = NULL;
+ PARAMETRIZE { target = opponentLeft; }
+ PARAMETRIZE { target = opponentRight; }
GIVEN {
ASSUME(gMovesInfo[MOVE_POUND].power != 0);
@@ -72,11 +72,11 @@ DOUBLE_BATTLE_TEST("Frisk triggers for opponent in a Double Battle after switchi
OPPONENT(SPECIES_WOBBUFFET) { HP(1); }
OPPONENT(SPECIES_FURRET) { Ability(ABILITY_FRISK); };
} WHEN {
- TURN { MOVE(playerLeft, MOVE_POUND, target: targetLeft ? opponentLeft : opponentRight); SEND_OUT(targetLeft ? opponentLeft : opponentRight, 2); }
+ TURN { MOVE(playerLeft, MOVE_POUND, target: target); SEND_OUT(target, 2); }
} SCENE {
MESSAGE("Wynaut used Pound!");
MESSAGE("Foe Wobbuffet fainted!");
- ABILITY_POPUP(targetLeft ? opponentLeft : opponentRight, ABILITY_FRISK);
+ ABILITY_POPUP(target, ABILITY_FRISK);
MESSAGE("Foe Furret frisked Wynaut and found its Potion!");
}
}
diff --git a/test/battle/ability/gale_wings.c b/test/battle/ability/gale_wings.c
index d8a3873be81c..e74d34790f34 100644
--- a/test/battle/ability/gale_wings.c
+++ b/test/battle/ability/gale_wings.c
@@ -50,4 +50,40 @@ SINGLE_BATTLE_TEST("Gale Wings only grants priority to Flying-type moves")
}
}
-TO_DO_BATTLE_TEST("Gale Wings doesn't increase priority of Flying-type Hidden Power, Natural Gift, Judgment or Tera Blast");
+SINGLE_BATTLE_TEST("Gale Wings doesn't increase priority of Flying-type Natural Gift, Judgment, Hidden Power, or Tera Blast")
+{
+ u32 move;
+ u16 heldItem;
+ PARAMETRIZE { move = MOVE_NATURAL_GIFT; heldItem = ITEM_LUM_BERRY; }
+ PARAMETRIZE { move = MOVE_JUDGMENT; heldItem = ITEM_SKY_PLATE; }
+ PARAMETRIZE { move = MOVE_HIDDEN_POWER; heldItem = ITEM_NONE; }
+ GIVEN {
+ ASSUME(B_GALE_WINGS >= GEN_7);
+ ASSUME(gMovesInfo[MOVE_NATURAL_GIFT].effect == EFFECT_NATURAL_GIFT);
+ ASSUME(gMovesInfo[MOVE_JUDGMENT].effect == EFFECT_CHANGE_TYPE_ON_ITEM);
+ // IV combinations sourced from https://www.smogon.com/forums/threads/hidden-power-iv-combinations.78083/
+ ASSUME(gMovesInfo[MOVE_HIDDEN_POWER].effect == EFFECT_HIDDEN_POWER);
+ ASSUME(gMovesInfo[MOVE_TERA_BLAST].effect == EFFECT_TERA_BLAST);
+ ASSUME(gItemsInfo[ITEM_SKY_PLATE].holdEffect == HOLD_EFFECT_PLATE);
+ ASSUME(gItemsInfo[ITEM_SKY_PLATE].secondaryId == TYPE_FLYING);
+ ASSUME(gNaturalGiftTable[ITEM_TO_BERRY(ITEM_LUM_BERRY)].type == TYPE_FLYING);
+ OPPONENT(SPECIES_TALONFLAME) { Ability(ABILITY_GALE_WINGS); Speed(1); Item(heldItem); HPIV(31); AttackIV(3); DefenseIV(31); SpAttackIV(30); SpDefenseIV(30); SpeedIV(30); TeraType(TYPE_FLYING); }
+ PLAYER(SPECIES_WOBBUFFET) { Speed(100); };
+ } WHEN {
+ TURN { MOVE(opponent, move); }
+ } SCENE {
+ MESSAGE("Wobbuffet used Celebrate!");
+ if (move == MOVE_NATURAL_GIFT) {
+ MESSAGE("Foe Talonflame used Natural Gift!");
+ }
+ else if (move == MOVE_JUDGMENT) {
+ MESSAGE("Foe Talonflame used Judgment!");
+ }
+ else if (move == MOVE_HIDDEN_POWER) {
+ MESSAGE("Foe Talonflame used Hidden Power!");
+ }
+ else {
+ MESSAGE("Foe Talonflame used Tera Blast!");
+ }
+ }
+}
diff --git a/test/battle/ability/galvanize.c b/test/battle/ability/galvanize.c
new file mode 100644
index 000000000000..55dfd7287a33
--- /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; }
+
+ 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!");
+ }
+}
+
+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 000000000000..b4d82487d83e
--- /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 2ec9acc61b71..7ccf1063b569 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 9fb969b03621..f19e0715de69 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")
+{
+ ASSUME(gMovesInfo[MOVE_PARTING_SHOT].effect == EFFECT_PARTING_SHOT);
+ GIVEN {
+ 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")
+{
+ ASSUME(gMovesInfo[MOVE_FLING].effect == EFFECT_FLING);
+ GIVEN {
+ 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")
+{
+ ASSUME(gMovesInfo[MOVE_NATURAL_GIFT].effect == EFFECT_NATURAL_GIFT);
+ GIVEN {
+ 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);
+ ASSUME(MoveHasAdditionalEffect(MOVE_INCINERATE, MOVE_EFFECT_INCINERATE));
+ GIVEN {
+ 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);
+ ASSUME(MoveHasAdditionalEffect(MOVE_KNOCK_OFF, MOVE_EFFECT_KNOCK_OFF));
+ GIVEN {
+ 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);
+ ASSUME(MoveHasAdditionalEffect(MOVE_BUG_BITE, MOVE_EFFECT_BUG_BITE));
+ GIVEN {
+ 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")
+{
+ ASSUME(gMovesInfo[MOVE_TRICK].effect == EFFECT_TRICK);
+ GIVEN {
+ 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")
+{
+ ASSUME(gMovesInfo[MOVE_TRICK].effect == EFFECT_TRICK);
+ GIVEN {
+ 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")
+{
+ ASSUME(gMovesInfo[MOVE_TRICK].effect == EFFECT_TRICK);
+ ASSUME(gItemsInfo[ITEM_APICOT_BERRY].holdEffect == HOLD_EFFECT_SP_DEFENSE_UP);
+ GIVEN {
+ 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/hospitality.c b/test/battle/ability/hospitality.c
index c40512d5be8f..058254918025 100644
--- a/test/battle/ability/hospitality.c
+++ b/test/battle/ability/hospitality.c
@@ -18,12 +18,12 @@ DOUBLE_BATTLE_TEST("Hospitality user restores 25% of ally's health")
} SCENE {
if (health == 75) {
ABILITY_POPUP(playerLeft, ABILITY_HOSPITALITY);
- MESSAGE("Wobbuffet drank down all the matcha that Ptchageist made!");
+ MESSAGE("Wobbuffet drank down all the matcha that Poltchageist made!");
HP_BAR(playerRight, damage: -25);
} else {
NONE_OF {
ABILITY_POPUP(playerLeft, ABILITY_HOSPITALITY);
- MESSAGE("Wobbuffet drank down all the matcha that Ptchageist made!");
+ MESSAGE("Wobbuffet drank down all the matcha that Poltchageist made!");
HP_BAR(playerRight, damage: -25);
}
}
@@ -41,10 +41,10 @@ DOUBLE_BATTLE_TEST("Hospitality user restores 25% of ally's health on switch-in"
} WHEN {
TURN { SWITCH(playerLeft, 2); }
} SCENE {
- MESSAGE("Wobbuffet, that's enough! Come back!");
- MESSAGE("Go! Ptchageist!");
+ SWITCH_OUT_MESSAGE("Wobbuffet");
+ SEND_IN_MESSAGE("Poltchageist");
ABILITY_POPUP(playerLeft, ABILITY_HOSPITALITY);
- MESSAGE("Wobbuffet drank down all the matcha that Ptchageist made!");
+ MESSAGE("Wobbuffet drank down all the matcha that Poltchageist made!");
HP_BAR(playerRight, damage: -25);
}
}
@@ -62,10 +62,10 @@ DOUBLE_BATTLE_TEST("Hospitality ignores Substitute")
TURN { SWITCH(playerLeft, 2); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_SUBSTITUTE, playerRight);
- MESSAGE("Wobbuffet, that's enough! Come back!");
- MESSAGE("Go! Ptchageist!");
+ SWITCH_OUT_MESSAGE("Wobbuffet");
+ SEND_IN_MESSAGE("Poltchageist");
ABILITY_POPUP(playerLeft, ABILITY_HOSPITALITY);
- MESSAGE("Wobbuffet drank down all the matcha that Ptchageist made!");
+ MESSAGE("Wobbuffet drank down all the matcha that Poltchageist made!");
}
}
@@ -85,7 +85,7 @@ DOUBLE_BATTLE_TEST("Hospitality does not trigger if there is no ally on the fiel
MESSAGE("Wobbuffet fainted!");
HP_BAR(playerRight);
MESSAGE("Wobbuffet fainted!");
- MESSAGE("Go! Ptchageist!");
+ SEND_IN_MESSAGE("Poltchageist");
NOT ABILITY_POPUP(playerLeft, ABILITY_HOSPITALITY);
}
}
diff --git a/test/battle/ability/hydration.c b/test/battle/ability/hydration.c
index 2dca490c02e5..7d16ad04ae8c 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 aca84532a447..3f278a50cd5e 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);
- MESSAGE("Glalie's Ice Body healed it a little bit!");
HP_BAR(player, damage: -(100 / 16));
+ MESSAGE("Glalie's Ice Body healed it a little bit!");
+ }
+}
+
+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 000000000000..54a307754c96
--- /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/illusion.c b/test/battle/ability/illusion.c
new file mode 100644
index 000000000000..ca3bcb2ee0b4
--- /dev/null
+++ b/test/battle/ability/illusion.c
@@ -0,0 +1,24 @@
+#include "global.h"
+#include "test/battle.h"
+
+// This test is eyes on only
+SINGLE_BATTLE_TEST("Illusion can only imitate Normal Form terapagos")
+{
+ GIVEN {
+ PLAYER(SPECIES_ZOROARK) { Moves(MOVE_CELEBRATE); }
+ PLAYER(SPECIES_TERAPAGOS) { Moves(MOVE_CELEBRATE); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ // Zoroark is out, should be normal form Terapagos
+ // Switch to Terapagos which enters Terastal Form
+ TURN { SWITCH(player, 1); }
+ // Switch back to Zoroark, should not be Terastal Terapagos
+ TURN { SWITCH(player, 0); MOVE(opponent, MOVE_TACKLE);}
+ // Switch back to Terapagos
+ TURN { SWITCH(player, 1); }
+ // Terapagos Stellar, Zoroark gets Roared in, should not be Stellar Terapagos
+ TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_ROAR); }
+ // Reveal the Zoroark
+ TURN { MOVE(player, MOVE_CELEBRATE); MOVE(opponent, MOVE_TACKLE); }
+ }
+}
diff --git a/test/battle/ability/intimidate.c b/test/battle/ability/intimidate.c
index 09677523c1ef..d2d7bc4af706 100644
--- a/test/battle/ability/intimidate.c
+++ b/test/battle/ability/intimidate.c
@@ -77,7 +77,7 @@ DOUBLE_BATTLE_TEST("Intimidate doesn't activate on an empty field in a double ba
ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, playerLeft);
// Everyone faints.
- MESSAGE("Go! Ekans!");
+ SEND_IN_MESSAGE("Ekans");
NONE_OF {
ABILITY_POPUP(playerLeft, ABILITY_INTIMIDATE);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft);
@@ -87,7 +87,7 @@ DOUBLE_BATTLE_TEST("Intimidate doesn't activate on an empty field in a double ba
ABILITY_POPUP(opponentLeft, ABILITY_INTIMIDATE);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft);
}
- MESSAGE("Go! Abra!");
+ SEND_IN_MESSAGE("Abra");
MESSAGE("2 sent out Wynaut!");
// Intimidate activates after all battlers have been brought out
ABILITY_POPUP(playerLeft, ABILITY_INTIMIDATE);
@@ -113,9 +113,9 @@ SINGLE_BATTLE_TEST("Intimidate and Eject Button force the opponent to Attack")
OPPONENT(SPECIES_HITMONTOP) { Moves(MOVE_TACKLE); }
} WHEN {
TURN {
- MOVE(player, MOVE_QUICK_ATTACK);
- MOVE(opponent, MOVE_TACKLE);
- SEND_OUT(opponent, 1);
+ MOVE(player, MOVE_QUICK_ATTACK);
+ MOVE(opponent, MOVE_TACKLE);
+ SEND_OUT(opponent, 1);
}
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, player);
@@ -153,12 +153,12 @@ DOUBLE_BATTLE_TEST("Intimidate activates on an empty slot")
} SCENE {
- MESSAGE("Wobbuffet, that's enough! Come back!");
- MESSAGE("Go! Wynaut!");
+ SWITCH_OUT_MESSAGE("Wobbuffet");
+ SEND_IN_MESSAGE("Wynaut");
ANIMATION(ANIM_TYPE_MOVE, MOVE_GUNK_SHOT, playerRight);
ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLASH, opponentRight);
- MESSAGE("Wynaut, that's enough! Come back!");
- MESSAGE("Go! Hitmontop!");
+ SWITCH_OUT_MESSAGE("Wynaut");
+ SEND_IN_MESSAGE("Hitmontop");
ABILITY_POPUP(playerLeft, ABILITY_INTIMIDATE);
NONE_OF {
MESSAGE("Hitmontop's Intimidate cuts Foe Ralts's attack!");
@@ -245,3 +245,21 @@ DOUBLE_BATTLE_TEST("Intimidate is not going to trigger if a mon switches out thr
NOT ABILITY_POPUP(playerLeft, ABILITY_INTIMIDATE);
}
}
+
+SINGLE_BATTLE_TEST("Intimidate activates when it's no longer effected by Neutralizing Gas")
+{
+ GIVEN {
+ PLAYER(SPECIES_WEEZING) { Ability(ABILITY_NEUTRALIZING_GAS); }
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_ARBOK) { Ability(ABILITY_INTIMIDATE); }
+ } WHEN {
+ TURN { SWITCH(player, 1); }
+ } SCENE {
+ ABILITY_POPUP(player, ABILITY_NEUTRALIZING_GAS);
+ MESSAGE("Neutralizing Gas filled the area!");
+ SWITCH_OUT_MESSAGE("Weezing");
+ MESSAGE("The effects of Neutralizing Gas wore off!");
+ ABILITY_POPUP(opponent, ABILITY_INTIMIDATE);
+ SEND_IN_MESSAGE("Wobbuffet");
+ }
+}
diff --git a/test/battle/ability/intrepid_sword.c b/test/battle/ability/intrepid_sword.c
index 0194a9be5b76..fdae307a43bd 100644
--- a/test/battle/ability/intrepid_sword.c
+++ b/test/battle/ability/intrepid_sword.c
@@ -56,7 +56,7 @@ SINGLE_BATTLE_TEST("Intrepid Sword activates when it's no longer effected by Neu
} SCENE {
ABILITY_POPUP(player, ABILITY_NEUTRALIZING_GAS);
MESSAGE("Neutralizing Gas filled the area!");
- MESSAGE("Weezing, that's enough! Come back!");
+ SWITCH_OUT_MESSAGE("Weezing");
MESSAGE("The effects of Neutralizing Gas wore off!");
ABILITY_POPUP(opponent, ABILITY_INTREPID_SWORD);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
diff --git a/test/battle/ability/leaf_guard.c b/test/battle/ability/leaf_guard.c
index 6c559ea48a4e..2c55236defb8 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 69e8bac9c7fc..5579652265eb 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/mirror_armor.c b/test/battle/ability/mirror_armor.c
index 38ee8dab91e8..327b493a35d4 100644
--- a/test/battle/ability/mirror_armor.c
+++ b/test/battle/ability/mirror_armor.c
@@ -55,11 +55,11 @@ SINGLE_BATTLE_TEST("Mirror Armor triggers even if the attacking Pokemon also has
} WHEN {
TURN { MOVE(opponent, MOVE_LEER); }
} SCENE {
- MESSAGE("Foe Corviknigh used Leer!");
+ MESSAGE("Foe Corviknight used Leer!");
ABILITY_POPUP(player, ABILITY_MIRROR_ARMOR);
NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
- MESSAGE("Foe Corviknigh's Defense fell!");
+ MESSAGE("Foe Corviknight's Defense fell!");
} THEN {
EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE);
EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE - 1);
@@ -153,9 +153,9 @@ SINGLE_BATTLE_TEST("Mirror Armor doesn't lower the stat of the attacking Pokemon
TURN { MOVE(player, MOVE_SCREECH); }
TURN { MOVE(opponent, MOVE_LEER); }
} SCENE {
- MESSAGE("Corviknigh used Screech!");
- MESSAGE("Corviknigh used Screech!");
- MESSAGE("Corviknigh used Screech!");
+ MESSAGE("Corviknight used Screech!");
+ MESSAGE("Corviknight used Screech!");
+ MESSAGE("Corviknight used Screech!");
MESSAGE("Foe Wynaut used Leer!");
ABILITY_POPUP(player, ABILITY_MIRROR_ARMOR);
NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
@@ -188,8 +188,8 @@ DOUBLE_BATTLE_TEST("Mirror Armor lowers Speed of the partner Pokemon after Court
MESSAGE("Wobbuffet used Sticky Web!");
MESSAGE("Foe Wynaut used Court Change!");
MESSAGE("Foe Wynaut swapped the battle effects affecting each side!");
- MESSAGE("Go! Corviknigh!");
- MESSAGE("Corviknigh was caught in a Sticky Web!");
+ SEND_IN_MESSAGE("Corviknight");
+ MESSAGE("Corviknight was caught in a Sticky Web!");
ABILITY_POPUP(playerRight, ABILITY_MIRROR_ARMOR);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerLeft);
MESSAGE("Wobbuffet's Speed fell!");
diff --git a/test/battle/ability/moxie.c b/test/battle/ability/moxie.c
index b60a11507acd..79b1fc989fa6 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 000000000000..d3e8df6bee9d
--- /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/opportunist.c b/test/battle/ability/opportunist.c
index f2a9f5a37a90..b627b8ec6ea7 100644
--- a/test/battle/ability/opportunist.c
+++ b/test/battle/ability/opportunist.c
@@ -16,16 +16,16 @@ SINGLE_BATTLE_TEST("Opportunist only copies foe's positive stat changes in a tur
OPPONENT(SPECIES_ESPATHRA) { Speed(5); Ability(ability); }
} WHEN {
TURN { MOVE(player, MOVE_SHELL_SMASH); }
- TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_TACKLE); }
+ TURN { MOVE(opponent, MOVE_TACKLE); }
} SCENE {
if (ability == ABILITY_FRISK) {
ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_SMASH, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent);
HP_BAR(player, captureDamage: &results[i].damage);
} else {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_SMASH, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent);
HP_BAR(player, captureDamage: &results[i].damage);
- ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player);
}
} FINALLY {
EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[1].damage);
@@ -78,12 +78,10 @@ DOUBLE_BATTLE_TEST("Opportunist raises Attack only once when partner has Intimid
if ((abilityLeft == ABILITY_CONTRARY && abilityRight != ABILITY_CONTRARY)
|| (abilityLeft != ABILITY_CONTRARY && abilityRight == ABILITY_CONTRARY)) {
ABILITY_POPUP(playerRight, ABILITY_OPPORTUNIST);
- MESSAGE("Espathra copied its opponent's stat changes!");
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight);
MESSAGE("Espathra's Attack rose!");
} else if (abilityLeft == ABILITY_CONTRARY && abilityRight == ABILITY_CONTRARY) {
ABILITY_POPUP(playerRight, ABILITY_OPPORTUNIST);
- MESSAGE("Espathra copied its opponent's stat changes!");
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, playerRight);
MESSAGE("Espathra's Attack sharply rose!");
}
@@ -124,6 +122,177 @@ SINGLE_BATTLE_TEST("Opportunist does not accumulate opposing mon's stat changes"
}
}
-TO_DO_BATTLE_TEST("Opportunist doesn't copy ally stat increases");
-TO_DO_BATTLE_TEST("Opportunist doesn't copy foe stat increases gained via Opportunist");
-TO_DO_BATTLE_TEST("Opportunist copies foe stat increased gained via Swagger and Flatter");
+SINGLE_BATTLE_TEST("Opportunist copies each stat increase individually from ability and move")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET);
+ PLAYER(SPECIES_ZACIAN) { Ability(ABILITY_INTREPID_SWORD); }
+ OPPONENT(SPECIES_ESPATHRA) { Ability(ABILITY_OPPORTUNIST); }
+ } WHEN {
+ TURN { SWITCH(player, 1); }
+ TURN { MOVE(player, MOVE_SWORDS_DANCE); }
+ } SCENE {
+ ABILITY_POPUP(player, ABILITY_INTREPID_SWORD);
+ ABILITY_POPUP(opponent, ABILITY_OPPORTUNIST);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, player);
+ ABILITY_POPUP(opponent, ABILITY_OPPORTUNIST);
+ } THEN {
+ EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 3);
+ }
+}
+
+SINGLE_BATTLE_TEST("Opportunist doesn't copy foe stat increases gained via Opportunist")
+{
+ GIVEN {
+ PLAYER(SPECIES_ESPATHRA) { Ability(ABILITY_OPPORTUNIST); }
+ OPPONENT(SPECIES_ESPATHRA) { Ability(ABILITY_OPPORTUNIST); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_SWORDS_DANCE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, player);
+ ABILITY_POPUP(opponent, ABILITY_OPPORTUNIST);
+ NOT ABILITY_POPUP(player, ABILITY_OPPORTUNIST);
+ } THEN {
+ EXPECT_EQ(opponent->statStages[STAT_ATK], player->statStages[STAT_ATK]);
+ }
+}
+
+SINGLE_BATTLE_TEST("Opportunist copies foe stat increase gained via Swagger and Flatter")
+{
+ GIVEN {
+ PLAYER(SPECIES_ESPATHRA) { Ability(ABILITY_OPPORTUNIST); }
+ OPPONENT(SPECIES_ESPATHRA) { Ability(ABILITY_OPPORTUNIST); }
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_FLATTER); }
+ TURN { MOVE(opponent, MOVE_SWAGGER); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_FLATTER, opponent);
+ ABILITY_POPUP(opponent, ABILITY_OPPORTUNIST);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SWAGGER, opponent);
+ ABILITY_POPUP(opponent, ABILITY_OPPORTUNIST);
+ } THEN {
+ EXPECT_EQ(opponent->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + 1);
+ EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 2);
+ }
+}
+
+DOUBLE_BATTLE_TEST("Opportunist doesn't copy ally stat increases")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET);
+ PLAYER(SPECIES_ESPATHRA) { Ability(ABILITY_OPPORTUNIST); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(playerLeft, MOVE_SWORDS_DANCE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, playerLeft);
+ NOT ABILITY_POPUP(playerRight, ABILITY_OPPORTUNIST);
+ } THEN {
+ EXPECT_EQ(playerRight->statStages[STAT_SPATK], DEFAULT_STAT_STAGE );
+ }
+}
+
+DOUBLE_BATTLE_TEST("Opportunist copies the stat increase of each opposing mon")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET);
+ PLAYER(SPECIES_ESPATHRA) { Ability(ABILITY_OPPORTUNIST); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(opponentRight, MOVE_SWORDS_DANCE); MOVE(opponentLeft, MOVE_SWORDS_DANCE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, opponentRight);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, opponentLeft);
+ ABILITY_POPUP(playerRight, ABILITY_OPPORTUNIST);
+ } THEN {
+ EXPECT_EQ(playerRight->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 4);
+ }
+}
+
+
+DOUBLE_BATTLE_TEST("Opportunist copies the stat of each pokemon that were raised at the same time")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET);
+ PLAYER(SPECIES_ESPATHRA) { Ability(ABILITY_OPPORTUNIST); }
+ OPPONENT(SPECIES_ZACIAN) { Ability(ABILITY_INTREPID_SWORD); }
+ OPPONENT(SPECIES_ZACIAN) { Ability(ABILITY_INTREPID_SWORD); }
+ } WHEN {
+ TURN { }
+ } SCENE {
+ ABILITY_POPUP(opponentLeft, ABILITY_INTREPID_SWORD);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft);
+ ABILITY_POPUP(opponentRight, ABILITY_INTREPID_SWORD);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentRight);
+ ABILITY_POPUP(playerRight, ABILITY_OPPORTUNIST);
+ MESSAGE("Espathra's Attack sharply rose!");
+ } THEN {
+ EXPECT_EQ(playerRight->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 2);
+ }
+}
+
+SINGLE_BATTLE_TEST("Opportunist copies the increase not the stages")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_ESPATHRA) { Ability(ABILITY_OPPORTUNIST); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_CHARM); MOVE(opponent, MOVE_CHARM); }
+ TURN { MOVE(player, MOVE_CHARM); MOVE(opponent, MOVE_CHARM); }
+ TURN { MOVE(player, MOVE_CHARM); MOVE(opponent, MOVE_GROWL); }
+ TURN { MOVE(player, MOVE_BELLY_DRUM); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_CHARM, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_CHARM, opponent);
+
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_CHARM, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_CHARM, opponent);
+
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_CHARM, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_GROWL, opponent);
+
+ ABILITY_POPUP(opponent, ABILITY_OPPORTUNIST);
+ } THEN {
+ EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 5); // + 11
+ EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 6); // + 11
+ }
+}
+
+SINGLE_BATTLE_TEST("Opportunist copies the stat increase from the incoming mon")
+{
+ GIVEN {
+ PLAYER(SPECIES_ESPATHRA) { Ability(ABILITY_OPPORTUNIST); }
+ OPPONENT(SPECIES_WOBBUFFET) { HP(1); }
+ OPPONENT(SPECIES_ZACIAN) { Ability(ABILITY_INTREPID_SWORD); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_TACKLE); SEND_OUT(opponent, 1); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player);
+ ABILITY_POPUP(opponent, ABILITY_INTREPID_SWORD);
+ ABILITY_POPUP(player, ABILITY_OPPORTUNIST);
+ } THEN {
+ EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 1);
+ }
+}
+
+SINGLE_BATTLE_TEST("Opportunist and Mirror Herb stack stat increases")
+{
+ GIVEN {
+ PLAYER(SPECIES_ZACIAN) { Ability(ABILITY_INTREPID_SWORD); }
+ OPPONENT(SPECIES_ESPATHRA) { Ability(ABILITY_OPPORTUNIST); Item(ITEM_MIRROR_HERB); }
+ } WHEN {
+ TURN { }
+ } SCENE {
+ ABILITY_POPUP(player, ABILITY_INTREPID_SWORD);
+ ABILITY_POPUP(opponent, ABILITY_OPPORTUNIST);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent);
+ } THEN {
+ EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 2);
+ EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE);
+ EXPECT_EQ(opponent->statStages[STAT_SPEED], DEFAULT_STAT_STAGE);
+ EXPECT_EQ(opponent->statStages[STAT_SPATK], DEFAULT_STAT_STAGE);
+ EXPECT_EQ(opponent->statStages[STAT_SPDEF], DEFAULT_STAT_STAGE);
+ }
+}
diff --git a/test/battle/ability/orichalcum_pulse.c b/test/battle/ability/orichalcum_pulse.c
new file mode 100644
index 000000000000..295e0db23c73
--- /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 d262de362d4f..945e975b77a6 100644
--- a/test/battle/ability/parental_bond.c
+++ b/test/battle/ability/parental_bond.c
@@ -10,7 +10,7 @@ SINGLE_BATTLE_TEST("Parental Bond converts Tackle into a two-strike move")
PLAYER(SPECIES_KANGASKHAN) { Item(ITEM_KANGASKHANITE); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(player, MOVE_TACKLE, megaEvolve: TRUE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_MEGA); MOVE(opponent, MOVE_CELEBRATE); }
} SCENE {
MESSAGE("Kangaskhan's Kangaskhanite is reacting to 1's Mega Ring!");
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, player);
@@ -32,7 +32,7 @@ SINGLE_BATTLE_TEST("Parental Bond does not convert a move with three or more str
PLAYER(SPECIES_KANGASKHAN) { Item(ITEM_KANGASKHANITE); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(player, MOVE_TRIPLE_KICK, megaEvolve: TRUE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_TRIPLE_KICK, gimmick: GIMMICK_MEGA); MOVE(opponent, MOVE_CELEBRATE); }
} SCENE {
MESSAGE("Kangaskhan's Kangaskhanite is reacting to 1's Mega Ring!");
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, player);
@@ -61,7 +61,7 @@ SINGLE_BATTLE_TEST("Parental Bond converts multi-target moves into a two-strike
PLAYER(SPECIES_KANGASKHAN) { Item(ITEM_KANGASKHANITE); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(player, move, megaEvolve: TRUE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, move, gimmick: GIMMICK_MEGA); MOVE(opponent, MOVE_CELEBRATE); }
} SCENE {
MESSAGE("Kangaskhan's Kangaskhanite is reacting to 1's Mega Ring!");
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, player);
@@ -86,7 +86,7 @@ DOUBLE_BATTLE_TEST("Parental Bond does not convert multi-target moves into a two
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_PIDGEY);
} WHEN {
- TURN { MOVE(playerLeft, MOVE_EARTHQUAKE, megaEvolve: TRUE); MOVE(playerRight, MOVE_CELEBRATE); MOVE(opponentLeft, MOVE_CELEBRATE); MOVE(opponentRight, MOVE_CELEBRATE); }
+ TURN { MOVE(playerLeft, MOVE_EARTHQUAKE, gimmick: GIMMICK_MEGA); MOVE(playerRight, MOVE_CELEBRATE); MOVE(opponentLeft, MOVE_CELEBRATE); MOVE(opponentRight, MOVE_CELEBRATE); }
} SCENE {
MESSAGE("Kangaskhan's Kangaskhanite is reacting to 1's Mega Ring!");
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, playerLeft);
@@ -114,7 +114,7 @@ SINGLE_BATTLE_TEST("Parental Bond-converted moves only hit once on Lightning Rod
PLAYER(SPECIES_KANGASKHAN) { Item(ITEM_KANGASKHANITE); }
OPPONENT(species) { Ability(ability); }
} WHEN {
- TURN { MOVE(player, move, megaEvolve: TRUE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, move, gimmick: GIMMICK_MEGA); MOVE(opponent, MOVE_CELEBRATE); }
} SCENE {
MESSAGE("Kangaskhan's Kangaskhanite is reacting to 1's Mega Ring!");
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, player);
@@ -142,7 +142,7 @@ SINGLE_BATTLE_TEST("Parental Bond has no affect on multi hit moves and they stil
PLAYER(SPECIES_KANGASKHAN) { Item(ITEM_KANGASKHANITE); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(player, MOVE_COMET_PUNCH, megaEvolve: TRUE); }
+ TURN { MOVE(player, MOVE_COMET_PUNCH, gimmick: GIMMICK_MEGA); }
} SCENE {
MESSAGE("Kangaskhan's Kangaskhanite is reacting to 1's Mega Ring!");
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, player);
@@ -168,7 +168,7 @@ SINGLE_BATTLE_TEST("Parental Bond has no affect on multi hit moves and they stil
PLAYER(SPECIES_KANGASKHAN) { Item(ITEM_KANGASKHANITE); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(player, MOVE_COMET_PUNCH, megaEvolve: TRUE); }
+ TURN { MOVE(player, MOVE_COMET_PUNCH, gimmick: GIMMICK_MEGA); }
} SCENE {
MESSAGE("Kangaskhan's Kangaskhanite is reacting to 1's Mega Ring!");
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, player);
@@ -195,7 +195,7 @@ SINGLE_BATTLE_TEST("Parental Bond has no affect on multi hit moves and they stil
PLAYER(SPECIES_KANGASKHAN) { Item(ITEM_KANGASKHANITE); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(player, MOVE_COMET_PUNCH, megaEvolve: TRUE); }
+ TURN { MOVE(player, MOVE_COMET_PUNCH, gimmick: GIMMICK_MEGA); }
} SCENE {
MESSAGE("Kangaskhan's Kangaskhanite is reacting to 1's Mega Ring!");
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, player);
@@ -223,7 +223,7 @@ SINGLE_BATTLE_TEST("Parental Bond has no affect on multi hit moves and they stil
PLAYER(SPECIES_KANGASKHAN) { Item(ITEM_KANGASKHANITE); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(player, MOVE_COMET_PUNCH, megaEvolve: TRUE); }
+ TURN { MOVE(player, MOVE_COMET_PUNCH, gimmick: GIMMICK_MEGA); }
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_COMET_PUNCH, player);
ANIMATION(ANIM_TYPE_MOVE, MOVE_COMET_PUNCH, player);
@@ -248,7 +248,7 @@ SINGLE_BATTLE_TEST("Parental Bond Smack Down effect triggers after 2nd hit")
PLAYER(SPECIES_KANGASKHAN) { Item(ITEM_KANGASKHANITE); }
OPPONENT(SPECIES_SKARMORY);
} WHEN {
- TURN { MOVE(player, MOVE_SMACK_DOWN, megaEvolve: TRUE); }
+ TURN { MOVE(player, MOVE_SMACK_DOWN, gimmick: GIMMICK_MEGA); }
} SCENE {
MESSAGE("Kangaskhan's Kangaskhanite is reacting to 1's Mega Ring!");
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, player);
diff --git a/test/battle/ability/pickup.c b/test/battle/ability/pickup.c
new file mode 100644
index 000000000000..57f6429febf9
--- /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")
+{
+ ASSUME(gItemsInfo[ITEM_AIR_BALLOON].holdEffect == HOLD_EFFECT_AIR_BALLOON);
+ GIVEN {
+ 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")
+{
+ ASSUME(gMovesInfo[MOVE_PARTING_SHOT].effect == EFFECT_PARTING_SHOT);
+ GIVEN {
+ 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")
+{
+ ASSUME(MoveHasAdditionalEffect(MOVE_INCINERATE, MOVE_EFFECT_INCINERATE));
+ GIVEN {
+ 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")
+{
+ ASSUME(MoveHasAdditionalEffect(MOVE_KNOCK_OFF, MOVE_EFFECT_KNOCK_OFF));
+ GIVEN {
+ 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")
+{
+ ASSUME(MoveHasAdditionalEffect(MOVE_BUG_BITE, MOVE_EFFECT_BUG_BITE));
+ GIVEN {
+ 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")
+{
+ ASSUME(gMovesInfo[MOVE_RECYCLE].effect == EFFECT_RECYCLE);
+ GIVEN {
+ 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")
+{
+ ASSUME(gMovesInfo[MOVE_FLING].effect == EFFECT_FLING);
+ GIVEN {
+ 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")
+{
+ ASSUME(gMovesInfo[MOVE_NATURAL_GIFT].effect == EFFECT_NATURAL_GIFT);
+ GIVEN {
+ 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);
+ ASSUME(gItemsInfo[ITEM_WHITE_HERB].holdEffect == HOLD_EFFECT_RESTORE_STATS);
+ GIVEN {
+ 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 000000000000..97c9c37a0c7c
--- /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/poison_point.c b/test/battle/ability/poison_point.c
index bd713fa2fc7b..26c9c7296834 100644
--- a/test/battle/ability/poison_point.c
+++ b/test/battle/ability/poison_point.c
@@ -30,3 +30,22 @@ SINGLE_BATTLE_TEST("Poison Point inflicts poison on contact")
}
}
}
+
+SINGLE_BATTLE_TEST("Poison Point triggers 30% of the time")
+{
+ PASSES_RANDOMLY(3, 10, RNG_POISON_POINT);
+ GIVEN {
+ ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_4);
+ ASSUME(gMovesInfo[MOVE_TACKLE].makesContact);
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_NIDORAN_M) { Ability(ABILITY_POISON_POINT); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_TACKLE); }
+ TURN {}
+ } SCENE {
+ ABILITY_POPUP(opponent, ABILITY_POISON_POINT);
+ ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, player);
+ MESSAGE("Wobbuffet was poisoned by Foe Nidoran♂'s Poison Point!");
+ STATUS_ICON(player, poison: TRUE);
+ }
+}
diff --git a/test/battle/ability/poison_puppeteer.c b/test/battle/ability/poison_puppeteer.c
new file mode 100644
index 000000000000..af5d5389fa65
--- /dev/null
+++ b/test/battle/ability/poison_puppeteer.c
@@ -0,0 +1,73 @@
+#include "global.h"
+#include "test/battle.h"
+
+ASSUMPTIONS
+{
+}
+
+SINGLE_BATTLE_TEST("Poison Puppeteer confuses target if it was poisoned by a damaging move")
+{
+ GIVEN {
+ ASSUME(MoveHasAdditionalEffect(MOVE_POISON_STING, MOVE_EFFECT_POISON) == TRUE);
+ PLAYER(SPECIES_PECHARUNT) { Ability(ABILITY_POISON_PUPPETEER); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_POISON_STING); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_POISON_STING, player);
+ HP_BAR(opponent);
+ ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent);
+ STATUS_ICON(opponent, poison: TRUE);
+ ABILITY_POPUP(player, ABILITY_POISON_PUPPETEER);
+ ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponent);
+ MESSAGE("Foe Wobbuffet became confused!");
+ }
+}
+
+SINGLE_BATTLE_TEST("Poison Puppeteer confuses target if it was (badly) poisoned by a status move")
+{
+ u32 move;
+
+ PARAMETRIZE { move = MOVE_POISON_POWDER; }
+ PARAMETRIZE { move = MOVE_TOXIC; }
+
+ GIVEN {
+ ASSUME(MoveHasAdditionalEffect(MOVE_POISON_STING, MOVE_EFFECT_POISON) == TRUE);
+ PLAYER(SPECIES_PECHARUNT) { Ability(ABILITY_POISON_PUPPETEER); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, move); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, move, player);
+ ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent);
+ if (move == MOVE_POISON_POWDER)
+ STATUS_ICON(opponent, poison: TRUE);
+ else
+ STATUS_ICON(opponent, badPoison: TRUE);
+ ABILITY_POPUP(player, ABILITY_POISON_PUPPETEER);
+ ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponent);
+ MESSAGE("Foe Wobbuffet became confused!");
+ }
+}
+
+SINGLE_BATTLE_TEST("Poison Puppeteer does not trigger if poison is Toxic Spikes induced")
+{
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_TOXIC_SPIKES].effect == EFFECT_TOXIC_SPIKES);
+ PLAYER(SPECIES_PECHARUNT) { Ability(ABILITY_POISON_PUPPETEER); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_TOXIC_SPIKES);}
+ TURN { SWITCH(opponent, 1); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, player);
+ ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent);
+ STATUS_ICON(opponent, poison: TRUE);
+ NONE_OF {
+ ABILITY_POPUP(player, ABILITY_POISON_PUPPETEER);
+ ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponent);
+ MESSAGE("Foe Wobbuffet became confused!");
+ }
+ }
+}
diff --git a/test/battle/ability/prankster.c b/test/battle/ability/prankster.c
index 8c5feaee430a..d5fae3edb746 100644
--- a/test/battle/ability/prankster.c
+++ b/test/battle/ability/prankster.c
@@ -196,7 +196,7 @@ SINGLE_BATTLE_TEST("Prankster-affected moves can still be bounced back by a Dark
PLAYER(SPECIES_ABSOL) { Item(ITEM_ABSOLITE); }
OPPONENT(SPECIES_VOLBEAT) { Ability(ABILITY_PRANKSTER); }
} WHEN {
- TURN { MOVE(player, MOVE_CELEBRATE, megaEvolve: TRUE); MOVE(opponent, MOVE_CONFUSE_RAY); }
+ TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); MOVE(opponent, MOVE_CONFUSE_RAY); }
} SCENE {
MESSAGE("Foe Volbeat's Confuse Ray was bounced back by Absol's Magic Bounce!");
ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, player);
@@ -209,7 +209,7 @@ SINGLE_BATTLE_TEST("Prankster-affected moves that are bounced back by Magic Boun
PLAYER(SPECIES_ABSOL) { Item(ITEM_ABSOLITE); }
OPPONENT(SPECIES_MURKROW) { Ability(ABILITY_PRANKSTER); }
} WHEN {
- TURN { MOVE(player, MOVE_CELEBRATE, megaEvolve: TRUE); MOVE(opponent, MOVE_CONFUSE_RAY); }
+ TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); MOVE(opponent, MOVE_CONFUSE_RAY); }
} SCENE {
MESSAGE("Foe Murkrow's Confuse Ray was bounced back by Absol's Magic Bounce!");
ANIMATION(ANIM_TYPE_MOVE, MOVE_CONFUSE_RAY, player);
diff --git a/test/battle/ability/protosynthesis.c b/test/battle/ability/protosynthesis.c
index 264548c207f3..58f10b366f73 100644
--- a/test/battle/ability/protosynthesis.c
+++ b/test/battle/ability/protosynthesis.c
@@ -17,8 +17,8 @@ SINGLE_BATTLE_TEST("Protosynthesis boosts the highest stat")
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_SUNNY_DAY, player);
ABILITY_POPUP(player, ABILITY_PROTOSYNTHESIS);
- MESSAGE("The harsh sunlight activated WalkngWake's Protosynthesis!");
- MESSAGE("WalkngWake's Sp. Atk was heightened!");
+ MESSAGE("The harsh sunlight activated Walking Wake's Protosynthesis!");
+ MESSAGE("Walking Wake's Sp. Atk was heightened!");
}
}
@@ -68,19 +68,19 @@ SINGLE_BATTLE_TEST("Protosynthesis ability pop up activates only once during the
} SCENE {
ABILITY_POPUP(opponent, ABILITY_DROUGHT);
ABILITY_POPUP(player, ABILITY_PROTOSYNTHESIS);
- MESSAGE("The harsh sunlight activated WalkngWake's Protosynthesis!");
- MESSAGE("WalkngWake's Sp. Atk was heightened!");
+ MESSAGE("The harsh sunlight activated Walking Wake's Protosynthesis!");
+ MESSAGE("Walking Wake's Sp. Atk was heightened!");
NONE_OF {
for (turns = 0; turns < 4; turns++) {
ABILITY_POPUP(player, ABILITY_PROTOSYNTHESIS);
- MESSAGE("The harsh sunlight activated WalkngWake's Protosynthesis!");
- MESSAGE("WalkngWake's Sp. Atk was heightened!");
+ MESSAGE("The harsh sunlight activated Walking Wake's Protosynthesis!");
+ MESSAGE("Walking Wake's Sp. Atk was heightened!");
}
}
ANIMATION(ANIM_TYPE_MOVE, MOVE_SUNNY_DAY, opponent);
ABILITY_POPUP(player, ABILITY_PROTOSYNTHESIS);
- MESSAGE("The harsh sunlight activated WalkngWake's Protosynthesis!");
- MESSAGE("WalkngWake's Sp. Atk was heightened!");
+ MESSAGE("The harsh sunlight activated Walking Wake's Protosynthesis!");
+ MESSAGE("Walking Wake's Sp. Atk was heightened!");
}
}
@@ -95,7 +95,11 @@ SINGLE_BATTLE_TEST("Protosynthesis activates on switch-in")
} SCENE {
ABILITY_POPUP(opponent, ABILITY_DROUGHT);
ABILITY_POPUP(player, ABILITY_PROTOSYNTHESIS);
- MESSAGE("The harsh sunlight activated RoarngMoon's Protosynthesis!");
- MESSAGE("RoarngMoon's Attack was heightened!");
+ MESSAGE("The harsh sunlight activated Roaring Moon's Protosynthesis!");
+ 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 e1882624973c..4c25321e5f69 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 {
diff --git a/test/battle/ability/rain_dish.c b/test/battle/ability/rain_dish.c
index dd647f0eb95b..93f642c633a2 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/rattled.c b/test/battle/ability/rattled.c
index c63e24557564..fed99b775d1e 100644
--- a/test/battle/ability/rattled.c
+++ b/test/battle/ability/rattled.c
@@ -88,6 +88,6 @@ SINGLE_BATTLE_TEST("Rattled triggers correctly when hit by U-Turn") // Specific
ABILITY_POPUP(opponent, ABILITY_RATTLED);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
MESSAGE("Foe Sudowoodo's Speed rose!");
- MESSAGE("Go! Wynaut!");
+ SEND_IN_MESSAGE("Wynaut");
}
}
diff --git a/test/battle/ability/refrigerate.c b/test/battle/ability/refrigerate.c
new file mode 100644
index 000000000000..dbbaa30eb8dd
--- /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 000000000000..e17722a88532
--- /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 000000000000..fa7695c129ca
--- /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 9e4a634de25f..f42c2672734b 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/shed_skin.c b/test/battle/ability/shed_skin.c
new file mode 100644
index 000000000000..d3030b9baf49
--- /dev/null
+++ b/test/battle/ability/shed_skin.c
@@ -0,0 +1,19 @@
+#include "global.h"
+#include "test/battle.h"
+
+SINGLE_BATTLE_TEST("Shed Skin triggers 30% of the time")
+{
+ PASSES_RANDOMLY(3, 10, RNG_SHED_SKIN);
+ GIVEN {
+ ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_4);
+ ASSUME(gMovesInfo[MOVE_TACKLE].makesContact);
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_ARBOK) { Status1(STATUS1_POISON); Ability(ABILITY_SHED_SKIN); }
+ } WHEN {
+ TURN;
+ } SCENE {
+ ABILITY_POPUP(opponent, ABILITY_SHED_SKIN);
+ MESSAGE("Foe Arbok's Shed Skin cured its poison problem!");
+ STATUS_ICON(opponent, poison: FALSE);
+ }
+}
diff --git a/test/battle/ability/shield_dust.c b/test/battle/ability/shield_dust.c
index ea6fbfb285e5..d1785bd69e1b 100644
--- a/test/battle/ability/shield_dust.c
+++ b/test/battle/ability/shield_dust.c
@@ -95,7 +95,7 @@ SINGLE_BATTLE_TEST("Shield Dust does not block self-targeting effects, primary o
GIVEN {
ASSUME(MoveHasAdditionalEffectSelf(MOVE_POWER_UP_PUNCH, MOVE_EFFECT_ATK_PLUS_1) == TRUE);
ASSUME(MoveHasAdditionalEffectSelf(MOVE_RAPID_SPIN, MOVE_EFFECT_RAPID_SPIN) == TRUE);
- ASSUME(MoveHasAdditionalEffectSelf(MOVE_LEAF_STORM, MOVE_EFFECT_SP_ATK_TWO_DOWN) == TRUE);
+ ASSUME(MoveHasAdditionalEffectSelf(MOVE_LEAF_STORM, MOVE_EFFECT_SP_ATK_MINUS_2) == TRUE);
ASSUME(MoveHasAdditionalEffectSelf(MOVE_METEOR_ASSAULT, MOVE_EFFECT_RECHARGE) == TRUE);
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_VIVILLON) { Ability(ABILITY_SHIELD_DUST); }
@@ -164,3 +164,15 @@ SINGLE_BATTLE_TEST("Shield Dust blocks Sparkling Aria in singles")
}
}
}
+
+SINGLE_BATTLE_TEST("Shield Dust does not prevent ability stat changes")
+{
+ GIVEN {
+ PLAYER(SPECIES_VIVILLON) { Ability(ABILITY_SHIELD_DUST); }
+ OPPONENT(SPECIES_ELDEGOSS) { Ability(ABILITY_COTTON_DOWN); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_TACKLE); }
+ } SCENE {
+ MESSAGE("Vivillon's Speed fell!");
+ }
+}
diff --git a/test/battle/ability/slush_rush.c b/test/battle/ability/slush_rush.c
new file mode 100644
index 000000000000..8ae62454bb49
--- /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 f1bfbcb9b056..a4d1acadb7c5 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 000000000000..f14ea11ee10a
--- /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/stalwart.c b/test/battle/ability/stalwart.c
new file mode 100644
index 000000000000..289f25dd1c80
--- /dev/null
+++ b/test/battle/ability/stalwart.c
@@ -0,0 +1,55 @@
+#include "global.h"
+#include "test/battle.h"
+
+DOUBLE_BATTLE_TEST("Stalwart ignores redirection from Follow-Me")
+{
+ GIVEN {
+ PLAYER(SPECIES_ARCHALUDON) { Ability(ABILITY_STALWART); }
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(opponentLeft, MOVE_FOLLOW_ME); MOVE(playerLeft, MOVE_DRACO_METEOR, target: opponentRight); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_FOLLOW_ME, opponentLeft);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DRACO_METEOR, playerLeft);
+ HP_BAR(opponentRight);
+ NOT HP_BAR(opponentLeft);
+ }
+}
+
+DOUBLE_BATTLE_TEST("Stalwart stops Lightning Rod and Storm Drain from redirecting moves")
+{
+ u32 ability, species;
+ PARAMETRIZE { ability = ABILITY_STORM_DRAIN; species = SPECIES_LUMINEON; }
+ PARAMETRIZE { ability = ABILITY_LIGHTNING_ROD; species = SPECIES_RAICHU; }
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_SPARK].type == TYPE_ELECTRIC);
+ ASSUME(gMovesInfo[MOVE_WATER_GUN].type == TYPE_WATER);
+ PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_STALWART); }
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(species) { Ability(ability); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN {
+ if (ability == ABILITY_LIGHTNING_ROD)
+ MOVE(playerLeft, MOVE_SPARK, target: opponentRight);
+ else
+ MOVE(playerLeft, MOVE_WATER_GUN, target: opponentRight);
+ }
+ } SCENE {
+ if (B_REDIRECT_ABILITY_IMMUNITY >= GEN_5) {
+ HP_BAR(opponentRight);
+ NONE_OF {
+ ABILITY_POPUP(opponentLeft, ability);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft);
+ MESSAGE("Foe Raichu's Sp. Atk rose!");
+ }
+ } else {
+ HP_BAR(opponentRight);
+ NONE_OF {
+ HP_BAR(opponentLeft);
+ }
+ }
+ }
+}
diff --git a/test/battle/ability/static.c b/test/battle/ability/static.c
index 0f1b4f816fe6..2e74db3e140e 100644
--- a/test/battle/ability/static.c
+++ b/test/battle/ability/static.c
@@ -29,3 +29,21 @@ SINGLE_BATTLE_TEST("Static inflicts paralysis on contact")
}
}
}
+
+SINGLE_BATTLE_TEST("Static triggers 30% of the time")
+{
+ PASSES_RANDOMLY(3, 10, RNG_STATIC);
+ GIVEN {
+ ASSUME(B_ABILITY_TRIGGER_CHANCE >= GEN_4);
+ ASSUME(gMovesInfo[MOVE_TACKLE].makesContact);
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_PIKACHU) { Ability(ABILITY_STATIC); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_TACKLE); }
+ } SCENE {
+ ABILITY_POPUP(opponent, ABILITY_STATIC);
+ ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PRZ, player);
+ MESSAGE("Foe Pikachu's Static paralyzed Wobbuffet! It may be unable to move!");
+ STATUS_ICON(player, paralysis: TRUE);
+ }
+}
diff --git a/test/battle/ability/supreme_overlord.c b/test/battle/ability/supreme_overlord.c
index baf20764298c..dcaaa494a0df 100644
--- a/test/battle/ability/supreme_overlord.c
+++ b/test/battle/ability/supreme_overlord.c
@@ -106,7 +106,7 @@ SINGLE_BATTLE_TEST("Supreme Overlord's message displays correctly after all batt
HP_BAR(opponent, hp: 0);
ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, opponent);
// Everyone faints.
- MESSAGE("Go! Kingambit!");
+ SEND_IN_MESSAGE("Kingambit");
MESSAGE("2 sent out Wobbuffet!");
ABILITY_POPUP(player, ABILITY_SUPREME_OVERLORD);
MESSAGE("Kingambit gained strength from the fallen!");
@@ -127,7 +127,7 @@ SINGLE_BATTLE_TEST("Supreme Overlord's message displays correctly after all batt
HP_BAR(player, hp: 0);
ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, player);
// Everyone faints.
- MESSAGE("Go! Wobbuffet!");
+ SEND_IN_MESSAGE("Wobbuffet");
MESSAGE("2 sent out Kingambit!");
ABILITY_POPUP(opponent, ABILITY_SUPREME_OVERLORD);
MESSAGE("Foe Kingambit gained strength from the fallen!");
diff --git a/test/battle/ability/swift_swim.c b/test/battle/ability/swift_swim.c
new file mode 100644
index 000000000000..4282ac2741a1
--- /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/sword_of_ruin.c b/test/battle/ability/sword_of_ruin.c
index 7fc2c30d2a1f..02eec69ed868 100644
--- a/test/battle/ability/sword_of_ruin.c
+++ b/test/battle/ability/sword_of_ruin.c
@@ -67,7 +67,7 @@ SINGLE_BATTLE_TEST("Sword of Ruin's message displays correctly after all battler
HP_BAR(player, hp: 0);
ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, player);
// Everyone faints.
- MESSAGE("Go! Wobbuffet!");
+ SEND_IN_MESSAGE("Wobbuffet");
MESSAGE("2 sent out Chien-Pao!");
ABILITY_POPUP(opponent, ABILITY_SWORD_OF_RUIN);
MESSAGE("Foe Chien-Pao's Sword of Ruin weakened the Defense of all surrounding Pokémon!");
diff --git a/test/battle/ability/tablets_of_ruin.c b/test/battle/ability/tablets_of_ruin.c
index d8858aca2edc..7862a0bb8c56 100644
--- a/test/battle/ability/tablets_of_ruin.c
+++ b/test/battle/ability/tablets_of_ruin.c
@@ -67,7 +67,7 @@ SINGLE_BATTLE_TEST("Tablets of Ruin's message displays correctly after all battl
HP_BAR(player, hp: 0);
ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, player);
// Everyone faints.
- MESSAGE("Go! Wobbuffet!");
+ SEND_IN_MESSAGE("Wobbuffet");
MESSAGE("2 sent out Wo-Chien!");
ABILITY_POPUP(opponent, ABILITY_TABLETS_OF_RUIN);
MESSAGE("Foe Wo-Chien's Tablets of Ruin weakened the Attack of all surrounding Pokémon!");
diff --git a/test/battle/ability/tera_shell.c b/test/battle/ability/tera_shell.c
new file mode 100644
index 000000000000..138a56f9b4eb
--- /dev/null
+++ b/test/battle/ability/tera_shell.c
@@ -0,0 +1,99 @@
+#include "global.h"
+#include "test/battle.h"
+
+SINGLE_BATTLE_TEST("Tera Shell makes all moves against Terapagos not very effective when at full HP")
+{
+ u16 hp;
+ PARAMETRIZE { hp = 100; }
+ PARAMETRIZE { hp = 99; }
+ GIVEN {
+ PLAYER(SPECIES_TERAPAGOS_TERASTAL) { Ability(ABILITY_TERA_SHELL); HP(hp); MaxHP(100);}
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_TACKLE); }
+ } SCENE {
+ if (hp == 100) {
+ MESSAGE("Foe Wobbuffet used Tackle!");
+ ABILITY_POPUP(player, ABILITY_TERA_SHELL);
+ MESSAGE("Terapagos made its shell gleam! It's distorting type matchups!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent);
+ HP_BAR(player);
+ MESSAGE("It's not very effective…");
+ }
+ else {
+ NONE_OF {
+ ABILITY_POPUP(player, ABILITY_TERA_SHELL);
+ MESSAGE("Terapagos made its shell gleam! It's distorting type matchups!");
+ MESSAGE("It's not very effective…");
+ }
+ }
+ }
+}
+
+SINGLE_BATTLE_TEST("Tera Shell makes all hits of multi-hit moves against Terapagos not very effective")
+{
+ s16 firstHit;
+ s16 secondHit;
+ GIVEN {
+ PLAYER(SPECIES_TERAPAGOS_TERASTAL) { Ability(ABILITY_TERA_SHELL); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_DOUBLE_HIT); }
+ } SCENE {
+ MESSAGE("Foe Wobbuffet used Double Hit!");
+ ABILITY_POPUP(player, ABILITY_TERA_SHELL);
+ MESSAGE("Terapagos made its shell gleam! It's distorting type matchups!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_HIT, opponent);
+ HP_BAR(player, captureDamage: &firstHit);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_HIT, opponent);
+ HP_BAR(player, captureDamage: &secondHit);
+ MESSAGE("It's not very effective…");
+ } THEN {
+ EXPECT_EQ(firstHit, secondHit);
+ }
+}
+
+DOUBLE_BATTLE_TEST("Tera Shell only makes the first hit of a double battle turn not very effective")
+{
+ s16 firstHit;
+ s16 secondHit;
+ GIVEN {
+ PLAYER(SPECIES_TERAPAGOS_TERASTAL) { Ability(ABILITY_TERA_SHELL); }
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(opponentLeft, MOVE_TACKLE, target: playerLeft); MOVE(opponentRight, MOVE_TACKLE, target: playerLeft); }
+ } SCENE {
+ ABILITY_POPUP(playerLeft, ABILITY_TERA_SHELL);
+ MESSAGE("Terapagos made its shell gleam! It's distorting type matchups!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft);
+ HP_BAR(playerLeft, captureDamage: &firstHit);
+ MESSAGE("It's not very effective…");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentRight);
+ HP_BAR(playerLeft, captureDamage: &secondHit);
+ NOT MESSAGE("It's not very effective…");
+ } THEN {
+ EXPECT_MUL_EQ(firstHit, Q_4_12(2.0), secondHit);
+ }
+}
+
+DOUBLE_BATTLE_TEST("Tera Shell only makes the first hit against Terapagos from a multi-target move not very effective")
+{
+ GIVEN {
+ PLAYER(SPECIES_TERAPAGOS_TERASTAL) { Ability(ABILITY_TERA_SHELL); }
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(opponentLeft, MOVE_BLIZZARD); }
+ } SCENE {
+ ABILITY_POPUP(playerLeft, ABILITY_TERA_SHELL);
+ MESSAGE("Terapagos made its shell gleam! It's distorting type matchups!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_BLIZZARD, opponentLeft);
+ HP_BAR(playerLeft);
+ MESSAGE("It's not very effective…");
+ HP_BAR(playerRight);
+ NOT MESSAGE("It's not very effective…");
+ }
+}
diff --git a/test/battle/ability/tera_shift.c b/test/battle/ability/tera_shift.c
new file mode 100644
index 000000000000..9149160cd18d
--- /dev/null
+++ b/test/battle/ability/tera_shift.c
@@ -0,0 +1,35 @@
+#include "global.h"
+#include "test/battle.h"
+
+SINGLE_BATTLE_TEST("Tera Shift transforms Terapagos into its Terastal form on switch in")
+{
+ GIVEN {
+ PLAYER(SPECIES_TERAPAGOS_NORMAL) { Ability(ABILITY_TERA_SHIFT); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { ; }
+ } SCENE {
+ ABILITY_POPUP(player, ABILITY_TERA_SHIFT);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player);
+ MESSAGE("Terapagos transformed!");
+ } THEN {
+ EXPECT_EQ(player->species, SPECIES_TERAPAGOS_TERASTAL);
+ }
+}
+
+SINGLE_BATTLE_TEST("Tera Shift can't be suppressed by Neutralizing Gas")
+{
+ GIVEN {
+ PLAYER(SPECIES_TERAPAGOS_NORMAL) { Ability(ABILITY_TERA_SHIFT); }
+ OPPONENT(SPECIES_KOFFING) { Ability(ABILITY_NEUTRALIZING_GAS); }
+ } WHEN {
+ TURN { ; }
+ } SCENE {
+ ABILITY_POPUP(opponent, ABILITY_NEUTRALIZING_GAS);
+ ABILITY_POPUP(player, ABILITY_TERA_SHIFT);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_FORM_CHANGE, player);
+ MESSAGE("Terapagos transformed!");
+ } THEN {
+ EXPECT_EQ(player->species, SPECIES_TERAPAGOS_TERASTAL);
+ }
+}
diff --git a/test/battle/ability/teraform_zero.c b/test/battle/ability/teraform_zero.c
new file mode 100644
index 000000000000..6540515322fb
--- /dev/null
+++ b/test/battle/ability/teraform_zero.c
@@ -0,0 +1,102 @@
+#include "global.h"
+#include "test/battle.h"
+
+DOUBLE_BATTLE_TEST("Teraform Zero clears weather and terrain upon activation")
+{
+ GIVEN {
+ PLAYER(SPECIES_TERAPAGOS_TERASTAL);
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_KYOGRE) {Ability(ABILITY_DRIZZLE); }
+ OPPONENT(SPECIES_TAPU_KOKO) {Ability(ABILITY_ELECTRIC_SURGE); }
+ } WHEN {
+ TURN { MOVE(playerLeft, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); }
+ } SCENE {
+ ABILITY_POPUP(playerLeft, ABILITY_TERAFORM_ZERO);
+ MESSAGE("The rain stopped.");
+ MESSAGE("The electricity disappeared from the battlefield.");
+ }
+}
+
+DOUBLE_BATTLE_TEST("Teraform Zero can be supressed")
+{
+ GIVEN {
+ PLAYER(SPECIES_TERAPAGOS_TERASTAL);
+ PLAYER(SPECIES_WOBBUFFET);
+ PLAYER(SPECIES_WEEZING) {Ability(ABILITY_NEUTRALIZING_GAS); }
+ OPPONENT(SPECIES_KYOGRE) {Ability(ABILITY_DRIZZLE); }
+ OPPONENT(SPECIES_TAPU_KOKO) {Ability(ABILITY_ELECTRIC_SURGE); }
+ } WHEN {
+ TURN { SWITCH(playerRight, 2); MOVE(playerLeft, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); }
+ } SCENE {
+ ABILITY_POPUP(playerRight, ABILITY_NEUTRALIZING_GAS);
+ NONE_OF {
+ MESSAGE("The rain stopped.");
+ MESSAGE("The electricity disappeared from the battlefield.");
+ }
+ }
+}
+
+SINGLE_BATTLE_TEST("Teraform Zero can be replaced")
+{
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_WORRY_SEED].effect == EFFECT_WORRY_SEED);
+ ASSUME(gMovesInfo[MOVE_REST].effect == EFFECT_REST);
+ PLAYER(SPECIES_TERAPAGOS);
+ OPPONENT(SPECIES_WHIMSICOTT) { Ability(ABILITY_PRANKSTER); }
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_WORRY_SEED); MOVE(player, MOVE_REST, gimmick: GIMMICK_TERA); }
+ } SCENE {
+ MESSAGE("Foe Whimsicott used Worry Seed!");
+ MESSAGE("Terapagos acquired Insomnia!");
+ MESSAGE("Terapagos used Rest!");
+ ABILITY_POPUP(player, ABILITY_INSOMNIA);
+ MESSAGE("Terapagos stayed awake using its Insomnia!");
+ }
+}
+
+SINGLE_BATTLE_TEST("Teraform Zero cannot be swapped")
+{
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_SKILL_SWAP].effect == EFFECT_SKILL_SWAP);
+ PLAYER(SPECIES_TERAPAGOS);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_SKILL_SWAP); }
+ } SCENE {
+ MESSAGE("Foe Wobbuffet used Skill Swap!");
+ MESSAGE("But it failed!");
+ }
+}
+
+SINGLE_BATTLE_TEST("Teraform Zero cannot be copied")
+{
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_ROLE_PLAY].effect == EFFECT_ROLE_PLAY);
+ PLAYER(SPECIES_TERAPAGOS);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_ROLE_PLAY); }
+ } SCENE {
+ MESSAGE("Foe Wobbuffet used Role Play!");
+ MESSAGE("But it failed!");
+ }
+}
+
+DOUBLE_BATTLE_TEST("Teraform Zero shouldn't cause Neutralizing Gas to show it's popup when trying to activate")
+{
+ KNOWN_FAILING; // #5010
+ GIVEN {
+ PLAYER(SPECIES_TERAPAGOS_TERASTAL);
+ PLAYER(SPECIES_ABSOL) {Ability(ABILITY_PRESSURE); }
+ PLAYER(SPECIES_WEEZING) {Ability(ABILITY_NEUTRALIZING_GAS); }
+ OPPONENT(SPECIES_KYOGRE) {Ability(ABILITY_DRIZZLE); }
+ OPPONENT(SPECIES_TAPU_KOKO) {Ability(ABILITY_ELECTRIC_SURGE); }
+ } WHEN {
+ TURN { SWITCH(playerRight, 2); MOVE(playerLeft, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); }
+ } SCENE {
+ MESSAGE("Terapagos is storing energy!");
+ MESSAGE("Terapagos terastalized into the Stellar type!");
+ NOT ABILITY_POPUP(playerRight, ABILITY_NEUTRALIZING_GAS);
+ MESSAGE("Terapagos used Celebreate!");
+ }
+}
diff --git a/test/battle/ability/toxic_chain.c b/test/battle/ability/toxic_chain.c
new file mode 100644
index 000000000000..2c29770f52a6
--- /dev/null
+++ b/test/battle/ability/toxic_chain.c
@@ -0,0 +1,112 @@
+#include "global.h"
+#include "test/battle.h"
+
+SINGLE_BATTLE_TEST("Toxic Chain inflicts bad poison when attacking")
+{
+ PASSES_RANDOMLY(3, 10, RNG_TOXIC_CHAIN);
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_TACKLE].category != DAMAGE_CATEGORY_STATUS);
+ ASSUME(gMovesInfo[MOVE_TACKLE].power > 0);
+ PLAYER(SPECIES_OKIDOGI) { Ability(ABILITY_TOXIC_CHAIN); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_TACKLE); }
+ } SCENE {
+ ABILITY_POPUP(player, ABILITY_TOXIC_CHAIN);
+ ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent);
+ MESSAGE("Foe Wobbuffet is badly poisoned!");
+ STATUS_ICON(opponent, badPoison: TRUE);
+ } THEN {
+ EXPECT(opponent->status1 & STATUS1_TOXIC_POISON);
+ }
+}
+
+SINGLE_BATTLE_TEST("Toxic Chain inflicts bad poison on any hit of a multi-hit move")
+{
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_DOUBLE_SLAP].category != DAMAGE_CATEGORY_STATUS);
+ ASSUME(gMovesInfo[MOVE_DOUBLE_SLAP].effect == EFFECT_MULTI_HIT);
+ ASSUME(gMovesInfo[MOVE_DOUBLE_SLAP].power > 0);
+ ASSUME(gItemsInfo[ITEM_PECHA_BERRY].holdEffect == HOLD_EFFECT_CURE_PSN);
+ PLAYER(SPECIES_OKIDOGI) { Ability(ABILITY_TOXIC_CHAIN); }
+ OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_PECHA_BERRY); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_DOUBLE_SLAP); }
+ } SCENE {
+ ABILITY_POPUP(player, ABILITY_TOXIC_CHAIN);
+ ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent);
+ MESSAGE("Foe Wobbuffet is badly poisoned!");
+ STATUS_ICON(opponent, badPoison: TRUE);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent);
+ STATUS_ICON(opponent, badPoison: FALSE);
+ ABILITY_POPUP(player, ABILITY_TOXIC_CHAIN);
+ ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent);
+ MESSAGE("Foe Wobbuffet is badly poisoned!");
+ STATUS_ICON(opponent, badPoison: TRUE);
+ } THEN {
+ EXPECT(opponent->status1 & STATUS1_TOXIC_POISON);
+ }
+}
+
+DOUBLE_BATTLE_TEST("Toxic Chain can inflict bad poison on both foes")
+{
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_RAZOR_LEAF].category != DAMAGE_CATEGORY_STATUS);
+ ASSUME(gMovesInfo[MOVE_RAZOR_LEAF].target == MOVE_TARGET_BOTH);
+ ASSUME(gMovesInfo[MOVE_RAZOR_LEAF].power > 0);
+ PLAYER(SPECIES_OKIDOGI) { Ability(ABILITY_TOXIC_CHAIN); }
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WYNAUT);
+ } WHEN {
+ TURN { MOVE(playerLeft, MOVE_RAZOR_LEAF, WITH_RNG(RNG_TOXIC_CHAIN, TRUE)); }
+ } SCENE {
+ HP_BAR(opponentLeft);
+ ABILITY_POPUP(playerLeft, ABILITY_TOXIC_CHAIN);
+ ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponentLeft);
+ MESSAGE("Foe Wobbuffet is badly poisoned!");
+ STATUS_ICON(opponentLeft, badPoison: TRUE);
+ HP_BAR(opponentRight);
+ ABILITY_POPUP(playerLeft, ABILITY_TOXIC_CHAIN);
+ ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponentRight);
+ MESSAGE("Foe Wynaut is badly poisoned!");
+ STATUS_ICON(opponentRight, badPoison: TRUE);
+ } THEN {
+ EXPECT(opponentLeft->status1 & STATUS1_TOXIC_POISON);
+ EXPECT(opponentRight->status1 & STATUS1_TOXIC_POISON);
+ }
+}
+
+SINGLE_BATTLE_TEST("Toxic Chain makes Lum/Pecha Berry trigger before being knocked off")
+{
+ u16 item = 0;
+
+ PARAMETRIZE { item = ITEM_PECHA_BERRY; }
+ PARAMETRIZE { item = ITEM_LUM_BERRY; }
+
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_KNOCK_OFF].category != DAMAGE_CATEGORY_STATUS);
+ ASSUME(gMovesInfo[MOVE_KNOCK_OFF].effect == EFFECT_KNOCK_OFF);
+ ASSUME(gMovesInfo[MOVE_KNOCK_OFF].power > 0);
+ ASSUME(gItemsInfo[ITEM_PECHA_BERRY].holdEffect == HOLD_EFFECT_CURE_PSN);
+ ASSUME(gItemsInfo[ITEM_LUM_BERRY].holdEffect == HOLD_EFFECT_CURE_STATUS);
+ PLAYER(SPECIES_OKIDOGI) { Ability(ABILITY_TOXIC_CHAIN); }
+ OPPONENT(SPECIES_WOBBUFFET) { Item(item); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_KNOCK_OFF, WITH_RNG(RNG_TOXIC_CHAIN, TRUE)); }
+ } SCENE {
+ ABILITY_POPUP(player, ABILITY_TOXIC_CHAIN);
+ ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, opponent);
+ MESSAGE("Foe Wobbuffet is badly poisoned!");
+ STATUS_ICON(opponent, badPoison: TRUE);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent);
+ STATUS_ICON(opponent, badPoison: FALSE);
+ NONE_OF {
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ITEM_KNOCKOFF);
+ MESSAGE("Okidogi knocked off Foe Wobbuffet's Pecha Berry!");
+ MESSAGE("Okidogi knocked off Foe Wobbuffet's Lum Berry!");
+ }
+ } THEN {
+ EXPECT(opponent->status1 == 0);
+ }
+}
diff --git a/test/battle/ability/unnerve.c b/test/battle/ability/unnerve.c
new file mode 100644
index 000000000000..9ad4ee7e5fdd
--- /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/vessel_of_ruin.c b/test/battle/ability/vessel_of_ruin.c
index 5f83a6c07f25..362b44c00393 100644
--- a/test/battle/ability/vessel_of_ruin.c
+++ b/test/battle/ability/vessel_of_ruin.c
@@ -67,7 +67,7 @@ SINGLE_BATTLE_TEST("Vessel of Ruin's message displays correctly after all battle
HP_BAR(player, hp: 0);
ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, player);
// Everyone faints.
- MESSAGE("Go! Wobbuffet!");
+ SEND_IN_MESSAGE("Wobbuffet");
MESSAGE("2 sent out Ting-Lu!");
ABILITY_POPUP(opponent, ABILITY_VESSEL_OF_RUIN);
MESSAGE("Foe Ting-Lu's Vessel of Ruin weakened the Sp. Atk of all surrounding Pokémon!");
diff --git a/test/battle/ability/wind_power.c b/test/battle/ability/wind_power.c
index bbf76cd6fb66..146c47f3dd87 100644
--- a/test/battle/ability/wind_power.c
+++ b/test/battle/ability/wind_power.c
@@ -167,12 +167,12 @@ DOUBLE_BATTLE_TEST("Wind Power activates correctly for every battler with the ab
HP_BAR(playerLeft);
if (abilityLeft == ABILITY_WIND_POWER) {
ABILITY_POPUP(playerLeft, ABILITY_WIND_POWER);
- MESSAGE("Being hit by PetalBlizzrd charged Wattrel with power!");
+ MESSAGE("Being hit by Petal Blizzard charged Wattrel with power!");
}
HP_BAR(playerRight);
if (abilityRight == ABILITY_WIND_POWER) {
ABILITY_POPUP(playerRight, ABILITY_WIND_POWER);
- MESSAGE("Being hit by PetalBlizzrd charged Wattrel with power!");
+ MESSAGE("Being hit by Petal Blizzard charged Wattrel with power!");
}
HP_BAR(opponentRight);
NOT HP_BAR(opponentLeft);
diff --git a/test/battle/ability/wind_rider.c b/test/battle/ability/wind_rider.c
new file mode 100644
index 000000000000..57e6f0d27582
--- /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")
+{
+ ASSUME(gMovesInfo[MOVE_GUST].windMove == TRUE);
+ GIVEN {
+ 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/ability/zero_to_hero.c b/test/battle/ability/zero_to_hero.c
index 3939c6cb7859..be72a55a7e4e 100644
--- a/test/battle/ability/zero_to_hero.c
+++ b/test/battle/ability/zero_to_hero.c
@@ -11,16 +11,16 @@ SINGLE_BATTLE_TEST("Zero to Hero transforms Palafin when it switches out")
TURN { SWITCH(player, 1); }
TURN { SWITCH(player, 0); }
} SCENE {
- MESSAGE("Palafin, that's enough! Come back!");
- MESSAGE("Go! Wobbuffet!");
- MESSAGE("Wobbuffet, that's enough! Come back!");
- MESSAGE("Go! Palafin!");
+ SWITCH_OUT_MESSAGE("Palafin");
+ SEND_IN_MESSAGE("Wobbuffet");
+ SWITCH_OUT_MESSAGE("Wobbuffet");
+ SEND_IN_MESSAGE("Palafin");
ABILITY_POPUP(player, ABILITY_ZERO_TO_HERO);
MESSAGE("Palafin underwent a heroic transformation!");
} THEN { EXPECT_EQ(player->species, SPECIES_PALAFIN_HERO); }
}
-SINGLE_BATTLE_TEST("Zero to Hero can't be surpressed by Neutralizing Gas")
+SINGLE_BATTLE_TEST("Zero to Hero can't be suppressed by Neutralizing Gas")
{
GIVEN {
PLAYER(SPECIES_PALAFIN_ZERO) { Ability(ABILITY_ZERO_TO_HERO); }
@@ -152,7 +152,7 @@ SINGLE_BATTLE_TEST("Zero to Hero's message displays correctly after all battlers
HP_BAR(opponent, hp: 0);
ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, opponent);
// Everyone faints.
- MESSAGE("Go! Palafin!");
+ SEND_IN_MESSAGE("Palafin");
MESSAGE("2 sent out Wobbuffet!");
ABILITY_POPUP(player, ABILITY_ZERO_TO_HERO);
MESSAGE("Palafin underwent a heroic transformation!");
@@ -175,7 +175,7 @@ SINGLE_BATTLE_TEST("Zero to Hero's message displays correctly after all battlers
HP_BAR(player, hp: 0);
ANIMATION(ANIM_TYPE_MOVE, MOVE_EXPLOSION, player);
// Everyone faints.
- MESSAGE("Go! Wobbuffet!");
+ SEND_IN_MESSAGE("Wobbuffet");
MESSAGE("2 sent out Palafin!");
ABILITY_POPUP(opponent, ABILITY_ZERO_TO_HERO);
MESSAGE("Foe Palafin underwent a heroic transformation!");
diff --git a/test/battle/ai.c b/test/battle/ai/ai.c
similarity index 71%
rename from test/battle/ai.c
rename to test/battle/ai/ai.c
index e98cb7b08e26..a19481c7ed3a 100644
--- a/test/battle/ai.c
+++ b/test/battle/ai/ai.c
@@ -2,26 +2,6 @@
#include "test/battle.h"
#include "battle_ai_util.h"
-AI_SINGLE_BATTLE_TEST("AI gets baited by Protect Switch tactics") // This behavior is to be fixed.
-{
- GIVEN {
- AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING);
- PLAYER(SPECIES_STUNFISK);
- PLAYER(SPECIES_PELIPPER);
- OPPONENT(SPECIES_DARKRAI) { Moves(MOVE_TACKLE, MOVE_PECK, MOVE_EARTHQUAKE, MOVE_THUNDERBOLT); }
- OPPONENT(SPECIES_SCIZOR) { Moves(MOVE_HYPER_BEAM, MOVE_FACADE, MOVE_GIGA_IMPACT, MOVE_EXTREME_SPEED); }
- } WHEN {
-
- TURN { MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_EARTHQUAKE); } // E-quake
- TURN { SWITCH(player, 1); EXPECT_MOVE(opponent, MOVE_EARTHQUAKE); } // E-quake
- TURN { MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_THUNDERBOLT); } // T-Bolt
- TURN { SWITCH(player, 0); EXPECT_MOVE(opponent, MOVE_THUNDERBOLT); } // T-Bolt
- TURN { MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_EARTHQUAKE); } // E-quake
- TURN { SWITCH(player, 1); EXPECT_MOVE(opponent, MOVE_EARTHQUAKE);} // E-quake
- TURN { MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_THUNDERBOLT); } // T-Bolt
- }
-}
-
AI_SINGLE_BATTLE_TEST("AI prefers Bubble over Water Gun if it's slower")
{
u32 speedPlayer, speedAi;
@@ -526,222 +506,6 @@ AI_SINGLE_BATTLE_TEST("AI will choose either Rock Tomb or Bulldoze if Stat drop
}
}
-AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Number of hits to KO calculation checks whether incoming damage is less than recurring healing to avoid an infinite loop")
-{
- GIVEN {
- 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);
- PLAYER(SPECIES_VENUSAUR) { Level(30); Moves(MOVE_TACKLE); }
- // Opponent party courtesy of Skolgrahd, who triggered the bug in the first place
- OPPONENT(SPECIES_PIKACHU) { Level(100); Moves(MOVE_ZIPPY_ZAP, MOVE_EXTREME_SPEED, MOVE_IRON_TAIL, MOVE_KNOCK_OFF); }
- OPPONENT(SPECIES_NINETALES_ALOLAN) { Level(100); Moves(MOVE_AURORA_VEIL, MOVE_BLIZZARD, MOVE_MOONBLAST, MOVE_DISABLE); }
- OPPONENT(SPECIES_WEAVILE) { Level(100); Moves(MOVE_NIGHT_SLASH, MOVE_TRIPLE_AXEL, MOVE_ICE_SHARD, MOVE_FAKE_OUT); }
- OPPONENT(SPECIES_DITTO) { Level(100); Moves(MOVE_TRANSFORM); }
- OPPONENT(SPECIES_TYPHLOSION) { Level(100); Moves(MOVE_ERUPTION, MOVE_HEAT_WAVE, MOVE_FOCUS_BLAST, MOVE_EXTRASENSORY); }
- OPPONENT(SPECIES_UMBREON) { Level(100); Item(ITEM_LEFTOVERS); Moves(MOVE_FOUL_PLAY, MOVE_SNARL, MOVE_HELPING_HAND, MOVE_THUNDER_WAVE); }
- } WHEN {
- TURN { MOVE(player, MOVE_TACKLE); EXPECT_MOVES(opponent, MOVE_ZIPPY_ZAP, MOVE_EXTREME_SPEED, MOVE_IRON_TAIL, MOVE_KNOCK_OFF); }
- } SCENE {
- MESSAGE("Venusaur fainted!");
- }
-}
-
-AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Number of hits to KO calculation checks whether incoming damage is zero to avoid an infinite loop")
-{
- 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);
- PLAYER(SPECIES_BULBASAUR) { Level(5); Moves(MOVE_SWORDS_DANCE, MOVE_WHIRLWIND, MOVE_SAND_ATTACK, MOVE_TAIL_WHIP); }
- // Scenario courtesy of Duke, who triggered the bug in the first place
- OPPONENT(SPECIES_GEODUDE) { Level(100); Moves(MOVE_TACKLE); }
- OPPONENT(SPECIES_GEODUDE) { Level(100); Moves(MOVE_TACKLE); }
- OPPONENT(SPECIES_NOSEPASS) { Level(100); Moves(MOVE_TACKLE); }
- } WHEN {
- TURN { MOVE(player, MOVE_SWORDS_DANCE); EXPECT_MOVES(opponent, MOVE_TACKLE); }
- } SCENE {
- MESSAGE("Bulbasaur fainted!");
- }
-}
-
-AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Avoid infinite loop if damage taken is equal to recurring healing")
-{
- 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);
- 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); }
- OPPONENT(SPECIES_GEODUDE) { Level(5); Moves(MOVE_DOUBLE_EDGE); }
- OPPONENT(SPECIES_GEODUDE) { Level(5); Moves(MOVE_DOUBLE_EDGE); }
- OPPONENT(SPECIES_NOSEPASS) { Level(5); Moves(MOVE_DOUBLE_EDGE); }
- OPPONENT(SPECIES_HOUNDSTONE) { Level(5); Moves(MOVE_NIGHT_SHADE, MOVE_BODY_PRESS, MOVE_WILL_O_WISP, MOVE_PROTECT); Item(ITEM_LEFTOVERS); }
- } WHEN {
- TURN { MOVE(player, MOVE_FAKE_OUT); EXPECT_MOVES(opponent, MOVE_FAKE_OUT); }
- }
-}
-
-AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: AI will not switch in a Pokemon which is slower and gets 1HKOed after fainting")
-{
- bool32 alakazamFirst;
- u32 speedAlakazm;
- u32 aiSmartSwitchFlags = 0;
-
- PARAMETRIZE { speedAlakazm = 200; alakazamFirst = TRUE; } // AI will always send out Alakazan as it sees a KO with Focus Blast, even if Alakazam dies before it can get it off
- PARAMETRIZE { speedAlakazm = 200; alakazamFirst = FALSE; aiSmartSwitchFlags = AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES; } // AI_FLAG_SMART_MON_CHOICES lets AI see that Alakazam would be KO'd before it can KO, and won't switch it in
- PARAMETRIZE { speedAlakazm = 400; alakazamFirst = TRUE; aiSmartSwitchFlags = AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES; } // AI_FLAG_SMART_MON_CHOICES recognizes that Alakazam is faster and can KO, and will switch it in
-
- GIVEN {
- ASSUME(gMovesInfo[MOVE_PSYCHIC].category == DAMAGE_CATEGORY_SPECIAL);
- ASSUME(gMovesInfo[MOVE_FOCUS_BLAST].category == DAMAGE_CATEGORY_SPECIAL);
- ASSUME(gMovesInfo[MOVE_BUBBLE_BEAM].category == DAMAGE_CATEGORY_SPECIAL);
- ASSUME(gMovesInfo[MOVE_WATER_GUN].category == DAMAGE_CATEGORY_SPECIAL);
- ASSUME(gMovesInfo[MOVE_STRENGTH].category == DAMAGE_CATEGORY_PHYSICAL);
- AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSmartSwitchFlags);
- PLAYER(SPECIES_WEAVILE) { Speed(300); Ability(ABILITY_SHADOW_TAG); } // Weavile has Shadow Tag, so AI can't switch on the first turn, but has to do it after fainting.
- OPPONENT(SPECIES_KADABRA) { Speed(200); Moves(MOVE_PSYCHIC, MOVE_DISABLE, MOVE_TAUNT, MOVE_CALM_MIND); }
- OPPONENT(SPECIES_ALAKAZAM) { Speed(speedAlakazm); Moves(MOVE_FOCUS_BLAST, MOVE_PSYCHIC); } // Alakazam has a move which OHKOes Weavile, but it doesn't matter if he's getting KO-ed first.
- OPPONENT(SPECIES_BLASTOISE) { Speed(200); Moves(MOVE_BUBBLE_BEAM, MOVE_WATER_GUN, MOVE_LEER, MOVE_STRENGTH); } // Can't OHKO, but survives a hit from Weavile's Night Slash.
- } WHEN {
- TURN { MOVE(player, MOVE_NIGHT_SLASH) ; EXPECT_SEND_OUT(opponent, alakazamFirst ? 1 : 2); } // AI doesn't send out Alakazam if it gets outsped
- } SCENE {
- MESSAGE("Foe Kadabra fainted!");
- if (alakazamFirst) {
- MESSAGE("{PKMN} TRAINER LEAF sent out Alakazam!");
- } else {
- MESSAGE("{PKMN} TRAINER LEAF sent out Blastoise!");
- }
- }
-}
-
-AI_SINGLE_BATTLE_TEST("AI switches if Perish Song is about to kill")
-{
- GIVEN {
- AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT);
- PLAYER(SPECIES_WOBBUFFET);
- OPPONENT(SPECIES_WOBBUFFET) {Moves(MOVE_TACKLE); }
- OPPONENT(SPECIES_CROBAT) {Moves(MOVE_TACKLE); }
- } WHEN {
- TURN { MOVE(player, MOVE_PERISH_SONG); }
- TURN { ; }
- TURN { ; }
- TURN { EXPECT_SWITCH(opponent, 1); }
- } SCENE {
- MESSAGE("{PKMN} TRAINER LEAF sent out Crobat!");
- }
-}
-
-AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: AI considers hazard damage when choosing which Pokemon to switch in")
-{
- u32 aiIsSmart = 0;
- u32 aiSmartSwitchFlags = 0;
-
- PARAMETRIZE { aiIsSmart = 0; aiSmartSwitchFlags = 0; } // AI doesn't care about hazard damage resulting in Pokemon being KO'd
- PARAMETRIZE { aiIsSmart = 1; aiSmartSwitchFlags = AI_FLAG_SMART_MON_CHOICES; } // AI_FLAG_SMART_MON_CHOICES avoids being KO'd as a result of hazards damage
-
- GIVEN {
- AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSmartSwitchFlags);
- PLAYER(SPECIES_MEGANIUM) { Speed(100); SpDefense(328); SpAttack(265); Moves(MOVE_STEALTH_ROCK, MOVE_SURF); } // Meganium does ~56% minimum ~66% maximum, enough to KO Charizard after rocks and never KO Typhlosion after rocks
- OPPONENT(SPECIES_PONYTA) { Level(5); Speed(5); Moves(MOVE_TACKLE); }
- OPPONENT(SPECIES_CHARIZARD) { Speed(200); Moves(MOVE_FLAMETHROWER); SpAttack(317); SpDefense(207); MaxHP(297); } // Outspeends and 2HKOs Meganium
- OPPONENT(SPECIES_TYPHLOSION) { Speed(200); Moves(MOVE_FLAMETHROWER); SpAttack(317); SpDefense(207); MaxHP(297); } // Outspeends and 2HKOs Meganium
- } WHEN {
- TURN { MOVE(player, MOVE_STEALTH_ROCK) ;}
- TURN { MOVE(player, MOVE_SURF); EXPECT_SEND_OUT(opponent, aiIsSmart ? 2 : 1); } // AI sends out Typhlosion to get the KO with the flag rather than Charizard
- }
-}
-
-AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Mid-battle switches prioritize type matchup + SE move, then type matchup")
-{
- u32 aiSmartSwitchFlags = 0;
- u32 move1;
- u32 move2;
- u32 expectedIndex;
-
- PARAMETRIZE { expectedIndex = 3; move1 = MOVE_TACKLE; move2 = MOVE_TACKLE; aiSmartSwitchFlags = 0; } // When not smart, AI will only switch in a defensive mon if it has a SE move, otherwise will just default to damage
- PARAMETRIZE { expectedIndex = 1; move1 = MOVE_GIGA_DRAIN; move2 = MOVE_TACKLE; aiSmartSwitchFlags = 0; }
- PARAMETRIZE { expectedIndex = 2; move1 = MOVE_TACKLE; move2 = MOVE_TACKLE; aiSmartSwitchFlags = AI_FLAG_SMART_MON_CHOICES; } // When smart, AI will prioritize SE move, but still switch in good type matchup without SE move
- PARAMETRIZE { expectedIndex = 1; move1 = MOVE_GIGA_DRAIN; move2 = MOVE_TACKLE; aiSmartSwitchFlags = AI_FLAG_SMART_MON_CHOICES; }
-
- GIVEN {
- AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSmartSwitchFlags);
- PLAYER(SPECIES_MARSHTOMP) { Level(30); Moves(MOVE_MUD_BOMB, MOVE_WATER_GUN, MOVE_GROWL, MOVE_MUD_SHOT); Speed(5); }
- OPPONENT(SPECIES_PONYTA) { Level(1); Moves(MOVE_NONE); Speed(6); } // Forces switchout
- OPPONENT(SPECIES_TANGELA) { Level(30); Moves(move1); Speed(4); }
- OPPONENT(SPECIES_LOMBRE) { Level(30); Moves(move2); Speed(4); }
- OPPONENT(SPECIES_HARIYAMA) { Level(30); Moves(MOVE_VITAL_THROW); Speed(4); }
- } WHEN {
- TURN { MOVE(player, MOVE_GROWL); EXPECT_SWITCH(opponent, expectedIndex); }
- }
-}
-
-AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Mid-battle switches prioritize defensive options")
-{
- GIVEN {
- AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_MON_CHOICES);
- PLAYER(SPECIES_SWELLOW) { Level(30); Moves(MOVE_WING_ATTACK, MOVE_BOOMBURST); Speed(5); }
- OPPONENT(SPECIES_PONYTA) { Level(1); Moves(MOVE_NONE); Speed(4); } // Forces switchout
- OPPONENT(SPECIES_ARON) { Level(30); Moves(MOVE_HEADBUTT); Speed(4); } // Mid battle, AI sends out Aron
- OPPONENT(SPECIES_ELECTRODE) { Level(30); Moves(MOVE_CHARGE_BEAM); Speed(6); }
- } WHEN {
- TURN { MOVE(player, MOVE_WING_ATTACK); EXPECT_SWITCH(opponent, 1); }
- }
-}
-
-AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Post-KO switches prioritize offensive options")
-{
- GIVEN {
- AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_MON_CHOICES);
- PLAYER(SPECIES_SWELLOW) { Level(30); Moves(MOVE_WING_ATTACK, MOVE_BOOMBURST); Speed(5); }
- OPPONENT(SPECIES_PONYTA) { Level(1); Moves(MOVE_TACKLE); Speed(4); }
- OPPONENT(SPECIES_ARON) { Level(30); Moves(MOVE_HEADBUTT); Speed(4); } // Mid battle, AI sends out Aron
- OPPONENT(SPECIES_ELECTRODE) { Level(30); Moves(MOVE_CHARGE_BEAM); Speed(6); }
- } WHEN {
- TURN { MOVE(player, MOVE_WING_ATTACK); EXPECT_SEND_OUT(opponent, 2); }
- }
-}
-
-AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI switches out after sufficient stat drops")
-{
- GIVEN {
- AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING);
- PLAYER(SPECIES_HITMONTOP) { Level(30); Moves(MOVE_CHARM, MOVE_TACKLE); Ability(ABILITY_INTIMIDATE); Speed(5); }
- OPPONENT(SPECIES_GRIMER) { Level(30); Moves(MOVE_TACKLE); Speed(4); }
- OPPONENT(SPECIES_PONYTA) { Level(30); Moves(MOVE_HEADBUTT); Speed(4); }
- } WHEN {
- TURN { MOVE(player, MOVE_CHARM); }
- TURN { MOVE(player, MOVE_TACKLE); EXPECT_SWITCH(opponent, 1); }
- }
-}
-
-AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will not switch out if Pokemon would faint to hazards unless party member can clear them")
-{
- u32 move1;
-
- PARAMETRIZE { move1 = MOVE_TACKLE; }
- PARAMETRIZE { move1 = MOVE_RAPID_SPIN; }
-
- GIVEN {
- ASSUME(gMovesInfo[MOVE_TACKLE].category == DAMAGE_CATEGORY_PHYSICAL);
- ASSUME(gMovesInfo[MOVE_RAPID_SPIN].category == DAMAGE_CATEGORY_PHYSICAL);
- ASSUME(gMovesInfo[MOVE_EARTHQUAKE].category == DAMAGE_CATEGORY_PHYSICAL);
- ASSUME(gMovesInfo[MOVE_HEADBUTT].category == DAMAGE_CATEGORY_PHYSICAL);
- AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING);
- PLAYER(SPECIES_HITMONTOP) { Level(30); Moves(MOVE_CHARM, MOVE_TACKLE, MOVE_STEALTH_ROCK, MOVE_EARTHQUAKE); Ability(ABILITY_INTIMIDATE); Speed(5); }
- OPPONENT(SPECIES_GRIMER) { Level(30); Moves(MOVE_TACKLE); Item(ITEM_FOCUS_SASH); Speed(4); }
- OPPONENT(SPECIES_PONYTA) { Level(30); Moves(MOVE_HEADBUTT, move1); Speed(4); }
- } WHEN {
- TURN { MOVE(player, MOVE_STEALTH_ROCK); }
- TURN { MOVE(player, MOVE_EARTHQUAKE); }
- TURN { MOVE(player, MOVE_CHARM); }
- TURN { // If the AI has a mon that can remove hazards, don't prevent them switching out
- MOVE(player, MOVE_CHARM);
- if (move1 == MOVE_RAPID_SPIN)
- EXPECT_SWITCH(opponent, 1);
- else if (move1 == MOVE_TACKLE)
- EXPECT_MOVE(opponent, MOVE_TACKLE);
- }
- }
-}
-
AI_SINGLE_BATTLE_TEST("First Impression is preferred on the first turn of the species if it's the best dmg move")
{
GIVEN {
@@ -778,34 +542,6 @@ AI_SINGLE_BATTLE_TEST("First Impression is not chosen if it's blocked by certain
}
}
-AI_DOUBLE_BATTLE_TEST("AI will not try to switch for the same pokemon for 2 spots in a double battle")
-{
- u32 flags;
-
- PARAMETRIZE {flags = AI_FLAG_SMART_SWITCHING; }
- PARAMETRIZE {flags = 0; }
-
- GIVEN {
- AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | flags);
- PLAYER(SPECIES_RATTATA);
- PLAYER(SPECIES_RATTATA);
- // No moves to damage player.
- OPPONENT(SPECIES_GENGAR) { Moves(MOVE_SHADOW_BALL); }
- OPPONENT(SPECIES_HAUNTER) { Moves(MOVE_SHADOW_BALL); }
- OPPONENT(SPECIES_GENGAR) { Moves(MOVE_SHADOW_BALL); }
- OPPONENT(SPECIES_RATICATE) { Moves(MOVE_HEADBUTT); }
- } WHEN {
- TURN { EXPECT_SWITCH(opponentLeft, 3); };
- } SCENE {
- MESSAGE("{PKMN} TRAINER LEAF withdrew Gengar!");
- MESSAGE("{PKMN} TRAINER LEAF sent out Raticate!");
- NONE_OF {
- MESSAGE("{PKMN} TRAINER LEAF withdrew Haunter!");
- MESSAGE("{PKMN} TRAINER LEAF sent out Raticate!");
- }
- }
-}
-
AI_SINGLE_BATTLE_TEST("AI will not choose Burn Up if the user lost the Fire typing")
{
GIVEN {
@@ -1040,3 +776,32 @@ AI_SINGLE_BATTLE_TEST("AI avoids contact moves against rocky helmet")
}
}
+AI_SINGLE_BATTLE_TEST("AI uses a guaranteed KO move instead of the move with the highest expected damage")
+{
+ u32 flags;
+
+ PARAMETRIZE { flags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY; }
+ PARAMETRIZE { flags = AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT; }
+
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_SLASH].criticalHitStage == 1);
+ ASSUME(gMovesInfo[MOVE_SLASH].power == 70);
+ ASSUME(gMovesInfo[MOVE_STRENGTH].power == 80);
+ ASSUME(gMovesInfo[MOVE_SLASH].type == gMovesInfo[MOVE_STRENGTH].type);
+ ASSUME(gMovesInfo[MOVE_SLASH].category == gMovesInfo[MOVE_STRENGTH].category);
+ AI_FLAGS(flags);
+ PLAYER(SPECIES_WOBBUFFET) { HP(225); }
+ OPPONENT(SPECIES_ABSOL) { Ability(ABILITY_SUPER_LUCK); Moves(MOVE_SLASH, MOVE_STRENGTH); }
+ } WHEN {
+ TURN { EXPECT_MOVE(opponent, MOVE_SLASH); }
+ if (flags & AI_FLAG_TRY_TO_FAINT)
+ TURN { EXPECT_MOVE(opponent, MOVE_STRENGTH); }
+ else
+ TURN { EXPECT_MOVE(opponent, MOVE_SLASH); }
+ } SCENE {
+ if (flags & AI_FLAG_TRY_TO_FAINT)
+ MESSAGE("Wobbuffet fainted!");
+ else
+ NOT MESSAGE("Wobbuffet fainted!");
+ }
+}
diff --git a/test/battle/ai_calc_best_move_score.c b/test/battle/ai/ai_calc_best_move_score.c
similarity index 100%
rename from test/battle/ai_calc_best_move_score.c
rename to test/battle/ai/ai_calc_best_move_score.c
diff --git a/test/battle/ai_check_viability.c b/test/battle/ai/ai_check_viability.c
similarity index 77%
rename from test/battle/ai_check_viability.c
rename to test/battle/ai/ai_check_viability.c
index dcbcf8dbec08..fa921e8674bc 100644
--- a/test/battle/ai_check_viability.c
+++ b/test/battle/ai/ai_check_viability.c
@@ -191,3 +191,51 @@ AI_SINGLE_BATTLE_TEST("AI chooses moves with secondary effect that have a 100% c
TURN { EXPECT_MOVES(opponent, MOVE_OCTAZOOKA); }
}
}
+
+AI_DOUBLE_BATTLE_TEST("AI chooses moves that cure self or partner")
+{
+ u32 status1_0, status1_1, partnerAbility;
+
+ PARAMETRIZE { status1_0 = STATUS1_NONE; status1_1 = STATUS1_NONE; partnerAbility = ABILITY_SCRAPPY; }
+ PARAMETRIZE { status1_0 = STATUS1_TOXIC_POISON; status1_1 = STATUS1_NONE; partnerAbility = ABILITY_SCRAPPY; }
+ PARAMETRIZE { status1_0 = STATUS1_NONE; status1_1 = STATUS1_PARALYSIS; partnerAbility = ABILITY_SCRAPPY; }
+ PARAMETRIZE { status1_0 = STATUS1_NONE; status1_1 = STATUS1_PARALYSIS; partnerAbility = ABILITY_SOUNDPROOF; }
+
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_HEAL_BELL].effect == EFFECT_HEAL_BELL);
+ ASSUME(B_HEAL_BELL_SOUNDPROOF >= GEN_8);
+ AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT);
+ PLAYER(SPECIES_WOBBUFFET);
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_REGIROCK) { Moves(MOVE_ROCK_SLIDE, MOVE_HEAL_BELL, MOVE_ACID); Status1(status1_0); }
+ OPPONENT(SPECIES_EXPLOUD) { Status1(status1_1); Ability(partnerAbility); }
+ } WHEN {
+ if (status1_0 != STATUS1_NONE || (status1_1 != STATUS1_NONE && partnerAbility != ABILITY_SOUNDPROOF))
+ TURN { EXPECT_MOVE(opponentLeft, MOVE_HEAL_BELL); }
+ else
+ TURN { EXPECT_MOVE(opponentLeft, MOVE_ROCK_SLIDE); }
+ }
+}
+
+AI_SINGLE_BATTLE_TEST("AI chooses moves that cure inactive party members")
+{
+ u32 status, ability;
+
+ PARAMETRIZE { status = STATUS1_TOXIC_POISON; ability = ABILITY_SCRAPPY; }
+ PARAMETRIZE { status = STATUS1_NONE; ability = ABILITY_SCRAPPY; }
+ PARAMETRIZE { status = STATUS1_TOXIC_POISON; ability = ABILITY_SOUNDPROOF; }
+
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_HEAL_BELL].effect == EFFECT_HEAL_BELL);
+ ASSUME(B_HEAL_BELL_SOUNDPROOF >= GEN_5);
+ AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT);
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_REGIROCK) { Moves(MOVE_BODY_PRESS, MOVE_HEAL_BELL); }
+ OPPONENT(SPECIES_EXPLOUD) { Status1(status); Ability(ability); }
+ } WHEN {
+ if (status == STATUS1_NONE)
+ TURN { EXPECT_MOVE(opponent, MOVE_BODY_PRESS); }
+ else
+ TURN { EXPECT_MOVE(opponent, MOVE_HEAL_BELL); }
+ }
+}
diff --git a/test/battle/ai/ai_choice.c b/test/battle/ai/ai_choice.c
new file mode 100644
index 000000000000..c9992d2cab5f
--- /dev/null
+++ b/test/battle/ai/ai_choice.c
@@ -0,0 +1,181 @@
+#include "global.h"
+#include "test/battle.h"
+
+ASSUMPTIONS
+{
+ ASSUME(gItemsInfo[ITEM_CHOICE_SPECS].holdEffect == HOLD_EFFECT_CHOICE_SPECS);
+ ASSUME(gItemsInfo[ITEM_CHOICE_BAND].holdEffect == HOLD_EFFECT_CHOICE_BAND);
+ ASSUME(gItemsInfo[ITEM_CHOICE_SCARF].holdEffect == HOLD_EFFECT_CHOICE_SCARF);
+}
+
+AI_SINGLE_BATTLE_TEST("Choiced Pokémon switch out after using a status move once")
+{
+ u32 j, ability = ABILITY_NONE, heldItem = ITEM_NONE;
+
+ static const u32 choiceItems[] = {
+ ITEM_CHOICE_SPECS,
+ ITEM_CHOICE_BAND,
+ ITEM_CHOICE_SCARF,
+ };
+
+ for (j = 0; j < ARRAY_COUNT(choiceItems); j++)
+ {
+ PARAMETRIZE { ability = ABILITY_NONE; heldItem = choiceItems[j]; }
+ PARAMETRIZE { ability = ABILITY_KLUTZ; heldItem = choiceItems[j]; }
+ }
+
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_YAWN].category == DAMAGE_CATEGORY_STATUS);
+ ASSUME(gMovesInfo[MOVE_YAWN].effect == EFFECT_YAWN);
+ AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT);
+ PLAYER(SPECIES_RHYDON)
+ OPPONENT(SPECIES_LOPUNNY) { Moves(MOVE_YAWN, MOVE_TACKLE); Item(heldItem); Ability(ability); }
+ OPPONENT(SPECIES_SWAMPERT) { Moves(MOVE_WATERFALL); }
+ } WHEN {
+ TURN { EXPECT_MOVE(opponent, MOVE_YAWN); }
+ if (ability == ABILITY_KLUTZ) { // Klutz ignores item
+ TURN { EXPECT_MOVE(opponent, MOVE_TACKLE); }
+ }
+ else {
+ TURN { EXPECT_SWITCH(opponent, 1); }
+ }
+ }
+}
+
+AI_SINGLE_BATTLE_TEST("Choiced Pokémon won't use stat boosting moves")
+{
+ // Moves defined by MOVE_TARGET_USER (with exceptions?)
+ u32 j, ability = ABILITY_NONE, heldItem = ITEM_NONE;
+
+ static const u32 choiceItems[] = {
+ ITEM_CHOICE_SPECS,
+ ITEM_CHOICE_BAND,
+ ITEM_CHOICE_SCARF,
+ };
+
+ for (j = 0; j < ARRAY_COUNT(choiceItems); j++)
+ {
+ PARAMETRIZE { ability = ABILITY_NONE; heldItem = choiceItems[j]; }
+ PARAMETRIZE { ability = ABILITY_KLUTZ; heldItem = choiceItems[j]; }
+ }
+
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_SWORDS_DANCE].target == MOVE_TARGET_USER);
+ AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT);
+ PLAYER(SPECIES_RHYDON)
+ OPPONENT(SPECIES_LOPUNNY) { Moves(MOVE_SWORDS_DANCE, MOVE_TACKLE); Item(heldItem); Ability(ability); }
+ OPPONENT(SPECIES_SWAMPERT) { Moves(MOVE_WATERFALL); }
+ } WHEN {
+ if (ability == ABILITY_KLUTZ) { // Klutz ignores item
+ TURN { EXPECT_MOVE(opponent, MOVE_SWORDS_DANCE); }
+ }
+ else {
+ TURN { EXPECT_MOVE(opponent, MOVE_TACKLE); }
+ }
+ }
+}
+
+AI_SINGLE_BATTLE_TEST("Choiced Pokémon won't use status move if they are the only party member")
+{
+ u32 j, ability = ABILITY_NONE, isAlive = 0, heldItem = ITEM_NONE;
+
+ static const u32 choiceItems[] = {
+ ITEM_CHOICE_SPECS,
+ ITEM_CHOICE_BAND,
+ ITEM_CHOICE_SCARF,
+ };
+
+ for (j = 0; j < ARRAY_COUNT(choiceItems); j++)
+ {
+ PARAMETRIZE { ability = ABILITY_NONE; heldItem = choiceItems[j]; isAlive = 0; }
+ PARAMETRIZE { ability = ABILITY_KLUTZ; heldItem = choiceItems[j]; isAlive = 0; }
+ PARAMETRIZE { ability = ABILITY_NONE; heldItem = choiceItems[j]; isAlive = 1; }
+ PARAMETRIZE { ability = ABILITY_KLUTZ; heldItem = choiceItems[j]; isAlive = 1; }
+ }
+
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_YAWN].category == DAMAGE_CATEGORY_STATUS);
+ ASSUME(gMovesInfo[MOVE_YAWN].effect == EFFECT_YAWN);
+ AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT);
+ PLAYER(SPECIES_RHYDON)
+ OPPONENT(SPECIES_LOPUNNY) { Moves(MOVE_YAWN, MOVE_TACKLE); Item(heldItem); Ability(ability); }
+ OPPONENT(SPECIES_SWAMPERT) { HP(isAlive); Moves(MOVE_WATERFALL); }
+ } WHEN {
+ if (isAlive == 1 || ability == ABILITY_KLUTZ) {
+ TURN { EXPECT_MOVE(opponent, MOVE_YAWN); }
+ }
+ else {
+ TURN { EXPECT_MOVE(opponent, MOVE_TACKLE); }
+ }
+ }
+}
+
+AI_SINGLE_BATTLE_TEST("Choiced Pokémon won't use status move if they don't have a good switchin")
+{
+ u32 j, ability = ABILITY_NONE, move = MOVE_NONE, species = SPECIES_NONE, heldItem = ITEM_NONE;
+
+ static const u32 choiceItems[] = {
+ ITEM_CHOICE_SPECS,
+ ITEM_CHOICE_BAND,
+ ITEM_CHOICE_SCARF,
+ };
+
+ for (j = 0; j < ARRAY_COUNT(choiceItems); j++)
+ {
+ PARAMETRIZE { ability = ABILITY_NONE; heldItem = choiceItems[j]; species = SPECIES_SWAMPERT; move = MOVE_WATERFALL; }
+ PARAMETRIZE { ability = ABILITY_KLUTZ; heldItem = choiceItems[j]; species = SPECIES_SWAMPERT; move = MOVE_WATERFALL; }
+ PARAMETRIZE { ability = ABILITY_NONE; heldItem = choiceItems[j]; species = SPECIES_ELEKID; move = MOVE_THUNDER_WAVE; }
+ PARAMETRIZE { ability = ABILITY_KLUTZ; heldItem = choiceItems[j]; species = SPECIES_ELEKID; move = MOVE_THUNDER_WAVE; }
+ }
+
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_YAWN].category == DAMAGE_CATEGORY_STATUS);
+ ASSUME(gMovesInfo[MOVE_YAWN].effect == EFFECT_YAWN);
+ AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT);
+ PLAYER(SPECIES_RHYDON)
+ OPPONENT(SPECIES_LOPUNNY) { Moves(MOVE_YAWN, MOVE_TACKLE); Item(heldItem); Ability(ability); }
+ OPPONENT(species) { Moves(move); }
+ } WHEN {
+ if (species == SPECIES_SWAMPERT || ability == ABILITY_KLUTZ) {
+ TURN { EXPECT_MOVE(opponent, MOVE_YAWN); }
+ }
+ else {
+ TURN { EXPECT_MOVE(opponent, MOVE_TACKLE); }
+ }
+ }
+}
+
+AI_SINGLE_BATTLE_TEST("Choiced Pokémon won't use status move if they are trapped")
+{
+ u32 j, aiAbility = ABILITY_NONE, playerAbility = MOVE_NONE, species = SPECIES_NONE, heldItem = ITEM_NONE;
+
+ static const u32 choiceItems[] = {
+ ITEM_CHOICE_SPECS,
+ ITEM_CHOICE_BAND,
+ ITEM_CHOICE_SCARF,
+ };
+
+ for (j = 0; j < ARRAY_COUNT(choiceItems); j++)
+ {
+ PARAMETRIZE { aiAbility = ABILITY_NONE; heldItem = choiceItems[j]; species = SPECIES_RHYDON; playerAbility = ABILITY_LIGHTNING_ROD; }
+ PARAMETRIZE { aiAbility = ABILITY_KLUTZ; heldItem = choiceItems[j]; species = SPECIES_RHYDON; playerAbility = ABILITY_LIGHTNING_ROD; }
+ PARAMETRIZE { aiAbility = ABILITY_NONE; heldItem = choiceItems[j]; species = SPECIES_DUGTRIO; playerAbility = ABILITY_ARENA_TRAP; }
+ PARAMETRIZE { aiAbility = ABILITY_KLUTZ; heldItem = choiceItems[j]; species = SPECIES_DUGTRIO; playerAbility = ABILITY_ARENA_TRAP; }
+ }
+
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_YAWN].category == DAMAGE_CATEGORY_STATUS);
+ ASSUME(gMovesInfo[MOVE_YAWN].effect == EFFECT_YAWN);
+ AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT);
+ PLAYER(species) { Ability(playerAbility); }
+ OPPONENT(SPECIES_LOPUNNY) { Moves(MOVE_YAWN, MOVE_TACKLE); Item(heldItem); Ability(aiAbility); }
+ OPPONENT(SPECIES_SWAMPERT) { Moves(MOVE_WATERFALL); }
+ } WHEN {
+ if (playerAbility != ABILITY_ARENA_TRAP || aiAbility == ABILITY_KLUTZ) {
+ TURN { EXPECT_MOVE(opponent, MOVE_YAWN); }
+ }
+ else {
+ TURN { EXPECT_MOVE(opponent, MOVE_TACKLE); }
+ }
+ }
+}
diff --git a/test/battle/ai/ai_flag_risky.c b/test/battle/ai/ai_flag_risky.c
new file mode 100644
index 000000000000..e1ceeb2161b3
--- /dev/null
+++ b/test/battle/ai/ai_flag_risky.c
@@ -0,0 +1,91 @@
+#include "global.h"
+#include "test/battle.h"
+
+AI_SINGLE_BATTLE_TEST("AI_FLAG_RISKY: AI will blindly Mirror Coat against special attackers")
+{
+ u32 aiRiskyFlag = 0;
+
+ PARAMETRIZE { aiRiskyFlag = 0; }
+ PARAMETRIZE { aiRiskyFlag = AI_FLAG_RISKY; }
+
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_MIRROR_COAT].effect == EFFECT_MIRROR_COAT);
+ 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); }
+ 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); }
+ }
+}
+
+AI_SINGLE_BATTLE_TEST("AI_FLAG_RISKY: AI will blindly Counter against physical attackers")
+{
+ u32 aiRiskyFlag = 0;
+
+ PARAMETRIZE { aiRiskyFlag = 0; }
+ PARAMETRIZE { aiRiskyFlag = AI_FLAG_RISKY; }
+
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_COUNTER].effect == EFFECT_COUNTER);
+ 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); }
+ OPPONENT(SPECIES_CASTFORM) { Level(20); Moves(MOVE_TACKLE, MOVE_COUNTER); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_WATERFALL) ; EXPECT_MOVE(opponent, aiRiskyFlag ? MOVE_COUNTER : MOVE_TACKLE); }
+ }
+}
+
+AI_SINGLE_BATTLE_TEST("AI_FLAG_RISKY: AI will prioritize Revenge if slower")
+{
+ u32 aiRiskyFlag = 0;
+
+ PARAMETRIZE { aiRiskyFlag = 0; }
+ PARAMETRIZE { aiRiskyFlag = AI_FLAG_RISKY; }
+
+ 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); }
+ 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); }
+ }
+}
+
+AI_SINGLE_BATTLE_TEST("AI_FLAG_RISKY: Mid-battle switches prioritize offensive options")
+{
+ u32 aiRiskyFlag = 0;
+
+ PARAMETRIZE { aiRiskyFlag = 0; }
+ PARAMETRIZE { aiRiskyFlag = AI_FLAG_RISKY; }
+
+ GIVEN {
+ AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_MON_CHOICES | aiRiskyFlag);
+ PLAYER(SPECIES_SWELLOW) { Level(30); Moves(MOVE_WING_ATTACK, MOVE_BOOMBURST); Speed(5); }
+ OPPONENT(SPECIES_PONYTA) { Level(1); Moves(MOVE_NONE); Speed(4); } // Forces switchout
+ OPPONENT(SPECIES_ARON) { Level(30); Moves(MOVE_HEADBUTT); Speed(4); SpDefense(41); } // Mid battle, AI sends out Aron
+ OPPONENT(SPECIES_ELECTRODE) { Level(30); Moves(MOVE_CHARGE_BEAM); Speed(6); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_WING_ATTACK); EXPECT_SWITCH(opponent, aiRiskyFlag? 2 : 1); }
+ }
+}
+
+AI_SINGLE_BATTLE_TEST("AI_FLAG_RISKY: AI prefers high damage moves at the expense of accuracy regardless of KO thresholds")
+{
+ u32 aiRiskyFlag = 0;
+
+ PARAMETRIZE { aiRiskyFlag = 0; }
+ PARAMETRIZE { aiRiskyFlag = AI_FLAG_RISKY; }
+
+ GIVEN {
+ AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiRiskyFlag);
+ 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
new file mode 100644
index 000000000000..1b4a264a2401
--- /dev/null
+++ b/test/battle/ai/ai_flag_sequence_switching.c
@@ -0,0 +1,129 @@
+#include "global.h"
+#include "test/battle.h"
+
+AI_SINGLE_BATTLE_TEST("AI_FLAG_SEQUENCE_SWITCHING: AI will always switch after a KO in exactly party order")
+{
+ u32 aiSequenceSwitchingFlag = 0;
+
+ PARAMETRIZE { aiSequenceSwitchingFlag = 0; }
+ PARAMETRIZE { aiSequenceSwitchingFlag = AI_FLAG_SEQUENCE_SWITCHING; }
+
+ GIVEN {
+ AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSequenceSwitchingFlag);
+ PLAYER(SPECIES_SWELLOW) { Level (50); }
+ OPPONENT(SPECIES_MACHOP) { Level(5); }
+ OPPONENT(SPECIES_MACHOKE) { Level(5); }
+ OPPONENT(SPECIES_MACHAMP) { Level(5); }
+ OPPONENT(SPECIES_MANKEY) { Level(5); }
+ OPPONENT(SPECIES_PRIMEAPE) { Level(5); }
+ OPPONENT(SPECIES_MAGNEZONE) { Level(100); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_WING_ATTACK); }
+ if (aiSequenceSwitchingFlag) {
+ TURN { MOVE(player, MOVE_WING_ATTACK); }
+ TURN { MOVE(player, MOVE_WING_ATTACK); }
+ TURN { MOVE(player, MOVE_WING_ATTACK); }
+ TURN { MOVE(player, MOVE_WING_ATTACK); }
+ }
+ } SCENE {
+ if (aiSequenceSwitchingFlag) {
+ MESSAGE("{PKMN} TRAINER LEAF sent out Machoke!");
+ MESSAGE("{PKMN} TRAINER LEAF sent out Machamp!");
+ MESSAGE("{PKMN} TRAINER LEAF sent out Mankey!");
+ MESSAGE("{PKMN} TRAINER LEAF sent out Primeape!");
+ MESSAGE("{PKMN} TRAINER LEAF sent out Magnezone!");
+ }
+ else {
+ MESSAGE("{PKMN} TRAINER LEAF sent out Magnezone!");
+ }
+ }
+}
+
+AI_SINGLE_BATTLE_TEST("AI_FLAG_SEQUENCE_SWITCHING: Roar and Dragon Tail still force switch to random party member")
+{
+ u32 move;
+
+ PARAMETRIZE { move = MOVE_ROAR; }
+ PARAMETRIZE {move = MOVE_DRAGON_TAIL; }
+
+ PASSES_RANDOMLY(1, 2, RNG_FORCE_RANDOM_SWITCH);
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_ROAR].effect == EFFECT_ROAR);
+ ASSUME(gMovesInfo[MOVE_DRAGON_TAIL].effect == EFFECT_HIT_SWITCH_TARGET);
+ AI_FLAGS(AI_FLAG_SEQUENCE_SWITCHING);
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_BULBASAUR);
+ OPPONENT(SPECIES_CHARMANDER);
+ OPPONENT(SPECIES_SQUIRTLE) { HP(0); }
+ } WHEN {
+ TURN { MOVE(player, move); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, move, player);
+ MESSAGE("Foe Bulbasaur was dragged out!");
+ }
+}
+
+AI_SINGLE_BATTLE_TEST("AI_FLAG_SEQUENCE_SWITCHING: AI will always switch into lowest party index after U-Turn, Parting Shot, and Baton Pass")
+{
+ u32 j, aiSequenceSwitchingFlag = 0, move = MOVE_NONE;
+
+ static const u32 switchMoves[] = {
+ MOVE_U_TURN,
+ MOVE_PARTING_SHOT,
+ MOVE_BATON_PASS,
+ };
+
+ for (j = 0; j < ARRAY_COUNT(switchMoves); j++)
+ {
+ PARAMETRIZE { aiSequenceSwitchingFlag = 0; move = switchMoves[j]; }
+ PARAMETRIZE { aiSequenceSwitchingFlag = AI_FLAG_SEQUENCE_SWITCHING; move = switchMoves[j]; }
+ }
+
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_U_TURN].effect == EFFECT_HIT_ESCAPE);
+ ASSUME(gMovesInfo[MOVE_PARTING_SHOT].effect == EFFECT_PARTING_SHOT);
+ ASSUME(gMovesInfo[MOVE_BATON_PASS].effect == EFFECT_BATON_PASS);
+ AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSequenceSwitchingFlag);
+ PLAYER(SPECIES_SWELLOW) { Level (50); }
+ OPPONENT(SPECIES_MACHOP) { Level(1); Moves(move); }
+ OPPONENT(SPECIES_MACHOP) { Level(2); Moves(move); }
+ OPPONENT(SPECIES_MACHOP) { Level(3); Moves(move); }
+ OPPONENT(SPECIES_MACHOP) { Level(4); Moves(move); }
+ OPPONENT(SPECIES_MACHOP) { Level(5); Moves(move); }
+ OPPONENT(SPECIES_MAGNEZONE) { Level(100); Moves(move); }
+ } WHEN {
+ if (aiSequenceSwitchingFlag) {
+ TURN { EXPECT_MOVE(opponent, move) ; EXPECT_SEND_OUT(opponent, 1); }
+ TURN { EXPECT_MOVE(opponent, move) ; EXPECT_SEND_OUT(opponent, 0); }
+ TURN { EXPECT_MOVE(opponent, move) ; EXPECT_SEND_OUT(opponent, 1); }
+ TURN { EXPECT_MOVE(opponent, move) ; EXPECT_SEND_OUT(opponent, 0); }
+ TURN { EXPECT_MOVE(opponent, move) ; EXPECT_SEND_OUT(opponent, 1); }
+ }
+ else {
+ TURN { EXPECT_MOVE(opponent, move) ; EXPECT_SEND_OUT(opponent, 5); }
+ }
+ }
+}
+
+AI_SINGLE_BATTLE_TEST("AI_FLAG_SEQUENCE_SWITCHING: AI will not switch mid-battle")
+{
+ u32 aiSequenceSwitchingFlag = 0;
+
+ PARAMETRIZE { aiSequenceSwitchingFlag = 0; }
+ PARAMETRIZE { aiSequenceSwitchingFlag = AI_FLAG_SEQUENCE_SWITCHING; }
+
+ GIVEN {
+ AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSequenceSwitchingFlag);
+ PLAYER(SPECIES_ZIGZAGOON) { Moves(MOVE_LICK); }
+ OPPONENT(SPECIES_GASTLY) { Moves(MOVE_SHADOW_BALL); }
+ OPPONENT(SPECIES_ZIGZAGOON) { Moves(MOVE_KARATE_CHOP); }
+ } WHEN {
+ if (aiSequenceSwitchingFlag == AI_FLAG_SEQUENCE_SWITCHING) {
+ TURN { MOVE(player, MOVE_LICK) ; EXPECT_MOVE(opponent, MOVE_SHADOW_BALL); }
+ }
+ else {
+ TURN { MOVE(player, MOVE_LICK) ; EXPECT_SWITCH(opponent, 1); }
+ }
+ }
+}
diff --git a/test/battle/ai_powerful_status.c b/test/battle/ai/ai_powerful_status.c
similarity index 100%
rename from test/battle/ai_powerful_status.c
rename to test/battle/ai/ai_powerful_status.c
diff --git a/test/battle/ai/ai_switching.c b/test/battle/ai/ai_switching.c
new file mode 100644
index 000000000000..b3927509f026
--- /dev/null
+++ b/test/battle/ai/ai_switching.c
@@ -0,0 +1,377 @@
+#include "global.h"
+#include "test/battle.h"
+
+AI_SINGLE_BATTLE_TEST("AI gets baited by Protect Switch tactics") // This behavior is to be fixed.
+{
+ GIVEN {
+ AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING);
+ PLAYER(SPECIES_STUNFISK);
+ PLAYER(SPECIES_PELIPPER);
+ OPPONENT(SPECIES_DARKRAI) { Moves(MOVE_TACKLE, MOVE_PECK, MOVE_EARTHQUAKE, MOVE_THUNDERBOLT); }
+ OPPONENT(SPECIES_SCIZOR) { Moves(MOVE_HYPER_BEAM, MOVE_FACADE, MOVE_GIGA_IMPACT, MOVE_EXTREME_SPEED); }
+ } WHEN {
+
+ TURN { MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_EARTHQUAKE); } // E-quake
+ TURN { SWITCH(player, 1); EXPECT_MOVE(opponent, MOVE_EARTHQUAKE); } // E-quake
+ TURN { MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_THUNDERBOLT); } // T-Bolt
+ TURN { SWITCH(player, 0); EXPECT_MOVE(opponent, MOVE_THUNDERBOLT); } // T-Bolt
+ TURN { MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_EARTHQUAKE); } // E-quake
+ TURN { SWITCH(player, 1); EXPECT_MOVE(opponent, MOVE_EARTHQUAKE);} // E-quake
+ TURN { MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_THUNDERBOLT); } // T-Bolt
+ }
+}
+
+// General switching behaviour
+AI_SINGLE_BATTLE_TEST("AI switches if Perish Song is about to kill")
+{
+ GIVEN {
+ AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT);
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET) {Moves(MOVE_TACKLE); }
+ OPPONENT(SPECIES_CROBAT) {Moves(MOVE_TACKLE); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_PERISH_SONG); }
+ TURN { ; }
+ TURN { ; }
+ TURN { EXPECT_SWITCH(opponent, 1); }
+ } SCENE {
+ MESSAGE("{PKMN} TRAINER LEAF sent out Crobat!");
+ }
+}
+
+AI_DOUBLE_BATTLE_TEST("AI will not try to switch for the same pokemon for 2 spots in a double battle")
+{
+ u32 flags;
+
+ PARAMETRIZE {flags = AI_FLAG_SMART_SWITCHING; }
+ PARAMETRIZE {flags = 0; }
+
+ GIVEN {
+ AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | flags);
+ PLAYER(SPECIES_RATTATA);
+ PLAYER(SPECIES_RATTATA);
+ // No moves to damage player.
+ OPPONENT(SPECIES_GENGAR) { Moves(MOVE_SHADOW_BALL); }
+ OPPONENT(SPECIES_HAUNTER) { Moves(MOVE_SHADOW_BALL); }
+ OPPONENT(SPECIES_GENGAR) { Moves(MOVE_SHADOW_BALL); }
+ OPPONENT(SPECIES_RATICATE) { Moves(MOVE_HEADBUTT); }
+ } WHEN {
+ TURN { EXPECT_SWITCH(opponentLeft, 3); };
+ } SCENE {
+ MESSAGE("{PKMN} TRAINER LEAF withdrew Gengar!");
+ MESSAGE("{PKMN} TRAINER LEAF sent out Raticate!");
+ NONE_OF {
+ MESSAGE("{PKMN} TRAINER LEAF withdrew Haunter!");
+ MESSAGE("{PKMN} TRAINER LEAF sent out Raticate!");
+ }
+ }
+}
+
+AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: U-Turn will send out Ace Mon if it's the only one remaining")
+{
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_U_TURN].effect == EFFECT_HIT_ESCAPE);
+ AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_MON_CHOICES | AI_FLAG_ACE_POKEMON);
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_U_TURN); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { EXPECT_MOVE(opponent, MOVE_U_TURN); EXPECT_SEND_OUT(opponent, 1); }
+ }
+}
+
+// General AI_FLAG_SMART_MON_CHOICES behaviour
+AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Number of hits to KO calculation checks whether incoming damage is less than recurring healing to avoid an infinite loop")
+{
+ GIVEN {
+ 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);
+ PLAYER(SPECIES_VENUSAUR) { Level(30); Moves(MOVE_TACKLE); }
+ // Opponent party courtesy of Skolgrahd, who triggered the bug in the first place
+ OPPONENT(SPECIES_PIKACHU) { Level(100); Moves(MOVE_ZIPPY_ZAP, MOVE_EXTREME_SPEED, MOVE_IRON_TAIL, MOVE_KNOCK_OFF); }
+ OPPONENT(SPECIES_NINETALES_ALOLAN) { Level(100); Moves(MOVE_AURORA_VEIL, MOVE_BLIZZARD, MOVE_MOONBLAST, MOVE_DISABLE); }
+ OPPONENT(SPECIES_WEAVILE) { Level(100); Moves(MOVE_NIGHT_SLASH, MOVE_TRIPLE_AXEL, MOVE_ICE_SHARD, MOVE_FAKE_OUT); }
+ OPPONENT(SPECIES_DITTO) { Level(100); Moves(MOVE_TRANSFORM); }
+ OPPONENT(SPECIES_TYPHLOSION) { Level(100); Moves(MOVE_ERUPTION, MOVE_HEAT_WAVE, MOVE_FOCUS_BLAST, MOVE_EXTRASENSORY); }
+ OPPONENT(SPECIES_UMBREON) { Level(100); Item(ITEM_LEFTOVERS); Moves(MOVE_FOUL_PLAY, MOVE_SNARL, MOVE_HELPING_HAND, MOVE_THUNDER_WAVE); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_TACKLE); EXPECT_MOVES(opponent, MOVE_ZIPPY_ZAP, MOVE_EXTREME_SPEED, MOVE_IRON_TAIL, MOVE_KNOCK_OFF); }
+ } SCENE {
+ MESSAGE("Venusaur fainted!");
+ }
+}
+
+AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Number of hits to KO calculation checks whether incoming damage is zero to avoid an infinite loop")
+{
+ 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);
+ PLAYER(SPECIES_BULBASAUR) { Level(5); Moves(MOVE_SWORDS_DANCE, MOVE_WHIRLWIND, MOVE_SAND_ATTACK, MOVE_TAIL_WHIP); }
+ // Scenario courtesy of Duke, who triggered the bug in the first place
+ OPPONENT(SPECIES_GEODUDE) { Level(100); Moves(MOVE_TACKLE); }
+ OPPONENT(SPECIES_GEODUDE) { Level(100); Moves(MOVE_TACKLE); }
+ OPPONENT(SPECIES_NOSEPASS) { Level(100); Moves(MOVE_TACKLE); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_SWORDS_DANCE); EXPECT_MOVES(opponent, MOVE_TACKLE); }
+ } SCENE {
+ MESSAGE("Bulbasaur fainted!");
+ }
+}
+
+AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Avoid infinite loop if damage taken is equal to recurring healing")
+{
+ 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_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); }
+ OPPONENT(SPECIES_GEODUDE) { Level(5); Moves(MOVE_DOUBLE_EDGE); }
+ OPPONENT(SPECIES_GEODUDE) { Level(5); Moves(MOVE_DOUBLE_EDGE); }
+ OPPONENT(SPECIES_NOSEPASS) { Level(5); Moves(MOVE_DOUBLE_EDGE); }
+ OPPONENT(SPECIES_HOUNDSTONE) { Level(5); Moves(MOVE_NIGHT_SHADE, MOVE_BODY_PRESS, MOVE_WILL_O_WISP, MOVE_PROTECT); Item(ITEM_LEFTOVERS); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_FAKE_OUT); EXPECT_MOVES(opponent, MOVE_FAKE_OUT); }
+ }
+}
+
+AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: AI will not switch in a Pokemon which is slower and gets 1HKOed after fainting")
+{
+ bool32 alakazamFirst;
+ u32 speedAlakazm;
+ u32 aiSmartSwitchFlags = 0;
+
+ PARAMETRIZE { speedAlakazm = 200; alakazamFirst = TRUE; } // AI will always send out Alakazan as it sees a KO with Focus Blast, even if Alakazam dies before it can get it off
+ PARAMETRIZE { speedAlakazm = 200; alakazamFirst = FALSE; aiSmartSwitchFlags = AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES; } // AI_FLAG_SMART_MON_CHOICES lets AI see that Alakazam would be KO'd before it can KO, and won't switch it in
+ PARAMETRIZE { speedAlakazm = 400; alakazamFirst = TRUE; aiSmartSwitchFlags = AI_FLAG_SMART_SWITCHING | AI_FLAG_SMART_MON_CHOICES; } // AI_FLAG_SMART_MON_CHOICES recognizes that Alakazam is faster and can KO, and will switch it in
+
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_PSYCHIC].category == DAMAGE_CATEGORY_SPECIAL);
+ ASSUME(gMovesInfo[MOVE_FOCUS_BLAST].category == DAMAGE_CATEGORY_SPECIAL);
+ ASSUME(gMovesInfo[MOVE_BUBBLE_BEAM].category == DAMAGE_CATEGORY_SPECIAL);
+ ASSUME(gMovesInfo[MOVE_WATER_GUN].category == DAMAGE_CATEGORY_SPECIAL);
+ ASSUME(gMovesInfo[MOVE_STRENGTH].category == DAMAGE_CATEGORY_PHYSICAL);
+ AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSmartSwitchFlags);
+ PLAYER(SPECIES_WEAVILE) { Speed(300); Ability(ABILITY_SHADOW_TAG); } // Weavile has Shadow Tag, so AI can't switch on the first turn, but has to do it after fainting.
+ OPPONENT(SPECIES_KADABRA) { Speed(200); Moves(MOVE_PSYCHIC, MOVE_DISABLE, MOVE_TAUNT, MOVE_CALM_MIND); }
+ OPPONENT(SPECIES_ALAKAZAM) { Speed(speedAlakazm); Moves(MOVE_FOCUS_BLAST, MOVE_PSYCHIC); } // Alakazam has a move which OHKOes Weavile, but it doesn't matter if he's getting KO-ed first.
+ OPPONENT(SPECIES_BLASTOISE) { Speed(200); Moves(MOVE_BUBBLE_BEAM, MOVE_WATER_GUN, MOVE_LEER, MOVE_STRENGTH); } // Can't OHKO, but survives a hit from Weavile's Night Slash.
+ } WHEN {
+ TURN { MOVE(player, MOVE_NIGHT_SLASH) ; EXPECT_SEND_OUT(opponent, alakazamFirst ? 1 : 2); } // AI doesn't send out Alakazam if it gets outsped
+ } SCENE {
+ MESSAGE("Foe Kadabra fainted!");
+ if (alakazamFirst) {
+ MESSAGE("{PKMN} TRAINER LEAF sent out Alakazam!");
+ } else {
+ MESSAGE("{PKMN} TRAINER LEAF sent out Blastoise!");
+ }
+ }
+}
+
+AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: AI considers hazard damage when choosing which Pokemon to switch in")
+{
+ u32 aiIsSmart = 0;
+ u32 aiSmartSwitchFlags = 0;
+
+ PARAMETRIZE { aiIsSmart = 0; aiSmartSwitchFlags = 0; } // AI doesn't care about hazard damage resulting in Pokemon being KO'd
+ PARAMETRIZE { aiIsSmart = 1; aiSmartSwitchFlags = AI_FLAG_SMART_MON_CHOICES; } // AI_FLAG_SMART_MON_CHOICES avoids being KO'd as a result of hazards damage
+
+ GIVEN {
+ AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSmartSwitchFlags);
+ PLAYER(SPECIES_MEGANIUM) { Speed(100); SpDefense(328); SpAttack(265); Moves(MOVE_STEALTH_ROCK, MOVE_SURF); } // Meganium does ~56% minimum ~66% maximum, enough to KO Charizard after rocks and never KO Typhlosion after rocks
+ OPPONENT(SPECIES_PONYTA) { Level(5); Speed(5); Moves(MOVE_TACKLE); }
+ OPPONENT(SPECIES_CHARIZARD) { Speed(200); Moves(MOVE_FLAMETHROWER); SpAttack(317); SpDefense(207); MaxHP(297); } // Outspeends and 2HKOs Meganium
+ OPPONENT(SPECIES_TYPHLOSION) { Speed(200); Moves(MOVE_FLAMETHROWER); SpAttack(317); SpDefense(207); MaxHP(297); } // Outspeends and 2HKOs Meganium
+ } WHEN {
+ TURN { MOVE(player, MOVE_STEALTH_ROCK) ;}
+ TURN { MOVE(player, MOVE_SURF); EXPECT_SEND_OUT(opponent, aiIsSmart ? 2 : 1); } // AI sends out Typhlosion to get the KO with the flag rather than Charizard
+ }
+}
+
+AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Mid-battle switches prioritize type matchup + SE move, then type matchup")
+{
+ u32 aiSmartSwitchFlags = 0;
+ u32 move1;
+ u32 move2;
+ u32 expectedIndex;
+
+ PARAMETRIZE { expectedIndex = 3; move1 = MOVE_TACKLE; move2 = MOVE_TACKLE; aiSmartSwitchFlags = 0; } // When not smart, AI will only switch in a defensive mon if it has a SE move, otherwise will just default to damage
+ PARAMETRIZE { expectedIndex = 1; move1 = MOVE_GIGA_DRAIN; move2 = MOVE_TACKLE; aiSmartSwitchFlags = 0; }
+ PARAMETRIZE { expectedIndex = 2; move1 = MOVE_TACKLE; move2 = MOVE_TACKLE; aiSmartSwitchFlags = AI_FLAG_SMART_MON_CHOICES; } // When smart, AI will prioritize SE move, but still switch in good type matchup without SE move
+ PARAMETRIZE { expectedIndex = 1; move1 = MOVE_GIGA_DRAIN; move2 = MOVE_TACKLE; aiSmartSwitchFlags = AI_FLAG_SMART_MON_CHOICES; }
+
+ GIVEN {
+ AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSmartSwitchFlags);
+ PLAYER(SPECIES_MARSHTOMP) { Level(30); Moves(MOVE_MUD_BOMB, MOVE_WATER_GUN, MOVE_GROWL, MOVE_MUD_SHOT); Speed(5); }
+ OPPONENT(SPECIES_PONYTA) { Level(1); Moves(MOVE_NONE); Speed(6); } // Forces switchout
+ OPPONENT(SPECIES_TANGELA) { Level(30); Moves(move1); Speed(4); }
+ OPPONENT(SPECIES_LOMBRE) { Level(30); Moves(move2); Speed(4); }
+ OPPONENT(SPECIES_HARIYAMA) { Level(30); Moves(MOVE_VITAL_THROW); Speed(4); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_GROWL); EXPECT_SWITCH(opponent, expectedIndex); }
+ }
+}
+
+AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Mid-battle switches prioritize defensive options")
+{
+ GIVEN {
+ AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_MON_CHOICES);
+ PLAYER(SPECIES_SWELLOW) { Level(30); Moves(MOVE_WING_ATTACK, MOVE_BOOMBURST); Speed(5); }
+ OPPONENT(SPECIES_PONYTA) { Level(1); Moves(MOVE_NONE); Speed(4); } // Forces switchout
+ OPPONENT(SPECIES_ARON) { Level(30); Moves(MOVE_HEADBUTT); Speed(4); SpDefense(41); } // Mid battle, AI sends out Aron
+ OPPONENT(SPECIES_ELECTRODE) { Level(30); Moves(MOVE_CHARGE_BEAM); Speed(6); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_WING_ATTACK); EXPECT_SWITCH(opponent, 1); }
+ }
+}
+
+AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Post-KO switches prioritize offensive options")
+{
+ GIVEN {
+ AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_MON_CHOICES);
+ PLAYER(SPECIES_SWELLOW) { Level(30); Moves(MOVE_WING_ATTACK, MOVE_BOOMBURST); Speed(5); }
+ OPPONENT(SPECIES_PONYTA) { Level(1); Moves(MOVE_TACKLE); Speed(4); }
+ OPPONENT(SPECIES_ARON) { Level(30); Moves(MOVE_HEADBUTT); Speed(4); } // Mid battle, AI sends out Aron
+ OPPONENT(SPECIES_ELECTRODE) { Level(30); Moves(MOVE_CHARGE_BEAM); Speed(6); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_WING_ATTACK); EXPECT_SEND_OUT(opponent, 2); }
+ }
+}
+
+AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: Post-KO switches factor in Trick Room for revenge killing")
+{
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_TRICK_ROOM].effect == EFFECT_TRICK_ROOM);
+ AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_MON_CHOICES);
+ PLAYER(SPECIES_SWELLOW) { Level(30); Speed(10); Moves(MOVE_WING_ATTACK, MOVE_GROWL); }
+ OPPONENT(SPECIES_BALTOY) { Level(1); Speed(10); Moves(MOVE_TRICK_ROOM); }
+ OPPONENT(SPECIES_ELECTRODE) { Level(30); Speed(5); Moves(MOVE_THUNDERBOLT); }
+ OPPONENT(SPECIES_ELECTRODE) { Level(30); Speed(15); Moves(MOVE_THUNDERBOLT); }
+ } WHEN {
+ TURN { EXPECT_MOVE(opponent, MOVE_TRICK_ROOM); MOVE(player, MOVE_GROWL); }
+ TURN { MOVE(player, MOVE_WING_ATTACK); EXPECT_SEND_OUT(opponent, 1); }
+ }
+}
+
+// General AI_FLAG_SMART_SWITCHING behaviour
+AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI switches out after sufficient stat drops")
+{
+ GIVEN {
+ AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING);
+ PLAYER(SPECIES_HITMONTOP) { Level(30); Moves(MOVE_CHARM, MOVE_TACKLE); Ability(ABILITY_INTIMIDATE); Speed(5); }
+ OPPONENT(SPECIES_GRIMER) { Level(30); Moves(MOVE_TACKLE); Speed(4); }
+ OPPONENT(SPECIES_PONYTA) { Level(30); Moves(MOVE_HEADBUTT); Speed(4); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_CHARM); }
+ TURN { MOVE(player, MOVE_TACKLE); EXPECT_SWITCH(opponent, 1); }
+ }
+}
+
+AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will not switch out if Pokemon would faint to hazards unless party member can clear them")
+{
+ u32 move1;
+
+ PARAMETRIZE { move1 = MOVE_TACKLE; }
+ PARAMETRIZE { move1 = MOVE_RAPID_SPIN; }
+
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_TACKLE].category == DAMAGE_CATEGORY_PHYSICAL);
+ ASSUME(gMovesInfo[MOVE_RAPID_SPIN].category == DAMAGE_CATEGORY_PHYSICAL);
+ ASSUME(gMovesInfo[MOVE_EARTHQUAKE].category == DAMAGE_CATEGORY_PHYSICAL);
+ ASSUME(gMovesInfo[MOVE_HEADBUTT].category == DAMAGE_CATEGORY_PHYSICAL);
+ AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | AI_FLAG_SMART_SWITCHING);
+ PLAYER(SPECIES_HITMONTOP) { Level(30); Moves(MOVE_CHARM, MOVE_TACKLE, MOVE_STEALTH_ROCK, MOVE_EARTHQUAKE); Ability(ABILITY_INTIMIDATE); Speed(5); }
+ OPPONENT(SPECIES_GRIMER) { Level(30); Moves(MOVE_TACKLE); Item(ITEM_FOCUS_SASH); Speed(4); }
+ OPPONENT(SPECIES_PONYTA) { Level(30); Moves(MOVE_HEADBUTT, move1); Speed(4); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_STEALTH_ROCK); }
+ TURN { MOVE(player, MOVE_EARTHQUAKE); }
+ TURN { MOVE(player, MOVE_CHARM); }
+ TURN { // If the AI has a mon that can remove hazards, don't prevent them switching out
+ MOVE(player, MOVE_CHARM);
+ if (move1 == MOVE_RAPID_SPIN)
+ EXPECT_SWITCH(opponent, 1);
+ else if (move1 == MOVE_TACKLE)
+ EXPECT_MOVE(opponent, MOVE_TACKLE);
+ }
+ }
+}
+
+// Trapping behaviour
+AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_SWITCHING: AI will switch in trapping mon mid battle")
+{
+ u32 aiSmartSwitchingFlag = 0;
+ PARAMETRIZE { aiSmartSwitchingFlag = 0; }
+ PARAMETRIZE { aiSmartSwitchingFlag = AI_FLAG_SMART_SWITCHING; }
+
+ GIVEN {
+ ASSUME(gSpeciesInfo[SPECIES_GOLURK].types[0] == TYPE_GROUND);
+ ASSUME(gSpeciesInfo[SPECIES_GOLURK].types[1] == TYPE_GHOST);
+ AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSmartSwitchingFlag);
+ PLAYER(SPECIES_ELECTRODE) { Speed(4); Moves(MOVE_THUNDERBOLT, MOVE_AURA_SPHERE, MOVE_PROTECT); }
+ PLAYER(SPECIES_WOBBUFFET) { Speed(1); };
+ OPPONENT(SPECIES_SNORLAX) { Speed(1); Moves(MOVE_HEADBUTT); }
+ OPPONENT(SPECIES_DUGTRIO) { Speed(3); Ability(ABILITY_ARENA_TRAP); Moves(MOVE_EARTHQUAKE); }
+ OPPONENT(SPECIES_GOLURK) { Speed(5); Moves(MOVE_EARTHQUAKE); }
+ } WHEN {
+ if (aiSmartSwitchingFlag == AI_FLAG_SMART_SWITCHING)
+ TURN { MOVE(player, MOVE_AURA_SPHERE) ; EXPECT_SWITCH(opponent, 1); }
+ else
+ TURN { MOVE(player, MOVE_AURA_SPHERE) ; EXPECT_MOVE(opponent, MOVE_HEADBUTT); }
+ }
+}
+
+AI_SINGLE_BATTLE_TEST("AI_FLAG_SMART_MON_CHOICES: AI will switch in trapping mon after KO")
+{
+ u32 aiSmartMonChoicesFlag = 0; // Enables trapping behaviour after KOs
+ PARAMETRIZE { aiSmartMonChoicesFlag = 0; } // No trapping behaviour
+ PARAMETRIZE { aiSmartMonChoicesFlag = AI_FLAG_SMART_MON_CHOICES; } // Traps with mid battle switches
+ GIVEN{
+ ASSUME(gSpeciesInfo[SPECIES_MAWILE].types[0] == TYPE_STEEL);
+ AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSmartMonChoicesFlag);
+ PLAYER(SPECIES_MAWILE) { Speed(2); Moves(MOVE_PROTECT, MOVE_TACKLE); }
+ PLAYER(SPECIES_WOBBUFFET) { Speed(1); }
+ OPPONENT(SPECIES_SNORLAX) { Speed(3); Moves(MOVE_SELF_DESTRUCT); }
+ OPPONENT(SPECIES_MAGNEZONE) { Speed(1); Ability(ABILITY_MAGNET_PULL); Moves(MOVE_SHOCK_WAVE); }
+ OPPONENT(SPECIES_MEGANIUM) { Speed(3); Moves(MOVE_EARTH_POWER); }
+ } WHEN {
+ if (aiSmartMonChoicesFlag == AI_FLAG_SMART_MON_CHOICES)
+ TURN{ MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_SELF_DESTRUCT); EXPECT_SEND_OUT(opponent, 1); }
+ else
+ TURN{ MOVE(player, MOVE_PROTECT); EXPECT_MOVE(opponent, MOVE_SELF_DESTRUCT); EXPECT_SEND_OUT(opponent, 2); }
+ }
+}
+
+AI_SINGLE_BATTLE_TEST("AI won't use trapping behaviour if player only has 1 mon left")
+{
+ u32 aiSmartMonChoicesFlag = 0; // Enables trapping behaviour after KOs
+ PARAMETRIZE { aiSmartMonChoicesFlag = 0; } // No trapping behaviour
+ PARAMETRIZE { aiSmartMonChoicesFlag = AI_FLAG_SMART_MON_CHOICES; } // Traps with mid battle switches
+ GIVEN{
+ ASSUME(gSpeciesInfo[SPECIES_MAWILE].types[0] == TYPE_STEEL);
+ AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT | aiSmartMonChoicesFlag);
+ PLAYER(SPECIES_MAWILE) { Speed(2); Moves(MOVE_PROTECT, MOVE_TACKLE); }
+ OPPONENT(SPECIES_SNORLAX) { Speed(3); Moves(MOVE_SELF_DESTRUCT); }
+ OPPONENT(SPECIES_MAGNEZONE) { Speed(1); Ability(ABILITY_MAGNET_PULL); Moves(MOVE_SHOCK_WAVE); }
+ OPPONENT(SPECIES_MEGANIUM) { Speed(3); Moves(MOVE_EARTH_POWER); }
+ } WHEN {
+ 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/ai_trytofaint.c b/test/battle/ai/ai_trytofaint.c
similarity index 80%
rename from test/battle/ai_trytofaint.c
rename to test/battle/ai/ai_trytofaint.c
index 9e7d7e3ba89f..ed6e1fccdd1e 100644
--- a/test/battle/ai_trytofaint.c
+++ b/test/battle/ai/ai_trytofaint.c
@@ -46,3 +46,16 @@ AI_SINGLE_BATTLE_TEST("AI will choose a priority move if it is slower then the t
MESSAGE("Foe Wobbuffet fainted!");
}
}
+
+AI_SINGLE_BATTLE_TEST("AI sees Loaded Dice damage increase from multi hit moves")
+{
+ GIVEN {
+ AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT);
+ PLAYER(SPECIES_WOBBUFFET) { HP(44); }
+ OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_LOADED_DICE); Moves(MOVE_SEED_BOMB, MOVE_BULLET_SEED); }
+ } WHEN {
+ TURN { EXPECT_MOVE(opponent, MOVE_BULLET_SEED); }
+ } SCENE {
+ MESSAGE("Wobbuffet fainted!");
+ }
+}
diff --git a/test/battle/battle_message.c b/test/battle/battle_message.c
new file mode 100644
index 000000000000..9ea74ceb27cc
--- /dev/null
+++ b/test/battle/battle_message.c
@@ -0,0 +1,48 @@
+#include "global.h"
+#include "test/battle.h"
+
+SINGLE_BATTLE_TEST("Battle Message: Send-in message depends on foe HP")
+{
+ u32 hp;
+
+ PARAMETRIZE { hp = 100; }
+ PARAMETRIZE { hp = 69; }
+ PARAMETRIZE { hp = 39; }
+ PARAMETRIZE { hp = 9; }
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET);
+ PLAYER(SPECIES_WYNAUT);
+ OPPONENT(SPECIES_WOBBUFFET) { HP(hp); MaxHP(100); }
+ } WHEN {
+ TURN { SWITCH(player, 1); }
+ } SCENE {
+ if (hp > 69)
+ MESSAGE("Go! Wynaut!");
+ else if (hp > 39)
+ MESSAGE("Do it! Wynaut!");
+ else if (hp > 9)
+ MESSAGE("Go for it, Wynaut!");
+ else
+ MESSAGE("Your foe's weak! Get 'em, Wynaut!");
+ }
+}
+
+TO_DO_BATTLE_TEST("Battle Message: Switch-out message changes based on conditions")
+/*{
+ GIVEN {
+ PLAYER(SPECIES_WYNAUT);
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { SWITCH(player, 1); }
+ } SCENE {
+ if (???)
+ MESSAGE("Wynaut, that's enough! Come back!");
+ else if (???)
+ MESSAGE("Wynaut, come back!");
+ else if (???)
+ MESSAGE("Wynaut, OK! Come back!");
+ else
+ MESSAGE("Wynaut, good! Come back!");
+ }
+}*/
diff --git a/test/battle/crit_chance.c b/test/battle/crit_chance.c
index 4964767e8ef4..d4c8e2b1a007 100644
--- a/test/battle/crit_chance.c
+++ b/test/battle/crit_chance.c
@@ -6,7 +6,7 @@ ASSUMPTIONS
ASSUME(B_CRIT_CHANCE >= GEN_7);
}
-SINGLE_BATTLE_TEST("Side effected by Lucky Chant blocks critical hits")
+SINGLE_BATTLE_TEST("Crit Chance: Side effected by Lucky Chant blocks critical hits")
{
GIVEN {
ASSUME(gMovesInfo[MOVE_LUCKY_CHANT].effect == EFFECT_LUCKY_CHANT);
@@ -20,7 +20,7 @@ SINGLE_BATTLE_TEST("Side effected by Lucky Chant blocks critical hits")
}
}
-SINGLE_BATTLE_TEST("Battle Armor and Shell Armor block critical hits")
+SINGLE_BATTLE_TEST("Crit Chance: Battle Armor and Shell Armor block critical hits")
{
u32 species;
u32 ability;
@@ -39,7 +39,7 @@ SINGLE_BATTLE_TEST("Battle Armor and Shell Armor block critical hits")
}
}
-SINGLE_BATTLE_TEST("Flag ignoresTargetAbility ignores Battle Armor and Shell Armor")
+SINGLE_BATTLE_TEST("Crit Chance: Flag ignoresTargetAbility ignores Battle Armor and Shell Armor")
{
u32 species;
u32 ability;
@@ -59,7 +59,7 @@ SINGLE_BATTLE_TEST("Flag ignoresTargetAbility ignores Battle Armor and Shell Arm
}
}
-SINGLE_BATTLE_TEST("Mold Breaker, Teravolt and Turboblaze ignore Battle Armor and Shell Armor")
+SINGLE_BATTLE_TEST("Crit Chance: Mold Breaker, Teravolt and Turboblaze ignore Battle Armor and Shell Armor")
{
u32 j;
static const u32 pokemonPlayer[][2] =
@@ -102,7 +102,7 @@ SINGLE_BATTLE_TEST("Mold Breaker, Teravolt and Turboblaze ignore Battle Armor an
}
}
-SINGLE_BATTLE_TEST("User effected by Laser Focus causes moves to result in a critical hit")
+SINGLE_BATTLE_TEST("Crit Chance: User effected by Laser Focus causes moves to result in a critical hit")
{
GIVEN {
ASSUME(gMovesInfo[MOVE_LASER_FOCUS].effect == EFFECT_LASER_FOCUS);
@@ -118,7 +118,7 @@ SINGLE_BATTLE_TEST("User effected by Laser Focus causes moves to result in a cri
}
}
-SINGLE_BATTLE_TEST("If the target is poisoned the ability Merciless causes a move to result in a critical hit")
+SINGLE_BATTLE_TEST("Crit Chance: If the target is poisoned the ability Merciless causes a move to result in a critical hit")
{
GIVEN {
PLAYER(SPECIES_MAREANIE) { Ability(ABILITY_MERCILESS); }
@@ -131,7 +131,7 @@ SINGLE_BATTLE_TEST("If the target is poisoned the ability Merciless causes a mov
}
}
-SINGLE_BATTLE_TEST("Focus Energy increases the user's critical hit ratio by two stage")
+SINGLE_BATTLE_TEST("Crit Chance: Focus Energy increases the user's critical hit ratio by two stage")
{
PASSES_RANDOMLY(1, 2, RNG_CRITICAL_HIT);
GIVEN {
@@ -148,7 +148,7 @@ SINGLE_BATTLE_TEST("Focus Energy increases the user's critical hit ratio by two
}
}
-SINGLE_BATTLE_TEST("High crit rate increases the critical hit ratio by one stage")
+SINGLE_BATTLE_TEST("Crit Chance: High crit rate increases the critical hit ratio by one stage")
{
PASSES_RANDOMLY(1, 8, RNG_CRITICAL_HIT);
GIVEN {
@@ -163,7 +163,7 @@ SINGLE_BATTLE_TEST("High crit rate increases the critical hit ratio by one stage
}
}
-SINGLE_BATTLE_TEST("Super Luck increases the critical hit ratio by one stage")
+SINGLE_BATTLE_TEST("Crit Chance: Super Luck increases the critical hit ratio by one stage")
{
PASSES_RANDOMLY(1, 8, RNG_CRITICAL_HIT);
GIVEN {
@@ -177,7 +177,7 @@ SINGLE_BATTLE_TEST("Super Luck increases the critical hit ratio by one stage")
}
}
-SINGLE_BATTLE_TEST("Scope Lens increases the critical hit ratio by one stage")
+SINGLE_BATTLE_TEST("Crit Chance: Scope Lens increases the critical hit ratio by one stage")
{
PASSES_RANDOMLY(1, 8, RNG_CRITICAL_HIT);
GIVEN {
@@ -192,7 +192,7 @@ SINGLE_BATTLE_TEST("Scope Lens increases the critical hit ratio by one stage")
}
}
-SINGLE_BATTLE_TEST("High crit rate, Super Luck and Scope Lens cause the move to result in a critical hit")
+SINGLE_BATTLE_TEST("Crit Chance: High crit rate, Super Luck and Scope Lens cause the move to result in a critical hit")
{
GIVEN {
ASSUME(gMovesInfo[MOVE_SLASH].criticalHitStage == 1);
@@ -207,7 +207,7 @@ SINGLE_BATTLE_TEST("High crit rate, Super Luck and Scope Lens cause the move to
}
}
-SINGLE_BATTLE_TEST("Signature items Leek and Lucky Punch increase the critical hit ratio by 2 stages")
+SINGLE_BATTLE_TEST("Crit Chance: Signature items Leek and Lucky Punch increase the critical hit ratio by 2 stages")
{
u32 species;
u32 item;
@@ -232,7 +232,7 @@ SINGLE_BATTLE_TEST("Signature items Leek and Lucky Punch increase the critical h
}
}
-SINGLE_BATTLE_TEST("Dire Hit increases a battler's critical hit chance by 2 stages")
+SINGLE_BATTLE_TEST("Crit Chance: Dire Hit increases a battler's critical hit chance by 2 stages")
{
PASSES_RANDOMLY(1, 2, RNG_CRITICAL_HIT);
GIVEN {
@@ -250,7 +250,7 @@ SINGLE_BATTLE_TEST("Dire Hit increases a battler's critical hit chance by 2 stag
}
}
-SINGLE_BATTLE_TEST("Focus Energy increases critical hit ratio by two")
+SINGLE_BATTLE_TEST("Crit Chance: Focus Energy increases critical hit ratio by two")
{
PASSES_RANDOMLY(8, 8, RNG_CRITICAL_HIT);
GIVEN {
@@ -269,7 +269,7 @@ SINGLE_BATTLE_TEST("Focus Energy increases critical hit ratio by two")
}
}
-SINGLE_BATTLE_TEST("Dragon Cheer fails in a single battle")
+SINGLE_BATTLE_TEST("Crit Chance: Dragon Cheer fails in a single battle")
{
GIVEN {
ASSUME(gMovesInfo[MOVE_DRAGON_CHEER].effect == EFFECT_DRAGON_CHEER);
@@ -282,7 +282,7 @@ SINGLE_BATTLE_TEST("Dragon Cheer fails in a single battle")
}
}
-DOUBLE_BATTLE_TEST("Dragon Cheer increases critical hit ratio by one on non Dragon types")
+DOUBLE_BATTLE_TEST("Crit Chance: Dragon Cheer increases critical hit ratio by one on non Dragon types")
{
PASSES_RANDOMLY(1, 8, RNG_CRITICAL_HIT);
GIVEN {
@@ -302,7 +302,7 @@ DOUBLE_BATTLE_TEST("Dragon Cheer increases critical hit ratio by one on non Drag
}
}
-DOUBLE_BATTLE_TEST("Dragon Cheer increases critical hit ratio by two on Dragon types")
+DOUBLE_BATTLE_TEST("Crit Chance: Dragon Cheer increases critical hit ratio by two on Dragon types")
{
PASSES_RANDOMLY(1, 2, RNG_CRITICAL_HIT);
GIVEN {
@@ -322,7 +322,7 @@ DOUBLE_BATTLE_TEST("Dragon Cheer increases critical hit ratio by two on Dragon t
}
}
-DOUBLE_BATTLE_TEST("Dragon Cheer fails if critical hit stage was already increased by Focus Energy")
+DOUBLE_BATTLE_TEST("Crit Chance: Dragon Cheer fails if critical hit stage was already increased by Focus Energy")
{
GIVEN {
ASSUME(gMovesInfo[MOVE_SLASH].criticalHitStage == 1);
diff --git a/test/battle/damage_formula.c b/test/battle/damage_formula.c
index 2fdb9bed0f8d..473f631b1114 100644
--- a/test/battle/damage_formula.c
+++ b/test/battle/damage_formula.c
@@ -109,10 +109,44 @@ SINGLE_BATTLE_TEST("Damage calculation matches Gen5+ (Marshadow vs Mawile)")
}
}
SCENE{
- MESSAGE("Marshadow used SpectrlThief!");
+ MESSAGE("Marshadow used Spectral Thief!");
HP_BAR(opponent, captureDamage: &dmg);
}
THEN{
EXPECT_EQ(expectedDamage, dmg);
}
}
+
+DOUBLE_BATTLE_TEST("A spread move will do correct damage to the second mon if the first target faints from first hit of the spread move")
+{
+ s16 damage[6];
+ GIVEN {
+ PLAYER(SPECIES_REGIROCK);
+ PLAYER(SPECIES_REGIROCK);
+ OPPONENT(SPECIES_WOBBUFFET) { HP(200); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(playerLeft, MOVE_ROCK_SLIDE); }
+ TURN { MOVE(playerLeft, MOVE_ROCK_SLIDE); MOVE(playerRight, MOVE_ROCK_SLIDE); }
+ TURN { MOVE(playerLeft, MOVE_ROCK_SLIDE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_ROCK_SLIDE, playerLeft);
+ HP_BAR(opponentLeft, captureDamage: &damage[0]);
+ HP_BAR(opponentRight, captureDamage: &damage[1]);
+
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_ROCK_SLIDE, playerLeft);
+ HP_BAR(opponentLeft, captureDamage: &damage[2]);
+ HP_BAR(opponentRight, captureDamage: &damage[3]);
+
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_ROCK_SLIDE, playerRight);
+ HP_BAR(opponentRight, captureDamage: &damage[4]);
+
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_ROCK_SLIDE, playerLeft);
+ HP_BAR(opponentRight, captureDamage: &damage[5]);
+ } THEN {
+ EXPECT_EQ(damage[0], damage[1]);
+ EXPECT_EQ(damage[1], damage[3]);
+ EXPECT_MUL_EQ(damage[5], UQ_4_12(0.75), damage[3]);
+ EXPECT_EQ(damage[4], damage[5]);
+ }
+}
diff --git a/test/battle/form_change/mega_evolution.c b/test/battle/form_change/mega_evolution.c
index a42c003a3dde..ffab6af18b49 100644
--- a/test/battle/form_change/mega_evolution.c
+++ b/test/battle/form_change/mega_evolution.c
@@ -7,7 +7,7 @@ SINGLE_BATTLE_TEST("Venusaur can Mega Evolve holding Venusaurite")
PLAYER(SPECIES_VENUSAUR) { Item(ITEM_VENUSAURITE); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(player, MOVE_CELEBRATE, megaEvolve: TRUE); }
+ TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); }
} SCENE {
MESSAGE("Venusaur's Venusaurite is reacting to 1's Mega Ring!");
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, player);
@@ -25,7 +25,7 @@ DOUBLE_BATTLE_TEST("Mega Evolution's order is determined by Speed - opponent fas
OPPONENT(SPECIES_GARDEVOIR) { Item(ITEM_GARDEVOIRITE); Speed(3); }
OPPONENT(SPECIES_WOBBUFFET) { Speed(4); }
} WHEN {
- TURN { MOVE(opponentLeft, MOVE_CELEBRATE, megaEvolve: TRUE); MOVE(playerLeft, MOVE_CELEBRATE, megaEvolve: TRUE); }
+ TURN { MOVE(opponentLeft, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); MOVE(playerLeft, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); }
} SCENE {
MESSAGE("Foe Gardevoir's Gardevoirite is reacting to 2's Mega Ring!");
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponentLeft);
@@ -44,7 +44,7 @@ DOUBLE_BATTLE_TEST("Mega Evolution's order is determined by Speed - player faste
OPPONENT(SPECIES_GARDEVOIR) { Item(ITEM_GARDEVOIRITE); Speed(2); }
OPPONENT(SPECIES_WOBBUFFET) { Speed(4); }
} WHEN {
- TURN { MOVE(opponentLeft, MOVE_CELEBRATE, megaEvolve: TRUE); MOVE(playerLeft, MOVE_CELEBRATE, megaEvolve: TRUE); }
+ TURN { MOVE(opponentLeft, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); MOVE(playerLeft, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); }
} SCENE {
MESSAGE("Venusaur's Venusaurite is reacting to 1's Mega Ring!");
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, playerLeft);
@@ -61,7 +61,7 @@ SINGLE_BATTLE_TEST("Rayquaza can Mega Evolve knowing Dragon Ascent")
PLAYER(SPECIES_RAYQUAZA) { Moves(MOVE_DRAGON_ASCENT, MOVE_CELEBRATE); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(player, MOVE_CELEBRATE, megaEvolve: TRUE); }
+ TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); }
} SCENE {
MESSAGE("1's fervent wish has reached Rayquaza!");
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, player);
@@ -78,7 +78,7 @@ SINGLE_BATTLE_TEST("Mega Evolution affects turn order")
PLAYER(SPECIES_GARDEVOIR) { Item(ITEM_GARDEVOIRITE); Speed(105); }
OPPONENT(SPECIES_WOBBUFFET) { Speed(106); }
} WHEN {
- TURN { MOVE(player, MOVE_CELEBRATE, megaEvolve: TRUE); }
+ TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); }
} SCENE {
MESSAGE("Gardevoir used Celebrate!");
MESSAGE("Foe Wobbuffet used Celebrate!");
@@ -96,7 +96,7 @@ SINGLE_BATTLE_TEST("Abilities replaced by Mega Evolution do not affect turn orde
PLAYER(SPECIES_SABLEYE) { Item(ITEM_SABLENITE); Ability(ABILITY_STALL); Speed(105); }
OPPONENT(SPECIES_WOBBUFFET) { Speed(44); }
} WHEN {
- TURN { MOVE(player, MOVE_CELEBRATE, megaEvolve: TRUE); }
+ TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); }
} SCENE {
MESSAGE("Sableye used Celebrate!");
MESSAGE("Foe Wobbuffet used Celebrate!");
@@ -115,7 +115,7 @@ DOUBLE_BATTLE_TEST("Mega Evolution happens after switching, but before Focus Pun
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { SWITCH(opponentRight, 2); MOVE(playerRight, MOVE_FOCUS_PUNCH, megaEvolve: TRUE, target: opponentLeft); MOVE(playerLeft, MOVE_FOCUS_PUNCH, target: opponentLeft); }
+ TURN { SWITCH(opponentRight, 2); MOVE(playerRight, MOVE_FOCUS_PUNCH, gimmick: GIMMICK_MEGA, target: opponentLeft); MOVE(playerLeft, MOVE_FOCUS_PUNCH, target: opponentLeft); }
TURN {}
} SCENE {
MESSAGE("2 withdrew Wobbuffet!");
@@ -139,7 +139,7 @@ SINGLE_BATTLE_TEST("Regular Mega Evolution and Fervent Wish Mega Evolution can h
PLAYER(SPECIES_RAYQUAZA) { Moves(MOVE_DRAGON_ASCENT, MOVE_CELEBRATE); Speed(3); }
OPPONENT(SPECIES_GARDEVOIR) { Item(ITEM_GARDEVOIRITE); Speed(2); }
} WHEN {
- TURN { MOVE(player, MOVE_CELEBRATE, megaEvolve: TRUE); MOVE(opponent, MOVE_CELEBRATE, megaEvolve: TRUE); }
+ TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); MOVE(opponent, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); }
} SCENE {
MESSAGE("1's fervent wish has reached Rayquaza!");
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, player);
@@ -164,7 +164,7 @@ SINGLE_BATTLE_TEST("Mega Evolved Pokemon do not change abilities after fainting"
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_GARCHOMP) { Ability(ABILITY_ROUGH_SKIN); Item(ITEM_GARCHOMPITE); HP(1); }
} WHEN {
- TURN { MOVE(player, MOVE_CRUNCH); MOVE(opponent, MOVE_CELEBRATE, megaEvolve: TRUE); }
+ TURN { MOVE(player, MOVE_CRUNCH); MOVE(opponent, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); }
} SCENE {
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponent);
ANIMATION(ANIM_TYPE_MOVE, MOVE_CRUNCH, player);
diff --git a/test/battle/form_change/primal_reversion.c b/test/battle/form_change/primal_reversion.c
index f978d13b2869..2f2f406827db 100644
--- a/test/battle/form_change/primal_reversion.c
+++ b/test/battle/form_change/primal_reversion.c
@@ -166,7 +166,7 @@ SINGLE_BATTLE_TEST("Primal reversion happens after a switch-in caused by Eject B
TURN { MOVE(opponent, MOVE_TACKLE); }
} SCENE {
MESSAGE("Wobbuffet is switched out with the Eject Button!");
- MESSAGE("Go! Groudon!");
+ SEND_IN_MESSAGE("Groudon");
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, player);
MESSAGE("Groudon's Primal Reversion! It reverted to its primal form!");
} THEN {
@@ -205,7 +205,7 @@ SINGLE_BATTLE_TEST("Primal reversion happens after the entry hazards damage")
TURN { MOVE(opponent, MOVE_SPIKES); }
TURN { MOVE(opponent, MOVE_SPIKES); SWITCH(player, 1);}
} SCENE {
- MESSAGE("Go! Groudon!");
+ SEND_IN_MESSAGE("Groudon");
HP_BAR(player);
MESSAGE("Groudon is hurt by spikes!");
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, player);
diff --git a/test/battle/form_change/status.c b/test/battle/form_change/status.c
index f0d5a9f3f026..0b94202bbd0d 100644
--- a/test/battle/form_change/status.c
+++ b/test/battle/form_change/status.c
@@ -24,7 +24,7 @@ SINGLE_BATTLE_TEST("Shaymin-Sky reverts to Shaymin-Land when frozen or frostbitt
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, move, opponent);
if (move == MOVE_POWDER_SNOW) {
- STATUS_ICON(player, freeze: TRUE);
+ FREEZE_OR_FROSTBURN_STATUS(player, TRUE);
NOT HP_BAR(player); // Regression caused by Mimikyu form change
MESSAGE("Shaymin transformed!");
} else {
diff --git a/test/battle/form_change/ultra_burst.c b/test/battle/form_change/ultra_burst.c
index f2c7b1da2ba6..5c6f4a2ce439 100644
--- a/test/battle/form_change/ultra_burst.c
+++ b/test/battle/form_change/ultra_burst.c
@@ -7,7 +7,7 @@ SINGLE_BATTLE_TEST("Dusk Mane Necrozma can Ultra Burst holding Ultranecrozium Z"
PLAYER(SPECIES_NECROZMA_DUSK_MANE) { Item(ITEM_ULTRANECROZIUM_Z); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(player, MOVE_CELEBRATE, ultraBurst: TRUE); }
+ TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_ULTRA_BURST); }
} SCENE {
MESSAGE("Bright light is about to burst out of Necrozma!");
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ULTRA_BURST, player);
@@ -25,7 +25,7 @@ DOUBLE_BATTLE_TEST("Ultra Burst's order is determined by Speed - opponent faster
OPPONENT(SPECIES_NECROZMA_DAWN_WINGS) { Item(ITEM_ULTRANECROZIUM_Z); Speed(3); }
OPPONENT(SPECIES_WOBBUFFET) { Speed(4); }
} WHEN {
- TURN { MOVE(opponentLeft, MOVE_CELEBRATE, ultraBurst: TRUE); MOVE(playerLeft, MOVE_CELEBRATE, ultraBurst: TRUE); }
+ TURN { MOVE(opponentLeft, MOVE_CELEBRATE, gimmick: GIMMICK_ULTRA_BURST); MOVE(playerLeft, MOVE_CELEBRATE, gimmick: GIMMICK_ULTRA_BURST); }
} SCENE {
MESSAGE("Bright light is about to burst out of Foe Necrozma!");
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ULTRA_BURST, opponentLeft);
@@ -44,7 +44,7 @@ DOUBLE_BATTLE_TEST("Ultra Burst's order is determined by Speed - player faster")
OPPONENT(SPECIES_NECROZMA_DAWN_WINGS) { Item(ITEM_ULTRANECROZIUM_Z); Speed(2); }
OPPONENT(SPECIES_WOBBUFFET) { Speed(4); }
} WHEN {
- TURN { MOVE(opponentLeft, MOVE_CELEBRATE, ultraBurst: TRUE); MOVE(playerLeft, MOVE_CELEBRATE, ultraBurst: TRUE); }
+ TURN { MOVE(opponentLeft, MOVE_CELEBRATE, gimmick: GIMMICK_ULTRA_BURST); MOVE(playerLeft, MOVE_CELEBRATE, gimmick: GIMMICK_ULTRA_BURST); }
} SCENE {
MESSAGE("Bright light is about to burst out of Necrozma!");
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ULTRA_BURST, playerLeft);
@@ -62,7 +62,7 @@ SINGLE_BATTLE_TEST("Ultra Burst affects turn order")
PLAYER(SPECIES_NECROZMA_DUSK_MANE) { Item(ITEM_ULTRANECROZIUM_Z); Speed(105); }
OPPONENT(SPECIES_WOBBUFFET) { Speed(106); }
} WHEN {
- TURN { MOVE(player, MOVE_CELEBRATE, ultraBurst: TRUE); }
+ TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_ULTRA_BURST); }
} SCENE {
MESSAGE("Necrozma used Celebrate!");
MESSAGE("Foe Wobbuffet used Celebrate!");
@@ -81,7 +81,7 @@ DOUBLE_BATTLE_TEST("Ultra Burst happens after switching, but before Focus Punch-
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { SWITCH(opponentRight, 2); MOVE(playerRight, MOVE_FOCUS_PUNCH, ultraBurst: TRUE, target: opponentLeft); MOVE(playerLeft, MOVE_FOCUS_PUNCH, target: opponentLeft); }
+ TURN { SWITCH(opponentRight, 2); MOVE(playerRight, MOVE_FOCUS_PUNCH, gimmick: GIMMICK_ULTRA_BURST, target: opponentLeft); MOVE(playerLeft, MOVE_FOCUS_PUNCH, target: opponentLeft); }
TURN {}
} SCENE {
MESSAGE("2 withdrew Wobbuffet!");
@@ -105,7 +105,7 @@ SINGLE_BATTLE_TEST("Ultra Burst and Mega Evolution can happen on the same turn")
PLAYER(SPECIES_NECROZMA_DUSK_MANE) { Item(ITEM_ULTRANECROZIUM_Z); Speed(3); }
OPPONENT(SPECIES_GARDEVOIR) { Item(ITEM_GARDEVOIRITE); Speed(2); }
} WHEN {
- TURN { MOVE(player, MOVE_CELEBRATE, ultraBurst: TRUE); MOVE(opponent, MOVE_CELEBRATE, megaEvolve: TRUE); }
+ TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_ULTRA_BURST); MOVE(opponent, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); }
} SCENE {
MESSAGE("Bright light is about to burst out of Necrozma!");
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ULTRA_BURST, player);
diff --git a/test/dynamax.c b/test/battle/gimmick/dynamax.c
similarity index 89%
rename from test/dynamax.c
rename to test/battle/gimmick/dynamax.c
index ec73bc178a3b..e886c790101a 100644
--- a/test/dynamax.c
+++ b/test/battle/gimmick/dynamax.c
@@ -4,14 +4,14 @@
// ============= DYNAMAX AND MAX MOVE INTERACTIONS ===================
SINGLE_BATTLE_TEST("(DYNAMAX) Dynamax increases HP and max HP by 1.5x", u16 hp)
{
- bool32 dynamax;
- PARAMETRIZE { dynamax = FALSE; }
- PARAMETRIZE { dynamax = TRUE; }
+ u32 dynamax;
+ PARAMETRIZE { dynamax = GIMMICK_NONE; }
+ PARAMETRIZE { dynamax = GIMMICK_DYNAMAX; }
GIVEN { // TODO: Dynamax level
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(player, MOVE_TACKLE, dynamax: dynamax); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_TACKLE, gimmick: dynamax); MOVE(opponent, MOVE_CELEBRATE); }
} SCENE {
if (dynamax) {
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_DYNAMAX_GROWTH, player);
@@ -27,14 +27,14 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamax increases HP and max HP by 1.5x", u16 hp)
SINGLE_BATTLE_TEST("(DYNAMAX) Dynamax expires after three turns", u16 hp)
{
- bool32 dynamax;
- PARAMETRIZE { dynamax = FALSE; }
- PARAMETRIZE { dynamax = TRUE; }
+ u32 dynamax;
+ PARAMETRIZE { dynamax = GIMMICK_NONE; }
+ PARAMETRIZE { dynamax = GIMMICK_DYNAMAX; }
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(player, MOVE_TACKLE, dynamax: dynamax); } // 1st max move
+ TURN { MOVE(player, MOVE_TACKLE, gimmick: dynamax); } // 1st max move
TURN { MOVE(player, MOVE_TACKLE); } // 2nd max move
TURN { MOVE(player, MOVE_TACKLE); } // 3rd max move
} SCENE {
@@ -62,7 +62,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon cannot be flinched")
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(opponent, MOVE_FAKE_OUT); MOVE(player, MOVE_TACKLE, dynamax: TRUE); }
+ TURN { MOVE(opponent, MOVE_FAKE_OUT); MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); }
} SCENE {
MESSAGE("Foe Wobbuffet used Fake Out!");
NONE_OF { MESSAGE("Wobbuffet flinched!"); }
@@ -77,7 +77,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon cannot be hit by weight-based mo
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_HEAVY_SLAM); }
+ TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_HEAVY_SLAM); }
} SCENE {
MESSAGE("Wobbuffet used Max Strike!");
MESSAGE("Foe Wobbuffet used Heavy Slam!");
@@ -93,7 +93,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon cannot be hit by OHKO moves")
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_MACHAMP) { Ability(ABILITY_NO_GUARD); }
} WHEN {
- TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_FISSURE); }
+ TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_FISSURE); }
} SCENE {
MESSAGE("Wobbuffet used Max Strike!");
MESSAGE("Foe Machamp used Fissure!");
@@ -109,7 +109,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not affected by Destiny Bond
PLAYER(SPECIES_WOBBUFFET) { Speed(50); };
OPPONENT(SPECIES_WOBBUFFET) { HP(1); Speed(100); }
} WHEN {
- TURN { MOVE(opponent, MOVE_DESTINY_BOND); MOVE(player, MOVE_TACKLE, dynamax: TRUE); }
+ TURN { MOVE(opponent, MOVE_DESTINY_BOND); MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); }
} SCENE {
MESSAGE("Foe Wobbuffet used Destiny Bond!");
MESSAGE("Wobbuffet used Max Strike!");
@@ -124,7 +124,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are affected by Grudge")
PLAYER(SPECIES_WOBBUFFET) { Speed(50); };
OPPONENT(SPECIES_WOBBUFFET) { HP(1); Speed(100); }
} WHEN {
- TURN { MOVE(opponent, MOVE_GRUDGE); MOVE(player, MOVE_TACKLE, dynamax: TRUE); }
+ TURN { MOVE(opponent, MOVE_GRUDGE); MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); }
} SCENE {
MESSAGE("Foe Wobbuffet used Grudge!");
MESSAGE("Wobbuffet used Max Strike!");
@@ -142,7 +142,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not affected by phazing move
PLAYER(SPECIES_WYNAUT);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(opponent, MOVE_DRAGON_TAIL); MOVE(player, MOVE_TACKLE, dynamax: TRUE); }
+ TURN { MOVE(opponent, MOVE_DRAGON_TAIL); MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); }
TURN { MOVE(opponent, MOVE_WHIRLWIND); MOVE(player, MOVE_TACKLE); }
} SCENE {
MESSAGE("Wobbuffet used Max Strike!");
@@ -163,7 +163,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not affected by phazing move
PLAYER(SPECIES_WYNAUT);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(opponent, MOVE_DRAGON_TAIL); MOVE(player, MOVE_TACKLE, dynamax: TRUE); SEND_OUT(player, 1); }
+ TURN { MOVE(opponent, MOVE_DRAGON_TAIL); MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); SEND_OUT(player, 1); }
} SCENE {
MESSAGE("Wobbuffet used Max Strike!");
MESSAGE("Foe Wobbuffet used Dragon Tail!");
@@ -181,7 +181,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not affected by Red Card")
PLAYER(SPECIES_WYNAUT);
OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_RED_CARD); }
} WHEN {
- TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_CELEBRATE); }
} SCENE {
MESSAGE("Wobbuffet used Max Strike!");
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent);
@@ -195,11 +195,12 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not affected by Red Card")
SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can be switched out by Eject Button")
{
GIVEN {
+ ASSUME(gItemsInfo[ITEM_EJECT_BUTTON].holdEffect == HOLD_EFFECT_EJECT_BUTTON);
PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_EJECT_BUTTON); }
PLAYER(SPECIES_WYNAUT);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_TACKLE); SEND_OUT(player, 1); }
+ TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_TACKLE); SEND_OUT(player, 1); }
} SCENE {
MESSAGE("Wobbuffet used Max Strike!");
MESSAGE("Foe Wobbuffet used Tackle!");
@@ -216,7 +217,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon cannot have their ability swappe
PLAYER(SPECIES_MILTANK) { Ability(ABILITY_SCRAPPY); }
OPPONENT(SPECIES_RUNERIGUS) { Ability(ABILITY_WANDERING_SPIRIT); }
} WHEN {
- TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_SKILL_SWAP); }
+ TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_SKILL_SWAP); }
} SCENE {
MESSAGE("Miltank used Max Strike!");
MESSAGE("Foe Runerigus used Skill Swap!");
@@ -232,7 +233,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can have their ability changed o
PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_SHADOW_TAG); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_SIMPLE_BEAM); }
+ TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_SIMPLE_BEAM); }
} SCENE {
MESSAGE("Wobbuffet used Max Strike!");
MESSAGE("Foe Wobbuffet used Simple Beam!");
@@ -248,7 +249,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are immune to Encore")
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_ENCORE); }
+ TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_ENCORE); }
TURN { MOVE(player, MOVE_EMBER); }
} SCENE {
MESSAGE("Wobbuffet used Max Strike!");
@@ -264,7 +265,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can be encored immediately after
PLAYER(SPECIES_WOBBUFFET) { Speed(50); }; // yes, this speed is necessary
OPPONENT(SPECIES_WOBBUFFET) { Speed(100); };
} WHEN {
- TURN { MOVE(player, MOVE_ARM_THRUST, dynamax: TRUE); }
+ TURN { MOVE(player, MOVE_ARM_THRUST, gimmick: GIMMICK_DYNAMAX); }
TURN { MOVE(player, MOVE_ARM_THRUST); }
TURN { MOVE(player, MOVE_ARM_THRUST); }
TURN { MOVE(opponent, MOVE_ENCORE); MOVE(player, MOVE_TACKLE); }
@@ -284,7 +285,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon's Max Moves cannot be disabled")
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_DISABLE); }
+ TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_DISABLE); }
} SCENE {
MESSAGE("Wobbuffet used Max Strike!");
MESSAGE("Foe Wobbuffet used Disable!");
@@ -300,7 +301,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon can have base moves disabled on
OPPONENT(SPECIES_WOBBUFFET) { Speed(100); };
} WHEN {
TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_TACKLE); }
- TURN { MOVE(opponent, MOVE_DISABLE); MOVE(player, MOVE_TACKLE, dynamax: TRUE); }
+ TURN { MOVE(opponent, MOVE_DISABLE); MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); }
TURN {}
TURN {}
TURN { MOVE(player, MOVE_TACKLE, allowed: FALSE); MOVE(player, MOVE_CELEBRATE); }
@@ -319,7 +320,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are immune to Torment")
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_TORMENT); }
+ TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_TORMENT); }
} SCENE {
MESSAGE("Wobbuffet used Max Strike!");
MESSAGE("Foe Wobbuffet used Torment!");
@@ -334,7 +335,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not immune to Knock Off")
PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_POTION); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_KNOCK_OFF); }
+ TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_KNOCK_OFF); }
} SCENE {
MESSAGE("Wobbuffet used Max Strike!");
MESSAGE("Foe Wobbuffet used Knock Off!");
@@ -351,7 +352,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon lose their substitutes")
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
TURN { MOVE(player, MOVE_SUBSTITUTE); MOVE(opponent, MOVE_CELEBRATE); }
- TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_TACKLE); }
+ TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_TACKLE); }
} SCENE {
MESSAGE("Wobbuffet used Substitute!");
MESSAGE("Wobbuffet made a SUBSTITUTE!");
@@ -361,32 +362,17 @@ 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, dynamax: TRUE, target: opponentLeft); MOVE(playerRight, MOVE_COPYCAT, target: opponentLeft); }
- } SCENE {
- MESSAGE("Wobbuffet used Max Guard!");
- MESSAGE("Wynaut used Trick Room!");
- }
-}
-
SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon take double damage from Dynamax Cannon", s16 damage)
{
- bool32 dynamaxed;
- PARAMETRIZE { dynamaxed = FALSE; }
- PARAMETRIZE { dynamaxed = TRUE; }
+ u32 dynamax;
+ PARAMETRIZE { dynamax = GIMMICK_NONE; }
+ PARAMETRIZE { dynamax = GIMMICK_DYNAMAX; }
GIVEN {
ASSUME(gMovesInfo[MOVE_DYNAMAX_CANNON].effect == EFFECT_DYNAMAX_DOUBLE_DMG);
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(player, MOVE_TACKLE, dynamax: dynamaxed); MOVE(opponent, MOVE_DYNAMAX_CANNON); }
+ TURN { MOVE(player, MOVE_TACKLE, gimmick: dynamax); MOVE(opponent, MOVE_DYNAMAX_CANNON); }
} SCENE {
HP_BAR(player, captureDamage: &results[i].damage);
} FINALLY {
@@ -404,9 +390,9 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Moves deal 1/4 damage through protect", s16 da
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
if (protected)
- TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_PROTECT); }
+ TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_PROTECT); }
else
- TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); }
+ TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); }
} SCENE {
HP_BAR(opponent, captureDamage: &results[i].damage);
} FINALLY {
@@ -420,7 +406,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Moves don't bypass Max Guard")
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); MOVE(opponent, MOVE_PROTECT, dynamax: TRUE); }
+ TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_PROTECT, gimmick: GIMMICK_DYNAMAX); }
} SCENE {
NONE_OF { HP_BAR(opponent); }
}
@@ -434,7 +420,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) Feint bypasses Max Guard but doesn't break it")
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WYNAUT);
} WHEN {
- TURN { MOVE(playerLeft, MOVE_PROTECT, dynamax: TRUE);
+ TURN { MOVE(playerLeft, MOVE_PROTECT, gimmick: GIMMICK_DYNAMAX);
MOVE(opponentLeft, MOVE_FEINT, target: playerLeft);
MOVE(opponentRight, MOVE_TACKLE, target: playerLeft);
}
@@ -455,7 +441,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are immune to Instruct")
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WYNAUT);
} WHEN {
- TURN { MOVE(playerLeft, MOVE_TACKLE, dynamax: TRUE, target: opponentLeft);
+ TURN { MOVE(playerLeft, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX, target: opponentLeft);
MOVE(playerRight, MOVE_INSTRUCT, target: playerLeft);
}
} SCENE {
@@ -475,7 +461,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Pokemon with Gigantamax forms change upon Dynamaxi
PLAYER(SPECIES_VENUSAUR) { GigantamaxFactor(gigantamaxFactor); }
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); }
+ TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); }
} THEN {
EXPECT_EQ(player->species, species);
}
@@ -488,7 +474,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Pokemon with Gigantamax forms revert upon switchin
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); }
+ TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); }
TURN { SWITCH(player, 1); }
TURN { SWITCH(player, 0); }
} THEN {
@@ -506,8 +492,8 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon are not affected by Choice items
PLAYER(SPECIES_WOBBUFFET) { Item(item); };
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); }
- TURN { MOVE(player, MOVE_ARM_THRUST, dynamax: TRUE); }
+ TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); }
+ TURN { MOVE(player, MOVE_ARM_THRUST); }
} SCENE {
MESSAGE("Wobbuffet used Max Strike!");
HP_BAR(opponent, captureDamage: &results[i].damage);
@@ -524,7 +510,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon cannot use Max Guard while holdi
PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_ASSAULT_VEST); };
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); }
+ TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); }
TURN { MOVE(player, MOVE_PROTECT, allowed: FALSE); MOVE(player, MOVE_TACKLE); }
} SCENE {
MESSAGE("Wobbuffet used Max Strike!");
@@ -540,15 +526,15 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Dynamaxed Pokemon cannot use Max Guard while holdi
SINGLE_BATTLE_TEST("(DYNAMAX) Endeavor uses a Pokemon's non-Dynamax HP", s16 damage)
{
- bool32 dynamax;
- PARAMETRIZE { dynamax = TRUE; }
- PARAMETRIZE { dynamax = FALSE; }
+ u32 dynamax;
+ PARAMETRIZE { dynamax = GIMMICK_NONE; }
+ PARAMETRIZE { dynamax = GIMMICK_DYNAMAX; }
GIVEN {
ASSUME(gMovesInfo[MOVE_ENDEAVOR].effect == EFFECT_ENDEAVOR);
PLAYER(SPECIES_WOBBUFFET) { Speed(50); }
OPPONENT(SPECIES_WOBBUFFET) { HP(1); Speed(100); }
} WHEN {
- TURN { MOVE(opponent, MOVE_ENDEAVOR); MOVE(player, MOVE_TACKLE, dynamax: dynamax); }
+ TURN { MOVE(opponent, MOVE_ENDEAVOR); MOVE(player, MOVE_TACKLE, gimmick: dynamax); }
} SCENE {
MESSAGE("Foe Wobbuffet used Endeavor!");
HP_BAR(player, captureDamage: &results[i].damage);
@@ -559,15 +545,15 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Endeavor uses a Pokemon's non-Dynamax HP", s16 dam
SINGLE_BATTLE_TEST("(DYNAMAX) Super Fang uses a Pokemon's non-Dynamax HP", s16 damage)
{
- bool32 dynamax;
- PARAMETRIZE { dynamax = TRUE; }
- PARAMETRIZE { dynamax = FALSE; }
+ u32 dynamax;
+ PARAMETRIZE { dynamax = GIMMICK_NONE; }
+ PARAMETRIZE { dynamax = GIMMICK_DYNAMAX; }
GIVEN {
ASSUME(gMovesInfo[MOVE_SUPER_FANG].effect == EFFECT_SUPER_FANG);
PLAYER(SPECIES_WOBBUFFET) { Speed(50); }
OPPONENT(SPECIES_WOBBUFFET) { Speed(100); }
} WHEN {
- TURN { MOVE(opponent, MOVE_SUPER_FANG); MOVE(player, MOVE_TACKLE, dynamax: dynamax); }
+ TURN { MOVE(opponent, MOVE_SUPER_FANG); MOVE(player, MOVE_TACKLE, gimmick: dynamax); }
} SCENE {
MESSAGE("Foe Wobbuffet used Super Fang!");
HP_BAR(player, captureDamage: &results[i].damage);
@@ -578,15 +564,15 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Super Fang uses a Pokemon's non-Dynamax HP", s16 d
SINGLE_BATTLE_TEST("(DYNAMAX) Pain Split uses a Pokemon's non-Dynamax HP", s16 damage)
{
- bool32 dynamax;
- PARAMETRIZE { dynamax = TRUE; }
- PARAMETRIZE { dynamax = FALSE; }
+ u32 dynamax;
+ PARAMETRIZE { dynamax = GIMMICK_NONE; }
+ PARAMETRIZE { dynamax = GIMMICK_DYNAMAX; }
GIVEN {
ASSUME(gMovesInfo[MOVE_PAIN_SPLIT].effect == EFFECT_PAIN_SPLIT);
PLAYER(SPECIES_WOBBUFFET) { Speed(50); }
OPPONENT(SPECIES_WOBBUFFET) { HP(1); Speed(100); }
} WHEN {
- TURN { MOVE(opponent, MOVE_PAIN_SPLIT); MOVE(player, MOVE_TACKLE, dynamax: dynamax); }
+ TURN { MOVE(opponent, MOVE_PAIN_SPLIT); MOVE(player, MOVE_TACKLE, gimmick: dynamax); }
} SCENE {
MESSAGE("Foe Wobbuffet used Pain Split!");
HP_BAR(player, captureDamage: &results[i].damage);
@@ -597,16 +583,16 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Pain Split uses a Pokemon's non-Dynamax HP", s16 d
SINGLE_BATTLE_TEST("(DYNAMAX) Sitrus Berries heal based on a Pokemon's non-Dynamax HP", s16 damage)
{
- bool32 dynamax;
- PARAMETRIZE { dynamax = TRUE; }
- PARAMETRIZE { dynamax = FALSE; }
+ u32 dynamax;
+ PARAMETRIZE { dynamax = GIMMICK_NONE; }
+ PARAMETRIZE { dynamax = GIMMICK_DYNAMAX; }
GIVEN {
ASSUME(I_SITRUS_BERRY_HEAL >= GEN_4);
ASSUME(gItemsInfo[ITEM_SITRUS_BERRY].holdEffect == HOLD_EFFECT_RESTORE_PCT_HP);
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_SITRUS_BERRY); }
} WHEN {
- TURN { MOVE(opponent, MOVE_FLING); MOVE(player, MOVE_TACKLE, dynamax: dynamax); }
+ TURN { MOVE(opponent, MOVE_FLING); MOVE(player, MOVE_TACKLE, gimmick: dynamax); }
} SCENE {
MESSAGE("Wobbuffet's Sitrus Berry restored health!");
HP_BAR(player, captureDamage: &results[i].damage);
@@ -617,15 +603,15 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Sitrus Berries heal based on a Pokemon's non-Dynam
SINGLE_BATTLE_TEST("(DYNAMAX) Heal Pulse heals based on a Pokemon's non-Dynamax HP", s16 damage)
{
- bool32 dynamax;
- PARAMETRIZE { dynamax = TRUE; }
- PARAMETRIZE { dynamax = FALSE; }
+ u32 dynamax;
+ PARAMETRIZE { dynamax = GIMMICK_NONE; }
+ PARAMETRIZE { dynamax = GIMMICK_DYNAMAX; }
GIVEN {
ASSUME(gMovesInfo[MOVE_HEAL_PULSE].effect == EFFECT_HEAL_PULSE);
PLAYER(SPECIES_WOBBUFFET) { HP(1); Speed(50); }
OPPONENT(SPECIES_WOBBUFFET) { MaxHP(100); Speed(100); }
} WHEN {
- TURN { MOVE(opponent, MOVE_HEAL_PULSE); MOVE(player, MOVE_TACKLE, dynamax: dynamax); }
+ TURN { MOVE(opponent, MOVE_HEAL_PULSE); MOVE(player, MOVE_TACKLE, gimmick: dynamax); }
} SCENE {
MESSAGE("Foe Wobbuffet used Heal Pulse!");
HP_BAR(player, captureDamage: &results[i].damage);
@@ -643,7 +629,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Strike lowers single opponent's speed")
OPPONENT(SPECIES_WOBBUFFET) { Speed(100); }
PLAYER(SPECIES_WOBBUFFET) { Speed(80); }
} WHEN {
- TURN { MOVE(opponent, MOVE_TACKLE); MOVE(player, MOVE_TACKLE, dynamax: TRUE); }
+ TURN { MOVE(opponent, MOVE_TACKLE); MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); }
TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_TACKLE); }
} SCENE {
// turn 1
@@ -669,7 +655,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) Max Strike lowers both opponents' speed")
OPPONENT(SPECIES_WOBBUFFET) {Speed(100); }
OPPONENT(SPECIES_WOBBUFFET) { Speed(99); }
} WHEN {
- TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft, dynamax: TRUE); \
+ TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); \
MOVE(opponentLeft, MOVE_TACKLE, target: playerLeft); \
MOVE(opponentRight, MOVE_TACKLE, target: playerLeft); }
TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft); \
@@ -708,7 +694,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) Max Knuckle raises both allies' attack")
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WYNAUT);
} WHEN {
- TURN { MOVE(playerLeft, MOVE_CLOSE_COMBAT, target: opponentLeft, dynamax: TRUE); \
+ TURN { MOVE(playerLeft, MOVE_CLOSE_COMBAT, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); \
MOVE(playerRight, MOVE_TACKLE, target: opponentRight); }
TURN { MOVE(playerLeft, MOVE_CLOSE_COMBAT, target: opponentLeft); \
MOVE(playerRight, MOVE_TACKLE, target: opponentRight); }
@@ -746,7 +732,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Flare sets up sunlight")
OPPONENT(SPECIES_WOBBUFFET);
PLAYER(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(player, MOVE_EMBER, dynamax: TRUE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_EMBER, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_CELEBRATE); }
} SCENE {
MESSAGE("Wobbuffet used Max Flare!");
MESSAGE("The sunlight got bright!");
@@ -762,7 +748,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Geyser sets up heavy rain")
OPPONENT(SPECIES_WOBBUFFET);
PLAYER(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(player, MOVE_WATER_GUN, dynamax: TRUE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_WATER_GUN, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_CELEBRATE); }
} SCENE {
MESSAGE("Wobbuffet used Max Geyser!");
MESSAGE("It started to rain!");
@@ -778,7 +764,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Hailstorm sets up hail")
OPPONENT(SPECIES_WOBBUFFET);
PLAYER(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(player, MOVE_POWDER_SNOW, dynamax: TRUE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_POWDER_SNOW, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_CELEBRATE); }
} SCENE {
MESSAGE("Wobbuffet used Max Hailstorm!");
MESSAGE("It started to hail!");
@@ -794,7 +780,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Rockfall sets up a sandstorm")
OPPONENT(SPECIES_WOBBUFFET);
PLAYER(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(player, MOVE_ROCK_THROW, dynamax: TRUE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_ROCK_THROW, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_CELEBRATE); }
} SCENE {
MESSAGE("Wobbuffet used Max Rockfall!");
MESSAGE("A sandstorm brewed!");
@@ -812,7 +798,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Overgrowth sets up Grassy Terrain")
OPPONENT(SPECIES_WOBBUFFET) { MaxHP(maxHP); HP(maxHP / 2); };
PLAYER(SPECIES_WOBBUFFET) { MaxHP(maxHP); HP(maxHP / 2); };
} WHEN {
- TURN { MOVE(player, MOVE_VINE_WHIP, dynamax: TRUE); MOVE(opponent, MOVE_CELEBRATE); }
+ TURN { MOVE(player, MOVE_VINE_WHIP, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_CELEBRATE); }
TURN { MOVE(player, MOVE_VINE_WHIP); MOVE(opponent, MOVE_CELEBRATE); }
} SCENE {
MESSAGE("Wobbuffet used Max Overgrowth!");
@@ -831,12 +817,12 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Mindstorm sets up Psychic Terrain")
OPPONENT(SPECIES_WOBBUFFET);
PLAYER(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(opponent, MOVE_EXTREME_SPEED); MOVE(player, MOVE_PSYCHIC, dynamax: TRUE); }
+ TURN { MOVE(opponent, MOVE_EXTREME_SPEED); MOVE(player, MOVE_PSYCHIC, gimmick: GIMMICK_DYNAMAX); }
TURN { MOVE(opponent, MOVE_EXTREME_SPEED); MOVE(player, MOVE_PSYCHIC); }
} SCENE {
- MESSAGE("Foe Wobbuffet used ExtremeSpeed!");
+ MESSAGE("Foe Wobbuffet used Extreme Speed!");
MESSAGE("Wobbuffet used Max Mindstorm!");
- MESSAGE("Foe Wobbuffet cannot use ExtremeSpeed!");
+ MESSAGE("Foe Wobbuffet cannot use Extreme Speed!");
MESSAGE("Wobbuffet used Max Mindstorm!");
}
}
@@ -848,7 +834,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Lightning sets up Electric Terrain")
OPPONENT(SPECIES_WOBBUFFET);
PLAYER(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(player, MOVE_THUNDERBOLT, dynamax: TRUE); MOVE(opponent, MOVE_SPORE); }
+ TURN { MOVE(player, MOVE_THUNDERBOLT, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_SPORE); }
} SCENE {
MESSAGE("Wobbuffet used Max Lightning!");
MESSAGE("Foe Wobbuffet used Spore!");
@@ -863,7 +849,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Starfall sets up Misty Terrain")
OPPONENT(SPECIES_WOBBUFFET);
PLAYER(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(player, MOVE_MOONBLAST, dynamax: TRUE); MOVE(opponent, MOVE_TOXIC); }
+ TURN { MOVE(player, MOVE_MOONBLAST, gimmick: GIMMICK_DYNAMAX); MOVE(opponent, MOVE_TOXIC); }
} SCENE {
MESSAGE("Wobbuffet used Max Starfall!");
MESSAGE("Foe Wobbuffet used Toxic!");
@@ -879,7 +865,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) G-Max Stonesurge sets up Stealth Rocks")
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(player, MOVE_LIQUIDATION, dynamax: TRUE); }
+ TURN { MOVE(player, MOVE_LIQUIDATION, gimmick: GIMMICK_DYNAMAX); }
TURN { SWITCH(opponent, 1); }
} SCENE {
// turn 1
@@ -899,7 +885,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) G-Max Steelsurge sets up sharp steel")
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_HATTERENE);
} WHEN {
- TURN { MOVE(player, MOVE_IRON_HEAD, dynamax: TRUE); }
+ TURN { MOVE(player, MOVE_IRON_HEAD, gimmick: GIMMICK_DYNAMAX); }
TURN { SWITCH(opponent, 1); }
TURN { } // wait out Dynamax
TURN { MOVE(opponent, MOVE_DEFOG); }
@@ -929,7 +915,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) G-Max Hydrosnipe has fixed power and ignores abili
PLAYER(SPECIES_INTELEON) { GigantamaxFactor(TRUE); }
OPPONENT(SPECIES_ARCTOVISH) { Ability(ABILITY_WATER_ABSORB); }
} WHEN {
- TURN { MOVE(player, move, dynamax: TRUE); }
+ TURN { MOVE(player, move, gimmick: GIMMICK_DYNAMAX); }
} SCENE {
MESSAGE("Inteleon used G-Max Hydrosnipe!");
HP_BAR(opponent, captureDamage: &results[i].damage);
@@ -947,7 +933,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Volt Crash paralyzes both opponents")
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WYNAUT);
} WHEN {
- TURN { MOVE(playerLeft, MOVE_THUNDERBOLT, target: opponentLeft, dynamax: TRUE); }
+ TURN { MOVE(playerLeft, MOVE_THUNDERBOLT, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); }
} SCENE {
MESSAGE("Pikachu used G-Max Volt Crash!");
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PRZ, opponentLeft);
@@ -974,7 +960,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Stun Shock paralyzes or poisons both opponen
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WYNAUT);
} WHEN {
- TURN { MOVE(playerLeft, MOVE_THUNDERBOLT, target: opponentLeft, dynamax: TRUE, \
+ TURN { MOVE(playerLeft, MOVE_THUNDERBOLT, target: opponentLeft, gimmick: GIMMICK_DYNAMAX, \
WITH_RNG(RNG_G_MAX_STUN_SHOCK, rng)); }
} SCENE {
MESSAGE("Toxtricity used G-Max Stun Shock!");
@@ -1011,7 +997,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Stun Shock chooses statuses before consideri
OPPONENT(SPECIES_GARBODOR);
OPPONENT(SPECIES_TRUBBISH);
} WHEN {
- TURN { MOVE(playerLeft, MOVE_NUZZLE, target: opponentLeft, dynamax: TRUE, \
+ TURN { MOVE(playerLeft, MOVE_NUZZLE, target: opponentLeft, gimmick: GIMMICK_DYNAMAX, \
WITH_RNG(RNG_G_MAX_STUN_SHOCK, STATUS1_POISON)); }
} SCENE {
MESSAGE("Toxtricity used G-Max Stun Shock!");
@@ -1044,7 +1030,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Befuddle paralyzes, poisons, or sleeps both
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(playerLeft, MOVE_BUG_BITE, target: opponentLeft, dynamax: TRUE,
+ TURN { MOVE(playerLeft, MOVE_BUG_BITE, target: opponentLeft, gimmick: GIMMICK_DYNAMAX,
WITH_RNG(RNG_G_MAX_BEFUDDLE, rng)); }
} SCENE {
MESSAGE("Butterfree used G-Max Befuddle!");
@@ -1088,7 +1074,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Gold Rush confuses both opponents and genera
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft, dynamax: TRUE); }
+ TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); }
} SCENE {
MESSAGE("Meowth used G-Max Gold Rush!");
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponentLeft);
@@ -1108,7 +1094,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Smite confuses both opponents")
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(playerLeft, MOVE_MOONBLAST, target: opponentLeft, dynamax: TRUE); }
+ TURN { MOVE(playerLeft, MOVE_MOONBLAST, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); }
} SCENE {
MESSAGE("Hatterene used G-Max Smite!");
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_CONFUSION, opponentLeft);
@@ -1127,7 +1113,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Cuddle infatuates both opponents, if possibl
OPPONENT(SPECIES_WOBBUFFET) { Gender(MON_FEMALE); }
OPPONENT(SPECIES_WOBBUFFET) { Gender(MON_MALE); }
} WHEN {
- TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft, dynamax: TRUE); }
+ TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); }
} SCENE {
MESSAGE("Eevee used G-Max Cuddle!");
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_INFATUATION, opponentLeft);
@@ -1148,7 +1134,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Terror traps both opponents")
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(playerLeft, MOVE_LICK, target: opponentLeft, dynamax: TRUE); }
+ TURN { MOVE(playerLeft, MOVE_LICK, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); }
} SCENE {
MESSAGE("Gengar used G-Max Terror!");
MESSAGE("Foe Wobbuffet can't escape now!");
@@ -1169,7 +1155,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Meltdown torments both opponents for 3 turns
OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_SPLASH, MOVE_CELEBRATE); }
OPPONENT(SPECIES_WYNAUT) { Moves(MOVE_SPLASH, MOVE_CELEBRATE); }
} WHEN {
- TURN { MOVE(playerLeft, MOVE_IRON_HEAD, target: opponentLeft, dynamax: TRUE); \
+ TURN { MOVE(playerLeft, MOVE_IRON_HEAD, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); \
MOVE(opponentLeft, MOVE_SPLASH); MOVE(opponentRight, MOVE_SPLASH); }
TURN { MOVE(playerLeft, MOVE_CELEBRATE, target: opponentLeft); \
MOVE(opponentLeft, MOVE_SPLASH, allowed: FALSE); \
@@ -1207,7 +1193,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Wildfire sets a field effect that damages no
OPPONENT(SPECIES_WYNAUT);
OPPONENT(SPECIES_ARCANINE);
} WHEN {
- TURN { MOVE(playerLeft, MOVE_EMBER, target: opponentLeft, dynamax: TRUE); }
+ TURN { MOVE(playerLeft, MOVE_EMBER, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); }
TURN { }
TURN { SWITCH(opponentLeft, 2); }
TURN { }
@@ -1248,7 +1234,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 {
@@ -1256,7 +1242,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Replenish recycles allies' berries 50\% of t
MOVE(playerRight, MOVE_STUFF_CHEEKS); \
MOVE(opponentLeft, MOVE_STUFF_CHEEKS); \
MOVE(opponentRight, MOVE_STUFF_CHEEKS); }
- TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft, dynamax: TRUE); }
+ TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); }
} SCENE {
// turn 1
MESSAGE("Using Apicot Berry, the Sp. Def of Snorlax rose!");
@@ -1281,7 +1267,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Snooze makes only the target drowsy")
OPPONENT(SPECIES_BLISSEY);
OPPONENT(SPECIES_CHANSEY);
} WHEN {
- TURN { MOVE(playerLeft, MOVE_DARK_PULSE, target: opponentLeft, dynamax: TRUE); }
+ TURN { MOVE(playerLeft, MOVE_DARK_PULSE, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); }
TURN { }
} SCENE {
// turn 1
@@ -1304,7 +1290,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Finale heals allies by 1/6 of their health")
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(playerLeft, MOVE_MOONBLAST, target: opponentLeft, dynamax: TRUE); }
+ TURN { MOVE(playerLeft, MOVE_MOONBLAST, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); }
} SCENE {
MESSAGE("Alcremie used G-Max Finale!");
HP_BAR(playerLeft, captureDamage: &damage1);
@@ -1324,7 +1310,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Sweetness cures allies' status conditions")
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(playerLeft, MOVE_VINE_WHIP, target: opponentLeft, dynamax: TRUE); }
+ TURN { MOVE(playerLeft, MOVE_VINE_WHIP, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); }
} SCENE {
MESSAGE("Appletun used G-Max Sweetness!");
STATUS_ICON(playerLeft, none: TRUE);
@@ -1345,11 +1331,11 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Centiferno traps both opponents in Fire Spin
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WYNAUT);
} WHEN {
- TURN { MOVE(playerLeft, MOVE_FLAME_CHARGE, target: opponentLeft, dynamax: TRUE); }
+ TURN { MOVE(playerLeft, MOVE_FLAME_CHARGE, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); }
TURN { SWITCH(playerLeft, 2); }
} SCENE {
// turn 1
- MESSAGE("Centiskorc used G-Max Centiferno!");
+ MESSAGE("Centiskorch used G-Max Centiferno!");
MESSAGE("Foe Wobbuffet is hurt by Fire Spin!");
HP_BAR(opponentLeft);
MESSAGE("Foe Wynaut is hurt by Fire Spin!");
@@ -1373,7 +1359,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Chi Strike boosts allies' crit chance")
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(playerLeft, MOVE_FORCE_PALM, target: opponentLeft, dynamax: TRUE); }
+ TURN { MOVE(playerLeft, MOVE_FORCE_PALM, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); }
TURN { MOVE(playerLeft, MOVE_FORCE_PALM, target: opponentLeft); }
TURN { MOVE(playerLeft, MOVE_FORCE_PALM, target: opponentLeft); \
MOVE(playerRight, MOVE_FOCUS_ENERGY); }
@@ -1406,7 +1392,7 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max Depletion takes away 2 PP from the target's
OPPONENT(SPECIES_SABLEYE) { Ability((ABILITY_PRANKSTER || ABILITY_TRICKSTER)); }
OPPONENT(SPECIES_WYNAUT);
} WHEN {
- TURN { MOVE(playerLeft, MOVE_DRAGON_CLAW, target: opponentLeft, dynamax: TRUE); }
+ TURN { MOVE(playerLeft, MOVE_DRAGON_CLAW, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); }
} SCENE {
MESSAGE("Foe Sableye used Celebrate!");
MESSAGE("Duraludon used G-Max Depletion!");
@@ -1428,11 +1414,11 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) G-Max One Blow bypasses Max Guard for full damage"
OPPONENT(SPECIES_WYNAUT);
} WHEN {
if (protect)
- TURN { MOVE(playerLeft, MOVE_WICKED_BLOW, target: opponentLeft, dynamax: TRUE); \
- MOVE(opponentLeft, MOVE_PROTECT, dynamax: TRUE); }
+ TURN { MOVE(playerLeft, MOVE_WICKED_BLOW, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); \
+ MOVE(opponentLeft, MOVE_PROTECT, gimmick: GIMMICK_DYNAMAX); }
else
- TURN { MOVE(playerLeft, MOVE_WICKED_BLOW, target: opponentLeft, dynamax: TRUE); \
- MOVE(opponentLeft, MOVE_PSYCHIC, target: playerLeft, dynamax: TRUE); }
+ TURN { MOVE(playerLeft, MOVE_WICKED_BLOW, target: opponentLeft, gimmick: GIMMICK_DYNAMAX); \
+ MOVE(opponentLeft, MOVE_PSYCHIC, target: playerLeft, gimmick: GIMMICK_DYNAMAX); }
} SCENE {
if (protect)
MESSAGE("Foe Wobbuffet used Max Guard!");
@@ -1453,8 +1439,8 @@ DOUBLE_BATTLE_TEST("(DYNAMAX) Max Flare doesn't softlock the game when fainting
OPPONENT(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET);
} WHEN {
- TURN { MOVE(playerLeft, MOVE_PROTECT, dynamax: TRUE);
- MOVE(opponentLeft, MOVE_V_CREATE, target: playerRight, dynamax: TRUE);
+ TURN { MOVE(playerLeft, MOVE_PROTECT, gimmick: GIMMICK_DYNAMAX);
+ MOVE(opponentLeft, MOVE_V_CREATE, target: playerRight, gimmick: GIMMICK_DYNAMAX);
SEND_OUT(playerRight, 2); }
TURN { }
}
@@ -1466,7 +1452,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Max Moves don't execute effects on fainted battler
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET) { HP(1); };
} WHEN {
- TURN { MOVE(player, MOVE_TACKLE, dynamax: TRUE); }
+ TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); }
} SCENE {
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_DYNAMAX_GROWTH, player);
MESSAGE("Wobbuffet used Max Strike!");
@@ -1483,7 +1469,7 @@ SINGLE_BATTLE_TEST("(DYNAMAX) Moxie clones can be triggered by Max Moves faintin
OPPONENT(SPECIES_WOBBUFFET) { HP(1); }
OPPONENT(SPECIES_WYNAUT);
} WHEN {
- TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_WATERFALL, dynamax: TRUE); SEND_OUT(opponent, 1); }
+ TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_WATERFALL, gimmick: GIMMICK_DYNAMAX); SEND_OUT(opponent, 1); }
} SCENE {
MESSAGE("Foe Wobbuffet fainted!");
ABILITY_POPUP(player, ABILITY_MOXIE);
diff --git a/test/battle/gimmick/terastal.c b/test/battle/gimmick/terastal.c
new file mode 100644
index 000000000000..1b50bc4bcc3c
--- /dev/null
+++ b/test/battle/gimmick/terastal.c
@@ -0,0 +1,870 @@
+#include "global.h"
+#include "test/battle.h"
+
+// Base Power and STAB Checks
+
+SINGLE_BATTLE_TEST("(TERA) Terastallizing into a different type preserves other STAB boosts", s16 damage1, s16 damage2)
+{
+ bool32 tera;
+ PARAMETRIZE { tera = GIMMICK_NONE; }
+ PARAMETRIZE { tera = GIMMICK_TERA; }
+ GIVEN {
+ PLAYER(SPECIES_BULBASAUR) { TeraType(TYPE_NORMAL); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_VINE_WHIP, gimmick: tera); }
+ TURN { MOVE(player, MOVE_SLUDGE_BOMB); }
+ } SCENE {
+ MESSAGE("Bulbasaur used Vine Whip!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_VINE_WHIP, player);
+ HP_BAR(opponent, captureDamage: &results[i].damage1);
+ MESSAGE("Bulbasaur used Sludge Bomb!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SLUDGE_BOMB, player);
+ HP_BAR(opponent, captureDamage: &results[i].damage2);
+ } FINALLY {
+ EXPECT_EQ(results[0].damage1, results[1].damage1);
+ EXPECT_EQ(results[0].damage2, results[1].damage2);
+ }
+}
+
+SINGLE_BATTLE_TEST("(TERA) Terastallizing does not affect the power of non-STAB moves", s16 damage)
+{
+ bool32 tera;
+ PARAMETRIZE { tera = GIMMICK_NONE; }
+ PARAMETRIZE { tera = GIMMICK_TERA; }
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_PSYCHIC); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_HEADBUTT, gimmick: tera); }
+ } SCENE {
+ MESSAGE("Wobbuffet used Headbutt!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_HEADBUTT, player);
+ HP_BAR(opponent, captureDamage: &results[i].damage);
+ } FINALLY {
+ EXPECT_EQ(results[0].damage, results[1].damage);
+ }
+}
+
+SINGLE_BATTLE_TEST("(TERA) Terastallizing into a different type gives that type 1.5x STAB", s16 damage)
+{
+ bool32 tera;
+ PARAMETRIZE { tera = GIMMICK_NONE; }
+ PARAMETRIZE { tera = GIMMICK_TERA; }
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_NORMAL); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_HEADBUTT, gimmick: tera); }
+ } SCENE {
+ MESSAGE("Wobbuffet used Headbutt!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_HEADBUTT, player);
+ HP_BAR(opponent, captureDamage: &results[i].damage);
+ } FINALLY {
+ // The jump from no STAB to 1.5x STAB is a 1.5x boost.
+ EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage);
+ }
+}
+
+SINGLE_BATTLE_TEST("(TERA) Terastallizing into the same type gives that type 2x STAB", s16 damage)
+{
+ bool32 tera;
+ PARAMETRIZE { tera = GIMMICK_NONE; }
+ PARAMETRIZE { tera = GIMMICK_TERA; }
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_PSYCHIC); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_PSYCHIC, gimmick: tera); }
+ } SCENE {
+ MESSAGE("Wobbuffet used Psychic!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYCHIC, 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 boosts moves of the same type to 60 BP", s16 damage)
+{
+ bool32 tera;
+ PARAMETRIZE { tera = GIMMICK_NONE; }
+ PARAMETRIZE { tera = GIMMICK_TERA; }
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_ABSORB].power == 20);
+ PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_GRASS); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_ABSORB, gimmick: tera); }
+ } SCENE {
+ MESSAGE("Wobbuffet used Absorb!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_ABSORB, player);
+ HP_BAR(opponent, captureDamage: &results[i].damage);
+ } FINALLY {
+ // The jump from 20 BP to 90 BP (60 * 1.5x) is a 4.5x boost.
+ EXPECT_MUL_EQ(results[0].damage, Q_4_12(4.5), results[1].damage);
+ }
+}
+
+SINGLE_BATTLE_TEST("(TERA) Terastallization's 60 BP floor occurs after Technician", s16 damage)
+{
+ bool32 tera;
+ PARAMETRIZE { tera = GIMMICK_NONE; }
+ PARAMETRIZE { tera = GIMMICK_TERA; }
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_MEGA_DRAIN].power == 40);
+ PLAYER(SPECIES_MR_MIME) { Ability(ABILITY_TECHNICIAN); TeraType(TYPE_GRASS); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_MEGA_DRAIN, gimmick: tera); }
+ } SCENE {
+ MESSAGE("Mr. Mime used Mega Drain!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_MEGA_DRAIN, player);
+ HP_BAR(opponent, captureDamage: &results[i].damage);
+ } FINALLY {
+ // This should be the same as a normal Tera boost.
+ EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage);
+ }
+}
+
+SINGLE_BATTLE_TEST("(TERA) Terastallization's 60 BP floor occurs after Technician", s16 damage)
+{
+ bool32 tera;
+ PARAMETRIZE { tera = GIMMICK_NONE; }
+ PARAMETRIZE { tera = GIMMICK_TERA; }
+ GIVEN {
+ PLAYER(SPECIES_MR_MIME) { Ability(ABILITY_TECHNICIAN); TeraType(TYPE_PSYCHIC); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_STORED_POWER, gimmick: tera); }
+ } SCENE {
+ MESSAGE("Mr. Mime used Stored Power!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_STORED_POWER, player);
+ HP_BAR(opponent, captureDamage: &results[i].damage);
+ } FINALLY {
+ // The jump from 45 BP (20 * 1.5x * 1.5x) to 120 BP (60 * 2.0x) is a 2.667x boost.
+ EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.667), results[1].damage);
+ }
+}
+
+SINGLE_BATTLE_TEST("(TERA) Terastallization's 60 BP floor does not apply to multi-hit moves", s16 damage)
+{
+ bool32 tera;
+ PARAMETRIZE { tera = GIMMICK_NONE; }
+ PARAMETRIZE { tera = GIMMICK_TERA; }
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_NORMAL); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_FURY_SWIPES, gimmick: tera); }
+ } SCENE {
+ MESSAGE("Wobbuffet used Fury Swipes!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_FURY_SWIPES, player);
+ HP_BAR(opponent, captureDamage: &results[i].damage);
+ } FINALLY {
+ EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage);
+ }
+}
+
+SINGLE_BATTLE_TEST("(TERA) Terastallization's 60 BP floor does not apply to priority moves", s16 damage)
+{
+ bool32 tera;
+ PARAMETRIZE { tera = GIMMICK_NONE; }
+ PARAMETRIZE { tera = GIMMICK_TERA; }
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_NORMAL); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_QUICK_ATTACK, gimmick: tera); }
+ } SCENE {
+ MESSAGE("Wobbuffet used Quick Attack!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, player);
+ HP_BAR(opponent, captureDamage: &results[i].damage);
+ } FINALLY {
+ EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage);
+ }
+}
+
+// Defensive Type Checks
+
+SINGLE_BATTLE_TEST("(TERA) Terastallization changes type effectiveness", s16 damage)
+{
+ bool32 tera;
+ PARAMETRIZE { tera = GIMMICK_NONE; }
+ PARAMETRIZE { tera = GIMMICK_TERA; }
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_GRASS); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE, gimmick: tera); MOVE(opponent, MOVE_WATER_GUN); }
+ } SCENE {
+ MESSAGE("Foe Wobbuffet used Water Gun!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_GUN, opponent);
+ HP_BAR(player, captureDamage: &results[i].damage);
+ } FINALLY {
+ EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].damage);
+ }
+}
+
+SINGLE_BATTLE_TEST("(TERA) Terastallization changes type effectiveness")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_FLYING); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_EARTHQUAKE); }
+ } SCENE {
+ MESSAGE("Foe Wobbuffet used Earthquake!");
+ MESSAGE("It doesn't affect Wobbuffet…");
+ NOT { HP_BAR(player); }
+ }
+}
+
+SINGLE_BATTLE_TEST("(TERA) Terastallization persists across switches")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_FLYING); }
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_EARTHQUAKE); }
+ TURN { SWITCH(player, 1); }
+ TURN { SWITCH(player, 0); }
+ TURN { MOVE(opponent, MOVE_EARTHQUAKE); }
+ } SCENE {
+ // turn 1
+ MESSAGE("Foe Wobbuffet used Earthquake!");
+ MESSAGE("It doesn't affect Wobbuffet…");
+ NOT { HP_BAR(player); }
+ // turn 4
+ MESSAGE("Foe Wobbuffet used Earthquake!");
+ MESSAGE("It doesn't affect Wobbuffet…");
+ NOT { HP_BAR(player); }
+ }
+}
+
+// Other Type Checks
+
+SINGLE_BATTLE_TEST("(TERA) Terastallization changes the effect of Curse")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_GHOST); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_CURSE, gimmick: GIMMICK_TERA); }
+ } SCENE {
+ MESSAGE("Wobbuffet used Curse!");
+ HP_BAR(player);
+ MESSAGE("Wobbuffet cut its own HP and laid a CURSE on Foe Wobbuffet!");
+ NOT { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); }
+ }
+}
+
+SINGLE_BATTLE_TEST("(TERA) Roost does not remove the user's Flying type while Terastallized")
+{
+ GIVEN {
+ PLAYER(SPECIES_ZAPDOS) { HP(1); TeraType(TYPE_FLYING); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_ROOST, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_ICE_BEAM); }
+ } SCENE {
+ MESSAGE("Zapdos used Roost!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player);
+ MESSAGE("Foe Wobbuffet used Ice Beam!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_ICE_BEAM, opponent);
+ MESSAGE("It's super effective!");
+ }
+}
+
+SINGLE_BATTLE_TEST("(TERA) Type-changing moves fail against a Terastallized Pokemon")
+{
+ u16 move;
+ PARAMETRIZE { move = MOVE_SOAK; }
+ PARAMETRIZE { move = MOVE_FORESTS_CURSE; }
+ PARAMETRIZE { move = MOVE_TRICK_OR_TREAT; }
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_PSYCHIC); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); MOVE(opponent, move); }
+ } SCENE {
+ if (move != MOVE_SOAK)
+ NOT { ANIMATION(ANIM_TYPE_MOVE, move, opponent); }
+ MESSAGE("But it failed!");
+ }
+}
+
+SINGLE_BATTLE_TEST("(TERA) Reflect Type fails if used by a Terastallized Pokemon")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_PSYCHIC); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_REFLECT_TYPE, gimmick: GIMMICK_TERA); }
+ } SCENE {
+ MESSAGE("Wobbuffet used Reflect Type!");
+ MESSAGE("But it failed!");
+ }
+}
+
+SINGLE_BATTLE_TEST("(TERA) Conversion fails if used by a Terastallized Pokemon")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_PSYCHIC); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_CONVERSION, gimmick: GIMMICK_TERA); }
+ } SCENE {
+ MESSAGE("Wobbuffet used Conversion!");
+ MESSAGE("But it failed!");
+ }
+}
+
+SINGLE_BATTLE_TEST("(TERA) Conversion2 fails if used by a Terastallized Pokemon")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_PSYCHIC); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_TACKLE); }
+ TURN { MOVE(player, MOVE_CONVERSION_2, gimmick: GIMMICK_TERA); }
+ } SCENE {
+ MESSAGE("Wobbuffet used Conversion 2!");
+ MESSAGE("But it failed!");
+ }
+}
+
+SINGLE_BATTLE_TEST("(TERA) Reflect Type copies a Terastallized Pokemon's Tera Type")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_GHOST); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); }
+ TURN { MOVE(opponent, MOVE_REFLECT_TYPE); }
+ TURN { MOVE(player, MOVE_TACKLE); }
+ } SCENE {
+ // turn 2
+ MESSAGE("Foe Wobbuffet used Reflect Type!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_REFLECT_TYPE, opponent);
+ // turn 3
+ MESSAGE("Wobbuffet used Tackle!");
+ MESSAGE("It doesn't affect Foe Wobbuffet…");
+ NOT { HP_BAR(opponent); }
+ }
+}
+
+SINGLE_BATTLE_TEST("(TERA) Synchronoise uses a Terastallized Pokemon's Tera Type")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_GHOST); }
+ OPPONENT(SPECIES_WOBBUFFET) { TeraType(TYPE_GHOST); }
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_SYNCHRONOISE); MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); }
+ TURN { MOVE(opponent, MOVE_SYNCHRONOISE, gimmick: GIMMICK_TERA); }
+ } SCENE {
+ // turn 1
+ MESSAGE("Foe Wobbuffet used Synchronoise!");
+ MESSAGE("It had no effect on Wobbuffet!");
+ // turn 2
+ MESSAGE("Foe Wobbuffet used Synchronoise!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SYNCHRONOISE, opponent);
+ }
+}
+
+SINGLE_BATTLE_TEST("(TERA) Revelation Dance uses a Terastallized Pokemon's Tera Type")
+{
+ GIVEN {
+ ASSUME(P_GEN_7_POKEMON);
+ PLAYER(SPECIES_ORICORIO) { TeraType(TYPE_NORMAL); }
+ OPPONENT(SPECIES_GENGAR);
+ } WHEN {
+ TURN { MOVE(player, MOVE_REVELATION_DANCE, gimmick: GIMMICK_TERA); }
+ } SCENE {
+ MESSAGE("Oricorio used Revelation Dance!");
+ MESSAGE("It doesn't affect Foe Gengar…");
+ NOT { HP_BAR(opponent); }
+ }
+}
+
+// This tests that Tera STAB modifiers depend on the user's original types, too.
+SINGLE_BATTLE_TEST("(TERA) Double Shock does not remove the user's Electric type while Terastallized, and changes STAB modifier depending on when it is used")
+{
+ s16 damage[4];
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_DOUBLE_SHOCK].effect == EFFECT_FAIL_IF_NOT_ARG_TYPE);
+ PLAYER(SPECIES_PICHU) { TeraType(TYPE_ELECTRIC); }
+ PLAYER(SPECIES_WOBBUFFET)
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_DOUBLE_SHOCK); MOVE(opponent, MOVE_RECOVER); }
+ TURN { MOVE(player, MOVE_DOUBLE_SHOCK, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_RECOVER); }
+ TURN { MOVE(player, MOVE_DOUBLE_SHOCK); MOVE(opponent, MOVE_RECOVER); }
+ TURN { SWITCH(player, 1); MOVE(opponent, MOVE_RECOVER); }
+ TURN { SWITCH(player, 0); MOVE(opponent, MOVE_RECOVER); }
+ TURN { MOVE(player, MOVE_DOUBLE_SHOCK); MOVE(opponent, MOVE_RECOVER); }
+ TURN { MOVE(player, MOVE_DOUBLE_SHOCK); }
+ } SCENE {
+ // turn 1 - regular STAB
+ MESSAGE("Pichu used Double Shock!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_SHOCK, player);
+ HP_BAR(opponent, captureDamage: &damage[0]);
+ // turn 2 - lost Electric type, gained back from Tera
+ MESSAGE("Pichu used Double Shock!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_SHOCK, player);
+ HP_BAR(opponent, captureDamage: &damage[1]);
+ // turn 3 - retained Electric type
+ MESSAGE("Pichu used Double Shock!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_SHOCK, player);
+ // turn 6 - original type reset, regular STAB + Tera boost
+ MESSAGE("Pichu used Double Shock!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_SHOCK, player);
+ HP_BAR(opponent, captureDamage: &damage[2]);
+ // turn 7 - regular STAB + Tera boost stays
+ MESSAGE("Pichu used Double Shock!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DOUBLE_SHOCK, player);
+ HP_BAR(opponent, captureDamage: &damage[3]);
+ } THEN {
+ EXPECT_EQ(damage[0], damage[1]);
+ EXPECT_MUL_EQ(damage[0], Q_4_12(1.333), damage[2]);
+ EXPECT_EQ(damage[2], damage[3]);
+ }
+}
+
+SINGLE_BATTLE_TEST("(TERA) Transform does not copy the target's Tera Type, and if the user is Terastallized it keeps its own Tera Type")
+{
+ KNOWN_FAILING; // Transform seems to be bugged in tests.
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET) { Moves(MOVE_CELEBRATE, MOVE_TACKLE, MOVE_EARTHQUAKE); TeraType(TYPE_GHOST); }
+ OPPONENT(SPECIES_DITTO) { TeraType(TYPE_FLYING); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_TRANSFORM); }
+ TURN { MOVE(player, MOVE_EARTHQUAKE); }
+ // TURN { MOVE(player, MOVE_TACKLE); MOVE(opponent, MOVE_TACKLE, target: player, gimmick: GIMMICK_TERA); }
+ } SCENE {
+ // turn 2
+ MESSAGE("Wobbuffet used Earthquake!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_EARTHQUAKE, player);
+ HP_BAR(opponent);
+ // turn 3
+ MESSAGE("Wobbuffet used Tackle!");
+ MESSAGE("It doesn't affect Ditto…");
+ NOT { HP_BAR(opponent); }
+ }
+}
+
+// Stellar Type checks
+SINGLE_BATTLE_TEST("(TERA) Stellar type does not change the user's defensive profile", s16 damage)
+{
+ bool32 tera;
+ PARAMETRIZE { tera = GIMMICK_NONE; }
+ PARAMETRIZE { tera = GIMMICK_TERA; }
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_STELLAR); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE, gimmick: tera); MOVE(opponent, MOVE_PSYCHIC); }
+ } SCENE {
+ MESSAGE("Foe Wobbuffet used Psychic!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_PSYCHIC, opponent);
+ HP_BAR(player, captureDamage: &results[i].damage);
+ } FINALLY {
+ EXPECT_EQ(results[0].damage, results[1].damage);
+ }
+}
+
+SINGLE_BATTLE_TEST("(TERA) Reflect Type copies a Stellar-type Pokemon's base type")
+{
+ GIVEN {
+ PLAYER(SPECIES_BANETTE) { TeraType(TYPE_STELLAR); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_CELEBRATE); MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); }
+ TURN { MOVE(opponent, MOVE_REFLECT_TYPE); }
+ TURN { MOVE(player, MOVE_TACKLE); }
+ } SCENE {
+ // turn 2
+ MESSAGE("Foe Wobbuffet used Reflect Type!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_REFLECT_TYPE, opponent);
+ // turn 3
+ MESSAGE("Banette used Tackle!");
+ MESSAGE("It doesn't affect Foe Wobbuffet…");
+ NOT { HP_BAR(opponent); }
+ }
+}
+
+SINGLE_BATTLE_TEST("(TERA) Revelation Dance uses a Stellar-type Pokemon's base type")
+{
+ GIVEN {
+ ASSUME(P_GEN_7_POKEMON);
+ PLAYER(SPECIES_ORICORIO_SENSU) { TeraType(TYPE_STELLAR); }
+ OPPONENT(SPECIES_GUMSHOOS);
+ } WHEN {
+ TURN { MOVE(player, MOVE_REVELATION_DANCE, gimmick: GIMMICK_TERA); }
+ } SCENE {
+ MESSAGE("Oricorio used Revelation Dance!");
+ MESSAGE("It doesn't affect Foe Gumshoos…");
+ NOT { HP_BAR(opponent); }
+ }
+}
+
+SINGLE_BATTLE_TEST("(TERA) Conversion2 fails if last hit by a Stellar-type move")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_STELLAR); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_TERA_BLAST, gimmick: GIMMICK_TERA); }
+ TURN { MOVE(opponent, MOVE_CONVERSION_2); }
+ } SCENE {
+ // turn 1
+ MESSAGE("Wobbuffet used Tera Blast!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TERA_BLAST, player);
+ // turn 2
+ MESSAGE("Foe Wobbuffet used Conversion 2!");
+ MESSAGE("But it failed!");
+ }
+}
+
+SINGLE_BATTLE_TEST("(TERA) Roost does not remove Flying-type ground immunity when Terastallized into the Stellar type")
+{
+ GIVEN {
+ PLAYER(SPECIES_ZAPDOS) { HP(1); TeraType(TYPE_STELLAR); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_ROOST, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_ICE_BEAM); }
+ } SCENE {
+ MESSAGE("Zapdos used Roost!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_ROOST, player);
+ MESSAGE("Foe Wobbuffet used Ice Beam!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_ICE_BEAM, opponent);
+ MESSAGE("It's super effective!");
+ }
+}
+
+SINGLE_BATTLE_TEST("(TERA) Terastallizing into the Stellar-type provides a one-time 2.0x boost to STAB moves")
+{
+ s16 damage[3];
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_STELLAR); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_EXTRASENSORY); }
+ TURN { MOVE(player, MOVE_EXTRASENSORY, gimmick: GIMMICK_TERA); }
+ TURN { MOVE(player, MOVE_EXTRASENSORY); }
+ } SCENE {
+ // turn 1
+ MESSAGE("Wobbuffet used Extrasensory!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_EXTRASENSORY, player);
+ HP_BAR(opponent, captureDamage: &damage[0]);
+ // turn 2
+ MESSAGE("Wobbuffet used Extrasensory!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_EXTRASENSORY, player);
+ HP_BAR(opponent, captureDamage: &damage[1]);
+ // turn 3
+ MESSAGE("Wobbuffet used Extrasensory!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_EXTRASENSORY, player);
+ HP_BAR(opponent, captureDamage: &damage[2]);
+ } THEN {
+ // Extrasensory goes from a 50% boost to a 100% boost for a 1.33x total multiplier
+ EXPECT_MUL_EQ(damage[0], UQ_4_12(1.33), damage[1]);
+ EXPECT_EQ(damage[0], damage[2]);
+ }
+}
+
+SINGLE_BATTLE_TEST("(TERA) Terastallizing into the Stellar-type provides a one-time 1.2x boost to non-STAB moves")
+{
+ s16 damage[3];
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_STELLAR); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_TAKE_DOWN); }
+ TURN { MOVE(player, MOVE_TAKE_DOWN, gimmick: GIMMICK_TERA); }
+ TURN { MOVE(player, MOVE_TAKE_DOWN); }
+ } SCENE {
+ // turn 1
+ MESSAGE("Wobbuffet used Take Down!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TAKE_DOWN, player);
+ HP_BAR(opponent, captureDamage: &damage[0]);
+ // turn 2
+ MESSAGE("Wobbuffet used Take Down!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TAKE_DOWN, player);
+ HP_BAR(opponent, captureDamage: &damage[1]);
+ // turn 3
+ MESSAGE("Wobbuffet used Take Down!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TAKE_DOWN, player);
+ HP_BAR(opponent, captureDamage: &damage[2]);
+ } THEN {
+ EXPECT_MUL_EQ(damage[0], UQ_4_12(1.2), damage[1]);
+ EXPECT_EQ(damage[0], damage[2]);
+ }
+}
+
+SINGLE_BATTLE_TEST("(TERA) Terastallizing into the Stellar type boosts all moves up to 60 BP once per type")
+{
+ s16 damage[4];
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_MEGA_DRAIN].power == 40);
+ ASSUME(gMovesInfo[MOVE_BUBBLE].power == 40);
+ PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_STELLAR); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_MEGA_DRAIN); }
+ TURN { MOVE(player, MOVE_MEGA_DRAIN, gimmick: GIMMICK_TERA); }
+ TURN { MOVE(player, MOVE_MEGA_DRAIN); }
+ TURN { MOVE(player, MOVE_BUBBLE); }
+ } SCENE {
+ // turn 1
+ MESSAGE("Wobbuffet used Mega Drain!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_MEGA_DRAIN, player);
+ HP_BAR(opponent, captureDamage: &damage[0]);
+ // turn 2
+ MESSAGE("Wobbuffet used Mega Drain!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_MEGA_DRAIN, player);
+ HP_BAR(opponent, captureDamage: &damage[1]);
+ // turn 3
+ MESSAGE("Wobbuffet used Mega Drain!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_MEGA_DRAIN, player);
+ HP_BAR(opponent, captureDamage: &damage[2]);
+ // turn 4
+ MESSAGE("Wobbuffet used Bubble!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_BUBBLE, player);
+ HP_BAR(opponent, captureDamage: &damage[3]);
+ } THEN {
+ // The jump from 40 BP to 72 BP (60 * 1.2x) is a 1.8x boost.
+ EXPECT_MUL_EQ(damage[0], Q_4_12(1.8), damage[1]);
+ EXPECT_EQ(damage[0], damage[2]);
+ EXPECT_EQ(damage[1], damage[3]);
+ }
+}
+
+SINGLE_BATTLE_TEST("(TERA) Protean cannot change the type of a Terastallized Pokemon")
+{
+ GIVEN {
+ PLAYER(SPECIES_GRENINJA) { Ability(ABILITY_PROTEAN); TeraType(TYPE_GRASS); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_BUBBLE, gimmick: GIMMICK_TERA);
+ MOVE(opponent, MOVE_EMBER); }
+ } SCENE {
+ MESSAGE("Greninja used Bubble!");
+ MESSAGE("Foe Wobbuffet used Ember!");
+ MESSAGE("It's super effective!");
+ }
+}
+
+SINGLE_BATTLE_TEST("(TERA) Status moves don't expend Stellar's one-time type boost")
+{
+ s16 damage[2];
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_STELLAR); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_GROWL, gimmick: GIMMICK_TERA); }
+ TURN { MOVE(player, MOVE_TAKE_DOWN); }
+ TURN { MOVE(player, MOVE_TAKE_DOWN); }
+ } SCENE {
+ // turn 1
+ MESSAGE("Wobbuffet used Growl!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_GROWL, player);
+ // turn 2
+ MESSAGE("Wobbuffet used Take Down!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TAKE_DOWN, player);
+ HP_BAR(opponent, captureDamage: &damage[0]);
+ // turn 3
+ MESSAGE("Wobbuffet used Take Down!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TAKE_DOWN, player);
+ HP_BAR(opponent, captureDamage: &damage[1]);
+ } THEN {
+ EXPECT_MUL_EQ(damage[1], UQ_4_12(1.20), damage[0]);
+ }
+}
+
+SINGLE_BATTLE_TEST("(TERA) Stellar type's one-time boost factors in dynamically-typed moves")
+{
+ s16 damage[4];
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_WEATHER_BALL].type == TYPE_NORMAL);
+ PLAYER(SPECIES_PELIPPER) { Ability(ABILITY_DRIZZLE); TeraType(TYPE_STELLAR); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_WEATHER_BALL, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_RECOVER); }
+ TURN { MOVE(player, MOVE_TAKE_DOWN); MOVE(opponent, MOVE_RECOVER); }
+ TURN { MOVE(player, MOVE_TAKE_DOWN); MOVE(opponent, MOVE_RECOVER); }
+ TURN { MOVE(player, MOVE_WATER_PULSE); MOVE(opponent, MOVE_RECOVER); }
+ TURN { MOVE(player, MOVE_WATER_PULSE); MOVE(opponent, MOVE_RECOVER); }
+ } SCENE {
+ MESSAGE("Pelipper used Weather Ball!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_WEATHER_BALL, player);
+ // turn 2
+ MESSAGE("Pelipper used Take Down!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TAKE_DOWN, player);
+ HP_BAR(opponent, captureDamage: &damage[0]);
+ // turn 3
+ MESSAGE("Pelipper used Take Down!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TAKE_DOWN, player);
+ HP_BAR(opponent, captureDamage: &damage[1]);
+ // turn 4
+ MESSAGE("Pelipper used Water Pulse!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_PULSE, player);
+ HP_BAR(opponent, captureDamage: &damage[2]);
+ // turn 5
+ MESSAGE("Pelipper used Water Pulse!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_WATER_PULSE, player);
+ HP_BAR(opponent, captureDamage: &damage[3]);
+ } THEN {
+ // Take Down should have a Normal type boost applied
+ EXPECT_MUL_EQ(damage[1], UQ_4_12(1.20), damage[0]);
+ // Water Pulse should not have a Water type boost applied
+ EXPECT_EQ(damage[3], damage[2]);
+ }
+}
+
+SINGLE_BATTLE_TEST("(TERA) Terapagos retains the Stellar type boost at all times")
+{
+ s16 damage[2];
+ u32 move;
+ PARAMETRIZE { move = MOVE_TACKLE; }
+ PARAMETRIZE { move = MOVE_MACH_PUNCH; }
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_TACKLE].type == TYPE_NORMAL);
+ ASSUME(gMovesInfo[MOVE_MACH_PUNCH].type != TYPE_NORMAL);
+ PLAYER(SPECIES_TERAPAGOS);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, move, gimmick: GIMMICK_TERA); }
+ TURN { MOVE(player, move); }
+ } SCENE {
+ HP_BAR(opponent, captureDamage: &damage[0]);
+ HP_BAR(opponent, captureDamage: &damage[1]);
+ } THEN {
+ EXPECT_EQ(damage[0], damage[1]);
+ }
+}
+
+SINGLE_BATTLE_TEST("(TERA) Terapagos retains its base defensive profile when Terastalizing")
+{
+ GIVEN {
+ PLAYER(SPECIES_TERAPAGOS);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_BRICK_BREAK); }
+ } SCENE {
+ MESSAGE("It's super effective!");
+ }
+}
+
+SINGLE_BATTLE_TEST("(TERA) Illusion breaks if the pokemon Terastalizes")
+{
+ KNOWN_FAILING; // #5015
+ u32 species;
+ PARAMETRIZE { species = SPECIES_TERAPAGOS; }
+ PARAMETRIZE { species = SPECIES_WOBBUFFET; }
+ GIVEN {
+ PLAYER(SPECIES_ZOROARK) { TeraType(TYPE_DARK); }
+ PLAYER(species);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); }
+ } SCENE {
+ MESSAGE("Zoroark's Illusion wore off!");
+ }
+}
+
+/*
+// This test freezes the emulator
+SINGLE_BATTLE_TEST("(TERA) Transformed pokemon can't Terastalize")
+{
+ GIVEN {
+ PLAYER(SPECIES_DITTO);
+ OPPONENT(SPECIES_TERAPAGOS) { Moves(MOVE_CELEBRATE); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_TRANSFORM); }
+ TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); }
+ }
+}
+*/
+
+SINGLE_BATTLE_TEST("(TERA) Pokemon with Tera forms change upon Terastallizing")
+{
+ u32 species, targetSpecies;
+ PARAMETRIZE { species = SPECIES_OGERPON_TEAL_MASK; targetSpecies = SPECIES_OGERPON_TEAL_MASK_TERA; }
+ PARAMETRIZE { species = SPECIES_OGERPON_WELLSPRING_MASK; targetSpecies = SPECIES_OGERPON_WELLSPRING_MASK_TERA; }
+ PARAMETRIZE { species = SPECIES_OGERPON_HEARTHFLAME_MASK; targetSpecies = SPECIES_OGERPON_HEARTHFLAME_MASK_TERA; }
+ PARAMETRIZE { species = SPECIES_OGERPON_CORNERSTONE_MASK; targetSpecies = SPECIES_OGERPON_CORNERSTONE_MASK_TERA; }
+ PARAMETRIZE { species = SPECIES_TERAPAGOS_TERASTAL; targetSpecies = SPECIES_TERAPAGOS_STELLAR; }
+ GIVEN {
+ PLAYER(species);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); }
+ } THEN {
+ EXPECT_EQ(player->species, targetSpecies);
+ }
+}
+
+SINGLE_BATTLE_TEST("(TERA) All type indicators function correctly")
+{
+ u32 type;
+ PARAMETRIZE { type = TYPE_NONE; }
+ PARAMETRIZE { type = TYPE_NORMAL; }
+ PARAMETRIZE { type = TYPE_FIGHTING; }
+ PARAMETRIZE { type = TYPE_FLYING; }
+ PARAMETRIZE { type = TYPE_POISON; }
+ PARAMETRIZE { type = TYPE_GROUND; }
+ PARAMETRIZE { type = TYPE_ROCK; }
+ PARAMETRIZE { type = TYPE_BUG; }
+ PARAMETRIZE { type = TYPE_GHOST; }
+ PARAMETRIZE { type = TYPE_STEEL; }
+ PARAMETRIZE { type = TYPE_MYSTERY; }
+ PARAMETRIZE { type = TYPE_FIRE; }
+ PARAMETRIZE { type = TYPE_WATER; }
+ PARAMETRIZE { type = TYPE_GRASS; }
+ PARAMETRIZE { type = TYPE_ELECTRIC; }
+ PARAMETRIZE { type = TYPE_PSYCHIC; }
+ PARAMETRIZE { type = TYPE_ICE; }
+ PARAMETRIZE { type = TYPE_DRAGON; }
+ PARAMETRIZE { type = TYPE_DARK; }
+ PARAMETRIZE { type = TYPE_FAIRY; }
+ PARAMETRIZE { type = TYPE_STELLAR; }
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET) { TeraType(type); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); }
+ }
+}
+
+SINGLE_BATTLE_TEST("(TERA) All type indicators function correctly - Opponent")
+{
+ u32 type;
+ PARAMETRIZE { type = TYPE_NONE; }
+ PARAMETRIZE { type = TYPE_NORMAL; }
+ PARAMETRIZE { type = TYPE_FIGHTING; }
+ PARAMETRIZE { type = TYPE_FLYING; }
+ PARAMETRIZE { type = TYPE_POISON; }
+ PARAMETRIZE { type = TYPE_GROUND; }
+ PARAMETRIZE { type = TYPE_ROCK; }
+ PARAMETRIZE { type = TYPE_BUG; }
+ PARAMETRIZE { type = TYPE_GHOST; }
+ PARAMETRIZE { type = TYPE_STEEL; }
+ PARAMETRIZE { type = TYPE_MYSTERY; }
+ PARAMETRIZE { type = TYPE_FIRE; }
+ PARAMETRIZE { type = TYPE_WATER; }
+ PARAMETRIZE { type = TYPE_GRASS; }
+ PARAMETRIZE { type = TYPE_ELECTRIC; }
+ PARAMETRIZE { type = TYPE_PSYCHIC; }
+ PARAMETRIZE { type = TYPE_ICE; }
+ PARAMETRIZE { type = TYPE_DRAGON; }
+ PARAMETRIZE { type = TYPE_DARK; }
+ PARAMETRIZE { type = TYPE_FAIRY; }
+ PARAMETRIZE { type = TYPE_STELLAR; }
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET) { TeraType(type); }
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); }
+ }
+}
diff --git a/test/battle/gimmick/zmove.c b/test/battle/gimmick/zmove.c
new file mode 100644
index 000000000000..51c65161061d
--- /dev/null
+++ b/test/battle/gimmick/zmove.c
@@ -0,0 +1,620 @@
+#include "global.h"
+#include "test/battle.h"
+#include "constants/battle_z_move_effects.h"
+
+// Basic Functionality
+SINGLE_BATTLE_TEST("(Z-MOVE) Z-Moves do not retain priority")
+{
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_QUICK_ATTACK].type == TYPE_NORMAL);
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_TACKLE);
+ MOVE(player, MOVE_QUICK_ATTACK, gimmick: GIMMICK_Z_MOVE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_BREAKNECK_BLITZ, player);
+ }
+}
+
+SINGLE_BATTLE_TEST("(Z-MOVE) Z-Moves are not affected by -ate abilities")
+{
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_TACKLE].type == TYPE_NORMAL);
+ ASSUME(gSpeciesInfo[SPECIES_SWELLOW].types[1] == TYPE_FLYING);
+ PLAYER(SPECIES_AURORUS) { Ability(ABILITY_REFRIGERATE); Item(ITEM_NORMALIUM_Z); }
+ OPPONENT(SPECIES_SWELLOW);
+ } WHEN {
+ TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_Z_MOVE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_BREAKNECK_BLITZ, player);
+ NOT { MESSAGE("It's super effective!"); }
+ }
+}
+
+SINGLE_BATTLE_TEST("(Z-MOVE) Z-Moves are affected by Ion Deluge")
+{
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_TACKLE].type == TYPE_NORMAL);
+ ASSUME(gMovesInfo[MOVE_ION_DELUGE].effect == EFFECT_ION_DELUGE);
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); }
+ OPPONENT(SPECIES_SWELLOW);
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_ION_DELUGE); MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_Z_MOVE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_BREAKNECK_BLITZ, player);
+ MESSAGE("It's super effective!");
+ }
+}
+
+SINGLE_BATTLE_TEST("(Z-MOVE) Z-Moves deal 1/4 damage through protect", s16 damage)
+{
+ bool32 protected;
+ PARAMETRIZE { protected = TRUE; }
+ PARAMETRIZE { protected = FALSE; }
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_TACKLE].type == TYPE_NORMAL);
+ ASSUME(gMovesInfo[MOVE_PROTECT].effect == EFFECT_PROTECT);
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ if (protected)
+ TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_Z_MOVE); MOVE(opponent, MOVE_PROTECT); }
+ else
+ TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_Z_MOVE); }
+ } SCENE {
+ HP_BAR(opponent, captureDamage: &results[i].damage);
+ } FINALLY {
+ EXPECT_MUL_EQ(results[0].damage, Q_4_12(4), results[1].damage);
+ }
+}
+
+// Status Z-Effects
+SINGLE_BATTLE_TEST("(Z-MOVE) Z_EFFECT_RESET_STATS clears a battler's negative stat stages")
+{
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_LEECH_SEED].zMove.effect == Z_EFFECT_RESET_STATS);
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_GRASSIUM_Z); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_SWORDS_DANCE); MOVE(opponent, MOVE_SCREECH); }
+ TURN { MOVE(player, MOVE_LEECH_SEED, gimmick: GIMMICK_Z_MOVE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, player);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_LEECH_SEED, player);
+ } THEN {
+ EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 2);
+ EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE);
+ }
+}
+
+SINGLE_BATTLE_TEST("(Z-MOVE) Z_EFFECT_ALL_STATS_UP raises all of a battler's stat stages by one")
+{
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_CELEBRATE].type == TYPE_NORMAL);
+ ASSUME(gMovesInfo[MOVE_CELEBRATE].zMove.effect == Z_EFFECT_ALL_STATS_UP_1);
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_CELEBRATE, gimmick: GIMMICK_Z_MOVE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, player);
+ } THEN {
+ EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 1);
+ EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE + 1);
+ EXPECT_EQ(player->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + 1);
+ EXPECT_EQ(player->statStages[STAT_SPDEF], DEFAULT_STAT_STAGE + 1);
+ EXPECT_EQ(player->statStages[STAT_SPEED], DEFAULT_STAT_STAGE + 1);
+ }
+}
+
+SINGLE_BATTLE_TEST("(Z-MOVE) Z_EFFECT_BOOST_CRITS raises a battler's critical hit ratio")
+{
+ PASSES_RANDOMLY(1, 2, RNG_CRITICAL_HIT);
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_FORESIGHT].type == TYPE_NORMAL);
+ ASSUME(gMovesInfo[MOVE_FORESIGHT].zMove.effect == Z_EFFECT_BOOST_CRITS);
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_FORESIGHT, gimmick: GIMMICK_Z_MOVE); }
+ TURN { MOVE(player, MOVE_TACKLE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_FORESIGHT, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player);
+ MESSAGE("A critical hit!");
+ }
+}
+
+DOUBLE_BATTLE_TEST("(Z-MOVE) Z_EFFECT_FOLLOW_ME redirects attacks to the user")
+{
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_DESTINY_BOND].type == TYPE_GHOST);
+ ASSUME(gMovesInfo[MOVE_DESTINY_BOND].zMove.effect == Z_EFFECT_FOLLOW_ME);
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_GHOSTIUM_Z); }
+ PLAYER(SPECIES_WYNAUT);
+ OPPONENT(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WYNAUT);
+ } WHEN {
+ TURN { MOVE(playerLeft, MOVE_DESTINY_BOND, gimmick: GIMMICK_Z_MOVE);
+ MOVE(opponentLeft, MOVE_TACKLE, target: playerRight); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, playerLeft);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DESTINY_BOND, playerLeft);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentLeft);
+ NOT { HP_BAR(playerRight); }
+ HP_BAR(playerLeft);
+ }
+}
+
+SINGLE_BATTLE_TEST("(Z-MOVE) Z_EFFECT_RESTORE_REPLACEMENT_HP fully heals the replacement battler's HP")
+{
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_PARTING_SHOT].type == TYPE_DARK);
+ ASSUME(gMovesInfo[MOVE_PARTING_SHOT].zMove.effect == Z_EFFECT_RESTORE_REPLACEMENT_HP);
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_DARKINIUM_Z); }
+ PLAYER(SPECIES_WYNAUT) { HP(1); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_PARTING_SHOT, gimmick: GIMMICK_Z_MOVE); SEND_OUT(player, 1); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_PARTING_SHOT, player);
+ HP_BAR(player);
+ } THEN {
+ EXPECT_EQ(player->species, SPECIES_WYNAUT);
+ EXPECT_EQ(player->hp, player->maxHP);
+ }
+}
+
+// This tests the functionality of Z_EFFECT_RECOVER_HP and Z_EFFECT_ATK_UP_1 (and thus by extension all stat-up Z-effects)
+SINGLE_BATTLE_TEST("(Z-MOVE) Z_EFFECT_CURSE activates Z_EFFECT_RECOVER_HP or Z_EFFECT_ATK_UP_1 depending on the type of the battler")
+{
+ u32 species;
+ PARAMETRIZE { species = SPECIES_WOBBUFFET; }
+ PARAMETRIZE { species = SPECIES_DUSCLOPS; }
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_CURSE].type == TYPE_GHOST);
+ ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[0] != TYPE_GHOST);
+ ASSUME(gSpeciesInfo[SPECIES_WOBBUFFET].types[1] != TYPE_GHOST);
+ ASSUME(gSpeciesInfo[SPECIES_DUSCLOPS].types[0] == TYPE_GHOST);
+ ASSUME(gMovesInfo[MOVE_CURSE].zMove.effect == Z_EFFECT_CURSE);
+ PLAYER(species) { Item(ITEM_GHOSTIUM_Z); HP(1); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_CURSE, gimmick: GIMMICK_Z_MOVE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player);
+ if (species == SPECIES_DUSCLOPS) {
+ HP_BAR(player);
+ NOT { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player); }
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_CURSE, player);
+ HP_BAR(player);
+ } else {
+ NOT { HP_BAR(player); }
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_CURSE, player);
+ NOT { HP_BAR(player); }
+ }
+ } THEN {
+ if (species == SPECIES_DUSCLOPS) {
+ EXPECT_MUL_EQ(player->maxHP, UQ_4_12(0.50), player->hp); // heal to full HP then cut by half
+ EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE);
+ } else {
+ EXPECT_EQ(player->hp, 1);
+ EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 2); // +1 from Curse, +1 from Z-Effect
+ }
+ }
+}
+
+// Specific Z-Move Interactions
+SINGLE_BATTLE_TEST("(Z-MOVE) Z-Mirror Move raises the user's attack by two stages and copies the last used non-status move as a Z-Move")
+{
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_MIRROR_MOVE].type == TYPE_FLYING);
+ ASSUME(gMovesInfo[MOVE_MIRROR_MOVE].zMove.effect == Z_EFFECT_ATK_UP_2);
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_FLYINIUM_Z); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_TACKLE); MOVE(player, MOVE_MIRROR_MOVE, gimmick: GIMMICK_Z_MOVE); }
+ TURN { MOVE(player, MOVE_TACKLE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_BREAKNECK_BLITZ, player);
+ // extra turn to make sure that everything resets properly
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, player);
+ } THEN {
+ EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 2);
+ }
+}
+
+SINGLE_BATTLE_TEST("(Z-MOVE) Z-Mirror Move raises the user's attack by two stages and copies the last used status move regularly")
+{
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_MIRROR_MOVE].type == TYPE_FLYING);
+ ASSUME(gMovesInfo[MOVE_MIRROR_MOVE].zMove.effect == Z_EFFECT_ATK_UP_2);
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_FLYINIUM_Z); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_SCREECH); MOVE(player, MOVE_MIRROR_MOVE, gimmick: GIMMICK_Z_MOVE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SCREECH, opponent);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SCREECH, player);
+ } THEN {
+ EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 2); // Z-Screech would cause an additional attack stat stage (reaching +3)
+ }
+}
+
+SINGLE_BATTLE_TEST("(Z-MOVE) Z-Copycat raises the user's accuracy by one stage and copies the last used non-status move as a Z-Move")
+{
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_COPYCAT].type == TYPE_NORMAL);
+ ASSUME(gMovesInfo[MOVE_COPYCAT].zMove.effect == Z_EFFECT_ACC_UP_1);
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_TACKLE); MOVE(player, MOVE_COPYCAT, gimmick: GIMMICK_Z_MOVE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_BREAKNECK_BLITZ, player);
+ } THEN {
+ EXPECT_EQ(player->statStages[STAT_ACC], DEFAULT_STAT_STAGE + 1);
+ }
+}
+
+SINGLE_BATTLE_TEST("(Z-MOVE) Z-Me First raises the user's speed by two stages and copies the last used non-status move as a Z-Move with boosted damage", s16 damage)
+{
+ u32 meFirst;
+ PARAMETRIZE { meFirst = TRUE; }
+ PARAMETRIZE { meFirst = FALSE; }
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_ME_FIRST].type == TYPE_NORMAL);
+ ASSUME(gMovesInfo[MOVE_ME_FIRST].zMove.effect == Z_EFFECT_SPD_UP_2);
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ if (meFirst)
+ TURN { MOVE(player, MOVE_ME_FIRST, gimmick: GIMMICK_Z_MOVE); MOVE(opponent, MOVE_TACKLE); }
+ else
+ TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_Z_MOVE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player);
+ if (meFirst)
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_BREAKNECK_BLITZ, player);
+ HP_BAR(opponent, captureDamage: &results[i].damage);
+ } THEN {
+ if (meFirst)
+ EXPECT_EQ(player->statStages[STAT_SPEED], DEFAULT_STAT_STAGE + 2);
+ } FINALLY {
+ EXPECT_MUL_EQ(results[1].damage, UQ_4_12(1.50), results[0].damage);
+ }
+}
+
+SINGLE_BATTLE_TEST("(Z-MOVE) Z-Nature Power transforms into different Z-Moves based on the current terrain")
+{
+ u32 terrainMove = MOVE_NONE;
+ u32 zMove = MOVE_NONE;
+ PARAMETRIZE { terrainMove = MOVE_ELECTRIC_TERRAIN; zMove = gTypesInfo[TYPE_ELECTRIC].zMove; }
+ PARAMETRIZE { terrainMove = MOVE_PSYCHIC_TERRAIN; zMove = gTypesInfo[TYPE_PSYCHIC].zMove; }
+ PARAMETRIZE { terrainMove = MOVE_GRASSY_TERRAIN; zMove = gTypesInfo[TYPE_GRASS].zMove; }
+ PARAMETRIZE { terrainMove = MOVE_MISTY_TERRAIN; zMove = gTypesInfo[TYPE_FAIRY].zMove; }
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_NATURE_POWER].type == TYPE_NORMAL);
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, terrainMove); }
+ TURN { MOVE(player, MOVE_NATURE_POWER, gimmick: GIMMICK_Z_MOVE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, terrainMove, player);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player);
+ ANIMATION(ANIM_TYPE_MOVE, zMove, player);
+ }
+}
+
+SINGLE_BATTLE_TEST("(Z-MOVE) Z-Hidden Power always transforms into Breakneck Blitz")
+{
+ u8 iv;
+ PARAMETRIZE { iv = 0; } // test different Hidden Power types
+ PARAMETRIZE { iv = 10; }
+ PARAMETRIZE { iv = 21; }
+ PARAMETRIZE { iv = 31; }
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_HIDDEN_POWER].type == TYPE_NORMAL);
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); AttackIV(iv); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_HIDDEN_POWER, gimmick: GIMMICK_Z_MOVE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_BREAKNECK_BLITZ, player);
+ }
+}
+
+SINGLE_BATTLE_TEST("(Z-MOVE) Z-Weather Ball transforms into different Z-Moves based on current weather")
+{
+ u32 weatherMove = MOVE_NONE;
+ u32 zMove = MOVE_NONE;
+ PARAMETRIZE { weatherMove = MOVE_RAIN_DANCE; zMove = gTypesInfo[TYPE_WATER].zMove; }
+ PARAMETRIZE { weatherMove = MOVE_SUNNY_DAY; zMove = gTypesInfo[TYPE_FIRE].zMove; }
+ PARAMETRIZE { weatherMove = MOVE_SANDSTORM; zMove = gTypesInfo[TYPE_ROCK].zMove; }
+ PARAMETRIZE { weatherMove = MOVE_HAIL; zMove = gTypesInfo[TYPE_ICE].zMove; }
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_WEATHER_BALL].type == TYPE_NORMAL);
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, weatherMove); }
+ TURN { MOVE(player, MOVE_WEATHER_BALL, gimmick: GIMMICK_Z_MOVE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, weatherMove, player);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player);
+ ANIMATION(ANIM_TYPE_MOVE, zMove, player);
+ }
+}
+
+SINGLE_BATTLE_TEST("(Z-MOVE) Z-Sleep Talk transforms a used non-status move into a Z-Move")
+{
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_SLEEP_TALK].type == TYPE_NORMAL);
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); Status1(STATUS1_SLEEP); Moves(MOVE_SLEEP_TALK, MOVE_ABSORB); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_SLEEP_TALK, gimmick: GIMMICK_Z_MOVE); }
+ TURN { MOVE(player, MOVE_SLEEP_TALK); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_BLOOM_DOOM, player);
+ }
+}
+
+SINGLE_BATTLE_TEST("(Z-MOVE) Z-Sleep Talk turns Weather Ball into Breakneck Blitz even under rain")
+{
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_SLEEP_TALK].type == TYPE_NORMAL);
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); Status1(STATUS1_SLEEP); Moves(MOVE_SLEEP_TALK, MOVE_WEATHER_BALL); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_RAIN_DANCE); MOVE(player, MOVE_SLEEP_TALK, gimmick: GIMMICK_Z_MOVE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_RAIN_DANCE, opponent);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_BREAKNECK_BLITZ, player);
+ }
+}
+
+// Miscellaneous Interactions
+DOUBLE_BATTLE_TEST("(Z-MOVE) Instruct fails if the target last used a Z-Move")
+{
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_TACKLE].type == TYPE_NORMAL);
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_NORMALIUM_Z); }
+ PLAYER(SPECIES_WYNAUT);
+ OPPONENT(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WYNAUT);
+ } WHEN {
+ TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft, gimmick: GIMMICK_Z_MOVE);
+ MOVE(playerRight, MOVE_INSTRUCT, target: playerLeft); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, playerLeft);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_BREAKNECK_BLITZ, playerLeft);
+ MESSAGE("Wynaut used Instruct!");
+ MESSAGE("But it failed!");
+ }
+}
+
+DOUBLE_BATTLE_TEST("(Z-MOVE) Dancer does not use a Z-Move if the battler has used a Z-Move the same turn")
+{
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_TACKLE].type == TYPE_NORMAL);
+ PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_DANCER); Item(ITEM_NORMALIUM_Z); }
+ PLAYER(SPECIES_WYNAUT);
+ OPPONENT(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WYNAUT);
+ } WHEN {
+ TURN { MOVE(playerLeft, MOVE_TACKLE, target: opponentLeft, gimmick: GIMMICK_Z_MOVE);
+ MOVE(playerRight, MOVE_FIERY_DANCE, target: opponentRight); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, playerLeft);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_BREAKNECK_BLITZ, playerLeft);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_FIERY_DANCE, playerRight);
+ ABILITY_POPUP(playerLeft);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_FIERY_DANCE, playerLeft);
+ }
+}
+
+// Signature Z-Moves
+SINGLE_BATTLE_TEST("(Z-MOVE) Light That Burns the Sky uses the battler's highest attacking stat", s16 damage)
+{
+ bool32 useSwordsDance;
+ PARAMETRIZE { useSwordsDance = FALSE; }
+ PARAMETRIZE { useSwordsDance = TRUE; }
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_SWORDS_DANCE].effect == EFFECT_ATTACK_UP_2);
+ PLAYER(SPECIES_NECROZMA_DUSK_MANE) { Item(ITEM_ULTRANECROZIUM_Z); }
+ OPPONENT(SPECIES_WOBBUFFET) { HP(1000); MaxHP(1000); }; // hits hard lol
+ } WHEN {
+ TURN { MOVE(player, MOVE_TACKLE, gimmick: GIMMICK_ULTRA_BURST); }
+ if (useSwordsDance)
+ TURN { MOVE(player, MOVE_SWORDS_DANCE); }
+ TURN { MOVE(player, MOVE_PHOTON_GEYSER, gimmick: GIMMICK_Z_MOVE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ULTRA_BURST, player); // implicitly testing double gimmicks :^)
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_LIGHT_THAT_BURNS_THE_SKY, player);
+ HP_BAR(opponent, captureDamage: &results[i].damage);
+ } FINALLY {
+ EXPECT_MUL_EQ(results[0].damage, UQ_4_12(2.0), results[1].damage);
+ }
+}
+
+SINGLE_BATTLE_TEST("(Z-MOVE) 10,000,000 Volt Thunderbolt has an increased critical hit ratio")
+{
+ PASSES_RANDOMLY(1, 2, RNG_CRITICAL_HIT);
+ GIVEN {
+ ASSUME(B_CRIT_CHANCE >= GEN_6);
+ ASSUME(gMovesInfo[MOVE_10_000_000_VOLT_THUNDERBOLT].criticalHitStage == 2);
+ PLAYER(SPECIES_PIKACHU_PARTNER_CAP) { Item(ITEM_PIKASHUNIUM_Z); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_THUNDERBOLT, gimmick: GIMMICK_Z_MOVE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_10_000_000_VOLT_THUNDERBOLT, player);
+ MESSAGE("A critical hit!");
+ }
+}
+
+SINGLE_BATTLE_TEST("(Z-MOVE) Stoked Sparksurfer paralyzes the target")
+{
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_STOKED_SPARKSURFER].additionalEffects[0].moveEffect == MOVE_EFFECT_PARALYSIS);
+ PLAYER(SPECIES_RAICHU_ALOLA) { Item(ITEM_ALORAICHIUM_Z); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_THUNDERBOLT, gimmick: GIMMICK_Z_MOVE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_STOKED_SPARKSURFER, player);
+ STATUS_ICON(opponent, STATUS1_PARALYSIS);
+ }
+}
+
+SINGLE_BATTLE_TEST("(Z-MOVE) Extreme Evoboost boosts all the user's stats by two stages")
+{
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_EXTREME_EVOBOOST].effect == EFFECT_EXTREME_EVOBOOST);
+ PLAYER(SPECIES_EEVEE) { Item(ITEM_EEVIUM_Z); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_LAST_RESORT, gimmick: GIMMICK_Z_MOVE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_EXTREME_EVOBOOST, player);
+ } THEN {
+ EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 2);
+ EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE + 2);
+ EXPECT_EQ(player->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + 2);
+ EXPECT_EQ(player->statStages[STAT_SPDEF], DEFAULT_STAT_STAGE + 2);
+ EXPECT_EQ(player->statStages[STAT_SPEED], DEFAULT_STAT_STAGE + 2);
+ }
+}
+
+SINGLE_BATTLE_TEST("(Z-MOVE) Genesis Supernova sets up psychic terrain")
+{
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_GENESIS_SUPERNOVA].effect == EFFECT_HIT_SET_REMOVE_TERRAIN);
+ PLAYER(SPECIES_MEW) { Item(ITEM_MEWNIUM_Z); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_PSYCHIC, gimmick: GIMMICK_Z_MOVE); }
+ TURN { MOVE(player, MOVE_QUICK_ATTACK); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_GENESIS_SUPERNOVA, player);
+ NOT { ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, player); }
+ MESSAGE("Mew cannot use Quick Attack!");
+ }
+}
+
+SINGLE_BATTLE_TEST("(Z-MOVE) Splintered Stormshards removes terrain")
+{
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_SPLINTERED_STORMSHARDS].effect == EFFECT_HIT_SET_REMOVE_TERRAIN);
+ PLAYER(SPECIES_LYCANROC_DUSK) { Item(ITEM_LYCANIUM_Z); }
+ OPPONENT(SPECIES_TAPU_LELE) { Ability(ABILITY_PSYCHIC_SURGE); HP(1000); MaxHP(1000); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_STONE_EDGE, gimmick: GIMMICK_Z_MOVE); }
+ TURN { MOVE(player, MOVE_QUICK_ATTACK); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SPLINTERED_STORMSHARDS, player);
+ MESSAGE("The weirdness disappeared from the battlefield.");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, player);
+ HP_BAR(opponent);
+ }
+}
+
+SINGLE_BATTLE_TEST("(Z-MOVE) Clangorous Soulblaze boosts all the user's stats by one stage")
+{
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_CLANGOROUS_SOULBLAZE].additionalEffects[0].moveEffect == MOVE_EFFECT_ALL_STATS_UP);
+ PLAYER(SPECIES_KOMMO_O) { Item(ITEM_KOMMONIUM_Z); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_CLANGING_SCALES, gimmick: GIMMICK_Z_MOVE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_CLANGOROUS_SOULBLAZE, player);
+ } THEN {
+ EXPECT_EQ(player->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 1);
+ EXPECT_EQ(player->statStages[STAT_DEF], DEFAULT_STAT_STAGE + 1);
+ EXPECT_EQ(player->statStages[STAT_SPATK], DEFAULT_STAT_STAGE + 1);
+ EXPECT_EQ(player->statStages[STAT_SPDEF], DEFAULT_STAT_STAGE + 1);
+ EXPECT_EQ(player->statStages[STAT_SPEED], DEFAULT_STAT_STAGE + 1);
+ }
+}
+
+SINGLE_BATTLE_TEST("(Z-MOVE) Guardian of Alola deals 75\% of the target's current HP")
+{
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_GUARDIAN_OF_ALOLA].effect == EFFECT_GUARDIAN_OF_ALOLA);
+ PLAYER(SPECIES_TAPU_FINI) { Item(ITEM_TAPUNIUM_Z); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_NATURES_MADNESS, gimmick: GIMMICK_Z_MOVE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_GUARDIAN_OF_ALOLA, player);
+ } THEN {
+ EXPECT_MUL_EQ(opponent->maxHP, UQ_4_12(0.25), opponent->hp);
+ }
+}
+
+SINGLE_BATTLE_TEST("(Z-MOVE) Searing Sunraze Smash ignores the target's abilities")
+{
+ GIVEN {
+ PLAYER(SPECIES_SOLGALEO) { Item(ITEM_SOLGANIUM_Z); }
+ OPPONENT(SPECIES_LAPRAS) { Ability(ABILITY_BATTLE_ARMOR); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_SUNSTEEL_STRIKE, gimmick: GIMMICK_Z_MOVE, criticalHit: TRUE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ZMOVE_ACTIVATE, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SEARING_SUNRAZE_SMASH, player);
+ HP_BAR(opponent);
+ MESSAGE("A critical hit!");
+ }
+}
+
+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 ee84b2c5e0d5..e10c3e08872a 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/hold_effect/booster_energy.c b/test/battle/hold_effect/booster_energy.c
new file mode 100644
index 000000000000..a63f462b72d9
--- /dev/null
+++ b/test/battle/hold_effect/booster_energy.c
@@ -0,0 +1,211 @@
+#include "global.h"
+#include "test/battle.h"
+
+ASSUMPTIONS
+{
+ ASSUME(gItemsInfo[ITEM_BOOSTER_ENERGY].holdEffect == HOLD_EFFECT_BOOSTER_ENERGY);
+}
+
+SINGLE_BATTLE_TEST("Booster Energy will activate Quark Drive after Electric Terrain ends")
+{
+ GIVEN {
+ PLAYER(SPECIES_IRON_MOTH) { Attack(100); Defense(100); Speed(100); SpAttack(110); SpDefense(100); Ability(ABILITY_QUARK_DRIVE); Item(ITEM_BOOSTER_ENERGY); }
+ OPPONENT(SPECIES_TAPU_KOKO) { Speed(100); Ability(ABILITY_ELECTRIC_SURGE); };
+ } WHEN {
+ TURN {}
+ TURN {}
+ TURN {}
+ TURN {}
+ TURN {}
+ } SCENE {
+ ABILITY_POPUP(opponent, ABILITY_ELECTRIC_SURGE);
+ NONE_OF {
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
+ MESSAGE("Iron Moth used its Booster Energy to activate Quark Drive!");
+ MESSAGE("Iron Moth's Sp. Atk was heightened!");
+ }
+ ABILITY_POPUP(player, ABILITY_QUARK_DRIVE);
+ MESSAGE("The Electric Terrain activated Iron Moth's Quark Drive!");
+ MESSAGE("Iron Moth's Sp. Atk was heightened!");
+ MESSAGE("The electricity disappeared from the battlefield.");
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
+ ABILITY_POPUP(player, ABILITY_QUARK_DRIVE);
+ MESSAGE("Iron Moth used its Booster Energy to activate Quark Drive!");
+ MESSAGE("Iron Moth's Sp. Atk was heightened!");
+ }
+}
+
+SINGLE_BATTLE_TEST("Booster Energy will activate Protosynthesis after harsh sunlight ends")
+{
+ GIVEN {
+ PLAYER(SPECIES_RAGING_BOLT) { Attack(100); Defense(100); Speed(100); SpAttack(110); SpDefense(100); Ability(ABILITY_PROTOSYNTHESIS); Item(ITEM_BOOSTER_ENERGY); }
+ OPPONENT(SPECIES_TORKOAL) { Speed(100); Ability(ABILITY_DROUGHT); };
+ } WHEN {
+ TURN {}
+ TURN {}
+ TURN {}
+ TURN {}
+ TURN {}
+ } SCENE {
+ ABILITY_POPUP(opponent, ABILITY_DROUGHT);
+ NONE_OF {
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
+ MESSAGE("Raging Bolt used its Booster Energy to activate Protosynthesis!");
+ MESSAGE("Raging Bolt's Sp. Atk was heightened!");
+ }
+ ABILITY_POPUP(player, ABILITY_PROTOSYNTHESIS);
+ MESSAGE("The harsh sunlight activated Raging Bolt's Protosynthesis!");
+ MESSAGE("Raging Bolt's Sp. Atk was heightened!");
+ MESSAGE("The sunlight faded.");
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
+ ABILITY_POPUP(player, ABILITY_PROTOSYNTHESIS);
+ MESSAGE("Raging Bolt used its Booster Energy to activate Protosynthesis!");
+ MESSAGE("Raging Bolt's Sp. Atk was heightened!");
+ }
+}
+
+SINGLE_BATTLE_TEST("Booster Energy activates Protosynthesis and increases highest stat")
+{
+ u32 attack, defense, speed, spAttack, spDefense;
+
+ PARAMETRIZE { attack = 110; defense = 100; speed = 100; spAttack = 100; spDefense = 100; }
+ PARAMETRIZE { attack = 100; defense = 110; speed = 100; spAttack = 100; spDefense = 100; }
+ PARAMETRIZE { attack = 100; defense = 100; speed = 110; spAttack = 100; spDefense = 100; }
+ PARAMETRIZE { attack = 100; defense = 100; speed = 100; spAttack = 110; spDefense = 100; }
+ PARAMETRIZE { attack = 100; defense = 100; speed = 100; spAttack = 100; spDefense = 110; }
+
+ GIVEN {
+ PLAYER(SPECIES_RAGING_BOLT) { Attack(attack); Defense(defense); Speed(speed); SpAttack(spAttack); SpDefense(spDefense); Ability(ABILITY_PROTOSYNTHESIS); Item(ITEM_BOOSTER_ENERGY); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(50); };
+ } WHEN {
+ TURN { }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
+ ABILITY_POPUP(player, ABILITY_PROTOSYNTHESIS);
+ MESSAGE("Raging Bolt used its Booster Energy to activate Protosynthesis!");
+ if (attack == 110)
+ MESSAGE("Raging Bolt's Attack was heightened!");
+ else if (defense == 110)
+ MESSAGE("Raging Bolt's Defense was heightened!");
+ else if (speed == 110)
+ MESSAGE("Raging Bolt's Speed was heightened!");
+ else if (spAttack == 110)
+ MESSAGE("Raging Bolt's Sp. Atk was heightened!");
+ else if (spDefense == 110)
+ MESSAGE("Raging Bolt's Sp. Def was heightened!");
+ } THEN {
+ EXPECT(player->item == ITEM_NONE);
+ }
+}
+
+SINGLE_BATTLE_TEST("Booster Energy activates Quark Drive and increases highest stat")
+{
+ u32 attack, defense, speed, spAttack, spDefense;
+
+ PARAMETRIZE { attack = 110; defense = 100; speed = 100; spAttack = 100; spDefense = 100; }
+ PARAMETRIZE { attack = 100; defense = 110; speed = 100; spAttack = 100; spDefense = 100; }
+ PARAMETRIZE { attack = 100; defense = 100; speed = 110; spAttack = 100; spDefense = 100; }
+ PARAMETRIZE { attack = 100; defense = 100; speed = 100; spAttack = 110; spDefense = 100; }
+ PARAMETRIZE { attack = 100; defense = 100; speed = 100; spAttack = 100; spDefense = 110; }
+
+ GIVEN {
+ PLAYER(SPECIES_IRON_MOTH) { Attack(attack); Defense(defense); Speed(speed); SpAttack(spAttack); SpDefense(spDefense); Ability(ABILITY_QUARK_DRIVE); Item(ITEM_BOOSTER_ENERGY); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(50); };
+ } WHEN {
+ TURN { }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
+ if (attack == 110)
+ MESSAGE("Iron Moth's Attack was heightened!");
+ else if (defense == 110)
+ MESSAGE("Iron Moth's Defense was heightened!");
+ else if (speed == 110)
+ MESSAGE("Iron Moth's Speed was heightened!");
+ else if (spAttack == 110)
+ MESSAGE("Iron Moth's Sp. Atk was heightened!");
+ else if (spDefense == 110)
+ MESSAGE("Iron Moth's Sp. Def was heightened!");
+ } THEN {
+ EXPECT(player->item == ITEM_NONE);
+ }
+}
+
+SINGLE_BATTLE_TEST("Booster Energy increases special attack by 30% if it is the highest stat", s16 damage)
+{
+ u32 species;
+ u32 ability;
+ u32 item;
+
+ PARAMETRIZE { species = SPECIES_RAGING_BOLT; ability = ABILITY_PROTOSYNTHESIS; item = ITEM_NONE; }
+ PARAMETRIZE { species = SPECIES_RAGING_BOLT; ability = ABILITY_PROTOSYNTHESIS; item = ITEM_BOOSTER_ENERGY; }
+
+ PARAMETRIZE { species = SPECIES_IRON_MOTH; ability = ABILITY_QUARK_DRIVE; item = ITEM_NONE; }
+ PARAMETRIZE { species = SPECIES_IRON_MOTH; ability = ABILITY_QUARK_DRIVE; item = ITEM_BOOSTER_ENERGY; }
+
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_ROUND].category == DAMAGE_CATEGORY_SPECIAL);
+ PLAYER(species) { Attack(100); Defense(100); Speed(100); SpAttack(110); SpDefense(100); Ability(ability); Item(item); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(100); };
+ } WHEN {
+ TURN { MOVE(player, MOVE_ROUND); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_ROUND, player);
+ HP_BAR(opponent, captureDamage: &results[i].damage);
+ } FINALLY {
+ EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.3), results[1].damage);
+ }
+}
+
+SINGLE_BATTLE_TEST("Booster Energy increases special defense by 30% if it is the highest stat", s16 damage)
+{
+ u32 species;
+ u32 ability;
+ u32 item;
+
+ PARAMETRIZE { species = SPECIES_RAGING_BOLT; ability = ABILITY_PROTOSYNTHESIS; item = ITEM_NONE; }
+ PARAMETRIZE { species = SPECIES_RAGING_BOLT; ability = ABILITY_PROTOSYNTHESIS; item = ITEM_BOOSTER_ENERGY; }
+
+ PARAMETRIZE { species = SPECIES_IRON_MOTH; ability = ABILITY_QUARK_DRIVE; item = ITEM_NONE; }
+ PARAMETRIZE { species = SPECIES_IRON_MOTH; ability = ABILITY_QUARK_DRIVE; item = ITEM_BOOSTER_ENERGY; }
+
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_ROUND].category == DAMAGE_CATEGORY_SPECIAL);
+ PLAYER(species) { Attack(100); Defense(100); Speed(100); SpAttack(100); SpDefense(110); Ability(ability); Item(item); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(100); };
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_ROUND); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_ROUND, opponent);
+ HP_BAR(player, captureDamage: &results[i].damage);
+ } FINALLY {
+ EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.7), results[1].damage);
+ }
+}
+
+SINGLE_BATTLE_TEST("Booster Energy can't be flung if a Paradox species is involved")
+{
+ GIVEN {
+ ASSUME(gSpeciesInfo[SPECIES_IRON_MOTH].isParadox == TRUE);
+ PLAYER(SPECIES_IRON_MOTH);
+ OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_BOOSTER_ENERGY); }
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_FLING); }
+ } SCENE {
+ NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_FLING, opponent);
+ MESSAGE("But it failed!");
+ }
+}
+
+SINGLE_BATTLE_TEST("Booster Energy can't be tricked if a Paradox species is involved")
+{
+ GIVEN {
+ ASSUME(gSpeciesInfo[SPECIES_IRON_MOTH].isParadox == TRUE);
+ PLAYER(SPECIES_IRON_MOTH) { Item(ITEM_BERRY_JUICE); }
+ OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_BOOSTER_ENERGY); }
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_TRICK); }
+ } SCENE {
+ NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_TRICK, opponent);
+ MESSAGE("But it failed!");
+ }
+}
diff --git a/test/battle/item_effect/covert_cloak.c b/test/battle/hold_effect/covert_cloak.c
similarity index 93%
rename from test/battle/item_effect/covert_cloak.c
rename to test/battle/hold_effect/covert_cloak.c
index fc9a59bbd07e..e15bca3b9f42 100644
--- a/test/battle/item_effect/covert_cloak.c
+++ b/test/battle/hold_effect/covert_cloak.c
@@ -1,6 +1,11 @@
#include "global.h"
#include "test/battle.h"
+ASSUMPTIONS
+{
+ ASSUME(gItemsInfo[ITEM_COVERT_CLOAK].holdEffect == HOLD_EFFECT_COVERT_CLOAK);
+}
+
SINGLE_BATTLE_TEST("Covert Cloak blocks secondary effects")
{
u16 move;
@@ -94,7 +99,7 @@ SINGLE_BATTLE_TEST("Covert Cloak does not block self-targeting effects, primary
GIVEN {
ASSUME(MoveHasAdditionalEffectSelf(MOVE_POWER_UP_PUNCH, MOVE_EFFECT_ATK_PLUS_1) == TRUE);
ASSUME(MoveHasAdditionalEffectSelf(MOVE_RAPID_SPIN, MOVE_EFFECT_RAPID_SPIN) == TRUE);
- ASSUME(MoveHasAdditionalEffectSelf(MOVE_LEAF_STORM, MOVE_EFFECT_SP_ATK_TWO_DOWN) == TRUE);
+ ASSUME(MoveHasAdditionalEffectSelf(MOVE_LEAF_STORM, MOVE_EFFECT_SP_ATK_MINUS_2) == TRUE);
ASSUME(MoveHasAdditionalEffectSelf(MOVE_METEOR_ASSAULT, MOVE_EFFECT_RECHARGE) == TRUE);
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_COVERT_CLOAK); }
@@ -162,3 +167,15 @@ SINGLE_BATTLE_TEST("Covert Cloak blocks Sparkling Aria in singles")
}
}
}
+
+SINGLE_BATTLE_TEST("Covert Cloak does not prevent ability stat changes")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_COVERT_CLOAK); }
+ OPPONENT(SPECIES_ELDEGOSS) { Ability(ABILITY_COTTON_DOWN); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_TACKLE); }
+ } SCENE {
+ MESSAGE("Wobbuffet's Speed fell!");
+ }
+}
diff --git a/test/battle/hold_effect/cure_status.c b/test/battle/hold_effect/cure_status.c
index 37b88c4d07ea..d00d891e26f7 100644
--- a/test/battle/hold_effect/cure_status.c
+++ b/test/battle/hold_effect/cure_status.c
@@ -72,7 +72,7 @@ SINGLE_BATTLE_TEST("Rawst and Lum Berries cure burn")
}
}
-SINGLE_BATTLE_TEST("Aspear and Lum Berries cure freeze")
+SINGLE_BATTLE_TEST("Aspear and Lum Berries cure freeze or frostbite")
{
u16 item;
@@ -88,9 +88,9 @@ SINGLE_BATTLE_TEST("Aspear and Lum Berries cure freeze")
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_ICE_PUNCH, player);
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, opponent);
- STATUS_ICON(opponent, freeze: TRUE);
+ FREEZE_OR_FROSTBURN_STATUS(opponent, TRUE);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent);
- STATUS_ICON(opponent, freeze: FALSE);
+ FREEZE_OR_FROSTBURN_STATUS(opponent, FALSE);
}
}
@@ -249,7 +249,7 @@ SINGLE_BATTLE_TEST("Player Pokemon can be further poisoned with Toxic spikes aft
ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, opponent);
MESSAGE("Poison Spikes were scattered all around your team's feet!");
// 1st switch-in
- MESSAGE("Go! Wobbuffet!");
+ SEND_IN_MESSAGE("Wobbuffet");
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, player);
STATUS_ICON(player, poison: TRUE);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
@@ -260,7 +260,7 @@ SINGLE_BATTLE_TEST("Player Pokemon can be further poisoned with Toxic spikes aft
}
STATUS_ICON(player, poison: FALSE);
// 2nd switch-in
- MESSAGE("Go! Wynaut!");
+ SEND_IN_MESSAGE("Wynaut");
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, player);
STATUS_ICON(player, poison: TRUE);
}
diff --git a/test/battle/hold_effect/eject_pack.c b/test/battle/hold_effect/eject_pack.c
index 76402920790e..8d85a77062ae 100644
--- a/test/battle/hold_effect/eject_pack.c
+++ b/test/battle/hold_effect/eject_pack.c
@@ -20,7 +20,7 @@ SINGLE_BATTLE_TEST("Eject Pack does not cause the new Pokémon to lose HP due to
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
MESSAGE("Wobbuffet is switched out with the Eject Pack!");
- MESSAGE("Go! Wynaut!");
+ SEND_IN_MESSAGE("Wynaut");
NOT MESSAGE("Wynaut was hurt by its Life Orb!");
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent);
}
@@ -59,7 +59,7 @@ SINGLE_BATTLE_TEST("Eject Pack is triggered by self-inflicting stat decreases")
NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
MESSAGE("Wobbuffet is switched out with the Eject Pack!");
- MESSAGE("Go! Wynaut!");
+ SEND_IN_MESSAGE("Wynaut");
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent);
}
}
diff --git a/test/battle/hold_effect/mirror_herb.c b/test/battle/hold_effect/mirror_herb.c
index 135ec270b3c1..52326cc60fa0 100644
--- a/test/battle/hold_effect/mirror_herb.c
+++ b/test/battle/hold_effect/mirror_herb.c
@@ -73,3 +73,18 @@ DOUBLE_BATTLE_TEST("Mirror Herb does not trigger for Ally's Soul Heart's stat ra
EXPECT_EQ(playerLeft->statStages[STAT_SPATK], DEFAULT_STAT_STAGE);
}
}
+
+SINGLE_BATTLE_TEST("Mirror Herb copies the boost gained by an ability")
+{
+ GIVEN {
+ PLAYER(SPECIES_ZACIAN) { Ability(ABILITY_INTREPID_SWORD); }
+ OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_MIRROR_HERB); }
+ } WHEN {
+ TURN { }
+ } SCENE {
+ ABILITY_POPUP(player, ABILITY_INTREPID_SWORD);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent);
+ } THEN {
+ EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 1);
+ }
+}
diff --git a/test/battle/hold_effect/red_card.c b/test/battle/hold_effect/red_card.c
index 8d7e175ceae9..138e3a3692a9 100644
--- a/test/battle/hold_effect/red_card.c
+++ b/test/battle/hold_effect/red_card.c
@@ -394,7 +394,7 @@ SINGLE_BATTLE_TEST("Red Card activates before Emergency Exit")
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
MESSAGE("Golisopod held up its Red Card against Foe Wobbuffet!");
ABILITY_POPUP(player, ABILITY_EMERGENCY_EXIT);
- MESSAGE("Go! Wimpod!");
+ SEND_IN_MESSAGE("Wimpod");
}
}
diff --git a/test/battle/hold_effect/safety_goggles.c b/test/battle/hold_effect/safety_goggles.c
index b20f19e0a583..4c5c6a29653b 100644
--- a/test/battle/hold_effect/safety_goggles.c
+++ b/test/battle/hold_effect/safety_goggles.c
@@ -16,7 +16,7 @@ SINGLE_BATTLE_TEST("Safety Goggles block powder and spore moves")
TURN { MOVE(player, MOVE_STUN_SPORE); }
} SCENE {
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_STUN_SPORE, player);
- MESSAGE("Foe Abra is not affected thanks to its SafetyGoggles!");
+ MESSAGE("Foe Abra is not affected thanks to its Safety Goggles!");
}
}
diff --git a/test/battle/hold_effect/utility_umbrella.c b/test/battle/hold_effect/utility_umbrella.c
index e02a4fdef355..f04a77378990 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/item_effect/increase_stat.c b/test/battle/item_effect/increase_stat.c
index df36b8ff338c..4eba548961f5 100644
--- a/test/battle/item_effect/increase_stat.c
+++ b/test/battle/item_effect/increase_stat.c
@@ -63,7 +63,7 @@ SINGLE_BATTLE_TEST("X Sp. Atk sharply raises battler's Sp. Attack stat", s16 dam
if (useItem) TURN { USE_ITEM(player, ITEM_X_SP_ATK); }
TURN { MOVE(player, MOVE_DISARMING_VOICE); }
} SCENE {
- MESSAGE("Wobbuffet used DisrmngVoice!");
+ MESSAGE("Wobbuffet used Disarming Voice!");
HP_BAR(opponent, captureDamage: &results[i].damage);
} FINALLY {
if (B_X_ITEMS_BUFF >= GEN_7)
@@ -87,7 +87,7 @@ SINGLE_BATTLE_TEST("X Sp. Def sharply raises battler's Sp. Defense stat", s16 da
if (useItem) TURN { USE_ITEM(player, ITEM_X_SP_DEF); }
TURN { MOVE(opponent, MOVE_DISARMING_VOICE); }
} SCENE {
- MESSAGE("Foe Wobbuffet used DisrmngVoice!");
+ MESSAGE("Foe Wobbuffet used Disarming Voice!");
HP_BAR(player, captureDamage: &results[i].damage);
} FINALLY {
if (B_X_ITEMS_BUFF >= GEN_7)
@@ -205,7 +205,7 @@ SINGLE_BATTLE_TEST("Max Mushrooms raises battler's Sp. Attack stat", s16 damage)
if (useItem) TURN { USE_ITEM(player, ITEM_MAX_MUSHROOMS); }
TURN { MOVE(player, MOVE_DISARMING_VOICE); }
} SCENE {
- MESSAGE("Wobbuffet used DisrmngVoice!");
+ MESSAGE("Wobbuffet used Disarming Voice!");
HP_BAR(opponent, captureDamage: &results[i].damage);
} FINALLY {
EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage);
@@ -225,7 +225,7 @@ SINGLE_BATTLE_TEST("Max Mushrooms battler's Sp. Defense stat", s16 damage)
if (useItem) TURN { USE_ITEM(player, ITEM_MAX_MUSHROOMS); }
TURN { MOVE(opponent, MOVE_DISARMING_VOICE); }
} SCENE {
- MESSAGE("Foe Wobbuffet used DisrmngVoice!");
+ MESSAGE("Foe Wobbuffet used Disarming Voice!");
HP_BAR(player, captureDamage: &results[i].damage);
} FINALLY {
EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.66), results[1].damage);
diff --git a/test/battle/move.c b/test/battle/move.c
index 936a821081b6..081a91712d48 100644
--- a/test/battle/move.c
+++ b/test/battle/move.c
@@ -66,10 +66,9 @@ SINGLE_BATTLE_TEST("Turn order is determined by Speed if priority ties")
}
}
-SINGLE_BATTLE_TEST("Turn order is determined randomly if priority and Speed tie")
+SINGLE_BATTLE_TEST("Turn order is determined randomly if priority and Speed tie [singles]")
{
- KNOWN_FAILING; // The algorithm is significantly biased.
- PASSES_RANDOMLY(1, 2);
+ PASSES_RANDOMLY(1, 2, RNG_SPEED_TIE);
GIVEN {
PLAYER(SPECIES_WOBBUFFET) { Speed(1); }
OPPONENT(SPECIES_WOBBUFFET) { Speed(1); }
@@ -81,6 +80,60 @@ SINGLE_BATTLE_TEST("Turn order is determined randomly if priority and Speed tie"
}
}
+DOUBLE_BATTLE_TEST("Turn order is determined randomly if priority and Speed tie [doubles]", u32 permutations)
+{
+ PARAMETRIZE {} // Hack to make permutations legal.
+ PASSES_RANDOMLY(24, 24, RNG_SPEED_TIE);
+
+ 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);
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET) { MaxHP(480); HP(360); Defense(100); Speed(1); }
+ PLAYER(SPECIES_WYNAUT) { Speed(1); }
+ OPPONENT(SPECIES_WOBBUFFET) { Attack(100); Speed(1); }
+ OPPONENT(SPECIES_WYNAUT) { Speed(1); }
+ } WHEN {
+ 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);
diff --git a/test/battle/move_effect/body_press.c b/test/battle/move_effect/body_press.c
index d7dccf14283a..3a61c4d55dfc 100644
--- a/test/battle/move_effect/body_press.c
+++ b/test/battle/move_effect/body_press.c
@@ -4,6 +4,29 @@
ASSUMPTIONS
{
ASSUME(gMovesInfo[MOVE_BODY_PRESS].effect == EFFECT_BODY_PRESS);
+ ASSUME(gMovesInfo[MOVE_BODY_PRESS].category == DAMAGE_CATEGORY_PHYSICAL);
+}
+
+SINGLE_BATTLE_TEST("Body Press uses physical defense stat of target", s16 damage)
+{
+ u32 move;
+
+ PARAMETRIZE { move = MOVE_DRILL_PECK; }
+ PARAMETRIZE { move = MOVE_BODY_PRESS; }
+
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_DRILL_PECK].power == gMovesInfo[MOVE_BODY_PRESS].power);
+ ASSUME(gMovesInfo[MOVE_CHARM].effect == EFFECT_ATTACK_DOWN_2);
+ PLAYER(SPECIES_MEW);
+ OPPONENT(SPECIES_SHELLDER);
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_CHARM); MOVE(player, move); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, move, player);
+ HP_BAR(opponent, captureDamage: &results[i].damage);
+ } FINALLY {
+ EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[1].damage);
+ }
}
SINGLE_BATTLE_TEST("Body Press's damage depends on the user's base Defense instead of its base Attack", s16 damage)
diff --git a/test/battle/move_effect/calm_mind.c b/test/battle/move_effect/calm_mind.c
new file mode 100644
index 000000000000..66c16361f45e
--- /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 000000000000..a8728e3117af
--- /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 000000000000..0da58983c724
--- /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 0bd181cf61e8..6365215a426c 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 000000000000..e0a782b15f60
--- /dev/null
+++ b/test/battle/move_effect/charge.c
@@ -0,0 +1,9 @@
+#include "global.h"
+#include "test/battle.h"
+
+TO_DO_BATTLE_TEST("Charge doubles the damage of the next Electric move of the user");
+TO_DO_BATTLE_TEST("Charge's effect is removed regardless if the next move is Electric or not (Gen 3-8)");
+TO_DO_BATTLE_TEST("Charge's effect is kept until the user uses an Electric move (Gen 9+)");
+TO_DO_BATTLE_TEST("Charge's effect is removed if the user fails using an Electric move (Gen 9+)");
+TO_DO_BATTLE_TEST("Charge's effect does not stack with Electromorphosis");
+TO_DO_BATTLE_TEST("Charge's effect does not stack with Wind Power");
diff --git a/test/battle/move_effect/chilly_reception.c b/test/battle/move_effect/chilly_reception.c
index e3ce16c49653..a52c83eb5d52 100644
--- a/test/battle/move_effect/chilly_reception.c
+++ b/test/battle/move_effect/chilly_reception.c
@@ -19,7 +19,7 @@ SINGLE_BATTLE_TEST("Chilly Reception sets up snow and switches the user out")
ANIMATION(ANIM_TYPE_MOVE, MOVE_CHILLY_RECEPTION, player);
MESSAGE("It started to snow!");
MESSAGE("Slowking went back to 1");
- MESSAGE("Go! Slowpoke!");
+ SEND_IN_MESSAGE("Slowpoke");
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SNOW_CONTINUES);
}
}
@@ -37,7 +37,7 @@ SINGLE_BATTLE_TEST("Chilly Reception switches the user out, even if the weather
ANIMATION(ANIM_TYPE_MOVE, MOVE_CHILLY_RECEPTION, player);
MESSAGE("There is no relief from this heavy rain!");
MESSAGE("Slowking went back to 1");
- MESSAGE("Go! Slowpoke!");
+ SEND_IN_MESSAGE("Slowpoke");
MESSAGE("Rain continues to fall.");
}
}
@@ -88,3 +88,4 @@ SINGLE_BATTLE_TEST("Chilly Reception changes the weather, even if the user canno
}
}
+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 000000000000..17e57d7dd595
--- /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 000000000000..2f50aceab58a
--- /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 000000000000..ce9e8629a86d
--- /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 000000000000..ac863cf2b257
--- /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 000000000000..2e81212ef1be
--- /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 000000000000..cdc164cd0fee
--- /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 c2c921cf742f..f6a9c738e431 100644
--- a/test/battle/move_effect/corrosive_gas.c
+++ b/test/battle/move_effect/corrosive_gas.c
@@ -19,7 +19,7 @@ SINGLE_BATTLE_TEST("Corrosive Gas destroys the target's item or fails if the tar
} WHEN {
TURN { MOVE(player, MOVE_CORROSIVE_GAS); }
} SCENE {
- MESSAGE("Wobbuffet used CorrosiveGas!");
+ MESSAGE("Wobbuffet used Corrosive Gas!");
if (item == ITEM_POTION) {
ANIMATION(ANIM_TYPE_MOVE, MOVE_CORROSIVE_GAS, player);
MESSAGE("Wobbuffet corroded Foe Wobbuffet's Potion!");
@@ -40,11 +40,11 @@ SINGLE_BATTLE_TEST("Corrosive Gas doesn't destroy the item of a Pokemon with the
} WHEN {
TURN { MOVE(player, MOVE_CORROSIVE_GAS); }
} SCENE {
- MESSAGE("Wobbuffet used CorrosiveGas!");
+ MESSAGE("Wobbuffet used Corrosive Gas!");
ANIMATION(ANIM_TYPE_MOVE, MOVE_CORROSIVE_GAS, player);
NOT MESSAGE("Wobbuffet corroded Foe Wobbuffet's Potion!");
ABILITY_POPUP(opponent, ABILITY_STICKY_HOLD);
- MESSAGE("Foe Muk's Sticky Hold made CorrosiveGas ineffective!");
+ MESSAGE("Foe Muk's Sticky Hold made Corrosive Gas ineffective!");
} THEN {
EXPECT_EQ(opponent->item, ITEM_POISON_BARB);
}
@@ -59,7 +59,7 @@ SINGLE_BATTLE_TEST("Items lost to Corrosive Gas cannot be restored by Recycle")
} WHEN {
TURN { MOVE(player, MOVE_CORROSIVE_GAS); MOVE(opponent, MOVE_RECYCLE); }
} SCENE {
- MESSAGE("Wobbuffet used CorrosiveGas!");
+ MESSAGE("Wobbuffet used Corrosive Gas!");
ANIMATION(ANIM_TYPE_MOVE, MOVE_CORROSIVE_GAS, player);
MESSAGE("Wobbuffet corroded Foe Wobbuffet's Oran Berry!");
MESSAGE("Foe Wobbuffet used Recycle!");
@@ -93,7 +93,7 @@ DOUBLE_BATTLE_TEST("Corrosive Gas destroys foes and ally's items if they have on
} WHEN {
TURN { MOVE(playerRight, MOVE_CORROSIVE_GAS); }
} SCENE {
- MESSAGE("Wynaut used CorrosiveGas!");
+ MESSAGE("Wynaut used Corrosive Gas!");
if (itemPlayerLeft == ITEM_CHERI_BERRY) {
MESSAGE("Wynaut corroded Wobbuffet's Cheri Berry!");
} else {
@@ -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 000000000000..8680e9f28eb7
--- /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 000000000000..f4d3a78114b4
--- /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 2986a3ec6eea..b9be19db7f75 100644
--- a/test/battle/move_effect/court_change.c
+++ b/test/battle/move_effect/court_change.c
@@ -27,7 +27,7 @@ DOUBLE_BATTLE_TEST("Court Change swaps entry hazards used by the opponent")
MESSAGE("Foe Wobbuffet used Toxic Spikes!");
MESSAGE("Wynaut used Court Change!");
MESSAGE("Wynaut swapped the battle effects affecting each side!");
- MESSAGE("Go! Wynaut!");
+ SEND_IN_MESSAGE("Wynaut");
NONE_OF {
MESSAGE("Wynaut is hurt by spikes!");
MESSAGE("Pointed stones dug into Wynaut!");
@@ -63,7 +63,7 @@ DOUBLE_BATTLE_TEST("Court Change swaps entry hazards used by the player")
MESSAGE("Wobbuffet used Toxic Spikes!");
MESSAGE("Foe Wynaut used Court Change!");
MESSAGE("Foe Wynaut swapped the battle effects affecting each side!");
- MESSAGE("Go! Wobbuffet!");
+ SEND_IN_MESSAGE("Wobbuffet");
MESSAGE("Wobbuffet is hurt by spikes!");
MESSAGE("Pointed stones dug into Wobbuffet!");
MESSAGE("Wobbuffet was poisoned!");
@@ -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/curse.c b/test/battle/move_effect/curse.c
new file mode 100644
index 000000000000..5fe17d356101
--- /dev/null
+++ b/test/battle/move_effect/curse.c
@@ -0,0 +1,36 @@
+#include "global.h"
+#include "test/battle.h"
+
+ASSUMPTIONS
+{
+ ASSUME(gMovesInfo[MOVE_CURSE].effect == EFFECT_CURSE);
+}
+
+SINGLE_BATTLE_TEST("Curse lowers Speed, raises Attack, and raises Defense when used by non-Ghost-types")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_CURSE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_CURSE, player);
+ MESSAGE("Wobbuffet's Speed fell!");
+ MESSAGE("Wobbuffet's Attack rose!");
+ MESSAGE("Wobbuffet's Defense rose!");
+ }
+}
+
+SINGLE_BATTLE_TEST("Curse cuts the user's HP in half when used by Ghost-types")
+{
+ GIVEN {
+ PLAYER(SPECIES_MISDREAVUS);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_CURSE); }
+ } SCENE {
+ s32 maxHP = GetMonData(&PLAYER_PARTY[0], MON_DATA_MAX_HP);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_CURSE, player);
+ HP_BAR(player, hp: maxHP / 2);
+ }
+}
diff --git a/test/battle/move_effect/defog.c b/test/battle/move_effect/defog.c
index 2fe20405f645..418d28d97bed 100644
--- a/test/battle/move_effect/defog.c
+++ b/test/battle/move_effect/defog.c
@@ -158,8 +158,8 @@ DOUBLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Stealth Rock and S
MESSAGE("The sticky web has disappeared from the ground around your team!");
}
// Switch happens
- MESSAGE("Wobbuffet, that's enough! Come back!");
- MESSAGE("Go! Wobbuffet!");
+ SWITCH_OUT_MESSAGE("Wobbuffet");
+ SEND_IN_MESSAGE("Wobbuffet");
if (move != MOVE_DEFOG) {
HP_BAR(playerLeft);
MESSAGE("Pointed stones dug into Wobbuffet!");
@@ -201,8 +201,8 @@ SINGLE_BATTLE_TEST("Defog lowers evasiveness by 1 and removes Spikes from player
MESSAGE("The spikes disappeared from the ground around your team!");
}
// Switch happens
- MESSAGE("Wobbuffet, that's enough! Come back!");
- MESSAGE("Go! Wobbuffet!");
+ SWITCH_OUT_MESSAGE("Wobbuffet");
+ SEND_IN_MESSAGE("Wobbuffet");
if (move != MOVE_DEFOG) {
HP_BAR(player);
MESSAGE("Wobbuffet is hurt by spikes!");
diff --git a/test/battle/move_effect/dragon_darts.c b/test/battle/move_effect/dragon_darts.c
new file mode 100644
index 000000000000..8190f0f4bd5f
--- /dev/null
+++ b/test/battle/move_effect/dragon_darts.c
@@ -0,0 +1,189 @@
+#include "global.h"
+#include "test/battle.h"
+
+ASSUMPTIONS
+{
+ ASSUME(gMovesInfo[MOVE_DRAGON_DARTS].effect == EFFECT_DRAGON_DARTS);
+ ASSUME(gSpeciesInfo[SPECIES_CLEFAIRY].types[0] == TYPE_FAIRY || gSpeciesInfo[SPECIES_CLEFAIRY].types[1] == TYPE_FAIRY);
+}
+
+SINGLE_BATTLE_TEST("Dragon Darts strikes twice")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_DRAGON_DARTS); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, player);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, player);
+ MESSAGE("Hit 2 time(s)!");
+ }
+}
+
+DOUBLE_BATTLE_TEST("Dragon Darts strikes each opponent once in a double battle")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET);
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(playerLeft, MOVE_DRAGON_DARTS, target: opponentLeft); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft);
+ HP_BAR(opponentLeft);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft);
+ HP_BAR(opponentRight);
+ MESSAGE("Hit 2 time(s)!");
+ }
+}
+
+DOUBLE_BATTLE_TEST("Dragon Darts strikes the ally twice if the target protects")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET);
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(opponentLeft, MOVE_PROTECT); MOVE(playerLeft, MOVE_DRAGON_DARTS, target: opponentLeft); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_PROTECT, opponentLeft);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft);
+ HP_BAR(opponentRight);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft);
+ HP_BAR(opponentRight);
+ MESSAGE("Hit 2 time(s)!");
+ }
+}
+
+DOUBLE_BATTLE_TEST("Dragon Darts strikes the right ally twice if the target is a fairy type")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET);
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_CLEFAIRY);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(playerLeft, MOVE_DRAGON_DARTS, target: opponentLeft); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft);
+ HP_BAR(opponentRight);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft);
+ HP_BAR(opponentRight);
+ MESSAGE("Hit 2 time(s)!");
+ }
+}
+
+DOUBLE_BATTLE_TEST("Dragon Darts strikes the left ally twice if the target is a fairy type")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET);
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_CLEFAIRY);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(playerLeft, MOVE_DRAGON_DARTS, target: opponentRight); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft);
+ HP_BAR(opponentRight);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft);
+ HP_BAR(opponentRight);
+ MESSAGE("Hit 2 time(s)!");
+ }
+}
+
+DOUBLE_BATTLE_TEST("Dragon Darts strikes the ally twice if the target is in a semi-invulnerable turn")
+{
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_FLY].effect == EFFECT_SEMI_INVULNERABLE);
+ PLAYER(SPECIES_WOBBUFFET);
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(opponentLeft, MOVE_FLY, target: playerLeft); MOVE(playerLeft, MOVE_DRAGON_DARTS, target: opponentLeft); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_FLY, opponentLeft);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft);
+ HP_BAR(opponentRight);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft);
+ HP_BAR(opponentRight);
+ MESSAGE("Hit 2 time(s)!");
+ }
+}
+
+DOUBLE_BATTLE_TEST("Dragon Darts is not effected by Wide Guard")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET);
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(opponentLeft, MOVE_WIDE_GUARD); MOVE(playerLeft, MOVE_DRAGON_DARTS, target: opponentLeft); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_WIDE_GUARD, opponentLeft);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft);
+ HP_BAR(opponentLeft);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft);
+ HP_BAR(opponentRight);
+ MESSAGE("Hit 2 time(s)!");
+ }
+}
+
+DOUBLE_BATTLE_TEST("Dragon Darts strikes hit the ally if the target fainted")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET);
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET) { HP(1); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(playerRight, MOVE_SONIC_BOOM, target: opponentLeft); MOVE(playerLeft, MOVE_DRAGON_DARTS, target: opponentLeft); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SONIC_BOOM, playerRight);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft);
+ HP_BAR(opponentRight);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft);
+ HP_BAR(opponentRight);
+ MESSAGE("Hit 2 time(s)!");
+ }
+}
+
+DOUBLE_BATTLE_TEST("Dragon Darts strikes left ally twice if one strike misses")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET);
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_BRIGHT_POWDER); };
+ } WHEN {
+ TURN { MOVE(playerLeft, MOVE_DRAGON_DARTS, target: opponentRight, hit: FALSE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft);
+ HP_BAR(opponentLeft);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft);
+ HP_BAR(opponentLeft);
+ MESSAGE("Hit 2 time(s)!");
+ }
+}
+
+DOUBLE_BATTLE_TEST("Dragon Darts strikes right ally twice if one strike misses")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET);
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_BRIGHT_POWDER); };
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(playerLeft, MOVE_DRAGON_DARTS, target: opponentLeft, hit: FALSE); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft);
+ HP_BAR(opponentRight);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DRAGON_DARTS, playerLeft);
+ HP_BAR(opponentRight);
+ MESSAGE("Hit 2 time(s)!");
+ }
+}
diff --git a/test/battle/move_effect/embargo.c b/test/battle/move_effect/embargo.c
index a9b1b4523d1b..11e4069d80f2 100644
--- a/test/battle/move_effect/embargo.c
+++ b/test/battle/move_effect/embargo.c
@@ -220,7 +220,7 @@ SINGLE_BATTLE_TEST("Baton Pass passes Embargo's effect")
// Turn 2
MESSAGE("Wobbuffet used Baton Pass!");
ANIMATION(ANIM_TYPE_MOVE, MOVE_BATON_PASS, player);
- MESSAGE("Go! Wynaut!");
+ SEND_IN_MESSAGE("Wynaut");
// Turn 3
MESSAGE("Wynaut used Fling!");
MESSAGE("But it failed!");
@@ -342,7 +342,7 @@ SINGLE_BATTLE_TEST("Embargo doesn't prevent Mega Evolution")
} WHEN {
TURN { MOVE(player, MOVE_EMBARGO); }
TURN { MOVE(opponent, MOVE_BATON_PASS); SEND_OUT(opponent, 1); }
- TURN { MOVE(opponent, MOVE_CELEBRATE, megaEvolve: TRUE); }
+ TURN { MOVE(opponent, MOVE_CELEBRATE, gimmick: GIMMICK_MEGA); }
} SCENE {
// Turn 1
MESSAGE("Wobbuffet used Embargo!");
@@ -352,7 +352,7 @@ SINGLE_BATTLE_TEST("Embargo doesn't prevent Mega Evolution")
ANIMATION(ANIM_TYPE_MOVE, MOVE_BATON_PASS, opponent);
MESSAGE("2 sent out Charizard!");
// Turn 3
- MESSAGE("Foe Charizard's CharizarditeY is reacting to 2's Mega Ring!");
+ MESSAGE("Foe Charizard's Charizardite Y is reacting to 2's Mega Ring!");
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_MEGA_EVOLUTION, opponent);
MESSAGE("Foe Charizard has Mega Evolved into Mega Charizard!");
}
diff --git a/test/battle/move_effect/fling.c b/test/battle/move_effect/fling.c
index f6b83215a1c5..b4b25484b330 100644
--- a/test/battle/move_effect/fling.c
+++ b/test/battle/move_effect/fling.c
@@ -114,7 +114,7 @@ SINGLE_BATTLE_TEST("Fling - Item is lost even when there is no target")
TURN { MOVE(opponent, MOVE_SELF_DESTRUCT); MOVE(player, MOVE_FLING); SEND_OUT(opponent, 1); }
TURN { MOVE(player, MOVE_FLING); }
} SCENE {
- MESSAGE("Foe Wobbuffet used SelfDestruct!");
+ MESSAGE("Foe Wobbuffet used Self-Destruct!");
ANIMATION(ANIM_TYPE_MOVE, MOVE_SELF_DESTRUCT, opponent);
HP_BAR(player);
MESSAGE("Foe Wobbuffet fainted!");
diff --git a/test/battle/move_effect/focus_punch.c b/test/battle/move_effect/focus_punch.c
index 5bfb606b0ffe..355c071a948a 100644
--- a/test/battle/move_effect/focus_punch.c
+++ b/test/battle/move_effect/focus_punch.c
@@ -74,3 +74,28 @@ DOUBLE_BATTLE_TEST("Focus Punch activation is based on Speed")
MESSAGE("Foe Wobbuffet lost its focus and couldn't move!");
}
}
+
+AI_SINGLE_BATTLE_TEST("AI won't use Focus Punch if it predicts a damaging move")
+{
+ GIVEN {
+ AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT);
+ PLAYER(SPECIES_MAGNEZONE) { Moves(MOVE_THUNDER_WAVE, MOVE_FLASH_CANNON, MOVE_DISCHARGE, MOVE_TRI_ATTACK); }
+ OPPONENT(SPECIES_BRELOOM) { Moves(MOVE_FOCUS_PUNCH, MOVE_SEED_BOMB); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_DISCHARGE); EXPECT_MOVE(opponent, MOVE_FOCUS_PUNCH); }
+ TURN { MOVE(player, MOVE_DISCHARGE); EXPECT_MOVE(opponent, MOVE_SEED_BOMB); }
+ }
+}
+
+AI_SINGLE_BATTLE_TEST("AI will Incapacitate -> Substitute -> Focus Punch if able")
+{
+ GIVEN {
+ AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT);
+ PLAYER(SPECIES_MAGNEZONE) { Moves(MOVE_THUNDER_WAVE, MOVE_FLASH_CANNON, MOVE_DISCHARGE, MOVE_TRI_ATTACK); }
+ OPPONENT(SPECIES_BRELOOM) { Moves(MOVE_SPORE, MOVE_FOCUS_PUNCH, MOVE_SUBSTITUTE, MOVE_SEED_BOMB); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_DISCHARGE); EXPECT_MOVE(opponent, MOVE_SPORE); }
+ TURN { MOVE(player, MOVE_DISCHARGE); EXPECT_MOVE(opponent, MOVE_SUBSTITUTE); }
+ TURN { MOVE(player, MOVE_DISCHARGE); EXPECT_MOVE(opponent, MOVE_FOCUS_PUNCH); }
+ }
+}
diff --git a/test/battle/move_effect/foul_play.c b/test/battle/move_effect/foul_play.c
new file mode 100644
index 000000000000..cc853b48de45
--- /dev/null
+++ b/test/battle/move_effect/foul_play.c
@@ -0,0 +1,29 @@
+#include "global.h"
+#include "test/battle.h"
+
+ASSUMPTIONS
+{
+ ASSUME(gMovesInfo[MOVE_FOUL_PLAY].effect == EFFECT_FOUL_PLAY);
+}
+
+SINGLE_BATTLE_TEST("Foul Play uses physical attack stat of target", s16 damage)
+{
+ u32 move;
+
+ PARAMETRIZE { move = MOVE_HIGH_HORSEPOWER; }
+ PARAMETRIZE { move = MOVE_FOUL_PLAY; }
+
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_HIGH_HORSEPOWER].power == gMovesInfo[MOVE_FOUL_PLAY].power);
+ ASSUME(gMovesInfo[MOVE_SWORDS_DANCE].effect == EFFECT_ATTACK_UP_2);
+ PLAYER(SPECIES_SHELLDER);
+ OPPONENT(SPECIES_SHELLDER);
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_SWORDS_DANCE); MOVE(player, move); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, move, player);
+ HP_BAR(opponent, captureDamage: &results[i].damage);
+ } FINALLY {
+ EXPECT_MUL_EQ(results[0].damage, Q_4_12(2.0), results[1].damage);
+ }
+}
diff --git a/test/battle/move_effect/fury_cutter.c b/test/battle/move_effect/fury_cutter.c
index cf3871964e5b..b193882d3702 100644
--- a/test/battle/move_effect/fury_cutter.c
+++ b/test/battle/move_effect/fury_cutter.c
@@ -36,3 +36,27 @@ SINGLE_BATTLE_TEST("Fury Cutter power doubles with each use, up to 160 power")
EXPECT_EQ(damage[maxTurns - 2], damage[maxTurns - 1]);
}
}
+
+SINGLE_BATTLE_TEST("Fury Cutter counter is the same for both hits of Parental Bond")
+{
+ s16 damage[4];
+
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET) { Ability(ABILITY_PARENTAL_BOND); }
+ OPPONENT(SPECIES_REGIROCK);
+ } WHEN {
+ TURN { MOVE(player, MOVE_FURY_CUTTER); }
+ TURN { MOVE(player, MOVE_FURY_CUTTER); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_FURY_CUTTER, player);
+ HP_BAR(opponent, captureDamage: &damage[0]);
+ HP_BAR(opponent, captureDamage: &damage[1]);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_FURY_CUTTER, player);
+ HP_BAR(opponent, captureDamage: &damage[2]);
+ HP_BAR(opponent, captureDamage: &damage[3]);
+ } THEN {
+ EXPECT_MUL_EQ(damage[0], B_PARENTAL_BOND_DMG >= GEN_7 ? UQ_4_12(0.25) : UQ_4_12(0.5), damage[1]);
+ EXPECT_MUL_EQ(damage[2], B_PARENTAL_BOND_DMG >= GEN_7 ? UQ_4_12(0.25) : UQ_4_12(0.5), damage[3]);
+ EXPECT_NE(damage[0], damage[2]);
+ }
+}
diff --git a/test/battle/move_effect/gastro_acid.c b/test/battle/move_effect/gastro_acid.c
index b76cef8dc68b..e4f1aa535475 100644
--- a/test/battle/move_effect/gastro_acid.c
+++ b/test/battle/move_effect/gastro_acid.c
@@ -23,7 +23,7 @@ SINGLE_BATTLE_TEST("Gastro Acid fails if target has a banned ability")
PARAMETRIZE { species = SPECIES_CRAMORANT; ability = ABILITY_GULP_MISSILE; }
PARAMETRIZE { species = SPECIES_PALAFIN_ZERO; ability = ABILITY_ZERO_TO_HERO; }
PARAMETRIZE { species = SPECIES_TATSUGIRI; ability = ABILITY_COMMANDER; }
- // Needs confirmation since those abilities can be surpressed by Neutralizing Gas
+ // Needs confirmation since those abilities can be suppressed by Neutralizing Gas
// PARAMETRIZE { species = SPECIES_IRON_MOTH; ability = ABILITY_QUARK_DRIVE; }
// PARAMETRIZE { species = SPECIES_WALKING_WAKE; ability = ABILITY_PROTOSYNTHESIS; }
PARAMETRIZE { species = SPECIES_CALYREX_SHADOW_RIDER; ability = ABILITY_AS_ONE_SHADOW_RIDER; }
diff --git a/test/battle/move_effect/guard_split.c b/test/battle/move_effect/guard_split.c
new file mode 100644
index 000000000000..3f012ab6e2e4
--- /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
new file mode 100644
index 000000000000..743af905ce5b
--- /dev/null
+++ b/test/battle/move_effect/heal_bell.c
@@ -0,0 +1,102 @@
+#include "global.h"
+#include "test/battle.h"
+
+ASSUMPTIONS
+{
+ ASSUME(gMovesInfo[MOVE_HEAL_BELL].effect == EFFECT_HEAL_BELL);
+ ASSUME(gMovesInfo[MOVE_AROMATHERAPY].effect == EFFECT_HEAL_BELL);
+}
+
+DOUBLE_BATTLE_TEST("Heal Bell cures the entire party")
+{
+ u32 move;
+
+ PARAMETRIZE { move = MOVE_HEAL_BELL; }
+ PARAMETRIZE { move = MOVE_AROMATHERAPY; }
+
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_POISON); }
+ PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_POISON); }
+ PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_POISON); }
+ PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_POISON); }
+ PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_POISON); }
+ PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_POISON); }
+ OPPONENT(SPECIES_WYNAUT);
+ OPPONENT(SPECIES_WYNAUT);
+ } WHEN {
+ TURN { MOVE(playerLeft, move, target: playerLeft); }
+ TURN { SWITCH(playerLeft, 2); SWITCH(playerRight, 3); }
+ } SCENE {
+ int i;
+
+ ANIMATION(ANIM_TYPE_MOVE, move, playerLeft);
+ NOT MESSAGE("Wobbuffet is hurt by poison!");
+ for (i = 0; i < 6; i++)
+ EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_STATUS), STATUS1_NONE);
+ }
+}
+
+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 {
+ PLAYER(SPECIES_WOBBUFFET);
+ PLAYER(SPECIES_EXPLOUD) { Ability(ability); Status1(STATUS1_POISON); }
+ OPPONENT(SPECIES_WYNAUT);
+ OPPONENT(SPECIES_WYNAUT);
+ } WHEN {
+ TURN { MOVE(playerLeft, MOVE_HEAL_BELL, target: playerLeft); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_HEAL_BELL, playerLeft);
+ if (ability == ABILITY_SOUNDPROOF) {
+ MESSAGE("Exploud is hurt by poison!");
+ } else {
+ NOT MESSAGE("Exploud is hurt by poison!");
+ }
+ }
+}
+
+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 {
+ PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_POISON); }
+ PLAYER(SPECIES_EXPLOUD) { Ability(ability); Status1(STATUS1_POISON); }
+ OPPONENT(SPECIES_WYNAUT);
+ } WHEN {
+ TURN { MOVE(player, MOVE_HEAL_BELL, target: player); }
+ TURN { SWITCH(player, 1); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_HEAL_BELL, player);
+ SEND_IN_MESSAGE("Exploud");
+ NOT MESSAGE("Exploud is hurt by poison!");
+ }
+}
+
+
+SINGLE_BATTLE_TEST("Heal Bell cures a soundproof user")
+{
+ ASSUME(B_HEAL_BELL_SOUNDPROOF == GEN_5 || B_HEAL_BELL_SOUNDPROOF >= GEN_8);
+
+ GIVEN {
+ PLAYER(SPECIES_EXPLOUD) { Ability(ABILITY_SOUNDPROOF); Status1(STATUS1_POISON); }
+ OPPONENT(SPECIES_WYNAUT);
+ } WHEN {
+ TURN { MOVE(player, MOVE_HEAL_BELL, target: player); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_HEAL_BELL, player);
+ NOT MESSAGE("Exploud is hurt by poison!");
+ }
+}
diff --git a/test/battle/move_effect/hidden_power.c b/test/battle/move_effect/hidden_power.c
new file mode 100644
index 000000000000..8ec63c21a7ec
--- /dev/null
+++ b/test/battle/move_effect/hidden_power.c
@@ -0,0 +1,106 @@
+#include "global.h"
+#include "test/battle.h"
+
+// IV combinations sourced from https://www.smogon.com/forums/threads/hidden-power-iv-combinations.78083/
+SINGLE_BATTLE_TEST("Hidden Power's type is determined by IVs")
+{
+ u32 type, j, foeType, foeSpecies;
+ u32 hp, atk, def, spAtk, spDef, speed;
+ bool32 hidden;
+
+ PARAMETRIZE { type = TYPE_NONE; hidden = FALSE; }
+ PARAMETRIZE { type = TYPE_NORMAL; hidden = FALSE; }
+ PARAMETRIZE { type = TYPE_FIGHTING; hidden = TRUE; foeType = TYPE_PSYCHIC; foeSpecies = SPECIES_WOBBUFFET; hp = 30; atk = 2; def = 31; spAtk = 30; spDef = 30; speed = 30; }
+ PARAMETRIZE { type = TYPE_FIGHTING; hidden = TRUE; foeType = TYPE_PSYCHIC; foeSpecies = SPECIES_WOBBUFFET; hp = 31; atk = 15; def = 30; spAtk = 30; spDef = 30; speed = 30; }
+ PARAMETRIZE { type = TYPE_FIGHTING; hidden = TRUE; foeType = TYPE_PSYCHIC; foeSpecies = SPECIES_WOBBUFFET; hp = 30; atk = 22; def = 31; spAtk = 30; spDef = 30; speed = 30; }
+ PARAMETRIZE { type = TYPE_FIGHTING; hidden = TRUE; foeType = TYPE_PSYCHIC; foeSpecies = SPECIES_WOBBUFFET; hp = 31; atk = 31; def = 30; spAtk = 30; spDef = 30; speed = 30; }
+ PARAMETRIZE { type = TYPE_FLYING; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_REGISTEEL; hp = 31; atk = 2; def = 31; spAtk = 30; spDef = 30; speed = 30; }
+ PARAMETRIZE { type = TYPE_FLYING; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_REGISTEEL; hp = 31; atk = 15; def = 31; spAtk = 30; spDef = 30; speed = 30; }
+ PARAMETRIZE { type = TYPE_FLYING; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_REGISTEEL; hp = 31; atk = 22; def = 31; spAtk = 30; spDef = 30; speed = 30; }
+ PARAMETRIZE { type = TYPE_FLYING; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_REGISTEEL; hp = 31; atk = 31; def = 31; spAtk = 30; spDef = 30; speed = 30; }
+ PARAMETRIZE { type = TYPE_POISON; hidden = TRUE; foeType = TYPE_POISON; foeSpecies = SPECIES_ARBOK; hp = 30; atk = 2; def = 31; spAtk = 30; spDef = 30; speed = 31; }
+ PARAMETRIZE { type = TYPE_POISON; hidden = TRUE; foeType = TYPE_POISON; foeSpecies = SPECIES_ARBOK; hp = 31; atk = 15; def = 30; spAtk = 30; spDef = 30; speed = 31; }
+ PARAMETRIZE { type = TYPE_POISON; hidden = TRUE; foeType = TYPE_POISON; foeSpecies = SPECIES_ARBOK; hp = 30; atk = 22; def = 31; spAtk = 30; spDef = 30; speed = 31; }
+ PARAMETRIZE { type = TYPE_POISON; hidden = TRUE; foeType = TYPE_POISON; foeSpecies = SPECIES_ARBOK; hp = 31; atk = 31; def = 30; spAtk = 30; spDef = 30; speed = 31; }
+ PARAMETRIZE { type = TYPE_GROUND; hidden = TRUE; foeType = TYPE_GRASS; foeSpecies = SPECIES_TANGELA; hp = 31; atk = 2; def = 31; spAtk = 30; spDef = 30; speed = 31; }
+ PARAMETRIZE { type = TYPE_GROUND; hidden = TRUE; foeType = TYPE_GRASS; foeSpecies = SPECIES_TANGELA; hp = 31; atk = 15; def = 31; spAtk = 30; spDef = 30; speed = 31; }
+ PARAMETRIZE { type = TYPE_GROUND; hidden = TRUE; foeType = TYPE_GRASS; foeSpecies = SPECIES_TANGELA; hp = 31; atk = 22; def = 31; spAtk = 30; spDef = 30; speed = 31; }
+ PARAMETRIZE { type = TYPE_GROUND; hidden = TRUE; foeType = TYPE_GRASS; foeSpecies = SPECIES_TANGELA; hp = 31; atk = 31; def = 31; spAtk = 30; spDef = 30; speed = 31; }
+ PARAMETRIZE { type = TYPE_ROCK; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 31; atk = 2; def = 30; spAtk = 31; spDef = 30; speed = 30; }
+ PARAMETRIZE { type = TYPE_ROCK; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 31; atk = 15; def = 30; spAtk = 31; spDef = 30; speed = 30; }
+ PARAMETRIZE { type = TYPE_ROCK; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 31; atk = 22; def = 30; spAtk = 31; spDef = 30; speed = 30; }
+ PARAMETRIZE { type = TYPE_ROCK; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 31; atk = 31; def = 30; spAtk = 31; spDef = 30; speed = 30; }
+ PARAMETRIZE { type = TYPE_BUG; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 31; atk = 2; def = 31; spAtk = 31; spDef = 30; speed = 30; }
+ PARAMETRIZE { type = TYPE_BUG; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 31; atk = 15; def = 31; spAtk = 31; spDef = 30; speed = 30; }
+ PARAMETRIZE { type = TYPE_BUG; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 31; atk = 22; def = 31; spAtk = 31; spDef = 30; speed = 30; }
+ PARAMETRIZE { type = TYPE_BUG; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 31; atk = 31; def = 31; spAtk = 31; spDef = 30; speed = 30; }
+ PARAMETRIZE { type = TYPE_GHOST; hidden = TRUE; foeType = TYPE_DARK; foeSpecies = SPECIES_UMBREON; hp = 31; atk = 2; def = 31; spAtk = 31; spDef = 30; speed = 31; }
+ PARAMETRIZE { type = TYPE_GHOST; hidden = TRUE; foeType = TYPE_DARK; foeSpecies = SPECIES_UMBREON; hp = 31; atk = 15; def = 30; spAtk = 31; spDef = 30; speed = 31; }
+ PARAMETRIZE { type = TYPE_GHOST; hidden = TRUE; foeType = TYPE_DARK; foeSpecies = SPECIES_UMBREON; hp = 31; atk = 22; def = 31; spAtk = 31; spDef = 30; speed = 31; }
+ PARAMETRIZE { type = TYPE_GHOST; hidden = TRUE; foeType = TYPE_DARK; foeSpecies = SPECIES_UMBREON; hp = 31; atk = 31; def = 30; spAtk = 31; spDef = 30; speed = 31; }
+ PARAMETRIZE { type = TYPE_STEEL; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 31; atk = 2; def = 30; spAtk = 30; spDef = 31; speed = 30; }
+ PARAMETRIZE { type = TYPE_STEEL; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 31; atk = 15; def = 31; spAtk = 31; spDef = 30; speed = 31; }
+ PARAMETRIZE { type = TYPE_STEEL; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 31; atk = 22; def = 30; spAtk = 30; spDef = 31; speed = 30; }
+ PARAMETRIZE { type = TYPE_STEEL; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 31; atk = 31; def = 31; spAtk = 31; spDef = 30; speed = 31; }
+ PARAMETRIZE { type = TYPE_FIRE; hidden = TRUE; foeType = TYPE_WATER; foeSpecies = SPECIES_BLASTOISE; hp = 31; atk = 2; def = 31; spAtk = 30; spDef = 31; speed = 30; }
+ PARAMETRIZE { type = TYPE_FIRE; hidden = TRUE; foeType = TYPE_WATER; foeSpecies = SPECIES_BLASTOISE; hp = 31; atk = 15; def = 30; spAtk = 30; spDef = 31; speed = 30; }
+ PARAMETRIZE { type = TYPE_FIRE; hidden = TRUE; foeType = TYPE_WATER; foeSpecies = SPECIES_BLASTOISE; hp = 31; atk = 22; def = 31; spAtk = 30; spDef = 31; speed = 30; }
+ PARAMETRIZE { type = TYPE_FIRE; hidden = TRUE; foeType = TYPE_WATER; foeSpecies = SPECIES_BLASTOISE; hp = 31; atk = 31; def = 30; spAtk = 30; spDef = 31; speed = 30; }
+ PARAMETRIZE { type = TYPE_WATER; hidden = TRUE; foeType = TYPE_WATER; foeSpecies = SPECIES_BLASTOISE; hp = 31; atk = 2; def = 30; spAtk = 30; spDef = 31; speed = 31; }
+ PARAMETRIZE { type = TYPE_WATER; hidden = TRUE; foeType = TYPE_WATER; foeSpecies = SPECIES_BLASTOISE; hp = 31; atk = 15; def = 31; spAtk = 30; spDef = 31; speed = 30; }
+ PARAMETRIZE { type = TYPE_WATER; hidden = TRUE; foeType = TYPE_WATER; foeSpecies = SPECIES_BLASTOISE; hp = 31; atk = 22; def = 30; spAtk = 30; spDef = 31; speed = 31; }
+ PARAMETRIZE { type = TYPE_WATER; hidden = TRUE; foeType = TYPE_WATER; foeSpecies = SPECIES_BLASTOISE; hp = 31; atk = 31; def = 31; spAtk = 30; spDef = 31; speed = 30; }
+ PARAMETRIZE { type = TYPE_GRASS; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 30; atk = 2; def = 31; spAtk = 30; spDef = 31; speed = 31; }
+ PARAMETRIZE { type = TYPE_GRASS; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 30; atk = 15; def = 31; spAtk = 30; spDef = 31; speed = 31; }
+ PARAMETRIZE { type = TYPE_GRASS; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 30; atk = 22; def = 31; spAtk = 30; spDef = 31; speed = 31; }
+ PARAMETRIZE { type = TYPE_GRASS; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 30; atk = 31; def = 31; spAtk = 30; spDef = 31; speed = 31; }
+ PARAMETRIZE { type = TYPE_ELECTRIC; hidden = TRUE; foeType = TYPE_GRASS; foeSpecies = SPECIES_TANGELA; hp = 31; atk = 2; def = 30; spAtk = 31; spDef = 31; speed = 30; }
+ PARAMETRIZE { type = TYPE_ELECTRIC; hidden = TRUE; foeType = TYPE_GRASS; foeSpecies = SPECIES_TANGELA; hp = 30; atk = 15; def = 30; spAtk = 31; spDef = 31; speed = 30; }
+ PARAMETRIZE { type = TYPE_ELECTRIC; hidden = TRUE; foeType = TYPE_GRASS; foeSpecies = SPECIES_TANGELA; hp = 31; atk = 22; def = 30; spAtk = 31; spDef = 31; speed = 30; }
+ PARAMETRIZE { type = TYPE_ELECTRIC; hidden = TRUE; foeType = TYPE_GRASS; foeSpecies = SPECIES_TANGELA; hp = 30; atk = 31; def = 30; spAtk = 31; spDef = 31; speed = 30; }
+ PARAMETRIZE { type = TYPE_PSYCHIC; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 31; atk = 2; def = 31; spAtk = 31; spDef = 31; speed = 30; }
+ PARAMETRIZE { type = TYPE_PSYCHIC; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 30; atk = 15; def = 31; spAtk = 31; spDef = 31; speed = 30; }
+ PARAMETRIZE { type = TYPE_PSYCHIC; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 31; atk = 22; def = 31; spAtk = 31; spDef = 31; speed = 30; }
+ PARAMETRIZE { type = TYPE_PSYCHIC; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 30; atk = 31; def = 31; spAtk = 31; spDef = 31; speed = 30; }
+ PARAMETRIZE { type = TYPE_ICE; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 30; atk = 2; def = 30; spAtk = 31; spDef = 31; speed = 31; }
+ PARAMETRIZE { type = TYPE_ICE; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 30; atk = 15; def = 30; spAtk = 31; spDef = 31; speed = 31; }
+ PARAMETRIZE { type = TYPE_ICE; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 30; atk = 22; def = 30; spAtk = 31; spDef = 31; speed = 31; }
+ PARAMETRIZE { type = TYPE_ICE; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 30; atk = 31; def = 30; spAtk = 31; spDef = 31; speed = 31; }
+ PARAMETRIZE { type = TYPE_MYSTERY; hidden = FALSE; }
+ PARAMETRIZE { type = TYPE_DRAGON; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 30; atk = 2; def = 31; spAtk = 31; spDef = 31; speed = 31; }
+ PARAMETRIZE { type = TYPE_DRAGON; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 30; atk = 15; def = 31; spAtk = 31; spDef = 31; speed = 31; }
+ PARAMETRIZE { type = TYPE_DRAGON; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 30; atk = 22; def = 31; spAtk = 31; spDef = 31; speed = 31; }
+ PARAMETRIZE { type = TYPE_DRAGON; hidden = TRUE; foeType = TYPE_STEEL; foeSpecies = SPECIES_KLINK; hp = 30; atk = 31; def = 31; spAtk = 31; spDef = 31; speed = 31; }
+ PARAMETRIZE { type = TYPE_DARK; hidden = TRUE; foeType = TYPE_DARK; foeSpecies = SPECIES_UMBREON; hp = 31; atk = 3; def = 31; spAtk = 31; spDef = 31; speed = 31; }
+ PARAMETRIZE { type = TYPE_DARK; hidden = TRUE; foeType = TYPE_DARK; foeSpecies = SPECIES_UMBREON; hp = 31; atk = 15; def = 31; spAtk = 31; spDef = 31; speed = 31; }
+ PARAMETRIZE { type = TYPE_DARK; hidden = TRUE; foeType = TYPE_DARK; foeSpecies = SPECIES_UMBREON; hp = 31; atk = 23; def = 31; spAtk = 31; spDef = 31; speed = 31; }
+ PARAMETRIZE { type = TYPE_DARK; hidden = TRUE; foeType = TYPE_DARK; foeSpecies = SPECIES_UMBREON; hp = 31; atk = 31; def = 31; spAtk = 31; spDef = 31; speed = 31; }
+
+ // Any type after Dark shouldn't be part of Hidden Power officially.
+ for (j = TYPE_DARK + 1; j < NUMBER_OF_MON_TYPES; j++) {
+ PARAMETRIZE { type = j; hidden = FALSE; }
+ }
+
+ GIVEN {
+ if (hidden) {
+ ASSUME(gTypeEffectivenessTable[type][foeType] == UQ_4_12(0.5)); // Foe's Type resists
+ ASSUME(gSpeciesInfo[foeSpecies].types[0] == gSpeciesInfo[foeSpecies].types[1]); // Foe's pure type
+ ASSUME(gSpeciesInfo[foeSpecies].types[0] == foeType); // Foe is the resisted type
+ PLAYER(SPECIES_DUNSPARCE) { HPIV(hp); AttackIV(atk); DefenseIV(def); SpAttackIV(spAtk); SpDefenseIV(spDef); SpeedIV(speed); }
+ } else {
+ PLAYER(SPECIES_DUNSPARCE);
+ }
+ OPPONENT(foeSpecies);
+ } WHEN {
+ TURN { MOVE(player, MOVE_HIDDEN_POWER); }
+ } SCENE {
+ // Only test valid Hidden Power types
+ if (hidden) {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_HIDDEN_POWER, player);
+ HP_BAR(opponent);
+ MESSAGE("It's not very effective…");
+ }
+ }
+}
+
+TO_DO_BATTLE_TEST("Hidden Power's power is determined by IVs before Gen6");
diff --git a/test/battle/move_effect/hit_escape.c b/test/battle/move_effect/hit_escape.c
index e483ee9a8ad9..6255869a6964 100644
--- a/test/battle/move_effect/hit_escape.c
+++ b/test/battle/move_effect/hit_escape.c
@@ -17,7 +17,7 @@ SINGLE_BATTLE_TEST("U-turn switches the user out")
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_U_TURN, player);
HP_BAR(opponent);
- MESSAGE("Go! Wynaut!");
+ SEND_IN_MESSAGE("Wynaut");
}
}
@@ -91,7 +91,7 @@ SINGLE_BATTLE_TEST("U-turn switches the user out if Wimp Out fails to activate")
ANIMATION(ANIM_TYPE_MOVE, MOVE_U_TURN, player);
HP_BAR(opponent);
NOT ABILITY_POPUP(opponent);
- MESSAGE("Go for it, Wynaut!");
+ SEND_IN_MESSAGE("Wynaut");
}
}
@@ -109,7 +109,7 @@ SINGLE_BATTLE_TEST("U-turn switches the user out after Ice Face activates")
HP_BAR(opponent);
ABILITY_POPUP(opponent, ABILITY_ICE_FACE);
MESSAGE("Foe Eiscue transformed!");
- MESSAGE("Go! Wynaut!");
+ SEND_IN_MESSAGE("Wynaut");
}
}
diff --git a/test/battle/move_effect/knock_off.c b/test/battle/move_effect/knock_off.c
index 883f313f3b15..50d8aaa77304 100644
--- a/test/battle/move_effect/knock_off.c
+++ b/test/battle/move_effect/knock_off.c
@@ -21,6 +21,8 @@ SINGLE_BATTLE_TEST("Knock Off knocks a healing berry before it has the chance to
}
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ITEM_KNOCKOFF);
MESSAGE("Wobbuffet knocked off Foe Wobbuffet's Sitrus Berry!");
+ } THEN {
+ EXPECT(opponent->item == ITEM_NONE);
}
}
@@ -41,14 +43,154 @@ SINGLE_BATTLE_TEST("Knock Off activates after Rocky Helmet and Weakness Policy")
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent);
if (item == ITEM_WEAKNESS_POLICY) {
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE);
- MESSAGE("Using WeaknssPolicy, the Attack of Foe Wobbuffet sharply rose!");
- MESSAGE("Using WeaknssPolicy, the Sp. Atk of Foe Wobbuffet sharply rose!");
+ MESSAGE("Using Weakness Policy, the Attack of Foe Wobbuffet sharply rose!");
+ MESSAGE("Using Weakness Policy, the Sp. Atk of Foe Wobbuffet sharply rose!");
} else if (item == ITEM_ROCKY_HELMET) {
HP_BAR(player);
MESSAGE("Wobbuffet was hurt by Foe Wobbuffet's Rocky Helmet!");
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ITEM_KNOCKOFF);
MESSAGE("Wobbuffet knocked off Foe Wobbuffet's Rocky Helmet!");
}
+ } THEN {
+ EXPECT(opponent->item == ITEM_NONE);
+ }
+}
+
+SINGLE_BATTLE_TEST("Knock Off deals additional damage to opponents holding an item in Gen 6+", s16 damage)
+{
+ u16 item = 0;
+
+ PARAMETRIZE { item = ITEM_NONE; }
+ PARAMETRIZE { item = ITEM_LEFTOVERS; }
+
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET) { Item(item); };
+ } WHEN {
+ TURN { MOVE(player, MOVE_KNOCK_OFF); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_KNOCK_OFF, player);
+ HP_BAR(opponent, captureDamage: &results[i].damage);
+ if (item != ITEM_NONE)
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ITEM_KNOCKOFF);
+ } FINALLY {
+ if (B_KNOCK_OFF_DMG >= GEN_6)
+ EXPECT_MUL_EQ(results[0].damage, UQ_4_12(1.5), results[1].damage);
+ else
+ EXPECT_EQ(results[0].damage, results[1].damage);
+ } THEN {
+ EXPECT(opponent->item == ITEM_NONE);
+ }
+}
+
+
+SINGLE_BATTLE_TEST("Knock Off does not remove items through Substitute")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_LEFTOVERS); };
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_SUBSTITUTE);
+ MOVE(player, MOVE_KNOCK_OFF); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_KNOCK_OFF, player);
+ NOT { ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ITEM_KNOCKOFF); }
+ } THEN {
+ EXPECT(opponent->item == ITEM_LEFTOVERS);
+ }
+}
+
+SINGLE_BATTLE_TEST("Recycle cannot recover an item removed by Knock Off")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_LEFTOVERS); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_KNOCK_OFF);
+ MOVE(opponent, MOVE_RECYCLE); }
+ } SCENE {
+ 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 {
+ EXPECT(opponent->item == ITEM_NONE);
+ }
+}
+
+SINGLE_BATTLE_TEST("Knock Off does not prevent targets from receiving another item in Gen 5+")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_LEFTOVERS); }
+ OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_LEFTOVERS); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_KNOCK_OFF); }
+ TURN { MOVE(player, MOVE_BESTOW); }
+ } SCENE {
+ // turn 1
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_KNOCK_OFF, player);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ITEM_KNOCKOFF);
+ MESSAGE("Wobbuffet knocked off Foe Wobbuffet's Leftovers!");
+ // turn 2
+ if (B_KNOCK_OFF_REMOVAL >= GEN_5) {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_BESTOW, player);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT);
+ MESSAGE("Foe Wobbuffet's Leftovers restored its HP a little!");
+ } else {
+ NOT { ANIMATION(ANIM_TYPE_MOVE, MOVE_BESTOW, player); }
+ MESSAGE("But it failed!");
+ }
+ } THEN {
+ if (B_KNOCK_OFF_REMOVAL >= GEN_5)
+ EXPECT(opponent->item == ITEM_LEFTOVERS);
+ else
+ EXPECT(opponent->item == ITEM_NONE);
+ }
+}
+
+// Knock Off triggers Unburden regardless of whether the item is fully removed (Gen 5+) or not.
+SINGLE_BATTLE_TEST("Knock Off triggers Unburden")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET) { Speed(60); }
+ OPPONENT(SPECIES_WOBBUFFET) { Ability(ABILITY_UNBURDEN); Item(ITEM_LEFTOVERS); Speed(50); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_KNOCK_OFF); }
+ TURN { MOVE(player, MOVE_CELEBRATE); }
+ } SCENE {
+ // turn 1
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_KNOCK_OFF, player);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ITEM_KNOCKOFF);
+ MESSAGE("Wobbuffet knocked off Foe Wobbuffet's Leftovers!");
+ // turn 2
+ MESSAGE("Foe Wobbuffet used Celebrate!");
+ MESSAGE("Wobbuffet used Celebrate!");
+ } THEN {
+ EXPECT(opponent->item == ITEM_NONE);
+ }
+}
+
+DOUBLE_BATTLE_TEST("Knock Off does not trigger the opposing ally's Symbiosis")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_LEFTOVERS); }
+ PLAYER(SPECIES_FLORGES) { Item(ITEM_LEFTOVERS); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(opponentLeft, MOVE_KNOCK_OFF, target: playerLeft); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_KNOCK_OFF, opponentLeft);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_ITEM_KNOCKOFF);
+ MESSAGE("Foe Wobbuffet knocked off Wobbuffet's Leftovers!");
+ NONE_OF {
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT);
+ MESSAGE("Wobbuffet's Leftovers restored health!");
+ }
+ } THEN {
+ EXPECT(playerLeft->item == ITEM_NONE);
}
}
diff --git a/test/battle/move_effect/metronome.c b/test/battle/move_effect/metronome.c
index d4efcaafff5f..22e3390cb2b9 100644
--- a/test/battle/move_effect/metronome.c
+++ b/test/battle/move_effect/metronome.c
@@ -35,7 +35,7 @@ SINGLE_BATTLE_TEST("Metronome's called powder move fails against Grass Types")
} SCENE {
MESSAGE("Wobbuffet used Metronome!");
ANIMATION(ANIM_TYPE_MOVE, MOVE_METRONOME, player);
- MESSAGE("Wobbuffet used PoisonPowder!");
+ MESSAGE("Wobbuffet used Poison Powder!");
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_POISON_POWDER, player);
MESSAGE("It doesn't affect Foe Tangela…");
NOT STATUS_ICON(opponent, poison: TRUE);
diff --git a/test/battle/move_effect/photon_geyser.c b/test/battle/move_effect/photon_geyser.c
index 3f46547ee127..986d3865aa5a 100644
--- a/test/battle/move_effect/photon_geyser.c
+++ b/test/battle/move_effect/photon_geyser.c
@@ -23,7 +23,7 @@ SINGLE_BATTLE_TEST("Photon Geyser can be mirror coated if it is a special move")
}
}
-SINGLE_BATTLE_TEST("Photon Geyser can be countered if it is a physcal move")
+SINGLE_BATTLE_TEST("Photon Geyser can be countered if it is a physical move")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET) { Attack(110); SpAttack(100); }
diff --git a/test/battle/move_effect/plasma_fists.c b/test/battle/move_effect/plasma_fists.c
index 1252de7b54f0..bdd3ed4f419c 100644
--- a/test/battle/move_effect/plasma_fists.c
+++ b/test/battle/move_effect/plasma_fists.c
@@ -87,7 +87,7 @@ SINGLE_BATTLE_TEST("Plasma Fists turns normal type dynamax-moves into electric t
PLAYER(SPECIES_KRABBY) { Speed(100); }
OPPONENT(SPECIES_WOBBUFFET) { Speed(1); }
} WHEN {
- TURN { MOVE(player, MOVE_PLASMA_FISTS); MOVE(opponent, MOVE_TACKLE, dynamax: TRUE); }
+ TURN { MOVE(player, MOVE_PLASMA_FISTS); MOVE(opponent, MOVE_TACKLE, gimmick: GIMMICK_DYNAMAX); }
} SCENE {
MESSAGE("Krabby used Plasma Fists!");
ANIMATION(ANIM_TYPE_MOVE, MOVE_PLASMA_FISTS, player);
diff --git a/test/battle/move_effect/power_split.c b/test/battle/move_effect/power_split.c
new file mode 100644
index 000000000000..70d1bfd5ea06
--- /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 53d4704987b6..aca5ef859db7 100644
--- a/test/battle/move_effect/protect.c
+++ b/test/battle/move_effect/protect.c
@@ -152,7 +152,7 @@ SINGLE_BATTLE_TEST("Spiky Shield does 1/8 dmg of max hp of attackers making cont
HP_BAR(player, maxHp / 8);
if (hp == 1) {
MESSAGE("Wobbuffet fainted!");
- MESSAGE("Go! Wobbuffet!");
+ SEND_IN_MESSAGE("Wobbuffet");
}
}
}
@@ -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/pursuit.c b/test/battle/move_effect/pursuit.c
index ec2345dbddb4..7c34e914d1bc 100644
--- a/test/battle/move_effect/pursuit.c
+++ b/test/battle/move_effect/pursuit.c
@@ -16,12 +16,12 @@ SINGLE_BATTLE_TEST("Pursuited mon correctly switches out after it got hit and ac
} WHEN {
TURN { SWITCH(player, 1); MOVE(opponent, MOVE_PURSUIT); }
} SCENE {
- MESSAGE("Dugtrio, that's enough! Come back!");
+ SWITCH_OUT_MESSAGE("Dugtrio");
ANIMATION(ANIM_TYPE_MOVE, MOVE_PURSUIT, opponent);
ABILITY_POPUP(player, ABILITY_TANGLING_HAIR);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
MESSAGE("Foe Wynaut's Speed fell!");
- MESSAGE("Go! Wobbuffet!");
+ SEND_IN_MESSAGE("Wobbuffet");
}
}
diff --git a/test/battle/move_effect/rage_fist.c b/test/battle/move_effect/rage_fist.c
index 109713b64d82..52859cefc17f 100644
--- a/test/battle/move_effect/rage_fist.c
+++ b/test/battle/move_effect/rage_fist.c
@@ -167,9 +167,9 @@ SINGLE_BATTLE_TEST("Rage Fist base power is not lost if user switches out")
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_RAGE_FIST, player);
HP_BAR(opponent, captureDamage: ×GotHit[0]);
- MESSAGE("Wobbuffet, that's enough! Come back!");
+ SWITCH_OUT_MESSAGE("Wobbuffet");
ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent);
- MESSAGE("Wynaut, that's enough! Come back!");
+ SWITCH_OUT_MESSAGE("Wynaut");
ANIMATION(ANIM_TYPE_MOVE, MOVE_RAGE_FIST, player);
HP_BAR(opponent, captureDamage: ×GotHit[1]);
} THEN {
diff --git a/test/battle/move_effect/recoil_if_miss.c b/test/battle/move_effect/recoil_if_miss.c
index 49c78a229e2d..b6083e9d190e 100644
--- a/test/battle/move_effect/recoil_if_miss.c
+++ b/test/battle/move_effect/recoil_if_miss.c
@@ -83,7 +83,7 @@ SINGLE_BATTLE_TEST("Jump Kick's recoil happens after Spiky Shield damage and Pok
MESSAGE("Wobbuffet was hurt by Foe Wobbuffet's Spiky Shield!");
if (faintOnSpiky){
MESSAGE("Wobbuffet fainted!");
- MESSAGE("Go! Wynaut!");
+ SEND_IN_MESSAGE("Wynaut");
NONE_OF {
MESSAGE("Wobbuffet kept going and crashed!");
HP_BAR(player);
@@ -93,7 +93,7 @@ SINGLE_BATTLE_TEST("Jump Kick's recoil happens after Spiky Shield damage and Pok
HP_BAR(player);
if (faintOnJumpKick) {
MESSAGE("Wobbuffet fainted!");
- MESSAGE("Go! Wynaut!");
+ SEND_IN_MESSAGE("Wynaut");
}
}
}
diff --git a/test/battle/move_effect/reflect_type.c b/test/battle/move_effect/reflect_type.c
index e873516034ee..32ed9520c8e8 100644
--- a/test/battle/move_effect/reflect_type.c
+++ b/test/battle/move_effect/reflect_type.c
@@ -123,9 +123,9 @@ 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);
}
}
@@ -145,13 +145,13 @@ 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);
@@ -171,7 +171,7 @@ SINGLE_BATTLE_TEST("Reflect Type defaults to Normal type for the user's type1 an
HP_BAR(player);
MESSAGE("Foe Arcanine burned itself out!");
// Turn 2
- MESSAGE("Wobbuffet used Forest'sCurs!");
+ MESSAGE("Wobbuffet used Forest's Curse!");
ANIMATION(ANIM_TYPE_MOVE, MOVE_FORESTS_CURSE, player);
MESSAGE("Grass type was added to Foe Arcanine!");
// Turn 3
@@ -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 000000000000..581793e8547a
--- /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 000000000000..9ab5d4a8e24b
--- /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/revival_blessing.c b/test/battle/move_effect/revival_blessing.c
index 397e01e73aee..d44e9110d50c 100644
--- a/test/battle/move_effect/revival_blessing.c
+++ b/test/battle/move_effect/revival_blessing.c
@@ -5,12 +5,6 @@
// behaviors. These have been tested in-game, in double, in multi, and in link battles. AI will always
// revive their first fainted party member in order.
-#if B_EXPANDED_MOVE_NAMES
-#define REVIVAL_BLESSING "Revival Blessing"
-#else
-#define REVIVAL_BLESSING "RevivlBlesng"
-#endif
-
ASSUMPTIONS
{
ASSUME(gMovesInfo[MOVE_REVIVAL_BLESSING].effect == EFFECT_REVIVAL_BLESSING);
@@ -26,7 +20,7 @@ SINGLE_BATTLE_TEST("Revival Blessing revives a chosen fainted party member for t
} WHEN {
TURN { MOVE(player, MOVE_REVIVAL_BLESSING); SEND_OUT(player, 2); }
} SCENE {
- MESSAGE("Wobbuffet used " REVIVAL_BLESSING "!");
+ MESSAGE("Wobbuffet used Revival Blessing!");
MESSAGE("Wynaut was revived and is ready to fight again!");
}
}
@@ -41,7 +35,7 @@ SINGLE_BATTLE_TEST("Revival Blessing revives a fainted party member for an oppon
} WHEN {
TURN { MOVE(opponent, MOVE_REVIVAL_BLESSING); SEND_OUT(opponent, 1); }
} SCENE {
- MESSAGE("Foe Raichu used " REVIVAL_BLESSING "!");
+ MESSAGE("Foe Raichu used Revival Blessing!");
MESSAGE("Pichu was revived and is ready to fight again!");
}
}
@@ -54,7 +48,7 @@ SINGLE_BATTLE_TEST("Revival Blessing fails if no party members are fainted")
} WHEN {
TURN { MOVE(player, MOVE_REVIVAL_BLESSING); }
} SCENE {
- MESSAGE("Wobbuffet used " REVIVAL_BLESSING "!");
+ MESSAGE("Wobbuffet used Revival Blessing!");
MESSAGE("But it failed!");
}
}
@@ -82,10 +76,10 @@ TO_DO_BATTLE_TEST("Revival Blessing cannot revive a partner's party member");
// TURN { MOVE(user, MOVE_REVIVAL_BLESSING); }
// } SCENE {
// if (user == opponentLeft) {
-// MESSAGE("Foe Wobbuffet used " REVIVAL_BLESSING "!");
+// MESSAGE("Foe Wobbuffet used Revival Blessing!");
// MESSAGE("But it failed!");
// } else {
-// MESSAGE("Foe Wynaut used " REVIVAL_BLESSING "!");
+// MESSAGE("Foe Wynaut used Revival Blessing!");
// MESSAGE("Wynaut was revived and is ready to fight again!");
// }
// }
@@ -108,7 +102,7 @@ TO_DO_BATTLE_TEST("Revived battlers still lose their turn");
// } SCENE {
// MESSAGE("Wobbuffet used Tackle!");
// MESSAGE("Foe Wynaut fainted!");
-// MESSAGE("Foe Wobbuffet used " REVIVAL_BLESSING "!");
+// MESSAGE("Foe Wobbuffet used Revival Blessing!");
// MESSAGE("Wynaut was revived and is ready to fight again!");
// NOT { MESSAGE("Wynaut used Celebrate!"); }
// }
diff --git a/test/battle/move_effect/round.c b/test/battle/move_effect/round.c
new file mode 100644
index 000000000000..c911c96b6327
--- /dev/null
+++ b/test/battle/move_effect/round.c
@@ -0,0 +1,115 @@
+#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")
+{
+ KNOWN_FAILING; // #5148
+ 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/semi_invulnerable.c b/test/battle/move_effect/semi_invulnerable.c
index 97760225d132..3ba4889005e5 100644
--- a/test/battle/move_effect/semi_invulnerable.c
+++ b/test/battle/move_effect/semi_invulnerable.c
@@ -58,7 +58,7 @@ SINGLE_BATTLE_TEST("Semi-invulnerable moves make the user semi-invulnerable turn
break;
case MOVE_PHANTOM_FORCE:
NOT MESSAGE("Wobbuffet vanished instantly!");
- MESSAGE("Wobbuffet used PhantomForce!");
+ MESSAGE("Wobbuffet used Phantom Force!");
break;
case MOVE_SHADOW_FORCE:
NOT MESSAGE("Wobbuffet vanished instantly!");
@@ -112,7 +112,7 @@ SINGLE_BATTLE_TEST("Semi-invulnerable moves make the user semi-invulnerable turn
MESSAGE("Wobbuffet used Dive!");
break;
case MOVE_PHANTOM_FORCE:
- MESSAGE("Wobbuffet used PhantomForce!");
+ MESSAGE("Wobbuffet used Phantom Force!");
break;
case MOVE_SHADOW_FORCE:
MESSAGE("Wobbuffet used Shadow Force!");
@@ -163,7 +163,7 @@ SINGLE_BATTLE_TEST("Semi-invulnerable moves don't need to charge with Power Herb
break;
case MOVE_PHANTOM_FORCE:
NOT MESSAGE("Wobbuffet vanished instantly!");
- MESSAGE("Wobbuffet used PhantomForce!");
+ MESSAGE("Wobbuffet used Phantom Force!");
break;
case MOVE_SHADOW_FORCE:
NOT MESSAGE("Wobbuffet vanished instantly!");
@@ -215,7 +215,7 @@ SINGLE_BATTLE_TEST("Semi-invulnerable moves don't need to charge with Power Herb
MESSAGE("Wobbuffet used Dive!");
break;
case MOVE_PHANTOM_FORCE:
- MESSAGE("Wobbuffet used PhantomForce!");
+ MESSAGE("Wobbuffet used Phantom Force!");
break;
case MOVE_SHADOW_FORCE:
MESSAGE("Wobbuffet used Shadow Force!");
diff --git a/test/battle/move_effect/shed_tail.c b/test/battle/move_effect/shed_tail.c
index 6f12d22eee64..55a8950d00c9 100644
--- a/test/battle/move_effect/shed_tail.c
+++ b/test/battle/move_effect/shed_tail.c
@@ -22,7 +22,7 @@ SINGLE_BATTLE_TEST("Shed Tail creates a Substitute at the cost of 1/2 users maxi
ANIMATION(ANIM_TYPE_MOVE, MOVE_SHED_TAIL, player);
HP_BAR(player, captureDamage: &costHP);
MESSAGE("Wobbuffet shed its tail to create a decoy!");
- MESSAGE("Go! Wynaut!");
+ SEND_IN_MESSAGE("Wynaut");
}THEN {
EXPECT_EQ(maxHP / 2, costHP);
}
@@ -53,7 +53,7 @@ SINGLE_BATTLE_TEST("Shed Tail's HP cost can trigger a berry before the user swit
} SCENE {
ANIMATION(ANIM_TYPE_MOVE, MOVE_SHED_TAIL, player);
MESSAGE("Wobbuffet's Sitrus Berry restored health!");
- MESSAGE("Go! Wynaut!");
+ SEND_IN_MESSAGE("Wynaut");
}
}
diff --git a/test/battle/move_effect/shell_side_arm.c b/test/battle/move_effect/shell_side_arm.c
index f0b3dd74dc22..13458e39aec1 100644
--- a/test/battle/move_effect/shell_side_arm.c
+++ b/test/battle/move_effect/shell_side_arm.c
@@ -31,7 +31,7 @@ SINGLE_BATTLE_TEST("Shell Side Arm can be mirror coated if it is special")
}
}
-SINGLE_BATTLE_TEST("Shell Side Arm does not change catogory mid-turn")
+SINGLE_BATTLE_TEST("Shell Side Arm does not change category mid-turn")
{
s16 damage[3];
@@ -56,7 +56,7 @@ SINGLE_BATTLE_TEST("Shell Side Arm does not change catogory mid-turn")
}
}
-DOUBLE_BATTLE_TEST("Shell Side Arm is choosing it's type for each battler on the field")
+DOUBLE_BATTLE_TEST("Shell Side Arm chooses its category for each battler on the field")
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET) { Speed(10); Moves(MOVE_SHELL_SIDE_ARM); }
diff --git a/test/battle/move_effect/shell_trap.c b/test/battle/move_effect/shell_trap.c
index 15b3f41e5ec5..cd63be237689 100644
--- a/test/battle/move_effect/shell_trap.c
+++ b/test/battle/move_effect/shell_trap.c
@@ -86,7 +86,7 @@ SINGLE_BATTLE_TEST("Shell Trap does not activate if battler faints before being
MESSAGE("Wobbuffet set a shell trap!");
ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent);
MESSAGE("Wobbuffet fainted!");
- MESSAGE("Go! Wobbuffet!");
+ SEND_IN_MESSAGE("Wobbuffet");
NONE_OF {
MESSAGE("Wobbuffet used Shell Trap!");
ANIMATION(ANIM_TYPE_MOVE, MOVE_SHELL_TRAP, player);
diff --git a/test/battle/move_effect/sleep_talk.c b/test/battle/move_effect/sleep_talk.c
new file mode 100644
index 000000000000..8ecd600f362d
--- /dev/null
+++ b/test/battle/move_effect/sleep_talk.c
@@ -0,0 +1,93 @@
+#include "global.h"
+#include "test/battle.h"
+
+ASSUMPTIONS
+{
+ ASSUME(gMovesInfo[MOVE_SLEEP_TALK].effect == EFFECT_SLEEP_TALK);
+ ASSUME(gMovesInfo[MOVE_RAZOR_WIND].sleepTalkBanned == TRUE);
+ ASSUME(gMovesInfo[MOVE_FLY].sleepTalkBanned == TRUE);
+ ASSUME(gMovesInfo[MOVE_DIG].sleepTalkBanned == TRUE);
+}
+
+SINGLE_BATTLE_TEST("Sleep Talk fails if not asleep")
+{
+ u32 status;
+ PARAMETRIZE { status = STATUS1_SLEEP; }
+ PARAMETRIZE { status = STATUS1_NONE; }
+
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET) { Status1(status); Moves(MOVE_SLEEP_TALK, MOVE_TACKLE, MOVE_POUND, MOVE_SCRATCH); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_SLEEP_TALK); }
+ } SCENE {
+ if (status == STATUS1_SLEEP) {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SLEEP_TALK, player);
+ NOT MESSAGE("But it failed!");
+ }
+ else {
+ NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_SLEEP_TALK, player);
+ MESSAGE("But it failed!");
+ }
+ }
+}
+
+
+SINGLE_BATTLE_TEST("Sleep Talk works if user has Comatose")
+{
+
+ GIVEN {
+ PLAYER(SPECIES_KOMALA) { Moves(MOVE_SLEEP_TALK, MOVE_TACKLE, MOVE_POUND, MOVE_SCRATCH); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_SLEEP_TALK); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SLEEP_TALK, player);
+ NOT MESSAGE("But it failed!");
+ }
+}
+
+SINGLE_BATTLE_TEST("Sleep Talk fails if no moves work")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); Moves(MOVE_SLEEP_TALK, MOVE_RAZOR_WIND, MOVE_FLY, MOVE_DIG); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_SLEEP_TALK); }
+ } SCENE {
+ NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_SLEEP_TALK, player);
+ MESSAGE("But it failed!");
+ }
+}
+
+SINGLE_BATTLE_TEST("Sleep Talk can still use moves with no PP")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); MovesWithPP({MOVE_SLEEP_TALK, 10}, {MOVE_TACKLE, 0}, {MOVE_FLY, 10}, {MOVE_DIG, 10}); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_SLEEP_TALK); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SLEEP_TALK, player);
+ NOT MESSAGE("But it failed!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE);
+ }
+}
+
+SINGLE_BATTLE_TEST("Sleep Talk can use moves while choiced into Sleep Talk")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET) { Item(ITEM_CHOICE_BAND); Status1(STATUS1_SLEEP); Moves(MOVE_SLEEP_TALK, MOVE_TACKLE, MOVE_FLY, MOVE_DIG); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_SLEEP_TALK); }
+ TURN { MOVE(player, MOVE_SLEEP_TALK); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SLEEP_TALK, player);
+ NOT MESSAGE("But it failed!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SLEEP_TALK, player);
+ NOT MESSAGE("But it failed!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE);
+ }
+}
diff --git a/test/battle/move_effect/spicy_extract.c b/test/battle/move_effect/spicy_extract.c
new file mode 100644
index 000000000000..8a66003ec785
--- /dev/null
+++ b/test/battle/move_effect/spicy_extract.c
@@ -0,0 +1,208 @@
+#include "global.h"
+#include "test/battle.h"
+
+ASSUMPTIONS
+{
+ ASSUME(gMovesInfo[MOVE_SPICY_EXTRACT].effect == EFFECT_SPICY_EXTRACT);
+}
+
+SINGLE_BATTLE_TEST("Spicy Extract raises target's Attack by 2 stages and lowers target's Defense by 2 stages")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_SPICY_EXTRACT); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SPICY_EXTRACT, player);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
+ MESSAGE("Foe Wobbuffet's Attack sharply rose!");
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
+ MESSAGE("Foe Wobbuffet's Defense harshly fell!");
+ } THEN {
+ EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE + 2);
+ EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE - 2);
+ }
+}
+
+SINGLE_BATTLE_TEST("Spicy Extract is prevented by target's ability if it's Attack stat is maxed out")
+{
+ u16 ability;
+
+ PARAMETRIZE { ability = ABILITY_CLEAR_BODY; }
+ PARAMETRIZE { ability = ABILITY_LIGHT_METAL; }
+
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_SWORDS_DANCE].effect == EFFECT_ATTACK_UP_2);
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_BELDUM) { Ability(ability); }
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_SWORDS_DANCE); }
+ TURN { MOVE(opponent, MOVE_SWORDS_DANCE); }
+ TURN { MOVE(opponent, MOVE_SWORDS_DANCE); MOVE(player, MOVE_SPICY_EXTRACT); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, opponent);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, opponent);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SWORDS_DANCE, opponent);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
+ MESSAGE("Wobbuffet used Spicy Extract!");
+ if (ability == ABILITY_CLEAR_BODY) {
+ ABILITY_POPUP(opponent, ABILITY_CLEAR_BODY);
+ MESSAGE("Foe Beldum's Clear Body prevents stat loss!");
+ NONE_OF {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SPICY_EXTRACT, player);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
+ }
+ } else {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SPICY_EXTRACT, player);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
+ }
+ }
+}
+
+SINGLE_BATTLE_TEST("Spicy Extract Defense loss is prevented by Big Pecks")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_PIDGEY) { Ability(ABILITY_BIG_PECKS); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_SPICY_EXTRACT); }
+ } SCENE {
+ MESSAGE("Wobbuffet used Spicy Extract!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SPICY_EXTRACT, player);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
+ MESSAGE("Foe Pidgey's Attack sharply rose!");
+ NONE_OF {
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
+ MESSAGE("Foe Wobbuffet's Defense harshly fell!");
+ }
+ ABILITY_POPUP(opponent, ABILITY_BIG_PECKS);
+ MESSAGE("Foe Pidgey's Big Pecks prevents Defense loss!");
+ }
+}
+
+SINGLE_BATTLE_TEST("Spicy Extract bypasses accuracy checks")
+{
+ PASSES_RANDOMLY(100, 100, RNG_ACCURACY);
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_BRIGHTPOWDER); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_SPICY_EXTRACT); }
+ } SCENE {
+ MESSAGE("Wobbuffet used Spicy Extract!");
+ NOT MESSAGE("Wobbuffet's attack missed!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SPICY_EXTRACT, player);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
+ MESSAGE("Foe Wobbuffet's Attack sharply rose!");
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
+ MESSAGE("Foe Wobbuffet's Defense harshly fell!");
+ }
+}
+
+SINGLE_BATTLE_TEST("Spicy Extract will fail if target is in a semi-invulnerability state")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_BRIGHTPOWDER); }
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_DIVE); MOVE(player, MOVE_SPICY_EXTRACT); }
+ } SCENE {
+ MESSAGE("Foe Wobbuffet used Dive!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_DIVE, opponent);
+ MESSAGE("Wobbuffet used Spicy Extract!");
+ NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_SPICY_EXTRACT, player);
+ MESSAGE("Wobbuffet's attack missed!");
+ }
+}
+
+SINGLE_BATTLE_TEST("Spicy Extract stat changes will be inverted by Contrary")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_SNIVY) { Ability(ABILITY_CONTRARY); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_SPICY_EXTRACT); }
+ } SCENE {
+ MESSAGE("Wobbuffet used Spicy Extract!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SPICY_EXTRACT, player);
+
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
+ MESSAGE("Foe Snivy's Attack harshly fell!");
+
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
+ MESSAGE("Foe Snivy's Defense sharply rose!");
+ } THEN {
+ EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE - 2);
+ EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE + 2);
+ }
+}
+
+SINGLE_BATTLE_TEST("Spicy Extract against Clear Amulet and Contrary raises Defense only")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_SNIVY) { Ability(ABILITY_CONTRARY); Item(ITEM_CLEAR_AMULET); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_SPICY_EXTRACT); }
+ } SCENE {
+ MESSAGE("Wobbuffet used Spicy Extract!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SPICY_EXTRACT, player);
+ NONE_OF {
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
+ MESSAGE("Foe Snivy's Attack harshly fell!");
+ }
+ MESSAGE("Foe Snivy's Clear Amulet prevents its stats from being lowered!");
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponent);
+ MESSAGE("Foe Snivy's Defense sharply rose!");
+ } THEN {
+ EXPECT_EQ(opponent->statStages[STAT_ATK], DEFAULT_STAT_STAGE);
+ EXPECT_EQ(opponent->statStages[STAT_DEF], DEFAULT_STAT_STAGE + 2);
+ }
+}
+
+AI_DOUBLE_BATTLE_TEST("Spicy Extract user will use it if partner holds Clear Amulet and a physical move")
+{
+ u32 move;
+
+ PARAMETRIZE { move = MOVE_TACKLE; }
+ PARAMETRIZE { move = MOVE_SWIFT;}
+
+ GIVEN {
+ AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT);
+ PLAYER(SPECIES_WOBBUFFET) { Speed(10); }
+ PLAYER(SPECIES_WOBBUFFET) { Speed(10); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(20); Item(ITEM_CLEAR_AMULET); Moves(move); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(40); Moves(MOVE_TACKLE, MOVE_SPICY_EXTRACT); }
+ } WHEN {
+ TURN {
+ if (move == MOVE_TACKLE)
+ EXPECT_MOVE(opponentRight, MOVE_SPICY_EXTRACT);
+ else
+ EXPECT_MOVE(opponentRight, MOVE_TACKLE);
+ }
+ }
+}
+
+AI_DOUBLE_BATTLE_TEST("Spicy Extract user will not choose the move if it does not benefit partner")
+{
+ u32 species;
+ u32 ability;
+
+ PARAMETRIZE { species = SPECIES_GHOLDENGO; ability = ABILITY_GOOD_AS_GOLD; }
+ PARAMETRIZE { species = SPECIES_SNIVY; ability = ABILITY_CONTRARY; }
+
+ GIVEN {
+ AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT);
+ PLAYER(SPECIES_WOBBUFFET) { Speed(10); }
+ PLAYER(SPECIES_WOBBUFFET) { Speed(10); }
+ OPPONENT(species) { Speed(20); Ability(ability); Moves(MOVE_TACKLE); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(40); Moves(MOVE_TACKLE, MOVE_SPICY_EXTRACT); }
+ } WHEN {
+ TURN {
+ EXPECT_MOVE(opponentRight, MOVE_TACKLE);
+ }
+ }
+}
diff --git a/test/battle/move_effect/stealth_rock.c b/test/battle/move_effect/stealth_rock.c
index f8c7a6369eaa..9a38f17a5ee5 100644
--- a/test/battle/move_effect/stealth_rock.c
+++ b/test/battle/move_effect/stealth_rock.c
@@ -46,7 +46,7 @@ SINGLE_BATTLE_TEST("Stealth Rock damages the correct pokemon when Eject Button i
ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, opponent);
NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_HARDEN, player);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, player);
- MESSAGE("Go! Metapod!");
+ SEND_IN_MESSAGE("Metapod");
HP_BAR(player);
} THEN {
EXPECT_EQ(opponent->hp, opponent->maxHP);
@@ -67,7 +67,7 @@ DOUBLE_BATTLE_TEST("Stealth Rock damages the correct pokemon when Eject Button i
ANIMATION(ANIM_TYPE_MOVE, MOVE_STEALTH_ROCK, opponentLeft);
ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponentRight);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, playerLeft);
- MESSAGE("Go! Metapod!");
+ SEND_IN_MESSAGE("Metapod");
HP_BAR(playerLeft);
} THEN {
EXPECT_EQ(opponentLeft->hp, opponentLeft->maxHP);
diff --git a/test/battle/move_effect/sticky_web.c b/test/battle/move_effect/sticky_web.c
index 37f5fce077c5..035568dd75d1 100644
--- a/test/battle/move_effect/sticky_web.c
+++ b/test/battle/move_effect/sticky_web.c
@@ -123,14 +123,20 @@ DOUBLE_BATTLE_TEST("Sticky Web has correct interactions with Mirror Armor - the
ANIMATION(ANIM_TYPE_MOVE, MOVE_STICKY_WEB, BATTLER_PLAYER);
MESSAGE("A sticky web spreads out on the ground around the opposing team!");
- MESSAGE("Go! Corviknigh!");
- MESSAGE("Corviknigh was caught in a Sticky Web!");
+ SEND_IN_MESSAGE("Corviknight");
+ MESSAGE("Corviknight was caught in a Sticky Web!");
ABILITY_POPUP(playerRight, ABILITY_MIRROR_ARMOR);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, BATTLER_OPPONENT);
if (opponentSetUpper == 0) {
MESSAGE("Foe Caterpie's Speed fell!");
+ NONE_OF {
+ MESSAGE("Foe Caterpie was caught in a Sticky Web!");
+ }
} else {
MESSAGE("Foe Weedle's Speed fell!");
+ NONE_OF {
+ MESSAGE("Foe Weedle was caught in a Sticky Web!");
+ }
}
}
}
@@ -170,8 +176,8 @@ DOUBLE_BATTLE_TEST("Sticky Web has correct interactions with Mirror Armor - no o
MESSAGE("A sticky web spreads out on the ground around the opposing team!");
}
- MESSAGE("Go! Corviknigh!");
- MESSAGE("Corviknigh was caught in a Sticky Web!");
+ SEND_IN_MESSAGE("Corviknight");
+ MESSAGE("Corviknight was caught in a Sticky Web!");
ABILITY_POPUP(playerRight, ABILITY_MIRROR_ARMOR);
NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft);
} THEN {
@@ -219,8 +225,8 @@ DOUBLE_BATTLE_TEST("Sticky Web has correct interactions with Mirror Armor - no o
MESSAGE("2 sent out Pidgey!");
}
- MESSAGE("Go! Corviknigh!");
- MESSAGE("Corviknigh was caught in a Sticky Web!");
+ SEND_IN_MESSAGE("Corviknight");
+ MESSAGE("Corviknight was caught in a Sticky Web!");
ABILITY_POPUP(playerRight, ABILITY_MIRROR_ARMOR);
NOT ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, opponentLeft);
} THEN {
diff --git a/test/battle/move_effect/stomping_tantrum.c b/test/battle/move_effect/stomping_tantrum.c
new file mode 100644
index 000000000000..1a5870fdd0db
--- /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/strength_sap.c b/test/battle/move_effect/strength_sap.c
index 0b055edb12e1..474707427042 100644
--- a/test/battle/move_effect/strength_sap.c
+++ b/test/battle/move_effect/strength_sap.c
@@ -190,7 +190,7 @@ SINGLE_BATTLE_TEST("Strength Sap makes attacker lose HP if target's ability is L
MESSAGE("It sucked up the liquid ooze!");
if (atkStat >= 490) {
MESSAGE("Wobbuffet fainted!");
- MESSAGE("Go! Wobbuffet!");
+ SEND_IN_MESSAGE("Wobbuffet");
}
} THEN {
EXPECT_EQ(lostHp, atkStat);
diff --git a/test/battle/move_effect/super_effective_on_arg.c b/test/battle/move_effect/super_effective_on_arg.c
new file mode 100644
index 000000000000..d10b8a2231aa
--- /dev/null
+++ b/test/battle/move_effect/super_effective_on_arg.c
@@ -0,0 +1,21 @@
+#include "global.h"
+#include "test/battle.h"
+
+ASSUMPTIONS
+{
+ ASSUME(gMovesInfo[MOVE_FREEZE_DRY].effect == EFFECT_SUPER_EFFECTIVE_ON_ARG);
+}
+
+SINGLE_BATTLE_TEST("Freeze Dry is super effective on water types")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_SHELLDER);
+ } WHEN {
+ TURN { MOVE(player, MOVE_FREEZE_DRY); }
+ } SCENE {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_FREEZE_DRY, player);
+ HP_BAR(opponent);
+ MESSAGE("It's super effective!");
+ }
+}
diff --git a/test/battle/move_effect/telekinesis.c b/test/battle/move_effect/telekinesis.c
index 4210b1865bee..3da96a08b999 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/tera_blast.c b/test/battle/move_effect/tera_blast.c
new file mode 100644
index 000000000000..4fcb52be3a85
--- /dev/null
+++ b/test/battle/move_effect/tera_blast.c
@@ -0,0 +1,188 @@
+#include "global.h"
+#include "test/battle.h"
+
+ASSUMPTIONS
+{
+ ASSUME(gMovesInfo[MOVE_TERA_BLAST].effect == EFFECT_TERA_BLAST);
+}
+
+SINGLE_BATTLE_TEST("Tera Blast changes from Normal-type to the user's Tera Type")
+{
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_TERA_BLAST].type == TYPE_NORMAL);
+ PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_DARK); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_TERA_BLAST, gimmick: GIMMICK_TERA); }
+ } SCENE {
+ MESSAGE("Wobbuffet used Tera Blast!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TERA_BLAST, player);
+ MESSAGE("It's super effective!");
+ }
+}
+
+SINGLE_BATTLE_TEST("Tera Blast has correct effectiveness for every Tera Type")
+{
+ u32 species;
+ u32 type;
+
+ PARAMETRIZE { species = SPECIES_CHIKORITA; type = TYPE_FLYING; }
+ PARAMETRIZE { species = SPECIES_CHIKORITA; type = TYPE_POISON; }
+ PARAMETRIZE { species = SPECIES_CHIKORITA; type = TYPE_FIRE; }
+ PARAMETRIZE { species = SPECIES_CHIKORITA; type = TYPE_BUG; }
+ PARAMETRIZE { species = SPECIES_CHIKORITA; type = TYPE_ICE; }
+ PARAMETRIZE { species = SPECIES_CYNDAQUIL; type = TYPE_GROUND; }
+ PARAMETRIZE { species = SPECIES_CYNDAQUIL; type = TYPE_ROCK; }
+ PARAMETRIZE { species = SPECIES_CYNDAQUIL; type = TYPE_WATER; }
+ PARAMETRIZE { species = SPECIES_GASTLY; type = TYPE_NORMAL; }
+ PARAMETRIZE { species = SPECIES_GASTLY; type = TYPE_GHOST; }
+ PARAMETRIZE { species = SPECIES_GASTLY; type = TYPE_PSYCHIC; }
+ PARAMETRIZE { species = SPECIES_TOTODILE; type = TYPE_GRASS; }
+ PARAMETRIZE { species = SPECIES_TOTODILE; type = TYPE_ELECTRIC; }
+ PARAMETRIZE { species = SPECIES_DRATINI; type = TYPE_DRAGON; }
+ PARAMETRIZE { species = SPECIES_DRATINI; type = TYPE_FAIRY; }
+ PARAMETRIZE { species = SPECIES_SNEASEL; type = TYPE_FIGHTING; }
+ PARAMETRIZE { species = SPECIES_SNEASEL; type = TYPE_STEEL; }
+ PARAMETRIZE { species = SPECIES_ABRA; type = TYPE_DARK; }
+
+ GIVEN {
+ ASSUME(gSpeciesInfo[SPECIES_CHIKORITA].types[0] == TYPE_GRASS);
+ ASSUME(gSpeciesInfo[SPECIES_CHIKORITA].types[1] == TYPE_GRASS);
+ ASSUME(gSpeciesInfo[SPECIES_CYNDAQUIL].types[0] == TYPE_FIRE);
+ ASSUME(gSpeciesInfo[SPECIES_CYNDAQUIL].types[1] == TYPE_FIRE);
+ ASSUME(gSpeciesInfo[SPECIES_GASTLY].types[0] == TYPE_GHOST);
+ ASSUME(gSpeciesInfo[SPECIES_GASTLY].types[1] == TYPE_POISON);
+ ASSUME(gSpeciesInfo[SPECIES_TOTODILE].types[0] == TYPE_WATER);
+ ASSUME(gSpeciesInfo[SPECIES_TOTODILE].types[1] == TYPE_WATER);
+ ASSUME(gSpeciesInfo[SPECIES_DRATINI].types[0] == TYPE_DRAGON);
+ ASSUME(gSpeciesInfo[SPECIES_DRATINI].types[1] == TYPE_DRAGON);
+ ASSUME(gSpeciesInfo[SPECIES_SNEASEL].types[0] == TYPE_DARK);
+ ASSUME(gSpeciesInfo[SPECIES_SNEASEL].types[1] == TYPE_ICE);
+ ASSUME(gSpeciesInfo[SPECIES_ABRA].types[0] == TYPE_PSYCHIC);
+ ASSUME(gSpeciesInfo[SPECIES_ABRA].types[1] == TYPE_PSYCHIC);
+ PLAYER(SPECIES_WOBBUFFET) { TeraType(type); }
+ OPPONENT(species);
+ } WHEN {
+ TURN { MOVE(player, MOVE_TERA_BLAST, gimmick: GIMMICK_TERA); }
+ } SCENE {
+ if (species == SPECIES_GASTLY && type == TYPE_NORMAL)
+ MESSAGE("It doesn't affect Foe Gastly…");
+ else
+ MESSAGE("It's super effective!");
+ }
+}
+
+SINGLE_BATTLE_TEST("Tera Blast becomes a physical move if the user is Terastallized and has a higher Attack stat", s16 damage)
+{
+ bool32 tera;
+ PARAMETRIZE { tera = GIMMICK_NONE; }
+ PARAMETRIZE { tera = GIMMICK_TERA; }
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_NORMAL); Attack(100); SpAttack(50); }
+ OPPONENT(SPECIES_WOBBUFFET) { Defense(200); SpDefense(200); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_TERA_BLAST, gimmick: tera); }
+ } SCENE {
+ MESSAGE("Wobbuffet used Tera Blast!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TERA_BLAST, player);
+ HP_BAR(opponent, captureDamage: &results[i].damage);
+ } FINALLY {
+ // Since Wobbuffett has equal defenses, Tera Blast should do 1.5x more damage
+ // from gaining STAB and an additional 2.0x damage from using its highest
+ // attacking stat.
+ EXPECT_MUL_EQ(results[0].damage, UQ_4_12(3.0), results[1].damage);
+ }
+}
+
+SINGLE_BATTLE_TEST("Stellar-type Tera Blast lowers both offensive stats")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_STELLAR); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_TERA_BLAST, gimmick: GIMMICK_TERA); }
+ } SCENE {
+ MESSAGE("Wobbuffet used Tera Blast!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TERA_BLAST, player);
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
+ MESSAGE("Wobbuffet's Attack fell!");
+ MESSAGE("Wobbuffet's Sp. Atk fell!");
+ }
+}
+
+
+SINGLE_BATTLE_TEST("Stellar-type Tera Blast has 100 BP and a one-time 1.2x boost")
+{
+ s16 damage[3];
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_STELLAR); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_TERA_BLAST); MOVE(opponent, MOVE_RECOVER); }
+ TURN { MOVE(player, MOVE_TERA_BLAST, gimmick: GIMMICK_TERA); }
+ TURN { MOVE(player, MOVE_WORK_UP); }
+ TURN { MOVE(player, MOVE_TERA_BLAST); }
+ } SCENE {
+ // turn 1
+ MESSAGE("Wobbuffet used Tera Blast!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TERA_BLAST, player);
+ HP_BAR(opponent, captureDamage: &damage[0]);
+ // turn 2
+ MESSAGE("Wobbuffet used Tera Blast!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TERA_BLAST, player);
+ HP_BAR(opponent, captureDamage: &damage[1]);
+ // turn 4
+ MESSAGE("Wobbuffet used Tera Blast!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TERA_BLAST, player);
+ HP_BAR(opponent, captureDamage: &damage[2]);
+ } THEN {
+ // 80 BP to 120 BP (100 * 1.2) boost upon Terastallizing
+ EXPECT_MUL_EQ(damage[0], UQ_4_12(1.50), damage[1]);
+ // 120 BP to 100 BP after Stellar boost expended
+ EXPECT_MUL_EQ(damage[2], UQ_4_12(1.20), damage[1]);
+ }
+}
+
+SINGLE_BATTLE_TEST("Stellar-type Tera Blast is super-effective on Stellar-type Pokemon")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_STELLAR); }
+ OPPONENT(SPECIES_WOBBUFFET) { TeraType(TYPE_STELLAR); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_TERA_BLAST, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); }
+ } SCENE {
+ MESSAGE("Wobbuffet used Tera Blast!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TERA_BLAST, player);
+ MESSAGE("It's super effective!");
+ }
+}
+
+SINGLE_BATTLE_TEST("Stellar-type Tera Blast activates a Stellar-type Pokemon's Weakness Policy")
+{
+ GIVEN {
+ PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_STELLAR); }
+ OPPONENT(SPECIES_WOBBUFFET) { Item(ITEM_WEAKNESS_POLICY); TeraType(TYPE_NORMAL); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_TERA_BLAST, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_CELEBRATE, gimmick: GIMMICK_TERA); }
+ } SCENE {
+ MESSAGE("Wobbuffet used Tera Blast!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TERA_BLAST, player);
+ MESSAGE("It's super effective!");
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_HELD_ITEM_EFFECT, opponent);
+ }
+}
+
+SINGLE_BATTLE_TEST("Flying-type Tera Blast does not have its priority boosted by Gale Wings")
+{
+ GIVEN {
+ PLAYER(SPECIES_TALONFLAME) { Ability(ABILITY_GALE_WINGS); TeraType(TYPE_FLYING); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(player, MOVE_TERA_BLAST, gimmick: GIMMICK_TERA); MOVE(opponent, MOVE_QUICK_ATTACK); }
+ } SCENE {
+ MESSAGE("Foe Wobbuffet used Quick Attack!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_QUICK_ATTACK, opponent);
+ MESSAGE("Talonflame used Tera Blast!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TERA_BLAST, player);
+ }
+}
diff --git a/test/battle/move_effect/tera_starstorm.c b/test/battle/move_effect/tera_starstorm.c
new file mode 100644
index 000000000000..8b1ff41c75b0
--- /dev/null
+++ b/test/battle/move_effect/tera_starstorm.c
@@ -0,0 +1,76 @@
+#include "global.h"
+#include "test/battle.h"
+
+ASSUMPTIONS
+{
+ ASSUME(gMovesInfo[MOVE_TERA_STARSTORM].effect == EFFECT_TERA_STARSTORM);
+}
+
+SINGLE_BATTLE_TEST("Tera Starstorm changes from Normal-type to Stellar-type if used by Terapagos-Stellar")
+{
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_TERA_STARSTORM].type == TYPE_NORMAL);
+ PLAYER(SPECIES_TERAPAGOS_STELLAR);
+ OPPONENT(SPECIES_MISDREAVUS);
+ } WHEN {
+ TURN { MOVE(player, MOVE_TERA_STARSTORM); }
+ } SCENE {
+ MESSAGE("Terapagos used Tera Starstorm!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TERA_STARSTORM, player);
+ HP_BAR(opponent);
+ NOT { MESSAGE("It doesn't affect Foe Misdreavus…"); }
+ }
+}
+
+DOUBLE_BATTLE_TEST("Tera Starstorm targets both opponents in a double battle if used by Terapagos-Stellar")
+{
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_TERA_STARSTORM].target == MOVE_TARGET_SELECTED);
+ PLAYER(SPECIES_TERAPAGOS_STELLAR);
+ PLAYER(SPECIES_WYNAUT);
+ OPPONENT(SPECIES_WOBBUFFET);
+ OPPONENT(SPECIES_WYNAUT);
+ } WHEN {
+ TURN { MOVE(playerLeft, MOVE_TERA_STARSTORM, target:opponentLeft); }
+ } SCENE {
+ MESSAGE("Terapagos used Tera Starstorm!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TERA_STARSTORM, playerLeft);
+ HP_BAR(opponentLeft);
+ HP_BAR(opponentRight);
+ }
+}
+
+SINGLE_BATTLE_TEST("Tera Starstorm becomes a physical move if the user is Terapagos-Stellar, is Terastallized, and has a higher Attack stat", s16 damage)
+{
+ bool32 tera;
+ PARAMETRIZE { tera = GIMMICK_NONE; }
+ PARAMETRIZE { tera = GIMMICK_TERA; }
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_TERA_STARSTORM].category == DAMAGE_CATEGORY_SPECIAL);
+ PLAYER(SPECIES_TERAPAGOS_STELLAR) { Attack(100); SpAttack(50); }
+ OPPONENT(SPECIES_WOBBUFFET) { Defense(200); SpDefense(200); }
+ } WHEN {
+ TURN { MOVE(player, MOVE_TERA_STARSTORM, gimmick: tera); }
+ } SCENE {
+ MESSAGE("Terapagos used Tera Starstorm!");
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_TERA_STARSTORM, player);
+ HP_BAR(opponent, captureDamage: &results[i].damage);
+ } FINALLY {
+ EXPECT_MUL_EQ(results[0].damage, UQ_4_12(2.5), results[1].damage);
+ }
+}
+
+SINGLE_BATTLE_TEST("Tera Starstorm remains Normal-type if used by Pokemon other than Terapagos")
+{
+ GIVEN {
+ ASSUME(gMovesInfo[MOVE_TERA_STARSTORM].type == TYPE_NORMAL);
+ ASSUME(gSpeciesInfo[SPECIES_MISDREAVUS].types[0] == TYPE_GHOST);
+ PLAYER(SPECIES_WOBBUFFET) { TeraType(TYPE_STELLAR); }
+ OPPONENT(SPECIES_MISDREAVUS);
+ } WHEN {
+ TURN { MOVE(player, MOVE_TERA_STARSTORM, gimmick: GIMMICK_TERA); }
+ } SCENE {
+ MESSAGE("Wobbuffet used Tera Starstorm!");
+ MESSAGE("It doesn't affect Foe Misdreavus…");
+ }
+}
diff --git a/test/battle/move_effect/thousand_arrows.c b/test/battle/move_effect/thousand_arrows.c
index ff1b041cba05..8deea06fbe8d 100644
--- a/test/battle/move_effect/thousand_arrows.c
+++ b/test/battle/move_effect/thousand_arrows.c
@@ -41,7 +41,7 @@ SINGLE_BATTLE_TEST("Thousand Arrows does neutral damage to non-grounded Flying t
}
ANIMATION(ANIM_TYPE_MOVE, MOVE_CELEBRATE, opponent);
MESSAGE("Congratulations, 1!");
- MESSAGE("Wobbuffet used ThousndArrws!");
+ MESSAGE("Wobbuffet used Thousand Arrows!");
ANIMATION(ANIM_TYPE_MOVE, MOVE_THOUSAND_ARROWS, player);
if (pokemon == SPECIES_SKARMORY)
{
diff --git a/test/battle/move_effect/tidy_up.c b/test/battle/move_effect/tidy_up.c
index 463fb65af8b9..338ba90dc026 100644
--- a/test/battle/move_effect/tidy_up.c
+++ b/test/battle/move_effect/tidy_up.c
@@ -74,13 +74,14 @@ SINGLE_BATTLE_TEST("Tidy Up removes Substitute")
}
}
-AI_SINGLE_BATTLE_TEST("AI prefers to keep it's substitute over removing hazards if target is slower")
+AI_SINGLE_BATTLE_TEST("AI prefers to keep its substitute over removing hazards if target is slower")
{
GIVEN {
AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT);
PLAYER(SPECIES_WOBBUFFET) { Speed(50); Status1(STATUS1_PARALYSIS); Moves(MOVE_SLEEP_POWDER, MOVE_STEALTH_ROCK, MOVE_CELEBRATE); }
OPPONENT(SPECIES_WOBBUFFET) { Speed(100); Moves(MOVE_BITE, MOVE_TACKLE, MOVE_SUBSTITUTE, MOVE_TIDY_UP); }
} WHEN {
+ TURN { MOVE(player, MOVE_STEALTH_ROCK); EXPECT_MOVE(opponent, MOVE_TIDY_UP); }
TURN { MOVE(player, MOVE_STEALTH_ROCK); EXPECT_MOVE(opponent, MOVE_SUBSTITUTE); }
TURN { EXPECT_MOVE(opponent, MOVE_BITE); }
}
@@ -93,6 +94,7 @@ AI_SINGLE_BATTLE_TEST("AI will try to remove hazards if slower then target even
PLAYER(SPECIES_WOBBUFFET) { Speed(100); Status1(STATUS1_BURN); Moves(MOVE_SLEEP_POWDER, MOVE_STEALTH_ROCK, MOVE_CELEBRATE); }
OPPONENT(SPECIES_WOBBUFFET) { Speed(50); Moves(MOVE_BITE, MOVE_TACKLE, MOVE_SUBSTITUTE, MOVE_TIDY_UP); }
} WHEN {
+ TURN { MOVE(player, MOVE_STEALTH_ROCK); EXPECT_MOVE(opponent, MOVE_TIDY_UP); }
TURN { MOVE(player, MOVE_STEALTH_ROCK); EXPECT_MOVE(opponent, MOVE_SUBSTITUTE); }
TURN { EXPECT_MOVE(opponent, MOVE_TIDY_UP); }
}
diff --git a/test/battle/move_effect/toxic_spikes.c b/test/battle/move_effect/toxic_spikes.c
index 517a1b261e29..6bf2e0d2a38f 100644
--- a/test/battle/move_effect/toxic_spikes.c
+++ b/test/battle/move_effect/toxic_spikes.c
@@ -226,7 +226,7 @@ SINGLE_BATTLE_TEST("Toxic Spikes inflicts poison on switch in after Primal Rever
ANIMATION(ANIM_TYPE_MOVE, MOVE_TOXIC_SPIKES, opponent);
MESSAGE("Poison Spikes were scattered all around your team's feet!");
// Switch in
- MESSAGE("Go! Groudon!");
+ SEND_IN_MESSAGE("Groudon");
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, player);
STATUS_ICON(player, poison: TRUE);
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, player);
@@ -235,7 +235,7 @@ SINGLE_BATTLE_TEST("Toxic Spikes inflicts poison on switch in after Primal Rever
MESSAGE("Groudon used Memento!");
MESSAGE("Groudon fainted!");
// 2nd switch-in
- MESSAGE("Go! Wynaut!");
+ SEND_IN_MESSAGE("Wynaut");
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_PSN, player);
STATUS_ICON(player, poison: TRUE);
}
diff --git a/test/battle/move_effect/upper_hand.c b/test/battle/move_effect/upper_hand.c
index 04f2b8522565..6a041182fe5f 100644
--- a/test/battle/move_effect/upper_hand.c
+++ b/test/battle/move_effect/upper_hand.c
@@ -116,3 +116,19 @@ SINGLE_BATTLE_TEST("Upper Hand is boosted by Sheer Force")
HP_BAR(player);
}
}
+
+AI_SINGLE_BATTLE_TEST("AI won't use Upper Hand unless it has seen a priority move")
+{
+ u16 move;
+ PARAMETRIZE { move = MOVE_TACKLE; }
+ PARAMETRIZE { move = MOVE_QUICK_ATTACK; }
+ GIVEN {
+ AI_FLAGS(AI_FLAG_CHECK_BAD_MOVE | AI_FLAG_CHECK_VIABILITY | AI_FLAG_TRY_TO_FAINT);
+ ASSUME(gMovesInfo[MOVE_QUICK_ATTACK].priority == 1);
+ PLAYER(SPECIES_WOBBUFFET) {Moves(move); }
+ OPPONENT(SPECIES_WOBBUFFET) { Moves(MOVE_UPPER_HAND, MOVE_KARATE_CHOP); }
+ } WHEN {
+ TURN { MOVE(player, move); EXPECT_MOVE(opponent, MOVE_KARATE_CHOP); }
+ TURN { MOVE(player, move); EXPECT_MOVE(opponent, move == MOVE_QUICK_ATTACK ? MOVE_UPPER_HAND : MOVE_KARATE_CHOP); }
+ }
+}
diff --git a/test/battle/move_effect/weather_ball.c b/test/battle/move_effect/weather_ball.c
index 1656b60d87b0..432e5f79f737 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_effect_secondary/freeze.c b/test/battle/move_effect_secondary/freeze.c
index d7a182b3d9c4..1539c8a25b76 100644
--- a/test/battle/move_effect_secondary/freeze.c
+++ b/test/battle/move_effect_secondary/freeze.c
@@ -7,7 +7,11 @@ ASSUMPTIONS
ASSUME(gMovesInfo[MOVE_BLIZZARD].accuracy == 70);
}
+#if B_USE_FROSTBITE == TRUE
+SINGLE_BATTLE_TEST("Powder Snow inflicts frostbite")
+#else
SINGLE_BATTLE_TEST("Powder Snow inflicts freeze")
+#endif
{
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
@@ -18,11 +22,15 @@ SINGLE_BATTLE_TEST("Powder Snow inflicts freeze")
ANIMATION(ANIM_TYPE_MOVE, MOVE_POWDER_SNOW, player);
HP_BAR(opponent);
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, opponent);
- STATUS_ICON(opponent, freeze: TRUE);
+ FREEZE_OR_FROSTBURN_STATUS(opponent, TRUE);
}
}
+#if B_USE_FROSTBITE == TRUE
+SINGLE_BATTLE_TEST("Powder Snow cannot frostbite an Ice-type Pokémon")
+#else
SINGLE_BATTLE_TEST("Powder Snow cannot freeze an Ice-type Pokémon")
+#endif
{
GIVEN {
ASSUME(gSpeciesInfo[SPECIES_SNORUNT].types[0] == TYPE_ICE);
@@ -35,7 +43,7 @@ SINGLE_BATTLE_TEST("Powder Snow cannot freeze an Ice-type Pokémon")
HP_BAR(opponent);
NONE_OF {
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, opponent);
- STATUS_ICON(opponent, freeze: TRUE);
+ FREEZE_OR_FROSTBURN_STATUS(opponent, TRUE);
}
}
}
@@ -68,10 +76,18 @@ SINGLE_BATTLE_TEST("Blizzard bypasses accuracy checks in Hail and Snow")
}
#if B_STATUS_TYPE_IMMUNITY > GEN_1
+#if B_USE_FROSTBITE == TRUE
+SINGLE_BATTLE_TEST("Freezing Glare should frostbite Psychic-types")
+#else
SINGLE_BATTLE_TEST("Freezing Glare should freeze Psychic-types")
+#endif
+#else
+#if B_USE_FROSTBITE == TRUE
+SINGLE_BATTLE_TEST("Freezing Glare shouldn't freeze Psychic-types")
#else
SINGLE_BATTLE_TEST("Freezing Glare shouldn't freeze Psychic-types")
#endif
+#endif
{
GIVEN {
ASSUME(gSpeciesInfo[SPECIES_ARTICUNO_GALARIAN].types[0] == TYPE_PSYCHIC);
@@ -86,11 +102,11 @@ SINGLE_BATTLE_TEST("Freezing Glare shouldn't freeze Psychic-types")
HP_BAR(opponent);
#if B_STATUS_TYPE_IMMUNITY > GEN_1
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, opponent);
- STATUS_ICON(opponent, freeze: TRUE);
+ FREEZE_OR_FROSTBURN_STATUS(opponent, TRUE);
#else
NONE_OF {
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, opponent);
- STATUS_ICON(opponent, freeze: TRUE);
+ FREEZE_OR_FROSTBURN_STATUS(opponent, TRUE);
}
#endif
}
diff --git a/test/battle/move_effect_secondary/psychic_noise.c b/test/battle/move_effect_secondary/psychic_noise.c
index 7846157b77d5..e8d50dc961ac 100644
--- a/test/battle/move_effect_secondary/psychic_noise.c
+++ b/test/battle/move_effect_secondary/psychic_noise.c
@@ -35,7 +35,7 @@ SINGLE_BATTLE_TEST("Psychic Noise is blocked by Soundproof")
TURN { MOVE(player, MOVE_PSYCHIC_NOISE); MOVE(opponent, MOVE_RECOVER); }
} SCENE {
ABILITY_POPUP(opponent, ABILITY_SOUNDPROOF);
- MESSAGE("Foe Voltorb's Soundproof blocks PsychicNoise!");
+ MESSAGE("Foe Voltorb's Soundproof blocks Psychic Noise!");
ANIMATION(ANIM_TYPE_MOVE, MOVE_RECOVER, opponent);
}
}
diff --git a/test/battle/move_effect_secondary/sp_atk_two_down.c b/test/battle/move_effect_secondary/sp_atk_minus_2.c
similarity index 98%
rename from test/battle/move_effect_secondary/sp_atk_two_down.c
rename to test/battle/move_effect_secondary/sp_atk_minus_2.c
index ff88e2d332dd..ff144770540a 100644
--- a/test/battle/move_effect_secondary/sp_atk_two_down.c
+++ b/test/battle/move_effect_secondary/sp_atk_minus_2.c
@@ -3,7 +3,7 @@
ASSUMPTIONS
{
- ASSUME(MoveHasAdditionalEffectSelf(MOVE_OVERHEAT, MOVE_EFFECT_SP_ATK_TWO_DOWN));
+ ASSUME(MoveHasAdditionalEffectSelf(MOVE_OVERHEAT, MOVE_EFFECT_SP_ATK_MINUS_2));
}
SINGLE_BATTLE_TEST("Overheat drops Sp. Atk by 2 stages - singles")
diff --git a/test/battle/move_effect_secondary/syrup_bomb.c b/test/battle/move_effect_secondary/syrup_bomb.c
index 1e6d61372140..0fc55c3d604c 100644
--- a/test/battle/move_effect_secondary/syrup_bomb.c
+++ b/test/battle/move_effect_secondary/syrup_bomb.c
@@ -210,7 +210,7 @@ SINGLE_BATTLE_TEST("Sticky Syrup is removed when the user faints")
ANIMATION(ANIM_TYPE_MOVE, MOVE_TACKLE, opponent);
HP_BAR(player);
MESSAGE("Wobbuffet fainted!");
- MESSAGE("Go! Wynaut!");
+ SEND_IN_MESSAGE("Wynaut");
NONE_OF {
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_SYRUP_BOMB_SPEED_DROP, opponent);
MESSAGE("Foe Wobbuffet's Speed fell!");
diff --git a/test/battle/move_effect_secondary/tri_attack.c b/test/battle/move_effect_secondary/tri_attack.c
index 97eaa76ad876..e84573dcdf5b 100644
--- a/test/battle/move_effect_secondary/tri_attack.c
+++ b/test/battle/move_effect_secondary/tri_attack.c
@@ -6,7 +6,11 @@ ASSUMPTIONS
ASSUME(MoveHasAdditionalEffect(MOVE_TRI_ATTACK, MOVE_EFFECT_TRI_ATTACK) == TRUE);
}
+#if B_USE_FROSTBITE == TRUE
+SINGLE_BATTLE_TEST("Tri Attack can inflict paralysis, burn or frostbite")
+#else
SINGLE_BATTLE_TEST("Tri Attack can inflict paralysis, burn or freeze")
+#endif
{
u8 statusAnim;
PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; }
@@ -26,14 +30,18 @@ SINGLE_BATTLE_TEST("Tri Attack can inflict paralysis, burn or freeze")
if (statusAnim == B_ANIM_STATUS_BRN) {
STATUS_ICON(opponent, burn: TRUE);
} else if (statusAnim == B_ANIM_STATUS_FRZ) {
- STATUS_ICON(opponent, freeze: TRUE);
+ FREEZE_OR_FROSTBURN_STATUS(opponent, TRUE);
} else if (statusAnim == B_ANIM_STATUS_PRZ) {
STATUS_ICON(opponent, paralysis: TRUE);
}
}
}
+#if B_USE_FROSTBITE == TRUE
+SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/frostbite electric/fire/ice types respectively")
+#else
SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze electric/fire/ice types respectively")
+#endif
{
u8 statusAnim;
u16 species;
@@ -42,7 +50,7 @@ SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze electric/fire/ice typ
PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = MOVE_EFFECT_PARALYSIS; species = SPECIES_RAICHU; }
#endif // B_PARALYZE_ELECTRIC
PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = MOVE_EFFECT_BURN; species = SPECIES_ARCANINE; }
- PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = MOVE_EFFECT_FREEZE; species = SPECIES_GLALIE; }
+ PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = MOVE_EFFECT_FREEZE_OR_FROSTBITE; species = SPECIES_GLALIE; }
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(species);
@@ -57,7 +65,7 @@ SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze electric/fire/ice typ
if (statusAnim == B_ANIM_STATUS_BRN) {
STATUS_ICON(opponent, burn: TRUE);
} else if (statusAnim == B_ANIM_STATUS_FRZ) {
- STATUS_ICON(opponent, freeze: TRUE);
+ FREEZE_OR_FROSTBURN_STATUS(opponent, TRUE);
} else if (statusAnim == B_ANIM_STATUS_PRZ) {
STATUS_ICON(opponent, paralysis: TRUE);
}
@@ -65,7 +73,11 @@ SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze electric/fire/ice typ
}
}
+#if B_USE_FROSTBITE == TRUE
+SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/frostbite pokemon with abilities preventing respective statuses")
+#else
SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze pokemon with abilities preventing respective statuses")
+#endif
{
u8 statusAnim;
u16 species, ability;
@@ -75,8 +87,8 @@ SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze pokemon with abilitie
PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = MOVE_EFFECT_BURN; species = SPECIES_DEWPIDER; ability = ABILITY_WATER_BUBBLE; }
PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = MOVE_EFFECT_BURN; species = SPECIES_SEAKING; ability = ABILITY_WATER_VEIL; }
PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = MOVE_EFFECT_BURN; species = SPECIES_KOMALA; ability = ABILITY_COMATOSE; }
- PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = MOVE_EFFECT_FREEZE; species = SPECIES_CAMERUPT; ability = ABILITY_MAGMA_ARMOR; }
- PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = MOVE_EFFECT_FREEZE; species = SPECIES_KOMALA; ability = ABILITY_COMATOSE; }
+ PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = MOVE_EFFECT_FREEZE_OR_FROSTBITE; species = SPECIES_CAMERUPT; ability = ABILITY_MAGMA_ARMOR; }
+ PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = MOVE_EFFECT_FREEZE_OR_FROSTBITE; species = SPECIES_KOMALA; ability = ABILITY_COMATOSE; }
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
@@ -92,7 +104,7 @@ SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze pokemon with abilitie
if (statusAnim == B_ANIM_STATUS_BRN) {
STATUS_ICON(opponent, burn: TRUE);
} else if (statusAnim == B_ANIM_STATUS_FRZ) {
- STATUS_ICON(opponent, freeze: TRUE);
+ FREEZE_OR_FROSTBURN_STATUS(opponent, TRUE);
} else if (statusAnim == B_ANIM_STATUS_PRZ) {
STATUS_ICON(opponent, paralysis: TRUE);
}
@@ -100,13 +112,17 @@ SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze pokemon with abilitie
}
}
+#if B_USE_FROSTBITE == TRUE
+SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/frostbite a mon which is already statused")
+#else
SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze a mon which is already statused")
+#endif
{
u8 statusAnim;
u32 rng;
PARAMETRIZE { statusAnim = B_ANIM_STATUS_PRZ; rng = MOVE_EFFECT_PARALYSIS; }
PARAMETRIZE { statusAnim = B_ANIM_STATUS_BRN; rng = MOVE_EFFECT_BURN; }
- PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = MOVE_EFFECT_FREEZE; }
+ PARAMETRIZE { statusAnim = B_ANIM_STATUS_FRZ; rng = MOVE_EFFECT_FREEZE_OR_FROSTBITE; }
GIVEN {
PLAYER(SPECIES_WOBBUFFET);
OPPONENT(SPECIES_WOBBUFFET) { Status1(STATUS1_SLEEP); }
@@ -121,7 +137,7 @@ SINGLE_BATTLE_TEST("Tri Attack cannot paralyze/burn/freeze a mon which is alread
if (statusAnim == B_ANIM_STATUS_BRN) {
STATUS_ICON(opponent, burn: TRUE);
} else if (statusAnim == B_ANIM_STATUS_FRZ) {
- STATUS_ICON(opponent, freeze: TRUE);
+ FREEZE_OR_FROSTBURN_STATUS(opponent, TRUE);
} else if (statusAnim == B_ANIM_STATUS_PRZ) {
STATUS_ICON(opponent, paralysis: TRUE);
}
diff --git a/test/battle/move_effects_combined/flinch_status.c b/test/battle/move_effects_combined/flinch_status.c
index 6ef9e09bf1dc..bad28eac4e7a 100644
--- a/test/battle/move_effects_combined/flinch_status.c
+++ b/test/battle/move_effects_combined/flinch_status.c
@@ -5,7 +5,7 @@ ASSUMPTIONS
{
ASSUME(MoveHasAdditionalEffect(MOVE_THUNDER_FANG, MOVE_EFFECT_PARALYSIS) == TRUE);
ASSUME(MoveHasAdditionalEffect(MOVE_THUNDER_FANG, MOVE_EFFECT_FLINCH) == TRUE);
- ASSUME(MoveHasAdditionalEffect(MOVE_ICE_FANG, MOVE_EFFECT_FREEZE) == TRUE);
+ ASSUME(MoveHasAdditionalEffect(MOVE_ICE_FANG, MOVE_EFFECT_FREEZE_OR_FROSTBITE) == TRUE);
ASSUME(MoveHasAdditionalEffect(MOVE_ICE_FANG, MOVE_EFFECT_FLINCH) == TRUE);
ASSUME(MoveHasAdditionalEffect(MOVE_FIRE_FANG, MOVE_EFFECT_BURN) == TRUE);
ASSUME(MoveHasAdditionalEffect(MOVE_FIRE_FANG, MOVE_EFFECT_FLINCH) == TRUE);
@@ -33,7 +33,7 @@ SINGLE_BATTLE_TEST("Thunder, Ice and Fire Fang inflict status 10% of the time")
STATUS_ICON(opponent, paralysis: TRUE);
} if (move == MOVE_ICE_FANG) {
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_FRZ, opponent);
- STATUS_ICON(opponent, freeze: TRUE);
+ FREEZE_OR_FROSTBURN_STATUS(opponent, TRUE);
} if (move == MOVE_FIRE_FANG) {
ANIMATION(ANIM_TYPE_STATUS, B_ANIM_STATUS_BRN, opponent);
STATUS_ICON(opponent, burn: TRUE);
diff --git a/test/battle/terrain/electric.c b/test/battle/terrain/electric.c
index c6fda3fb3e81..c39bfbbb71da 100644
--- a/test/battle/terrain/electric.c
+++ b/test/battle/terrain/electric.c
@@ -10,7 +10,7 @@ SINGLE_BATTLE_TEST("Electric Terrain protects grounded battlers from falling asl
TURN { MOVE(player, MOVE_ELECTRIC_TERRAIN); MOVE(opponent, MOVE_SPORE); }
TURN { MOVE(player, MOVE_SPORE); }
} SCENE {
- MESSAGE("Wobbuffet used ElctrcTrrain!");
+ MESSAGE("Wobbuffet used Electric Terrain!");
MESSAGE("Foe Claydol used Spore!");
MESSAGE("Wobbuffet surrounds itself with electrified terrain!");
MESSAGE("Wobbuffet used Spore!");
@@ -32,9 +32,9 @@ SINGLE_BATTLE_TEST("Electric Terrain activates Electric Seed and Mimicry")
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
MESSAGE("Using Electric Seed, the Defense of Wobbuffet rose!");
ABILITY_POPUP(opponent);
- MESSAGE("Foe Stunfisk's type changed to Electr!");
+ 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);
}
}
@@ -51,7 +51,7 @@ SINGLE_BATTLE_TEST("Electric Terrain increases power of Electric-type moves by 3
TURN { MOVE(player, MOVE_ELECTRIC_TERRAIN); }
TURN { MOVE(player, MOVE_THUNDER_SHOCK); }
} SCENE {
- MESSAGE("Wobbuffet used ThunderShock!");
+ MESSAGE("Wobbuffet used Thunder Shock!");
HP_BAR(opponent, captureDamage: &results[i].damage);
} FINALLY {
if (B_TERRAIN_TYPE_BOOST >= GEN_8)
diff --git a/test/battle/terrain/grassy.c b/test/battle/terrain/grassy.c
index 862c9052fd30..5840f0310cdd 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 c76689ce7957..fbf04fcba968 100644
--- a/test/battle/terrain/misty.c
+++ b/test/battle/terrain/misty.c
@@ -10,7 +10,7 @@ SINGLE_BATTLE_TEST("Misty Terrain protects grounded battlers from non-volatile s
TURN { MOVE(player, MOVE_MISTY_TERRAIN); MOVE(opponent, MOVE_TOXIC); }
TURN { MOVE(player, MOVE_TOXIC); }
} SCENE {
- MESSAGE("Wobbuffet used MistyTerrain!");
+ MESSAGE("Wobbuffet used Misty Terrain!");
MESSAGE("Foe Claydol used Toxic!");
MESSAGE("Wobbuffet surrounds itself with a protective mist!");
NOT { STATUS_ICON(opponent, badPoison: TRUE); }
@@ -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 9c52be36e646..4578491eba82 100644
--- a/test/battle/terrain/psychic.c
+++ b/test/battle/terrain/psychic.c
@@ -10,7 +10,7 @@ SINGLE_BATTLE_TEST("Psychic Terrain protects grounded battlers from priority mov
TURN { MOVE(player, MOVE_PSYCHIC_TERRAIN); }
TURN { MOVE(player, MOVE_QUICK_ATTACK); MOVE(opponent, MOVE_QUICK_ATTACK); }
} SCENE {
- MESSAGE("Claydol used PsychcTrrain!");
+ MESSAGE("Claydol used Psychic Terrain!");
MESSAGE("Claydol cannot use Quick Attack!");
NOT { HP_BAR(opponent); }
MESSAGE("Foe Wobbuffet used Quick Attack!");
@@ -31,9 +31,9 @@ SINGLE_BATTLE_TEST("Psychic Terrain activates Psychic Seed and Mimicry")
ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_STATS_CHANGE, player);
MESSAGE("Using Psychic Seed, the Sp. Def of Wobbuffet rose!");
ABILITY_POPUP(opponent);
- MESSAGE("Foe Stunfisk's type changed to Psychc!");
+ 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);
}
}
@@ -69,7 +69,7 @@ SINGLE_BATTLE_TEST("Psychic Terrain doesn't block priority moves that target the
TURN { MOVE(player, MOVE_PSYCHIC_TERRAIN); }
TURN { MOVE(player, MOVE_RECOVER); }
} SCENE {
- MESSAGE("Sableye used PsychcTrrain!");
+ MESSAGE("Sableye used Psychic Terrain!");
MESSAGE("Sableye used Recover!");
HP_BAR(player);
}
@@ -84,7 +84,7 @@ SINGLE_BATTLE_TEST("Psychic Terrain doesn't block priority moves that target all
TURN { MOVE(player, MOVE_PSYCHIC_TERRAIN); }
TURN { MOVE(player, MOVE_HAZE); }
} SCENE {
- MESSAGE("Sableye used PsychcTrrain!");
+ MESSAGE("Sableye used Psychic Terrain!");
MESSAGE("Sableye used Haze!");
}
}
@@ -98,7 +98,7 @@ SINGLE_BATTLE_TEST("Psychic Terrain doesn't block priority moves that target all
TURN { MOVE(player, MOVE_PSYCHIC_TERRAIN); }
TURN { MOVE(player, MOVE_SPIKES); }
} SCENE {
- MESSAGE("Sableye used PsychcTrrain!");
+ MESSAGE("Sableye used Psychic Terrain!");
MESSAGE("Sableye used Spikes!");
}
}
@@ -114,7 +114,7 @@ DOUBLE_BATTLE_TEST("Psychic Terrain doesn't block priority moves that target all
TURN { MOVE(playerLeft, MOVE_PSYCHIC_TERRAIN); }
TURN { MOVE(playerLeft, MOVE_HEAL_PULSE, target: playerRight); }
} SCENE {
- MESSAGE("Sableye used PsychcTrrain!");
+ MESSAGE("Sableye used Psychic Terrain!");
MESSAGE("Sableye used Heal Pulse!");
}
}
@@ -128,7 +128,7 @@ SINGLE_BATTLE_TEST("Psychic Terrain doesn't block priority field moves")
TURN { MOVE(player, MOVE_PSYCHIC_TERRAIN); }
TURN { MOVE(player, MOVE_SUNNY_DAY); }
} SCENE {
- MESSAGE("Sableye used PsychcTrrain!");
+ MESSAGE("Sableye used Psychic Terrain!");
MESSAGE("Sableye used Sunny Day!");
}
}
diff --git a/test/battle/test_runner_features.c b/test/battle/test_runner_features.c
new file mode 100644
index 000000000000..6b84c4fc2d66
--- /dev/null
+++ b/test/battle/test_runner_features.c
@@ -0,0 +1,27 @@
+#include "global.h"
+#include "test/battle.h"
+
+ASSUMPTIONS {
+ int i;
+ for (i = 0; i < NUM_ABILITY_SLOTS; i++) {
+ ASSUME(gSpeciesInfo[SPECIES_KADABRA].abilities[i] != ABILITY_QUARK_DRIVE);
+ ASSUME(gSpeciesInfo[SPECIES_ALAKAZAM].abilities[i] != ABILITY_ELECTRIC_SURGE);
+ }
+}
+
+SINGLE_BATTLE_TEST("Forced abilities activate on switch-in")
+{
+ GIVEN {
+ PLAYER(SPECIES_ALAKAZAM);
+ PLAYER(SPECIES_KADABRA) { Ability(ABILITY_QUARK_DRIVE); SpAttack(400);}
+ OPPONENT(SPECIES_ARON);
+ OPPONENT(SPECIES_ALAKAZAM) { Ability(ABILITY_ELECTRIC_SURGE); };
+ } WHEN {
+ TURN { SWITCH(player, 1); SWITCH(opponent, 1);}
+ } SCENE {
+ ABILITY_POPUP(opponent, ABILITY_ELECTRIC_SURGE);
+ ABILITY_POPUP(player, ABILITY_QUARK_DRIVE);
+ MESSAGE("The Electric Terrain activated Kadabra's Quark Drive!");
+ MESSAGE("Kadabra's Sp. Atk was heightened!");
+ }
+}
diff --git a/test/battle/trainer_control.c b/test/battle/trainer_control.c
index 941536094822..e31d281efe4c 100644
--- a/test/battle/trainer_control.c
+++ b/test/battle/trainer_control.c
@@ -11,47 +11,16 @@
#include "constants/trainers.h"
#include "constants/battle.h"
-
-static const struct TrainerMon sTestParty1[] =
-{
- {
- .species = SPECIES_WOBBUFFET,
- .ball = ITEM_MASTER_BALL,
- .ability = ABILITY_TELEPATHY,
- .friendship = 42,
- .gender = TRAINER_MON_FEMALE,
- .heldItem = ITEM_ASSAULT_VEST,
- .isShiny = TRUE,
- .iv = TRAINER_PARTY_IVS(25,26,27,28,29,30),
- .ev = TRAINER_PARTY_EVS(252, 0, 0, 252, 4, 0),
- .lvl = 67,
- .moves = {MOVE_AIR_SLASH, MOVE_BARRIER, MOVE_SOLAR_BEAM, MOVE_EXPLOSION},
- .nature = NATURE_HASTY,
- .nickname = COMPOUND_STRING("Bubbles"),
- .dynamaxLevel = 5,
- },
- {
- .species = SPECIES_WOBBUFFET,
- .ability = ABILITY_SHADOW_TAG,
- .lvl = 5,
- },
- {
- .species = SPECIES_WYNAUT,
- .lvl = 5,
- },
-};
-
-static const struct Trainer sTestTrainer1 =
+static const struct Trainer sTestTrainers[] =
{
- .trainerName = _("Test1"),
- .party = TRAINER_PARTY(sTestParty1),
+#include "trainer_control.h"
};
TEST("CreateNPCTrainerPartyForTrainer generates customized Pokémon")
{
struct Pokemon *testParty = Alloc(6 * sizeof(struct Pokemon));
u8 nickBuffer[20];
- CreateNPCTrainerPartyFromTrainer(testParty, &sTestTrainer1, TRUE, BATTLE_TYPE_TRAINER);
+ CreateNPCTrainerPartyFromTrainer(testParty, &sTestTrainers[0], TRUE, BATTLE_TYPE_TRAINER);
EXPECT(IsMonShiny(&testParty[0]));
EXPECT(!IsMonShiny(&testParty[1]));
@@ -118,7 +87,7 @@ TEST("CreateNPCTrainerPartyForTrainer generates customized Pokémon")
EXPECT(GetNature(&testParty[1]) == NATURE_HARDY);
EXPECT_EQ(GetMonData(&testParty[0], MON_DATA_DYNAMAX_LEVEL), 5);
- EXPECT_EQ(GetMonData(&testParty[1], MON_DATA_DYNAMAX_LEVEL), 0);
+ EXPECT_EQ(GetMonData(&testParty[1], MON_DATA_DYNAMAX_LEVEL), 10);
Free(testParty);
}
@@ -126,7 +95,7 @@ TEST("CreateNPCTrainerPartyForTrainer generates customized Pokémon")
TEST("CreateNPCTrainerPartyForTrainer generates different personalities for different mons")
{
struct Pokemon *testParty = Alloc(6 * sizeof(struct Pokemon));
- CreateNPCTrainerPartyFromTrainer(testParty, &sTestTrainer1, TRUE, BATTLE_TYPE_TRAINER);
+ CreateNPCTrainerPartyFromTrainer(testParty, &sTestTrainers[0], TRUE, BATTLE_TYPE_TRAINER);
EXPECT(testParty[0].box.personality != testParty[1].box.personality);
Free(testParty);
}
@@ -144,3 +113,50 @@ TEST("ModifyPersonalityForNature can set any nature")
ModifyPersonalityForNature(&personality, nature);
EXPECT_EQ(GetNatureFromPersonality(personality), nature);
}
+
+static const struct TrainerMon sTestParty2[] =
+{
+ {
+ .species = SPECIES_WYNAUT,
+ .lvl = 5,
+ },
+ {
+ .species = SPECIES_WYNAUT,
+ .lvl = 5,
+ },
+ {
+ .species = SPECIES_WYNAUT,
+ .lvl = 5,
+ },
+ {
+ .species = SPECIES_WYNAUT,
+ .lvl = 5,
+ },
+ {
+ .species = SPECIES_WYNAUT,
+ .lvl = 5,
+ },
+ {
+ .species = SPECIES_WYNAUT,
+ .lvl = 5,
+ },
+};
+
+static const struct Trainer sTestTrainer2 =
+{
+ .trainerName = _("Test2"),
+ .trainerClass = TRAINER_CLASS_BLACK_BELT,
+ .party = TRAINER_PARTY(sTestParty2),
+};
+
+TEST("Trainer Class Balls apply to the entire party")
+{
+ u32 j;
+ struct Pokemon *testParty = Alloc(6 * sizeof(struct Pokemon));
+ CreateNPCTrainerPartyFromTrainer(testParty, &sTestTrainer2, TRUE, BATTLE_TYPE_TRAINER);
+ for(j = 0; j < 6; j++)
+ {
+ EXPECT(GetMonData(&testParty[j], MON_DATA_POKEBALL, 0) == gTrainerClasses[sTestTrainer2.trainerClass].ball);
+ }
+ Free(testParty);
+}
diff --git a/test/battle/trainer_control.h b/test/battle/trainer_control.h
new file mode 100644
index 000000000000..72db458de77d
--- /dev/null
+++ b/test/battle/trainer_control.h
@@ -0,0 +1,89 @@
+//
+// DO NOT MODIFY THIS FILE! It is auto-generated from test/battle/trainer_control.party
+//
+// If you want to modify this file set COMPETITIVE_PARTY_SYNTAX to FALSE
+// in include/config/general.h and remove this notice.
+// Use sed -i '/^#line/d' 'test/battle/trainer_control.h' to remove #line markers.
+//
+
+#line 1 "test/battle/trainer_control.party"
+
+#line 1
+ [0] =
+ {
+#line 2
+ .trainerName = _("Test1"),
+#line 3
+ .trainerClass = TRAINER_CLASS_PKMN_TRAINER_1,
+#line 4
+ .trainerPic = TRAINER_PIC_RED,
+ .encounterMusic_gender =
+#line 6
+ TRAINER_ENCOUNTER_MUSIC_MALE,
+#line 7
+ .doubleBattle = FALSE,
+ .partySize = 3,
+ .party = (const struct TrainerMon[])
+ {
+ {
+#line 9
+ .nickname = COMPOUND_STRING("Bubbles"),
+#line 9
+ .species = SPECIES_WOBBUFFET,
+#line 9
+ .gender = TRAINER_MON_FEMALE,
+#line 9
+ .heldItem = ITEM_ASSAULT_VEST,
+#line 14
+ .ev = TRAINER_PARTY_EVS(252, 0, 0, 252, 4, 0),
+#line 13
+ .iv = TRAINER_PARTY_IVS(25, 26, 27, 28, 29, 30),
+#line 12
+ .ability = ABILITY_TELEPATHY,
+#line 11
+ .lvl = 67,
+#line 17
+ .ball = ITEM_MASTER_BALL,
+#line 15
+ .friendship = 42,
+#line 10
+ .nature = NATURE_HASTY,
+#line 16
+ .isShiny = TRUE,
+#line 18
+ .dynamaxLevel = 5,
+ .shouldUseDynamax = TRUE,
+ .moves = {
+#line 19
+ MOVE_AIR_SLASH,
+ MOVE_BARRIER,
+ MOVE_SOLAR_BEAM,
+ MOVE_EXPLOSION,
+ },
+ },
+ {
+#line 24
+ .species = SPECIES_WOBBUFFET,
+ .gender = TRAINER_MON_RANDOM_GENDER,
+#line 27
+ .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0),
+#line 26
+ .ability = ABILITY_SHADOW_TAG,
+#line 25
+ .lvl = 5,
+ .nature = NATURE_HARDY,
+ .dynamaxLevel = MAX_DYNAMAX_LEVEL,
+ },
+ {
+#line 29
+ .species = SPECIES_WYNAUT,
+ .gender = TRAINER_MON_RANDOM_GENDER,
+#line 31
+ .iv = TRAINER_PARTY_IVS(0, 0, 0, 0, 0, 0),
+#line 30
+ .lvl = 5,
+ .nature = NATURE_HARDY,
+ .dynamaxLevel = MAX_DYNAMAX_LEVEL,
+ },
+ },
+ },
diff --git a/test/battle/trainer_control.party b/test/battle/trainer_control.party
new file mode 100644
index 000000000000..8ebfc0e66481
--- /dev/null
+++ b/test/battle/trainer_control.party
@@ -0,0 +1,31 @@
+=== 0 ===
+Name: Test1
+Class: Pkmn Trainer 1
+Pic: Red
+Gender: Male
+Music: Male
+Double Battle: No
+
+Bubbles (Wobbuffet) (F) @ Assault Vest
+Hasty Nature
+Level: 67
+Ability: Telepathy
+IVs: 25 HP / 26 Atk / 27 Def / 29 SpA / 30 SpD / 28 Spe
+EVs: 252 HP / 4 SpA / 252 Spe
+Happiness: 42
+Shiny: Yes
+Ball: Master Ball
+Dynamax Level: 5
+- Air Slash
+- Barrier
+- Solar Beam
+- Explosion
+
+Wobbuffet
+Level: 5
+Ability: Shadow Tag
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
+
+Wynaut
+Level: 5
+IVs: 0 HP / 0 Atk / 0 Def / 0 SpA / 0 SpD / 0 Spe
diff --git a/test/battle/weather/hail.c b/test/battle/weather/hail.c
index 8908e17a79ec..4210a22d9ee0 100644
--- a/test/battle/weather/hail.c
+++ b/test/battle/weather/hail.c
@@ -29,3 +29,56 @@ SINGLE_BATTLE_TEST("Hail damage does not affect Ice-type Pokémon")
NOT MESSAGE("Foe Glalie is pelted by HAIL!");
}
}
+
+SINGLE_BATTLE_TEST("Hail fails if Desolate Land or Primordial Sea are active")
+{
+ u32 species;
+ u32 item;
+
+ PARAMETRIZE { species = SPECIES_WOBBUFFET; item = ITEM_NONE; }
+ PARAMETRIZE { species = SPECIES_GROUDON; item = ITEM_RED_ORB; }
+ PARAMETRIZE { species = SPECIES_KYOGRE; item = ITEM_BLUE_ORB; }
+
+ GIVEN {
+ PLAYER(species) { Item(item); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_HAIL); }
+ } SCENE {
+ if (item == ITEM_RED_ORB || item == ITEM_BLUE_ORB) {
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, player);
+ NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_HAIL, opponent);
+ } else {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_HAIL, opponent);
+ }
+ }
+}
+
+DOUBLE_BATTLE_TEST("Hail deals damage based on turn order")
+{
+ GIVEN {
+ PLAYER(SPECIES_GLALIE);
+ PLAYER(SPECIES_WYNAUT) { Speed(1); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(2); }
+ OPPONENT(SPECIES_WYNAUT) { Speed(3); }
+ } WHEN {
+ TURN { MOVE(playerLeft, MOVE_HAIL); }
+ } SCENE {
+ NOT HP_BAR(playerLeft);
+ HP_BAR(opponentRight);
+ HP_BAR(opponentLeft);
+ HP_BAR(playerRight);
+ }
+}
+
+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/rain.c b/test/battle/weather/rain.c
index ce05870290df..3359d25a818d 100644
--- a/test/battle/weather/rain.c
+++ b/test/battle/weather/rain.c
@@ -45,3 +45,25 @@ SINGLE_BATTLE_TEST("Rain multiplies the power of Water-type moves by 1.5x", s16
EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage);
}
}
+
+SINGLE_BATTLE_TEST("Drizzle fails if Desolate Land is active")
+{
+ u32 item;
+
+ PARAMETRIZE { item = ITEM_NONE; }
+ PARAMETRIZE { item = ITEM_RED_ORB; }
+
+ GIVEN {
+ PLAYER(SPECIES_GROUDON) { Item(item); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_RAIN_DANCE); }
+ } SCENE {
+ if (item == ITEM_RED_ORB) {
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, player);
+ NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_RAIN_DANCE, opponent);
+ } else {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_RAIN_DANCE, opponent);
+ }
+ }
+}
diff --git a/test/battle/weather/sandstorm.c b/test/battle/weather/sandstorm.c
index 2f3f4e7ca266..1673c26f999b 100644
--- a/test/battle/weather/sandstorm.c
+++ b/test/battle/weather/sandstorm.c
@@ -65,3 +65,32 @@ SINGLE_BATTLE_TEST("Sandstorm damage does not hurt Ground, Rock, and Steel-type
}
}
}
+
+DOUBLE_BATTLE_TEST("Sandstorm deals damage based on turn order")
+{
+ GIVEN {
+ PLAYER(SPECIES_PHANPY);
+ PLAYER(SPECIES_WYNAUT) { Speed(1); }
+ OPPONENT(SPECIES_WOBBUFFET) { Speed(2); }
+ OPPONENT(SPECIES_WYNAUT) { Speed(3); }
+ } WHEN {
+ TURN { MOVE(playerLeft, MOVE_SANDSTORM); }
+ } SCENE {
+ NOT HP_BAR(playerLeft);
+ HP_BAR(opponentRight);
+ HP_BAR(opponentLeft);
+ HP_BAR(playerRight);
+ }
+}
+
+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/battle/weather/snow.c b/test/battle/weather/snow.c
index 6ce3e1e0f2fb..6c084f6b7a05 100644
--- a/test/battle/weather/snow.c
+++ b/test/battle/weather/snow.c
@@ -27,3 +27,27 @@ SINGLE_BATTLE_TEST("Snow multiplies the defense of Ice-types by 1.5x", s16 damag
EXPECT_MUL_EQ(results[0].damage, Q_4_12(1.5), results[1].damage);
}
}
+
+SINGLE_BATTLE_TEST("Snowscape fails if Desolate Land or Primordial Sea are active")
+{
+ u32 species;
+ u32 item;
+
+ PARAMETRIZE { species = SPECIES_WOBBUFFET; item = ITEM_NONE; }
+ PARAMETRIZE { species = SPECIES_GROUDON; item = ITEM_RED_ORB; }
+ PARAMETRIZE { species = SPECIES_KYOGRE; item = ITEM_BLUE_ORB; }
+
+ GIVEN {
+ PLAYER(species) { Item(item); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_SNOWSCAPE); }
+ } SCENE {
+ if (item == ITEM_RED_ORB || item == ITEM_BLUE_ORB) {
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, player);
+ NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_SNOWSCAPE, opponent);
+ } else {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SNOWSCAPE, opponent);
+ }
+ }
+}
diff --git a/test/battle/weather/sunlight.c b/test/battle/weather/sunlight.c
index 4c8ea5cb1957..6cf6348987b6 100644
--- a/test/battle/weather/sunlight.c
+++ b/test/battle/weather/sunlight.c
@@ -45,3 +45,25 @@ SINGLE_BATTLE_TEST("Sunlight multiplies the power of Water-type moves by 0.5x",
EXPECT_MUL_EQ(results[0].damage, Q_4_12(0.5), results[1].damage);
}
}
+
+SINGLE_BATTLE_TEST("Sunny Day fails if Primordial Sea is active")
+{
+ u32 item;
+
+ PARAMETRIZE { item = ITEM_NONE; }
+ PARAMETRIZE { item = ITEM_BLUE_ORB; }
+
+ GIVEN {
+ PLAYER(SPECIES_KYOGRE) { Item(item); }
+ OPPONENT(SPECIES_WOBBUFFET);
+ } WHEN {
+ TURN { MOVE(opponent, MOVE_SUNNY_DAY); }
+ } SCENE {
+ if (item == ITEM_BLUE_ORB) {
+ ANIMATION(ANIM_TYPE_GENERAL, B_ANIM_PRIMAL_REVERSION, player);
+ NOT ANIMATION(ANIM_TYPE_MOVE, MOVE_SUNNY_DAY, opponent);
+ } else {
+ ANIMATION(ANIM_TYPE_MOVE, MOVE_SUNNY_DAY, opponent);
+ }
+ }
+}
diff --git a/test/pokemon.c b/test/pokemon.c
index 1ae655ab3cd3..8419b9c7e16f 100644
--- a/test/pokemon.c
+++ b/test/pokemon.c
@@ -33,11 +33,11 @@ TEST("Terastallization type defaults to primary or secondary type")
|| teraType == gSpeciesInfo[SPECIES_PIDGEY].types[1]);
}
-TEST("Terastallization type can be set to any type")
+TEST("Terastallization type can be set to any type except TYPE_NONE")
{
u32 i, teraType;
struct Pokemon mon;
- for (i = 0; i < NUMBER_OF_MON_TYPES; i++)
+ for (i = 1; i < NUMBER_OF_MON_TYPES; i++)
{
PARAMETRIZE { teraType = i; }
}
@@ -46,6 +46,23 @@ TEST("Terastallization type can be set to any type")
EXPECT_EQ(teraType, GetMonData(&mon, MON_DATA_TERA_TYPE));
}
+TEST("Terastallization type is reset to the default types when setting Tera Type back to TYPE_NONE")
+{
+ u32 i, teraType, typeNone;
+ struct Pokemon mon;
+ for (i = 1; i < NUMBER_OF_MON_TYPES; i++)
+ {
+ PARAMETRIZE { teraType = i; typeNone = TYPE_NONE; }
+ }
+ CreateMon(&mon, SPECIES_PIDGEY, 100, 0, FALSE, 0, OT_ID_PRESET, 0);
+ SetMonData(&mon, MON_DATA_TERA_TYPE, &teraType);
+ EXPECT_EQ(teraType, GetMonData(&mon, MON_DATA_TERA_TYPE));
+ SetMonData(&mon, MON_DATA_TERA_TYPE, &typeNone);
+ typeNone = GetMonData(&mon, MON_DATA_TERA_TYPE);
+ EXPECT(typeNone == gSpeciesInfo[SPECIES_PIDGEY].types[0]
+ || typeNone == gSpeciesInfo[SPECIES_PIDGEY].types[1]);
+}
+
TEST("Shininess independent from PID and OTID")
{
u32 pid, otId, data;
@@ -307,3 +324,34 @@ TEST("givemon [vars]")
EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_GIGANTAMAX_FACTOR), TRUE);
EXPECT_EQ(GetMonData(&gPlayerParty[0], MON_DATA_TERA_TYPE), TYPE_FIRE);
}
+
+TEST("checkteratype/setteratype work")
+{
+ CreateMon(&gPlayerParty[0], SPECIES_WOBBUFFET, 100, 0, FALSE, 0, OT_ID_PRESET, 0);
+
+ RUN_OVERWORLD_SCRIPT(
+ checkteratype 0;
+ );
+ EXPECT(VarGet(VAR_RESULT) == TYPE_PSYCHIC);
+
+ RUN_OVERWORLD_SCRIPT(
+ setteratype TYPE_FIRE, 0;
+ checkteratype 0;
+ );
+ EXPECT(VarGet(VAR_RESULT) == TYPE_FIRE);
+}
+
+TEST("createmon [simple]")
+{
+ ZeroPlayerPartyMons();
+
+ RUN_OVERWORLD_SCRIPT(
+ createmon 1, 0, SPECIES_WOBBUFFET, 100;
+ createmon 1, 1, SPECIES_WYNAUT, 10;
+ );
+
+ EXPECT_EQ(GetMonData(&gEnemyParty[0], MON_DATA_SPECIES), SPECIES_WOBBUFFET);
+ EXPECT_EQ(GetMonData(&gEnemyParty[0], MON_DATA_LEVEL), 100);
+ EXPECT_EQ(GetMonData(&gEnemyParty[1], MON_DATA_SPECIES), SPECIES_WYNAUT);
+ EXPECT_EQ(GetMonData(&gEnemyParty[1], MON_DATA_LEVEL), 10);
+}
diff --git a/test/species.c b/test/species.c
index 709985544381..2d702b6c453b 100644
--- a/test/species.c
+++ b/test/species.c
@@ -11,7 +11,10 @@ TEST("Form species ID tables are shared between all forms")
for (i = 0; i < NUM_SPECIES; i++)
{
- if (gSpeciesInfo[i].formSpeciesIdTable) PARAMETRIZE { species = i; }
+ if (gSpeciesInfo[i].formSpeciesIdTable)
+ {
+ PARAMETRIZE_LABEL("%S", gSpeciesInfo[i].speciesName) { species = i; }
+ }
}
formSpeciesIdTable = gSpeciesInfo[species].formSpeciesIdTable;
@@ -31,7 +34,10 @@ TEST("Form change tables contain only forms in the form species ID table")
for (i = 0; i < NUM_SPECIES; i++)
{
- if (gSpeciesInfo[i].formChangeTable) PARAMETRIZE { species = i; }
+ if (gSpeciesInfo[i].formChangeTable)
+ {
+ PARAMETRIZE_LABEL("%S", gSpeciesInfo[i].speciesName) { species = i; }
+ }
}
formChangeTable = gSpeciesInfo[species].formChangeTable;
@@ -61,7 +67,10 @@ TEST("Form change targets have the appropriate species flags")
for (i = 0; i < NUM_SPECIES; i++)
{
- if (gSpeciesInfo[i].formChangeTable) PARAMETRIZE { species = i; }
+ if (gSpeciesInfo[i].formChangeTable)
+ {
+ PARAMETRIZE_LABEL("%S", gSpeciesInfo[i].speciesName) { species = i; }
+ }
}
formChangeTable = gSpeciesInfo[species].formChangeTable;
@@ -106,18 +115,13 @@ TEST("No species has two evolutions that use the evolution tracker")
for (i = 0; evolutions[i].method != EVOLUTIONS_END; i++)
{
- if (evolutions[i].method == EVO_LEVEL_MOVE_TWENTY_TIMES
- #ifdef EVO_DEFEAT_WITH_ITEM
- || evolutions[i].method == EVO_DEFEAT_WITH_ITEM
- #endif //EVO_DEFEAT_WITH_ITEM
- #ifdef EVO_OVERWORLD_STEPS
- || evolutions[i].method == EVO_OVERWORLD_STEPS
- #endif //EVO_OVERWORLD_STEPS
+ if (evolutions[i].method == EVO_USE_MOVE_TWENTY_TIMES
+ || evolutions[i].method == EVO_DEFEAT_THREE_WITH_ITEM
)
evolutionTrackerEvolutions++;
- if (evolutions[i].method == EVO_LEVEL_RECOIL_DAMAGE_MALE
- || evolutions[i].method == EVO_LEVEL_RECOIL_DAMAGE_FEMALE)
+ if (evolutions[i].method == EVO_RECOIL_DAMAGE_MALE
+ || evolutions[i].method == EVO_RECOIL_DAMAGE_FEMALE)
{
// Special handling for these since they can be combined as the evolution tracker field is used for the same purpose
if (!hasGenderBasedRecoil)
diff --git a/test/test_runner.c b/test/test_runner.c
index cbe9a6c6e07b..3e8ef696d836 100644
--- a/test/test_runner.c
+++ b/test/test_runner.c
@@ -124,6 +124,8 @@ void CB2_TestRunner(void)
gIntrTable[7] = Intr_Timer2;
+ gSaveBlock2Ptr->optionsBattleStyle = OPTIONS_BATTLE_STYLE_SET;
+
// The current test restarted the ROM (e.g. by jumping to NULL).
if (sCurrentTest.address != 0)
{
@@ -178,7 +180,8 @@ void CB2_TestRunner(void)
break;
}
- MgbaPrintf_(":N%s", gTestRunnerState.test->name);
+ Test_MgbaPrintf(":N%s", gTestRunnerState.test->name);
+ Test_MgbaPrintf(":L%s:%d", gTestRunnerState.test->filename);
gTestRunnerState.result = TEST_RESULT_PASS;
gTestRunnerState.expectedResult = TEST_RESULT_PASS;
gTestRunnerState.expectLeaks = FALSE;
@@ -216,6 +219,7 @@ void CB2_TestRunner(void)
// NOTE: Assumes that the compiler interns __FILE__.
if (gTestRunnerState.skipFilename == gTestRunnerState.test->filename) // Assumption fails for tests in this file.
{
+ Test_MgbaPrintf(":L%s:%d", gTestRunnerState.test->filename, gTestRunnerState.failedAssumptionsBlockLine);
gTestRunnerState.result = TEST_RESULT_ASSUMPTION_FAIL;
return;
}
@@ -247,7 +251,7 @@ void CB2_TestRunner(void)
|| !(EWRAM_START <= (uintptr_t)block->next && (uintptr_t)block->next < EWRAM_END)
|| (block->next <= block && block->next != head))
{
- MgbaPrintf_("gHeap corrupted block at 0x%p", block);
+ Test_MgbaPrintf("gHeap corrupted block at 0x%p", block);
gTestRunnerState.result = TEST_RESULT_ERROR;
break;
}
@@ -256,9 +260,9 @@ void CB2_TestRunner(void)
{
const char *location = MemBlockLocation(block);
if (location)
- MgbaPrintf_("%s: %d bytes not freed", location, block->size);
+ Test_MgbaPrintf("%s: %d bytes not freed", location, block->size);
else
- MgbaPrintf_(": %d bytes not freed", block->size);
+ Test_MgbaPrintf(": %d bytes not freed", block->size);
gTestRunnerState.result = TEST_RESULT_FAIL;
}
block = block->next;
@@ -281,7 +285,7 @@ void CB2_TestRunner(void)
if (gTestRunnerState.result == gTestRunnerState.expectedResult)
{
color = "\e[32m";
- MgbaPrintf_(":N%s", gTestRunnerState.test->name);
+ Test_MgbaPrintf(":N%s", gTestRunnerState.test->name);
}
else if (gTestRunnerState.result != TEST_RESULT_ASSUMPTION_FAIL || gTestRunnerSkipIsFail)
{
@@ -340,18 +344,18 @@ void CB2_TestRunner(void)
if (gTestRunnerState.result == TEST_RESULT_PASS)
{
if (gTestRunnerState.result != gTestRunnerState.expectedResult)
- MgbaPrintf_(":U%s%s\e[0m", color, result);
+ Test_MgbaPrintf(":U%s%s\e[0m", color, result);
else
- MgbaPrintf_(":P%s%s\e[0m", color, result);
+ Test_MgbaPrintf(":P%s%s\e[0m", color, result);
}
else if (gTestRunnerState.result == TEST_RESULT_ASSUMPTION_FAIL)
- MgbaPrintf_(":A%s%s\e[0m", color, result);
+ Test_MgbaPrintf(":A%s%s\e[0m", color, result);
else if (gTestRunnerState.result == TEST_RESULT_TODO)
- MgbaPrintf_(":T%s%s\e[0m", color, result);
+ Test_MgbaPrintf(":T%s%s\e[0m", color, result);
else if (gTestRunnerState.expectedResult == gTestRunnerState.result)
- MgbaPrintf_(":K%s%s\e[0m", color, result);
+ Test_MgbaPrintf(":K%s%s\e[0m", color, result);
else
- MgbaPrintf_(":F%s%s\e[0m", color, result);
+ Test_MgbaPrintf(":F%s%s\e[0m", color, result);
}
break;
@@ -393,7 +397,7 @@ static void FunctionTest_Run(void *data)
do
{
if (gFunctionTestRunnerState->parameters)
- MgbaPrintf_(":N%s %d/%d", gTestRunnerState.test->name, gFunctionTestRunnerState->runParameter + 1, gFunctionTestRunnerState->parameters);
+ Test_MgbaPrintf(":N%s %d/%d", gTestRunnerState.test->name, gFunctionTestRunnerState->runParameter + 1, gFunctionTestRunnerState->parameters);
gFunctionTestRunnerState->parameters = 0;
function();
} while (++gFunctionTestRunnerState->runParameter < gFunctionTestRunnerState->parameters);
@@ -480,9 +484,10 @@ static void Intr_Timer2(void)
}
}
-void Test_ExitWithResult(enum TestResult result, const char *fmt, ...)
+void Test_ExitWithResult(enum TestResult result, u32 stopLine, const char *fmt, ...)
{
gTestRunnerState.result = result;
+ gTestRunnerState.failedAssumptionsBlockLine = stopLine;
ReinitCallbacks();
if (gTestRunnerState.state == STATE_REPORT_RESULT
&& gTestRunnerState.result != gTestRunnerState.expectedResult)
@@ -515,7 +520,7 @@ static void MgbaExit_(u8 exitCode)
asm("swi 0x3" :: "r" (_exitCode));
}
-s32 MgbaPrintf_(const char *fmt, ...)
+s32 Test_MgbaPrintf(const char *fmt, ...)
{
va_list va;
va_start(va, fmt);
@@ -690,3 +695,24 @@ void DACSHandle(void)
ReinitCallbacks();
DACS_LR = ((uintptr_t)JumpToAgbMainLoop & ~1) + 4;
}
+
+static const struct Test *GetTest(void)
+{
+ const struct Test *test = gTestRunnerState.test;
+ return test;
+}
+
+u32 SourceLine(u32 sourceLineOffset)
+{
+ const struct Test *test = GetTest();
+ return test->sourceLine + sourceLineOffset;
+}
+
+u32 SourceLineOffset(u32 sourceLine)
+{
+ const struct Test *test = GetTest();
+ if (sourceLine - test->sourceLine > 0xFF)
+ return 0;
+ else
+ return sourceLine - test->sourceLine;
+}
diff --git a/test/test_runner_battle.c b/test/test_runner_battle.c
index 376c3be8a55b..6f318bbeadac 100644
--- a/test/test_runner_battle.c
+++ b/test/test_runner_battle.c
@@ -3,6 +3,8 @@
#include "battle_ai_util.h"
#include "battle_anim.h"
#include "battle_controllers.h"
+#include "battle_gimmick.h"
+#include "battle_z_move.h"
#include "characters.h"
#include "event_data.h"
#include "fieldmap.h"
@@ -25,10 +27,10 @@
#undef TestRunner_Battle_GetForcedAbility
#endif
-#define INVALID(fmt, ...) Test_ExitWithResult(TEST_RESULT_INVALID, "%s:%d: " fmt, gTestRunnerState.test->filename, sourceLine, ##__VA_ARGS__)
-#define INVALID_IF(c, fmt, ...) do { if (c) Test_ExitWithResult(TEST_RESULT_INVALID, "%s:%d: " fmt, gTestRunnerState.test->filename, sourceLine, ##__VA_ARGS__); } while (0)
+#define INVALID(fmt, ...) Test_ExitWithResult(TEST_RESULT_INVALID, sourceLine, ":L%s:%d: " fmt, gTestRunnerState.test->filename, sourceLine, ##__VA_ARGS__)
+#define INVALID_IF(c, fmt, ...) do { if (c) Test_ExitWithResult(TEST_RESULT_INVALID, sourceLine, ":L%s:%d: " fmt, gTestRunnerState.test->filename, sourceLine, ##__VA_ARGS__); } while (0)
-#define ASSUMPTION_FAIL_IF(c, fmt, ...) do { if (c) Test_ExitWithResult(TEST_RESULT_ASSUMPTION_FAIL, "%s:%d: " fmt, gTestRunnerState.test->filename, sourceLine, ##__VA_ARGS__); } while (0)
+#define ASSUMPTION_FAIL_IF(c, fmt, ...) do { if (c) Test_ExitWithResult(TEST_RESULT_ASSUMPTION_FAIL, sourceLine, ":L%s:%d: " fmt, gTestRunnerState.test->filename, sourceLine, ##__VA_ARGS__); } while (0)
#define STATE gBattleTestRunnerState
#define DATA gBattleTestRunnerState->data
@@ -145,21 +147,6 @@ static bool32 IsAITest(void)
return FALSE;
}
-static u32 SourceLine(u32 sourceLineOffset)
-{
- const struct BattleTest *test = GetBattleTest();
- return test->sourceLine + sourceLineOffset;
-}
-
-static u32 SourceLineOffset(u32 sourceLine)
-{
- const struct BattleTest *test = GetBattleTest();
- if (sourceLine - test->sourceLine > 0xFF)
- return 0;
- else
- return sourceLine - test->sourceLine;
-}
-
static u32 BattleTest_EstimateCost(void *data)
{
u32 cost;
@@ -184,9 +171,9 @@ static void BattleTest_SetUp(void *data)
InvokeTestFunction(test);
STATE->parameters = STATE->parametersCount;
if (STATE->parametersCount == 0 && test->resultsSize > 0)
- Test_ExitWithResult(TEST_RESULT_INVALID, "results without PARAMETRIZE");
+ Test_ExitWithResult(TEST_RESULT_INVALID, SourceLine(0), ":Lresults without PARAMETRIZE");
if (sizeof(*STATE) + test->resultsSize * STATE->parameters > sizeof(sBackupMapData))
- Test_ExitWithResult(TEST_RESULT_ERROR, "OOM: STATE (%d) + STATE->results (%d) too big for sBackupMapData (%d)", sizeof(*STATE), test->resultsSize * STATE->parameters, sizeof(sBackupMapData));
+ Test_ExitWithResult(TEST_RESULT_ERROR, SourceLine(0), ":LOOM: STATE (%d) + STATE->results (%d) too big for sBackupMapData (%d)", sizeof(*STATE), test->resultsSize * STATE->parameters, sizeof(sBackupMapData));
STATE->results = (void *)((char *)sBackupMapData + sizeof(struct BattleTestRunnerState));
memset(STATE->results, 0, test->resultsSize * STATE->parameters);
switch (test->type)
@@ -208,20 +195,20 @@ static void PrintTestName(void)
if (STATE->trials && STATE->parameters)
{
if (STATE->trials == 1)
- MgbaPrintf_(":N%s %d/%d (%d/?)", gTestRunnerState.test->name, STATE->runParameter + 1, STATE->parameters, STATE->runTrial + 1);
+ Test_MgbaPrintf(":N%s %d/%d (%d/?)", gTestRunnerState.test->name, STATE->runParameter + 1, STATE->parameters, STATE->runTrial + 1);
else
- MgbaPrintf_(":N%s %d/%d (%d/%d)", gTestRunnerState.test->name, STATE->runParameter + 1, STATE->parameters, STATE->runTrial + 1, STATE->trials);
+ Test_MgbaPrintf(":N%s %d/%d (%d/%d)", gTestRunnerState.test->name, STATE->runParameter + 1, STATE->parameters, STATE->runTrial + 1, STATE->trials);
}
else if (STATE->trials)
{
if (STATE->trials == 1)
- MgbaPrintf_(":N%s (%d/?)", gTestRunnerState.test->name, STATE->runTrial + 1);
+ Test_MgbaPrintf(":N%s (%d/?)", gTestRunnerState.test->name, STATE->runTrial + 1);
else
- MgbaPrintf_(":N%s (%d/%d)", gTestRunnerState.test->name, STATE->runTrial + 1, STATE->trials);
+ Test_MgbaPrintf(":N%s (%d/%d)", gTestRunnerState.test->name, STATE->runTrial + 1, STATE->trials);
}
else if (STATE->parameters)
{
- MgbaPrintf_(":N%s %d/%d", gTestRunnerState.test->name, STATE->runParameter + 1, STATE->parameters);
+ Test_MgbaPrintf(":N%s %d/%d", gTestRunnerState.test->name, STATE->runParameter + 1, STATE->parameters);
}
}
@@ -260,7 +247,7 @@ static void SetImplicitSpeeds(void)
}
}
if (!madeProgress)
- Test_ExitWithResult(TEST_RESULT_INVALID, "TURNs have contradictory speeds");
+ Test_ExitWithResult(TEST_RESULT_INVALID, SourceLine(0), ":LTURNs have contradictory speeds");
}
}
@@ -334,9 +321,9 @@ static void BattleTest_Run(void *data)
requiredOpponentPartySize = DATA.currentMonIndexes[i] + 1;
}
if (DATA.playerPartySize < requiredPlayerPartySize)
- Test_ExitWithResult(TEST_RESULT_INVALID, "%d PLAYER Pokemon required", requiredPlayerPartySize);
+ Test_ExitWithResult(TEST_RESULT_INVALID, SourceLine(0), ":L%d PLAYER Pokemon required", requiredPlayerPartySize);
if (DATA.opponentPartySize < requiredOpponentPartySize)
- Test_ExitWithResult(TEST_RESULT_INVALID, "%d OPPONENT Pokemon required", requiredOpponentPartySize);
+ Test_ExitWithResult(TEST_RESULT_INVALID, SourceLine(0), ":L%d OPPONENT Pokemon required", requiredOpponentPartySize);
for (i = 0; i < STATE->battlersCount; i++)
PushBattlerAction(0, i, RECORDED_BYTE, 0xFF);
@@ -346,7 +333,7 @@ static void BattleTest_Run(void *data)
if (DATA.explicitSpeeds[B_SIDE_PLAYER] != (1 << DATA.playerPartySize) - 1
&& DATA.explicitSpeeds[B_SIDE_OPPONENT] != (1 << DATA.opponentPartySize) - 1)
{
- Test_ExitWithResult(TEST_RESULT_INVALID, "Speed required for all PLAYERs and OPPONENTs");
+ Test_ExitWithResult(TEST_RESULT_INVALID, SourceLine(0), ":LSpeed required for all PLAYERs and OPPONENTs");
}
}
else
@@ -392,7 +379,7 @@ u32 RandomUniform(enum RandomTag tag, u32 lo, u32 hi)
}
else if (STATE->trials != n)
{
- Test_ExitWithResult(TEST_RESULT_ERROR, "RandomUniform called with inconsistent trials %d and %d", STATE->trials, n);
+ Test_ExitWithResult(TEST_RESULT_ERROR, SourceLine(0), ":LRandomUniform called with inconsistent trials %d and %d", STATE->trials, n);
}
STATE->trialRatio = Q_4_12(1) / STATE->trials;
return STATE->runTrial + lo;
@@ -413,7 +400,7 @@ u32 RandomUniformExcept(enum RandomTag tag, u32 lo, u32 hi, bool32 (*reject)(u32
if (turn && turn->rng.tag == tag)
{
if (reject(turn->rng.value))
- Test_ExitWithResult(TEST_RESULT_INVALID, "WITH_RNG specified a rejected value (%d)", turn->rng.value);
+ Test_ExitWithResult(TEST_RESULT_INVALID, SourceLine(0), ":LWITH_RNG specified a rejected value (%d)", turn->rng.value);
return turn->rng.value;
}
}
@@ -423,7 +410,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;
@@ -434,7 +421,7 @@ u32 RandomUniformExcept(enum RandomTag tag, u32 lo, u32 hi, bool32 (*reject)(u32
while (reject(STATE->runTrial + lo + STATE->rngTrialOffset))
{
if (STATE->runTrial + lo + STATE->rngTrialOffset > hi)
- Test_ExitWithResult(TEST_RESULT_INVALID, "RandomUniformExcept called with inconsistent reject");
+ Test_ExitWithResult(TEST_RESULT_INVALID, SourceLine(0), ":LRandomUniformExcept called with inconsistent reject");
STATE->rngTrialOffset++;
}
@@ -445,7 +432,7 @@ u32 RandomUniformExcept(enum RandomTag tag, u32 lo, u32 hi, bool32 (*reject)(u32
while (reject(default_))
{
if (default_ == lo)
- Test_ExitWithResult(TEST_RESULT_INVALID, "RandomUniformExcept rejected all values");
+ Test_ExitWithResult(TEST_RESULT_INVALID, SourceLine(0), ":LRandomUniformExcept rejected all values");
default_--;
}
return default_;
@@ -456,7 +443,7 @@ u32 RandomWeightedArray(enum RandomTag tag, u32 sum, u32 n, const u8 *weights)
const struct BattlerTurn *turn = NULL;
if (sum == 0)
- Test_ExitWithResult(TEST_RESULT_ERROR, "RandomWeightedArray called with zero sum");
+ Test_ExitWithResult(TEST_RESULT_ERROR, SourceLine(0), ":LRandomWeightedArray called with zero sum");
if (gCurrentTurnActionNumber < gBattlersCount)
{
@@ -475,7 +462,7 @@ u32 RandomWeightedArray(enum RandomTag tag, u32 sum, u32 n, const u8 *weights)
}
else if (STATE->trials != n)
{
- Test_ExitWithResult(TEST_RESULT_ERROR, "RandomWeighted called with inconsistent trials %d and %d", STATE->trials, n);
+ Test_ExitWithResult(TEST_RESULT_ERROR, SourceLine(0), ":LRandomWeighted called with inconsistent trials %d and %d", STATE->trials, n);
}
// TODO: Detect inconsistent sum.
STATE->trialRatio = Q_4_12(weights[STATE->runTrial]) / sum;
@@ -509,7 +496,7 @@ u32 RandomWeightedArray(enum RandomTag tag, u32 sum, u32 n, const u8 *weights)
while (weights[n-1] == 0)
{
if (n == 1)
- Test_ExitWithResult(TEST_RESULT_ERROR, "RandomWeightedArray called with all zero weights");
+ Test_ExitWithResult(TEST_RESULT_ERROR, SourceLine(0), ":LRandomWeightedArray called with all zero weights");
n--;
}
return n-1;
@@ -535,7 +522,7 @@ const void *RandomElementArray(enum RandomTag tag, const void *array, size_t siz
return (const u8 *)array + size * index;
}
// TODO: Incorporate the line number.
- Test_ExitWithResult(TEST_RESULT_ERROR, "%s: RandomElement illegal value requested: %d", gTestRunnerState.test->filename, turn->rng.value);
+ Test_ExitWithResult(TEST_RESULT_ERROR, SourceLine(0), ":L%s: RandomElement illegal value requested: %d", gTestRunnerState.test->filename, turn->rng.value);
}
}
@@ -548,7 +535,7 @@ const void *RandomElementArray(enum RandomTag tag, const void *array, size_t siz
}
else if (STATE->trials != count)
{
- Test_ExitWithResult(TEST_RESULT_ERROR, "RandomElement called with inconsistent trials %d and %d", STATE->trials, count);
+ Test_ExitWithResult(TEST_RESULT_ERROR, SourceLine(0), ":LRandomElement called with inconsistent trials %d and %d", STATE->trials, count);
}
STATE->trialRatio = Q_4_12(1) / count;
return (const u8 *)array + size * STATE->runTrial;
@@ -599,7 +586,7 @@ void TestRunner_Battle_RecordAbilityPopUp(u32 battlerId, u32 ability)
{
const char *filename = gTestRunnerState.test->filename;
u32 line = SourceLine(DATA.queuedEvents[match].sourceLineOffset);
- Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Matched ABILITY_POPUP", filename, line);
+ Test_ExitWithResult(TEST_RESULT_FAIL, line, ":L%s:%d: Matched ABILITY_POPUP", filename, line);
}
queuedEvent += event->groupSize;
@@ -662,7 +649,7 @@ void TestRunner_Battle_RecordAnimation(u32 animType, u32 animId)
{
const char *filename = gTestRunnerState.test->filename;
u32 line = SourceLine(DATA.queuedEvents[match].sourceLineOffset);
- Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Matched ANIMATION", filename, line);
+ Test_ExitWithResult(TEST_RESULT_FAIL, line, ":L%s:%d: Matched ANIMATION", filename, line);
}
queuedEvent += event->groupSize;
@@ -752,7 +739,7 @@ void TestRunner_Battle_RecordHP(u32 battlerId, u32 oldHP, u32 newHP)
{
const char *filename = gTestRunnerState.test->filename;
u32 line = SourceLine(DATA.queuedEvents[match].sourceLineOffset);
- Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Matched HP_BAR", filename, line);
+ Test_ExitWithResult(TEST_RESULT_FAIL, line, ":L%s:%d: Matched HP_BAR", filename, line);
}
queuedEvent += event->groupSize;
@@ -807,10 +794,10 @@ void TestRunner_Battle_CheckChosenMove(u32 battlerId, u32 moveId, u32 target)
bool32 movePasses = FALSE;
if (expectedAction->type != B_ACTION_USE_MOVE)
- Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Expected %s, got MOVE", filename, expectedAction->sourceLine, sBattleActionNames[expectedAction->type]);
+ Test_ExitWithResult(TEST_RESULT_FAIL, SourceLine(0), ":L%s:%d: Expected %s, got MOVE", filename, expectedAction->sourceLine, sBattleActionNames[expectedAction->type]);
if (expectedAction->explicitTarget && expectedAction->target != target)
- Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Expected target %s, got %s", filename, expectedAction->sourceLine, BattlerIdentifier(expectedAction->target), BattlerIdentifier(target));
+ Test_ExitWithResult(TEST_RESULT_FAIL, SourceLine(0), ":L%s:%d: Expected target %s, got %s", filename, expectedAction->sourceLine, BattlerIdentifier(expectedAction->target), BattlerIdentifier(target));
for (i = 0; i < MAX_MON_MOVES; i++)
{
@@ -844,16 +831,16 @@ void TestRunner_Battle_CheckChosenMove(u32 battlerId, u32 moveId, u32 target)
u32 moveSlot = GetMoveSlot(gBattleMons[battlerId].moves, moveId);
PrintAiMoveLog(battlerId, moveSlot, moveId, gBattleStruct->aiFinalScore[battlerId][expectedAction->target][moveSlot]);
if (countExpected > 1)
- Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Unmatched EXPECT_MOVES %S, got %S", filename, expectedAction->sourceLine, GetMoveName(expectedMoveId), GetMoveName(moveId));
+ Test_ExitWithResult(TEST_RESULT_FAIL, SourceLine(0), ":L%s:%d: Unmatched EXPECT_MOVES %S, got %S", filename, expectedAction->sourceLine, GetMoveName(expectedMoveId), GetMoveName(moveId));
else
- Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Unmatched EXPECT_MOVE %S, got %S", filename, expectedAction->sourceLine, GetMoveName(expectedMoveId), GetMoveName(moveId));
+ Test_ExitWithResult(TEST_RESULT_FAIL, SourceLine(0), ":L%s:%d: Unmatched EXPECT_MOVE %S, got %S", filename, expectedAction->sourceLine, GetMoveName(expectedMoveId), GetMoveName(moveId));
}
if (expectedAction->notMove && !movePasses)
{
if (countExpected > 1)
- Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Unmatched NOT_EXPECT_MOVES %S", filename, expectedAction->sourceLine, GetMoveName(expectedMoveId));
+ Test_ExitWithResult(TEST_RESULT_FAIL, SourceLine(0), ":L%s:%d: Unmatched NOT_EXPECT_MOVES %S", filename, expectedAction->sourceLine, GetMoveName(expectedMoveId));
else
- Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Unmatched NOT_EXPECT_MOVE %S", filename, expectedAction->sourceLine, GetMoveName(expectedMoveId));
+ Test_ExitWithResult(TEST_RESULT_FAIL, SourceLine(0), ":L%s:%d: Unmatched NOT_EXPECT_MOVE %S", filename, expectedAction->sourceLine, GetMoveName(expectedMoveId));
}
}
// Turn passed, clear logs from the turn
@@ -873,17 +860,17 @@ void TestRunner_Battle_CheckSwitch(u32 battlerId, u32 partyIndex)
if (!expectedAction->pass)
{
if (expectedAction->type != B_ACTION_SWITCH)
- Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Expected %s, got SWITCH/SEND_OUT", filename, expectedAction->sourceLine, sBattleActionNames[expectedAction->type]);
+ Test_ExitWithResult(TEST_RESULT_FAIL, SourceLine(0), ":L%s:%d: Expected %s, got SWITCH/SEND_OUT", filename, expectedAction->sourceLine, sBattleActionNames[expectedAction->type]);
if (expectedAction->target != partyIndex)
- Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Expected partyIndex %d, got %d", filename, expectedAction->sourceLine, expectedAction->target, partyIndex);
+ Test_ExitWithResult(TEST_RESULT_FAIL, SourceLine(0), ":L%s:%d: Expected partyIndex %d, got %d", filename, expectedAction->sourceLine, expectedAction->target, partyIndex);
}
DATA.aiActionsPlayed[battlerId]++;
}
void TestRunner_Battle_InvalidNoHPMon(u32 battlerId, u32 partyIndex)
{
- Test_ExitWithResult(TEST_RESULT_INVALID, "%s: INVALID: %s trying to send out a mon(id: %d) with 0 HP.",
+ Test_ExitWithResult(TEST_RESULT_INVALID, SourceLine(0), ":L%s: INVALID: %s trying to send out a mon(id: %d) with 0 HP.",
gTestRunnerState.test->filename, BattlerIdentifier(battlerId), gBattlerPartyIndexes[battlerId]);
}
@@ -933,7 +920,7 @@ static void CheckIfMaxScoreEqualExpectMove(u32 battlerId, s32 target, struct Exp
&& (aiAction->moveSlots & gBitTable[i])
&& !(aiAction->moveSlots & gBitTable[bestScoreId]))
{
- Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: EXPECT_MOVE %S has the same best score(%d) as not expected MOVE %S", filename,
+ Test_ExitWithResult(TEST_RESULT_FAIL, SourceLine(0), ":L%s:%d: EXPECT_MOVE %S has the same best score(%d) as not expected MOVE %S", filename,
aiAction->sourceLine, GetMoveName(moves[i]), scores[i], GetMoveName(moves[bestScoreId]));
}
// We DO NOT expect move 'i', but it has the same best score as another move.
@@ -942,7 +929,7 @@ static void CheckIfMaxScoreEqualExpectMove(u32 battlerId, s32 target, struct Exp
&& (aiAction->moveSlots & gBitTable[i])
&& !(aiAction->moveSlots & gBitTable[bestScoreId]))
{
- Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: NOT_EXPECT_MOVE %S has the same best score(%d) as MOVE %S", filename,
+ Test_ExitWithResult(TEST_RESULT_FAIL, SourceLine(0), ":L%s:%d: NOT_EXPECT_MOVE %S has the same best score(%d) as MOVE %S", filename,
aiAction->sourceLine, GetMoveName(moves[i]), scores[i], GetMoveName(moves[bestScoreId]));
}
}
@@ -956,7 +943,7 @@ static void PrintAiMoveLog(u32 battlerId, u32 moveSlot, u32 moveId, s32 totalSco
if (DATA.aiLogPrintedForMove[battlerId] & gBitTable[moveSlot]) return;
DATA.aiLogPrintedForMove[battlerId] |= gBitTable[moveSlot];
- MgbaPrintf_("Score Log for move %S:\n", GetMoveName(moveId));
+ Test_MgbaPrintf("Score Log for move %S:\n", GetMoveName(moveId));
for (i = 0; i < MAX_AI_LOG_LINES; i++)
{
struct AILogLine *log = &DATA.aiLogLines[battlerId][moveSlot][i];
@@ -965,17 +952,17 @@ static void PrintAiMoveLog(u32 battlerId, u32 moveSlot, u32 moveId, s32 totalSco
if (log->set)
{
scoreFromLogs = log->score;
- MgbaPrintf_("%s:%d: = %d\n", log->file, log->line, log->score);
+ Test_MgbaPrintf("%s:%d: = %d\n", log->file, log->line, log->score);
}
else if (log->score > 0)
{
scoreFromLogs += log->score;
- MgbaPrintf_("%s:%d: +%d\n", log->file, log->line, log->score);
+ Test_MgbaPrintf("%s:%d: +%d\n", log->file, log->line, log->score);
}
else
{
scoreFromLogs += log->score;
- MgbaPrintf_("%s:%d: %d\n", log->file, log->line, log->score);
+ Test_MgbaPrintf("%s:%d: %d\n", log->file, log->line, log->score);
}
}
else
@@ -985,9 +972,9 @@ static void PrintAiMoveLog(u32 battlerId, u32 moveSlot, u32 moveId, s32 totalSco
}
if (scoreFromLogs != totalScore)
{
- Test_ExitWithResult(TEST_RESULT_ERROR, "Warning! Score from logs(%d) is different than actual score(%d). Make sure all of the score adjustments use the ADJUST_SCORE macro\n", scoreFromLogs, totalScore);
+ Test_ExitWithResult(TEST_RESULT_ERROR, SourceLine(0), ":LWarning! Score from logs(%d) is different than actual score(%d). Make sure all of the score adjustments use the ADJUST_SCORE macro\n", scoreFromLogs, totalScore);
}
- MgbaPrintf_("Total: %d\n", totalScore);
+ Test_MgbaPrintf("Total: %d\n", totalScore);
}
static void ClearAiLog(u32 battlerId)
@@ -1023,7 +1010,7 @@ void TestRunner_Battle_CheckAiMoveScores(u32 battlerId)
PrintAiMoveLog(battlerId, scoreCtx->moveSlot1, moveId1, scores[scoreCtx->moveSlot1]);
if (!CheckComparision(scores[scoreCtx->moveSlot1], scoreCtx->value, scoreCtx->cmp))
{
- Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Unmatched SCORE_%s_VAL %S %d, got %d",
+ Test_ExitWithResult(TEST_RESULT_FAIL, SourceLine(0), ":L%s:%d: Unmatched SCORE_%s_VAL %S %d, got %d",
filename, scoreCtx->sourceLine, sCmpToStringTable[scoreCtx->cmp], GetMoveName(moveId1), scoreCtx->value, scores[scoreCtx->moveSlot1]);
}
}
@@ -1034,7 +1021,7 @@ void TestRunner_Battle_CheckAiMoveScores(u32 battlerId)
PrintAiMoveLog(battlerId, scoreCtx->moveSlot2, moveId2, scores[scoreCtx->moveSlot2]);
if (!CheckComparision(scores[scoreCtx->moveSlot1], scores[scoreCtx->moveSlot2], scoreCtx->cmp))
{
- Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Unmatched SCORE_%s, got %S: %d, %S: %d",
+ Test_ExitWithResult(TEST_RESULT_FAIL, SourceLine(0), ":L%s:%d: Unmatched SCORE_%s, got %S: %d, %S: %d",
filename, scoreCtx->sourceLine, sCmpToStringTable[scoreCtx->cmp], GetMoveName(moveId1), scores[scoreCtx->moveSlot1], GetMoveName(moveId2), scores[scoreCtx->moveSlot2]);
}
}
@@ -1134,7 +1121,7 @@ void TestRunner_Battle_RecordExp(u32 battlerId, u32 oldExp, u32 newExp)
{
const char *filename = gTestRunnerState.test->filename;
u32 line = SourceLine(DATA.queuedEvents[match].sourceLineOffset);
- Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Matched EXPERIENCE_BAR", filename, line);
+ Test_ExitWithResult(TEST_RESULT_FAIL, line, ":L%s:%d: Matched EXPERIENCE_BAR", filename, line);
}
queuedEvent += event->groupSize;
@@ -1163,7 +1150,7 @@ static s32 TryMessage(s32 i, s32 n, const u8 *string)
continue;
event = &DATA.queuedEvents[i].as.message;
- // MgbaPrintf_("Looking for: %S Found: %S\n", event->pattern, string); // Useful for debugging.
+ // Test_MgbaPrintf("Looking for: %S Found: %S\n", event->pattern, string); // Useful for debugging.
for (j = k = 0; ; j++, k++)
{
if (event->pattern[k] == CHAR_SPACE)
@@ -1223,7 +1210,7 @@ void TestRunner_Battle_RecordMessage(const u8 *string)
{
const char *filename = gTestRunnerState.test->filename;
u32 line = SourceLine(DATA.queuedEvents[match].sourceLineOffset);
- Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Matched MESSAGE", filename, line);
+ Test_ExitWithResult(TEST_RESULT_FAIL, line, ":L%s:%d: Matched MESSAGE", filename, line);
}
queuedEvent += event->groupSize;
@@ -1288,7 +1275,7 @@ void TestRunner_Battle_RecordStatus1(u32 battlerId, u32 status1)
{
const char *filename = gTestRunnerState.test->filename;
u32 line = SourceLine(DATA.queuedEvents[match].sourceLineOffset);
- Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Matched STATUS_ICON", filename, line);
+ Test_ExitWithResult(TEST_RESULT_FAIL, line, ":L%s:%d: Matched STATUS_ICON", filename, line);
}
queuedEvent += event->groupSize;
@@ -1323,7 +1310,7 @@ void TestRunner_Battle_AfterLastTurn(void)
if (DATA.turns - 1 != DATA.lastActionTurn)
{
const char *filename = gTestRunnerState.test->filename;
- Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: %d TURNs specified, but %d ran", filename, SourceLine(0), DATA.turns, DATA.lastActionTurn + 1);
+ Test_ExitWithResult(TEST_RESULT_FAIL, SourceLine(0), ":L%s:%d: %d TURNs specified, but %d ran", filename, SourceLine(0), DATA.turns, DATA.lastActionTurn + 1);
}
while (DATA.queuedEvent < DATA.queuedEventsCount
@@ -1336,11 +1323,11 @@ void TestRunner_Battle_AfterLastTurn(void)
const char *filename = gTestRunnerState.test->filename;
u32 line = SourceLine(DATA.queuedEvents[DATA.queuedEvent].sourceLineOffset);
const char *macro = sEventTypeMacros[DATA.queuedEvents[DATA.queuedEvent].type];
- Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: Unmatched %s", filename, line, macro);
+ Test_ExitWithResult(TEST_RESULT_FAIL, line, ":L%s:%d: Unmatched %s", filename, line, macro);
}
STATE->runThen = TRUE;
- 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;
@@ -1382,6 +1369,7 @@ static inline rng_value_t MakeRngValue(const u16 seed)
return ISO_RANDOMIZE1(seed);
#endif
}
+
static void CB2_BattleTest_NextTrial(void)
{
ClearFlagAfterTest();
@@ -1418,7 +1406,7 @@ static void CB2_BattleTest_NextTrial(void)
if (abs(STATE->observedRatio - STATE->expectedRatio) <= Q_4_12(0.02))
gTestRunnerState.result = TEST_RESULT_PASS;
else
- Test_ExitWithResult(TEST_RESULT_FAIL, "Expected %q passes/successes, observed %q", STATE->expectedRatio, STATE->observedRatio);
+ Test_ExitWithResult(TEST_RESULT_FAIL, SourceLine(0), ":L%s:%d: Expected %q passes/successes, observed %q", gTestRunnerState.test->filename, SourceLine(0), STATE->expectedRatio, STATE->observedRatio);
}
}
@@ -1465,7 +1453,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;
@@ -1637,6 +1625,7 @@ void Ability_(u32 sourceLine, u32 ability)
u32 species;
const struct SpeciesInfo *info;
INVALID_IF(!DATA.currentMon, "Ability outside of PLAYER/OPPONENT");
+ INVALID_IF(ability >= ABILITIES_COUNT, "Illegal ability id: %d", ability);
species = GetMonData(DATA.currentMon, MON_DATA_SPECIES);
info = &gSpeciesInfo[species];
for (i = 0; i < NUM_ABILITY_SLOTS; i++)
@@ -1717,6 +1706,48 @@ void Speed_(u32 sourceLine, u32 speed)
DATA.explicitSpeeds[DATA.currentSide] |= 1 << DATA.currentPartyIndex;
}
+void HPIV_(u32 sourceLine, u32 hpIV)
+{
+ INVALID_IF(!DATA.currentMon, "HP IV outside of PLAYER/OPPONENT");
+ INVALID_IF(hpIV > MAX_PER_STAT_IVS, "Illegal HP IV: %d", hpIV);
+ SetMonData(DATA.currentMon, MON_DATA_HP_IV, &hpIV);
+}
+
+void AttackIV_(u32 sourceLine, u32 attackIV)
+{
+ INVALID_IF(!DATA.currentMon, "Attack IV outside of PLAYER/OPPONENT");
+ INVALID_IF(attackIV > MAX_PER_STAT_IVS, "Illegal attack IV: %d", attackIV);
+ SetMonData(DATA.currentMon, MON_DATA_ATK_IV, &attackIV);
+}
+
+void DefenseIV_(u32 sourceLine, u32 defenseIV)
+{
+ INVALID_IF(!DATA.currentMon, "Defense IV outside of PLAYER/OPPONENT");
+ INVALID_IF(defenseIV > MAX_PER_STAT_IVS, "Illegal defense IV: %d", defenseIV);
+ SetMonData(DATA.currentMon, MON_DATA_DEF_IV, &defenseIV);
+}
+
+void SpAttackIV_(u32 sourceLine, u32 spAttackIV)
+{
+ INVALID_IF(!DATA.currentMon, "SpAttack IV outside of PLAYER/OPPONENT");
+ INVALID_IF(spAttackIV > MAX_PER_STAT_IVS, "Illegal special attack IV: %d", spAttackIV);
+ SetMonData(DATA.currentMon, MON_DATA_SPATK_IV, &spAttackIV);
+}
+
+void SpDefenseIV_(u32 sourceLine, u32 spDefenseIV)
+{
+ INVALID_IF(!DATA.currentMon, "SpDefense IV outside of PLAYER/OPPONENT");
+ INVALID_IF(spDefenseIV > MAX_PER_STAT_IVS, "Illegal special defense IV: %d", spDefenseIV);
+ SetMonData(DATA.currentMon, MON_DATA_SPDEF_IV, &spDefenseIV);
+}
+
+void SpeedIV_(u32 sourceLine, u32 speedIV)
+{
+ INVALID_IF(!DATA.currentMon, "Speed IV outside of PLAYER/OPPONENT");
+ INVALID_IF(speedIV > MAX_PER_STAT_IVS, "Illegal speed IV: %d", speedIV);
+ SetMonData(DATA.currentMon, MON_DATA_SPEED_IV, &speedIV);
+}
+
void Item_(u32 sourceLine, u32 item)
{
INVALID_IF(!DATA.currentMon, "Item outside of PLAYER/OPPONENT");
@@ -1831,7 +1862,7 @@ static void PushBattlerAction(u32 sourceLine, s32 battlerId, u32 actionType, u32
{
u32 recordIndex = DATA.recordIndexes[battlerId]++;
if (recordIndex >= BATTLER_RECORD_SIZE)
- Test_ExitWithResult(TEST_RESULT_INVALID, "Too many actions");
+ Test_ExitWithResult(TEST_RESULT_INVALID, SourceLine(0), ":LToo many actions");
DATA.battleRecordTypes[battlerId][recordIndex] = actionType;
DATA.battleRecordSourceLineOffsets[battlerId][recordIndex] = SourceLineOffset(sourceLine);
DATA.recordedBattle.battleRecord[battlerId][recordIndex] = byte;
@@ -1853,10 +1884,10 @@ void TestRunner_Battle_CheckBattleRecordActionType(u32 battlerId, u32 recordInde
&& DATA.recordedBattle.battleRecord[battlerId][i-1] == B_ACTION_USE_MOVE)
{
u32 line = SourceLine(DATA.battleRecordSourceLineOffsets[battlerId][i-1]);
- Test_ExitWithResult(TEST_RESULT_INVALID, "%s:%d: Illegal MOVE", filename, line);
+ Test_ExitWithResult(TEST_RESULT_INVALID, line, ":L%s:%d: Illegal MOVE", filename, line);
}
}
- Test_ExitWithResult(TEST_RESULT_INVALID, "%s:%d: Illegal MOVE", filename, SourceLine(0));
+ Test_ExitWithResult(TEST_RESULT_INVALID, SourceLine(0), ":L%s:%d: Illegal MOVE", filename, SourceLine(0));
}
if (DATA.battleRecordTypes[battlerId][recordIndex] != RECORDED_BYTE)
@@ -1884,13 +1915,13 @@ void TestRunner_Battle_CheckBattleRecordActionType(u32 battlerId, u32 recordInde
switch (actionType)
{
case RECORDED_ACTION_TYPE:
- Test_ExitWithResult(TEST_RESULT_INVALID, "%s:%d: Expected MOVE/SWITCH, got %s", filename, line, actualMacro);
+ Test_ExitWithResult(TEST_RESULT_INVALID, line, ":L%s:%d: Expected MOVE/SWITCH, got %s", filename, line, actualMacro);
case RECORDED_PARTY_INDEX:
- Test_ExitWithResult(TEST_RESULT_INVALID, "%s:%d: Expected SEND_OUT, got %s", filename, line, actualMacro);
+ Test_ExitWithResult(TEST_RESULT_INVALID, line, ":L%s:%d: Expected SEND_OUT, got %s", filename, line, actualMacro);
}
}
- Test_ExitWithResult(TEST_RESULT_ERROR, "%s:%d: Illegal battle record", filename, line);
+ Test_ExitWithResult(TEST_RESULT_ERROR, line, ":L%s:%d: Illegal battle record", filename, line);
}
}
else
@@ -1898,7 +1929,7 @@ void TestRunner_Battle_CheckBattleRecordActionType(u32 battlerId, u32 recordInde
if (DATA.lastActionTurn == gBattleResults.battleTurnCounter)
{
const char *filename = gTestRunnerState.test->filename;
- Test_ExitWithResult(TEST_RESULT_FAIL, "%s:%d: TURN %d incomplete", filename, SourceLine(0), gBattleResults.battleTurnCounter + 1);
+ Test_ExitWithResult(TEST_RESULT_FAIL, SourceLine(0), ":L%s:%d: TURN %d incomplete", filename, SourceLine(0), gBattleResults.battleTurnCounter + 1);
}
}
}
@@ -1907,7 +1938,7 @@ void OpenTurn(u32 sourceLine)
{
INVALID_IF(DATA.turnState != TURN_CLOSED, "Nested TURN");
if (DATA.turns == MAX_TURNS)
- Test_ExitWithResult(TEST_RESULT_ERROR, "%s:%d: TURN exceeds MAX_TURNS", gTestRunnerState.test->filename, sourceLine);
+ Test_ExitWithResult(TEST_RESULT_ERROR, sourceLine, ":L%s:%d: TURN exceeds MAX_TURNS", gTestRunnerState.test->filename, sourceLine);
DATA.turnState = TURN_OPEN;
DATA.actionBattlers = 0x00;
DATA.moveBattlers = 0x00;
@@ -2059,14 +2090,31 @@ void MoveGetIdAndSlot(s32 battlerId, struct MoveContext *ctx, u32 *moveId, u32 *
INVALID("No move or moveSlot");
}
- if (ctx->explicitMegaEvolve && ctx->megaEvolve)
- *moveSlot |= RET_MEGA_EVOLUTION;
+ if (ctx->explicitGimmick && ctx->gimmick != GIMMICK_NONE)
+ {
+ u32 item = GetMonData(mon, MON_DATA_HELD_ITEM);
+ u32 holdEffect = ItemId_GetHoldEffect(item);
+ u32 species = GetMonData(mon, MON_DATA_SPECIES);
+ u32 side = GetBattlerSide(battlerId);
+
+ // Check invalid item usage.
+ INVALID_IF(ctx->gimmick == GIMMICK_MEGA && holdEffect != HOLD_EFFECT_MEGA_STONE && species != SPECIES_RAYQUAZA, "Cannot Mega Evolve without a Mega Stone");
+ INVALID_IF(ctx->gimmick == GIMMICK_Z_MOVE && holdEffect != HOLD_EFFECT_Z_CRYSTAL, "Cannot use a Z-Move without a Z-Crystal");
+ INVALID_IF(ctx->gimmick == GIMMICK_Z_MOVE && ItemId_GetSecondaryId(item) != gMovesInfo[*moveId].type
+ && GetSignatureZMove(*moveId, species, item) == MOVE_NONE
+ && *moveId != MOVE_PHOTON_GEYSER, // exception because test won't recognize Ultra Necrozma pre-Burst
+ "Cannot turn %S into a Z-Move with %S", GetMoveName(ctx->move), ItemId_GetName(item));
+ INVALID_IF(ctx->gimmick != GIMMICK_MEGA && holdEffect == HOLD_EFFECT_MEGA_STONE, "Cannot use another gimmick while holding a Mega Stone");
+ INVALID_IF(ctx->gimmick != GIMMICK_Z_MOVE && ctx->gimmick != GIMMICK_ULTRA_BURST && holdEffect == HOLD_EFFECT_Z_CRYSTAL, "Cannot use another gimmick while holding a Z-Crystal");
- if (ctx->explicitUltraBurst && ctx->ultraBurst)
- *moveSlot |= RET_ULTRA_BURST;
+ // Check multiple gimmick use.
+ INVALID_IF(DATA.chosenGimmick[side][DATA.currentMonIndexes[battlerId]] != GIMMICK_NONE
+ && !(DATA.chosenGimmick[side][DATA.currentMonIndexes[battlerId]] == GIMMICK_ULTRA_BURST
+ && ctx->gimmick == GIMMICK_Z_MOVE), "Cannot use multiple gimmicks on the same battler");
- if (ctx->explicitDynamax && ctx->dynamax)
- *moveSlot |= RET_DYNAMAX;
+ DATA.chosenGimmick[side][DATA.currentMonIndexes[battlerId]] = ctx->gimmick;
+ *moveSlot |= RET_GIMMICK;
+ }
}
void Move(u32 sourceLine, struct BattlePokemon *battler, struct MoveContext ctx)
@@ -2422,7 +2470,7 @@ void QueueAbility(u32 sourceLine, struct BattlePokemon *battler, struct AbilityE
s32 battlerId = battler - gBattleMons;
INVALID_IF(!STATE->runScene, "ABILITY_POPUP outside of SCENE");
if (DATA.queuedEventsCount == MAX_QUEUED_EVENTS)
- Test_ExitWithResult(TEST_RESULT_ERROR, "%s:%d: ABILITY exceeds MAX_QUEUED_EVENTS", gTestRunnerState.test->filename, sourceLine);
+ Test_ExitWithResult(TEST_RESULT_ERROR, sourceLine, ":L%s:%d: ABILITY exceeds MAX_QUEUED_EVENTS", gTestRunnerState.test->filename, sourceLine);
DATA.queuedEvents[DATA.queuedEventsCount++] = (struct QueuedEvent) {
.type = QUEUED_ABILITY_POPUP_EVENT,
.sourceLineOffset = SourceLineOffset(sourceLine),
@@ -2442,7 +2490,7 @@ void QueueAnimation(u32 sourceLine, u32 type, u32 id, struct AnimationEventConte
INVALID_IF(!STATE->runScene, "ANIMATION outside of SCENE");
if (DATA.queuedEventsCount == MAX_QUEUED_EVENTS)
- Test_ExitWithResult(TEST_RESULT_ERROR, "%s:%d: ANIMATION exceeds MAX_QUEUED_EVENTS", gTestRunnerState.test->filename, sourceLine);
+ Test_ExitWithResult(TEST_RESULT_ERROR, sourceLine, ":L%s:%d: ANIMATION exceeds MAX_QUEUED_EVENTS", gTestRunnerState.test->filename, sourceLine);
attackerId = ctx.attacker ? ctx.attacker - gBattleMons : 0xF;
if (type == ANIM_TYPE_MOVE)
@@ -2477,7 +2525,7 @@ void QueueHP(u32 sourceLine, struct BattlePokemon *battler, struct HPEventContex
INVALID_IF(!STATE->runScene, "HP_BAR outside of SCENE");
if (DATA.queuedEventsCount == MAX_QUEUED_EVENTS)
- Test_ExitWithResult(TEST_RESULT_ERROR, "%s:%d: HP_BAR exceeds MAX_QUEUED_EVENTS", gTestRunnerState.test->filename, sourceLine);
+ Test_ExitWithResult(TEST_RESULT_ERROR, sourceLine, ":L%s:%d: HP_BAR exceeds MAX_QUEUED_EVENTS", gTestRunnerState.test->filename, sourceLine);
if (ctx.explicitHP)
{
@@ -2530,7 +2578,7 @@ void QueueExp(u32 sourceLine, struct BattlePokemon *battler, struct ExpEventCont
INVALID_IF(!STATE->runScene, "EXPERIENCE_BAR outside of SCENE");
if (DATA.queuedEventsCount == MAX_QUEUED_EVENTS)
- Test_ExitWithResult(TEST_RESULT_ERROR, "%s:%d: EXPERIENCE_BAR exceeds MAX_QUEUED_EVENTS", gTestRunnerState.test->filename, sourceLine);
+ Test_ExitWithResult(TEST_RESULT_ERROR, sourceLine, ":L%s:%d: EXPERIENCE_BAR exceeds MAX_QUEUED_EVENTS", gTestRunnerState.test->filename, sourceLine);
if (ctx.explicitExp)
{
@@ -2567,7 +2615,7 @@ void QueueMessage(u32 sourceLine, const u8 *pattern)
{
INVALID_IF(!STATE->runScene, "MESSAGE outside of SCENE");
if (DATA.queuedEventsCount == MAX_QUEUED_EVENTS)
- Test_ExitWithResult(TEST_RESULT_ERROR, "%s:%d: MESSAGE exceeds MAX_QUEUED_EVENTS", gTestRunnerState.test->filename, sourceLine);
+ Test_ExitWithResult(TEST_RESULT_ERROR, sourceLine, ":L%s:%d: MESSAGE exceeds MAX_QUEUED_EVENTS", gTestRunnerState.test->filename, sourceLine);
DATA.queuedEvents[DATA.queuedEventsCount++] = (struct QueuedEvent) {
.type = QUEUED_MESSAGE_EVENT,
.sourceLineOffset = SourceLineOffset(sourceLine),
@@ -2586,7 +2634,7 @@ void QueueStatus(u32 sourceLine, struct BattlePokemon *battler, struct StatusEve
INVALID_IF(!STATE->runScene, "STATUS_ICON outside of SCENE");
if (DATA.queuedEventsCount == MAX_QUEUED_EVENTS)
- Test_ExitWithResult(TEST_RESULT_ERROR, "%s:%d: STATUS_ICON exceeds MAX_QUEUED_EVENTS", gTestRunnerState.test->filename, sourceLine);
+ Test_ExitWithResult(TEST_RESULT_ERROR, sourceLine, ":L%s:%d: STATUS_ICON exceeds MAX_QUEUED_EVENTS", gTestRunnerState.test->filename, sourceLine);
if (ctx.none)
mask = 0;
@@ -2630,6 +2678,11 @@ u32 TestRunner_Battle_GetForcedAbility(u32 side, u32 partyIndex)
return DATA.forcedAbilities[side][partyIndex];
}
+u32 TestRunner_Battle_GetChosenGimmick(u32 side, u32 partyIndex)
+{
+ return DATA.chosenGimmick[side][partyIndex];
+}
+
// TODO: Consider storing the last successful i and searching from i+1
// to improve performance.
struct AILogLine *GetLogLine(u32 battlerId, u32 moveIndex)
@@ -2645,7 +2698,7 @@ struct AILogLine *GetLogLine(u32 battlerId, u32 moveIndex)
}
}
- Test_ExitWithResult(TEST_RESULT_ERROR, "Too many AI log lines");
+ Test_ExitWithResult(TEST_RESULT_ERROR, SourceLine(0), ":LToo many AI log lines");
return NULL;
}
diff --git a/test/text.c b/test/text.c
new file mode 100644
index 000000000000..0e6900edadfc
--- /dev/null
+++ b/test/text.c
@@ -0,0 +1,569 @@
+#include "global.h"
+#include "test/test.h"
+#include "battle_main.h"
+#include "item.h"
+#include "text.h"
+#include "constants/abilities.h"
+#include "constants/items.h"
+#include "constants/moves.h"
+
+TEST("Move names fit on Pokemon Summary Screen")
+{
+ u32 i;
+ const u32 fontId = FONT_NARROWER, widthPx = 72;
+ u32 move = MOVE_NONE;
+ for (i = 1; i < MOVES_COUNT; i++)
+ {
+ PARAMETRIZE_LABEL("%S", gMovesInfo[i].name) { move = i; }
+ }
+ EXPECT_LE(GetStringWidth(fontId, gMovesInfo[move].name, 0), widthPx);
+}
+
+TEST("Move names fit on Battle Screen")
+{
+ u32 i;
+ const u32 fontId = FONT_NARROWER, widthPx = 64;
+ u32 move = MOVE_NONE;
+ for (i = 1; i < MOVES_COUNT; i++)
+ {
+ PARAMETRIZE_LABEL("%S", gMovesInfo[i].name) { move = i; }
+ }
+ EXPECT_LE(GetStringWidth(fontId, gMovesInfo[move].name, 0), widthPx);
+}
+
+TEST("Move names fit on Contest Screen")
+{
+ u32 i;
+ const u32 fontId = FONT_NARROWER, widthPx = 61;
+ u32 move = MOVE_NONE;
+ for (i = 1; i < MOVES_COUNT; i++)
+ {
+ PARAMETRIZE_LABEL("%S", gMovesInfo[i].name) { move = i; }
+ }
+ // All moves explicitly listed here are too big to fit.
+ switch (move)
+ {
+ case MOVE_NATURES_MADNESS:
+ EXPECT_GT(GetStringWidth(fontId, gMovesInfo[move].name, 0), widthPx);
+ break;
+ default:
+ EXPECT_LE(GetStringWidth(fontId, gMovesInfo[move].name, 0), widthPx);
+ break;
+ }
+}
+
+TEST("Move names fit on TMs & HMs Bag Screen")
+{
+ u32 i;
+ const u32 fontId = FONT_NARROWER, widthPx = 63;
+ u32 move = MOVE_NONE;
+ for (i = 1; i < ITEMS_COUNT; i++)
+ {
+ if (gItemsInfo[i].pocket == POCKET_TM_HM)
+ {
+ PARAMETRIZE_LABEL("%S", gMovesInfo[gItemsInfo[i].secondaryId].name) { move = gItemsInfo[i].secondaryId; }
+ }
+ }
+ EXPECT_LE(GetStringWidth(fontId, gMovesInfo[move].name, 0), widthPx);
+}
+
+TEST("Move names fit on Move Relearner Screen")
+{
+ u32 i;
+ const u32 fontId = FONT_NARROWER, widthPx = 72;
+ u32 move = MOVE_NONE;
+ for (i = 1; i < MOVES_COUNT; i++)
+ {
+ PARAMETRIZE_LABEL("%S", gMovesInfo[i].name) { move = i; }
+ }
+ EXPECT_LE(GetStringWidth(fontId, gMovesInfo[move].name, 0), widthPx);
+}
+
+TEST("Item names fit on Bag Screen (list)")
+{
+ u32 i;
+ const u32 fontId = FONT_NARROWER;
+ const u32 tmHmBerryWidthPx = 71, restWidthPx = 88;
+ u32 item = ITEM_NONE;
+ for (i = 1; i < ITEMS_COUNT; i++)
+ {
+ PARAMETRIZE_LABEL("%S", gItemsInfo[i].name) { item = i; }
+ }
+ if (gItemsInfo[item].pocket == POCKET_TM_HM || gItemsInfo[item].pocket == POCKET_BERRIES)
+ EXPECT_LE(GetStringWidth(fontId, gItemsInfo[item].name, 0), tmHmBerryWidthPx);
+ else
+ EXPECT_LE(GetStringWidth(fontId, gItemsInfo[item].name, 0), restWidthPx);
+}
+
+TEST("Item plural names fit on Bag Screen (left box)")
+{
+ u32 i;
+ // -6 for the question mark in FONT_NORMAL.
+ const u32 fontId = FONT_NARROWER, widthPx = 102 - 6;
+ u32 item = ITEM_NONE;
+ u8 pluralName[ITEM_NAME_PLURAL_LENGTH + 1];
+ for (i = 1; i < ITEMS_COUNT; i++)
+ {
+ PARAMETRIZE_LABEL("%S", gItemsInfo[i].name) { item = i; }
+ }
+ CopyItemNameHandlePlural(item, pluralName, 2);
+ EXPECT_LE(GetStringWidth(fontId, pluralName, 0), widthPx);
+}
+
+TEST("Item plural names fit on PC storage (left box)")
+{
+ u32 i;
+ // -6 for the question mark in FONT_NORMAL.
+ const u32 fontId = FONT_NARROWER, widthPx = 104 - 6;
+ u32 item = ITEM_NONE;
+ u8 pluralName[ITEM_NAME_PLURAL_LENGTH + 1];
+ for (i = 1; i < ITEMS_COUNT; i++)
+ {
+ PARAMETRIZE_LABEL("%S", gItemsInfo[i].name) { item = i; }
+ }
+ CopyItemNameHandlePlural(item, pluralName, 2);
+ EXPECT_LE(GetStringWidth(fontId, pluralName, 0), widthPx);
+}
+
+TEST("Item names fit on Pokemon Storage System")
+{
+ u32 i;
+ const u32 fontId = FONT_SMALL_NARROWER, widthPx = 50;
+ u32 item = ITEM_NONE;
+ for (i = 1; i < ITEMS_COUNT; i++)
+ {
+ if (gItemsInfo[i].importance) continue;
+ PARAMETRIZE_LABEL("%S", gItemsInfo[i].name) { item = i; }
+ }
+ // All items explicitly listed here are too big to fit. The ones
+ // with a hold effect are listed at the bottom in case you want to
+ // focus on making them fit (they are the most likely to appear on
+ // the storage system UI, along with anything that could be held
+ // in the wild).
+ switch (item)
+ {
+ case ITEM_ENERGY_POWDER:
+ case ITEM_PEWTER_CRUNCHIES:
+ case ITEM_RAGE_CANDY_BAR:
+ case ITEM_LUMIOSE_GALETTE:
+ case ITEM_HEALTH_FEATHER:
+ case ITEM_MUSCLE_FEATHER:
+ case ITEM_RESIST_FEATHER:
+ case ITEM_GENIUS_FEATHER:
+ case ITEM_CLEVER_FEATHER:
+ case ITEM_ABILITY_CAPSULE:
+ case ITEM_DYNAMAX_CANDY:
+ case ITEM_MAX_MUSHROOMS:
+ case ITEM_GOLD_BOTTLE_CAP:
+ case ITEM_PRETTY_FEATHER:
+ case ITEM_STRANGE_SOUVENIR:
+ case ITEM_FOSSILIZED_BIRD:
+ case ITEM_FOSSILIZED_FISH:
+ case ITEM_FOSSILIZED_DRAKE:
+ case ITEM_FOSSILIZED_DINO:
+ case ITEM_SURPRISE_MULCH:
+ case ITEM_YELLOW_APRICORN:
+ case ITEM_GREEN_APRICORN:
+ case ITEM_WHITE_APRICORN:
+ case ITEM_BLACK_APRICORN:
+ case ITEM_THUNDER_STONE:
+ case ITEM_GALARICA_WREATH:
+ case ITEM_STRAWBERRY_SWEET:
+ case ITEM_AUSPICIOUS_ARMOR:
+ case ITEM_BIG_BAMBOO_SHOOT:
+ case ITEM_GIMMIGHOUL_COIN:
+ case ITEM_LEADERS_CREST:
+ case ITEM_MALICIOUS_ARMOR:
+ case ITEM_TINY_BAMBOO_SHOOT:
+ case ITEM_BUG_TERA_SHARD:
+ case ITEM_DARK_TERA_SHARD:
+ case ITEM_DRAGON_TERA_SHARD:
+ case ITEM_ELECTRIC_TERA_SHARD:
+ case ITEM_FAIRY_TERA_SHARD:
+ case ITEM_FIGHTING_TERA_SHARD:
+ case ITEM_FIRE_TERA_SHARD:
+ case ITEM_FLYING_TERA_SHARD:
+ case ITEM_GHOST_TERA_SHARD:
+ case ITEM_GRASS_TERA_SHARD:
+ case ITEM_GROUND_TERA_SHARD:
+ case ITEM_ICE_TERA_SHARD:
+ case ITEM_NORMAL_TERA_SHARD:
+ case ITEM_POISON_TERA_SHARD:
+ case ITEM_PSYCHIC_TERA_SHARD:
+ case ITEM_ROCK_TERA_SHARD:
+ case ITEM_STEEL_TERA_SHARD:
+ case ITEM_WATER_TERA_SHARD:
+ case ITEM_BLACK_AUGURITE:
+ case ITEM_UNREMARKABLE_TEACUP:
+ case ITEM_MASTERPIECE_TEACUP:
+ case ITEM_FRESH_START_MOCHI:
+ case ITEM_STELLAR_TERA_SHARD:
+ case ITEM_JUBILIFE_MUFFIN:
+ case ITEM_SUPERB_REMEDY:
+ case ITEM_AUX_POWERGUARD:
+ case ITEM_CHOICE_DUMPLING:
+ case ITEM_TWICE_SPICED_RADISH:
+ // Items with hold effects:
+ case ITEM_ELECTRIC_MEMORY:
+ case ITEM_FIGHTING_MEMORY:
+ case ITEM_GROUND_MEMORY:
+ case ITEM_PSYCHIC_MEMORY:
+ case ITEM_DRAGON_MEMORY:
+ case ITEM_CHARIZARDITE_X:
+ case ITEM_CHARIZARDITE_Y:
+ case ITEM_ULTRANECROZIUM_Z:
+ case ITEM_DEEP_SEA_SCALE:
+ case ITEM_DEEP_SEA_TOOTH:
+ case ITEM_NEVER_MELT_ICE:
+ case ITEM_WEAKNESS_POLICY:
+ case ITEM_SAFETY_GOGGLES:
+ case ITEM_ADRENALINE_ORB:
+ case ITEM_TERRAIN_EXTENDER:
+ case ITEM_PROTECTIVE_PADS:
+ case ITEM_HEAVY_DUTY_BOOTS:
+ case ITEM_UTILITY_UMBRELLA:
+ case ITEM_MARANGA_BERRY:
+ case ITEM_PUNCHING_GLOVE:
+ case ITEM_BOOSTER_ENERGY:
+ case ITEM_ADAMANT_CRYSTAL:
+ case ITEM_LUSTROUS_GLOBE:
+ case ITEM_CORNERSTONE_MASK:
+ case ITEM_WELLSPRING_MASK:
+ case ITEM_HEARTHFLAME_MASK:
+ EXPECT_GT(GetStringWidth(fontId, gItemsInfo[item].name, 0), widthPx);
+ break;
+ default:
+ EXPECT_LE(GetStringWidth(fontId, gItemsInfo[item].name, 0), widthPx);
+ break;
+ }
+}
+
+TEST("Item names fit on Pokemon Summary Screen")
+{
+ u32 i;
+ const u32 fontId = FONT_NARROWER, widthPx = 72;
+ u32 item = ITEM_NONE;
+ for (i = 1; i < ITEMS_COUNT; i++)
+ {
+ if (gItemsInfo[i].importance) continue;
+ PARAMETRIZE_LABEL("%S", gItemsInfo[i].name) { item = i; }
+ }
+ // All items explicitly listed here are too big to fit.
+ switch (item)
+ {
+ case ITEM_UNREMARKABLE_TEACUP:
+ EXPECT_GT(GetStringWidth(fontId, gItemsInfo[item].name, 0), widthPx);
+ break;
+ default:
+ EXPECT_LE(GetStringWidth(fontId, gItemsInfo[item].name, 0), widthPx);
+ break;
+ }
+}
+
+TEST("Item names fit on Shop Screen")
+{
+ u32 i;
+ const u32 fontId = FONT_NARROWER, widthPx = 84;
+ u32 item = ITEM_NONE;
+ for (i = 1; i < ITEMS_COUNT; i++)
+ {
+ PARAMETRIZE_LABEL("%S", gItemsInfo[i].name) { item = i; }
+ }
+ EXPECT_LE(GetStringWidth(fontId, gItemsInfo[item].name, 0), widthPx);
+}
+
+TEST("Species names fit on Battle Screen HP box")
+{
+ u32 i, genderWidthPx;
+ const u32 fontId = FONT_SMALL_NARROWER, widthPx = 55;
+ u32 species = SPECIES_NONE;
+ genderWidthPx = GetStringWidth(fontId, COMPOUND_STRING("♂"), 0);
+ for (i = 1; i < NUM_SPECIES; i++)
+ {
+ if (IsSpeciesEnabled(i))
+ {
+ PARAMETRIZE_LABEL("%S", gSpeciesInfo[i].speciesName) { species = i; }
+ }
+ }
+ if (gSpeciesInfo[i].genderRatio != MON_GENDERLESS)
+ EXPECT_LE(GetStringWidth(fontId, gSpeciesInfo[species].speciesName, 0) - genderWidthPx, widthPx);
+ else
+ EXPECT_LE(GetStringWidth(fontId, gSpeciesInfo[species].speciesName, 0), widthPx);
+}
+
+TEST("Species names fit on Party Screen")
+{
+ u32 i;
+ const u32 fontId = FONT_SMALL_NARROWER, widthPx = 50;
+ u32 species = SPECIES_NONE;
+ for (i = 1; i < NUM_SPECIES; i++)
+ {
+ if (IsSpeciesEnabled(i))
+ {
+ PARAMETRIZE_LABEL("%S", gSpeciesInfo[i].speciesName) { species = i; }
+ }
+ }
+ EXPECT_LE(GetStringWidth(fontId, gSpeciesInfo[species].speciesName, 0), widthPx);
+}
+
+TEST("Species names fit on Pokemon Summary Screen")
+{
+ u32 i;
+ const u32 fontId = FONT_NARROWER, widthPx = 63;
+ u32 species = SPECIES_NONE;
+ for (i = 1; i < NUM_SPECIES; i++)
+ {
+ if (IsSpeciesEnabled(i))
+ {
+ PARAMETRIZE_LABEL("%S", gSpeciesInfo[i].speciesName) { species = i; }
+ }
+ }
+ EXPECT_LE(GetStringWidth(fontId, gSpeciesInfo[species].speciesName, 0), widthPx);
+}
+
+TEST("Species names fit on Pokedex Screen")
+{
+ u32 i;
+ const u32 fontId = FONT_NARROWER, widthPx = 50;
+ u32 species = SPECIES_NONE;
+ for (i = 1; i < NUM_SPECIES; i++)
+ {
+ if (IsSpeciesEnabled(i))
+ {
+ PARAMETRIZE_LABEL("%S", gSpeciesInfo[i].speciesName) { species = i; }
+ }
+ }
+ EXPECT_LE(GetStringWidth(fontId, gSpeciesInfo[species].speciesName, 0), widthPx);
+}
+
+TEST("Species names fit on Pokedex Screen - Cries")
+{
+ u32 i;
+ const u32 fontId = FONT_NARROWER, widthPx = 60;
+ u32 species = SPECIES_NONE;
+ for (i = 1; i < NUM_SPECIES; i++)
+ {
+ if (IsSpeciesEnabled(i))
+ {
+ PARAMETRIZE_LABEL("%S", gSpeciesInfo[i].speciesName) { species = i; }
+ }
+ }
+ EXPECT_LE(GetStringWidth(fontId, gSpeciesInfo[species].speciesName, 0), widthPx);
+}
+
+TEST("Species names fit on Pokemon Storage System")
+{
+ u32 i;
+ u32 species = SPECIES_NONE;
+ for (i = 1; i < NUM_SPECIES; i++)
+ {
+ if (IsSpeciesEnabled(i))
+ {
+ PARAMETRIZE_LABEL("%S", gSpeciesInfo[i].speciesName) { species = i; }
+ }
+ }
+ EXPECT_LE(GetStringWidth(FONT_NARROWER, gSpeciesInfo[species].speciesName, 0), 66);
+ EXPECT_LE(GetStringWidth(FONT_SHORT_NARROW, gSpeciesInfo[species].speciesName, 0), 60);
+}
+
+TEST("Species names fit on Contest Screen")
+{
+ u32 i;
+ const u32 fontId = FONT_NARROWER, widthPx = 50;
+ u32 species = SPECIES_NONE;
+ for (i = 1; i < NUM_SPECIES; i++)
+ {
+ if (IsSpeciesEnabled(i))
+ {
+ PARAMETRIZE_LABEL("%S", gSpeciesInfo[i].speciesName) { species = i; }
+ }
+ }
+ EXPECT_LE(GetStringWidth(fontId, gSpeciesInfo[species].speciesName, 0), widthPx);
+}
+
+TEST("Species names fit on Contest Screen - Rankings")
+{
+ u32 i;
+ const u32 fontId = FONT_NARROWER, widthPx = 49;
+ u32 species = SPECIES_NONE;
+ for (i = 1; i < NUM_SPECIES; i++)
+ {
+ if (IsSpeciesEnabled(i))
+ {
+ PARAMETRIZE_LABEL("%S", gSpeciesInfo[i].speciesName) { species = i; }
+ }
+ }
+ EXPECT_LE(GetStringWidth(fontId, gSpeciesInfo[species].speciesName, 0), widthPx);
+}
+
+TEST("Species names fit on Battle Dome Screen")
+{
+ u32 i;
+ const u32 fontId = FONT_SHORT_NARROW, widthPx = 60;
+ u32 species = SPECIES_NONE;
+ for (i = 1; i < NUM_SPECIES; i++)
+ {
+ if (IsSpeciesEnabled(i))
+ {
+ PARAMETRIZE_LABEL("%S", gSpeciesInfo[i].speciesName) { species = i; }
+ }
+ }
+ EXPECT_LE(GetStringWidth(fontId, gSpeciesInfo[species].speciesName, 0), widthPx);
+}
+
+TEST("Species names fit on Hall of Fame")
+{
+ u32 i;
+ const u32 fontId = FONT_NARROWER, widthPx = 66;
+ u32 species = SPECIES_NONE;
+ for (i = 1; i < NUM_SPECIES; i++)
+ {
+ if (IsSpeciesEnabled(i))
+ {
+ PARAMETRIZE_LABEL("%S", gSpeciesInfo[i].speciesName) { species = i; }
+ }
+ }
+ EXPECT_LE(GetStringWidth(fontId, gSpeciesInfo[species].speciesName, 0), widthPx);
+}
+
+TEST("Species names fit on Naming Screen")
+{
+ u32 i;
+ const u32 fontId = FONT_NARROWER, widthPx = 64;
+ u32 species = SPECIES_NONE;
+ for (i = 1; i < NUM_SPECIES; i++)
+ {
+ if (IsSpeciesEnabled(i))
+ {
+ PARAMETRIZE_LABEL("%S", gSpeciesInfo[i].speciesName) { species = i; }
+ }
+ }
+ EXPECT_LE(GetStringWidth(fontId, gSpeciesInfo[species].speciesName, 0), widthPx);
+}
+
+TEST("Species names fit on PokeNav Condition Screen")
+{
+ u32 i;
+ const u32 fontId = FONT_NARROWER, widthPx = 57;
+ u32 species = SPECIES_NONE;
+ for (i = 1; i < NUM_SPECIES; i++)
+ {
+ if (IsSpeciesEnabled(i))
+ {
+ PARAMETRIZE_LABEL("%S", gSpeciesInfo[i].speciesName) { species = i; }
+ }
+ }
+ EXPECT_LE(GetStringWidth(fontId, gSpeciesInfo[species].speciesName, 0), widthPx);
+}
+
+TEST("Species names fit on PokeNav Condition Search Screen")
+{
+ u32 i;
+ const u32 fontId = FONT_NARROWER, widthPx = 60;
+ u32 species = SPECIES_NONE;
+ for (i = 1; i < NUM_SPECIES; i++)
+ {
+ if (IsSpeciesEnabled(i))
+ {
+ PARAMETRIZE_LABEL("%S", gSpeciesInfo[i].speciesName) { species = i; }
+ }
+ }
+ EXPECT_LE(GetStringWidth(fontId, gSpeciesInfo[species].speciesName, 0), widthPx);
+}
+
+TEST("Species names fit on PokeNav Ribbon Screen")
+{
+ u32 i;
+ const u32 fontId = FONT_NARROWER, widthPx = 60;
+ u32 species = SPECIES_NONE;
+ for (i = 1; i < NUM_SPECIES; i++)
+ {
+ if (IsSpeciesEnabled(i))
+ {
+ PARAMETRIZE_LABEL("%S", gSpeciesInfo[i].speciesName) { species = i; }
+ }
+ }
+ EXPECT_LE(GetStringWidth(fontId, gSpeciesInfo[species].speciesName, 0), widthPx);
+}
+
+TEST("Species names fit on PokeNav Ribbon List Screen")
+{
+ u32 i;
+ const u32 fontId = FONT_NARROWER, widthPx = 60;
+ u32 species = SPECIES_NONE;
+ for (i = 1; i < NUM_SPECIES; i++)
+ {
+ if (IsSpeciesEnabled(i))
+ {
+ PARAMETRIZE_LABEL("%S", gSpeciesInfo[i].speciesName) { species = i; }
+ }
+ }
+ EXPECT_LE(GetStringWidth(fontId, gSpeciesInfo[species].speciesName, 0), widthPx);
+}
+
+TEST("Species names fit on Battle Screen HP box for vanilla mons with the default font")
+{
+ u32 i, genderWidthPx;
+ const u32 fontId = FONT_SMALL, widthPx = 55;
+ u32 species = SPECIES_NONE;
+ genderWidthPx = GetStringWidth(fontId, COMPOUND_STRING("♂"), 0);
+ for (i = 1; i < SPECIES_TURTWIG; i++)
+ {
+ if (IsSpeciesEnabled(i))
+ {
+ PARAMETRIZE_LABEL("%S", gSpeciesInfo[i].speciesName) { species = i; }
+ }
+ }
+ if (gSpeciesInfo[i].genderRatio != MON_GENDERLESS)
+ EXPECT_LE(GetStringWidth(fontId, gSpeciesInfo[species].speciesName, 0) - genderWidthPx, widthPx);
+ else
+ EXPECT_LE(GetStringWidth(fontId, gSpeciesInfo[species].speciesName, 0), widthPx);
+}
+
+TEST("Ability names fit on Pokemon Summary Screen")
+{
+ u32 i;
+ const u32 fontId = FONT_NORMAL, widthPx = 144;
+ u32 ability = ABILITY_NONE;
+ for (i = 1; i < ABILITIES_COUNT; i++)
+ {
+ PARAMETRIZE_LABEL("%S", gAbilitiesInfo[i].name) { ability = i; }
+ }
+ EXPECT_LE(GetStringWidth(fontId, gAbilitiesInfo[ability].name, 0), widthPx);
+}
+
+TEST("Ability names fit on Ability Pop-Up")
+{
+ u32 i;
+ const u32 fontId = FONT_SMALL_NARROWER, widthPx = 76;
+ u32 ability = ABILITY_NONE;
+ for (i = 1; i < ABILITIES_COUNT; i++)
+ {
+ PARAMETRIZE_LABEL("%S", gAbilitiesInfo[i].name) { ability = i; }
+ }
+ EXPECT_LE(GetStringWidth(fontId, gAbilitiesInfo[ability].name, 0), widthPx);
+}
+
+TEST("Type names fit on Battle Screen")
+{
+ u32 i;
+ const u32 fontId = FONT_NARROWER, widthPx = 39;
+ u32 type = TYPE_NORMAL;
+ for (i = 0; i < NUMBER_OF_MON_TYPES; i++)
+ {
+ PARAMETRIZE_LABEL("%S", gTypesInfo[i].name) { type = i; }
+ }
+ EXPECT_LE(GetStringWidth(fontId, gTypesInfo[type].name, 0), widthPx);
+}
+
+TEST("Type names fit on Pokedex Search Screen")
+{
+ u32 i;
+ const u32 fontId = FONT_NARROWER, widthPx = 38;
+ u32 type = TYPE_NORMAL;
+ for (i = 0; i < NUMBER_OF_MON_TYPES; i++)
+ {
+ PARAMETRIZE_LABEL("%S", gTypesInfo[i].name) { type = i; }
+ }
+ EXPECT_LE(GetStringWidth(fontId, gTypesInfo[type].name, 0), widthPx);
+}
diff --git a/tools/learnset_helpers/teachable.py b/tools/learnset_helpers/teachable.py
index 92ed8562d8c3..eb109e7a46e8 100644
--- a/tools/learnset_helpers/teachable.py
+++ b/tools/learnset_helpers/teachable.py
@@ -13,7 +13,7 @@
def parse_mon_name(name):
return re.sub(r'(?!^)([A-Z]+)', r'_\1', name).upper()
-
+
tm_moves = []
tutor_moves = []
@@ -196,7 +196,7 @@ def header_print(str):
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/mgba-rom-test-hydra/main.c b/tools/mgba-rom-test-hydra/main.c
index d4f39feb736e..d9d8417e180d 100644
--- a/tools/mgba-rom-test-hydra/main.c
+++ b/tools/mgba-rom-test-hydra/main.c
@@ -8,6 +8,7 @@
*
* COMMANDS
* N: Sets the test name to the remainder of the line.
+ * L: Sets the filename to the remainder of the line.
* R: Sets the result to the remainder of the line, and flushes any
* output buffered since the previous R.
* P/K/F/A: Sets the result to the remaining of the line, flushes any
@@ -46,6 +47,7 @@ struct Runner
int outfd;
char rom_path[FILENAME_MAX];
char test_name[256];
+ char filename_line[256];
size_t input_buffer_size;
size_t input_buffer_capacity;
char *input_buffer;
@@ -59,8 +61,12 @@ struct Runner
int assumptionFails;
int fails;
int results;
- char failedTestNames[MAX_SUMMARY_TESTS_TO_LIST][MAX_TEST_LIST_BUFFER_LENGTH];
- char knownFailingPassedTestNames[MAX_SUMMARY_TESTS_TO_LIST][MAX_TEST_LIST_BUFFER_LENGTH];
+ char failed_TestNames[MAX_SUMMARY_TESTS_TO_LIST][MAX_TEST_LIST_BUFFER_LENGTH];
+ char failed_TestFilenameLine[MAX_SUMMARY_TESTS_TO_LIST][MAX_TEST_LIST_BUFFER_LENGTH];
+ char knownFailingPassed_TestNames[MAX_SUMMARY_TESTS_TO_LIST][MAX_TEST_LIST_BUFFER_LENGTH];
+ char knownFailingPassed_FilenameLine[MAX_SUMMARY_TESTS_TO_LIST][MAX_TEST_LIST_BUFFER_LENGTH];
+ char assumeFailed_TestNames[MAX_SUMMARY_TESTS_TO_LIST * MAX_PROCESSES][MAX_TEST_LIST_BUFFER_LENGTH];
+ char assumeFailed_FilenameLine[MAX_SUMMARY_TESTS_TO_LIST * MAX_PROCESSES][MAX_TEST_LIST_BUFFER_LENGTH];
};
static unsigned nrunners = 0;
@@ -102,6 +108,16 @@ static void handle_read(int i, struct Runner *runner)
strncpy(runner->test_name, soc, eol - soc - 1);
runner->test_name[eol - soc - 1] = '\0';
break;
+ case 'L':
+ soc += 2;
+ if (sizeof(runner->filename_line) <= eol - soc - 1)
+ {
+ fprintf(stderr, "filename_line too long\n");
+ exit(2);
+ }
+ strncpy(runner->filename_line, soc, eol - soc - 1);
+ runner->filename_line[eol - soc - 1] = '\0';
+ break;
case 'P':
runner->passes++;
@@ -111,18 +127,29 @@ static void handle_read(int i, struct Runner *runner)
goto add_to_results;
case 'U':
if (runner->knownFailsPassing < MAX_SUMMARY_TESTS_TO_LIST)
- strcpy(runner->knownFailingPassedTestNames[runner->knownFailsPassing], runner->test_name);
+ {
+ strcpy(runner->knownFailingPassed_TestNames[runner->knownFailsPassing], runner->test_name);
+ strcpy(runner->knownFailingPassed_FilenameLine[runner->knownFailsPassing], runner->filename_line);
+ }
runner->knownFailsPassing++;
goto add_to_results;
case 'T':
runner->todos++;
goto add_to_results;
case 'A':
+ if (runner->assumptionFails < MAX_SUMMARY_TESTS_TO_LIST)
+ {
+ strcpy(runner->assumeFailed_TestNames[runner->assumptionFails], runner->test_name);
+ strcpy(runner->assumeFailed_FilenameLine[runner->assumptionFails], runner->filename_line);
+ }
runner->assumptionFails++;
goto add_to_results;
case 'F':
if (runner->fails < MAX_SUMMARY_TESTS_TO_LIST)
- strcpy(runner->failedTestNames[runner->fails], runner->test_name);
+ {
+ strcpy(runner->failed_TestNames[runner->fails], runner->test_name);
+ strcpy(runner->failed_TestFilenameLine[runner->fails], runner->filename_line);
+ }
runner->fails++;
add_to_results:
runner->results++;
@@ -532,8 +559,14 @@ int main(int argc, char *argv[])
int fails = 0;
int results = 0;
- char failedTestNames[MAX_SUMMARY_TESTS_TO_LIST * MAX_PROCESSES][MAX_TEST_LIST_BUFFER_LENGTH];
- char knownFailingPassedTestNames[MAX_SUMMARY_TESTS_TO_LIST * MAX_PROCESSES][MAX_TEST_LIST_BUFFER_LENGTH];
+ char failed_TestNames[MAX_SUMMARY_TESTS_TO_LIST * MAX_PROCESSES][MAX_TEST_LIST_BUFFER_LENGTH];
+ char failed_TestFilenameLine[MAX_SUMMARY_TESTS_TO_LIST * MAX_PROCESSES][MAX_TEST_LIST_BUFFER_LENGTH];
+
+ char knownFailingPassed_TestNames[MAX_SUMMARY_TESTS_TO_LIST * MAX_PROCESSES][MAX_TEST_LIST_BUFFER_LENGTH];
+ char knownFailingPassed_FilenameLine[MAX_SUMMARY_TESTS_TO_LIST * MAX_PROCESSES][MAX_TEST_LIST_BUFFER_LENGTH];
+
+ char assumeFailed_TestNames[MAX_SUMMARY_TESTS_TO_LIST * MAX_PROCESSES][MAX_TEST_LIST_BUFFER_LENGTH];
+ char assumeFailed_FilenameLine[MAX_SUMMARY_TESTS_TO_LIST * MAX_PROCESSES][MAX_TEST_LIST_BUFFER_LENGTH];
for (int i = 0; i < nrunners; i++)
{
@@ -552,33 +585,43 @@ int main(int argc, char *argv[])
for (int j = 0; j < runners[i].knownFailsPassing; j++)
{
if (j < MAX_SUMMARY_TESTS_TO_LIST)
- strcpy(knownFailingPassedTestNames[fails], runners[i].knownFailingPassedTestNames[j]);
+ {
+ strcpy(knownFailingPassed_TestNames[knownFailsPassing], runners[i].knownFailingPassed_TestNames[j]);
+ strcpy(knownFailingPassed_FilenameLine[knownFailsPassing], runners[i].knownFailingPassed_FilenameLine[j]);
+ }
knownFailsPassing++;
}
todos += runners[i].todos;
- assumptionFails += runners[i].assumptionFails;
+ for (int j = 0; j < runners[i].assumptionFails; j++)
+ {
+ if (j < MAX_SUMMARY_TESTS_TO_LIST)
+ {
+ strcpy(assumeFailed_TestNames[assumptionFails], runners[i].assumeFailed_TestNames[j]);
+ strcpy(assumeFailed_FilenameLine[assumptionFails], runners[i].assumeFailed_FilenameLine[j]);
+ }
+ assumptionFails++;
+ }
for (int j = 0; j < runners[i].fails; j++)
{
if (j < MAX_SUMMARY_TESTS_TO_LIST)
- strcpy(failedTestNames[fails], runners[i].failedTestNames[j]);
+ {
+ strcpy(failed_TestNames[fails], runners[i].failed_TestNames[j]);
+ strcpy(failed_TestFilenameLine[fails], runners[i].failed_TestFilenameLine[j]);
+ }
fails++;
}
results += runners[i].results;
}
- qsort(failedTestNames, min(fails, MAX_SUMMARY_TESTS_TO_LIST), sizeof(char) * MAX_TEST_LIST_BUFFER_LENGTH, compare_strings);
- qsort(knownFailingPassedTestNames, min(fails, MAX_SUMMARY_TESTS_TO_LIST), sizeof(char) * MAX_TEST_LIST_BUFFER_LENGTH, compare_strings);
-
if (results == 0)
{
fprintf(stdout, "\nNo tests found.\n");
}
else
{
- fprintf(stdout, "\n");
if (fails > 0)
{
- fprintf(stdout, "- Tests \e[31mFAILED\e[0m : %d Add TESTS='X' to run tests with the defined prefix.\n", fails);
+ fprintf(stdout, "\n \e[31mFAILED\e[0m tests:\n");
for (int i = 0; i < fails; i++)
{
if (i >= MAX_SUMMARY_TESTS_TO_LIST)
@@ -586,31 +629,51 @@ int main(int argc, char *argv[])
fprintf(stdout, " - \e[31mand %d more...\e[0m\n", fails - MAX_SUMMARY_TESTS_TO_LIST);
break;
}
- fprintf(stdout, " - \e[31m%s\e[0m.\n", failedTestNames[i]);
+ fprintf(stdout, " - \e[31m%s\e[0m - %s.\n", failed_TestFilenameLine[i], failed_TestNames[i]);
}
}
+
+ if (assumptionFails > 0)
+ {
+ fprintf(stdout, "\n Tests with \e[33mASSUMPTIONS_FAILED\e[0m:\n");
+ for (int i = 0; i < assumptionFails; i++)
+ {
+ if (i >= MAX_SUMMARY_TESTS_TO_LIST)
+ {
+ fprintf(stdout, " - \e[33mand %d more...\e[0m\n", assumptionFails - MAX_SUMMARY_TESTS_TO_LIST);
+ break;
+ }
+ fprintf(stdout, " - \e[33m%s\e[0m - %s.\n", assumeFailed_FilenameLine[i], assumeFailed_TestNames[i]);
+ }
+ }
+
if (knownFailsPassing > 0)
{
- fprintf(stdout, "- \e[31mKNOWN_FAILING_PASSED\e[0m: %d \e[31mPlease remove KNOWN_FAILING if these tests intentionally PASS\e[0m\n", knownFailsPassing);
+ fprintf(stdout, "\n \e[33mKNOWN_FAILING\e[0m tests \e[32mPASSING\e[0m:\n");
for (int i = 0; i < knownFailsPassing; i++)
{
if (i >= MAX_SUMMARY_TESTS_TO_LIST)
{
- fprintf(stdout, " - \e[31mand %d more...\e[0m\n", knownFailsPassing - MAX_SUMMARY_TESTS_TO_LIST);
+ fprintf(stdout, " - \e[32mand %d more...\e[0m\n", knownFailsPassing - MAX_SUMMARY_TESTS_TO_LIST);
break;
}
- fprintf(stdout, " - \e[31m%s\e[0m.\n", knownFailingPassedTestNames[i]);
+ fprintf(stdout, " - \e[32m%s\e[0m - %s.\n", knownFailingPassed_FilenameLine[i], knownFailingPassed_TestNames[i]);
}
}
- fprintf(stdout, "- Tests \e[32mPASSED\e[0m: %d\n", passes);
+
+ fprintf(stdout, "\n");
+ if (fails > 0)
+ fprintf(stdout, "- Tests \e[31mFAILED\e[0m : %d Add TESTS='X' to run tests with the defined prefix.\n", fails);
if (knownFails > 0)
- fprintf(stdout, "- Tests \e[33mKNOWN_FAILING\e[0m: %d\n", knownFails);
- if (todos > 0)
- fprintf(stdout, "- Tests \e[33mTO_DO\e[0m: %d\n", todos);
+ fprintf(stdout, "- Tests \e[33mKNOWN_FAILING\e[0m: %d\n", knownFails);
if (assumptionFails > 0)
- fprintf(stdout, "- \e[33mASSUMPTIONS_FAILED\e[0m: %d\n", assumptionFails);
-
- fprintf(stdout, "- Tests \e[34mTOTAL\e[0m: %d\n", results);
+ fprintf(stdout, "- \e[33mASSUMPTIONS_FAILED\e[0m: %d\n", assumptionFails);
+ if (todos > 0)
+ fprintf(stdout, "- Tests \e[33mTO_DO\e[0m: %d\n", todos);
+ if (knownFailsPassing > 0)
+ fprintf(stdout, "- \e[32mKNOWN_FAILING_PASSING\e[0m: %d \e[33mPlease remove KNOWN_FAILING if these tests intentionally PASS\e[0m\n", knownFailsPassing);
+ fprintf(stdout, "- Tests \e[32mPASSED\e[0m: %d\n", passes);
+ fprintf(stdout, "- Tests \e[34mTOTAL\e[0m: %d\n", results);
}
fprintf(stdout, "\n");
diff --git a/tools/preproc/Makefile b/tools/preproc/Makefile
index 1507c973f27e..606318944c63 100644
--- a/tools/preproc/Makefile
+++ b/tools/preproc/Makefile
@@ -3,10 +3,10 @@ CXX ?= g++
CXXFLAGS := -std=c++11 -O2 -Wall -Wno-switch -Werror
SRCS := asm_file.cpp c_file.cpp charmap.cpp preproc.cpp string_parser.cpp \
- utf8.cpp
+ utf8.cpp io.cpp
HEADERS := asm_file.h c_file.h char_util.h charmap.h preproc.h string_parser.h \
- utf8.h
+ utf8.h io.h
ifeq ($(OS),Windows_NT)
EXE := .exe
diff --git a/tools/preproc/asm_file.cpp b/tools/preproc/asm_file.cpp
index 04a7410e00bf..39d352bbd7ad 100644
--- a/tools/preproc/asm_file.cpp
+++ b/tools/preproc/asm_file.cpp
@@ -27,33 +27,12 @@
#include "utf8.h"
#include "string_parser.h"
#include "../../gflib/characters.h"
+#include "io.h"
-AsmFile::AsmFile(std::string filename) : m_filename(filename)
+AsmFile::AsmFile(std::string filename, bool isStdin, bool doEnum) : m_filename(filename)
{
- FILE *fp = std::fopen(filename.c_str(), "rb");
-
- if (fp == NULL)
- FATAL_ERROR("Failed to open \"%s\" for reading.\n", filename.c_str());
-
- std::fseek(fp, 0, SEEK_END);
-
- m_size = std::ftell(fp);
-
- if (m_size < 0)
- FATAL_ERROR("File size of \"%s\" is less than zero.\n", filename.c_str());
- else if (m_size == 0)
- return; // Empty file
-
- m_buffer = new char[m_size + 1];
-
- std::rewind(fp);
-
- if (std::fread(m_buffer, m_size, 1, fp) != 1)
- FATAL_ERROR("Failed to read \"%s\".\n", filename.c_str());
-
- m_buffer[m_size] = 0;
-
- std::fclose(fp);
+ m_buffer = ReadFileToBuffer(filename.c_str(), isStdin, &m_size);
+ m_doEnum = doEnum;
m_pos = 0;
m_lineNum = 1;
@@ -65,6 +44,7 @@ AsmFile::AsmFile(std::string filename) : m_filename(filename)
AsmFile::AsmFile(AsmFile&& other) : m_filename(std::move(other.m_filename))
{
m_buffer = other.m_buffer;
+ m_doEnum = other.m_doEnum;
m_pos = other.m_pos;
m_size = other.m_size;
m_lineNum = other.m_lineNum;
@@ -174,6 +154,8 @@ Directive AsmFile::GetDirective()
return Directive::String;
else if (CheckForDirective(".braille"))
return Directive::Braille;
+ else if (CheckForDirective("enum"))
+ return Directive::Enum;
else
return Directive::Unknown;
}
@@ -527,6 +509,70 @@ void AsmFile::OutputLine()
}
}
+// parses an assumed C `enum`. Returns false if `enum { ...` is not matched
+bool AsmFile::ParseEnum()
+{
+ if (!m_doEnum)
+ return false;
+
+ long fallbackPosition = m_pos;
+ std::string headerFilename = "";
+ long currentHeaderLine = SkipWhitespaceAndEol();
+ std::string enumName = ReadIdentifier();
+ currentHeaderLine += SkipWhitespaceAndEol();
+ long enumCounter = 0;
+ long symbolCount = 0;
+
+ if (m_buffer[m_pos] != '{') // assume assembly macro, otherwise assume enum and report errors accordingly
+ {
+ m_pos = fallbackPosition - 4;
+ return false;
+ }
+
+ currentHeaderLine += FindLastLineNumber(headerFilename);
+ m_pos++;
+ for (;;)
+ {
+ currentHeaderLine += SkipWhitespaceAndEol();
+ std::string currentIdentName = ReadIdentifier();
+ if (!currentIdentName.empty())
+ {
+ std::printf("# %ld \"%s\"\n", currentHeaderLine, headerFilename.c_str());
+ currentHeaderLine += SkipWhitespaceAndEol();
+ if (m_buffer[m_pos] == '=')
+ {
+ m_pos++;
+ currentHeaderLine += SkipWhitespaceAndEol();
+ enumCounter = ReadInteger(headerFilename, currentHeaderLine);
+ currentHeaderLine += SkipWhitespaceAndEol();
+ }
+ std::printf(".equiv %s, %ld\n", currentIdentName.c_str(), enumCounter);
+ enumCounter++;
+ symbolCount++;
+ }
+ else if (symbolCount == 0)
+ {
+ RaiseError("%s:%ld: empty enum is invalid", headerFilename.c_str(), currentHeaderLine);
+ }
+
+ if (m_buffer[m_pos] != ',')
+ {
+ currentHeaderLine += SkipWhitespaceAndEol();
+ if (m_buffer[m_pos++] == '}' && m_buffer[m_pos++] == ';')
+ {
+ ExpectEmptyRestOfLine();
+ break;
+ }
+ else
+ {
+ RaiseError("unterminated enum from included file %s:%ld", headerFilename.c_str(), currentHeaderLine);
+ }
+ }
+ m_pos++;
+ }
+ return true;
+}
+
// Asserts that the rest of the line is empty and moves to the next one.
void AsmFile::ExpectEmptyRestOfLine()
{
@@ -599,3 +645,130 @@ void AsmFile::RaiseWarning(const char* format, ...)
{
DO_REPORT("warning");
}
+
+// Skips Whitespace including newlines and returns the amount of newlines skipped
+int AsmFile::SkipWhitespaceAndEol()
+{
+ int newlines = 0;
+ while (m_buffer[m_pos] == '\t' || m_buffer[m_pos] == ' ' || m_buffer[m_pos] == '\n')
+ {
+ if (m_buffer[m_pos] == '\n')
+ newlines++;
+ m_pos++;
+ }
+ return newlines;
+}
+
+// returns the last line indicator and its corresponding file name without modifying the token index
+int AsmFile::FindLastLineNumber(std::string& filename)
+{
+ long pos = m_pos;
+ long linebreaks = 0;
+ while (m_buffer[pos] != '#' && pos >= 0)
+ {
+ if (m_buffer[pos] == '\n')
+ linebreaks++;
+ pos--;
+ }
+
+ if (pos < 0)
+ RaiseError("line indicator for header file not found before `enum`");
+
+ pos++;
+ while (m_buffer[pos] == ' ' || m_buffer[pos] == '\t')
+ pos++;
+
+ if (!IsAsciiDigit(m_buffer[pos]))
+ RaiseError("malformatted line indicator found before `enum`, expected line number");
+
+ unsigned n = 0;
+ int digit = 0;
+ while ((digit = ConvertDigit(m_buffer[pos++], 10)) != -1)
+ n = 10 * n + digit;
+
+ while (m_buffer[pos] == ' ' || m_buffer[pos] == '\t')
+ pos++;
+
+ if (m_buffer[pos++] != '"')
+ RaiseError("malformatted line indicator found before `enum`, expected filename");
+
+ while (m_buffer[pos] != '"')
+ {
+ unsigned char c = m_buffer[pos++];
+
+ if (c == 0)
+ {
+ if (pos >= m_size)
+ RaiseError("unexpected EOF in line indicator");
+ else
+ RaiseError("unexpected null character in line indicator");
+ }
+
+ if (!IsAsciiPrintable(c))
+ RaiseError("unexpected character '\\x%02X' in line indicator", c);
+
+ if (c == '\\')
+ {
+ c = m_buffer[pos];
+ RaiseError("unexpected escape '\\%c' in line indicator", c);
+ }
+
+ filename += c;
+ }
+
+ return n + linebreaks - 1;
+}
+
+std::string AsmFile::ReadIdentifier()
+{
+ long start = m_pos;
+ if (!IsIdentifierStartingChar(m_buffer[m_pos]))
+ return std::string();
+
+ m_pos++;
+
+ while (IsIdentifierChar(m_buffer[m_pos]))
+ m_pos++;
+
+ return std::string(&m_buffer[start], m_pos - start);
+}
+
+long AsmFile::ReadInteger(std::string filename, long line)
+{
+ bool negate = false;
+ int radix = 10;
+ if (!IsAsciiDigit(m_buffer[m_pos]))
+ {
+ if (m_buffer[m_pos++] == '-')
+ negate = true;
+ else
+ RaiseError("expected number in included file %s:%ld", filename.c_str(), line);
+ }
+
+ if (m_buffer[m_pos] == '0' && m_buffer[m_pos + 1] == 'x')
+ {
+ radix = 16;
+ m_pos += 2;
+ }
+ else if (m_buffer[m_pos] == '0' && m_buffer[m_pos + 1] == 'b')
+ {
+ radix = 2;
+ m_pos += 2;
+ }
+ else if (m_buffer[m_pos] == '0' && IsAsciiDigit(m_buffer[m_pos+1]))
+ {
+ radix = 8;
+ m_pos++;
+ }
+
+ long n = 0;
+ int digit;
+
+ while ((digit = ConvertDigit(m_buffer[m_pos], radix)) != -1)
+ {
+ n = n * radix + digit;
+ m_pos++;
+ }
+
+ return negate ? -n : n;
+}
diff --git a/tools/preproc/asm_file.h b/tools/preproc/asm_file.h
index 29435f76a47a..33e6ce5c49c1 100644
--- a/tools/preproc/asm_file.h
+++ b/tools/preproc/asm_file.h
@@ -31,13 +31,14 @@ enum class Directive
Include,
String,
Braille,
+ Enum,
Unknown
};
class AsmFile
{
public:
- AsmFile(std::string filename);
+ AsmFile(std::string filename, bool isStdin, bool doEnum);
AsmFile(AsmFile&& other);
AsmFile(const AsmFile&) = delete;
~AsmFile();
@@ -49,9 +50,11 @@ class AsmFile
bool IsAtEnd();
void OutputLine();
void OutputLocation();
+ bool ParseEnum();
private:
char* m_buffer;
+ bool m_doEnum;
long m_pos;
long m_size;
long m_lineNum;
@@ -68,6 +71,10 @@ class AsmFile
void RaiseError(const char* format, ...);
void RaiseWarning(const char* format, ...);
void VerifyStringLength(int length);
+ int SkipWhitespaceAndEol();
+ int FindLastLineNumber(std::string& filename);
+ std::string ReadIdentifier();
+ long ReadInteger(std::string filename, long line);
};
#endif // ASM_FILE_H
diff --git a/tools/preproc/c_file.cpp b/tools/preproc/c_file.cpp
index 508c6287313a..4b40d18bc828 100644
--- a/tools/preproc/c_file.cpp
+++ b/tools/preproc/c_file.cpp
@@ -30,56 +30,16 @@
#include "char_util.h"
#include "utf8.h"
#include "string_parser.h"
+#include "io.h"
CFile::CFile(const char * filenameCStr, bool isStdin)
{
- FILE *fp;
-
- if (isStdin) {
- fp = stdin;
+ if (isStdin)
m_filename = std::string{"/"}.append(filenameCStr);
- } else {
- fp = std::fopen(filenameCStr, "rb");
+ else
m_filename = std::string(filenameCStr);
- }
-
- std::string& filename = m_filename;
-
- if (fp == NULL)
- FATAL_ERROR("Failed to open \"%s\" for reading.\n", filename.c_str());
- m_size = 0;
- m_buffer = (char *)malloc(CHUNK_SIZE + 1);
- if (m_buffer == NULL) {
- FATAL_ERROR("Failed to allocate memory to process file \"%s\"!", filename.c_str());
- }
-
- std::size_t numAllocatedBytes = CHUNK_SIZE + 1;
- std::size_t bufferOffset = 0;
- std::size_t count;
-
- while ((count = std::fread(m_buffer + bufferOffset, 1, CHUNK_SIZE, fp)) != 0) {
- if (!std::ferror(fp)) {
- m_size += count;
-
- if (std::feof(fp)) {
- break;
- }
-
- numAllocatedBytes += CHUNK_SIZE;
- bufferOffset += CHUNK_SIZE;
- m_buffer = (char *)realloc(m_buffer, numAllocatedBytes);
- if (m_buffer == NULL) {
- FATAL_ERROR("Failed to allocate memory to process file \"%s\"!", filename.c_str());
- }
- } else {
- FATAL_ERROR("Failed to read \"%s\". (error: %s)", filename.c_str(), std::strerror(errno));
- }
- }
-
- m_buffer[m_size] = 0;
-
- std::fclose(fp);
+ m_buffer = ReadFileToBuffer(filenameCStr, isStdin, &m_size);
m_pos = 0;
m_lineNum = 1;
@@ -321,10 +281,10 @@ int ExtractData(const std::unique_ptr& buffer, int offset, int
void CFile::TryConvertIncbin()
{
- std::string idents[6] = { "INCBIN_S8", "INCBIN_U8", "INCBIN_S16", "INCBIN_U16", "INCBIN_S32", "INCBIN_U32" };
+ std::string idents[8] = { "INCBIN_S8", "INCBIN_U8", "INCBIN_S16", "INCBIN_U16", "INCBIN_S32", "INCBIN_U32", "DUMMY", "INCBIN_COMP"};
int incbinType = -1;
- for (int i = 0; i < 6; i++)
+ for (int i = 0; i < 8; i++)
{
if (CheckIdentifier(idents[i]))
{
@@ -337,6 +297,8 @@ void CFile::TryConvertIncbin()
return;
int size = 1 << (incbinType / 2);
+ if (size > 4)
+ size = 4;
bool isSigned = ((incbinType % 2) == 0);
long oldPos = m_pos;
@@ -389,6 +351,10 @@ void CFile::TryConvertIncbin()
std::string path(&m_buffer[startPos], m_pos - startPos);
+ // INCBIN_COMP; include *compressed* version of file
+ if (incbinType == 7)
+ path = path.append(".lz");
+
m_pos++;
int fileSize;
diff --git a/tools/preproc/c_file.h b/tools/preproc/c_file.h
index 49e633a18dd4..c40c33c96277 100644
--- a/tools/preproc/c_file.h
+++ b/tools/preproc/c_file.h
@@ -56,6 +56,4 @@ class CFile
void RaiseWarning(const char* format, ...);
};
-#define CHUNK_SIZE 4096
-
#endif // C_FILE_H
diff --git a/tools/preproc/io.cpp b/tools/preproc/io.cpp
new file mode 100644
index 000000000000..321676180d70
--- /dev/null
+++ b/tools/preproc/io.cpp
@@ -0,0 +1,51 @@
+#include "preproc.h"
+#include "io.h"
+#include
+#include
+#include
+
+char *ReadFileToBuffer(const char *filename, bool isStdin, long *size)
+{
+ FILE *fp;
+ if (isStdin)
+ fp = stdin;
+ else
+ fp = std::fopen(filename, "rb");
+
+ if (fp == NULL)
+ FATAL_ERROR("Failed to open \"%s\" for reading.\n", filename);
+
+ *size = 0;
+ char *buffer = (char *)malloc(CHUNK_SIZE + 1);
+ if (buffer == NULL) {
+ FATAL_ERROR("Failed to allocate memory to process file \"%s\"!", filename);
+ }
+
+ std::size_t numAllocatedBytes = CHUNK_SIZE + 1;
+ std::size_t bufferOffset = 0;
+ std::size_t count;
+
+ while ((count = std::fread(buffer + bufferOffset, 1, CHUNK_SIZE, fp)) != 0) {
+ if (!std::ferror(fp)) {
+ *size += count;
+
+ if (std::feof(fp)) {
+ break;
+ }
+
+ numAllocatedBytes += CHUNK_SIZE;
+ bufferOffset += CHUNK_SIZE;
+ buffer = (char *)realloc(buffer, numAllocatedBytes);
+ if (buffer == NULL) {
+ FATAL_ERROR("Failed to allocate memory to process file \"%s\"!", filename);
+ }
+ } else {
+ FATAL_ERROR("Failed to read \"%s\". (error: %s)", filename, std::strerror(errno));
+ }
+ }
+
+ buffer[*size] = 0;
+
+ std::fclose(fp);
+ return buffer;
+}
diff --git a/tools/preproc/io.h b/tools/preproc/io.h
new file mode 100644
index 000000000000..ac4e91051f1c
--- /dev/null
+++ b/tools/preproc/io.h
@@ -0,0 +1,8 @@
+#ifndef IO_H_
+#define IO_H_
+
+#define CHUNK_SIZE 4096
+
+char *ReadFileToBuffer(const char *filename, bool isStdin, long *size);
+
+#endif // IO_H_
diff --git a/tools/preproc/preproc.cpp b/tools/preproc/preproc.cpp
index eb2d4c8a23f7..20c2de51b635 100644
--- a/tools/preproc/preproc.cpp
+++ b/tools/preproc/preproc.cpp
@@ -20,11 +20,14 @@
#include
#include
+#include
#include "preproc.h"
#include "asm_file.h"
#include "c_file.h"
#include "charmap.h"
+static void UsageAndExit(const char *program);
+
Charmap* g_charmap;
void PrintAsmBytes(unsigned char *s, int length)
@@ -43,11 +46,12 @@ void PrintAsmBytes(unsigned char *s, int length)
}
}
-void PreprocAsmFile(std::string filename)
+void PreprocAsmFile(std::string filename, bool isStdin, bool doEnum)
{
std::stack stack;
- stack.push(AsmFile(filename));
+ stack.push(AsmFile(filename, isStdin, doEnum));
+ std::printf("# 1 \"%s\"\n", filename.c_str());
for (;;)
{
@@ -66,7 +70,7 @@ void PreprocAsmFile(std::string filename)
switch (directive)
{
case Directive::Include:
- stack.push(AsmFile(stack.top().ReadPath()));
+ stack.push(AsmFile(stack.top().ReadPath(), false, doEnum));
stack.top().OutputLocation();
break;
case Directive::String:
@@ -83,6 +87,12 @@ void PreprocAsmFile(std::string filename)
PrintAsmBytes(s, length);
break;
}
+ case Directive::Enum:
+ {
+ if (!stack.top().ParseEnum())
+ stack.top().OutputLine();
+ break;
+ }
case Directive::Unknown:
{
std::string globalLabel = stack.top().GetGlobalLabel();
@@ -109,9 +119,9 @@ void PreprocCFile(const char * filename, bool isStdin)
cFile.Preproc();
}
-char* GetFileExtension(char* filename)
+const char* GetFileExtension(const char* filename)
{
- char* extension = filename;
+ const char* extension = filename;
while (*extension != 0)
extension++;
@@ -130,35 +140,64 @@ char* GetFileExtension(char* filename)
return extension;
}
+static void UsageAndExit(const char *program)
+{
+ std::fprintf(stderr, "Usage: %s [-i] [-e] SRC_FILE CHARMAP_FILE\nwhere -i denotes if input is from stdin\n -e enables enum handling\n", program);
+ std::exit(EXIT_FAILURE);
+}
+
int main(int argc, char **argv)
{
- if (argc < 3 || argc > 4)
+ int opt;
+ const char *source = NULL;
+ const char *charmap = NULL;
+ bool isStdin = false;
+ bool doEnum = false;
+
+ /* preproc [-i] [-e] SRC_FILE CHARMAP_FILE */
+ while ((opt = getopt(argc, argv, "ie")) != -1)
{
- std::fprintf(stderr, "Usage: %s SRC_FILE CHARMAP_FILE [-i]\nwhere -i denotes if input is from stdin\n", argv[0]);
- return 1;
+ switch (opt)
+ {
+ case 'i':
+ isStdin = true;
+ break;
+ case 'e':
+ doEnum = true;
+ break;
+ default:
+ UsageAndExit(argv[0]);
+ break;
+ }
}
- g_charmap = new Charmap(argv[2]);
+ if (optind + 2 != argc)
+ UsageAndExit(argv[0]);
+
+ source = argv[optind + 0];
+ charmap = argv[optind + 1];
+
+ g_charmap = new Charmap(charmap);
- char* extension = GetFileExtension(argv[1]);
+ const char* extension = GetFileExtension(source);
if (!extension)
FATAL_ERROR("\"%s\" has no file extension.\n", argv[1]);
if ((extension[0] == 's') && extension[1] == 0)
- PreprocAsmFile(argv[1]);
- else if ((extension[0] == 'c' || extension[0] == 'i') && extension[1] == 0) {
- if (argc == 4) {
- if (argv[3][0] == '-' && argv[3][1] == 'i' && argv[3][2] == '\0') {
- PreprocCFile(argv[1], true);
- } else {
- FATAL_ERROR("unknown argument flag \"%s\".\n", argv[3]);
- }
- } else {
- PreprocCFile(argv[1], false);
- }
- } else
+ {
+ PreprocAsmFile(source, isStdin, doEnum);
+ }
+ else if ((extension[0] == 'c' || extension[0] == 'i') && extension[1] == 0)
+ {
+ if (doEnum)
+ FATAL_ERROR("-e is invalid for C sources\n");
+ PreprocCFile(source, isStdin);
+ }
+ else
+ {
FATAL_ERROR("\"%s\" has an unknown file extension of \"%s\".\n", argv[1], extension);
+ }
return 0;
}
diff --git a/tools/preproc/string_parser.cpp b/tools/preproc/string_parser.cpp
index dd5196a44489..9f39baa497e1 100644
--- a/tools/preproc/string_parser.cpp
+++ b/tools/preproc/string_parser.cpp
@@ -87,7 +87,7 @@ std::string StringParser::ReadCharOrEscape()
if (isEscape)
RaiseError("unknown escape '\\%c'", code);
else
- RaiseError("unknown character U+%X", code);
+ RaiseError("unknown character U+%X\nIf this character is intended to be used, it needs to be implemented", code);
}
return sequence;
diff --git a/tools/scaninc/c_file.cpp b/tools/scaninc/c_file.cpp
index 595f366cbe38..e1d98acbd0fb 100644
--- a/tools/scaninc/c_file.cpp
+++ b/tools/scaninc/c_file.cpp
@@ -213,10 +213,10 @@ void CFile::CheckIncbin()
return;
}
- std::string idents[6] = { "INCBIN_S8", "INCBIN_U8", "INCBIN_S16", "INCBIN_U16", "INCBIN_S32", "INCBIN_U32" };
+ std::string idents[7] = { "INCBIN_S8", "INCBIN_U8", "INCBIN_S16", "INCBIN_U16", "INCBIN_S32", "INCBIN_U32", "INCBIN_COMP"};
int incbinType = -1;
- for (int i = 0; i < 6; i++)
+ for (int i = 0; i < 7; i++)
{
if (CheckIdentifier(idents[i]))
{
@@ -250,6 +250,10 @@ void CFile::CheckIncbin()
std::string path = ReadPath();
+ // INCBIN_COMP; include *compressed* version of file
+ if (incbinType == 6)
+ path = path.append(".lz");
+
SkipWhitespace();
m_incbins.emplace(path);
diff --git a/tools/trainerproc/.gitignore b/tools/trainerproc/.gitignore
new file mode 100644
index 000000000000..d0c3d3d01102
--- /dev/null
+++ b/tools/trainerproc/.gitignore
@@ -0,0 +1 @@
+trainerproc
diff --git a/tools/trainerproc/Makefile b/tools/trainerproc/Makefile
new file mode 100644
index 000000000000..4513a6ad79d5
--- /dev/null
+++ b/tools/trainerproc/Makefile
@@ -0,0 +1,20 @@
+.PHONY: all clean
+
+CFLAGS := -Wall -O2
+
+SRCS := main.c
+
+ifeq ($(OS),Windows_NT)
+EXE := .exe
+else
+EXE :=
+endif
+
+all: trainerproc$(EXE)
+ @:
+
+trainerproc$(EXE): $(SRCS)
+ $(CC) $(CFLAGS) $(SRCS) -o $@ $(LDFLAGS)
+
+clean:
+ $(RM) trainerproc$(EXE)
diff --git a/tools/trainerproc/main.c b/tools/trainerproc/main.c
new file mode 100644
index 000000000000..b410e810b084
--- /dev/null
+++ b/tools/trainerproc/main.c
@@ -0,0 +1,2017 @@
+/* trainerprpc
+ * Parses teams in the competitive format (as used by Showdown) and
+ * converts them into the internal team format. */
+
+/* To add a new member to 'TrainerMon':
+ * 1. Add the same member to 'Pokemon'.
+ * 2. Parse that member in 'parse_trainer', probably in the 'parse_attribute' loop.
+ * 3. Format that member in 'fprint_trainers'. */
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+#define MAX_TRAINER_AI_FLAGS 32
+#define MAX_TRAINER_ITEMS 4
+#define PARTY_SIZE 6
+#define MAX_MON_MOVES 4
+
+struct String
+{
+ const unsigned char *string;
+ int string_n;
+};
+
+struct Stats
+{
+ int hp, attack, defense, special_attack, special_defense, speed;
+};
+
+enum Gender
+{
+ GENDER_ANY,
+ GENDER_MALE,
+ GENDER_FEMALE,
+};
+
+// TODO: Support Hidden Power.
+struct Pokemon
+{
+ struct String nickname;
+ struct String species;
+ enum Gender gender;
+ struct String item;
+ int header_line;
+
+ struct Stats evs;
+ int evs_line;
+
+ struct Stats ivs;
+ int ivs_line;
+
+ struct String ability;
+ int ability_line;
+
+ int level;
+ int level_line;
+
+ struct String ball;
+ int ball_line;
+
+ int friendship;
+ int friendship_line;
+
+ struct String nature;
+ int nature_line;
+
+ bool shiny;
+ int shiny_line;
+
+ int dynamax_level;
+ int dynamax_level_line;
+
+ bool gigantamax_factor;
+ bool gigantamax_factor_line;
+
+ struct String tera_type;
+ int tera_type_line;
+
+ struct String moves[MAX_MON_MOVES];
+ int moves_n;
+ int move1_line;
+};
+
+struct Trainer
+{
+ struct String id;
+ int id_line;
+
+ struct String ai_flags[MAX_TRAINER_AI_FLAGS];
+ int ai_flags_n;
+ int ai_flags_line;
+
+ struct String items[MAX_TRAINER_ITEMS];
+ int items_n;
+ int items_line;
+
+ struct String class;
+ int class_line;
+
+ struct String encounter_music;
+ int encounter_music_line;
+
+ enum Gender gender;
+ int gender_line;
+
+ struct String pic;
+ int pic_line;
+
+ struct String name;
+ int name_line;
+
+ bool double_battle;
+ int double_battle_line;
+
+ struct Pokemon pokemon[PARTY_SIZE];
+ int pokemon_n;
+
+ struct String mugshot;
+ int mugshot_line;
+
+ struct String starting_status;
+ int starting_status_line;
+};
+
+static bool is_empty_string(struct String s)
+{
+ return s.string_n == 0;
+}
+
+static bool is_literal_string(struct String s1, const char *s2)
+{
+ for (int i = 0;; i++)
+ {
+ if (i == s1.string_n && s2[i] == '\0')
+ return true;
+ else if (i == s1.string_n || s2[i] == '\0')
+ return false;
+ else if (s1.string[i] != s2[i])
+ return false;
+ }
+}
+
+static bool starts_with(struct String s, const char *prefix)
+{
+ int n = strlen(prefix);
+ return strncmp((const char *)s.string, prefix, n) == 0;
+}
+
+static bool ends_with(struct String s, const char *suffix)
+{
+ int n = strlen(suffix);
+ if (n > s.string_n)
+ {
+ return false;
+ }
+ else
+ {
+ for (int i = 0; i < n; i++)
+ {
+ if (s.string[s.string_n - i - 1] != suffix[n - i - 1])
+ return false;
+ }
+ return true;
+ }
+}
+
+static struct String literal_string(const char *s)
+{
+ return (struct String) {
+ .string = (const unsigned char *)s,
+ .string_n = strlen(s),
+ };
+}
+
+struct Source
+{
+ const char *path;
+ const unsigned char *buffer;
+ int buffer_n;
+};
+
+struct SourceLocation
+{
+ int line;
+ int column;
+};
+
+struct Token
+{
+ const struct Source *source;
+ struct SourceLocation location;
+ int begin;
+ int end;
+};
+
+static bool is_empty_token(const struct Token *t)
+{
+ return t->begin == t->end;
+}
+
+// TODO: Make case-insensitive?
+static bool is_literal_token(const struct Token *t, const char *s)
+{
+ int i = t->begin;
+ for (;;)
+ {
+ if (*s == '\0' && i == t->end)
+ return true;
+ else if (*s == '\0' || i == t->end)
+ return false;
+ else if (*s != t->source->buffer[i])
+ return false;
+ i++;
+ s++;
+ }
+}
+
+struct Parser
+{
+ struct Source *source;
+ struct SourceLocation location;
+ int offset;
+ struct SourceLocation error_location;
+ const char *error;
+ bool fatal_error;
+};
+
+struct Parsed
+{
+ const struct Source *source;
+
+ struct Trainer *trainers;
+ int trainers_n;
+
+ struct Stats default_ivs;
+ int default_ivs_line;
+ bool default_ivs_off;
+
+ int default_level;
+ int default_level_line;
+ bool default_level_off;
+};
+
+static bool set_parse_error(struct Parser *p, struct SourceLocation location, const char *error)
+{
+ p->error = error;
+ p->error_location = location;
+ return false;
+}
+
+static bool show_parse_error(struct Parser *p)
+{
+ // Print error message.
+ int n = fprintf(stderr, "%s:%d: ", p->source->path, p->error_location.line);
+ fprintf(stderr, "error: %s\n", p->error);
+
+ // Seek to the line.
+ int line, begin, end;
+ for (line = 1, begin = 0; begin < p->source->buffer_n; begin++)
+ {
+ if (p->error_location.line == line)
+ break;
+ if (p->source->buffer[begin] == '\n')
+ line++;
+ }
+ for (end = begin; end < p->source->buffer_n; end++)
+ {
+ if (p->source->buffer[end] == '\n')
+ break;
+ }
+
+ // Print the source line.
+ fprintf(stderr, "%s:%d: %.*s\n", p->source->path, p->error_location.line, end - begin, &p->source->buffer[begin]);
+
+ // Print caret pointing at the column.
+ fprintf(stderr, "%*s", n, "");
+ for (int column = 1; column < p->error_location.column && begin + column < end; column++)
+ {
+ unsigned char c = p->source->buffer[begin + column];
+ fputc(c == '\t' ? c : ' ', stderr);
+ }
+ fprintf(stderr, "^\n");
+
+ p->error = NULL;
+ p->fatal_error = true;
+
+ return false;
+}
+
+static bool set_show_parse_error(struct Parser *p, struct SourceLocation location, const char *error)
+{
+ set_parse_error(p, location, error);
+ return show_parse_error(p);
+}
+
+__attribute__((warn_unused_result))
+static bool peek_char(struct Parser *p, unsigned char *c)
+{
+ assert(p && c);
+ if (p->offset == p->source->buffer_n)
+ return false;
+ *c = p->source->buffer[p->offset];
+ return true;
+}
+
+__attribute__((warn_unused_result))
+static bool pop_char(struct Parser *p, unsigned char *c)
+{
+ assert(p && c);
+ if (p->offset == p->source->buffer_n)
+ return false;
+ *c = p->source->buffer[p->offset++];
+ if (*c == '\n')
+ {
+ p->location.line++;
+ p->location.column = 1;
+ }
+ else
+ {
+ p->location.column++;
+ }
+ return true;
+}
+
+static void skip_whitespace(struct Parser *p)
+{
+ assert(p);
+ unsigned char c;
+ for (;;)
+ {
+ if (!peek_char(p, &c))
+ break;
+ if (c != ' ' && c != '\t')
+ break;
+ if (!pop_char(p, &c))
+ assert(false);
+ }
+}
+
+static void skip_line(struct Parser *p)
+{
+ assert(p);
+ unsigned char c;
+ for (;;)
+ {
+ if (!pop_char(p, &c))
+ break;
+ if (c == '\n')
+ break;
+ }
+}
+
+__attribute__((warn_unused_result))
+static bool match_eof(struct Parser *p)
+{
+ return p->offset == p->source->buffer_n;
+}
+
+__attribute__((warn_unused_result))
+static bool match_exact(struct Parser *p, const char *s)
+{
+ assert(p && s);
+ struct Parser p_ = *p;
+ unsigned char c;
+
+ for (; *s != '\0'; s++)
+ {
+ if (!pop_char(&p_, &c))
+ return false;
+ if (*s != c)
+ return false;
+ }
+
+ *p = p_;
+ return true;
+}
+
+static void match_until_eol(struct Parser *p, struct Token *t)
+{
+ assert(p && t);
+ unsigned char c;
+
+ skip_whitespace(p);
+
+ t->source = p->source;
+ t->location = p->location;
+ t->begin = p->offset;
+ t->end = p->offset;
+
+ for (;;)
+ {
+ if (!peek_char(p, &c))
+ break;
+ if (c == '\n')
+ break;
+ if (!pop_char(p, &c))
+ assert(false);
+ if (c != ' ' && c != '\t')
+ t->end = p->offset;
+ }
+}
+
+__attribute__((warn_unused_result))
+static bool match_eol(struct Parser *p)
+{
+ struct Parser p_ = *p;
+ unsigned char c;
+
+ skip_whitespace(&p_);
+ for (;;)
+ {
+ if (!pop_char(&p_, &c))
+ return false;
+
+ if (c == '\n')
+ break;
+ else
+ return false;
+ }
+
+ *p = p_;
+ return true;
+}
+
+__attribute__((warn_unused_result))
+static bool match_int(struct Parser *p, int *i)
+{
+ assert(p && i);
+ struct Parser p_ = *p;
+ unsigned char c;
+
+ *i = 0;
+ for (;;)
+ {
+ if (!peek_char(&p_, &c))
+ break;
+ if (!('0' <= c && c <= '9'))
+ break;
+ *i = *i * 10 + (c - '0');
+ if (!pop_char(&p_, &c))
+ assert(false);
+ }
+
+ if (p->offset == p_.offset)
+ return false;
+
+ *p = p_;
+ 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)
+{
+ assert(p && t);
+ struct Parser p_ = *p;
+ unsigned char c;
+
+ t->source = p->source;
+ t->location = p->location;
+ t->begin = p->offset;
+
+ for (;;)
+ {
+ if (!peek_char(&p_, &c))
+ break;
+
+ if (('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z') || ('0' <= c && c <= '9') || c == '_')
+ ;
+ else
+ break;
+
+ if (!pop_char(&p_, &c))
+ assert(false);
+ }
+
+ t->end = p_.offset;
+ if (t->begin == t->end)
+ return false;
+
+ *p = p_;
+ return true;
+}
+
+__attribute__((warn_unused_result))
+static bool match_human_identifier(struct Parser *p, struct Token *t)
+{
+ assert(p && t);
+ struct Parser p_ = *p, q = *p;
+ unsigned char c;
+
+ t->source = p->source;
+ t->location = p->location;
+ t->begin = p->offset;
+ t->end = p->offset;
+
+ for (;;)
+ {
+ if (!peek_char(&p_, &c))
+ break;
+
+ if (('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z') || c == '_' || c == '-' || c == ' ')
+ ;
+ else if (p_.offset > t->begin && ('0' <= c && c <= '9'))
+ ;
+ else
+ break;
+
+ if (!pop_char(&p_, &c))
+ assert(false);
+
+ if (c != ' ')
+ q = p_;
+ }
+
+ t->end = q.offset;
+ if (t->begin == t->end)
+ return false;
+
+ *p = q;
+ return true;
+}
+
+// Like 'match_human_identifier' but parses ':', for 'Type: Null', among
+// other exceptions.
+__attribute__((warn_unused_result))
+static bool match_species_identifier(struct Parser *p, struct Token *t)
+{
+ assert(p && t);
+ struct Parser p_ = *p, q = *p;
+ unsigned char c;
+
+ t->source = p->source;
+ t->location = p->location;
+ t->begin = p->offset;
+ t->end = p->offset;
+
+ for (;;)
+ {
+ if (!peek_char(&p_, &c))
+ break;
+
+ if (('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z') || ('0' <= c && c <= '9') || c == '_' || c == '-' || c == ' ' || c == ':' || c == '.' || c == '\'' || c >= 0x80)
+ ;
+ else
+ break;
+
+ if (!pop_char(&p_, &c))
+ assert(false);
+
+ if (c != ' ')
+ q = p_;
+ }
+
+ t->end = q.offset;
+ if (t->begin == t->end)
+ return false;
+
+ *p = q;
+ return true;
+}
+
+// Like 'match_human_identifier' but parses '10,000,000 Volt Thunderbolt'
+// among other exceptions.
+__attribute__((warn_unused_result))
+static bool match_move_identifier(struct Parser *p, struct Token *t)
+{
+ assert(p && t);
+ struct Parser p_ = *p, q = *p;
+ unsigned char c;
+
+ t->source = p->source;
+ t->location = p->location;
+ t->begin = p->offset;
+ t->end = p->offset;
+
+ for (;;)
+ {
+ if (!peek_char(&p_, &c))
+ break;
+
+ if (('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z') || ('0' <= c && c <= '9') || c == '_' || c == '-' || c == ' ' || c == ',')
+ ;
+ else
+ break;
+
+ if (!pop_char(&p_, &c))
+ assert(false);
+
+ if (c != ' ')
+ q = p_;
+ }
+
+ t->end = q.offset;
+ if (t->begin == t->end)
+ return false;
+
+ *p = q;
+ return true;
+}
+
+__attribute__((warn_unused_result))
+static bool parse_section(struct Parser *p, struct Token *section)
+{
+ assert(p && section);
+ struct Parser p_ = *p;
+
+ if (!match_exact(&p_, "==="))
+ return false;
+
+ skip_whitespace(&p_);
+ if (!match_identifier(&p_, section))
+ return set_parse_error(p, p_.location, "expected identifier");
+
+ skip_whitespace(&p_);
+ if (!match_exact(&p_, "==="))
+ return set_parse_error(p, p_.location, "expected '==='");
+
+ skip_whitespace(&p_);
+ if (!match_eol(&p_))
+ return set_parse_error(p, p_.location, "unexpected character in section");
+
+ *p = p_;
+ return true;
+}
+
+__attribute__((warn_unused_result))
+static bool parse_pokemon_header(struct Parser *p, struct Token *nickname, struct Token *species, struct Token *gender, struct Token *item)
+{
+ assert(p && nickname && species && gender && item);
+ struct Parser p_ = *p;
+ struct Token first = {}, second = {}, third = {};
+
+ if (!match_species_identifier(&p_, &first))
+ return false;
+
+ skip_whitespace(&p_);
+ if (match_exact(&p_, "("))
+ {
+ if (!match_species_identifier(&p_, &second))
+ return set_parse_error(p, p_.location, "expected species or gender");
+ if (!match_exact(&p_, ")"))
+ return set_parse_error(p, p_.location, "expected ')'");
+
+ skip_whitespace(&p_);
+ if (match_exact(&p_, "("))
+ {
+ if (!match_human_identifier(&p_, &third))
+ return set_parse_error(p, p_.location, "expected gender");
+ if (!match_exact(&p_, ")"))
+ return set_parse_error(p, p_.location, "expected ')'");
+
+ *nickname = first;
+ *species = second;
+ *gender = third;
+ }
+ else
+ {
+ if (second.begin + 1 == second.end) // Single letter.
+ {
+ *nickname = (struct Token) {};
+ *species = first;
+ *gender = second;
+ }
+ else
+ {
+ *nickname = first;
+ *species = second;
+ *gender = (struct Token) {};
+ }
+ }
+ }
+ else
+ {
+ *nickname = (struct Token) {};
+ *species = first;
+ *gender = (struct Token) {};
+ }
+
+ skip_whitespace(&p_);
+ if (match_exact(&p_, "@"))
+ {
+ skip_whitespace(&p_);
+ if (!match_human_identifier(&p_, item))
+ return set_parse_error(p, p_.location, "expected item");
+ }
+ else
+ {
+ *item = (struct Token) {};
+ }
+
+ skip_whitespace(&p_);
+ if (!match_eol(&p_))
+ return set_parse_error(p, p_.location, "unexpected character in Pokemon header");
+
+ *p = p_;
+ return true;
+}
+
+__attribute__((warn_unused_result))
+static bool parse_pokemon_nature(struct Parser *p, struct Token *nature)
+{
+ assert(p && nature);
+ struct Parser p_ = *p;
+
+ if (!match_identifier(&p_, nature))
+ return false;
+
+ skip_whitespace(&p_);
+ if (!match_exact(&p_, "Nature"))
+ return false;
+
+ skip_whitespace(&p_);
+ if (!match_eol(&p_))
+ return set_parse_error(p, p_.location, "unexpected character in nature");
+
+ *p = p_;
+ return true;
+}
+
+__attribute__((warn_unused_result))
+static bool parse_attribute(struct Parser *p, struct Token *key, struct Token *value)
+{
+ assert(p && key && value);
+
+ if (parse_pokemon_nature(p, value))
+ {
+ static const struct Source nature_source = { .path=NULL, .buffer=(unsigned char *)"Nature", .buffer_n=6 };
+ key->source = &nature_source;
+ key->location = p->location;
+ key->begin = 0;
+ key->end = nature_source.buffer_n;
+ return true;
+ }
+
+ struct Parser p_ = *p;
+
+ if (!match_human_identifier(&p_, key))
+ return false;
+
+ skip_whitespace(&p_);
+ if (match_exact(&p_, ":"))
+ {
+ skip_whitespace(&p_);
+ match_until_eol(&p_, value);
+ if (!match_eol(&p_))
+ return set_parse_error(p, p_.location, "unexpected character in attribute");
+ }
+ else
+ {
+ return set_parse_error(p, p_.location, "expected ':' or 'Nature'");
+ }
+
+ *p = p_;
+ return true;
+}
+
+__attribute__((warn_unused_result))
+static bool parse_pokemon_move(struct Parser *p, struct Token *move)
+{
+ assert(p && move);
+ struct Parser p_ = *p;
+
+ if (!match_exact(&p_, "-"))
+ return false;
+ skip_whitespace(&p_);
+ if (!match_move_identifier(&p_, move))
+ return set_parse_error(p, p_.location, "expected move");
+ skip_whitespace(&p_);
+ if (!match_eol(&p_))
+ return set_parse_error(p, p_.location, "unexpected character in move");
+
+ *p = p_;
+ return true;
+}
+
+static struct String token_string(const struct Token *t)
+{
+ if (t->source)
+ {
+ return (struct String) {
+ .string = &t->source->buffer[t->begin],
+ .string_n = t->end - t->begin,
+ };
+ }
+ else
+ {
+ return (struct String) {
+ .string = NULL,
+ .string_n = 0,
+ };
+ }
+}
+
+static bool token_gender(struct Parser *p, const struct Token *t, enum Gender *g)
+{
+ if (is_empty_token(t))
+ {
+ *g = GENDER_ANY;
+ return true;
+ }
+ else if (is_literal_token(t, "M") || is_literal_token(t, "Male"))
+ {
+ *g = GENDER_MALE;
+ return true;
+ }
+ else if (is_literal_token(t, "F") || is_literal_token(t, "Female"))
+ {
+ *g = GENDER_FEMALE;
+ return true;
+ }
+ else
+ {
+ return set_parse_error(p, t->location, "invalid gender");
+ }
+}
+
+static bool token_stats(struct Parser *p, const struct Token *t, struct Stats *stats, bool require_all)
+{
+ struct Source source = {
+ .path = p->source->path,
+ .buffer = p->source->buffer,
+ .buffer_n = t->end,
+ };
+ struct Parser p_ = {
+ .source = &source,
+ .location = t->location,
+ .offset = t->begin,
+ };
+ bool has_hp = false, has_atk = false, has_def = false, has_spa = false, has_spd = false, has_spe = false;
+ for (;;)
+ {
+ int value;
+ skip_whitespace(&p_);
+ if (!match_int(&p_, &value))
+ return set_parse_error(p, p_.location, "expected integer");
+
+ struct Token stat;
+ skip_whitespace(&p_);
+ struct SourceLocation stat_location = p_.location;
+ if (!match_identifier(&p_, &stat))
+ return set_parse_error(p, p_.location, "expected 'HP', 'Atk', 'Def', 'SpA', 'SpD', or 'Spe'");
+ if (is_literal_token(&stat, "HP"))
+ {
+ stats->hp = value;
+ has_hp = true;
+ }
+ else if (is_literal_token(&stat, "Atk"))
+ {
+ stats->attack = value;
+ has_atk = true;
+ }
+ else if (is_literal_token(&stat, "Def"))
+ {
+ stats->defense = value;
+ has_def = true;
+ }
+ else if (is_literal_token(&stat, "SpA"))
+ {
+ stats->special_attack = value;
+ has_spa = true;
+ }
+ else if (is_literal_token(&stat, "SpD"))
+ {
+ stats->special_defense = value;
+ has_spd = true;
+ }
+ else if (is_literal_token(&stat, "Spe"))
+ {
+ stats->speed = value;
+ has_spe = true;
+ }
+ else
+ {
+ return set_parse_error(p, stat_location, "expected 'HP', 'Atk', 'Def', 'SpA', 'SpD', or 'Spe'");
+ }
+
+ skip_whitespace(&p_);
+ if (match_eof(&p_))
+ break;
+ else if (!match_exact(&p_, "/"))
+ return set_parse_error(p, p_.location, "expected '/' or newline");
+ }
+ if (require_all && !(has_hp && has_atk && has_def && has_spa && has_spd && has_spe))
+ return set_parse_error(p, p_.location, "expected all of 'HP', 'Atk', 'Def', 'SpA', 'SpD', and 'Spe'");
+ return true;
+}
+
+// '/'-separated strings.
+static bool token_human_identifiers(struct Parser *p, const struct Token *t, struct String *ids, int *ids_n, int max_ids_n)
+{
+ struct Source source = {
+ .path = p->source->path,
+ .buffer = p->source->buffer,
+ .buffer_n = t->end,
+ };
+ struct Parser p_ = {
+ .source = &source,
+ .location = t->location,
+ .offset = t->begin,
+ };
+ int n = 0;
+ while (*ids_n < max_ids_n)
+ {
+ skip_whitespace(&p_);
+ struct Token id;
+ if (!match_human_identifier(&p_, &id))
+ return set_parse_error(p, p_.location, "expected identifier");
+ ids[n++] = token_string(&id);
+ skip_whitespace(&p_);
+ if (match_eof(&p_))
+ break;
+ else if (!match_exact(&p_, "/"))
+ return set_parse_error(p, p_.location, "expected '/' or newline");
+ }
+ *ids_n = n;
+ return true;
+}
+
+static bool token_int(struct Parser *p, const struct Token *t, int *i)
+{
+ char *end;
+ long l = strtol((const char *)&t->source->buffer[t->begin], &end, 10);
+ if ((unsigned char *)end != &t->source->buffer[t->end])
+ return set_parse_error(p, t->location, "invalid integer");
+ if (!(INT_MIN <= l && l <= INT_MAX))
+ return set_parse_error(p, t->location, "integer too large");
+ *i = l;
+ return true;
+}
+
+static bool token_bool(struct Parser *p, const struct Token *t, bool *b)
+{
+ if (is_literal_token(t, "Yes"))
+ {
+ *b = true;
+ return true;
+ }
+ else if (is_literal_token(t, "No"))
+ {
+ *b = false;
+ return true;
+ }
+ else
+ {
+ return set_parse_error(p, t->location, "invalid boolean");
+ }
+}
+
+static bool parse_pragma(struct Parser *p, struct Parsed *parsed)
+{
+ assert(p && parsed);
+ struct Parser p_ = *p;
+
+ if (!match_exact(&p_, "#pragma"))
+ return false;
+
+ // TODO: Require _a_ space between #pragma and trainerproc.
+ struct Token id;
+ skip_whitespace(&p_);
+ if (!match_identifier(&p_, &id))
+ return set_show_parse_error(p, p_.location, "expected 'trainerproc'");
+ if (!is_literal_token(&id, "trainerproc"))
+ return set_show_parse_error(p, id.location, "expected 'trainerproc'");
+
+ skip_whitespace(&p_);
+ if (!match_identifier(&p_, &id))
+ {
+ return set_show_parse_error(p, p_.location, "expected identifier");
+ }
+ else if (is_literal_token(&id, "ivs"))
+ {
+ if (parsed->default_ivs_line)
+ return set_show_parse_error(p, p_.location, "duplicate #pragma trainerproc ivs");
+ parsed->default_ivs_line = p_.location.line;
+ skip_whitespace(&p_);
+ struct Token t;
+ match_until_eol(&p_, &t);
+ if (is_literal_token(&t, "explicit"))
+ parsed->default_ivs_off = true;
+ else if (!token_stats(p, &t, &parsed->default_ivs, true))
+ return show_parse_error(p);
+ }
+ else if (is_literal_token(&id, "level"))
+ {
+ if (parsed->default_level_line)
+ return set_show_parse_error(p, p_.location, "duplicate #pragma trainerproc level");
+ parsed->default_level_line = p_.location.line;
+ skip_whitespace(&p_);
+ struct Token t;
+ match_until_eol(&p_, &t);
+ if (is_literal_token(&t, "explicit"))
+ parsed->default_level_off = true;
+ else if (!token_int(p, &t, &parsed->default_level))
+ return show_parse_error(p);
+ }
+ else
+ {
+ return set_show_parse_error(p, id.location, "unknown pragma");
+ }
+
+ if (!match_eol(&p_))
+ return set_show_parse_error(p, p_.location, "expected newline");
+
+ *p = p_;
+ return true;
+}
+
+// Species that are selected based on the explicit gender.
+// e.g. 'Nidoran (M)' becomes 'Nidoran-M'.
+static const struct {
+ const char *species;
+ const char *male_species;
+ const char *female_species;
+} gendered_species[] = {
+ { "Basculegion", "Basculegion-M", "Basculegion-F" },
+ { "Indeedee", "Indeedee-M", "Indeedee-F" },
+ { "Oinkologne", "Oinkologne-M", "Oinkologne-F" },
+ { "Meowstic", "Meowstic-M", "Meowstic-F" },
+ { "Nidoran", "Nidoran-M", "Nidoran-F" },
+ { NULL, NULL, NULL }
+};
+
+// Items that are selected based on the explicit form.
+// e.g. 'Arceus-Fire' becomes 'Arceus @ Flame Plate'.
+static const struct {
+ const char *form;
+ const char *species;
+ const char *item;
+} itemed_species[] = {
+ { "Arceus-Bug", "Arceus", "Insect Plate" },
+ { "Arceus-Dark", "Arceus", "Dread Plate" },
+ { "Arceus-Dragon", "Arceus", "Draco Plate" },
+ { "Arceus-Electric", "Arceus", "Zap Plate" },
+ { "Arceus-Fairy", "Arceus", "Pixie Plate" },
+ { "Arceus-Fighting", "Arceus", "Fist Plate" },
+ { "Arceus-Fire", "Arceus", "Flame Plate" },
+ { "Arceus-Flying", "Arceus", "Sky Plate" },
+ { "Arceus-Ghost", "Arceus", "Spooky Plate" },
+ { "Arceus-Grass", "Arceus", "Meadow Plate" },
+ { "Arceus-Ground", "Arceus", "Earth Plate" },
+ { "Arceus-Ice", "Arceus", "Icicle Plate" },
+ { "Arceus-Poison", "Arceus", "Toxic Plate" },
+ { "Arceus-Psychic", "Arceus", "Mind Plate" },
+ { "Arceus-Rock", "Arceus", "Stone Plate" },
+ { "Arceus-Steel", "Arceus", "Iron Plate" },
+ { "Arceus-Water", "Arceus", "Splash Plate" },
+ { "Genesect-Burn", "Genesect", "Burn Drive" },
+ { "Genesect-Chill", "Genesect", "Chill Drive" },
+ { "Genesect-Douse", "Genesect", "Douse Drive" },
+ { "Genesect-Shock", "Genesect", "Shock Drive" },
+ { "Ogerpon-Cornerstone", "Ogerpon", "Cornerstone Mask" },
+ { "Ogerpon-Hearthflame", "Ogerpon", "Hearthflame Mask" },
+ { "Ogerpon-Wellspring", "Ogerpon", "Wellspring Mask" },
+ { "Silvally-Bug", "Silvally", "Bug Memory" },
+ { "Silvally-Dark", "Silvally", "Dark Memory" },
+ { "Silvally-Dragon", "Silvally", "Dragon Memory" },
+ { "Silvally-Electric", "Silvally", "Electric Memory" },
+ { "Silvally-Fairy", "Silvally", "Fairy Memory" },
+ { "Silvally-Fighting", "Silvally", "Fighting Memory" },
+ { "Silvally-Fire", "Silvally", "Fire Memory" },
+ { "Silvally-Flying", "Silvally", "Flying Memory" },
+ { "Silvally-Ghost", "Silvally", "Ghost Memory" },
+ { "Silvally-Grass", "Silvally", "Grass Memory" },
+ { "Silvally-Ground", "Silvally", "Ground Memory" },
+ { "Silvally-Ice", "Silvally", "Ice Memory" },
+ { "Silvally-Poison", "Silvally", "Poison Memory" },
+ { "Silvally-Psychic", "Silvally", "Psychic Memory" },
+ { "Silvally-Rock", "Silvally", "Rock Memory" },
+ { "Silvally-Steel", "Silvally", "Steel Memory" },
+ { "Silvally-Water", "Silvally", "Water Memory" },
+ { NULL, NULL, NULL }
+};
+
+static bool parse_trainer(struct Parser *p, const struct Parsed *parsed, struct Trainer *trainer)
+{
+ bool any_error = false;
+ *trainer = (struct Trainer) {};
+
+ while (match_empty_line(p)) {}
+ struct Token id;
+ struct Token nickname, species, gender, item;
+ if (!parse_section(p, &id))
+ {
+ if (!p->error)
+ set_parse_error(p, p->location, "expected '==='");
+ show_parse_error(p);
+ return false;
+ }
+ trainer->id = token_string(&id);
+ trainer->id_line = id.location.line;
+
+ // Parse trainer attributes.
+ struct Token key, value;
+ while (parse_attribute(p, &key, &value))
+ {
+ if (is_literal_token(&key, "AI"))
+ {
+ if (trainer->ai_flags_line)
+ any_error = !set_show_parse_error(p, key.location, "duplicate 'AI'");
+ trainer->ai_flags_line = value.location.line;
+ if (!token_human_identifiers(p, &value, trainer->ai_flags, &trainer->ai_flags_n, MAX_TRAINER_AI_FLAGS))
+ any_error = !show_parse_error(p);
+ }
+ else if (is_literal_token(&key, "Items"))
+ {
+ if (trainer->items_line)
+ any_error = !set_show_parse_error(p, key.location, "duplicate 'Items'");
+ trainer->items_line = value.location.line;
+ if (!token_human_identifiers(p, &value, trainer->items, &trainer->items_n, MAX_TRAINER_ITEMS))
+ any_error = !show_parse_error(p);
+ }
+ else if (is_literal_token(&key, "Class"))
+ {
+ if (trainer->class_line)
+ any_error = !set_show_parse_error(p, key.location, "duplicate 'Class'");
+ trainer->class_line = value.location.line;
+ trainer->class = token_string(&value);
+ }
+ else if (is_literal_token(&key, "Music"))
+ {
+ if (trainer->encounter_music_line)
+ any_error = !set_show_parse_error(p, key.location, "duplicate 'Music'");
+ trainer->encounter_music_line = value.location.line;
+ trainer->encounter_music = token_string(&value);
+ }
+ else if (is_literal_token(&key, "Gender"))
+ {
+ if (trainer->gender_line)
+ any_error = !set_show_parse_error(p, key.location, "duplicate 'Gender'");
+ trainer->gender_line = value.location.line;
+ if (!token_gender(p, &value, &trainer->gender))
+ any_error = !show_parse_error(p);
+ }
+ else if (is_literal_token(&key, "Pic"))
+ {
+ if (trainer->pic_line)
+ any_error = !set_show_parse_error(p, key.location, "duplicate 'Pic'");
+ trainer->pic_line = value.location.line;
+ trainer->pic = token_string(&value);
+ }
+ else if (is_literal_token(&key, "Name"))
+ {
+ if (trainer->name_line)
+ any_error = !set_show_parse_error(p, key.location, "duplicate 'Name'");
+ trainer->name_line = value.location.line;
+ trainer->name = token_string(&value);
+ }
+ else if (is_literal_token(&key, "Double Battle"))
+ {
+ if (trainer->double_battle_line)
+ any_error = !set_show_parse_error(p, key.location, "duplicate 'Double Battle'");
+ trainer->double_battle_line = value.location.line;
+ if (!token_bool(p, &value, &trainer->double_battle))
+ any_error = !show_parse_error(p);
+ }
+ else if (is_literal_token(&key, "Mugshot"))
+ {
+ if (trainer->mugshot_line)
+ any_error = !set_show_parse_error(p, key.location, "duplicate 'Mugshot'");
+ trainer->mugshot_line = value.location.line;
+ trainer->mugshot = token_string(&value);
+ }
+ else if (is_literal_token(&key, "Starting Status"))
+ {
+ if (trainer->starting_status_line)
+ any_error = !set_show_parse_error(p, key.location, "duplicate 'Starting Status'");
+ trainer->starting_status_line = value.location.line;
+ trainer->starting_status = token_string(&value);
+ }
+ else
+ {
+ any_error = !set_show_parse_error(p, key.location, "expected one of 'Name', 'Class', 'Pic', 'Gender', 'Music', 'Items', 'Double Battle', or 'AI'");
+ }
+ }
+ if (!trainer->pic_line)
+ any_error = !set_show_parse_error(p, p->location, "expected 'Pic' before Pokemon");
+ if (!trainer->name_line)
+ any_error = !set_show_parse_error(p, p->location, "expected 'Name' before Pokemon");
+ if (!match_empty_line(p))
+ {
+ set_show_parse_error(p, p->location, "expected empty line");
+
+ // Continue if the line is the start of a new Pokemon.
+ struct Parser p_ = *p;
+ if (!parse_pokemon_header(&p_, &nickname, &species, &gender, &item))
+ return false;
+ }
+
+ for (int i = 0; i < PARTY_SIZE; i++)
+ {
+ struct Pokemon *pokemon = &trainer->pokemon[i];
+
+ // Parse first line.
+ while (match_empty_line(p)) {}
+ if (!parse_pokemon_header(p, &nickname, &species, &gender, &item))
+ {
+ if (i > 0 || ends_with(trainer->id, "_NONE"))
+ break;
+ if (!p->error)
+ set_parse_error(p, p->location, "expected nickname or species");
+ show_parse_error(p);
+
+ // TODO: Continue if a Pokemon starts before the next section.
+ // This is difficult to do, because 'Type: Null' is the name
+ // of a species, and so 'X: Y' is being parsed as a Pokemon
+ // header.
+ return false;
+ }
+ trainer->pokemon_n++;
+
+ pokemon->nickname = token_string(&nickname);
+ pokemon->species = token_string(&species);
+ if (!token_gender(p, &gender, &pokemon->gender))
+ any_error = !show_parse_error(p);
+ pokemon->item = token_string(&item);
+ pokemon->header_line = species.location.line;
+
+ for (int i = 0; gendered_species[i].species; i++)
+ {
+ if (is_literal_string(pokemon->species, gendered_species[i].species))
+ {
+ switch (pokemon->gender)
+ {
+ case GENDER_ANY:
+ break;
+ case GENDER_MALE:
+ pokemon->species = literal_string(gendered_species[i].male_species);
+ break;
+ case GENDER_FEMALE:
+ pokemon->species = literal_string(gendered_species[i].female_species);
+ break;
+ }
+ pokemon->gender = GENDER_ANY;
+ break;
+ }
+ }
+
+ for (int i = 0; itemed_species[i].species; i++)
+ {
+ if (is_literal_string(pokemon->species, itemed_species[i].form)
+ && is_empty_string(pokemon->item))
+ {
+ pokemon->species = literal_string(itemed_species[i].species);
+ pokemon->item = literal_string(itemed_species[i].item);
+ }
+ }
+
+ // Parse Pokemon attributes.
+ while (parse_attribute(p, &key, &value))
+ {
+ if (is_literal_token(&key, "EVs"))
+ {
+ if (pokemon->evs_line)
+ any_error = !set_show_parse_error(p, key.location, "duplicate 'EVs'");
+ pokemon->evs_line = value.location.line;
+ if (!token_stats(p, &value, &pokemon->evs, false))
+ any_error = !show_parse_error(p);
+ }
+ else if (is_literal_token(&key, "IVs"))
+ {
+ if (pokemon->ivs_line)
+ any_error = !set_show_parse_error(p, key.location, "duplicate 'IVs'");
+ pokemon->ivs_line = value.location.line;
+ pokemon->ivs = parsed->default_ivs;
+ if (!token_stats(p, &value, &pokemon->ivs, parsed->default_ivs_off))
+ any_error = !show_parse_error(p);
+ }
+ else if (is_literal_token(&key, "Ability"))
+ {
+ if (pokemon->ability_line)
+ any_error = !set_show_parse_error(p, key.location, "duplicate 'Ability'");
+ pokemon->ability_line = value.location.line;
+ pokemon->ability = token_string(&value);
+ }
+ else if (is_literal_token(&key, "Level"))
+ {
+ if (pokemon->level_line)
+ any_error = !set_show_parse_error(p, key.location, "duplicate 'Level'");
+ pokemon->level_line = value.location.line;
+ if (!token_int(p, &value, &pokemon->level))
+ any_error = !show_parse_error(p);
+ }
+ else if (is_literal_token(&key, "Ball"))
+ {
+ if (pokemon->ball_line)
+ any_error = !set_show_parse_error(p, key.location, "duplicate 'Ball'");
+ pokemon->ball_line = value.location.line;
+ pokemon->ball = token_string(&value);
+ }
+ else if (is_literal_token(&key, "Happiness"))
+ {
+ if (pokemon->friendship_line)
+ any_error = !set_show_parse_error(p, key.location, "duplicate 'Happiness'");
+ pokemon->friendship_line = value.location.line;
+ if (!token_int(p, &value, &pokemon->friendship))
+ any_error = !show_parse_error(p);
+ }
+ else if (is_literal_token(&key, "Nature"))
+ {
+ if (pokemon->nature_line)
+ any_error = !set_show_parse_error(p, value.location, "duplicate 'Nature'");
+ pokemon->nature_line = value.location.line;
+ pokemon->nature = token_string(&value);
+ }
+ else if (is_literal_token(&key, "Shiny"))
+ {
+ if (pokemon->shiny_line)
+ any_error = !set_show_parse_error(p, key.location, "duplicate 'Shiny'");
+ pokemon->shiny_line = value.location.line;
+ if (!token_bool(p, &value, &pokemon->shiny))
+ any_error = !show_parse_error(p);
+ }
+ else if (is_literal_token(&key, "Dynamax Level"))
+ {
+ if (pokemon->dynamax_level_line)
+ any_error = !set_show_parse_error(p, key.location, "duplicate 'Dynamax Level'");
+ pokemon->dynamax_level_line = value.location.line;
+ if (!token_int(p, &value, &pokemon->dynamax_level))
+ any_error = !show_parse_error(p);
+ }
+ else if (is_literal_token(&key, "Gigantamax"))
+ {
+ if (pokemon->gigantamax_factor_line)
+ any_error = !set_show_parse_error(p, key.location, "duplicate 'Gigantamax'");
+ pokemon->gigantamax_factor_line = value.location.line;
+ if (!token_bool(p, &value, &pokemon->gigantamax_factor))
+ any_error = !show_parse_error(p);
+ }
+ else if (is_literal_token(&key, "Tera Type"))
+ {
+ if (pokemon->tera_type_line)
+ any_error = !set_show_parse_error(p, key.location, "duplicate 'Tera Type'");
+ pokemon->tera_type_line = value.location.line;
+ pokemon->tera_type = token_string(&value);
+ }
+ else
+ {
+ any_error = !set_show_parse_error(p, key.location, "expected one of 'EVs', 'IVs', 'Ability', 'Level', 'Ball', 'Happiness', 'Nature', 'Shiny', 'Dynamax Level', 'Gigantamax', or 'Tera Type'");
+ }
+ }
+
+ if (!pokemon->level_line)
+ {
+ if (!parsed->default_level_off)
+ {
+ pokemon->level = parsed->default_level;
+ pokemon->level_line = p->location.line;
+ }
+ else
+ {
+ any_error = !set_show_parse_error(p, p->location, "expected 'Level' before moves");
+ }
+ }
+ if (!pokemon->ivs_line)
+ {
+ if (!parsed->default_ivs_off)
+ {
+ pokemon->ivs = parsed->default_ivs;
+ pokemon->ivs_line = p->location.line;
+ }
+ else
+ {
+ any_error = !set_show_parse_error(p, p->location, "expected 'IVs' before moves");
+ }
+ }
+
+ // Parse moves.
+ for (int j = 0; j < MAX_MON_MOVES; j++)
+ {
+ struct Token move;
+ if (!parse_pokemon_move(p, &move))
+ {
+ struct Parser p_ = *p;
+ if (match_eof(&p_) || match_empty_line(&p_))
+ break;
+ }
+ else
+ {
+ if (pokemon->moves_n == 0)
+ pokemon->move1_line = move.location.line;
+ pokemon->moves[pokemon->moves_n] = token_string(&move);
+ pokemon->moves_n++;
+ }
+ }
+
+ if (match_eof(p))
+ break;
+ if (!match_empty_line(p))
+ {
+ set_show_parse_error(p, p->location, "expected empty line");
+
+ // Continue if the line is the start of a new Pokemon.
+ struct Parser p_ = *p;
+ if (!parse_pokemon_header(&p_, &nickname, &species, &gender, &item))
+ return false;
+ }
+ }
+
+ return !any_error;
+}
+
+static void parse(struct Parser *p, struct Parsed *parsed)
+{
+ parsed->source = p->source;
+ int trainers_c = 256;
+ parsed->trainers = malloc(sizeof(*parsed->trainers) * trainers_c);
+ parsed->trainers_n = 0;
+ assert(parsed->trainers);
+ for (;;)
+ {
+ while (match_empty_line(p)) {}
+ if (!parse_pragma(p, parsed))
+ break;
+ }
+ for (;;)
+ {
+ if (parsed->trainers_n == trainers_c)
+ {
+ trainers_c *= 2;
+ struct Trainer *trainers_ = realloc(parsed->trainers, sizeof(*parsed->trainers) * trainers_c);
+ assert(trainers_);
+ parsed->trainers = trainers_;
+ }
+ struct Trainer *trainer = &parsed->trainers[parsed->trainers_n];
+ while (match_empty_line(p)) {}
+ if (match_eof(p))
+ break;
+ if (!parse_trainer(p, parsed, trainer))
+ {
+ struct Token t;
+ // Skip to the next trainer.
+ for (;;)
+ {
+ struct Parser p_ = *p;
+ if (match_eof(&p_) || parse_section(&p_, &t))
+ break;
+ skip_line(p);
+ }
+ }
+ else
+ {
+ parsed->trainers_n++;
+ }
+ }
+}
+
+static void fprint_string(FILE *f, struct String s)
+{
+ fprintf(f, "%.*s", s.string_n, s.string);
+}
+
+static void fprint_bool(FILE *f, bool b)
+{
+ fprintf(f, b ? "TRUE" : "FALSE");
+}
+
+static void fprint_stats(FILE *f, const char *macro, struct Stats stats)
+{
+ fprintf(f, "%s(%d, %d, %d, %d, %d, %d)", macro, stats.hp, stats.attack, stats.defense, stats.speed, stats.special_attack, stats.special_defense);
+}
+
+static bool is_constant(struct String s, const char *prefix)
+{
+ for (int i = 0;; i++)
+ {
+ if (i == s.string_n)
+ return false;
+ else if (prefix[i] == '\0')
+ return s.string[i] == '_';
+ else if (prefix[i] != s.string[i])
+ return false;
+ }
+}
+
+static void fprint_constant(FILE *f, const char *prefix, struct String s)
+{
+ if (!is_constant(s, prefix)) fprintf(f, "%s_", prefix);
+ if (s.string_n > 0)
+ {
+ for (int i = 0; i < s.string_n; i++)
+ {
+ unsigned char c = s.string[i];
+ if (('A' <= c && c <= 'Z') || ('0' <= c && c <= '9'))
+ fputc(c, f);
+ else if ('a' <= c && c <= 'z')
+ fputc(c - 'a' + 'A', f);
+ else
+ fputc('_', f);
+ }
+ }
+ else
+ {
+ fprintf(f, "NONE");
+ }
+}
+
+// This is a really stupid helper for 'fprint_species'.
+static bool is_utf8_character(struct String s, int *i, const unsigned char *utf8)
+{
+ for (int j = *i;; j++, utf8++)
+ {
+ if (*utf8 == '\0')
+ {
+ *i = j - 1; // '- 1' because of the '++' in 'fprint_species'.
+ return true;
+ }
+ else if (j == s.string_n || s.string[j] != *utf8)
+ {
+ return false;
+ }
+ }
+}
+
+static void fprint_species(FILE *f, const char *prefix, struct String s)
+{
+ if (!is_constant(s, prefix)) fprintf(f, "%s_", prefix);
+
+ if (s.string_n == 0)
+ {
+ fprintf(f, "NONE");
+ }
+ else
+ {
+ bool underscore = false;
+ static const unsigned char *male = (unsigned char *)u8"♂";
+ static const unsigned char *female = (unsigned char *)u8"♀";
+ static const unsigned char *e_diacritic = (unsigned char *)u8"é";
+ for (int i = 0; i < s.string_n; i++)
+ {
+ unsigned char c = s.string[i];
+ if (('A' <= c && c <= 'Z') || ('0' <= c && c <= '9'))
+ {
+ if (underscore)
+ fputc('_', f);
+ underscore = false;
+ fputc(c, f);
+ }
+ else if ('a' <= c && c <= 'z')
+ {
+ if (underscore)
+ fputc('_', f);
+ underscore = false;
+ fputc(c - 'a' + 'A', f);
+ }
+ else if (c == '\'' || c == '%')
+ {
+ // Do nothing.
+ }
+ else if (is_utf8_character(s, &i, male))
+ {
+ underscore = false;
+ fprintf(f, "_M");
+ }
+ else if (is_utf8_character(s, &i, female))
+ {
+ underscore = false;
+ fprintf(f, "_F");
+ }
+ else if (is_utf8_character(s, &i, e_diacritic))
+ {
+ if (underscore)
+ fputc('_', f);
+ underscore = false;
+ fputc('E', f);
+ }
+ else
+ {
+ underscore = true;
+ }
+ }
+ }
+}
+
+static void fprint_trainers(const char *output_path, FILE *f, struct Parsed *parsed)
+{
+ fprintf(f, "//\n");
+ fprintf(f, "// DO NOT MODIFY THIS FILE! It is auto-generated from %s\n", parsed->source->path);
+ fprintf(f, "//\n");
+ fprintf(f, "// If you want to modify this file set COMPETITIVE_PARTY_SYNTAX to FALSE\n");
+ fprintf(f, "// in include/config/general.h and remove this notice.\n");
+ fprintf(f, "// Use sed -i '/^#line/d' '%s' to remove #line markers.\n", output_path);
+ fprintf(f, "//\n");
+ fprintf(f, "\n");
+
+ fprintf(f, "#line 1 \"%s\"\n", parsed->source->path);
+ fprintf(f, "\n");
+
+ for (int i = 0; i < parsed->trainers_n; i++)
+ {
+ struct Trainer *trainer = &parsed->trainers[i];
+ fprintf(f, "#line %d\n", trainer->id_line);
+ fprintf(f, " [");
+ fprint_string(f, trainer->id);
+ fprintf(f, "] =\n");
+ fprintf(f, " {\n");
+
+ if (!is_empty_string(trainer->name))
+ {
+ fprintf(f, "#line %d\n", trainer->name_line);
+ fprintf(f, " .trainerName = _(\"");
+ fprint_string(f, trainer->name);
+ fprintf(f, "\"),\n");
+ }
+
+ if (!is_empty_string(trainer->class))
+ {
+ fprintf(f, "#line %d\n", trainer->class_line);
+ fprintf(f, " .trainerClass = ");
+ fprint_constant(f, "TRAINER_CLASS", trainer->class);
+ fprintf(f, ",\n");
+ }
+
+ if (!is_empty_string(trainer->pic))
+ {
+ fprintf(f, "#line %d\n", trainer->pic_line);
+ fprintf(f, " .trainerPic = ");
+ if (starts_with(trainer->id, "PARTNER_"))
+ fprint_constant(f, "TRAINER_BACK_PIC", trainer->pic);
+ else
+ fprint_constant(f, "TRAINER_PIC", trainer->pic);
+ fprintf(f, ",\n");
+ }
+
+ fprintf(f, " .encounterMusic_gender = \n");
+ if (trainer->gender == GENDER_FEMALE)
+ {
+ fprintf(f, "#line %d\n", trainer->gender_line);
+ fprintf(f, "F_TRAINER_FEMALE | \n");
+ }
+ if (!is_empty_string(trainer->encounter_music))
+ {
+ fprintf(f, "#line %d\n", trainer->encounter_music_line);
+ fprintf(f, " ");
+ fprint_constant(f, "TRAINER_ENCOUNTER_MUSIC", trainer->encounter_music);
+ }
+ else
+ {
+ fprintf(f, "0");
+ }
+ fprintf(f, ",\n");
+
+ if (trainer->items_n > 0)
+ {
+ fprintf(f, "#line %d\n", trainer->items_line);
+ fprintf(f, " .items = { ");
+ for (int i = 0; i < trainer->items_n; i++)
+ {
+ if (i > 0)
+ fprintf(f, ", ");
+ fprint_constant(f, "ITEM", trainer->items[i]);
+ }
+ fprintf(f, " },\n");
+ }
+
+ if (trainer->double_battle_line)
+ {
+ fprintf(f, "#line %d\n", trainer->double_battle_line);
+ fprintf(f, " .doubleBattle = ");
+ fprint_bool(f, trainer->double_battle);
+ fprintf(f, ",\n");
+ }
+
+ if (trainer->ai_flags_n > 0)
+ {
+ fprintf(f, "#line %d\n", trainer->ai_flags_line);
+ fprintf(f, " .aiFlags = ");
+ for (int i = 0; i < trainer->ai_flags_n; i++)
+ {
+ if (i > 0)
+ fprintf(f, " | ");
+ fprint_constant(f, "AI_FLAG", trainer->ai_flags[i]);
+ }
+ fprintf(f, ",\n");
+ }
+
+ if (!is_empty_string(trainer->mugshot))
+ {
+ fprintf(f, "#line %d\n", trainer->mugshot_line);
+ fprintf(f, " .mugshotEnabled = TRUE,\n");
+ fprintf(f, " .mugshotColor = ");
+ fprint_constant(f, "MUGSHOT_COLOR", trainer->mugshot);
+ fprintf(f, ",\n");
+ }
+
+ if (!is_empty_string(trainer->starting_status))
+ {
+ fprintf(f, "#line %d\n", trainer->starting_status_line);
+ fprintf(f, " .startingStatus = ");
+ fprint_constant(f, "STARTING_STATUS", trainer->starting_status);
+ fprintf(f, ",\n");
+ }
+
+ fprintf(f, " .partySize = %d,\n", trainer->pokemon_n);
+ fprintf(f, " .party = (const struct TrainerMon[])\n");
+ fprintf(f, " {\n");
+ for (int j = 0; j < trainer->pokemon_n; j++)
+ {
+ struct Pokemon *pokemon = &trainer->pokemon[j];
+ fprintf(f, " {\n");
+
+ if (!is_empty_string(pokemon->nickname))
+ {
+ fprintf(f, "#line %d\n", pokemon->header_line);
+ fprintf(f, " .nickname = COMPOUND_STRING(\"");
+ fprint_string(f, pokemon->nickname);
+ fprintf(f, "\"),\n");
+ }
+
+ fprintf(f, "#line %d\n", pokemon->header_line);
+ fprintf(f, " .species = ");
+ fprint_species(f, "SPECIES", pokemon->species);
+ fprintf(f, ",\n");
+
+ switch (pokemon->gender)
+ {
+ case GENDER_ANY:
+ fprintf(f, " .gender = TRAINER_MON_RANDOM_GENDER,\n");
+ break;
+ case GENDER_MALE:
+ fprintf(f, "#line %d\n", pokemon->header_line);
+ fprintf(f, " .gender = TRAINER_MON_MALE,\n");
+ break;
+ case GENDER_FEMALE:
+ fprintf(f, "#line %d\n", pokemon->header_line);
+ fprintf(f, " .gender = TRAINER_MON_FEMALE,\n");
+ break;
+ }
+
+ if (!is_empty_string(pokemon->item))
+ {
+ fprintf(f, "#line %d\n", pokemon->header_line);
+ fprintf(f, " .heldItem = ");
+ fprint_constant(f, "ITEM", pokemon->item);
+ fprintf(f, ",\n");
+ }
+
+ if (pokemon->evs_line)
+ {
+ fprintf(f, "#line %d\n", pokemon->evs_line);
+ fprintf(f, " .ev = ");
+ fprint_stats(f, "TRAINER_PARTY_EVS", pokemon->evs);
+ fprintf(f, ",\n");
+ }
+
+ if (pokemon->ivs_line)
+ {
+ fprintf(f, "#line %d\n", pokemon->ivs_line);
+ fprintf(f, " .iv = ");
+ fprint_stats(f, "TRAINER_PARTY_IVS", pokemon->ivs);
+ fprintf(f, ",\n");
+ }
+
+ if (pokemon->ability_line)
+ {
+ fprintf(f, "#line %d\n", pokemon->ability_line);
+ fprintf(f, " .ability = ");
+ fprint_constant(f, "ABILITY", pokemon->ability);
+ fprintf(f, ",\n");
+ }
+
+ if (pokemon->level_line)
+ {
+ fprintf(f, "#line %d\n", pokemon->level_line);
+ fprintf(f, " .lvl = %d,\n", pokemon->level);
+ }
+
+ if (pokemon->ball_line)
+ {
+ fprintf(f, "#line %d\n", pokemon->ball_line);
+ fprintf(f, " .ball = ");
+ fprint_constant(f, "ITEM", pokemon->ball);
+ fprintf(f, ",\n");
+ }
+
+ if (pokemon->friendship_line)
+ {
+ fprintf(f, "#line %d\n", pokemon->friendship_line);
+ fprintf(f, " .friendship = %d,\n", pokemon->friendship);
+ }
+
+ if (pokemon->nature_line)
+ {
+ fprintf(f, "#line %d\n", pokemon->nature_line);
+ fprintf(f, " .nature = ");
+ fprint_constant(f, "NATURE", pokemon->nature);
+ fprintf(f, ",\n");
+ }
+ else
+ {
+ fprintf(f, " .nature = NATURE_HARDY,\n");
+ }
+
+ if (pokemon->shiny_line)
+ {
+ fprintf(f, "#line %d\n", pokemon->shiny_line);
+ fprintf(f, " .isShiny = ");
+ fprint_bool(f, pokemon->shiny);
+ fprintf(f, ",\n");
+ }
+
+ if (pokemon->dynamax_level_line)
+ {
+ fprintf(f, "#line %d\n", pokemon->dynamax_level_line);
+ fprintf(f, " .dynamaxLevel = %d,\n", pokemon->dynamax_level);
+ }
+ else
+ {
+ fprintf(f, " .dynamaxLevel = MAX_DYNAMAX_LEVEL,\n");
+ }
+
+ if (pokemon->gigantamax_factor_line)
+ {
+ fprintf(f, "#line %d\n", pokemon->gigantamax_factor_line);
+ fprintf(f, " .gigantamaxFactor = ");
+ fprint_bool(f, pokemon->gigantamax_factor);
+ fprintf(f, ",\n");
+ }
+
+ if (pokemon->dynamax_level_line || pokemon->gigantamax_factor_line)
+ {
+ fprintf(f, " .shouldUseDynamax = TRUE,\n");
+ }
+ else if (pokemon->tera_type_line)
+ {
+ fprintf(f, "#line %d\n", pokemon->tera_type_line);
+ fprintf(f, " .teraType = ");
+ fprint_constant(f, "TYPE", pokemon->tera_type);
+ fprintf(f, ",\n");
+ }
+
+ if (pokemon->moves_n > 0)
+ {
+ fprintf(f, " .moves = {\n");
+ fprintf(f, "#line %d\n", pokemon->move1_line);
+ for (int k = 0; k < pokemon->moves_n; k++)
+ {
+ fprintf(f, " ");
+ fprint_constant(f, "MOVE", pokemon->moves[k]);
+ fprintf(f, ",\n");
+ }
+ fprintf(f, " },\n");
+ }
+
+ fprintf(f, " },\n");
+ }
+ fprintf(f, " },\n");
+ fprintf(f, " },\n");
+ }
+}
+
+static void usage(FILE *file, char *argv0)
+{
+ fprintf(file, "Usage: %s -o